diff --git a/docs/assets/example/webav.js b/docs/assets/example/webav.js index 04f9bcea0..87babeb79 100644 --- a/docs/assets/example/webav.js +++ b/docs/assets/example/webav.js @@ -4,7 +4,7 @@ var art = new Artplayer({ container: '.artplayer-app', - url: '/assets/sample/frag_bunny.mp4', + url: '/assets/sample/bbb-video.mp4', volume: 0.5, autoplay: false, autoSize: false, @@ -18,6 +18,13 @@ var art = new Artplayer({ fullscreenWeb: true, miniProgressBar: true, autoPlayback: true, + thumbnails: { + url: '/assets/sample/bbb-sprite.jpg', + number: 121, + column: 11, + width: 128, + height: 72, + }, proxy: artplayerProxyWebAV({ // }), diff --git a/docs/compiled/artplayer-proxy-webav.js b/docs/compiled/artplayer-proxy-webav.js new file mode 100644 index 000000000..a9ed7c4a7 --- /dev/null +++ b/docs/compiled/artplayer-proxy-webav.js @@ -0,0 +1,8 @@ + +/*! + * artplayer-proxy-webav.js v1.0.0 + * Github: https://github.com/zhw2590582/ArtPlayer + * (c) 2017-2024 Harvey Zack + * Released under the MIT License. + */ +!function(t,e,r,s,n){var a="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},o="function"==typeof a[s]&&a[s],h=o.cache||{},l="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function u(e,r){if(!h[e]){if(!t[e]){var n="function"==typeof a[s]&&a[s];if(!r&&n)return n(e,!0);if(o)return o(e,!0);if(l&&"string"==typeof e)return l(e);var d=Error("Cannot find module '"+e+"'");throw d.code="MODULE_NOT_FOUND",d}p.resolve=function(r){var s=t[e][1][r];return null!=s?s:r},p.cache={};var f=h[e]=new u.Module(e);t[e][0].call(f.exports,p,f,f.exports,this)}return h[e].exports;function p(t){var e=p.resolve(t);return!1===e?{}:u(e)}}u.isParcelRequire=!0,u.Module=function(t){this.id=t,this.bundle=u,this.exports={}},u.modules=t,u.cache=h,u.parent=o,u.register=function(e,r){t[e]=[function(t,e){e.exports=r},{}]},Object.defineProperty(u,"root",{get:function(){return a[s]}}),a[s]=u;for(var d=0;da);var n=t("@webav/av-cliper");function a(){return t=>{let e,r;let{option:s,constructor:a}=t,{createElement:o,def:h}=a.utils,l=o("canvas"),u=l.getContext("2d"),d=null,f=null,p=null,c=null,m=0,g={playing:!1,duration:0,videoWidth:0,videoHeight:0,currentTime:0,playbackRate:1,paused:!0,ended:!1,readyState:0,buffered:0,muted:s.muted,volume:s.volume,autoplay:s.autoplay};function y(){p&&(clearInterval(p),p=null),f&&(f.stop(),f=null)}function _(){if(r){let t=g.muted?0:g.volume;r.gain.setValueAtTime(t,e.currentTime)}}async function b(){e||(r=(e=new AudioContext).createGain()).connect(e.destination);let s=1e6*g.currentTime,n=0,a=!0,o=performance.now();async function h(){if(!g.playing)return;let h=performance.now(),l=h-o;o=h,null!==c?(s=1e6*c,c=null,a=!0):s+=1e3*l*g.playbackRate,g.currentTime=s/1e6;let{state:p,video:m,audio:_}=await d.tick(Math.round(s));if(t.emit("video:timeupdate",{type:"timeupdate"}),"done"===p){y(),g.ended=!0,g.playing=!1,g.paused=!0,t.emit("video:ended",{type:"ended"});return}if(m&&"success"===p&&(u.clearRect(0,0,g.videoWidth,g.videoHeight),u.drawImage(m,0,0,g.videoWidth,g.videoHeight),m.close()),a)a=!1;else if(_?.[0]?.length){let t=e.createBuffer(2,_[0].length,48e3);t.copyToChannel(_[0],0),t.copyToChannel(_[1],1),(f=e.createBufferSource()).buffer=t,f.connect(r),f.playbackRate.setValueAtTime(g.playbackRate,e.currentTime),n=Math.max(e.currentTime,n),f.start(n),n+=t.duration/g.playbackRate}}y(),_(),g.playing=!0,g.paused=!1,p=setInterval(h,1e3/60)}async function w(t){let{video:e}=await d.tick(1e6*t);e&&(u.clearRect(0,0,l.width,l.height),u.drawImage(e,0,0,l.width,l.height),e.close())}function v(){let e=t.template?.$player;if(!e||s.autoSize)return;let r=l.videoWidth/l.videoHeight,n=e.clientWidth,a=e.clientHeight,o=0,h=0;n/a>r?o=(n-a*r)/2:h=(a-n/r)/2,Object.assign(l.style,{padding:`${h}px ${o}px`})}async function S(){if(!await (0,n.Combinator).isSupported())throw t.notice.show="WebAV is not supported",Error("WebAV is not supported");y(),Object.assign(g,{playing:!1,duration:0,videoWidth:0,videoHeight:0,currentTime:0,playbackRate:1,paused:!0,ended:!1,readyState:0,buffered:0,muted:s.muted,volume:s.volume,autoplay:s.autoplay}),d&&(d.destroy(),t.emit("video:abort",{type:"abort"}),t.emit("video:emptied",{type:"emptied"}));try{await Promise.resolve(),t.emit("video:loadstart",{type:"loadstart"});let e=await fetch(s.url);if(!e.body)throw Error("No response body");d=new n.MP4Clip(e.body)}catch(e){throw t.emit("video:error",e),e}let e=await d.ready;Object.assign(g,{readyState:4,duration:Math.round(e.duration/1e6),videoWidth:e.width,videoHeight:e.height}),l.width=g.videoWidth,l.height=g.videoHeight,await w(.1),v(),t.emit("video:loadedmetadata",{type:"loadedmetadata"}),t.emit("video:durationchange",{type:"durationchange"}),t.emit("video:loadeddata",{type:"loadeddata"}),t.emit("video:canplay",{type:"canplay"}),t.emit("video:canplaythrough",{type:"canplaythrough"})}return h(l,"textTracks",{get:()=>[]}),h(l,"duration",{get:()=>g.duration}),h(l,"videoWidth",{get:()=>g.videoWidth}),h(l,"videoHeight",{get:()=>g.videoHeight}),h(l,"volume",{get:()=>g.volume,set:e=>{g.volume=Math.max(0,Math.min(1,e)),_(),t.emit("video:volumechange",{type:"volumechange"})}}),h(l,"currentTime",{get:()=>g.currentTime,set:e=>{let r=Math.max(0,Math.min(e,g.duration)),s=performance.now();s-m>16&&(m=s,c=r,g.currentTime=r,g.playing||w(r),t.emit("video:timeupdate",{type:"timeupdate"}))}}),h(l,"autoplay",{get:()=>g.autoplay,set:t=>{g.autoplay=t,t&&g.readyState>=4&&l.play()}}),h(l,"src",{get:()=>s.url,set:t=>{s.url=t,S().then(()=>{s.autoplay&&l.play()})}}),h(l,"playbackRate",{get:()=>g.playbackRate,set:r=>{g.playbackRate=Math.max(.25,Math.min(2,r)),f&&f.playbackRate.setValueAtTime(g.playbackRate,e.currentTime),t.emit("video:ratechange",{type:"ratechange"})}}),h(l,"playing",{get:()=>g.playing}),h(l,"paused",{get:()=>g.paused}),h(l,"ended",{get:()=>g.ended}),h(l,"readyState",{get:()=>g.readyState}),h(l,"muted",{get:()=>g.muted,set:e=>{g.muted=e,_(),t.emit("video:volumechange",{type:"volumechange"})}}),h(l,"buffered",{get:()=>({start:()=>0,end:()=>g.buffered,length:1})}),h(l,"play",{value:async()=>{await b(),t.emit("video:play",{type:"play"}),t.emit("video:playing",{type:"playing"})}}),h(l,"pause",{value:()=>{y(),g.playing=!1,g.paused=!0,t.emit("video:pause",{type:"pause"})}}),t.on("destroy",()=>{y(),d&&d.destroy()}),t.on("resize",v),l}}"undefined"!=typeof window&&(window.artplayerProxyWebAV=a)},{"@webav/av-cliper":"b01Rz","@parcel/transformer-js/src/esmodule-helpers.js":"9pCYc"}],b01Rz:[function(t,e,r){var s,n,a,o,h,l,u,d,f,p,c,m,g,y,_,b,w,v,S,E,U,x,T,A,C,I,B,k,F,R,P,z,L,D,M,O,N,G,Y,W,V,H,X,j,Z,$,K,q,Q,J,tt,te,ti,tr,ts,tn,ta,to,th,tl,tu,td,tf,tp,tc,tm,tg,ty,t_,tb,tw,tv,tS,tE,tU,tx,tT,tA,tC,tI,tB,tk,tF,tR,tP,tz,tL,tD,tM,tO,tN,tG,tY,tW,tV,tH,tX,tj,tZ,t$,tK,tq,tQ,tJ,t0,t1,t2,t3,t6,t8,t4,t5,t9,t7,et,ee,ei,er,es,en,ea,eo,eh,el,eu,ed=t("@parcel/transformer-js/src/esmodule-helpers.js");ed.defineInteropFlag(r),ed.export(r,"AudioClip",()=>iX),ed.export(r,"Combinator",()=>rB),ed.export(r,"DEFAULT_AUDIO_CONF",()=>iC),ed.export(r,"EmbedSubtitlesClip",()=>iQ),ed.export(r,"EventTool",()=>i0),ed.export(r,"ImgClip",()=>iV),ed.export(r,"Log",()=>e5),ed.export(r,"MP4Clip",()=>iz),ed.export(r,"MediaStreamClip",()=>iK),ed.export(r,"OffscreenSprite",()=>rT),ed.export(r,"Rect",()=>rE),ed.export(r,"VisibleSprite",()=>rA),ed.export(r,"adjustAudioDataVolume",()=>iy),ed.export(r,"audioResample",()=>iw),ed.export(r,"autoReadStream",()=>iE),ed.export(r,"concatAudioClip",()=>ij),ed.export(r,"concatFloat32Array",()=>ip),ed.export(r,"concatPCMFragments",()=>ic),ed.export(r,"createChromakey",()=>rv),ed.export(r,"createEl",()=>eE),ed.export(r,"createHLSLoader",()=>rm),ed.export(r,"decodeImg",()=>i_),ed.export(r,"extractPCM4AudioBuffer",()=>ig),ed.export(r,"extractPCM4AudioData",()=>im),ed.export(r,"fastConcatMP4",()=>rt),ed.export(r,"file2stream",()=>i9),ed.export(r,"fixFMP4Duration",()=>ri),ed.export(r,"mixinMP4AndAudio",()=>rr),ed.export(r,"mixinPCM",()=>ib),ed.export(r,"recodemux",()=>i4),ed.export(r,"renderTxt2Img",()=>eU),ed.export(r,"renderTxt2ImgBitmap",()=>ex),ed.export(r,"ringSliceFloat32Array",()=>iS),ed.export(r,"workerTimer",()=>is);var ef=arguments[3],ep=t("718a311db185ef08").Buffer,ec=Object.defineProperty,em=t=>{throw TypeError(t)},eg=(t,e,r)=>e in t?ec(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,ey=(t,e,r)=>eg(t,"symbol"!=typeof e?e+"":e,r),e_=(t,e,r)=>e.has(t)||em("Cannot "+r),eb=(t,e,r)=>(e_(t,e,"read from private field"),r?r.call(t):e.get(t)),ew=(t,e,r)=>e.has(t)?em("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),ev=(t,e,r,s)=>(e_(t,e,"write to private field"),s?s.call(t,r):e.set(t,r),r),eS=(t,e,r)=>(e_(t,e,"access private method"),r);function eE(t){return document.createElement(t)}function eU(t,e){let r=eE("pre");r.style.cssText=`margin: 0; ${e}; visibility: hidden; position: fixed;`,r.textContent=t,document.body.appendChild(r);let{width:s,height:n}=r.getBoundingClientRect();r.remove(),r.style.visibility="visible";let a=new Image;a.width=s,a.height=n;let o=`
${r.outerHTML}
`.replace(/\t/g,"").replace(/#/g,"%23");return a.src=`data:image/svg+xml;charset=utf-8,${o}`,a}async function ex(t,e){let r=eU(t,e);await new Promise(t=>{r.onload=t});let s=new OffscreenCanvas(r.width,r.height),n=s.getContext("2d");return null==n||n.drawImage(r,0,0,r.width,r.height),await createImageBitmap(s)}var eT=t=>{throw TypeError(t)},eA=(t,e,r)=>e.has(t)||eT("Cannot "+r),eC=(t,e,r)=>(eA(t,e,"read from private field"),r?r.call(t):e.get(t)),eI=(t,e,r)=>e.has(t)?eT("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),eB=(t,e,r,s)=>(eA(t,e,"write to private field"),e.set(t,r),r);let ek="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHUobil7aWYobj09PSIvIilyZXR1cm57cGFyZW50Om51bGwsbmFtZToiIn07Y29uc3QgZT1uLnNwbGl0KCIvIikuZmlsdGVyKGk9PmkubGVuZ3RoPjApO2lmKGUubGVuZ3RoPT09MCl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoIik7Y29uc3QgYT1lW2UubGVuZ3RoLTFdLHI9Ii8iK2Uuc2xpY2UoMCwtMSkuam9pbigiLyIpO3JldHVybntuYW1lOmEscGFyZW50OnJ9fWFzeW5jIGZ1bmN0aW9uIHcobixlKXtjb25zdHtwYXJlbnQ6YSxuYW1lOnJ9PXUobik7aWYoYT09bnVsbClyZXR1cm4gYXdhaXQgbmF2aWdhdG9yLnN0b3JhZ2UuZ2V0RGlyZWN0b3J5KCk7Y29uc3QgaT1hLnNwbGl0KCIvIikuZmlsdGVyKHQ9PnQubGVuZ3RoPjApO3RyeXtsZXQgdD1hd2FpdCBuYXZpZ2F0b3Iuc3RvcmFnZS5nZXREaXJlY3RvcnkoKTtmb3IoY29uc3QgcyBvZiBpKXQ9YXdhaXQgdC5nZXREaXJlY3RvcnlIYW5kbGUocyx7Y3JlYXRlOmUuY3JlYXRlfSk7aWYoZS5pc0ZpbGUpcmV0dXJuIGF3YWl0IHQuZ2V0RmlsZUhhbmRsZShyLHtjcmVhdGU6ZS5jcmVhdGV9KX1jYXRjaCh0KXtpZih0Lm5hbWU9PT0iTm90Rm91bmRFcnJvciIpcmV0dXJuIG51bGw7dGhyb3cgdH19Y29uc3QgZj17fTtzZWxmLm9ubWVzc2FnZT1hc3luYyBuPT57dmFyIGk7Y29uc3R7ZXZ0VHlwZTplLGFyZ3M6YX09bi5kYXRhO2xldCByPWZbYS5maWxlSWRdO3RyeXtsZXQgdDtjb25zdCBzPVtdO2lmKGU9PT0icmVnaXN0ZXIiKXtjb25zdCBsPWF3YWl0IHcoYS5maWxlUGF0aCx7Y3JlYXRlOiEwLGlzRmlsZTohMH0pO2lmKGw9PW51bGwpdGhyb3cgRXJyb3IoYG5vdCBmb3VuZCBmaWxlOiAke2EuZmlsZUlkfWApO3I9YXdhaXQgbC5jcmVhdGVTeW5jQWNjZXNzSGFuZGxlKHttb2RlOmEubW9kZX0pLGZbYS5maWxlSWRdPXJ9ZWxzZSBpZihlPT09ImNsb3NlIilhd2FpdCByLmNsb3NlKCksZGVsZXRlIGZbYS5maWxlSWRdO2Vsc2UgaWYoZT09PSJ0cnVuY2F0ZSIpYXdhaXQgci50cnVuY2F0ZShhLm5ld1NpemUpO2Vsc2UgaWYoZT09PSJ3cml0ZSIpe2NvbnN0e2RhdGE6bCxvcHRzOm99PW4uZGF0YS5hcmdzO3Q9YXdhaXQgci53cml0ZShsLG8pfWVsc2UgaWYoZT09PSJyZWFkIil7Y29uc3R7b2Zmc2V0Omwsc2l6ZTpvfT1uLmRhdGEuYXJncyxnPW5ldyBVaW50OEFycmF5KG8pLGQ9YXdhaXQgci5yZWFkKGcse2F0Omx9KSxjPWcuYnVmZmVyO3Q9ZD09PW8/YzooKGk9Yy50cmFuc2Zlcik9PW51bGw/dm9pZCAwOmkuY2FsbChjLGQpKT8/Yy5zbGljZSgwLGQpLHMucHVzaCh0KX1lbHNlIGU9PT0iZ2V0U2l6ZSI/dD1hd2FpdCByLmdldFNpemUoKTplPT09ImZsdXNoIiYmYXdhaXQgci5mbHVzaCgpO3NlbGYucG9zdE1lc3NhZ2Uoe2V2dFR5cGU6ImNhbGxiYWNrIixjYklkOm4uZGF0YS5jYklkLHJldHVyblZhbDp0fSxzKX1jYXRjaCh0KXtjb25zdCBzPXQ7c2VsZi5wb3N0TWVzc2FnZSh7ZXZ0VHlwZToidGhyb3dFcnJvciIsY2JJZDpuLmRhdGEuY2JJZCxlcnJNc2c6cy5uYW1lKyI6ICIrcy5tZXNzYWdlK2AKYCtKU09OLnN0cmluZ2lmeShuLmRhdGEpfSl9fX0pKCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZnMtd29ya2VyLUY0UldscWNfLmpzLm1hcAo=",eF="u">typeof self&&self.Blob&&new Blob([Uint8Array.from(atob(ek),t=>t.charCodeAt(0))],{type:"text/javascript;charset=utf-8"});function eR(t){let e;try{if(!(e=eF&&(self.URL||self.webkitURL).createObjectURL(eF)))throw"";let r=new Worker(e,{name:null==t?void 0:t.name});return r.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(e)}),r}catch{return new Worker("data:text/javascript;base64,"+ek,{name:null==t?void 0:t.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}async function eP(t,e,r){let s=function(){if(ez.length<3){let t=function(){let t=new eR,e=0,r={};return t.onmessage=({data:t})=>{var e,s;"callback"===t.evtType?null==(e=r[t.cbId])||e.resolve(t.returnVal):"throwError"===t.evtType&&(null==(s=r[t.cbId])||s.reject(Error(t.errMsg))),delete r[t.cbId]},async function(s,n,a=[]){e+=1;let o=new Promise((t,s)=>{r[e]={resolve:t,reject:s}});return t.postMessage({cbId:e,evtType:s,args:n},a),o}}();return ez.push(t),t}{let t=ez[eL];return eL=(eL+1)%ez.length,t}}();return await s("register",{fileId:t,filePath:e,mode:r}),{read:async(e,r)=>await s("read",{fileId:t,offset:e,size:r}),write:async(e,r)=>await s("write",{fileId:t,data:e,opts:r},[ArrayBuffer.isView(e)?e.buffer:e]),close:async()=>await s("close",{fileId:t}),truncate:async e=>await s("truncate",{fileId:t,newSize:e}),getSize:async()=>await s("getSize",{fileId:t}),flush:async()=>await s("flush",{fileId:t})}}let ez=[],eL=0;function eD(t){if("/"===t)return{parent:null,name:""};let e=t.split("/").filter(t=>t.length>0);if(0===e.length)throw Error("Invalid path");return{name:e[e.length-1],parent:"/"+e.slice(0,-1).join("/")}}async function eM(t,e){let{parent:r,name:s}=eD(t);if(null==r)return await navigator.storage.getDirectory();let n=r.split("/").filter(t=>t.length>0);try{let t=await navigator.storage.getDirectory();for(let r of n)t=await t.getDirectoryHandle(r,{create:e.create});return e.isFile?await t.getFileHandle(s,{create:e.create}):await t.getDirectoryHandle(s,{create:e.create})}catch(t){if("NotFoundError"===t.name)return null;throw t}}async function eO(t){let{parent:e,name:r}=eD(t);if(null==e){let t=await navigator.storage.getDirectory();for await(let e of t.keys())await t.removeEntry(e,{recursive:!0});return}let s=await eM(e,{create:!1,isFile:!1});null!=s&&await s.removeEntry(r,{recursive:!0})}function eN(t,e){return`${t}/${e}`.replace("//","/")}function eG(t){return new eY(t)}class eY{constructor(t){eI(this,g),eI(this,y),eI(this,_),eB(this,g,t);let{parent:e,name:r}=eD(t);eB(this,y,r),eB(this,_,e)}get kind(){return"dir"}get name(){return eC(this,y)}get path(){return eC(this,g)}get parent(){return null==eC(this,_)?null:eG(eC(this,_))}async create(){return await eM(eC(this,g),{create:!0,isFile:!1}),eG(eC(this,g))}async exists(){return await eM(eC(this,g),{create:!1,isFile:!1}) instanceof FileSystemDirectoryHandle}async remove(){for(let t of(await this.children()))try{await t.remove()}catch(t){console.warn(t)}try{await eO(eC(this,g))}catch(t){console.warn(t)}}async children(){let t=await eM(eC(this,g),{create:!1,isFile:!1});if(null==t)return[];let e=[];for await(let r of t.values())e.push(("file"===r.kind?eV:eG)(eN(eC(this,g),r.name)));return e}async copyTo(t){if(!await this.exists())throw Error(`dir ${this.path} not exists`);let e=await t.exists()?eG(eN(t.path,this.name)):t;return await e.create(),await Promise.all((await this.children()).map(t=>t.copyTo(e))),e}async moveTo(t){let e=await this.copyTo(t);return await this.remove(),e}}g=/* @__PURE__ */new WeakMap,y=/* @__PURE__ */new WeakMap,_=/* @__PURE__ */new WeakMap;let eW=/* @__PURE__ */new Map;function eV(t,e="rw"){if("rw"===e){let r=eW.get(t)??new e$(t,e);return eW.set(t,r),r}return new e$(t,e)}async function eH(t,e,r={overwrite:!0}){if(e instanceof e$){await eH(t,await e.stream(),r);return}let s=await (t instanceof e$?t:eV(t,"rw")).createWriter();try{if(r.overwrite&&await s.truncate(0),e instanceof ReadableStream){let t=e.getReader();for(;;){let{done:e,value:r}=await t.read();if(e)break;await s.write(r)}}else await s.write(e)}catch(t){throw t}finally{await s.close()}}let eX=0,ej=()=>++eX,eZ=class t{constructor(t,e){eI(this,b),eI(this,w),eI(this,v),eI(this,S),eI(this,E),eI(this,U,0),eI(this,x,/* @__PURE__ */(()=>{let t=null;return()=>(eB(this,U,eC(this,U)+1),t??(t=new Promise(async(e,r)=>{try{let r=await eP(eC(this,E),eC(this,b),eC(this,S));e([r,async()=>{eB(this,U,eC(this,U)-1),eC(this,U)>0||(t=null,await r.close())}])}catch(t){r(t)}})))})()),eI(this,T,!1),eB(this,E,ej()),eB(this,b,t),eB(this,S,{r:"read-only",rw:"readwrite","rw-unsafe":"readwrite-unsafe"}[e]);let{parent:r,name:s}=eD(t);eB(this,v,s),eB(this,w,r)}get kind(){return"file"}get path(){return eC(this,b)}get name(){return eC(this,v)}get parent(){return null==eC(this,w)?null:eG(eC(this,w))}async createWriter(){if("read-only"===eC(this,S))throw Error("file is read-only");if(eC(this,T))throw Error("Other writer have not been closed");eB(this,T,!0);let t=new TextEncoder,[e,r]=await eC(this,x).call(this),s=await e.getSize(),n=!1;return{write:async(r,a={})=>{if(n)throw Error("Writer is closed");let o="string"==typeof r?t.encode(r):r,h=a.at??s;return s=h+o.byteLength,await e.write(o,{at:h})},truncate:async t=>{if(n)throw Error("Writer is closed");await e.truncate(t),s>t&&(s=t)},flush:async()=>{if(n)throw Error("Writer is closed");await e.flush()},close:async()=>{if(n)throw Error("Writer is closed");n=!0,eB(this,T,!1),await r()}}}async createReader(){let[t,e]=await eC(this,x).call(this),r=!1,s=0;return{read:async(e,n={})=>{if(r)throw Error("Reader is closed");let a=n.at??s,o=await t.read(a,e);return s=a+o.byteLength,o},getSize:async()=>{if(r)throw Error("Reader is closed");return await t.getSize()},close:async()=>{r||(r=!0,await e())}}}async text(){return new TextDecoder().decode(await this.arrayBuffer())}async arrayBuffer(){let t=await eM(eC(this,b),{create:!1,isFile:!0});return null==t?new ArrayBuffer(0):(await t.getFile()).arrayBuffer()}async stream(){let t=await this.getOriginFile();return null==t?new ReadableStream({pull:t=>{t.close()}}):t.stream()}async getOriginFile(){var t;return null==(t=await eM(eC(this,b),{create:!1,isFile:!0}))?void 0:t.getFile()}async getSize(){let t=await eM(eC(this,b),{create:!1,isFile:!0});return null==t?0:(await t.getFile()).size}async exists(){return await eM(eC(this,b),{create:!1,isFile:!0}) instanceof FileSystemFileHandle}async remove(){if(eC(this,U))throw Error("exists unclosed reader/writer");await eO(eC(this,b))}async copyTo(e){if(!await this.exists())throw Error(`file ${this.path} not exists`);if(e instanceof t)return eV(e.path)===this?this:(await eH(e.path,this),eV(e.path));if(e instanceof eY)return await this.copyTo(eV(eN(e.path,this.name)));throw Error("Illegal target type")}async moveTo(t){let e=await this.copyTo(t);return await this.remove(),e}};b=/* @__PURE__ */new WeakMap,w=/* @__PURE__ */new WeakMap,v=/* @__PURE__ */new WeakMap,S=/* @__PURE__ */new WeakMap,E=/* @__PURE__ */new WeakMap,U=/* @__PURE__ */new WeakMap,x=/* @__PURE__ */new WeakMap,T=/* @__PURE__ */new WeakMap;let e$=eZ,eK="/.opfs-tools-temp-dir";async function eq(t){try{if("file"===t.kind){if(!await t.exists())return!0;let e=await t.createWriter();await e.truncate(0),await e.close(),await t.remove()}else await t.remove();return!0}catch(t){return console.warn(t),!1}}let eQ=[],eJ=!1;async function e0(){if(null==globalThis.localStorage)return;let t="OPFS_TOOLS_EXPIRES_TMP_FILES";eJ||(eJ=!0,globalThis.addEventListener("unload",()=>{0!==eQ.length&&localStorage.setItem(t,`${localStorage.getItem(t)??""},${eQ.join(",")}`)}));let e=localStorage.getItem(t)??"";for(let t of e.split(","))0!==t.length&&await eq(eV(`${eK}/${t}`))&&(e=e.replace(t,""));localStorage.setItem(t,e.replace(/,{2,}/g,","))}function e1(){let t=`${Math.random().toString().slice(2)}-${Date.now()}`;return eQ.push(t),eV(`${eK}/${t}`)}!async function(){var t;!0===globalThis.__opfs_tools_tmpfile_init__||(globalThis.__opfs_tools_tmpfile_init__=!0,null==globalThis.FileSystemDirectoryHandle||null==globalThis.FileSystemFileHandle||(null==(t=globalThis.navigator)?void 0:t.storage.getDirectory)==null||(setInterval(async()=>{for(let t of(await eG(eK).children())){let e=/^\d+-(\d+)$/.exec(t.name);(null==e||Date.now()-Number(e[1])>2592e5)&&await eq(t)}},6e4),await e0()))}();let e2=1,e3=e1(),e6=null,e8=["debug","info","warn","error"].reduce((t,e,r)=>Object.assign(t,{[e]:(...t)=>{e2<=r&&(console[e](...t),null==e6||e6.write(`[${e}][${function(){let t=/* @__PURE__ */new Date;return`${t.getHours()}:${t.getMinutes()}:${t.getSeconds()}.${t.getMilliseconds()}`}()}] ${t.map(t=>t instanceof Error?String(t):"object"==typeof t?JSON.stringify(t,(t,e)=>e instanceof Error?String(e):e):String(t)).join(" ")} `))}}),{}),e4=/* @__PURE__ */new Map,e5={setLogLevel:t=>{e2=e4.get(t)??1},...e8,create:t=>Object.fromEntries(Object.entries(e8).map(([e,r])=>[e,(...e)=>r(t,...e)])),dump:async()=>(await e7,await (null==e6?void 0:e6.flush()),await e3.text())};async function e9(){try{e6=await e3.createWriter(),e5.info(navigator.userAgent),e5.info("date: "+/* @__PURE__ */new Date().toLocaleDateString())}catch(t){if(!(t instanceof Error))throw t;if(t.message.includes("createSyncAccessHandle is not a function"))console.warn(t);else throw t}}e4.set(e5.debug,0),e4.set(e5.info,1),e4.set(e5.warn,2),e4.set(e5.error,3);let e7=null==globalThis.navigator?null:e9(),it=()=>{let t;self.onmessage=e=>{"start"===e.data.event&&(self.clearInterval(t),t=self.setInterval(()=>{self.postMessage({})},16.6)),"stop"===e.data.event&&self.clearInterval(t)}},ie=/* @__PURE__ */new Map,ii=1,ir=null;null!=globalThis.Worker&&((ir=(()=>{let t=new Blob([`(${it.toString()})()`]);return new Worker(URL.createObjectURL(t))})()).onmessage=()=>{for(let[t,e]of(ii+=1,ie))if(ii%t==0)for(let t of e)t()});let is=(t,e)=>{let r=Math.round(e/16.6),s=ie.get(r)??/* @__PURE__ */new Set;return s.add(t),ie.set(r,s),1===ie.size&&1===s.size&&(null==ir||ir.postMessage({event:"start"})),()=>{s.delete(t),0===s.size&&ie.delete(r),0===ie.size&&(ii=0,null==ir||ir.postMessage({event:"stop"}))}};class ia{constructor(t,e,r){var s;this.length_=t,this.scaleFactor_=(t-1)/e,this.interpolate=this.cubic,"point"===r.method?this.interpolate=this.point:"linear"===r.method?this.interpolate=this.linear:"sinc"===r.method&&(this.interpolate=this.sinc),this.tangentFactor_=1-Math.max(0,Math.min(1,r.tension||0)),this.sincFilterSize_=r.sincFilterSize||1,this.kernel_=(s=r.sincWindow||io,function(t){return(0===t?1:Math.sin(Math.PI*t)/(Math.PI*t))*s(t)})}point(t,e){return this.getClippedInput_(Math.round(this.scaleFactor_*t),e)}linear(t,e){let r=Math.floor(t=this.scaleFactor_*t);return(1-(t-=r))*this.getClippedInput_(r,e)+t*this.getClippedInput_(r+1,e)}cubic(t,e){let r=Math.floor(t=this.scaleFactor_*t),s=[this.getTangent_(r,e),this.getTangent_(r+1,e)],n=[this.getClippedInput_(r,e),this.getClippedInput_(r+1,e)],a=(t-=r)*t,o=t*a;return(2*o-3*a+1)*n[0]+(o-2*a+t)*s[0]+(-2*o+3*a)*n[1]+(o-a)*s[1]}sinc(t,e){let r=Math.floor(t=this.scaleFactor_*t),s=r-this.sincFilterSize_+1,n=r+this.sincFilterSize_,a=0;for(let r=s;r<=n;r++)a+=this.kernel_(t-r)*this.getClippedInput_(r,e);return a}getTangent_(t,e){return this.tangentFactor_*(this.getClippedInput_(t+1,e)-this.getClippedInput_(t-1,e))/2}getClippedInput_(t,e){return 0<=t&&tt.length).reduce((t,e)=>t+e)),r=0;for(let s of t)e.set(s,r),r+=s.length;return e}function ic(t){let e=[];for(let r=0;rnew Float32Array(r));for(let n=0;nt.getChannelData(r))}function iy(t,e){let r=new Float32Array(ip(im(t))).map(t=>t*e),s=new AudioData({sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,timestamp:t.timestamp,format:t.format,numberOfFrames:t.numberOfFrames,data:r});return t.close(),s}async function i_(t,e){var r;let s=new ImageDecoder({type:e,data:t});await Promise.all([s.completed,s.tracks.ready]);let n=(null==(r=s.tracks.selectedTrack)?void 0:r.frameCount)??1,a=[];for(let t=0;t{var e;return(null==(e=t[0])?void 0:e.length)??0})),n=new Float32Array(2*s);for(let a=0;anew Float32Array(0));if(0===s)return n;let a=Math.max(...t.map(t=>t.length));if(0===a)return n;if(null==globalThis.OfflineAudioContext)return t.map(t=>new Float32Array(function(t,e,r,s={}){let n=(r-e)/e+1,a=new Float64Array(t.length*n);s.method=s.method||"cubic";let o=new ia(t.length,a.length,{method:s.method,tension:s.tension||0,sincFilterSize:s.sincFilterSize||6,sincWindow:s.sincWindow||void 0});if(void 0===s.LPF&&(s.LPF=ih[s.method]),s.LPF){s.LPFType=s.LPFType||"IIR";let n=iu[s.LPFType];r>e?function(t,e,r,s){for(let n=0,a=e.length;n=0;t--)e[t]=s.filter(e[t])}(t,a,o,new n(s.LPFOrder||il[s.LPFType],r,e/2)):function(t,e,r,s){for(let e=0,r=t.length;e=0;e--)t[e]=s.filter(t[e]);id(t,e,r)}(t,a,o,new n(s.LPFOrder||il[s.LPFType],e,r/2))}else id(t,a,o);return a}(t,e,r.rate,{method:"sinc",LPF:!1})));let o=new globalThis.OfflineAudioContext(r.chanCount,a*r.rate/e,r.rate),h=o.createBufferSource(),l=o.createBuffer(s,a,e);return t.forEach((t,e)=>l.copyToChannel(t,e)),h.buffer=l,h.connect(o.destination),h.start(),ig(await o.startRendering())}function iv(t){return new Promise(e=>{let r=is(()=>{r(),e()},t)})}function iS(t,e,r){let s=r-e,n=new Float32Array(s),a=0;for(;a{r=!0}}var iU="u">typeof globalThis?globalThis:"u">typeof window?window:"u">typeof ef?ef:"u">typeof self?self:{};function ix(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var iT={};(s=/* @__PURE__ */new Date,n=4,a={setLogLevel:function(t){t==this.debug?n=1:t==this.info?n=2:t==this.warn?n=3:(this.error,n=4)},debug:function(t,e){void 0===console.debug&&(console.debug=console.log),1>=n&&console.debug("["+a.getDurationString(/* @__PURE__ */new Date-s,1e3)+"]","["+t+"]",e)},log:function(t,e){this.debug(t.msg)},info:function(t,e){2>=n&&console.info("["+a.getDurationString(/* @__PURE__ */new Date-s,1e3)+"]","["+t+"]",e)},warn:function(t,e){3>=n&&console.warn("["+a.getDurationString(/* @__PURE__ */new Date-s,1e3)+"]","["+t+"]",e)},error:function(t,e){4>=n&&console.error("["+a.getDurationString(/* @__PURE__ */new Date-s,1e3)+"]","["+t+"]",e)}}).getDurationString=function(t,e){function r(t,e){for(var r=(""+t).split(".");r[0].length0))return"(empty)";for(var r="",s=0;s0&&(r+=","),r+="["+a.getDurationString(t.start(s))+","+a.getDurationString(t.end(s))+"]";return r},iT.Log=a,(o=function(t){if(t instanceof ArrayBuffer)this.buffer=t,this.dataview=new DataView(t);else throw"Needs an array buffer";this.position=0}).prototype.getPosition=function(){return this.position},o.prototype.getEndPosition=function(){return this.buffer.byteLength},o.prototype.getLength=function(){return this.buffer.byteLength},o.prototype.seek=function(t){var e=Math.max(0,Math.min(this.buffer.byteLength,t));return this.position=isNaN(e)||!isFinite(e)?0:e,!0},o.prototype.isEos=function(){return this.getPosition()>=this.getEndPosition()},o.prototype.readAnyInt=function(t,e){var r=0;if(this.position+t<=this.buffer.byteLength){switch(t){case 1:r=e?this.dataview.getInt8(this.position):this.dataview.getUint8(this.position);break;case 2:r=e?this.dataview.getInt16(this.position):this.dataview.getUint16(this.position);break;case 3:if(e)throw"No method for reading signed 24 bits values";r=this.dataview.getUint8(this.position)<<16|this.dataview.getUint8(this.position+1)<<8|this.dataview.getUint8(this.position+2);break;case 4:r=e?this.dataview.getInt32(this.position):this.dataview.getUint32(this.position);break;case 8:if(e)throw"No method for reading signed 64 bits values";r=this.dataview.getUint32(this.position)<<32|this.dataview.getUint32(this.position+4);break;default:throw"readInt method not implemented for size: "+t}return this.position+=t,r}throw"Not enough bytes in buffer"},o.prototype.readUint8=function(){return this.readAnyInt(1,!1)},o.prototype.readUint16=function(){return this.readAnyInt(2,!1)},o.prototype.readUint24=function(){return this.readAnyInt(3,!1)},o.prototype.readUint32=function(){return this.readAnyInt(4,!1)},o.prototype.readUint64=function(){return this.readAnyInt(8,!1)},o.prototype.readString=function(t){if(this.position+t<=this.buffer.byteLength){for(var e="",r=0;rthis._byteLength&&(this._byteLength=e);return}for(r<1&&(r=1);e>r;)r*=2;var s=new ArrayBuffer(r),n=new Uint8Array(this._buffer);new Uint8Array(s,0,n.length).set(n),this.buffer=s,this._byteLength=e}},h.prototype._trimAlloc=function(){if(this._byteLength!=this._buffer.byteLength){var t=new ArrayBuffer(this._byteLength),e=new Uint8Array(t),r=new Uint8Array(this._buffer,0,e.length);e.set(r),this.buffer=t}},h.BIG_ENDIAN=!1,h.LITTLE_ENDIAN=!0,h.prototype._byteLength=0,Object.defineProperty(h.prototype,"byteLength",{get:function(){return this._byteLength-this._byteOffset}}),Object.defineProperty(h.prototype,"buffer",{get:function(){return this._trimAlloc(),this._buffer},set:function(t){this._buffer=t,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}}),Object.defineProperty(h.prototype,"byteOffset",{get:function(){return this._byteOffset},set:function(t){this._byteOffset=t,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}}),Object.defineProperty(h.prototype,"dataView",{get:function(){return this._dataView},set:function(t){this._byteOffset=t.byteOffset,this._buffer=t.buffer,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._byteOffset+t.byteLength}}),h.prototype.seek=function(t){var e=Math.max(0,Math.min(this.byteLength,t));this.position=isNaN(e)||!isFinite(e)?0:e},h.prototype.isEof=function(){return this.position>=this._byteLength},h.prototype.mapUint8Array=function(t){this._realloc(1*t);var e=new Uint8Array(this._buffer,this.byteOffset+this.position,t);return this.position+=1*t,e},h.prototype.readInt32Array=function(t,e){var r=new Int32Array(t=t??this.byteLength-this.position/4);return h.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),h.arrayToNative(r,e??this.endianness),this.position+=r.byteLength,r},h.prototype.readInt16Array=function(t,e){var r=new Int16Array(t=t??this.byteLength-this.position/2);return h.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),h.arrayToNative(r,e??this.endianness),this.position+=r.byteLength,r},h.prototype.readInt8Array=function(t){var e=new Int8Array(t=t??this.byteLength-this.position);return h.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,t*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e},h.prototype.readUint32Array=function(t,e){var r=new Uint32Array(t=t??this.byteLength-this.position/4);return h.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),h.arrayToNative(r,e??this.endianness),this.position+=r.byteLength,r},h.prototype.readUint16Array=function(t,e){var r=new Uint16Array(t=t??this.byteLength-this.position/2);return h.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),h.arrayToNative(r,e??this.endianness),this.position+=r.byteLength,r},h.prototype.readUint8Array=function(t){var e=new Uint8Array(t=t??this.byteLength-this.position);return h.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,t*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e},h.prototype.readFloat64Array=function(t,e){var r=new Float64Array(t=t??this.byteLength-this.position/8);return h.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),h.arrayToNative(r,e??this.endianness),this.position+=r.byteLength,r},h.prototype.readFloat32Array=function(t,e){var r=new Float32Array(t=t??this.byteLength-this.position/4);return h.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),h.arrayToNative(r,e??this.endianness),this.position+=r.byteLength,r},h.prototype.readInt32=function(t){var e=this._dataView.getInt32(this.position,t??this.endianness);return this.position+=4,e},h.prototype.readInt16=function(t){var e=this._dataView.getInt16(this.position,t??this.endianness);return this.position+=2,e},h.prototype.readInt8=function(){var t=this._dataView.getInt8(this.position);return this.position+=1,t},h.prototype.readUint32=function(t){var e=this._dataView.getUint32(this.position,t??this.endianness);return this.position+=4,e},h.prototype.readUint16=function(t){var e=this._dataView.getUint16(this.position,t??this.endianness);return this.position+=2,e},h.prototype.readUint8=function(){var t=this._dataView.getUint8(this.position);return this.position+=1,t},h.prototype.readFloat32=function(t){var e=this._dataView.getFloat32(this.position,t??this.endianness);return this.position+=4,e},h.prototype.readFloat64=function(t){var e=this._dataView.getFloat64(this.position,t??this.endianness);return this.position+=8,e},h.endianness=new Int8Array(new Int16Array([1]).buffer)[0]>0,h.memcpy=function(t,e,r,s,n){var a=new Uint8Array(t,e,n),o=new Uint8Array(r,s,n);a.set(o)},h.arrayToNative=function(t,e){return e==this.endianness?t:this.flipArrayEndianness(t)},h.nativeToEndian=function(t,e){return this.endianness==e?t:this.flipArrayEndianness(t)},h.flipArrayEndianness=function(t){for(var e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=0;rn;s--,n++){var a=e[n];e[n]=e[s],e[s]=a}return t},h.prototype.failurePosition=0,String.fromCharCodeUint8=function(t){for(var e=[],r=0;r>16),this.writeUint8((65280&t)>>8),this.writeUint8(255&t)},h.prototype.adjustUint32=function(t,e){var r=this.position;this.seek(t),this.writeUint32(e),this.seek(r)},h.prototype.mapInt32Array=function(t,e){this._realloc(4*t);var r=new Int32Array(this._buffer,this.byteOffset+this.position,t);return h.arrayToNative(r,e??this.endianness),this.position+=4*t,r},h.prototype.mapInt16Array=function(t,e){this._realloc(2*t);var r=new Int16Array(this._buffer,this.byteOffset+this.position,t);return h.arrayToNative(r,e??this.endianness),this.position+=2*t,r},h.prototype.mapInt8Array=function(t){this._realloc(1*t);var e=new Int8Array(this._buffer,this.byteOffset+this.position,t);return this.position+=1*t,e},h.prototype.mapUint32Array=function(t,e){this._realloc(4*t);var r=new Uint32Array(this._buffer,this.byteOffset+this.position,t);return h.arrayToNative(r,e??this.endianness),this.position+=4*t,r},h.prototype.mapUint16Array=function(t,e){this._realloc(2*t);var r=new Uint16Array(this._buffer,this.byteOffset+this.position,t);return h.arrayToNative(r,e??this.endianness),this.position+=2*t,r},h.prototype.mapFloat64Array=function(t,e){this._realloc(8*t);var r=new Float64Array(this._buffer,this.byteOffset+this.position,t);return h.arrayToNative(r,e??this.endianness),this.position+=8*t,r},h.prototype.mapFloat32Array=function(t,e){this._realloc(4*t);var r=new Float32Array(this._buffer,this.byteOffset+this.position,t);return h.arrayToNative(r,e??this.endianness),this.position+=4*t,r},(l=function(t){this.buffers=[],this.bufferIndex=-1,t&&(this.insertBuffer(t),this.bufferIndex=0)}).prototype=new h(new ArrayBuffer,0,h.BIG_ENDIAN),l.prototype.initialized=function(){var t;return this.bufferIndex>-1||(this.buffers.length>0?0===(t=this.buffers[0]).fileStart?(this.buffer=t,this.bufferIndex=0,a.debug("MultiBufferStream","Stream ready for parsing"),!0):(a.warn("MultiBufferStream","The first buffer should have a fileStart of 0"),this.logBufferLevel(),!1):(a.warn("MultiBufferStream","No buffer to start parsing from"),this.logBufferLevel(),!1))},ArrayBuffer.concat=function(t,e){a.debug("ArrayBuffer","Trying to create a new buffer of size: "+(t.byteLength+e.byteLength));var r=new Uint8Array(t.byteLength+e.byteLength);return r.set(new Uint8Array(t),0),r.set(new Uint8Array(e),t.byteLength),r.buffer},l.prototype.reduceBuffer=function(t,e,r){var s;return(s=new Uint8Array(r)).set(new Uint8Array(t,e,r)),s.buffer.fileStart=t.fileStart+e,s.buffer.usedBytes=0,s.buffer},l.prototype.insertBuffer=function(t){for(var e=!0,r=0;rs.byteLength){this.buffers.splice(r,1),r--;continue}a.warn("MultiBufferStream","Buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+") already appended, ignoring")}else t.fileStart+t.byteLength<=s.fileStart||(t=this.reduceBuffer(t,0,s.fileStart-t.fileStart)),a.debug("MultiBufferStream","Appending new buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+")"),this.buffers.splice(r,0,t),0===r&&(this.buffer=t);e=!1;break}if(t.fileStart0)t=this.reduceBuffer(t,n,o);else{e=!1;break}}}e&&(a.debug("MultiBufferStream","Appending new buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+")"),this.buffers.push(t),0===r&&(this.buffer=t))},l.prototype.logBufferLevel=function(t){var e,r,s,n,o,h=[],l="";for(s=0,n=0,e=0;e0&&(l+=o.end-1+"]"),(t?a.info:a.debug)("MultiBufferStream",0===this.buffers.length?"No more buffer in memory":""+this.buffers.length+" stored buffer(s) ("+s+"/"+n+" bytes), continuous ranges: "+l)},l.prototype.cleanBuffers=function(){var t,e;for(t=0;t"+this.buffer.byteLength+")"),!0},l.prototype.findPosition=function(t,e,r){var s,n=null,o=-1;for(s=!0===t?0:this.bufferIndex;s=e?(a.debug("MultiBufferStream","Found position in existing buffer #"+o),o):-1},l.prototype.findEndContiguousBuf=function(t){var e,r,s,n=void 0!==t?t:this.bufferIndex;if(r=this.buffers[n],this.buffers.length>n+1)for(e=n+1;e>3;return 31===s&&r.data.length>=2&&(s=32+((7&r.data[0])<<3)+((224&r.data[1])>>5)),s},r.DecoderConfigDescriptor=function(t){r.Descriptor.call(this,4,t)},r.DecoderConfigDescriptor.prototype=new r.Descriptor,r.DecoderConfigDescriptor.prototype.parse=function(t){this.oti=t.readUint8(),this.streamType=t.readUint8(),this.bufferSize=t.readUint24(),this.maxBitrate=t.readUint32(),this.avgBitrate=t.readUint32(),this.size-=13,this.parseRemainingDescriptors(t)},r.DecoderSpecificInfo=function(t){r.Descriptor.call(this,5,t)},r.DecoderSpecificInfo.prototype=new r.Descriptor,r.SLConfigDescriptor=function(t){r.Descriptor.call(this,6,t)},r.SLConfigDescriptor.prototype=new r.Descriptor,this},iT.MPEG4DescriptorParser=u,(d={ERR_INVALID_DATA:-1,ERR_NOT_ENOUGH_DATA:0,OK:1,BASIC_BOXES:["mdat","idat","free","skip","meco","strk"],FULL_BOXES:["hmhd","nmhd","iods","xml ","bxml","ipro","mere"],CONTAINER_BOXES:[["moov",["trak","pssh"]],["trak"],["edts"],["mdia"],["minf"],["dinf"],["stbl",["sgpd","sbgp"]],["mvex",["trex"]],["moof",["traf"]],["traf",["trun","sgpd","sbgp"]],["vttc"],["tref"],["iref"],["mfra",["tfra"]],["meco"],["hnti"],["hinf"],["strk"],["strd"],["sinf"],["rinf"],["schi"],["trgr"],["udta",["kind"]],["iprp",["ipma"]],["ipco"],["grpl"],["j2kH"],["etyp",["tyco"]]],boxCodes:[],fullBoxCodes:[],containerBoxCodes:[],sampleEntryCodes:{},sampleGroupEntryCodes:[],trackGroupTypes:[],UUIDBoxes:{},UUIDs:[],initialize:function(){d.FullBox.prototype=new d.Box,d.ContainerBox.prototype=new d.Box,d.SampleEntry.prototype=new d.Box,d.TrackGroupTypeBox.prototype=new d.FullBox,d.BASIC_BOXES.forEach(function(t){d.createBoxCtor(t)}),d.FULL_BOXES.forEach(function(t){d.createFullBoxCtor(t)}),d.CONTAINER_BOXES.forEach(function(t){d.createContainerBoxCtor(t[0],null,t[1])})},Box:function(t,e,r){this.type=t,this.size=e,this.uuid=r},FullBox:function(t,e,r){d.Box.call(this,t,e,r),this.flags=0,this.version=0},ContainerBox:function(t,e,r){d.Box.call(this,t,e,r),this.boxes=[]},SampleEntry:function(t,e,r,s){d.ContainerBox.call(this,t,e),this.hdr_size=r,this.start=s},SampleGroupEntry:function(t){this.grouping_type=t},TrackGroupTypeBox:function(t,e){d.FullBox.call(this,t,e)},createBoxCtor:function(t,e){d.boxCodes.push(t),d[t+"Box"]=function(e){d.Box.call(this,t,e)},d[t+"Box"].prototype=new d.Box,e&&(d[t+"Box"].prototype.parse=e)},createFullBoxCtor:function(t,e){d[t+"Box"]=function(e){d.FullBox.call(this,t,e)},d[t+"Box"].prototype=new d.FullBox,d[t+"Box"].prototype.parse=function(t){this.parseFullHeader(t),e&&e.call(this,t)}},addSubBoxArrays:function(t){if(t){this.subBoxNames=t;for(var e=t.length,r=0;rr?(a.error("BoxParser","Box of type '"+f+"' has a size "+u+" greater than its container size "+r),{code:d.ERR_NOT_ENOUGH_DATA,type:f,size:u,hdr_size:l,start:h}):0!==u&&h+u>t.getEndPosition()?(t.seek(h),a.info("BoxParser","Not enough data in stream to parse the entire '"+f+"' box"),{code:d.ERR_NOT_ENOUGH_DATA,type:f,size:u,hdr_size:l,start:h}):e?{code:d.OK,type:f,size:u,hdr_size:l,start:h}:(d[f+"Box"]?s=new d[f+"Box"](u):"uuid"!==f?(a.warn("BoxParser","Unknown box type: '"+f+"'"),(s=new d.Box(f,u)).has_unparsed_data=!0):d.UUIDBoxes[o]?s=new d.UUIDBoxes[o](u):(a.warn("BoxParser","Unknown uuid type: '"+o+"'"),(s=new d.Box(f,u)).uuid=o,s.has_unparsed_data=!0),s.hdr_size=l,s.start=h,s.write===d.Box.prototype.write&&"mdat"!==s.type&&(a.info("BoxParser","'"+p+"' box writing not yet implemented, keeping unparsed data in memory for later write"),s.parseDataAndRewind(t)),s.parse(t),(n=t.getPosition()-(s.start+s.size))<0?(a.warn("BoxParser","Parsing of box '"+p+"' did not read the entire indicated box data size (missing "+-n+" bytes), seeking forward"),t.seek(s.start+s.size)):n>0&&(a.error("BoxParser","Parsing of box '"+p+"' read "+n+" more bytes than the indicated box data size, seeking backwards"),0!==s.size&&t.seek(s.start+s.size)),{code:d.OK,box:s,size:s.size})},d.Box.prototype.parse=function(t){"mdat"!=this.type?this.data=t.readUint8Array(this.size-this.hdr_size):0===this.size?t.seek(t.getEndPosition()):t.seek(this.start+this.size)},d.Box.prototype.parseDataAndRewind=function(t){this.data=t.readUint8Array(this.size-this.hdr_size),t.position-=this.size-this.hdr_size},d.FullBox.prototype.parseDataAndRewind=function(t){this.parseFullHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size),this.hdr_size-=4,t.position-=this.size-this.hdr_size},d.FullBox.prototype.parseFullHeader=function(t){this.version=t.readUint8(),this.flags=t.readUint24(),this.hdr_size+=4},d.FullBox.prototype.parse=function(t){this.parseFullHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size)},d.ContainerBox.prototype.parse=function(t){for(var e,r;t.getPosition()>10&31,e[1]=this.language>>5&31,e[2]=31&this.language,this.languageString=String.fromCharCode(e[0]+96,e[1]+96,e[2]+96)},d.SAMPLE_ENTRY_TYPE_VISUAL="Visual",d.SAMPLE_ENTRY_TYPE_AUDIO="Audio",d.SAMPLE_ENTRY_TYPE_HINT="Hint",d.SAMPLE_ENTRY_TYPE_METADATA="Metadata",d.SAMPLE_ENTRY_TYPE_SUBTITLE="Subtitle",d.SAMPLE_ENTRY_TYPE_SYSTEM="System",d.SAMPLE_ENTRY_TYPE_TEXT="Text",d.SampleEntry.prototype.parseHeader=function(t){t.readUint8Array(6),this.data_reference_index=t.readUint16(),this.hdr_size+=8},d.SampleEntry.prototype.parse=function(t){this.parseHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size)},d.SampleEntry.prototype.parseDataAndRewind=function(t){this.parseHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size),this.hdr_size-=8,t.position-=this.size-this.hdr_size},d.SampleEntry.prototype.parseFooter=function(t){d.ContainerBox.prototype.parse.call(this,t)},d.createMediaSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_HINT),d.createMediaSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_METADATA),d.createMediaSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_SUBTITLE),d.createMediaSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_SYSTEM),d.createMediaSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_TEXT),d.createMediaSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,function(t){var e;this.parseHeader(t),t.readUint16(),t.readUint16(),t.readUint32Array(3),this.width=t.readUint16(),this.height=t.readUint16(),this.horizresolution=t.readUint32(),this.vertresolution=t.readUint32(),t.readUint32(),this.frame_count=t.readUint16(),e=Math.min(31,t.readUint8()),this.compressorname=t.readString(e),e<31&&t.readString(31-e),this.depth=t.readUint16(),t.readUint16(),this.parseFooter(t)}),d.createMediaSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,function(t){this.parseHeader(t),t.readUint32Array(2),this.channel_count=t.readUint16(),this.samplesize=t.readUint16(),t.readUint16(),t.readUint16(),this.samplerate=t.readUint32()/65536,this.parseFooter(t)}),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"avc1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"avc2"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"avc3"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"avc4"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"av01"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"dav1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"hvc1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"hev1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"hvt1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"lhe1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"dvh1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"dvhe"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"vvc1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"vvi1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"vvs1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"vvcN"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"vp08"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"vp09"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"avs3"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"j2ki"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"mjp2"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"mjpg"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"uncv"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,"mp4a"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,"ac-3"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,"ac-4"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,"ec-3"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,"Opus"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,"mha1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,"mha2"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,"mhm1"),d.createSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,"mhm2"),d.createEncryptedSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_VISUAL,"encv"),d.createEncryptedSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_AUDIO,"enca"),d.createEncryptedSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_SUBTITLE,"encu"),d.createEncryptedSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_SYSTEM,"encs"),d.createEncryptedSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_TEXT,"enct"),d.createEncryptedSampleEntryCtor(d.SAMPLE_ENTRY_TYPE_METADATA,"encm"),d.createBoxCtor("a1lx",function(t){var e=((1&(1&t.readUint8()))+1)*16;this.layer_size=[];for(var r=0;r<3;r++)16==e?this.layer_size[r]=t.readUint16():this.layer_size[r]=t.readUint32()}),d.createBoxCtor("a1op",function(t){this.op_index=t.readUint8()}),d.createFullBoxCtor("auxC",function(t){this.aux_type=t.readCString();var e=this.size-this.hdr_size-(this.aux_type.length+1);this.aux_subtype=t.readUint8Array(e)}),d.createBoxCtor("av1C",function(t){var e=t.readUint8();if(this.version=127&e,1!==this.version){a.error("av1C version "+this.version+" not supported");return}if(e=t.readUint8(),this.seq_profile=e>>5&7,this.seq_level_idx_0=31&e,e=t.readUint8(),this.seq_tier_0=e>>7&1,this.high_bitdepth=e>>6&1,this.twelve_bit=e>>5&1,this.monochrome=e>>4&1,this.chroma_subsampling_x=e>>3&1,this.chroma_subsampling_y=e>>2&1,this.chroma_sample_position=3&e,e=t.readUint8(),this.reserved_1=e>>5&7,0!==this.reserved_1){a.error("av1C reserved_1 parsing problem");return}if(this.initial_presentation_delay_present=e>>4&1,1===this.initial_presentation_delay_present)this.initial_presentation_delay_minus_one=15&e;else if(this.reserved_2=15&e,0!==this.reserved_2){a.error("av1C reserved_2 parsing problem");return}var r=this.size-this.hdr_size-4;this.configOBUs=t.readUint8Array(r)}),d.createBoxCtor("avcC",function(t){var e,r;for(this.configurationVersion=t.readUint8(),this.AVCProfileIndication=t.readUint8(),this.profile_compatibility=t.readUint8(),this.AVCLevelIndication=t.readUint8(),this.lengthSizeMinusOne=3&t.readUint8(),this.nb_SPS_nalus=31&t.readUint8(),r=this.size-this.hdr_size-6,this.SPS=[],e=0;e0&&(this.ext=t.readUint8Array(r))}),d.createBoxCtor("btrt",function(t){this.bufferSizeDB=t.readUint32(),this.maxBitrate=t.readUint32(),this.avgBitrate=t.readUint32()}),d.createFullBoxCtor("ccst",function(t){var e=t.readUint8();this.all_ref_pics_intra=(128&e)==128,this.intra_pred_used=(64&e)==64,this.max_ref_per_pic=(63&e)>>2,t.readUint24()}),d.createBoxCtor("cdef",function(t){var e;for(this.channel_count=t.readUint16(),this.channel_indexes=[],this.channel_types=[],this.channel_associations=[],e=0;e=32768&&this.component_type_urls.push(t.readCString())}}),d.createFullBoxCtor("co64",function(t){var e,r;if(e=t.readUint32(),this.chunk_offsets=[],0===this.version)for(r=0;r>7}else"rICC"===this.colour_type?this.ICC_profile=t.readUint8Array(this.size-4):"prof"===this.colour_type&&(this.ICC_profile=t.readUint8Array(this.size-4))}),d.createFullBoxCtor("cprt",function(t){this.parseLanguage(t),this.notice=t.readCString()}),d.createFullBoxCtor("cslg",function(t){0===this.version&&(this.compositionToDTSShift=t.readInt32(),this.leastDecodeToDisplayDelta=t.readInt32(),this.greatestDecodeToDisplayDelta=t.readInt32(),this.compositionStartTime=t.readInt32(),this.compositionEndTime=t.readInt32())}),d.createFullBoxCtor("ctts",function(t){var e,r;if(e=t.readUint32(),this.sample_counts=[],this.sample_offsets=[],0===this.version)for(r=0;r>6,this.bsid=e>>1&31,this.bsmod=(1&e)<<2|r>>6&3,this.acmod=r>>3&7,this.lfeon=r>>2&1,this.bit_rate_code=3&r|s>>5&7}),d.createBoxCtor("dec3",function(t){var e=t.readUint16();this.data_rate=e>>3,this.num_ind_sub=7&e,this.ind_subs=[];for(var r=0;r>6,s.bsid=n>>1&31,s.bsmod=(1&n)<<4|a>>4&15,s.acmod=a>>1&7,s.lfeon=1&a,s.num_dep_sub=o>>1&15,s.num_dep_sub>0&&(s.chan_loc=(1&o)<<8|t.readUint8())}}),d.createFullBoxCtor("dfLa",function(t){var e=[],r=["STREAMINFO","PADDING","APPLICATION","SEEKTABLE","VORBIS_COMMENT","CUESHEET","PICTURE","RESERVED"];for(this.parseFullHeader(t);;){var s=t.readUint8(),n=Math.min(127&s,r.length-1);if(n?t.readUint8Array(t.readUint24()):(t.readUint8Array(13),this.samplerate=t.readUint32()>>12,t.readUint8Array(20)),e.push(r[n]),128&s)break}this.numMetadataBlocks=e.length+" ("+e.join(", ")+")"}),d.createBoxCtor("dimm",function(t){this.bytessent=t.readUint64()}),d.createBoxCtor("dmax",function(t){this.time=t.readUint32()}),d.createBoxCtor("dmed",function(t){this.bytessent=t.readUint64()}),d.createBoxCtor("dOps",function(t){if(this.Version=t.readUint8(),this.OutputChannelCount=t.readUint8(),this.PreSkip=t.readUint16(),this.InputSampleRate=t.readUint32(),this.OutputGain=t.readInt16(),this.ChannelMappingFamily=t.readUint8(),0!==this.ChannelMappingFamily){this.StreamCount=t.readUint8(),this.CoupledCount=t.readUint8(),this.ChannelMapping=[];for(var e=0;etypeof u){var r=new u;this.esd=r.parseOneDescriptor(new h(e.buffer,0,h.BIG_ENDIAN))}}),d.createBoxCtor("fiel",function(t){this.fieldCount=t.readUint8(),this.fieldOrdering=t.readUint8()}),d.createBoxCtor("frma",function(t){this.data_format=t.readString(4)}),d.createBoxCtor("ftyp",function(t){var e=this.size-this.hdr_size;this.major_brand=t.readString(4),this.minor_version=t.readUint32(),e-=8,this.compatible_brands=[];for(var r=0;e>=4;)this.compatible_brands[r]=t.readString(4),e-=4,r++}),d.createFullBoxCtor("hdlr",function(t){0===this.version&&(t.readUint32(),this.handler=t.readString(4),t.readUint32Array(3),this.name=t.readString(this.size-this.hdr_size-20),"\0"===this.name[this.name.length-1]&&(this.name=this.name.slice(0,-1)))}),d.createBoxCtor("hvcC",function(t){this.configurationVersion=t.readUint8(),n=t.readUint8(),this.general_profile_space=n>>6,this.general_tier_flag=(32&n)>>5,this.general_profile_idc=31&n,this.general_profile_compatibility=t.readUint32(),this.general_constraint_indicator=t.readUint8Array(6),this.general_level_idc=t.readUint8(),this.min_spatial_segmentation_idc=4095&t.readUint16(),this.parallelismType=3&t.readUint8(),this.chroma_format_idc=3&t.readUint8(),this.bit_depth_luma_minus8=7&t.readUint8(),this.bit_depth_chroma_minus8=7&t.readUint8(),this.avgFrameRate=t.readUint16(),n=t.readUint8(),this.constantFrameRate=n>>6,this.numTemporalLayers=(13&n)>>3,this.temporalIdNested=(4&n)>>2,this.lengthSizeMinusOne=3&n,this.nalu_arrays=[];var e,r,s,n,a=t.readUint8();for(e=0;e>7,o.nalu_type=63&n;var h=t.readUint16();for(r=0;r>4&15,this.length_size=15&e,e=t.readUint8(),this.base_offset_size=e>>4&15,1===this.version||2===this.version?this.index_size=15&e:this.index_size=0,this.items=[];var e,r=0;if(this.version<2)r=t.readUint16();else if(2===this.version)r=t.readUint32();else throw"version of iloc box not supported";for(var s=0;s>7,this.axis=1&e}),d.createFullBoxCtor("infe",function(t){if((0===this.version||1===this.version)&&(this.item_ID=t.readUint16(),this.item_protection_index=t.readUint16(),this.item_name=t.readCString(),this.content_type=t.readCString(),this.content_encoding=t.readCString()),1===this.version){this.extension_type=t.readString(4),a.warn("BoxParser","Cannot parse extension type"),t.seek(this.start+this.size);return}this.version>=2&&(2===this.version?this.item_ID=t.readUint16():3===this.version&&(this.item_ID=t.readUint32()),this.item_protection_index=t.readUint16(),this.item_type=t.readString(4),this.item_name=t.readCString(),"mime"===this.item_type?(this.content_type=t.readCString(),this.content_encoding=t.readCString()):"uri "===this.item_type&&(this.item_uri_type=t.readCString()))}),d.createFullBoxCtor("ipma",function(t){var e,r;for(entry_count=t.readUint32(),this.associations=[],e=0;e>7==1,1&this.flags?o.property_index=(127&a)<<8|t.readUint8():o.property_index=127&a}}}),d.createFullBoxCtor("iref",function(t){var e,r;for(this.references=[];t.getPosition()>7,s.assignment_type=127&n,s.assignment_type){case 0:s.grouping_type=t.readString(4);break;case 1:s.grouping_type=t.readString(4),s.grouping_type_parameter=t.readUint32();break;case 2:case 3:break;case 4:s.sub_track_id=t.readUint32();break;default:a.warn("BoxParser","Unknown leva assignement type")}}}),d.createBoxCtor("lsel",function(t){this.layer_id=t.readUint16()}),d.createBoxCtor("maxr",function(t){this.period=t.readUint32(),this.bytes=t.readUint32()}),d.createBoxCtor("mdcv",function(t){this.display_primaries=[],this.display_primaries[0]={},this.display_primaries[0].x=t.readUint16(),this.display_primaries[0].y=t.readUint16(),this.display_primaries[1]={},this.display_primaries[1].x=t.readUint16(),this.display_primaries[1].y=t.readUint16(),this.display_primaries[2]={},this.display_primaries[2].x=t.readUint16(),this.display_primaries[2].y=t.readUint16(),this.white_point={},this.white_point.x=t.readUint16(),this.white_point.y=t.readUint16(),this.max_display_mastering_luminance=t.readUint32(),this.min_display_mastering_luminance=t.readUint32()}),d.createFullBoxCtor("mdhd",function(t){1==this.version?(this.creation_time=t.readUint64(),this.modification_time=t.readUint64(),this.timescale=t.readUint32(),this.duration=t.readUint64()):(this.creation_time=t.readUint32(),this.modification_time=t.readUint32(),this.timescale=t.readUint32(),this.duration=t.readUint32()),this.parseLanguage(t),t.readUint16()}),d.createFullBoxCtor("mehd",function(t){1&this.flags&&(a.warn("BoxParser","mehd box incorrectly uses flags set to 1, converting version to 1"),this.version=1),1==this.version?this.fragment_duration=t.readUint64():this.fragment_duration=t.readUint32()}),d.createFullBoxCtor("meta",function(t){this.boxes=[],d.ContainerBox.prototype.parse.call(this,t)}),d.createFullBoxCtor("mfhd",function(t){this.sequence_number=t.readUint32()}),d.createFullBoxCtor("mfro",function(t){this._size=t.readUint32()}),d.createFullBoxCtor("mvhd",function(t){1==this.version?(this.creation_time=t.readUint64(),this.modification_time=t.readUint64(),this.timescale=t.readUint32(),this.duration=t.readUint64()):(this.creation_time=t.readUint32(),this.modification_time=t.readUint32(),this.timescale=t.readUint32(),this.duration=t.readUint32()),this.rate=t.readUint32(),this.volume=t.readUint16()>>8,t.readUint16(),t.readUint32Array(2),this.matrix=t.readUint32Array(9),t.readUint32Array(6),this.next_track_id=t.readUint32()}),d.createBoxCtor("npck",function(t){this.packetssent=t.readUint32()}),d.createBoxCtor("nump",function(t){this.packetssent=t.readUint64()}),d.createFullBoxCtor("padb",function(t){var e=t.readUint32();this.padbits=[];for(var r=0;r0){var e=t.readUint32();this.kid=[];for(var r=0;r0&&(this.data=t.readUint8Array(s))}),d.createFullBoxCtor("clef",function(t){this.width=t.readUint32(),this.height=t.readUint32()}),d.createFullBoxCtor("enof",function(t){this.width=t.readUint32(),this.height=t.readUint32()}),d.createFullBoxCtor("prof",function(t){this.width=t.readUint32(),this.height=t.readUint32()}),d.createContainerBoxCtor("tapt",null,["clef","prof","enof"]),d.createBoxCtor("rtp ",function(t){this.descriptionformat=t.readString(4),this.sdptext=t.readString(this.size-this.hdr_size-4)}),d.createFullBoxCtor("saio",function(t){1&this.flags&&(this.aux_info_type=t.readUint32(),this.aux_info_type_parameter=t.readUint32());var e=t.readUint32();this.offset=[];for(var r=0;r>7,this.avgRateFlag=e>>6&1,this.durationFlag&&(this.duration=t.readUint32()),this.avgRateFlag&&(this.accurateStatisticsFlag=t.readUint8(),this.avgBitRate=t.readUint16(),this.avgFrameRate=t.readUint16()),this.dependency=[];for(var r=t.readUint8(),s=0;s>7,this.num_leading_samples=127&e}),d.createSampleGroupCtor("rash",function(t){if(this.operation_point_count=t.readUint16(),this.description_length!==2+(1===this.operation_point_count?2:6*this.operation_point_count)+9)a.warn("BoxParser","Mismatch in "+this.grouping_type+" sample group length"),this.data=t.readUint8Array(this.description_length-2);else{if(1===this.operation_point_count)this.target_rate_share=t.readUint16();else{this.target_rate_share=[],this.available_bitrate=[];for(var e=0;e>4,this.skip_byte_block=15&e,this.isProtected=t.readUint8(),this.Per_Sample_IV_Size=t.readUint8(),this.KID=d.parseHex16(t),this.constant_IV_size=0,this.constant_IV=0,1===this.isProtected&&0===this.Per_Sample_IV_Size&&(this.constant_IV_size=t.readUint8(),this.constant_IV=t.readUint8Array(this.constant_IV_size))}),d.createSampleGroupCtor("stsa",function(t){a.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),d.createSampleGroupCtor("sync",function(t){var e=t.readUint8();this.NAL_unit_type=63&e}),d.createSampleGroupCtor("tele",function(t){var e=t.readUint8();this.level_independently_decodable=e>>7}),d.createSampleGroupCtor("tsas",function(t){a.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),d.createSampleGroupCtor("tscl",function(t){a.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),d.createSampleGroupCtor("vipr",function(t){a.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),d.createFullBoxCtor("sbgp",function(t){this.grouping_type=t.readString(4),1===this.version?this.grouping_type_parameter=t.readUint32():this.grouping_type_parameter=0,this.entries=[];for(var e=t.readUint32(),r=0;r>6,this.sample_depends_on[s]=e>>4&3,this.sample_is_depended_on[s]=e>>2&3,this.sample_has_redundancy[s]=3&e}),d.createFullBoxCtor("senc"),d.createFullBoxCtor("sgpd",function(t){this.grouping_type=t.readString(4),a.debug("BoxParser","Found Sample Groups of type "+this.grouping_type),1===this.version?this.default_length=t.readUint32():this.default_length=0,this.version>=2&&(this.default_group_description_index=t.readUint32()),this.entries=[];for(var e,r=t.readUint32(),s=0;s>31&1,s.referenced_size=2147483647&n,s.subsegment_duration=t.readUint32(),n=t.readUint32(),s.starts_with_SAP=n>>31&1,s.SAP_type=n>>28&7,s.SAP_delta_time=268435455&n}}),d.SingleItemTypeReferenceBox=function(t,e,r,s){d.Box.call(this,t,e),this.hdr_size=r,this.start=s},d.SingleItemTypeReferenceBox.prototype=new d.Box,d.SingleItemTypeReferenceBox.prototype.parse=function(t){this.from_item_ID=t.readUint16();var e=t.readUint16();this.references=[];for(var r=0;r>4&15,this.sample_sizes[e+1]=15&s}else if(8===this.field_size)for(e=0;e0)for(r=0;r>4&15,this.default_skip_byte_block=15&e}this.default_isProtected=t.readUint8(),this.default_Per_Sample_IV_Size=t.readUint8(),this.default_KID=d.parseHex16(t),1===this.default_isProtected&&0===this.default_Per_Sample_IV_Size&&(this.default_constant_IV_size=t.readUint8(),this.default_constant_IV=t.readUint8Array(this.default_constant_IV_size))}),d.createFullBoxCtor("tfdt",function(t){1==this.version?this.baseMediaDecodeTime=t.readUint64():this.baseMediaDecodeTime=t.readUint32()}),d.createFullBoxCtor("tfhd",function(t){var e=0;this.track_id=t.readUint32(),this.size-this.hdr_size>e&&this.flags&d.TFHD_FLAG_BASE_DATA_OFFSET?(this.base_data_offset=t.readUint64(),e+=8):this.base_data_offset=0,this.size-this.hdr_size>e&&this.flags&d.TFHD_FLAG_SAMPLE_DESC?(this.default_sample_description_index=t.readUint32(),e+=4):this.default_sample_description_index=0,this.size-this.hdr_size>e&&this.flags&d.TFHD_FLAG_SAMPLE_DUR?(this.default_sample_duration=t.readUint32(),e+=4):this.default_sample_duration=0,this.size-this.hdr_size>e&&this.flags&d.TFHD_FLAG_SAMPLE_SIZE?(this.default_sample_size=t.readUint32(),e+=4):this.default_sample_size=0,this.size-this.hdr_size>e&&this.flags&d.TFHD_FLAG_SAMPLE_FLAGS?(this.default_sample_flags=t.readUint32(),e+=4):this.default_sample_flags=0}),d.createFullBoxCtor("tfra",function(t){this.track_ID=t.readUint32(),t.readUint24();var e=t.readUint8();this.length_size_of_traf_num=e>>4&3,this.length_size_of_trun_num=e>>2&3,this.length_size_of_sample_num=3&e,this.entries=[];for(var r=t.readUint32(),s=0;s>8,t.readUint16(),this.matrix=t.readInt32Array(9),this.width=t.readUint32(),this.height=t.readUint32()}),d.createBoxCtor("tmax",function(t){this.time=t.readUint32()}),d.createBoxCtor("tmin",function(t){this.time=t.readUint32()}),d.createBoxCtor("totl",function(t){this.bytessent=t.readUint32()}),d.createBoxCtor("tpay",function(t){this.bytessent=t.readUint32()}),d.createBoxCtor("tpyl",function(t){this.bytessent=t.readUint64()}),d.TrackGroupTypeBox.prototype.parse=function(t){this.parseFullHeader(t),this.track_group_id=t.readUint32()},d.createTrackGroupCtor("msrc"),d.TrackReferenceTypeBox=function(t,e,r,s){d.Box.call(this,t,e),this.hdr_size=r,this.start=s},d.TrackReferenceTypeBox.prototype=new d.Box,d.TrackReferenceTypeBox.prototype.parse=function(t){this.track_ids=t.readUint32Array((this.size-this.hdr_size)/4)},d.trefBox.prototype.parse=function(t){for(var e,r;t.getPosition()e&&this.flags&d.TRUN_FLAGS_DATA_OFFSET?(this.data_offset=t.readInt32(),e+=4):this.data_offset=0,this.size-this.hdr_size>e&&this.flags&d.TRUN_FLAGS_FIRST_FLAG?(this.first_sample_flags=t.readUint32(),e+=4):this.first_sample_flags=0,this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[],this.size-this.hdr_size>e)for(var r=0;r>7&1,this.block_pad_lsb=r>>6&1,this.block_little_endian=r>>5&1,this.block_reversed=r>>4&1,this.pad_unknown=r>>3&1,this.pixel_size=t.readUint8(),this.row_align_size=t.readUint32(),this.tile_align_size=t.readUint32(),this.num_tile_cols_minus_one=t.readUint32(),this.num_tile_rows_minus_one=t.readUint32()}),d.createFullBoxCtor("url ",function(t){1!==this.flags&&(this.location=t.readCString())}),d.createFullBoxCtor("urn ",function(t){this.name=t.readCString(),this.size-this.hdr_size-this.name.length-1>0&&(this.location=t.readCString())}),d.createUUIDBox("a5d40b30e81411ddba2f0800200c9a66",!0,!1,function(t){this.LiveServerManifest=t.readString(this.size-this.hdr_size).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}),d.createUUIDBox("d08a4f1810f34a82b6c832d8aba183d3",!0,!1,function(t){this.system_id=d.parseHex16(t);var e=t.readUint32();e>0&&(this.data=t.readUint8Array(e))}),d.createUUIDBox("a2394f525a9b4f14a2446c427c648df4",!0,!1),d.createUUIDBox("8974dbce7be74c5184f97148f9882554",!0,!1,function(t){this.default_AlgorithmID=t.readUint24(),this.default_IV_size=t.readUint8(),this.default_KID=d.parseHex16(t)}),d.createUUIDBox("d4807ef2ca3946958e5426cb9e46a79f",!0,!1,function(t){this.fragment_count=t.readUint8(),this.entries=[];for(var e=0;e>4,this.chromaSubsampling=e>>1&7,this.videoFullRangeFlag=1&e,this.colourPrimaries=t.readUint8(),this.transferCharacteristics=t.readUint8(),this.matrixCoefficients=t.readUint8()):(this.profile=t.readUint8(),this.level=t.readUint8(),e=t.readUint8(),this.bitDepth=e>>4&15,this.colorSpace=15&e,e=t.readUint8(),this.chromaSubsampling=e>>4&15,this.transferFunction=e>>1&7,this.videoFullRangeFlag=1&e),this.codecIntializationDataSize=t.readUint16(),this.codecIntializationData=t.readUint8Array(this.codecIntializationDataSize)}),d.createBoxCtor("vttC",function(t){this.text=t.readString(this.size-this.hdr_size)}),d.createFullBoxCtor("vvcC",function(t){var e,r,s={held_bits:void 0,num_held_bits:0,stream_read_1_bytes:function(t){this.held_bits=t.readUint8(),this.num_held_bits=8},stream_read_2_bytes:function(t){this.held_bits=t.readUint16(),this.num_held_bits=16},extract_bits:function(t){var e=this.held_bits>>this.num_held_bits-t&(1<1){for(s.stream_read_1_bytes(t),this.ptl_sublayer_present_mask=0,r=this.num_sublayers-2;r>=0;--r){var o=s.extract_bits(1);this.ptl_sublayer_present_mask|=o<1;++r)s.extract_bits(1);for(this.sublayer_level_idc=[],r=this.num_sublayers-2;r>=0;--r)this.ptl_sublayer_present_mask&1<"u"||null===e?e=2:e;r.length>=1;e+=d.decimalToHex(s,0)+".",0===this.hvcC.general_tier_flag?e+="L":e+="H",e+=this.hvcC.general_level_idc;var n=!1,a="";for(t=5;t>=0;t--)(this.hvcC.general_constraint_indicator[t]||n)&&(a="."+d.decimalToHex(this.hvcC.general_constraint_indicator[t],0)+a,n=!0);e+=a}return e},d.vvc1SampleEntry.prototype.getCodec=d.vvi1SampleEntry.prototype.getCodec=function(){var t,e=d.SampleEntry.prototype.getCodec.call(this);if(this.vvcC){e+="."+this.vvcC.general_profile_idc,this.vvcC.general_tier_flag?e+=".H":e+=".L",e+=this.vvcC.general_level_idc;var r="";if(this.vvcC.general_constraint_info){var s,n,a=[];for(n=0|this.vvcC.ptl_frame_only_constraint<<7|this.vvcC.ptl_multilayer_enabled<<6,t=0;t>2&63,a.push(n),n&&(s=t),n=this.vvcC.general_constraint_info[t]>>2&3;if(void 0===s)r=".CA";else{r=".C";var o="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",h=0,l=0;for(t=0;t<=s;++t)for(h=h<<8|a[t],l+=8;l>=5;)r+=o[h>>l-5&31],l-=5,h&=(1<4294967296&&(this.size+=8),"uuid"===this.type&&(this.size+=16),a.debug("BoxWriter","Writing box "+this.type+" of size: "+this.size+" at position "+t.getPosition()+(e||"")),this.size>4294967296?t.writeUint32(1):(this.sizePosition=t.getPosition(),t.writeUint32(this.size)),t.writeString(this.type,null,4),"uuid"===this.type&&t.writeUint8Array(this.uuid),this.size>4294967296&&t.writeUint64(this.size)},d.FullBox.prototype.writeHeader=function(t){this.size+=4,d.Box.prototype.writeHeader.call(this,t," v="+this.version+" f="+this.flags),t.writeUint8(this.version),t.writeUint24(this.flags)},d.Box.prototype.write=function(t){"mdat"===this.type?this.data&&(this.size=this.data.length,this.writeHeader(t),t.writeUint8Array(this.data)):(this.size=this.data?this.data.length:0,this.writeHeader(t),this.data&&t.writeUint8Array(this.data))},d.ContainerBox.prototype.write=function(t){this.size=0,this.writeHeader(t);for(var e=0;e=2&&t.writeUint32(this.default_sample_description_index),t.writeUint32(this.entries.length),e=0;e0)for(e=0;e+14294967295?1:0,this.flags=0,this.size=4,1===this.version&&(this.size+=4),this.writeHeader(t),1===this.version?t.writeUint64(this.baseMediaDecodeTime):t.writeUint32(this.baseMediaDecodeTime)},d.tfhdBox.prototype.write=function(t){this.version=0,this.size=4,this.flags&d.TFHD_FLAG_BASE_DATA_OFFSET&&(this.size+=8),this.flags&d.TFHD_FLAG_SAMPLE_DESC&&(this.size+=4),this.flags&d.TFHD_FLAG_SAMPLE_DUR&&(this.size+=4),this.flags&d.TFHD_FLAG_SAMPLE_SIZE&&(this.size+=4),this.flags&d.TFHD_FLAG_SAMPLE_FLAGS&&(this.size+=4),this.writeHeader(t),t.writeUint32(this.track_id),this.flags&d.TFHD_FLAG_BASE_DATA_OFFSET&&t.writeUint64(this.base_data_offset),this.flags&d.TFHD_FLAG_SAMPLE_DESC&&t.writeUint32(this.default_sample_description_index),this.flags&d.TFHD_FLAG_SAMPLE_DUR&&t.writeUint32(this.default_sample_duration),this.flags&d.TFHD_FLAG_SAMPLE_SIZE&&t.writeUint32(this.default_sample_size),this.flags&d.TFHD_FLAG_SAMPLE_FLAGS&&t.writeUint32(this.default_sample_flags)},d.tkhdBox.prototype.write=function(t){this.version=0,this.size=80,this.writeHeader(t),t.writeUint32(this.creation_time),t.writeUint32(this.modification_time),t.writeUint32(this.track_id),t.writeUint32(0),t.writeUint32(this.duration),t.writeUint32(0),t.writeUint32(0),t.writeInt16(this.layer),t.writeInt16(this.alternate_group),t.writeInt16(this.volume<<8),t.writeUint16(0),t.writeInt32Array(this.matrix),t.writeUint32(this.width),t.writeUint32(this.height)},d.trexBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=20,this.writeHeader(t),t.writeUint32(this.track_id),t.writeUint32(this.default_sample_description_index),t.writeUint32(this.default_sample_duration),t.writeUint32(this.default_sample_size),t.writeUint32(this.default_sample_flags)},d.trunBox.prototype.write=function(t){this.version=0,this.size=4,this.flags&d.TRUN_FLAGS_DATA_OFFSET&&(this.size+=4),this.flags&d.TRUN_FLAGS_FIRST_FLAG&&(this.size+=4),this.flags&d.TRUN_FLAGS_DURATION&&(this.size+=4*this.sample_duration.length),this.flags&d.TRUN_FLAGS_SIZE&&(this.size+=4*this.sample_size.length),this.flags&d.TRUN_FLAGS_FLAGS&&(this.size+=4*this.sample_flags.length),this.flags&d.TRUN_FLAGS_CTS_OFFSET&&(this.size+=4*this.sample_composition_time_offset.length),this.writeHeader(t),t.writeUint32(this.sample_count),this.flags&d.TRUN_FLAGS_DATA_OFFSET&&(this.data_offset_position=t.getPosition(),t.writeInt32(this.data_offset)),this.flags&d.TRUN_FLAGS_FIRST_FLAG&&t.writeUint32(this.first_sample_flags);for(var e=0;e-1)){if(t[r]instanceof d.Box||e[r]instanceof d.Box||typeof t[r]>"u"||typeof e[r]>"u"||"function"==typeof t[r]||"function"==typeof e[r]||t.subBoxNames&&t.subBoxNames.indexOf(r.slice(0,4))>-1||e.subBoxNames&&e.subBoxNames.indexOf(r.slice(0,4))>-1||"data"===r||"start"===r||"size"===r||"creation_time"===r||"modification_time"===r||d.DIFF_PRIMITIVE_ARRAY_PROP_NAMES.indexOf(r)>-1)continue;if(t[r]!==e[r])return!1}return!0},d.boxEqual=function(t,e){if(!d.boxEqualFields(t,e))return!1;for(var r=0;r1)for(e=1;etypeof DOMParser&&(r.document=new DOMParser().parseFromString(r.documentString,"application/xml")),r},(p=function(){}).prototype.parseSample=function(t){return new o(t.data.buffer).readString(t.data.length)},p.prototype.parseConfig=function(t){var e=new o(t.buffer);return e.readUint32(),e.readCString()},iT.XMLSubtitlein4Parser=f,iT.Textin4Parser=p,(c=function(t){this.stream=t||new l,this.boxes=[],this.mdats=[],this.moofs=[],this.isProgressive=!1,this.moovStartFound=!1,this.onMoovStart=null,this.moovStartSent=!1,this.onReady=null,this.readySent=!1,this.onSegment=null,this.onSamples=null,this.onError=null,this.sampleListBuilt=!1,this.fragmentedTracks=[],this.extractedTracks=[],this.isFragmentationInitialized=!1,this.sampleProcessingStarted=!1,this.nextMoofNumber=0,this.itemListBuilt=!1,this.onSidx=null,this.sidxSent=!1}).prototype.setSegmentOptions=function(t,e,r){var s=this.getTrackById(t);if(s){var n={};this.fragmentedTracks.push(n),n.id=t,n.user=e,n.trak=s,s.nextSample=0,n.segmentStream=null,n.nb_samples=1e3,n.rapAlignement=!0,r&&(r.nbSamples&&(n.nb_samples=r.nbSamples),r.rapAlignement&&(n.rapAlignement=r.rapAlignement))}},c.prototype.unsetSegmentOptions=function(t){for(var e=-1,r=0;r-1&&this.fragmentedTracks.splice(e,1)},c.prototype.setExtractionOptions=function(t,e,r){var s=this.getTrackById(t);if(s){var n={};this.extractedTracks.push(n),n.id=t,n.user=e,n.trak=s,s.nextSample=0,n.nb_samples=1e3,n.samples=[],r&&r.nbSamples&&(n.nb_samples=r.nbSamples)}},c.prototype.unsetExtractionOptions=function(t){for(var e=-1,r=0;r-1&&this.extractedTracks.splice(e,1)},c.prototype.parse=function(){var t,e,r;if(!(this.restoreParsePosition&&!this.restoreParsePosition()))for(;;)if(this.hasIncompleteMdat&&this.hasIncompleteMdat()){if(this.processIncompleteMdat())continue;return}else if(this.saveParsePosition&&this.saveParsePosition(),(e=d.parseOneBox(this.stream,!1)).code===d.ERR_NOT_ENOUGH_DATA){if(!this.processIncompleteBox)return;if(this.processIncompleteBox(e))continue;return}else{switch(t="uuid"!==(r=e.box).type?r.type:r.uuid,this.boxes.push(r),t){case"mdat":this.mdats.push(r);break;case"moof":this.moofs.push(r);break;case"moov":this.moovStartFound=!0,0===this.mdats.length&&(this.isProgressive=!0);default:void 0!==this[t]&&a.warn("ISOFile","Duplicate Box of type: "+t+", overriding previous occurrence"),this[t]=r}this.updateUsedBytes&&this.updateUsedBytes(r,e)}},c.prototype.checkBuffer=function(t){if(null==t)throw"Buffer must be defined and non empty";if(void 0===t.fileStart)throw"Buffer must have a fileStart property";return 0===t.byteLength?(a.warn("ISOFile","Ignoring empty buffer (fileStart: "+t.fileStart+")"),this.stream.logBufferLevel(),!1):(a.info("ISOFile","Processing buffer (fileStart: "+t.fileStart+")"),t.usedBytes=0,this.stream.insertBuffer(t),this.stream.logBufferLevel(),!!this.stream.initialized()||(a.warn("ISOFile","Not ready to start parsing"),!1))},c.prototype.appendBuffer=function(t,e){var r;if(this.checkBuffer(t))return this.parse(),this.moovStartFound&&!this.moovStartSent&&(this.moovStartSent=!0,this.onMoovStart&&this.onMoovStart()),this.moov?(this.sampleListBuilt||(this.buildSampleLists(),this.sampleListBuilt=!0),this.updateSampleLists(),this.onReady&&!this.readySent&&(this.readySent=!0,this.onReady(this.getInfo())),this.processSamples(e),this.nextSeekPosition?(r=this.nextSeekPosition,this.nextSeekPosition=void 0):r=this.nextParsePosition,this.stream.getEndFilePositionAfter&&(r=this.stream.getEndFilePositionAfter(r))):r=this.nextParsePosition?this.nextParsePosition:0,this.sidx&&this.onSidx&&!this.sidxSent&&(this.onSidx(this.sidx),this.sidxSent=!0),this.meta&&(this.flattenItemInfo&&!this.itemListBuilt&&(this.flattenItemInfo(),this.itemListBuilt=!0),this.processItems&&this.processItems(this.onItem)),this.stream.cleanBuffers&&(a.info("ISOFile","Done processing buffer (fileStart: "+t.fileStart+") - next buffer to fetch should have a fileStart position of "+r),this.stream.logBufferLevel(),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0),a.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize())),r},c.prototype.getInfo=function(){var t,e,r,s,n,a,o={},h=/* @__PURE__ */new Date("1904-01-01T00:00:00Z").getTime();if(this.moov)for(o.hasMoov=!0,o.duration=this.moov.mvhd.duration,o.timescale=this.moov.mvhd.timescale,o.isFragmented=null!=this.moov.mvex,o.isFragmented&&this.moov.mvex.mehd&&(o.fragment_duration=this.moov.mvex.mehd.fragment_duration),o.isProgressive=this.isProgressive,o.hasIOD=null!=this.moov.iods,o.brands=[],o.brands.push(this.ftyp.major_brand),o.brands=o.brands.concat(this.ftyp.compatible_brands),o.created=new Date(h+1e3*this.moov.mvhd.creation_time),o.modified=new Date(h+1e3*this.moov.mvhd.modification_time),o.tracks=[],o.audioTracks=[],o.videoTracks=[],o.subtitleTracks=[],o.metadataTracks=[],o.hintTracks=[],o.otherTracks=[],t=0;t0?o.mime+='video/mp4; codecs="':o.audioTracks&&o.audioTracks.length>0?o.mime+='audio/mp4; codecs="':o.mime+='application/mp4; codecs="',t=0;t=r.samples.length)&&(a.info("ISOFile","Sending fragmented data on track #"+s.id+" for samples ["+Math.max(0,r.nextSample-s.nb_samples)+","+(r.nextSample-1)+"]"),a.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize()),this.onSegment&&this.onSegment(s.id,s.user,s.segmentStream.buffer,r.nextSample,t||r.nextSample>=r.samples.length),s.segmentStream=null,s!==this.fragmentedTracks[e]))break}}if(null!==this.onSamples)for(e=0;e=r.samples.length)&&(a.debug("ISOFile","Sending samples on track #"+o.id+" for sample "+r.nextSample),this.onSamples&&this.onSamples(o.id,o.user,o.samples),o.samples=[],o!==this.extractedTracks[e]))break}}}},c.prototype.getBox=function(t){var e=this.getBoxes(t,!0);return e.length?e[0]:null},c.prototype.getBoxes=function(t,e){var r=[];return c._sweep.call(this,t,r,e),r},c._sweep=function(t,e,r){for(var s in this.type&&this.type==t&&e.push(this),this.boxes){if(e.length&&r)return;c._sweep.call(this.boxes[s],t,e,r)}},c.prototype.getTrackSamplesInfo=function(t){var e=this.getTrackById(t);if(e)return e.samples},c.prototype.getTrackSample=function(t,e){var r=this.getTrackById(t);return this.getSample(r,e)},c.prototype.releaseUsedSamples=function(t,e){var r=0,s=this.getTrackById(t);s.lastValidSample||(s.lastValidSample=0);for(var n=s.lastValidSample;nt*n.timescale){u=s-1;break}e&&n.is_sync&&(l=s)}for(e&&(u=l),t=r.samples[u].cts,r.nextSample=u;r.samples[u].alreadyRead===r.samples[u].size&&r.samples[u+1];)u++;return h=r.samples[u].offset+r.samples[u].alreadyRead,a.info("ISOFile","Seeking to "+(e?"RAP":"")+" sample #"+r.nextSample+" on track "+r.tkhd.track_id+", time "+a.getDurationString(t,o)+" and offset: "+h),{offset:h,time:t/o}},c.prototype.getTrackDuration=function(t){var e;return t.samples?((e=t.samples[t.samples.length-1]).cts+e.duration)/e.timescale:1/0},c.prototype.seek=function(t,e){var r,s,n,o=this.moov,h={offset:1/0,time:1/0};if(this.moov){for(n=0;nthis.getTrackDuration(r))&&((s=this.seekTrack(t,e,r)).offset-1){h=l;break}switch(h){case"Visual":if(n.add("vmhd").set("graphicsmode",0).set("opcolor",[0,0,0]),a.set("width",e.width).set("height",e.height).set("horizresolution",4718592).set("vertresolution",4718592).set("frame_count",1).set("compressorname",e.type+" Compressor").set("depth",24),e.avcDecoderConfigRecord){var p=new d.avcCBox;p.parse(new o(e.avcDecoderConfigRecord)),a.addBox(p)}else if(e.hevcDecoderConfigRecord){var c=new d.hvcCBox;c.parse(new o(e.hevcDecoderConfigRecord)),a.addBox(c)}break;case"Audio":n.add("smhd").set("balance",e.balance||0),a.set("channel_count",e.channel_count||2).set("samplesize",e.samplesize||16).set("samplerate",e.samplerate||65536);break;case"Hint":n.add("hmhd");break;case"Subtitle":n.add("sthd"),"stpp"===e.type&&a.set("namespace",e.namespace||"nonamespace").set("schema_location",e.schema_location||"").set("auxiliary_mime_types",e.auxiliary_mime_types||"");break;default:n.add("nmhd")}e.description&&a.addBox(e.description),e.description_boxes&&e.description_boxes.forEach(function(t){a.addBox(t)}),n.add("dinf").add("dref").addEntry(new d["url Box"]().set("flags",1));var m=n.add("stbl");return m.add("stsd").addEntry(a),m.add("stts").set("sample_counts",[]).set("sample_deltas",[]),m.add("stsc").set("first_chunk",[]).set("samples_per_chunk",[]).set("sample_description_index",[]),m.add("stco").set("chunk_offsets",[]),m.add("stsz").set("sample_sizes",[]),this.moov.mvex.add("trex").set("track_id",e.id).set("default_sample_description_index",e.default_sample_description_index||1).set("default_sample_duration",e.default_sample_duration||0).set("default_sample_size",e.default_sample_size||0).set("default_sample_flags",e.default_sample_flags||0),this.buildTrakSampleLists(r),e.id}},d.Box.prototype.computeSize=function(t){var e=t||new h;e.endianness=h.BIG_ENDIAN,this.write(e)},c.prototype.addSample=function(t,e,r){var s=r||{},n={},a=this.getTrackById(t);if(null!==a){n.number=a.samples.length,n.track_id=a.tkhd.track_id,n.timescale=a.mdia.mdhd.timescale,n.description_index=s.sample_description_index?s.sample_description_index-1:0,n.description=a.mdia.minf.stbl.stsd.entries[n.description_index],n.data=e,n.size=e.byteLength,n.alreadyRead=n.size,n.duration=s.duration||1,n.cts=s.cts||0,n.dts=s.dts||0,n.is_sync=s.is_sync||!1,n.is_leading=s.is_leading||0,n.depends_on=s.depends_on||0,n.is_depended_on=s.is_depended_on||0,n.has_redundancy=s.has_redundancy||0,n.degradation_priority=s.degradation_priority||0,n.offset=0,n.subsamples=s.subsamples,a.samples.push(n),a.samples_size+=n.size,a.samples_duration+=n.duration,void 0===a.first_dts&&(a.first_dts=s.dts),this.processSamples();var o=this.createSingleSampleMoof(n);return this.addBox(o),o.computeSize(),o.trafs[0].truns[0].data_offset=o.size+8,this.add("mdat").data=new Uint8Array(e),n}},c.prototype.createSingleSampleMoof=function(t){var e=0;e=t.is_sync?33554432:65536;var r=new d.moofBox;r.add("mfhd").set("sequence_number",this.nextMoofNumber),this.nextMoofNumber++;var s=r.add("traf"),n=this.getTrackById(t.track_id);return s.add("tfhd").set("track_id",t.track_id).set("flags",d.TFHD_FLAG_DEFAULT_BASE_IS_MOOF),s.add("tfdt").set("baseMediaDecodeTime",t.dts-(n.first_dts||0)),s.add("trun").set("flags",d.TRUN_FLAGS_DATA_OFFSET|d.TRUN_FLAGS_DURATION|d.TRUN_FLAGS_SIZE|d.TRUN_FLAGS_FLAGS|d.TRUN_FLAGS_CTS_OFFSET).set("data_offset",0).set("first_sample_flags",0).set("sample_count",1).set("sample_duration",[t.duration]).set("sample_size",[t.size]).set("sample_flags",[e]).set("sample_composition_time_offset",[t.cts-t.dts]),r},c.prototype.lastMoofIndex=0,c.prototype.samplesDataSize=0,c.prototype.resetTables=function(){var t,e,r,s,n,a;for(this.initial_duration=this.moov.mvhd.duration,this.moov.mvhd.duration=0,t=0;t=2&&(l=n[o].grouping_type+"/0",(h=new u(n[o].grouping_type,0)).is_fragment=!0,e.sample_groups_info[l]||(e.sample_groups_info[l]=h))}else for(o=0;o=2&&(l=s[o].grouping_type+"/0",h=new u(s[o].grouping_type,0),t.sample_groups_info[l]||(t.sample_groups_info[l]=h))},c.setSampleGroupProperties=function(t,e,r,s){var n,a,o;for(n in e.sample_groups=[],s)e.sample_groups[n]={},e.sample_groups[n].grouping_type=s[n].grouping_type,e.sample_groups[n].grouping_type_parameter=s[n].grouping_type_parameter,r>=s[n].last_sample_in_run&&(s[n].last_sample_in_run<0&&(s[n].last_sample_in_run=0),s[n].entry_index++,s[n].entry_index<=s[n].sbgp.entries.length-1&&(s[n].last_sample_in_run+=s[n].sbgp.entries[s[n].entry_index].sample_count)),s[n].entry_index<=s[n].sbgp.entries.length-1?e.sample_groups[n].group_description_index=s[n].sbgp.entries[s[n].entry_index].group_description_index:e.sample_groups[n].group_description_index=-1,0!==e.sample_groups[n].group_description_index&&(o=s[n].fragment_description?s[n].fragment_description:s[n].description,e.sample_groups[n].group_description_index>0?(a=e.sample_groups[n].group_description_index>65535?(e.sample_groups[n].group_description_index>>16)-1:e.sample_groups[n].group_description_index-1,o&&a>=0&&(e.sample_groups[n].description=o.entries[a])):o&&o.version>=2&&o.default_group_description_index>0&&(e.sample_groups[n].description=o.entries[o.default_group_description_index-1]))},c.process_sdtp=function(t,e,r){e&&(t?(e.is_leading=t.is_leading[r],e.depends_on=t.sample_depends_on[r],e.is_depended_on=t.sample_is_depended_on[r],e.has_redundancy=t.sample_has_redundancy[r]):(e.is_leading=0,e.depends_on=0,e.is_depended_on=0,e.has_redundancy=0))},c.prototype.buildSampleLists=function(){var t,e;for(t=0;t"u")){for(e=0;ew&&(v++,w<0&&(w=0),w+=a.sample_counts[v]),e>0?(t.samples[e-1].duration=a.sample_deltas[v],t.samples_duration+=t.samples[e-1].duration,A.dts=t.samples[e-1].dts+t.samples[e-1].duration):A.dts=0,o?(e>=S&&(E++,S<0&&(S=0),S+=o.sample_counts[E]),A.cts=t.samples[e].dts+o.sample_offsets[E]):A.cts=A.dts,h?(e==h.sample_numbers[U]-1?(A.is_sync=!0,U++):(A.is_sync=!1,A.degradation_priority=0),u&&u.entries[x].sample_delta+T==e+1&&(A.subsamples=u.entries[x].subsamples,T+=u.entries[x].sample_delta,x++)):A.is_sync=!0,c.process_sdtp(t.mdia.minf.stbl.sdtp,A,A.number),p?A.degradation_priority=p.priority[e]:A.degradation_priority=0,u&&u.entries[x].sample_delta+T==e&&(A.subsamples=u.entries[x].subsamples,T+=u.entries[x].sample_delta),(d.length>0||f.length>0)&&c.setSampleGroupProperties(t,A,e,t.sample_groups_info)}e>0&&(t.samples[e-1].duration=Math.max(t.mdia.mdhd.duration-t.samples[e-1].dts,0),t.samples_duration+=t.samples[e-1].duration)}},c.prototype.updateSampleLists=function(){var t,e,r,s,n,a,o,h,l,u,f,p,m,g;if(void 0!==this.moov){for(;this.lastMoofIndex0&&c.initSampleGroups(f,u,u.sbgps,f.mdia.minf.stbl.sgpds,u.sgpds),e=0;e0?m.dts=f.samples[f.samples.length-2].dts+f.samples[f.samples.length-2].duration:(u.tfdt?m.dts=u.tfdt.baseMediaDecodeTime:m.dts=0,f.first_traf_merged=!0),m.cts=m.dts,y.flags&d.TRUN_FLAGS_CTS_OFFSET&&(m.cts=m.dts+y.sample_composition_time_offset[r]),g=o,y.flags&d.TRUN_FLAGS_FLAGS?g=y.sample_flags[r]:0===r&&y.flags&d.TRUN_FLAGS_FIRST_FLAG&&(g=y.first_sample_flags),m.is_sync=!(g>>16&1),m.is_leading=g>>26&3,m.depends_on=g>>24&3,m.is_depended_on=g>>22&3,m.has_redundancy=g>>20&3,m.degradation_priority=65535&g;var _=!!(u.tfhd.flags&d.TFHD_FLAG_BASE_DATA_OFFSET),b=!!(u.tfhd.flags&d.TFHD_FLAG_DEFAULT_BASE_IS_MOOF),w=!!(y.flags&d.TRUN_FLAGS_DATA_OFFSET),v=0;v=_?u.tfhd.base_data_offset:b||0===e?l.start:h,0===e&&0===r?w?m.offset=v+y.data_offset:m.offset=v:m.offset=h,h=m.offset+m.size,(u.sbgps.length>0||u.sgpds.length>0||f.mdia.minf.stbl.sbgps.length>0||f.mdia.minf.stbl.sgpds.length>0)&&c.setSampleGroupProperties(f,m,m.number_in_traf,u.sample_groups_info)}}if(u.subs){f.has_fragment_subsamples=!0;var S=u.first_sample_index;for(e=0;e-1))return null;var o=(r=this.stream.buffers[n]).byteLength-(s.offset+s.alreadyRead-r.fileStart);if(s.size-s.alreadyRead<=o)return a.debug("ISOFile","Getting sample #"+e+" data (alreadyRead: "+s.alreadyRead+" offset: "+(s.offset+s.alreadyRead-r.fileStart)+" read size: "+(s.size-s.alreadyRead)+" full size: "+s.size+")"),h.memcpy(s.data.buffer,s.alreadyRead,r,s.offset+s.alreadyRead-r.fileStart,s.size-s.alreadyRead),r.usedBytes+=s.size-s.alreadyRead,this.stream.logBufferLevel(),s.alreadyRead=s.size,s;if(0===o)return null;a.debug("ISOFile","Getting sample #"+e+" partial data (alreadyRead: "+s.alreadyRead+" offset: "+(s.offset+s.alreadyRead-r.fileStart)+" read size: "+o+" full size: "+s.size+")"),h.memcpy(s.data.buffer,s.alreadyRead,r,s.offset+s.alreadyRead-r.fileStart,o),s.alreadyRead+=o,r.usedBytes+=o,this.stream.logBufferLevel()}},c.prototype.releaseSample=function(t,e){var r=t.samples[e];return r.data?(this.samplesDataSize-=r.size,r.data=null,r.alreadyRead=0,r.size):0},c.prototype.getAllocatedSampleDataSize=function(){return this.samplesDataSize},c.prototype.getCodecs=function(){var t,e="";for(t=0;t0&&(e+=","),e+=r.mdia.minf.stbl.stsd.entries[0].getCodec()}return e},c.prototype.getTrexById=function(t){var e;if(!this.moov||!this.moov.mvex)return null;for(e=0;e0&&(r.protection=n.ipro.protections[n.iinf.item_infos[t].protection_index-1]),n.iinf.item_infos[t].item_type?r.type=n.iinf.item_infos[t].item_type:r.type="mime",r.content_type=n.iinf.item_infos[t].content_type,r.content_encoding=n.iinf.item_infos[t].content_encoding;if(n.iloc)for(t=0;t0&&f.property_index-1-1))return null;var l=(e=this.stream.buffers[o]).byteLength-(n.offset+n.alreadyRead-e.fileStart);if(!(n.length-n.alreadyRead<=l))return a.debug("ISOFile","Getting item #"+t+" extent #"+s+" partial data (alreadyRead: "+n.alreadyRead+" offset: "+(n.offset+n.alreadyRead-e.fileStart)+" read size: "+l+" full extent size: "+n.length+" full item size: "+r.size+")"),h.memcpy(r.data.buffer,r.alreadyRead,e,n.offset+n.alreadyRead-e.fileStart,l),n.alreadyRead+=l,r.alreadyRead+=l,e.usedBytes+=l,this.stream.logBufferLevel(),null;a.debug("ISOFile","Getting item #"+t+" extent #"+s+" data (alreadyRead: "+n.alreadyRead+" offset: "+(n.offset+n.alreadyRead-e.fileStart)+" read size: "+(n.length-n.alreadyRead)+" full extent size: "+n.length+" full item size: "+r.size+")"),h.memcpy(r.data.buffer,r.alreadyRead,e,n.offset+n.alreadyRead-e.fileStart,n.length-n.alreadyRead),e.usedBytes+=n.length-n.alreadyRead,this.stream.logBufferLevel(),r.alreadyRead+=n.length-n.alreadyRead,n.alreadyRead=n.length}}return r.alreadyRead===r.size?r:null},c.prototype.releaseItem=function(t){var e=this.items[t];if(!e.data)return 0;this.itemsDataSize-=e.size,e.data=null,e.alreadyRead=0;for(var r=0;r0?this.moov.traks[t].samples[0].duration:0),e.push(s)}return e},d.Box.prototype.printHeader=function(t){this.size+=8,this.size>4294967296&&(this.size+=8),"uuid"===this.type&&(this.size+=16),t.log(t.indent+"size:"+this.size),t.log(t.indent+"type:"+this.type)},d.FullBox.prototype.printHeader=function(t){this.size+=4,d.Box.prototype.printHeader.call(this,t),t.log(t.indent+"version:"+this.version),t.log(t.indent+"flags:"+this.flags)},d.Box.prototype.print=function(t){this.printHeader(t)},d.ContainerBox.prototype.print=function(t){this.printHeader(t);for(var e=0;e>8)),t.log(t.indent+"matrix: "+this.matrix.join(", ")),t.log(t.indent+"next_track_id: "+this.next_track_id)},d.tkhdBox.prototype.print=function(t){d.FullBox.prototype.printHeader.call(this,t),t.log(t.indent+"creation_time: "+this.creation_time),t.log(t.indent+"modification_time: "+this.modification_time),t.log(t.indent+"track_id: "+this.track_id),t.log(t.indent+"duration: "+this.duration),t.log(t.indent+"volume: "+(this.volume>>8)),t.log(t.indent+"matrix: "+this.matrix.join(", ")),t.log(t.indent+"layer: "+this.layer),t.log(t.indent+"alternate_group: "+this.alternate_group),t.log(t.indent+"width: "+this.width),t.log(t.indent+"height: "+this.height)},(m={}).createFile=function(t,e){var r=new c(e);return r.discardMdatData=!(void 0===t||t),r},iT.createFile=m.createFile;let iA=/* @__PURE__ */ix(iT),iC={sampleRate:48e3,channelCount:2,codec:"mp4a.40.2"};function iI(t,e){let r=e.videoTracks[0],s={};if(null!=r){let n=function(t){for(let e of t.mdia.minf.stbl.stsd.entries){let t=e.avcC??e.hvcC??e.vpcC;if(null!=t){let e=new iA.DataStream(void 0,0,iA.DataStream.BIG_ENDIAN);return t.write(e),new Uint8Array(e.buffer.slice(8))}}throw Error("avcC, hvcC or VPX not found")}(t.getTrackById(r.id)).buffer,{descKey:a,type:o}=r.codec.startsWith("avc1")?{descKey:"avcDecoderConfigRecord",type:"avc1"}:r.codec.startsWith("hvc1")?{descKey:"hevcDecoderConfigRecord",type:"hvc1"}:{descKey:"",type:""};""!==a&&(s.videoTrackConf={timescale:r.timescale,duration:r.duration,width:r.video.width,height:r.video.height,brands:e.brands,type:o,[a]:n}),s.videoDecoderConf={codec:r.codec,codedHeight:r.video.height,codedWidth:r.video.width,description:n}}let n=e.audioTracks[0];if(null!=n){let e=iB(t);s.audioTrackConf={timescale:n.timescale,samplerate:n.audio.sample_rate,channel_count:n.audio.channel_count,hdlr:"soun",type:n.codec.startsWith("mp4a")?"mp4a":n.codec,description:iB(t)},s.audioDecoderConf={codec:n.codec.startsWith("mp4a")?iC.codec:n.codec,numberOfChannels:n.audio.channel_count,sampleRate:n.audio.sample_rate,...null==e?{}:function(t){var e;let r=null==(e=t.esd.descs[0])?void 0:e.descs[0];if(null==r)return{};let[s,n]=r.data;return{sampleRate:[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350][((7&s)<<1)+(n>>7)],numberOfChannels:(127&n)>>3}}(e)}}return s}function iB(t,e="mp4a"){var r;let s=null==(r=t.moov)?void 0:r.traks.map(t=>t.mdia.minf.stbl.stsd.entries).flat().find(({type:t})=>t===e);return null==s?void 0:s.esds}class ik{constructor(){ey(this,"readable"),ey(this,"writable"),ew(this,A,0);let t=iA.createFile(),e=!1;this.readable=new ReadableStream({start:e=>{t.onReady=r=>{var s,n;let a=null==(s=r.videoTracks[0])?void 0:s.id;null!=a&&t.setExtractionOptions(a,"video",{nbSamples:100});let o=null==(n=r.audioTracks[0])?void 0:n.id;null!=o&&t.setExtractionOptions(o,"audio",{nbSamples:100}),e.enqueue({chunkType:"ready",data:{info:r,file:t}}),t.start()};let r={};t.onSamples=(s,n,a)=>{e.enqueue({chunkType:"samples",data:{id:s,type:n,samples:a.map(t=>({...t}))}}),r[s]=(r[s]??0)+a.length,t.releaseUsedSamples(s,r[s])},t.onFlush=()=>{e.close()}},cancel:()=>{t.stop(),e=!0}},{highWaterMark:50}),this.writable=new WritableStream({write:async r=>{if(e){this.writable.abort();return}let s=r.buffer;s.fileStart=eb(this,A),ev(this,A,eb(this,A)+s.byteLength),t.appendBuffer(s)},close:()=>{var e;t.flush(),t.stop(),null==(e=t.onFlush)||e.call(t)}})}}A=new WeakMap;let iF=0;function iR(t){return"file"===t.kind&&t.createReader instanceof Function}let iP=class t{constructor(t,e={audio:!0}){if(ew(this,C,e5.create(`MP4Clip id:${iF++},`)),ey(this,"ready"),ew(this,I,!1),ew(this,B,{duration:0,width:0,height:0,audioSampleRate:0,audioChanCount:0}),ew(this,k),ew(this,F,1),ew(this,R,[]),ew(this,P,[]),ew(this,z,null),ew(this,L,null),ew(this,D,{video:null,audio:null}),ew(this,M,{audio:!0}),ey(this,"tickInterceptor",async(t,e)=>e),ew(this,O,new AbortController),!(t instanceof ReadableStream)&&!iR(t)&&!Array.isArray(t.videoSamples))throw Error("Illegal argument");ev(this,M,{...e}),ev(this,F,"object"==typeof e.audio&&"volume"in e.audio?e.audio.volume:1);let r=async t=>(await eH(eb(this,k),t),await eb(this,k).stream());ev(this,k,iR(t)?t:"localFile"in t?t.localFile:e1()),this.ready=(t instanceof ReadableStream?r(t).then(t=>iL(t,eb(this,M))):iR(t)?t.stream().then(t=>iL(t,eb(this,M))):Promise.resolve(t)).then(async({videoSamples:t,audioSamples:e,decoderConf:r})=>{var s,n,a;ev(this,R,t),ev(this,P,e),ev(this,D,r);let{videoFrameFinder:o,audioFrameFinder:h}=(s={video:null==r.video?null:{...r.video,hardwareAcceleration:eb(this,M).__unsafe_hardwareAcceleration__},audio:r.audio},n=await eb(this,k).createReader(),{audioFrameFinder:null==(a=!1!==eb(this,M).audio?eb(this,F):null)||null==s.audio||0===e.length?null:new iM(n,e,s.audio,{volume:a,targetSampleRate:iC.sampleRate}),videoFrameFinder:null==s.video||0===t.length?null:new iD(n,t,s.video)});return ev(this,z,o),ev(this,L,h),ev(this,B,function(t,e,r){let s={duration:0,width:0,height:0,audioSampleRate:0,audioChanCount:0};null!=t.video&&e.length>0&&(s.width=t.video.codedWidth??0,s.height=t.video.codedHeight??0),null!=t.audio&&r.length>0&&(s.audioSampleRate=iC.sampleRate,s.audioChanCount=iC.channelCount);let n=0,a=0;if(e.length>0)for(let t=e.length-1;t>=0;t--){let r=e[t];if(!r.deleted){n=r.cts+r.duration;break}}if(r.length>0){let t=r.at(-1);a=t.cts+t.duration}return s.duration=Math.max(n,a),s}(r,t,e)),eb(this,C).info("MP4Clip meta:",eb(this,B)),{...eb(this,B)}})}get meta(){return{...eb(this,B)}}async tick(t){var e,r;if(t>=eb(this,B).duration)return await this.tickInterceptor(t,{audio:[],state:"done"});let[s,n]=await Promise.all([(null==(e=eb(this,L))?void 0:e.find(t))??[],null==(r=eb(this,z))?void 0:r.find(t)]);return null==n?await this.tickInterceptor(t,{audio:s,state:"success"}):await this.tickInterceptor(t,{video:n,audio:s,state:"success"})}async thumbnails(t=100,e){eb(this,O).abort(),ev(this,O,new AbortController);let r=eb(this,O).signal;await this.ready;let s="generate thumbnails aborted";if(r.aborted)throw Error(s);let{width:n,height:a}=eb(this,B),o=function(t,e,r){let s=new OffscreenCanvas(t,e),n=s.getContext("2d");return async a=>(n.drawImage(a,0,0,t,e),a.close(),await s.convertToBlob(r))}(t,Math.round(t/n*a),{quality:.1,type:"image/png"});return new Promise(async(t,n)=>{let a=[],h=eb(this,D).video;if(null==h||0===eb(this,R).length){l();return}async function l(){r.aborted||t(await Promise.all(a.map(async t=>({ts:t.ts,img:await t.img}))))}function u(t){a.push({ts:t.timestamp,img:o(t)})}r.addEventListener("abort",()=>{n(Error(s))});let{start:d=0,end:f=eb(this,B).duration,step:p}=e??{};if(p){let t=d,e=new iD(await eb(this,k).createReader(),eb(this,R),{...h,hardwareAcceleration:eb(this,M).__unsafe_hardwareAcceleration__});for(;t<=f&&!r.aborted;){let r=await e.find(t);r&&u(r),t+=p}e.destroy(),l()}else await iY(eb(this,R),eb(this,k),h,r,{start:d,end:f},(t,e)=>{u(t),e&&l()})})}async split(e){if(await this.ready,e<=0||e>=eb(this,B).duration)throw Error('"time" out of bounds');let[r,s]=function(t,e){if(0===t.length)return[];let r=0,s=0,n=-1;for(let a=0;a({...t}));for(let t=r;t({...t,cts:t.cts-e}));for(let t of h){if(t.cts>=0)break;t.deleted=!0,t.cts=-1}return[o,h]}(eb(this,R),e),[n,a]=function(t,e){if(0===t.length)return[];let r=-1;for(let s=0;st[s].cts)){r=s;break}if(-1===r)throw Error("Not found audio sample by time");return[t.slice(0,r),t.slice(r).map(t=>({...t,cts:t.cts-e}))]}(eb(this,P),e),o=new t({localFile:eb(this,k),videoSamples:r??[],audioSamples:n??[],decoderConf:eb(this,D)},eb(this,M)),h=new t({localFile:eb(this,k),videoSamples:s??[],audioSamples:a??[],decoderConf:eb(this,D)},eb(this,M));return await Promise.all([o.ready,h.ready]),[o,h]}async clone(){await this.ready;let e=new t({localFile:eb(this,k),videoSamples:[...eb(this,R)],audioSamples:[...eb(this,P)],decoderConf:eb(this,D)},eb(this,M));return await e.ready,e.tickInterceptor=this.tickInterceptor,e}async splitTrack(){await this.ready;let e=[];if(eb(this,R).length>0){let r=new t({localFile:eb(this,k),videoSamples:[...eb(this,R)],audioSamples:[],decoderConf:{video:eb(this,D).video,audio:null}},eb(this,M));await r.ready,r.tickInterceptor=this.tickInterceptor,e.push(r)}if(eb(this,P).length>0){let r=new t({localFile:eb(this,k),videoSamples:[],audioSamples:[...eb(this,P)],decoderConf:{audio:eb(this,D).audio,video:null}},eb(this,M));await r.ready,r.tickInterceptor=this.tickInterceptor,e.push(r)}return e}destroy(){var t,e;eb(this,I)||(eb(this,C).info("MP4Clip destroy"),ev(this,I,!0),null==(t=eb(this,z))||t.destroy(),null==(e=eb(this,L))||e.destroy())}};C=new WeakMap,I=new WeakMap,B=new WeakMap,k=new WeakMap,F=new WeakMap,R=new WeakMap,P=new WeakMap,z=new WeakMap,L=new WeakMap,D=new WeakMap,M=new WeakMap,O=new WeakMap;let iz=iP;async function iL(t,e={}){let r;let s={video:null,audio:null},n=[],a=[];return new Promise(async(h,l)=>{let u=-1,d=-1,f=iE(t.pipeThrough(new ik),{onChunk:async({chunkType:t,data:h})=>{if("ready"===t){r=h.info;let{videoDecoderConf:t,audioDecoderConf:e}=iI(h.file,h.info);s.video=t??null,s.audio=e??null,null==t&&null==e&&(f(),l(Error("MP4Clip must contain at least one video or audio track"))),e5.info("mp4BoxFile moov ready",{...h.info,tracks:null,videoTracks:null,audioTracks:null},s)}else if("samples"===t){if("video"===h.type)for(let t of(-1===u&&(u=h.samples[0].dts),h.samples))n.push(o(t,u,"video"));else if("audio"===h.type&&e.audio)for(let t of(-1===d&&(d=h.samples[0].dts),h.samples))a.push(o(t,d,"audio"))}},onDone:()=>{let t=n.at(-1)??a.at(-1);if(null==r){l(Error("MP4Clip stream is done, but not emit ready"));return}if(null==t){l(Error("MP4Clip stream not contain any sample"));return}let e=n[0];null!=e&&e.cts<2e5&&(e.duration+=e.cts,e.cts=0),e5.info("mp4 stream parsed"),h({videoSamples:n,audioSamples:a,decoderConf:s})}})});function o(t,e=0,r){return{...t,is_idr:"video"===r&&t.is_sync&&function(t){let e=new DataView(t.buffer),r=0;for(;r((null==eb(this,N)||t<=eb(this,G)||t-eb(this,G)>3e6)&&eb(this,Q).call(this,t),eb(this,Y).abort=!0,ev(this,G,t),ev(this,Y,{abort:!1,st:performance.now()}),await eb(this,$).call(this,t,eb(this,N),eb(this,Y)))),ew(this,W,0),ew(this,V,!1),ew(this,H,0),ew(this,X,[]),ew(this,j,0),ew(this,Z,0),ew(this,$,async(t,e,r)=>{if(null==e||"closed"===e.state||r.abort)return null;if(eb(this,X).length>0){let s=eb(this,X)[0];return ts.timestamp+(s.duration??0)?(s.close(),await eb(this,$).call(this,t,e,r)):(eb(this,X).length<10&&eb(this,q).call(this,e).catch(e=>{throw eb(this,Q).call(this,t),e}),s))}if(eb(this,K)||eb(this,j)0){if(performance.now()-r.st>3e3)throw Error(`MP4Clip.tick video timeout, ${JSON.stringify(eb(this,J).call(this))}`);await iv(15)}else{if(eb(this,H)>=this.samples.length)return null;try{await eb(this,q).call(this,e)}catch(e){throw eb(this,Q).call(this,t),e}}return await eb(this,$).call(this,t,e,r)}),ew(this,K,!1),ew(this,q,async t=>{var e,r;if(eb(this,K))return;ev(this,K,!0);let s=eb(this,H)+1,n=!1;for(;s{if(eb(this,V))throw t;ev(this,V,!0),e5.warn("Downgrade to software decode"),eb(this,Q).call(this)}}),ev(this,Z,eb(this,Z)+e.length)}}ev(this,H,s),ev(this,K,!1)}),ew(this,Q,t=>{var e,r;if(ev(this,K,!1),eb(this,X).forEach(t=>t.close()),ev(this,X,[]),null==t||0===t)ev(this,H,0);else{let e=0;for(let r=0;r{if(ev(this,j,eb(this,j)+1),-1===t.timestamp){t.close();return}let e=t;null==t.duration&&(e=new VideoFrame(t,{duration:eb(this,W)}),t.close()),eb(this,X).push(e)},error:t=>{e5.error(`MP4Clip VideoDecoder err: ${t.message}`)}})),eb(this,N).configure({...this.conf,...eb(this,V)?{hardwareAcceleration:"prefer-software"}:{}})}),ew(this,J,()=>{var t,e;return{time:eb(this,G),decState:null==(t=eb(this,N))?void 0:t.state,decQSize:null==(e=eb(this,N))?void 0:e.decodeQueueSize,decCusorIdx:eb(this,H),sampleLen:this.samples.length,inputCnt:eb(this,Z),outputCnt:eb(this,j),cacheFrameLen:eb(this,X).length,softDeocde:eb(this,V)}}),ey(this,"destroy",()=>{var t,e;(null==(t=eb(this,N))?void 0:t.state)!=="closed"&&(null==(e=eb(this,N))||e.close()),ev(this,N,null),eb(this,Y).abort=!0,eb(this,X).forEach(t=>t.close()),ev(this,X,[]),this.localFileReader.close()}),this.localFileReader=t,this.samples=e,this.conf=r}}N=new WeakMap,G=new WeakMap,Y=new WeakMap,W=new WeakMap,V=new WeakMap,H=new WeakMap,X=new WeakMap,j=new WeakMap,Z=new WeakMap,$=new WeakMap,K=new WeakMap,q=new WeakMap,Q=new WeakMap,J=new WeakMap;class iM{constructor(t,e,r,s){ew(this,tt,1),ew(this,te),ew(this,ti,null),ew(this,tr,{abort:!1,st:performance.now()}),ey(this,"find",async t=>{if(null==eb(this,ti)||t<=eb(this,ts)||t-eb(this,ts)>1e5){eb(this,tl).call(this),ev(this,ts,t);for(let e=0;e{if(null==e||r.abort||"closed"===e.state)return[];let s=Math.ceil(t*(eb(this,te)/1e6));if(0===s)return[];let n=eb(this,ta).frameCnt-s;if(n>0)return ne){let h=e-s;r[0].set(a.subarray(0,h),s),r[1].set(o.subarray(0,h),s),t.data[n][0]=a.subarray(h,a.length),t.data[n][1]=o.subarray(h,o.length);break}r[0].set(a,s),r[1].set(o,s),s+=a.length,n++}return t.data=t.data.slice(n),t.frameCnt-=e,r}(eb(this,ta),s);if(e.decodeQueueSize>10){if(performance.now()-r.st>3e3)throw r.abort=!0,Error(`MP4Clip.tick audio timeout, ${JSON.stringify(eb(this,tu).call(this))}`);await iv(15)}else{if(eb(this,tn)>=this.samples.length-1)return[];eb(this,th).call(this,e)}return eb(this,to).call(this,t,e,r)}),ew(this,th,t=>{if(t.decodeQueueSize>100)return;let e=[],r=eb(this,tn);for(;r=10))break}ev(this,tn,r),t.decode(e.map(t=>new EncodedAudioChunk({type:"key",timestamp:t.cts,duration:t.duration,data:t.data})))}),ew(this,tl,()=>{var t;ev(this,ts,0),ev(this,tn,0),ev(this,ta,{frameCnt:0,data:[]}),null==(t=eb(this,ti))||t.close(),ev(this,ti,function(t,e,r){let s=t=>{if(0!==t.length){if(1!==e.volume)for(let r of t)for(let t=0;t{let r=n;n+=1,t().then(t=>{e[r]=t,s()}).catch(t=>{e[r]=t,s()})}}(s),a=e.resampleRate!==t.sampleRate,o=new AudioDecoder({output:t=>{let r=im(t);a?n(()=>iw(r,t.sampleRate,{rate:e.resampleRate,chanCount:t.numberOfChannels})):s(r),t.close()},error:t=>{e5.error(`MP4Clip AudioDecoder err: ${t.message}`)}});return o.configure(t),{decode(t){for(let e of t)o.decode(e)},close(){"closed"!==o.state&&o.close()},get state(){return o.state},get decodeQueueSize(){return o.decodeQueueSize}}}(this.conf,{resampleRate:iC.sampleRate,volume:eb(this,tt)},t=>{eb(this,ta).data.push(t),eb(this,ta).frameCnt+=t[0].length}))}),ew(this,tu,()=>{var t,e;return{time:eb(this,ts),decState:null==(t=eb(this,ti))?void 0:t.state,decQSize:null==(e=eb(this,ti))?void 0:e.decodeQueueSize,decCusorIdx:eb(this,tn),sampleLen:this.samples.length,pcmLen:eb(this,ta).frameCnt}}),ey(this,"destroy",()=>{ev(this,ti,null),eb(this,tr).abort=!0,ev(this,ta,{frameCnt:0,data:[]}),this.localFileReader.close()}),this.localFileReader=t,this.samples=e,this.conf=r,ev(this,tt,s.volume),ev(this,te,s.targetSampleRate)}}async function iO(t,e){let r=t[0],s=t.at(-1);if(null==s)return[];let n=s.offset+s.size-r.offset;if(n<3e7){let s=new Uint8Array(await e.read(n,{at:r.offset}));return t.map(t=>{let e=t.offset-r.offset,n=s.subarray(e,e+t.size);return t.is_idr&&(n=iG(n)),new EncodedVideoChunk({type:t.is_sync?"key":"delta",timestamp:t.cts,duration:t.duration,data:n})})}return await Promise.all(t.map(async t=>{let r=await e.read(t.size,{at:t.offset});return t.is_idr&&(r=iG(new Uint8Array(r))),new EncodedVideoChunk({type:t.is_sync?"key":"delta",timestamp:t.cts,duration:t.duration,data:r})}))}function iN(t,e,r){let s=0;if("configured"===t.state){for(;s{if(!(t instanceof Error))throw t;if(t.message.includes("Decoding error")&&null!=r.onDecodingError){r.onDecodingError(t);return}if(!t.message.includes("Aborted due to close"))throw t})}}function iG(t){let e=new DataView(t.buffer);return(31&e.getUint8(4))==6?t.subarray(e.getUint32(0)+4):t}async function iY(t,e,r,s,n,a){let o=await e.createReader(),h=0,l=new VideoDecoder({output:t=>{let e=(h+=1)===u.length;a(t,e),e&&o.close()},error:e5.error});s.addEventListener("abort",()=>{o.close(),l.close()});let u=await iO(t.filter(t=>!t.deleted&&t.is_sync&&t.cts>=n.start&&t.cts<=n.end),o);0===u.length||s.aborted||(l.configure(r),iN(l,u,{}))}tt=new WeakMap,te=new WeakMap,ti=new WeakMap,tr=new WeakMap,ts=new WeakMap,tn=new WeakMap,ta=new WeakMap,to=new WeakMap,th=new WeakMap,tl=new WeakMap,tu=new WeakMap;let iW=class t{constructor(t){ew(this,tc),ey(this,"ready"),ew(this,td,{duration:0,width:0,height:0}),ew(this,tf,null),ew(this,tp,[]);let e=t=>(ev(this,tf,t),eb(this,td).width=t.width,eb(this,td).height=t.height,eb(this,td).duration=1/0,{...eb(this,td)});if(t instanceof ReadableStream)this.ready=new Response(t).blob().then(t=>createImageBitmap(t)).then(e);else if(t instanceof ImageBitmap)this.ready=Promise.resolve(e(t));else if(Array.isArray(t)&&t.every(t=>t instanceof VideoFrame)){ev(this,tp,t);let e=eb(this,tp)[0];if(null==e)throw Error("The frame count must be greater than 0");ev(this,td,{width:e.displayWidth,height:e.displayHeight,duration:eb(this,tp).reduce((t,e)=>t+(e.duration??0),0)}),this.ready=Promise.resolve({...eb(this,td),duration:1/0})}else if("type"in t)this.ready=eS(this,tc,tm).call(this,t.stream,t.type).then(()=>({width:eb(this,td).width,height:eb(this,td).height,duration:1/0}));else throw Error("Illegal arguments")}get meta(){return{...eb(this,td)}}async tick(t){if(null!=eb(this,tf))return{video:await createImageBitmap(eb(this,tf)),state:"success"};let e=t%eb(this,td).duration;return{video:(eb(this,tp).find(t=>e>=t.timestamp&&e<=t.timestamp+(t.duration??0))??eb(this,tp)[0]).clone(),state:"success"}}async split(e){if(await this.ready,null!=eb(this,tf))return[new t(await createImageBitmap(eb(this,tf))),new t(await createImageBitmap(eb(this,tf)))];let r=-1;for(let t=0;teb(this,tp)[t].timestamp)){r=t;break}if(-1===r)throw Error("Not found frame by time");let s=eb(this,tp).slice(0,r).map(t=>new VideoFrame(t)),n=eb(this,tp).slice(r).map(t=>new VideoFrame(t,{timestamp:t.timestamp-e}));return[new t(s),new t(n)]}async clone(){return await this.ready,new t(null==eb(this,tf)?eb(this,tp).map(t=>t.clone()):await createImageBitmap(eb(this,tf)))}destroy(){var t;e5.info("ImgClip destroy"),null==(t=eb(this,tf))||t.close(),eb(this,tp).forEach(t=>t.close())}};td=new WeakMap,tf=new WeakMap,tp=new WeakMap,tc=new WeakSet,tm=async function(t,e){ev(this,tp,await i_(t,e));let r=eb(this,tp)[0];if(null==r)throw Error("No frame available in gif");ev(this,td,{duration:eb(this,tp).reduce((t,e)=>t+(e.duration??0),0),width:r.codedWidth,height:r.codedHeight}),e5.info("ImgClip ready:",eb(this,td))};let iV=iW,iH=class t{constructor(t,e={}){ew(this,tw),ey(this,"ready"),ew(this,tg,{duration:0,width:0,height:0}),ew(this,ty,new Float32Array),ew(this,t_,new Float32Array),ew(this,tb),ew(this,tS,0),ew(this,tE,0),ev(this,tb,{loop:!1,volume:1,...e}),this.ready=eS(this,tw,tv).call(this,t).then(()=>({width:0,height:0,duration:e.loop?1/0:eb(this,tg).duration}))}get meta(){return{...eb(this,tg),sampleRate:iC.sampleRate,chanCount:2}}getPCMData(){return[eb(this,ty),eb(this,t_)]}async tick(t){if(!eb(this,tb).loop&&t>=eb(this,tg).duration)return{audio:[],state:"done"};let e=t-eb(this,tS);if(t3e6)return ev(this,tS,t),ev(this,tE,Math.ceil(eb(this,tS)/1e6*iC.sampleRate)),{audio:[new Float32Array(0),new Float32Array(0)],state:"success"};ev(this,tS,t);let r=Math.ceil(e/1e6*iC.sampleRate),s=eb(this,tE)+r,n=eb(this,tb).loop?[iS(eb(this,ty),eb(this,tE),s),iS(eb(this,t_),eb(this,tE),s)]:[eb(this,ty).slice(eb(this,tE),s),eb(this,t_).slice(eb(this,tE),s)];return ev(this,tE,s),{audio:n,state:"success"}}async split(e){await this.ready;let r=Math.ceil(e/1e6*iC.sampleRate);return[new t(this.getPCMData().map(t=>t.slice(0,r)),eb(this,tb)),new t(this.getPCMData().map(t=>t.slice(r)),eb(this,tb))]}async clone(){await this.ready;let e=new t(this.getPCMData(),eb(this,tb));return await e.ready,e}destroy(){ev(this,ty,new Float32Array(0)),ev(this,t_,new Float32Array(0)),e5.info("---- audioclip destroy ----")}};tg=new WeakMap,ty=new WeakMap,t_=new WeakMap,tb=new WeakMap,tw=new WeakSet,tv=async function(t){null==iH.ctx&&(iH.ctx=new AudioContext({sampleRate:iC.sampleRate}));let e=performance.now(),r=t instanceof ReadableStream?await iZ(t,iH.ctx):t;e5.info("Audio clip decoded complete:",performance.now()-e);let s=eb(this,tb).volume;if(1!==s)for(let t of r)for(let e=0;e{}),ey(this,"audioTrack"),ew(this,tT,null),ew(this,tA),ev(this,tA,t);let e=t.getVideoTracks()[0];if(null!=e){var r;let{width:t,height:s}=e.getSettings();e.contentHint="motion",eb(this,tU).width=t??0,eb(this,tU).height=s??0,ev(this,tT,new OffscreenCanvas(t??0,s??0)),ev(this,tx,(r=eb(this,tT).getContext("2d"),iE(new MediaStreamTrackProcessor({track:e}).readable,{onChunk:async t=>{r.drawImage(t,0,0),t.close()},onDone:async()=>{}})))}this.audioTrack=t.getAudioTracks()[0]??null,eb(this,tU).duration=1/0,this.ready=Promise.resolve(this.meta)}get meta(){return{...eb(this,tU)}}async tick(){return{video:null==eb(this,tT)?null:await createImageBitmap(eb(this,tT)),audio:[],state:"success"}}async split(){return[await this.clone(),await this.clone()]}async clone(){return new t(eb(this,tA).clone())}destroy(){eb(this,tA).getTracks().forEach(t=>t.stop()),eb(this,tx).call(this)}};tU=new WeakMap,tx=new WeakMap,tT=new WeakMap,tA=new WeakMap,ey(i$,"ctx",null);let iK=i$,iq=class t{constructor(t,e){var r;if(ew(this,tL),ey(this,"ready"),ew(this,tC,[]),ew(this,tI,{width:0,height:0,duration:0}),ew(this,tB,{color:"#FFF",textBgColor:null,type:"srt",fontSize:30,letterSpacing:null,bottomOffset:30,fontFamily:"Noto Sans SC",strokeStyle:"#000",lineWidth:null,lineCap:null,lineJoin:null,textShadow:{offsetX:2,offsetY:2,blur:4,color:"#000"},videoWidth:1280,videoHeight:720}),ew(this,tk),ew(this,tF),ew(this,tR,null),ew(this,tP,0),ew(this,tz,0),ev(this,tC,Array.isArray(t)?t:t.split(/\r|\n/).map(t=>t.trim()).filter(t=>t.length>0).map(t=>({lineStr:t,match:t.match(/(\d{2}:\d{2}:\d{2},\d{3}) --> (\d{2}:\d{2}:\d{2},\d{3})/)})).filter(({lineStr:t},e,r)=>{var s;return!(/^\d+$/.test(t)&&(null==(s=r[e+1])?void 0:s.match)!=null)}).reduce((t,{lineStr:e,match:r})=>{if(null==r){let r=t.at(-1);if(null==r)return t;r.text+=0===r.text.length?e:` ${e}`}else t.push({start:iJ(r[1]),end:iJ(r[2]),text:""});return t},[]).map(({start:t,end:e,text:r})=>({start:1e6*t,end:1e6*e,text:r}))),0===eb(this,tC).length)throw Error("No subtitles content");ev(this,tB,Object.assign(eb(this,tB),e)),ev(this,tz,null==e.textBgColor?0:(e.fontSize??50)*.2);let{fontSize:s,fontFamily:n,videoWidth:a,videoHeight:o,letterSpacing:h}=eb(this,tB);ev(this,tP,s+2*eb(this,tz)),ev(this,tk,new OffscreenCanvas(a,o)),ev(this,tF,eb(this,tk).getContext("2d")),eb(this,tF).font=`${s}px ${n}`,eb(this,tF).textAlign="center",eb(this,tF).textBaseline="top",eb(this,tF).letterSpacing=h??"0px",ev(this,tI,{width:a,height:o,duration:(null==(r=eb(this,tC).at(-1))?void 0:r.end)??0}),this.ready=Promise.resolve(this.meta)}get meta(){return{...eb(this,tI)}}async tick(t){var e,r;if(null!=eb(this,tR)&&t>=eb(this,tR).timestamp&&t<=eb(this,tR).timestamp+(eb(this,tR).duration??0))return{video:eb(this,tR).clone(),state:"success"};let s=0;for(;sn.end)return{state:"done"};if(teb(this,tC)[t].start)){r=t;break}if(-1===r)throw Error("Not found subtitle by time");let s=eb(this,tC).slice(0,r).map(t=>({...t})),n=s.at(-1),a=null;null!=n&&n.end>e&&(a={start:0,end:n.end-e,text:n.text},n.end=e);let o=eb(this,tC).slice(r).map(t=>({...t,start:t.start-e,end:t.end-e}));return null!=a&&o.unshift(a),[new t(s,eb(this,tB)),new t(o,eb(this,tB))]}async clone(){return new t(eb(this,tC).slice(0),eb(this,tB))}destroy(){var t;null==(t=eb(this,tR))||t.close()}};tC=new WeakMap,tI=new WeakMap,tB=new WeakMap,tk=new WeakMap,tF=new WeakMap,tR=new WeakMap,tP=new WeakMap,tz=new WeakMap,tL=new WeakSet,tD=function(t){let e=t.split(` `).reverse().map(t=>t.trim()),{width:r,height:s}=eb(this,tk),{color:n,fontSize:a,textBgColor:o,textShadow:h,strokeStyle:l,lineWidth:u,lineCap:d,lineJoin:f,bottomOffset:p}=eb(this,tB),c=eb(this,tF);c.clearRect(0,0,r,s),c.globalAlpha=.6;let m=p;for(let t of e){let e=c.measureText(t),p=r/2;null!=o&&(c.shadowOffsetX=0,c.shadowOffsetY=0,c.shadowBlur=0,c.fillStyle=o,c.globalAlpha=.5,c.fillRect(p-e.actualBoundingBoxLeft-eb(this,tz),s-m-eb(this,tP),e.width+2*eb(this,tz),eb(this,tP))),c.shadowColor=h.color,c.shadowOffsetX=h.offsetX,c.shadowOffsetY=h.offsetY,c.shadowBlur=h.blur,c.globalAlpha=1,null!=l&&(c.lineWidth=u??a/6,null!=d&&(c.lineCap=d),null!=f&&(c.lineJoin=f),c.strokeStyle=l,c.strokeText(t,p,s-m-eb(this,tP)+eb(this,tz))),c.fillStyle=n,c.fillText(t,p,s-m-eb(this,tP)+eb(this,tz)),m+=eb(this,tP)+.2*a}};let iQ=iq;function iJ(t){let e=t.match(/(\d{2}):(\d{2}):(\d{2}),(\d{3})/);if(null==e)throw Error(`time format error: ${t}`);let r=Number(e[1]);return 3600*r+60*Number(e[2])+Number(e[3])+Number(e[4])/1e3}class i0{constructor(){ew(this,tM,/* @__PURE__ */new Map),ey(this,"on",(t,e)=>{let r=eb(this,tM).get(t)??/* @__PURE__ */new Set;return r.add(e),eb(this,tM).has(t)||eb(this,tM).set(t,r),()=>{r.delete(e),0===r.size&&eb(this,tM).delete(t)}}),ey(this,"once",(t,e)=>{let r=this.on(t,(...t)=>{r(),e(...t)});return r}),ey(this,"emit",(t,...e)=>{let r=eb(this,tM).get(t);null!=r&&r.forEach(t=>t(...e))})}static forwardEvent(t,e,r){let s=r.map(r=>{let[s,n]=Array.isArray(r)?r:[r,r];return t.on(s,(...t)=>{e.emit(n,...t)})});return()=>{s.forEach(t=>t())}}destroy(){eb(this,tM).clear()}}tM=new WeakMap;let i1=(t,e)=>{let r=new Uint8Array(8);new DataView(r.buffer).setUint32(0,e);for(let e=0;e<4;e++)r[4+e]=t.charCodeAt(e);return r},i2=()=>{let t=new TextEncoder,e=t.encode("mdta"),r=t.encode("mp4 handler"),s=32+r.byteLength+1,n=new Uint8Array(s),a=new DataView(n.buffer);return n.set(i1("hdlr",s),0),a.setUint32(8,0),n.set(e,16),n.set(r,32),n},i3=t=>{let e=new TextEncoder,r=e.encode("mdta"),s=t.map(t=>{let s=e.encode(t),n=8+s.byteLength,a=new Uint8Array(n);return new DataView(a.buffer).setUint32(0,n),a.set(r,4),a.set(s,4+r.byteLength),a}),n=16+s.reduce((t,e)=>t+e.byteLength,0),a=new Uint8Array(n),o=new DataView(a.buffer);a.set(i1("keys",n),0),o.setUint32(8,0),o.setUint32(12,t.length);let h=16;for(let t of s)a.set(t,h),h+=t.byteLength;return a},i6=t=>{let e=new TextEncoder,r=e.encode("data"),s=Object.entries(t).map(([t,s],n)=>{let a=e.encode(s),o=24+a.byteLength,h=new Uint8Array(o),l=new DataView(h.buffer);return l.setUint32(0,o),l.setUint32(4,n+1),l.setUint32(8,16+a.byteLength),h.set(r,12),l.setUint32(16,1),h.set(a,24),h}),n=8+s.reduce((t,e)=>t+e.byteLength,0),a=new Uint8Array(n);a.set(i1("ilst",n),0);let o=8;for(let t of s)a.set(t,o),o+=t.byteLength;return a},i8=t=>{let e=i2(),r=i3(Object.keys(t)),s=i6(t),n=new Uint8Array(e.length+r.length+s.length);return n.set(e,0),n.set(r,e.length),n.set(s,e.length+r.length),n};function i4(t){e5.info("recodemux opts:",t);let e=iA.createFile(),r=new i0,s=(t,e)=>{let r=t.add("udta").add("meta");r.data=i8(e),r.size=r.data.byteLength},n=!1,a=()=>{null==e.moov||n||(n=!0,null!=t.metaDataTags&&s(e.moov,t.metaDataTags),null!=t.duration&&(e.moov.mvhd.duration=t.duration))};r.once("VideoReady",a),r.once("AudioReady",a);let o=null!=t.video?function(t,e,r){let s={timescale:1e6,width:t.width,height:t.height,brands:["isom","iso2","avc1","mp42","mp41"],avcDecoderConfigRecord:null,name:"Track created with WebAV"},n=-1,a=!1;r.once("AudioReady",()=>{a=!0});let o={encoder0:[],encoder1:[]},h=(t,a,h)=>{var l;if(-1===n&&null!=h){let t=null==(l=h.decoderConfig)?void 0:l.description;(function(t){let e=new Uint8Array(t);e[2].toString(2).slice(-2).includes("1")&&(e[2]=0)})(t),s.avcDecoderConfigRecord=t,n=e.addTrack(s),r.emit("VideoReady"),e5.info("VideoEncoder, video track ready, trackId:",n)}o[t].push(i7(a))},l="encoder1",u=0;function d(){if(!a)return;let t="encoder1"===l?"encoder0":"encoder1",r=o[l],s=o[t];if(0===r.length&&0===s.length)return;let h=r[0];if(null!=h&&h.cts-u<1e4){let t=function(t){let r=-1,s=0;for(;s0&&a.is_sync)break;e.addSample(n,a.data,a),r=a.cts+a.duration}return t.splice(0,s),r}(r);t>u&&(u=t)}let f=s[0];null!=f&&f.cts-u<1e4&&(l=t,d())}let f=is(d,15),p=i5(t,(t,e)=>h("encoder0",t,e)),c=i5(t,(t,e)=>h("encoder1",t,e)),m=0;return{get encodeQueueSize(){return p.encodeQueueSize+c.encodeQueueSize},encode:(t,e)=>{e.keyFrame&&(m+=1),(m%2==0?p:c).encode(t,e)},flush:async()=>{await Promise.all(["configured"===p.state?await p.flush():null,"configured"===c.state?await c.flush():null]),f(),d()},close:()=>{"configured"===p.state&&p.close(),"configured"===c.state&&c.close()}}}(t.video,e,r):null,h=null!=t.audio?function(t,e,r){let s={timescale:1e6,samplerate:t.sampleRate,channel_count:t.channelCount,hdlr:"soun",type:"aac"===t.codec?"mp4a":"Opus",name:"Track created with WebAV"},n=-1,a=[],o=!1;r.once("VideoReady",()=>{o=!0,a.forEach(t=>{let r=i7(t);e.addSample(n,r.data,r)}),a=[]});let h=new AudioEncoder({error:e5.error,output:(t,h)=>{var l;if(-1===n){let t=null==(l=h.decoderConfig)?void 0:l.description;n=e.addTrack({...s,description:null==t?void 0:function(t){let e=t.byteLength,r=new Uint8Array([0,0,0,0,3,23+e,0,2,0,4,18+e,64,21,0,0,0,0,0,0,0,0,0,0,0,5,e,...new Uint8Array(t instanceof ArrayBuffer?t:t.buffer),6,1,2]),s=new iA.BoxParser.esdsBox(r.byteLength);return s.hdr_size=0,s.parse(new iA.DataStream(r,0,iA.DataStream.BIG_ENDIAN)),s}(t)}),r.emit("AudioReady"),e5.info("AudioEncoder, audio track ready, trackId:",n)}if(o){let r=i7(t);e.addSample(n,r.data,r)}else a.push(t)}});return h.configure({codec:"aac"===t.codec?iC.codec:"opus",sampleRate:t.sampleRate,numberOfChannels:t.channelCount,bitrate:128e3}),h}(t.audio,e,r):null;return null==t.video&&r.emit("VideoReady"),null==t.audio&&r.emit("AudioReady"),{encodeVideo:(t,e)=>{null==o||o.encode(t,e),t.close()},encodeAudio:t=>{null!=h&&(h.encode(t),t.close())},getEncodeQueueSize:()=>(null==o?void 0:o.encodeQueueSize)??(null==h?void 0:h.encodeQueueSize)??0,flush:async()=>{await Promise.all([null==o?void 0:o.flush(),(null==h?void 0:h.state)==="configured"?h.flush():null])},close:()=>{r.destroy(),null==o||o.close(),(null==h?void 0:h.state)==="configured"&&h.close()},mp4file:e}}function i5(t,e){let r=new VideoEncoder({error:e5.error,output:e});return r.configure({codec:t.codec,framerate:t.expectFPS,hardwareAcceleration:t.__unsafe_hardwareAcceleration__,bitrate:t.bitrate,width:t.width,height:t.height,alpha:"discard",avc:{format:"avc"}}),r}function i9(t,e,r){let s=0,n=0,a=t.boxes,o=!1,h=()=>{var e;if(!o){if(null==a.find(t=>"moof"===t.type))return null;o=!0}if(n>=a.length)return null;let r=new iA.DataStream;r.endianness=iA.DataStream.BIG_ENDIAN;let s=n;try{for(;s{let t=h();null==t||u||r.enqueue(t)},e),d=e=>{if(clearInterval(s),t.flush(),null!=e){r.error(e);return}let n=h();null==n||u||r.enqueue(n),u||r.close()},l&&d()},cancel(){u=!0,clearInterval(s),null==r||r()}}),stop:t=>{l||(l=!0,null==d||d(t))}}}function i7(t){let e=new ArrayBuffer(t.byteLength);t.copyTo(e);let r=t.timestamp;return{duration:t.duration??0,dts:r,cts:r,is_sync:"key"===t.type,data:e}}async function rt(t){let e=iA.createFile(),r=function(t){let e=0,r=t.boxes,s=[],n=0;async function a(){let a=c(r,e);e=r.length,s.forEach(({track:e,id:r})=>{let s=e.samples.at(-1);null!=s&&(n=Math.max(n,s.cts+s.duration)),t.releaseUsedSamples(r,e.samples.length),e.samples=[]}),t.mdats=[],t.moofs=[],null!=a&&await (null==d?void 0:d.write(a))}let o=[];function h(){if(o.length>0)return!0;let n=r.findIndex(t=>"moov"===t.type);if(-1===n)return!1;if(o=r.slice(0,n+1),e=n+1,0===s.length)for(let e=1;;e+=1){let r=t.getTrackById(e);if(null==r)break;s.push({track:r,id:e})}return!0}let l=0,u=e1(),d=null,f=(async()=>{d=await u.createWriter(),l=self.setInterval(()=>{h()&&a()},100)})(),p=!1;return async()=>{if(p)throw Error("File exported");if(p=!0,await f,clearInterval(l),!h()||null==d)return null;t.flush(),await a(),await (null==d?void 0:d.close());let e=o.find(t=>"moov"===t.type);if(null==e)return null;e.mvhd.duration=n;let r=e1(),s=c(o,0);return await eH(r,s),await eH(r,u,{overwrite:!1}),await r.stream()};function c(t,e){if(e>=t.length)return null;let r=new iA.DataStream;r.endianness=iA.DataStream.BIG_ENDIAN;for(let s=e;s{iE(d.pipeThrough(new ik),{onDone:t,onChunk:async({chunkType:t,data:d})=>{if("ready"===t){let{videoTrackConf:t,audioTrackConf:s}=iI(d.file,d.info);0===r&&null!=t&&(r=e.addTrack(t)),0===a&&null!=s&&(a=e.addTrack(s))}else if("samples"===t){let{type:t,samples:f}=d,p="video"===t?r:a,c="video"===t?s:o,m="video"===t?n:h;f.forEach(t=>{e.addSample(p,t.data,{duration:t.duration,dts:t.dts+c,cts:t.cts+m,is_sync:t.is_sync})});let g=f.at(-1);if(null==g)return;"video"===t?l=g:"audio"===t&&(u=g)}}})}),null!=l&&(s+=l.dts,n+=l.cts),null!=u&&(o+=u.dts,h+=u.cts)}async function ri(t){return await rt([t])}function rr(t,e){e5.info("mixinMP4AndAudio, opts:",{volume:e.volume,loop:e.loop});let r=iA.createFile(),{stream:s,stop:n}=i9(r,500),a=null,o=null,h=[],l=0,u=0,d=0,f=!0,p=48e3;function c(t){let r=h.map(r=>e.loop?iS(r,d,d+t):r.slice(d,d+t));if(d+=t,1!==e.volume)for(let t of r)for(let r=0;r{await (null==o?void 0:o.stop()),null==a||a.close(),n()},onChunk:async({chunkType:t,data:s})=>{if("ready"===t){let{videoTrackConf:t,audioTrackConf:n,audioDecoderConf:d}=iI(s.file,s.info);0===l&&null!=t&&(l=r.addTrack(t));let c=n??{timescale:1e6,samplerate:p,channel_count:iC.channelCount,hdlr:"soun",name:"SoundHandler",type:"mp4a"};0===u&&(u=r.addTrack(c),p=(null==n?void 0:n.samplerate)??p,f=null!=n);let m=new AudioContext({sampleRate:p});h=ig(await m.decodeAudioData(await new Response(e.stream).arrayBuffer())),null!=d&&(a=function(t){let e=[],r=new AudioDecoder({output:t=>{e.push(t)},error:e5.error});return r.configure(t),{decode:async t=>{t.forEach(t=>{r.decode(new EncodedAudioChunk({type:t.is_sync?"key":"delta",timestamp:1e6*t.cts/t.timescale,duration:1e6*t.duration/t.timescale,data:t.data}))}),await r.flush();let s=e;return e=[],s},close:()=>{r.close()}}}(d)),o=function(t,e){let r=new AudioEncoder({output:t=>{e(i7(t))},error:e5.error});r.configure({codec:t.codec,sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels});let s=null;function n(e,r){return new AudioData({timestamp:r,numberOfChannels:t.numberOfChannels,numberOfFrames:e.length/t.numberOfChannels,sampleRate:t.sampleRate,format:"f32-planar",data:e})}return{encode:async(t,e)=>{null!=s&&r.encode(n(s.data,s.ts)),s={data:t,ts:e}},stop:async()=>{null!=s&&(function(t,e,r){let s=t.length-1,n=Math.min(r/2,s);for(let r=0;rr.addSample(u,t.data,t))}else if("samples"===t){let{id:t,type:e,samples:n}=s;if("video"===e){n.forEach(e=>r.addSample(t,e.data,e)),f||await m(n);return}"audio"===e&&await g(n)}}}),s}var rs=/* @__PURE__ */function(){function t(){this.listeners={}}var e=t.prototype;return e.on=function(t,e){this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)},e.off=function(t,e){if(!this.listeners[t])return!1;var r=this.listeners[t].indexOf(e);return this.listeners[t]=this.listeners[t].slice(0),this.listeners[t].splice(r,1),r>-1},e.trigger=function(t){var e=this.listeners[t];if(e){if(2==arguments.length)for(var r=e.length,s=0;stypeof window?tO=window:"u">typeof iU?tO=iU:"u">typeof self?tO=self:tO={};let ra=/* @__PURE__ */ix(tO);/*! @name m3u8-parser @version 7.1.0 @license Apache-2.0 */class ro extends rs{constructor(){super(),this.buffer=""}push(t){let e;for(this.buffer+=t,e=this.buffer.indexOf(` `);e>-1;e=this.buffer.indexOf(` `))this.trigger("data",this.buffer.substring(0,e)),this.buffer=this.buffer.substring(e+1)}}let rh=function(t){let e=/([0-9.]*)?@?([0-9.]*)?/.exec(t||""),r={};return e[1]&&(r.length=parseInt(e[1],10)),e[2]&&(r.offset=parseInt(e[2],10)),r},rl=function(t){let e={};if(!t)return e;let r=t.split(RegExp('(?:^|,)((?:[^=]*)=(?:"[^"]*"|[^,]*))')),s=r.length,n;for(;s--;)""!==r[s]&&((n=/([^=]*)=(.*)/.exec(r[s]).slice(1))[0]=n[0].replace(/^\s+|\s+$/g,""),n[1]=n[1].replace(/^\s+|\s+$/g,""),n[1]=n[1].replace(/^['"](.*)['"]$/g,"$1"),e[n[0]]=n[1]);return e};class ru extends rs{constructor(){super(),this.customParsers=[],this.tagMappers=[]}push(t){let e,r;if(0!==(t=t.trim()).length){if("#"!==t[0]){this.trigger("data",{type:"uri",uri:t});return}this.tagMappers.reduce((e,r)=>{let s=r(t);return s===t?e:e.concat([s])},[t]).forEach(t=>{for(let e=0;et),this.customParsers.push(n=>{if(t.exec(n))return this.trigger("data",{type:"custom",data:r(n),customType:e,segment:s}),!0})}addTagMapper({expression:t,map:e}){this.tagMappers.push(r=>t.test(r)?e(r):r)}}let rd=t=>t.toLowerCase().replace(/-(\w)/g,t=>t[1].toUpperCase()),rf=function(t){let e={};return Object.keys(t).forEach(function(r){e[rd(r)]=t[r]}),e},rp=function(t){let{serverControl:e,targetDuration:r,partTargetDuration:s}=t;if(!e)return;let n="#EXT-X-SERVER-CONTROL",a="holdBack",o="partHoldBack",h=r&&3*r,l=s&&2*s;r&&!e.hasOwnProperty(a)&&(e[a]=h,this.trigger("info",{message:`${n} defaulting HOLD-BACK to targetDuration * 3 (${h}).`})),h&&e[a]{!r.uri&&(r.parts||r.preloadHints)&&(!r.map&&s&&(r.map=s),!r.key&&n&&(r.key=n),r.timeline||"number"!=typeof l||(r.timeline=l),this.manifest.preloadSegment=r)}),this.parseStream.on("data",function(p){let c,m;({tag(){(({version(){p.version&&(this.manifest.version=p.version)},"allow-cache"(){this.manifest.allowCache=p.allowed,"allowed"in p||(this.trigger("info",{message:"defaulting allowCache to YES"}),this.manifest.allowCache=!0)},byterange(){let t={};"length"in p&&(r.byterange=t,t.length=p.length,"offset"in p||(p.offset=u)),"offset"in p&&(r.byterange=t,t.offset=p.offset),u=t.offset+t.length},endlist(){this.manifest.endList=!0},inf(){"mediaSequence"in this.manifest||(this.manifest.mediaSequence=0,this.trigger("info",{message:"defaulting media sequence to zero"})),"discontinuitySequence"in this.manifest||(this.manifest.discontinuitySequence=0,this.trigger("info",{message:"defaulting discontinuity sequence to zero"})),p.title&&(r.title=p.title),p.duration>0&&(r.duration=p.duration),0===p.duration&&(r.duration=.01,this.trigger("info",{message:"updating zero segment duration to a small value"})),this.manifest.segments=e},key(){if(!p.attributes){this.trigger("warn",{message:"ignoring key declaration without attribute list"});return}if("NONE"===p.attributes.METHOD){n=null;return}if(!p.attributes.URI){this.trigger("warn",{message:"ignoring key declaration without URI"});return}if("com.apple.streamingkeydelivery"===p.attributes.KEYFORMAT){this.manifest.contentProtection=this.manifest.contentProtection||{},this.manifest.contentProtection["com.apple.fps.1_0"]={attributes:p.attributes};return}if("com.microsoft.playready"===p.attributes.KEYFORMAT){this.manifest.contentProtection=this.manifest.contentProtection||{},this.manifest.contentProtection["com.microsoft.playready"]={uri:p.attributes.URI};return}if("urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"===p.attributes.KEYFORMAT){if(-1===["SAMPLE-AES","SAMPLE-AES-CTR","SAMPLE-AES-CENC"].indexOf(p.attributes.METHOD)){this.trigger("warn",{message:"invalid key method provided for Widevine"});return}if("SAMPLE-AES-CENC"===p.attributes.METHOD&&this.trigger("warn",{message:"SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead"}),"data:text/plain;base64,"!==p.attributes.URI.substring(0,23)){this.trigger("warn",{message:"invalid key URI provided for Widevine"});return}if(!(p.attributes.KEYID&&"0x"===p.attributes.KEYID.substring(0,2))){this.trigger("warn",{message:"invalid key ID provided for Widevine"});return}this.manifest.contentProtection=this.manifest.contentProtection||{},this.manifest.contentProtection["com.widevine.alpha"]={attributes:{schemeIdUri:p.attributes.KEYFORMAT,keyId:p.attributes.KEYID.substring(2)},pssh:function(t){for(var e=ra.atob?ra.atob(t):ep.from(t,"base64").toString("binary"),r=new Uint8Array(e.length),s=0;stypeof p.attributes.IV&&(n.iv=p.attributes.IV)},"media-sequence"(){if(!isFinite(p.number)){this.trigger("warn",{message:"ignoring invalid media sequence: "+p.number});return}this.manifest.mediaSequence=p.number},"discontinuity-sequence"(){if(!isFinite(p.number)){this.trigger("warn",{message:"ignoring invalid discontinuity sequence: "+p.number});return}this.manifest.discontinuitySequence=p.number,l=p.number},"playlist-type"(){if(!/VOD|EVENT/.test(p.playlistType)){this.trigger("warn",{message:"ignoring unknown playlist type: "+p.playlist});return}this.manifest.playlistType=p.playlistType},map(){s={},p.uri&&(s.uri=p.uri),p.byterange&&(s.byterange=p.byterange),n&&(s.key=n)},"stream-inf"(){if(this.manifest.playlists=e,this.manifest.mediaGroups=this.manifest.mediaGroups||h,!p.attributes){this.trigger("warn",{message:"ignoring empty stream-inf attributes"});return}r.attributes||(r.attributes={}),rn(r.attributes,p.attributes)},media(){if(this.manifest.mediaGroups=this.manifest.mediaGroups||h,!(p.attributes&&p.attributes.TYPE&&p.attributes["GROUP-ID"]&&p.attributes.NAME)){this.trigger("warn",{message:"ignoring incomplete or missing media group"});return}let t=this.manifest.mediaGroups[p.attributes.TYPE];t[p.attributes["GROUP-ID"]]=t[p.attributes["GROUP-ID"]]||{},c=t[p.attributes["GROUP-ID"]],(m={default:/yes/i.test(p.attributes.DEFAULT)}).default?m.autoselect=!0:m.autoselect=/yes/i.test(p.attributes.AUTOSELECT),p.attributes.LANGUAGE&&(m.language=p.attributes.LANGUAGE),p.attributes.URI&&(m.uri=p.attributes.URI),p.attributes["INSTREAM-ID"]&&(m.instreamId=p.attributes["INSTREAM-ID"]),p.attributes.CHARACTERISTICS&&(m.characteristics=p.attributes.CHARACTERISTICS),p.attributes.FORCED&&(m.forced=/yes/i.test(p.attributes.FORCED)),c[p.attributes.NAME]=m},discontinuity(){l+=1,r.discontinuity=!0,this.manifest.discontinuityStarts.push(e.length)},"program-date-time"(){typeof this.manifest.dateTimeString>"u"&&(this.manifest.dateTimeString=p.dateTimeString,this.manifest.dateTimeObject=p.dateTimeObject),r.dateTimeString=p.dateTimeString,r.dateTimeObject=p.dateTimeObject;let{lastProgramDateTime:t}=this;this.lastProgramDateTime=new Date(p.dateTimeString).getTime(),null===t&&this.manifest.segments.reduceRight((t,e)=>(e.programDateTime=t-1e3*e.duration,e.programDateTime),this.lastProgramDateTime)},targetduration(){if(!isFinite(p.duration)||p.duration<0){this.trigger("warn",{message:"ignoring invalid target duration: "+p.duration});return}this.manifest.targetDuration=p.duration,rp.call(this,this.manifest)},start(){if(!p.attributes||isNaN(p.attributes["TIME-OFFSET"])){this.trigger("warn",{message:"ignoring start declaration without appropriate attribute list"});return}this.manifest.start={timeOffset:p.attributes["TIME-OFFSET"],precise:p.attributes.PRECISE}},"cue-out"(){r.cueOut=p.data},"cue-out-cont"(){r.cueOutCont=p.data},"cue-in"(){r.cueIn=p.data},skip(){this.manifest.skip=rf(p.attributes),this.warnOnMissingAttributes_("#EXT-X-SKIP",p.attributes,["SKIPPED-SEGMENTS"])},part(){a=!0;let t=this.manifest.segments.length,e=rf(p.attributes);r.parts=r.parts||[],r.parts.push(e),e.byterange&&(e.byterange.hasOwnProperty("offset")||(e.byterange.offset=d),d=e.byterange.offset+e.byterange.length);let s=r.parts.length-1;this.warnOnMissingAttributes_(`#EXT-X-PART #${s} for segment #${t}`,p.attributes,["URI","DURATION"]),this.manifest.renditionReports&&this.manifest.renditionReports.forEach((t,e)=>{t.hasOwnProperty("lastPart")||this.trigger("warn",{message:`#EXT-X-RENDITION-REPORT #${e} lacks required attribute(s): LAST-PART`})})},"server-control"(){let t=this.manifest.serverControl=rf(p.attributes);t.hasOwnProperty("canBlockReload")||(t.canBlockReload=!1,this.trigger("info",{message:"#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false"})),rp.call(this,this.manifest),t.canSkipDateranges&&!t.hasOwnProperty("canSkipUntil")&&this.trigger("warn",{message:"#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set"})},"preload-hint"(){let t=this.manifest.segments.length,e=rf(p.attributes),s=e.type&&"PART"===e.type;r.preloadHints=r.preloadHints||[],r.preloadHints.push(e),e.byterange&&(e.byterange.hasOwnProperty("offset")||(e.byterange.offset=s?d:0,s&&(d=e.byterange.offset+e.byterange.length)));let n=r.preloadHints.length-1;if(this.warnOnMissingAttributes_(`#EXT-X-PRELOAD-HINT #${n} for segment #${t}`,p.attributes,["TYPE","URI"]),e.type)for(let s=0;st.id===e.id);this.manifest.dateRanges[t]=rn(this.manifest.dateRanges[t],e),f[e.id]=rn(f[e.id],e),this.manifest.dateRanges.pop()}else f[e.id]=e},"independent-segments"(){this.manifest.independentSegments=!0},"content-steering"(){this.manifest.contentSteering=rf(p.attributes),this.warnOnMissingAttributes_("#EXT-X-CONTENT-STEERING",p.attributes,["SERVER-URI"])}})[p.tagType]||o).call(t)},uri(){r.uri=p.uri,e.push(r),!this.manifest.targetDuration||"duration"in r||(this.trigger("warn",{message:"defaulting segment duration to the target duration"}),r.duration=this.manifest.targetDuration),n&&(r.key=n),r.timeline=l,s&&(r.map=s),d=0,null!==this.lastProgramDateTime&&(r.programDateTime=this.lastProgramDateTime,this.lastProgramDateTime+=1e3*r.duration),r={}},comment(){},custom(){p.segment?(r.custom=r.custom||{},r.custom[p.customType]=p.data):(this.manifest.custom=this.manifest.custom||{},this.manifest.custom[p.customType]=p.data)}})[p.type].call(t)})}warnOnMissingAttributes_(t,e,r){let s=[];r.forEach(function(t){e.hasOwnProperty(t)||s.push(t)}),s.length&&this.trigger("warn",{message:`${t} lacks required attribute(s): ${s.join(", ")}`})}push(t){this.lineStream.push(t)}end(){this.lineStream.push(` `),this.manifest.dateRanges.length&&null===this.lastProgramDateTime&&this.trigger("warn",{message:"A playlist with EXT-X-DATERANGE tag must contain atleast one EXT-X-PROGRAM-DATE-TIME tag"}),this.lastProgramDateTime=null,this.trigger("end")}addParser(t){this.parseStream.addParser(t)}addTagMapper(t){this.parseStream.addTagMapper(t)}}async function rm(t,e=10){let r=new rc;r.push(await (await fetch(t)).text()),r.end();let s=r.manifest.segments.reduce((t,e)=>(t[e.map.uri]=t[e.map.uri]??[],t[e.map.uri].push(e),t),{}),n=new URL(t,location.href),a={};async function o(t,r,s){async function o(t){return(await fetch(t)).arrayBuffer()}let h=function(e){let n=0,a=0,o=[];async function h(){if(na[t]=o(t))}}async function h(t){let e=await a[t];return delete a[t],e}return{load(t=0,e=1/0){let r={},a=0,l=0;for(let[n,o]of Object.entries(s)){let s=0,h=[],u=-1,d=-1;for(let r=0;rt/1e6&&(u=r,a=(s-n.duration)*1e6),u>-1&&-1===d&&s>=e/1e6){d=r+1,l=1e6*s;break}}e>=1e6*s&&(d=o.length,l=1e6*s),d>u&&(h=h.concat(o.slice(u,d))),h.length>0&&(r[n]={actualStartTime:a,actualEndTime:l,segments:h})}return 0===Object.keys(r).length?null:Object.entries(r).map(([t,{actualStartTime:e,actualEndTime:r,segments:s}])=>{let a=0,l=new i0;return{actualStartTime:e,actualEndTime:r,on:l.on,stream:new ReadableStream({start:async e=>{o(s,e,l),e.enqueue(new Uint8Array(await (await fetch(new URL(t,n).href)).arrayBuffer()))},pull:async t=>{let e=new URL(s[a].uri,n).href;t.enqueue(new Uint8Array(await h(e))),(a+=1)>=s.length&&(t.close(),l.destroy())}})}})}}}let rg=`#version 300 es layout (location = 0) in vec4 a_position; layout (location = 1) in vec2 a_texCoord; out vec2 v_texCoord; void main () { gl_Position = a_position; v_texCoord = a_texCoord; } `,ry=`#version 300 es precision mediump float; out vec4 FragColor; in vec2 v_texCoord; uniform sampler2D frameTexture; uniform vec3 keyColor; // \u{8272}\u{5EA6}\u{7684}\u{76F8}\u{4F3C}\u{5EA6}\u{8BA1}\u{7B97} uniform float similarity; // \u{900F}\u{660E}\u{5EA6}\u{7684}\u{5E73}\u{6ED1}\u{5EA6}\u{8BA1}\u{7B97} uniform float smoothness; // \u{964D}\u{4F4E}\u{7EFF}\u{5E55}\u{9971}\u{548C}\u{5EA6}\u{FF0C}\u{63D0}\u{9AD8}\u{62A0}\u{56FE}\u{51C6}\u{786E}\u{5EA6} uniform float spill; vec2 RGBtoUV(vec3 rgb) { return vec2( rgb.r * -0.169 + rgb.g * -0.331 + rgb.b * 0.5 + 0.5, rgb.r * 0.5 + rgb.g * -0.419 + rgb.b * -0.081 + 0.5 ); } void main() { // \u{83B7}\u{53D6}\u{5F53}\u{524D}\u{50CF}\u{7D20}\u{7684}rgba\u{503C} vec4 rgba = texture(frameTexture, v_texCoord); // \u{8BA1}\u{7B97}\u{5F53}\u{524D}\u{50CF}\u{7D20}\u{4E0E}\u{7EFF}\u{5E55}\u{50CF}\u{7D20}\u{7684}\u{8272}\u{5EA6}\u{5DEE}\u{503C} vec2 chromaVec = RGBtoUV(rgba.rgb) - RGBtoUV(keyColor); // \u{8BA1}\u{7B97}\u{5F53}\u{524D}\u{50CF}\u{7D20}\u{4E0E}\u{7EFF}\u{5E55}\u{50CF}\u{7D20}\u{7684}\u{8272}\u{5EA6}\u{8DDD}\u{79BB}\u{FF08}\u{5411}\u{91CF}\u{957F}\u{5EA6}\u{FF09}, \u{8D8A}\u{76F8}\u{50CF}\u{5219}\u{8272}\u{5EA6}\u{8DDD}\u{79BB}\u{8D8A}\u{5C0F} float chromaDist = sqrt(dot(chromaVec, chromaVec)); // \u{8BBE}\u{7F6E}\u{4E86}\u{4E00}\u{4E2A}\u{76F8}\u{4F3C}\u{5EA6}\u{9608}\u{503C}\u{FF0C}baseMask\u{4E3A}\u{8D1F}\u{FF0C}\u{5219}\u{8868}\u{660E}\u{662F}\u{7EFF}\u{5E55}\u{FF0C}\u{4E3A}\u{6B63}\u{5219}\u{8868}\u{660E}\u{4E0D}\u{662F}\u{7EFF}\u{5E55} float baseMask = chromaDist - similarity; // \u{5982}\u{679C}baseMask\u{4E3A}\u{8D1F}\u{6570}\u{FF0C}fullMask\u{7B49}\u{4E8E}0\u{FF1B}baseMask\u{4E3A}\u{6B63}\u{6570}\u{FF0C}\u{8D8A}\u{5927}\u{FF0C}\u{5219}\u{900F}\u{660E}\u{5EA6}\u{8D8A}\u{4F4E} float fullMask = pow(clamp(baseMask / smoothness, 0., 1.), 1.5); rgba.a = fullMask; // \u{8BBE}\u{7F6E}\u{900F}\u{660E}\u{5EA6} // \u{5982}\u{679C}baseMask\u{4E3A}\u{8D1F}\u{6570}\u{FF0C}spillVal\u{7B49}\u{4E8E}0\u{FF1B}baseMask\u{4E3A}\u{6574}\u{6570}\u{FF0C}\u{8D8A}\u{5C0F}\u{FF0C}\u{9971}\u{548C}\u{5EA6}\u{8D8A}\u{4F4E} float spillVal = pow(clamp(baseMask / spill, 0., 1.), 1.5); float desat = clamp(rgba.r * 0.2126 + rgba.g * 0.7152 + rgba.b * 0.0722, 0., 1.); // \u{8BA1}\u{7B97}\u{5F53}\u{524D}\u{50CF}\u{7D20}\u{7684}\u{7070}\u{5EA6}\u{503C} rgba.rgb = mix(vec3(desat, desat, desat), rgba.rgb, spillVal); FragColor = rgba; } `,r_=[-1,1,-1,-1,1,-1,1,-1,1,1,-1,1],rb=[0,1,0,0,1,0,1,0,1,1,0,1];function rw(t,e,r){let s=t.createShader(e);if(t.shaderSource(s,r),t.compileShader(s),!t.getShaderParameter(s,t.COMPILE_STATUS)){let e=t.getShaderInfoLog(s);throw t.deleteShader(s),Error(e??"An error occurred compiling the shaders")}return s}let rv=t=>{let e=null,r=null,s=t.keyColor,n=null;return async a=>{var o,h;if((null==e||null==r||null==n)&&(null==s&&(s=function(t){let e=new OffscreenCanvas(1,1).getContext("2d");e.drawImage(t,0,0);let{data:[r,s,n]}=e.getImageData(0,0,1,1);return[r,s,n]}(a)),{cvs:e,gl:r}=function(t){let e="document"in globalThis?globalThis.document.createElement("canvas"):new OffscreenCanvas(t.width,t.height);e.width=t.width,e.height=t.height;let r=e.getContext("webgl2",{premultipliedAlpha:!1,alpha:!0});if(null==r)throw Error("Cant create gl context");let s=function(t,e,r){let s=rw(t,t.VERTEX_SHADER,e),n=rw(t,t.FRAGMENT_SHADER,r),a=t.createProgram();if(t.attachShader(a,s),t.attachShader(a,n),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw Error(t.getProgramInfoLog(a)??"Unable to initialize the shader program");return a}(r,rg,ry);r.useProgram(s),r.uniform3fv(r.getUniformLocation(s,"keyColor"),t.keyColor.map(t=>t/255)),r.uniform1f(r.getUniformLocation(s,"similarity"),t.similarity),r.uniform1f(r.getUniformLocation(s,"smoothness"),t.smoothness),r.uniform1f(r.getUniformLocation(s,"spill"),t.spill);let n=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,n),r.bufferData(r.ARRAY_BUFFER,new Float32Array(r_),r.STATIC_DRAW);let a=r.getAttribLocation(s,"a_position");r.vertexAttribPointer(a,2,r.FLOAT,!1,2*Float32Array.BYTES_PER_ELEMENT,0),r.enableVertexAttribArray(a);let o=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,o),r.bufferData(r.ARRAY_BUFFER,new Float32Array(rb),r.STATIC_DRAW);let h=r.getAttribLocation(s,"a_texCoord");return r.vertexAttribPointer(h,2,r.FLOAT,!1,2*Float32Array.BYTES_PER_ELEMENT,0),r.enableVertexAttribArray(h),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,1),{cvs:e,gl:r}}({...a instanceof VideoFrame?{width:a.codedWidth,height:a.codedHeight}:{width:a.width,height:a.height},keyColor:s,...t}),n=function(t){let e=t.createTexture();if(null==e)throw Error("Create WebGL texture error");t.bindTexture(t.TEXTURE_2D,e);let r=t.RGBA,s=t.RGBA,n=t.UNSIGNED_BYTE,a=new Uint8Array([0,0,255,255]);return t.texImage2D(t.TEXTURE_2D,0,r,1,1,0,s,n,a),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}(r)),o=r,h=n,o.bindTexture(o.TEXTURE_2D,h),o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,a),o.drawArrays(o.TRIANGLES,0,6),null!=globalThis.VideoFrame&&a instanceof globalThis.VideoFrame){let t=new VideoFrame(e,{alpha:"keep",timestamp:a.timestamp,duration:a.duration??void 0});return a.close(),t}return createImageBitmap(e,{imageOrientation:a instanceof ImageBitmap?"flipY":"none"})}},rS=class t{constructor(t,e,r,s,n){ew(this,tX),ew(this,tN,new i0),ey(this,"on",eb(this,tN).on),ew(this,tG,0),ew(this,tY,0),ew(this,tW,0),ew(this,tV,0),ew(this,tH,0),ey(this,"master",null),ey(this,"fixedAspectRatio",!1),this.x=t??0,this.y=e??0,this.w=r??0,this.h=s??0,this.master=n??null}get x(){return eb(this,tG)}set x(t){eS(this,tX,tj).call(this,"x",t)}get y(){return eb(this,tY)}set y(t){eS(this,tX,tj).call(this,"y",t)}get w(){return eb(this,tW)}set w(t){eS(this,tX,tj).call(this,"w",t)}get h(){return eb(this,tV)}set h(t){eS(this,tX,tj).call(this,"h",t)}get angle(){return eb(this,tH)}set angle(t){eS(this,tX,tj).call(this,"angle",t)}get center(){let{x:t,y:e,w:r,h:s}=this;return{x:t+r/2,y:e+s/2}}get ctrls(){let{w:e,h:r}=this,s=t.CTRL_SIZE,n=s/2,a=e/2,o=r/2,h=1.5*s,l=h/2;return{...this.fixedAspectRatio?{}:{t:new t(-n,-o-n,s,s,this),b:new t(-n,o-n,s,s,this),l:new t(-a-n,-n,s,s,this),r:new t(a-n,-n,s,s,this)},lt:new t(-a-n,-o-n,s,s,this),lb:new t(-a-n,o-n,s,s,this),rt:new t(a-n,-o-n,s,s,this),rb:new t(a-n,o-n,s,s,this),rotate:new t(-l,-o-2*s-l,h,h,this)}}clone(){let{x:e,y:r,w:s,h:n,master:a}=this,o=new t(e,r,s,n,a);return o.angle=this.angle,o.fixedAspectRatio=this.fixedAspectRatio,o}checkHit(t,e){let{angle:r,center:s,x:n,y:a,w:o,h:h,master:l}=this,u=(null==l?void 0:l.center)??s,d=(null==l?void 0:l.angle)??r;null==l&&(n-=u.x,a-=u.y);let f=t-u.x,p=e-u.y,c=f,m=p;return 0!==d&&(c=f*Math.cos(d)+p*Math.sin(d),m=p*Math.cos(d)-f*Math.sin(d)),!(cn+o||ma+h)}};tN=new WeakMap,tG=new WeakMap,tY=new WeakMap,tW=new WeakMap,tV=new WeakMap,tH=new WeakMap,tX=new WeakSet,tj=function(t,e){let r=this[t]!==e;switch(t){case"x":ev(this,tG,e);break;case"y":ev(this,tY,e);break;case"w":ev(this,tW,e);break;case"h":ev(this,tV,e);break;case"angle":ev(this,tH,e)}r&&eb(this,tN).emit("propsChange",{[t]:e})},ey(rS,"CTRL_SIZE",16),ey(rS,"CTRL_KEYS",["t","b","l","r","lt","lb","rt","rb","rotate"]);let rE=rS;class rU{constructor(){ey(this,"rect",new rE),ey(this,"time",{offset:0,duration:0}),ey(this,"visible",!0),ew(this,tZ,new i0),ey(this,"on",eb(this,tZ).on),ew(this,t$,0),ey(this,"opacity",1),ey(this,"flip",null),ew(this,tK,null),ew(this,tq,null),ey(this,"ready",Promise.resolve()),this.rect.on("propsChange",t=>{eb(this,tZ).emit("propsChange",{rect:t})})}get zIndex(){return eb(this,t$)}set zIndex(t){let e=eb(this,t$)!==t;ev(this,t$,t),e&&eb(this,tZ).emit("propsChange",{zIndex:t})}_render(t){let{rect:{center:e,angle:r}}=this;t.setTransform("horizontal"===this.flip?-1:1,0,0,"vertical"===this.flip?-1:1,e.x,e.y),t.rotate((null==this.flip?1:-1)*r),t.globalAlpha=this.opacity}setAnimation(t,e){ev(this,tK,Object.entries(t).map(([t,e])=>{let r={from:0,to:100}[t]??Number(t.slice(0,-1));if(isNaN(r)||r>100||r<0)throw Error("keyFrame must between 0~100");return[r/100,e]})),ev(this,tq,Object.assign({},eb(this,tq),{duration:1e6*e.duration,delay:(e.delay??0)*1e6,iterCount:e.iterCount??1/0}))}animate(t){if(null==eb(this,tK)||null==eb(this,tq)||t=r.iterCount)return{};let s=t%r.duration,n=t===r.duration?1:s/r.duration,a=e.findIndex(t=>t[0]>=n);if(-1===a)return{};let o=e[a-1],h=e[a],l=h[1];if(null==o)return l;let u=o[1],d={},f=(n-o[0])/(h[0]-o[0]);for(let t in l)null!=u[t]&&(d[t]=(l[t]-u[t])*f+u[t]);return d}(t,eb(this,tK),eb(this,tq));for(let t in e)switch(t){case"opacity":this.opacity=e[t];break;case"x":case"y":case"w":case"h":case"angle":this.rect[t]=e[t]}}copyStateTo(t){ev(t,tK,eb(this,tK)),ev(t,tq,eb(this,tq)),t.visible=this.visible,t.zIndex=this.zIndex,t.opacity=this.opacity,t.flip=this.flip,t.rect=this.rect.clone(),t.time={...this.time}}destroy(){eb(this,tZ).destroy()}}tZ=new WeakMap,t$=new WeakMap,tK=new WeakMap,tq=new WeakMap;let rx=class t extends rU{constructor(t){super(),ew(this,tQ),ew(this,tJ,null),ew(this,t0,!1),ev(this,tQ,t),this.ready=t.ready.then(({width:t,height:e,duration:r})=>{this.rect.w=0===this.rect.w?t:this.rect.w,this.rect.h=0===this.rect.h?e:this.rect.h,this.time.duration=0===this.time.duration?r:this.time.duration})}async offscreenRender(t,e){var r;this.animate(e),super._render(t);let{w:s,h:n}=this.rect,{video:a,audio:o,state:h}=await eb(this,tQ).tick(e);if("done"===h)return{audio:o??[],done:!0};let l=a??eb(this,tJ);return null!=l&&t.drawImage(l,-s/2,-n/2,s,n),null!=a&&(null==(r=eb(this,tJ))||r.close(),ev(this,tJ,a)),{audio:o??[],done:!1}}async clone(){let e=new t(await eb(this,tQ).clone());return await e.ready,this.copyStateTo(e),e}destroy(){var t;eb(this,t0)||(ev(this,t0,!0),e5.info("OffscreenSprite destroy"),super.destroy(),null==(t=eb(this,tJ))||t.close(),ev(this,tJ,null),eb(this,tQ).destroy())}};tQ=new WeakMap,tJ=new WeakMap,t0=new WeakMap;let rT=rx;class rA extends rU{constructor(t){super(),ew(this,t8),ew(this,t1),ew(this,t2,null),ew(this,t3,[]),ew(this,t6,!1),ew(this,t5,-1),ew(this,t9,!1),ev(this,t1,t),this.ready=t.ready.then(({width:t,height:e,duration:r})=>{this.rect.w=0===this.rect.w?t:this.rect.w,this.rect.h=0===this.rect.h?e:this.rect.h,this.time.duration=0===this.time.duration?r:this.time.duration})}getClip(){return eb(this,t1)}preFrame(t){eS(this,t8,t4).call(this,t)}render(t,e){this.animate(e),super._render(t);let{w:r,h:s}=this.rect;eb(this,t5)!==e&&eS(this,t8,t4).call(this,e),ev(this,t5,e);let n=eb(this,t3);ev(this,t3,[]);let a=eb(this,t2);return null!=a&&t.drawImage(a,-r/2,-s/2,r,s),{audio:n}}destroy(){var t;eb(this,t9)||(ev(this,t9,!0),e5.info("VisibleSprite destroy"),super.destroy(),null==(t=eb(this,t2))||t.close(),ev(this,t2,null),eb(this,t1).destroy())}}t1=new WeakMap,t2=new WeakMap,t3=new WeakMap,t6=new WeakMap,t8=new WeakSet,t4=function(t){eb(this,t6)||(ev(this,t6,!0),eb(this,t1).tick(t).then(({video:t,audio:e})=>{var r;null!=t&&(null==(r=eb(this,t2))||r.close(),ev(this,t2,t??null)),ev(this,t3,e??[])}).finally(()=>{ev(this,t6,!1)}))},t5=new WeakMap,t9=new WeakMap;let rC=0;async function rI(t){t()>50&&(await iv(15),await rI(t))}class rB{constructor(t={}){ew(this,eh),ew(this,t7,e5.create(`id:${rC++},`)),ew(this,et,!1),ew(this,ee,[]),ew(this,ei),ew(this,er),ew(this,es,null),ew(this,en),ew(this,ea),ew(this,eo,new i0),ey(this,"on",eb(this,eo).on);let{width:e=0,height:r=0}=t;ev(this,ei,new OffscreenCanvas(e,r));let s=eb(this,ei).getContext("2d",{alpha:!1});if(null==s)throw Error("Can not create 2d offscreen context");ev(this,er,s),ev(this,en,Object.assign({bgColor:"#000",width:0,height:0,videoCodec:"avc1.42E032",audio:!0,bitrate:5e6,metaDataTags:null},t)),ev(this,ea,e*r>0)}static async isSupported(t={videoCodec:"avc1.42E032"}){return null!=self.OffscreenCanvas&&null!=self.VideoEncoder&&null!=self.VideoDecoder&&null!=self.VideoFrame&&null!=self.AudioEncoder&&null!=self.AudioDecoder&&null!=self.AudioData&&((await self.VideoEncoder.isConfigSupported({codec:t.videoCodec,width:1280,height:720})).supported??!1)&&(await self.AudioEncoder.isConfigSupported({codec:iC.codec,sampleRate:iC.sampleRate,numberOfChannels:iC.channelCount})).supported}async addSprite(t,e={}){eb(this,t7).info("Combinator add sprite",t);let r=await t.clone();eb(this,t7).info("Combinator add sprite ready",t),eb(this,ee).push(Object.assign(r,{main:e.main??!1,expired:!1})),eb(this,ee).sort((t,e)=>t.zIndex-e.zIndex)}output(){if(0===eb(this,ee).length)throw Error("No sprite added");let t=eb(this,ee).find(t=>t.main),e=null!=t?t.time.offset+t.time.duration:Math.max(...eb(this,ee).map(t=>t.time.offset+t.time.duration));if(e===1/0)throw Error("Unable to determine the end time, please specify a main sprite, or limit the duration of ImgClip, AudioCli");-1===e&&eb(this,t7).warn("Unable to determine the end time, process value don't update"),eb(this,t7).info(`start combinate video, maxTime:${e}`);let r=eS(this,eh,el).call(this,e),s=performance.now(),n=eS(this,eh,eu).call(this,r,e,{onProgress:t=>{eb(this,t7).debug("OutputProgress:",t),eb(this,eo).emit("OutputProgress",t)},onEnded:async()=>{await r.flush(),eb(this,t7).info("===== output ended =====, cost:",performance.now()-s),eb(this,eo).emit("OutputProgress",1),this.destroy()},onError:t=>{eb(this,eo).emit("error",t),o(t),this.destroy()}});ev(this,es,()=>{n(),r.close(),o()});let{stream:a,stop:o}=i9(r.mp4file,500,this.destroy);return a}destroy(){var t;eb(this,et)||(ev(this,et,!0),null==(t=eb(this,es))||t.call(this),eb(this,eo).destroy())}}t7=new WeakMap,et=new WeakMap,ee=new WeakMap,ei=new WeakMap,er=new WeakMap,es=new WeakMap,en=new WeakMap,ea=new WeakMap,eo=new WeakMap,eh=new WeakSet,el=function(t){let{width:e,height:r,videoCodec:s,bitrate:n,audio:a,metaDataTags:o}=eb(this,en);return i4({video:eb(this,ea)?{width:e,height:r,expectFPS:30,codec:s,bitrate:n,__unsafe_hardwareAcceleration__:eb(this,en).__unsafe_hardwareAcceleration__}:null,audio:!1===a?null:{codec:"aac",sampleRate:iC.sampleRate,channelCount:iC.channelCount},duration:t,metaDataTags:o})},eu=function(t,e,{onProgress:r,onEnded:s,onError:n}){let a=0,o=!1,h=null;(async()=>{let r=0,{width:n,height:l}=eb(this,ei),d=eb(this,er),f=0;for(;;){if(null!=h)return;if(o||-1!==e&&f>e||0===eb(this,ee).length){u(),await s();return}a=f/e,d.fillStyle=eb(this,en).bgColor,d.fillRect(0,0,n,l);let p=[];for(let t of eb(this,ee)){if(o)break;if(f0&&f>t.time.offset+t.time.duration||r){if(t.main){u(),await s();return}t.destroy(),t.expired=!0}}if(o)return;if(!1!==eb(this,en).audio){if(p.flat().every(t=>0===t.length))t.encodeAudio(function(t,e,r){let s=Math.floor(33e3*r/1e6);return new AudioData({timestamp:t,numberOfChannels:iC.channelCount,numberOfFrames:s,sampleRate:r,format:"f32-planar",data:new Float32Array(2*s)})}(f,0,iC.sampleRate));else{let e=ib(p);t.encodeAudio(new AudioData({timestamp:f,numberOfChannels:iC.channelCount,numberOfFrames:e.length/iC.channelCount,sampleRate:iC.sampleRate,format:"f32-planar",data:e}))}}if(eb(this,ea)){let e=new VideoFrame(eb(this,ei),{duration:33e3,timestamp:f});t.encodeVideo(e,{keyFrame:r%150==0}),d.resetTransform(),d.clearRect(0,0,n,l),r+=1}f+=33e3,await rI(t.getEncodeQueueSize)}})().catch(t=>{h=t,eb(this,t7).error(t),u(),n(t)});let l=setInterval(()=>{r(a)},500),u=()=>{o||(o=!0,clearInterval(l),eb(this,ee).forEach(t=>t.destroy()))};return u}},{"718a311db185ef08":"juSMc","@parcel/transformer-js/src/esmodule-helpers.js":"9pCYc"}],juSMc:[function(t,e,r){var s=t("9c62938f1dccc73c"),n=t("aceacb6a4531a9d2"),a="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;function o(t){if(t>2147483647)throw RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,h.prototype),e}function h(t,e,r){if("number"==typeof t){if("string"==typeof e)throw TypeError('The "string" argument must be of type string. Received type number');return d(t)}return l(t,e,r)}function l(t,e,r){if("string"==typeof t)return function(t,e){if(("string"!=typeof e||""===e)&&(e="utf8"),!h.isEncoding(e))throw TypeError("Unknown encoding: "+e);var r=0|m(t,e),s=o(r),n=s.write(t,e);return n!==r&&(s=s.slice(0,n)),s}(t,e);if(ArrayBuffer.isView(t))return function(t){if(B(t,Uint8Array)){var e=new Uint8Array(t);return p(e.buffer,e.byteOffset,e.byteLength)}return f(t)}(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(B(t,ArrayBuffer)||t&&B(t.buffer,ArrayBuffer)||"undefined"!=typeof SharedArrayBuffer&&(B(t,SharedArrayBuffer)||t&&B(t.buffer,SharedArrayBuffer)))return p(t,e,r);if("number"==typeof t)throw TypeError('The "value" argument must not be of type number. Received type number');var s=t.valueOf&&t.valueOf();if(null!=s&&s!==t)return h.from(s,e,r);var n=function(t){if(h.isBuffer(t)){var e,r=0|c(t.length),s=o(r);return 0===s.length||t.copy(s,0,0,r),s}return void 0!==t.length?"number"!=typeof t.length||(e=t.length)!=e?o(0):f(t):"Buffer"===t.type&&Array.isArray(t.data)?f(t.data):void 0}(t);if(n)return n;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return h.from(t[Symbol.toPrimitive]("string"),e,r);throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function u(t){if("number"!=typeof t)throw TypeError('"size" argument must be of type number');if(t<0)throw RangeError('The value "'+t+'" is invalid for option "size"')}function d(t){return u(t),o(t<0?0:0|c(t))}function f(t){for(var e=t.length<0?0:0|c(t.length),r=o(e),s=0;s=2147483647)throw RangeError("Attempt to allocate Buffer larger than maximum size: 0x7fffffff bytes");return 0|t}function m(t,e){if(h.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||B(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var r=t.length,s=arguments.length>2&&!0===arguments[2];if(!s&&0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return A(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return C(t).length;default:if(n)return s?-1:A(t).length;e=(""+e).toLowerCase(),n=!0}}function g(t,e,r){var n,a,o=!1;if((void 0===e||e<0)&&(e=0),e>this.length||((void 0===r||r>this.length)&&(r=this.length),r<=0||(r>>>=0)<=(e>>>=0)))return"";for(t||(t="utf8");;)switch(t){case"hex":return function(t,e,r){var s=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>s)&&(r=s);for(var n="",a=e;a2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),(a=r=+r)!=a&&(r=n?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(n)return -1;r=t.length-1}else if(r<0){if(!n)return -1;r=0}if("string"==typeof e&&(e=h.from(e,s)),h.isBuffer(e))return 0===e.length?-1:b(t,e,r,s,n);if("number"==typeof e)return(e&=255,"function"==typeof Uint8Array.prototype.indexOf)?n?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):b(t,[e],r,s,n);throw TypeError("val must be string, number or Buffer")}function b(t,e,r,s,n){var a,o=1,h=t.length,l=e.length;if(void 0!==s&&("ucs2"===(s=String(s).toLowerCase())||"ucs-2"===s||"utf16le"===s||"utf-16le"===s)){if(t.length<2||e.length<2)return -1;o=2,h/=2,l/=2,r/=2}function u(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(n){var d=-1;for(a=r;ah&&(r=h-l),a=r;a>=0;a--){for(var f=!0,p=0;p239?4:u>223?3:u>191?2:1;if(n+f<=r)switch(f){case 1:u<128&&(d=u);break;case 2:(192&(a=t[n+1]))==128&&(l=(31&u)<<6|63&a)>127&&(d=l);break;case 3:a=t[n+1],o=t[n+2],(192&a)==128&&(192&o)==128&&(l=(15&u)<<12|(63&a)<<6|63&o)>2047&&(l<55296||l>57343)&&(d=l);break;case 4:a=t[n+1],o=t[n+2],h=t[n+3],(192&a)==128&&(192&o)==128&&(192&h)==128&&(l=(15&u)<<18|(63&a)<<12|(63&o)<<6|63&h)>65535&&l<1114112&&(d=l)}null===d?(d=65533,f=1):d>65535&&(d-=65536,s.push(d>>>10&1023|55296),d=56320|1023&d),s.push(d),n+=f}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);for(var r="",s=0;sr)throw RangeError("Trying to access beyond buffer length")}function S(t,e,r,s,n,a){if(!h.isBuffer(t))throw TypeError('"buffer" argument must be a Buffer instance');if(e>n||et.length)throw RangeError("Index out of range")}function E(t,e,r,s,n,a){if(r+s>t.length||r<0)throw RangeError("Index out of range")}function U(t,e,r,s,a){return e=+e,r>>>=0,a||E(t,e,r,4,34028234663852886e22,-34028234663852886e22),n.write(t,e,r,s,23,4),r+4}function x(t,e,r,s,a){return e=+e,r>>>=0,a||E(t,e,r,8,17976931348623157e292,-17976931348623157e292),n.write(t,e,r,s,52,8),r+8}r.Buffer=h,r.SlowBuffer=function(t){return+t!=t&&(t=0),h.alloc(+t)},r.INSPECT_MAX_BYTES=50,r.kMaxLength=2147483647,h.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),h.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(h.prototype,"parent",{enumerable:!0,get:function(){if(h.isBuffer(this))return this.buffer}}),Object.defineProperty(h.prototype,"offset",{enumerable:!0,get:function(){if(h.isBuffer(this))return this.byteOffset}}),h.poolSize=8192,h.from=function(t,e,r){return l(t,e,r)},Object.setPrototypeOf(h.prototype,Uint8Array.prototype),Object.setPrototypeOf(h,Uint8Array),h.alloc=function(t,e,r){return(u(t),t<=0)?o(t):void 0!==e?"string"==typeof r?o(t).fill(e,r):o(t).fill(e):o(t)},h.allocUnsafe=function(t){return d(t)},h.allocUnsafeSlow=function(t){return d(t)},h.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==h.prototype},h.compare=function(t,e){if(B(t,Uint8Array)&&(t=h.from(t,t.offset,t.byteLength)),B(e,Uint8Array)&&(e=h.from(e,e.offset,e.byteLength)),!h.isBuffer(t)||!h.isBuffer(e))throw TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,s=e.length,n=0,a=Math.min(r,s);ns.length?h.from(a).copy(s,n):Uint8Array.prototype.set.call(s,a,n);else if(h.isBuffer(a))a.copy(s,n);else throw TypeError('"list" argument must be an Array of Buffers');n+=a.length}return s},h.byteLength=m,h.prototype._isBuffer=!0,h.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;ee&&(t+=" ... "),""},a&&(h.prototype[a]=h.prototype.inspect),h.prototype.compare=function(t,e,r,s,n){if(B(t,Uint8Array)&&(t=h.from(t,t.offset,t.byteLength)),!h.isBuffer(t))throw TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===s&&(s=0),void 0===n&&(n=this.length),e<0||r>t.length||s<0||n>this.length)throw RangeError("out of range index");if(s>=n&&e>=r)return 0;if(s>=n)return -1;if(e>=r)return 1;if(e>>>=0,r>>>=0,s>>>=0,n>>>=0,this===t)return 0;for(var a=n-s,o=r-e,l=Math.min(a,o),u=this.slice(s,n),d=t.slice(e,r),f=0;f>>=0,isFinite(r)?(r>>>=0,void 0===s&&(s="utf8")):(s=r,r=void 0);else throw Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var n,a,o,h,l,u,d,f,p=this.length-e;if((void 0===r||r>p)&&(r=p),t.length>0&&(r<0||e<0)||e>this.length)throw RangeError("Attempt to write outside buffer bounds");s||(s="utf8");for(var c=!1;;)switch(s){case"hex":return function(t,e,r,s){r=Number(r)||0;var n=t.length-r;s?(s=Number(s))>n&&(s=n):s=n;var a=e.length;s>a/2&&(s=a/2);for(var o=0;o>8,n.push(r%256),n.push(s);return n}(t,this.length-d),this,d,f);default:if(c)throw TypeError("Unknown encoding: "+s);s=(""+s).toLowerCase(),c=!0}},h.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},h.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||v(t,e,this.length);for(var s=this[t],n=1,a=0;++a>>=0,e>>>=0,r||v(t,e,this.length);for(var s=this[t+--e],n=1;e>0&&(n*=256);)s+=this[t+--e]*n;return s},h.prototype.readUint8=h.prototype.readUInt8=function(t,e){return t>>>=0,e||v(t,1,this.length),this[t]},h.prototype.readUint16LE=h.prototype.readUInt16LE=function(t,e){return t>>>=0,e||v(t,2,this.length),this[t]|this[t+1]<<8},h.prototype.readUint16BE=h.prototype.readUInt16BE=function(t,e){return t>>>=0,e||v(t,2,this.length),this[t]<<8|this[t+1]},h.prototype.readUint32LE=h.prototype.readUInt32LE=function(t,e){return t>>>=0,e||v(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},h.prototype.readUint32BE=h.prototype.readUInt32BE=function(t,e){return t>>>=0,e||v(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},h.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||v(t,e,this.length);for(var s=this[t],n=1,a=0;++a=(n*=128)&&(s-=Math.pow(2,8*e)),s},h.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||v(t,e,this.length);for(var s=e,n=1,a=this[t+--s];s>0&&(n*=256);)a+=this[t+--s]*n;return a>=(n*=128)&&(a-=Math.pow(2,8*e)),a},h.prototype.readInt8=function(t,e){return(t>>>=0,e||v(t,1,this.length),128&this[t])?-((255-this[t]+1)*1):this[t]},h.prototype.readInt16LE=function(t,e){t>>>=0,e||v(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},h.prototype.readInt16BE=function(t,e){t>>>=0,e||v(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},h.prototype.readInt32LE=function(t,e){return t>>>=0,e||v(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},h.prototype.readInt32BE=function(t,e){return t>>>=0,e||v(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},h.prototype.readFloatLE=function(t,e){return t>>>=0,e||v(t,4,this.length),n.read(this,t,!0,23,4)},h.prototype.readFloatBE=function(t,e){return t>>>=0,e||v(t,4,this.length),n.read(this,t,!1,23,4)},h.prototype.readDoubleLE=function(t,e){return t>>>=0,e||v(t,8,this.length),n.read(this,t,!0,52,8)},h.prototype.readDoubleBE=function(t,e){return t>>>=0,e||v(t,8,this.length),n.read(this,t,!1,52,8)},h.prototype.writeUintLE=h.prototype.writeUIntLE=function(t,e,r,s){if(t=+t,e>>>=0,r>>>=0,!s){var n=Math.pow(2,8*r)-1;S(this,t,e,r,n,0)}var a=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,!s){var n=Math.pow(2,8*r)-1;S(this,t,e,r,n,0)}var a=r-1,o=1;for(this[e+a]=255&t;--a>=0&&(o*=256);)this[e+a]=t/o&255;return e+r},h.prototype.writeUint8=h.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,1,255,0),this[e]=255&t,e+1},h.prototype.writeUint16LE=h.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},h.prototype.writeUint16BE=h.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},h.prototype.writeUint32LE=h.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},h.prototype.writeUint32BE=h.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},h.prototype.writeIntLE=function(t,e,r,s){if(t=+t,e>>>=0,!s){var n=Math.pow(2,8*r-1);S(this,t,e,r,n-1,-n)}var a=0,o=1,h=0;for(this[e]=255&t;++a>0)-h&255;return e+r},h.prototype.writeIntBE=function(t,e,r,s){if(t=+t,e>>>=0,!s){var n=Math.pow(2,8*r-1);S(this,t,e,r,n-1,-n)}var a=r-1,o=1,h=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===h&&0!==this[e+a+1]&&(h=1),this[e+a]=(t/o>>0)-h&255;return e+r},h.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},h.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},h.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},h.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},h.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||S(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},h.prototype.writeFloatLE=function(t,e,r){return U(this,t,e,!0,r)},h.prototype.writeFloatBE=function(t,e,r){return U(this,t,e,!1,r)},h.prototype.writeDoubleLE=function(t,e,r){return x(this,t,e,!0,r)},h.prototype.writeDoubleBE=function(t,e,r){return x(this,t,e,!1,r)},h.prototype.copy=function(t,e,r,s){if(!h.isBuffer(t))throw TypeError("argument should be a Buffer");if(r||(r=0),s||0===s||(s=this.length),e>=t.length&&(e=t.length),e||(e=0),s>0&&s=this.length)throw RangeError("Index out of range");if(s<0)throw RangeError("sourceEnd out of bounds");s>this.length&&(s=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(n=e;n55295&&r<57344){if(!n){if(r>56319||o+1===s){(e-=3)>-1&&a.push(239,191,189);continue}n=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),n=r;continue}r=(n-55296<<10|r-56320)+65536}else n&&(e-=3)>-1&&a.push(239,191,189);if(n=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else if(r<1114112){if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}else throw Error("Invalid code point")}return a}function C(t){return s.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(T,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function I(t,e,r,s){for(var n=0;n=e.length)&&!(n>=t.length);++n)e[n+r]=t[n];return n}function B(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}var k=function(){for(var t="0123456789abcdef",e=Array(256),r=0;r<16;++r)for(var s=16*r,n=0;n<16;++n)e[s+n]=t[r]+t[n];return e}()},{"9c62938f1dccc73c":"iaOvk",aceacb6a4531a9d2:"9RC4J"}],iaOvk:[function(t,e,r){r.byteLength=function(t){var e=u(t),r=e[0],s=e[1];return(r+s)*3/4-s},r.toByteArray=function(t){var e,r,s=u(t),o=s[0],h=s[1],l=new a((o+h)*3/4-h),d=0,f=h>0?o-4:o;for(r=0;r>16&255,l[d++]=e>>8&255,l[d++]=255&e;return 2===h&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,l[d++]=255&e),1===h&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,l[d++]=e>>8&255,l[d++]=255&e),l},r.fromByteArray=function(t){for(var e,r=t.length,n=r%3,a=[],o=0,h=r-n;o>18&63]+s[n>>12&63]+s[n>>6&63]+s[63&n]);return a.join("")}(t,o,o+16383>h?h:o+16383));return 1===n?a.push(s[(e=t[r-1])>>2]+s[e<<4&63]+"=="):2===n&&a.push(s[(e=(t[r-2]<<8)+t[r-1])>>10]+s[e>>4&63]+s[e<<2&63]+"="),a.join("")};for(var s=[],n=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,l=o.length;h0)throw Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");-1===r&&(r=e);var s=r===e?0:4-r%4;return[r,s]}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},{}],"9RC4J":[function(t,e,r){/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh*/r.read=function(t,e,r,s,n){var a,o,h=8*n-s-1,l=(1<>1,d=-7,f=r?n-1:0,p=r?-1:1,c=t[e+f];for(f+=p,a=c&(1<<-d)-1,c>>=-d,d+=h;d>0;a=256*a+t[e+f],f+=p,d-=8);for(o=a&(1<<-d)-1,a>>=-d,d+=s;d>0;o=256*o+t[e+f],f+=p,d-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(c?-1:1);o+=Math.pow(2,s),a-=u}return(c?-1:1)*o*Math.pow(2,a-s)},r.write=function(t,e,r,s,n,a){var o,h,l,u=8*a-n-1,d=(1<>1,p=23===n?5960464477539062e-23:0,c=s?0:a-1,m=s?1:-1,g=e<0||0===e&&1/e<0?1:0;for(isNaN(e=Math.abs(e))||e===1/0?(h=isNaN(e)?1:0,o=d):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),o+f>=1?e+=p/l:e+=p*Math.pow(2,1-f),e*l>=2&&(o++,l/=2),o+f>=d?(h=0,o=d):o+f>=1?(h=(e*l-1)*Math.pow(2,n),o+=f):(h=e*Math.pow(2,f-1)*Math.pow(2,n),o=0));n>=8;t[r+c]=255&h,c+=m,h/=256,n-=8);for(o=o<0;t[r+c]=255&o,c+=m,o/=256,u-=8);t[r+c-m]|=128*g}},{}],"9pCYc":[function(t,e,r){r.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},r.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},r.exportAll=function(t,e){return Object.keys(t).forEach(function(r){"default"===r||"__esModule"===r||Object.prototype.hasOwnProperty.call(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[r]}})}),e},r.export=function(t,e,r){Object.defineProperty(t,e,{enumerable:!0,get:r})}},{}]},["jc2x7"],"jc2x7","parcelRequire4dc0"); \ No newline at end of file diff --git a/docs/compiled/artplayer-proxy-webav.legacy.js b/docs/compiled/artplayer-proxy-webav.legacy.js new file mode 100644 index 000000000..13e7225d1 --- /dev/null +++ b/docs/compiled/artplayer-proxy-webav.legacy.js @@ -0,0 +1,8 @@ + +/*! + * artplayer-proxy-webav.js v1.0.0 + * Github: https://github.com/zhw2590582/ArtPlayer + * (c) 2017-2024 Harvey Zack + * Released under the MIT License. + */ +!function(t,e,r,n,s){var a="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},o="function"==typeof a[n]&&a[n],u=o.cache||{},l="undefined"!=typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(e,r){if(!u[e]){if(!t[e]){var s="function"==typeof a[n]&&a[n];if(!r&&s)return s(e,!0);if(o)return o(e,!0);if(l&&"string"==typeof e)return l(e);var h=Error("Cannot find module '"+e+"'");throw h.code="MODULE_NOT_FOUND",h}d.resolve=function(r){var n=t[e][1][r];return null!=n?n:r},d.cache={};var f=u[e]=new c.Module(e);t[e][0].call(f.exports,d,f,f.exports,this)}return u[e].exports;function d(t){var e=d.resolve(t);return!1===e?{}:c(e)}}c.isParcelRequire=!0,c.Module=function(t){this.id=t,this.bundle=c,this.exports={}},c.modules=t,c.cache=u,c.parent=o,c.register=function(e,r){t[e]=[function(t,e){e.exports=r},{}]},Object.defineProperty(c,"root",{get:function(){return a[n]}}),a[n]=c;for(var h=0;hs?u=(a-o*s)/2:l=(o-a/s)/2,Object.assign(h.style,{padding:"".concat(l,"px ").concat(u,"px")})}}function U(){return(U=(0,s._)(function(){var e,r,s;return(0,a._)(this,function(a){switch(a.label){case 0:return[4,(0,o.Combinator).isSupported()];case 1:if(!a.sent())throw t.notice.show="WebAV is not supported",Error("WebAV is not supported");v(),Object.assign(g,{playing:!1,duration:0,videoWidth:0,videoHeight:0,currentTime:0,playbackRate:1,paused:!0,ended:!1,readyState:0,buffered:0,muted:n.muted,volume:n.volume,autoplay:n.autoplay}),d&&(d.destroy(),t.emit("video:abort",{type:"abort"}),t.emit("video:emptied",{type:"emptied"})),a.label=2;case 2:return a.trys.push([2,5,,6]),[4,Promise.resolve()];case 3:return a.sent(),t.emit("video:loadstart",{type:"loadstart"}),[4,fetch(n.url)];case 4:if(!(e=a.sent()).body)throw Error("No response body");return d=new o.MP4Clip(e.body),[3,6];case 5:throw r=a.sent(),t.emit("video:error",r),r;case 6:return[4,d.ready];case 7:return Object.assign(g,{readyState:4,duration:Math.round((s=a.sent()).duration/1e6),videoWidth:s.width,videoHeight:s.height}),h.width=g.videoWidth,h.height=g.videoHeight,[4,S(.1)];case 8:return a.sent(),E(),t.emit("video:loadedmetadata",{type:"loadedmetadata"}),t.emit("video:durationchange",{type:"durationchange"}),t.emit("video:loadeddata",{type:"loadeddata"}),t.emit("video:canplay",{type:"canplay"}),t.emit("video:canplaythrough",{type:"canplaythrough"}),[2]}})})).apply(this,arguments)}return c(h,"textTracks",{get:function(){return[]}}),c(h,"duration",{get:function(){return g.duration}}),c(h,"videoWidth",{get:function(){return g.videoWidth}}),c(h,"videoHeight",{get:function(){return g.videoHeight}}),c(h,"volume",{get:function(){return g.volume},set:function(e){g.volume=Math.max(0,Math.min(1,e)),b(),t.emit("video:volumechange",{type:"volumechange"})}}),c(h,"currentTime",{get:function(){return g.currentTime},set:function(e){var r=Math.max(0,Math.min(e,g.duration)),n=performance.now();n-y>16&&(y=n,_=r,g.currentTime=r,g.playing||S(r),t.emit("video:timeupdate",{type:"timeupdate"}))}}),c(h,"autoplay",{get:function(){return g.autoplay},set:function(t){g.autoplay=t,t&&g.readyState>=4&&h.play()}}),c(h,"src",{get:function(){return n.url},set:function(t){n.url=t,(function(){return U.apply(this,arguments)})().then(function(){n.autoplay&&h.play()})}}),c(h,"playbackRate",{get:function(){return g.playbackRate},set:function(r){g.playbackRate=Math.max(.25,Math.min(2,r)),p&&p.playbackRate.setValueAtTime(g.playbackRate,e.currentTime),t.emit("video:ratechange",{type:"ratechange"})}}),c(h,"playing",{get:function(){return g.playing}}),c(h,"paused",{get:function(){return g.paused}}),c(h,"ended",{get:function(){return g.ended}}),c(h,"readyState",{get:function(){return g.readyState}}),c(h,"muted",{get:function(){return g.muted},set:function(e){g.muted=e,b(),t.emit("video:volumechange",{type:"volumechange"})}}),c(h,"buffered",{get:function(){return{start:function(){return 0},end:function(){return g.buffered},length:1}}}),c(h,"play",{value:/*#__PURE__*/(0,s._)(function(){return(0,a._)(this,function(e){switch(e.label){case 0:return[4,function(){return w.apply(this,arguments)}()];case 1:return e.sent(),t.emit("video:play",{type:"play"}),t.emit("video:playing",{type:"playing"}),[2]}})})}),c(h,"pause",{value:function(){v(),g.playing=!1,g.paused=!0,t.emit("video:pause",{type:"pause"})}}),t.on("destroy",function(){v(),d&&d.destroy()}),t.on("resize",E),h}}"undefined"!=typeof window&&(window.artplayerProxyWebAV=u)},{"@swc/helpers/_/_async_to_generator":"eONSn","@swc/helpers/_/_ts_generator":"6Xyd0","@webav/av-cliper":"4iON5","@parcel/transformer-js/src/esmodule-helpers.js":"iWrD0"}],eONSn:[function(t,e,r){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function s(t,e,r,n,s,a,o){try{var u=t[a](o),l=u.value}catch(t){r(t);return}u.done?e(l):Promise.resolve(l).then(n,s)}function a(t){return function(){var e=this,r=arguments;return new Promise(function(n,a){var o=t.apply(e,r);function u(t){s(o,n,a,u,l,"next",t)}function l(t){s(o,n,a,u,l,"throw",t)}u(void 0)})}}n.defineInteropFlag(r),n.export(r,"_",function(){return a})},{"@parcel/transformer-js/src/esmodule-helpers.js":"iWrD0"}],iWrD0:[function(t,e,r){r.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},r.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},r.exportAll=function(t,e){return Object.keys(t).forEach(function(r){"default"===r||"__esModule"===r||Object.prototype.hasOwnProperty.call(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[r]}})}),e},r.export=function(t,e,r){Object.defineProperty(t,e,{enumerable:!0,get:r})}},{}],"6Xyd0":[function(t,e,r){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"_",function(){return s.__generator});var s=t("tslib")},{tslib:"c0d7h","@parcel/transformer-js/src/esmodule-helpers.js":"iWrD0"}],c0d7h:[function(t,e,r){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"__extends",function(){return o}),n.export(r,"__assign",function(){return u}),n.export(r,"__rest",function(){return l}),n.export(r,"__decorate",function(){return c}),n.export(r,"__param",function(){return h}),n.export(r,"__esDecorate",function(){return f}),n.export(r,"__runInitializers",function(){return d}),n.export(r,"__propKey",function(){return p}),n.export(r,"__setFunctionName",function(){return m}),n.export(r,"__metadata",function(){return _}),n.export(r,"__awaiter",function(){return y}),n.export(r,"__generator",function(){return g}),n.export(r,"__createBinding",function(){return v}),n.export(r,"__exportStar",function(){return b}),n.export(r,"__values",function(){return w}),n.export(r,"__read",function(){return S}),n.export(r,"__spread",function(){return x}),n.export(r,"__spreadArrays",function(){return E}),n.export(r,"__spreadArray",function(){return U}),n.export(r,"__await",function(){return T}),n.export(r,"__asyncGenerator",function(){return A}),n.export(r,"__asyncDelegator",function(){return I}),n.export(r,"__asyncValues",function(){return k}),n.export(r,"__makeTemplateObject",function(){return C}),n.export(r,"__importStar",function(){return P}),n.export(r,"__importDefault",function(){return R}),n.export(r,"__classPrivateFieldGet",function(){return F}),n.export(r,"__classPrivateFieldSet",function(){return D}),n.export(r,"__classPrivateFieldIn",function(){return z}),n.export(r,"__addDisposableResource",function(){return L}),n.export(r,"__disposeResources",function(){return M});var s=t("@swc/helpers/_/_type_of"),a=function(t,e){return(a=Object.setPrototypeOf||({__proto__:[]})instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)};function o(t,e){if("function"!=typeof e&&null!==e)throw TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}var u=function(){return(u=Object.assign||function(t){for(var e,r=1,n=arguments.length;re.indexOf(n)&&(r[n]=t[n]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols)for(var s=0,n=Object.getOwnPropertySymbols(t);se.indexOf(n[s])&&Object.prototype.propertyIsEnumerable.call(t,n[s])&&(r[n[s]]=t[n[s]]);return r}function c(t,e,r,n){var s,a=arguments.length,o=a<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,r,n);else for(var u=t.length-1;u>=0;u--)(s=t[u])&&(o=(a<3?s(o):a>3?s(e,r,o):s(e,r))||o);return a>3&&o&&Object.defineProperty(e,r,o),o}function h(t,e){return function(r,n){e(r,n,t)}}function f(t,e,r,n,s,a){function o(t){if(void 0!==t&&"function"!=typeof t)throw TypeError("Function expected");return t}for(var u,l=n.kind,c="getter"===l?"get":"setter"===l?"set":"value",h=!e&&t?n.static?t:t.prototype:null,f=e||(h?Object.getOwnPropertyDescriptor(h,n.name):{}),d=!1,p=r.length-1;p>=0;p--){var m={};for(var _ in n)m[_]="access"===_?{}:n[_];for(var _ in n.access)m.access[_]=n.access[_];m.addInitializer=function(t){if(d)throw TypeError("Cannot add initializers after decoration has completed");a.push(o(t||null))};var y=(0,r[p])("accessor"===l?{get:f.get,set:f.set}:f[c],m);if("accessor"===l){if(void 0===y)continue;if(null===y||"object"!=typeof y)throw TypeError("Object expected");(u=o(y.get))&&(f.get=u),(u=o(y.set))&&(f.set=u),(u=o(y.init))&&s.unshift(u)}else(u=o(y))&&("field"===l?s.unshift(u):f[c]=u)}h&&Object.defineProperty(h,n.name,f),d=!0}function d(t,e,r){for(var n=arguments.length>2,s=0;s0&&s[s.length-1])&&(6===u[0]||2===u[0])){o=0;continue}if(3===u[0]&&(!s||u[1]>s[0]&&u[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function S(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,s,a=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=a.next()).done;)o.push(n.value)}catch(t){s={error:t}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(s)throw s.error}}return o}function x(){for(var t=[],e=0;e1||u(t,e)})},e&&(n[t]=e(n[t])))}function u(t,e){try{var r;(r=s[t](e)).value instanceof T?Promise.resolve(r.value.v).then(l,c):h(a[0][2],r)}catch(t){h(a[0][3],t)}}function l(t){u("next",t)}function c(t){u("throw",t)}function h(t,e){t(e),a.shift(),a.length&&u(a[0][0],a[0][1])}}function I(t){var e,r;return e={},n("next"),n("throw",function(t){throw t}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(n,s){e[n]=t[n]?function(e){return(r=!r)?{value:T(t[n](e)),done:!1}:s?s(e):e}:s}}function k(t){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var e,r=t[Symbol.asyncIterator];return r?r.call(t):(t=w(t),e={},n("next"),n("throw"),n("return"),e[Symbol.asyncIterator]=function(){return this},e);function n(r){e[r]=t[r]&&function(e){return new Promise(function(n,s){!function(t,e,r,n){Promise.resolve(n).then(function(e){t({value:e,done:r})},e)}(n,s,(e=t[r](e)).done,e.value)})}}}function C(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}var B=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e};function P(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&v(e,t,r);return B(e,t),e}function R(t){return t&&t.__esModule?t:{default:t}}function F(t,e,r,n){if("a"===r&&!n)throw TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)}function D(t,e,r,n,s){if("m"===n)throw TypeError("Private method is not writable");if("a"===n&&!s)throw TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?s.call(t,r):s?s.value=r:e.set(t,r),r}function z(t,e){if(null===e||"object"!=typeof e&&"function"!=typeof e)throw TypeError("Cannot use 'in' operator on non-object");return"function"==typeof t?e===t:t.has(e)}function L(t,e,r){if(null!=e){var n,s;if("object"!=typeof e&&"function"!=typeof e)throw TypeError("Object expected.");if(r){if(!Symbol.asyncDispose)throw TypeError("Symbol.asyncDispose is not defined.");n=e[Symbol.asyncDispose]}if(void 0===n){if(!Symbol.dispose)throw TypeError("Symbol.dispose is not defined.");n=e[Symbol.dispose],r&&(s=n)}if("function"!=typeof n)throw TypeError("Object not disposable.");s&&(n=function(){try{s.call(this)}catch(t){return Promise.reject(t)}}),t.stack.push({value:e,dispose:n,async:r})}else r&&t.stack.push({async:!0});return e}var O="function"==typeof SuppressedError?SuppressedError:function(t,e,r){var n=Error(r);return n.name="SuppressedError",n.error=t,n.suppressed=e,n};function M(t){function e(e){t.error=t.hasError?new O(e,t.error,"An error was suppressed during disposal."):e,t.hasError=!0}return function r(){for(;t.stack.length;){var n=t.stack.pop();try{var s=n.dispose&&n.dispose.call(n.value);if(n.async)return Promise.resolve(s).then(r,function(t){return e(t),r()})}catch(t){e(t)}}if(t.hasError)throw t.error}()}r.default={__extends:o,__assign:u,__rest:l,__decorate:c,__param:h,__metadata:_,__awaiter:y,__generator:g,__createBinding:v,__exportStar:b,__values:w,__read:S,__spread:x,__spreadArrays:E,__spreadArray:U,__await:T,__asyncGenerator:A,__asyncDelegator:I,__asyncValues:k,__makeTemplateObject:C,__importStar:P,__importDefault:R,__classPrivateFieldGet:F,__classPrivateFieldSet:D,__classPrivateFieldIn:z,__addDisposableResource:L,__disposeResources:M}},{"@swc/helpers/_/_type_of":"felZi","@parcel/transformer-js/src/esmodule-helpers.js":"iWrD0"}],felZi:[function(t,e,r){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function s(t){return t&&"undefined"!=typeof Symbol&&t.constructor===Symbol?"symbol":typeof t}n.defineInteropFlag(r),n.export(r,"_",function(){return s})},{"@parcel/transformer-js/src/esmodule-helpers.js":"iWrD0"}],"4iON5":[function(t,e,r){var n,s,a,o,u,l,c,h,f,d,p,m,_,y,g,v,b,w,S,x,E,U,T,A,I,k,C,B,P,R,F,D,z,L,O,M,N,j,G,Y,W,V,H,X,Z,K,q,Q,J,$,tt,te,tr,ti,tn,ts,ta,to,tu,tl,tc,th,tf,td,tp,tm,t_,ty,tg,tv,tb,tw,tS,tx,tE,tU,tT,tA,tI,tk,tC,tB,tP,tR,tF,tD,tz,tL,tO,tM,tN,tj,tG,tY,tW,tV,tH,tX,tZ,tK,tq,tQ,tJ,t$,t0,t1,t2,t3,t4,t6,t8,t5,t9,t7,et,ee,er,ei,en,es,ea,eo,eu,el,ec,eh,ef,ed,ep=t("@parcel/transformer-js/src/esmodule-helpers.js");ep.defineInteropFlag(r),ep.export(r,"AudioClip",function(){return ih}),ep.export(r,"Combinator",function(){return i9}),ep.export(r,"DEFAULT_AUDIO_CONF",function(){return r$}),ep.export(r,"EmbedSubtitlesClip",function(){return iv}),ep.export(r,"EventTool",function(){return iw}),ep.export(r,"ImgClip",function(){return il}),ep.export(r,"Log",function(){return rw}),ep.export(r,"MP4Clip",function(){return r8}),ep.export(r,"MediaStreamClip",function(){return iy}),ep.export(r,"OffscreenSprite",function(){return i3}),ep.export(r,"Rect",function(){return i0}),ep.export(r,"VisibleSprite",function(){return i4}),ep.export(r,"adjustAudioDataVolume",function(){return rN}),ep.export(r,"audioResample",function(){return rW}),ep.export(r,"autoReadStream",function(){return rZ}),ep.export(r,"concatAudioClip",function(){return id}),ep.export(r,"concatFloat32Array",function(){return rz}),ep.export(r,"concatPCMFragments",function(){return rL}),ep.export(r,"createChromakey",function(){return iJ}),ep.export(r,"createEl",function(){return eY}),ep.export(r,"createHLSLoader",function(){return iX}),ep.export(r,"decodeImg",function(){return rj}),ep.export(r,"extractPCM4AudioBuffer",function(){return rM}),ep.export(r,"extractPCM4AudioData",function(){return rO}),ep.export(r,"fastConcatMP4",function(){return iB}),ep.export(r,"file2stream",function(){return ik}),ep.export(r,"fixFMP4Duration",function(){return iF}),ep.export(r,"mixinMP4AndAudio",function(){return iz}),ep.export(r,"mixinPCM",function(){return rY}),ep.export(r,"recodemux",function(){return iA}),ep.export(r,"renderTxt2Img",function(){return eW}),ep.export(r,"renderTxt2ImgBitmap",function(){return eV}),ep.export(r,"ringSliceFloat32Array",function(){return rX}),ep.export(r,"workerTimer",function(){return rA});var em=t("@swc/helpers/_/_assert_this_initialized"),e_=t("@swc/helpers/_/_async_iterator"),ey=t("@swc/helpers/_/_async_to_generator"),eg=t("@swc/helpers/_/_class_call_check"),ev=t("@swc/helpers/_/_create_class"),eb=t("@swc/helpers/_/_define_property"),ew=t("@swc/helpers/_/_get"),eS=t("@swc/helpers/_/_get_prototype_of"),ex=t("@swc/helpers/_/_inherits"),eE=t("@swc/helpers/_/_object_spread"),eU=t("@swc/helpers/_/_object_spread_props"),eT=t("@swc/helpers/_/_possible_constructor_return"),eA=t("@swc/helpers/_/_sliced_to_array"),eI=t("@swc/helpers/_/_to_consumable_array"),ek=t("@swc/helpers/_/_type_of"),eC=t("@swc/helpers/_/_create_super"),eB=t("@swc/helpers/_/_ts_generator"),eP=t("@swc/helpers/_/_ts_values"),eR=arguments[3],eF=t("718a311db185ef08").Buffer,eD=Object.defineProperty,ez=function(t){throw TypeError(t)},eL=function(t,e,r){var n;return(n=(void 0===e?"undefined":(0,ek._)(e))!="symbol"?e+"":e)in t?eD(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r},eO=function(t,e,r){return e.has(t)||ez("Cannot "+r)},eM=function(t,e,r){return eO(t,e,"read from private field"),r?r.call(t):e.get(t)},eN=function(t,e,r){return e.has(t)?ez("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r)},ej=function(t,e,r,n){return eO(t,e,"write to private field"),n?n.call(t,r):e.set(t,r),r},eG=function(t,e,r){return eO(t,e,"access private method"),r};function eY(t){return document.createElement(t)}function eW(t,e){var r=eY("pre");r.style.cssText="margin: 0; ".concat(e,"; visibility: hidden; position: fixed;"),r.textContent=t,document.body.appendChild(r);var n=r.getBoundingClientRect(),s=n.width,a=n.height;r.remove(),r.style.visibility="visible";var o=new Image;o.width=s,o.height=a;var u='\n\n\n
').concat(r.outerHTML,"
\n
\n
\n ").replace(/\t/g,"").replace(/#/g,"%23");return o.src="data:image/svg+xml;charset=utf-8,".concat(u),o}function eV(t,e){return eH.apply(this,arguments)}function eH(){return(eH=(0,ey._)(function(t,e){var r,n,s;return(0,eB._)(this,function(a){switch(a.label){case 0:return r=eW(t,e),[4,new Promise(function(t){r.onload=t})];case 1:return a.sent(),null==(s=(n=new OffscreenCanvas(r.width,r.height)).getContext("2d"))||s.drawImage(r,0,0,r.width,r.height),[4,createImageBitmap(n)];case 2:return[2,a.sent()]}})})).apply(this,arguments)}var eX=function(t){throw TypeError(t)},eZ=function(t,e,r){return e.has(t)||eX("Cannot "+r)},eK=function(t,e,r){return eZ(t,e,"read from private field"),r?r.call(t):e.get(t)},eq=function(t,e,r){return e.has(t)?eX("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r)},eQ=function(t,e,r,n){return eZ(t,e,"write to private field"),e.set(t,r),r},eJ="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHUobil7aWYobj09PSIvIilyZXR1cm57cGFyZW50Om51bGwsbmFtZToiIn07Y29uc3QgZT1uLnNwbGl0KCIvIikuZmlsdGVyKGk9PmkubGVuZ3RoPjApO2lmKGUubGVuZ3RoPT09MCl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoIik7Y29uc3QgYT1lW2UubGVuZ3RoLTFdLHI9Ii8iK2Uuc2xpY2UoMCwtMSkuam9pbigiLyIpO3JldHVybntuYW1lOmEscGFyZW50OnJ9fWFzeW5jIGZ1bmN0aW9uIHcobixlKXtjb25zdHtwYXJlbnQ6YSxuYW1lOnJ9PXUobik7aWYoYT09bnVsbClyZXR1cm4gYXdhaXQgbmF2aWdhdG9yLnN0b3JhZ2UuZ2V0RGlyZWN0b3J5KCk7Y29uc3QgaT1hLnNwbGl0KCIvIikuZmlsdGVyKHQ9PnQubGVuZ3RoPjApO3RyeXtsZXQgdD1hd2FpdCBuYXZpZ2F0b3Iuc3RvcmFnZS5nZXREaXJlY3RvcnkoKTtmb3IoY29uc3QgcyBvZiBpKXQ9YXdhaXQgdC5nZXREaXJlY3RvcnlIYW5kbGUocyx7Y3JlYXRlOmUuY3JlYXRlfSk7aWYoZS5pc0ZpbGUpcmV0dXJuIGF3YWl0IHQuZ2V0RmlsZUhhbmRsZShyLHtjcmVhdGU6ZS5jcmVhdGV9KX1jYXRjaCh0KXtpZih0Lm5hbWU9PT0iTm90Rm91bmRFcnJvciIpcmV0dXJuIG51bGw7dGhyb3cgdH19Y29uc3QgZj17fTtzZWxmLm9ubWVzc2FnZT1hc3luYyBuPT57dmFyIGk7Y29uc3R7ZXZ0VHlwZTplLGFyZ3M6YX09bi5kYXRhO2xldCByPWZbYS5maWxlSWRdO3RyeXtsZXQgdDtjb25zdCBzPVtdO2lmKGU9PT0icmVnaXN0ZXIiKXtjb25zdCBsPWF3YWl0IHcoYS5maWxlUGF0aCx7Y3JlYXRlOiEwLGlzRmlsZTohMH0pO2lmKGw9PW51bGwpdGhyb3cgRXJyb3IoYG5vdCBmb3VuZCBmaWxlOiAke2EuZmlsZUlkfWApO3I9YXdhaXQgbC5jcmVhdGVTeW5jQWNjZXNzSGFuZGxlKHttb2RlOmEubW9kZX0pLGZbYS5maWxlSWRdPXJ9ZWxzZSBpZihlPT09ImNsb3NlIilhd2FpdCByLmNsb3NlKCksZGVsZXRlIGZbYS5maWxlSWRdO2Vsc2UgaWYoZT09PSJ0cnVuY2F0ZSIpYXdhaXQgci50cnVuY2F0ZShhLm5ld1NpemUpO2Vsc2UgaWYoZT09PSJ3cml0ZSIpe2NvbnN0e2RhdGE6bCxvcHRzOm99PW4uZGF0YS5hcmdzO3Q9YXdhaXQgci53cml0ZShsLG8pfWVsc2UgaWYoZT09PSJyZWFkIil7Y29uc3R7b2Zmc2V0Omwsc2l6ZTpvfT1uLmRhdGEuYXJncyxnPW5ldyBVaW50OEFycmF5KG8pLGQ9YXdhaXQgci5yZWFkKGcse2F0Omx9KSxjPWcuYnVmZmVyO3Q9ZD09PW8/YzooKGk9Yy50cmFuc2Zlcik9PW51bGw/dm9pZCAwOmkuY2FsbChjLGQpKT8/Yy5zbGljZSgwLGQpLHMucHVzaCh0KX1lbHNlIGU9PT0iZ2V0U2l6ZSI/dD1hd2FpdCByLmdldFNpemUoKTplPT09ImZsdXNoIiYmYXdhaXQgci5mbHVzaCgpO3NlbGYucG9zdE1lc3NhZ2Uoe2V2dFR5cGU6ImNhbGxiYWNrIixjYklkOm4uZGF0YS5jYklkLHJldHVyblZhbDp0fSxzKX1jYXRjaCh0KXtjb25zdCBzPXQ7c2VsZi5wb3N0TWVzc2FnZSh7ZXZ0VHlwZToidGhyb3dFcnJvciIsY2JJZDpuLmRhdGEuY2JJZCxlcnJNc2c6cy5uYW1lKyI6ICIrcy5tZXNzYWdlK2AKYCtKU09OLnN0cmluZ2lmeShuLmRhdGEpfSl9fX0pKCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZnMtd29ya2VyLUY0UldscWNfLmpzLm1hcAo=",e$=("undefined"==typeof self?"undefined":(0,ek._)(self))<"u"&&self.Blob&&new Blob([Uint8Array.from(atob(eJ),function(t){return t.charCodeAt(0)})],{type:"text/javascript;charset=utf-8"});function e0(t){var e;try{if(!(e=e$&&(self.URL||self.webkitURL).createObjectURL(e$)))throw"";var r=new Worker(e,{name:null==t?void 0:t.name});return r.addEventListener("error",function(){(self.URL||self.webkitURL).revokeObjectURL(e)}),r}catch(e){return new Worker("data:text/javascript;base64,"+eJ,{name:null==t?void 0:t.name})}finally{e&&(self.URL||self.webkitURL).revokeObjectURL(e)}}function e1(){return(e1=(0,ey._)(function(t,e,r){var n;return(0,eB._)(this,function(s){switch(s.label){case 0:return[4,(n=function(){if(e2.length<3){var t,e,r,n,s=(e=new e0,r=0,n={},e.onmessage=function(t){var e,r,s=t.data;"callback"===s.evtType?null==(e=n[s.cbId])||e.resolve(s.returnVal):"throwError"===s.evtType&&(null==(r=n[s.cbId])||r.reject(Error(s.errMsg))),delete n[s.cbId]},t=(0,ey._)(function(t,s){var a,o,u=arguments;return(0,eB._)(this,function(l){return a=u.length>2&&void 0!==u[2]?u[2]:[],r+=1,o=new Promise(function(t,e){n[r]={resolve:t,reject:e}}),[2,(e.postMessage({cbId:r,evtType:t,args:s},a),o)]})}),function(e,r){return t.apply(this,arguments)});return e2.push(s),s}var a=e2[e3];return e3=(e3+1)%e2.length,a}())("register",{fileId:t,filePath:e,mode:r})];case 1:var a,o,u;return[2,(s.sent(),{read:(a=(0,ey._)(function(e,r){return(0,eB._)(this,function(s){switch(s.label){case 0:return[4,n("read",{fileId:t,offset:e,size:r})];case 1:return[2,s.sent()]}})}),function(t,e){return a.apply(this,arguments)}),write:(o=(0,ey._)(function(e,r){return(0,eB._)(this,function(s){switch(s.label){case 0:return[4,n("write",{fileId:t,data:e,opts:r},[ArrayBuffer.isView(e)?e.buffer:e])];case 1:return[2,s.sent()]}})}),function(t,e){return o.apply(this,arguments)}),close:/*#__PURE__*/(0,ey._)(function(){return(0,eB._)(this,function(e){switch(e.label){case 0:return[4,n("close",{fileId:t})];case 1:return[2,e.sent()]}})}),truncate:(u=(0,ey._)(function(e){return(0,eB._)(this,function(r){switch(r.label){case 0:return[4,n("truncate",{fileId:t,newSize:e})];case 1:return[2,r.sent()]}})}),function(t){return u.apply(this,arguments)}),getSize:/*#__PURE__*/(0,ey._)(function(){return(0,eB._)(this,function(e){switch(e.label){case 0:return[4,n("getSize",{fileId:t})];case 1:return[2,e.sent()]}})}),flush:/*#__PURE__*/(0,ey._)(function(){return(0,eB._)(this,function(e){switch(e.label){case 0:return[4,n("flush",{fileId:t})];case 1:return[2,e.sent()]}})})})]}})})).apply(this,arguments)}var e2=[],e3=0;function e4(t){if("/"===t)return{parent:null,name:""};var e=t.split("/").filter(function(t){return t.length>0});if(0===e.length)throw Error("Invalid path");return{name:e[e.length-1],parent:"/"+e.slice(0,-1).join("/")}}function e6(t,e){return e8.apply(this,arguments)}function e8(){return(e8=(0,ey._)(function(t,e){var r,n,s,a,o,u,l,c,h,f,d,p,m,_;return(0,eB._)(this,function(y){switch(y.label){case 0:if(n=(r=e4(t)).parent,s=r.name,null!=n)return[3,2];return[4,navigator.storage.getDirectory()];case 1:return[2,y.sent()];case 2:a=n.split("/").filter(function(t){return t.length>0}),y.label=3;case 3:return y.trys.push([3,17,,18]),[4,navigator.storage.getDirectory()];case 4:o=y.sent(),u=!0,l=!1,c=void 0,y.label=5;case 5:y.trys.push([5,10,11,12]),h=a[Symbol.iterator](),y.label=6;case 6:if(u=(f=h.next()).done)return[3,9];return d=f.value,[4,o.getDirectoryHandle(d,{create:e.create})];case 7:o=y.sent(),y.label=8;case 8:return u=!0,[3,6];case 9:return[3,12];case 10:return p=y.sent(),l=!0,c=p,[3,12];case 11:try{u||null==h.return||h.return()}finally{if(l)throw c}return[7];case 12:if(!e.isFile)return[3,14];return[4,o.getFileHandle(s,{create:e.create})];case 13:return m=y.sent(),[3,16];case 14:return[4,o.getDirectoryHandle(s,{create:e.create})];case 15:m=y.sent(),y.label=16;case 16:return[2,m];case 17:if("NotFoundError"===(_=y.sent()).name)return[2,null];throw _;case 18:return[2]}})})).apply(this,arguments)}function e5(t){return e9.apply(this,arguments)}function e9(){return(e9=(0,ey._)(function(t){var e,r,n,s,a,o,u,l,c,h,f,d;return(0,eB._)(this,function(p){switch(p.label){case 0:if(r=(e=e4(t)).parent,n=e.name,null!=r)return[3,15];return[4,navigator.storage.getDirectory()];case 1:s=p.sent(),a=!1,o=!1,p.label=2;case 2:p.trys.push([2,8,9,14]),l=(0,e_._)(s.keys()),p.label=3;case 3:return[4,l.next()];case 4:if(!(a=!(c=p.sent()).done))return[3,7];return h=c.value,[4,s.removeEntry(h,{recursive:!0})];case 5:p.sent(),p.label=6;case 6:return a=!1,[3,3];case 7:return[3,14];case 8:return f=p.sent(),o=!0,u=f,[3,14];case 9:if(p.trys.push([9,,12,13]),!(a&&null!=l.return))return[3,11];return[4,l.return()];case 10:p.sent(),p.label=11;case 11:return[3,13];case 12:if(o)throw u;return[7];case 13:return[7];case 14:return[2];case 15:return[4,e6(r,{create:!1,isFile:!1})];case 16:if(!(null!=(d=p.sent())))return[3,18];return[4,d.removeEntry(n,{recursive:!0})];case 17:p.sent(),p.label=18;case 18:return[2]}})})).apply(this,arguments)}function e7(t,e){return"".concat(t,"/").concat(e).replace("//","/")}function rt(t){return new re(t)}var re=/*#__PURE__*/function(){function t(e){(0,eg._)(this,t),eq(this,v),eq(this,b),eq(this,w),eQ(this,v,e);var r=e4(e),n=r.parent,s=r.name;eQ(this,b,s),eQ(this,w,n)}return(0,ev._)(t,[{key:"kind",get:function(){return"dir"}},{key:"name",get:function(){return eK(this,b)}},{key:"path",get:function(){return eK(this,v)}},{key:"parent",get:function(){return null==eK(this,w)?null:rt(eK(this,w))}},{key:"create",value:function(){var t=this;return(0,ey._)(function(){return(0,eB._)(this,function(e){switch(e.label){case 0:return[4,e6(eK(t,v),{create:!0,isFile:!1})];case 1:return[2,(e.sent(),rt(eK(t,v)))]}})})()}},{key:"exists",value:function(){var t=this;return(0,ey._)(function(){return(0,eB._)(this,function(e){switch(e.label){case 0:return[4,e6(eK(t,v),{create:!1,isFile:!1})];case 1:return[2,e.sent() instanceof FileSystemDirectoryHandle]}})})()}},{key:"remove",value:function(){var t=this;return(0,ey._)(function(){var e,r,n,s,a,o,u;return(0,eB._)(this,function(l){switch(l.label){case 0:e=!0,r=!1,n=void 0,l.label=1;case 1:return l.trys.push([1,9,10,11]),[4,t.children()];case 2:s=l.sent()[Symbol.iterator](),l.label=3;case 3:if(e=(a=s.next()).done)return[3,8];o=a.value,l.label=4;case 4:return l.trys.push([4,6,,7]),[4,o.remove()];case 5:return l.sent(),[3,7];case 6:return console.warn(l.sent()),[3,7];case 7:return e=!0,[3,3];case 8:return[3,11];case 9:return u=l.sent(),r=!0,n=u,[3,11];case 10:try{e||null==s.return||s.return()}finally{if(r)throw n}return[7];case 11:return l.trys.push([11,13,,14]),[4,e5(eK(t,v))];case 12:return l.sent(),[3,14];case 13:return console.warn(l.sent()),[3,14];case 14:return[2]}})})()}},{key:"children",value:function(){var t=this;return(0,ey._)(function(){var e,r,n,s,a,o,u,l,c;return(0,eB._)(this,function(h){switch(h.label){case 0:return[4,e6(eK(t,v),{create:!1,isFile:!1})];case 1:if(null==(e=h.sent()))return[2,[]];r=[],n=!1,s=!1,h.label=2;case 2:h.trys.push([2,7,8,13]),o=(0,e_._)(e.values()),h.label=3;case 3:return[4,o.next()];case 4:if(!(n=!(u=h.sent()).done))return[3,6];l=u.value,r.push(("file"===l.kind?ri:rt)(e7(eK(t,v),l.name))),h.label=5;case 5:return n=!1,[3,3];case 6:return[3,13];case 7:return c=h.sent(),s=!0,a=c,[3,13];case 8:if(h.trys.push([8,,11,12]),!(n&&null!=o.return))return[3,10];return[4,o.return()];case 9:h.sent(),h.label=10;case 10:return[3,12];case 11:if(s)throw a;return[7];case 12:return[7];case 13:return[2,r]}})})()}},{key:"copyTo",value:function(t){var e=this;return(0,ey._)(function(){var r,n;return(0,eB._)(this,function(s){switch(s.label){case 0:return[4,e.exists()];case 1:if(!s.sent())throw Error("dir ".concat(e.path," not exists"));return[4,t.exists()];case 2:return[4,(r=s.sent()?rt(e7(t.path,e.name)):t).create()];case 3:return s.sent(),n=Promise.all,[4,e.children()];case 4:return[4,n.apply(Promise,[s.sent().map(function(t){return t.copyTo(r)})])];case 5:return[2,(s.sent(),r)]}})})()}},{key:"moveTo",value:function(t){var e=this;return(0,ey._)(function(){var r;return(0,eB._)(this,function(n){switch(n.label){case 0:return[4,e.copyTo(t)];case 1:return r=n.sent(),[4,e.remove()];case 2:return[2,(n.sent(),r)]}})})()}}]),t}();v=/* @__PURE__ */new WeakMap,b=/* @__PURE__ */new WeakMap,w=/* @__PURE__ */new WeakMap;var rr=/* @__PURE__ */new Map;function ri(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"rw";if("rw"===e){var r,n=null!==(r=rr.get(t))&&void 0!==r?r:new ru(t,e);return rr.set(t,n),n}return new ru(t,e)}function rn(t,e){return rs.apply(this,arguments)}function rs(){return(rs=(0,ey._)(function(t,e){var r,n,s,a,o,u,l,c=arguments;return(0,eB._)(this,function(h){switch(h.label){case 0:if(r=c.length>2&&void 0!==c[2]?c[2]:{overwrite:!0},!(e instanceof ru))return[3,3];return n=[t],[4,e.stream()];case 1:return[4,rn.apply(void 0,n.concat([h.sent(),r]))];case 2:return h.sent(),[2];case 3:return[4,(t instanceof ru?t:ri(t,"rw")).createWriter()];case 4:s=h.sent(),h.label=5;case 5:if(h.trys.push([5,16,17,19]),!r.overwrite)return[3,7];return[4,s.truncate(0)];case 6:h.sent(),h.label=7;case 7:if(!(e instanceof ReadableStream))return[3,13];a=e.getReader(),h.label=8;case 8:return[4,a.read()];case 9:if(u=(o=h.sent()).done,l=o.value,u)return[3,12];return[4,s.write(l)];case 10:h.sent(),h.label=11;case 11:return[3,8];case 12:return[3,15];case 13:return[4,s.write(e)];case 14:h.sent(),h.label=15;case 15:return[3,19];case 16:throw h.sent();case 17:return[4,s.close()];case 18:return h.sent(),[7];case 19:return[2]}})})).apply(this,arguments)}var ra=0,ro=/*#__PURE__*/function(){function t(e,r){var n,s=this;(0,eg._)(this,t),eq(this,S),eq(this,x),eq(this,E),eq(this,U),eq(this,T),eq(this,A,0),eq(this,I,(n=null,function(){var t;return eQ(s,A,eK(s,A)+1),null!=n?n:n=new Promise((t=(0,ey._)(function(t,e){var r;return(0,eB._)(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),[4,function(t,e,r){return e1.apply(this,arguments)}(eK(s,T),eK(s,S),eK(s,U))];case 1:return t([r=a.sent(),/*#__PURE__*/(0,ey._)(function(){return(0,eB._)(this,function(t){switch(t.label){case 0:if(eQ(s,A,eK(s,A)-1),eK(s,A)>0)return[3,2];return n=null,[4,r.close()];case 1:t.sent(),t.label=2;case 2:return[2]}})})]),[3,3];case 2:return e(a.sent()),[3,3];case 3:return[2]}})}),function(e,r){return t.apply(this,arguments)}))})),eq(this,k,!1),eQ(this,T,++ra),eQ(this,S,e),eQ(this,U,{r:"read-only",rw:"readwrite","rw-unsafe":"readwrite-unsafe"}[r]);var a=e4(e),o=a.parent,u=a.name;eQ(this,E,u),eQ(this,x,o)}return(0,ev._)(t,[{key:"kind",get:function(){return"file"}},{key:"path",get:function(){return eK(this,S)}},{key:"name",get:function(){return eK(this,E)}},{key:"parent",get:function(){return null==eK(this,x)?null:rt(eK(this,x))}},{key:"createWriter",value:function(){var t=this;return(0,ey._)(function(){var e,r,n,s,a,o;return(0,eB._)(this,function(u){switch(u.label){case 0:if("read-only"===eK(t,U))throw Error("file is read-only");if(eK(t,k))throw Error("Other writer have not been closed");return eQ(t,k,!0),e=new TextEncoder,[4,eK(t,I).call(t)];case 1:return n=(r=(0,eA._).apply(void 0,[u.sent(),2]))[0],s=r[1],[4,n.getSize()];case 2:var l,c;return a=u.sent(),o=!1,[2,{write:(l=(0,ey._)(function(t){var r,s,u,l,c=arguments;return(0,eB._)(this,function(h){switch(h.label){case 0:if(r=c.length>1&&void 0!==c[1]?c[1]:{},o)throw Error("Writer is closed");return u="string"==typeof t?e.encode(t):t,a=(l=null!==(s=r.at)&&void 0!==s?s:a)+u.byteLength,[4,n.write(u,{at:l})];case 1:return[2,h.sent()]}})}),function(t){return l.apply(this,arguments)}),truncate:(c=(0,ey._)(function(t){return(0,eB._)(this,function(e){switch(e.label){case 0:if(o)throw Error("Writer is closed");return[4,n.truncate(t)];case 1:return e.sent(),a>t&&(a=t),[2]}})}),function(t){return c.apply(this,arguments)}),flush:/*#__PURE__*/(0,ey._)(function(){return(0,eB._)(this,function(t){switch(t.label){case 0:if(o)throw Error("Writer is closed");return[4,n.flush()];case 1:return t.sent(),[2]}})}),close:/*#__PURE__*/(0,ey._)(function(){return(0,eB._)(this,function(e){switch(e.label){case 0:if(o)throw Error("Writer is closed");return o=!0,eQ(t,k,!1),[4,s()];case 1:return e.sent(),[2]}})})}]}})})()}},{key:"createReader",value:function(){var t=this;return(0,ey._)(function(){var e,r,n,s,a;return(0,eB._)(this,function(o){switch(o.label){case 0:return[4,eK(t,I).call(t)];case 1:var u;return r=(e=(0,eA._).apply(void 0,[o.sent(),2]))[0],n=e[1],s=!1,a=0,[2,{read:(u=(0,ey._)(function(t){var e,n,o,u,l=arguments;return(0,eB._)(this,function(c){switch(c.label){case 0:if(e=l.length>1&&void 0!==l[1]?l[1]:{},s)throw Error("Reader is closed");return o=null!==(n=e.at)&&void 0!==n?n:a,[4,r.read(o,t)];case 1:return u=c.sent(),[2,(a=o+u.byteLength,u)]}})}),function(t){return u.apply(this,arguments)}),getSize:/*#__PURE__*/(0,ey._)(function(){return(0,eB._)(this,function(t){switch(t.label){case 0:if(s)throw Error("Reader is closed");return[4,r.getSize()];case 1:return[2,t.sent()]}})}),close:/*#__PURE__*/(0,ey._)(function(){return(0,eB._)(this,function(t){switch(t.label){case 0:if(s)return[3,2];return s=!0,[4,n()];case 1:t.sent(),t.label=2;case 2:return[2]}})})}]}})})()}},{key:"text",value:function(){var t=this;return(0,ey._)(function(){var e,r;return(0,eB._)(this,function(n){switch(n.label){case 0:return r=(e=new TextDecoder).decode,[4,t.arrayBuffer()];case 1:return[2,r.apply(e,[n.sent()])]}})})()}},{key:"arrayBuffer",value:function(){var t=this;return(0,ey._)(function(){var e,r;return(0,eB._)(this,function(n){switch(n.label){case 0:return[4,e6(eK(t,S),{create:!1,isFile:!0})];case 1:if(null!=(e=n.sent()))return[3,2];return r=new ArrayBuffer(0),[3,4];case 2:return[4,e.getFile()];case 3:r=n.sent().arrayBuffer(),n.label=4;case 4:return[2,r]}})})()}},{key:"stream",value:function(){var t=this;return(0,ey._)(function(){var e;return(0,eB._)(this,function(r){switch(r.label){case 0:return[4,t.getOriginFile()];case 1:return[2,null==(e=r.sent())?new ReadableStream({pull:function(t){t.close()}}):e.stream()]}})})()}},{key:"getOriginFile",value:function(){var t=this;return(0,ey._)(function(){var e;return(0,eB._)(this,function(r){switch(r.label){case 0:return[4,e6(eK(t,S),{create:!1,isFile:!0})];case 1:return[2,null==(e=r.sent())?void 0:e.getFile()]}})})()}},{key:"getSize",value:function(){var t=this;return(0,ey._)(function(){var e,r;return(0,eB._)(this,function(n){switch(n.label){case 0:return[4,e6(eK(t,S),{create:!1,isFile:!0})];case 1:if(null!=(e=n.sent()))return[3,2];return r=0,[3,4];case 2:return[4,e.getFile()];case 3:r=n.sent().size,n.label=4;case 4:return[2,r]}})})()}},{key:"exists",value:function(){var t=this;return(0,ey._)(function(){return(0,eB._)(this,function(e){switch(e.label){case 0:return[4,e6(eK(t,S),{create:!1,isFile:!0})];case 1:return[2,e.sent() instanceof FileSystemFileHandle]}})})()}},{key:"remove",value:function(){var t=this;return(0,ey._)(function(){return(0,eB._)(this,function(e){switch(e.label){case 0:if(eK(t,A))throw Error("exists unclosed reader/writer");return[4,e5(eK(t,S))];case 1:return e.sent(),[2]}})})()}},{key:"copyTo",value:function(e){var r=this;return(0,ey._)(function(){var n;return(0,eB._)(this,function(s){switch(s.label){case 0:return[4,r.exists()];case 1:if(!s.sent())throw Error("file ".concat(r.path," not exists"));if(!(e instanceof t))return[3,5];if(ri(e.path)!==r)return[3,2];return n=r,[3,4];case 2:return[4,rn(e.path,r)];case 3:s.sent(),n=ri(e.path),s.label=4;case 4:return[2,n];case 5:if(!(e instanceof re))return[3,7];return[4,r.copyTo(ri(e7(e.path,r.name)))];case 6:return[2,s.sent()];case 7:throw Error("Illegal target type")}})})()}},{key:"moveTo",value:function(t){var e=this;return(0,ey._)(function(){var r;return(0,eB._)(this,function(n){switch(n.label){case 0:return[4,e.copyTo(t)];case 1:return r=n.sent(),[4,e.remove()];case 2:return[2,(n.sent(),r)]}})})()}}]),t}();S=/* @__PURE__ */new WeakMap,x=/* @__PURE__ */new WeakMap,E=/* @__PURE__ */new WeakMap,U=/* @__PURE__ */new WeakMap,T=/* @__PURE__ */new WeakMap,A=/* @__PURE__ */new WeakMap,I=/* @__PURE__ */new WeakMap,k=/* @__PURE__ */new WeakMap;var ru=ro,rl="/.opfs-tools-temp-dir";function rc(t){return rh.apply(this,arguments)}function rh(){return(rh=(0,ey._)(function(t){var e;return(0,eB._)(this,function(r){switch(r.label){case 0:if(r.trys.push([0,9,,10]),"file"!==t.kind)return[3,6];return[4,t.exists()];case 1:if(!r.sent())return[2,!0];return[4,t.createWriter()];case 2:return[4,(e=r.sent()).truncate(0)];case 3:return r.sent(),[4,e.close()];case 4:return r.sent(),[4,t.remove()];case 5:return r.sent(),[3,8];case 6:return[4,t.remove()];case 7:r.sent(),r.label=8;case 8:return[2,!0];case 9:return[2,(console.warn(r.sent()),!1)];case 10:return[2]}})})).apply(this,arguments)}var rf=[],rd=!1;function rp(){return(rp=(0,ey._)(function(){var t,e,r,n,s,a,o,u,l,c,h;return(0,eB._)(this,function(f){switch(f.label){case 0:if(null==globalThis.localStorage)return[2];t="OPFS_TOOLS_EXPIRES_TMP_FILES",rd||(rd=!0,globalThis.addEventListener("unload",function(){var e;0!==rf.length&&localStorage.setItem(t,"".concat(null!==(e=localStorage.getItem(t))&&void 0!==e?e:"",",").concat(rf.join(",")))})),r=null!==(e=localStorage.getItem(t))&&void 0!==e?e:"",n=!0,s=!1,a=void 0,f.label=1;case 1:f.trys.push([1,7,8,9]),o=r.split(",")[Symbol.iterator](),f.label=2;case 2:if(n=(u=o.next()).done)return[3,6];if(!(c=0!==(l=u.value).length))return[3,4];return[4,rc(ri("".concat(rl,"/").concat(l)))];case 3:c=f.sent(),f.label=4;case 4:c&&(r=r.replace(l,"")),f.label=5;case 5:return n=!0,[3,2];case 6:return[3,9];case 7:return h=f.sent(),s=!0,a=h,[3,9];case 8:try{n||null==o.return||o.return()}finally{if(s)throw a}return[7];case 9:return localStorage.setItem(t,r.replace(/,{2,}/g,",")),[2]}})})).apply(this,arguments)}function rm(){var t="".concat(Math.random().toString().slice(2),"-").concat(Date.now());return rf.push(t),ri("".concat(rl,"/").concat(t))}(0,ey._)(function(){var t,e;return(0,eB._)(this,function(e){switch(e.label){case 0:if(!(!0!==globalThis.__opfs_tools_tmpfile_init__))return[3,3];if(globalThis.__opfs_tools_tmpfile_init__=!0,null==globalThis.FileSystemDirectoryHandle||null==globalThis.FileSystemFileHandle||(null==(t=globalThis.navigator)?void 0:t.storage.getDirectory)==null)return[3,2];return setInterval(/*#__PURE__*/(0,ey._)(function(){var t,e,r,n,s,a,o,u;return(0,eB._)(this,function(l){switch(l.label){case 0:t=!0,e=!1,r=void 0,l.label=1;case 1:return l.trys.push([1,8,9,10]),[4,rt(rl).children()];case 2:n=l.sent()[Symbol.iterator](),l.label=3;case 3:if(t=(s=n.next()).done)return[3,7];if(a=s.value,!(null==(o=/^\d+-(\d+)$/.exec(a.name))||Date.now()-Number(o[1])>2592e5))return[3,5];return[4,rc(a)];case 4:l.sent(),l.label=5;case 5:l.label=6;case 6:return t=!0,[3,3];case 7:return[3,10];case 8:return u=l.sent(),e=!0,r=u,[3,10];case 9:try{t||null==n.return||n.return()}finally{if(e)throw r}return[7];case 10:return[2]}})}),6e4),[4,function(){return rp.apply(this,arguments)}()];case 1:e.sent(),e.label=2;case 2:e.label=3;case 3:return[2]}})})();var r_=1,ry=rm(),rg=null,rv=["debug","info","warn","error"].reduce(function(t,e,r){return Object.assign(t,(0,eb._)({},e,function(){for(var t,n,s=arguments.length,a=Array(s),o=0;o3&&void 0!==arguments[3]?arguments[3]:{},s=(r-e)/e+1,a=new Float64Array(t.length*s);n.method=n.method||"cubic";var o=new rI(t.length,a.length,{method:n.method,tension:n.tension||0,sincFilterSize:n.sincFilterSize||6,sincWindow:n.sincWindow||void 0});if(void 0===n.LPF&&(n.LPF=rP[n.method]),n.LPF){n.LPFType=n.LPFType||"IIR";var u=rF[n.LPFType];r>e?function(t,e,r,n){for(var s=0,a=e.length;s=0;o--)e[o]=n.filter(e[o])}(t,a,o,new u(n.LPFOrder||rR[n.LPFType],r,e/2)):function(t,e,r,n){for(var s=0,a=t.length;s=0;o--)t[o]=n.filter(t[o]);rD(t,e,r)}(t,a,o,new u(n.LPFOrder||rR[n.LPFType],e,r/2))}else rD(t,a,o);return a}(t,e,r.rate,{method:"sinc",LPF:!1}))})];return l=(u=new globalThis.OfflineAudioContext(r.chanCount,o*r.rate/e,r.rate)).createBufferSource(),c=u.createBuffer(s,o,e),t.forEach(function(t,e){return c.copyToChannel(t,e)}),l.buffer=c,l.connect(u.destination),l.start(),[4,u.startRendering()];case 1:return[2,rM.apply(void 0,[h.sent()])]}})})).apply(this,arguments)}function rH(t){return new Promise(function(e){var r=rA(function(){r(),e()},t)})}function rX(t,e,r){for(var n=r-e,s=new Float32Array(n),a=0;a=a&&console.debug("["+o.getDurationString(/* @__PURE__ */new Date-s,1e3)+"]","["+t+"]",e)},log:function(t,e){this.debug(t.msg)},info:function(t,e){2>=a&&console.info("["+o.getDurationString(/* @__PURE__ */new Date-s,1e3)+"]","["+t+"]",e)},warn:function(t,e){3>=a&&console.warn("["+o.getDurationString(/* @__PURE__ */new Date-s,1e3)+"]","["+t+"]",e)},error:function(t,e){4>=a&&console.error("["+o.getDurationString(/* @__PURE__ */new Date-s,1e3)+"]","["+t+"]",e)}}).getDurationString=function(t,e){function r(t,e){for(var r=(""+t).split(".");r[0].length0))return"(empty)";for(var r="",n=0;n0&&(r+=","),r+="["+o.getDurationString(t.start(n))+","+o.getDurationString(t.end(n))+"]";return r},rQ.Log=o,(u=function(t){if(t instanceof ArrayBuffer)this.buffer=t,this.dataview=new DataView(t);else throw"Needs an array buffer";this.position=0}).prototype.getPosition=function(){return this.position},u.prototype.getEndPosition=function(){return this.buffer.byteLength},u.prototype.getLength=function(){return this.buffer.byteLength},u.prototype.seek=function(t){var e=Math.max(0,Math.min(this.buffer.byteLength,t));return this.position=isNaN(e)||!isFinite(e)?0:e,!0},u.prototype.isEos=function(){return this.getPosition()>=this.getEndPosition()},u.prototype.readAnyInt=function(t,e){var r=0;if(this.position+t<=this.buffer.byteLength){switch(t){case 1:r=e?this.dataview.getInt8(this.position):this.dataview.getUint8(this.position);break;case 2:r=e?this.dataview.getInt16(this.position):this.dataview.getUint16(this.position);break;case 3:if(e)throw"No method for reading signed 24 bits values";r=this.dataview.getUint8(this.position)<<16|this.dataview.getUint8(this.position+1)<<8|this.dataview.getUint8(this.position+2);break;case 4:r=e?this.dataview.getInt32(this.position):this.dataview.getUint32(this.position);break;case 8:if(e)throw"No method for reading signed 64 bits values";r=this.dataview.getUint32(this.position)<<32|this.dataview.getUint32(this.position+4);break;default:throw"readInt method not implemented for size: "+t}return this.position+=t,r}throw"Not enough bytes in buffer"},u.prototype.readUint8=function(){return this.readAnyInt(1,!1)},u.prototype.readUint16=function(){return this.readAnyInt(2,!1)},u.prototype.readUint24=function(){return this.readAnyInt(3,!1)},u.prototype.readUint32=function(){return this.readAnyInt(4,!1)},u.prototype.readUint64=function(){return this.readAnyInt(8,!1)},u.prototype.readString=function(t){if(this.position+t<=this.buffer.byteLength){for(var e="",r=0;rthis._byteLength&&(this._byteLength=e);return}for(r<1&&(r=1);e>r;)r*=2;var n=new ArrayBuffer(r),s=new Uint8Array(this._buffer);new Uint8Array(n,0,s.length).set(s),this.buffer=n,this._byteLength=e}},l.prototype._trimAlloc=function(){if(this._byteLength!=this._buffer.byteLength){var t=new ArrayBuffer(this._byteLength),e=new Uint8Array(t),r=new Uint8Array(this._buffer,0,e.length);e.set(r),this.buffer=t}},l.BIG_ENDIAN=!1,l.LITTLE_ENDIAN=!0,l.prototype._byteLength=0,Object.defineProperty(l.prototype,"byteLength",{get:function(){return this._byteLength-this._byteOffset}}),Object.defineProperty(l.prototype,"buffer",{get:function(){return this._trimAlloc(),this._buffer},set:function(t){this._buffer=t,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}}),Object.defineProperty(l.prototype,"byteOffset",{get:function(){return this._byteOffset},set:function(t){this._byteOffset=t,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}}),Object.defineProperty(l.prototype,"dataView",{get:function(){return this._dataView},set:function(t){this._byteOffset=t.byteOffset,this._buffer=t.buffer,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._byteOffset+t.byteLength}}),l.prototype.seek=function(t){var e=Math.max(0,Math.min(this.byteLength,t));this.position=isNaN(e)||!isFinite(e)?0:e},l.prototype.isEof=function(){return this.position>=this._byteLength},l.prototype.mapUint8Array=function(t){this._realloc(1*t);var e=new Uint8Array(this._buffer,this.byteOffset+this.position,t);return this.position+=1*t,e},l.prototype.readInt32Array=function(t,e){var r=new Int32Array(t=null!=t?t:this.byteLength-this.position/4);return l.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),l.arrayToNative(r,null!=e?e:this.endianness),this.position+=r.byteLength,r},l.prototype.readInt16Array=function(t,e){var r=new Int16Array(t=null!=t?t:this.byteLength-this.position/2);return l.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),l.arrayToNative(r,null!=e?e:this.endianness),this.position+=r.byteLength,r},l.prototype.readInt8Array=function(t){var e=new Int8Array(t=null!=t?t:this.byteLength-this.position);return l.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,t*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e},l.prototype.readUint32Array=function(t,e){var r=new Uint32Array(t=null!=t?t:this.byteLength-this.position/4);return l.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),l.arrayToNative(r,null!=e?e:this.endianness),this.position+=r.byteLength,r},l.prototype.readUint16Array=function(t,e){var r=new Uint16Array(t=null!=t?t:this.byteLength-this.position/2);return l.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),l.arrayToNative(r,null!=e?e:this.endianness),this.position+=r.byteLength,r},l.prototype.readUint8Array=function(t){var e=new Uint8Array(t=null!=t?t:this.byteLength-this.position);return l.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,t*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e},l.prototype.readFloat64Array=function(t,e){var r=new Float64Array(t=null!=t?t:this.byteLength-this.position/8);return l.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),l.arrayToNative(r,null!=e?e:this.endianness),this.position+=r.byteLength,r},l.prototype.readFloat32Array=function(t,e){var r=new Float32Array(t=null!=t?t:this.byteLength-this.position/4);return l.memcpy(r.buffer,0,this.buffer,this.byteOffset+this.position,t*r.BYTES_PER_ELEMENT),l.arrayToNative(r,null!=e?e:this.endianness),this.position+=r.byteLength,r},l.prototype.readInt32=function(t){var e=this._dataView.getInt32(this.position,null!=t?t:this.endianness);return this.position+=4,e},l.prototype.readInt16=function(t){var e=this._dataView.getInt16(this.position,null!=t?t:this.endianness);return this.position+=2,e},l.prototype.readInt8=function(){var t=this._dataView.getInt8(this.position);return this.position+=1,t},l.prototype.readUint32=function(t){var e=this._dataView.getUint32(this.position,null!=t?t:this.endianness);return this.position+=4,e},l.prototype.readUint16=function(t){var e=this._dataView.getUint16(this.position,null!=t?t:this.endianness);return this.position+=2,e},l.prototype.readUint8=function(){var t=this._dataView.getUint8(this.position);return this.position+=1,t},l.prototype.readFloat32=function(t){var e=this._dataView.getFloat32(this.position,null!=t?t:this.endianness);return this.position+=4,e},l.prototype.readFloat64=function(t){var e=this._dataView.getFloat64(this.position,null!=t?t:this.endianness);return this.position+=8,e},l.endianness=new Int8Array(new Int16Array([1]).buffer)[0]>0,l.memcpy=function(t,e,r,n,s){var a=new Uint8Array(t,e,s),o=new Uint8Array(r,n,s);a.set(o)},l.arrayToNative=function(t,e){return e==this.endianness?t:this.flipArrayEndianness(t)},l.nativeToEndian=function(t,e){return this.endianness==e?t:this.flipArrayEndianness(t)},l.flipArrayEndianness=function(t){for(var e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),r=0;rs;n--,s++){var a=e[s];e[s]=e[n],e[n]=a}return t},l.prototype.failurePosition=0,String.fromCharCodeUint8=function(t){for(var e=[],r=0;r>16),this.writeUint8((65280&t)>>8),this.writeUint8(255&t)},l.prototype.adjustUint32=function(t,e){var r=this.position;this.seek(t),this.writeUint32(e),this.seek(r)},l.prototype.mapInt32Array=function(t,e){this._realloc(4*t);var r=new Int32Array(this._buffer,this.byteOffset+this.position,t);return l.arrayToNative(r,null!=e?e:this.endianness),this.position+=4*t,r},l.prototype.mapInt16Array=function(t,e){this._realloc(2*t);var r=new Int16Array(this._buffer,this.byteOffset+this.position,t);return l.arrayToNative(r,null!=e?e:this.endianness),this.position+=2*t,r},l.prototype.mapInt8Array=function(t){this._realloc(1*t);var e=new Int8Array(this._buffer,this.byteOffset+this.position,t);return this.position+=1*t,e},l.prototype.mapUint32Array=function(t,e){this._realloc(4*t);var r=new Uint32Array(this._buffer,this.byteOffset+this.position,t);return l.arrayToNative(r,null!=e?e:this.endianness),this.position+=4*t,r},l.prototype.mapUint16Array=function(t,e){this._realloc(2*t);var r=new Uint16Array(this._buffer,this.byteOffset+this.position,t);return l.arrayToNative(r,null!=e?e:this.endianness),this.position+=2*t,r},l.prototype.mapFloat64Array=function(t,e){this._realloc(8*t);var r=new Float64Array(this._buffer,this.byteOffset+this.position,t);return l.arrayToNative(r,null!=e?e:this.endianness),this.position+=8*t,r},l.prototype.mapFloat32Array=function(t,e){this._realloc(4*t);var r=new Float32Array(this._buffer,this.byteOffset+this.position,t);return l.arrayToNative(r,null!=e?e:this.endianness),this.position+=4*t,r},(c=function(t){this.buffers=[],this.bufferIndex=-1,t&&(this.insertBuffer(t),this.bufferIndex=0)}).prototype=new l(new ArrayBuffer,0,l.BIG_ENDIAN),c.prototype.initialized=function(){var t;return this.bufferIndex>-1||(this.buffers.length>0?0===(t=this.buffers[0]).fileStart?(this.buffer=t,this.bufferIndex=0,o.debug("MultiBufferStream","Stream ready for parsing"),!0):(o.warn("MultiBufferStream","The first buffer should have a fileStart of 0"),this.logBufferLevel(),!1):(o.warn("MultiBufferStream","No buffer to start parsing from"),this.logBufferLevel(),!1))},ArrayBuffer.concat=function(t,e){o.debug("ArrayBuffer","Trying to create a new buffer of size: "+(t.byteLength+e.byteLength));var r=new Uint8Array(t.byteLength+e.byteLength);return r.set(new Uint8Array(t),0),r.set(new Uint8Array(e),t.byteLength),r.buffer},c.prototype.reduceBuffer=function(t,e,r){var n;return(n=new Uint8Array(r)).set(new Uint8Array(t,e,r)),n.buffer.fileStart=t.fileStart+e,n.buffer.usedBytes=0,n.buffer},c.prototype.insertBuffer=function(t){for(var e=!0,r=0;rn.byteLength){this.buffers.splice(r,1),r--;continue}o.warn("MultiBufferStream","Buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+") already appended, ignoring")}else t.fileStart+t.byteLength<=n.fileStart||(t=this.reduceBuffer(t,0,n.fileStart-t.fileStart)),o.debug("MultiBufferStream","Appending new buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+")"),this.buffers.splice(r,0,t),0===r&&(this.buffer=t);e=!1;break}if(t.fileStart0)t=this.reduceBuffer(t,s,a);else{e=!1;break}}}e&&(o.debug("MultiBufferStream","Appending new buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+")"),this.buffers.push(t),0===r&&(this.buffer=t))},c.prototype.logBufferLevel=function(t){var e,r,n,s,a,u=[],l="";for(n=0,s=0,e=0;e0&&(l+=a.end-1+"]"),(t?o.info:o.debug)("MultiBufferStream",0===this.buffers.length?"No more buffer in memory":""+this.buffers.length+" stored buffer(s) ("+n+"/"+s+" bytes), continuous ranges: "+l)},c.prototype.cleanBuffers=function(){var t,e;for(t=0;t"+this.buffer.byteLength+")"),!0},c.prototype.findPosition=function(t,e,r){var n,s=null,a=-1;for(n=!0===t?0:this.bufferIndex;n=e?(o.debug("MultiBufferStream","Found position in existing buffer #"+a),a):-1},c.prototype.findEndContiguousBuf=function(t){var e,r,n,s=void 0!==t?t:this.bufferIndex;if(r=this.buffers[s],this.buffers.length>s+1)for(e=s+1;e>3;return 31===n&&r.data.length>=2&&(n=32+((7&r.data[0])<<3)+((224&r.data[1])>>5)),n},r.DecoderConfigDescriptor=function(t){r.Descriptor.call(this,4,t)},r.DecoderConfigDescriptor.prototype=new r.Descriptor,r.DecoderConfigDescriptor.prototype.parse=function(t){this.oti=t.readUint8(),this.streamType=t.readUint8(),this.bufferSize=t.readUint24(),this.maxBitrate=t.readUint32(),this.avgBitrate=t.readUint32(),this.size-=13,this.parseRemainingDescriptors(t)},r.DecoderSpecificInfo=function(t){r.Descriptor.call(this,5,t)},r.DecoderSpecificInfo.prototype=new r.Descriptor,r.SLConfigDescriptor=function(t){r.Descriptor.call(this,6,t)},r.SLConfigDescriptor.prototype=new r.Descriptor,this},rQ.MPEG4DescriptorParser=h,(f={ERR_INVALID_DATA:-1,ERR_NOT_ENOUGH_DATA:0,OK:1,BASIC_BOXES:["mdat","idat","free","skip","meco","strk"],FULL_BOXES:["hmhd","nmhd","iods","xml ","bxml","ipro","mere"],CONTAINER_BOXES:[["moov",["trak","pssh"]],["trak"],["edts"],["mdia"],["minf"],["dinf"],["stbl",["sgpd","sbgp"]],["mvex",["trex"]],["moof",["traf"]],["traf",["trun","sgpd","sbgp"]],["vttc"],["tref"],["iref"],["mfra",["tfra"]],["meco"],["hnti"],["hinf"],["strk"],["strd"],["sinf"],["rinf"],["schi"],["trgr"],["udta",["kind"]],["iprp",["ipma"]],["ipco"],["grpl"],["j2kH"],["etyp",["tyco"]]],boxCodes:[],fullBoxCodes:[],containerBoxCodes:[],sampleEntryCodes:{},sampleGroupEntryCodes:[],trackGroupTypes:[],UUIDBoxes:{},UUIDs:[],initialize:function(){f.FullBox.prototype=new f.Box,f.ContainerBox.prototype=new f.Box,f.SampleEntry.prototype=new f.Box,f.TrackGroupTypeBox.prototype=new f.FullBox,f.BASIC_BOXES.forEach(function(t){f.createBoxCtor(t)}),f.FULL_BOXES.forEach(function(t){f.createFullBoxCtor(t)}),f.CONTAINER_BOXES.forEach(function(t){f.createContainerBoxCtor(t[0],null,t[1])})},Box:function(t,e,r){this.type=t,this.size=e,this.uuid=r},FullBox:function(t,e,r){f.Box.call(this,t,e,r),this.flags=0,this.version=0},ContainerBox:function(t,e,r){f.Box.call(this,t,e,r),this.boxes=[]},SampleEntry:function(t,e,r,n){f.ContainerBox.call(this,t,e),this.hdr_size=r,this.start=n},SampleGroupEntry:function(t){this.grouping_type=t},TrackGroupTypeBox:function(t,e){f.FullBox.call(this,t,e)},createBoxCtor:function(t,e){f.boxCodes.push(t),f[t+"Box"]=function(e){f.Box.call(this,t,e)},f[t+"Box"].prototype=new f.Box,e&&(f[t+"Box"].prototype.parse=e)},createFullBoxCtor:function(t,e){f[t+"Box"]=function(e){f.FullBox.call(this,t,e)},f[t+"Box"].prototype=new f.FullBox,f[t+"Box"].prototype.parse=function(t){this.parseFullHeader(t),e&&e.call(this,t)}},addSubBoxArrays:function(t){if(t){this.subBoxNames=t;for(var e=t.length,r=0;rr?(o.error("BoxParser","Box of type '"+h+"' has a size "+c+" greater than its container size "+r),{code:f.ERR_NOT_ENOUGH_DATA,type:h,size:c,hdr_size:l,start:u}):0!==c&&u+c>t.getEndPosition()?(t.seek(u),o.info("BoxParser","Not enough data in stream to parse the entire '"+h+"' box"),{code:f.ERR_NOT_ENOUGH_DATA,type:h,size:c,hdr_size:l,start:u}):e?{code:f.OK,type:h,size:c,hdr_size:l,start:u}:(f[h+"Box"]?n=new f[h+"Box"](c):"uuid"!==h?(o.warn("BoxParser","Unknown box type: '"+h+"'"),(n=new f.Box(h,c)).has_unparsed_data=!0):f.UUIDBoxes[a]?n=new f.UUIDBoxes[a](c):(o.warn("BoxParser","Unknown uuid type: '"+a+"'"),(n=new f.Box(h,c)).uuid=a,n.has_unparsed_data=!0),n.hdr_size=l,n.start=u,n.write===f.Box.prototype.write&&"mdat"!==n.type&&(o.info("BoxParser","'"+d+"' box writing not yet implemented, keeping unparsed data in memory for later write"),n.parseDataAndRewind(t)),n.parse(t),(s=t.getPosition()-(n.start+n.size))<0?(o.warn("BoxParser","Parsing of box '"+d+"' did not read the entire indicated box data size (missing "+-s+" bytes), seeking forward"),t.seek(n.start+n.size)):s>0&&(o.error("BoxParser","Parsing of box '"+d+"' read "+s+" more bytes than the indicated box data size, seeking backwards"),0!==n.size&&t.seek(n.start+n.size)),{code:f.OK,box:n,size:n.size})},f.Box.prototype.parse=function(t){"mdat"!=this.type?this.data=t.readUint8Array(this.size-this.hdr_size):0===this.size?t.seek(t.getEndPosition()):t.seek(this.start+this.size)},f.Box.prototype.parseDataAndRewind=function(t){this.data=t.readUint8Array(this.size-this.hdr_size),t.position-=this.size-this.hdr_size},f.FullBox.prototype.parseDataAndRewind=function(t){this.parseFullHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size),this.hdr_size-=4,t.position-=this.size-this.hdr_size},f.FullBox.prototype.parseFullHeader=function(t){this.version=t.readUint8(),this.flags=t.readUint24(),this.hdr_size+=4},f.FullBox.prototype.parse=function(t){this.parseFullHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size)},f.ContainerBox.prototype.parse=function(t){for(var e,r;t.getPosition()>10&31,e[1]=this.language>>5&31,e[2]=31&this.language,this.languageString=String.fromCharCode(e[0]+96,e[1]+96,e[2]+96)},f.SAMPLE_ENTRY_TYPE_VISUAL="Visual",f.SAMPLE_ENTRY_TYPE_AUDIO="Audio",f.SAMPLE_ENTRY_TYPE_HINT="Hint",f.SAMPLE_ENTRY_TYPE_METADATA="Metadata",f.SAMPLE_ENTRY_TYPE_SUBTITLE="Subtitle",f.SAMPLE_ENTRY_TYPE_SYSTEM="System",f.SAMPLE_ENTRY_TYPE_TEXT="Text",f.SampleEntry.prototype.parseHeader=function(t){t.readUint8Array(6),this.data_reference_index=t.readUint16(),this.hdr_size+=8},f.SampleEntry.prototype.parse=function(t){this.parseHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size)},f.SampleEntry.prototype.parseDataAndRewind=function(t){this.parseHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size),this.hdr_size-=8,t.position-=this.size-this.hdr_size},f.SampleEntry.prototype.parseFooter=function(t){f.ContainerBox.prototype.parse.call(this,t)},f.createMediaSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_HINT),f.createMediaSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_METADATA),f.createMediaSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_SUBTITLE),f.createMediaSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_SYSTEM),f.createMediaSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_TEXT),f.createMediaSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,function(t){var e;this.parseHeader(t),t.readUint16(),t.readUint16(),t.readUint32Array(3),this.width=t.readUint16(),this.height=t.readUint16(),this.horizresolution=t.readUint32(),this.vertresolution=t.readUint32(),t.readUint32(),this.frame_count=t.readUint16(),e=Math.min(31,t.readUint8()),this.compressorname=t.readString(e),e<31&&t.readString(31-e),this.depth=t.readUint16(),t.readUint16(),this.parseFooter(t)}),f.createMediaSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,function(t){this.parseHeader(t),t.readUint32Array(2),this.channel_count=t.readUint16(),this.samplesize=t.readUint16(),t.readUint16(),t.readUint16(),this.samplerate=t.readUint32()/65536,this.parseFooter(t)}),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"avc1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"avc2"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"avc3"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"avc4"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"av01"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"dav1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"hvc1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"hev1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"hvt1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"lhe1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"dvh1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"dvhe"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"vvc1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"vvi1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"vvs1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"vvcN"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"vp08"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"vp09"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"avs3"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"j2ki"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"mjp2"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"mjpg"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"uncv"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,"mp4a"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,"ac-3"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,"ac-4"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,"ec-3"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,"Opus"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,"mha1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,"mha2"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,"mhm1"),f.createSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,"mhm2"),f.createEncryptedSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_VISUAL,"encv"),f.createEncryptedSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_AUDIO,"enca"),f.createEncryptedSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_SUBTITLE,"encu"),f.createEncryptedSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_SYSTEM,"encs"),f.createEncryptedSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_TEXT,"enct"),f.createEncryptedSampleEntryCtor(f.SAMPLE_ENTRY_TYPE_METADATA,"encm"),f.createBoxCtor("a1lx",function(t){var e=((1&(1&t.readUint8()))+1)*16;this.layer_size=[];for(var r=0;r<3;r++)16==e?this.layer_size[r]=t.readUint16():this.layer_size[r]=t.readUint32()}),f.createBoxCtor("a1op",function(t){this.op_index=t.readUint8()}),f.createFullBoxCtor("auxC",function(t){this.aux_type=t.readCString();var e=this.size-this.hdr_size-(this.aux_type.length+1);this.aux_subtype=t.readUint8Array(e)}),f.createBoxCtor("av1C",function(t){var e=t.readUint8();if(this.version=127&e,1!==this.version){o.error("av1C version "+this.version+" not supported");return}if(e=t.readUint8(),this.seq_profile=e>>5&7,this.seq_level_idx_0=31&e,e=t.readUint8(),this.seq_tier_0=e>>7&1,this.high_bitdepth=e>>6&1,this.twelve_bit=e>>5&1,this.monochrome=e>>4&1,this.chroma_subsampling_x=e>>3&1,this.chroma_subsampling_y=e>>2&1,this.chroma_sample_position=3&e,e=t.readUint8(),this.reserved_1=e>>5&7,0!==this.reserved_1){o.error("av1C reserved_1 parsing problem");return}if(this.initial_presentation_delay_present=e>>4&1,1===this.initial_presentation_delay_present)this.initial_presentation_delay_minus_one=15&e;else if(this.reserved_2=15&e,0!==this.reserved_2){o.error("av1C reserved_2 parsing problem");return}var r=this.size-this.hdr_size-4;this.configOBUs=t.readUint8Array(r)}),f.createBoxCtor("avcC",function(t){var e,r;for(this.configurationVersion=t.readUint8(),this.AVCProfileIndication=t.readUint8(),this.profile_compatibility=t.readUint8(),this.AVCLevelIndication=t.readUint8(),this.lengthSizeMinusOne=3&t.readUint8(),this.nb_SPS_nalus=31&t.readUint8(),r=this.size-this.hdr_size-6,this.SPS=[],e=0;e0&&(this.ext=t.readUint8Array(r))}),f.createBoxCtor("btrt",function(t){this.bufferSizeDB=t.readUint32(),this.maxBitrate=t.readUint32(),this.avgBitrate=t.readUint32()}),f.createFullBoxCtor("ccst",function(t){var e=t.readUint8();this.all_ref_pics_intra=(128&e)==128,this.intra_pred_used=(64&e)==64,this.max_ref_per_pic=(63&e)>>2,t.readUint24()}),f.createBoxCtor("cdef",function(t){var e;for(this.channel_count=t.readUint16(),this.channel_indexes=[],this.channel_types=[],this.channel_associations=[],e=0;e=32768&&this.component_type_urls.push(t.readCString())}}),f.createFullBoxCtor("co64",function(t){var e,r;if(e=t.readUint32(),this.chunk_offsets=[],0===this.version)for(r=0;r>7}else"rICC"===this.colour_type?this.ICC_profile=t.readUint8Array(this.size-4):"prof"===this.colour_type&&(this.ICC_profile=t.readUint8Array(this.size-4))}),f.createFullBoxCtor("cprt",function(t){this.parseLanguage(t),this.notice=t.readCString()}),f.createFullBoxCtor("cslg",function(t){0===this.version&&(this.compositionToDTSShift=t.readInt32(),this.leastDecodeToDisplayDelta=t.readInt32(),this.greatestDecodeToDisplayDelta=t.readInt32(),this.compositionStartTime=t.readInt32(),this.compositionEndTime=t.readInt32())}),f.createFullBoxCtor("ctts",function(t){var e,r;if(e=t.readUint32(),this.sample_counts=[],this.sample_offsets=[],0===this.version)for(r=0;r>6,this.bsid=e>>1&31,this.bsmod=(1&e)<<2|r>>6&3,this.acmod=r>>3&7,this.lfeon=r>>2&1,this.bit_rate_code=3&r|n>>5&7}),f.createBoxCtor("dec3",function(t){var e=t.readUint16();this.data_rate=e>>3,this.num_ind_sub=7&e,this.ind_subs=[];for(var r=0;r>6,n.bsid=s>>1&31,n.bsmod=(1&s)<<4|a>>4&15,n.acmod=a>>1&7,n.lfeon=1&a,n.num_dep_sub=o>>1&15,n.num_dep_sub>0&&(n.chan_loc=(1&o)<<8|t.readUint8())}}),f.createFullBoxCtor("dfLa",function(t){var e=[],r=["STREAMINFO","PADDING","APPLICATION","SEEKTABLE","VORBIS_COMMENT","CUESHEET","PICTURE","RESERVED"];for(this.parseFullHeader(t);;){var n=t.readUint8(),s=Math.min(127&n,r.length-1);if(s?t.readUint8Array(t.readUint24()):(t.readUint8Array(13),this.samplerate=t.readUint32()>>12,t.readUint8Array(20)),e.push(r[s]),128&n)break}this.numMetadataBlocks=e.length+" ("+e.join(", ")+")"}),f.createBoxCtor("dimm",function(t){this.bytessent=t.readUint64()}),f.createBoxCtor("dmax",function(t){this.time=t.readUint32()}),f.createBoxCtor("dmed",function(t){this.bytessent=t.readUint64()}),f.createBoxCtor("dOps",function(t){if(this.Version=t.readUint8(),this.OutputChannelCount=t.readUint8(),this.PreSkip=t.readUint16(),this.InputSampleRate=t.readUint32(),this.OutputGain=t.readInt16(),this.ChannelMappingFamily=t.readUint8(),0!==this.ChannelMappingFamily){this.StreamCount=t.readUint8(),this.CoupledCount=t.readUint8(),this.ChannelMapping=[];for(var e=0;e=4;)this.compatible_brands[r]=t.readString(4),e-=4,r++}),f.createFullBoxCtor("hdlr",function(t){0===this.version&&(t.readUint32(),this.handler=t.readString(4),t.readUint32Array(3),this.name=t.readString(this.size-this.hdr_size-20),"\0"===this.name[this.name.length-1]&&(this.name=this.name.slice(0,-1)))}),f.createBoxCtor("hvcC",function(t){this.configurationVersion=t.readUint8(),s=t.readUint8(),this.general_profile_space=s>>6,this.general_tier_flag=(32&s)>>5,this.general_profile_idc=31&s,this.general_profile_compatibility=t.readUint32(),this.general_constraint_indicator=t.readUint8Array(6),this.general_level_idc=t.readUint8(),this.min_spatial_segmentation_idc=4095&t.readUint16(),this.parallelismType=3&t.readUint8(),this.chroma_format_idc=3&t.readUint8(),this.bit_depth_luma_minus8=7&t.readUint8(),this.bit_depth_chroma_minus8=7&t.readUint8(),this.avgFrameRate=t.readUint16(),s=t.readUint8(),this.constantFrameRate=s>>6,this.numTemporalLayers=(13&s)>>3,this.temporalIdNested=(4&s)>>2,this.lengthSizeMinusOne=3&s,this.nalu_arrays=[];var e,r,n,s,a=t.readUint8();for(e=0;e>7,o.nalu_type=63&s;var u=t.readUint16();for(r=0;r>4&15,this.length_size=15&e,e=t.readUint8(),this.base_offset_size=e>>4&15,1===this.version||2===this.version?this.index_size=15&e:this.index_size=0,this.items=[];var e,r=0;if(this.version<2)r=t.readUint16();else if(2===this.version)r=t.readUint32();else throw"version of iloc box not supported";for(var n=0;n>7,this.axis=1&e}),f.createFullBoxCtor("infe",function(t){if((0===this.version||1===this.version)&&(this.item_ID=t.readUint16(),this.item_protection_index=t.readUint16(),this.item_name=t.readCString(),this.content_type=t.readCString(),this.content_encoding=t.readCString()),1===this.version){this.extension_type=t.readString(4),o.warn("BoxParser","Cannot parse extension type"),t.seek(this.start+this.size);return}this.version>=2&&(2===this.version?this.item_ID=t.readUint16():3===this.version&&(this.item_ID=t.readUint32()),this.item_protection_index=t.readUint16(),this.item_type=t.readString(4),this.item_name=t.readCString(),"mime"===this.item_type?(this.content_type=t.readCString(),this.content_encoding=t.readCString()):"uri "===this.item_type&&(this.item_uri_type=t.readCString()))}),f.createFullBoxCtor("ipma",function(t){var e,r;for(entry_count=t.readUint32(),this.associations=[],e=0;e>7==1,1&this.flags?o.property_index=(127&a)<<8|t.readUint8():o.property_index=127&a}}}),f.createFullBoxCtor("iref",function(t){var e,r;for(this.references=[];t.getPosition()>7,n.assignment_type=127&s,n.assignment_type){case 0:n.grouping_type=t.readString(4);break;case 1:n.grouping_type=t.readString(4),n.grouping_type_parameter=t.readUint32();break;case 2:case 3:break;case 4:n.sub_track_id=t.readUint32();break;default:o.warn("BoxParser","Unknown leva assignement type")}}}),f.createBoxCtor("lsel",function(t){this.layer_id=t.readUint16()}),f.createBoxCtor("maxr",function(t){this.period=t.readUint32(),this.bytes=t.readUint32()}),f.createBoxCtor("mdcv",function(t){this.display_primaries=[],this.display_primaries[0]={},this.display_primaries[0].x=t.readUint16(),this.display_primaries[0].y=t.readUint16(),this.display_primaries[1]={},this.display_primaries[1].x=t.readUint16(),this.display_primaries[1].y=t.readUint16(),this.display_primaries[2]={},this.display_primaries[2].x=t.readUint16(),this.display_primaries[2].y=t.readUint16(),this.white_point={},this.white_point.x=t.readUint16(),this.white_point.y=t.readUint16(),this.max_display_mastering_luminance=t.readUint32(),this.min_display_mastering_luminance=t.readUint32()}),f.createFullBoxCtor("mdhd",function(t){1==this.version?(this.creation_time=t.readUint64(),this.modification_time=t.readUint64(),this.timescale=t.readUint32(),this.duration=t.readUint64()):(this.creation_time=t.readUint32(),this.modification_time=t.readUint32(),this.timescale=t.readUint32(),this.duration=t.readUint32()),this.parseLanguage(t),t.readUint16()}),f.createFullBoxCtor("mehd",function(t){1&this.flags&&(o.warn("BoxParser","mehd box incorrectly uses flags set to 1, converting version to 1"),this.version=1),1==this.version?this.fragment_duration=t.readUint64():this.fragment_duration=t.readUint32()}),f.createFullBoxCtor("meta",function(t){this.boxes=[],f.ContainerBox.prototype.parse.call(this,t)}),f.createFullBoxCtor("mfhd",function(t){this.sequence_number=t.readUint32()}),f.createFullBoxCtor("mfro",function(t){this._size=t.readUint32()}),f.createFullBoxCtor("mvhd",function(t){1==this.version?(this.creation_time=t.readUint64(),this.modification_time=t.readUint64(),this.timescale=t.readUint32(),this.duration=t.readUint64()):(this.creation_time=t.readUint32(),this.modification_time=t.readUint32(),this.timescale=t.readUint32(),this.duration=t.readUint32()),this.rate=t.readUint32(),this.volume=t.readUint16()>>8,t.readUint16(),t.readUint32Array(2),this.matrix=t.readUint32Array(9),t.readUint32Array(6),this.next_track_id=t.readUint32()}),f.createBoxCtor("npck",function(t){this.packetssent=t.readUint32()}),f.createBoxCtor("nump",function(t){this.packetssent=t.readUint64()}),f.createFullBoxCtor("padb",function(t){var e=t.readUint32();this.padbits=[];for(var r=0;r0){var e=t.readUint32();this.kid=[];for(var r=0;r0&&(this.data=t.readUint8Array(n))}),f.createFullBoxCtor("clef",function(t){this.width=t.readUint32(),this.height=t.readUint32()}),f.createFullBoxCtor("enof",function(t){this.width=t.readUint32(),this.height=t.readUint32()}),f.createFullBoxCtor("prof",function(t){this.width=t.readUint32(),this.height=t.readUint32()}),f.createContainerBoxCtor("tapt",null,["clef","prof","enof"]),f.createBoxCtor("rtp ",function(t){this.descriptionformat=t.readString(4),this.sdptext=t.readString(this.size-this.hdr_size-4)}),f.createFullBoxCtor("saio",function(t){1&this.flags&&(this.aux_info_type=t.readUint32(),this.aux_info_type_parameter=t.readUint32());var e=t.readUint32();this.offset=[];for(var r=0;r>7,this.avgRateFlag=e>>6&1,this.durationFlag&&(this.duration=t.readUint32()),this.avgRateFlag&&(this.accurateStatisticsFlag=t.readUint8(),this.avgBitRate=t.readUint16(),this.avgFrameRate=t.readUint16()),this.dependency=[];for(var r=t.readUint8(),n=0;n>7,this.num_leading_samples=127&e}),f.createSampleGroupCtor("rash",function(t){if(this.operation_point_count=t.readUint16(),this.description_length!==2+(1===this.operation_point_count?2:6*this.operation_point_count)+9)o.warn("BoxParser","Mismatch in "+this.grouping_type+" sample group length"),this.data=t.readUint8Array(this.description_length-2);else{if(1===this.operation_point_count)this.target_rate_share=t.readUint16();else{this.target_rate_share=[],this.available_bitrate=[];for(var e=0;e>4,this.skip_byte_block=15&e,this.isProtected=t.readUint8(),this.Per_Sample_IV_Size=t.readUint8(),this.KID=f.parseHex16(t),this.constant_IV_size=0,this.constant_IV=0,1===this.isProtected&&0===this.Per_Sample_IV_Size&&(this.constant_IV_size=t.readUint8(),this.constant_IV=t.readUint8Array(this.constant_IV_size))}),f.createSampleGroupCtor("stsa",function(t){o.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),f.createSampleGroupCtor("sync",function(t){var e=t.readUint8();this.NAL_unit_type=63&e}),f.createSampleGroupCtor("tele",function(t){var e=t.readUint8();this.level_independently_decodable=e>>7}),f.createSampleGroupCtor("tsas",function(t){o.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),f.createSampleGroupCtor("tscl",function(t){o.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),f.createSampleGroupCtor("vipr",function(t){o.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),f.createFullBoxCtor("sbgp",function(t){this.grouping_type=t.readString(4),1===this.version?this.grouping_type_parameter=t.readUint32():this.grouping_type_parameter=0,this.entries=[];for(var e=t.readUint32(),r=0;r>6,this.sample_depends_on[n]=e>>4&3,this.sample_is_depended_on[n]=e>>2&3,this.sample_has_redundancy[n]=3&e}),f.createFullBoxCtor("senc"),f.createFullBoxCtor("sgpd",function(t){this.grouping_type=t.readString(4),o.debug("BoxParser","Found Sample Groups of type "+this.grouping_type),1===this.version?this.default_length=t.readUint32():this.default_length=0,this.version>=2&&(this.default_group_description_index=t.readUint32()),this.entries=[];for(var e,r=t.readUint32(),n=0;n>31&1,n.referenced_size=2147483647&s,n.subsegment_duration=t.readUint32(),s=t.readUint32(),n.starts_with_SAP=s>>31&1,n.SAP_type=s>>28&7,n.SAP_delta_time=268435455&s}}),f.SingleItemTypeReferenceBox=function(t,e,r,n){f.Box.call(this,t,e),this.hdr_size=r,this.start=n},f.SingleItemTypeReferenceBox.prototype=new f.Box,f.SingleItemTypeReferenceBox.prototype.parse=function(t){this.from_item_ID=t.readUint16();var e=t.readUint16();this.references=[];for(var r=0;r>4&15,this.sample_sizes[e+1]=15&n}else if(8===this.field_size)for(e=0;e0)for(r=0;r>4&15,this.default_skip_byte_block=15&e}this.default_isProtected=t.readUint8(),this.default_Per_Sample_IV_Size=t.readUint8(),this.default_KID=f.parseHex16(t),1===this.default_isProtected&&0===this.default_Per_Sample_IV_Size&&(this.default_constant_IV_size=t.readUint8(),this.default_constant_IV=t.readUint8Array(this.default_constant_IV_size))}),f.createFullBoxCtor("tfdt",function(t){1==this.version?this.baseMediaDecodeTime=t.readUint64():this.baseMediaDecodeTime=t.readUint32()}),f.createFullBoxCtor("tfhd",function(t){var e=0;this.track_id=t.readUint32(),this.size-this.hdr_size>e&&this.flags&f.TFHD_FLAG_BASE_DATA_OFFSET?(this.base_data_offset=t.readUint64(),e+=8):this.base_data_offset=0,this.size-this.hdr_size>e&&this.flags&f.TFHD_FLAG_SAMPLE_DESC?(this.default_sample_description_index=t.readUint32(),e+=4):this.default_sample_description_index=0,this.size-this.hdr_size>e&&this.flags&f.TFHD_FLAG_SAMPLE_DUR?(this.default_sample_duration=t.readUint32(),e+=4):this.default_sample_duration=0,this.size-this.hdr_size>e&&this.flags&f.TFHD_FLAG_SAMPLE_SIZE?(this.default_sample_size=t.readUint32(),e+=4):this.default_sample_size=0,this.size-this.hdr_size>e&&this.flags&f.TFHD_FLAG_SAMPLE_FLAGS?(this.default_sample_flags=t.readUint32(),e+=4):this.default_sample_flags=0}),f.createFullBoxCtor("tfra",function(t){this.track_ID=t.readUint32(),t.readUint24();var e=t.readUint8();this.length_size_of_traf_num=e>>4&3,this.length_size_of_trun_num=e>>2&3,this.length_size_of_sample_num=3&e,this.entries=[];for(var r=t.readUint32(),n=0;n>8,t.readUint16(),this.matrix=t.readInt32Array(9),this.width=t.readUint32(),this.height=t.readUint32()}),f.createBoxCtor("tmax",function(t){this.time=t.readUint32()}),f.createBoxCtor("tmin",function(t){this.time=t.readUint32()}),f.createBoxCtor("totl",function(t){this.bytessent=t.readUint32()}),f.createBoxCtor("tpay",function(t){this.bytessent=t.readUint32()}),f.createBoxCtor("tpyl",function(t){this.bytessent=t.readUint64()}),f.TrackGroupTypeBox.prototype.parse=function(t){this.parseFullHeader(t),this.track_group_id=t.readUint32()},f.createTrackGroupCtor("msrc"),f.TrackReferenceTypeBox=function(t,e,r,n){f.Box.call(this,t,e),this.hdr_size=r,this.start=n},f.TrackReferenceTypeBox.prototype=new f.Box,f.TrackReferenceTypeBox.prototype.parse=function(t){this.track_ids=t.readUint32Array((this.size-this.hdr_size)/4)},f.trefBox.prototype.parse=function(t){for(var e,r;t.getPosition()e&&this.flags&f.TRUN_FLAGS_DATA_OFFSET?(this.data_offset=t.readInt32(),e+=4):this.data_offset=0,this.size-this.hdr_size>e&&this.flags&f.TRUN_FLAGS_FIRST_FLAG?(this.first_sample_flags=t.readUint32(),e+=4):this.first_sample_flags=0,this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[],this.size-this.hdr_size>e)for(var r=0;r>7&1,this.block_pad_lsb=r>>6&1,this.block_little_endian=r>>5&1,this.block_reversed=r>>4&1,this.pad_unknown=r>>3&1,this.pixel_size=t.readUint8(),this.row_align_size=t.readUint32(),this.tile_align_size=t.readUint32(),this.num_tile_cols_minus_one=t.readUint32(),this.num_tile_rows_minus_one=t.readUint32()}),f.createFullBoxCtor("url ",function(t){1!==this.flags&&(this.location=t.readCString())}),f.createFullBoxCtor("urn ",function(t){this.name=t.readCString(),this.size-this.hdr_size-this.name.length-1>0&&(this.location=t.readCString())}),f.createUUIDBox("a5d40b30e81411ddba2f0800200c9a66",!0,!1,function(t){this.LiveServerManifest=t.readString(this.size-this.hdr_size).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}),f.createUUIDBox("d08a4f1810f34a82b6c832d8aba183d3",!0,!1,function(t){this.system_id=f.parseHex16(t);var e=t.readUint32();e>0&&(this.data=t.readUint8Array(e))}),f.createUUIDBox("a2394f525a9b4f14a2446c427c648df4",!0,!1),f.createUUIDBox("8974dbce7be74c5184f97148f9882554",!0,!1,function(t){this.default_AlgorithmID=t.readUint24(),this.default_IV_size=t.readUint8(),this.default_KID=f.parseHex16(t)}),f.createUUIDBox("d4807ef2ca3946958e5426cb9e46a79f",!0,!1,function(t){this.fragment_count=t.readUint8(),this.entries=[];for(var e=0;e>4,this.chromaSubsampling=e>>1&7,this.videoFullRangeFlag=1&e,this.colourPrimaries=t.readUint8(),this.transferCharacteristics=t.readUint8(),this.matrixCoefficients=t.readUint8()):(this.profile=t.readUint8(),this.level=t.readUint8(),e=t.readUint8(),this.bitDepth=e>>4&15,this.colorSpace=15&e,e=t.readUint8(),this.chromaSubsampling=e>>4&15,this.transferFunction=e>>1&7,this.videoFullRangeFlag=1&e),this.codecIntializationDataSize=t.readUint16(),this.codecIntializationData=t.readUint8Array(this.codecIntializationDataSize)}),f.createBoxCtor("vttC",function(t){this.text=t.readString(this.size-this.hdr_size)}),f.createFullBoxCtor("vvcC",function(t){var e,r,n={held_bits:void 0,num_held_bits:0,stream_read_1_bytes:function(t){this.held_bits=t.readUint8(),this.num_held_bits=8},stream_read_2_bytes:function(t){this.held_bits=t.readUint16(),this.num_held_bits=16},extract_bits:function(t){var e=this.held_bits>>this.num_held_bits-t&(1<1){for(n.stream_read_1_bytes(t),this.ptl_sublayer_present_mask=0,r=this.num_sublayers-2;r>=0;--r){var o=n.extract_bits(1);this.ptl_sublayer_present_mask|=o<1;++r)n.extract_bits(1);for(this.sublayer_level_idc=[],r=this.num_sublayers-2;r>=0;--r)this.ptl_sublayer_present_mask&1<"u"||null===e?e=2:e;r.length>=1;e+=f.decimalToHex(n,0)+".",0===this.hvcC.general_tier_flag?e+="L":e+="H",e+=this.hvcC.general_level_idc;var s=!1,a="";for(t=5;t>=0;t--)(this.hvcC.general_constraint_indicator[t]||s)&&(a="."+f.decimalToHex(this.hvcC.general_constraint_indicator[t],0)+a,s=!0);e+=a}return e},f.vvc1SampleEntry.prototype.getCodec=f.vvi1SampleEntry.prototype.getCodec=function(){var t,e=f.SampleEntry.prototype.getCodec.call(this);if(this.vvcC){e+="."+this.vvcC.general_profile_idc,this.vvcC.general_tier_flag?e+=".H":e+=".L",e+=this.vvcC.general_level_idc;var r="";if(this.vvcC.general_constraint_info){var n,s,a=[];for(s=0|this.vvcC.ptl_frame_only_constraint<<7|this.vvcC.ptl_multilayer_enabled<<6,t=0;t>2&63,a.push(s),s&&(n=t),s=this.vvcC.general_constraint_info[t]>>2&3;if(void 0===n)r=".CA";else{r=".C";var o="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",u=0,l=0;for(t=0;t<=n;++t)for(u=u<<8|a[t],l+=8;l>=5;)r+=o[u>>l-5&31],l-=5,u&=(1<4294967296&&(this.size+=8),"uuid"===this.type&&(this.size+=16),o.debug("BoxWriter","Writing box "+this.type+" of size: "+this.size+" at position "+t.getPosition()+(e||"")),this.size>4294967296?t.writeUint32(1):(this.sizePosition=t.getPosition(),t.writeUint32(this.size)),t.writeString(this.type,null,4),"uuid"===this.type&&t.writeUint8Array(this.uuid),this.size>4294967296&&t.writeUint64(this.size)},f.FullBox.prototype.writeHeader=function(t){this.size+=4,f.Box.prototype.writeHeader.call(this,t," v="+this.version+" f="+this.flags),t.writeUint8(this.version),t.writeUint24(this.flags)},f.Box.prototype.write=function(t){"mdat"===this.type?this.data&&(this.size=this.data.length,this.writeHeader(t),t.writeUint8Array(this.data)):(this.size=this.data?this.data.length:0,this.writeHeader(t),this.data&&t.writeUint8Array(this.data))},f.ContainerBox.prototype.write=function(t){this.size=0,this.writeHeader(t);for(var e=0;e=2&&t.writeUint32(this.default_sample_description_index),t.writeUint32(this.entries.length),e=0;e0)for(e=0;e+14294967295?1:0,this.flags=0,this.size=4,1===this.version&&(this.size+=4),this.writeHeader(t),1===this.version?t.writeUint64(this.baseMediaDecodeTime):t.writeUint32(this.baseMediaDecodeTime)},f.tfhdBox.prototype.write=function(t){this.version=0,this.size=4,this.flags&f.TFHD_FLAG_BASE_DATA_OFFSET&&(this.size+=8),this.flags&f.TFHD_FLAG_SAMPLE_DESC&&(this.size+=4),this.flags&f.TFHD_FLAG_SAMPLE_DUR&&(this.size+=4),this.flags&f.TFHD_FLAG_SAMPLE_SIZE&&(this.size+=4),this.flags&f.TFHD_FLAG_SAMPLE_FLAGS&&(this.size+=4),this.writeHeader(t),t.writeUint32(this.track_id),this.flags&f.TFHD_FLAG_BASE_DATA_OFFSET&&t.writeUint64(this.base_data_offset),this.flags&f.TFHD_FLAG_SAMPLE_DESC&&t.writeUint32(this.default_sample_description_index),this.flags&f.TFHD_FLAG_SAMPLE_DUR&&t.writeUint32(this.default_sample_duration),this.flags&f.TFHD_FLAG_SAMPLE_SIZE&&t.writeUint32(this.default_sample_size),this.flags&f.TFHD_FLAG_SAMPLE_FLAGS&&t.writeUint32(this.default_sample_flags)},f.tkhdBox.prototype.write=function(t){this.version=0,this.size=80,this.writeHeader(t),t.writeUint32(this.creation_time),t.writeUint32(this.modification_time),t.writeUint32(this.track_id),t.writeUint32(0),t.writeUint32(this.duration),t.writeUint32(0),t.writeUint32(0),t.writeInt16(this.layer),t.writeInt16(this.alternate_group),t.writeInt16(this.volume<<8),t.writeUint16(0),t.writeInt32Array(this.matrix),t.writeUint32(this.width),t.writeUint32(this.height)},f.trexBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=20,this.writeHeader(t),t.writeUint32(this.track_id),t.writeUint32(this.default_sample_description_index),t.writeUint32(this.default_sample_duration),t.writeUint32(this.default_sample_size),t.writeUint32(this.default_sample_flags)},f.trunBox.prototype.write=function(t){this.version=0,this.size=4,this.flags&f.TRUN_FLAGS_DATA_OFFSET&&(this.size+=4),this.flags&f.TRUN_FLAGS_FIRST_FLAG&&(this.size+=4),this.flags&f.TRUN_FLAGS_DURATION&&(this.size+=4*this.sample_duration.length),this.flags&f.TRUN_FLAGS_SIZE&&(this.size+=4*this.sample_size.length),this.flags&f.TRUN_FLAGS_FLAGS&&(this.size+=4*this.sample_flags.length),this.flags&f.TRUN_FLAGS_CTS_OFFSET&&(this.size+=4*this.sample_composition_time_offset.length),this.writeHeader(t),t.writeUint32(this.sample_count),this.flags&f.TRUN_FLAGS_DATA_OFFSET&&(this.data_offset_position=t.getPosition(),t.writeInt32(this.data_offset)),this.flags&f.TRUN_FLAGS_FIRST_FLAG&&t.writeUint32(this.first_sample_flags);for(var e=0;e-1)){if(t[r]instanceof f.Box||e[r]instanceof f.Box||(0,ek._)(t[r])>"u"||(0,ek._)(e[r])>"u"||"function"==typeof t[r]||"function"==typeof e[r]||t.subBoxNames&&t.subBoxNames.indexOf(r.slice(0,4))>-1||e.subBoxNames&&e.subBoxNames.indexOf(r.slice(0,4))>-1||"data"===r||"start"===r||"size"===r||"creation_time"===r||"modification_time"===r||f.DIFF_PRIMITIVE_ARRAY_PROP_NAMES.indexOf(r)>-1)continue;if(t[r]!==e[r])return!1}return!0},f.boxEqual=function(t,e){if(!f.boxEqualFields(t,e))return!1;for(var r=0;r1)for(e=1;e-1&&this.fragmentedTracks.splice(e,1)},m.prototype.setExtractionOptions=function(t,e,r){var n=this.getTrackById(t);if(n){var s={};this.extractedTracks.push(s),s.id=t,s.user=e,s.trak=n,n.nextSample=0,s.nb_samples=1e3,s.samples=[],r&&r.nbSamples&&(s.nb_samples=r.nbSamples)}},m.prototype.unsetExtractionOptions=function(t){for(var e=-1,r=0;r-1&&this.extractedTracks.splice(e,1)},m.prototype.parse=function(){var t,e,r;if(!(this.restoreParsePosition&&!this.restoreParsePosition()))for(;;)if(this.hasIncompleteMdat&&this.hasIncompleteMdat()){if(this.processIncompleteMdat())continue;return}else if(this.saveParsePosition&&this.saveParsePosition(),(e=f.parseOneBox(this.stream,!1)).code===f.ERR_NOT_ENOUGH_DATA){if(!this.processIncompleteBox)return;if(this.processIncompleteBox(e))continue;return}else{switch(t="uuid"!==(r=e.box).type?r.type:r.uuid,this.boxes.push(r),t){case"mdat":this.mdats.push(r);break;case"moof":this.moofs.push(r);break;case"moov":this.moovStartFound=!0,0===this.mdats.length&&(this.isProgressive=!0);default:void 0!==this[t]&&o.warn("ISOFile","Duplicate Box of type: "+t+", overriding previous occurrence"),this[t]=r}this.updateUsedBytes&&this.updateUsedBytes(r,e)}},m.prototype.checkBuffer=function(t){if(null==t)throw"Buffer must be defined and non empty";if(void 0===t.fileStart)throw"Buffer must have a fileStart property";return 0===t.byteLength?(o.warn("ISOFile","Ignoring empty buffer (fileStart: "+t.fileStart+")"),this.stream.logBufferLevel(),!1):(o.info("ISOFile","Processing buffer (fileStart: "+t.fileStart+")"),t.usedBytes=0,this.stream.insertBuffer(t),this.stream.logBufferLevel(),!!this.stream.initialized()||(o.warn("ISOFile","Not ready to start parsing"),!1))},m.prototype.appendBuffer=function(t,e){var r;if(this.checkBuffer(t))return this.parse(),this.moovStartFound&&!this.moovStartSent&&(this.moovStartSent=!0,this.onMoovStart&&this.onMoovStart()),this.moov?(this.sampleListBuilt||(this.buildSampleLists(),this.sampleListBuilt=!0),this.updateSampleLists(),this.onReady&&!this.readySent&&(this.readySent=!0,this.onReady(this.getInfo())),this.processSamples(e),this.nextSeekPosition?(r=this.nextSeekPosition,this.nextSeekPosition=void 0):r=this.nextParsePosition,this.stream.getEndFilePositionAfter&&(r=this.stream.getEndFilePositionAfter(r))):r=this.nextParsePosition?this.nextParsePosition:0,this.sidx&&this.onSidx&&!this.sidxSent&&(this.onSidx(this.sidx),this.sidxSent=!0),this.meta&&(this.flattenItemInfo&&!this.itemListBuilt&&(this.flattenItemInfo(),this.itemListBuilt=!0),this.processItems&&this.processItems(this.onItem)),this.stream.cleanBuffers&&(o.info("ISOFile","Done processing buffer (fileStart: "+t.fileStart+") - next buffer to fetch should have a fileStart position of "+r),this.stream.logBufferLevel(),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0),o.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize())),r},m.prototype.getInfo=function(){var t,e,r,n,s,a,o={},u=/* @__PURE__ */new Date("1904-01-01T00:00:00Z").getTime();if(this.moov)for(o.hasMoov=!0,o.duration=this.moov.mvhd.duration,o.timescale=this.moov.mvhd.timescale,o.isFragmented=null!=this.moov.mvex,o.isFragmented&&this.moov.mvex.mehd&&(o.fragment_duration=this.moov.mvex.mehd.fragment_duration),o.isProgressive=this.isProgressive,o.hasIOD=null!=this.moov.iods,o.brands=[],o.brands.push(this.ftyp.major_brand),o.brands=o.brands.concat(this.ftyp.compatible_brands),o.created=new Date(u+1e3*this.moov.mvhd.creation_time),o.modified=new Date(u+1e3*this.moov.mvhd.modification_time),o.tracks=[],o.audioTracks=[],o.videoTracks=[],o.subtitleTracks=[],o.metadataTracks=[],o.hintTracks=[],o.otherTracks=[],t=0;t0?o.mime+='video/mp4; codecs="':o.audioTracks&&o.audioTracks.length>0?o.mime+='audio/mp4; codecs="':o.mime+='application/mp4; codecs="',t=0;t=r.samples.length)&&(o.info("ISOFile","Sending fragmented data on track #"+n.id+" for samples ["+Math.max(0,r.nextSample-n.nb_samples)+","+(r.nextSample-1)+"]"),o.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize()),this.onSegment&&this.onSegment(n.id,n.user,n.segmentStream.buffer,r.nextSample,t||r.nextSample>=r.samples.length),n.segmentStream=null,n!==this.fragmentedTracks[e]))break}}if(null!==this.onSamples)for(e=0;e=r.samples.length)&&(o.debug("ISOFile","Sending samples on track #"+a.id+" for sample "+r.nextSample),this.onSamples&&this.onSamples(a.id,a.user,a.samples),a.samples=[],a!==this.extractedTracks[e]))break}}}},m.prototype.getBox=function(t){var e=this.getBoxes(t,!0);return e.length?e[0]:null},m.prototype.getBoxes=function(t,e){var r=[];return m._sweep.call(this,t,r,e),r},m._sweep=function(t,e,r){for(var n in this.type&&this.type==t&&e.push(this),this.boxes){if(e.length&&r)return;m._sweep.call(this.boxes[n],t,e,r)}},m.prototype.getTrackSamplesInfo=function(t){var e=this.getTrackById(t);if(e)return e.samples},m.prototype.getTrackSample=function(t,e){var r=this.getTrackById(t);return this.getSample(r,e)},m.prototype.releaseUsedSamples=function(t,e){var r=0,n=this.getTrackById(t);n.lastValidSample||(n.lastValidSample=0);for(var s=n.lastValidSample;st*s.timescale){c=n-1;break}e&&s.is_sync&&(l=n)}for(e&&(c=l),t=r.samples[c].cts,r.nextSample=c;r.samples[c].alreadyRead===r.samples[c].size&&r.samples[c+1];)c++;return u=r.samples[c].offset+r.samples[c].alreadyRead,o.info("ISOFile","Seeking to "+(e?"RAP":"")+" sample #"+r.nextSample+" on track "+r.tkhd.track_id+", time "+o.getDurationString(t,a)+" and offset: "+u),{offset:u,time:t/a}},m.prototype.getTrackDuration=function(t){var e;return t.samples?((e=t.samples[t.samples.length-1]).cts+e.duration)/e.timescale:1/0},m.prototype.seek=function(t,e){var r,n,s,a=this.moov,u={offset:1/0,time:1/0};if(this.moov){for(s=0;sthis.getTrackDuration(r))&&((n=this.seekTrack(t,e,r)).offset-1){o=l;break}switch(o){case"Visual":if(s.add("vmhd").set("graphicsmode",0).set("opcolor",[0,0,0]),a.set("width",e.width).set("height",e.height).set("horizresolution",4718592).set("vertresolution",4718592).set("frame_count",1).set("compressorname",e.type+" Compressor").set("depth",24),e.avcDecoderConfigRecord){var d=new f.avcCBox;d.parse(new u(e.avcDecoderConfigRecord)),a.addBox(d)}else if(e.hevcDecoderConfigRecord){var p=new f.hvcCBox;p.parse(new u(e.hevcDecoderConfigRecord)),a.addBox(p)}break;case"Audio":s.add("smhd").set("balance",e.balance||0),a.set("channel_count",e.channel_count||2).set("samplesize",e.samplesize||16).set("samplerate",e.samplerate||65536);break;case"Hint":s.add("hmhd");break;case"Subtitle":s.add("sthd"),"stpp"===e.type&&a.set("namespace",e.namespace||"nonamespace").set("schema_location",e.schema_location||"").set("auxiliary_mime_types",e.auxiliary_mime_types||"");break;default:s.add("nmhd")}e.description&&a.addBox(e.description),e.description_boxes&&e.description_boxes.forEach(function(t){a.addBox(t)}),s.add("dinf").add("dref").addEntry(new f["url Box"]().set("flags",1));var m=s.add("stbl");return m.add("stsd").addEntry(a),m.add("stts").set("sample_counts",[]).set("sample_deltas",[]),m.add("stsc").set("first_chunk",[]).set("samples_per_chunk",[]).set("sample_description_index",[]),m.add("stco").set("chunk_offsets",[]),m.add("stsz").set("sample_sizes",[]),this.moov.mvex.add("trex").set("track_id",e.id).set("default_sample_description_index",e.default_sample_description_index||1).set("default_sample_duration",e.default_sample_duration||0).set("default_sample_size",e.default_sample_size||0).set("default_sample_flags",e.default_sample_flags||0),this.buildTrakSampleLists(r),e.id}},f.Box.prototype.computeSize=function(t){var e=t||new l;e.endianness=l.BIG_ENDIAN,this.write(e)},m.prototype.addSample=function(t,e,r){var n=r||{},s={},a=this.getTrackById(t);if(null!==a){s.number=a.samples.length,s.track_id=a.tkhd.track_id,s.timescale=a.mdia.mdhd.timescale,s.description_index=n.sample_description_index?n.sample_description_index-1:0,s.description=a.mdia.minf.stbl.stsd.entries[s.description_index],s.data=e,s.size=e.byteLength,s.alreadyRead=s.size,s.duration=n.duration||1,s.cts=n.cts||0,s.dts=n.dts||0,s.is_sync=n.is_sync||!1,s.is_leading=n.is_leading||0,s.depends_on=n.depends_on||0,s.is_depended_on=n.is_depended_on||0,s.has_redundancy=n.has_redundancy||0,s.degradation_priority=n.degradation_priority||0,s.offset=0,s.subsamples=n.subsamples,a.samples.push(s),a.samples_size+=s.size,a.samples_duration+=s.duration,void 0===a.first_dts&&(a.first_dts=n.dts),this.processSamples();var o=this.createSingleSampleMoof(s);return this.addBox(o),o.computeSize(),o.trafs[0].truns[0].data_offset=o.size+8,this.add("mdat").data=new Uint8Array(e),s}},m.prototype.createSingleSampleMoof=function(t){var e=0;e=t.is_sync?33554432:65536;var r=new f.moofBox;r.add("mfhd").set("sequence_number",this.nextMoofNumber),this.nextMoofNumber++;var n=r.add("traf"),s=this.getTrackById(t.track_id);return n.add("tfhd").set("track_id",t.track_id).set("flags",f.TFHD_FLAG_DEFAULT_BASE_IS_MOOF),n.add("tfdt").set("baseMediaDecodeTime",t.dts-(s.first_dts||0)),n.add("trun").set("flags",f.TRUN_FLAGS_DATA_OFFSET|f.TRUN_FLAGS_DURATION|f.TRUN_FLAGS_SIZE|f.TRUN_FLAGS_FLAGS|f.TRUN_FLAGS_CTS_OFFSET).set("data_offset",0).set("first_sample_flags",0).set("sample_count",1).set("sample_duration",[t.duration]).set("sample_size",[t.size]).set("sample_flags",[e]).set("sample_composition_time_offset",[t.cts-t.dts]),r},m.prototype.lastMoofIndex=0,m.prototype.samplesDataSize=0,m.prototype.resetTables=function(){var t,e,r,n,s,a;for(this.initial_duration=this.moov.mvhd.duration,this.moov.mvhd.duration=0,t=0;t=2&&(l=s[o].grouping_type+"/0",(u=new c(s[o].grouping_type,0)).is_fragment=!0,e.sample_groups_info[l]||(e.sample_groups_info[l]=u))}else for(o=0;o=2&&(l=n[o].grouping_type+"/0",u=new c(n[o].grouping_type,0),t.sample_groups_info[l]||(t.sample_groups_info[l]=u))},m.setSampleGroupProperties=function(t,e,r,n){var s,a,o;for(s in e.sample_groups=[],n)e.sample_groups[s]={},e.sample_groups[s].grouping_type=n[s].grouping_type,e.sample_groups[s].grouping_type_parameter=n[s].grouping_type_parameter,r>=n[s].last_sample_in_run&&(n[s].last_sample_in_run<0&&(n[s].last_sample_in_run=0),n[s].entry_index++,n[s].entry_index<=n[s].sbgp.entries.length-1&&(n[s].last_sample_in_run+=n[s].sbgp.entries[n[s].entry_index].sample_count)),n[s].entry_index<=n[s].sbgp.entries.length-1?e.sample_groups[s].group_description_index=n[s].sbgp.entries[n[s].entry_index].group_description_index:e.sample_groups[s].group_description_index=-1,0!==e.sample_groups[s].group_description_index&&(o=n[s].fragment_description?n[s].fragment_description:n[s].description,e.sample_groups[s].group_description_index>0?(a=e.sample_groups[s].group_description_index>65535?(e.sample_groups[s].group_description_index>>16)-1:e.sample_groups[s].group_description_index-1,o&&a>=0&&(e.sample_groups[s].description=o.entries[a])):o&&o.version>=2&&o.default_group_description_index>0&&(e.sample_groups[s].description=o.entries[o.default_group_description_index-1]))},m.process_sdtp=function(t,e,r){e&&(t?(e.is_leading=t.is_leading[r],e.depends_on=t.sample_depends_on[r],e.is_depended_on=t.sample_is_depended_on[r],e.has_redundancy=t.sample_has_redundancy[r]):(e.is_leading=0,e.depends_on=0,e.is_depended_on=0,e.has_redundancy=0))},m.prototype.buildSampleLists=function(){var t,e;for(t=0;t"u")){for(e=0;eb&&(w++,b<0&&(b=0),b+=a.sample_counts[w]),e>0?(t.samples[e-1].duration=a.sample_deltas[w],t.samples_duration+=t.samples[e-1].duration,A.dts=t.samples[e-1].dts+t.samples[e-1].duration):A.dts=0,o?(e>=S&&(x++,S<0&&(S=0),S+=o.sample_counts[x]),A.cts=t.samples[e].dts+o.sample_offsets[x]):A.cts=A.dts,u?(e==u.sample_numbers[E]-1?(A.is_sync=!0,E++):(A.is_sync=!1,A.degradation_priority=0),c&&c.entries[U].sample_delta+T==e+1&&(A.subsamples=c.entries[U].subsamples,T+=c.entries[U].sample_delta,U++)):A.is_sync=!0,m.process_sdtp(t.mdia.minf.stbl.sdtp,A,A.number),d?A.degradation_priority=d.priority[e]:A.degradation_priority=0,c&&c.entries[U].sample_delta+T==e&&(A.subsamples=c.entries[U].subsamples,T+=c.entries[U].sample_delta),(h.length>0||f.length>0)&&m.setSampleGroupProperties(t,A,e,t.sample_groups_info)}e>0&&(t.samples[e-1].duration=Math.max(t.mdia.mdhd.duration-t.samples[e-1].dts,0),t.samples_duration+=t.samples[e-1].duration)}},m.prototype.updateSampleLists=function(){var t,e,r,n,s,a,o,u,l,c,h,d,p,_;if(void 0!==this.moov){for(;this.lastMoofIndex0&&m.initSampleGroups(h,c,c.sbgps,h.mdia.minf.stbl.sgpds,c.sgpds),e=0;e0?p.dts=h.samples[h.samples.length-2].dts+h.samples[h.samples.length-2].duration:(c.tfdt?p.dts=c.tfdt.baseMediaDecodeTime:p.dts=0,h.first_traf_merged=!0),p.cts=p.dts,y.flags&f.TRUN_FLAGS_CTS_OFFSET&&(p.cts=p.dts+y.sample_composition_time_offset[r]),_=o,y.flags&f.TRUN_FLAGS_FLAGS?_=y.sample_flags[r]:0===r&&y.flags&f.TRUN_FLAGS_FIRST_FLAG&&(_=y.first_sample_flags),p.is_sync=!(_>>16&1),p.is_leading=_>>26&3,p.depends_on=_>>24&3,p.is_depended_on=_>>22&3,p.has_redundancy=_>>20&3,p.degradation_priority=65535&_;var g=!!(c.tfhd.flags&f.TFHD_FLAG_BASE_DATA_OFFSET),v=!!(c.tfhd.flags&f.TFHD_FLAG_DEFAULT_BASE_IS_MOOF),b=!!(y.flags&f.TRUN_FLAGS_DATA_OFFSET),w=0;w=g?c.tfhd.base_data_offset:v||0===e?l.start:u,0===e&&0===r?b?p.offset=w+y.data_offset:p.offset=w:p.offset=u,u=p.offset+p.size,(c.sbgps.length>0||c.sgpds.length>0||h.mdia.minf.stbl.sbgps.length>0||h.mdia.minf.stbl.sgpds.length>0)&&m.setSampleGroupProperties(h,p,p.number_in_traf,c.sample_groups_info)}}if(c.subs){h.has_fragment_subsamples=!0;var S=c.first_sample_index;for(e=0;e-1))return null;var a=(r=this.stream.buffers[s]).byteLength-(n.offset+n.alreadyRead-r.fileStart);if(n.size-n.alreadyRead<=a)return o.debug("ISOFile","Getting sample #"+e+" data (alreadyRead: "+n.alreadyRead+" offset: "+(n.offset+n.alreadyRead-r.fileStart)+" read size: "+(n.size-n.alreadyRead)+" full size: "+n.size+")"),l.memcpy(n.data.buffer,n.alreadyRead,r,n.offset+n.alreadyRead-r.fileStart,n.size-n.alreadyRead),r.usedBytes+=n.size-n.alreadyRead,this.stream.logBufferLevel(),n.alreadyRead=n.size,n;if(0===a)return null;o.debug("ISOFile","Getting sample #"+e+" partial data (alreadyRead: "+n.alreadyRead+" offset: "+(n.offset+n.alreadyRead-r.fileStart)+" read size: "+a+" full size: "+n.size+")"),l.memcpy(n.data.buffer,n.alreadyRead,r,n.offset+n.alreadyRead-r.fileStart,a),n.alreadyRead+=a,r.usedBytes+=a,this.stream.logBufferLevel()}},m.prototype.releaseSample=function(t,e){var r=t.samples[e];return r.data?(this.samplesDataSize-=r.size,r.data=null,r.alreadyRead=0,r.size):0},m.prototype.getAllocatedSampleDataSize=function(){return this.samplesDataSize},m.prototype.getCodecs=function(){var t,e="";for(t=0;t0&&(e+=","),e+=r.mdia.minf.stbl.stsd.entries[0].getCodec()}return e},m.prototype.getTrexById=function(t){var e;if(!this.moov||!this.moov.mvex)return null;for(e=0;e0&&(r.protection=s.ipro.protections[s.iinf.item_infos[t].protection_index-1]),s.iinf.item_infos[t].item_type?r.type=s.iinf.item_infos[t].item_type:r.type="mime",r.content_type=s.iinf.item_infos[t].content_type,r.content_encoding=s.iinf.item_infos[t].content_encoding;if(s.iloc)for(t=0;t0&&f.property_index-1-1))return null;var u=(e=this.stream.buffers[a]).byteLength-(s.offset+s.alreadyRead-e.fileStart);if(!(s.length-s.alreadyRead<=u))return o.debug("ISOFile","Getting item #"+t+" extent #"+n+" partial data (alreadyRead: "+s.alreadyRead+" offset: "+(s.offset+s.alreadyRead-e.fileStart)+" read size: "+u+" full extent size: "+s.length+" full item size: "+r.size+")"),l.memcpy(r.data.buffer,r.alreadyRead,e,s.offset+s.alreadyRead-e.fileStart,u),s.alreadyRead+=u,r.alreadyRead+=u,e.usedBytes+=u,this.stream.logBufferLevel(),null;o.debug("ISOFile","Getting item #"+t+" extent #"+n+" data (alreadyRead: "+s.alreadyRead+" offset: "+(s.offset+s.alreadyRead-e.fileStart)+" read size: "+(s.length-s.alreadyRead)+" full extent size: "+s.length+" full item size: "+r.size+")"),l.memcpy(r.data.buffer,r.alreadyRead,e,s.offset+s.alreadyRead-e.fileStart,s.length-s.alreadyRead),e.usedBytes+=s.length-s.alreadyRead,this.stream.logBufferLevel(),r.alreadyRead+=s.length-s.alreadyRead,s.alreadyRead=s.length}}return r.alreadyRead===r.size?r:null},m.prototype.releaseItem=function(t){var e=this.items[t];if(!e.data)return 0;this.itemsDataSize-=e.size,e.data=null,e.alreadyRead=0;for(var r=0;r0?this.moov.traks[t].samples[0].duration:0),e.push(n)}return e},f.Box.prototype.printHeader=function(t){this.size+=8,this.size>4294967296&&(this.size+=8),"uuid"===this.type&&(this.size+=16),t.log(t.indent+"size:"+this.size),t.log(t.indent+"type:"+this.type)},f.FullBox.prototype.printHeader=function(t){this.size+=4,f.Box.prototype.printHeader.call(this,t),t.log(t.indent+"version:"+this.version),t.log(t.indent+"flags:"+this.flags)},f.Box.prototype.print=function(t){this.printHeader(t)},f.ContainerBox.prototype.print=function(t){this.printHeader(t);for(var e=0;e>8)),t.log(t.indent+"matrix: "+this.matrix.join(", ")),t.log(t.indent+"next_track_id: "+this.next_track_id)},f.tkhdBox.prototype.print=function(t){f.FullBox.prototype.printHeader.call(this,t),t.log(t.indent+"creation_time: "+this.creation_time),t.log(t.indent+"modification_time: "+this.modification_time),t.log(t.indent+"track_id: "+this.track_id),t.log(t.indent+"duration: "+this.duration),t.log(t.indent+"volume: "+(this.volume>>8)),t.log(t.indent+"matrix: "+this.matrix.join(", ")),t.log(t.indent+"layer: "+this.layer),t.log(t.indent+"alternate_group: "+this.alternate_group),t.log(t.indent+"width: "+this.width),t.log(t.indent+"height: "+this.height)},(_={}).createFile=function(t,e){var r=new m(e);return r.discardMdatData=!(void 0===t||t),r},rQ.createFile=_.createFile;var rJ=/* @__PURE__ */rq(rQ),r$={sampleRate:48e3,channelCount:2,codec:"mp4a.40.2"};function r0(t,e){var r=e.videoTracks[0],n={};if(null!=r){var s=function(t){var e=!0,r=!1,n=void 0;try{for(var s,a=t.mdia.minf.stbl.stsd.entries[Symbol.iterator]();!(e=(s=a.next()).done);e=!0){var o,u,l=s.value,c=null!==(u=null!==(o=l.avcC)&&void 0!==o?o:l.hvcC)&&void 0!==u?u:l.vpcC;if(null!=c){var h=new rJ.DataStream(void 0,0,rJ.DataStream.BIG_ENDIAN);return c.write(h),new Uint8Array(h.buffer.slice(8))}}}catch(t){r=!0,n=t}finally{try{e||null==a.return||a.return()}finally{if(r)throw n}}throw Error("avcC, hvcC or VPX not found")}(t.getTrackById(r.id)).buffer,a=r.codec.startsWith("avc1")?{descKey:"avcDecoderConfigRecord",type:"avc1"}:r.codec.startsWith("hvc1")?{descKey:"hevcDecoderConfigRecord",type:"hvc1"}:{descKey:"",type:""},o=a.descKey,u=a.type;""!==o&&(n.videoTrackConf=(0,eb._)({timescale:r.timescale,duration:r.duration,width:r.video.width,height:r.video.height,brands:e.brands,type:u},o,s)),n.videoDecoderConf={codec:r.codec,codedHeight:r.video.height,codedWidth:r.video.width,description:s}}var l=e.audioTracks[0];if(null!=l){var c=r1(t);n.audioTrackConf={timescale:l.timescale,samplerate:l.audio.sample_rate,channel_count:l.audio.channel_count,hdlr:"soun",type:l.codec.startsWith("mp4a")?"mp4a":l.codec,description:r1(t)},n.audioDecoderConf=(0,eE._)({codec:l.codec.startsWith("mp4a")?r$.codec:l.codec,numberOfChannels:l.audio.channel_count,sampleRate:l.audio.sample_rate},null==c?{}:function(t){var e,r=null==(e=t.esd.descs[0])?void 0:e.descs[0];if(null==r)return{};var n=(0,eA._)(r.data,2),s=n[0],a=n[1];return{sampleRate:[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350][((7&s)<<1)+(a>>7)],numberOfChannels:(127&a)>>3}}(c))}return n}function r1(t){var e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"mp4a",n=null==(e=t.moov)?void 0:e.traks.map(function(t){return t.mdia.minf.stbl.stsd.entries}).flat().find(function(t){return t.type===r});return null==n?void 0:n.esds}var r2=function t(){(0,eg._)(this,t),eL(this,"readable"),eL(this,"writable"),eN(this,C,0);var e,r=rJ.createFile(),n=!1,s=this;this.readable=new ReadableStream({start:function(t){r.onReady=function(e){var n,s,a=null==(n=e.videoTracks[0])?void 0:n.id;null!=a&&r.setExtractionOptions(a,"video",{nbSamples:100});var o=null==(s=e.audioTracks[0])?void 0:s.id;null!=o&&r.setExtractionOptions(o,"audio",{nbSamples:100}),t.enqueue({chunkType:"ready",data:{info:e,file:r}}),r.start()};var e={};r.onSamples=function(n,s,a){var o;t.enqueue({chunkType:"samples",data:{id:n,type:s,samples:a.map(function(t){return(0,eE._)({},t)})}}),e[n]=(null!==(o=e[n])&&void 0!==o?o:0)+a.length,r.releaseUsedSamples(n,e[n])},r.onFlush=function(){t.close()}},cancel:function(){r.stop(),n=!0}},{highWaterMark:50}),this.writable=new WritableStream({write:(e=(0,ey._)(function(t){var e;return(0,eB._)(this,function(a){return n?s.writable.abort():((e=t.buffer).fileStart=eM(s,C),ej(s,C,eM(s,C)+e.byteLength),r.appendBuffer(e)),[2]})}),function(t){return e.apply(this,arguments)}),close:function(){var t;r.flush(),r.stop(),null==(t=r.onFlush)||t.call(r)}})};C=new WeakMap;var r3=0;function r4(t){return"file"===t.kind&&t.createReader instanceof Function}var r6=/*#__PURE__*/function(){function t(e){var r,n,s,a=this,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{audio:!0};if((0,eg._)(this,t),eN(this,B,rw.create("MP4Clip id:".concat(r3++,","))),eL(this,"ready"),eN(this,P,!1),eN(this,R,{duration:0,width:0,height:0,audioSampleRate:0,audioChanCount:0}),eN(this,F),eN(this,D,1),eN(this,z,[]),eN(this,L,[]),eN(this,O,null),eN(this,M,null),eN(this,N,{video:null,audio:null}),eN(this,j,{audio:!0}),eL(this,"tickInterceptor",(r=(0,ey._)(function(t,e){return(0,eB._)(this,function(t){return[2,e]})}),function(t,e){return r.apply(this,arguments)})),eN(this,G,new AbortController),!(e instanceof ReadableStream)&&!r4(e)&&!Array.isArray(e.videoSamples))throw Error("Illegal argument");ej(this,j,(0,eE._)({},o)),ej(this,D,"object"==typeof o.audio&&"volume"in o.audio?o.audio.volume:1);var u=this,l=(n=(0,ey._)(function(t){return(0,eB._)(this,function(e){switch(e.label){case 0:return[4,rn(eM(u,F),t)];case 1:return e.sent(),[4,eM(u,F).stream()];case 2:return[2,e.sent()]}})}),function(t){return n.apply(this,arguments)}),c=this;ej(this,F,r4(e)?e:"localFile"in e?e.localFile:rm()),this.ready=(e instanceof ReadableStream?l(e).then(function(t){return r9(t,eM(a,j))}):r4(e)?e.stream().then(function(t){return r9(t,eM(a,j))}):Promise.resolve(e)).then((s=(0,ey._)(function(t){var e,r,n,s,a,o,u;return(0,eB._)(this,function(l){switch(l.label){case 0:return e=t.videoSamples,r=t.audioSamples,n=t.decoderConf,ej(c,z,e),ej(c,L,r),ej(c,N,n),u=[{video:null==n.video?null:(0,eU._)((0,eE._)({},n.video),{hardwareAcceleration:eM(c,j).__unsafe_hardwareAcceleration__}),audio:n.audio}],[4,eM(c,F).createReader()];case 1:return a=(s=r5.apply(void 0,u.concat([l.sent(),e,r,!1!==eM(c,j).audio?eM(c,D):null]))).videoFrameFinder,o=s.audioFrameFinder,[2,(ej(c,O,a),ej(c,M,o),ej(c,R,function(t,e,r){var n,s,a={duration:0,width:0,height:0,audioSampleRate:0,audioChanCount:0};null!=t.video&&e.length>0&&(a.width=null!==(n=t.video.codedWidth)&&void 0!==n?n:0,a.height=null!==(s=t.video.codedHeight)&&void 0!==s?s:0),null!=t.audio&&r.length>0&&(a.audioSampleRate=r$.sampleRate,a.audioChanCount=r$.channelCount);var o=0,u=0;if(e.length>0)for(var l=e.length-1;l>=0;l--){var c=e[l];if(!c.deleted){o=c.cts+c.duration;break}}if(r.length>0){var h=r.at(-1);u=h.cts+h.duration}return a.duration=Math.max(o,u),a}(n,e,r)),eM(c,B).info("MP4Clip meta:",eM(c,R)),(0,eE._)({},eM(c,R)))]}})}),function(t){return s.apply(this,arguments)}))}return(0,ev._)(t,[{key:"meta",get:function(){return(0,eE._)({},eM(this,R))}},{key:"tick",value:function(t){var e=this;return(0,ey._)(function(){var r,n,s,a,o,u,l;return(0,eB._)(this,function(c){switch(c.label){case 0:if(!(t>=eM(e,R).duration))return[3,2];return[4,e.tickInterceptor(t,{audio:[],state:"done"})];case 1:return[2,c.sent()];case 2:return[4,Promise.all([null!==(s=null==(r=eM(e,M))?void 0:r.find(t))&&void 0!==s?s:[],null==(n=eM(e,O))?void 0:n.find(t)])];case 3:if(o=(a=(0,eA._).apply(void 0,[c.sent(),2]))[0],null!=(u=a[1]))return[3,5];return[4,e.tickInterceptor(t,{audio:o,state:"success"})];case 4:return l=c.sent(),[3,7];case 5:return[4,e.tickInterceptor(t,{video:u,audio:o,state:"success"})];case 6:l=c.sent(),c.label=7;case 7:return[2,l]}})})()}},{key:"thumbnails",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,e=arguments.length>1?arguments[1]:void 0,r=this;return(0,ey._)(function(){var n,s,a,o;return(0,eB._)(this,function(u){switch(u.label){case 0:return eM(r,G).abort(),ej(r,G,new AbortController),n=eM(r,G).signal,[4,r.ready];case 1:var l,c,h,f,d,p;if(u.sent(),s="generate thumbnails aborted",n.aborted)throw Error(s);return c=Math.round(t/(a=eM(r,R)).width*a.height),h={quality:.1,type:"image/png"},p=(d=new OffscreenCanvas(t,c)).getContext("2d"),f=(0,ey._)(function(e){return(0,eB._)(this,function(r){switch(r.label){case 0:return p.drawImage(e,0,0,t,c),e.close(),[4,d.convertToBlob(h)];case 1:return[2,r.sent()]}})}),o=function(t){return f.apply(this,arguments)},[2,new Promise((l=(0,ey._)(function(t,a){var u,l,c,h,f,d,p,m,_,y,g,v;function b(){return w.apply(this,arguments)}function w(){return(w=(0,ey._)(function(){return(0,eB._)(this,function(e){switch(e.label){case 0:var r;if(n.aborted)return[3,2];return[4,Promise.all(u.map((r=(0,ey._)(function(t){var e;return(0,eB._)(this,function(r){switch(r.label){case 0:return e={ts:t.ts},[4,t.img];case 1:return[2,(e.img=r.sent(),e)]}})}),function(t){return r.apply(this,arguments)})))];case 1:t.apply(void 0,[e.sent()]),e.label=2;case 2:return[2]}})})).apply(this,arguments)}function S(t){u.push({ts:t.timestamp,img:o(t)})}return(0,eB._)(this,function(t){switch(t.label){case 0:if(u=[],null==(l=eM(r,N).video)||0===eM(r,z).length)return b(),[2];if(n.addEventListener("abort",function(){a(Error(s))}),f=void 0===(h=(c=null!=e?e:{}).start)?0:h,p=void 0===(d=c.end)?eM(r,R).duration:d,!(m=c.step))return[3,6];return _=f,g=it.bind,[4,eM(r,F).createReader()];case 1:y=new(g.apply(it,[void 0,t.sent(),eM(r,z),(0,eU._)((0,eE._)({},l),{hardwareAcceleration:eM(r,j).__unsafe_hardwareAcceleration__})])),t.label=2;case 2:if(!(_<=p&&!n.aborted))return[3,5];return[4,y.find(_)];case 3:(v=t.sent())&&S(v),_+=m,t.label=4;case 4:return[3,2];case 5:return y.destroy(),b(),[3,8];case 6:return[4,function(t,e,r,n,s,a){return io.apply(this,arguments)}(eM(r,z),eM(r,F),l,n,{start:f,end:p},function(t,e){S(t),e&&b()})];case 7:t.sent(),t.label=8;case 8:return[2]}})}),function(t,e){return l.apply(this,arguments)}))]}})})()}},{key:"split",value:function(e){var r=this;return(0,ey._)(function(){var n,s,a,o,u,l,c,h;return(0,eB._)(this,function(f){switch(f.label){case 0:return[4,r.ready];case 1:if(f.sent(),e<=0||e>=eM(r,R).duration)throw Error('"time" out of bounds');return s=(n=(0,eA._)(function(t,e){if(0===t.length)return[];for(var r=0,n=0,s=-1,a=0;a=0)break;g.deleted=!0,g.cts=-1}}catch(t){p=!0,m=t}finally{try{d||null==y.return||y.return()}finally{if(p)throw m}}return[l,f]}(eM(r,z),e),2))[0],a=n[1],u=(o=(0,eA._)(function(t,e){if(0===t.length)return[];for(var r=-1,n=0;nt[n].cts)){r=n;break}if(-1===r)throw Error("Not found audio sample by time");return[t.slice(0,r),t.slice(r).map(function(t){return(0,eU._)((0,eE._)({},t),{cts:t.cts-e})})]}(eM(r,L),e),2))[0],l=o[1],c=new t({localFile:eM(r,F),videoSamples:null!=s?s:[],audioSamples:null!=u?u:[],decoderConf:eM(r,N)},eM(r,j)),h=new t({localFile:eM(r,F),videoSamples:null!=a?a:[],audioSamples:null!=l?l:[],decoderConf:eM(r,N)},eM(r,j)),[4,Promise.all([c.ready,h.ready])];case 2:return[2,(f.sent(),[c,h])]}})})()}},{key:"clone",value:function(){var e=this;return(0,ey._)(function(){var r;return(0,eB._)(this,function(n){switch(n.label){case 0:return[4,e.ready];case 1:return n.sent(),[4,(r=new t({localFile:eM(e,F),videoSamples:(0,eI._)(eM(e,z)),audioSamples:(0,eI._)(eM(e,L)),decoderConf:eM(e,N)},eM(e,j))).ready];case 2:return[2,(n.sent(),r.tickInterceptor=e.tickInterceptor,r)]}})})()}},{key:"splitTrack",value:function(){var e=this;return(0,ey._)(function(){var r,n,s;return(0,eB._)(this,function(a){switch(a.label){case 0:return[4,e.ready];case 1:if(a.sent(),r=[],!(eM(e,z).length>0))return[3,3];return[4,(n=new t({localFile:eM(e,F),videoSamples:(0,eI._)(eM(e,z)),audioSamples:[],decoderConf:{video:eM(e,N).video,audio:null}},eM(e,j))).ready];case 2:a.sent(),n.tickInterceptor=e.tickInterceptor,r.push(n),a.label=3;case 3:if(!(eM(e,L).length>0))return[3,5];return[4,(s=new t({localFile:eM(e,F),videoSamples:[],audioSamples:(0,eI._)(eM(e,L)),decoderConf:{audio:eM(e,N).audio,video:null}},eM(e,j))).ready];case 4:a.sent(),s.tickInterceptor=e.tickInterceptor,r.push(s),a.label=5;case 5:return[2,r]}})})()}},{key:"destroy",value:function(){var t,e;eM(this,P)||(eM(this,B).info("MP4Clip destroy"),ej(this,P,!0),null==(t=eM(this,O))||t.destroy(),null==(e=eM(this,M))||e.destroy())}}]),t}();B=new WeakMap,P=new WeakMap,R=new WeakMap,F=new WeakMap,D=new WeakMap,z=new WeakMap,L=new WeakMap,O=new WeakMap,M=new WeakMap,N=new WeakMap,j=new WeakMap,G=new WeakMap;var r8=r6;function r5(t,e,r,n,s){return{audioFrameFinder:null==s||null==t.audio||0===n.length?null:new ie(e,n,t.audio,{volume:s,targetSampleRate:r$.sampleRate}),videoFrameFinder:null==t.video||0===r.length?null:new it(e,r,t.video)}}function r9(t){return r7.apply(this,arguments)}function r7(){return(r7=(0,ey._)(function(t){var e,r,n,s,a,o=arguments;function u(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2?arguments[2]:void 0;return(0,eU._)((0,eE._)({},t),{is_idr:"video"===r&&t.is_sync&&function(t){for(var e=new DataView(t.buffer),r=0;r1&&void 0!==o[1]?o[1]:{},n={video:null,audio:null},s=[],a=[],[2,new Promise((c=(0,ey._)(function(o,l){var c,h,f;return(0,eB._)(this,function(d){var p;return c=-1,h=-1,f=rZ(t.pipeThrough(new r2),{onChunk:(p=(0,ey._)(function(t){var o,d,p,m,_,y,g,v,b,w,S,x,E,U,T,A,I;return(0,eB._)(this,function(k){if(o=t.chunkType,d=t.data,"ready"===o)r=d.info,m=(p=r0(d.file,d.info)).videoDecoderConf,_=p.audioDecoderConf,n.video=null!=m?m:null,n.audio=null!=_?_:null,null==m&&null==_&&(f(),l(Error("MP4Clip must contain at least one video or audio track"))),rw.info("mp4BoxFile moov ready",(0,eU._)((0,eE._)({},d.info),{tracks:null,videoTracks:null,audioTracks:null}),n);else if("samples"===o){if("video"===d.type){-1===c&&(c=d.samples[0].dts),y=!0,g=!1,v=void 0;try{for(b=d.samples[Symbol.iterator]();!(y=(w=b.next()).done);y=!0)S=w.value,s.push(u(S,c,"video"))}catch(t){g=!0,v=t}finally{try{y||null==b.return||b.return()}finally{if(g)throw v}}}else if("audio"===d.type&&e.audio){-1===h&&(h=d.samples[0].dts),x=!0,E=!1,U=void 0;try{for(T=d.samples[Symbol.iterator]();!(x=(A=T.next()).done);x=!0)I=A.value,a.push(u(I,h,"audio"))}catch(t){E=!0,U=t}finally{try{x||null==T.return||T.return()}finally{if(E)throw U}}}}return[2]})}),function(t){return p.apply(this,arguments)}),onDone:function(){var t,e=null!==(t=s.at(-1))&&void 0!==t?t:a.at(-1);if(null==r){l(Error("MP4Clip stream is done, but not emit ready"));return}if(null==e){l(Error("MP4Clip stream not contain any sample"));return}var u=s[0];null!=u&&u.cts<2e5&&(u.duration+=u.cts,u.cts=0),rw.info("mp4 stream parsed"),o({videoSamples:s,audioSamples:a,decoderConf:n})}}),[2]})}),function(t,e){return c.apply(this,arguments)}))]})})).apply(this,arguments)}var it=function t(e,r,n){var s,a,o,u=this;(0,eg._)(this,t),eN(this,Y,null),eN(this,W,0),eN(this,V,{abort:!1,st:performance.now()});var l=this;eL(this,"find",(s=(0,ey._)(function(t){return(0,eB._)(this,function(e){switch(e.label){case 0:return(null==eM(l,Y)||t<=eM(l,W)||t-eM(l,W)>3e6)&&eM(l,te).call(l,t),eM(l,V).abort=!0,ej(l,W,t),ej(l,V,{abort:!1,st:performance.now()}),[4,eM(l,J).call(l,t,eM(l,Y),eM(l,V))];case 1:return[2,e.sent()]}})}),function(t){return s.apply(this,arguments)})),eN(this,H,0),eN(this,X,!1),eN(this,Z,0),eN(this,K,[]),eN(this,q,0),eN(this,Q,0);var c=this;eN(this,J,(a=(0,ey._)(function(t,e,r){var n,s,a,o,u;return(0,eB._)(this,function(l){switch(l.label){case 0:if(null==e||"closed"===e.state||r.abort)return[2,null];if(!(eM(c,K).length>0))return[3,6];if(!(t<(n=eM(c,K)[0]).timestamp))return[3,1];return a=null,[3,5];case 1:if(eM(c,K).shift(),!(t>n.timestamp+(null!==(s=n.duration)&&void 0!==s?s:0)))return[3,3];return n.close(),[4,eM(c,J).call(c,t,e,r)];case 2:return o=l.sent(),[3,4];case 3:eM(c,K).length<10&&eM(c,tt).call(c,e).catch(function(e){throw eM(c,te).call(c,t),e}),o=n,l.label=4;case 4:a=o,l.label=5;case 5:return[2,a];case 6:if(!(eM(c,$)||eM(c,q)0))return[3,8];if(performance.now()-r.st>3e3)throw Error("MP4Clip.tick video timeout, ".concat(JSON.stringify(eM(c,tr).call(c))));return[4,rH(15)];case 7:return l.sent(),[3,12];case 8:if(eM(c,Z)>=c.samples.length)return[2,null];l.label=9;case 9:return l.trys.push([9,11,,12]),[4,eM(c,tt).call(c,e)];case 10:return l.sent(),[3,12];case 11:throw u=l.sent(),eM(c,te).call(c,t),u;case 12:return[4,eM(c,J).call(c,t,e,r)];case 13:return[2,l.sent()]}})}),function(t,e,r){return a.apply(this,arguments)})),eN(this,$,!1);var h=this;eN(this,tt,(o=(0,ey._)(function(t){var e,r,n,s,a,o,u,l;return(0,eB._)(this,function(c){switch(c.label){case 0:if(eM(h,$))return[2];for(ej(h,$,!0),n=eM(h,Z)+1,s=!1;n1e5){for(eM(l,tf).call(l),ej(l,to,t),e=0;e1&&void 0!==a[1]?a[1]:null,r=a.length>2?a[2]:void 0,null==e||r.abort||"closed"===e.state||0===(n=Math.ceil(t*(eM(c,tn)/1e6))))return[2,[]];if((s=eM(c,tl).frameCnt-n)>0)return[2,(se){var l=e-n;r[0].set(o.subarray(0,l),n),r[1].set(u.subarray(0,l),n),t.data[s][0]=o.subarray(l,o.length),t.data[s][1]=u.subarray(l,u.length);break}r[0].set(o,n),r[1].set(u,n),n+=o.length,s++}return t.data=t.data.slice(s),t.frameCnt-=e,r}(eM(c,tl),n))];if(!(e.decodeQueueSize>10))return[3,2];if(performance.now()-r.st>3e3)throw r.abort=!0,Error("MP4Clip.tick audio timeout, ".concat(JSON.stringify(eM(c,td).call(c))));return[4,rH(15)];case 1:return o.sent(),[3,3];case 2:if(eM(c,tu)>=c.samples.length-1)return[2,[]];eM(c,th).call(c,e),o.label=3;case 3:return[2,eM(c,tc).call(c,t,e,r)]}})}),function(t){return o.apply(this,arguments)})),eN(this,th,function(t){if(!(t.decodeQueueSize>100)){for(var e=[],r=eM(u,tu);r=10))break}ej(u,tu,r),t.decode(e.map(function(t){return new EncodedAudioChunk({type:"key",timestamp:t.cts,duration:t.duration,data:t.data})}))}}),eN(this,tf,function(){var t,e,r,n,s,a,o,l;ej(u,to,0),ej(u,tu,0),ej(u,tl,{frameCnt:0,data:[]}),null==(t=eM(u,ts))||t.close(),ej(u,ts,(e=u.conf,r={resampleRate:r$.sampleRate,volume:eM(u,ti)},n=function(t){eM(u,tl).data.push(t),eM(u,tl).frameCnt+=t[0].length},a=function(t){var e=[],r=0;function n(){var s=e[r];null!=s&&(t(s),r+=1,n())}var s=0;return function(t){var r=s;s+=1,t().then(function(t){e[r]=t,n()}).catch(function(t){e[r]=t,n()})}}(s=function(t){if(0!==t.length){var e=!0,s=!1,a=void 0;if(1!==r.volume)try{for(var o,u=t[Symbol.iterator]();!(e=(o=u.next()).done);e=!0)for(var l=o.value,c=0;c=s.start&&t.cts<=s.end}),o)];case 2:return 0===(c=h.sent()).length||n.aborted||(l.configure(r),is(l,c,{})),[2]}})})).apply(this,arguments)}ti=new WeakMap,tn=new WeakMap,ts=new WeakMap,ta=new WeakMap,to=new WeakMap,tu=new WeakMap,tl=new WeakMap,tc=new WeakMap,th=new WeakMap,tf=new WeakMap,td=new WeakMap;var iu=/*#__PURE__*/function(){function t(e){var r=this;(0,eg._)(this,t),eN(this,ty),eL(this,"ready"),eN(this,tp,{duration:0,width:0,height:0}),eN(this,tm,null),eN(this,t_,[]);var n=function(t){return ej(r,tm,t),eM(r,tp).width=t.width,eM(r,tp).height=t.height,eM(r,tp).duration=1/0,(0,eE._)({},eM(r,tp))};if(e instanceof ReadableStream)this.ready=new Response(e).blob().then(function(t){return createImageBitmap(t)}).then(n);else if(e instanceof ImageBitmap)this.ready=Promise.resolve(n(e));else if(Array.isArray(e)&&e.every(function(t){return t instanceof VideoFrame})){ej(this,t_,e);var s=eM(this,t_)[0];if(null==s)throw Error("The frame count must be greater than 0");ej(this,tp,{width:s.displayWidth,height:s.displayHeight,duration:eM(this,t_).reduce(function(t,e){var r;return t+(null!==(r=e.duration)&&void 0!==r?r:0)},0)}),this.ready=Promise.resolve((0,eU._)((0,eE._)({},eM(this,tp)),{duration:1/0}))}else if("type"in e)this.ready=eG(this,ty,tg).call(this,e.stream,e.type).then(function(){return{width:eM(r,tp).width,height:eM(r,tp).height,duration:1/0}});else throw Error("Illegal arguments")}return(0,ev._)(t,[{key:"meta",get:function(){return(0,eE._)({},eM(this,tp))}},{key:"tick",value:function(t){var e=this;return(0,ey._)(function(){var r,n,s;return(0,eB._)(this,function(a){switch(a.label){case 0:if(!(null!=eM(e,tm)))return[3,2];return r={},[4,createImageBitmap(eM(e,tm))];case 1:return[2,(r.video=a.sent(),r.state="success",r)];case 2:return n=t%eM(e,tp).duration,[2,{video:(null!==(s=eM(e,t_).find(function(t){var e;return n>=t.timestamp&&n<=t.timestamp+(null!==(e=t.duration)&&void 0!==e?e:0)}))&&void 0!==s?s:eM(e,t_)[0]).clone(),state:"success"}]}})})()}},{key:"split",value:function(e){var r=this;return(0,ey._)(function(){var n,s,a,o,u,l,c;return(0,eB._)(this,function(h){switch(h.label){case 0:return[4,r.ready];case 1:if(h.sent(),null==eM(r,tm))return[3,4];return n=t.bind,[4,createImageBitmap(eM(r,tm))];case 2:return s=[new(n.apply(t,[void 0,h.sent()]))],a=t.bind,[4,createImageBitmap(eM(r,tm))];case 3:return[2,s.concat([new(a.apply(t,[void 0,h.sent()]))])];case 4:for(u=0,o=-1;ueM(r,t_)[u].timestamp)){o=u;break}if(-1===o)throw Error("Not found frame by time");return l=eM(r,t_).slice(0,o).map(function(t){return new VideoFrame(t)}),c=eM(r,t_).slice(o).map(function(t){return new VideoFrame(t,{timestamp:t.timestamp-e})}),[2,[new t(l),new t(c)]]}})})()}},{key:"clone",value:function(){var e=this;return(0,ey._)(function(){var r;return(0,eB._)(this,function(n){switch(n.label){case 0:return[4,e.ready];case 1:if(n.sent(),null!=eM(e,tm))return[3,2];return r=eM(e,t_).map(function(t){return t.clone()}),[3,4];case 2:return[4,createImageBitmap(eM(e,tm))];case 3:r=n.sent(),n.label=4;case 4:return[2,new t(r)]}})})()}},{key:"destroy",value:function(){var t;rw.info("ImgClip destroy"),null==(t=eM(this,tm))||t.close(),eM(this,t_).forEach(function(t){return t.close()})}}]),t}();tp=new WeakMap,tm=new WeakMap,t_=new WeakMap,ty=new WeakSet,y=(0,ey._)(function(t,e){var r,n;return(0,eB._)(this,function(s){switch(s.label){case 0:return r=[this,t_],[4,rj(t,e)];case 1:if(ej.apply(void 0,r.concat([s.sent()])),null==(n=eM(this,t_)[0]))throw Error("No frame available in gif");return ej(this,tp,{duration:eM(this,t_).reduce(function(t,e){var r;return t+(null!==(r=e.duration)&&void 0!==r?r:0)},0),width:n.codedWidth,height:n.codedHeight}),rw.info("ImgClip ready:",eM(this,tp)),[2]}})}),tg=function(t,e){return y.apply(this,arguments)};var il=iu,ic=/*#__PURE__*/function(){function t(e){var r=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,eg._)(this,t),eN(this,tx),eL(this,"ready"),eN(this,tv,{duration:0,width:0,height:0}),eN(this,tb,new Float32Array),eN(this,tw,new Float32Array),eN(this,tS),eN(this,tU,0),eN(this,tT,0),ej(this,tS,(0,eE._)({loop:!1,volume:1},n)),this.ready=eG(this,tx,tE).call(this,e).then(function(){return{width:0,height:0,duration:n.loop?1/0:eM(r,tv).duration}})}return(0,ev._)(t,[{key:"meta",get:function(){return(0,eU._)((0,eE._)({},eM(this,tv)),{sampleRate:r$.sampleRate,chanCount:2})}},{key:"getPCMData",value:function(){return[eM(this,tb),eM(this,tw)]}},{key:"tick",value:function(t){var e=this;return(0,ey._)(function(){var r,n,s,a;return(0,eB._)(this,function(o){return!eM(e,tS).loop&&t>=eM(e,tv).duration?[2,{audio:[],state:"done"}]:(r=t-eM(e,tU),t3e6)?[2,(ej(e,tU,t),ej(e,tT,Math.ceil(eM(e,tU)/1e6*r$.sampleRate)),{audio:[new Float32Array(0),new Float32Array(0)],state:"success"})]:(ej(e,tU,t),n=Math.ceil(r/1e6*r$.sampleRate),s=eM(e,tT)+n,a=eM(e,tS).loop?[rX(eM(e,tb),eM(e,tT),s),rX(eM(e,tw),eM(e,tT),s)]:[eM(e,tb).slice(eM(e,tT),s),eM(e,tw).slice(eM(e,tT),s)],[2,(ej(e,tT,s),{audio:a,state:"success"})])})})()}},{key:"split",value:function(e){var r=this;return(0,ey._)(function(){var n;return(0,eB._)(this,function(s){switch(s.label){case 0:return[4,r.ready];case 1:return s.sent(),n=Math.ceil(e/1e6*r$.sampleRate),[2,[new t(r.getPCMData().map(function(t){return t.slice(0,n)}),eM(r,tS)),new t(r.getPCMData().map(function(t){return t.slice(n)}),eM(r,tS))]]}})})()}},{key:"clone",value:function(){var e=this;return(0,ey._)(function(){var r;return(0,eB._)(this,function(n){switch(n.label){case 0:return[4,e.ready];case 1:return n.sent(),[4,(r=new t(e.getPCMData(),eM(e,tS))).ready];case 2:return[2,(n.sent(),r)]}})})()}},{key:"destroy",value:function(){ej(this,tb,new Float32Array(0)),ej(this,tw,new Float32Array(0)),rw.info("---- audioclip destroy ----")}}]),t}();tv=new WeakMap,tb=new WeakMap,tw=new WeakMap,tS=new WeakMap,tx=new WeakSet,g=(0,ey._)(function(t){var e,r,n,s,a,o,u,l,c,h,f,d;return(0,eB._)(this,function(p){switch(p.label){case 0:if(null==ic.ctx&&(ic.ctx=new AudioContext({sampleRate:r$.sampleRate})),e=performance.now(),!(t instanceof ReadableStream))return[3,2];return[4,function(t,e){return im.apply(this,arguments)}(t,ic.ctx)];case 1:return n=p.sent(),[3,3];case 2:n=t,p.label=3;case 3:if(r=n,rw.info("Audio clip decoded complete:",performance.now()-e),s=eM(this,tS).volume,a=!0,o=!1,u=void 0,1!==s)try{for(l=r[Symbol.iterator]();!(a=(c=l.next()).done);a=!0)for(f=0,h=c.value;f0}).map(function(t){return{lineStr:t,match:t.match(/(\d{2}:\d{2}:\d{2},\d{3}) --> (\d{2}:\d{2}:\d{2},\d{3})/)}}).filter(function(t,e,r){var n,s=t.lineStr;return!(/^\d+$/.test(s)&&(null==(n=r[e+1])?void 0:n.match)!=null)}).reduce(function(t,e){var r=e.lineStr,n=e.match;if(null==n){var s=t.at(-1);if(null==s)return t;s.text+=0===s.text.length?r:"\n".concat(r)}else t.push({start:ib(n[1]),end:ib(n[2]),text:""});return t},[]).map(function(t){return{start:1e6*t.start,end:1e6*t.end,text:t.text}})),0===eM(this,tB).length)throw Error("No subtitles content");ej(this,tR,Object.assign(eM(this,tR),r)),ej(this,tO,null==r.textBgColor?0:(null!==(s=r.fontSize)&&void 0!==s?s:50)*.2);var n,s,a,o=eM(this,tR),u=o.fontSize,l=o.fontFamily,c=o.videoWidth,h=o.videoHeight,f=o.letterSpacing;ej(this,tL,u+2*eM(this,tO)),ej(this,tF,new OffscreenCanvas(c,h)),ej(this,tD,eM(this,tF).getContext("2d")),eM(this,tD).font="".concat(u,"px ").concat(l),eM(this,tD).textAlign="center",eM(this,tD).textBaseline="top",eM(this,tD).letterSpacing=null!=f?f:"0px",ej(this,tP,{width:c,height:h,duration:null!==(a=null==(n=eM(this,tB).at(-1))?void 0:n.end)&&void 0!==a?a:0}),this.ready=Promise.resolve(this.meta)}return(0,ev._)(t,[{key:"meta",get:function(){return(0,eE._)({},eM(this,tP))}},{key:"tick",value:function(t){var e=this;return(0,ey._)(function(){var r,n,s,a,o,u,l,c;return(0,eB._)(this,function(h){if(null!=eM(e,tz)&&t>=eM(e,tz).timestamp&&t<=eM(e,tz).timestamp+(null!==(s=eM(e,tz).duration)&&void 0!==s?s:0))return[2,{video:eM(e,tz).clone(),state:"success"}];for(a=0;a(u=null!==(o=eM(e,tB)[a])&&void 0!==o?o:eM(e,tB).at(-1)).end?[2,{state:"done"}]:teM(r,tB)[s].start)){n=s;break}if(-1===n)throw Error("Not found subtitle by time");return o=(a=eM(r,tB).slice(0,n).map(function(t){return(0,eE._)({},t)})).at(-1),u=null,null!=o&&o.end>e&&(u={start:0,end:o.end-e,text:o.text},o.end=e),l=eM(r,tB).slice(n).map(function(t){return(0,eU._)((0,eE._)({},t),{start:t.start-e,end:t.end-e})}),[2,(null!=u&&l.unshift(u),[new t(a,eM(r,tR)),new t(l,eM(r,tR))])]}})})()}},{key:"clone",value:function(){var e=this;return(0,ey._)(function(){return(0,eB._)(this,function(r){return[2,new t(eM(e,tB).slice(0),eM(e,tR))]})})()}},{key:"destroy",value:function(){var t;null==(t=eM(this,tz))||t.close()}}]),t}();tB=new WeakMap,tP=new WeakMap,tR=new WeakMap,tF=new WeakMap,tD=new WeakMap,tz=new WeakMap,tL=new WeakMap,tO=new WeakMap,tM=new WeakSet,tN=function(t){var e=t.split("\n").reverse().map(function(t){return t.trim()}),r=eM(this,tF),n=r.width,s=r.height,a=eM(this,tR),o=a.color,u=a.fontSize,l=a.textBgColor,c=a.textShadow,h=a.strokeStyle,f=a.lineWidth,d=a.lineCap,p=a.lineJoin,m=a.bottomOffset,_=eM(this,tD);_.clearRect(0,0,n,s),_.globalAlpha=.6;var y=m,g=!0,v=!1,b=void 0;try{for(var w,S=e[Symbol.iterator]();!(g=(w=S.next()).done);g=!0){var x=w.value,E=_.measureText(x),U=n/2;null!=l&&(_.shadowOffsetX=0,_.shadowOffsetY=0,_.shadowBlur=0,_.fillStyle=l,_.globalAlpha=.5,_.fillRect(U-E.actualBoundingBoxLeft-eM(this,tO),s-y-eM(this,tL),E.width+2*eM(this,tO),eM(this,tL))),_.shadowColor=c.color,_.shadowOffsetX=c.offsetX,_.shadowOffsetY=c.offsetY,_.shadowBlur=c.blur,_.globalAlpha=1,null!=h&&(_.lineWidth=null!=f?f:u/6,null!=d&&(_.lineCap=d),null!=p&&(_.lineJoin=p),_.strokeStyle=h,_.strokeText(x,U,s-y-eM(this,tL)+eM(this,tO))),_.fillStyle=o,_.fillText(x,U,s-y-eM(this,tL)+eM(this,tO)),y+=eM(this,tL)+.2*u}}catch(t){v=!0,b=t}finally{try{g||null==S.return||S.return()}finally{if(v)throw b}}};var iv=ig;function ib(t){var e=t.match(/(\d{2}):(\d{2}):(\d{2}),(\d{3})/);if(null==e)throw Error("time format error: ".concat(t));return 3600*Number(e[1])+60*Number(e[2])+Number(e[3])+Number(e[4])/1e3}var iw=/*#__PURE__*/function(){function t(){var e=this,r=this;(0,eg._)(this,t),eN(this,tj,/* @__PURE__ */new Map),eL(this,"on",function(t,r){var n,s=null!==(n=eM(e,tj).get(t))&&void 0!==n?n:/* @__PURE__ */new Set;return s.add(r),eM(e,tj).has(t)||eM(e,tj).set(t,s),function(){s.delete(r),0===s.size&&eM(e,tj).delete(t)}}),eL(this,"once",function(t,r){var n=e.on(t,function(){for(var t=arguments.length,e=Array(t),s=0;s1?e-1:0),s=1;s0&&a.is_sync)break;e.addSample(s,a.data,a),r=a.cts+a.duration}return t.splice(0,n),r}(r);f>c&&(c=f)}var d=n[0];null!=d&&d.cts-c<1e4&&(l=t,h())}}}var f=rA(h,15),d=iI(t,function(t,e){return u("encoder0",t,e)}),p=iI(t,function(t,e){return u("encoder1",t,e)}),m=0;return{get encodeQueueSize(){return d.encodeQueueSize+p.encodeQueueSize},encode:function(t,e){e.keyFrame&&(m+=1),(m%2==0?d:p).encode(t,e)},flush:/*#__PURE__*/(0,ey._)(function(){var t,e,r,n;return(0,eB._)(this,function(s){switch(s.label){case 0:if(t=Promise.all,"configured"!==d.state)return[3,2];return[4,d.flush()];case 1:return e=s.sent(),[3,3];case 2:e=null,s.label=3;case 3:if(r=[e],"configured"!==p.state)return[3,5];return[4,p.flush()];case 4:return n=s.sent(),[3,6];case 5:n=null,s.label=6;case 6:return[4,t.apply(Promise,[r.concat([n])])];case 7:return s.sent(),f(),h(),[2]}})}),close:function(){"configured"===d.state&&d.close(),"configured"===p.state&&p.close()}}}(t.video,e,r):null,u=null!=t.audio?function(t,e,r){var n={timescale:1e6,samplerate:t.sampleRate,channel_count:t.channelCount,hdlr:"soun",type:"aac"===t.codec?"mp4a":"Opus",name:"Track created with WebAV"},s=-1,a=[],o=!1;r.once("VideoReady",function(){o=!0,a.forEach(function(t){var r=iC(t);e.addSample(s,r.data,r)}),a=[]});var u=new AudioEncoder({error:rw.error,output:function(t,u){var l;if(-1===s){var c,h,f,d=null==(l=u.decoderConfig)?void 0:l.description;s=e.addTrack((0,eU._)((0,eE._)({},n),{description:null==d?void 0:(h=new Uint8Array([0,0,0,0,3,23+(c=d.byteLength),0,2,0,4,18+c,64,21,0,0,0,0,0,0,0,0,0,0,0,5,c].concat((0,eI._)(new Uint8Array(d instanceof ArrayBuffer?d:d.buffer)),[6,1,2])),(f=new rJ.BoxParser.esdsBox(h.byteLength)).hdr_size=0,f.parse(new rJ.DataStream(h,0,rJ.DataStream.BIG_ENDIAN)),f)})),r.emit("AudioReady"),rw.info("AudioEncoder, audio track ready, trackId:",s)}if(o){var p=iC(t);e.addSample(s,p.data,p)}else a.push(t)}});return u.configure({codec:"aac"===t.codec?r$.codec:"opus",sampleRate:t.sampleRate,numberOfChannels:t.channelCount,bitrate:128e3}),u}(t.audio,e,r):null;return null==t.video&&r.emit("VideoReady"),null==t.audio&&r.emit("AudioReady"),{encodeVideo:function(t,e){null==o||o.encode(t,e),t.close()},encodeAudio:function(t){null!=u&&(u.encode(t),t.close())},getEncodeQueueSize:function(){var t,e;return null!==(e=null!==(t=null==o?void 0:o.encodeQueueSize)&&void 0!==t?t:null==u?void 0:u.encodeQueueSize)&&void 0!==e?e:0},flush:/*#__PURE__*/(0,ey._)(function(){return(0,eB._)(this,function(t){switch(t.label){case 0:return[4,Promise.all([null==o?void 0:o.flush(),(null==u?void 0:u.state)==="configured"?u.flush():null])];case 1:return t.sent(),[2]}})}),close:function(){r.destroy(),null==o||o.close(),(null==u?void 0:u.state)==="configured"&&u.close()},mp4file:e}}function iI(t,e){var r=new VideoEncoder({error:rw.error,output:e});return r.configure({codec:t.codec,framerate:t.expectFPS,hardwareAcceleration:t.__unsafe_hardwareAcceleration__,bitrate:t.bitrate,width:t.width,height:t.height,alpha:"discard",avc:{format:"avc"}}),r}function ik(t,e,r){var n=0,s=0,a=t.boxes,o=!1,u=function(){if(!o){if(null==a.find(function(t){return"moof"===t.type}))return null;o=!0}if(s>=a.length)return null;var e=new rJ.DataStream;e.endianness=rJ.DataStream.BIG_ENDIAN;var r=s;try{for(;r0)return!0;var s=r.findIndex(function(t){return"moov"===t.type});if(-1===s)return!1;if(u=r.slice(0,s+1),e=s+1,0===n.length)for(var a=1;;a+=1){var o=t.getTrackById(a);if(null==o)break;n.push({track:o,id:a})}return!0}var c=0,h=rm(),f=null,d=(0,ey._)(function(){return(0,eB._)(this,function(t){switch(t.label){case 0:return[4,h.createWriter()];case 1:return f=t.sent(),c=self.setInterval(function(){l()&&a()},100),[2]}})})(),p=!1;return/*#__PURE__*/(0,ey._)(function(){var e,r,n;return(0,eB._)(this,function(o){switch(o.label){case 0:if(p)throw Error("File exported");return p=!0,[4,d];case 1:if(o.sent(),clearInterval(c),!l()||null==f)return[2,null];return t.flush(),[4,a()];case 2:return o.sent(),[4,null==f?void 0:f.close()];case 3:if(o.sent(),null==(e=u.find(function(t){return"moov"===t.type})))return[2,null];return e.mvhd.duration=s,r=rm(),n=m(u,0),[4,rn(r,n)];case 4:return o.sent(),[4,rn(r,h,{overwrite:!1})];case 5:return o.sent(),[4,r.stream()];case 6:return[2,o.sent()]}})});function m(t,e){if(e>=t.length)return null;var r=new rJ.DataStream;r.endianness=rJ.DataStream.BIG_ENDIAN;for(var n=e;n-1},e.trigger=function(t){var e=this.listeners[t];if(e){if(2==arguments.length)for(var r=e.length,n=0;n-1;e=this.buffer.indexOf("\n"))this.trigger("data",this.buffer.substring(0,e)),this.buffer=this.buffer.substring(e+1)}}]),r}(iL),ij=function(t){var e=/([0-9.]*)?@?([0-9.]*)?/.exec(t||""),r={};return e[1]&&(r.length=parseInt(e[1],10)),e[2]&&(r.offset=parseInt(e[2],10)),r},iG=function(t){var e={};if(!t)return e;for(var r,n=t.split(RegExp('(?:^|,)((?:[^=]*)=(?:"[^"]*"|[^,]*))')),s=n.length;s--;)""!==n[s]&&((r=/([^=]*)=(.*)/.exec(n[s]).slice(1))[0]=r[0].replace(/^\s+|\s+$/g,""),r[1]=r[1].replace(/^\s+|\s+$/g,""),r[1]=r[1].replace(/^['"](.*)['"]$/g,"$1"),e[r[0]]=r[1]);return e},iY=/*#__PURE__*/function(t){(0,ex._)(r,t);var e=(0,eC._)(r);function r(){var t;return(0,eg._)(this,r),(t=e.call(this)).customParsers=[],t.tagMappers=[],(0,eT._)(t)}return(0,ev._)(r,[{key:"push",value:function(t){var e,r,n=this;if(0!==(t=t.trim()).length){if("#"!==t[0]){this.trigger("data",{type:"uri",uri:t});return}this.tagMappers.reduce(function(e,r){var n=r(t);return n===t?e:e.concat([n])},[t]).forEach(function(t){for(var s=0;s0&&(u.duration=t.duration),0===t.duration&&(u.duration=.01,this.trigger("info",{message:"updating zero segment duration to a small value"})),this.manifest.segments=o},key:function(){if(!t.attributes){this.trigger("warn",{message:"ignoring key declaration without attribute list"});return}if("NONE"===t.attributes.METHOD){s=null;return}if(!t.attributes.URI){this.trigger("warn",{message:"ignoring key declaration without URI"});return}if("com.apple.streamingkeydelivery"===t.attributes.KEYFORMAT){this.manifest.contentProtection=this.manifest.contentProtection||{},this.manifest.contentProtection["com.apple.fps.1_0"]={attributes:t.attributes};return}if("com.microsoft.playready"===t.attributes.KEYFORMAT){this.manifest.contentProtection=this.manifest.contentProtection||{},this.manifest.contentProtection["com.microsoft.playready"]={uri:t.attributes.URI};return}if("urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"===t.attributes.KEYFORMAT){if(-1===["SAMPLE-AES","SAMPLE-AES-CTR","SAMPLE-AES-CENC"].indexOf(t.attributes.METHOD)){this.trigger("warn",{message:"invalid key method provided for Widevine"});return}if("SAMPLE-AES-CENC"===t.attributes.METHOD&&this.trigger("warn",{message:"SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead"}),"data:text/plain;base64,"!==t.attributes.URI.substring(0,23)){this.trigger("warn",{message:"invalid key URI provided for Widevine"});return}if(!(t.attributes.KEYID&&"0x"===t.attributes.KEYID.substring(0,2))){this.trigger("warn",{message:"invalid key ID provided for Widevine"});return}this.manifest.contentProtection=this.manifest.contentProtection||{},this.manifest.contentProtection["com.widevine.alpha"]={attributes:{schemeIdUri:t.attributes.KEYFORMAT,keyId:t.attributes.KEYID.substring(2)},pssh:function(t){for(var e=iM.atob?iM.atob(t):eF.from(t,"base64").toString("binary"),r=new Uint8Array(e.length),n=0;n(0,ek._)(t.attributes.IV)&&(s.iv=t.attributes.IV)},"media-sequence":function(){if(!isFinite(t.number)){this.trigger("warn",{message:"ignoring invalid media sequence: "+t.number});return}this.manifest.mediaSequence=t.number},"discontinuity-sequence":function(){if(!isFinite(t.number)){this.trigger("warn",{message:"ignoring invalid discontinuity sequence: "+t.number});return}this.manifest.discontinuitySequence=t.number,f=t.number},"playlist-type":function(){if(!/VOD|EVENT/.test(t.playlistType)){this.trigger("warn",{message:"ignoring unknown playlist type: "+t.playlist});return}this.manifest.playlistType=t.playlistType},map:function(){n={},t.uri&&(n.uri=t.uri),t.byterange&&(n.byterange=t.byterange),s&&(n.key=s)},"stream-inf":function(){if(this.manifest.playlists=o,this.manifest.mediaGroups=this.manifest.mediaGroups||h,!t.attributes){this.trigger("warn",{message:"ignoring empty stream-inf attributes"});return}u.attributes||(u.attributes={}),iO(u.attributes,t.attributes)},media:function(){if(this.manifest.mediaGroups=this.manifest.mediaGroups||h,!(t.attributes&&t.attributes.TYPE&&t.attributes["GROUP-ID"]&&t.attributes.NAME)){this.trigger("warn",{message:"ignoring incomplete or missing media group"});return}var n=this.manifest.mediaGroups[t.attributes.TYPE];n[t.attributes["GROUP-ID"]]=n[t.attributes["GROUP-ID"]]||{},e=n[t.attributes["GROUP-ID"]],(r={default:/yes/i.test(t.attributes.DEFAULT)}).default?r.autoselect=!0:r.autoselect=/yes/i.test(t.attributes.AUTOSELECT),t.attributes.LANGUAGE&&(r.language=t.attributes.LANGUAGE),t.attributes.URI&&(r.uri=t.attributes.URI),t.attributes["INSTREAM-ID"]&&(r.instreamId=t.attributes["INSTREAM-ID"]),t.attributes.CHARACTERISTICS&&(r.characteristics=t.attributes.CHARACTERISTICS),t.attributes.FORCED&&(r.forced=/yes/i.test(t.attributes.FORCED)),e[t.attributes.NAME]=r},discontinuity:function(){f+=1,u.discontinuity=!0,this.manifest.discontinuityStarts.push(o.length)},"program-date-time":function(){(0,ek._)(this.manifest.dateTimeString)>"u"&&(this.manifest.dateTimeString=t.dateTimeString,this.manifest.dateTimeObject=t.dateTimeObject),u.dateTimeString=t.dateTimeString,u.dateTimeObject=t.dateTimeObject;var e=this.lastProgramDateTime;this.lastProgramDateTime=new Date(t.dateTimeString).getTime(),null===e&&this.manifest.segments.reduceRight(function(t,e){return e.programDateTime=t-1e3*e.duration,e.programDateTime},this.lastProgramDateTime)},targetduration:function(){if(!isFinite(t.duration)||t.duration<0){this.trigger("warn",{message:"ignoring invalid target duration: "+t.duration});return}this.manifest.targetDuration=t.duration,iV.call(this,this.manifest)},start:function(){if(!t.attributes||isNaN(t.attributes["TIME-OFFSET"])){this.trigger("warn",{message:"ignoring start declaration without appropriate attribute list"});return}this.manifest.start={timeOffset:t.attributes["TIME-OFFSET"],precise:t.attributes.PRECISE}},"cue-out":function(){u.cueOut=t.data},"cue-out-cont":function(){u.cueOutCont=t.data},"cue-in":function(){u.cueIn=t.data},skip:function(){this.manifest.skip=iW(t.attributes),this.warnOnMissingAttributes_("#EXT-X-SKIP",t.attributes,["SKIPPED-SEGMENTS"])},part:function(){var e=this;l=!0;var r=this.manifest.segments.length,n=iW(t.attributes);u.parts=u.parts||[],u.parts.push(n),n.byterange&&(n.byterange.hasOwnProperty("offset")||(n.byterange.offset=p),p=n.byterange.offset+n.byterange.length);var s=u.parts.length-1;this.warnOnMissingAttributes_("#EXT-X-PART #".concat(s," for segment #").concat(r),t.attributes,["URI","DURATION"]),this.manifest.renditionReports&&this.manifest.renditionReports.forEach(function(t,r){t.hasOwnProperty("lastPart")||e.trigger("warn",{message:"#EXT-X-RENDITION-REPORT #".concat(r," lacks required attribute(s): LAST-PART")})})},"server-control":function(){var e=this.manifest.serverControl=iW(t.attributes);e.hasOwnProperty("canBlockReload")||(e.canBlockReload=!1,this.trigger("info",{message:"#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false"})),iV.call(this,this.manifest),e.canSkipDateranges&&!e.hasOwnProperty("canSkipUntil")&&this.trigger("warn",{message:"#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set"})},"preload-hint":function(){var e=this.manifest.segments.length,r=iW(t.attributes),n=r.type&&"PART"===r.type;u.preloadHints=u.preloadHints||[],u.preloadHints.push(r),r.byterange&&(r.byterange.hasOwnProperty("offset")||(r.byterange.offset=n?p:0,n&&(p=r.byterange.offset+r.byterange.length)));var s=u.preloadHints.length-1;if(this.warnOnMissingAttributes_("#EXT-X-PRELOAD-HINT #".concat(s," for segment #").concat(e),t.attributes,["TYPE","URI"]),r.type)for(var a=0;a1&&void 0!==u[1]?u[1]:10,n=(r=new iH).push,[4,fetch(t)];case 1:return[4,h.sent().text()];case 2:return n.apply(r,[h.sent()]),r.end(),s=r.manifest.segments.reduce(function(t,e){var r;return t[e.map.uri]=null!==(r=t[e.map.uri])&&void 0!==r?r:[],t[e.map.uri].push(e),t},{}),a=new URL(t,location.href),o={},[2,{load:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1/0,r={},n=0,o=0,u=!0,h=!1,f=void 0;try{for(var d,p=Object.entries(s)[Symbol.iterator]();!(u=(d=p.next()).done);u=!0){for(var m=(0,eA._)(d.value,2),_=m[0],y=m[1],g=0,v=[],b=-1,w=-1,S=0;St/1e6&&(b=S,n=(g-x.duration)*1e6),b>-1&&-1===w&&g>=e/1e6){w=S+1,o=1e6*g;break}}e>=1e6*g&&(w=y.length,o=1e6*g),w>b&&(v=v.concat(y.slice(b,w))),v.length>0&&(r[_]={actualStartTime:n,actualEndTime:o,segments:v})}}catch(t){h=!0,f=t}finally{try{u||null==p.return||p.return()}finally{if(h)throw f}}return 0===Object.keys(r).length?null:Object.entries(r).map(function(t){var e,r,n=(0,eA._)(t,2),s=n[0],o=n[1],u=o.actualStartTime,h=o.actualEndTime,f=o.segments,d=0,p=new iw;return{actualStartTime:u,actualEndTime:h,on:p.on,stream:new ReadableStream({start:(e=(0,ey._)(function(t){var e,r;return(0,eB._)(this,function(n){switch(n.label){case 0:return function(t,e,r){l.apply(this,arguments)}(f,t,p),e=t.enqueue,r=Uint8Array.bind,[4,fetch(new URL(s,a).href)];case 1:return[4,n.sent().arrayBuffer()];case 2:return e.apply(t,[new(r.apply(Uint8Array,[void 0,n.sent()]))]),[2]}})}),function(t){return e.apply(this,arguments)}),pull:(r=(0,ey._)(function(t){var e,r,n;return(0,eB._)(this,function(s){switch(s.label){case 0:return e=new URL(f[d].uri,a).href,r=t.enqueue,n=Uint8Array.bind,[4,function(t){return c.apply(this,arguments)}(e)];case 1:return r.apply(t,[new(n.apply(Uint8Array,[void 0,s.sent()]))]),(d+=1)>=f.length&&(t.close(),p.destroy()),[2]}})}),function(t){return r.apply(this,arguments)})})}})}}]}})})).apply(this,arguments)}var iK=[-1,1,-1,-1,1,-1,1,-1,1,1,-1,1],iq=[0,1,0,0,1,0,1,0,1,1,0,1];function iQ(t,e,r){var n=t.createShader(e);if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){var s=t.getShaderInfoLog(n);throw t.deleteShader(n),Error(null!=s?s:"An error occurred compiling the shaders")}return n}var iJ=function(t){var e,r=null,n=null,s=t.keyColor,a=null;return e=(0,ey._)(function(e){var o,u,l;return(0,eB._)(this,function(c){var h,f,d,p,m;return((null==r||null==n||null==a)&&(null==s&&((h=new OffscreenCanvas(1,1).getContext("2d")).drawImage(e,0,0),f=h.getImageData(0,0,1,1),s=[(d=(0,eA._)(f.data,3))[0],d[1],d[2]]),r=(o=function(t){var e="document"in globalThis?globalThis.document.createElement("canvas"):new OffscreenCanvas(t.width,t.height);e.width=t.width,e.height=t.height;var r=e.getContext("webgl2",{premultipliedAlpha:!1,alpha:!0});if(null==r)throw Error("Cant create gl context");var n=function(t,e,r){var n,s=iQ(t,t.VERTEX_SHADER,e),a=iQ(t,t.FRAGMENT_SHADER,r),o=t.createProgram();if(t.attachShader(o,s),t.attachShader(o,a),t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS))throw Error(null!==(n=t.getProgramInfoLog(o))&&void 0!==n?n:"Unable to initialize the shader program");return o}(r,"#version 300 es\n layout (location = 0) in vec4 a_position;\n layout (location = 1) in vec2 a_texCoord;\n out vec2 v_texCoord;\n void main () {\n gl_Position = a_position;\n v_texCoord = a_texCoord;\n }\n","#version 300 es\nprecision mediump float;\nout vec4 FragColor;\nin vec2 v_texCoord;\n\nuniform sampler2D frameTexture;\nuniform vec3 keyColor;\n\n// 色度的相似度计算\nuniform float similarity;\n// 透明度的平滑度计算\nuniform float smoothness;\n// 降低绿幕饱和度,提高抠图准确度\nuniform float spill;\n\nvec2 RGBtoUV(vec3 rgb) {\n return vec2(\n rgb.r * -0.169 + rgb.g * -0.331 + rgb.b * 0.5 + 0.5,\n rgb.r * 0.5 + rgb.g * -0.419 + rgb.b * -0.081 + 0.5\n );\n}\n\nvoid main() {\n // 获取当前像素的rgba值\n vec4 rgba = texture(frameTexture, v_texCoord);\n // 计算当前像素与绿幕像素的色度差值\n vec2 chromaVec = RGBtoUV(rgba.rgb) - RGBtoUV(keyColor);\n // 计算当前像素与绿幕像素的色度距离(向量长度), 越相像则色度距离越小\n float chromaDist = sqrt(dot(chromaVec, chromaVec));\n // 设置了一个相似度阈值,baseMask为负,则表明是绿幕,为正则表明不是绿幕\n float baseMask = chromaDist - similarity;\n // 如果baseMask为负数,fullMask等于0;baseMask为正数,越大,则透明度越低\n float fullMask = pow(clamp(baseMask / smoothness, 0., 1.), 1.5);\n rgba.a = fullMask; // 设置透明度\n // 如果baseMask为负数,spillVal等于0;baseMask为整数,越小,饱和度越低\n float spillVal = pow(clamp(baseMask / spill, 0., 1.), 1.5);\n float desat = clamp(rgba.r * 0.2126 + rgba.g * 0.7152 + rgba.b * 0.0722, 0., 1.); // 计算当前像素的灰度值\n rgba.rgb = mix(vec3(desat, desat, desat), rgba.rgb, spillVal);\n FragColor = rgba;\n}\n");r.useProgram(n),r.uniform3fv(r.getUniformLocation(n,"keyColor"),t.keyColor.map(function(t){return t/255})),r.uniform1f(r.getUniformLocation(n,"similarity"),t.similarity),r.uniform1f(r.getUniformLocation(n,"smoothness"),t.smoothness),r.uniform1f(r.getUniformLocation(n,"spill"),t.spill);var s=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,s),r.bufferData(r.ARRAY_BUFFER,new Float32Array(iK),r.STATIC_DRAW);var a=r.getAttribLocation(n,"a_position");r.vertexAttribPointer(a,2,r.FLOAT,!1,2*Float32Array.BYTES_PER_ELEMENT,0),r.enableVertexAttribArray(a);var o=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,o),r.bufferData(r.ARRAY_BUFFER,new Float32Array(iq),r.STATIC_DRAW);var u=r.getAttribLocation(n,"a_texCoord");return r.vertexAttribPointer(u,2,r.FLOAT,!1,2*Float32Array.BYTES_PER_ELEMENT,0),r.enableVertexAttribArray(u),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,1),{cvs:e,gl:r}}((0,eE._)((0,eU._)((0,eE._)({},e instanceof VideoFrame?{width:e.codedWidth,height:e.codedHeight}:{width:e.width,height:e.height}),{keyColor:s}),t))).cvs,a=function(t){var e=t.createTexture();if(null==e)throw Error("Create WebGL texture error");t.bindTexture(t.TEXTURE_2D,e);var r=t.RGBA,n=t.RGBA,s=t.UNSIGNED_BYTE,a=new Uint8Array([0,0,255,255]);return t.texImage2D(t.TEXTURE_2D,0,r,1,1,0,n,s,a),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}(n=o.gl)),p=n,m=a,p.bindTexture(p.TEXTURE_2D,m),p.texImage2D(p.TEXTURE_2D,0,p.RGBA,p.RGBA,p.UNSIGNED_BYTE,e),p.drawArrays(p.TRIANGLES,0,6),null!=globalThis.VideoFrame&&e instanceof globalThis.VideoFrame)?(l=new VideoFrame(r,{alpha:"keep",timestamp:e.timestamp,duration:null!==(u=e.duration)&&void 0!==u?u:void 0}),[2,(e.close(),l)]):[2,createImageBitmap(r,{imageOrientation:e instanceof ImageBitmap?"flipY":"none"})]})}),function(t){return e.apply(this,arguments)}},i$=/*#__PURE__*/function(){function t(e,r,n,s,a){(0,eg._)(this,t),eN(this,tK),eN(this,tY,new iw),eL(this,"on",eM(this,tY).on),eN(this,tW,0),eN(this,tV,0),eN(this,tH,0),eN(this,tX,0),eN(this,tZ,0),eL(this,"master",null),eL(this,"fixedAspectRatio",!1),this.x=null!=e?e:0,this.y=null!=r?r:0,this.w=null!=n?n:0,this.h=null!=s?s:0,this.master=null!=a?a:null}return(0,ev._)(t,[{key:"x",get:function(){return eM(this,tW)},set:function(t){eG(this,tK,tq).call(this,"x",t)}},{key:"y",get:function(){return eM(this,tV)},set:function(t){eG(this,tK,tq).call(this,"y",t)}},{key:"w",get:function(){return eM(this,tH)},set:function(t){eG(this,tK,tq).call(this,"w",t)}},{key:"h",get:function(){return eM(this,tX)},set:function(t){eG(this,tK,tq).call(this,"h",t)}},{key:"angle",get:function(){return eM(this,tZ)},set:function(t){eG(this,tK,tq).call(this,"angle",t)}},{key:"center",get:function(){var t=this.x,e=this.y;return{x:t+this.w/2,y:e+this.h/2}}},{key:"ctrls",get:function(){var e=this.w,r=this.h,n=t.CTRL_SIZE,s=n/2,a=e/2,o=r/2,u=1.5*n,l=u/2;return(0,eU._)((0,eE._)({},this.fixedAspectRatio?{}:{t:new t(-s,-o-s,n,n,this),b:new t(-s,o-s,n,n,this),l:new t(-a-s,-s,n,n,this),r:new t(a-s,-s,n,n,this)}),{lt:new t(-a-s,-o-s,n,n,this),lb:new t(-a-s,o-s,n,n,this),rt:new t(a-s,-o-s,n,n,this),rb:new t(a-s,o-s,n,n,this),rotate:new t(-l,-o-2*n-l,u,u,this)})}},{key:"clone",value:function(){var e=new t(this.x,this.y,this.w,this.h,this.master);return e.angle=this.angle,e.fixedAspectRatio=this.fixedAspectRatio,e}},{key:"checkHit",value:function(t,e){var r,n,s=this.angle,a=this.center,o=this.x,u=this.y,l=this.w,c=this.h,h=this.master,f=null!==(r=null==h?void 0:h.center)&&void 0!==r?r:a,d=null!==(n=null==h?void 0:h.angle)&&void 0!==n?n:s;null==h&&(o-=f.x,u-=f.y);var p=t-f.x,m=e-f.y,_=p,y=m;return 0!==d&&(_=p*Math.cos(d)+m*Math.sin(d),y=m*Math.cos(d)-p*Math.sin(d)),!(_o+l||yu+c)}}]),t}();tY=new WeakMap,tW=new WeakMap,tV=new WeakMap,tH=new WeakMap,tX=new WeakMap,tZ=new WeakMap,tK=new WeakSet,tq=function(t,e){var r=this[t]!==e;switch(t){case"x":ej(this,tW,e);break;case"y":ej(this,tV,e);break;case"w":ej(this,tH,e);break;case"h":ej(this,tX,e);break;case"angle":ej(this,tZ,e)}r&&eM(this,tY).emit("propsChange",(0,eb._)({},t,e))},eL(i$,"CTRL_SIZE",16),eL(i$,"CTRL_KEYS",["t","b","l","r","lt","lb","rt","rb","rotate"]);var i0=i$,i1=/*#__PURE__*/function(){function t(){var e=this;(0,eg._)(this,t),eL(this,"rect",new i0),eL(this,"time",{offset:0,duration:0}),eL(this,"visible",!0),eN(this,tQ,new iw),eL(this,"on",eM(this,tQ).on),eN(this,tJ,0),eL(this,"opacity",1),eL(this,"flip",null),eN(this,t$,null),eN(this,t0,null),eL(this,"ready",Promise.resolve()),this.rect.on("propsChange",function(t){eM(e,tQ).emit("propsChange",{rect:t})})}return(0,ev._)(t,[{key:"zIndex",get:function(){return eM(this,tJ)},set:function(t){var e=eM(this,tJ)!==t;ej(this,tJ,t),e&&eM(this,tQ).emit("propsChange",{zIndex:t})}},{key:"_render",value:function(t){var e=this.rect,r=e.center,n=e.angle;t.setTransform("horizontal"===this.flip?-1:1,0,0,"vertical"===this.flip?-1:1,r.x,r.y),t.rotate((null==this.flip?1:-1)*n),t.globalAlpha=this.opacity}},{key:"setAnimation",value:function(t,e){var r,n;ej(this,t$,Object.entries(t).map(function(t){var e,r=(0,eA._)(t,2),n=r[0],s=r[1],a=null!==(e=({from:0,to:100})[n])&&void 0!==e?e:Number(n.slice(0,-1));if(isNaN(a)||a>100||a<0)throw Error("keyFrame must between 0~100");return[a/100,s]})),ej(this,t0,Object.assign({},eM(this,t0),{duration:1e6*e.duration,delay:(null!==(r=e.delay)&&void 0!==r?r:0)*1e6,iterCount:null!==(n=e.iterCount)&&void 0!==n?n:1/0}))}},{key:"animate",value:function(t){if(null!=eM(this,t$)&&null!=eM(this,t0)&&!(t=r.iterCount)return{};var n=t%r.duration,s=t===r.duration?1:n/r.duration,a=e.findIndex(function(t){return t[0]>=s});if(-1===a)return{};var o=e[a-1],u=e[a],l=u[1];if(null==o)return l;var c=o[1],h={},f=(s-o[0])/(u[0]-o[0]);for(var d in l)null!=c[d]&&(h[d]=(l[d]-c[d])*f+c[d]);return h}(t,eM(this,t$),eM(this,t0));for(var r in e)switch(r){case"opacity":this.opacity=e[r];break;case"x":case"y":case"w":case"h":case"angle":this.rect[r]=e[r]}}}},{key:"copyStateTo",value:function(t){ej(t,t$,eM(this,t$)),ej(t,t0,eM(this,t0)),t.visible=this.visible,t.zIndex=this.zIndex,t.opacity=this.opacity,t.flip=this.flip,t.rect=this.rect.clone(),t.time=(0,eE._)({},this.time)}},{key:"destroy",value:function(){eM(this,tQ).destroy()}}]),t}();tQ=new WeakMap,tJ=new WeakMap,t$=new WeakMap,t0=new WeakMap;var i2=/*#__PURE__*/function(t){(0,ex._)(r,t);var e=(0,eC._)(r);function r(t){var n;return(0,eg._)(this,r),n=e.call(this),eN((0,em._)(n),t1),eN((0,em._)(n),t2,null),eN((0,em._)(n),t3,!1),ej((0,em._)(n),t1,t),n.ready=t.ready.then(function(t){var e=t.width,r=t.height,s=t.duration;n.rect.w=0===n.rect.w?e:n.rect.w,n.rect.h=0===n.rect.h?r:n.rect.h,n.time.duration=0===n.time.duration?s:n.time.duration}),n}return(0,ev._)(r,[{key:"offscreenRender",value:function(t,e){var n=this,s=this;return(0,ey._)(function(){var a,o,u,l,c,h,f,d;return(0,eB._)(this,function(p){switch(p.label){case 0:return s.animate(e),(0,ew._)((0,eS._)(r.prototype),"_render",n).call(s,t),u=(o=s.rect).w,l=o.h,[4,eM(s,t1).tick(e)];case 1:if(h=(c=p.sent()).video,f=c.audio,"done"===c.state)return[2,{audio:null!=f?f:[],done:!0}];return[2,(null!=(d=null!=h?h:eM(s,t2))&&t.drawImage(d,-u/2,-l/2,u,l),null!=h&&(null==(a=eM(s,t2))||a.close(),ej(s,t2,h)),{audio:null!=f?f:[],done:!1})]}})})()}},{key:"clone",value:function(){var t=this;return(0,ey._)(function(){var e,n;return(0,eB._)(this,function(s){switch(s.label){case 0:return n=r.bind,[4,eM(t,t1).clone()];case 1:return[4,(e=new(n.apply(r,[void 0,s.sent()]))).ready];case 2:return[2,(s.sent(),t.copyStateTo(e),e)]}})})()}},{key:"destroy",value:function(){var t;eM(this,t3)||(ej(this,t3,!0),rw.info("OffscreenSprite destroy"),(0,ew._)((0,eS._)(r.prototype),"destroy",this).call(this),null==(t=eM(this,t2))||t.close(),ej(this,t2,null),eM(this,t1).destroy())}}]),r}(i1);t1=new WeakMap,t2=new WeakMap,t3=new WeakMap;var i3=i2,i4=/*#__PURE__*/function(t){(0,ex._)(r,t);var e=(0,eC._)(r);function r(t){var n;return(0,eg._)(this,r),n=e.call(this),eN((0,em._)(n),t9),eN((0,em._)(n),t4),eN((0,em._)(n),t6,null),eN((0,em._)(n),t8,[]),eN((0,em._)(n),t5,!1),eN((0,em._)(n),et,-1),eN((0,em._)(n),ee,!1),ej((0,em._)(n),t4,t),n.ready=t.ready.then(function(t){var e=t.width,r=t.height,s=t.duration;n.rect.w=0===n.rect.w?e:n.rect.w,n.rect.h=0===n.rect.h?r:n.rect.h,n.time.duration=0===n.time.duration?s:n.time.duration}),n}return(0,ev._)(r,[{key:"getClip",value:function(){return eM(this,t4)}},{key:"preFrame",value:function(t){eG(this,t9,t7).call(this,t)}},{key:"render",value:function(t,e){this.animate(e),(0,ew._)((0,eS._)(r.prototype),"_render",this).call(this,t);var n=this.rect,s=n.w,a=n.h;eM(this,et)!==e&&eG(this,t9,t7).call(this,e),ej(this,et,e);var o=eM(this,t8);ej(this,t8,[]);var u=eM(this,t6);return null!=u&&t.drawImage(u,-s/2,-a/2,s,a),{audio:o}}},{key:"destroy",value:function(){var t;eM(this,ee)||(ej(this,ee,!0),rw.info("VisibleSprite destroy"),(0,ew._)((0,eS._)(r.prototype),"destroy",this).call(this),null==(t=eM(this,t6))||t.close(),ej(this,t6,null),eM(this,t4).destroy())}}]),r}(i1);t4=new WeakMap,t6=new WeakMap,t8=new WeakMap,t5=new WeakMap,t9=new WeakSet,t7=function(t){var e=this;eM(this,t5)||(ej(this,t5,!0),eM(this,t4).tick(t).then(function(t){var r,n=t.video,s=t.audio;null!=n&&(null==(r=eM(e,t6))||r.close(),ej(e,t6,null!=n?n:null)),ej(e,t8,null!=s?s:[])}).finally(function(){ej(e,t5,!1)}))},et=new WeakMap,ee=new WeakMap;var i6=0;function i8(t){return i5.apply(this,arguments)}function i5(){return(i5=(0,ey._)(function(t){return(0,eB._)(this,function(e){switch(e.label){case 0:if(!(t()>50))return[3,3];return[4,rH(15)];case 1:return e.sent(),[4,i8(t)];case 2:e.sent(),e.label=3;case 3:return[2]}})})).apply(this,arguments)}var i9=/*#__PURE__*/function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,eg._)(this,t),eN(this,eh),eN(this,er,rw.create("id:".concat(i6++,","))),eN(this,ei,!1),eN(this,en,[]),eN(this,es),eN(this,ea),eN(this,eo,null),eN(this,eu),eN(this,el),eN(this,ec,new iw),eL(this,"on",eM(this,ec).on);var r=e.width,n=void 0===r?0:r,s=e.height,a=void 0===s?0:s;ej(this,es,new OffscreenCanvas(n,a));var o=eM(this,es).getContext("2d",{alpha:!1});if(null==o)throw Error("Can not create 2d offscreen context");ej(this,ea,o),ej(this,eu,Object.assign({bgColor:"#000",width:0,height:0,videoCodec:"avc1.42E032",audio:!0,bitrate:5e6,metaDataTags:null},e)),ej(this,el,n*a>0)}return(0,ev._)(t,[{key:"addSprite",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=this;return(0,ey._)(function(){var n,s;return(0,eB._)(this,function(a){switch(a.label){case 0:return eM(r,er).info("Combinator add sprite",t),[4,t.clone()];case 1:return n=a.sent(),eM(r,er).info("Combinator add sprite ready",t),eM(r,en).push(Object.assign(n,{main:null!==(s=e.main)&&void 0!==s&&s,expired:!1})),eM(r,en).sort(function(t,e){return t.zIndex-e.zIndex}),[2]}})})()}},{key:"output",value:function(){var t,e=this;if(0===eM(this,en).length)throw Error("No sprite added");var r=eM(this,en).find(function(t){return t.main}),n=null!=r?r.time.offset+r.time.duration:(t=Math).max.apply(t,(0,eI._)(eM(this,en).map(function(t){return t.time.offset+t.time.duration})));if(n===1/0)throw Error("Unable to determine the end time, please specify a main sprite, or limit the duration of ImgClip, AudioCli");-1===n&&eM(this,er).warn("Unable to determine the end time, process value don't update"),eM(this,er).info("start combinate video, maxTime:".concat(n));var s=eG(this,eh,ef).call(this,n),a=performance.now(),o=this,u=eG(this,eh,ed).call(this,s,n,{onProgress:function(t){eM(e,er).debug("OutputProgress:",t),eM(e,ec).emit("OutputProgress",t)},onEnded:/*#__PURE__*/(0,ey._)(function(){return(0,eB._)(this,function(t){switch(t.label){case 0:return[4,s.flush()];case 1:return t.sent(),eM(o,er).info("===== output ended =====, cost:",performance.now()-a),eM(o,ec).emit("OutputProgress",1),o.destroy(),[2]}})}),onError:function(t){eM(e,ec).emit("error",t),h(t),e.destroy()}});ej(this,eo,function(){u(),s.close(),h()});var l=ik(s.mp4file,500,this.destroy),c=l.stream,h=l.stop;return c}},{key:"destroy",value:function(){var t;eM(this,ei)||(ej(this,ei,!0),null==(t=eM(this,eo))||t.call(this),eM(this,ec).destroy())}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{videoCodec:"avc1.42E032"};return(0,ey._)(function(){var e,r,n;return(0,eB._)(this,function(s){switch(s.label){case 0:if(!(n=null!=self.OffscreenCanvas&&null!=self.VideoEncoder&&null!=self.VideoDecoder&&null!=self.VideoFrame&&null!=self.AudioEncoder&&null!=self.AudioDecoder&&null!=self.AudioData))return[3,2];return[4,self.VideoEncoder.isConfigSupported({codec:t.videoCodec,width:1280,height:720})];case 1:n=null!==(e=s.sent().supported)&&void 0!==e&&e,s.label=2;case 2:if(!(r=n))return[3,4];return[4,self.AudioEncoder.isConfigSupported({codec:r$.codec,sampleRate:r$.sampleRate,numberOfChannels:r$.channelCount})];case 3:r=s.sent().supported,s.label=4;case 4:return[2,r]}})})()}}]),t}();er=new WeakMap,ei=new WeakMap,en=new WeakMap,es=new WeakMap,ea=new WeakMap,eo=new WeakMap,eu=new WeakMap,el=new WeakMap,ec=new WeakMap,eh=new WeakSet,ef=function(t){var e=eM(this,eu),r=e.width,n=e.height,s=e.videoCodec,a=e.bitrate,o=e.audio,u=e.metaDataTags;return iA({video:eM(this,el)?{width:r,height:n,expectFPS:30,codec:s,bitrate:a,__unsafe_hardwareAcceleration__:eM(this,eu).__unsafe_hardwareAcceleration__}:null,audio:!1===o?null:{codec:"aac",sampleRate:r$.sampleRate,channelCount:r$.channelCount},duration:t,metaDataTags:u})},ed=function(t,e,r){var n=this,s=r.onProgress,a=r.onEnded,o=r.onError,u=0,l=!1,c=null,h=this;(0,ey._)(function(){var r,n,s,o,f,p,m,_;return(0,eB._)(this,function(y){switch(y.label){case 0:r=function(){var r,s,_,y,g,v,b,w,S,x,E,U,T;return(0,eB._)(this,function(A){switch(A.label){case 0:if(null!=c)return[2,{v:void 0}];if(!(l||-1!==e&&m>e||0===eM(h,en).length))return[3,2];return d(),[4,a()];case 1:return A.sent(),[2,{v:void 0}];case 2:u=m/e,p.fillStyle=eM(h,eu).bgColor,p.fillRect(0,0,o,f),r=[],s=!0,_=!1,y=void 0,A.label=3;case 3:A.trys.push([3,10,11,12]),g=eM(h,en)[Symbol.iterator](),A.label=4;case 4:if((s=(v=g.next()).done)||(b=v.value,l))return[3,9];if(m0)||!(m>b.time.offset+b.time.duration))&&!x)return[3,8];if(!b.main)return[3,7];return d(),[4,a()];case 6:return A.sent(),[2,{v:void 0}];case 7:b.destroy(),b.expired=!0,A.label=8;case 8:return s=!0,[3,4];case 9:return[3,12];case 10:return E=A.sent(),_=!0,y=E,[3,12];case 11:try{s||null==g.return||g.return()}finally{if(_)throw y}return[7];case 12:var I,k,C;if(l)return[2,{v:void 0}];return!1!==eM(h,eu).audio&&(r.flat().every(function(t){return 0===t.length})?t.encodeAudio((I=m,C=Math.floor(33e3*(k=r$.sampleRate)/1e6),new AudioData({timestamp:I,numberOfChannels:r$.channelCount,numberOfFrames:C,sampleRate:k,format:"f32-planar",data:new Float32Array(2*C)}))):(U=rY(r),t.encodeAudio(new AudioData({timestamp:m,numberOfChannels:r$.channelCount,numberOfFrames:U.length/r$.channelCount,sampleRate:r$.sampleRate,format:"f32-planar",data:U})))),eM(h,el)&&(T=new VideoFrame(eM(h,es),{duration:33e3,timestamp:m}),t.encodeVideo(T,{keyFrame:n%150==0}),p.resetTransform(),p.clearRect(0,0,o,f),n+=1),m+=33e3,[4,i8(t.getEncodeQueueSize)];case 13:return A.sent(),[2]}})},n=0,o=(s=eM(h,es)).width,f=s.height,p=eM(h,ea),m=0,y.label=1;case 1:return[5,(0,eP._)(r())];case 2:if(_=y.sent(),"object"===(0,ek._)(_))return[2,_.v];y.label=3;case 3:return[3,1];case 4:return[2]}})})().catch(function(t){c=t,eM(n,er).error(t),d(),o(t)});var f=setInterval(function(){s(u)},500),d=function(){l||(l=!0,clearInterval(f),eM(n,en).forEach(function(t){return t.destroy()}))};return d}},{"@swc/helpers/_/_assert_this_initialized":"jgeid","@swc/helpers/_/_async_iterator":"kdyGG","@swc/helpers/_/_async_to_generator":"eONSn","@swc/helpers/_/_class_call_check":"9iJMm","@swc/helpers/_/_create_class":"21IOT","@swc/helpers/_/_define_property":"3NGsL","@swc/helpers/_/_get":"hMhPd","@swc/helpers/_/_get_prototype_of":"dAKgy","@swc/helpers/_/_inherits":"3pfgY","@swc/helpers/_/_object_spread":"9agdF","@swc/helpers/_/_object_spread_props":"gJNH2","@swc/helpers/_/_possible_constructor_return":"iVdhB","@swc/helpers/_/_sliced_to_array":"uVQht","@swc/helpers/_/_to_consumable_array":"iwLF0","@swc/helpers/_/_type_of":"felZi","@swc/helpers/_/_create_super":"86fte","@swc/helpers/_/_ts_generator":"6Xyd0","@swc/helpers/_/_ts_values":"1Y0br","718a311db185ef08":"gp9kd","@parcel/transformer-js/src/esmodule-helpers.js":"iWrD0"}],jgeid:[function(t,e,r){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function s(t){if(void 0===t)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return t}n.defineInteropFlag(r),n.export(r,"_",function(){return s})},{"@parcel/transformer-js/src/esmodule-helpers.js":"iWrD0"}],kdyGG:[function(t,e,r){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function s(t){var e,r,n,s=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,n=Symbol.iterator);s--;){if(r&&null!=(e=t[r]))return e.call(t);if(n&&null!=(e=t[n]))return new a(e.call(t));r="@@asyncIterator",n="@@iterator"}throw TypeError("Object is not async iterable")}function a(t){function e(t){if(Object(t)!==t)return Promise.reject(TypeError(t+" is not an object."));var e=t.done;return Promise.resolve(t.value).then(function(t){return{value:t,done:e}})}return(a=function(t){this.s=t,this.n=t.next}).prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(t){var r=this.s.return;return void 0===r?Promise.resolve({value:t,done:!0}):e(r.apply(this.s,arguments))},throw:function(t){var r=this.s.return;return void 0===r?Promise.reject(t):e(r.apply(this.s,arguments))}},new a(t)}n.defineInteropFlag(r),n.export(r,"_",function(){return s})},{"@parcel/transformer-js/src/esmodule-helpers.js":"iWrD0"}],"9iJMm":[function(t,e,r){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function s(t,e){if(!(t instanceof e))throw TypeError("Cannot call a class as a function")}n.defineInteropFlag(r),n.export(r,"_",function(){return s})},{"@parcel/transformer-js/src/esmodule-helpers.js":"iWrD0"}],"21IOT":[function(t,e,r){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");function s(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=Array(e);r* @license MIT */var n=t("@swc/helpers/_/_type_of"),s=t("9c62938f1dccc73c"),a=t("aceacb6a4531a9d2"),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;function u(t){if(t>2147483647)throw RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,l.prototype),e}function l(t,e,r){if("number"==typeof t){if("string"==typeof e)throw TypeError('The "string" argument must be of type string. Received type number');return f(t)}return c(t,e,r)}function c(t,e,r){if("string"==typeof t)return function(t,e){if(("string"!=typeof e||""===e)&&(e="utf8"),!l.isEncoding(e))throw TypeError("Unknown encoding: "+e);var r=0|_(t,e),n=u(r),s=n.write(t,e);return s!==r&&(n=n.slice(0,s)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(B(t,Uint8Array)){var e=new Uint8Array(t);return p(e.buffer,e.byteOffset,e.byteLength)}return d(t)}(t);if(null==t)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+(void 0===t?"undefined":(0,n._)(t)));if(B(t,ArrayBuffer)||t&&B(t.buffer,ArrayBuffer)||"undefined"!=typeof SharedArrayBuffer&&(B(t,SharedArrayBuffer)||t&&B(t.buffer,SharedArrayBuffer)))return p(t,e,r);if("number"==typeof t)throw TypeError('The "value" argument must not be of type number. Received type number');var s=t.valueOf&&t.valueOf();if(null!=s&&s!==t)return l.from(s,e,r);var a=function(t){if(l.isBuffer(t)){var e,r=0|m(t.length),n=u(r);return 0===n.length||t.copy(n,0,0,r),n}return void 0!==t.length?"number"!=typeof t.length||(e=t.length)!=e?u(0):d(t):"Buffer"===t.type&&Array.isArray(t.data)?d(t.data):void 0}(t);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return l.from(t[Symbol.toPrimitive]("string"),e,r);throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+(void 0===t?"undefined":(0,n._)(t)))}function h(t){if("number"!=typeof t)throw TypeError('"size" argument must be of type number');if(t<0)throw RangeError('The value "'+t+'" is invalid for option "size"')}function f(t){return h(t),u(t<0?0:0|m(t))}function d(t){for(var e=t.length<0?0:0|m(t.length),r=u(e),n=0;n=2147483647)throw RangeError("Attempt to allocate Buffer larger than maximum size: 0x7fffffff bytes");return 0|t}function _(t,e){if(l.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||B(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+(void 0===t?"undefined":(0,n._)(t)));var r=t.length,s=arguments.length>2&&!0===arguments[2];if(!s&&0===r)return 0;for(var a=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return I(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return k(t).length;default:if(a)return s?-1:I(t).length;e=(""+e).toLowerCase(),a=!0}}function y(t,e,r){var n,a,o=!1;if((void 0===e||e<0)&&(e=0),e>this.length||((void 0===r||r>this.length)&&(r=this.length),r<=0||(r>>>=0)<=(e>>>=0)))return"";for(t||(t="utf8");;)switch(t){case"hex":return function(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var s="",a=e;a2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),(a=r=+r)!=a&&(r=s?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(s)return -1;r=t.length-1}else if(r<0){if(!s)return -1;r=0}if("string"==typeof e&&(e=l.from(e,n)),l.isBuffer(e))return 0===e.length?-1:b(t,e,r,n,s);if("number"==typeof e)return(e&=255,"function"==typeof Uint8Array.prototype.indexOf)?s?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):b(t,[e],r,n,s);throw TypeError("val must be string, number or Buffer")}function b(t,e,r,n,s){var a,o=1,u=t.length,l=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return -1;o=2,u/=2,l/=2,r/=2}function c(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(s){var h=-1;for(a=r;au&&(r=u-l),a=r;a>=0;a--){for(var f=!0,d=0;d239?4:c>223?3:c>191?2:1;if(s+f<=r)switch(f){case 1:c<128&&(h=c);break;case 2:(192&(a=t[s+1]))==128&&(l=(31&c)<<6|63&a)>127&&(h=l);break;case 3:a=t[s+1],o=t[s+2],(192&a)==128&&(192&o)==128&&(l=(15&c)<<12|(63&a)<<6|63&o)>2047&&(l<55296||l>57343)&&(h=l);break;case 4:a=t[s+1],o=t[s+2],u=t[s+3],(192&a)==128&&(192&o)==128&&(192&u)==128&&(l=(15&c)<<18|(63&a)<<12|(63&o)<<6|63&u)>65535&&l<1114112&&(h=l)}null===h?(h=65533,f=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),s+=f}return function(t){var e=t.length;if(e<=4096)return String.fromCharCode.apply(String,t);for(var r="",n=0;nr)throw RangeError("Trying to access beyond buffer length")}function x(t,e,r,n,s,a){if(!l.isBuffer(t))throw TypeError('"buffer" argument must be a Buffer instance');if(e>s||et.length)throw RangeError("Index out of range")}function E(t,e,r,n,s,a){if(r+n>t.length||r<0)throw RangeError("Index out of range")}function U(t,e,r,n,s){return e=+e,r>>>=0,s||E(t,e,r,4,34028234663852886e22,-34028234663852886e22),a.write(t,e,r,n,23,4),r+4}function T(t,e,r,n,s){return e=+e,r>>>=0,s||E(t,e,r,8,17976931348623157e292,-17976931348623157e292),a.write(t,e,r,n,52,8),r+8}r.Buffer=l,r.SlowBuffer=function(t){return+t!=t&&(t=0),l.alloc(+t)},r.INSPECT_MAX_BYTES=50,r.kMaxLength=2147483647,l.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),l.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(l.prototype,"parent",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,"offset",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}}),l.poolSize=8192,l.from=function(t,e,r){return c(t,e,r)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array),l.alloc=function(t,e,r){return(h(t),t<=0)?u(t):void 0!==e?"string"==typeof r?u(t).fill(e,r):u(t).fill(e):u(t)},l.allocUnsafe=function(t){return f(t)},l.allocUnsafeSlow=function(t){return f(t)},l.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==l.prototype},l.compare=function(t,e){if(B(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),B(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(t)||!l.isBuffer(e))throw TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var r=t.length,n=e.length,s=0,a=Math.min(r,n);sn.length?l.from(a).copy(n,s):Uint8Array.prototype.set.call(n,a,s);else if(l.isBuffer(a))a.copy(n,s);else throw TypeError('"list" argument must be an Array of Buffers');s+=a.length}return n},l.byteLength=_,l.prototype._isBuffer=!0,l.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;ee&&(t+=" ... "),""},o&&(l.prototype[o]=l.prototype.inspect),l.prototype.compare=function(t,e,r,s,a){if(B(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(t))throw TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+(void 0===t?"undefined":(0,n._)(t)));if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===s&&(s=0),void 0===a&&(a=this.length),e<0||r>t.length||s<0||a>this.length)throw RangeError("out of range index");if(s>=a&&e>=r)return 0;if(s>=a)return -1;if(e>=r)return 1;if(e>>>=0,r>>>=0,s>>>=0,a>>>=0,this===t)return 0;for(var o=a-s,u=r-e,c=Math.min(o,u),h=this.slice(s,a),f=t.slice(e,r),d=0;d>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0);else throw Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var s,a,o,u,l,c,h,f,d=this.length-e;if((void 0===r||r>d)&&(r=d),t.length>0&&(r<0||e<0)||e>this.length)throw RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var p=!1;;)switch(n){case"hex":return function(t,e,r,n){r=Number(r)||0;var s=t.length-r;n?(n=Number(n))>s&&(n=s):n=s;var a=e.length;n>a/2&&(n=a/2);for(var o=0;o>8,s.push(r%256),s.push(n);return s}(t,this.length-h),this,h,f);default:if(p)throw TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),p=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}},l.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||S(t,e,this.length);for(var n=this[t],s=1,a=0;++a>>=0,e>>>=0,r||S(t,e,this.length);for(var n=this[t+--e],s=1;e>0&&(s*=256);)n+=this[t+--e]*s;return n},l.prototype.readUint8=l.prototype.readUInt8=function(t,e){return t>>>=0,e||S(t,1,this.length),this[t]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(t,e){return t>>>=0,e||S(t,2,this.length),this[t]|this[t+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(t,e){return t>>>=0,e||S(t,2,this.length),this[t]<<8|this[t+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(t,e){return t>>>=0,e||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(t,e){return t>>>=0,e||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},l.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||S(t,e,this.length);for(var n=this[t],s=1,a=0;++a=(s*=128)&&(n-=Math.pow(2,8*e)),n},l.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||S(t,e,this.length);for(var n=e,s=1,a=this[t+--n];n>0&&(s*=256);)a+=this[t+--n]*s;return a>=(s*=128)&&(a-=Math.pow(2,8*e)),a},l.prototype.readInt8=function(t,e){return(t>>>=0,e||S(t,1,this.length),128&this[t])?-((255-this[t]+1)*1):this[t]},l.prototype.readInt16LE=function(t,e){t>>>=0,e||S(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt16BE=function(t,e){t>>>=0,e||S(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},l.prototype.readInt32LE=function(t,e){return t>>>=0,e||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},l.prototype.readInt32BE=function(t,e){return t>>>=0,e||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},l.prototype.readFloatLE=function(t,e){return t>>>=0,e||S(t,4,this.length),a.read(this,t,!0,23,4)},l.prototype.readFloatBE=function(t,e){return t>>>=0,e||S(t,4,this.length),a.read(this,t,!1,23,4)},l.prototype.readDoubleLE=function(t,e){return t>>>=0,e||S(t,8,this.length),a.read(this,t,!0,52,8)},l.prototype.readDoubleBE=function(t,e){return t>>>=0,e||S(t,8,this.length),a.read(this,t,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e>>>=0,r>>>=0,!n){var s=Math.pow(2,8*r)-1;x(this,t,e,r,s,0)}var a=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,!n){var s=Math.pow(2,8*r)-1;x(this,t,e,r,s,0)}var a=r-1,o=1;for(this[e+a]=255&t;--a>=0&&(o*=256);)this[e+a]=t/o&255;return e+r},l.prototype.writeUint8=l.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||x(this,t,e,1,255,0),this[e]=255&t,e+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||x(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||x(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||x(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||x(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},l.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var s=Math.pow(2,8*r-1);x(this,t,e,r,s-1,-s)}var a=0,o=1,u=0;for(this[e]=255&t;++a>0)-u&255;return e+r},l.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var s=Math.pow(2,8*r-1);x(this,t,e,r,s-1,-s)}var a=r-1,o=1,u=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===u&&0!==this[e+a+1]&&(u=1),this[e+a]=(t/o>>0)-u&255;return e+r},l.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||x(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},l.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||x(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},l.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||x(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},l.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||x(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},l.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||x(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},l.prototype.writeFloatLE=function(t,e,r){return U(this,t,e,!0,r)},l.prototype.writeFloatBE=function(t,e,r){return U(this,t,e,!1,r)},l.prototype.writeDoubleLE=function(t,e,r){return T(this,t,e,!0,r)},l.prototype.writeDoubleBE=function(t,e,r){return T(this,t,e,!1,r)},l.prototype.copy=function(t,e,r,n){if(!l.isBuffer(t))throw TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw RangeError("Index out of range");if(n<0)throw RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(s=e;s55295&&r<57344){if(!s){if(r>56319||o+1===n){(e-=3)>-1&&a.push(239,191,189);continue}s=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),s=r;continue}r=(s-55296<<10|r-56320)+65536}else s&&(e-=3)>-1&&a.push(239,191,189);if(s=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else if(r<1114112){if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}else throw Error("Invalid code point")}return a}function k(t){return s.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(A,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function C(t,e,r,n){for(var s=0;s=e.length)&&!(s>=t.length);++s)e[s+r]=t[s];return s}function B(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}var P=function(){for(var t="0123456789abcdef",e=Array(256),r=0;r<16;++r)for(var n=16*r,s=0;s<16;++s)e[n+s]=t[r]+t[s];return e}()},{"@swc/helpers/_/_type_of":"felZi","9c62938f1dccc73c":"8CZvr",aceacb6a4531a9d2:"kxjGq"}],"8CZvr":[function(t,e,r){r.byteLength=function(t){var e=c(t),r=e[0],n=e[1];return(r+n)*3/4-n},r.toByteArray=function(t){var e,r,n=c(t),o=n[0],u=n[1],l=new a((o+u)*3/4-u),h=0,f=u>0?o-4:o;for(r=0;r>16&255,l[h++]=e>>8&255,l[h++]=255&e;return 2===u&&(e=s[t.charCodeAt(r)]<<2|s[t.charCodeAt(r+1)]>>4,l[h++]=255&e),1===u&&(e=s[t.charCodeAt(r)]<<10|s[t.charCodeAt(r+1)]<<4|s[t.charCodeAt(r+2)]>>2,l[h++]=e>>8&255,l[h++]=255&e),l},r.fromByteArray=function(t){for(var e,r=t.length,s=r%3,a=[],o=0,u=r-s;o>18&63]+n[s>>12&63]+n[s>>6&63]+n[63&s]);return a.join("")}(t,o,o+16383>u?u:o+16383));return 1===s?a.push(n[(e=t[r-1])>>2]+n[e<<4&63]+"=="):2===s&&a.push(n[(e=(t[r-2]<<8)+t[r-1])>>10]+n[e>>4&63]+n[e<<2&63]+"="),a.join("")};for(var n=[],s=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=0,l=o.length;u0)throw Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");-1===r&&(r=e);var n=r===e?0:4-r%4;return[r,n]}s["-".charCodeAt(0)]=62,s["_".charCodeAt(0)]=63},{}],kxjGq:[function(t,e,r){/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh*/r.read=function(t,e,r,n,s){var a,o,u=8*s-n-1,l=(1<>1,h=-7,f=r?s-1:0,d=r?-1:1,p=t[e+f];for(f+=d,a=p&(1<<-h)-1,p>>=-h,h+=u;h>0;a=256*a+t[e+f],f+=d,h-=8);for(o=a&(1<<-h)-1,a>>=-h,h+=n;h>0;o=256*o+t[e+f],f+=d,h-=8);if(0===a)a=1-c;else{if(a===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),a-=c}return(p?-1:1)*o*Math.pow(2,a-n)},r.write=function(t,e,r,n,s,a){var o,u,l,c=8*a-s-1,h=(1<>1,d=23===s?5960464477539062e-23:0,p=n?0:a-1,m=n?1:-1,_=e<0||0===e&&1/e<0?1:0;for(isNaN(e=Math.abs(e))||e===1/0?(u=isNaN(e)?1:0,o=h):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),o+f>=1?e+=d/l:e+=d*Math.pow(2,1-f),e*l>=2&&(o++,l/=2),o+f>=h?(u=0,o=h):o+f>=1?(u=(e*l-1)*Math.pow(2,s),o+=f):(u=e*Math.pow(2,f-1)*Math.pow(2,s),o=0));s>=8;t[r+p]=255&u,p+=m,u/=256,s-=8);for(o=o<0;t[r+p]=255&o,p+=m,o/=256,c-=8);t[r+p-m]|=128*_}},{}]},["c4SNP"],"c4SNP","parcelRequire4dc0"); \ No newline at end of file diff --git a/docs/uncompiled/artplayer-proxy-webav/index.js b/docs/uncompiled/artplayer-proxy-webav/index.js index 598386aac..b8e99414b 100644 --- a/docs/uncompiled/artplayer-proxy-webav/index.js +++ b/docs/uncompiled/artplayer-proxy-webav/index.js @@ -297,6 +297,11 @@ function artplayerProxyWebAV() { }); } async function init() { + const isSupported = await (0, _avCliper.Combinator).isSupported(); + if (!isSupported) { + art.notice.show = "WebAV is not supported"; + throw new Error("WebAV is not supported"); + } stop(); reset(); if (clip) { diff --git a/docs/uncompiled/artplayer-proxy-webav/index.js.map b/docs/uncompiled/artplayer-proxy-webav/index.js.map index 449e10bba..382b868bc 100644 --- a/docs/uncompiled/artplayer-proxy-webav/index.js.map +++ b/docs/uncompiled/artplayer-proxy-webav/index.js.map @@ -1 +1 @@ -{"mappings":"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AAS;YACjB,OAAO;gBACH;gBACA,MAAM,OAAO,GAAG;gBAChB,MAAM,MAAM,GAAG;gBACf,IAAI,IAAI,CAAC,eAAe;oBAAE,MAAM;gBAAQ;YAC5C;QACJ;QAEA,IAAI,EAAE,CAAC,WAAW;YACd;YACA,IAAI,MACA,KAAK,OAAO;QAEpB;QAEA,IAAI,EAAE,CAAC,UAAU;QAEjB,OAAO;IACX;AACJ;AAEA,IAAI,OAAO,WAAW,aAClB,MAAM,CAAC,sBAAsB,GAAG;;;AC1WpC,QAAQ,cAAc,GAAG,SAAU,CAAC;IAClC,OAAO,KAAK,EAAE,UAAU,GAAG,IAAI;QAAC,SAAS;IAAC;AAC5C;AAEA,QAAQ,iBAAiB,GAAG,SAAU,CAAC;IACrC,OAAO,cAAc,CAAC,GAAG,cAAc;QAAC,OAAO;IAAI;AACrD;AAEA,QAAQ,SAAS,GAAG,SAAU,MAAM,EAAE,IAAI;IACxC,OAAO,IAAI,CAAC,QAAQ,OAAO,CAAC,SAAU,GAAG;QACvC,IACE,QAAQ,aACR,QAAQ,gBACR,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,MAE3C;QAGF,OAAO,cAAc,CAAC,MAAM,KAAK;YAC/B,YAAY;YACZ,KAAK;gBACH,OAAO,MAAM,CAAC,IAAI;YACpB;QACF;IACF;IAEA,OAAO;AACT;AAEA,QAAQ,MAAM,GAAG,SAAU,IAAI,EAAE,QAAQ,EAAE,GAAG;IAC5C,OAAO,cAAc,CAAC,MAAM,UAAU;QACpC,YAAY;QACZ,KAAK;IACP;AACF;;;;;A,+C;A,gD;A,wD;A,wD;A,+C;A,6C;A,yC;A,6C;A,qD;A,qD;A,0C;A,mD;A,2D;A,mD;A,oD;A,qD;A,wD;A,wD;A,qD;A,8C;A,qD;A,+C;A,4D;A,0D;A,mD;A,iD;A,qD;A,sD;A,8C;A,+C;A,mD;A,yD;A,2D;A,iD;;;A,I,K,O,c;A,I,K,C;I,M,U;A;A,I,K,C,G,G,I,K,I,G,G,G;Q,Y,C;Q,c,C;Q,U,C;Q,O;I,K,C,C,E,G;A,I,I,C,G,G,I,G,G,O,K,W,I,K,G,I,K,C,G,G,I,E,G,C,M,G,Y;A,I,I,C,G,G,I,C,G,G,G,4B,I,E,I,C,K,E,G,C,E,G,I,C,G,G,I,E,G,C,K,G,uD,a,U,E,G,C,K,E,G,C,G,I,I,C,G,G,G,I,C,G,G,G,2B,I,E,I,C,G,K,E,G,C,G,I,C,G,I,C,G,G,I,C,G,G,G,0B,C;AE3BO,SAASA,GAASC,CAAAA;IAChB,OAAA,SAAS,aAAA,CAAcA;AAChC;AAQgB,SAAAC,GAAcC,CAAAA,EAAaC,CAAAA;IACnC,MAAAC,IAAML,GAAS;IACjBK,EAAA,KAAA,CAAM,OAAA,GAAU,CAAA,WAAA,EAAcD,EAAO,sCAAA,CAAA,EACzCC,EAAI,WAAA,GAAcF,GACT,SAAA,IAAA,CAAK,WAAA,CAAYE;IAE1B,MAAM,EAAE,OAAAC,CAAAA,EAAO,QAAAC,CAAAA,EAAO,GAAIF,EAAI,qBAAA;IAE9BA,EAAI,MAAA,IACJA,EAAI,KAAA,CAAM,UAAA,GAAa;IAEjB,MAAAG,IAAM,IAAI;IAChBA,EAAI,KAAA,GAAQF,GACZE,EAAI,MAAA,GAASD;IACb,MAAME,IAAS,CAAf;mDAAe,EACoCH,EAAK,UAAA,EAAaC,EADtD;;kDAC4D,EAEzBF,EAAI,SAAS,CAFY;;;EAEZ,CAAA,CAI5D,OAAA,CAAQ,OAAO,IACf,OAAA,CAAQ,MAAM;IAEb,OAAAG,EAAA,GAAA,GAAM,CAAA,iCAAA,EAAoCC,EAAM,CAAA,EAC7CD;AACT;AAesB,eAAAE,GACpBP,CAAAA,EACAC,CAAAA;IAEM,MAAAO,IAAQT,GAAcC,GAAKC;IAC3B,MAAA,IAAI,QAAQ,CAACQ;QACjBD,EAAM,MAAA,GAASC;IAAA;IAEjB,MAAMC,IAAM,IAAI,gBAAgBF,EAAM,KAAA,EAAOA,EAAM,MAAM,GACnDG,IAAMD,EAAI,UAAA,CAAW;IAC3B,OAAAC,KAAA,QAAAA,EAAK,SAAA,CAAUH,GAAO,GAAG,GAAGA,EAAM,KAAA,EAAOA,EAAM,MAAA,GACxC,MAAM,kBAAkBE;AACjC;ACtEA,IAAIE,KAAI,CAACC;IACP,MAAM,UAAUA;AAClB,GACIC,KAAI,CAACD,GAAGE,GAAGC,IAAMD,EAAE,GAAA,CAAIF,MAAMD,GAAE,YAAYI,IAC3CC,IAAI,CAACJ,GAAGE,GAAGC,IAAOF,CAAAA,GAAED,GAAGE,GAAG,4BAA4BC,IAAIA,EAAE,IAAA,CAAKH,KAAKE,EAAE,GAAA,CAAIF,EAAC,GAAIK,IAAI,CAACL,GAAGE,GAAGC,IAAMD,EAAE,GAAA,CAAIF,KAAKD,GAAE,uDAAuDG,aAAa,UAAUA,EAAE,GAAA,CAAIF,KAAKE,EAAE,GAAA,CAAIF,GAAGG,IAAIG,IAAI,CAACN,GAAGE,GAAGC,GAAGI,IAAON,CAAAA,GAAED,GAAGE,GAAG,2BAA8CA,EAAE,GAAA,CAAIF,GAAGG,IAAIA,CAAAA;AACjT,MAAMK,KAAI,onEAAonEC,KAAI,CAACT,IAAM,WAAW,IAAA,CAAK,KAAKA,IAAI,CAACE,IAAMA,EAAE,UAAA,CAAW,KAAKQ,KAAI,OAAO,OAAO,OAAO,KAAK,IAAA,IAAQ,IAAI,KAAK;IAACD,GAAED;CAAE,EAAG;IAAE,MAAM;AAAiC;AAC3xE,SAASG,GAAEX,CAAAA;IACT,IAAIE;IACJ,IAAI;QACF,IAAIA,IAAIQ,MAAAA,AAAM,CAAA,KAAK,GAAA,IAAO,KAAK,SAAA,AAAA,EAAW,eAAA,CAAgBA,KAAI,CAACR,GAAG,MAAM;QACxE,MAAMC,IAAI,IAAI,OAAOD,GAAG;YACtB,MAAMF,KAAK,OAAO,KAAA,IAASA,EAAE,IADP;QAE5B;QACI,OAAOG,EAAE,gBAAA,CAAiB,SAAS;YAChC,CAAA,KAAK,GAAA,IAAO,KAAK,SAAA,AAAA,EAAW,eAAA,CAAgBD;QAC9C,IAAGC;IACR,EAAA,OAAU;QACN,OAAO,IAAI,OACT,iCAAiCK,IACjC;YACE,MAAMR,KAAK,OAAO,KAAA,IAASA,EAAE,IAD/B;QAEC;IAEP,SAAY;QACRE,KAAAA,AAAM,CAAA,KAAK,GAAA,IAAO,KAAK,SAAA,AAAA,EAAW,eAAA,CAAgBA;IACnD;AACH;AACA,eAAeU,GAAEZ,CAAAA,EAAGE,CAAAA,EAAGC,CAAAA;IACrB,MAAMI,IAAIM;IACV,OAAO,MAAMN,EAAE,YAAY;QAAE,QAAQP;QAAG,UAAUE;QAAG,MAAMC;IAAC,IAAK;QAC/D,MAAM,OAAOW,GAAGC,IAAM,MAAMR,EAAE,QAAQ;gBACpC,QAAQP;gBACR,QAAQc;gBACR,MAAMC;YACZ;QACI,OAAO,OAAOD,GAAGC,IAAM,MAAMR,EAC3B,SACA;gBACE,QAAQP;gBACR,MAAMc;gBACN,MAAMC;YACP,GACD;gBAAC,YAAY,MAAA,CAAOD,KAAKA,EAAE,MAAA,GAASA;aADnC;QAGH,OAAO,UAAY,MAAMP,EAAE,SAAS;gBAClC,QAAQP;YACd;QACI,UAAU,OAAOc,IAAM,MAAMP,EAAE,YAAY;gBACzC,QAAQP;gBACR,SAASc;YACf;QACI,SAAS,UAAY,MAAMP,EAAE,WAAW;gBACtC,QAAQP;YACd;QACI,OAAO,UAAY,MAAMO,EAAE,SAAS;gBAClC,QAAQP;YACd;IACA;AACA;AACA,MAAMgB,KAAI,EAAV;AACA,IAAIC,KAAI;AACR,SAASJ;IACP,IAAIG,GAAE,MAAA,GAAS,GAAG;QAChB,MAAMd,IAAIF;QACV,OAAOgB,GAAE,IAAA,CAAKd,IAAIA;IACtB,OAAS;QACL,MAAMA,IAAIc,EAAAA,CAAEC,GAAZ;QACA,OAAOA,KAAAA,AAAKA,CAAAA,KAAI,CAAA,IAAKD,GAAE,MAAA,EAAQd;IAChC;IACD,SAASF;QACP,MAAME,IAAI,IAAIS;QACd,IAAIR,IAAI,GAAGI,IAAI,CAAf;QACA,OAAOL,EAAE,SAAA,GAAY,CAAC,EACpB,MAAMY,CADc,EAE1B;YACM,IAAIC,GAAGG;YACPJ,EAAE,OAAA,KAAY,aAAA,AAAcC,CAAAA,IAAIR,CAAAA,CAAEO,EAAE,IAAI,CAAA,AAAA,KAAM,QAAQC,EAAE,OAAA,CAAQD,EAAE,SAAS,IAAIA,EAAE,OAAA,KAAY,gBAAA,CAAA,AAAkBI,CAAAA,IAAIX,CAAAA,CAAEO,EAAE,IAAI,CAAA,AAAA,KAAM,QAAQI,EAAE,MAAA,CAAO,MAAMJ,EAAE,MAAM,EAAC,GAAI,OAAOP,CAAAA,CAAEO,EAAE,IAAI,CAApL;QACD,GAAE,eAAeC,CAAAA,EAAG,CAAA,EAAG,IAAI,EAAA;YAC1BZ,KAAK;YACL,MAAMgB,IAAI,IAAI,QAAQ,CAACC,GAAGC;gBACxBd,CAAAA,CAAEJ,EAAC,GAAI;oBAAE,SAASiB;oBAAG,QAAQC;gBAA7B;YACR;YACM,OAAOnB,EAAE,WAAT,CACE;gBACE,MAAMC;gBACN,SAASY;gBACT,MAAM;YACP,GACD,IACCI;QACT;IACG;AACH;AACA,SAASG,GAAEtB,CAAAA;IACT,IAAIA,MAAM,KAAK,OAAO;QAAE,QAAQ;QAAM,MAAM;IAA5C;IACA,MAAME,IAAIF,EAAE,KAAA,CAAM,KAAK,MAAA,CAAO,CAACc,IAAMA,EAAE,MAAA,GAAS;IAChD,IAAIZ,EAAE,MAAA,KAAW,GAAG,MAAM,MAAM;IAChC,MAAMC,IAAID,CAAAA,CAAEA,EAAE,MAAA,GAAS,EAAC,EAAGK,IAAI,MAAML,EAAE,KAAA,CAAM,GAAG,IAAI,IAAA,CAAK;IACzD,OAAO;QAAE,MAAMC;QAAG,QAAQI;IAAC;AAC7B;AACA,eAAegB,GAAEvB,CAAAA,EAAGE,CAAAA;IAClB,MAAM,EAAE,QAAQC,CAAAA,EAAG,MAAMI,CAAAA,EAAAA,GAAMe,GAAEtB;IACjC,IAAIG,KAAK,MAAM,OAAO,MAAM,UAAU,OAAA,CAAQ,YAA9C;IACA,MAAMW,IAAIX,EAAE,KAAA,CAAM,KAAK,MAAA,CAAO,CAACY,IAAMA,EAAE,MAAA,GAAS;IAChD,IAAI;QACF,IAAIA,IAAI,MAAM,UAAU,OAAA,CAAQ,YAAA;QAChC,KAAA,MAAWG,KAAKJ,EACdC,IAAI,MAAMA,EAAE,kBAAA,CAAmBG,GAAG;YAChC,QAAQhB,EAAE,MADsB;QAExC;QACI,OAAOA,EAAE,MAAA,GAAS,MAAMa,EAAE,aAAA,CAAcR,GAAG;YACzC,QAAQL,EAAE,MAD+B;QAE1C,KAAI,MAAMa,EAAE,kBAAA,CAAmBR,GAAG;YACjC,QAAQL,EAAE,MADuB;QAEvC;IACG,EAAA,OAAQa,GAAG;QACV,IAAIA,EAAE,IAAA,KAAS,iBACb,OAAO;QACT,MAAMA;IACP;AACH;AACA,eAAeS,GAAExB,CAAAA;IACf,MAAM,EAAE,QAAQE,CAAAA,EAAG,MAAMC,CAAAA,EAAAA,GAAMmB,GAAEtB;IACjC,IAAIE,KAAK,MAAM;QACb,MAAMY,IAAI,MAAM,UAAU,OAAA,CAAQ,YAAA;QAClC,WAAA,MAAiBC,KAAKD,EAAE,IAAA,GACtB,MAAMA,EAAE,WAAA,CAAYC,GAAG;YAAE,WAAW,CAAA;QAAE;QACxC;IACD;IACD,MAAMR,IAAI,MAAMgB,GAAErB,GAAG;QACnB,QAAQ,CADW;QAEnB,QAAQ,CADA;IAEZ;IACEK,KAAK,QAAQ,MAAMA,EAAE,WAAA,CAAYJ,GAAG;QAAE,WAAW,CAAA;IAAE;AACrD;AACA,SAASsB,GAAEzB,CAAAA,EAAGE,CAAAA;IACZ,OAAO,CAAA,EAAGF,EAAC,CAAA,EAAIE,EAAC,CAAA,CAAG,OAAA,CAAQ,MAAM;AACnC;AACA,SAASwB,GAAE1B,CAAAA;IACT,OAAO,IAAI2B,GAAE3B;AACf;AACA,IAAI4B,IAAGC,IAAGC;AACV,MAAMH;IACJ,YAAYzB,CAAAA,CAAG;QACbG,EAAE,IAAA,EAAMuB,KACRvB,EAAE,IAAA,EAAMwB,KACRxB,EAAE,IAAA,EAAMyB,KACRxB,EAAE,IAAA,EAAMsB,IAAG1B;QACX,MAAM,EAAE,QAAQC,CAAAA,EAAG,MAAMI,CAAAA,EAAAA,GAAMe,GAAEpB;QACjCI,EAAE,IAAA,EAAMuB,IAAGtB,IAAID,EAAE,IAAA,EAAMwB,IAAG3B;IAC3B;IACD,IAAI,OAAO;QACT,OAAO;IACR;IACD,IAAI,OAAO;QACT,OAAOC,EAAE,IAAA,EAAMyB;IAChB;IACD,IAAI,OAAO;QACT,OAAOzB,EAAE,IAAA,EAAMwB;IAChB;IACD,IAAI,SAAS;QACX,OAAOxB,EAAE,IAAA,EAAM0B,OAAM,OAAO,OAAOJ,GAAEtB,EAAE,IAAA,EAAM0B;IAC9C;IAAA;;;GAAA,GAKD,MAAM,SAAS;QACb,OAAO,MAAMP,GAAEnB,EAAE,IAAA,EAAMwB,KAAI;YACzB,QAAQ,CADiB;YAEzB,QAAQ,CADA;QAET,IAAGF,GAAEtB,EAAE,IAAA,EAAMwB;IACf;IAAA;;;GAAA,GAKD,MAAM,SAAS;QACb,OAAO,MAAML,GAAEnB,EAAE,IAAA,EAAMwB,KAAI;YACzB,QAAQ,CADiB;YAEzB,QAAQ,CADA;QAET,cAAa;IACf;IAAA;;;GAAA,GAKD,MAAM,SAAS;QACb,KAAA,MAAW1B,KAAK,CAAA,MAAM,IAAA,CAAK,QAAA,EAAU,EACnC,IAAI;YACF,MAAMA,EAAE,MAAR;QACD,EAAA,OAAQC,GAAG;YACV,QAAQ,IAAA,CAAKA;QACd;QACH,IAAI;YACF,MAAMqB,GAAEpB,EAAE,IAAA,EAAMwB;QACjB,EAAA,OAAQ1B,GAAG;YACV,QAAQ,IAAA,CAAKA;QACd;IACF;IAAA;;;GAAA,GAKD,MAAM,WAAW;QACf,MAAMA,IAAI,MAAMqB,GAAEnB,EAAE,IAAA,EAAMwB,KAAI;YAC5B,QAAQ,CADoB;YAE5B,QAAQ,CADA;QAEd;QACI,IAAI1B,KAAK,MAAM,OAAO,EAAtB;QACA,MAAMC,IAAI,EAAV;QACA,WAAA,MAAiBI,KAAKL,EAAE,MAAA,GACtBC,EAAE,IAAA,CAAA,AAAMI,CAAAA,EAAE,IAAA,KAAS,SAASwB,KAAIL,EAAAA,EAAGD,GAAErB,EAAE,IAAA,EAAMwB,KAAIrB,EAAE,IAAI;QACzD,OAAOJ;IACR;IAAA;;;GAAA,GAKD,MAAM,OAAOD,CAAAA,EAAG;QACd,IAAI,CAAC,MAAM,IAAA,CAAK,MAAA,IACd,MAAM,MAAM,CAAA,IAAA,EAAO,IAAA,CAAK,IAAI,CAAA,WAAA,CAAa;QAC3C,MAAMC,IAAI,MAAMD,EAAE,MAAA,KAAWwB,GAAED,GAAEvB,EAAE,IAAA,EAAM,IAAA,CAAK,IAAI,KAAKA;QACvD,OAAO,MAAMC,EAAE,MAAA,IAAU,MAAM,QAAQ,GAAA,CAAA,AAAK,CAAA,MAAM,IAAA,CAAK,QAAA,EAAU,EAAE,GAAA,CAAI,CAACI,IAAMA,EAAE,MAAA,CAAOJ,MAAMA;IAC9F;IAAA;;GAAA,GAID,MAAM,OAAOD,CAAAA,EAAG;QACd,MAAMC,IAAI,MAAM,IAAA,CAAK,MAAA,CAAOD;QAC5B,OAAO,MAAM,IAAA,CAAK,MAAA,IAAUC;IAC7B;AACH;AACAyB,KAAI,aAAA,GAAA,IAAI,WAAWC,KAAI,aAAA,GAAA,IAAI,WAAWC,KAAI,aAAA,GAAA,IAAI;AAC9C,MAAME,KAAoB,aAAA,GAAA,IAAI;AAC9B,SAASD,GAAE/B,CAAAA,EAAGE,IAAI,IAAA;IAChB,IAAIA,MAAM,MAAM;QACd,MAAMC,IAAI6B,GAAE,GAAA,CAAIhC,MAAM,IAAIiC,GAAEjC,GAAGE;QAC/B,OAAO8B,GAAE,GAAA,CAAIhC,GAAGG,IAAIA;IACrB;IACD,OAAO,IAAI8B,GAAEjC,GAAGE;AAClB;AACA,eAAegC,GAAElC,CAAAA,EAAGE,CAAAA,EAAGC,IAAI;IAAE,WAAW,CAAA;AAAA,CAAA;IACtC,IAAID,aAAa+B,IAAG;QAClB,MAAMC,GAAElC,GAAG,MAAME,EAAE,MAAA,IAAUC;QAC7B;IACD;IACD,MAAMI,IAAI,MAAA,AAAOP,CAAAA,aAAaiC,KAAIjC,IAAI+B,GAAE/B,GAAG,KAAI,EAAG,YAAlD;IACA,IAAI;QACF,IAAIG,EAAE,SAAA,IAAa,MAAMI,EAAE,QAAA,CAAS,IAAIL,aAAa,gBAAgB;YACnE,MAAMY,IAAIZ,EAAE,SAAZ;YACA,OAAW;gBACT,MAAM,EAAE,MAAMa,CAAAA,EAAG,OAAOG,CAAAA,EAAC,GAAK,MAAMJ,EAAE,IAAtC;gBACA,IAAIC,GAAJ;gBACA,MAAMR,EAAE,KAAA,CAAMW;YACf;QACF,OACC,MAAMX,EAAE,KAAA,CAAML;IACjB,EAAA,OAAQY,GAAG;QACV,MAAMA;IACV,SAAY;QACR,MAAMP,EAAE,KAAR;IACD;AACH;AACA,IAAI4B,KAAI;AACR,MAAMC,KAAI,IAAM,EAAED;AAClB,IAAIE,IAAGC,IAAGC,IAAGC,IAAGC,IAAGC,IAAGC,IAAGC;AACzB,MAAMC,KAAI,MAAMA;IACd,YAAY3C,CAAAA,EAAGC,CAAAA,CAAG;QAChBE,EAAE,IAAA,EAAMgC,KACRhC,EAAE,IAAA,EAAMiC,KACRjC,EAAE,IAAA,EAAMkC,KACRlC,EAAE,IAAA,EAAMmC,KACRnC,EAAE,IAAA,EAAMoC,KACRpC,EAAE,IAAA,EAAMqC,IAAG,IACXrC,EAAE,IAAA,EAAMsC,IAAoB,AAAA,aAAA,GAAA,CAAA;YAC1B,IAAIzC,IAAI;YACR,OAAO,IAAOI,CAAAA,EAAE,IAAA,EAAMoC,IAAGtC,EAAE,IAAA,EAAMsC,MAAK,IAAIxC,KAAMA,CAAAA,IAAI,IAAI,QAAQ,OAAOC,GAAG;oBACxE,IAAI;wBACF,MAAMW,IAAI,MAAMF,GACdR,EAAE,IAAA,EAAMqC,KACRrC,EAAE,IAAA,EAAMiC,KACRjC,EAAE,IAAA,EAAMoC;wBAEVrC,EAAE;4BACAW;4BACA;gCACER,EAAE,IAAA,EAAMoC,IAAGtC,EAAE,IAAA,EAAMsC,MAAK,IAAI,CAAEtC,CAAAA,EAAE,IAAA,EAAMsC,MAAK,CAAA,KAAOxC,CAAAA,IAAI,MAAM,MAAMY,EAAE,KAAA,EAAK;4BAC1E;yBACF;oBACF,EAAA,OAAQA,GAAG;wBACV,EAAEA;oBACH;gBACF,EAAA,CADE;QAEJ,CAAA,MACDT,EAAE,IAAA,EAAMuC,IAAG,CAAA,IACXtC,EAAE,IAAA,EAAMmC,IAAGL,OAAM9B,EAAE,IAAA,EAAM+B,IAAGnC,IAAII,EAAE,IAAA,EAAMkC,IAAG;YACzC,GAAG;YACH,IAAI;YACJ,aAAa;QACnB,CAAA,CAAMrC,EAAE;QACJ,MAAM,EAAE,QAAQI,CAAAA,EAAG,MAAMO,CAAAA,EAAAA,GAAMQ,GAAEpB;QACjCI,EAAE,IAAA,EAAMiC,IAAGzB,IAAIR,EAAE,IAAA,EAAMgC,IAAG/B;IAC3B;IACD,IAAI,OAAO;QACT,OAAO;IACR;IACD,IAAI,OAAO;QACT,OAAOH,EAAE,IAAA,EAAMiC;IAChB;IACD,IAAI,OAAO;QACT,OAAOjC,EAAE,IAAA,EAAMmC;IAChB;IACD,IAAI,SAAS;QACX,OAAOnC,EAAE,IAAA,EAAMkC,OAAM,OAAO,OAAOZ,GAAEtB,EAAE,IAAA,EAAMkC;IAC9C;IAAA;;GAAA,GAID,MAAM,eAAe;QACnB,IAAIlC,EAAE,IAAA,EAAMoC,QAAO,aAAa,MAAM,MAAM;QAC5C,IAAIpC,EAAE,IAAA,EAAMwC,KAAI,MAAM,MAAM;QAC5BtC,EAAE,IAAA,EAAMsC,IAAG,CAAA;QACX,MAAM1C,IAAI,IAAI,eAAe,CAACC,GAAGI,EAAC,GAAI,MAAMH,EAAE,IAAA,EAAMuC,IAAG,IAAA,CAAK,IAAI;QAChE,IAAI7B,IAAI,MAAMX,EAAE,OAAA,IAAWY,IAAI,CAA/B;QACA,OAAO;YACL,OAAO,OAAOG,GAAG4B,IAAI,CAAA,CAAA;gBACnB,IAAI/B,GAAG,MAAM,MAAM;gBACnB,MAAMI,IAAI,OAAOD,KAAK,WAAWhB,EAAE,MAAA,CAAOgB,KAAKA,GAAGE,IAAI0B,EAAE,EAAA,IAAMhC,GAAGO,IAAIF,EAAE,UAAvE;gBACA,OAAOL,IAAIM,IAAIC,GAAG,MAAMlB,EAAE,KAAA,CAAMgB,GAAG;oBAAE,IAAIC;gBAAC;YAC3C;YACD,UAAU,OAAOF;gBACf,IAAIH,GAAG,MAAM,MAAM;gBACnB,MAAMZ,EAAE,QAAA,CAASe,IAAIJ,IAAII,KAAMJ,CAAAA,IAAII,CAAAA;YACpC;YACD,OAAO;gBACL,IAAIH,GAAG,MAAM,MAAM;gBACnB,MAAMZ,EAAE,KAAR;YACD;YACD,OAAO;gBACL,IAAIY,GAAG,MAAM,MAAM;gBACnBA,IAAI,CAAA,GAAIT,EAAE,IAAA,EAAMsC,IAAG,CAAA,IAAK,MAAMrC;YAC/B;QACP;IACG;IAAA;;GAAA,GAID,MAAM,eAAe;QACnB,MAAM,CAACL,GAAGC,EAAC,GAAI,MAAMC,EAAE,IAAA,EAAMuC,IAAG,IAAA,CAAK,IAAI;QACzC,IAAIpC,IAAI,CAAA,GAAIO,IAAI;QAChB,OAAO;YACL,MAAM,OAAOC,GAAGG,IAAI,CAAA,CAAA;gBAClB,IAAIX,GAAG,MAAM,MAAM;gBACnB,MAAMuC,IAAI5B,EAAE,EAAA,IAAMJ,GAAGK,IAAI,MAAMjB,EAAE,IAAA,CAAK4C,GAAG/B;gBACzC,OAAOD,IAAIgC,IAAI3B,EAAE,UAAA,EAAYA;YAC9B;YACD,SAAS;gBACP,IAAIZ,GAAG,MAAM,MAAM;gBACnB,OAAO,MAAML,EAAE,OAAf;YACD;YACD,OAAO;gBACLK,KAAMA,CAAAA,IAAI,CAAA,GAAI,MAAMJ,GAAG;YACxB;QACP;IACG;IACD,MAAM,OAAO;QACX,OAAO,IAAI,cAAc,MAAA,CAAO,MAAM,IAAA,CAAK,WAAA;IAC5C;IACD,MAAM,cAAc;QAClB,MAAMD,IAAI,MAAMqB,GAAEnB,EAAE,IAAA,EAAMiC,KAAI;YAAE,QAAQ,CAAA;YAAI,QAAQ,CAAA;QAAI;QACxD,OAAOnC,KAAK,OAAO,IAAI,YAAY,KAAC,AAAK,CAAA,MAAMA,EAAE,OAAA,EAAA,EAAW,WAA5D;IACD;IACD,MAAM,SAAS;QACb,MAAMA,IAAI,MAAM,IAAA,CAAK,aAArB;QACA,OAAOA,KAAK,OAAO,IAAI,eAAe;YACpC,MAAM,CAACC;gBACLA,EAAE,KAAA;YACH;QACP,KAASD,EAAE,MADJ;IAEJ;IACD,MAAM,gBAAgB;QACpB,IAAIA;QACJ,OAAA,AAAQA,CAAAA,IAAI,MAAMqB,GAAEnB,EAAE,IAAA,EAAMiC,KAAI;YAAE,QAAQ,CAAA;YAAI,QAAQ,CAAA;QAAE,EAAE,KAAM,OAAO,KAAA,IAASnC,EAAE,OAAlF;IACD;IACD,MAAM,UAAU;QACd,MAAMA,IAAI,MAAMqB,GAAEnB,EAAE,IAAA,EAAMiC,KAAI;YAAE,QAAQ,CAAA;YAAI,QAAQ,CAAA;QAAI;QACxD,OAAOnC,KAAK,OAAO,IAAA,AAAK,CAAA,MAAMA,EAAE,OAAA,EAAS,EAAE,IAA3C;IACD;IACD,MAAM,SAAS;QACb,OAAO,MAAMqB,GAAEnB,EAAE,IAAA,EAAMiC,KAAI;YACzB,QAAQ,CADiB;YAEzB,QAAQ,CADA;QAET,cAAa;IACf;IACD,MAAM,SAAS;QACb,IAAIjC,EAAE,IAAA,EAAMsC,KAAI,MAAM,MAAM;QAC5B,MAAMlB,GAAEpB,EAAE,IAAA,EAAMiC;IACjB;IAAA;;;GAAA,GAKD,MAAM,OAAOnC,CAAAA,EAAG;QACd,IAAI,CAAC,MAAM,IAAA,CAAK,MAAA,IACd,MAAM,MAAM,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,WAAA,CAAa;QAC5C,IAAIA,aAAa2C,IACf,OAAOd,GAAE7B,EAAE,IAAI,MAAM,IAAA,GAAO,IAAA,GAAQ,CAAA,MAAMgC,GAAEhC,EAAE,IAAA,EAAM,IAAI,GAAG6B,GAAE7B,EAAE,IAAI,CAAA;QACrE,IAAIA,aAAayB,IACf,OAAO,MAAM,IAAA,CAAK,MAAA,CAAOI,GAAEN,GAAEvB,EAAE,IAAA,EAAM,IAAA,CAAK,IAAI;QAChD,MAAM,MAAM;IACb;IAAA;;GAAA,GAID,MAAM,OAAOA,CAAAA,EAAG;QACd,MAAMC,IAAI,MAAM,IAAA,CAAK,MAAA,CAAOD;QAC5B,OAAO,MAAM,IAAA,CAAK,MAAA,IAAUC;IAC7B;AACH;AACAkC,KAAI,aAAA,GAAA,IAAI,WAAWC,KAAI,aAAA,GAAA,IAAI,WAAWC,KAAI,aAAA,GAAA,IAAI,WAAWC,KAAI,aAAA,GAAA,IAAI,WAAWC,KAAI,aAAA,GAAA,IAAI,WAAWC,KAAI,aAAA,GAAA,IAAI,WAAWC,KAAI,aAAA,GAAA,IAAI,WAAWC,KAAI,aAAA,GAAA,IAAI;AAC7I,IAAIX,KAAIY;AACR,MAAME,KAAI;AACV,eAAeC,GAAEhD,CAAAA;IACf,IAAI;QACF,IAAIA,EAAE,IAAA,KAAS,QAAQ;YACrB,IAAI,CAAC,MAAMA,EAAE,MAAA,IAAU,OAAO,CAA9B;YACA,MAAME,IAAI,MAAMF,EAAE,YAAlB;YACA,MAAME,EAAE,QAAA,CAAS,IAAI,MAAMA,EAAE,KAAA,IAAS,MAAMF,EAAE,MAA9C;QACD,OACC,MAAMA,EAAE,MAAR;QACF,OAAO,CAAP;IACD,EAAA,OAAQE,GAAG;QACV,OAAO,QAAQ,IAAA,CAAKA,IAAI,CAAxB;IACD;AACH;AACA,SAAS+C;IACP,YAAY;QACV,KAAA,MAAW/C,KAAK,CAAA,MAAMwB,GAAEqB,IAAG,QAAA,EAAQ,EAAI;YACrC,MAAM5C,IAAI,cAAc,IAAA,CAAKD,EAAE,IAAI;YAClCC,CAAAA,KAAK,QAAQ,KAAK,GAAA,KAAQ,OAAOA,CAAAA,CAAE,EAAE,IAAI,MAAA,KAAW,MAAM6C,GAAE9C;QAC9D;IACL,GAAK;AACL;AACA,MAAMgD,KAAI,EAAV;AACA,IAAIC,KAAI,CAAR;AACA,eAAeC;IACb,IAAI,WAAW,YAAA,IAAgB,MAA/B;IACA,MAAMpD,IAAI;IACVmD,MAAMA,CAAAA,KAAI,CAAA,GAAI,WAAW,gBAAA,CAAiB,UAAU;QAClDD,GAAE,MAAA,KAAW,KAAK,aAAa,OAA/B,CACElD,GACA,CAAA,EAAG,aAAa,OAAA,CAAQA,MAAM,GAAE,CAAA,EAAIkD,GAAE,IAAA,CAAK,KAD3C,CAAA;IAGH,EAAA;IACD,IAAIhD,IAAI,aAAa,OAAA,CAAQF,MAAM;IACnC,KAAA,MAAWG,KAAKD,EAAE,KAAA,CAAM,KACtBC,EAAE,MAAA,KAAW,KAAK,MAAM6C,GAAEjB,GAAE,CAAA,EAAGgB,GAAC,CAAA,EAAI5C,EAAC,CAAE,MAAOD,CAAAA,IAAIA,EAAE,OAAA,CAAQC,GAAG,GAAE;IACnE,aAAa,OAAA,CAAQH,GAAGE,EAAE,OAAA,CAAQ,UAAU;AAC9C;AACC,CAAA;IACC,IAAIA;IACJ,WAAW,2BAAA,KAAgC,CAAA,KAAO,CAAA,WAAW,2BAAA,GAA8B,CAAA,GAAI,CAAE,CAAA,WAAW,yBAAA,IAA6B,QAAQ,WAAW,oBAAA,IAAwB,QAAA,AAAA,CAAA,AAAUA,CAAAA,IAAI,WAAW,SAAA,AAAA,KAAc,OAAO,KAAA,IAASA,EAAE,OAAA,CAAQ,YAAA,AAAA,KAAiB,IAAA,KAAU+C,CAAAA,MAAK,MAAMG,IAAC,CAA5R;AACF,CAAA;AACA,SAASC;IACP,MAAMrD,IAAI,CAAA,EAAG,KAAK,MAAA,GAAS,QAAA,GAAW,KAAA,CAAM,GAAE,CAAA,EAAI,KAAK,GAAA,GAAvD,CAAA;IACA,OAAOkD,GAAE,IAAA,CAAKlD,IAAI+B,GAAE,CAAA,EAAGgB,GAAC,CAAA,EAAI/C,EAAC,CAAE;AACjC;AC7cA,SAASsD,GAAQC,CAAAA;IACf,OAAIA,aAAe,QAAc,OAAOA,KACjC,OAAOA,KAAQ,WAClB,KAAK,SAAA,CAAUA,GAAK,CAACpB,GAAGb,IAAOA,aAAa,QAAQ,OAAOA,KAAKA,KAChE,OAAOiC;AACb;AAEA,SAASC;IACD,MAAAjC,IAAAA,aAAAA,GAAAA,IAAQ;IACd,OAAO,CAAA,EAAGA,EAAE,QAAA,GAAU,CAAA,EAAIA,EAAE,UAAA,GAAY,CAAA,EAAIA,EAAE,UAAA,GAAY,CAAA,EAAIA,EAAE,eAAA,GAAhE,CAAA;AACF;AAEA,IAAIkC,KAAY;AAEhB,MAAMC,KAAYC;AAElB,IAAIC,KAAoE;AAGxE,MAAMC,KAAY;IAAC;IAAS;IAAQ;IAAQ;CAAO,CAAE,MAArD,CACE,CAACC,GAAKC,GAAQC,IACZ,OAAO,MAAA,CAAOF,GAAK;QACjB,CAACC,EAAM,EAAG,CAAA,GAAIE;YACRR,MAAaO,KACP,CAAA,OAAA,CAAAD,EAAgB,IAAKE,IACrBL,MAAA,QAAAA,GAAA,KAFV,CAGI,CAAA,CAAA,EAAIG,EAAM,EAAA,EAAKP,KAAY,GAAA,EAAMS,EAC9B,GAAA,CAAI,CAAC1D,IAAM+C,GAAQ/C,IACnB,IAAA,CAAK,KAHF;AAGM,CAAA,CAAA;QAGlB;IAAA,IAEJ,CAAC,IAGG2D,KAAAA,aAAAA,GAAAA,IAAU,OAKHC,IAAM;IAAA;;;;;GAAA,GAOjB,aAAa,CAAqBC;QACpBX,KAAAS,GAAI,GAAA,CAAIE,MAAU;IAChC;IACA,GAAGP,EADH;IACG;;;;;;GAAA,GAQH,QAAQ,CAACQ,IACA,OAAO,WATb,CAUC,OAAO,OAAA,CAAQR,IAAW,GAAA,CAAI,CAAC,CAACpC,GAAGN,EAAC,GAAM;gBACxCM;gBACA,CAAA,GAAIwC,IAAgB9C,EAAEkD,MAAQJ;aAC/B;IAAA;;;;;;GAAA,GAWL,MAAM;QACE,OAAA,MAAAK,IACN,MAAMV,CAAAA,MAAA,OAAA,KAAA,IAAAA,GAAQ,KAAA,EAAA,GACP,MAAMF,GAAU,IAFjB;IAGR;AACF;AAEAQ,GAAI,GAAA,CAAIC,EAAI,KAAA,EAAO;AACnBD,GAAI,GAAA,CAAIC,EAAI,IAAA,EAAM;AAClBD,GAAI,GAAA,CAAIC,EAAI,IAAA,EAAM;AAClBD,GAAI,GAAA,CAAIC,EAAI,KAAA,EAAO;AAEnB,eAAeI;IACT,IAAA;QACOX,KAAA,MAAMF,GAAU,YAAA,IACrBS,EAAA,IAAA,CAAK,UAAU,SAAS,GAC5BA,EAAI,IAAA,CAAK,WAAA,AAAW,aAAA,GAAA,IAAI,OAAO,kBAAA;IAAoB,EAAA,OAC5CK,GAAK;QACR,IAAA,CAAEA,CAAAA,aAAe,KAAA,GAAc,MAAAA;QACnC,IAAIA,EAAI,OAAA,CAAQ,QAAA,CAAS,6CACvB,QAAQ,IAAA,CAAKA;aAEP,MAAAA;IAEV;AACF;AAGA,MAAMF,KAAc,WAAW,SAAA,IAAa,OAAO,OAAOC,MC7GpDE,KAAQ;IACR,IAAAC,GAEAC,IAAmB;IAElB,KAAA,SAAA,GAAY,CAACzE;QACZA,EAAE,IAAA,CAAK,KAAA,KAAU,WACnB,CAAA,KAAK,aAAA,CAAcwE,IACTA,IAAA,KAAK,WAAA,CAAY;YACpB,KAAA,WAAA,CAAY,CAAA;QAAE,GAClBC,EAAQ,GAGTzE,EAAE,IAAA,CAAK,KAAA,KAAU,UACnB,KAAK,aAAA,CAAcwE;IACrB;AAEJ,GAEME,KAAe;IACb,MAAAC,IAAO,IAAI,KAAK;QAAC,CAAA,CAAA,EAAIJ,GAAM,QAAA,GAAU,GAAA,CAAK;KAAC,GAC3CK,IAAM,IAAI,eAAA,CAAgBD;IACzB,OAAA,IAAI,OAAOC;AACpB,GAEMC,KAAAA,aAAAA,GAAAA,IAAiB;AACvB,IAAIC,KAAW,GAEXC,KAAwB;AACxB,WAAW,MAAA,IAAU,QACvBA,CAAAA,KAASL,MACTK,GAAO,SAAA,GAAY;IACLD,MAAA;IACZ,KAAA,MAAW,CAACvD,GAAGH,EAAC,IAAKyD,GACnB,IAAIC,KAAWvD,MAAM,GAAc,KAAA,MAAAyD,KAAM5D,EAAM4D;AACjD,CAAA;AAWS,MAAAC,KAAc,CACzBC,GACAC;IAEA,MAAMC,IAAU,KAAK,KAAA,CAAMD,IAAO,OAC5BE,IAAMR,GAAW,GAAA,CAAIO,MAAO,aAAA,GAAA,IAAS;IAC3C,OAAAC,EAAI,GAAA,CAAIH,IACGL,GAAA,GAAA,CAAIO,GAASC,IAEpBR,GAAW,IAAA,KAAS,KAAKQ,EAAI,IAAA,KAAS,KACxCN,CAAAA,MAAA,QAAAA,GAAQ,WAAA,CAAY;QAAE,OAAO;IAAS,EAAA,GAGjC;QACLM,EAAI,MAAA,CAAOH,IACPG,EAAI,IAAA,KAAS,KAAGR,GAAW,MAAA,CAAOO,IAClCP,GAAW,IAAA,KAAS,KACXC,CAAAA,KAAA,GACXC,MAAA,QAAAA,GAAQ,WAAA,CAAY;YAAE,OAAO;QAAQ,EAJvC;IAKA;AAEJ;ACjCO,MAAMO;IAAa;;;;GAAA,GAOxB,YAAYC,CAAAA,EAAWC,CAAAA,EAASC,CAAAA,CAAS;QAKvC,IAAA,CAAK,OAAA,GAAUF,GAKf,IAAA,CAAK,YAAA,GAAA,AAAgBA,CAAAA,IAAY,CAAA,IAAKC,GAKtC,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,KAAA,EACpBC,EAAQ,MAAA,KAAW,UACtB,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,KAAA,GACfA,EAAQ,MAAA,KAAW,WAC5B,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,MAAA,GACfA,EAAQ,MAAA,KAAW,UAC5B,CAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,IAAA,AAAA,GAMzB,IAAA,CAAK,cAAA,GAAiB,IAAI,KAAK,GAAA,CAAI,GAAG,KAAK,GAAA,CAAI,GAAGA,EAAQ,OAAA,IAAW,KAMrE,IAAA,CAAK,eAAA,GAAkBA,EAAQ,cAAA,IAAkB,GAKjD,IAAA,CAAK,OAAA,GAAUC,GAAYD,EAAQ,UAAA,IAAcE;IAClD;IAAA;;;;GAAA,GAOD,MAAM7F,CAAAA,EAAG8F,CAAAA,EAAS;QAChB,OAAO,IAAA,CAAK,gBAAA,CAAiB,KAAK,KAAA,CAAM,IAAA,CAAK,YAAA,GAAe9F,IAAI8F;IACjE;IAAA;;;;GAAA,GAOD,OAAO9F,CAAAA,EAAG8F,CAAAA,EAAS;QACjB9F,IAAI,IAAA,CAAK,YAAA,GAAeA;QACxB,IAAIyB,IAAI,KAAK,KAAA,CAAMzB;QACnB,OAAAA,KAAKyB,GAAAA,AACG,CAAA,IAAIzB,CAAAA,IACX,IAAA,CAAK,gBAAA,CAAiByB,GAAGqE,KAAW9F,IACpC,IAAA,CAAK,gBAAA,CAAiByB,IAAI,GAAGqE;IAC/B;IAAA;;;;GAAA,GAOD,MAAM9F,CAAAA,EAAG8F,CAAAA,EAAS;QAChB9F,IAAI,IAAA,CAAK,YAAA,GAAeA;QACxB,IAAIyB,IAAI,KAAK,KAAA,CAAMzB,IACf+B,IAAI;YAAC,IAAA,CAAK,WAAA,CAAYN,GAAGqE;YAAU,IAAA,CAAK,WAAA,CAAYrE,IAAI,GAAGqE;SAAQ,EACnEhE,IAAI;YAAC,IAAA,CAAK,gBAAA,CAAiBL,GAAGqE;YAChC,IAAA,CAAK,gBAAA,CAAiBrE,IAAI,GAAGqE;SAAO;QACtC9F,KAAKyB;QACL,IAAIsE,IAAK/F,IAAIA,GACTgG,IAAKhG,IAAI+F;QACb,OAAA,AAAQ,CAAA,IAAIC,IAAK,IAAID,IAAK,CAAA,IACxBjE,CAAAA,CAAE,EAAC,GAAA,AAAKkE,CAAAA,IAAK,IAAID,IAAK/F,CAAAA,IACtB+B,CAAAA,CAAE,EAAC,GAAA,AAAK,CAAA,KAAKiE,IAAK,IAAID,CAAAA,IACtBjE,CAAAA,CAAE,EAAC,GAAA,AAAKkE,CAAAA,IAAKD,CAAAA,IAAMhE,CAAAA,CAAE,EAHvB;IAID;IAAA;;;;GAAA,GAOD,KAAK/B,CAAAA,EAAG8F,CAAAA,EAAS;QACf9F,IAAI,IAAA,CAAK,YAAA,GAAeA;QACxB,IAAIyB,IAAI,KAAK,KAAA,CAAMzB,IACfiG,IAAMxE,IAAI,IAAA,CAAK,eAAA,GAAkB,GACjCyE,IAAOzE,IAAI,IAAA,CAAK,eAAA,EAChB0E,IAAM;QACV,IAAA,IAASpF,IAAIkF,GAAKlF,KAAKmF,GAAMnF,IAC3BoF,KAAO,IAAA,CAAK,OAAA,CAAQnG,IAAIe,KAAK,IAAA,CAAK,gBAAA,CAAiBA,GAAG+E;QAExD,OAAOK;IACR;IAAA;;;;;GAAA,GAQD,YAAY1E,CAAAA,EAAGqE,CAAAA,EAAS;QACtB,OAAO,IAAA,CAAK,cAAA,GACT,CAAA,IAAA,CAAK,gBAAA,CAAiBrE,IAAI,GAAGqE,KAC5B,IAAA,CAAK,gBAAA,CAAiBrE,IAAI,GAAGqE,EAAO,IAAK;IAC9C;IAAA;;;;;GAAA,GAQD,iBAAiB9F,CAAAA,EAAG8F,CAAAA,EAAS;QAC3B,OAAK,KAAK9F,KAAKA,IAAI,IAAA,CAAK,OAAA,GACf8F,CAAAA,CAAQ9F,EAAC,GAEX;IACR;AACH;AAUA,SAAS6F,GAAQ3C,CAAAA;IACf,OAAO,KAAK,GAAA,CAAI,CAACA,IAAI,IAAIA,IAAI;AAC/B;AAOA,SAAS0C,GAAYQ,CAAAA;IACnB,OAAO,SAASlD,CAAAA;QAAK,OAAOmD,GAAMnD,KAAKkD,EAAOlD;IAAC;AACjD;AAOA,SAASmD,GAAMnD,CAAAA;IACb,OAAIA,MAAM,IACD,IAEF,KAAK,GAAA,CAAI,KAAK,EAAA,GAAKA,KAAM,CAAA,KAAK,EAAA,GAAKA,CAAAA;AAC5C;ACrKO,MAAMoD;IAAO;;;;GAAA,GAOlB,YAAYC,CAAAA,EAAOC,CAAAA,EAAYC,CAAAA,CAAQ;QACrC,IAAIC,IAAQ,IAAI,KAAK,EAAA,GAAKD,IAASD,GAC/BG,IAAK;QACT,IAAA,CAAK,OAAA,GAAU,EAAf;QACA,IAAA,IAAS7F,IAAI,GAAGA,KAAKyF,GAAOzF,IACtBA,IAAIyF,IAAQ,MAAM,IACpB,IAAA,CAAK,OAAA,CAAQzF,EAAC,GAAI4F,IAElB,CAAA,IAAA,CAAK,OAAA,CAAQ5F,EAAC,GAAI,KAAK,GAAA,CAAI4F,IAAS5F,CAAAA,IAAIyF,IAAQ,CAAA,KAAOzF,CAAAA,IAAIyF,IAAQ,CAAA,GAEnE,IAAA,CAAK,OAAA,CAAQzF,EAAC,IAAM,OAAO,OAAO,KAAK,GAAA,CAAI,IAAI,KAAK,EAAA,GAAKA,IAAIyF,EAAK,GAEpEI,IAAKA,IAAK,IAAA,CAAK,OAAA,CAAQ7F,EAPvB;QAUF,IAAA,IAASA,IAAI,GAAGA,KAAKyF,GAAOzF,IAC1B,IAAA,CAAK,OAAA,CAAQA,EAAC,IAAK6F;QAErB,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAd;IACD;IAAA;;;GAAA,GAMD,OAAOC,CAAAA,EAAQ;QACb,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,IAAA,CAAK,CAAA,CAAE,OAAO,CAAA,GAAIA;QAC7B,IAAIC,IAAM;QACV,IAAA,IAAS/F,IAAI,GAAGgG,IAAM,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,MAAA,EAAQhG,IAAIgG,GAAKhG,IAChD+F,KACE,IAAA,CAAK,OAAA,CAAQ/F,EAAC,GAAI,IAAA,CAAK,CAAA,CAAE,GAAA,CAAA,AAAK,CAAA,IAAA,CAAK,CAAA,CAAE,OAAA,GAAUA,CAAAA,IAAK,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,MAAM,CADvE;QAGF,OAAA,IAAA,CAAK,CAAA,CAAE,OAAA,GAAA,AAAW,CAAA,IAAA,CAAK,CAAA,CAAE,OAAA,GAAU,CAAA,IAAM,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,MAAA,EAC7C+F;IACR;IAAA;;GAAA,GAKD,QAAQ;QACN,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,MAAd;IACD;IAAA;;;GAAA,GAMD,SAAS;QACP,IAAI1G,IAAI,EAAR;QACA,IAAA,IAASW,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,GAAGA,IAC3CX,EAAE,IAAA,CAAK;QAET,OAAO;YACL,KAAKA;YACL,SAAS;QACf;IACG;AACH;AChEO,MAAM4G;IAAe;;;;GAAA,GAO1B,YAAYR,CAAAA,EAAOC,CAAAA,EAAYC,CAAAA,CAAQ;QACrC,IAAIO,IAAU,EAAd;QACA,IAAA,IAASlG,IAAI,GAAGA,IAAIyF,GAAOzF,IACzBkG,EAAQ,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW;YAC3B,IAAIR;YACJ,IAAIC;YACJ,GAAG,MAAO,KAAK,GAAA,CAAK,KAAK,EAAA,GAAMF,CAAAA,IAAQ,CAAA,IAAOzF,CAAAA,IAAI,GAAA;QACnD;QAEH,IAAA,CAAK,MAAA,GAAS,EAAd;QACA,IAAA,IAASA,IAAI,GAAGA,IAAIkG,EAAQ,MAAA,EAAQlG,IAClC,IAAA,CAAK,MAAA,CAAOA,EAAC,GAAI;YACf,IAAKkG,CAAAA,CAAQlG,EAAC,CAAE,CAAA,CAAE,EADH;YAEf,IAAKkG,CAAAA,CAAQlG,EAAC,CAAE,CAAA,CAAE,EADC;YAEnB,IAAKkG,CAAAA,CAAQlG,EAAC,CAAE,CAAA,CAAE,EADC;YAEnB,IAAKkG,CAAAA,CAAQlG,EAAC,CAAE,CAAA,CAAE,EADC;YAEnB,IAAKkG,CAAAA,CAAQlG,EAAC,CAAE,CAAA,CAAE,EADC;YAEnB,GAAIkG,CAAAA,CAAQlG,EAAC,CAAE,CADI;YAEnB,GAAI;gBAAC;gBAAG;aADO;QAEvB;IAEG;IAAA;;;GAAA,GAMD,OAAO8F,CAAAA,EAAQ;QACb,IAAIC,IAAMD;QACV,IAAA,IAAS9F,IAAI,GAAGgG,IAAM,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQhG,IAAIgG,GAAKhG,IACjD+F,IAAM,IAAA,CAAK,SAAA,CAAU/F,GAAG+F;QAE1B,OAAOA;IACR;IAED,WAAWI,CAAAA,EAAQ;QACjB,IAAIC,IAAS,CAAA;QACbA,EAAO,CAAA,GAAI;YAAC;YAAG;SAAC,EAChBA,EAAO,CAAA,GAAI,EAAA,EACXA,EAAO,CAAA,GAAI,EAFX;QAGA,IAAIpF,IAAI,IAAA,CAAK,QAAA,CAASmF,GAAQC;QAC9B,OAAAA,EAAO,CAAA,GAAI,GACXA,EAAO,CAAA,CAAE,IAAA,CAAA,AAAM,CAAA,IAAIpF,EAAE,EAAA,AAAA,IAAO,CAAA,IAAIA,EAAE,EAAA,AAAA,IAClCoF,EAAO,CAAA,CAAE,IAAA,CAAK,IAAIA,EAAO,CAAA,CAAE,EAAE,GAC7BA,EAAO,CAAA,CAAE,IAAA,CAAKA,EAAO,CAAA,CAAE,EAAE,GAClBA;IACR;IAED,SAASD,CAAAA,EAAQC,CAAAA,EAAQ;QACvB,IAAIC,IAAM,CAAA,GACNvF,IAAI,IAAI,KAAK,EAAA,GAAKqF,EAAO,EAAA,GAAKA,EAAO,EADzC;QAEA,OAAAE,EAAI,KAAA,GAAQ,KAAK,GAAA,CAAIvF,KAAM,CAAA,IAAIqF,EAAO,CAAA,AAAA,GACtCE,EAAI,EAAA,GAAK,KAAK,GAAA,CAAIvF,IAClBuF,EAAI,EAAA,GAAK,IAAIA,EAAI,KAAA,EACjBD,EAAO,EAAA,GAAKC,EAAI,EAAA,EAChBD,EAAO,CAAA,CAAE,IAAA,CAAM,KAAKC,EAAI,EAAA,GAAMA,EAAI,EAAE,GACpCD,EAAO,CAAA,GAAI,GACXA,EAAO,CAAA,CAAE,IAAA,CAAA,AAAM,CAAA,IAAIC,EAAI,KAAA,AAAA,IAASA,EAAI,EAAE,GAC/BA;IACR;IAED,UAAUrG,CAAAA,EAAGsG,CAAAA,EAAO;QAClB,IAAIC,IACFD,IAAQ,IAAA,CAAK,MAAA,CAAOtG,EAAC,CAAE,CAAA,GAAI,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,EAAA,GAAK,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,CAAA,CAAE,EAAC,GACjE,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,EAAA,GAAK,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,CAAA,CAAE,EAAC,EACpC+F,IACF,IAAA,CAAK,MAAA,CAAO/F,EAAC,CAAE,EAAA,GAAKuG,IAAO,IAAA,CAAK,MAAA,CAAOvG,EAAC,CAAE,EAAA,GAAK,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,CAAA,CAAE,EAAC,GACjE,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,EAAA,GAAK,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,CAAA,CAAE,EALvC;QAMA,OAAA,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,CAAA,CAAE,EAAC,GAAI,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,CAAA,CAAE,EAAC,EACxC,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,CAAA,CAAE,EAAC,GAAIuG,GACfR;IACR;IAAA;;GAAA,GAKD,QAAQ;QACN,IAAA,IAAS/F,IAAI,GAAGA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQA,IACtC,IAAA,CAAK,MAAA,CAAOA,EAAC,CAAE,CAAA,GAAI;YAAC;YAAG;SAAvB;IAEH;AACH;ACrFA,MAAMwG,KAAkB;IACtB,OAAS,CADa;IAEtB,QAAU,CADD;IAET,OAAS,CADC;IAEV,MAAQ,CADC;AAEX,GAMMC,KAAoB;IACxB,KAAO;IACP,KAAO;AACT,GAMMC,KAAc;IAClB,KAAOT;IACP,KAAOT;AACT;AAUO,SAASmB,GAAS3B,CAAAA,EAAS4B,CAAAA,EAAelB,CAAAA,EAAYb,IAAQ,CAAA,CAAA;IAEnE,IAAIgC,IAAAA,AAASnB,CAAAA,IAAakB,CAAAA,IAAiBA,IAAiB,GACxDE,IAAa,IAAI,aAAa9B,EAAQ,MAAA,GAAU6B;IAEpDhC,EAAQ,MAAA,GAASA,EAAQ,MAAA,IAAU;IACnC,IAAIkC,IAAe,IAAIrC,GACrBM,EAAQ,MADa,EAErB8B,EAAW,MADH,EAER;QACE,QAAQjC,EAAQ,MADlB;QAEE,SAASA,EAAQ,OAAA,IAAW;QAC5B,gBAAgBA,EAAQ,cAAA,IAAkB;QAC1C,YAAYA,EAAQ,UAAA,IAAc,KADQ;IAEhD;IAKE,IAHIA,EAAQ,GAAA,KAAQ,KAAA,KAClBA,CAAAA,EAAQ,GAAA,GAAM2B,EAAAA,CAAgB3B,EAAQ,MAAM,CAAA,AAAA,GAE1CA,EAAQ,GAAA,EAAK;QACfA,EAAQ,OAAA,GAAUA,EAAQ,OAAA,IAAW;QACrC,MAAMmC,IAAMN,EAAAA,CAAY7B,EAAQ,OAAO,CAAvC;QAEA,IAAIa,IAAakB,GAAe;YAC9B,IAAIK,IAAS,IAAID,EACfnC,EAAQ,QAAA,IAAY4B,EAAAA,CAAkB5B,EAAQ,OAAO,CADtC,EAEfa,GACCkB,IAAgB;YACnBM,GACElC,GAAS8B,GAAYC,GAAcE;QAE3C,OAAW;YACL,IAAIA,IAAS,IAAID,EACfnC,EAAQ,QAAA,IAAY4B,EAAAA,CAAkB5B,EAAQ,OAAO,CADtC,EAEf+B,GACAlB,IAAa;YACfyB,GACEnC,GAAS8B,GAAYC,GAAcE;QACtC;IAEL,OACIG,GAAUpC,GAAS8B,GAAYC;IAEjC,OAAOD;AACT;AASA,SAASM,GAAUpC,CAAAA,EAAS8B,CAAAA,EAAYC,CAAAA;IAEtC,IAAA,IAAS/G,IAAI,GAAGgG,IAAMc,EAAW,MAAA,EAAQ9G,IAAIgG,GAAKhG,IAChD8G,CAAAA,CAAW9G,EAAC,GAAI+G,EAAa,WAAA,CAAY/G,GAAGgF;AAEhD;AAUA,SAASkC,GAAUlC,CAAAA,EAAS8B,CAAAA,EAAYC,CAAAA,EAAcE,CAAAA;IAEpD,IAAA,IAASjH,IAAI,GAAGgG,IAAMc,EAAW,MAAA,EAAQ9G,IAAIgG,GAAKhG,IAChD8G,CAAAA,CAAW9G,EAAC,GAAIiH,EAAO,MAAA,CAAOF,EAAa,WAAA,CAAY/G,GAAGgF;IAG5DiC,EAAO,KAAA;IACP,IAAA,IAASjH,IAAI8G,EAAW,MAAA,GAAS,GAAG9G,KAAK,GAAGA,IAC1C8G,CAAAA,CAAW9G,EAAC,GAAKiH,EAAO,MAAA,CAAOH,CAAAA,CAAW9G,EAAE;AAEhD;AAUA,SAASmH,GAAYnC,CAAAA,EAAS8B,CAAAA,EAAYC,CAAAA,EAAcE,CAAAA;IAEtD,IAAA,IAASjH,IAAI,GAAGgG,IAAMhB,EAAQ,MAAA,EAAQhF,IAAIgG,GAAKhG,IAC7CgF,CAAAA,CAAQhF,EAAC,GAAKiH,EAAO,MAAA,CAAOjC,CAAAA,CAAQhF,EAAE;IAGxCiH,EAAO,KAAA;IACP,IAAA,IAASjH,IAAIgF,EAAQ,MAAA,GAAS,GAAGhF,KAAK,GAAGA,IACvCgF,CAAAA,CAAQhF,EAAC,GAAKiH,EAAO,MAAA,CAAOjC,CAAAA,CAAQhF,EAAE;IAGxCoH,GAAUpC,GAAS8B,GAAYC;AACjC;ACjKO,SAASM,GAAmBC,CAAAA;IACjC,MAAMC,IAAK,IAAI,aACbD,EAAK,GAAA,CAAI,CAACE,IAAQA,EAAI,MAAM,EAAE,MAAA,CAAO,CAAC/H,GAAGa,IAAMb,IAAIa;IAGrD,IAAImH,IAAS;IACb,KAAA,MAAWD,KAAOF,EACbC,EAAA,GAAA,CAAIC,GAAKC,IACZA,KAAUD,EAAI,MADX;IAIE,OAAAD;AACT;AAMO,SAASG,GACdC,CAAAA;IAIA,MAAMC,IAAgC,EAAtC;IACA,IAAA,IAAS5H,IAAI,GAAGA,IAAI2H,EAAU,MAAA,EAAQ3H,KAAK,EAChC,IAAA,IAAAU,IAAI,GAAGA,IAAIiH,CAAAA,CAAU3H,EAAC,CAAE,MAAA,EAAQU,KAAK,EACxCkH,CAAAA,CAAYlH,EAAC,IAAK,QAAkBkH,CAAAA,CAAAA,CAAAlH,EAAC,GAAI,EAAA,AAAA,GAC7CkH,CAAAA,CAAYlH,EAAC,CAAE,IAAA,CAAKiH,CAAAA,CAAU3H,EAAC,CAAEU,EAAE;IAIhC,OAAAkH,EAAY,GAAA,CAAIP;AACzB;AAKO,SAASQ,GAAqBC,CAAAA;IAC/B,IAAAA,EAAG,MAAA,KAAW,cAAc;QAC9B,MAAMP,IAAK,EAAX;QACA,IAAA,IAASQ,IAAM,GAAGA,IAAMD,EAAG,gBAAA,EAAkBC,KAAO,EAAG;YACrD,MAAMC,IAAcF,EAAG,cAAA,CAAe;gBAAE,YAAYC;YAAAA,IAC9CE,IAAU,IAAI,YAAYD;YAChCF,EAAG,MAAA,CAAOG,GAAS;gBAAE,YAAYF;YAAK,IACtCR,EAAG,IAAA,CAAK,IAAI,aAAaU;QAC3B;QACO,OAAAV;IAAA,OAAA,IACEO,EAAG,MAAA,KAAW,OAAO;QACxB,MAAAN,IAAM,IAAI,YAAYM,EAAG,cAAA,CAAe;YAAE,YAAY;QAAG;QAC/D,OAAAA,EAAG,MAAA,CAAON,GAAK;YAAE,YAAY;QAAG,IACzBU,GAAsB,IAAI,WAAWV,IAAMM,EAAG,gBAAgB;IACvE;IACA,MAAM,MAAM;AACd;AAQA,SAASI,GAAsBC,CAAAA,EAAwBC,CAAAA;IAC/C,MAAAC,IAAaF,EAAW,MAAA,GAASC,GACjCE,IAAa,MAAM,IADnB,CAEJ;QAAE,QAAQF;IAAY,GACtB,IAAM,IAAI,aAAaC;IAGzB,IAAA,IAASrI,IAAI,GAAGA,IAAIqI,GAAYrI,IAC9B,IAAA,IAASuI,IAAU,GAAGA,IAAUH,GAAaG,IAAW;QACtD,MAAMzC,IAASqC,CAAAA,CAAWnI,IAAIoI,IAAcG,EAA5C;QACAD,CAAAA,CAAWC,EAAO,CAAEvI,EAAC,GAAI8F,IAAS;IACpC;IAGK,OAAAwC;AACT;AAKO,SAASE,GAAuBC,CAAAA;IAC9B,OAAA,MAAMA,EAAG,gBAAgB,EAC7B,IAAA,CAAK,GACL,GAAA,CAAI,CAACpH,GAAG0G,IACAU,EAAG,cAAA,CAAeV;AAE/B;AAQgB,SAAAW,GAAsBZ,CAAAA,EAAea,CAAAA;IACnD,MAAMC,IAAO,IAAI,aACfvB,GAAmBQ,GAAqBC,KACxC,GAAA,CAAI,CAACtH,IAAMA,IAAImI,IACXE,IAAQ,IAAI,UAAU;QAC1B,YAAYf,EAAG,UADW;QAE1B,kBAAkBA,EAAG,gBADN;QAEf,WAAWA,EAAG,SADO;QAErB,QAAQA,EAAG,MADG;QAEd,gBAAgBA,EAAG,cADR;QAEX,MAAAc;IAAA;IAEF,OAAAd,EAAG,KAAA,IACIe;AACT;AAmBsB,eAAAC,GACpBC,CAAAA,EACAC,CAAAA;IRpIK,IAAAC;IQsIL,MAAMxF,IAAO;QACX,MAAAuF;QACA,MAAMD;IAAA,GAEFG,IAAe,IAAI,aAAazF;IAEhC,MAAA,QAAQ,GAAA,CAAI;QAACyF,EAAa,SAAA;QAAWA,EAAa,MAAA,CAAO,KAAK;KAAC;IAErE,IAAIC,IAAAA,AAAAA,CAAAA,AAAWF,CAAAA,IAAAC,EAAa,MAAA,CAAO,aAAA,AAAA,KAApB,OAAA,KAAA,IAAAD,EAAmC,UAAA,AAAA,KAAc;IAEhE,MAAM1B,IAAmB,EAAzB;IACA,IAAA,IAASvH,IAAI,GAAGA,IAAImJ,GAAUnJ,KAAK,EAC9BuH,EAAA,IAAA,CAAA,AAAM,CAAA,MAAM2B,EAAa,MAAA,CAAO;QAAE,YAAYlJ;IAAA,EAAG,EAAG,KAAK;IAEvD,OAAAuH;AACT;AAkBO,SAAS6B,GAASC,CAAAA;IRvKlB,IAAAJ,GAAAK;IQwKL,MAAMC,IAAS,KAAK,GAAA,IAAOF,EAAO,GAAA,CAAI,CAAC5J;QRxKlC,IAAAwJ;QQwKwC,OAAA,AAAA,CAAA,AAAAA,CAAAA,IAAAxJ,CAAAA,CAAE,EAAC,AAAA,KAAH,OAAA,KAAA,IAAAwJ,EAAM,MAAA,AAAA,KAAU;IAAA,KACvDL,IAAO,IAAI,aAAaW,IAAS;IAEvC,IAAA,IAASC,IAAS,GAAGA,IAASD,GAAQC,IAAU;QAC9C,IAAIC,IAAQ,GACRC,IAAQ;QACZ,IAAA,IAASC,IAAW,GAAGA,IAAWN,EAAO,MAAA,EAAQM,IAAY;YAC3D,MAAMC,IAAAA,AAAAA,CAAAA,AAAMX,CAAAA,IAAAI,CAAAA,CAAOM,EAAQ,CAAE,EAAC,AAAA,KAAlB,OAAA,KAAA,IAAAV,CAAAA,CAAsBO,EAAAA,AAAAA,KAAW,GAEvCK,IAAAA,AAAAA,CAAAA,AAAMP,CAAAA,IAAAD,CAAAA,CAAOM,EAAQ,CAAE,EAAC,AAAA,KAAlB,OAAA,KAAA,IAAAL,CAAAA,CAAsBE,EAAAA,AAAAA,KAAWI;YACpCH,KAAAG,GACAF,KAAAG;QACX;QACAjB,CAAAA,CAAKY,EAAM,GAAIC,GACVb,CAAAA,CAAAY,IAASD,EAAM,GAAIG;IAC1B;IAEO,OAAAd;AACT;AAoBsB,eAAAkB,GACpBC,CAAAA,EACAC,CAAAA,EACAC,CAAAA;IAKA,MAAMC,IAAUH,EAAQ,MAAA,EAClBI,IAAW,MAAMF,EAAO,SAAS,EACpC,IAAA,CAAK,GACL,GAAA,CAAI,IAAM,IAAI,aAAa;IAC1B,IAAAC,MAAY,GAAU,OAAAC;IAEpB,MAAAnE,IAAM,KAAK,GAAA,IAAO+D,EAAQ,GAAA,CAAI,CAAC3J,IAAMA,EAAE,MAAM;IAC/C,IAAA4F,MAAQ,GAAU,OAAAmE;IAGlB,IAAA,WAAW,mBAAA,IAAuB,MACpC,OAAOJ,EAAQ,GAAf,CACE,CAAC/I,IACC,IAAI,aACF2F,GAAS3F,GAAGgJ,GAASC,EAAO,IAAA,EAAM;YAAE,QAAQ;YAAQ,KAAK,CAAA;QAAA;IAK3D,MAAAjL,IAAM,IAAI,WAAW,mBAArB,CACJiL,EAAO,SADkB,EAExBjE,IAAMiE,EAAO,IAAA,GAAQD,GACtBC,EAAO,IADe,GAGlBG,IAAWpL,EAAI,kBAAA,IACfyJ,IAAKzJ,EAAI,YAAA,CAAakL,GAASlE,GAAKgE;IAClC,OAAAD,EAAA,OAAA,CAAQ,CAACtJ,GAAGsH,IAAQU,EAAG,aAAA,CAAchI,GAAGsH,KAEhDqC,EAAS,MAAA,GAAS3B,GACT2B,EAAA,OAAA,CAAQpL,EAAI,WAAW,GAChCoL,EAAS,KAAA,IAEF5B,GAAuB,MAAMxJ,EAAI,cAAA;AAC1C;AAQO,SAASqL,GAAM9F,CAAAA;IACb,OAAA,IAAI,QAAQ,CAACzF;QACZ,MAAAwL,IAAOjG,GAAY;YAClBiG,KACGxL;QACPyF,GAAAA;IAAI;AAEX;AAgBgB,SAAAgG,GACd3B,CAAAA,EACA4B,CAAAA,EACAC,CAAAA;IAEA,MAAMC,IAAMD,IAAMD,GACZjD,IAAK,IAAI,aAAamD;IAC5B,IAAI1K,IAAI;IACR,MAAOA,IAAI0K,GACTnD,CAAAA,CAAGvH,EAAC,GAAI4I,CAAAA,CAAAA,AAAM4B,CAAAA,IAAQxK,CAAAA,IAAK4I,EAAK,MAAM,CAAA,EACjC5I,KAAA;IAEA,OAAAuH;AACT;AAwBgB,SAAAoD,GACd5B,CAAAA,EACA6B,CAAAA;IAOA,IAAIC,IAAS,CAAb;IACA,eAAeC;QACP,MAAAC,IAAShC,EAAO,SAAhB;QAEN,MAAO,CAAC8B,GAAQ;YACd,MAAM,EAAE,OAAAG,CAAAA,EAAO,MAAAC,CAAAA,EAAA,GAAS,MAAMF,EAAO,IAAA;YACrC,IAAIE,GAAM;gBACRL,EAAI,MAAA;gBACJ;YACF;YACM,MAAAA,EAAI,OAAA,CAAQI;QACpB;QAEAD,EAAO,WAAA,IACP,MAAMhC,EAAO,MADb;IAEF;IAEI,OAAA+B,IAAE,KAAA,CAAMzH,EAAI,KAAK,GAEd;QACIwH,IAAA,CAAA;IAAA;AAEb;A,I,K,O,a,M,a,O,S,M,S,O,S,M,S,O,O,M,O,C;A,S,G,C;I,O,K,E,U,I,O,S,C,c,C,I,C,G,a,E,O,G;A;A,I,K,C;A,C,S,C;IC5VA,IAAIxH,IAAO,aAAA,GAAA;QACT,IAAImH,IAAQ,aAAA,GAAA,IAAI,QACZU,IAAmB,GACnBC,IAAqB,GACrBC,IAAmB,GACnBC,IAAmB,GACnBC,IAAYJ,GACZK,IAAY;YACf,aAAc,SAASC,CAAAA;gBAClBA,KAAS,IAAA,CAAK,KAAA,GAAOF,IAAYD,IAC5BG,KAAS,IAAA,CAAK,IAAA,GAAMF,IAAYF,IAChCI,KAAS,IAAA,CAAK,IAAA,GAAMF,IAAYH,IAChCK,CAAAA,AAAS,IAAA,CAAK,KAAA,EAAOF,IAAYJ,CAAAA;YAE1C;YACD,OAAQ,SAASO,CAAAA,EAAQC,CAAAA;gBACpB,QAAQ,KAAA,KAAU,KAAA,KACrB,CAAA,QAAQ,KAAA,GAAQ,QAAQ,GAAA,AAAA,GAErBL,KAAmBC,KACtB,QAAQ,KAAA,CAAM,MAAIjI,EAAI,iBAAA,CAAkB,aAAA,GAAA,IAAI,SAAOmH,GAAM,OAAM,KAAI,MAAIiB,IAAO,KAAIC;YAEnF;YACD,KAAM,SAASD,CAAAA,EAAQC,CAAAA;gBACtB,IAAA,CAAK,KAAA,CAAMD,EAAO,GAAG;YACrB;YACD,MAAO,SAASA,CAAAA,EAAQC,CAAAA;gBACnBN,KAAkBE,KACrB,QAAQ,IAAA,CAAK,MAAIjI,EAAI,iBAAA,CAAkB,aAAA,GAAA,IAAI,SAAOmH,GAAM,OAAM,KAAI,MAAIiB,IAAO,KAAIC;YAElF;YACD,MAAO,SAASD,CAAAA,EAAQC,CAAAA;gBACnBP,KAAqBG,KACxB,QAAQ,IAAA,CAAK,MAAIjI,EAAI,iBAAA,CAAkB,aAAA,GAAA,IAAI,SAAOmH,GAAM,OAAM,KAAI,MAAIiB,IAAO,KAAIC;YAElF;YACD,OAAQ,SAASD,CAAAA,EAAQC,CAAAA;gBACpBR,KAAmBI,KACtB,QAAQ,KAAA,CAAM,MAAIjI,EAAI,iBAAA,CAAkB,aAAA,GAAA,IAAI,SAAOmH,GAAM,OAAM,KAAI,MAAIiB,IAAO,KAAIC;YAEnF;QACJ;QACE,OAAOH;IACT;IAGAlI,EAAI,iBAAA,GAAoB,SAASsI,CAAAA,EAAUC,CAAAA;QAC1C,IAAIC;QAEJ,SAASC,EAAIC,CAAAA,EAAQC,CAAAA;YAGpB,IAAA,IAFIC,IAAM,KAAKF,GACXtM,IAAIwM,EAAI,KAAA,CAAM,MACXxM,CAAAA,CAAE,EAAC,CAAE,MAAA,GAASuM,GACpBvM,CAAAA,CAAE,EAAC,GAAI,MAAMA,CAAAA,CAAE,EAAf;YAED,OAAOA,EAAE,IAAA,CAAK;QACd;QACGkM,IAAW,IACdE,CAAAA,IAAM,CAAA,GACNF,IAAW,CAACA,CAAAA,IAEZE,IAAM,CAJP;QAMA,IAAIK,IAAYN,KAAc,GAC1BO,IAAeR,IAASO,GACxBE,IAAQ,KAAK,KAAA,CAAMD,IAAa;QACpCA,KAAgBC,IAAQ;QACxB,IAAIC,IAAU,KAAK,KAAA,CAAMF,IAAa;QACtCA,KAAgBE,IAAU;QAC1B,IAAIC,IAAOH,IAAa;QACxB,OAAAA,IAAe,KAAK,KAAA,CAAMA,IAC1BG,KAAQH,IAAa,KACrBG,IAAO,KAAK,KAAA,CAAMA,IAAI,AACdT,CAAAA,IAAM,MAAK,EAAA,IAAIO,IAAM,MAAIN,EAAIO,GAAQ,KAAG,MAAIP,EAAIK,GAAa,KAAG,MAAIL,EAAIQ,GAAK;IACrF,GAGDjJ,EAAI,WAAA,GAAc,SAASkJ,CAAAA;QAC1B,IAAIP,IAASO,EAAO,MAApB;QACA,IAAIP,IAAS,GAAG;YAEf,IAAA,IADIC,IAAM,IACDjM,IAAI,GAAGA,IAAIgM,GAAQhM,IACtBA,IAAI,KAAGiM,CAAAA,KAAO,GAAA,GAClBA,KAAO,MAAI5I,EAAI,iBAAA,CAAkBkJ,EAAO,KAAA,CAAMvM,MAAK,MAAIqD,EAAI,iBAAA,CAAkBkJ,EAAO,GAAA,CAAIvM,MAAI;YAE9F,OAAOiM;QACT,OACE,OAAO;IAER,GAGAO,EAAA,GAAA,GAAcnJ;IAGf,IAAIoJ,IAAe,SAASC,CAAAA;QAC1B,IAAIA,aAAuB,aACzB,IAAA,CAAK,MAAA,GAASA,GACd,IAAA,CAAK,QAAA,GAAW,IAAI,SAASA;aAE7B,MAAO;QAET,IAAA,CAAK,QAAA,GAAW;IAClB;IAKAD,EAAa,SAAA,CAAU,WAAA,GAAc;QACnC,OAAO,IAAA,CAAK,QAAZ;IACD,GAEDA,EAAa,SAAA,CAAU,cAAA,GAAiB;QACtC,OAAO,IAAA,CAAK,MAAA,CAAO,UAAnB;IACD,GAEDA,EAAa,SAAA,CAAU,SAAA,GAAY;QACjC,OAAO,IAAA,CAAK,MAAA,CAAO,UAAnB;IACD,GAEDA,EAAa,SAAA,CAAU,IAAA,GAAO,SAAUE,CAAAA;QACtC,IAAIC,IAAO,KAAK,GAAA,CAAI,GAAG,KAAK,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,UAAA,EAAYD;QACxD,OAAA,IAAA,CAAK,QAAA,GAAY,MAAMC,MAAS,CAAC,SAASA,KAAS,IAAIA,GAChD,CADP;IAED,GAEDH,EAAa,SAAA,CAAU,KAAA,GAAQ;QAC7B,OAAO,IAAA,CAAK,WAAA,MAAiB,IAAA,CAAK,cAAA;IACnC,GAKDA,EAAa,SAAA,CAAU,UAAA,GAAa,SAASI,CAAAA,EAAMC,CAAAA;QACjD,IAAIC,IAAM;QACV,IAAI,IAAA,CAAK,QAAA,GAAWF,KAAQ,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY;YAClD,OAAQA;gBACN,KAAK;oBACCC,IACFC,IAAM,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,QAAQ,IAEzCA,IAAM,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,QAAQ;oBAE5C;gBACF,KAAK;oBACCD,IACFC,IAAM,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,QAAQ,IAE1CA,IAAM,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,IAAA,CAAK,QAAQ;oBAE7C;gBACF,KAAK;oBACH,IAAID,GACF,MAAO;oBAEPC,IAAM,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,QAAQ,KAAK,IAC/CA,KAAO,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,QAAA,GAAS,MAAM,GAClDA,KAAO,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,QAAA,GAAS;oBAE9C;gBACF,KAAK;oBACCD,IACFC,IAAM,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,QAAQ,IAE1CA,IAAM,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,IAAA,CAAK,QAAQ;oBAE7C;gBACF,KAAK;oBACH,IAAID,GACF,MAAO;oBAEPC,IAAM,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,IAAA,CAAK,QAAQ,KAAK,IAChDA,KAAO,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,IAAA,CAAK,QAAA,GAAS;oBAE/C;gBACF;oBACE,MAAO,8CAA4CF;YACtD;YACD,OAAA,IAAA,CAAK,QAAA,IAAWA,GACTE;QACX,OACI,MAAO;IAEV,GAEDN,EAAa,SAAA,CAAU,SAAA,GAAY;QACjC,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;IAC3B,GAEDA,EAAa,SAAA,CAAU,UAAA,GAAa;QAClC,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;IAC3B,GAEDA,EAAa,SAAA,CAAU,UAAA,GAAa;QAClC,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;IAC3B,GAEDA,EAAa,SAAA,CAAU,UAAA,GAAa;QAClC,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;IAC3B,GAEDA,EAAa,SAAA,CAAU,UAAA,GAAa;QAClC,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;IAC3B,GAEDA,EAAa,SAAA,CAAU,UAAA,GAAa,SAAST,CAAAA;QAC3C,IAAI,IAAA,CAAK,QAAA,GAAWA,KAAU,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY;YAEpD,IAAA,IADI1M,IAAI,IACCU,IAAI,GAAGA,IAAIgM,GAAQhM,IAC1BV,KAAK,OAAO,YAAA,CAAa,IAAA,CAAK,SAAA;YAEhC,OAAOA;QACX,OACI,MAAO;IAEV,GAEDmN,EAAa,SAAA,CAAU,WAAA,GAAc;QAEnC,IAAA,IADIO,IAAM,EAAA,GACE;YACV,IAAI1M,IAAI,IAAA,CAAK,SAAb;YACA,IAAIA,MAAM,GACR0M,EAAI,IAAA,CAAK1M;iBAET;QAEH;QACD,OAAO,OAAO,YAAA,CAAa,KAAA,CAAM,MAAM0M;IACxC,GAEDP,EAAa,SAAA,CAAU,QAAA,GAAW;QAChC,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;IAC3B,GAEDA,EAAa,SAAA,CAAU,SAAA,GAAY;QACjC,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;IAC3B,GAEDA,EAAa,SAAA,CAAU,SAAA,GAAY;QACjC,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;IAC3B,GAEDA,EAAa,SAAA,CAAU,SAAA,GAAY;QACjC,OAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA;IAC3B,GAEDA,EAAa,SAAA,CAAU,cAAA,GAAiB,SAAST,CAAAA;QAE/C,IAAA,IADIgB,IAAM,IAAI,WAAWhB,IAChBhM,IAAI,GAAGA,IAAIgM,GAAQhM,IAC1BgN,CAAAA,CAAIhN,EAAC,GAAI,IAAA,CAAK,SAAA;QAEhB,OAAOgN;IACR,GAEDP,EAAa,SAAA,CAAU,cAAA,GAAiB,SAAST,CAAAA;QAE/C,IAAA,IADIgB,IAAM,IAAI,WAAWhB,IAChBhM,IAAI,GAAGA,IAAIgM,GAAQhM,IAC1BgN,CAAAA,CAAIhN,EAAC,GAAI,IAAA,CAAK,SAAA;QAEhB,OAAOgN;IACR,GAEDP,EAAa,SAAA,CAAU,eAAA,GAAkB,SAAST,CAAAA;QAEhD,IAAA,IADIgB,IAAM,IAAI,WAAWhB,IAChBhM,IAAI,GAAGA,IAAIgM,GAAQhM,IAC1BgN,CAAAA,CAAIhN,EAAC,GAAI,IAAA,CAAK,UAAA;QAEhB,OAAOgN;IACR,GAEDP,EAAa,SAAA,CAAU,eAAA,GAAkB,SAAST,CAAAA;QAEhD,IAAA,IADIgB,IAAM,IAAI,YAAYhB,IACjBhM,IAAI,GAAGA,IAAIgM,GAAQhM,IAC1BgN,CAAAA,CAAIhN,EAAC,GAAI,IAAA,CAAK,UAAA;QAEhB,OAAOgN;IACR,GAEDP,EAAa,SAAA,CAAU,cAAA,GAAiB,SAAST,CAAAA;QAE/C,IAAA,IADIgB,IAAM,IAAI,WAAWhB,IAChBhM,IAAI,GAAGA,IAAIgM,GAAQhM,IAC1BgN,CAAAA,CAAIhN,EAAC,GAAI,IAAA,CAAK,SAAA;QAEhB,OAAOgN;IACR,GAGCR,EAAA,YAAA,GAAuBC;IAUzB,IAAIQ,IAAa,SAASP,CAAAA,EAAaQ,CAAAA,EAAYC,CAAAA;QACjD,IAAA,CAAK,WAAA,GAAcD,KAAc,GAC7BR,aAAuB,cACzB,IAAA,CAAK,MAAA,GAASA,IACL,OAAOA,KAAe,WAC/B,CAAA,IAAA,CAAK,QAAA,GAAWA,GACZQ,KACF,CAAA,IAAA,CAAK,WAAA,IAAeA,CAAAA,CAAAA,IAGtB,IAAA,CAAK,MAAA,GAAS,IAAI,YAAYR,KAAe,IAE/C,IAAA,CAAK,QAAA,GAAW,GAChB,IAAA,CAAK,UAAA,GAAaS,KAAqBF,EAAW,aAZlD;IAaF;IACAA,EAAW,SAAA,GAAY,CAAA,GAEvBA,EAAW,SAAA,CAAU,WAAA,GAAc;QACjC,OAAO,IAAA,CAAK,QAAZ;IACD,GAODA,EAAW,SAAA,CAAU,QAAA,GAAW,SAASG,CAAAA;QACvC,IAAK,IAAA,CAAK,YAAA,EAGV;YAAA,IAAIC,IAAM,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,QAAA,GAAWD,GACzCE,IAAO,IAAA,CAAK,OAAA,CAAQ,UADxB;YAEA,IAAID,KAAOC,GAAM;gBACXD,IAAM,IAAA,CAAK,WAAA,IACb,CAAA,IAAA,CAAK,WAAA,GAAcA,CAAAA;gBAErB;YACD;YAID,IAHIC,IAAO,KACTA,CAAAA,IAAO,CAAA,GAEFD,IAAMC,GACXA,KAAQ;YAEV,IAAI9F,IAAM,IAAI,YAAY8F,IACtBC,IAAM,IAAI,WAAW,IAAA,CAAK,OAAO,GACjCC,IAAM,IAAI,WAAWhG,GAAK,GAAG+F,EAAI,MAAM;YAC3CC,EAAI,GAAA,CAAID,IACR,IAAA,CAAK,MAAA,GAAS/F,GACd,IAAA,CAAK,WAAA,GAAc6F;QAAA;IACrB,GAUAJ,EAAW,SAAA,CAAU,UAAA,GAAa;QAChC,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,OAAA,CAAQ,UAAA,EAGrC;YAAA,IAAIzF,IAAM,IAAI,YAAY,IAAA,CAAK,WAAW,GACtCgG,IAAM,IAAI,WAAWhG,IACrB+F,IAAM,IAAI,WAAW,IAAA,CAAK,OAAA,EAAS,GAAGC,EAAI,MAAM;YACpDA,EAAI,GAAA,CAAID,IACR,IAAA,CAAK,MAAA,GAAS/F;QAAA;IAChB,GAOAyF,EAAW,UAAA,GAAa,CAAA,GAMxBA,EAAW,aAAA,GAAgB,CAAA,GAQ3BA,EAAW,SAAA,CAAU,WAAA,GAAc,GAMnC,OAAO,cA5BS,CA4BMA,EAAW,SAA1B,EAAqC,cAC1C;QAAE,KAAK;YACL,OAAO,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,WAA/B;QACD;IAAA,IAOH,OAAO,cAPJ,CAOmBA,EAAW,SAA1B,EAAqC,UAC1C;QAAE,KAAK;YACH,OAAA,IAAA,CAAK,UAAA,IACE,IAAA,CAAK,OADZ;QAED;QACD,KAAK,SAASzM,CAAAA;YACZ,IAAA,CAAK,OAAA,GAAUA,GACf,IAAA,CAAK,SAAA,GAAY,IAAI,SAAS,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,WAAW,GAC5D,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,UAFhC;QAGD;IAAA,IAOL,OAAO,cAPF,CAOiByM,EAAW,SAA1B,EAAqC,cAC1C;QAAE,KAAK;YACH,OAAO,IAAA,CAAK,WAAZ;QACD;QACD,KAAK,SAASzM,CAAAA;YACZ,IAAA,CAAK,WAAA,GAAcA,GACnB,IAAA,CAAK,SAAA,GAAY,IAAI,SAAS,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,WAAW,GAC5D,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,UAFhC;QAGD;IAAA,IAOL,OAAO,cAPF,CAOiByM,EAAW,SAA1B,EAAqC,YAC1C;QAAE,KAAK;YACH,OAAO,IAAA,CAAK,SAAZ;QACD;QACD,KAAK,SAASzM,CAAAA;YACZ,IAAA,CAAK,WAAA,GAAcA,EAAE,UAAA,EACrB,IAAA,CAAK,OAAA,GAAUA,EAAE,MAAA,EACjB,IAAA,CAAK,SAAA,GAAY,IAAI,SAAS,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,WAAW,GAC5D,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,WAAA,GAAcA,EAAE,UAHxC;QAID;IAAA,IASLyM,EAAW,SAAA,CAAU,IAAA,GAAO,SAASN,CAAAA;QACnC,IAAIC,IAAO,KAAK,GAAA,CAAI,GAAG,KAAK,GAAA,CAAI,IAAA,CAAK,UAAA,EAAYD;QACjD,IAAA,CAAK,QAAA,GAAY,MAAMC,MAAS,CAAC,SAASA,KAAS,IAAIA;IACzD,GAQAK,EAAW,SAAA,CAAU,KAAA,GAAQ;QAC3B,OAAQ,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,WAA9B;IACF,GAYAA,EAAW,SAAA,CAAU,aAAA,GAAgB,SAASjB,CAAAA;QAC5C,IAAA,CAAK,QAAA,CAASA,IAAS;QACvB,IAAIgB,IAAM,IAAI,WAAW,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,EAAUhB;QACtE,OAAA,IAAA,CAAK,QAAA,IAAYA,IAAS,GACnBgB;IACT,GAUAC,EAAW,SAAA,CAAU,cAAA,GAAiB,SAASjB,CAAAA,EAAQ,CAAA;QACrDA,IAASA,KAAkB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAW;QAC3D,IAAIgB,IAAM,IAAI,WAAWhB;QACzB,OAAAiB,EAAW,MAAX,CAAkBD,EAAI,MAAX,EAAmB,GACZ,IAAA,CAAK,MADO,EACC,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA7B,EACLhB,IAAOgB,EAAI,iBADuB,GAEpDC,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYA,EAAI,UAAA,EACdA;IACT,GASAC,EAAW,SAAA,CAAU,cAAA,GAAiB,SAASjB,CAAAA,EAAQ,CAAA;QACrDA,IAASA,KAAkB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAW;QAC3D,IAAIgB,IAAM,IAAI,WAAWhB;QACzB,OAAAiB,EAAW,MAAX,CAAkBD,EAAI,MAAX,EAAmB,GACZ,IAAA,CAAK,MADO,EACC,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA7B,EACLhB,IAAOgB,EAAI,iBADuB,GAEpDC,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYA,EAAI,UAAA,EACdA;IACT,GASAC,EAAW,SAAA,CAAU,aAAA,GAAgB,SAASjB,CAAAA;QAC5CA,IAASA,KAAkB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAhD;QACA,IAAIgB,IAAM,IAAI,UAAUhB;QACxB,OAAAiB,EAAW,MAAX,CAAkBD,EAAI,MAAX,EAAmB,GACZ,IAAA,CAAK,MADO,EACC,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA7B,EACLhB,IAAOgB,EAAI,iBADuB,GAEpD,IAAA,CAAK,QAAA,IAAYA,EAAI,UAAA,EACdA;IACT,GASAC,EAAW,SAAA,CAAU,eAAA,GAAkB,SAASjB,CAAAA,EAAQ,CAAA;QACtDA,IAASA,KAAkB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAW;QAC3D,IAAIgB,IAAM,IAAI,YAAYhB;QAC1B,OAAAiB,EAAW,MAAX,CAAkBD,EAAI,MAAX,EAAmB,GACZ,IAAA,CAAK,MADO,EACC,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA7B,EACLhB,IAAOgB,EAAI,iBADuB,GAEpDC,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYA,EAAI,UAAA,EACdA;IACT,GASAC,EAAW,SAAA,CAAU,eAAA,GAAkB,SAASjB,CAAAA,EAAQ,CAAA;QACtDA,IAASA,KAAkB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAW;QAC3D,IAAIgB,IAAM,IAAI,YAAYhB;QAC1B,OAAAiB,EAAW,MAAX,CAAkBD,EAAI,MAAX,EAAmB,GACZ,IAAA,CAAK,MADO,EACC,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA7B,EACLhB,IAAOgB,EAAI,iBADuB,GAEpDC,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYA,EAAI,UAAA,EACdA;IACT,GASAC,EAAW,SAAA,CAAU,cAAA,GAAiB,SAASjB,CAAAA;QAC7CA,IAASA,KAAkB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAhD;QACA,IAAIgB,IAAM,IAAI,WAAWhB;QACzB,OAAAiB,EAAW,MAAX,CAAkBD,EAAI,MAAX,EAAmB,GACZ,IAAA,CAAK,MADO,EACC,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA7B,EACLhB,IAAOgB,EAAI,iBADuB,GAEpD,IAAA,CAAK,QAAA,IAAYA,EAAI,UAAA,EACdA;IACT,GASAC,EAAW,SAAA,CAAU,gBAAA,GAAmB,SAASjB,CAAAA,EAAQ,CAAA;QACvDA,IAASA,KAAkB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAW;QAC3D,IAAIgB,IAAM,IAAI,aAAahB;QAC3B,OAAAiB,EAAW,MAAX,CAAkBD,EAAI,MAAX,EAAmB,GACZ,IAAA,CAAK,MADO,EACC,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA7B,EACLhB,IAAOgB,EAAI,iBADuB,GAEpDC,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYA,EAAI,UAAA,EACdA;IACT,GASAC,EAAW,SAAA,CAAU,gBAAA,GAAmB,SAASjB,CAAAA,EAAQ,CAAA;QACvDA,IAASA,KAAkB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAW;QAC3D,IAAIgB,IAAM,IAAI,aAAahB;QAC3B,OAAAiB,EAAW,MAAX,CAAkBD,EAAI,MAAX,EAAmB,GACZ,IAAA,CAAK,MADO,EACC,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA7B,EACLhB,IAAOgB,EAAI,iBADuB,GAEpDC,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYA,EAAI,UAAA,EACdA;IACT,GASAC,EAAW,SAAA,CAAU,SAAA,GAAY,SAAS7N,CAAAA;QACxC,IAAIoB,IAAI,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,QAAA,EAAUpB,KAAY,IAAA,CAAK,UAAc;QAC9E,OAAA,IAAA,CAAK,QAAA,IAAY,GACVoB;IACT,GAQAyM,EAAW,SAAA,CAAU,SAAA,GAAY,SAAS7N,CAAAA;QACxC,IAAIoB,IAAI,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,QAAA,EAAUpB,KAAY,IAAA,CAAK,UAAc;QAC9E,OAAA,IAAA,CAAK,QAAA,IAAY,GACVoB;IACT,GAOAyM,EAAW,SAAA,CAAU,QAAA,GAAW;QAC9B,IAAIzM,IAAI,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAA,CAAK,QAAQ;QAC5C,OAAA,IAAA,CAAK,QAAA,IAAY,GACVA;IACT,GAQAyM,EAAW,SAAA,CAAU,UAAA,GAAa,SAAS7N,CAAAA;QACzC,IAAIoB,IAAI,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,QAAA,EAAUpB,KAAY,IAAA,CAAK,UAAc;QAC/E,OAAA,IAAA,CAAK,QAAA,IAAY,GACVoB;IACT,GAQAyM,EAAW,SAAA,CAAU,UAAA,GAAa,SAAS7N,CAAAA;QACzC,IAAIoB,IAAI,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,QAAA,EAAUpB,KAAY,IAAA,CAAK,UAAc;QAC/E,OAAA,IAAA,CAAK,QAAA,IAAY,GACVoB;IACT,GAOAyM,EAAW,SAAA,CAAU,SAAA,GAAY;QAC/B,IAAIzM,IAAI,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,QAAQ;QAC7C,OAAA,IAAA,CAAK,QAAA,IAAY,GACVA;IACT,GAQAyM,EAAW,SAAA,CAAU,WAAA,GAAc,SAAS7N,CAAAA;QAC1C,IAAIoB,IAAI,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,QAAA,EAAUpB,KAAY,IAAA,CAAK,UAAc;QAChF,OAAA,IAAA,CAAK,QAAA,IAAY,GACVoB;IACT,GAQAyM,EAAW,SAAA,CAAU,WAAA,GAAc,SAAS7N,CAAAA;QAC1C,IAAIoB,IAAI,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,QAAA,EAAUpB,KAAY,IAAA,CAAK,UAAc;QAChF,OAAA,IAAA,CAAK,QAAA,IAAY,GACVoB;IACT,GAQAyM,EAAW,UAAA,GAAa,IAAI,UAAU,IAAI,WAAW;QAAC;KAAE,EAAE,MAAM,CAAA,CAAE,EAAC,GAAI,GAYvEA,EAAW,MAAA,GAAS,SAASO,CAAAA,EAAKC,CAAAA,EAAWF,CAAAA,EAAKG,CAAAA,EAAWC,CAAAA;QAC3D,IAAIC,IAAQ,IAAI,WAAWJ,GAAKC,GAAWE,IACvCE,IAAQ,IAAI,WAAWN,GAAKG,GAAWC;QAC3CC,EAAM,GAAA,CAAIC;IACZ,GAUAZ,EAAW,aAAA,GAAgB,SAASa,CAAAA,EAAOC,CAAAA;QACzC,OAAIA,KAAuB,IAAA,CAAK,UAAA,GACvBD,IAEA,IAAA,CAAK,mBAAA,CAAoBA;IAEpC,GAUAb,EAAW,cAAA,GAAiB,SAASa,CAAAA,EAAOE,CAAAA;QAC1C,OAAI,IAAA,CAAK,UAAA,IAAcA,IACdF,IAEA,IAAA,CAAK,mBAAA,CAAoBA;IAEpC,GAQAb,EAAW,mBAAA,GAAsB,SAASa,CAAAA;QAExC,IAAA,IADIG,IAAK,IAAI,WAAWH,EAAM,MAAA,EAAQA,EAAM,UAAA,EAAYA,EAAM,UAAU,GAC/D9N,IAAE,GAAGA,IAAE8N,EAAM,UAAA,EAAY9N,KAAG8N,EAAM,iBAA3C,CACE,IAAA,IAASpN,IAAEV,IAAE8N,EAAM,iBAAA,GAAkB,GAAGnN,IAAEX,GAAGU,IAAEC,GAAGD,KAAKC,IAAK;YAC1D,IAAIuN,IAAMD,CAAAA,CAAGtN,EAAb;YACAsN,CAAAA,CAAGtN,EAAC,GAAIsN,CAAAA,CAAGvN,EAAC,EACZuN,CAAAA,CAAGvN,EAAC,GAAIwN;QACT;QAEH,OAAOJ;IACT,GAQAb,EAAW,SAAA,CAAU,eAAA,GAAkB,GAEvC,OAAO,iBAAA,GAAoB,SAASkB,CAAAA;QAEhC,IAAA,IADInB,IAAM,EAAA,EACDhN,IAAI,GAAGA,IAAImO,EAAS,MAAA,EAAQnO,IACnCgN,CAAAA,CAAIhN,EAAC,GAAImO,CAAAA,CAASnO,EAAlB;QAEF,OAAO,OAAO,YAAA,CAAa,KAAA,CAAM,MAAMgN;IAC1C,GASDC,EAAW,SAAA,CAAU,UAAA,GAAa,SAASjB,CAAAA,EAAQoC,CAAAA;QACjD,OAAIA,KAAY,QAAQA,KAAY,UAC3B,OAAO,iBAAA,CAAkB,KAAA,CAAM,MAAM;YAAC,IAAA,CAAK,aAAA,CAAcpC,KAAiB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAiB;SAAE,IAEjH,IAAI,YAAYoC,GAAW,MAAA,CAAO,IAAA,CAAK,aAAA,CAAcpC;IAEjE,GASAiB,EAAW,SAAA,CAAU,WAAA,GAAc,SAASjB,CAAAA;QAC1C,IAAIsB,IAAO,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,EAC5BW,IAAK,IAAI,WAAW,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,QAAQ,GAClEjI,IAAMsH;QACNtB,KAAU,QACZhG,CAAAA,IAAM,KAAK,GAAA,CAAIgG,GAAQsB,EAAI;QAE7B,IAAA,IAAStN,IAAI,GAAGA,IAAIgG,KAAOiI,CAAAA,CAAGjO,EAAC,KAAM,GAAGA;QACxC,IAAIV,IAAI,OAAO,iBAAA,CAAkB,KAAA,CAAM,MAAM;YAAC,IAAA,CAAK,aAAA,CAAcU;SAAG;QACpE,OAAIgM,KAAU,OACZ,IAAA,CAAK,QAAA,IAAYhG,IAAIhG,IACZA,KAAKsN,KACd,CAAA,IAAA,CAAK,QAAA,IAAY,CAAA,GAEZhO;IACT;IAMA,IAAI+O,IAAW,KAAK,GAAA,CAAI,GAAG;IAE3BpB,EAAW,SAAA,CAAU,SAAA,GAAY;QAC/B,OAAQ,IAAA,CAAK,SAAA,KAAYoB,IAAU,IAAA,CAAK,UAAxC;IACD,GACDpB,EAAW,SAAA,CAAU,UAAA,GAAa;QACjC,OAAQ,IAAA,CAAK,UAAA,KAAaoB,IAAU,IAAA,CAAK,UAAzC;IACA,GAEDpB,EAAW,SAAA,CAAU,SAAA,GAAY;QAC/B,OAAQ,IAAA,CAAK,UAAA,KAAaoB,IAAU,IAAA,CAAK,UAAzC;IACD,GAEDpB,EAAW,SAAA,CAAU,UAAA,GAAa;QACjC,OAAA,AAAQ,CAAA,IAAA,CAAK,SAAA,MAAa,EAAA,IAAK,CAAA,IAAA,CAAK,SAAA,MAAa,CAAA,IAAG,IAAA,CAAK,SAAA;IACzD,GAGCT,EAAA,UAAA,GAAqBS,GAUvBA,EAAW,SAAA,CAAU,IAAA,GAAO,SAASqB,CAAAA;QACnC,IAAIvK,IAAO,IAAI,KAAK;YAAC,IAAA,CAAK,MAAM;SAAC;QACjC,IAAI,OAAO,GAAA,IAAO,IAAI,eAAA,EAAiB;YACnC,IAAIC,IAAM,OAAO,GAAA,CAAI,eAAA,CAAgBD,IACjCtE,IAAI,SAAS,aAAA,CAAc;YAE/B,SAAS,IAAA,CAAK,WAAA,CAAYA,IAC1BA,EAAE,YAAA,CAAa,QAAQuE,IACvBvE,EAAE,YAAA,CAAa,YAAY6O,IAE3B7O,EAAE,YAAA,CAAa,UAAU,UACzBA,EAAE,KAAA,IACF,OAAO,GAAA,CAAI,eAAA,CAAgBuE;QACjC,OACM,MAAM;IAEZ,GAQAiJ,EAAW,SAAA,CAAU,YAAA,GAAe,CAAA,GACpC,OAAO,cAXK,CAWUA,EAAW,SAA1B,EAAqC,eAC1C;QAAE,KAAK;YACH,OAAO,IAAA,CAAK,YAAZ;QACD;QACD,KAAK,SAASzM,CAAAA;YACPA,KACH,IAAA,CAAK,UAAA,IAEP,IAAA,CAAK,YAAA,GAAeA;QACrB;IAAA,IAQLyM,EAAW,SAAA,CAAU,KAAA,GAAQ,SAASxF,CAAAA;QACpC,IAAID,IAAM,IAAI,YAAY,IAAA,CAAK,WAAA,GAAYC,IACvC+F,IAAM,IAAI,WAAWhG,IACrB+F,IAAM,IAAI,WAAW,IAAA,CAAK,OAAA,EAAS9F,GAAQ+F,EAAI,MAAM;QACzDA,EAAI,GAAA,CAAID,IACR,IAAA,CAAK,MAAA,GAAS/F,GACd,IAAA,CAAK,QAAA,IAAYC;IACnB,GAQAwF,EAAW,SAAA,CAAU,eAAA,GAAkB,SAASD,CAAAA,EAAK,CAAA;QAEnD,IADA,IAAA,CAAK,QAAA,CAASA,EAAI,MAAA,GAAS,IACvBA,aAAe,cACf,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAWA,EAAI,iBAAA,KAAsB,GAC5DC,EAAW,MAAX,CAAkB,IAAA,CAAK,OAAZ,EAAqB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA9B,EACLD,EAAI,MAD+B,EACvB,GACZA,EAAI,UADQ,GAE9B,IAAA,CAAK,aAAA,CAAcA,EAAI,MAAA,EAAQ;aAE/B,IAAA,IAAShN,IAAE,GAAGA,IAAEgN,EAAI,MAAA,EAAQhN,IAC1B,IAAA,CAAK,UAAA,CAAWgN,CAAAA,CAAIhN,EAAC,EAAG;IAG9B,GAQAiN,EAAW,SAAA,CAAU,eAAA,GAAkB,SAASD,CAAAA,EAAK,CAAA;QAEnD,IADA,IAAA,CAAK,QAAA,CAASA,EAAI,MAAA,GAAS,IACvBA,aAAe,cACf,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAWA,EAAI,iBAAA,KAAsB,GAC5DC,EAAW,MAAX,CAAkB,IAAA,CAAK,OAAZ,EAAqB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA9B,EACLD,EAAI,MAD+B,EACvB,GACZA,EAAI,UADQ,GAE9B,IAAA,CAAK,aAAA,CAAcA,EAAI,MAAA,EAAQ;aAE/B,IAAA,IAAShN,IAAE,GAAGA,IAAEgN,EAAI,MAAA,EAAQhN,IAC1B,IAAA,CAAK,UAAA,CAAWgN,CAAAA,CAAIhN,EAAC,EAAG;IAG9B,GAOAiN,EAAW,SAAA,CAAU,cAAA,GAAiB,SAASD,CAAAA;QAE7C,IADA,IAAA,CAAK,QAAA,CAASA,EAAI,MAAA,GAAS,IACvBA,aAAe,aACf,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAWA,EAAI,iBAAA,KAAsB,GAC5DC,EAAW,MAAX,CAAkB,IAAA,CAAK,OAAZ,EAAqB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA9B,EACLD,EAAI,MAD+B,EACvB,GACZA,EAAI,UADQ,GAE9B,IAAA,CAAK,YAAA,CAAaA,EAAI,MAAM;aAE5B,IAAA,IAAShN,IAAE,GAAGA,IAAEgN,EAAI,MAAA,EAAQhN,IAC1B,IAAA,CAAK,SAAA,CAAUgN,CAAAA,CAAIhN,EAAE;IAG3B,GAQAiN,EAAW,SAAA,CAAU,gBAAA,GAAmB,SAASD,CAAAA,EAAK,CAAA;QAEpD,IADA,IAAA,CAAK,QAAA,CAASA,EAAI,MAAA,GAAS,IACvBA,aAAe,eACf,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAWA,EAAI,iBAAA,KAAsB,GAC5DC,EAAW,MAAX,CAAkB,IAAA,CAAK,OAAZ,EAAqB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA9B,EACLD,EAAI,MAD+B,EACvB,GACZA,EAAI,UADQ,GAE9B,IAAA,CAAK,cAAA,CAAeA,EAAI,MAAA,EAAQ;aAEhC,IAAA,IAAShN,IAAE,GAAGA,IAAEgN,EAAI,MAAA,EAAQhN,IAC1B,IAAA,CAAK,WAAA,CAAYgN,CAAAA,CAAIhN,EAAC,EAAG;IAG/B,GAQAiN,EAAW,SAAA,CAAU,gBAAA,GAAmB,SAASD,CAAAA,EAAK,CAAA;QAEpD,IADA,IAAA,CAAK,QAAA,CAASA,EAAI,MAAA,GAAS,IACvBA,aAAe,eACf,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAWA,EAAI,iBAAA,KAAsB,GAC5DC,EAAW,MAAX,CAAkB,IAAA,CAAK,OAAZ,EAAqB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA9B,EACLD,EAAI,MAD+B,EACvB,GACZA,EAAI,UADQ,GAE9B,IAAA,CAAK,cAAA,CAAeA,EAAI,MAAA,EAAQ;aAEhC,IAAA,IAAShN,IAAE,GAAGA,IAAEgN,EAAI,MAAA,EAAQhN,IAC1B,IAAA,CAAK,WAAA,CAAYgN,CAAAA,CAAIhN,EAAC,EAAG;IAG/B,GAOAiN,EAAW,SAAA,CAAU,eAAA,GAAkB,SAASD,CAAAA;QAE9C,IADA,IAAA,CAAK,QAAA,CAASA,EAAI,MAAA,GAAS,IACvBA,aAAe,cACf,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAWA,EAAI,iBAAA,KAAsB,GAC5DC,EAAW,MAAX,CAAkB,IAAA,CAAK,OAAZ,EAAqB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA9B,EACLD,EAAI,MAD+B,EACvB,GACZA,EAAI,UADQ,GAE9B,IAAA,CAAK,aAAA,CAAcA,EAAI,MAAM;aAE7B,IAAA,IAAShN,IAAE,GAAGA,IAAEgN,EAAI,MAAA,EAAQhN,IAC1B,IAAA,CAAK,UAAA,CAAWgN,CAAAA,CAAIhN,EAAE;IAG5B,GAQAiN,EAAW,SAAA,CAAU,iBAAA,GAAoB,SAASD,CAAAA,EAAK,CAAA;QAErD,IADA,IAAA,CAAK,QAAA,CAASA,EAAI,MAAA,GAAS,IACvBA,aAAe,gBACf,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAWA,EAAI,iBAAA,KAAsB,GAC5DC,EAAW,MAAX,CAAkB,IAAA,CAAK,OAAZ,EAAqB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA9B,EACLD,EAAI,MAD+B,EACvB,GACZA,EAAI,UADQ,GAE9B,IAAA,CAAK,eAAA,CAAgBA,EAAI,MAAA,EAAQ;aAEjC,IAAA,IAAShN,IAAE,GAAGA,IAAEgN,EAAI,MAAA,EAAQhN,IAC1B,IAAA,CAAK,YAAA,CAAagN,CAAAA,CAAIhN,EAAC,EAAG;IAGhC,GAQAiN,EAAW,SAAA,CAAU,iBAAA,GAAoB,SAASD,CAAAA,EAAK,CAAA;QAErD,IADA,IAAA,CAAK,QAAA,CAASA,EAAI,MAAA,GAAS,IACvBA,aAAe,gBACf,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,GAAWA,EAAI,iBAAA,KAAsB,GAC5DC,EAAW,MAAX,CAAkB,IAAA,CAAK,OAAZ,EAAqB,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAA9B,EACLD,EAAI,MAD+B,EACvB,GACZA,EAAI,UADQ,GAE9B,IAAA,CAAK,eAAA,CAAgBA,EAAI,MAAA,EAAQ;aAEjC,IAAA,IAAShN,IAAE,GAAGA,IAAEgN,EAAI,MAAA,EAAQhN,IAC1B,IAAA,CAAK,YAAA,CAAagN,CAAAA,CAAIhN,EAAC,EAAG;IAGhC,GASAiN,EAAW,SAAA,CAAU,UAAA,GAAa,SAASzM,CAAAA,EAAG,CAAA;QAC5C,IAAA,CAAK,QAAA,CAAS,IACd,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,QAAA,EAAUA,GAAG,KAAY,IAAA,CAAK,UAAc,GACzE,IAAA,CAAK,QAAA,IAAY;IACnB,GAQAyM,EAAW,SAAA,CAAU,UAAA,GAAa,SAASzM,CAAAA,EAAG,CAAA;QAC5C,IAAA,CAAK,QAAA,CAAS,IACd,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,QAAA,EAAUA,GAAG,KAAY,IAAA,CAAK,UAAc,GACzE,IAAA,CAAK,QAAA,IAAY;IACnB,GAOAyM,EAAW,SAAA,CAAU,SAAA,GAAY,SAASzM,CAAAA;QACxC,IAAA,CAAK,QAAA,CAAS,IACd,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAUA,IACtC,IAAA,CAAK,QAAA,IAAY;IACnB,GAQAyM,EAAW,SAAA,CAAU,WAAA,GAAc,SAASzM,CAAAA,EAAG,CAAA;QAC7C,IAAA,CAAK,QAAA,CAAS,IACd,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,QAAA,EAAUA,GAAG,KAAY,IAAA,CAAK,UAAc,GAC1E,IAAA,CAAK,QAAA,IAAY;IACnB,GAQAyM,EAAW,SAAA,CAAU,WAAA,GAAc,SAASzM,CAAAA,EAAG,CAAA;QAC7C,IAAA,CAAK,QAAA,CAAS,IACd,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,IAAA,CAAK,QAAA,EAAUA,GAAG,KAAY,IAAA,CAAK,UAAc,GAC1E,IAAA,CAAK,QAAA,IAAY;IACnB,GAOAyM,EAAW,SAAA,CAAU,UAAA,GAAa,SAASzM,CAAAA;QACzC,IAAA,CAAK,QAAA,CAAS,IACd,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,QAAA,EAAUA,IACvC,IAAA,CAAK,QAAA,IAAY;IACnB,GAQAyM,EAAW,SAAA,CAAU,YAAA,GAAe,SAASzM,CAAAA,EAAG,CAAA;QAC9C,IAAA,CAAK,QAAA,CAAS,IACd,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,QAAA,EAAUA,GAAG,KAAY,IAAA,CAAK,UAAc,GAC3E,IAAA,CAAK,QAAA,IAAY;IACnB,GAQAyM,EAAW,SAAA,CAAU,YAAA,GAAe,SAASzM,CAAAA,EAAG,CAAA;QAC9C,IAAA,CAAK,QAAA,CAAS,IACd,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,IAAA,CAAK,QAAA,EAAUA,GAAG,KAAY,IAAA,CAAK,UAAc,GAC3E,IAAA,CAAK,QAAA,IAAY;IACnB,GAYAyM,EAAW,SAAA,CAAU,eAAA,GAAkB,SAAShB,CAAAA,EAAKkB,CAAAA,EAAYoB,CAAAA;QAC3DA,KAAkB,QACpBA,CAAAA,IAAiBtC,EAAI,MADvB,AAAA;QAGA,IAAA,IAASjM,IAAI,GAAGA,IAAIiM,EAAI,MAAA,IAAUjM,IAAIuO,GAAgBvO,IACpD,IAAA,CAAK,WAAA,CAAYiM,EAAI,UAAA,CAAWjM,IAAImN;QAEtC,MAAOnN,IAAEuO,GAAgBvO,IACvB,IAAA,CAAK,WAAA,CAAY;IAErB,GAUAiN,EAAW,SAAA,CAAU,WAAA,GAAc,SAAS3N,CAAAA,EAAG8O,CAAAA,EAAUpC,CAAAA;QACvD,IAAIhM,IAAI;QACR,IAAIoO,KAAY,QAAQA,KAAY;YAClC,IAAIpC,KAAU,MAAM;gBAClB,IAAIhG,IAAM,KAAK,GAAA,CAAI1G,EAAE,MAAA,EAAQ0M;gBAC7B,IAAKhM,IAAE,GAAGA,IAAEgG,GAAKhG,IACf,IAAA,CAAK,UAAA,CAAWV,EAAE,UAAA,CAAWU;gBAE/B,MAAOA,IAAEgM,GAAQhM,IACf,IAAA,CAAK,UAAA,CAAW;YAExB,OACM,IAAKA,IAAE,GAAGA,IAAEV,EAAE,MAAA,EAAQU,IACpB,IAAA,CAAK,UAAA,CAAWV,EAAE,UAAA,CAAWU;eAIjC,IAAA,CAAK,eAAA,CAAiB,IAAI,YAAYoO,GAAW,MAAA,CAAO9O,EAAE,SAAA,CAAU,GAAG0M;IAE3E,GAWAiB,EAAW,SAAA,CAAU,YAAA,GAAe,SAAS3N,CAAAA,EAAG0M,CAAAA;QAC9C,IAAIhM,IAAI;QACR,IAAIgM,KAAU,MAAM;YAClB,IAAIhG,IAAM,KAAK,GAAA,CAAI1G,EAAE,MAAA,EAAQ0M;YAC7B,IAAKhM,IAAE,GAAGA,IAAEgG,GAAKhG,IACf,IAAA,CAAK,UAAA,CAAWV,EAAE,UAAA,CAAWU;YAE/B,MAAOA,IAAEgM,GAAQhM,IACf,IAAA,CAAK,UAAA,CAAW;QAEtB,OAAS;YACL,IAAKA,IAAE,GAAGA,IAAEV,EAAE,MAAA,EAAQU,IACpB,IAAA,CAAK,UAAA,CAAWV,EAAE,UAAA,CAAWU;YAE/B,IAAA,CAAK,UAAA,CAAW;QACjB;IACH,GAUAiN,EAAW,SAAA,CAAU,WAAA,GAAc,SAASuB,CAAAA,EAAkBC,CAAAA;QAC5D,IAAA,IAASzO,IAAI,GAAGA,IAAIwO,EAAiB,MAAA,EAAQxO,KAAG,EAAG;YACjD,IAAId,IAAIsP,CAAAA,CAAiBxO,IAAE,EAA3B;YACA,IAAA,CAAK,SAAA,CAAUd,GAAGuP,CAAAA,CAAOD,CAAAA,CAAiBxO,EAAE,CAAA,EAAGyO;QAChD;IACH,GASAxB,EAAW,SAAA,CAAU,SAAA,GAAY,SAAS,CAAA,EAAGzM,CAAAA,EAAGiO,CAAAA;QAC9C,IAAIC;QACJ,IAAI,OAAO,KAAK,YACd,OAAO,EAAE,IAAA,EAAMlO;QACV,IAAI,OAAO,KAAK,YAAY,CAAE,CAAA,aAAa,KAA3C,GACL,OAAO,EAAE,GAAA,CAAI,IAAA,EAAMA,GAAGiO;QAExB,IAAIF,IAAiB,MACjBI,IAAU,SACVhC,IAAM,IAAA,CAAK,QAFf;QAcA,OAXI,OAAO,KAAM,YAAY,IAAI,IAAA,CAAK,MACpC+B,CAAAA,IAAK,EAAE,KAAA,CAAM,MACb,IAAIA,CAAAA,CAAG,EAAC,EACRH,IAAiB,SAASG,CAAAA,CAAG,EAAE,CAAA,GAE7B,OAAO,KAAK,YAAY,IAAI,IAAA,CAAK,MACnCA,CAAAA,IAAK,EAAE,KAAA,CAAM,MACb,IAAIA,CAAAA,CAAG,EAAC,EACRC,IAAU,SAASD,CAAAA,CAAG,EAAE,CAAA,GAGnB;YACL,KAAK;gBACH,IAAA,CAAK,UAAA,CAAWlO;gBAChB;YACF,KAAK;gBACH,IAAA,CAAK,SAAA,CAAUA;gBACf;YAEF,KAAK;gBACH,IAAA,CAAK,WAAA,CAAYA,GAAG,IAAA,CAAK,UAAU;gBACnC;YACF,KAAK;gBACH,IAAA,CAAK,UAAA,CAAWA,GAAG,IAAA,CAAK,UAAU;gBAClC;YACF,KAAK;gBACH,IAAA,CAAK,WAAA,CAAYA,GAAG,IAAA,CAAK,UAAU;gBACnC;YACF,KAAK;gBACH,IAAA,CAAK,UAAA,CAAWA,GAAG,IAAA,CAAK,UAAU;gBAClC;YACF,KAAK;gBACH,IAAA,CAAK,YAAA,CAAaA,GAAG,IAAA,CAAK,UAAU;gBACpC;YACF,KAAK;gBACH,IAAA,CAAK,YAAA,CAAaA,GAAG,IAAA,CAAK,UAAU;gBACpC;YAEF,KAAK;gBACH,IAAA,CAAK,WAAA,CAAYA,GAAGyM,EAAW,UAAU;gBACzC;YACF,KAAK;gBACH,IAAA,CAAK,UAAA,CAAWzM,GAAGyM,EAAW,UAAU;gBACxC;YACF,KAAK;gBACH,IAAA,CAAK,WAAA,CAAYzM,GAAGyM,EAAW,UAAU;gBACzC;YACF,KAAK;gBACH,IAAA,CAAK,UAAA,CAAWzM,GAAGyM,EAAW,UAAU;gBACxC;YACF,KAAK;gBACH,IAAA,CAAK,YAAA,CAAazM,GAAGyM,EAAW,UAAU;gBAC1C;YACF,KAAK;gBACH,IAAA,CAAK,YAAA,CAAazM,GAAGyM,EAAW,UAAU;gBAC1C;YAEF,KAAK;gBACH,IAAA,CAAK,WAAA,CAAYzM,GAAGyM,EAAW,aAAa;gBAC5C;YACF,KAAK;gBACH,IAAA,CAAK,UAAA,CAAWzM,GAAGyM,EAAW,aAAa;gBAC3C;YACF,KAAK;gBACH,IAAA,CAAK,WAAA,CAAYzM,GAAGyM,EAAW,aAAa;gBAC5C;YACF,KAAK;gBACH,IAAA,CAAK,UAAA,CAAWzM,GAAGyM,EAAW,aAAa;gBAC3C;YACF,KAAK;gBACH,IAAA,CAAK,YAAA,CAAazM,GAAGyM,EAAW,aAAa;gBAC7C;YACF,KAAK;gBACH,IAAA,CAAK,YAAA,CAAazM,GAAGyM,EAAW,aAAa;gBAC7C;YAEF,KAAK;gBACH,IAAA,CAAK,YAAA,CAAazM,GAAG+N;gBACrB;YAEF,KAAK;gBACH,IAAA,CAAK,WAAA,CAAY/N,GAAGmO,GAASJ;gBAC7B;YAEF,KAAK;gBACH,IAAA,CAAK,eAAA,CAAgB/N,GAAG,IAAA,CAAK,UAAA,EAAY+N;gBACzC;YAEF,KAAK;gBACH,IAAA,CAAK,eAAA,CAAgB/N,GAAGyM,EAAW,aAAA,EAAesB;gBAClD;YAEF,KAAK;gBACH,IAAA,CAAK,eAAA,CAAgB/N,GAAGyM,EAAW,UAAA,EAAYsB;gBAC/C;YAEF;gBACE,IAAI,EAAE,MAAA,IAAU,GAAG;oBAEjB,IAAA,IADIK,IAAK,CAAA,CAAE,EAAC,EACH5O,IAAE,GAAGA,IAAEQ,EAAE,MAAA,EAAQR,IACxB,IAAA,CAAK,SAAA,CAAU4O,GAAIpO,CAAAA,CAAER,EAAE;oBAEzB;gBACR,OAAa;oBACL,IAAA,CAAK,WAAA,CAAY,GAAGQ;oBACpB;gBACD;QACJ;QACG+N,KAAkB,QACpB,CAAA,IAAA,CAAK,QAAA,GAAW5B,GAChB,IAAA,CAAK,QAAA,CAAS4B,IACd,IAAA,CAAK,QAAA,GAAW5B,IAAM4B,CAAAA;IAE1B,GAGAtB,EAAW,SAAA,CAAU,WAAA,GAAc,SAAUzM,CAAAA;QAC5C,IAAIH,IAAI,KAAK,KAAA,CAAMG,IAAI6N;QACvB,IAAA,CAAK,WAAA,CAAYhO,IACjB,IAAA,CAAK,WAAA,CAAYG,IAAI;IACrB,GAEDyM,EAAW,SAAA,CAAU,WAAA,GAAc,SAAUzM,CAAAA;QAC5C,IAAA,CAAK,UAAA,CAAA,AAAYA,CAAAA,IAAI,QAAA,KAAa,KAClC,IAAA,CAAK,UAAA,CAAA,AAAYA,CAAAA,IAAI,KAAA,KAAa,IAClC,IAAA,CAAK,UAAA,CAAYA,IAAI;IACrB,GAEDyM,EAAW,SAAA,CAAU,YAAA,GAAe,SAAS4B,CAAAA,EAAU7D,CAAAA;QACtD,IAAI2B,IAAM,IAAA,CAAK,QAAf;QACA,IAAA,CAAK,IAAA,CAAKkC,IACV,IAAA,CAAK,WAAA,CAAY7D,IACjB,IAAA,CAAK,IAAA,CAAK2B;IACV,GAcDM,EAAW,SAAA,CAAU,aAAA,GAAgB,SAASjB,CAAAA,EAAQ,CAAA;QACpD,IAAA,CAAK,QAAA,CAASA,IAAS;QACvB,IAAIgB,IAAM,IAAI,WAAW,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,EAAUhB;QACtE,OAAAiB,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYhB,IAAS,GACnBgB;IACT,GAcAC,EAAW,SAAA,CAAU,aAAA,GAAgB,SAASjB,CAAAA,EAAQ,CAAA;QACpD,IAAA,CAAK,QAAA,CAASA,IAAS;QACvB,IAAIgB,IAAM,IAAI,WAAW,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,EAAUhB;QACtE,OAAAiB,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYhB,IAAS,GACnBgB;IACT,GAWAC,EAAW,SAAA,CAAU,YAAA,GAAe,SAASjB,CAAAA;QAC3C,IAAA,CAAK,QAAA,CAASA,IAAS;QACvB,IAAIgB,IAAM,IAAI,UAAU,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,EAAUhB;QACrE,OAAA,IAAA,CAAK,QAAA,IAAYA,IAAS,GACnBgB;IACT,GAcAC,EAAW,SAAA,CAAU,cAAA,GAAiB,SAASjB,CAAAA,EAAQ,CAAA;QACrD,IAAA,CAAK,QAAA,CAASA,IAAS;QACvB,IAAIgB,IAAM,IAAI,YAAY,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,EAAUhB;QACvE,OAAAiB,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYhB,IAAS,GACnBgB;IACT,GAcAC,EAAW,SAAA,CAAU,cAAA,GAAiB,SAASjB,CAAAA,EAAQ,CAAA;QACrD,IAAA,CAAK,QAAA,CAASA,IAAS;QACvB,IAAIgB,IAAM,IAAI,YAAY,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,EAAUhB;QACvE,OAAAiB,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYhB,IAAS,GACnBgB;IACT,GAcAC,EAAW,SAAA,CAAU,eAAA,GAAkB,SAASjB,CAAAA,EAAQ,CAAA;QACtD,IAAA,CAAK,QAAA,CAASA,IAAS;QACvB,IAAIgB,IAAM,IAAI,aAAa,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,EAAUhB;QACxE,OAAAiB,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYhB,IAAS,GACnBgB;IACT,GAcAC,EAAW,SAAA,CAAU,eAAA,GAAkB,SAASjB,CAAAA,EAAQ,CAAA;QACtD,IAAA,CAAK,QAAA,CAASA,IAAS;QACvB,IAAIgB,IAAM,IAAI,aAAa,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,UAAA,GAAW,IAAA,CAAK,QAAA,EAAUhB;QACxE,OAAAiB,EAAW,aAAA,CAAcD,GAAK,KAAY,IAAA,CAAK,UAAc,GAC7D,IAAA,CAAK,QAAA,IAAYhB,IAAS,GACnBgB;IACT;IAaA,IAAI8B,IAAoB,SAASC,CAAAA;QAEhC,IAAA,CAAK,OAAA,GAAU,EAAA,EACf,IAAA,CAAK,WAAA,GAAc,IACfA,KACH,CAAA,IAAA,CAAK,YAAA,CAAaA,IAClB,IAAA,CAAK,WAAA,GAAc,CAAA;IAEpB;IACDD,EAAkB,SAAA,GAAY,IAAI7B,EAAW,IAAI,eAAe,GAAGA,EAAW,UAAU,GAMxF6B,EAAkB,SAAA,CAAU,WAAA,GAAc;QACzC,IAAIE;QACJ,OAAI,IAAA,CAAK,WAAA,GAAc,KACf,CAAA,IACG,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,IAChCA,CAAAA,IAAc,IAAA,CAAK,OAAA,CAAQ,EAAC,EACxBA,EAAY,SAAA,KAAc,IAC7B,CAAA,IAAA,CAAK,MAAA,GAASA,GACd,IAAA,CAAK,WAAA,GAAc,GACnB3L,EAAI,KAAA,CAAM,qBAAqB,6BACxB,CAAA,CAAA,IAEPA,CAAAA,EAAI,IAAA,CAAK,qBAAqB,kDAC9B,IAAA,CAAK,cAAA,IACE,CAAA,CAAA,CAAA,IAGRA,CAAAA,EAAI,IAAA,CAAK,qBAAqB,oCAC9B,IAAA,CAAK,cAAA,IACE,CAjBR,CAAA;IAmBA,GAQD,YAAY,MAAA,GAAS,SAAS4L,CAAAA,EAASC,CAAAA;QACrC7L,EAAI,KAAA,CAAM,eAAe,4CAA2C4L,CAAAA,EAAQ,UAAA,GAAaC,EAAQ,UAAA,AAAA;QACjG,IAAIhB,IAAM,IAAI,WAAWe,EAAQ,UAAA,GAAaC,EAAQ,UAAU;QAChE,OAAAhB,EAAI,GAAA,CAAI,IAAI,WAAWe,IAAU,IACjCf,EAAI,GAAA,CAAI,IAAI,WAAWgB,IAAUD,EAAQ,UAAU,GAC5Cf,EAAI,MAFX;IAGF,GASAY,EAAkB,SAAA,CAAU,YAAA,GAAe,SAASC,CAAAA,EAAQtH,CAAAA,EAAQ0H,CAAAA;QACnE,IAAIC;QACJ,OAAAA,IAAS,IAAI,WAAWD,IACxBC,EAAO,GAAA,CAAI,IAAI,WAAWL,GAAQtH,GAAQ0H,KAC1CC,EAAO,MAAA,CAAO,SAAA,GAAYL,EAAO,SAAA,GAAUtH,GAC3C2H,EAAO,MAAA,CAAO,SAAA,GAAY,GACnBA,EAAO,MAJd;IAKA,GAQDN,EAAkB,SAAA,CAAU,YAAA,GAAe,SAASrG,CAAAA;QAGnD,IAAA,IAFI4G,IAAS,CAAA,GAEJrP,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IAAK;YAC7C,IAAIM,IAAI,IAAA,CAAK,OAAA,CAAQN,EAArB;YACA,IAAIyI,EAAG,SAAA,IAAanI,EAAE,SAAA,EAAW;gBAEhC,IAAImI,EAAG,SAAA,KAAcnI,EAAE,SAAvB;oBAEC,IAAImI,EAAG,UAAA,GAAcnI,EAAE,UAAA,EAAY;wBAIlC,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAON,GAAG,IACvBA;wBACA;oBACL,OAEKqD,EAAI,IAAA,CAAK,qBAAqB,wBAAsBoF,EAAG,SAAA,GAAU,gBAAcA,EAAG,UAAA,GAAW;uBAK1FA,EAAG,SAAA,GAAYA,EAAG,UAAA,IAAcnI,EAAE,SAAA,IAIrCmI,CAAAA,IAAK,IAAA,CAAK,YAAA,CAAaA,GAAI,GAAGnI,EAAE,SAAA,GAAYmI,EAAG,SAAS,CAAA,GAEzDpF,EAAI,KAAA,CAAM,qBAAqB,sCAAoCoF,EAAG,SAAA,GAAU,gBAAcA,EAAG,UAAA,GAAW,MAC5G,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAOzI,GAAG,GAAGyI,IAGtBzI,MAAM,KACT,CAAA,IAAA,CAAK,MAAA,GAASyI,CAAAA;gBAGhB4G,IAAS,CAAT;gBACA;YACH,OAAA,IAAa5G,EAAG,SAAA,GAAYnI,EAAE,SAAA,GAAYA,EAAE,UAAA,EAAY;gBAErD,IAAImH,IAASnH,EAAE,SAAA,GAAYA,EAAE,UAAA,GAAamI,EAAG,SAAA,EACzC0G,IAAY1G,EAAG,UAAA,GAAahB;gBAChC,IAAI0H,IAAY,GAEf1G,IAAK,IAAA,CAAK,YAAA,CAAaA,GAAIhB,GAAQ0H;qBAC7B;oBAENE,IAAS,CAAT;oBACA;gBACA;YACD;QACD;QAEGA,KACHhM,CAAAA,EAAI,KAAA,CAAM,qBAAqB,sCAAoCoF,EAAG,SAAA,GAAU,gBAAcA,EAAG,UAAA,GAAW,MAC5G,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAKA,IAGdzI,MAAM,KACT,CAAA,IAAA,CAAK,MAAA,GAASyI,CAAAA,CANhB;IASA,GAMDqG,EAAkB,SAAA,CAAU,cAAA,GAAiB,SAASQ,CAAAA;QACrD,IAAItP,GACA+O,GACAQ,GAAMC,GACNjD,IAAS,EAAA,EACTkD,GACAC,IAAiB;QAGrB,IAFAH,IAAO,GACPC,IAAQ,GACHxP,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IACpC+O,IAAS,IAAA,CAAK,OAAA,CAAQ/O,EAAC,EACnBA,MAAM,IACTyP,CAAAA,IAAQ,CAAA,GACRlD,EAAO,IAAA,CAAKkD,IACZA,EAAM,KAAA,GAAQV,EAAO,SAAA,EACrBU,EAAM,GAAA,GAAMV,EAAO,SAAA,GAAUA,EAAO,UAAA,EACpCW,KAAkB,MAAID,EAAM,KAAA,GAAM,GAAA,IACxBA,EAAM,GAAA,KAAQV,EAAO,SAAA,GAC/BU,EAAM,GAAA,GAAMV,EAAO,SAAA,GAAUA,EAAO,UAAA,GAEpCU,CAAAA,IAAQ,CAAA,GACRA,EAAM,KAAA,GAAQV,EAAO,SAAA,EACrBW,KAAmBnD,CAAAA,CAAOA,EAAO,MAAA,GAAO,EAAC,CAAE,GAAA,GAAI,IAAG,SAAOkD,EAAM,KAAA,GAAM,KACrEA,EAAM,GAAA,GAAMV,EAAO,SAAA,GAAUA,EAAO,UAAA,EACpCxC,EAAO,IAAA,CAAKkD,EAAK,GAElBF,KAAQR,EAAO,SAAA,EACfS,KAAST,EAAO,UAjBhB;QAmBGxC,EAAO,MAAA,GAAS,KACnBmD,CAAAA,KAAmBD,EAAM,GAAA,GAAI,IAAG,GADjC;QAGA,IAAIE,IAAOL,IAAOjM,EAAI,IAAA,GAAOA,EAAI,KAAjC;QACI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,IAC3BsM,EAAI,qBAAqB,8BAEzBA,EAAI,qBAAqB,KAAG,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAO,wBAAsBJ,IAAK,MAAIC,IAAM,iCAA+BE;IAErH,GAEDZ,EAAkB,SAAA,CAAU,YAAA,GAAe;QAC1C,IAAI9O,GACA+O;QACJ,IAAK/O,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IACpC+O,IAAS,IAAA,CAAK,OAAA,CAAQ/O,EAAC,EACnB+O,EAAO,SAAA,KAAcA,EAAO,UAAA,IAC/B1L,CAAAA,EAAI,KAAA,CAAM,qBAAqB,sBAAoBrD,IACnD,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAOA,GAAG,IACvBA,GAJD;IAOD,GAED8O,EAAkB,SAAA,CAAU,eAAA,GAAkB;QAC7C,IAAIc;QACJ,IAAI,IAAA,CAAK,WAAA,GAAY,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAtC;YAEC,IADAA,IAAc,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAA,GAAY,EAAC,EACzCA,EAAY,SAAA,KAAc,IAAA,CAAK,MAAA,CAAO,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY;gBAC7E,IAAIC,IAAY,IAAA,CAAK,MAAA,CAAO,UAAA,EACxBC,IAAe,IAAA,CAAK,MAAA,CAAO,SAAA,EAC3BC,IAAe,IAAA,CAAK,MAAA,CAAO,SAF/B;gBAGA,OAAA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA,GAAI,YAAY,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQH,IACjE,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA,EAC3C,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,WAAA,GAAY,GAAG,IACxC,IAAA,CAAK,MAAA,CAAO,SAAA,GAAYE,GACxB,IAAA,CAAK,MAAA,CAAO,SAAA,GAAYC,GACxB1M,EAAI,KAAA,CAAM,WAAW,mDAAiDwM,IAAU,OAAK,IAAA,CAAK,MAAA,CAAO,UAAA,GAAW,MACrG,CANP;YAOH,OACG,OAAO,CAAP;eAGD,OAAO,CAAP;IAED,GAgBDf,EAAkB,SAAA,CAAU,YAAA,GAAe,SAASkB,CAAAA,EAAWC,CAAAA,EAAcC,CAAAA;QAC5E,IAAIlQ,GACAmQ,IAAU,MACVC,IAAQ;QAUZ,IAPIJ,MAAc,CAAA,IAEjBhQ,IAAI,IAEJA,IAAI,IAAA,CAAK,WAAA,EAGHA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,IACvBmQ,CAAAA,IAAU,IAAA,CAAK,OAAA,CAAQnQ,EAAC,EACpBmQ,EAAQ,SAAA,IAAaF,CAAAA,GAFM;YAG9BG,IAAQpQ,GACJkQ,KACCC,CAAAA,EAAQ,SAAA,GAAYA,EAAQ,UAAA,IAAcF,IAC7CE,EAAQ,SAAA,GAAYA,EAAQ,UAAA,GAE5BA,EAAQ,SAAA,GAAYF,IAAeE,EAAQ,SAAA,EAE5C,IAAA,CAAK,cAAA,EAAc;YAKrBnQ;QACA;QAED,OAAIoQ,MAAU,KACbD,CAAAA,IAAU,IAAA,CAAK,OAAA,CAAQC,EAAK,EACxBD,EAAQ,SAAA,GAAYA,EAAQ,UAAA,IAAcF,IAC7C5M,CAAAA,EAAI,KAAA,CAAM,qBAAqB,wCAAsC+M,IAC9DA,CAAAA,IAEA,EAAA,IAGD;IAER,GASDtB,EAAkB,SAAA,CAAU,oBAAA,GAAuB,SAASuB,CAAAA;QAC3D,IAAIrQ,GACAsQ,GACAC,GACAH,IAASC,MAAe,KAAA,IAAYA,IAAa,IAAA,CAAK,WAH1D;QAMA,IAFAC,IAAa,IAAA,CAAK,OAAA,CAAQF,EAAK,EAE3B,IAAA,CAAK,OAAA,CAAQ,MAAA,GAASA,IAAM,GAC/B,IAAKpQ,IAAIoQ,IAAM,GAAGpQ,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,IAClCuQ,CAAAA,IAAU,IAAA,CAAK,OAAA,CAAQvQ,EAAC,EACpBuQ,EAAQ,SAAA,KAAcD,EAAW,SAAA,GAAYA,EAAW,UAAA,AAAA,GAFlBtQ,IAGzCsQ,IAAaC;QAOhB,OAAOD,EAAW,SAAA,GAAYA,EAAW,UAAzC;IACA,GAQDxB,EAAkB,SAAA,CAAU,uBAAA,GAA0B,SAASnC,CAAAA;QAC9D,IAAIyD,IAAQ,IAAA,CAAK,YAAA,CAAa,CAAA,GAAMzD,GAAK,CAAA;QACzC,OAAIyD,MAAU,KACN,IAAA,CAAK,oBAAA,CAAqBA,KAE1BzD;IAER,GAUDmC,EAAkB,SAAA,CAAU,YAAA,GAAe,SAAS0B,CAAAA;QACnD,IAAA,CAAK,MAAA,CAAO,SAAA,IAAaA,GACzB,IAAA,CAAK,cAAA;IACL,GAKD1B,EAAkB,SAAA,CAAU,eAAA,GAAkB;QAC7C,IAAA,CAAK,MAAA,CAAO,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,UAAA,EACpC,IAAA,CAAK,cAAA;IACL,GAiBDA,EAAkB,SAAA,CAAU,IAAA,GAAO,SAASmB,CAAAA,EAAcD,CAAAA,EAAWE,CAAAA;QACpE,IAAIE;QAEJ,OADAA,IAAQ,IAAA,CAAK,YAAA,CAAaJ,GAAWC,GAAcC,IAC/CE,MAAU,KACb,CAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQA,EAAK,EAChC,IAAA,CAAK,WAAA,GAAcA,GACnB,IAAA,CAAK,QAAA,GAAWH,IAAe,IAAA,CAAK,MAAA,CAAO,SAAA,EAC3C5M,EAAI,KAAA,CAAM,qBAAqB,8CAA4C,IAAA,CAAK,QAAQ,GACjF,CAAA,CAAA,IAEPA,CAAAA,EAAI,KAAA,CAAM,qBAAqB,cAAY4M,IAAa,gCACjD,CARR,CAAA;IAUA,GAMDnB,EAAkB,SAAA,CAAU,WAAA,GAAc;QACzC,IAAI,IAAA,CAAK,WAAA,KAAgB,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA,KAAM,MACjE,MAAM;QAEP,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA,CAAE,SAAA,GAAU,IAAA,CAAK,QAArD;IACA,GAMDA,EAAkB,SAAA,CAAU,SAAA,GAAY;QACvC,OAAO,IAAA,CAAK,UAAZ;IACA,GAEDA,EAAkB,SAAA,CAAU,cAAA,GAAiB;QAC5C,IAAI,IAAA,CAAK,WAAA,KAAgB,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA,KAAM,MACjE,MAAM;QAEP,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA,CAAE,SAAA,GAAU,IAAA,CAAK,UAArD;IACA,GAGAtC,EAAA,iBAAA,GAA4BsC;IAM7B,IAAI2B,IAAwB;QAC3B,IAAIC,IAAiB,GACjBC,IAAyB,GACzBC,IAAuB,GACvBC,IAAqB,GAErBC,IAAgB,EALpB;QAMAA,CAAAA,CAAcJ,EAAW,GAAQ,iBACjCI,CAAAA,CAAcH,EAAqB,GAAK,2BACxCG,CAAAA,CAAcF,EAAkB,GAAM,uBACtCE,CAAAA,CAAcD,EAAgB,GAAM,sBAEpC,IAAA,CAAK,iBAAA,GAAoB,SAAStN,CAAAA;YACjC,OAAOuN,CAAAA,CAAcvN,EAArB;QACA;QAED,IAAIwN,IAAO,IAAA,EACPC,IAAU,CAAA;QAEd,OAAA,IAAA,CAAK,kBAAA,GAAqB,SAAUjI,CAAAA;YAEnC,IAAI8D,IAAO,GACPtJ,GACA0N,GACAC;YAKJ,IAJA3N,IAAMwF,EAAO,SAAA,IAEbmI,IAAWnI,EAAO,SAAA,IAEXmI,IAAW,KACjBrE,IAAAA,AAAQqE,CAAAA,IAAW,GAAA,KAAO,GAC1BA,IAAWnI,EAAO,SADlB;YAID,OAAA8D,KAAQqE,IAAW,KACnB7N,EAAI,KAAA,CAAM,yBAAyB,WAAUyN,CAAAA,CAAAA,CAAcvN,EAAG,IAAK,gBAAcA,CAAAA,IAAK,YAAUsJ,IAAK,kBAAgB9D,EAAO,WAAA,KACxH+H,CAAAA,CAAcvN,EAAG,GACpB0N,IAAO,IAAID,CAAAA,CAAQF,CAAAA,CAAcvN,EAAI,CAAA,CAAEsJ,KAEvCoE,IAAO,IAAID,EAAQ,UAAA,CAAWnE,IAE/BoE,EAAK,KAAA,CAAMlI,IACJkI;QACP,GAEDD,EAAQ,UAAA,GAAa,SAASG,CAAAA,EAAMC,CAAAA;YACnC,IAAA,CAAK,GAAA,GAAMD,GACX,IAAA,CAAK,IAAA,GAAOC,GACZ,IAAA,CAAK,KAAA,GAAQ,EAFb;QAGA,GAEDJ,EAAQ,UAAA,CAAW,SAAA,CAAU,KAAA,GAAQ,SAAUjI,CAAAA;YAC9C,IAAA,CAAK,IAAA,GAAOA,EAAO,cAAA,CAAe,IAAA,CAAK,IAAI;QAC3C,GAEDiI,EAAQ,UAAA,CAAW,SAAA,CAAU,cAAA,GAAiB,SAAUzN,CAAAA;YACvD,IAAA,IAASvD,IAAI,GAAGA,IAAI,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IACtC,IAAI,IAAA,CAAK,KAAA,CAAMA,EAAC,CAAE,GAAA,IAAOuD,GACxB,OAAO,IAAA,CAAK,KAAA,CAAMvD,EAAlB;YAGF,OAAO;QACP,GAEDgR,EAAQ,UAAA,CAAW,SAAA,CAAU,yBAAA,GAA4B,SAAUjI,CAAAA;YAElE,IAAA,IADIyB,IAAQzB,EAAO,QAAA,EACZA,EAAO,QAAA,GAAWyB,IAAM,IAAA,CAAK,IAAA,EAAM;gBACzC,IAAIyG,IAAOF,EAAK,kBAAA,CAAmBhI;gBACnC,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKkI;YAChB;QACD,GAEDD,EAAQ,aAAA,GAAgB,SAAUnE,CAAAA;YACjCmE,EAAQ,UAAA,CAAW,IAAA,CAAK,IAAA,EAAMN,GAAa7D;QAC3C,GAEDmE,EAAQ,aAAA,CAAc,SAAA,GAAY,IAAIA,EAAQ,UAAA,IAE9CA,EAAQ,aAAA,CAAc,SAAA,CAAU,KAAA,GAAQ,SAASjI,CAAAA;YAUhD,IATA,IAAA,CAAK,KAAA,GAAQA,EAAO,UAAA,IACpB,IAAA,CAAK,KAAA,GAAQA,EAAO,SAAA,IACpB,IAAA,CAAK,IAAA,IAAQ,GACT,IAAA,CAAK,KAAA,GAAQ,MAChB,CAAA,IAAA,CAAK,eAAA,GAAkBA,EAAO,UAAA,IAC9B,IAAA,CAAK,IAAA,IAAQ,CAAA,IAEb,IAAA,CAAK,eAAA,GAAkB,GAEpB,IAAA,CAAK,KAAA,GAAQ,IAAM;gBACtB,IAAIvJ,IAAIuJ,EAAO,SAAf;gBACA,IAAA,CAAK,GAAA,GAAMA,EAAO,UAAA,CAAWvJ,IAC7B,IAAA,CAAK,IAAA,IAAQA,IAAE;YAClB,OACG,IAAA,CAAK,GAAA,GAAM;YAER,IAAA,CAAK,KAAA,GAAQ,KAChB,CAAA,IAAA,CAAK,SAAA,GAAYuJ,EAAO,UAAA,IACxB,IAAA,CAAK,IAAA,IAAQ,CAAA,IAEb,IAAA,CAAK,SAAA,GAAY,GAElB,IAAA,CAAK,yBAAA,CAA0BA;QAC/B,GAEDiI,EAAQ,aAAA,CAAc,SAAA,CAAU,MAAA,GAAS,SAASjI,CAAAA;YACjD,IAAIsI,IAAM,IAAA,CAAK,cAAA,CAAeV;YAC9B,OAAIU,IACIA,EAAI,GAAA,GAEJ;QAER,GAEDL,EAAQ,aAAA,CAAc,SAAA,CAAU,cAAA,GAAiB,SAASjI,CAAAA;YACzD,IAAIsI,IAAM,IAAA,CAAK,cAAA,CAAeV;YAC9B,IAAI,CAACU,GAAK,OAAO;YACjB,IAAIC,IAAMD,EAAI,cAAA,CAAeT;YAC7B,IAAIU,KAAOA,EAAI,IAAA,EAAM;gBACpB,IAAIC,IAAAA,AAAmBD,CAAAA,EAAI,IAAA,CAAK,EAAC,GAAG,GAAA,KAAS;gBAC7C,OAAIC,MAAoB,MAAMD,EAAI,IAAA,CAAK,MAAA,IAAU,KAChDC,CAAAA,IAAkB,KAAA,CAAA,AAAOD,CAAAA,EAAI,IAAA,CAAK,EAAC,GAAI,CAAA,KAAQ,CAAA,IAAA,CAAA,AAAOA,CAAAA,EAAI,IAAA,CAAK,EAAC,GAAI,GAAA,KAAS,CAAA,CAAA,GAEvEC;YACV,OACG,OAAO;QAER,GAEDP,EAAQ,uBAAA,GAA0B,SAAUnE,CAAAA;YAC3CmE,EAAQ,UAAA,CAAW,IAAA,CAAK,IAAA,EAAML,GAAuB9D;QACrD,GACDmE,EAAQ,uBAAA,CAAwB,SAAA,GAAY,IAAIA,EAAQ,UAAA,IAExDA,EAAQ,uBAAA,CAAwB,SAAA,CAAU,KAAA,GAAQ,SAASjI,CAAAA;YAC1D,IAAA,CAAK,GAAA,GAAMA,EAAO,SAAA,IAClB,IAAA,CAAK,UAAA,GAAaA,EAAO,SAAA,IACzB,IAAA,CAAK,UAAA,GAAaA,EAAO,UAAA,IACzB,IAAA,CAAK,UAAA,GAAaA,EAAO,UAAA,IACzB,IAAA,CAAK,UAAA,GAAaA,EAAO,UAAA,IACzB,IAAA,CAAK,IAAA,IAAQ,IACb,IAAA,CAAK,yBAAA,CAA0BA;QAC/B,GAEDiI,EAAQ,mBAAA,GAAsB,SAAUnE,CAAAA;YACvCmE,EAAQ,UAAA,CAAW,IAAA,CAAK,IAAA,EAAMJ,GAAoB/D;QAClD,GACDmE,EAAQ,mBAAA,CAAoB,SAAA,GAAY,IAAIA,EAAQ,UAAA,IAEpDA,EAAQ,kBAAA,GAAqB,SAAUnE,CAAAA;YACtCmE,EAAQ,UAAA,CAAW,IAAA,CAAK,IAAA,EAAMH,GAAkBhE;QAChD,GACDmE,EAAQ,kBAAA,CAAmB,SAAA,GAAY,IAAIA,EAAQ,UAAA,IAE5C,IAJ8C;IAKrD;IAGAxE,EAAA,qBAAA,GAAgCiE;IAMjC,IAAIe,IAAY;QACf,kBAAmB;QACnB,qBAAsB;QACtB,IAAK;QAAA,2CAAA;QAGL,aAAa;YAAE;YAAQ;YAAQ;YAAQ;YAAQ;YAAQ;SAHlD;QAIL,YAAY;YAAE;YAAQ;YAAQ;YAAQ;YAAQ;YAAQ;YAAQ;SADC;QAE/D,iBAAiB;YAChB;gBAAE;gBAAQ;oBAAE;oBAAQ;iBAAU;aADd;YAEhB;gBAAE;aAD4B;YAE9B;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;gBAAQ;oBAAE;oBAAQ;iBAAU;aADpB;YAEV;gBAAE;gBAAQ;oBAAE;iBAAU;aADQ;YAE9B;gBAAE;gBAAQ;oBAAE;iBAAU;aADA;YAEtB;gBAAE;gBAAQ;oBAAE;oBAAQ;oBAAQ;iBAAU;aADhB;YAEtB;gBAAE;aADoC;YAEtC;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;gBAAQ;oBAAE;iBAAU;aADZ;YAEV;gBAAE;aADoB;YAEtB;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;gBAAQ;oBAAC;iBAAS;aADV;YAEV;gBAAE;gBAAQ;oBAAC;iBAAS;aADA;YAEpB;gBAAE;aADkB;YAEpB;gBAAE;aADQ;YAEV;gBAAE;aADQ;YAEV;gBAAE;gBAAQ;oBAAE;iBAAS;aADX;SACW;QACrB,4BAAA;QAED,UAAW,EAFV;QAGD,cAAe,EADF;QAEb,mBAAoB,EADH;QAEjB,kBAAmB,CAAE;QACrB,uBAAuB,EADF;QAErB,iBAAiB,EADQ;QAEzB,WAAW,CAAE;QACb,OAAO,EADM;QAEb,YAAY;YACXA,EAAU,OAAA,CAAQ,SAAA,GAAY,IAAIA,EAAU,GAAA,IAC5CA,EAAU,YAAA,CAAa,SAAA,GAAY,IAAIA,EAAU,GAAA,IACjDA,EAAU,WAAA,CAAY,SAAA,GAAY,IAAIA,EAAU,GAAA,IAChDA,EAAU,iBAAA,CAAkB,SAAA,GAAY,IAAIA,EAAU,OAAA,IAGtDA,EAAU,WAAA,CAAY,OAAA,CAAQ,SAASxI,CAAAA;gBACtCwI,EAAU,aAAA,CAAcxI;YAC3B,IACEwI,EAAU,UAAA,CAAW,OAAA,CAAQ,SAASxI,CAAAA;gBACrCwI,EAAU,iBAAA,CAAkBxI;YAC/B,IACEwI,EAAU,eAAA,CAAgB,OAAA,CAAQ,SAASC,CAAAA;gBAC1CD,EAAU,sBAAA,CAAuBC,CAAAA,CAAM,EAAC,EAAG,MAAMA,CAAAA,CAAM,EAAE;YAC5D;QACE;QACD,KAAK,SAASC,CAAAA,EAAON,CAAAA,EAAOO,CAAAA;YAC3B,IAAA,CAAK,IAAA,GAAOD,GACZ,IAAA,CAAK,IAAA,GAAON,GACZ,IAAA,CAAK,IAAA,GAAOO;QACZ;QACD,SAAS,SAAS3I,CAAAA,EAAM6D,CAAAA,EAAM+E,CAAAA;YAC7BJ,EAAU,GAAA,CAAI,IAAA,CAAK,IAAA,EAAMxI,GAAM6D,GAAM+E,IACrC,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,OAAA,GAAU;QACf;QACD,cAAc,SAAS5I,CAAAA,EAAM6D,CAAAA,EAAM+E,CAAAA;YAClCJ,EAAU,GAAA,CAAI,IAAA,CAAK,IAAA,EAAMxI,GAAM6D,GAAM+E,IACrC,IAAA,CAAK,KAAA,GAAQ,EADb;QAEA;QACD,aAAa,SAAS5I,CAAAA,EAAM6D,CAAAA,EAAMgF,CAAAA,EAAUrH,CAAAA;YAC3CgH,EAAU,YAAA,CAAa,IAAA,CAAK,IAAA,EAAMxI,GAAM6D,IACxC,IAAA,CAAK,QAAA,GAAWgF,GAChB,IAAA,CAAK,KAAA,GAAQrH;QACb;QACD,kBAAkB,SAASxB,CAAAA;YAC1B,IAAA,CAAK,aAAA,GAAgBA;QACrB;QACD,mBAAmB,SAASA,CAAAA,EAAM6D,CAAAA;YACjC2E,EAAU,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAMxI,GAAM6D;QACnC;QACD,eAAe,SAAS7D,CAAAA,EAAM8I,CAAAA;YAC7BN,EAAU,QAAA,CAAS,IAAA,CAAKxI,IACxBwI,CAAAA,CAAUxI,IAAK,MAAK,GAAI,SAAS6D,CAAAA;gBAChC2E,EAAU,GAAA,CAAI,IAAA,CAAK,IAAA,EAAMxI,GAAM6D;YAC/B,GACD2E,CAAAA,CAAUxI,IAAK,MAAK,CAAE,SAAA,GAAY,IAAIwI,EAAU,GAAA,IAC5CM,KAAaN,CAAAA,CAAAA,CAAUxI,IAAK,MAAK,CAAE,SAAA,CAAU,KAAA,GAAQ8I,CAAAA;QACzD;QACD,mBAAmB,SAAS9I,CAAAA,EAAM8I,CAAAA;YAEjCN,CAAAA,CAAUxI,IAAK,MAAK,GAAI,SAAS6D,CAAAA;gBAChC2E,EAAU,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAMxI,GAAM6D;YACnC,GACD2E,CAAAA,CAAUxI,IAAK,MAAK,CAAE,SAAA,GAAY,IAAIwI,EAAU,OAAA,IAChDA,CAAAA,CAAUxI,IAAK,MAAK,CAAE,SAAA,CAAU,KAAA,GAAQ,SAASD,CAAAA;gBAChD,IAAA,CAAK,eAAA,CAAgBA,IACjB+I,KACHA,EAAY,IAAA,CAAK,IAAA,EAAM/I;YAE3B;QACE;QACD,iBAAiB,SAASgJ,CAAAA;YACzB,IAAIA,GAAa;gBAChB,IAAA,CAAK,WAAA,GAAcA;gBAEnB,IAAA,IADIC,IAAaD,EAAY,MAAA,EACpBpR,IAAI,GAAGA,IAAEqR,GAAYrR,IAC7B,IAAA,CAAKoR,CAAAA,CAAYpR,EAAC,GAAE,IAAG,GAAI,EAA3B;YAED;QACD;QACD,wBAAwB,SAASqI,CAAAA,EAAM8I,CAAAA,EAAaC,CAAAA;YAEnDP,CAAAA,CAAUxI,IAAK,MAAK,GAAI,SAAS6D,CAAAA;gBAChC2E,EAAU,YAAA,CAAa,IAAA,CAAK,IAAA,EAAMxI,GAAM6D,IACxC2E,EAAU,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAMO;YACrC,GACDP,CAAAA,CAAUxI,IAAK,MAAK,CAAE,SAAA,GAAY,IAAIwI,EAAU,YAAA,IAC5CM,KAAaN,CAAAA,CAAAA,CAAUxI,IAAK,MAAK,CAAE,SAAA,CAAU,KAAA,GAAQ8I,CAAAA;QACzD;QACD,4BAA4B,SAASG,CAAAA,EAAWH,CAAAA,EAAaC,CAAAA;YAC5DP,EAAU,gBAAA,CAAiBS,EAAS,GAAI,EAAA,EACxCT,CAAAA,CAAUS,IAAU,cAAa,GAAI,SAASjJ,CAAAA,EAAM6D,CAAAA;gBACnD2E,EAAU,WAAA,CAAY,IAAA,CAAK,IAAA,EAAMxI,GAAM6D,IACvC2E,EAAU,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAMO;YACxC,GACEP,CAAAA,CAAUS,IAAU,cAAa,CAAE,SAAA,GAAY,IAAIT,EAAU,WAAA,IACzDM,KAAaN,CAAAA,CAAAA,CAAUS,IAAU,cAAa,CAAE,SAAA,CAAW,KAAA,GAAQH,CAAAA;QACvE;QACD,uBAAuB,SAASG,CAAAA,EAAWjJ,CAAAA,EAAM8I,CAAAA,EAAaC,CAAAA;YAC7DP,EAAU,gBAAA,CAAiBS,EAAS,CAAE,IAAA,CAAKjJ,IAC3CwI,CAAAA,CAAUxI,IAAK,cAAa,GAAI,SAAS6D,CAAAA;gBACxC2E,CAAAA,CAAUS,IAAU,cAAa,CAAE,IAAA,CAAK,IAAA,EAAMjJ,GAAM6D,IACpD2E,EAAU,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAMO;YACxC,GACEP,CAAAA,CAAUxI,IAAK,cAAa,CAAE,SAAA,GAAY,IAAIwI,CAAAA,CAAUS,IAAU,cAAa,IAC3EH,KAAaN,CAAAA,CAAAA,CAAUxI,IAAK,cAAa,CAAE,SAAA,CAAU,KAAA,GAAQ8I,CAAAA;QACjE;QACD,gCAAgC,SAASG,CAAAA,EAAWjJ,CAAAA,EAAM8I,CAAAA;YACzDN,EAAU,qBAAA,CAAsB,IAAA,CAAK,IAAA,EAAMS,GAAWjJ,GAAM8I,GAAa;gBAAC;aAAO;QACjF;QACD,uBAAuB,SAAS9I,CAAAA,EAAM8I,CAAAA;YAErCN,CAAAA,CAAUxI,IAAK,mBAAkB,GAAI,SAAS6D,CAAAA;gBAC7C2E,EAAU,gBAAA,CAAiB,IAAA,CAAK,IAAA,EAAMxI,GAAM6D;YAC5C,GACD2E,CAAAA,CAAUxI,IAAK,mBAAkB,CAAE,SAAA,GAAY,IAAIwI,EAAU,gBAAA,IACzDM,KAAaN,CAAAA,CAAAA,CAAUxI,IAAK,mBAAkB,CAAE,SAAA,CAAU,KAAA,GAAQ8I,CAAAA;QACtE;QACD,sBAAsB,SAAS9I,CAAAA,EAAM8I,CAAAA;YAEpCN,CAAAA,CAAUxI,IAAK,oBAAmB,GAAI,SAAS6D,CAAAA;gBAC9C2E,EAAU,iBAAA,CAAkB,IAAA,CAAK,IAAA,EAAMxI,GAAM6D;YAC7C,GACD2E,CAAAA,CAAUxI,IAAK,oBAAmB,CAAE,SAAA,GAAY,IAAIwI,EAAU,iBAAA,IAC1DM,KAAaN,CAAAA,CAAAA,CAAUxI,IAAK,oBAAmB,CAAE,SAAA,CAAU,KAAA,GAAQ8I,CAAAA;QACvE;QACD,eAAe,SAASF,CAAAA,EAAMM,CAAAA,EAAWC,CAAAA,EAAgBL,CAAAA;YACxDN,EAAU,KAAA,CAAM,IAAA,CAAKI,IACrBJ,EAAU,SAAA,CAAUI,EAAI,GAAI,SAAS/E,CAAAA;gBAChCqF,IACHV,EAAU,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM,QAAQ3E,GAAM+E,KAEvCO,IACHX,EAAU,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,QAAQ3E,GAAM+E,KAEhDJ,EAAU,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,QAAQ3E,GAAM+E;YAGzC,GACDJ,EAAU,SAAA,CAAUI,EAAI,CAAE,SAAA,GAAaM,IAAY,IAAIV,EAAU,OAAA,KAAaW,IAAiB,IAAIX,EAAU,YAAA,KAAiB,IAAIA,EAAU,GAAA,IACxIM,KACCI,CAAAA,IACHV,EAAU,SAAA,CAAUI,EAAI,CAAE,SAAA,CAAU,KAAA,GAAQ,SAAS7I,CAAAA;gBACpD,IAAA,CAAK,eAAA,CAAgBA,IACjB+I,KACHA,EAAY,IAAA,CAAK,IAAA,EAAM/I;YAExB,IAEDyI,EAAU,SAAA,CAAUI,EAAI,CAAE,SAAA,CAAU,KAAA,GAAQE,CAAAA;QAG9C;IACD;IAEDN,EAAU,UAAA,IAEVA,EAAU,iBAAA,GAAuB,GACjCA,EAAU,kBAAA,GAAuB,GACjCA,EAAU,oBAAA,GAAuB,GAEjCA,EAAU,0BAAA,GAA6B,GACvCA,EAAU,qBAAA,GAA0B,GACpCA,EAAU,oBAAA,GAAyB,GACnCA,EAAU,qBAAA,GAA0B,IACpCA,EAAU,sBAAA,GAA0B,IACpCA,EAAU,mBAAA,GAAwB,OAClCA,EAAU,8BAAA,GAAgC,QAE1CA,EAAU,sBAAA,GAAwB,GAClCA,EAAU,qBAAA,GAAwB,GAClCA,EAAU,mBAAA,GAAsB,KAChCA,EAAU,eAAA,GAAmB,KAC7BA,EAAU,gBAAA,GAAoB,MAC9BA,EAAU,qBAAA,GAAwB,MAElCA,EAAU,GAAA,CAAI,SAAA,CAAU,GAAA,GAAM,SAASY,CAAAA;QACtC,OAAO,IAAA,CAAK,MAAA,CAAO,IAAIZ,CAAAA,CAAUY,IAAK,MAAK;IAC3C,GAEDZ,EAAU,GAAA,CAAI,SAAA,CAAU,MAAA,GAAS,SAASa,CAAAA;QACzC,OAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,IACZ,IAAA,CAAKA,EAAI,IAAA,GAAK,IAAG,GACpB,IAAA,CAAKA,EAAI,IAAA,GAAK,IAAG,CAAE,IAAA,CAAKA,KAExB,IAAA,CAAKA,EAAI,IAAI,CAAA,GAAIA,GAEXA;IACP,GAEDb,EAAU,GAAA,CAAI,SAAA,CAAU,GAAA,GAAM,SAASc,CAAAA,EAAMtH,CAAAA;QAC5C,OAAA,IAAA,CAAKsH,EAAI,GAAItH,GACN,IADP;IAEA,GAEDwG,EAAU,GAAA,CAAI,SAAA,CAAU,QAAA,GAAW,SAASxG,CAAAA,EAAOuH,CAAAA;QAClD,IAAID,IAAOC,KAAS;QACpB,OAAK,IAAA,CAAKD,EAAI,IACb,CAAA,IAAA,CAAKA,EAAI,GAAI,EAAA,AAAA,GAEd,IAAA,CAAKA,EAAI,CAAE,IAAA,CAAKtH,IACT,IAJP;IAKA,GAGAwB,EAAA,SAAA,GAAoBgF,GAOrBA,EAAU,SAAA,GAAY,SAASzI,CAAAA;QAC9B,OAAOyI,EAAU,UAAA,CAAWzI;IAC5B,GAEDyI,EAAU,UAAA,GAAa,SAASzI,CAAAA;QAE/B,IAAA,IADIyJ,IAAQ,IACHxS,IAAI,GAAGA,IAAG,IAAIA,IAAK;YAC3B,IAAIyS,IAAM1J,EAAO,SAAA,GAAY,QAAA,CAAS;YACtCyJ,KAAUC,EAAI,MAAA,KAAW,IAAI,MAAIA,IAAMA;QACvC;QACD,OAAOD;IACP,GAEDhB,EAAU,WAAA,GAAc,SAASzI,CAAAA,EAAQ2J,CAAAA,EAAYC,CAAAA;QACpD,IAAIN,GACA7H,IAAQzB,EAAO,WAAA,IACf8I,IAAW,GACXe,GACAhB;QACJ,IAAI7I,EAAO,cAAA,KAAmByB,IAAQ,GACrC,OAAAnH,EAAI,KAAA,CAAM,aAAa,oEAChB;YAAE,MAAMmO,EAAU,mBADzB;QAAA;QAGD,IAAImB,KAAcA,IAAa,GAC9B,OAAAtP,EAAI,KAAA,CAAM,aAAa,+DAChB;YAAE,MAAMmO,EAAU,mBADzB;QAAA;QAGD,IAAI3E,IAAO9D,EAAO,UAAA,IACdC,IAAOD,EAAO,UAAA,CAAW,IACzB8J,IAAW7J;QAGf,IAFA3F,EAAI,KAAA,CAAM,aAAa,wBAAsB2F,IAAK,gBAAc6D,IAAK,kBAAgBrC,IACrFqH,IAAW,GACP7I,KAAQ,QAAQ;YACnB,IAAKD,EAAO,cAAA,KAAmBA,EAAO,WAAA,KAAgB,MAAQ4J,IAAYd,IAAW,IACpF,OAAA9I,EAAO,IAAA,CAAKyB,IACZnH,EAAI,KAAA,CAAM,aAAa,gEAChB;gBAAE,MAAMmO,EAAU,mBAFzB;YAAA;YAIDI,IAAOJ,EAAU,SAAA,CAAUzI,IAC3B8I,KAAY,IACZgB,IAAWjB;QACX;QACD,IAAI/E,KAAQ,GAAG;YACd,IAAK9D,EAAO,cAAA,KAAmBA,EAAO,WAAA,KAAgB,KAAO4J,KAAeA,IAAad,IAAY,GACpG,OAAA9I,EAAO,IAAA,CAAKyB,IACZnH,EAAI,IAAA,CAAK,aAAa,kEAAiE2F,IAAK,UACrF;gBAAE,MAAMwI,EAAU,mBAFzB;YAAA;YAID3E,IAAO9D,EAAO,UAAA,IACd8I,KAAY;QACd,OAAA,IAAYhF,MAAS,GADP;YAGZ,IAAI8F,GACH9F,IAAO8F;iBAAA,IAGH3J,MAAS,QACZ,OAAA3F,EAAI,KAAA,CAAM,aAAa,iDAA+C2F,IAAK,MAC3EqJ,IAAM,IAAIb,EAAU,GAAA,CAAIxI,GAAM6D,IACvB;gBAAE,MAAM2E,EAAU,EAAA;gBAAI,KAAKa;gBAAK,MAAMA,EAAI,IAFjD;YAAA;Q;QAMH,OAAIxF,MAAS,KAAKA,IAAOgF,IACxBxO,CAAAA,EAAI,KAAA,CAAM,aAAa,iBAAe2F,IAAK,0BAAwB6D,IAAK,6BACjE;YAAE,MAAM2E,EAAU,mBAAA;YAAqB,MAAMxI;YAAM,MAAM6D;YAAM,UAAUgF;YAAU,OAAOrH;QAAK,CAAA,IAEnGqC,MAAS,KAAK8F,KAAc9F,IAAO8F,IACtCtP,CAAAA,EAAI,KAAA,CAAM,aAAa,kBAAgB2F,IAAK,kBAAgB6D,IAAK,sCAAoC8F,IAC9F;YAAE,MAAMnB,EAAU,mBAAA;YAAqB,MAAMxI;YAAM,MAAM6D;YAAM,UAAUgF;YAAU,OAAOrH;QAAK,CAAA,IAEnGqC,MAAS,KAAKrC,IAAQqC,IAAO9D,EAAO,cAAA,KACvCA,CAAAA,EAAO,IAAA,CAAKyB,IACZnH,EAAI,IAAA,CAAK,aAAa,oDAAkD2F,IAAK,UACtE;YAAE,MAAMwI,EAAU,mBAAA;YAAqB,MAAMxI;YAAM,MAAM6D;YAAM,UAAUgF;YAAU,OAAOrH;QAAK,CAAA,IAEnGkI,IACI;YAAE,MAAMlB,EAAU,EAAA;YAAI,MAAMxI;YAAM,MAAM6D;YAAM,UAAUgF;YAAU,OAAOrH;QAAK,IAEjFgH,CAAAA,CAAAA,CAAUxI,IAAK,MAAK,GACvBqJ,IAAM,IAAIb,CAAAA,CAAUxI,IAAK,MAAK,CAAE6D,KAE5B7D,MAAS,SACZ3F,CAAAA,EAAI,IAAA,CAAK,aAAa,wBAAsB2F,IAAK,MACjDqJ,IAAM,IAAIb,EAAU,GAAA,CAAIxI,GAAM6D,IAC9BwF,EAAI,iBAAA,GAAoB,CAAA,CAAA,IAEpBb,EAAU,SAAA,CAAUI,EAAI,GAC3BS,IAAM,IAAIb,EAAU,SAAA,CAAUI,EAAI,CAAE/E,KAEpCxJ,CAAAA,EAAI,IAAA,CAAK,aAAa,yBAAuBuO,IAAK,MAClDS,IAAM,IAAIb,EAAU,GAAA,CAAIxI,GAAM6D,IAC9BwF,EAAI,IAAA,GAAOT,GACXS,EAAI,iBAAA,GAAoB,CAAA,CAAA,GAK5BA,EAAI,QAAA,GAAWR,GAEfQ,EAAI,KAAA,GAAQ7H,GACR6H,EAAI,KAAA,KAAUb,EAAU,GAAA,CAAI,SAAA,CAAU,KAAA,IAASa,EAAI,IAAA,KAAS,UAC/DhP,CAAAA,EAAI,IAAA,CAAK,aAAa,MAAIwP,IAAS,uFACnCR,EAAI,kBAAA,CAAmBtJ,EAAM,GAE9BsJ,EAAI,KAAA,CAAMtJ,IACV6J,IAAO7J,EAAO,WAAA,KAAiBsJ,CAAAA,EAAI,KAAA,GAAMA,EAAI,IAAA,AAAA,GACzCO,IAAO,IACVvP,CAAAA,EAAI,IAAA,CAAK,aAAa,qBAAmBwP,IAAS,gEAA+D,CAACD,IAAM,6BACxH7J,EAAO,IAAA,CAAKsJ,EAAI,KAAA,GAAMA,EAAI,IAAI,CAAA,IACpBO,IAAO,KACjBvP,CAAAA,EAAI,KAAA,CAAM,aAAa,qBAAmBwP,IAAS,YAAUD,IAAK,oEAC9DP,EAAI,IAAA,KAAS,KAAGtJ,EAAO,IAAA,CAAKsJ,EAAI,KAAA,GAAMA,EAAI,IAAI,CAAA,GAE5C;YAAE,MAAMb,EAAU,EAAA;YAAI,KAAKa;YAAK,MAAMA,EAAI,IAnDjD;QAAA,CAAA;IAoDA,GAEDb,EAAU,GAAA,CAAI,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACpC,IAAA,CAAK,IAAA,IAAQ,SAChB,IAAA,CAAK,IAAA,GAAOA,EAAO,cAAA,CAAe,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QAAQ,IAErD,IAAA,CAAK,IAAA,KAAS,IACjBA,EAAO,IAAA,CAAKA,EAAO,cAAA,MAEnBA,EAAO,IAAA,CAAK,IAAA,CAAK,KAAA,GAAM,IAAA,CAAK,IAAI;IAGlC,GAIDyI,EAAU,GAAA,CAAI,SAAA,CAAU,kBAAA,GAAqB,SAASzI,CAAAA;QACrD,IAAA,CAAK,IAAA,GAAOA,EAAO,cAAA,CAAe,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QAAQ,GAEzDA,EAAO,QAAA,IAAY,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QAFlC;IAGA,GAEDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,kBAAA,GAAqB,SAASzI,CAAAA;QACzD,IAAA,CAAK,eAAA,CAAgBA,IACrB,IAAA,CAAK,IAAA,GAAOA,EAAO,cAAA,CAAe,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QAAQ,GAEzD,IAAA,CAAK,QAAA,IAAY,GAEjBA,EAAO,QAAA,IAAY,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QALlC;IAMA,GAEDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,eAAA,GAAkB,SAAUzI,CAAAA;QACvD,IAAA,CAAK,OAAA,GAAUA,EAAO,SAAA,IACtB,IAAA,CAAK,KAAA,GAAQA,EAAO,UAAA,IACpB,IAAA,CAAK,QAAA,IAAY;IACjB,GAEDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAAUzI,CAAAA;QAC7C,IAAA,CAAK,eAAA,CAAgBA,IACrB,IAAA,CAAK,IAAA,GAAOA,EAAO,cAAA,CAAe,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QAAQ;IACzD,GAEDyI,EAAU,YAAA,CAAa,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAGjD,IAAA,IAFI+J,GACAT,GACGtJ,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,GAAM,IAAA,CAAK,IAA9C,EAEC,IADA+J,IAAMtB,EAAU,WAAA,CAAYzI,GAAQ,CAAA,GAAO,IAAA,CAAK,IAAA,GAAQA,CAAAA,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,AAAA,IAChF+J,EAAI,IAAA,KAAStB,EAAU,EAA3B;YAIC,IAHAa,IAAMS,EAAI,GAAA,EAEV,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKT,IACZ,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQA,EAAI,IAAI,KAAK,IAC7D,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQA,EAAI,IAAI,EAAC,GAAE,IAAG,CAAE,IAAA,CAAKA;iBAC9D;gBACN,IAAIQ,IAAWR,EAAI,IAAA,KAAS,SAASA,EAAI,IAAA,GAAOA,EAAI,IAApD;gBACI,IAAA,CAAKQ,EAAQ,GAChBxP,EAAI,IAAA,CAAK,iBAAewP,IAAS,2CAEjC,IAAA,CAAKA,EAAQ,GAAIR;YAElB;eAED;IAGF,GAEDb,EAAU,GAAA,CAAI,SAAA,CAAU,aAAA,GAAgB,SAASzI,CAAAA;QAChD,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAvB;QACA,IAAIgK,IAAQ,EAAZ;QACAA,CAAAA,CAAM,EAAC,GAAK,IAAA,CAAK,QAAA,IAAU,KAAI,IAC/BA,CAAAA,CAAM,EAAC,GAAK,IAAA,CAAK,QAAA,IAAU,IAAG,IAC9BA,CAAAA,CAAM,EAAC,GAAK,IAAA,CAAK,QAAA,GAAU,IAC3B,IAAA,CAAK,cAAA,GAAiB,OAAO,YAAA,CAAaA,CAAAA,CAAM,EAAC,GAAE,IAAMA,CAAAA,CAAM,EAAC,GAAE,IAAMA,CAAAA,CAAM,EAAC,GAAE;IACjF,GAGDvB,EAAU,wBAAA,GAA6B,UACvCA,EAAU,uBAAA,GAA4B,SACtCA,EAAU,sBAAA,GAA2B,QACrCA,EAAU,0BAAA,GAA8B,YACxCA,EAAU,0BAAA,GAA8B,YACxCA,EAAU,wBAAA,GAA6B,UACvCA,EAAU,sBAAA,GAA2B,QAErCA,EAAU,WAAA,CAAY,SAAA,CAAU,WAAA,GAAc,SAASzI,CAAAA;QACtDA,EAAO,cAAA,CAAe,IACtB,IAAA,CAAK,oBAAA,GAAuBA,EAAO,UAAA,IACnC,IAAA,CAAK,QAAA,IAAY;IACjB,GAEDyI,EAAU,WAAA,CAAY,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAChD,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,IAAA,GAAOA,EAAO,cAAA,CAAe,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAQ;IAC3D,GAEDyI,EAAU,WAAA,CAAY,SAAA,CAAU,kBAAA,GAAqB,SAASzI,CAAAA;QAC7D,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,IAAA,GAAOA,EAAO,cAAA,CAAe,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAQ,GAE3D,IAAA,CAAK,QAAA,IAAY,GAEjBA,EAAO,QAAA,IAAY,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QALlC;IAMA,GAEDyI,EAAU,WAAA,CAAY,SAAA,CAAU,WAAA,GAAc,SAASzI,CAAAA;QACtDyI,EAAU,YAAA,CAAa,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAA,EAAMzI;IAClD,GAGDyI,EAAU,0BAAA,CAA2BA,EAAU,sBAAsB,GACrEA,EAAU,0BAAA,CAA2BA,EAAU,0BAA0B,GACzEA,EAAU,0BAAA,CAA2BA,EAAU,0BAA0B,GACzEA,EAAU,0BAAA,CAA2BA,EAAU,wBAAwB,GACvEA,EAAU,0BAAA,CAA2BA,EAAU,sBAAsB,GAGrEA,EAAU,0BAAA,CAA2BA,EAAU,wBAAA,EAA0B,SAASzI,CAAAA;QACjF,IAAIiK;QACJ,IAAA,CAAK,WAAA,CAAYjK,IACjBA,EAAO,UAAA,IACPA,EAAO,UAAA,IACPA,EAAO,eAAA,CAAgB,IACvB,IAAA,CAAK,KAAA,GAAQA,EAAO,UAAA,IACpB,IAAA,CAAK,MAAA,GAASA,EAAO,UAAA,IACrB,IAAA,CAAK,eAAA,GAAkBA,EAAO,UAAA,IAC9B,IAAA,CAAK,cAAA,GAAiBA,EAAO,UAAA,IAC7BA,EAAO,UAAA,IACP,IAAA,CAAK,WAAA,GAAcA,EAAO,UAAA,IAC1BiK,IAAwB,KAAK,GAAA,CAAI,IAAIjK,EAAO,SAAA,KAC5C,IAAA,CAAK,cAAA,GAAiBA,EAAO,UAAA,CAAWiK,IACpCA,IAAwB,MAC3BjK,EAAO,UAAA,CAAW,KAAKiK,IAExB,IAAA,CAAK,KAAA,GAAQjK,EAAO,UAAA,IACpBA,EAAO,UAAA,IACP,IAAA,CAAK,WAAA,CAAYA;IAClB,IAEAyI,EAAU,0BAAA,CAA2BA,EAAU,uBAAA,EAAyB,SAASzI,CAAAA;QAChF,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,eAAA,CAAgB,IACvB,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,UAAA,GAAaA,EAAO,UAAA,IACzBA,EAAO,UAAA,IACPA,EAAO,UAAA,IACP,IAAA,CAAK,UAAA,GAAcA,EAAO,UAAA,KAAc,OACxC,IAAA,CAAK,WAAA,CAAYA;IAClB,IAGAyI,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,wBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,uBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,uBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,uBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,uBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,uBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,uBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,uBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,uBAAA,EAA0B,SACpEA,EAAU,qBAAA,CAAsBA,EAAU,uBAAA,EAA0B,SAGpEA,EAAU,8BAAA,CAA+BA,EAAU,wBAAA,EAA2B,SAC9EA,EAAU,8BAAA,CAA+BA,EAAU,uBAAA,EAA0B,SAC7EA,EAAU,8BAAA,CAA+BA,EAAU,0BAAA,EAA6B,SAChFA,EAAU,8BAAA,CAA+BA,EAAU,wBAAA,EAA2B,SAC9EA,EAAU,8BAAA,CAA+BA,EAAU,sBAAA,EAA0B,SAC7EA,EAAU,8BAAA,CAA+BA,EAAU,0BAAA,EAA6B,SAEhFA,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAIkK,IAAalK,EAAO,SAAA,KAAc,GAClCmK,IAAAA,AAAAA,CAAAA,AAAgBD,CAAAA,IAAa,CAAA,IAAK,CAAA,IAAK;QAC3C,IAAA,CAAK,UAAA,GAAa,EAAlB;QACA,IAAA,IAASjT,IAAI,GAAGA,IAAI,GAAGA,IAClBkT,KAAe,KAClB,IAAA,CAAK,UAAA,CAAWlT,EAAC,GAAI+I,EAAO,UAAA,KAE5B,IAAA,CAAK,UAAA,CAAW/I,EAAC,GAAI+I,EAAO,UAAA;IAG/B,IACAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,QAAA,GAAWA,EAAO,SAAvB;IACD,IACAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,QAAA,GAAWA,EAAO,WAAvB;QACA,IAAIoK,IAAqB,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAY,CAAA,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAA;QAC7E,IAAA,CAAK,WAAA,GAAcpK,EAAO,cAAA,CAAeoK;IAC1C,IACA3B,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QAGxC,IAAImF,IAAMnF,EAAO,SAAjB;QAMA,IADA,IAAA,CAAK,OAAA,GAAUmF,IAAM,KACjB,IAAA,CAAK,OAAA,KAAY,GAAG;YACvB7K,EAAI,KAAA,CAAM,kBAAgB,IAAA,CAAK,OAAA,GAAQ;YACvC;QACA;QAcD,IAbA6K,IAAMnF,EAAO,SAAA,IACb,IAAA,CAAK,WAAA,GAAemF,KAAO,IAAK,GAChC,IAAA,CAAK,eAAA,GAAkBA,IAAM,IAC7BA,IAAMnF,EAAO,SAAA,IACb,IAAA,CAAK,UAAA,GAAcmF,KAAO,IAAK,GAC/B,IAAA,CAAK,aAAA,GAAiBA,KAAO,IAAK,GAClC,IAAA,CAAK,UAAA,GAAcA,KAAO,IAAK,GAC/B,IAAA,CAAK,UAAA,GAAcA,KAAO,IAAK,GAC/B,IAAA,CAAK,oBAAA,GAAwBA,KAAO,IAAK,GACzC,IAAA,CAAK,oBAAA,GAAwBA,KAAO,IAAK,GACzC,IAAA,CAAK,sBAAA,GAA0BA,IAAM,GACrCA,IAAMnF,EAAO,SAAA,IACb,IAAA,CAAK,UAAA,GAAcmF,KAAO,IAAK,GAC3B,IAAA,CAAK,UAAA,KAAe,GAAG;YAC1B7K,EAAI,KAAA,CAAM;YACV;QACA;QAED,IADA,IAAA,CAAK,kCAAA,GAAsC6K,KAAO,IAAK,GACnD,IAAA,CAAK,kCAAA,KAAuC,GAC/C,IAAA,CAAK,oCAAA,GAAwCA,IAAM;aAAA,IAEnD,IAAA,CAAK,UAAA,GAAcA,IAAM,IACrB,IAAA,CAAK,UAAA,KAAe,GAAG;YAC1B7K,EAAI,KAAA,CAAM;YACV;QACA;QAGF,IAAI+P,IAAoB,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAW;QACpD,IAAA,CAAK,UAAA,GAAarK,EAAO,cAAA,CAAeqK;IACzC,IAGA5B,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAI/I,GACAqT;QASJ,IARA,IAAA,CAAK,oBAAA,GAAuBtK,EAAO,SAAA,IACnC,IAAA,CAAK,oBAAA,GAAuBA,EAAO,SAAA,IACnC,IAAA,CAAK,qBAAA,GAAwBA,EAAO,SAAA,IACpC,IAAA,CAAK,kBAAA,GAAqBA,EAAO,SAAA,IACjC,IAAA,CAAK,kBAAA,GAAsBA,EAAO,SAAA,KAAc,GAChD,IAAA,CAAK,YAAA,GAAgBA,EAAO,SAAA,KAAc,IAC1CsK,IAAU,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAW,GACtC,IAAA,CAAK,GAAA,GAAM,EAAA,EACNrT,IAAI,GAAGA,IAAI,IAAA,CAAK,YAAA,EAAcA,IAClC,IAAA,CAAK,GAAA,CAAIA,EAAC,GAAI,CAAA,GACd,IAAA,CAAK,GAAA,CAAIA,EAAC,CAAE,MAAA,GAAS+I,EAAO,UAAA,IAC5B,IAAA,CAAK,GAAA,CAAI/I,EAAC,CAAE,IAAA,GAAO+I,EAAO,cAAA,CAAe,IAAA,CAAK,GAAA,CAAI/I,EAAC,CAAE,MAAM,GAC3DqT,KAAW,IAAE,IAAA,CAAK,GAAA,CAAIrT,EAAC,CAAE,MAHzB;QAQD,IAHA,IAAA,CAAK,YAAA,GAAe+I,EAAO,SAAA,IAC3BsK,KACA,IAAA,CAAK,GAAA,GAAM,EAAA,EACNrT,IAAI,GAAGA,IAAI,IAAA,CAAK,YAAA,EAAcA,IAClC,IAAA,CAAK,GAAA,CAAIA,EAAC,GAAI,CAAA,GACd,IAAA,CAAK,GAAA,CAAIA,EAAC,CAAE,MAAA,GAAS+I,EAAO,UAAA,IAC5B,IAAA,CAAK,GAAA,CAAI/I,EAAC,CAAE,IAAA,GAAO+I,EAAO,cAAA,CAAe,IAAA,CAAK,GAAA,CAAI/I,EAAC,CAAE,MAAM,GAC3DqT,KAAW,IAAE,IAAA,CAAK,GAAA,CAAIrT,EAAC,CAAE,MAHzB;QAKGqT,IAAQ,KACX,CAAA,IAAA,CAAK,GAAA,GAAMtK,EAAO,cAAA,CAAesK,EAAO;IAE1C,IAGA7B,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,IAC3B,IAAA,CAAK,UAAA,GAAaA,EAAO,UAAA,IACzB,IAAA,CAAK,UAAA,GAAaA,EAAO,UAFzB;IAGD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIuK,IAAQvK,EAAO,SAAnB;QACA,IAAA,CAAK,kBAAA,GAAA,AAAuBuK,CAAAA,IAAQ,GAAA,KAAS,KAC7C,IAAA,CAAK,eAAA,GAAA,AAAoBA,CAAAA,IAAQ,EAAA,KAAS,IAC1C,IAAA,CAAK,eAAA,GAAA,AAAoBA,CAAAA,IAAQ,EAAA,KAAS,GAC1CvK,EAAO,UAAA;IACR,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACrC,IAAI/I;QAKJ,IAJA,IAAA,CAAK,aAAA,GAAgB+I,EAAO,UAAA,IAC5B,IAAA,CAAK,eAAA,GAAkB,EAAA,EACvB,IAAA,CAAK,aAAA,GAAgB,EAAA,EACrB,IAAA,CAAK,oBAAA,GAAuB,EAAA,EACvB/I,IAAI,GAAGA,IAAI,IAAA,CAAK,aAAA,EAAeA,IAChC,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK+I,EAAO,UAAA,KACjC,IAAA,CAAK,aAAA,CAAc,IAAA,CAAKA,EAAO,UAAA,KAC/B,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAKA,EAAO,UAAA;IAE9C,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,mBAAA,GAAsBA,EAAO,UAAA,IAClC,IAAA,CAAK,mBAAA,GAAsBA,EAAO,UAAA,IAClC,IAAA,CAAK,oBAAA,GAAuBA,EAAO,UAAA,IACnC,IAAA,CAAK,oBAAA,GAAuBA,EAAO,UAAA,IACnC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAA,IACxB,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAA,IACxB,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,IACvB,IAAA,CAAK,QAAA,GAAWA,EAAO,UAPvB;IAQD,IACAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,uBAAA,GAA0BA,EAAO,UAAA,IACnC,IAAA,CAAK,2BAAA,GAA8BA,EAAO,UAD7C;IAED,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,KAAA,GAAQ,KAChB,CAAA,IAAA,CAAK,KAAA,GAAQA,EAAO,SAAA,EAAA,GAEjB,IAAA,CAAK,KAAA,GAAQ,KAChB,CAAA,IAAA,CAAK,KAAA,GAAQA,EAAO,SAAA,EAAA,GAEjB,IAAA,CAAK,KAAA,GAAQ,KAChB,CAAA,IAAA,CAAK,KAAA,GAAQA,EAAO,SAAA,EAAA,GAEjB,IAAA,CAAK,KAAA,GAAQ,KACZ,CAAA,IAAA,CAAK,OAAA,IAAW,IACf,IAAA,CAAK,KAAA,GAAQ,KAChB,CAAA,IAAA,CAAK,MAAA,GAASA,EAAO,SAAA,IACrB,IAAA,CAAK,MAAA,GAASA,EAAO,SAAA,IACrB,IAAA,CAAK,MAAA,GAASA,EAAO,SAAA,EAAA,IAErB,CAAA,IAAA,CAAK,MAAA,GAASA,EAAO,SAAA,IACrB,IAAA,CAAK,MAAA,GAASA,EAAO,SAAA,IACrB,IAAA,CAAK,MAAA,GAASA,EAAO,SAAA,EAAA,IAEZ,IAAA,CAAK,OAAA,AAAW,GAIxB,IAAA,CAAK,KAAA,GAAQ,MAChB,CAAA,IAAA,CAAK,EAAA,GAAKA,EAAO,UAzBlB,EAAA;IA2BD,IAEAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,cAAA,GAAiBA,EAAO,SAAA,IAC7B,IAAA,CAAK,iBAAA,GAAoBA,EAAO,SAAA,IAChC,IAAA,CAAK,iBAAA,GAAoBA,EAAO,SAAA,IAC5B,IAAA,CAAK,KAAA,GAAQ,KAChB,CAAA,IAAA,CAAK,cAAA,GAAiBA,EAAO,SAAA,IAC7B,IAAA,CAAK,WAAA,GAAcA,EAAO,SAL3B,EAAA;IAOD,IACAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QAIxC,IAHA,IAAA,CAAK,eAAA,GAAkBA,EAAO,UAAA,IAC9B,IAAA,CAAK,eAAA,GAAkB,EAAA,EACvB,IAAA,CAAK,mBAAA,GAAsB,EAAA,EACtB,IAAI,GAAG,IAAI,IAAA,CAAK,eAAA,EAAiB,IAAK;YAC1C,IAAIwK,IAAiBxK,EAAO,UAA5B;YACA,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAKwK,IACtBA,KAAkB,SACrB,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAKxK,EAAO,WAAA;QAEtC;IACF,IACAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIyK,GACAxT;QAGJ,IAFAwT,IAAczK,EAAO,UAAA,IACrB,IAAA,CAAK,aAAA,GAAgB,EAAA,EACjB,IAAA,CAAK,OAAA,KAAY,GACpB,IAAI/I,IAAE,GAAGA,IAAEwT,GAAaxT,IACvB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK+I,EAAO,UAAA;IAGlC,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,MAAA,GAASA,EAAO,UAAA,IAClB,IAAA,CAAK,OAAA,GAAUA,EAAO,UADzB;IAED,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QAExC,IADA,IAAA,CAAK,WAAA,GAAcA,EAAO,UAAA,CAAW,IACjC,IAAA,CAAK,WAAA,KAAgB,QAAQ;YAChC,IAAA,CAAK,gBAAA,GAAmBA,EAAO,UAAA,IAC/B,IAAA,CAAK,wBAAA,GAA2BA,EAAO,UAAA,IACvC,IAAA,CAAK,mBAAA,GAAsBA,EAAO,UAFlC;YAGA,IAAImF,IAAMnF,EAAO,SAAjB;YACA,IAAA,CAAK,eAAA,GAAkBmF,KAAO;QAChC,OAAY,IAAA,CAAK,WAAA,KAAgB,SAC/B,IAAA,CAAK,WAAA,GAAcnF,EAAO,cAAA,CAAe,IAAA,CAAK,IAAA,GAAO,KAC3C,IAAA,CAAK,WAAA,KAAgB,UAC/B,CAAA,IAAA,CAAK,WAAA,GAAcA,EAAO,cAAA,CAAe,IAAA,CAAK,IAAA,GAAO,EAAC;IAExD,IACAyI,EAAU,iBAAA,CAAkB,QAAQ,SAAUzI,CAAAA;QAC7C,IAAA,CAAK,aAAA,CAAcA,IACnB,IAAA,CAAK,MAAA,GAASA,EAAO,WADrB;IAED,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAExC,IAAA,CAAK,OAAA,KAAY,KACpB,CAAA,IAAA,CAAK,qBAAA,GAAwBA,EAAO,SAAA,IACpC,IAAA,CAAK,yBAAA,GAA4BA,EAAO,SAAA,IACxC,IAAA,CAAK,4BAAA,GAA+BA,EAAO,SAAA,IAC3C,IAAA,CAAK,oBAAA,GAAuBA,EAAO,SAAA,IACnC,IAAA,CAAK,kBAAA,GAAqBA,EAAO,SALlC,EAAA;IAOD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIyK,GACAxT;QAIJ,IAHAwT,IAAczK,EAAO,UAAA,IACrB,IAAA,CAAK,aAAA,GAAgB,EAAA,EACrB,IAAA,CAAK,cAAA,GAAiB,EAAA,EAClB,IAAA,CAAK,OAAA,KAAY,GACpB,IAAI/I,IAAE,GAAGA,IAAEwT,GAAaxT,IAAK;YAC5B,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK+I,EAAO,UAAA;YAI5B,IAAIiC,IAAQjC,EAAO,SAAnB;YACIiC,IAAQ,KACV3H,EAAI,IAAA,CAAK,aAAa,0DAE3B,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK2H;QACzB;aAAA,IACS,IAAA,CAAK,OAAA,IAAW,GAC1B,IAAIhL,IAAE,GAAGA,IAAEwT,GAAaxT,IACvB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK+I,EAAO,UAAA,KAC/B,IAAA,CAAK,cAAA,CAAe,IAAA,CAAKA,EAAO,SAAA;IAGnC,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAI0K,IAAY1K,EAAO,SAAA,IACnB2K,IAAY3K,EAAO,SAAA,IACnB4K,IAAY5K,EAAO,SAFvB;QAGA,IAAA,CAAK,KAAA,GAAQ0K,KAAa,GAC1B,IAAA,CAAK,IAAA,GAAUA,KAAa,IAAK,IACjC,IAAA,CAAK,KAAA,GAAA,AAAUA,CAAAA,IAAY,CAAA,KAAS,IAAOC,KAAa,IAAK,GAC7D,IAAA,CAAK,KAAA,GAAUA,KAAa,IAAK,GACjC,IAAA,CAAK,KAAA,GAAUA,KAAa,IAAK,GACjC,IAAA,CAAK,aAAA,GAAiBA,IAAY,IAASC,KAAa,IAAK;IAC9D,IAGAnC,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAI6K,IAAS7K,EAAO,UAApB;QACA,IAAA,CAAK,SAAA,GAAY6K,KAAU,GAC3B,IAAA,CAAK,WAAA,GAAcA,IAAS,GAC5B,IAAA,CAAK,QAAA,GAAW,EAFhB;QAGA,IAAA,IAAS5T,IAAI,GAAGA,IAAI,IAAA,CAAK,WAAA,GAAY,GAAGA,IAAK;YAC5C,IAAI6T,IAAU,CAAA;YACd,IAAA,CAAK,QAAA,CAAS,IAAA,CAAKA;YACnB,IAAIJ,IAAY1K,EAAO,SAAA,IACnB2K,IAAY3K,EAAO,SAAA,IACnB4K,IAAY5K,EAAO,SAFvB;YAGA8K,EAAQ,KAAA,GAAQJ,KAAa,GAC7BI,EAAQ,IAAA,GAAUJ,KAAa,IAAK,IACpCI,EAAQ,KAAA,GAAA,AAAUJ,CAAAA,IAAY,CAAA,KAAQ,IAAOC,KAAa,IAAK,IAC/DG,EAAQ,KAAA,GAAUH,KAAa,IAAK,GACpCG,EAAQ,KAAA,GAASH,IAAY,GAC7BG,EAAQ,WAAA,GAAgBF,KAAa,IAAK,IACtCE,EAAQ,WAAA,GAAc,KACzBA,CAAAA,EAAQ,QAAA,GAAA,AAAaF,CAAAA,IAAY,CAAA,KAAQ,IAAK5K,EAAO,SAPtD,EAAA;QASA;IACF,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACzC,IAAI+K,IAAiB,KACjBC,IAA6B,KAE7BC,IAAa,EAAA,EACbC,IAAkB;YAClB;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SAAA;QAIJ,IAAA,CAAK,eAAA,CAAgBlL;QAGrB,GAAG;YACC,IAAImL,IAAcnL,EAAO,SAAA,IAErBC,IAAO,KAAK,GAFhB,CAGKkL,IAAcJ,GACdG,EAAgB,MAAA,GAAS;YAqB9B,IAhBMjL,IAWFD,EAAO,cAAA,CAAeA,EAAO,UAAA,MAT7BA,CAAAA,EAAO,cAAA,CAAe,KAGtB,IAAA,CAAK,UAAA,GAAcA,EAAO,UAAA,MAAgB,IAG1CA,EAAO,cAAA,CAAe,GAAE,GAM5BiL,EAAW,IAAA,CAAKC,CAAAA,CAAgBjL,EAAK,GAE9BkL,IAAcH,GACjB;QAEP,QAAQ,CAFD,GAAA;QAIR,IAAA,CAAK,iBAAA,GACDC,EAAW,MAAA,GAAS,OAAOA,EAAW,IAAA,CAAK,QAAQ;IAC3D,IAEAxC,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAxB;IACD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,IAAA,GAAOA,EAAO,UAAnB;IACD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAxB;IACD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QAOxC,IANA,IAAA,CAAK,OAAA,GAAUA,EAAO,SAAA,IACtB,IAAA,CAAK,kBAAA,GAAqBA,EAAO,SAAA,IACjC,IAAA,CAAK,OAAA,GAAUA,EAAO,UAAA,IACtB,IAAA,CAAK,eAAA,GAAkBA,EAAO,UAAA,IAC9B,IAAA,CAAK,UAAA,GAAaA,EAAO,SAAA,IACzB,IAAA,CAAK,oBAAA,GAAuBA,EAAO,SAAA,IAC/B,IAAA,CAAK,oBAAA,KAAyB,GAAG;YACpC,IAAA,CAAK,WAAA,GAAcA,EAAO,SAAA,IAC1B,IAAA,CAAK,YAAA,GAAeA,EAAO,SAAA,IAC3B,IAAA,CAAK,cAAA,GAAiB,EAFtB;YAGA,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,kBAAA,EAAoBA,IAC5C,IAAA,CAAK,cAAA,CAAeA,EAAC,GAAI+I,EAAO,SAAA;QAEjC;IACF,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI+J,GACAT;QACJ,IAAA,CAAK,OAAA,GAAU,EAAf;QAEA,IAAA,IADImB,IAAczK,EAAO,UAAA,IAChB/I,IAAI,GAAGA,IAAIwT,GAAaxT,IAEhC,IADA8S,IAAMtB,EAAU,WAAA,CAAYzI,GAAQ,CAAA,GAAO,IAAA,CAAK,IAAA,GAAQA,CAAAA,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,AAAA,IAChF+J,EAAI,IAAA,KAAStB,EAAU,EAA3B,EACCa,IAAMS,EAAI,GAAA,EACV,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAKT;aAElB;IAGH,IAGAb,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAxB;IACD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAAA,CAAW,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QAAQ;IACnE,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,EAAf;QAEA,IAAA,IADIyK,IAAczK,EAAO,UAAA,IAChB/I,IAAI,GAAGA,IAAIwT,GAAaxT,IAAK;YACrC,IAAImU,IAAQ,CAAA;YACZ,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAKA,IACd,IAAA,CAAK,OAAA,KAAY,IACpBA,CAAAA,EAAM,gBAAA,GAAmBpL,EAAO,UAAA,IAChCoL,EAAM,UAAA,GAAapL,EAAO,SAAA,EAAA,IAE1BoL,CAAAA,EAAM,gBAAA,GAAmBpL,EAAO,UAAA,IAChCoL,EAAM,UAAA,GAAapL,EAAO,SAAA,EAAA,GAE3BoL,EAAM,kBAAA,GAAqBpL,EAAO,SAAA,IAClCoL,EAAM,mBAAA,GAAsBpL,EAAO,SATnC;QAUA;IACF,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,OAAA,IAAW,IACnB,CAAA,IAAA,CAAK,SAAA,GAAiBA,EAAO,UAAA,IAC7B,IAAA,CAAK,iBAAA,GAAuBA,EAAO,UAAA,IACnC,IAAA,CAAK,cAAA,GAAqBA,EAAO,UAAA,IACjC,IAAA,CAAK,EAAA,GAAWA,EAAO,UAAA,IACvB,IAAA,CAAK,aAAA,GAAoBA,EAAO,WAAA,IAChC,IAAA,CAAK,KAAA,GAAcA,EAAO,WAAA,EAAA,IAE1B,CAAA,IAAA,CAAK,aAAA,GAAoBA,EAAO,WAAA,IAChC,IAAA,CAAK,KAAA,GAAcA,EAAO,WAAA,IAC1B,IAAA,CAAK,SAAA,GAAiBA,EAAO,UAAA,IAC7B,IAAA,CAAK,uBAAA,GAA2BA,EAAO,UAAA,IACvC,IAAA,CAAK,cAAA,GAAqBA,EAAO,UAAA,IACjC,IAAA,CAAK,EAAA,GAAWA,EAAO,UAbxB,EAAA;QAeA,IAAIqL,IAAe,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAY,CAAA,KAAO,CAAA,IAAA,CAAK,aAAA,CAAc,MAAA,GAAO,CAAA,IAAM,CAAA,IAAA,CAAK,KAAA,CAAM,MAAA,GAAO,CAAA,CAAzG;QACI,IAAA,CAAK,OAAA,IAAW,KACnBA,CAAAA,KAAgB,CAAA,GAEjB,IAAA,CAAK,YAAA,GAAerL,EAAO,cAAA,CAAeqL;IAC3C,IAIA5C,EAAU,uBAAA,GAA0B,SAASxI,CAAAA,EAAM8I,CAAAA;QAC/CN,CAAAA,CAAUxI,IAAK,MAAK,GAAI,SAAS6D,CAAAA;YAC7B2E,EAAU,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAMxI,GAAM6D;QACtC,GACD2E,CAAAA,CAAUxI,IAAK,MAAK,CAAE,SAAA,GAAY,IAAIwI,EAAU,OAAA,IAChDA,CAAAA,CAAUxI,IAAK,MAAK,CAAE,SAAA,CAAU,KAAA,GAAQ,SAASD,CAAAA;YAE7C,IADA,IAAA,CAAK,eAAA,CAAgBA,IACjB+I,GACAA,EAAY,IAAA,CAAK,IAAA,EAAM/I;iBAKvB,IAHA,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,IACvB,IAAA,CAAK,qBAAA,GAAwBA,EAAO,UAAA,IACpC,IAAA,CAAK,UAAA,GAAa,EAAA,EACb,IAAI,GAAG,IAAI,IAAA,CAAK,qBAAA,EAAuB,IAAK;gBAC7C,IAAIsL,IAAYtL,EAAO,UAAvB;gBACA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAKsL;YACxB;QAEb;IACA,GAGA7C,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAGlCA,EAAU,uBAAA,CAAwB,SAElCA,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIuL,IAAWvL,EAAO,cAAA,CAAe,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QAAQ;QAE5D,IADA,IAAA,CAAK,IAAA,GAAOuL,GACR,OAAO7D,IAA0B,KAAa;YACjD,IAAI8D,IAAa,IAAI9D;YACrB,IAAA,CAAK,GAAA,GAAM8D,EAAW,kBAAA,CAAmB,IAAItH,EAAWqH,EAAS,MAAA,EAAQ,GAAGrH,EAAW,UAAU;QACjG;IACF,IAGAuE,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,UAAA,GAAaA,EAAO,SAAA,IACzB,IAAA,CAAK,aAAA,GAAgBA,EAAO,SAD5B;IAED,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,WAAA,GAAcA,EAAO,UAAA,CAAW;IACtC,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAIsK,IAAU,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAA/B;QACA,IAAA,CAAK,WAAA,GAActK,EAAO,UAAA,CAAW,IACrC,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5BsK,KAAW,GACX,IAAA,CAAK,iBAAA,GAAoB,EAHzB;QAKA,IAAA,IADIrT,IAAI,GACDqT,KAAS,GACf,IAAA,CAAK,iBAAA,CAAkBrT,EAAC,GAAI+I,EAAO,UAAA,CAAW,IAC9CsK,KAAW,GACXrT;IAEF,IAGAwR,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,OAAA,KAAY,KACpBA,CAAAA,EAAO,UAAA,IACP,IAAA,CAAK,OAAA,GAAUA,EAAO,UAAA,CAAW,IACjCA,EAAO,eAAA,CAAgB,IACvB,IAAA,CAAK,IAAA,GAAOA,EAAO,UAAA,CAAW,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QAAA,GAAS,KAClD,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAO,EAAC,KAAI,QACnC,CAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,GAAE,GAAE,CANlC;IASD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAI/I,GAAGU,GAEHsL,GACAwI;QACJ,IAAA,CAAK,oBAAA,GAAuBzL,EAAO,SAAA,IACnCyL,IAAWzL,EAAO,SAAA,IAClB,IAAA,CAAK,qBAAA,GAAwByL,KAAY,GACzC,IAAA,CAAK,iBAAA,GAAA,AAAqBA,CAAAA,IAAW,EAAA,KAAS,GAC9C,IAAA,CAAK,mBAAA,GAAuBA,IAAW,IACvC,IAAA,CAAK,6BAAA,GAAgCzL,EAAO,UAAA,IAC5C,IAAA,CAAK,4BAAA,GAA+BA,EAAO,cAAA,CAAe,IAC1D,IAAA,CAAK,iBAAA,GAAoBA,EAAO,SAAA,IAChC,IAAA,CAAK,4BAAA,GAA+BA,EAAO,UAAA,KAAe,MAC1D,IAAA,CAAK,eAAA,GAAmBA,EAAO,SAAA,KAAc,GAC7C,IAAA,CAAK,iBAAA,GAAqBA,EAAO,SAAA,KAAc,GAC/C,IAAA,CAAK,qBAAA,GAAyBA,EAAO,SAAA,KAAc,GACnD,IAAA,CAAK,uBAAA,GAA2BA,EAAO,SAAA,KAAc,GACrD,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,IAC3ByL,IAAWzL,EAAO,SAAA,IAClB,IAAA,CAAK,iBAAA,GAAqByL,KAAY,GACtC,IAAA,CAAK,iBAAA,GAAA,AAAqBA,CAAAA,IAAW,EAAA,KAAQ,GAC7C,IAAA,CAAK,gBAAA,GAAA,AAAoBA,CAAAA,IAAW,CAAA,KAAQ,GAC5C,IAAA,CAAK,kBAAA,GAAsBA,IAAW,GAEtC,IAAA,CAAK,WAAA,GAAc,EApBnB;QAqBA,IAAIC,IAAc1L,EAAO,SAAzB;QACA,IAAK/I,IAAI,GAAGA,IAAIyU,GAAazU,IAAK;YACjC,IAAI0U,IAAa,EAAjB;YACA,IAAA,CAAK,WAAA,CAAY,IAAA,CAAKA,IACtBF,IAAWzL,EAAO,SAAA,IAClB2L,EAAW,YAAA,GAAA,AAAgBF,CAAAA,IAAW,GAAA,KAAS,GAC/CE,EAAW,SAAA,GAAYF,IAAW;YAClC,IAAIG,IAAW5L,EAAO,UAAtB;YACA,IAAKrI,IAAI,GAAGA,IAAIiU,GAAUjU,IAAK;gBAC9B,IAAIkU,IAAO,CAAE;gBACbF,EAAW,IAAA,CAAKE,IAChB5I,IAASjD,EAAO,UAAA,IAChB6L,EAAK,IAAA,GAAS7L,EAAO,cAAA,CAAeiD;YACpC;QACD;IACF,IAGAwF,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI+J;QACA,IAAA,CAAK,OAAA,KAAY,IACpB,IAAA,CAAK,WAAA,GAAc/J,EAAO,UAAA,KAE1B,IAAA,CAAK,WAAA,GAAcA,EAAO,UAAA,IAE3B,IAAA,CAAK,UAAA,GAAa,EALlB;QAMA,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,WAAA,EAAaA,IAErC,IADA8S,IAAMtB,EAAU,WAAA,CAAYzI,GAAQ,CAAA,GAAO,IAAA,CAAK,IAAA,GAAQA,CAAAA,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,AAAA,IAChF+J,EAAI,IAAA,KAAStB,EAAU,EAA3B,EACKsB,EAAI,GAAA,CAAI,IAAA,KAAS,UACpBzP,EAAI,KAAA,CAAM,aAAa,8BAA4ByP,EAAI,GAAA,CAAI,IAAI,GAEhE,IAAA,CAAK,UAAA,CAAW9S,EAAC,GAAI8S,EAAI,GAHzB;aAKA;IAGH,IAGAtB,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI8L;QACJA,IAAO9L,EAAO,SAAA,IACd,IAAA,CAAK,WAAA,GAAe8L,KAAQ,IAAK,IACjC,IAAA,CAAK,WAAA,GAAcA,IAAO,IAC1BA,IAAO9L,EAAO,SAAA,IACd,IAAA,CAAK,gBAAA,GAAoB8L,KAAQ,IAAK,IAClC,IAAA,CAAK,OAAA,KAAY,KAAK,IAAA,CAAK,OAAA,KAAY,IAC1C,IAAA,CAAK,UAAA,GAAaA,IAAO,KAEzB,IAAA,CAAK,UAAA,GAAa,GAGnB,IAAA,CAAK,KAAA,GAAQ,EAXb;QAYA,IAAIC,IAAa;QACjB,IAAI,IAAA,CAAK,OAAA,GAAU,GAClBA,IAAa/L,EAAO,UAApB;aACU,IAAA,IAAA,CAAK,OAAA,KAAY,GAC3B+L,IAAa/L,EAAO,UAApB;aAEA,MAAM;QAEP,IAAA,IAAS/I,IAAI,GAAGA,IAAI8U,GAAY9U,IAAK;YACpC,IAAI+U,IAAO,CAAA;YAEX,IADA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,IACZ,IAAA,CAAK,OAAA,GAAU,GAClBA,EAAK,OAAA,GAAUhM,EAAO,UAAtB;iBACU,IAAA,IAAA,CAAK,OAAA,KAAY,GAC3BgM,EAAK,OAAA,GAAUhM,EAAO,UAAtB;iBAEA,MAAM;YAQP,OANI,IAAA,CAAK,OAAA,KAAY,KAAK,IAAA,CAAK,OAAA,KAAY,IAC1CgM,EAAK,mBAAA,GAAuBhM,EAAO,UAAA,KAAe,KAElDgM,EAAK,mBAAA,GAAsB,GAE5BA,EAAK,oBAAA,GAAuBhM,EAAO,UAAA,IAC5B,IAAA,CAAK,gBAAA;gBACX,KAAK;oBACJgM,EAAK,WAAA,GAAc;oBACnB;gBACD,KAAK;oBACJA,EAAK,WAAA,GAAchM,EAAO,UAA1B;oBACA;gBACD,KAAK;oBACJgM,EAAK,WAAA,GAAchM,EAAO,UAA1B;oBACA;gBACD;oBACC,MAAM;YACP;YACD,IAAIiM,IAAejM,EAAO,UAA1B;YACAgM,EAAK,OAAA,GAAU,EAAf;YACA,IAAA,IAASrU,IAAE,GAAGA,IAAIsU,GAActU,IAAK;gBACpC,IAAIuU,IAAS,CAAA;gBAEb,IADAF,EAAK,OAAA,CAAQ,IAAA,CAAKE,IACd,IAAA,CAAK,OAAA,KAAY,KAAK,IAAA,CAAK,OAAA,KAAY,GAC1C,OAAO,IAAA,CAAK,UAAA;oBACX,KAAK;wBACJA,EAAO,YAAA,GAAe;wBACtB;oBACD,KAAK;wBACJA,EAAO,YAAA,GAAelM,EAAO,UAA7B;wBACA;oBACD,KAAK;wBACJkM,EAAO,YAAA,GAAelM,EAAO,UAA7B;wBACA;oBACD;wBACC,MAAM;gBACP;gBAEF,OAAO,IAAA,CAAK,WAAA;oBACX,KAAK;wBACJkM,EAAO,aAAA,GAAgB;wBACvB;oBACD,KAAK;wBACJA,EAAO,aAAA,GAAgBlM,EAAO,UAA9B;wBACA;oBACD,KAAK;wBACJkM,EAAO,aAAA,GAAgBlM,EAAO,UAA9B;wBACA;oBACD;wBACC,MAAM;gBACP;gBACD,OAAO,IAAA,CAAK,WAAA;oBACX,KAAK;wBACJkM,EAAO,aAAA,GAAgB;wBACvB;oBACD,KAAK;wBACJA,EAAO,aAAA,GAAgBlM,EAAO,UAA9B;wBACA;oBACD,KAAK;wBACJkM,EAAO,aAAA,GAAgBlM,EAAO,UAA9B;wBACA;oBACD;wBACC,MAAM;gBACP;YACD;QACD;IACF,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAImF,IAAMnF,EAAO,SAAjB;QACA,IAAA,CAAK,QAAA,GAAWmF,KAAO,GACvB,IAAA,CAAK,IAAA,GAAOA,IAAM;IACnB,IACAsD,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAQ5C,IAAA,AAPI,CAAA,IAAA,CAAK,OAAA,KAAY,KAAK,IAAA,CAAK,OAAA,KAAY,CAAA,KAC1C,CAAA,IAAA,CAAK,OAAA,GAAUA,EAAO,UAAA,IACtB,IAAA,CAAK,qBAAA,GAAwBA,EAAO,UAAA,IACpC,IAAA,CAAK,SAAA,GAAYA,EAAO,WAAA,IACxB,IAAA,CAAK,YAAA,GAAeA,EAAO,WAAA,IAC3B,IAAA,CAAK,gBAAA,GAAmBA,EAAO,WAAA,EAAA,GAE5B,IAAA,CAAK,OAAA,KAAY,GAAG;YACvB,IAAA,CAAK,cAAA,GAAiBA,EAAO,UAAA,CAAW,IACxC1F,EAAI,IAAA,CAAK,aAAa,gCACtB0F,EAAO,IAAA,CAAK,IAAA,CAAK,KAAA,GAAM,IAAA,CAAK,IAAI;YAChC;QACA;QACG,IAAA,CAAK,OAAA,IAAW,KACf,CAAA,IAAA,CAAK,OAAA,KAAY,IACpB,IAAA,CAAK,OAAA,GAAUA,EAAO,UAAA,KACZ,IAAA,CAAK,OAAA,KAAY,KAC3B,CAAA,IAAA,CAAK,OAAA,GAAUA,EAAO,UAAA,EAAA,GAEvB,IAAA,CAAK,qBAAA,GAAwBA,EAAO,UAAA,IACpC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAA,CAAW,IACnC,IAAA,CAAK,SAAA,GAAYA,EAAO,WAAA,IACpB,IAAA,CAAK,SAAA,KAAc,SACtB,CAAA,IAAA,CAAK,YAAA,GAAeA,EAAO,WAAA,IAC3B,IAAA,CAAK,gBAAA,GAAmBA,EAAO,WAAA,EAAA,IACrB,IAAA,CAAK,SAAA,KAAc,UAC7B,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,WAb9B,EAAA,CAAA;IAgBD,IAEAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI/I,GAAGU;QAGP,IAFA,cAAcqI,EAAO,UAAA,IACrB,IAAA,CAAK,YAAA,GAAe,EAAA,EAChB/I,IAAE,GAAGA,IAAE,aAAaA,IAAK;YAC5B,IAAIkV,IAAa,CAAA;YACjB,IAAA,CAAK,YAAA,CAAa,IAAA,CAAKA,IACnB,IAAA,CAAK,OAAA,GAAU,IAClBA,EAAW,EAAA,GAAKnM,EAAO,UAAA,KAEvBmM,EAAW,EAAA,GAAKnM,EAAO,UAJxB;YAMA,IAAIoM,IAAoBpM,EAAO,SAA/B;YAEA,IADAmM,EAAW,KAAA,GAAQ,EAAA,EACdxU,IAAI,GAAGA,IAAIyU,GAAmBzU,IAAK;gBACvC,IAAIwN,IAAMnF,EAAO,SAAA,IACb/H,IAAI,CAAA;gBACRkU,EAAW,KAAA,CAAM,IAAA,CAAKlU,IACtBA,EAAE,SAAA,GAAA,AAAckN,CAAAA,IAAM,GAAA,KAAS,MAAO,GAClC,IAAA,CAAK,KAAA,GAAQ,IAChBlN,EAAE,cAAA,GAAA,AAAkBkN,CAAAA,IAAM,GAAA,KAAS,IAAInF,EAAO,SAAA,KAE9C/H,EAAE,cAAA,GAAkBkN,IAAM;YAE3B;QACD;IACF,IAGAsD,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI+J,GAEAT;QAGJ,IAFA,IAAA,CAAK,UAAA,GAAa,EAAA,EAEXtJ,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,GAAM,IAAA,CAAK,IAA9C,EAEC,IADA+J,IAAMtB,EAAU,WAAA,CAAYzI,GAAQ,CAAA,GAAM,IAAA,CAAK,IAAA,GAAQA,CAAAA,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,AAAA,IAC/E+J,EAAI,IAAA,KAAStB,EAAU,EAA3B,EACK,IAAA,CAAK,OAAA,KAAY,IACpBa,IAAM,IAAIb,EAAU,0BAAA,CAA2BsB,EAAI,IAAA,EAAMA,EAAI,IAAA,EAAMA,EAAI,QAAA,EAAUA,EAAI,KAAK,IAE1FT,IAAM,IAAIb,EAAU,+BAAA,CAAgCsB,EAAI,IAAA,EAAMA,EAAI,IAAA,EAAMA,EAAI,QAAA,EAAUA,EAAI,KAAK,GAE5FT,EAAI,KAAA,KAAUb,EAAU,GAAA,CAAI,SAAA,CAAU,KAAA,IAASa,EAAI,IAAA,KAAS,UAC/DhP,CAAAA,EAAI,IAAA,CAAK,aAAagP,EAAI,IAAA,GAAK,sFAC/BA,EAAI,kBAAA,CAAmBtJ,EAAM,GAE9BsJ,EAAI,KAAA,CAAMtJ,IACV,IAAA,CAAK,UAAA,CAAW,IAAA,CAAKsJ;aAErB;IAGH,IAEAb,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,KAAA,GAAQA,EAAO,SAAA,KAAc;IACnC,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,WAAA,GAAcA,EAAO,UAAA,IAC1B,IAAA,CAAK,YAAA,GAAeA,EAAO,UAD3B;IAED,IACAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,SAAA,GAAYA,EAAO,WAAA,IACxB,IAAA,CAAK,KAAA,GAAQA,EAAO,WADpB;IAED,IAEAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIqM,IAAQrM,EAAO,SAAnB;QACA,IAAA,CAAK,MAAA,GAAS,EAAd;QACA,IAAA,IAAS/I,IAAI,GAAGA,IAAIoV,GAAOpV,IAAK;YAC/B,IAAIwL,IAAQ,CAAA;YACZ,IAAA,CAAK,MAAA,CAAOxL,EAAC,GAAIwL,GACjBA,EAAM,QAAA,GAAWzC,EAAO,UADxB;YAEA,IAAIyL,IAAWzL,EAAO,SAAtB;YAGA,OAFAyC,EAAM,YAAA,GAAegJ,KAAY,GACjChJ,EAAM,eAAA,GAAkBgJ,IAAW,KAC3BhJ,EAAM,eAAA;gBACb,KAAK;oBACJA,EAAM,aAAA,GAAgBzC,EAAO,UAAA,CAAW;oBACxC;gBACD,KAAK;oBACJyC,EAAM,aAAA,GAAgBzC,EAAO,UAAA,CAAW,IACxCyC,EAAM,uBAAA,GAA0BzC,EAAO,UADvC;oBAEA;gBACD,KAAK;oBACJ;gBACD,KAAK;oBACJ;gBACD,KAAK;oBACJyC,EAAM,YAAA,GAAezC,EAAO,UAA5B;oBACA;gBACD;oBACC1F,EAAI,IAAA,CAAK,aAAa;YACvB;QACD;IACF,IAGAmO,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAvB;IACD,IACAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,MAAA,GAASA,EAAO,UAAA,IACrB,IAAA,CAAK,KAAA,GAAQA,EAAO,UADpB;IAED,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACrC,IAAA,CAAK,iBAAA,GAAoB,EAAA,EACzB,IAAA,CAAK,iBAAA,CAAkB,EAAC,GAAI,CAAA,GAC5B,IAAA,CAAK,iBAAA,CAAkB,EAAC,CAAE,CAAA,GAAIA,EAAO,UAAA,IACrC,IAAA,CAAK,iBAAA,CAAkB,EAAC,CAAE,CAAA,GAAIA,EAAO,UAAA,IACrC,IAAA,CAAK,iBAAA,CAAkB,EAAC,GAAI,CAAA,GAC5B,IAAA,CAAK,iBAAA,CAAkB,EAAC,CAAE,CAAA,GAAIA,EAAO,UAAA,IACrC,IAAA,CAAK,iBAAA,CAAkB,EAAC,CAAE,CAAA,GAAIA,EAAO,UAAA,IACrC,IAAA,CAAK,iBAAA,CAAkB,EAAC,GAAI,CAAA,GAC5B,IAAA,CAAK,iBAAA,CAAkB,EAAC,CAAE,CAAA,GAAIA,EAAO,UAAA,IACrC,IAAA,CAAK,iBAAA,CAAkB,EAAC,CAAE,CAAA,GAAIA,EAAO,UAAA,IACrC,IAAA,CAAK,WAAA,GAAc,CAAA,GACnB,IAAA,CAAK,WAAA,CAAY,CAAA,GAAIA,EAAO,UAAA,IAC5B,IAAA,CAAK,WAAA,CAAY,CAAA,GAAIA,EAAO,UAAA,IAC5B,IAAA,CAAK,+BAAA,GAAkCA,EAAO,UAAA,IAC9C,IAAA,CAAK,+BAAA,GAAkCA,EAAO,UAd9C;IAeJ,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,OAAA,IAAW,IACnB,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAAA,IAChC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAA,IACxB,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,EAAA,IAEvB,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAAA,IAChC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAA,IACxB,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,EAAA,GAExB,IAAA,CAAK,aAAA,CAAcA,IACnBA,EAAO,UAAA;IACR,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,KAAA,GAAQ,KAChB1F,CAAAA,EAAI,IAAA,CAAK,aAAa,sEACtB,IAAA,CAAK,OAAA,GAAU,CAAA,GAEZ,IAAA,CAAK,OAAA,IAAW,IACnB,IAAA,CAAK,iBAAA,GAAoB0F,EAAO,UAAA,KAEhC,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAPjC;IASD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,KAAA,GAAQ,EAAA,EACbyI,EAAU,YAAA,CAAa,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAA,EAAMzI;IACnD,IAEAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,eAAA,GAAkBA,EAAO,UAA9B;IACD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,KAAA,GAAQA,EAAO,UAApB;IACD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,OAAA,IAAW,IACnB,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAAA,IAChC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAA,IACxB,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,EAAA,IAEvB,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAAA,IAChC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAA,IACxB,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,EAAA,GAExB,IAAA,CAAK,IAAA,GAAOA,EAAO,UAAA,IACnB,IAAA,CAAK,MAAA,GAASA,EAAO,UAAA,MAAc,GACnCA,EAAO,UAAA,IACPA,EAAO,eAAA,CAAgB,IACvB,IAAA,CAAK,MAAA,GAASA,EAAO,eAAA,CAAgB,IACrCA,EAAO,eAAA,CAAgB,IACvB,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAjB5B;IAkBD,IAEAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,WAAA,GAAcA,EAAO,UAA1B;IACD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,WAAA,GAAcA,EAAO,UAA1B;IACD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIsM,IAAetM,EAAO,UAA1B;QACA,IAAA,CAAK,OAAA,GAAU,EAAf;QACA,IAAA,IAAS/I,IAAI,GAAGA,IAAI,KAAK,KAAA,CAAA,AAAOqV,CAAAA,IAAa,CAAA,IAAG,IAAIrV,IACnD,IAAA,CAAK,OAAA,GAAU+I,EAAO,SAAtB;IAEF,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,IACvB,IAAA,CAAK,QAAA,GAAWA,EAAO,UADvB;IAED,IACAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,IAAA,GAAOA,EAAO,UAAA,CAAW,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAQ;IACxD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAxB;QACA,IAAIqM,IAAQrM,EAAO,SAAnB;QACA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,CAAWqM;IACxC,IAGA5D,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIqM,IAAAA,AAAS,CAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,AAAA,IAAU;QACxC,IAAA,CAAK,IAAA,GAAO,EAAA,EACZ,IAAA,CAAK,aAAA,GAAgB,EADrB;QAEA,IAAA,IAASpV,IAAI,GAAGA,IAAIoV,GAAOpV,IAC1B,IAAA,CAAK,IAAA,CAAKA,EAAC,GAAI+I,EAAO,UAAA,IACtB,IAAA,CAAK,aAAA,CAAc/I,EAAC,GAAI+I,EAAO,UAAA;IAEjC,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,OAAA,KAAY,IACpB,IAAA,CAAK,OAAA,GAAUA,EAAO,UAAA,KAEtB,IAAA,CAAK,OAAA,GAAUA,EAAO,UAHvB;IAKD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI/I;QAGJ,IAFA,IAAA,CAAK,YAAA,GAAe+I,EAAO,SAAA,IAC3B,IAAA,CAAK,iBAAA,GAAoB,EAAA,EACpB/I,IAAI,GAAGA,IAAI,IAAA,CAAK,YAAA,EAAcA,IAClC,IAAA,CAAK,iBAAA,CAAkBA,EAAC,GAAI+I,EAAO,SAAA;IAErC,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,KAAA,GAAQA,EAAO,UAApB;IACD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAG5C,IAFA,IAAA,CAAK,UAAA,GAAaA,EAAO,UAAA,IACzB,IAAA,CAAK,UAAA,GAAa,EAAA,EACd,IAAA,CAAK,KAAA,GAAQ,GAChB,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,UAAA,EAAYA,IACpC,IAAA,CAAK,UAAA,CAAWA,EAAC,GAAI+I,EAAO,UAAA;IAG/B,IACAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,IAC3B,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IACxB,IAAA,CAAK,OAAA,KAAY,IACpB,IAAA,CAAK,UAAA,GAAaA,EAAO,UAAA,KAEzB,IAAA,CAAK,UAAA,GAAaA,EAAO,UAL1B;IAOD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAE5C,IADA,IAAA,CAAK,SAAA,GAAYyI,EAAU,UAAA,CAAWzI,IAClC,IAAA,CAAK,OAAA,GAAU,GAAG;YACrB,IAAIqM,IAAQrM,EAAO,UAAnB;YACA,IAAA,CAAK,GAAA,GAAM,EAAX;YACA,IAAA,IAAS/I,IAAI,GAAGA,IAAIoV,GAAOpV,IAC1B,IAAA,CAAK,GAAA,CAAIA,EAAC,GAAIwR,EAAU,UAAA,CAAWzI;QAEpC;QACD,IAAIuM,IAAWvM,EAAO,UAAtB;QACIuM,IAAW,KACd,CAAA,IAAA,CAAK,IAAA,GAAOvM,EAAO,cAAA,CAAeuM,EAAQ;IAE5C,IAGA9D,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,KAAA,GAAQA,EAAO,UAAA,IACpB,IAAA,CAAK,MAAA,GAASA,EAAO,UADrB;IAED,IACAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,KAAA,GAAQA,EAAO,UAAA,IACpB,IAAA,CAAK,MAAA,GAASA,EAAO,UADrB;IAED,IACAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,KAAA,GAAQA,EAAO,UAAA,IACpB,IAAA,CAAK,MAAA,GAASA,EAAO,UADrB;IAED,IACAyI,EAAU,sBAAA,CAAuB,QAAQ,MAAM;QAAE;QAAQ;QAAQ;KAAO,GACxEA,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAAA,CAAW,IAC3C,IAAA,CAAK,OAAA,GAAUA,EAAO,UAAA,CAAW,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAW;IAC9D,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,KAAA,GAAQ,KAChB,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,uBAAA,GAA0BA,EAAO,UAFvC,EAAA;QAIA,IAAIqM,IAAQrM,EAAO,UAAnB;QACA,IAAA,CAAK,MAAA,GAAS,EAAd;QACA,IAAA,IAAS/I,IAAI,GAAGA,IAAIoV,GAAOpV,IACtB,IAAA,CAAK,OAAA,KAAY,IACpB,IAAA,CAAK,MAAA,CAAOA,EAAC,GAAI+I,EAAO,UAAA,KAExB,IAAA,CAAK,MAAA,CAAO/I,EAAC,GAAI+I,EAAO,UAAA;IAG3B,IAEAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,KAAA,GAAQ,KAChB,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,uBAAA,GAA0BA,EAAO,UAAA,EAAA,GAEvC,IAAA,CAAK,wBAAA,GAA2BA,EAAO,SAJvC;QAKA,IAAIqM,IAAQrM,EAAO,UAAnB;QAEA,IADA,IAAA,CAAK,gBAAA,GAAmB,EAAA,EACpB,IAAA,CAAK,wBAAA,KAA6B,GACrC,IAAA,IAAS/I,IAAI,GAAGA,IAAIoV,GAAOpV,IAC1B,IAAA,CAAK,gBAAA,CAAiBA,EAAC,GAAI+I,EAAO,SAAA;IAGrC,IAGAyI,EAAU,qBAAA,CAAsBA,EAAU,0BAAA,EAA4B,QAAQ,SAASzI,CAAAA;QACtF,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,gBAAA,GAAmBA,EAAO,WAAA,IAC/B,IAAA,CAAK,WAAA,GAAcA,EAAO,WAAA,IAC1B,IAAA,CAAK,WAAA,CAAYA;IAClB,IAGAyI,EAAU,qBAAA,CAAsBA,EAAU,0BAAA,EAA4B,QAAQ,SAASzI,CAAAA;QACtF,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,gBAAA,GAAmBA,EAAO,WAAA,IAC/B,IAAA,CAAK,SAAA,GAAYA,EAAO,WAAA,IACxB,IAAA,CAAK,eAAA,GAAkBA,EAAO,WAAA,IAC9B,IAAA,CAAK,WAAA,CAAYA;IAClB,IAGAyI,EAAU,qBAAA,CAAsBA,EAAU,0BAAA,EAA4B,QAAQ,SAASzI,CAAAA;QACtF,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,gBAAA,GAAmBA,EAAO,WAAA,IAC/B,IAAA,CAAK,WAAA,GAAcA,EAAO,WAAA,IAC1B,IAAA,CAAK,WAAA,CAAYA;IAClB,IAGAyI,EAAU,qBAAA,CAAsBA,EAAU,0BAAA,EAA4B,QAAQ,SAASzI,CAAAA;QACtF,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,SAAA,GAAYA,EAAO,WAAA,IACxB,IAAA,CAAK,eAAA,GAAkBA,EAAO,WAAA,IAC9B,IAAA,CAAK,oBAAA,GAAuBA,EAAO,WAAA,IACnC,IAAA,CAAK,WAAA,CAAYA;IAClB,IAGAyI,EAAU,qBAAA,CAAsBA,EAAU,0BAAA,EAA4B,QAAQ,SAASzI,CAAAA;QACtF,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,gBAAA,GAAmBA,EAAO,WAAA,IAC/B,IAAA,CAAK,WAAA,GAAcA,EAAO,WAAA,IAC1B,IAAA,CAAK,WAAA,CAAYA;IAClB,IAGAyI,EAAU,qBAAA,CAAsBA,EAAU,0BAAA,EAA4B,QAAQ,SAASzI,CAAAA;QACtF,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,IAC3B,IAAA,CAAK,wBAAA,GAA2BA,EAAO,QAAA,IACvC,IAAA,CAAK,sBAAA,GAAyBA,EAAO,QAAA,IACrC,IAAA,CAAK,aAAA,GAAgBA,EAAO,cAAA,CAAe,IAC3C,IAAA,CAAK,UAAA,GAAaA,EAAO,cAAA,CAAe,IACxC,IAAA,CAAK,YAAA,GAAeA,EAAO,cAAA,CAAe,KAC1C,IAAA,CAAK,WAAA,CAAYA;IAClB,IAEAyI,EAAU,qBAAA,CAAsBA,EAAU,0BAAA,EAA4B,QAAQ,SAASzI,CAAAA;QACtF,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,WAAA,CAAYA;IAClB,IAGAyI,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD,IAAI/I,GACAuV,IAAaxM,EAAO,UADxB;QAIA,IAFA,IAAA,CAAK,mBAAA,GAAsBA,EAAO,UAAA,IAClC,IAAA,CAAK,aAAA,GAAgB,EAAA,EAChB/I,IAAI,GAAGA,IAAIuV,GAAYvV,IAC3B,IAAA,CAAK,aAAA,CAAcA,EAAC,GAAI+I,EAAO,UAAA;QAEhC,IAAIyM,IAAY,IAAA,CAAK,kBAAA,GAAqB,IAAI,IAAED;QAGhD,IAFA,IAAA,CAAK,kBAAA,GAAqB,EAAA,EAC1B,IAAA,CAAK,iBAAA,GAAoB,EAAA,EACpBvV,IAAI,GAAGA,IAAIwV,IAAU,GAAGxV,IAC5B,IAAA,CAAK,kBAAA,CAAmBA,EAAC,GAAI+I,EAAO,UAAA,IACpC,IAAA,CAAK,iBAAA,CAAkB/I,EAAC,GAAI+I,EAAO,UAAA;IAErC,IAGAyI,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD,IAAA,CAAK,WAAA,GAAcA,EAAO,SAAA,IAC1B,IAAA,CAAK,sBAAA,GAAyBA,EAAO,SAAA,IACrC,IAAA,CAAK,UAAA,GAAaA,EAAO,UAAA,IACzB,IAAA,CAAK,YAAA,GAAeA,EAAO,UAH3B;IAID,IAGAyI,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD,IAAA,CAAK,qBAAA,GAAwBA,EAAO,UAAA,IACpC,IAAA,CAAK,WAAA,GAAcA,EAAO,SAD1B;QAEA,IAAIyL,IAAWzL,EAAO,SAAtB;QACA,IAAA,CAAK,YAAA,GAAeyL,KAAY,GAChC,IAAA,CAAK,WAAA,GAAeA,KAAY,IAAK,GACjC,IAAA,CAAK,YAAA,IACR,CAAA,IAAA,CAAK,QAAA,GAAWzL,EAAO,UAAA,EAAA,GAEpB,IAAA,CAAK,WAAA,IACR,CAAA,IAAA,CAAK,sBAAA,GAAyBA,EAAO,SAAA,IACrC,IAAA,CAAK,UAAA,GAAaA,EAAO,UAAA,IACzB,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,EAAA,GAE5B,IAAA,CAAK,UAAA,GAAa,EAVlB;QAYA,IAAA,IADI0M,IAAgB1M,EAAO,SAAA,IAClB/I,IAAI,GAAGA,IAAIyV,GAAezV,IAAK;YACvC,IAAI0V,IAAiB,CAAA;YACrB,IAAA,CAAK,UAAA,CAAW,IAAA,CAAKA,IACrBA,EAAe,mBAAA,GAAsB3M,EAAO,SAAA,IAC5C2M,EAAe,WAAA,GAAc3M,EAAO,SAAA,IACpC2M,EAAe,qBAAA,GAAwB3M,EAAO,UAH9C;QAIA;IACF,IAGAyI,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD1F,EAAI,IAAA,CAAK,aAAa,wBAAsB,IAAA,CAAK,aAAA,GAAc;IAChE,IAGAmO,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD1F,EAAI,IAAA,CAAK,aAAa,wBAAsB,IAAA,CAAK,aAAA,GAAc;IAChE,IAGAmO,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD,IAAA,CAAK,aAAA,GAAgBA,EAAO,SAA5B;IACD,IAGAyI,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD,IAAIyL,IAAWzL,EAAO,SAAtB;QACA,IAAA,CAAK,yBAAA,GAA4ByL,KAAY,GAC7C,IAAA,CAAK,mBAAA,GAAsBA,IAAW;IACvC,IAGAhD,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAEhD,IADA,IAAA,CAAK,qBAAA,GAAwBA,EAAO,UAAA,IAChC,IAAA,CAAK,kBAAA,KAAuB,IAAG,CAAA,IAAA,CAAK,qBAAA,KAA0B,IAAE,IAAE,IAAA,CAAK,qBAAA,GAAsB,CAAA,IAAG,GACnG1F,EAAI,IAAA,CAAK,aAAa,iBAAe,IAAA,CAAK,aAAA,GAAc,yBACxD,IAAA,CAAK,IAAA,GAAQ0F,EAAO,cAAA,CAAe,IAAA,CAAK,kBAAA,GAAmB;aACrD;YACN,IAAI,IAAA,CAAK,qBAAA,KAA0B,GAClC,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAAhC;iBACM;gBACN,IAAA,CAAK,iBAAA,GAAoB,EAAA,EACzB,IAAA,CAAK,iBAAA,GAAoB,EADzB;gBAEA,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,qBAAA,EAAuBA,IAC/C,IAAA,CAAK,iBAAA,CAAkBA,EAAC,GAAI+I,EAAO,UAAA,IACnC,IAAA,CAAK,iBAAA,CAAkB/I,EAAC,GAAI+I,EAAO,UAAA;YAEpC;YACD,IAAA,CAAK,eAAA,GAAkBA,EAAO,UAAA,IAC9B,IAAA,CAAK,eAAA,GAAkBA,EAAO,UAAA,IAC9B,IAAA,CAAK,gBAAA,GAAmBA,EAAO,SAF/B;QAGA;IACF,IAGAyI,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD,IAAA,CAAK,aAAA,GAAgBA,EAAO,SAA5B;IACD,IAGAyI,EAAU,gBAAA,CAAiB,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACrD1F,EAAI,IAAA,CAAK,aAAa,gCAA8B,IAAA,CAAK,aAAa,GACtE,IAAA,CAAK,IAAA,GAAQ0F,EAAO,cAAA,CAAe,IAAA,CAAK,kBAAkB;IAC1D,GAGDyI,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD1F,EAAI,IAAA,CAAK,aAAa,wBAAsB,IAAA,CAAK,aAAA,GAAc;IAChE,IAGAmO,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD1F,EAAI,IAAA,CAAK,aAAa,wBAAsB,IAAA,CAAK,aAAA,GAAc;IAChE,IAGAmO,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD,IAAA,CAAK,QAAA,GAAWA,EAAO,SAAvB;QACA,IAAImF,IAAMnF,EAAO,SAAjB;QACA,IAAA,CAAK,gBAAA,GAAmBmF,KAAO,GAC/B,IAAA,CAAK,eAAA,GAAkBA,IAAM,IAC7B,IAAA,CAAK,WAAA,GAAcnF,EAAO,SAAA,IAC1B,IAAA,CAAK,kBAAA,GAAqBA,EAAO,SAAA,IACjC,IAAA,CAAK,GAAA,GAAMyI,EAAU,UAAA,CAAWzI,IAChC,IAAA,CAAK,gBAAA,GAAmB,GACxB,IAAA,CAAK,WAAA,GAAc,GACf,IAAA,CAAK,WAAA,KAAgB,KAAK,IAAA,CAAK,kBAAA,KAAuB,KACzD,CAAA,IAAA,CAAK,gBAAA,GAAmBA,EAAO,SAAA,IAC/B,IAAA,CAAK,WAAA,GAAcA,EAAO,cAAA,CAAe,IAAA,CAAK,gBAAgB,CAAA;IAEhE,IAGAyI,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD1F,EAAI,IAAA,CAAK,aAAa,wBAAsB,IAAA,CAAK,aAAA,GAAc;IAChE,IAGAmO,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD,IAAIyL,IAAWzL,EAAO,SAAtB;QACA,IAAA,CAAK,aAAA,GAAgByL,IAAW;IACjC,IAGAhD,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD,IAAIyL,IAAWzL,EAAO,SAAtB;QACA,IAAA,CAAK,6BAAA,GAAgCyL,KAAY;IAClD,IAGAhD,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD1F,EAAI,IAAA,CAAK,aAAa,wBAAsB,IAAA,CAAK,aAAA,GAAc;IAChE,IAGAmO,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD1F,EAAI,IAAA,CAAK,aAAa,wBAAsB,IAAA,CAAK,aAAA,GAAc;IAChE,IAGAmO,EAAU,qBAAA,CAAsB,QAAQ,SAASzI,CAAAA;QAChD1F,EAAI,IAAA,CAAK,aAAa,wBAAsB,IAAA,CAAK,aAAA,GAAc;IAChE,IAGAmO,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,CAAW,IACnC,IAAA,CAAK,OAAA,KAAY,IACpB,IAAA,CAAK,uBAAA,GAA0BA,EAAO,UAAA,KAEtC,IAAA,CAAK,uBAAA,GAA0B,GAEhC,IAAA,CAAK,OAAA,GAAU,EANf;QAQA,IAAA,IADIyK,IAAczK,EAAO,UAAA,IAChB/I,IAAI,GAAGA,IAAIwT,GAAaxT,IAAK;YACrC,IAAImU,IAAQ,CAAA;YACZ,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAKA,IAClBA,EAAM,YAAA,GAAepL,EAAO,SAAA,IAC5BoL,EAAM,uBAAA,GAA0BpL,EAAO,SAFvC;QAGA;IACF,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,WAAA,GAAcA,EAAO,UAAA,CAAW,IACrC,IAAA,CAAK,cAAA,GAAiBA,EAAO,UAAA,IACzB,IAAA,CAAK,KAAA,GAAQ,KAChB,CAAA,IAAA,CAAK,UAAA,GAAaA,EAAO,UAAA,CAAW,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAW,EAAC;IAEnE,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,OAAA,GAAUA,EAAO,UAAA,CAAW,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAQ;IAC3D,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIyL,GACAY,IAAS,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAD9B;QAEA,IAAA,CAAK,UAAA,GAAa,EAAA,EAClB,IAAA,CAAK,iBAAA,GAAoB,EAAA,EACzB,IAAA,CAAK,qBAAA,GAAwB,EAAA,EAC7B,IAAA,CAAK,qBAAA,GAAwB,EAH7B;QAIA,IAAA,IAASpV,IAAI,GAAGA,IAAIoV,GAAOpV,IAC1BwU,IAAWzL,EAAO,SAAA,IAClB,IAAA,CAAK,UAAA,CAAW/I,EAAC,GAAIwU,KAAY,GACjC,IAAA,CAAK,iBAAA,CAAkBxU,EAAC,GAAKwU,KAAY,IAAK,GAC9C,IAAA,CAAK,qBAAA,CAAsBxU,EAAC,GAAKwU,KAAY,IAAK,GAClD,IAAA,CAAK,qBAAA,CAAsBxU,EAAC,GAAIwU,IAAW;IAE7C,IAIAhD,EAAU,iBANmC,CAMjB,SAuB5BA,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,CAAW,IACvC1F,EAAI,KAAA,CAAM,aAAa,iCAA+B,IAAA,CAAK,aAAa,GACpE,IAAA,CAAK,OAAA,KAAY,IACpB,IAAA,CAAK,cAAA,GAAiB0F,EAAO,UAAA,KAE7B,IAAA,CAAK,cAAA,GAAiB,GAEnB,IAAA,CAAK,OAAA,IAAW,KACnB,CAAA,IAAA,CAAK,+BAAA,GAAkCA,EAAO,UAAA,EAAA,GAE/C,IAAA,CAAK,OAAA,GAAU,EAVf;QAYA,IAAA,IADIyK,IAAczK,EAAO,UAAA,IAChB/I,IAAI,GAAGA,IAAIwT,GAAaxT,IAAK;YACrC,IAAImU;YACA3C,CAAAA,CAAU,IAAA,CAAK,aAAA,GAAc,mBAAkB,GAClD2C,IAAQ,IAAI3C,CAAAA,CAAU,IAAA,CAAK,aAAA,GAAc,mBAAkB,CAAE,IAAA,CAAK,aAAa,IAE/E2C,IAAQ,IAAI3C,EAAU,gBAAA,CAAiB,IAAA,CAAK,aAAa,GAE1D,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK2C,IACd,IAAA,CAAK,OAAA,KAAY,IAChB,IAAA,CAAK,cAAA,KAAmB,IAC3BA,EAAM,kBAAA,GAAqBpL,EAAO,UAAA,KAElCoL,EAAM,kBAAA,GAAqB,IAAA,CAAK,cAAA,GAGjCA,EAAM,kBAAA,GAAqB,IAAA,CAAK,cAAA,EAE7BA,EAAM,KAAA,KAAU3C,EAAU,gBAAA,CAAiB,SAAA,CAAU,KAAA,IACxDnO,CAAAA,EAAI,IAAA,CAAK,aAAa,0BAAwB,IAAA,CAAK,aAAA,GAAc,kFAEjE8Q,EAAM,IAAA,GAAOpL,EAAO,cAAA,CAAeoL,EAAM,kBAAkB,GAE3DpL,EAAO,QAAA,IAAYoL,EAAM,kBAAA,AAAA,GAE1BA,EAAM,KAAA,CAAMpL;QACZ;IACF,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,IAC3B,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAA,IACpB,IAAA,CAAK,OAAA,KAAY,IACpB,CAAA,IAAA,CAAK,0BAAA,GAA6BA,EAAO,UAAA,IACzC,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,EAAA,IAE3B,CAAA,IAAA,CAAK,0BAAA,GAA6BA,EAAO,UAAA,IACzC,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,EAAA,GAE5BA,EAAO,UAAA,IACP,IAAA,CAAK,UAAA,GAAa,EAVlB;QAYA,IAAA,IADIqM,IAAQrM,EAAO,UAAA,IACV/I,IAAI,GAAGA,IAAIoV,GAAOpV,IAAK;YAC/B,IAAImF,IAAM,CAAA;YACV,IAAA,CAAK,UAAA,CAAW,IAAA,CAAKA;YACrB,IAAIwQ,IAAS5M,EAAO,UAApB;YACA5D,EAAI,cAAA,GAAkBwQ,KAAU,KAAM,GACtCxQ,EAAI,eAAA,GAAkBwQ,IAAS,YAC/BxQ,EAAI,mBAAA,GAAsB4D,EAAO,UAAA,IACjC4M,IAAS5M,EAAO,UAAA,IAChB5D,EAAI,eAAA,GAAmBwQ,KAAU,KAAM,GACvCxQ,EAAI,QAAA,GAAYwQ,KAAU,KAAM,GAChCxQ,EAAI,cAAA,GAAiBwQ,IAAS;QAC9B;IACF,IAGAnE,EAAU,0BAAA,GAA6B,SAASxI,CAAAA,EAAM6D,CAAAA,EAAMgF,CAAAA,EAAUrH,CAAAA;QACrEgH,EAAU,GAAA,CAAI,IAAA,CAAK,IAAA,EAAMxI,GAAM6D,IAC/B,IAAA,CAAK,QAAA,GAAWgF,GAChB,IAAA,CAAK,KAAA,GAAQrH;IACb,GACDgH,EAAU,0BAAA,CAA2B,SAAA,GAAY,IAAIA,EAAU,GAAA,IAC/DA,EAAU,0BAAA,CAA2B,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC/D,IAAA,CAAK,YAAA,GAAeA,EAAO,UAA3B;QACA,IAAIqM,IAASrM,EAAO,UAApB;QACA,IAAA,CAAK,UAAA,GAAa,EAAlB;QACA,IAAA,IAAQ/I,IAAI,GAAGA,IAAIoV,GAAOpV,IACzB,IAAA,CAAK,UAAA,CAAWA,EAAC,GAAI,CAAA,GACrB,IAAA,CAAK,UAAA,CAAWA,EAAC,CAAE,UAAA,GAAa+I,EAAO,UADvC;IAGD,GAGDyI,EAAU,+BAAA,GAAkC,SAASxI,CAAAA,EAAM6D,CAAAA,EAAMgF,CAAAA,EAAUrH,CAAAA;QAC1EgH,EAAU,GAAA,CAAI,IAAA,CAAK,IAAA,EAAMxI,GAAM6D,IAC/B,IAAA,CAAK,QAAA,GAAWgF,GAChB,IAAA,CAAK,KAAA,GAAQrH;IACb,GACDgH,EAAU,+BAAA,CAAgC,SAAA,GAAY,IAAIA,EAAU,GAAA,IACpEA,EAAU,+BAAA,CAAgC,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACpE,IAAA,CAAK,YAAA,GAAeA,EAAO,UAA3B;QACA,IAAIqM,IAASrM,EAAO,UAApB;QACA,IAAA,CAAK,UAAA,GAAa,EAAlB;QACA,IAAA,IAAQ/I,IAAI,GAAGA,IAAIoV,GAAOpV,IACzB,IAAA,CAAK,UAAA,CAAWA,EAAC,GAAI,CAAA,GACrB,IAAA,CAAK,UAAA,CAAWA,EAAC,CAAE,UAAA,GAAa+I,EAAO,UADvC;IAGD,GAGDyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,sBAAA,GAAyBA,EAAO,UAAA,IAClC,IAAA,CAAK,sBAAA,GAAyBA,EAAO,UAAA,IACrC,IAAA,CAAK,sBAAA,GAAyBA,EAAO,UAAA,IACrC,IAAA,CAAK,sBAAA,GAAyBA,EAAO,UAAA,IACrC,IAAA,CAAK,sBAAA,GAAyBA,EAAO,UAAA,IACrC,IAAA,CAAK,sBAAA,GAAyBA,EAAO,UAAA,IACrC,IAAA,CAAK,wBAAA,GAA2BA,EAAO,UAAA,IACvC,IAAA,CAAK,wBAAA,GAA2BA,EAAO,UAAA,IACvC,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,IAC3B,IAAA,CAAK,YAAA,GAAeA,EAAO,UAT9B;IAUD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAUA,EAAO,UAAA,IACtBA,EAAO,UAAA;IACR,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,WAAA,GAAc,EAAnB;QAEA,IAAA,IADI6M,IAAmB7M,EAAO,UAAA,IACrB/I,IAAI,GAAGA,IAAI4V,GAAkB5V,IAAK;YAC1C,IAAI6V,IAAa,CAAA;YACjB,IAAA,CAAK,WAAA,CAAY,IAAA,CAAKA,IACtBA,EAAW,MAAA,GAAS,EADpB;YAGA,IAAA,IADIC,IAAc/M,EAAO,UAAA,IAChBrI,IAAI,GAAGA,IAAIoV,GAAapV,IAAK;gBACrC,IAAI+O,IAAQ,CAAA;gBACZoG,EAAW,MAAA,CAAO,IAAA,CAAKpG,IACvBA,EAAM,KAAA,GAAQ1G,EAAO,SAAA,IACrB0G,EAAM,UAAA,GAAa1G,EAAO,UAF1B;YAGA;QACD;IACF,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIyK;QAGJ,IAFAA,IAAczK,EAAO,UAAA,IACrB,IAAA,CAAK,aAAA,GAAgB,EAAA,EACjB,IAAA,CAAK,OAAA,KAAY,GACpB,IAAA,IAAS/I,IAAI,GAAGA,IAAIwT,GAAaxT,IAChC,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK+I,EAAO,UAAA;IAGlC,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIqM,IAAAA,AAAS,CAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,AAAA,IAAU;QACxC,IAAA,CAAK,QAAA,GAAW,EAAhB;QACA,IAAA,IAASpV,IAAI,GAAGA,IAAIoV,GAAOpV,IAC1B,IAAA,CAAK,QAAA,CAASA,EAAC,GAAI+I,EAAO,UAAA;IAE5B,IAGAyI,EAAU,iBAAA,CAAkB,SAG5BA,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,IAC3B,IAAA,CAAK,eAAA,GAAkBA,EAAO,UAAA,IAC9B,IAAA,CAAK,YAAA,GAAeA,EAAO,UAF3B;QAGA,IAAIqM,IAAAA,AAAS,CAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAW,CAAA,IAAG;QAC5C,IAAA,CAAK,cAAA,GAAiB,EAAtB;QACA,IAAA,IAASpV,IAAI,GAAGA,IAAIoV,GAAOpV,IAC1B,IAAA,CAAK,cAAA,CAAeA,EAAC,GAAI+I,EAAO,UAAA;IAElC,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIyK,GACAxT;QAKJ,IAJAwT,IAAczK,EAAO,UAAA,IACrB,IAAA,CAAK,WAAA,GAAc,EAAA,EACnB,IAAA,CAAK,iBAAA,GAAoB,EAAA,EACzB,IAAA,CAAK,wBAAA,GAA2B,EAAA,EAC5B,IAAA,CAAK,OAAA,KAAY,GACpB,IAAI/I,IAAE,GAAGA,IAAEwT,GAAaxT,IACvB,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK+I,EAAO,UAAA,KAC7B,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAKA,EAAO,UAAA,KACnC,IAAA,CAAK,wBAAA,CAAyB,IAAA,CAAKA,EAAO,UAAA;IAG7C,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI/I,GACA8S,GACAiD,GACA1D;QAGJ,IAFA,IAAA,CAAK,OAAA,GAAU,EAAA,EACf0D,IAAahN,EAAO,UAAA,IACf/I,IAAI,GAAGA,KAAK+V,GAAY/V,IAE5B,IADA8S,IAAMtB,EAAU,WAAA,CAAYzI,GAAQ,CAAA,GAAM,IAAA,CAAK,IAAA,GAAQA,CAAAA,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,AAAA,IAC/E+J,EAAI,IAAA,KAAStB,EAAU,EAA3B,EACKA,CAAAA,CAAUsB,EAAI,IAAA,GAAK,cAAa,GACnCT,CAAAA,IAAM,IAAIb,CAAAA,CAAUsB,EAAI,IAAA,GAAK,cAAa,CAAEA,EAAI,IAAI,GACpDT,EAAI,QAAA,GAAWS,EAAI,QAAA,EACnBT,EAAI,KAAA,GAAQS,EAAI,KAAA,AAAA,IAEhBzP,CAAAA,EAAI,IAAA,CAAK,aAAa,gCAA8ByP,EAAI,IAAI,GAC5DT,IAAM,IAAIb,EAAU,WAAA,CAAYsB,EAAI,IAAA,EAAMA,EAAI,IAAA,EAAMA,EAAI,QAAA,EAAUA,EAAI,KAAK,CAAA,GAExET,EAAI,KAAA,KAAUb,EAAU,WAAA,CAAY,SAAA,CAAU,KAAA,IACjDnO,CAAAA,EAAI,IAAA,CAAK,aAAa,iBAAegP,EAAI,IAAA,GAAK,sFAC9CA,EAAI,kBAAA,CAAmBtJ,EAAM,GAE9BsJ,EAAI,KAAA,CAAMtJ,IACV,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAKsJ;aAElB;IAGH,IAGAb,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAA5B;QACA,IAAIqM,IAAQrM,EAAO,UAAnB;QACA,IAAA,CAAK,uBAAA,GAA0B,EAA/B;QACA,IAAA,IAAS/I,IAAI,GAAGA,IAAIoV,GAAOpV,IAC1B,IAAA,CAAK,uBAAA,CAAwBA,EAAC,GAAI+I,EAAO,UAAA;IAE3C,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIyK,GACAxT;QAIJ,IAHAwT,IAAczK,EAAO,UAAA,IACrB,IAAA,CAAK,uBAAA,GAA0B,EAAA,EAC/B,IAAA,CAAK,mBAAA,GAAsB,EAAA,EACvB,IAAA,CAAK,OAAA,KAAY,GACpB,IAAI/I,IAAE,GAAGA,IAAEwT,GAAaxT,IACvB,IAAA,CAAK,uBAAA,CAAwB,IAAA,CAAK+I,EAAO,UAAA,KACzC,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAKA,EAAO,UAAA;IAGxC,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI/I,GACAwT;QAEJ,IADAA,IAAczK,EAAO,UAAA,IACjB,IAAA,CAAK,OAAA,KAAY,GAEpB,IADA,IAAA,CAAK,cAAA,GAAiB,EAAA,EAClB/I,IAAE,GAAGA,IAAEwT,GAAaxT,IACvB,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK+I,EAAO,UAAA;IAGnC,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI/I;QAEJ,IADA,IAAA,CAAK,YAAA,GAAe,EAAA,EAChB,IAAA,CAAK,OAAA,KAAY,GAGpB,IAFA,IAAA,CAAK,WAAA,GAAc+I,EAAO,UAAA,IAC1B,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,IACtB/I,IAAI,GAAGA,IAAI,IAAA,CAAK,YAAA,EAAcA,IAC9B,IAAA,CAAK,WAAA,KAAgB,IACxB,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK+I,EAAO,UAAA,MAE9B,IAAA,CAAK,YAAA,CAAa/I,EAAC,GAAI,IAAA,CAAK,WAH7B;IAOH,IAGAwR,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIyK,GACAxT,GACAgW;QAIJ,IAHAxC,IAAczK,EAAO,UAAA,IACrB,IAAA,CAAK,aAAA,GAAgB,EAAA,EACrB,IAAA,CAAK,aAAA,GAAgB,EAAA,EACjB,IAAA,CAAK,OAAA,KAAY,GACpB,IAAI/I,IAAE,GAAGA,IAAEwT,GAAaxT,IACvB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK+I,EAAO,UAAA,KAC/BiN,IAAQjN,EAAO,SAAA,IACXiN,IAAQ,KACX3S,CAAAA,EAAI,IAAA,CAAK,aAAa,mFACtB2S,IAAQ,CAAA,GAET,IAAA,CAAK,aAAA,CAAc,IAAA,CAAKA;IAG3B,IAGAxE,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIkN,IAAQlN,EAAO,UAAnB;QACA,IAAA,CAAK,mBAAA,GAAsBkN,IAAQ,GACnC,IAAA,CAAK,aAAA,GAAgBlN,EAAO,UAD5B;QAEA,IAAIiD,IAASjD,EAAO,UAApB;QACA,IAAA,CAAK,sBAAA,GAAyBA,EAAO,UAAA,CAAWiD;QAChD,IAAI8G,GACAT;QAEJ,IADA,IAAA,CAAK,KAAA,GAAQ,EAAA,EACNtJ,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,GAAM,IAAA,CAAK,IAA9C,EAEC,IADA+J,IAAMtB,EAAU,WAAA,CAAYzI,GAAQ,CAAA,GAAO,IAAA,CAAK,IAAA,GAAQA,CAAAA,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,AAAA,IAChF+J,EAAI,IAAA,KAAStB,EAAU,EAA3B,EACCa,IAAMS,EAAI,GAAA,EACV,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKT,IAChB,IAAA,CAAKA,EAAI,IAAI,CAAA,GAAIA;aAEjB;IAGH,IAGAb,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxCyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAA,EAAMzI;IAC9C,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI/I,GAEAqV;QAEJ,IADA,IAAA,CAAK,YAAA,GAAe,EAAA,EAChB,IAAA,CAAK,OAAA,KAAY;YAIpB,IAHA,IAAA,CAAK,QAAA,GAAWtM,EAAO,UAAA,IACvB,IAAA,CAAK,UAAA,GAAaA,EAAO,SAAA,IACzBsM,IAAetM,EAAO,UAAA,IAClB,IAAA,CAAK,UAAA,KAAe,GACvB,IAAK/I,IAAI,GAAGA,IAAIqV,GAAcrV,KAAG,EAAG;gBACnC,IAAIkO,IAAMnF,EAAO,SAAjB;gBACA,IAAA,CAAK,YAAA,CAAa/I,EAAC,GAAKkO,KAAO,IAAK,IACpC,IAAA,CAAK,YAAA,CAAalO,IAAE,EAAC,GAAIkO,IAAM;YAC/B;iBAAA,IACS,IAAA,CAAK,UAAA,KAAe,GAC9B,IAAKlO,IAAI,GAAGA,IAAIqV,GAAcrV,IAC7B,IAAA,CAAK,YAAA,CAAaA,EAAC,GAAI+I,EAAO,SAAA;iBAAS,IAE9B,IAAA,CAAK,UAAA,KAAe,IAC9B,IAAK/I,IAAI,GAAGA,IAAIqV,GAAcrV,IAC7B,IAAA,CAAK,YAAA,CAAaA,EAAC,GAAI+I,EAAO,UAAA;iBAG/B1F,EAAI,KAAA,CAAM,aAAa;;IAG1B,IAGAmO,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAI/I,GAAEU,GACF8S,GACA0C;QAGJ,IAFA1C,IAAczK,EAAO,UAAA,IACrB,IAAA,CAAK,OAAA,GAAU,EAAA,EACV/I,IAAI,GAAGA,IAAIwT,GAAaxT,IAAK;YACjC,IAAImW,IAAa,CAAA;YAKjB,IAJA,IAAA,CAAK,OAAA,CAAQnW,EAAC,GAAImW,GAClBA,EAAW,YAAA,GAAepN,EAAO,UAAA,IACjCoN,EAAW,UAAA,GAAa,EAAA,EACxBD,IAAkBnN,EAAO,UAAA,IACrBmN,IAAgB,GACnB,IAAKxV,IAAI,GAAGA,IAAIwV,GAAiBxV,IAAK;gBACrC,IAAI0V,IAAY,CAAA;gBAChBD,EAAW,UAAA,CAAW,IAAA,CAAKC,IACvB,IAAA,CAAK,OAAA,IAAW,IACnBA,EAAU,IAAA,GAAOrN,EAAO,UAAA,KAExBqN,EAAU,IAAA,GAAOrN,EAAO,UAAA,IAEzBqN,EAAU,QAAA,GAAWrN,EAAO,SAAA,IAC5BqN,EAAU,WAAA,GAAcrN,EAAO,SAAA,IAC/BqN,EAAU,yBAAA,GAA4BrN,EAAO,UAR7C;YASA;QAEF;IACF,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAE5C,IADAA,EAAO,SAAA,IACH,IAAA,CAAK,OAAA,KAAY,GACpBA,EAAO,SAAA;aACD;YACN,IAAImF,IAAMnF,EAAO,SAAjB;YACA,IAAA,CAAK,wBAAA,GAA4BmF,KAAO,IAAK,IAC7C,IAAA,CAAK,uBAAA,GAA0BA,IAAM;QACrC;QACD,IAAA,CAAK,mBAAA,GAAsBnF,EAAO,SAAA,IAClC,IAAA,CAAK,0BAAA,GAA6BA,EAAO,SAAA,IACzC,IAAA,CAAK,WAAA,GAAcyI,EAAU,UAAA,CAAWzI,IACpC,IAAA,CAAK,mBAAA,KAAwB,KAAK,IAAA,CAAK,0BAAA,KAA+B,KACzE,CAAA,IAAA,CAAK,wBAAA,GAA2BA,EAAO,SAAA,IACvC,IAAA,CAAK,mBAAA,GAAsBA,EAAO,cAAA,CAAe,IAAA,CAAK,wBAAwB,CAAA;IAEhF,IACAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,OAAA,IAAW,IACnB,IAAA,CAAK,mBAAA,GAAsBA,EAAO,UAAA,KAElC,IAAA,CAAK,mBAAA,GAAsBA,EAAO,UAHnC;IAKD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIsN,IAAY;QAChB,IAAA,CAAK,QAAA,GAAWtN,EAAO,UAAA,IACnB,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAWsN,KAAc,IAAA,CAAK,KAAA,GAAQ7E,EAAU,0BAAA,GACpE,CAAA,IAAA,CAAK,gBAAA,GAAmBzI,EAAO,UAAA,IAC/BsN,KAAa,CAAA,IAEb,IAAA,CAAK,gBAAA,GAAmB,GAErB,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAWA,KAAc,IAAA,CAAK,KAAA,GAAQ7E,EAAU,qBAAA,GACpE,CAAA,IAAA,CAAK,gCAAA,GAAmCzI,EAAO,UAAA,IAC/CsN,KAAa,CAAA,IAEb,IAAA,CAAK,gCAAA,GAAmC,GAErC,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAWA,KAAc,IAAA,CAAK,KAAA,GAAQ7E,EAAU,oBAAA,GACpE,CAAA,IAAA,CAAK,uBAAA,GAA0BzI,EAAO,UAAA,IACtCsN,KAAa,CAAA,IAEb,IAAA,CAAK,uBAAA,GAA0B,GAE5B,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAWA,KAAc,IAAA,CAAK,KAAA,GAAQ7E,EAAU,qBAAA,GACpE,CAAA,IAAA,CAAK,mBAAA,GAAsBzI,EAAO,UAAA,IAClCsN,KAAa,CAAA,IAEb,IAAA,CAAK,mBAAA,GAAsB,GAExB,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAWA,KAAc,IAAA,CAAK,KAAA,GAAQ7E,EAAU,sBAAA,GACpE,CAAA,IAAA,CAAK,oBAAA,GAAuBzI,EAAO,UAAA,IACnCsN,KAAa,CAAA,IAEb,IAAA,CAAK,oBAAA,GAAuB;IAE9B,IAGA7E,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,IACvBA,EAAO,UAAA;QACP,IAAIyL,IAAWzL,EAAO,SAAtB;QACA,IAAA,CAAK,uBAAA,GAA2ByL,KAAY,IAAK,GACjD,IAAA,CAAK,uBAAA,GAA2BA,KAAY,IAAK,GACjD,IAAA,CAAK,yBAAA,GAA6BA,IAAY,GAC9C,IAAA,CAAK,OAAA,GAAU,EAHf;QAKA,IAAA,IADI8B,IAAoBvN,EAAO,UAAA,IACtB/I,IAAI,GAAGA,IAAIsW,GAAmBtW,IAClC,IAAA,CAAK,OAAA,KAAY,IACpB,CAAA,IAAA,CAAK,IAAA,GAAO+I,EAAO,UAAA,IACnB,IAAA,CAAK,WAAA,GAAcA,EAAO,UAAA,EAAA,IAE1B,CAAA,IAAA,CAAK,IAAA,GAAOA,EAAO,UAAA,IACnB,IAAA,CAAK,WAAA,GAAcA,EAAO,UAAA,EAAA,GAE3B,IAAA,CAAK,WAAA,GAAcA,CAAAA,CAAO,aAAY,IAAG,CAAA,IAAA,CAAK,uBAAA,GAAwB,CAAA,EAAG,IACzE,IAAA,CAAK,WAAA,GAAcA,CAAAA,CAAO,aAAY,IAAG,CAAA,IAAA,CAAK,uBAAA,GAAwB,CAAA,EAAG,IACzE,IAAA,CAAK,aAAA,GAAgBA,CAAAA,CAAO,aAAY,IAAG,CAAA,IAAA,CAAK,yBAAA,GAA0B,CAAA,EAT1E;IAWF,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,OAAA,IAAW,IACnB,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAAA,IAChC,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,IACvBA,EAAO,UAAA,IACP,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,EAAA,IAEvB,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAAA,IAChC,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,IACvBA,EAAO,UAAA,IACP,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,EAAA,GAExBA,EAAO,eAAA,CAAgB,IACvB,IAAA,CAAK,KAAA,GAAQA,EAAO,SAAA,IACpB,IAAA,CAAK,eAAA,GAAkBA,EAAO,SAAA,IAC9B,IAAA,CAAK,MAAA,GAASA,EAAO,SAAA,MAAa,GAClCA,EAAO,UAAA,IACP,IAAA,CAAK,MAAA,GAASA,EAAO,cAAA,CAAe,IACpC,IAAA,CAAK,KAAA,GAAQA,EAAO,UAAA,IACpB,IAAA,CAAK,MAAA,GAASA,EAAO,UApBrB;IAqBD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,IAAA,GAAOA,EAAO,UAAnB;IACD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,IAAA,GAAOA,EAAO,UAAnB;IACD,IAGAyI,EAAU,aAAA,CAAc,QAAO,SAASzI,CAAAA;QACvC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAxB;IACD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAxB;IACD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAxB;IACD,IAGAyI,EAAU,iBAAA,CAAkB,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACtD,IAAA,CAAK,eAAA,CAAgBA,IACrB,IAAA,CAAK,cAAA,GAAiBA,EAAO,UAD7B;IAEA,GAGDyI,EAAU,oBAAA,CAAqB,SAC/BA,EAAU,qBAAA,GAAwB,SAASxI,CAAAA,EAAM6D,CAAAA,EAAMgF,CAAAA,EAAUrH,CAAAA;QAChEgH,EAAU,GAAA,CAAI,IAAA,CAAK,IAAA,EAAMxI,GAAM6D,IAC/B,IAAA,CAAK,QAAA,GAAWgF,GAChB,IAAA,CAAK,KAAA,GAAQrH;IACb,GACDgH,EAAU,qBAAA,CAAsB,SAAA,GAAY,IAAIA,EAAU,GAAA,IAC1DA,EAAU,qBAAA,CAAsB,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC1D,IAAA,CAAK,SAAA,GAAYA,EAAO,eAAA,CAAA,AAAiB,CAAA,IAAA,CAAK,IAAA,GAAK,IAAA,CAAK,QAAA,AAAA,IAAU;IAClE,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAG5C,IAAA,IAFI+J,GACAT,GACGtJ,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,GAAM,IAAA,CAAK,IAA9C,EAEC,IADA+J,IAAMtB,EAAU,WAAA,CAAYzI,GAAQ,CAAA,GAAM,IAAA,CAAK,IAAA,GAAQA,CAAAA,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,AAAA,IAC/E+J,EAAI,IAAA,KAAStB,EAAU,EAA3B,EACCa,IAAM,IAAIb,EAAU,qBAAA,CAAsBsB,EAAI,IAAA,EAAMA,EAAI,IAAA,EAAMA,EAAI,QAAA,EAAUA,EAAI,KAAK,GACjFT,EAAI,KAAA,KAAUb,EAAU,GAAA,CAAI,SAAA,CAAU,KAAA,IAASa,EAAI,IAAA,KAAS,UAC/DhP,CAAAA,EAAI,IAAA,CAAK,aAAa,oBAAkBgP,EAAI,IAAA,GAAK,sFACjDA,EAAI,kBAAA,CAAmBtJ,EAAM,GAE9BsJ,EAAI,KAAA,CAAMtJ,IACV,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKsJ;aAEhB;IAGF,GAGDb,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAG5C,IAFA,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,IACvB,IAAA,CAAK,KAAA,GAAQ,EAAA,EACNA,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,GAAM,IAAA,CAAK,IAA9C,EAEC,IADA,MAAMyI,EAAU,WAAA,CAAYzI,GAAQ,CAAA,GAAO,IAAA,CAAK,IAAA,GAAQA,CAAAA,EAAO,WAAA,KAAgB,IAAA,CAAK,KAAA,AAAA,IAChF,IAAI,IAAA,KAASyI,EAAU,EAA3B,EACC,MAAM,IAAI,GAAA,EACV,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK;aAEhB;IAGH,IAGAA,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,IACvB,IAAA,CAAK,gCAAA,GAAmCA,EAAO,UAAA,IAC/C,IAAA,CAAK,uBAAA,GAA0BA,EAAO,UAAA,IACtC,IAAA,CAAK,mBAAA,GAAsBA,EAAO,UAAA,IAClC,IAAA,CAAK,oBAAA,GAAuBA,EAAO,UAJnC;IAKD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,SAAA,GAAYA,EAAO,UAAxB;IACD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAIsN,IAAY;QAmBhB,IAlBA,IAAA,CAAK,YAAA,GAAetN,EAAO,UAAA,IAC3BsN,KAAY,GACR,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAWA,KAAc,IAAA,CAAK,KAAA,GAAQ7E,EAAU,sBAAA,GACpE,CAAA,IAAA,CAAK,WAAA,GAAczI,EAAO,SAAA,IAC1BsN,KAAa,CAAA,IAEb,IAAA,CAAK,WAAA,GAAc,GAEhB,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAWA,KAAc,IAAA,CAAK,KAAA,GAAQ7E,EAAU,qBAAA,GACpE,CAAA,IAAA,CAAK,kBAAA,GAAqBzI,EAAO,UAAA,IACjCsN,KAAa,CAAA,IAEb,IAAA,CAAK,kBAAA,GAAqB,GAE3B,IAAA,CAAK,eAAA,GAAkB,EAAA,EACvB,IAAA,CAAK,WAAA,GAAc,EAAA,EACnB,IAAA,CAAK,YAAA,GAAe,EAAA,EACpB,IAAA,CAAK,8BAAA,GAAiC,EAAA,EAClC,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAWA,GAC/B,IAAA,IAASrW,IAAI,GAAGA,IAAI,IAAA,CAAK,YAAA,EAAcA,IAClC,IAAA,CAAK,KAAA,GAAQwR,EAAU,mBAAA,IAC1B,CAAA,IAAA,CAAK,eAAA,CAAgBxR,EAAC,GAAI+I,EAAO,UAAA,EAAU,GAExC,IAAA,CAAK,KAAA,GAAQyI,EAAU,eAAA,IAC1B,CAAA,IAAA,CAAK,WAAA,CAAYxR,EAAC,GAAI+I,EAAO,UAAA,EAAU,GAEpC,IAAA,CAAK,KAAA,GAAQyI,EAAU,gBAAA,IAC1B,CAAA,IAAA,CAAK,YAAA,CAAaxR,EAAC,GAAI+I,EAAO,UAAA,EAAU,GAErC,IAAA,CAAK,KAAA,GAAQyI,EAAU,qBAAA,IACtB,CAAA,IAAA,CAAK,OAAA,KAAY,IACpB,IAAA,CAAK,8BAAA,CAA+BxR,EAAC,GAAI+I,EAAO,UAAA,KAEhD,IAAA,CAAK,8BAAA,CAA+B/I,EAAC,GAAI+I,EAAO,SAAA,EAAS;IAK9D,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,YAAA,GAAeA,EAAO,UAA3B;QACA,IAAIqM,IAAAA,AAAS,CAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAW,CAAA,IAAG;QAC5C,IAAA,CAAK,cAAA,GAAiB,EAAtB;QACA,IAAA,IAASpV,IAAI,GAAGA,IAAIoV,GAAOpV,IAC1B,IAAA,CAAK,cAAA,CAAeA,EAAC,GAAI+I,EAAO,UAAA;IAElC,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,MAAA,GAASA,EAAO,WAArB;IACD,IAGAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAIqM,IAAAA,AAAS,CAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,AAAA,IAAY;QAC1C,IAAA,CAAK,iBAAA,GAAoB,EAAzB;QACA,IAAA,IAASpV,IAAI,GAAGA,IAAIoV,GAAOpV,IAC1B,IAAA,CAAK,iBAAA,CAAkBA,EAAC,GAAI+I,EAAO,UAAA,CAAW;IAEhD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,IAAA,GAAOA,EAAO,WAAA,IACnB,IAAA,CAAK,IAAA,GAAOA,EAAO,WAAA,IACnB,IAAA,CAAK,WAAA,GAAcA,EAAO,WAAA,IAC1B,IAAA,CAAK,IAAA,GAAOA,EAAO,WAHnB;IAID,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACzC,IAAI/I;QAOJ,IANA,IAAA,CAAK,OAAA,GAAU+I,EAAO,UAAA,IACtB,IAAA,CAAK,eAAA,GAAkBA,EAAO,UAAA,IAC9B,IAAA,CAAK,eAAA,GAAkB,EAAA,EACvB,IAAA,CAAK,6BAAA,GAAgC,EAAA,EACrC,IAAA,CAAK,gBAAA,GAAmB,EAAA,EACxB,IAAA,CAAK,oBAAA,GAAuB,EAAA,EACvB/I,IAAI,GAAGA,IAAI,IAAA,CAAK,eAAA,EAAiBA,IAClC,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK+I,EAAO,UAAA,KACjC,IAAA,CAAK,6BAAA,CAA8B,IAAA,CAAKA,EAAO,SAAA,KAC/C,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAKA,EAAO,SAAA,KAClC,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAKA,EAAO,SAAA;QAE1C,IAAA,CAAK,aAAA,GAAgBA,EAAO,SAAA,IAC5B,IAAA,CAAK,eAAA,GAAkBA,EAAO,SAAA,IAC9B,IAAA,CAAK,UAAA,GAAaA,EAAO,SAFzB;QAGA,IAAIuK,IAAQvK,EAAO,SAAnB;QACA,IAAA,CAAK,uBAAA,GAA2BuK,KAAS,IAAK,GAC9C,IAAA,CAAK,aAAA,GAAiBA,KAAS,IAAK,GACpC,IAAA,CAAK,mBAAA,GAAuBA,KAAS,IAAK,GAC1C,IAAA,CAAK,cAAA,GAAkBA,KAAS,IAAK,GACrC,IAAA,CAAK,WAAA,GAAeA,KAAS,IAAK,GAClC,IAAA,CAAK,UAAA,GAAavK,EAAO,SAAA,IACzB,IAAA,CAAK,cAAA,GAAiBA,EAAO,UAAA,IAC7B,IAAA,CAAK,eAAA,GAAkBA,EAAO,UAAA,IAC9B,IAAA,CAAK,uBAAA,GAA0BA,EAAO,UAAA,IACtC,IAAA,CAAK,uBAAA,GAA0BA,EAAO,UATtC;IAUJ,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,KAAA,KAAU,KAClB,CAAA,IAAA,CAAK,QAAA,GAAWA,EAAO,WADxB,EAAA;IAGD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,IAAA,GAAOA,EAAO,WAAA,IACf,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,IAAI,KACtD,CAAA,IAAA,CAAK,QAAA,GAAWA,EAAO,WAFxB,EAAA;IAID,IAGAyI,EAAU,aAAA,CAAc,oCAAoC,CAAA,GAAM,CAAA,GAAO,SAASzI,CAAAA;QAC9E,IAAA,CAAK,kBAAA,GAAqBA,EAAO,UAAA,CAAW,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAQ,EAChE,OAAA,CAAQ,MAAM,SACd,OAAA,CAAQ,MAAM,QACd,OAAA,CAAQ,MAAM,QACd,OAAA,CAAQ,MAAM,UACd,OAAA,CAAQ,MAAM;IACvB,IACAyI,EAAU,aAAA,CAAc,oCAAoC,CAAA,GAAM,CAAA,GAAO,SAASzI,CAAAA;QACjF,IAAA,CAAK,SAAA,GAAYyI,EAAU,UAAA,CAAWzI;QACtC,IAAIuM,IAAWvM,EAAO,UAAtB;QACIuM,IAAW,KACd,CAAA,IAAA,CAAK,IAAA,GAAOvM,EAAO,cAAA,CAAeuM,EAAQ;IAE5C,IAGA9D,EAAU,aALkC,CAKpB,oCAAoC,CAApC,GAA0C,CAAN,IAyB5DA,EAAU,aAAA,CAAc,oCAAoC,CAAA,GAAM,CAAA,GAAO,SAASzI,CAAAA;QACjF,IAAA,CAAK,mBAAA,GAAsBA,EAAO,UAAA,IAClC,IAAA,CAAK,eAAA,GAAkBA,EAAO,SAAA,IAC9B,IAAA,CAAK,WAAA,GAAcyI,EAAU,UAAA,CAAWzI;IACzC,IACAyI,EAAU,aAAA,CAAc,oCAAoC,CAAA,GAAM,CAAA,GAAO,SAASzI,CAAAA;QAC9E,IAAA,CAAK,cAAA,GAAiBA,EAAO,SAAA,IAC7B,IAAA,CAAK,OAAA,GAAU,EADf;QAGA,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,cAAA,EAAgBA,IAAK;YAC1C,IAAImU,IAAQ,CAAA,GACRoC,IAAgB,GAChBC,IAAoB;YAEpB,IAAA,CAAK,OAAA,KAAY,IACjBD,CAAAA,IAAgBxN,EAAO,UAAA,IACvByN,IAAoBzN,EAAO,UAAA,EAAA,IAE3BwN,CAAAA,IAAgBxN,EAAO,UAAA,IACvByN,IAAoBzN,EAAO,UAAA,EAAA,GAG/BoL,EAAM,aAAA,GAAgBoC,GACtBpC,EAAM,iBAAA,GAAoBqC,GAE1B,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAKrC;QACrB;IACL,IACA3C,EAAU,aAAA,CAAc,oCAAoC,CAAA,GAAM,CAAA,GAAO,SAASzI,CAAAA;QAC1E,IAAA,CAAK,OAAA,KAAY,IAClB,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,QAAA,GAAWA,EAAO,UAAA,EAAA,IAEvB,CAAA,IAAA,CAAK,aAAA,GAAgBA,EAAO,UAAA,IAC5B,IAAA,CAAK,QAAA,GAAWA,EAAO,UAL1B,EAAA;IAOJ,IACAyI,EAAU,iBAAA,CAAkB,QAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,YAAA,GAAeA,EAAO,UAAA,IAC3B,IAAA,CAAK,OAAA,GAAUA,EAAO,eAAA,CAAgB;IACvC,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAAUzI,CAAAA;QAC7C,IAAImF;QACA,IAAA,CAAK,OAAA,KAAY,IACpB,CAAA,IAAA,CAAK,OAAA,GAAUnF,EAAO,SAAA,IACtB,IAAA,CAAK,KAAA,GAAQA,EAAO,SAAA,IACpBmF,IAAMnF,EAAO,SAAA,IACb,IAAA,CAAK,QAAA,GAAWmF,KAAO,GACvB,IAAA,CAAK,iBAAA,GAAqBA,KAAO,IAAK,GACtC,IAAA,CAAK,kBAAA,GAAqBA,IAAM,GAChC,IAAA,CAAK,eAAA,GAAkBnF,EAAO,SAAA,IAC9B,IAAA,CAAK,uBAAA,GAA0BA,EAAO,SAAA,IACtC,IAAA,CAAK,kBAAA,GAAqBA,EAAO,SAAA,IACjC,IAAA,CAAK,0BAAA,GAA6BA,EAAO,UAAA,IACzC,IAAA,CAAK,sBAAA,GAAyBA,EAAO,cAAA,CAAe,IAAA,CAAK,0BAA0B,CAAA,IAEnF,CAAA,IAAA,CAAK,OAAA,GAAUA,EAAO,SAAA,IACtB,IAAA,CAAK,KAAA,GAAQA,EAAO,SAAA,IACpBmF,IAAMnF,EAAO,SAAA,IACb,IAAA,CAAK,QAAA,GAAYmF,KAAO,IAAK,IAC7B,IAAA,CAAK,UAAA,GAAaA,IAAM,IACxBA,IAAMnF,EAAO,SAAA,IACb,IAAA,CAAK,iBAAA,GAAqBmF,KAAO,IAAK,IACtC,IAAA,CAAK,gBAAA,GAAoBA,KAAO,IAAK,GACrC,IAAA,CAAK,kBAAA,GAAqBA,IAAM,GAChC,IAAA,CAAK,0BAAA,GAA6BnF,EAAO,UAAA,IACzC,IAAA,CAAK,sBAAA,GAAyBA,EAAO,cAAA,CAAe,IAAA,CAAK,0BAA0B,CAAA;IAErF,IACAyI,EAAU,aAAA,CAAc,QAAQ,SAASzI,CAAAA;QACxC,IAAA,CAAK,IAAA,GAAOA,EAAO,UAAA,CAAW,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAQ;IACxD,IAGAyI,EAAU,iBAAA,CAAkB,QAAQ,SAAUzI,CAAAA;QAC5C,IAAI/I,GAAGU,GAGH+V,IAAY;YACd,WAAW,KADG;YAEd,eAAe;YAEf,qBAAqB,SAAUC,CAAAA;gBAC7B,IAAA,CAAK,SAAA,GAAYA,EAAK,SAAA,IACtB,IAAA,CAAK,aAAA,GAAgB;YACtB;YACD,qBAAqB,SAAUA,CAAAA;gBAC7B,IAAA,CAAK,SAAA,GAAYA,EAAK,UAAA,IACtB,IAAA,CAAK,aAAA,GAAgB;YACtB;YAED,cAAc,SAAUC,CAAAA;gBACtB,IAAI7D,IAAO,IAAA,CAAK,SAAA,IAAc,IAAA,CAAK,aAAA,GAAgB6D,IAAAA,AAAe,CAAA,KAAKA,CAAAA,IAAY;gBACnF,OAAA,IAAA,CAAK,aAAA,IAAiBA,GACf7D;YACR;QACL;QAQE,IALA2D,EAAU,mBAAA,CAAoB1N,IAC9B0N,EAAU,YAAA,CAAa,IACvB,IAAA,CAAK,kBAAA,GAAqBA,EAAU,YAAA,CAAa,IACjD,IAAA,CAAK,gBAAA,GAAmBA,EAAU,YAAA,CAAa,IAE3C,IAAA,CAAK,gBAAA,EAAkB;YACzBA,EAAU,mBAAA,CAAoB1N,IAC9B,IAAA,CAAK,OAAA,GAAU0N,EAAU,YAAA,CAAa,IACtC,IAAA,CAAK,aAAA,GAAgBA,EAAU,YAAA,CAAa,IAC5C,IAAA,CAAK,mBAAA,GAAsBA,EAAU,YAAA,CAAa,IAClD,IAAA,CAAK,iBAAA,GAAoBA,EAAU,YAAA,CAAa,IAEhDA,EAAU,mBAAA,CAAoB1N,IAC9B,IAAA,CAAK,gBAAA,GAAmB0N,EAAU,YAAA,CAAa,IAC/CA,EAAU,YAAA,CAAa;YAiBrB,IAbAA,EAAU,mBAAA,CAAoB1N,IAC9B0N,EAAU,YAAA,CAAa,IACvB,IAAA,CAAK,yBAAA,GAA4BA,EAAU,YAAA,CAAa,IACxD,IAAA,CAAK,mBAAA,GAAsBA,EAAU,YAAA,CAAa,IAClD,IAAA,CAAK,iBAAA,GAAoBA,EAAU,YAAA,CAAa,IAEhD,IAAA,CAAK,iBAAA,GAAoB1N,EAAO,SAAA,IAEhC0N,EAAU,mBAAA,CAAoB1N,IAC9B,IAAA,CAAK,8BAAA,GAAiC0N,EAAU,YAAA,CAAa,IAC7D,IAAA,CAAK,2BAAA,GAA8BA,EAAU,YAAA,CAAa,IAE1D,IAAA,CAAK,uBAAA,GAA0B,IAAI,WAAW,IAAA,CAAK,yBAAyB,GACxE,IAAA,CAAK,yBAAA,EAA2B;gBAClC,IAAKzW,IAAI,GAAGA,IAAI,IAAA,CAAK,yBAAA,GAA4B,GAAGA,IAAK;oBACvD,IAAI4W,IAASH,EAAU,YAAA,CAAa;oBACpCA,EAAU,mBAAA,CAAoB1N;oBAC9B,IAAI8N,IAASJ,EAAU,YAAA,CAAa;oBAEpC,IAAA,CAAK,uBAAA,CAAwBzW,EAAC,GAAM4W,KAAU,IAAKC;gBACpD;gBACD,IAAA,CAAK,uBAAA,CAAwB,IAAA,CAAK,yBAAA,GAA4B,EAAC,GAAIJ,EAAU,YAAA,CAAa;YAClG,OAEQA,EAAU,YAAA,CAAa;YAGzB,IAAI,IAAA,CAAK,aAAA,GAAgB,GAAG;gBAG1B,IAFAA,EAAU,mBAAA,CAAoB1N,IAC9B,IAAA,CAAK,yBAAA,GAA4B,GAC5BrI,IAAI,IAAA,CAAK,aAAA,GAAgB,GAAGA,KAAK,GAAG,EAAEA,EAAG;oBAC5C,IAAI+B,IAAMgU,EAAU,YAAA,CAAa;oBACjC,IAAA,CAAK,yBAAA,IAA6BhU,KAAO/B;gBAC1C;gBACD,IAAKA,IAAI,IAAA,CAAK,aAAA,EAAeA,KAAK,KAAK,IAAA,CAAK,aAAA,GAAgB,GAAG,EAAEA,EAC/D+V,EAAU,YAAA,CAAa;gBAIzB,IADA,IAAA,CAAK,kBAAA,GAAqB,EAAA,EACrB/V,IAAI,IAAA,CAAK,aAAA,GAAgB,GAAGA,KAAK,GAAG,EAAEA,EACrC,IAAA,CAAK,yBAAA,GAA6B,KAAKA,KACzC,CAAA,IAAA,CAAK,kBAAA,CAAmBA,EAAC,GAAIqI,EAAO,SAAA,EAAS;YAGlD;YAID,IAFA,IAAA,CAAK,oBAAA,GAAuBA,EAAO,SAAA,IACnC,IAAA,CAAK,uBAAA,GAA0B,EAAA,EAC3B,IAAA,CAAK,oBAAT,EACE,IAAK/I,IAAI,GAAGA,IAAI,IAAA,CAAK,oBAAA,EAAsBA,IACzC,IAAA,CAAK,uBAAA,CAAwB,IAAA,CAAK+I,EAAO,UAAA;YAK/C,IAAA,CAAK,iBAAA,GAAoBA,EAAO,UAAA,IAChC,IAAA,CAAK,kBAAA,GAAqBA,EAAO,UAAA,IACjC,IAAA,CAAK,cAAA,GAAiBA,EAAO,UAF7B;QAGD;QAED,IAAI+N,IAAe,IACfC,IAAqB;QAEzB,IAAA,CAAK,WAAA,GAAc,EAAnB;QACA,IAAIC,IAAgBjO,EAAO,SAA3B;QACA,IAAK/I,IAAI,GAAGA,IAAIgX,GAAehX,IAAK;YAClC,IAAI0U,IAAa,EAAjB;YACA,IAAA,CAAK,WAAA,CAAY,IAAA,CAAKA,IAEtB+B,EAAU,mBAAA,CAAoB1N,IAC9B2L,EAAW,YAAA,GAAe+B,EAAU,YAAA,CAAa,IACjDA,EAAU,YAAA,CAAa,IACvB/B,EAAW,SAAA,GAAY+B,EAAU,YAAA,CAAa;YAE9C,IAAI9B,IAAW;YAKf,IAJID,EAAW,SAAA,IAAaqC,KAAsBrC,EAAW,SAAA,IAAaoC,KACxEnC,CAAAA,IAAW5L,EAAO,UAAA,EAAA,GAGfrI,IAAI,GAAGA,IAAIiU,GAAUjU,IAAK;gBAC7B,IAAIsF,IAAM+C,EAAO,UAAjB;gBACA2L,EAAW,IAAA,CAAK;oBACd,MAAM3L,EAAO,cAAA,CAAe/C;oBAC5B,QAAQA;gBAChB;YACK;QACF;IACH,IAEAwL,EAAU,iBAAA,CAAkB,QAAQ,SAAUzI,CAAAA;QAE5C,IAAImF,IAAM,KAAK,SAAf;QACA,IAAA,CAAK,kBAAA,GAAsBA,IAAM;IACnC,IAEAsD,EAAU,WAAA,CAAY,SAAA,CAAU,OAAA,GAAU;QACzC,OAAO,CAAP;IACA,GAEDA,EAAU,WAAA,CAAY,SAAA,CAAU,OAAA,GAAU;QACzC,OAAO,CAAP;IACA,GAEDA,EAAU,WAAA,CAAY,SAAA,CAAU,UAAA,GAAa;QAC5C,OAAO,CAAP;IACA,GAEDA,EAAU,WAAA,CAAY,SAAA,CAAU,UAAA,GAAa;QAC5C,OAAO,CAAP;IACA,GAEDA,EAAU,WAAA,CAAY,SAAA,CAAU,MAAA,GAAS;QACxC,OAAO,CAAP;IACA,GAEDA,EAAU,WAAA,CAAY,SAAA,CAAU,QAAA,GAAW;QAC1C,OAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,KAAI;IAC7B,GAEDA,EAAU,WAAA,CAAY,SAAA,CAAU,QAAA,GAAW;QAC1C,OAAO;IACP,GAEDA,EAAU,WAAA,CAAY,SAAA,CAAU,SAAA,GAAY;QAC3C,OAAO;IACP,GAEDA,EAAU,WAAA,CAAY,SAAA,CAAU,eAAA,GAAkB;QACjD,OAAO;IACP,GAEDA,EAAU,WAAA,CAAY,SAAA,CAAU,aAAA,GAAgB;QAC/C,OAAO;IACP,GAEDA,EAAU,WAAA,CAAY,SAAA,CAAU,aAAA,GAAgB;QAC/C,OAAO;IACP,GAEDA,EAAU,iBAAA,CAAkB,SAAA,CAAU,OAAA,GAAU;QAC/C,OAAO,CAAP;IACA,GAEDA,EAAU,iBAAA,CAAkB,SAAA,CAAU,QAAA,GAAW;QAChD,OAAO,IAAA,CAAK,KAAZ;IACA,GAEDA,EAAU,iBAAA,CAAkB,SAAA,CAAU,SAAA,GAAY;QACjD,OAAO,IAAA,CAAK,MAAZ;IACA,GAEDA,EAAU,gBAAA,CAAiB,SAAA,CAAU,OAAA,GAAU;QAC9C,OAAO,CAAP;IACA,GAEDA,EAAU,gBAAA,CAAiB,SAAA,CAAU,eAAA,GAAkB;QACtD,OAAO,IAAA,CAAK,aAAZ;IACA,GAEDA,EAAU,gBAAA,CAAiB,SAAA,CAAU,aAAA,GAAgB;QACpD,OAAO,IAAA,CAAK,UAAZ;IACA,GAEDA,EAAU,gBAAA,CAAiB,SAAA,CAAU,aAAA,GAAgB;QACpD,OAAO,IAAA,CAAK,UAAZ;IACA,GAEDA,EAAU,mBAAA,CAAoB,SAAA,CAAU,UAAA,GAAa;QACpD,OAAO,CAAP;IACA,GAEDA,EAAU,mBAAA,CAAoB,SAAA,CAAU,UAAA,GAAa;QACpD,OAAO,CAAP;IACA,GAGDA,EAAU,YAAA,GAAe,SAAS/Q,CAAAA,EAAGwW,CAAAA;QACpC,IAAIxE,IAAM,OAAOhS,GAAG,QAAA,CAAS;QAE7B,IADAwW,IAAU,OAAQA,IAAa,OAAeA,MAAY,OAAOA,IAAU,IAAIA,GACxExE,EAAI,MAAA,GAASwE,GACnBxE,IAAM,MAAMA;QAEb,OAAOA;IACP,GAEDjB,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GACpCA,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GACpCA,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GACpCA,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GAAW;QAC9C,IAAI0F,IAAY1F,EAAU,WAAA,CAAY,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI;QAClE,OAAI,IAAA,CAAK,IAAA,GACD0F,IAAU,MAAI1F,EAAU,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,oBAAoB,IACjEA,EAAU,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,qBAAqB,IACtDA,EAAU,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,kBAAkB,IAErD0F;IAER,GAED1F,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GACpCA,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GAAW;QAC9C,IAAIxR,GACAkX,IAAY1F,EAAU,WAAA,CAAY,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI;QAClE,IAAI,IAAA,CAAK,IAAA,EAAM;YAEd,OADA0F,KAAa,KACL,IAAA,CAAK,IAAA,CAAK,qBAAA;gBACjB,KAAK;oBACJA,KAAa;oBACb;gBACD,KAAK;oBACJA,KAAa;oBACb;gBACD,KAAK;oBACJA,KAAa;oBACb;gBACD,KAAK;oBACJA,KAAa;oBACb;YACD;YACDA,KAAa,IAAA,CAAK,IAAA,CAAK,mBAAA,EACvBA,KAAa;YACb,IAAIzU,IAAM,IAAA,CAAK,IAAA,CAAK,6BAAA,EAChB0U,IAAW;YACf,IAAKnX,IAAE,GAAGA,IAAE,MACXmX,CAAAA,KAAY1U,IAAM,GACdzC,KAAG,EAAA,GAFQA,IAGfmX,MAAa,GACb1U,MAAO;YAERyU,KAAa1F,EAAU,YAAA,CAAa2F,GAAU,IAC9CD,KAAa,KACT,IAAA,CAAK,IAAA,CAAK,iBAAA,KAAsB,IACnCA,KAAa,MAEbA,KAAa,KAEdA,KAAa,IAAA,CAAK,IAAA,CAAK,iBAPvB;YAQA,IAAIE,IAAU,CAAA,GACVC,IAAoB;YACxB,IAAKrX,IAAI,GAAGA,KAAK,GAAGA,IACnB,AAAI,CAAA,IAAA,CAAK,IAAA,CAAK,4BAAA,CAA6BA,EAAC,IAAKoX,CAAAA,KAChDC,CAAAA,IAAoB,MAAI7F,EAAU,YAAA,CAAa,IAAA,CAAK,IAAA,CAAK,4BAAA,CAA6BxR,EAAC,EAAG,KAAGqX,GAC7FD,IAAU,CAFX,CAAA;YAKDF,KAAaG;QACb;QACD,OAAOH;IACP,GAED1F,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GACpCA,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GAAW;QAC9C,IAAIxR,GACAkX,IAAY1F,EAAU,WAAA,CAAY,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI;QAClE,IAAI,IAAA,CAAK,IAAA,EAAM;YACd0F,KAAa,MAAM,IAAA,CAAK,IAAA,CAAK,mBAAA,EACzB,IAAA,CAAK,IAAA,CAAK,iBAAA,GACbA,KAAa,OAEbA,KAAa,MAEdA,KAAa,IAAA,CAAK,IAAA,CAAK,iBANvB;YAQA,IAAIG,IAAoB;YACxB,IAAI,IAAA,CAAK,IAAA,CAAK,uBAAA,EAAyB;gBACtC,IAAIC,IAAQ,EAAA,EACRzC,IAAO;gBACXA,KAAQ,IAAA,CAAK,IAAA,CAAK,yBAAA,IAA6B,GAC/CA,KAAQ,IAAA,CAAK,IAAA,CAAK,sBAAA,IAA0B;gBAC5C,IAAI0C;gBACJ,IAAKvX,IAAI,GAAGA,IAAI,IAAA,CAAK,IAAA,CAAK,uBAAA,CAAwB,MAAA,EAAQ,EAAEA,EAC3D6U,KAAS,IAAA,CAAK,IAAA,CAAK,uBAAA,CAAwB7U,EAAC,IAAK,IAAK,IACtDsX,EAAM,IAAA,CAAKzC,IACPA,KACH0C,CAAAA,IAAevX,CAAAA,GAGhB6U,IAAQ,IAAA,CAAK,IAAA,CAAK,uBAAA,CAAwB7U,EAAC,IAAK,IAAK;gBAGtD,IAAIuX,MAAiB,KAArB,GACCF,IAAoB;qBAEhB;oBACJA,IAAoB;oBACpB,IAAIG,IAAe,oCACfC,IAAY,GACZC,IAAgB;oBACpB,IAAK1X,IAAI,GAAGA,KAAKuX,GAAc,EAAEvX,EAIhC,IAHAyX,IAAaA,KAAa,IAAKH,CAAAA,CAAMtX,EAAC,EACtC0X,KAAiB,GAEVA,KAAiB,GAAG;wBAC1B,IAAIjV,IAAOgV,KAAcC,IAAgB,IAAM;wBAC/CL,KAAqBG,CAAAA,CAAa/U,EAAG,EAErCiV,KAAiB,GACjBD,KAAAA,AAAc,CAAA,KAAKC,CAAAA,IAAiB;oBACpC;oBAEEA,KACHD,CAAAA,MAAe,IAAIC,GACnBL,KAAqBG,CAAAA,CAAaC,IAAY,GAF/C,AAEmD;gBAEnD;YACD;YACDP,KAAaG;QACb;QACD,OAAOH;IACP,GAED1F,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GAAW;QAC9C,IAAI0F,IAAY1F,EAAU,WAAA,CAAY,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI;QAClE,IAAI,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK;YAC/B,IAAImG,IAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAA,IACpBrG,IAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,cAAA;YACxB,OAAO4F,IAAU,MAAI1F,EAAU,YAAA,CAAamG,KAAMrG,CAAAA,IAAM,MAAIA,IAAK,EAAjE;QACF,OACE,OAAO4F;IAER,GAED1F,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GAAW;QAC9C,IAAI0F,IAAY1F,EAAU,WAAA,CAAY,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI;QAClE,OAAG,IAAA,CAAK,WAAA,GACA0F,IAAY,MAAM,IAAA,CAAK,WAAA,GAEvBA;IAER,GAED1F,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GACpCA,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GAAW;QAC9C,IAAI0F,IAAY1F,EAAU,WAAA,CAAY,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI,GAC9DhG,IAAQ,IAAA,CAAK,IAAA,CAAK,KADtB;QAEIA,KAAS,KACZA,CAAAA,IAAQ,IADT;QAGA,IAAIoM,IAAW,IAAA,CAAK,IAAA,CAAK,QAAzB;QACA,OAAIA,KAAY,KACfA,CAAAA,IAAW,IAAA,GAELV,IAAY,OAAO,IAAA,CAAK,IAAA,CAAK,OAAA,GAAU,MAAM1L,IAAQ,MAAMoM;IAClE,GAEDpG,EAAU,eAAA,CAAgB,SAAA,CAAU,QAAA,GAAW;QAC9C,IAAI0F,IAAY1F,EAAU,WAAA,CAAY,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,IAAI,GAC9DhG,IAAQ,IAAA,CAAK,IAAA,CAAK,eADtB;QAEIA,IAAQ,MACXA,CAAAA,IAAQ,MAAMA,CAAAA;QAEf,IAAIqM;QACJ,OAAI,IAAA,CAAK,IAAA,CAAK,WAAA,KAAgB,KAAK,IAAA,CAAK,IAAA,CAAK,aAAA,KAAkB,IAC9DA,IAAY,IAAA,CAAK,IAAA,CAAK,UAAA,KAAe,IAAK,OAAO,OACtC,IAAA,CAAK,IAAA,CAAK,WAAA,IAAe,KACpCA,CAAAA,IAAY,IAAA,CAAK,IAAA,CAAK,aAAA,KAAkB,IAAK,OAAO,IAAA,GAG9CX,IAAU,MAAI,IAAA,CAAK,IAAA,CAAK,WAAA,GAAY,MAAI1L,IAAO,CAAA,IAAA,CAAK,IAAA,CAAK,UAAA,GAAW,MAAI,GAAA,IAAK,MAAIqM;IACxF,GAMDrG,EAAU,GAAA,CAAI,SAAA,CAAU,WAAA,GAAc,SAASzI,CAAAA,EAAQ2C,CAAAA;QACtD,IAAA,CAAK,IAAA,IAAQ,GACT,IAAA,CAAK,IAAA,GAAO2C,KACf,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEV,IAAA,CAAK,IAAA,KAAS,UACjB,CAAA,IAAA,CAAK,IAAA,IAAQ,EAAA,GAEdhL,EAAI,KAAA,CAAM,aAAa,iBAAe,IAAA,CAAK,IAAA,GAAK,eAAa,IAAA,CAAK,IAAA,GAAK,kBAAgB0F,EAAO,WAAA,KAAe2C,CAAAA,KAAO,EAAA,IAChH,IAAA,CAAK,IAAA,GAAO2C,IACftF,EAAO,WAAA,CAAY,KAEnB,CAAA,IAAA,CAAK,YAAA,GAAeA,EAAO,WAAA,IAC3BA,EAAO,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAE7BA,EAAO,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM,MAAM,IAChC,IAAA,CAAK,IAAA,KAAS,UACjBA,EAAO,eAAA,CAAgB,IAAA,CAAK,IAAI,GAE7B,IAAA,CAAK,IAAA,GAAOsF,KACftF,EAAO,WAAA,CAAY,IAAA,CAAK,IAAI;IAE7B,GAEDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,WAAA,GAAc,SAASzI,CAAAA;QAClD,IAAA,CAAK,IAAA,IAAQ,GACbyI,EAAU,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,IAAA,EAAMzI,GAAQ,QAAM,IAAA,CAAK,OAAA,GAAQ,QAAM,IAAA,CAAK,KAAK,GAC1FA,EAAO,UAAA,CAAW,IAAA,CAAK,OAAO,GAC9BA,EAAO,WAAA,CAAY,IAAA,CAAK,KAAK;IAC7B,GAEDyI,EAAU,GAAA,CAAI,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACpC,IAAA,CAAK,IAAA,KAAS,SAEb,IAAA,CAAK,IAAA,IACR,CAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,EACtB,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA,IAGjC,CAAA,IAAA,CAAK,IAAA,GAAQ,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,GAC5C,IAAA,CAAK,WAAA,CAAYA,IACb,IAAA,CAAK,IAAA,IACRA,EAAO,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;IAGlC,GAEDyI,EAAU,YAAA,CAAa,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACjD,IAAA,CAAK,IAAA,GAAO,GACZ,IAAA,CAAK,WAAA,CAAYA;QACjB,IAAA,IAAS/I,IAAE,GAAGA,IAAE,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IAC9B,IAAA,CAAK,KAAA,CAAMA,EAAC,IACf,CAAA,IAAA,CAAK,KAAA,CAAMA,EAAC,CAAE,KAAA,CAAM+I,IACpB,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM/I,EAAC,CAAE,IAF5B,AAAA;QAMDqD,EAAI,KAAA,CAAM,aAAa,mBAAiB,IAAA,CAAK,IAAA,GAAK,oBAAkB,IAAA,CAAK,IAAI,GAC7E0F,EAAO,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,IAAI;IAChD,GAEDyI,EAAU,qBAAA,CAAsB,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC1D,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,MAAA,GAAO,GAClC,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,gBAAA,CAAiB,IAAA,CAAK,SAAS;IACtC,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAI/I;QAEJ,IADA,IAAA,CAAK,IAAA,GAAO,GACPA,IAAI,GAAGA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQA,IAChC,IAAA,CAAK,IAAA,IAAQ,IAAE,IAAA,CAAK,GAAA,CAAIA,EAAC,CAAE,MAA3B;QAED,IAAKA,IAAI,GAAGA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQA,IAChC,IAAA,CAAK,IAAA,IAAQ,IAAE,IAAA,CAAK,GAAA,CAAIA,EAAC,CAAE,MAA3B;QAYD,IAVI,IAAA,CAAK,GAAA,IACR,CAAA,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,GAAA,CAAI,MAAA,AAAA,GAEvB,IAAA,CAAK,WAAA,CAAY+I,IACjBA,EAAO,UAAA,CAAW,IAAA,CAAK,oBAAoB,GAC3CA,EAAO,UAAA,CAAW,IAAA,CAAK,oBAAoB,GAC3CA,EAAO,UAAA,CAAW,IAAA,CAAK,qBAAqB,GAC5CA,EAAO,UAAA,CAAW,IAAA,CAAK,kBAAkB,GACzCA,EAAO,UAAA,CAAW,IAAA,CAAK,kBAAA,GAAsB,MAC7CA,EAAO,UAAA,CAAW,IAAA,CAAK,GAAA,CAAI,MAAA,GAAU,MAChC/I,IAAI,GAAGA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQA,IAChC+I,EAAO,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI/I,EAAC,CAAE,MAAM,GACrC+I,EAAO,eAAA,CAAgB,IAAA,CAAK,GAAA,CAAI/I,EAAC,CAAE,IAAI;QAGxC,IADA+I,EAAO,UAAA,CAAW,IAAA,CAAK,GAAA,CAAI,MAAM,GAC5B/I,IAAI,GAAGA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQA,IAChC+I,EAAO,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI/I,EAAC,CAAE,MAAM,GACrC+I,EAAO,eAAA,CAAgB,IAAA,CAAK,GAAA,CAAI/I,EAAC,CAAE,IAAI;QAEpC,IAAA,CAAK,GAAA,IACR+I,EAAO,eAAA,CAAgB,IAAA,CAAK,GAAG;IAEhC,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAI/I;QAMJ,IALA,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAE,IAAE,IAAA,CAAK,aAAA,CAAc,MAAA,EACnC,IAAA,CAAK,WAAA,CAAY+I,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc,MAAM,GACxC/I,IAAE,GAAGA,IAAE,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQA,IACrC+I,EAAO,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc/I,EAAE;IAEzC,GAGDwR,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAE5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IACZ,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,UAAA,CAAW,IAAA,CAAK,qBAAqB,GAC5CA,EAAO,UAAA,CAAW,IAAA,CAAK,yBAAyB,GAChDA,EAAO,UAAA,CAAW,IAAA,CAAK,4BAA4B,GACnDA,EAAO,UAAA,CAAW,IAAA,CAAK,oBAAoB,GAC3CA,EAAO,UAAA,CAAW,IAAA,CAAK,kBAAkB;IACzC,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAI/I;QAMJ,IALA,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAE,IAAE,IAAA,CAAK,aAAA,CAAc,MAAA,EACnC,IAAA,CAAK,WAAA,CAAY+I,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc,MAAM,GACxC/I,IAAE,GAAGA,IAAE,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQA,IACrC+I,EAAO,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc/I,EAAE,GACpC,IAAA,CAAK,OAAA,KAAY,IACpB+I,EAAO,UAAA,CAAW,IAAA,CAAK,cAAA,CAAe/I,EAAE,IAExC+I,EAAO,WAAA,CAAY,IAAA,CAAK,cAAA,CAAe/I,EAAE;IAG3C,GAGDwR,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,GACZ,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,MAAM;QACtC,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IACxC,IAAA,CAAK,OAAA,CAAQA,EAAC,CAAE,KAAA,CAAM+I,IACtB,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,OAAA,CAAQ/I,EAAC,CAAE,IAD7B;QAIDqD,EAAI,KAAA,CAAM,aAAa,mBAAiB,IAAA,CAAK,IAAA,GAAK,oBAAkB,IAAA,CAAK,IAAI,GAC7E0F,EAAO,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,IAAI;IAChD,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,iBAAA,CAAkB,MAAA,EACnC,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,iBAAiB;IACzC,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAE,KAAG,IAAA,CAAK,OAAA,CAAQ,MAAA,EAC9B,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,MAAM;QACtC,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IAAK;YAC7C,IAAImU,IAAQ,IAAA,CAAK,OAAA,CAAQnU,EAAzB;YACA+I,EAAO,WAAA,CAAYoL,EAAM,gBAAgB,GACzCpL,EAAO,UAAA,CAAWoL,EAAM,UAAU,GAClCpL,EAAO,UAAA,CAAWoL,EAAM,kBAAkB,GAC1CpL,EAAO,UAAA,CAAWoL,EAAM,mBAAmB;QAC3C;IACD,GAGD3C,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,KAAI,IAAA,CAAK,YAAA,CAAa,MAAA,GAAQ,CAAA,IAAA,CAAK,aAAA,CAAc,MAAA,GAAO,CAAA,IAAI,CAAA,IAAA,CAAK,KAAA,CAAM,MAAA,GAAO,CAAA,GAC1F,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,YAAA,CAAa,IAAA,CAAK,aAAa,GACtCA,EAAO,YAAA,CAAa,IAAA,CAAK,KAAK,GAC9BA,EAAO,WAAA,CAAY,IAAA,CAAK,SAAS,GACjCA,EAAO,WAAA,CAAY,IAAA,CAAK,uBAAuB,GAC/CA,EAAO,WAAA,CAAY,IAAA,CAAK,cAAc,GACtCA,EAAO,WAAA,CAAY,IAAA,CAAK,EAAE,GAC1BA,EAAO,eAAA,CAAgB,IAAA,CAAK,YAAY;IACxC,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,IAAA,GAAO,IAAE,IAAE,IAAA,CAAK,iBAAA,CAAkB,MAAA,EACvC,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,WAAA,EAAa,MAAM,IAC3CA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAa;QACrC,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQA,IAClD+I,EAAO,WAAA,CAAY,IAAA,CAAK,iBAAA,CAAkB/I,EAAC,EAAG,MAAM;IAErD,GAGDwR,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,IAAA,GAAO,KAAI,IAAA,CAAK,IAAA,CAAK,MAAA,GAAO,GACjC,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IAAA,CAAK,OAAA,EAAS,MAAM,IACvCA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,YAAA,CAAa,IAAA,CAAK,IAAI;IAC7B,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACzC,IAAI/I,GAAEU;QAGN,IAFA,IAAA,CAAK,IAAA,GAAO,IAEPV,IAAI,GAAGA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQA,IAEvC,IADA,IAAA,CAAK,IAAA,IAAQ,GACRU,IAAI,GAAGA,IAAI,IAAA,CAAK,WAAA,CAAYV,EAAC,CAAE,MAAA,EAAQU,IAC1C,IAAA,CAAK,IAAA,IAAQ,IAAI,IAAA,CAAK,WAAA,CAAYV,EAAC,CAAEU,EAAC,CAAE,IAAA,CAAK,MAA7C;QAwBJ,IApBA,IAAA,CAAK,WAAA,CAAYqI,IAEjBA,EAAO,UAAA,CAAW,IAAA,CAAK,oBAAoB,GAC3CA,EAAO,UAAA,CAAW,IAAA,CAAK,qBAAA,IAAyB,IAC9B,IAAA,CAAK,iBAAA,IAAqB,IAC1B,IAAA,CAAK,mBAAmB,GAC1CA,EAAO,WAAA,CAAY,IAAA,CAAK,6BAA6B,GACrDA,EAAO,eAAA,CAAgB,IAAA,CAAK,4BAA4B,GACxDA,EAAO,UAAA,CAAW,IAAA,CAAK,iBAAiB,GACxCA,EAAO,WAAA,CAAY,IAAA,CAAK,4BAAA,GAAgC,YACxDA,EAAO,UAAA,CAAW,IAAA,CAAK,eAAA,GAAmB,MAC1CA,EAAO,UAAA,CAAW,IAAA,CAAK,iBAAA,GAAqB,MAC5CA,EAAO,UAAA,CAAW,IAAA,CAAK,qBAAA,GAAyB,MAChDA,EAAO,UAAA,CAAW,IAAA,CAAK,uBAAA,GAA2B,MAClDA,EAAO,WAAA,CAAY,IAAA,CAAK,YAAY,GACpCA,EAAO,UAAA,CAAA,AAAY,CAAA,IAAA,CAAK,iBAAA,IAAmB,CAAA,IAC3B,CAAA,IAAA,CAAK,iBAAA,IAAmB,CAAA,IACxB,CAAA,IAAA,CAAK,gBAAA,IAAkB,CAAA,IACxB,IAAA,CAAK,kBAAkB,GACtCA,EAAO,UAAA,CAAW,IAAA,CAAK,WAAA,CAAY,MAAM,GACpC/I,IAAI,GAAGA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQA,IAKvC,IAHA+I,EAAO,UAAA,CAAA,AAAY,CAAA,IAAA,CAAK,WAAA,CAAY/I,EAAC,CAAE,YAAA,IAAc,CAAA,IAClC,IAAA,CAAK,WAAA,CAAYA,EAAC,CAAE,SAAS,GAChD+I,EAAO,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY/I,EAAC,CAAE,MAAM,GACxCU,IAAI,GAAGA,IAAI,IAAA,CAAK,WAAA,CAAYV,EAAC,CAAE,MAAA,EAAQU,IAC1CqI,EAAO,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY/I,EAAC,CAAEU,EAAC,CAAE,IAAA,CAAK,MAAM,GACrDqI,EAAO,eAAA,CAAgB,IAAA,CAAK,WAAA,CAAY/I,EAAC,CAAEU,EAAC,CAAE,IAAI;IAGzD,GAED8Q,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,MAAA,GAAO,IAAI,CAAA,IAAA,CAAK,KAAA,CAAM,MAAA,GAAO,CAAA,GACzD,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,YAAA,CAAa,IAAA,CAAK,SAAS,GAClCA,EAAO,YAAA,CAAa,IAAA,CAAK,KAAK;IAC9B,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,IAAA,GAAO,IACZ,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAa,GACrCA,EAAO,WAAA,CAAY,IAAA,CAAK,iBAAiB,GACzCA,EAAO,WAAA,CAAY,IAAA,CAAK,SAAS,GACjCA,EAAO,WAAA,CAAY,IAAA,CAAK,QAAQ,GAChCA,EAAO,WAAA,CAAY,IAAA,CAAK,QAAQ,GAChCA,EAAO,WAAA,CAAY;IACnB,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,GACZ,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,iBAAiB;IACzC,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,GACZ,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,eAAe;IACvC,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IACZ,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAa,GACrCA,EAAO,WAAA,CAAY,IAAA,CAAK,iBAAiB,GACzCA,EAAO,WAAA,CAAY,IAAA,CAAK,SAAS,GACjCA,EAAO,WAAA,CAAY,IAAA,CAAK,QAAQ,GAChCA,EAAO,WAAA,CAAY,IAAA,CAAK,IAAI,GAC5BA,EAAO,WAAA,CAAY,IAAA,CAAK,MAAA,IAAQ,IAChCA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,gBAAA,CAAiB,IAAA,CAAK,MAAM,GACnCA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAa;IACrC,GAGDyI,EAAU,WAAA,CAAY,SAAA,CAAU,WAAA,GAAc,SAASzI,CAAAA;QACtD,IAAA,CAAK,IAAA,GAAO,GACZyI,EAAU,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,IAAA,EAAMzI,IAC/CA,EAAO,UAAA,CAAW,IAClBA,EAAO,UAAA,CAAW,IAClBA,EAAO,UAAA,CAAW,IAClBA,EAAO,UAAA,CAAW,IAClBA,EAAO,UAAA,CAAW,IAClBA,EAAO,UAAA,CAAW,IAClBA,EAAO,WAAA,CAAY,IAAA,CAAK,oBAAoB;IAC5C,GAEDyI,EAAU,WAAA,CAAY,SAAA,CAAU,WAAA,GAAc,SAASzI,CAAAA;QACtD,IAAA,IAAS/I,IAAE,GAAGA,IAAE,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IAClC,IAAA,CAAK,KAAA,CAAMA,EAAC,CAAE,KAAA,CAAM+I,IACpB,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM/I,EAAC,CAAE,IAD3B;QAGDqD,EAAI,KAAA,CAAM,aAAa,mBAAiB,IAAA,CAAK,IAAA,GAAK,oBAAkB,IAAA,CAAK,IAAI,GAC7E0F,EAAO,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,IAAI;IAChD,GAEDyI,EAAU,WAAA,CAAY,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAChD,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,eAAA,CAAgB,IAAA,CAAK,IAAI,GAChC,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,EACvB1F,EAAI,KAAA,CAAM,aAAa,mBAAiB,IAAA,CAAK,IAAA,GAAK,oBAAkB,IAAA,CAAK,IAAI,GAC7E0F,EAAO,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,IAAI;IAChD,GAEDyI,EAAU,iBAAA,CAAkB,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACtD,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,IAAA,IAAQ,IACbA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IAAA,CAAK,KAAK,GAC7BA,EAAO,WAAA,CAAY,IAAA,CAAK,MAAM,GAC9BA,EAAO,WAAA,CAAY,IAAA,CAAK,eAAe,GACvCA,EAAO,WAAA,CAAY,IAAA,CAAK,cAAc,GACtCA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IAAA,CAAK,WAAW,GACnCA,EAAO,UAAA,CAAW,KAAK,GAAA,CAAI,IAAI,IAAA,CAAK,cAAA,CAAe,MAAM,IACzDA,EAAO,WAAA,CAAY,IAAA,CAAK,cAAA,EAAgB,MAAM,KAC9CA,EAAO,WAAA,CAAY,IAAA,CAAK,KAAK,GAC7BA,EAAO,UAAA,CAAW,KAClB,IAAA,CAAK,WAAA,CAAYA;IACjB,GAEDyI,EAAU,gBAAA,CAAiB,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACrD,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,IAAA,IAAQ,IACbA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAa,GACrCA,EAAO,WAAA,CAAY,IAAA,CAAK,UAAU,GAClCA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IAAA,CAAK,UAAA,IAAY,KACpC,IAAA,CAAK,WAAA,CAAYA;IACjB,GAEDyI,EAAU,eAAA,CAAgB,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACpD,IAAA,CAAK,WAAA,CAAYA,IACjB,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,SAAA,CAAU,MAAA,GAAO,IAC/B,IAAA,CAAK,eAAA,CAAgB,MAAA,GAAO,IAC5B,IAAA,CAAK,oBAAA,CAAqB,MAAA,GAAO,GACrCA,EAAO,YAAA,CAAa,IAAA,CAAK,SAAS,GAClCA,EAAO,YAAA,CAAa,IAAA,CAAK,eAAe,GACxCA,EAAO,YAAA,CAAa,IAAA,CAAK,oBAAoB,GAC7C,IAAA,CAAK,WAAA,CAAYA;IACjB,GAGDyI,EAAU,gBAAA,CAAiB,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QACrDA,EAAO,eAAA,CAAgB,IAAA,CAAK,IAAI;IAChC,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,KAAG,IAAE,IAAA,CAAK,OAAA,CAAQ,MAAA,EAC9B,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAA,EAAe,MAAM,IAC7CA,EAAO,WAAA,CAAY,IAAA,CAAK,uBAAuB,GAC/CA,EAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,MAAM;QACtC,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IAAK;YAC7C,IAAImU,IAAQ,IAAA,CAAK,OAAA,CAAQnU,EAAzB;YACA+I,EAAO,UAAA,CAAWoL,EAAM,YAAY,GACpCpL,EAAO,UAAA,CAAWoL,EAAM,uBAAuB;QAC/C;IACD,GAGD3C,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAI/I,GACAmU;QAKJ,IAFA,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IACPnU,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IACpCmU,IAAQ,IAAA,CAAK,OAAA,CAAQnU,EAAC,EAClB,IAAA,CAAK,OAAA,KAAY,KAChB,CAAA,IAAA,CAAK,cAAA,KAAmB,KAC3B,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEd,IAAA,CAAK,IAAA,IAAQmU,EAAM,IAAA,CAAK,MALzB,AAAA;QAiBD,IATA,IAAA,CAAK,WAAA,CAAYpL,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAA,EAAe,MAAM,IACzC,IAAA,CAAK,OAAA,KAAY,KACpBA,EAAO,WAAA,CAAY,IAAA,CAAK,cAAc,GAEnC,IAAA,CAAK,OAAA,IAAW,KACnBA,EAAO,WAAA,CAAY,IAAA,CAAK,gCAAgC,GAEzDA,EAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,MAAM,GACjC/I,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IACpCmU,IAAQ,IAAA,CAAK,OAAA,CAAQnU,EAAC,EAClB,IAAA,CAAK,OAAA,KAAY,KAChB,IAAA,CAAK,cAAA,KAAmB,KAC3B+I,EAAO,WAAA,CAAYoL,EAAM,kBAAkB,GAG7CA,EAAM,KAAA,CAAMpL;IAEb,GAIDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,KAAQ,KAAG,IAAA,CAAK,UAAA,CAAW,MAAA,EACvC,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,YAAY,GACpCA,EAAO,WAAA,CAAY,IAAA,CAAK,SAAS,GACjCA,EAAO,WAAA,CAAY,IAAA,CAAK,0BAA0B,GAClDA,EAAO,WAAA,CAAY,IAAA,CAAK,YAAY,GACpCA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IAAA,CAAK,UAAA,CAAW,MAAM;QACzC,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQA,IAAK;YAChD,IAAImF,IAAM,IAAA,CAAK,UAAA,CAAWnF,EAA1B;YACA+I,EAAO,WAAA,CAAY5D,EAAI,cAAA,IAAkB,KAAKA,EAAI,eAAe,GACjE4D,EAAO,WAAA,CAAY5D,EAAI,mBAAmB,GAC1C4D,EAAO,WAAA,CAAY5D,EAAI,eAAA,IAAmB,KAAKA,EAAI,QAAA,IAAY,KAAKA,EAAI,cAAc;QACtF;IACD,GAGDqM,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAE3C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,GACZ,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,OAAO,GAC/BA,EAAO,WAAA,CAAY;IACpB,GAEDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAE,IAAE,IAAA,CAAK,aAAA,CAAc,MAAA,EACnC,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc,MAAM,GAC5CA,EAAO,gBAAA,CAAiB,IAAA,CAAK,aAAa;IAC1C,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAI/I;QAMJ,IALA,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAE,KAAG,IAAA,CAAK,WAAA,CAAY,MAAA,EAClC,IAAA,CAAK,WAAA,CAAY+I,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY,MAAM,GACtC/I,IAAE,GAAGA,IAAE,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQA,IACnC+I,EAAO,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY/I,EAAE,GACtC+I,EAAO,WAAA,CAAY,IAAA,CAAK,iBAAA,CAAkB/I,EAAE,GAC5C+I,EAAO,WAAA,CAAY,IAAA,CAAK,wBAAA,CAAyB/I,EAAE;IAEpD,GAGDwR,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAI/I;QAOJ,IANA,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,GACZ,IAAA,CAAK,WAAA,CAAY+I,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,MAAM,GACtC,IAAA,CAAK,IAAA,IAAQ,GACR/I,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IACpC,IAAA,CAAK,OAAA,CAAQA,EAAC,CAAE,KAAA,CAAM+I,IACtB,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,OAAA,CAAQ/I,EAAC,CAAE,IAD7B;QAIDqD,EAAI,KAAA,CAAM,aAAa,mBAAiB,IAAA,CAAK,IAAA,GAAK,oBAAkB,IAAA,CAAK,IAAI,GAC7E0F,EAAO,YAAA,CAAa,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,IAAI;IAChD,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAI/I;QAMJ,IALA,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAE,IAAE,IAAA,CAAK,uBAAA,CAAwB,MAAA,EAC7C,IAAA,CAAK,WAAA,CAAY+I,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,uBAAA,CAAwB,MAAM,GAClD/I,IAAE,GAAGA,IAAE,IAAA,CAAK,uBAAA,CAAwB,MAAA,EAAQA,IAC/C+I,EAAO,WAAA,CAAY,IAAA,CAAK,uBAAA,CAAwB/I,EAAE,GAClD+I,EAAO,WAAA,CAAY,IAAA,CAAK,mBAAA,CAAoB/I,EAAE;IAE/C,GAGDwR,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAE,IAAE,IAAA,CAAK,cAAA,CAAe,MAAA,EACpC,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,cAAA,CAAe,MAAM,GAC7CA,EAAO,gBAAA,CAAiB,IAAA,CAAK,cAAc;IAC3C,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAI/I,GACA8X,IAAW,CADf;QAIA,IAFA,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACT,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,GAE9B,IADA9X,IAAI,GACGA,IAAE,IAAI,IAAA,CAAK,YAAA,CAAa,MAA/B,EACC,IAAI,IAAA,CAAK,YAAA,CAAaA,IAAE,EAAC,KAAO,IAAA,CAAK,YAAA,CAAa,EAAC,EAAG;YACrD8X,IAAW,CAAX;YACA;QACJ,OACI9X;aAIF8X,IAAW,CAAX;QAED,IAAA,CAAK,IAAA,GAAO,GACPA,KACJ,CAAA,IAAA,CAAK,IAAA,IAAQ,IAAE,IAAA,CAAK,YAAA,CAAa,MAAA,AAAA,GAElC,IAAA,CAAK,WAAA,CAAY/O,IACZ+O,IAGJ/O,EAAO,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,EAAE,IAFvCA,EAAO,WAAA,CAAY,IAIpBA,EAAO,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,MAAM,GACtC+O,KACJ/O,EAAO,gBAAA,CAAiB,IAAA,CAAK,YAAY;IAE1C,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAI/I;QAMJ,IALA,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAE,IAAE,IAAA,CAAK,aAAA,CAAc,MAAA,EACnC,IAAA,CAAK,WAAA,CAAY+I,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc,MAAM,GACxC/I,IAAE,GAAGA,IAAE,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQA,IACrC+I,EAAO,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc/I,EAAE,GACxC+I,EAAO,WAAA,CAAY,IAAA,CAAK,aAAA,CAAc/I,EAAE;IAEzC,GAGDwR,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAIgP,IAAa,KAAK,GAAA,CAAI,GAAG,MAAM;QAEnC,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,mBAAA,GAAsBA,IAAa,IAAI,GAC3D,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,GACR,IAAA,CAAK,OAAA,KAAY,KACpB,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEd,IAAA,CAAK,WAAA,CAAYhP,IACb,IAAA,CAAK,OAAA,KAAY,IACpBA,EAAO,WAAA,CAAY,IAAA,CAAK,mBAAmB,IAE3CA,EAAO,WAAA,CAAY,IAAA,CAAK,mBAAmB;IAE5C,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,IAAA,GAAO,GACR,IAAA,CAAK,KAAA,GAAQyI,EAAU,0BAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEV,IAAA,CAAK,KAAA,GAAQA,EAAU,qBAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEV,IAAA,CAAK,KAAA,GAAQA,EAAU,oBAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEV,IAAA,CAAK,KAAA,GAAQA,EAAU,qBAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEV,IAAA,CAAK,KAAA,GAAQA,EAAU,sBAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEd,IAAA,CAAK,WAAA,CAAYzI,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,QAAQ,GAC5B,IAAA,CAAK,KAAA,GAAQyI,EAAU,0BAAA,IAC1BzI,EAAO,WAAA,CAAY,IAAA,CAAK,gBAAgB,GAErC,IAAA,CAAK,KAAA,GAAQyI,EAAU,qBAAA,IAC1BzI,EAAO,WAAA,CAAY,IAAA,CAAK,gCAAgC,GAErD,IAAA,CAAK,KAAA,GAAQyI,EAAU,oBAAA,IAC1BzI,EAAO,WAAA,CAAY,IAAA,CAAK,uBAAuB,GAE5C,IAAA,CAAK,KAAA,GAAQyI,EAAU,qBAAA,IAC1BzI,EAAO,WAAA,CAAY,IAAA,CAAK,mBAAmB,GAExC,IAAA,CAAK,KAAA,GAAQyI,EAAU,sBAAA,IAC1BzI,EAAO,WAAA,CAAY,IAAA,CAAK,oBAAoB;IAE7C,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GAEf,IAAA,CAAK,IAAA,GAAO,IACZ,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,aAAa,GACrCA,EAAO,WAAA,CAAY,IAAA,CAAK,iBAAiB,GACzCA,EAAO,WAAA,CAAY,IAAA,CAAK,QAAQ,GAChCA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IAAA,CAAK,QAAQ,GAChCA,EAAO,WAAA,CAAY,IACnBA,EAAO,WAAA,CAAY,IACnBA,EAAO,UAAA,CAAW,IAAA,CAAK,KAAK,GAC5BA,EAAO,UAAA,CAAW,IAAA,CAAK,eAAe,GACtCA,EAAO,UAAA,CAAW,IAAA,CAAK,MAAA,IAAQ,IAC/BA,EAAO,WAAA,CAAY,IACnBA,EAAO,eAAA,CAAgB,IAAA,CAAK,MAAM,GAClCA,EAAO,WAAA,CAAY,IAAA,CAAK,KAAK,GAC7BA,EAAO,WAAA,CAAY,IAAA,CAAK,MAAM;IAC9B,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IACZ,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,QAAQ,GAChCA,EAAO,WAAA,CAAY,IAAA,CAAK,gCAAgC,GACxDA,EAAO,WAAA,CAAY,IAAA,CAAK,uBAAuB,GAC/CA,EAAO,WAAA,CAAY,IAAA,CAAK,mBAAmB,GAC3CA,EAAO,WAAA,CAAY,IAAA,CAAK,oBAAoB;IAC5C,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,IAAA,GAAO,GACR,IAAA,CAAK,KAAA,GAAQyI,EAAU,sBAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEV,IAAA,CAAK,KAAA,GAAQA,EAAU,qBAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEV,IAAA,CAAK,KAAA,GAAQA,EAAU,mBAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,IAAE,IAAA,CAAK,eAAA,CAAgB,MAAA,AAAA,GAEjC,IAAA,CAAK,KAAA,GAAQA,EAAU,eAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,IAAE,IAAA,CAAK,WAAA,CAAY,MAAA,AAAA,GAE7B,IAAA,CAAK,KAAA,GAAQA,EAAU,gBAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,IAAE,IAAA,CAAK,YAAA,CAAa,MAAA,AAAA,GAE9B,IAAA,CAAK,KAAA,GAAQA,EAAU,qBAAA,IAC1B,CAAA,IAAA,CAAK,IAAA,IAAQ,IAAE,IAAA,CAAK,8BAAA,CAA+B,MAAA,AAAA,GAEpD,IAAA,CAAK,WAAA,CAAYzI,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,YAAY,GAChC,IAAA,CAAK,KAAA,GAAQyI,EAAU,sBAAA,IAC1B,CAAA,IAAA,CAAK,oBAAA,GAAuBzI,EAAO,WAAA,IACnCA,EAAO,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA,GAE/B,IAAA,CAAK,KAAA,GAAQyI,EAAU,qBAAA,IAC1BzI,EAAO,WAAA,CAAY,IAAA,CAAK,kBAAkB;QAE3C,IAAA,IAAS/I,IAAI,GAAGA,IAAI,IAAA,CAAK,YAAA,EAAcA,IAClC,IAAA,CAAK,KAAA,GAAQwR,EAAU,mBAAA,IAC1BzI,EAAO,WAAA,CAAY,IAAA,CAAK,eAAA,CAAgB/I,EAAE,GAEvC,IAAA,CAAK,KAAA,GAAQwR,EAAU,eAAA,IAC1BzI,EAAO,WAAA,CAAY,IAAA,CAAK,WAAA,CAAY/I,EAAE,GAEnC,IAAA,CAAK,KAAA,GAAQwR,EAAU,gBAAA,IAC1BzI,EAAO,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa/I,EAAE,GAEpC,IAAA,CAAK,KAAA,GAAQwR,EAAU,qBAAA,IACtB,CAAA,IAAA,CAAK,OAAA,KAAY,IACpBzI,EAAO,WAAA,CAAY,IAAA,CAAK,8BAAA,CAA+B/I,EAAE,IAEzD+I,EAAO,UAAA,CAAW,IAAA,CAAK,8BAAA,CAA+B/I,EAAE,CAAA;IAI3D,GAGDwR,CAAAA,CAAU,UAAS,CAAE,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC/C,IAAA,CAAK,OAAA,GAAU,GACX,IAAA,CAAK,QAAA,GACR,CAAA,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,QAAA,CAAS,MAAA,GAAO,CAAA,IAEjC,CAAA,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,CAAA,GAEb,IAAA,CAAK,WAAA,CAAYA,IACb,IAAA,CAAK,QAAA,IACRA,EAAO,YAAA,CAAa,IAAA,CAAK,QAAQ;IAElC,GAGDyI,CAAAA,CAAU,UAAS,CAAE,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAC/C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAO,IAAG,CAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,MAAA,GAAO,IAAI,CAAA,GACzE,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,YAAA,CAAa,IAAA,CAAK,IAAI,GACzB,IAAA,CAAK,QAAA,IACRA,EAAO,YAAA,CAAa,IAAA,CAAK,QAAQ;IAElC,GAGDyI,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAASzI,CAAAA;QAE5C,IAAA,CAAK,OAAA,GAAU,GACf,IAAA,CAAK,KAAA,GAAQ,GACb,IAAA,CAAK,IAAA,GAAO,GACZ,IAAA,CAAK,WAAA,CAAYA,IACjBA,EAAO,WAAA,CAAY,IAAA,CAAK,YAAY,GACpCA,EAAO,gBAAA,CAAiB,IAAA,CAAK,OAAO;IACpC,GAODyI,EAAU,OAAA,CAAQ,SAAA,CAAU,MAAA,GAAS,SAASxM,CAAAA;QAC7C,IAAIhF,GAAGU,GAAGC;QAEV,IADAA,IAAI,GACCX,IAAI,GAAGA,IAAI,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQA,IAC1C,IAAKU,IAAI,GAAGA,IAAI,IAAA,CAAK,aAAA,CAAcV,EAAC,EAAGU,IACtCsE,CAAAA,CAAQrE,EAAC,CAAE,GAAA,GAAMqE,CAAAA,CAAQrE,EAAC,CAAE,GAAA,GAAM,IAAA,CAAK,cAAA,CAAeX,EAAC,EACvDW;IAGF,GAED6Q,EAAU,OAAA,CAAQ,SAAA,CAAU,MAAA,GAAS,SAASxM,CAAAA;QAC7C,IAAIhF,GAAGU,GAAGC;QAEV,IADAA,IAAI,GACCX,IAAI,GAAGA,IAAI,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQA,IAC1C,IAAKU,IAAI,GAAGA,IAAI,IAAA,CAAK,aAAA,CAAcV,EAAC,EAAGU,IAClCC,MAAM,IACTqE,CAAAA,CAAQrE,EAAC,CAAE,GAAA,GAAM,IAEjBqE,CAAAA,CAAQrE,EAAC,CAAE,GAAA,GAAMqE,CAAAA,CAAQrE,IAAE,EAAC,CAAE,GAAA,GAAM,IAAA,CAAK,aAAA,CAAcX,EAAC,EAEzDW;IAGF,GAED6Q,EAAU,OAAA,CAAQ,SAAA,CAAU,MAAA,GAAS,SAASxM,CAAAA;QAC7C,IAAIhF;QACJ,IAAKA,IAAI,GAAGA,IAAI,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQA,IAC1CgF,CAAAA,CAAQhF,EAAC,CAAE,MAAA,GAAS,IAAA,CAAK,aAAA,CAAcA,EAAvC;IAED,GAEDwR,EAAU,OAAA,CAAQ,SAAA,CAAU,MAAA,GAAS,SAASxM,CAAAA;QAC7C,IAAIhF,GAAGU,GAAGC,GAAGnB,GAAGyB;QAGhB,IAFAzB,IAAI,GACJyB,IAAI,GACCjB,IAAI,GAAGA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQA,IACxC,IAAKU,IAAI,GAAGA,IAAKV,CAAAA,IAAE,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,IAAA,CAAK,WAAA,CAAYA,IAAE,EAAC,GAAI,IAAA,CAAA,GAAWU,IAEnF,IADAO,KACKN,IAAI,GAAGA,IAAI,IAAA,CAAK,iBAAA,CAAkBX,EAAC,EAAGW,IAAK;YAC/C,IAAIqE,CAAAA,CAAQxF,EAAZ,EACCwF,CAAAA,CAAQxF,EAAC,CAAE,iBAAA,GAAoB,IAAA,CAAK,wBAAA,CAAyBQ,EAAC,EAC9DgF,CAAAA,CAAQxF,EAAC,CAAE,WAAA,GAAcyB;iBAEzB;YAEDzB;QACA;IAGH,GAEDgS,EAAU,OAAA,CAAQ,SAAA,CAAU,MAAA,GAAS,SAASxM,CAAAA;QAC7C,IAAIhF;QACJ,IAAKA,IAAI,GAAGA,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQA,IACzCgF,CAAAA,CAAQhF,EAAC,CAAE,IAAA,GAAO,IAAA,CAAK,YAAA,CAAaA,EAApC;IAED,GAGDwR,EAAU,qBAAA,GAAwB;QAAE;QAAS;QAAW;QAAc;QAC9D;QAAS;QAAc;QAAW;QAClC;QAAe;QAAU;QAAa;QACtC;QAAO;KAAQ,EAEvBA,EAAU,+BAAA,GAAkC;QAAE;QAAqB;QAAU;QAAW;QAAiB;QAAiB;QAC1H;QAAe;QAAqB;QAAgB;QAAiB;QAAkB;QAA4B;KAAA,EAEnHA,EAAU,cAAA,GAAiB,SAASwG,CAAAA,EAAOC,CAAAA;QAC1C,IAAID,KAAS,CAACC,GAAO,OAAO,CAA5B;QACA,IAAI3F;QACJ,IAAKA,KAAQ0F,EACZ,IAAI,CAAAxG,CAAAA,EAAU,qBAAA,CAAsB,OAAA,CAAQc,KAAQ,EAAA,GAI7C;YAAA,IAAI0F,CAAAA,CAAM1F,EAAI,YAAad,EAAU,GAAA,IAAOyG,CAAAA,CAAM3F,EAAI,YAAad,EAAU,GAA7E,EACN;YACM,IAAI,OAAOwG,CAAAA,CAAM1F,EAAI,GAAM,OAAe,OAAO2F,CAAAA,CAAM3F,EAAI,GAAM,KACvE;YACM,IAAI,OAAO0F,CAAAA,CAAM1F,EAAI,IAAM,cAAc,OAAO2F,CAAAA,CAAM3F,EAAI,IAAM,YACtE;YACM,IACL0F,EAAM,WAAA,IAAeA,EAAM,WAAA,CAAY,OAAA,CAAQ1F,EAAK,KAAA,CAAM,GAAE,MAAM,MAClE2F,EAAM,WAAA,IAAeA,EAAM,WAAA,CAAY,OAAA,CAAQ3F,EAAK,KAAA,CAAM,GAAE,MAAM,IACnE;YAEA,IAAIA,MAAS,UAAUA,MAAS,WAAWA,MAAS,UAAUA,MAAS,mBAAmBA,MAAS,qBAClG;YACM,IAAId,EAAU,+BAAA,CAAgC,OAAA,CAAQc,KAAQ,IACpE;YAEA,IAAI0F,CAAAA,CAAM1F,EAAI,KAAM2F,CAAAA,CAAM3F,EAA1B,EACC,OAAO,CAAP;QAAO;QAKX,OAAO,CAAP;IACA,GAEDd,EAAU,QAAA,GAAW,SAASwG,CAAAA,EAAOC,CAAAA;QACpC,IAAI,CAACzG,EAAU,cAAA,CAAewG,GAAOC,IACpC,OAAO,CAAP;QAED,IAAA,IAASvX,IAAI,GAAGA,IAAI8Q,EAAU,qBAAA,CAAsB,MAAA,EAAQ9Q,IAAK;YAChE,IAAI0R,IAAOZ,EAAU,qBAAA,CAAsB9Q,EAA3C;YACA,IAAIsX,CAAAA,CAAM5F,EAAI,IAAK6F,CAAAA,CAAM7F,EAAI,IACxB,CAACZ,EAAU,QAAA,CAASwG,CAAAA,CAAM5F,EAAI,EAAG6F,CAAAA,CAAM7F,EAAK,GAC/C,OAAO,CAAP;QAGF;QACD,OAAO,CAAP;IACA;IA4CD,IAAI8F,IAAuB,YAC1B;IAEDA,EAAqB,SAAA,CAAU,WAAA,GAAc,SAASpS,CAAAA;QACrD,IAAIiH,IAAM,CAAA,GACN/M;QACJ+M,EAAI,SAAA,GAAY,EAAhB;QACA,IAAIhE,IAAS,IAAI0D,EAAa3G,EAAO,IAAA,CAAK,MAAM;QAChD,IAAI,CAACA,EAAO,UAAA,IAAcA,EAAO,UAAA,CAAW,MAAA,KAAW,GACtDiH,EAAI,cAAA,GAAiBhE,EAAO,UAAA,CAAWjD,EAAO,IAAA,CAAK,MAAM;aAAA,IAEzDiH,EAAI,cAAA,GAAiBhE,EAAO,UAAA,CAAWjD,EAAO,UAAA,CAAW,EAAC,CAAE,IAAI,GAC5DA,EAAO,UAAA,CAAW,MAAA,GAAS,GAC9B,IAAK9F,IAAI,GAAGA,IAAI8F,EAAO,UAAA,CAAW,MAAA,EAAQ9F,IACzC+M,EAAI,SAAA,CAAU/M,EAAC,GAAI+I,EAAO,cAAA,CAAejD,EAAO,UAAA,CAAW9F,EAAC,CAAE,IAAI;QAIrE,OAAI,OAAQ,YAAe,OAC1B+M,CAAAA,EAAI,QAAA,GAAY,IAAI,YAAa,eAAA,CAAgBA,EAAI,cAAA,EAAgB,kBAAiB,GAEhFA;IACP;IAED,IAAIoL,IAAgB,YACnB;IAEDA,EAAc,SAAA,CAAU,WAAA,GAAc,SAASrS,CAAAA;QAC9C,IAAIsS,GACArP,IAAS,IAAI0D,EAAa3G,EAAO,IAAA,CAAK,MAAM;QAChD,OAAAsS,IAAarP,EAAO,UAAA,CAAWjD,EAAO,IAAA,CAAK,MAAM,GAC1CsS;IACP,GAEDD,EAAc,SAAA,CAAU,WAAA,GAAc,SAASvP,CAAAA;QAC9C,IAAIwP,GACArP,IAAS,IAAI0D,EAAa7D,EAAK,MAAM;QACzC,OAAAG,EAAO,UAAA,IACPqP,IAAarP,EAAO,WAAA,IACbqP;IACP,GAGA5L,EAAA,oBAAA,GAA+B0L,GAC/B1L,EAAA,aAAA,GAAwB2L;IAOzB,IAAIE,IAAU,SAAUtP,CAAAA;QAEvB,IAAA,CAAK,MAAA,GAASA,KAAU,IAAI+F,KAE5B,IAAA,CAAK,KAAA,GAAQ,EAAA,EAEb,IAAA,CAAK,KAAA,GAAQ,EAAA,EAEb,IAAA,CAAK,KAAA,GAAQ,EAAA,EAEb,IAAA,CAAK,aAAA,GAAgB,CAAA,GAErB,IAAA,CAAK,cAAA,GAAiB,CAAA,GAEtB,IAAA,CAAK,WAAA,GAAc,MAEnB,IAAA,CAAK,aAAA,GAAgB,CAAA,GAErB,IAAA,CAAK,OAAA,GAAU,MAEf,IAAA,CAAK,SAAA,GAAY,CAAA,GAEjB,IAAA,CAAK,SAAA,GAAY,MAEjB,IAAA,CAAK,SAAA,GAAY,MAEjB,IAAA,CAAK,OAAA,GAAU,MAEf,IAAA,CAAK,eAAA,GAAkB,CAAA,GAEvB,IAAA,CAAK,gBAAA,GAAmB,EAAA,EAExB,IAAA,CAAK,eAAA,GAAkB,EAAA,EAEvB,IAAA,CAAK,0BAAA,GAA6B,CAAA,GAElC,IAAA,CAAK,uBAAA,GAA0B,CAAA,GAE/B,IAAA,CAAK,cAAA,GAAiB,GAEtB,IAAA,CAAK,aAAA,GAAgB,CAAA,GAErB,IAAA,CAAK,MAAA,GAAS,MAEd,IAAA,CAAK,QAAA,GAAW,CA1ChB;IA2CA;IAEDuJ,EAAQ,SAAA,CAAU,iBAAA,GAAoB,SAASC,CAAAA,EAAIC,CAAAA,EAAMC,CAAAA;QACxD,IAAIC,IAAO,IAAA,CAAK,YAAA,CAAaH;QAC7B,IAAIG,GAAM;YACT,IAAIC,IAAY,CAAA;YAChB,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAKA,IAC3BA,EAAU,EAAA,GAAKJ,GACfI,EAAU,IAAA,GAAOH,GACjBG,EAAU,IAAA,GAAOD,GACjBA,EAAK,UAAA,GAAa,GAClBC,EAAU,aAAA,GAAgB,MAC1BA,EAAU,UAAA,GAAa,KACvBA,EAAU,aAAA,GAAgB,CAAA,GACtBF,KACCA,CAAAA,EAAQ,SAAA,IAAWE,CAAAA,EAAU,UAAA,GAAaF,EAAQ,SAAA,AAAA,GAClDA,EAAQ,aAAA,IAAeE,CAAAA,EAAU,aAAA,GAAgBF,EAAQ,aAV9D,AAAA,CAAA;QAYA;IACD,GAEDH,EAAQ,SAAA,CAAU,mBAAA,GAAsB,SAASC,CAAAA;QAEhD,IAAA,IADIlI,IAAQ,IACHpQ,IAAI,GAAGA,IAAI,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQA,IAAK;YACtD,IAAI0Y,IAAY,IAAA,CAAK,gBAAA,CAAiB1Y,EAAtC;YACI0Y,EAAU,EAAA,IAAMJ,KACnBlI,CAAAA,IAAQpQ,CAAAA;QAET;QACGoQ,IAAQ,MACX,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAOA,GAAO;IAErC,GAEDiI,EAAQ,SAAA,CAAU,oBAAA,GAAuB,SAASC,CAAAA,EAAIC,CAAAA,EAAMC,CAAAA;QAC3D,IAAIC,IAAO,IAAA,CAAK,YAAA,CAAaH;QAC7B,IAAIG,GAAM;YACT,IAAIE,IAAe,CAAA;YACnB,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAKA,IAC1BA,EAAa,EAAA,GAAKL,GAClBK,EAAa,IAAA,GAAOJ,GACpBI,EAAa,IAAA,GAAOF,GACpBA,EAAK,UAAA,GAAa,GAClBE,EAAa,UAAA,GAAa,KAC1BA,EAAa,OAAA,GAAU,EAAA,EACnBH,KACCA,EAAQ,SAAA,IAAWG,CAAAA,EAAa,UAAA,GAAaH,EAAQ,SAR1D,AAAA;QAUA;IACD,GAEDH,EAAQ,SAAA,CAAU,sBAAA,GAAyB,SAASC,CAAAA;QAEnD,IAAA,IADIlI,IAAQ,IACHpQ,IAAI,GAAGA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAQA,IAAK;YACrD,IAAI2Y,IAAe,IAAA,CAAK,eAAA,CAAgB3Y,EAAxC;YACI2Y,EAAa,EAAA,IAAML,KACtBlI,CAAAA,IAAQpQ,CAAAA;QAET;QACGoQ,IAAQ,MACX,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAOA,GAAO;IAEpC,GAEDiI,EAAQ,SAAA,CAAU,KAAA,GAAQ;QAEzB,IAAIvF,GACAT,GACAuG,IAAsB,CAF1B;QAIA,IAAI,CAAA,CAAA,IAAA,CAAK,oBAAA,IACJ,CAAC,IAAA,CAAK,oBADX,EAAA,GAMA,OAEC,IAAI,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,iBAAA,IAAqB;YACvD,IAAI,IAAA,CAAK,qBAAT,IACC;YAEA;QAEJ,OAAA,IACO,IAAA,CAAK,iBAAA,IACR,IAAA,CAAK,iBAAA,IAEN9F,IAAMtB,EAAU,WAAA,CAAY,IAAA,CAAK,MAAA,EAAQoH,IACrC9F,EAAI,IAAA,KAAStB,EAAU,mBAP1B;YAQA,IAAI,IAAA,CAAK,oBAAA,EAAsB;gBAC9B,IAAI,IAAA,CAAK,oBAAA,CAAqBsB,IAC7B;gBAEA;YAEN,OACK;eAEK;YACN,IAAID;YAOJ,OALAR,IAAMS,EAAI,GAAA,EACVD,IAAYR,EAAI,IAAA,KAAS,SAASA,EAAI,IAAA,GAAOA,EAAI,IAAA,EAEjD,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,IAERQ;gBACP,KAAK;oBACJ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKR;oBAChB;gBACD,KAAK;oBACJ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA;oBAChB;gBACD,KAAK;oBACJ,IAAA,CAAK,cAAA,GAAiB,CAAA,GAClB,IAAA,CAAK,KAAA,CAAM,MAAA,KAAW,KACzB,CAAA,IAAA,CAAK,aAAA,GAAgB,CAFtB,CAAA;gBAMD;oBACK,IAAA,CAAKQ,EAAQ,KAAM,KAAA,KACtBxP,EAAI,IAAA,CAAK,WAAW,4BAA0BwP,IAAS,qCAExD,IAAA,CAAKA,EAAQ,GAAIR;oBACjB;YACD;YACG,IAAA,CAAK,eAAA,IACR,IAAA,CAAK,eAAA,CAAgBA,GAAKS;QAE3B;IAGH,GAEDuF,EAAQ,SAAA,CAAU,WAAA,GAAc,SAAU5P,CAAAA;QACzC,IAAIA,KAAO,MACV,MAAM;QAEP,IAAIA,EAAG,SAAA,KAAc,KAArB,GACC,MAAM;QAEP,OAAIA,EAAG,UAAA,KAAe,IACrBpF,CAAAA,EAAI,IAAA,CAAK,WAAW,uCAAqCoF,EAAG,SAAA,GAAU,MACtE,IAAA,CAAK,MAAA,CAAO,cAAA,IACL,CAAA,CAAA,IAERpF,CAAAA,EAAI,IAAA,CAAK,WAAW,mCAAiCoF,EAAG,SAAA,GAAU,MAGlEA,EAAG,SAAA,GAAY,GACf,IAAA,CAAK,MAAA,CAAO,YAAA,CAAaA,IACzB,IAAA,CAAK,MAAA,CAAO,cAAA,IAEP,IAAA,CAAK,MAAA,CAAO,WAAA,KAIV,CAAA,IAHNpF,CAAAA,EAAI,IAAA,CAAK,WAAW,+BACb,CAdR,CAAA,CAAA;IAiBA,GAIDgV,EAAQ,SAAA,CAAU,YAAA,GAAe,SAAS5P,CAAAA,EAAIoQ,CAAAA;QAC7C,IAAIC;QACJ,IAAK,IAAA,CAAK,WAAA,CAAYrQ,IAKtB,OAAA,IAAA,CAAK,KAAA,IAGD,IAAA,CAAK,cAAA,IAAkB,CAAC,IAAA,CAAK,aAAA,IAChC,CAAA,IAAA,CAAK,aAAA,GAAgB,CAAA,GACjB,IAAA,CAAK,WAAA,IAAa,IAAA,CAAK,WAAA,EAAW,GAGnC,IAAA,CAAK,IAAA,GAIH,CAAA,IAAA,CAAK,eAAA,IACT,CAAA,IAAA,CAAK,gBAAA,IACL,IAAA,CAAK,eAAA,GAAkB,CAAA,CAAA,GAIxB,IAAA,CAAK,iBAAA,IAID,IAAA,CAAK,OAAA,IAAW,CAAC,IAAA,CAAK,SAAA,IACzB,CAAA,IAAA,CAAK,SAAA,GAAY,CAAA,GACjB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAA,GAAS,GAI5B,IAAA,CAAK,cAAA,CAAeoQ,IAGhB,IAAA,CAAK,gBAAA,GACRC,CAAAA,IAAgB,IAAA,CAAK,gBAAA,EACrB,IAAA,CAAK,gBAAA,GAAmB,KAAA,CAAA,IAExBA,IAAgB,IAAA,CAAK,iBAAA,EAElB,IAAA,CAAK,MAAA,CAAO,uBAAA,IACfA,CAAAA,IAAgB,IAAA,CAAK,MAAA,CAAO,uBAAA,CAAwBA,EAAa,CAAA,IAG9D,IAAA,CAAK,iBAAA,GAGRA,IAAgB,IAAA,CAAK,iBAAA,GAGrBA,IAAgB,GAGd,IAAA,CAAK,IAAA,IACJ,IAAA,CAAK,MAAA,IAAU,CAAC,IAAA,CAAK,QAAA,IACxB,CAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,GACrB,IAAA,CAAK,QAAA,GAAW,CAAA,CAAA,GAGd,IAAA,CAAK,IAAA,IACJ,CAAA,IAAA,CAAK,eAAA,IAAmB,CAAC,IAAA,CAAK,aAAA,IACjC,CAAA,IAAA,CAAK,eAAA,IACL,IAAA,CAAK,aAAA,GAAgB,CAAA,CAAA,GAElB,IAAA,CAAK,YAAA,IACR,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA,GAI3B,IAAA,CAAK,MAAA,CAAO,YAAA,IACfzV,CAAAA,EAAI,IAAA,CAAK,WAAW,wCAAsCoF,EAAG,SAAA,GAAU,kEAAgEqQ,IACvI,IAAA,CAAK,MAAA,CAAO,cAAA,IACZ,IAAA,CAAK,MAAA,CAAO,YAAA,IACZ,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe,CAAA,IAC3BzV,EAAI,IAAA,CAAK,WAAW,iCAA+B,IAAA,CAAK,0BAAA,GAA4B,GAE9EyV;IACP,GAEDT,EAAQ,SAAA,CAAU,OAAA,GAAU;QAC3B,IAAIrY,GAAGU,GACHqY,IAAQ,CAAA,GACRN,GACAO,GACA7T,GACA8T,GACAC,IAAAA,AAAS,aAAA,GAAA,IAAI,KAAK,wBAAwB,OAAA;QAE9C,IAAI,IAAA,CAAK,IAAT,EAsBC,IArBAH,EAAM,OAAA,GAAU,CAAA,GAChBA,EAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,EAChCA,EAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,SAAA,EACjCA,EAAM,YAAA,GAAgB,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQ,MACpCA,EAAM,YAAA,IAAgB,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,IACxCA,CAAAA,EAAM,iBAAA,GAAoB,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,iBAAA,AAAA,GAE/CA,EAAM,aAAA,GAAgB,IAAA,CAAK,aAAA,EAC3BA,EAAM,MAAA,GAAU,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQ,MAClCA,EAAM,MAAA,GAAS,EAAA,EACfA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,WAAW,GACvCA,EAAM,MAAA,GAASA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,iBAAiB,GAC9DA,EAAM,OAAA,GAAU,IAAI,KAAKG,IAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,aAAA,GAAc,MAC5DH,EAAM,QAAA,GAAW,IAAI,KAAKG,IAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,iBAAA,GAAkB,MACjEH,EAAM,MAAA,GAAS,EAAA,EACfA,EAAM,WAAA,GAAc,EAAA,EACpBA,EAAM,WAAA,GAAc,EAAA,EACpBA,EAAM,cAAA,GAAiB,EAAA,EACvBA,EAAM,cAAA,GAAiB,EAAA,EACvBA,EAAM,UAAA,GAAa,EAAA,EACnBA,EAAM,WAAA,GAAc,EAAA,EACf/Y,IAAI,GAAGA,IAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IAAK;YAQ5C,IAPAyY,IAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAMzY,EAAC,EACxBiZ,IAAcR,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,EAAC,EAChDO,IAAQ,CAAA,GACRD,EAAM,MAAA,CAAO,IAAA,CAAKC,IAClBA,EAAM,EAAA,GAAKP,EAAK,IAAA,CAAK,QAAA,EACrBO,EAAM,IAAA,GAAOP,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAC5BO,EAAM,UAAA,GAAa,EAAA,EACfP,EAAK,IAAT,EACC,IAAK/X,IAAI,GAAGA,IAAI+X,EAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ/X,IACvCyE,IAAM,CAAA,GACN6T,EAAM,UAAA,CAAW,IAAA,CAAK7T,IACtBA,EAAI,IAAA,GAAOsT,EAAK,IAAA,CAAK,KAAA,CAAM/X,EAAC,CAAE,IAAA,EAC9ByE,EAAI,SAAA,GAAYsT,EAAK,IAAA,CAAK,KAAA,CAAM/X,EAAC,CAAE,SAHnC;YAME+X,EAAK,IAAA,IACRO,CAAAA,EAAM,KAAA,GAAQP,EAAK,IAAA,CAAK,IAAA,CAAK,OAAA,AAAA,GAE9BO,EAAM,OAAA,GAAU,IAAI,KAAKE,IAAMT,EAAK,IAAA,CAAK,aAAA,GAAc,MACvDO,EAAM,QAAA,GAAW,IAAI,KAAKE,IAAMT,EAAK,IAAA,CAAK,iBAAA,GAAkB,MAC5DO,EAAM,cAAA,GAAiBP,EAAK,IAAA,CAAK,QAAA,EACjCO,EAAM,eAAA,GAAkBD,EAAM,SAAA,EAC9BC,EAAM,KAAA,GAAQP,EAAK,IAAA,CAAK,KAAA,EACxBO,EAAM,eAAA,GAAkBP,EAAK,IAAA,CAAK,eAAA,EAClCO,EAAM,MAAA,GAASP,EAAK,IAAA,CAAK,MAAA,EACzBO,EAAM,MAAA,GAASP,EAAK,IAAA,CAAK,MAAA,EACzBO,EAAM,WAAA,GAAcP,EAAK,IAAA,CAAK,KAAA,GAAO,OACrCO,EAAM,YAAA,GAAeP,EAAK,IAAA,CAAK,MAAA,GAAQ,OACvCO,EAAM,SAAA,GAAYP,EAAK,IAAA,CAAK,IAAA,CAAK,SAAA,EACjCO,EAAM,SAAA,GAAYP,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EACtCO,EAAM,QAAA,GAAWP,EAAK,IAAA,CAAK,IAAA,CAAK,QAAA,EAChCO,EAAM,gBAAA,GAAmBP,EAAK,gBAAA,EAC9BO,EAAM,KAAA,GAAQC,EAAY,QAAA,IAC1BD,EAAM,IAAA,GAAQP,EAAK,IAAA,IAAQA,EAAK,IAAA,CAAK,KAAA,CAAM,MAAA,GAASA,EAAK,IAAA,CAAK,KAAA,CAAM,EAAC,GAAI;gBAAE,WAAW;gBAAI,OAAO;YAAE,GACnGO,EAAM,QAAA,GAAYP,EAAK,IAAA,CAAK,IAAA,GAAOA,EAAK,IAAA,CAAK,IAAA,CAAK,iBAAA,GAAoBA,EAAK,IAAA,CAAK,IAAA,CAAK,cAAA,EACrFO,EAAM,UAAA,GAAaP,EAAK,OAAA,CAAQ,MAAA,EAChCO,EAAM,IAAA,GAAOP,EAAK,YAAA,EAClBO,EAAM,OAAA,GAAWA,EAAM,IAAA,GAAK,IAAEA,EAAM,SAAA,GAAWA,EAAM,gBAAA,EACjDC,EAAY,OAAA,KACfD,CAAAA,EAAM,IAAA,GAAO,SACbD,EAAM,WAAA,CAAY,IAAA,CAAKC,IACvBA,EAAM,KAAA,GAAQ,CAAA,GACdA,EAAM,KAAA,CAAM,WAAA,GAAcC,EAAY,aAAA,IACtCD,EAAM,KAAA,CAAM,aAAA,GAAgBC,EAAY,eAAA,IACxCD,EAAM,KAAA,CAAM,WAAA,GAAcC,EAAY,aAAA,EAAa,IACzCA,EAAY,OAAA,KACtBD,CAAAA,EAAM,IAAA,GAAO,SACbD,EAAM,WAAA,CAAY,IAAA,CAAKC,IACvBA,EAAM,KAAA,GAAQ,CAAA,GACdA,EAAM,KAAA,CAAM,KAAA,GAAQC,EAAY,QAAA,IAChCD,EAAM,KAAA,CAAM,MAAA,GAASC,EAAY,SAAA,EAAS,IAChCA,EAAY,UAAA,KACtBD,CAAAA,EAAM,IAAA,GAAO,aACbD,EAAM,cAAA,CAAe,IAAA,CAAKC,EAAK,IACrBC,EAAY,MAAA,KACtBD,CAAAA,EAAM,IAAA,GAAO,YACbD,EAAM,UAAA,CAAW,IAAA,CAAKC,EAAK,IACjBC,EAAY,UAAA,KACtBD,CAAAA,EAAM,IAAA,GAAO,YACbD,EAAM,cAAA,CAAe,IAAA,CAAKC,EAAK,IAE/BA,CAAAA,EAAM,IAAA,GAAO,YACbD,EAAM,WAAA,CAAY,IAAA,CAAKC,EAAK;QAE7B;aAEDD,EAAM,OAAA,GAAU,CAAhB;QAGD,IADAA,EAAM,IAAA,GAAO,IACTA,EAAM,OAAA,IAAWA,EAAM,MAAA,EAAQ;YAQlC,IAPIA,EAAM,WAAA,IAAeA,EAAM,WAAA,CAAY,MAAA,GAAS,IACnDA,EAAM,IAAA,IAAQ,wBACJA,EAAM,WAAA,IAAeA,EAAM,WAAA,CAAY,MAAA,GAAS,IAC1DA,EAAM,IAAA,IAAQ,wBAEdA,EAAM,IAAA,IAAQ,6BAEV/Y,IAAI,GAAGA,IAAI+Y,EAAM,MAAA,CAAO,MAAA,EAAQ/Y,IAChCA,MAAM,KAAG+Y,CAAAA,EAAM,IAAA,IAAQ,GAAA,GAC3BA,EAAM,IAAA,IAAOA,EAAM,MAAA,CAAO/Y,EAAC,CAAE,KAD7B;YAGD+Y,EAAM,IAAA,IAAQ,iBACdA,EAAM,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,iBAAA,CAAkB,IAAA,IAC1CA,EAAM,IAAA,IAAQ;QACd;QACD,OAAOA;IACP,GAEDV,EAAQ,SAAA,CAAU,6BAAA,GAAgC,SAAUvS,CAAAA;QACtDA,KAGD,CAAA,IAAA,CAAK,gBAAA,GACR,IAAA,CAAK,gBAAA,GAAmB,KAAK,GAAA,CAAIA,EAAO,MAAA,GAAOA,EAAO,WAAA,EAAY,IAAA,CAAK,gBAAgB,IAEvF,IAAA,CAAK,gBAAA,GAAmBA,EAAO,MAAA,GAAOA,EAAO,WAN9C,AAAA;IAQA,GAEDuS,EAAQ,SAAA,CAAU,cAAA,GAAiB,SAASQ,CAAAA;QAC3C,IAAI7Y,GACAyY;QACJ,IAAK,IAAA,CAAK,uBAAA,EAKV;YAAA,IAAI,IAAA,CAAK,0BAAA,IAA8B,IAAA,CAAK,SAAA,KAAc,MACzD,IAAKzY,IAAI,GAAGA,IAAI,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQA,IAAK;gBAClD,IAAImZ,IAAW,IAAA,CAAK,gBAAA,CAAiBnZ,EAArC;gBAEA,IADAyY,IAAOU,EAAS,IAAA,EACTV,EAAK,UAAA,GAAaA,EAAK,OAAA,CAAQ,MAAA,IAAU,IAAA,CAAK,uBAAA,EAAyB;oBAG7EpV,EAAI,KAAA,CAAM,WAAW,uCAAqC8V,EAAS,EAAA,GAAI,iBAAeV,EAAK,UAAU;oBACrG,IAAIW,IAAS,IAAA,CAAK,cAAA,CAAeD,EAAS,EAAA,EAAIV,EAAK,UAAA,EAAYU,EAAS,aAAa;oBACrF,IAAIC,GACHD,EAAS,aAAA,GAAgBC,GACzBX,EAAK,UADL;yBAIA;oBAID,IAAA,AAAIA,CAAAA,EAAK,UAAA,GAAaU,EAAS,UAAA,KAAe,KAAMN,KAAQJ,EAAK,UAAA,IAAcA,EAAK,OAAA,CAAQ,MAAA,AAAA,KAC3FpV,CAAAA,EAAI,IAAA,CAAK,WAAW,uCAAqC8V,EAAS,EAAA,GAAG,mBAAiB,KAAK,GAAA,CAAI,GAAEV,EAAK,UAAA,GAAWU,EAAS,UAAU,IAAE,MAAKV,CAAAA,EAAK,UAAA,GAAW,CAAA,IAAG,MAC9JpV,EAAI,IAAA,CAAK,WAAW,iCAA+B,IAAA,CAAK,0BAAA,KACpD,IAAA,CAAK,SAAA,IACR,IAAA,CAAK,SAAA,CAAU8V,EAAS,EAAA,EAAIA,EAAS,IAAA,EAAMA,EAAS,aAAA,CAAc,MAAA,EAAQV,EAAK,UAAA,EAAaI,KAAQJ,EAAK,UAAA,IAAcA,EAAK,OAAA,CAAQ,MAAA,GAGrIU,EAAS,aAAA,GAAgB,MACrBA,MAAa,IAAA,CAAK,gBAAA,CAAiBnZ,EARxC,AAQyC,GAEvC;gBAGF;YACD;YAGF,IAAI,IAAA,CAAK,SAAA,KAAc,MAGtB,IAAKA,IAAI,GAAGA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAQA,IAAK;gBACjD,IAAIqZ,IAAc,IAAA,CAAK,eAAA,CAAgBrZ,EAAvC;gBAEA,IADAyY,IAAOY,EAAY,IAAA,EACZZ,EAAK,UAAA,GAAaA,EAAK,OAAA,CAAQ,MAAA,IAAU,IAAA,CAAK,uBAAA,EAAyB;oBAC7EpV,EAAI,KAAA,CAAM,WAAW,yBAAuBgW,EAAY,EAAA,GAAI,cAAYZ,EAAK,UAAU;oBACvF,IAAI3S,IAAS,IAAA,CAAK,SAAA,CAAU2S,GAAMA,EAAK,UAAU;oBACjD,IAAI3S,GACH2S,EAAK,UAAA,IACLY,EAAY,OAAA,CAAQ,IAAA,CAAKvT;yBACnB;wBACN,IAAA,CAAK,6BAAA,CAA8B2S,EAAK,OAAA,CAAQA,EAAK,UAAU,CAAC;wBAChE;oBACA;oBACD,IAAA,AAAIA,CAAAA,EAAK,UAAA,GAAaY,EAAY,UAAA,KAAe,KAAKZ,EAAK,UAAA,IAAcA,EAAK,OAAA,CAAQ,MAAA,AAAA,KACrFpV,CAAAA,EAAI,KAAA,CAAM,WAAW,+BAA6BgW,EAAY,EAAA,GAAG,iBAAeZ,EAAK,UAAU,GAC3F,IAAA,CAAK,SAAA,IACR,IAAA,CAAK,SAAA,CAAUY,EAAY,EAAA,EAAIA,EAAY,IAAA,EAAMA,EAAY,OAAO,GAErEA,EAAY,OAAA,GAAU,EAAA,EAClBA,MAAgB,IAAA,CAAK,eAAA,CAAgBrZ,EAN1C,AAM2C,GAEzC;gBAGF;YACD;QAAA;IAEF,GAGDqY,EAAQ,SAAA,CAAU,MAAA,GAAS,SAASrP,CAAAA;QAClC,IAAIoQ,IAAS,IAAA,CAAK,QAAA,CAASpQ,GAAM,CAAA;QACjC,OAAQoQ,EAAO,MAAA,GAASA,CAAAA,CAAO,EAAC,GAAI;IACrC,GAEDf,EAAQ,SAAA,CAAU,QAAA,GAAW,SAASrP,CAAAA,EAAMsQ,CAAAA;QAC1C,IAAIF,IAAS,EAAb;QACA,OAAAf,EAAQ,MAAA,CAAO,IAAA,CAAK,IAAA,EAAMrP,GAAMoQ,GAAQE,IACjCF;IACR,GAEDf,EAAQ,MAAA,GAAS,SAASrP,CAAAA,EAAMoQ,CAAAA,EAAQE,CAAAA;QAClC,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,IAAQtQ,KAAMoQ,EAAO,IAAA,CAAK,IAAI;QACpD,IAAA,IAAS/G,KAAO,IAAA,CAAK,KAAA,CAAO;YAC1B,IAAI+G,EAAO,MAAA,IAAUE,GAArB;YACAjB,EAAQ,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAMhG,EAAG,EAAGrJ,GAAMoQ,GAAQE;QACpD;IACF,GAEDjB,EAAQ,SAAA,CAAU,mBAAA,GAAsB,SAASkB,CAAAA;QAChD,IAAIP,IAAQ,IAAA,CAAK,YAAA,CAAaO;QAC9B,IAAIP,GACH,OAAOA,EAAM,OAAb;IAID,GAEDX,EAAQ,SAAA,CAAU,cAAA,GAAiB,SAASkB,CAAAA,EAAUxN,CAAAA;QACrD,IAAIiN,IAAQ,IAAA,CAAK,YAAA,CAAaO,IAC1BzT,IAAS,IAAA,CAAK,SAAA,CAAUkT,GAAOjN;QACnC,OAAOjG;IACP,GAGDuS,EAAQ,SAAA,CAAU,kBAAA,GAAqB,SAAUC,CAAAA,EAAIkB,CAAAA;QACpD,IAAI3M,IAAO,GACP4L,IAAO,IAAA,CAAK,YAAA,CAAaH;QACxBG,EAAK,eAAA,IAAiBA,CAAAA,EAAK,eAAA,GAAkB,CAAA;QAClD,IAAA,IAASzY,IAAIyY,EAAK,eAAA,EAAiBzY,IAAIwZ,GAAWxZ,IACjD6M,KAAM,IAAA,CAAK,aAAA,CAAc4L,GAAMzY;QAEhCqD,EAAI,IAAA,CAAK,WAAW,YAAUiV,IAAG,6BAA2BkB,IAAU,sBAAoB3M,IAAK,kBAAgB,IAAA,CAAK,eAAA,GAAgB,MACpI4L,EAAK,eAAA,GAAkBe;IACvB,GAEDnB,EAAQ,SAAA,CAAU,KAAA,GAAQ;QACzB,IAAA,CAAK,uBAAA,GAA0B,CAAA,GAC/B,IAAA,CAAK,cAAA,CAAe,CAAA;IACpB,GAEDA,EAAQ,SAAA,CAAU,IAAA,GAAO;QACxB,IAAA,CAAK,uBAAA,GAA0B,CAA/B;IACA,GAGDA,EAAQ,SAAA,CAAU,KAAA,GAAQ;QACzBhV,EAAI,IAAA,CAAK,WAAW,+BACpB,IAAA,CAAK,iBAAA,IACL,IAAA,CAAK,cAAA,CAAe,CAAA,IACpB,IAAA,CAAK,MAAA,CAAO,YAAA,IACZ,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe,CAAA;IAC3B,GAIDgV,EAAQ,SAAA,CAAU,SAAA,GAAY,SAAS9T,CAAAA,EAAMkV,CAAAA,EAAQhB,CAAAA;QACpD,IAAI/X,GACAoF,GACA4T,IAAc,IAAA,GACdC,IAAsB,GACtBC,IAAkB,GAClB1N;QAEJ,IAAIuM,EAAK,OAAA,CAAQ,MAAA,KAAW,GAC3B,OAAApV,EAAI,IAAA,CAAK,WAAW,iDAA+CA,EAAI,iBAAA,CAAkB,GAAG,KAAI,mBACzF;YAAE,QAAQ;YAAG,MAAM;QAAC;QAG5B,IAAK3C,IAAI,GAAGA,IAAI+X,EAAK,OAAA,CAAQ,MAAA,EAAQ/X,IAAK;YAEzC,IADAoF,IAAS2S,EAAK,OAAA,CAAQ/X,EAAC,EACnBA,MAAM,GACTkZ,IAAkB,GAClB1N,IAAYpG,EAAO,SADnB;iBACmB,IACTA,EAAO,GAAA,GAAMvB,IAAOuB,EAAO,SAAA,EAAW;gBAChD8T,IAAkBlZ,IAAE;gBACpB;YACA;YACG+Y,KAAU3T,EAAO,OAAA,IACpB6T,CAAAA,IAAsBjZ,CAAAA;QAEvB;QAMD,IALI+Y,KACHG,CAAAA,IAAkBD,CAAAA,GAEnBpV,IAAOkU,EAAK,OAAA,CAAQmB,EAAe,CAAE,GAAA,EACrCnB,EAAK,UAAA,GAAamB,GACXnB,EAAK,OAAA,CAAQmB,EAAe,CAAE,WAAA,KAAgBnB,EAAK,OAAA,CAAQmB,EAAe,CAAE,IAAA,IAE7EnB,EAAK,OAAA,CAAQmB,IAAkB,EAFrC,EAKCA;QAED,OAAAF,IAAcjB,EAAK,OAAA,CAAQmB,EAAe,CAAE,MAAA,GAAOnB,EAAK,OAAA,CAAQmB,EAAe,CAAE,WAAA,EACjFvW,EAAI,IAAA,CAAK,WAAW,gBAAeoW,CAAAA,IAAS,QAAO,EAAA,IAAI,cAAYhB,EAAK,UAAA,GAAW,eAAaA,EAAK,IAAA,CAAK,QAAA,GAAS,YAAUpV,EAAI,iBAAA,CAAkBkB,GAAM2H,KAAY,kBAAgBwN,IAC9K;YAAE,QAAQA;YAAa,MAAMnV,IAAK2H;QAAS;IAClD,GAEDmM,EAAQ,SAAA,CAAU,gBAAA,GAAmB,SAAUI,CAAAA;QAC9C,IAAI3S;QAEJ,OAAK2S,EAAK,OAAA,GAGV3S,CAAAA,IAAS2S,EAAK,OAAA,CAAQA,EAAK,OAAA,CAAQ,MAAA,GAAS,EAAC,EAAA,AACrC3S,CAAAA,EAAO,GAAA,GAAMA,EAAO,QAAA,AAAA,IAAYA,EAAO,SAAA,AAAA,IAHvC,IADR;IAKA,GAGDuS,EAAQ,SAAA,CAAU,IAAA,GAAO,SAAS9T,CAAAA,EAAMkV,CAAAA;QACvC,IAAII,IAAO,IAAA,CAAK,IAAA,EACZpB,GACAqB,GACA9Z,GACA+Z,IAAY;YAAE,QAAQ,IAAA;YAAU,MAAM,IAAA;QAAQ;QAClD,IAAK,IAAA,CAAK,IAAA,EAEH;YACN,IAAK/Z,IAAI,GAAGA,IAAE6Z,EAAK,KAAA,CAAM,MAAA,EAAQ7Z,IAChCyY,IAAOoB,EAAK,KAAA,CAAM7Z,EAAC,EACf,CAAAuE,CAAAA,IAAO,IAAA,CAAK,gBAAA,CAAiBkU,EAAI,KAGrCqB,CAAAA,IAAiB,IAAA,CAAK,SAAA,CAAUvV,GAAMkV,GAAQhB,IAC1CqB,EAAe,MAAA,GAASC,EAAU,MAAA,IACrCA,CAAAA,EAAU,MAAA,GAASD,EAAe,MAAA,AAAA,GAE/BA,EAAe,IAAA,GAAOC,EAAU,IAAA,IACnCA,CAAAA,EAAU,IAAA,GAAOD,EAAe,IARjC,AAAA,CAAA;YAWD,OAAAzW,EAAI,IAAA,CAAK,WAAW,qBAAmBA,EAAI,iBAAA,CAAkB0W,EAAU,IAAA,EAAM,KAAG,kDAAgDA,EAAU,MAAM,GAC5IA,EAAU,MAAA,KAAW,IAAA,IAExBA,IAAY;gBAAE,QAAQ,IAAA,CAAK,iBAAA;gBAAmB,MAAM;YAAA,IAKpDA,EAAU,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,uBAAA,CAAwBA,EAAU,MAAM,GAExE1W,EAAI,IAAA,CAAK,WAAW,qEAAmE0W,EAAU,MAAM,GAChGA;QACP,OA3BA,MAAM;IA4BP,GAED1B,EAAQ,SAAA,CAAU,KAAA,GAAQ,SAAS/X,CAAAA;QAElC,IAAA,IADI0Z,IAAY,GACTA,IAAY,IAAA,CAAK,KAAA,CAAM,MAAA,IAAUA,IAAY1Z,EAAE,KAAA,CAAM,MAAA,EAAQ;YACnE,IAAI2Z,IAAQ,IAAA,CAAK,KAAA,CAAMD,EAAS,EAC5BE,IAAQ5Z,EAAE,KAAA,CAAM0Z,EADpB;YAEA,IAAI,CAACxI,EAAU,QAAA,CAASyI,GAAOC,IAC9B,OAAO,CAAP;YAEDF;QACA;QACD,OAAO,CAAP;IACA,GAGAxN,EAAA,OAAA,GAAkB6L,GAInBA,EAAQ,SAAA,CAAU,oBAAA,GAAuB,GAEzCA,EAAQ,SAAA,CAAU,WAAA,GAAc,MAMhCA,EAAQ,SAAA,CAAU,iBAAA,GAAoB,GAEtCA,EAAQ,SAAA,CAAU,eAAA,GAAkB,CAAA,GAEpCA,EAAQ,SAAA,CAAU,oBAAA,GAAuB,SAASvF,CAAAA;QACjD,IAAIT,GACA8H,GACAC;QAGJ,OAAItH,EAAI,IAAA,KAAS,SAKhBT,CAAAA,IAAM,IAAIb,CAAAA,CAAUsB,EAAI,IAAA,GAAK,MAAK,CAAEA,EAAI,IAAI,GAC5C,IAAA,CAAK,WAAA,GAAcT,GACnB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,IAChB,IAAA,CAAK,KAAA,CAAM,IAAA,CAAKA,IAChBA,EAAI,KAAA,GAAQS,EAAI,KAAA,EAChBT,EAAI,QAAA,GAAWS,EAAI,QAAA,EACnB,IAAA,CAAK,MAAA,CAAO,YAAA,CAAaT,EAAI,QAAQ,GAGrC,IAAA,CAAK,oBAAA,GAAuBA,EAAI,KAAA,GAAQA,EAAI,IAAA,EAE5C+H,IAAQ,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK/H,EAAI,KAAA,GAAQA,EAAI,IAAA,EAAM,CAAA,GAAO,IAAA,CAAK,eAAe,GACtE+H,IAEH,CAAA,IAAA,CAAK,WAAA,GAAc,MAEZ,CAAA,CAAA,IAIF,CAAA,IAAA,CAAK,cAAA,GAQT,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,MAAA,CAAO,oBAAA,KAJrC,IAAA,CAAK,iBAAA,GAAoB/H,EAAI,KAAA,GAAQA,EAAI,IAAA,EAOnC,CAAA,CAAA,CAAA,IAIJS,CAAAA,EAAI,IAAA,KAAS,UAEhB,CAAA,IAAA,CAAK,cAAA,GAAiB,CAAA,GAClB,IAAA,CAAK,KAAA,CAAM,MAAA,KAAW,KACzB,CAAA,IAAA,CAAK,aAAA,GAAgB,CAAA,CAAA,CAAA,GAOvBqH,IAAU,IAAA,CAAK,MAAA,CAAO,eAAA,GAAkB,IAAA,CAAK,MAAA,CAAO,eAAA,KAAoB,CAAA,GACpEA,IAIH,CAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,MAAA,CAAO,cAAA,IAC9B,CAAA,CAAA,IAIFrH,CAAAA,EAAI,IAAA,GAQJ,IAAA,CAAK,cAAA,GACR,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,MAAA,CAAO,cAAA,KAErC,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,MAAA,CAAO,WAAA,KAAgBA,EAAI,IAAA,GAR1D,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,MAAA,CAAO,cAAA,IAW/B,CA3ET,CAAA,CAAA;IA8EA,GAEDuF,EAAQ,SAAA,CAAU,iBAAA,GAAoB;QACrC,OAAQ,IAAA,CAAK,WAAA,KAAgB;IAC7B,GAEDA,EAAQ,SAAA,CAAU,qBAAA,GAAwB;QACzC,IAAIhG,GACA+H;QAMJ,OAHA/H,IAAM,IAAA,CAAK,WAAA,EAEX+H,IAAQ,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK/H,EAAI,KAAA,GAAQA,EAAI,IAAA,EAAM,CAAA,GAAO,IAAA,CAAK,eAAe,GACtE+H,IACH/W,CAAAA,EAAI,KAAA,CAAM,WAAW,sCAErB,IAAA,CAAK,WAAA,GAAc,MAEZ,CAAA,CAAA,IAKP,CAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,MAAA,CAAO,oBAAA,IAC9B,CAXR,CAAA;IAaA,GAEDgV,EAAQ,SAAA,CAAU,oBAAA,GAAuB;QAExC,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,oBAAA,EAAsB,CAAA,GAAM,IAAA,CAAK,eAAe;IAC7E,GAEDA,EAAQ,SAAA,CAAU,iBAAA,GAAoB;QAErC,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,MAAA,CAAO,WAAA;IACxC,GAEDA,EAAQ,SAAA,CAAU,eAAA,GAAkB,SAAShG,CAAAA,EAAKS,CAAAA;QAC7C,IAAA,CAAK,MAAA,CAAO,YAAA,IACXT,CAAAA,EAAI,IAAA,KAAS,SAEhB,CAAA,IAAA,CAAK,MAAA,CAAO,YAAA,CAAaA,EAAI,QAAQ,GACjC,IAAA,CAAK,eAAA,IACR,IAAA,CAAK,MAAA,CAAO,YAAA,CAAaA,EAAI,IAAA,GAAKA,EAAI,QAAQ,CAAA,IAI/C,IAAA,CAAK,MAAA,CAAO,YAAA,CAAaA,EAAI,IAAI,CAAA;IAGnC,GAEDgG,EAAQ,SAAA,CAAU,GAAA,GAAM7G,EAAU,GAAA,CAAI,SAAA,CAAU,GAAA,EAChD6G,EAAQ,SAAA,CAAU,MAAA,GAAS7G,EAAU,GAAA,CAAI,SAAA,CAAU,MAAA,EAEnD6G,EAAQ,SAAA,CAAU,IAAA,GAAO,SAAUgC,CAAAA;QAClC,IAAI7B,IAAU6B,KAAY,CAA1B;QACW,IAAA,CAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,eAAgB7B,EAAQ,MAAA,IAAUA,EAAQ,MAAA,CAAO,EAAC,IAAM,QAC9E,GAAA,CAAI,iBAAiB,GACrB,GAAA,CAAI,qBAAqBA,EAAQ,MAAA,IAAU;YAAC;SAAO;QAC7D,IAAIqB,IAAO,IAAA,CAAK,GAAA,CAAI;QACpB,OAAAA,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,aAAarB,EAAQ,SAAA,IAAa,KAClD,GAAA,CAAI,QAAQA,EAAQ,IAAA,IAAQ,OAC5B,GAAA,CAAI,iBAAiB,GACrB,GAAA,CAAI,qBAAqB,GACzB,GAAA,CAAI,YAAYA,EAAQ,QAAA,IAAY,GACpC,GAAA,CAAI,UAAWA,EAAQ,KAAA,GAAS,IAAI,KACpC,GAAA,CAAI,UAAU;YAAE;YAAO;YAAG;YAAG;YAAG;YAAO;YAAG;YAAG;YAAG;SAAW,EAC3D,GAAA,CAAI,iBAAiB,IAC1BqB,EAAK,GAAA,CAAI,SACF,IATP;IAUA,GAEDxB,EAAQ,SAAA,CAAU,QAAA,GAAW,SAAUgC,CAAAA;QACjC,IAAA,CAAK,IAAA,IACT,IAAA,CAAK,IAAA,CAAKA;QAGX,IAAI7B,IAAU6B,KAAY,CAA1B;QACA7B,EAAQ,KAAA,GAAQA,EAAQ,KAAA,IAAS,KACjCA,EAAQ,MAAA,GAASA,EAAQ,MAAA,IAAU,KACnCA,EAAQ,EAAA,GAAKA,EAAQ,EAAA,IAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,aAAA,EAC1CA,EAAQ,IAAA,GAAOA,EAAQ,IAAA,IAAQ;QAE/B,IAAIC,IAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI;QACzB,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,aAAA,GAAgBD,EAAQ,EAAA,GAAG,GAC1CC,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,SAAQjH,EAAU,iBAAA,GAC/BA,EAAU,kBAAA,GACVA,EAAU,oBAAoB,EACjC,GAAA,CAAI,iBAAgB,GACpB,GAAA,CAAI,qBAAqB,GACzB,GAAA,CAAI,YAAYgH,EAAQ,EAAE,EAC1B,GAAA,CAAI,YAAYA,EAAQ,QAAA,IAAY,GACpC,GAAA,CAAI,SAASA,EAAQ,KAAA,IAAS,GAC9B,GAAA,CAAI,mBAAmB,GACvB,GAAA,CAAI,UAAU,GACd,GAAA,CAAI,UAAU;YAAE;YAAG;YAAG;YAAG;YAAG;YAAG;YAAG;YAAG;YAAG;SAAG,EAC3C,GAAA,CAAI,SAASA,EAAQ,KAAA,IAAS,IAC9B,GAAA,CAAI,UAAUA,EAAQ,MAAA,IAAU;QAErC,IAAI8B,IAAO7B,EAAK,GAAA,CAAI;QACpB6B,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,iBAAiB,GACjC,GAAA,CAAI,qBAAqB,GACzB,GAAA,CAAI,aAAa9B,EAAQ,SAAA,IAAa,GACtC,GAAA,CAAI,YAAYA,EAAQ,cAAA,IAAkB,GAC1C,GAAA,CAAI,YAAYA,EAAQ,QAAA,IAAY,QAEzC8B,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,WAAW9B,EAAQ,IAAA,IAAQ,QAC3C,GAAA,CAAI,QAAQA,EAAQ,IAAA,IAAQ,iCAEjC8B,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,qBAAqB9B,EAAQ,QAAA,IAAY;QAE9D,IAAI+B,IAAOD,EAAK,GAAA,CAAI;QACpB,IAAI9I,CAAAA,CAAUgH,EAAQ,IAAA,GAAK,cAAa,KAAM,KAAA,GAC9C;YAAA,IAAIgC,IAA2B,IAAIhJ,CAAAA,CAAUgH,EAAQ,IAAA,GAAK,cAA1D;YACAgC,EAAyB,oBAAA,GAAuB;YAChD,IAAIC,IAAa;YACjB,IAAA,IAASxI,KAAaT,EAAU,gBAAhC,CAEC,IAAA,IADIkJ,IAAQlJ,EAAU,gBAAA,CAAiBS,EAAS,EACvCjS,IAAI,GAAGA,IAAI0a,EAAM,MAAA,EAAQ1a,IACjC,IAAI0a,EAAM,OAAA,CAAQlC,EAAQ,IAAI,IAAI,IAAI;gBACrCiC,IAAaxI;gBACb;YACA;YAGH,OAAOwI;gBACN,KAAK;oBASJ,IARAF,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,gBAAe,GAAG,GAAA,CAAI,WAAW;wBAAE;wBAAG;wBAAG;qBAAG,GACjEC,EAAyB,GAAA,CAAI,SAAShC,EAAQ,KAAK,EAC/C,GAAA,CAAI,UAAUA,EAAQ,MAAM,EAC5B,GAAA,CAAI,mBAAmB,SACvB,GAAA,CAAI,kBAAkB,SACtB,GAAA,CAAI,eAAe,GACnB,GAAA,CAAI,kBAAkBA,EAAQ,IAAA,GAAK,eACnC,GAAA,CAAI,SAAS,KACbA,EAAQ,sBAAA,EAAwB;wBACnC,IAAImC,IAAO,IAAInJ,EAAU,OAAzB;wBACAmJ,EAAK,KAAA,CAAM,IAAIlO,EAAa+L,EAAQ,sBAAsB,IAC1DgC,EAAyB,MAAA,CAAOG;oBACpC,OAAA,IAAcnC,EAAQ,uBAAA,EAAyB;wBAC3C,IAAIoC,IAAO,IAAIpJ,EAAU,OAAzB;wBACAoJ,EAAK,KAAA,CAAM,IAAInO,EAAa+L,EAAQ,uBAAuB,IAC3DgC,EAAyB,MAAA,CAAOI;oBAChC;oBACD;gBACD,KAAK;oBACJL,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,WAAW/B,EAAQ,OAAA,IAAW,IACnDgC,EAAyB,GAAA,CAAI,iBAAiBhC,EAAQ,aAAA,IAAiB,GACnE,GAAA,CAAI,cAAcA,EAAQ,UAAA,IAAc,IACxC,GAAA,CAAI,cAAcA,EAAQ,UAAA,IAAc;oBAC5C;gBACD,KAAK;oBACJ+B,EAAK,GAAA,CAAI;oBACT;gBACD,KAAK;oBAEJ,OADAA,EAAK,GAAA,CAAI,SACD/B,EAAQ,IAAA;wBACf,KAAK;4BACJgC,EAAyB,GAAA,CAAI,aAAahC,EAAQ,SAAA,IAAa,eAC3D,GAAA,CAAI,mBAAmBA,EAAQ,eAAA,IAAmB,IAClD,GAAA,CAAI,wBAAwBA,EAAQ,oBAAA,IAAwB;4BAChE;oBACD;oBACD;gBACD,KAAK;oBACJ+B,EAAK,GAAA,CAAI;oBACT;gBACD,KAAK;oBACJA,EAAK,GAAA,CAAI;oBACT;gBACD;oBACCA,EAAK,GAAA,CAAI;oBACT;YACD;YACG/B,EAAQ,WAAA,IACXgC,EAAyB,MAAA,CAAOhC,EAAQ,WAAW,GAEhDA,EAAQ,iBAAA,IACXA,EAAQ,iBAAA,CAAkB,OAAA,CAAQ,SAAUlY,CAAAA;gBAC3Cka,EAAyB,MAAA,CAAOla;YACnC,IAECia,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,QAAQ,QAAA,CAAU,IAAI/I,CAAAA,CAAU,UAAS,GAAK,GAAA,CAAI,SAAS;YAChF,IAAIqJ,IAAON,EAAK,GAAA,CAAI;YACpB,OAAAM,EAAK,GAAA,CAAI,QAAQ,QAAA,CAASL,IAC1BK,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,iBAAiB,EAAE,EACnC,GAAA,CAAI,iBAAiB,EAAE,GAC5BA,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,eAAe,EAAE,EACjC,GAAA,CAAI,qBAAqB,EAAE,EAC3B,GAAA,CAAI,4BAA4B,EAAE,GACvCA,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,iBAAiB,EAAE,GACxCA,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,gBAAgB,EAAE,GAEvC,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,YAAYrC,EAAQ,EAAE,EAC5C,GAAA,CAAI,oCAAoCA,EAAQ,gCAAA,IAAoC,GACpF,GAAA,CAAI,2BAA2BA,EAAQ,uBAAA,IAA2B,GAClE,GAAA,CAAI,uBAAuBA,EAAQ,mBAAA,IAAuB,GAC1D,GAAA,CAAI,wBAAwBA,EAAQ,oBAAA,IAAwB,IACrE,IAAA,CAAK,oBAAA,CAAqBC,IACnBD,EAAQ,EAff;QAee;IACf,GAEDhH,EAAU,GAAA,CAAI,SAAA,CAAU,WAAA,GAAc,SAASsJ,CAAAA;QAC9C,IAAI/R,IAAS+R,KAAW,IAAI7N;QAC5BlE,EAAO,UAAA,GAAakE,EAAW,UAAA,EAC/B,IAAA,CAAK,KAAA,CAAMlE;IACX,GAEDsP,EAAQ,SAAA,CAAU,SAAA,GAAY,SAAUkB,CAAAA,EAAU3Q,CAAAA,EAAMyR,CAAAA;QACvD,IAAI7B,IAAU6B,KAAY,CAAA,GACtBvU,IAAS,CAAA,GACT2S,IAAO,IAAA,CAAK,YAAA,CAAac;QAC7B,IAAId,MAAS,MACV;YAAA3S,EAAO,MAAA,GAAS2S,EAAK,OAAA,CAAQ,MAAA,EAChC3S,EAAO,QAAA,GAAW2S,EAAK,IAAA,CAAK,QAAA,EAC5B3S,EAAO,SAAA,GAAY2S,EAAK,IAAA,CAAK,IAAA,CAAK,SAAA,EAClC3S,EAAO,iBAAA,GAAqB0S,EAAQ,wBAAA,GAA2BA,EAAQ,wBAAA,GAA2B,IAAG,GACrG1S,EAAO,WAAA,GAAc2S,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ3S,EAAO,iBAAiB,CAAA,EAC9EA,EAAO,IAAA,GAAO8C,GACd9C,EAAO,IAAA,GAAO8C,EAAK,UAAA,EACnB9C,EAAO,WAAA,GAAcA,EAAO,IAAA,EAC5BA,EAAO,QAAA,GAAW0S,EAAQ,QAAA,IAAY,GACtC1S,EAAO,GAAA,GAAM0S,EAAQ,GAAA,IAAO,GAC5B1S,EAAO,GAAA,GAAM0S,EAAQ,GAAA,IAAO,GAC5B1S,EAAO,OAAA,GAAU0S,EAAQ,OAAA,IAAW,CAAA,GACpC1S,EAAO,UAAA,GAAa0S,EAAQ,UAAA,IAAc,GAC1C1S,EAAO,UAAA,GAAa0S,EAAQ,UAAA,IAAc,GAC1C1S,EAAO,cAAA,GAAiB0S,EAAQ,cAAA,IAAkB,GAClD1S,EAAO,cAAA,GAAiB0S,EAAQ,cAAA,IAAkB,GAClD1S,EAAO,oBAAA,GAAuB0S,EAAQ,oBAAA,IAAwB,GAC9D1S,EAAO,MAAA,GAAS,GAChBA,EAAO,UAAA,GAAa0S,EAAQ,UAAA,EAC5BC,EAAK,OAAA,CAAQ,IAAA,CAAK3S,IAClB2S,EAAK,YAAA,IAAgB3S,EAAO,IAAA,EAC5B2S,EAAK,gBAAA,IAAoB3S,EAAO,QAAA,EAC5B2S,EAAK,SAAA,KAAc,KAAA,KACtBA,CAAAA,EAAK,SAAA,GAAYD,EAAQ,GAAA,AAAA,GAG1B,IAAA,CAAK,cAAA;YAEL,IAAIuC,IAAO,IAAA,CAAK,sBAAA,CAAuBjV;YACvC,OAAA,IAAA,CAAK,MAAA,CAAOiV,IACZA,EAAK,WAAA,IAELA,EAAK,KAAA,CAAM,EAAC,CAAE,KAAA,CAAM,EAAC,CAAE,WAAA,GAAcA,EAAK,IAAA,GAAK,GAC/C,IAAA,CAAK,GAAA,CAAI,QAAQ,IAAA,GAAO,IAAI,WAAWnS,IAChC9C;QAAA;IACP,GAEDuS,EAAQ,SAAA,CAAU,sBAAA,GAAyB,SAASvS,CAAAA;QACnD,IAAIkV,IAAe;QACflV,EAAO,OAAA,GACVkV,IAAgB,WAEhBA,IAAgB;QAEjB,IAAID,IAAO,IAAIvJ,EAAU,OAAzB;QACAuJ,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,mBAAmB,IAAA,CAAK,cAAc,GAC3D,IAAA,CAAK,cADL;QAEA,IAAIE,IAAOF,EAAK,GAAA,CAAI,SAChBtC,IAAO,IAAA,CAAK,YAAA,CAAa3S,EAAO,QAAQ;QAC5C,OAAAmV,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,YAAYnV,EAAO,QAAQ,EAC3C,GAAA,CAAI,SAAS0L,EAAU,8BAA8B,GAC1DyJ,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,uBAAwBnV,EAAO,GAAA,GAAO2S,CAAAA,EAAK,SAAA,IAAa,CAAA,IAC7EwC,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,SAASzJ,EAAU,sBAAA,GAAyBA,EAAU,mBAAA,GACjEA,EAAU,eAAA,GAAkBA,EAAU,gBAAA,GACtCA,EAAU,qBAAqB,EACpC,GAAA,CAAI,eAAc,GAClB,GAAA,CAAI,sBAAqB,GACzB,GAAA,CAAI,gBAAe,GACnB,GAAA,CAAI,mBAAkB;YAAC1L,EAAO,QAAQ;SAAC,EACvC,GAAA,CAAI,eAAc;YAACA,EAAO,IAAI;SAAC,EAC/B,GAAA,CAAI,gBAAe;YAACkV;SAAa,EACjC,GAAA,CAAI,kCAAkC;YAAClV,EAAO,GAAA,GAAMA,EAAO,GAAG;SAAC,GAC7DiV;IACP,GAID1C,EAAQ,SAAA,CAAU,aAAA,GAAgB,GAGlCA,EAAQ,SAAA,CAAU,eAAA,GAAkB,GAGpCA,EAAQ,SAAA,CAAU,WAAA,GAAc;QAC/B,IAAIrY,GACAyY,GAAMyC,GAAMC,GAAMC,GAAMC,GAAMC,GAAMC;QAGxC,IAFA,IAAA,CAAK,gBAAA,GAAmB,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,EACvC,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,QAAA,GAAW,GACrBvb,IAAI,GAAGA,IAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IAAK;YAC5CyY,IAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAMzY,EAAC,EACxByY,EAAK,IAAA,CAAK,QAAA,GAAW,GACrBA,EAAK,IAAA,CAAK,IAAA,CAAK,QAAA,GAAW,GAC1ByC,IAAOzC,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQA,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EACvDyC,EAAK,aAAA,GAAgB,EAAA,EACrBC,IAAO1C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAC3B0C,EAAK,WAAA,GAAc,EAAA,EACnBA,EAAK,iBAAA,GAAoB,EAAA,EACzBA,EAAK,wBAAA,GAA2B,EAAA,EAChCC,IAAO3C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQA,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EACvD2C,EAAK,YAAA,GAAe,EAAA,EACpBC,IAAO5C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAC3B4C,EAAK,aAAA,GAAgB,EAAA,EACrBA,EAAK,aAAA,GAAgB,EAAA,EACrBC,IAAO7C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EACvB6C,KACHA,CAAAA,EAAK,aAAA,GAAgB,EAAA,EACrBA,EAAK,cAAA,GAAiB,EAAA,AAAA,GAEvBC,IAAO9C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAnB3B;YAoBA,IAAI9X,IAAI8X,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ8C;YACtC5a,KAAK,MAAI8X,CAAAA,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM9X,EAAC,GAAI,IAA5C;QACA;IACD,GAED0X,EAAQ,gBAAA,GAAmB,SAASI,CAAAA,EAAMwC,CAAAA,EAAMO,CAAAA,EAAOC,CAAAA,EAAYC,CAAAA;QAClE,IAAIlc,GACAmB,GAEAgb,GACAC;QACJ,SAASC,EAAgBnK,CAAAA,EAAOoK,CAAAA,EAAYC,CAAAA;YAC3C,IAAA,CAAK,aAAA,GAAgBrK,GACrB,IAAA,CAAK,uBAAA,GAA0BoK,GAC/B,IAAA,CAAK,IAAA,GAAOC,GACZ,IAAA,CAAK,kBAAA,GAAqB,IAC1B,IAAA,CAAK,WAAA,GAAc;QACnB;QAOD,IANId,KACHA,CAAAA,EAAK,kBAAA,GAAqB,EAAA,AAAA,GAEtBxC,EAAK,kBAAA,IACTA,CAAAA,EAAK,kBAAA,GAAqB,EAAA,AAAA,GAEtB9X,IAAI,GAAGA,IAAI6a,EAAM,MAAA,EAAQ7a,IAAK;YASlC,IARAib,IAAmBJ,CAAAA,CAAM7a,EAAC,CAAE,aAAA,GAAe,MAAK6a,CAAAA,CAAM7a,EAAC,CAAE,uBAAA,EACzDgb,IAAoB,IAAIE,EAAgBL,CAAAA,CAAM7a,EAAC,CAAE,aAAA,EAAe6a,CAAAA,CAAM7a,EAAC,CAAE,uBAAA,EAAyB6a,CAAAA,CAAM7a,EAAE,GACtGsa,KACHA,CAAAA,EAAK,kBAAA,CAAmBW,EAAgB,GAAID,CAAAA,GAExClD,EAAK,kBAAA,CAAmBmD,EAAgB,IAC5CnD,CAAAA,EAAK,kBAAA,CAAmBmD,EAAgB,GAAID,CAAAA,GAExCnc,IAAE,GAAGA,IAAGic,EAAW,MAAA,EAAQjc,IAC3Bic,CAAAA,CAAWjc,EAAC,CAAE,aAAA,KAAkBgc,CAAAA,CAAM7a,EAAC,CAAE,aAAA,IAC5Cgb,CAAAA,EAAkB,WAAA,GAAcF,CAAAA,CAAWjc,EAAC,EAC5Cmc,EAAkB,WAAA,CAAY,IAAA,GAAO,CAFtC,CAAA;YAKD,IAAID,GACH,IAAKlc,IAAE,GAAGA,IAAGkc,EAAW,MAAA,EAAQlc,IAC3Bkc,CAAAA,CAAWlc,EAAC,CAAE,aAAA,KAAkBgc,CAAAA,CAAM7a,EAAC,CAAE,aAAA,IAC5Cgb,CAAAA,EAAkB,oBAAA,GAAuBD,CAAAA,CAAWlc,EAAC,EACrDmc,EAAkB,oBAAA,CAAqB,IAAA,GAAO,CAAA,GAC9CA,EAAkB,WAAA,GAAc,CAHjC,CAAA;QAOF;QACD,IAAKV,GAAL;YAWC,IAAIS,GACH,IAAK/a,IAAI,GAAGA,IAAI+a,EAAW,MAAA,EAAQ/a,IAC9B,CAAC+a,CAAAA,CAAW/a,EAAC,CAAE,IAAA,IAAQ+a,CAAAA,CAAW/a,EAAC,CAAE,OAAA,IAAW,KACnDib,CAAAA,IAAmBF,CAAAA,CAAW/a,EAAC,CAAE,aAAA,GAAe,MAChDgb,IAAoB,IAAIE,EAAgBH,CAAAA,CAAW/a,EAAC,CAAE,aAAA,EAAe,IACrEgb,EAAkB,WAAA,GAAc,CAAA,GAC3BV,EAAK,kBAAA,CAAmBW,EAAgB,IAC5CX,CAAAA,EAAK,kBAAA,CAAmBW,EAAgB,GAAID,CAAAA,CAL9C;QAK8C,OAjBhD,IAAKhb,IAAI,GAAGA,IAAI8a,EAAW,MAAA,EAAQ9a,IAC9B,CAAC8a,CAAAA,CAAW9a,EAAC,CAAE,IAAA,IAAQ8a,CAAAA,CAAW9a,EAAC,CAAE,OAAA,IAAW,KACnDib,CAAAA,IAAmBH,CAAAA,CAAW9a,EAAC,CAAE,aAAA,GAAe,MAChDgb,IAAoB,IAAIE,EAAgBJ,CAAAA,CAAW9a,EAAC,CAAE,aAAA,EAAe,IAChE8X,EAAK,kBAAA,CAAmBmD,EAAgB,IAC5CnD,CAAAA,EAAK,kBAAA,CAAmBmD,EAAgB,GAAID,CAAAA,CAJ9C;IAsBF,GAEDtD,EAAQ,wBAAA,GAA2B,SAASI,CAAAA,EAAM3S,CAAAA,EAAQkW,CAAAA,EAAeC,CAAAA;QACxE,IAAItb,GACAyP;QACJtK,EAAO,aAAA,GAAgB,EAAvB;QACA,IAAKnF,KAAKsb,EAkBT,IAjBAnW,EAAO,aAAA,CAAcnF,EAAC,GAAI,CAAA,GAC1BmF,EAAO,aAAA,CAAcnF,EAAC,CAAE,aAAA,GAAgBsb,CAAAA,CAAmBtb,EAAC,CAAE,aAAA,EAC9DmF,EAAO,aAAA,CAAcnF,EAAC,CAAE,uBAAA,GAA0Bsb,CAAAA,CAAmBtb,EAAC,CAAE,uBAAA,EACpEqb,KAAiBC,CAAAA,CAAmBtb,EAAC,CAAE,kBAAA,IACtCsb,CAAAA,CAAAA,CAAmBtb,EAAC,CAAE,kBAAA,GAAqB,KAC9Csb,CAAAA,CAAAA,CAAmBtb,EAAC,CAAE,kBAAA,GAAqB,CAAA,GAE5Csb,CAAAA,CAAmBtb,EAAC,CAAE,WAAA,IAClBsb,CAAAA,CAAmBtb,EAAC,CAAE,WAAA,IAAesb,CAAAA,CAAmBtb,EAAC,CAAE,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,KACpFsb,CAAAA,CAAAA,CAAmBtb,EAAC,CAAE,kBAAA,IAAsBsb,CAAAA,CAAmBtb,EAAC,CAAE,IAAA,CAAK,OAAA,CAAQsb,CAAAA,CAAmBtb,EAAC,CAAE,WAAW,CAAA,CAAE,YAAA,AAAA,CAAA,GAGhHsb,CAAAA,CAAmBtb,EAAC,CAAE,WAAA,IAAesb,CAAAA,CAAmBtb,EAAC,CAAE,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,IACpFmF,EAAO,aAAA,CAAcnF,EAAC,CAAE,uBAAA,GAA0Bsb,CAAAA,CAAmBtb,EAAC,CAAE,IAAA,CAAK,OAAA,CAAQsb,CAAAA,CAAmBtb,EAAC,CAAE,WAAW,CAAA,CAAE,uBAAA,GAExHmF,EAAO,aAAA,CAAcnF,EAAC,CAAE,uBAAA,GAA0B,IAE/CmF,EAAO,aAAA,CAAcnF,EAAC,CAAE,uBAAA,KAA4B,GAAG;YAC1D,IAAIub;YACAD,CAAAA,CAAmBtb,EAAC,CAAE,oBAAA,GACzBub,IAAcD,CAAAA,CAAmBtb,EAAC,CAAE,oBAAA,GAEpCub,IAAcD,CAAAA,CAAmBtb,EAAC,CAAE,WAAA,EAEjCmF,EAAO,aAAA,CAAcnF,EAAC,CAAE,uBAAA,GAA0B,IACjDmF,CAAAA,EAAO,aAAA,CAAcnF,EAAC,CAAE,uBAAA,GAA0B,QACrDyP,IAAAA,AAAStK,CAAAA,EAAO,aAAA,CAAcnF,EAAC,CAAE,uBAAA,IAA2B,EAAA,IAAI,IAEhEyP,IAAQtK,EAAO,aAAA,CAAcnF,EAAC,CAAE,uBAAA,GAAwB,GAErDub,KAAe9L,KAAS,KAC3BtK,CAAAA,EAAO,aAAA,CAAcnF,EAAC,CAAE,WAAA,GAAcub,EAAY,OAAA,CAAQ9L,EAAK,AAAA,CAAA,IAG5D8L,KAAeA,EAAY,OAAA,IAAW,KACrCA,EAAY,+BAAA,GAAkC,KACjDpW,CAAAA,EAAO,aAAA,CAAcnF,EAAC,CAAE,WAAA,GAAcub,EAAY,OAAA,CAAQA,EAAY,+BAAA,GAAgC,EAjBzG,AAiB0G;QAI1G;IAEF,GAED7D,EAAQ,YAAA,GAAe,SAAU8D,CAAAA,EAAMrW,CAAAA,EAAQiG,CAAAA;QACzCjG,KAGDqW,CAAAA,IACHrW,CAAAA,EAAO,UAAA,GAAaqW,EAAK,UAAA,CAAWpQ,EAAM,EAC1CjG,EAAO,UAAA,GAAaqW,EAAK,iBAAA,CAAkBpQ,EAAM,EACjDjG,EAAO,cAAA,GAAiBqW,EAAK,qBAAA,CAAsBpQ,EAAM,EACzDjG,EAAO,cAAA,GAAiBqW,EAAK,qBAAA,CAAsBpQ,EAAM,AAAA,IAEzDjG,CAAAA,EAAO,UAAA,GAAa,GACpBA,EAAO,UAAA,GAAa,GACpBA,EAAO,cAAA,GAAiB,GACxBA,EAAO,cAAA,GAAiB,CAAA,CAZzB;IAcA,GAGDuS,EAAQ,SAAA,CAAU,gBAAA,GAAmB;QACpC,IAAIrY,GACAyY;QACJ,IAAKzY,IAAI,GAAGA,IAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IACvCyY,IAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAMzY,EAAC,EACxB,IAAA,CAAK,oBAAA,CAAqByY;IAE3B,GAEDJ,EAAQ,SAAA,CAAU,oBAAA,GAAuB,SAASI,CAAAA;QAC7C,IAAA/X,GACAwa,GAAMC,GAAMC,GAAMC,GAAMC,GAAMC,GAAMa,GAAMC,GAAMb,GAAOc,GAAOC,GAC9DC,GAAiBC,GAAaC,GAAmBC,IAAiBC,IAClEC,IAAyBC,GAAgBC,IAAyBC,IAAgBC,IAAkCC,IAAkBC;QA2B1I,IAzBA1E,EAAK,OAAA,GAAU,EAAA,EACfA,EAAK,gBAAA,GAAmB,GACxBA,EAAK,YAAA,GAAe,GACpByC,IAAOzC,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQA,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EACvD0C,IAAO1C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAC3B2C,IAAO3C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQA,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EACvD4C,IAAO5C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAC3B6C,IAAO7C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAC3B8C,IAAO9C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAC3B2D,IAAO3D,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAC3B4D,IAAO5D,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAC3B8D,IAAO9D,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAC3B+C,IAAQ/C,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,EAC5B6D,IAAQ7D,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,EAE5BoE,KAA0B,IAC1BC,IAAiB,IACjBC,KAA0B,IAC1BC,KAAiB,IACjBC,KAAkB,GAClBC,KAAmB,GACnBC,KAAyB,GAEzB9E,EAAQ,gBAAA,CAAiBI,GAAM,MAAM+C,GAAOc,IAExC,CAAA,CAAA,OAAOlB,IAAS,GAAA,GAKpB;YAAA,IAAK1a,IAAI,GAAGA,IAAI0a,EAAK,YAAA,CAAa,MAAA,EAAQ1a,IAAK;gBAC9C,IAAIoF,IAAS,CAAA;gBACbA,EAAO,MAAA,GAASpF,GAChBoF,EAAO,QAAA,GAAW2S,EAAK,IAAA,CAAK,QAAA,EAC5B3S,EAAO,SAAA,GAAY2S,EAAK,IAAA,CAAK,IAAA,CAAK,SAAA,EAClC3S,EAAO,WAAA,GAAc,GACrB2S,EAAK,OAAA,CAAQ/X,EAAC,GAAIoF,GAElBA,EAAO,IAAA,GAAOsV,EAAK,YAAA,CAAa1a,EAAC,EACjC+X,EAAK,YAAA,IAAgB3S,EAAO,IAAA,EAExBpF,MAAM,IACT+b,CAAAA,IAAc,GACdD,IAAkB,GAClB1W,EAAO,WAAA,GAAc2W,GACrB3W,EAAO,eAAA,GAAkB0W,GACzBI,KAAuBzB,EAAK,iBAAA,CAAkBqB,EAAe,EAC7DG,KAAkB,GAGdH,IAAkB,IAAIrB,EAAK,WAAA,CAAY,MAAA,GAE1CuB,IAAoBvB,EAAK,WAAA,CAAYqB,IAAgB,EAAC,GAAE,IAGxDE,IAAoB,IAAA,CAAA,IAGjBhc,IAAIkc,KAEP9W,CAAAA,EAAO,WAAA,GAAc2W,GACrB3W,EAAO,eAAA,GAAkB0W,CAAAA,IAGzBC,CAAAA,KACA3W,EAAO,WAAA,GAAc2W,GAErBE,KAAkB,GACdF,KAAeC,KAIlBF,CAAAA,KAEIA,IAAkB,IAAIrB,EAAK,WAAA,CAAY,MAAA,GAE1CuB,IAAoBvB,EAAK,WAAA,CAAYqB,IAAgB,EAAC,GAAE,IAGxDE,IAAoB,IAAA,CAAA,GAItB5W,EAAO,eAAA,GAAkB0W,GACzBI,MAAwBzB,EAAK,iBAAA,CAAkBqB,EAAe,AAAA,GAIhE1W,EAAO,iBAAA,GAAoBqV,EAAK,wBAAA,CAAyBrV,EAAO,eAAe,CAAA,GAAE,GACjFA,EAAO,WAAA,GAAcsW,EAAK,OAAA,CAAQtW,EAAO,iBAAiB,CAAA,EAC1DA,EAAO,MAAA,GAASoV,EAAK,aAAA,CAAcpV,EAAO,WAAA,GAAY,EAAC,GAAI6W,IAC3DA,MAAmB7W,EAAO,IAAA,EAGtBpF,IAAImc,MACPC,CAAAA,KACID,KAA0B,KAC7BA,CAAAA,KAA0B,CAAA,GAE3BA,MAA2BxB,EAAK,aAAA,CAAcyB,EAAc,AAAA,GAEzDpc,IAAI,IACP+X,CAAAA,EAAK,OAAA,CAAQ/X,IAAE,EAAC,CAAE,QAAA,GAAW2a,EAAK,aAAA,CAAcyB,EAAc,EAC9DrE,EAAK,gBAAA,IAAoBA,EAAK,OAAA,CAAQ/X,IAAE,EAAC,CAAE,QAAA,EAC3CoF,EAAO,GAAA,GAAM2S,EAAK,OAAA,CAAQ/X,IAAE,EAAC,CAAE,GAAA,GAAM+X,EAAK,OAAA,CAAQ/X,IAAE,EAAC,CAAE,QAAA,AAAA,IAEvDoF,EAAO,GAAA,GAAM,GAEVwV,IACC5a,CAAAA,KAAKqc,MACRC,CAAAA,MACID,KAA0B,KAC7BA,CAAAA,KAA0B,CAAA,GAE3BA,MAA2BzB,EAAK,aAAA,CAAc0B,GAAc,AAAA,GAE7DlX,EAAO,GAAA,GAAM2S,EAAK,OAAA,CAAQ/X,EAAC,CAAE,GAAA,GAAM4a,EAAK,cAAA,CAAe0B,GAAc,AAAA,IAErElX,EAAO,GAAA,GAAMA,EAAO,GAAA,EAEjByV,IACC7a,CAAAA,KAAK6a,EAAK,cAAA,CAAe0B,GAAe,GAAI,IAC/CnX,CAAAA,EAAO,OAAA,GAAU,CAAA,GACjBmX,IAAAA,IAEAnX,CAAAA,EAAO,OAAA,GAAU,CAAA,GACjBA,EAAO,oBAAA,GAAuB,CAAA,GAE3BuW,KACCA,EAAK,OAAA,CAAQa,GAAgB,CAAE,YAAA,GAAeC,MAA0Bzc,IAAE,KAC7EoF,CAAAA,EAAO,UAAA,GAAauW,EAAK,OAAA,CAAQa,GAAgB,CAAE,UAAA,EACnDC,MAA0Bd,EAAK,OAAA,CAAQa,GAAgB,CAAE,YAAA,EACzDA,IAAAA,CAAAA,IAIFpX,EAAO,OAAA,GAAU,CAAA,GAElBuS,EAAQ,YAAA,CAAaI,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM3S,GAAQA,EAAO,MAAM,GAChEyW,IACHzW,EAAO,oBAAA,GAAuByW,EAAK,QAAA,CAAS7b,EAAC,GAE7CoF,EAAO,oBAAA,GAAuB,GAE3BuW,KACCA,EAAK,OAAA,CAAQa,GAAgB,CAAE,YAAA,GAAeC,MAA0Bzc,KAC3EoF,CAAAA,EAAO,UAAA,GAAauW,EAAK,OAAA,CAAQa,GAAgB,CAAE,UAAA,EACnDC,MAA0Bd,EAAK,OAAA,CAAQa,GAAgB,CAAE,YAAA,AAAA,GAAA,AAGvD1B,CAAAA,EAAM,MAAA,GAAS,KAAKc,EAAM,MAAA,GAAS,CAAA,KACtCjE,EAAQ,wBAAA,CAAyBI,GAAM3S,GAAQpF,GAAG+X,EAAK,kBAAkB;YAE1E;YACG/X,IAAE,KACL+X,CAAAA,EAAK,OAAA,CAAQ/X,IAAE,EAAC,CAAE,QAAA,GAAW,KAAK,GAAA,CAAI+X,EAAK,IAAA,CAAK,IAAA,CAAK,QAAA,GAAWA,EAAK,OAAA,CAAQ/X,IAAE,EAAC,CAAE,GAAA,EAAK,IACvF+X,EAAK,gBAAA,IAAoBA,EAAK,OAAA,CAAQ/X,IAAE,EAAC,CAAE,QAF5C,AAAA;QAE4C;IAE5C,GAGD2X,EAAQ,SAAA,CAAU,iBAAA,GAAoB;QACrC,IAAIrY,GAAGU,GAAGC,GACNyc,GAAkCC,GAAyBC,GAAqBC,GAChFC,GACAnL,GAAK0I,GAAME,GAAMxC,GAAMgF,GACvB3X,GACAkV;QAEJ,IAAI,IAAA,CAAK,IAAA,KAAS,KAAlB,GAAA;YAIA,MAAO,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,MAAvC,EAGC,IAFA3I,IAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA,EACnC,IAAA,CAAK,aAAA,IACDA,EAAI,IAAA,IAAQ,QAEf,IADA0I,IAAO1I,GACFrS,IAAI,GAAGA,IAAI+a,EAAK,KAAA,CAAM,MAAA,EAAQ/a,IAAK;gBA6BvC,IA5BAib,IAAOF,EAAK,KAAA,CAAM/a,EAAC,EACnByY,IAAO,IAAA,CAAK,YAAA,CAAawC,EAAK,IAAA,CAAK,QAAQ,GAC3CwC,IAAO,IAAA,CAAK,WAAA,CAAYxC,EAAK,IAAA,CAAK,QAAQ,GACtCA,EAAK,IAAA,CAAK,KAAA,GAAQzJ,EAAU,qBAAA,GAC/B4L,IAAmCnC,EAAK,IAAA,CAAK,gCAAA,GAE7CmC,IAAoCK,IAAOA,EAAK,gCAAA,GAAkC,GAE/ExC,EAAK,IAAA,CAAK,KAAA,GAAQzJ,EAAU,oBAAA,GAC/B6L,IAA0BpC,EAAK,IAAA,CAAK,uBAAA,GAEpCoC,IAA2BI,IAAOA,EAAK,uBAAA,GAA0B,GAE9DxC,EAAK,IAAA,CAAK,KAAA,GAAQzJ,EAAU,qBAAA,GAC/B8L,IAAsBrC,EAAK,IAAA,CAAK,mBAAA,GAEhCqC,IAAuBG,IAAOA,EAAK,mBAAA,GAAsB,GAEtDxC,EAAK,IAAA,CAAK,KAAA,GAAQzJ,EAAU,sBAAA,GAC/B+L,IAAuBtC,EAAK,IAAA,CAAK,oBAAA,GAEjCsC,IAAwBE,IAAOA,EAAK,oBAAA,GAAuB,GAE5DxC,EAAK,aAAA,GAAgB,GAEjBA,EAAK,KAAA,CAAM,MAAA,GAAS,KACvB5C,EAAQ,gBAAA,CAAiBI,GAAMwC,GAAMA,EAAK,KAAA,EAAOxC,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,EAAOwC,EAAK,KAAK,GAElFva,IAAI,GAAGA,IAAIua,EAAK,KAAA,CAAM,MAAA,EAAQva,IAAK;oBACvC,IAAIgd,IAAOzC,EAAK,KAAA,CAAMva,EAAtB;oBACA,IAAKC,IAAI,GAAGA,IAAI+c,EAAK,YAAA,EAAc/c,IAAK;wBACvCmF,IAAS,CAAA,GACTA,EAAO,WAAA,GAAc,IAAA,CAAK,aAAA,EAC1BA,EAAO,cAAA,GAAiBmV,EAAK,aAAA,EAC7BA,EAAK,aAAA,IACInV,EAAO,MAAA,GAAS2S,EAAK,OAAA,CAAQ,MAAA,EACtCwC,EAAK,kBAAA,GAAqBxC,EAAK,OAAA,CAAQ,MAAA,EACvCA,EAAK,OAAA,CAAQ,IAAA,CAAK3S,IAClBA,EAAO,QAAA,GAAW2S,EAAK,IAAA,CAAK,QAAA,EAC5B3S,EAAO,SAAA,GAAY2S,EAAK,IAAA,CAAK,IAAA,CAAK,SAAA,EAClC3S,EAAO,iBAAA,GAAoBsX,IAAiC,GAC5DtX,EAAO,WAAA,GAAc2S,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ3S,EAAO,iBAAiB,CAAA,EAC9EA,EAAO,IAAA,GAAOwX,GACVI,EAAK,KAAA,GAAQlM,EAAU,eAAA,IAC1B1L,CAAAA,EAAO,IAAA,GAAO4X,EAAK,WAAA,CAAY/c,EAAC,AAAA,GAEjC8X,EAAK,YAAA,IAAgB3S,EAAO,IAAA,EAC5BA,EAAO,QAAA,GAAWuX,GACdK,EAAK,KAAA,GAAQlM,EAAU,mBAAA,IAC1B1L,CAAAA,EAAO,QAAA,GAAW4X,EAAK,eAAA,CAAgB/c,EAAC,AAAA,GAEzC8X,EAAK,gBAAA,IAAoB3S,EAAO,QAAA,EAC5B2S,EAAK,iBAAA,IAAqB9X,IAAI,IACjCmF,EAAO,GAAA,GAAM2S,EAAK,OAAA,CAAQA,EAAK,OAAA,CAAQ,MAAA,GAAO,EAAC,CAAE,GAAA,GAAIA,EAAK,OAAA,CAAQA,EAAK,OAAA,CAAQ,MAAA,GAAO,EAAC,CAAE,QAAA,GAErFwC,CAAAA,EAAK,IAAA,GACRnV,EAAO,GAAA,GAAMmV,EAAK,IAAA,CAAK,mBAAA,GAEvBnV,EAAO,GAAA,GAAM,GAEd2S,EAAK,iBAAA,GAAoB,CAAA,CAAA,GAE1B3S,EAAO,GAAA,GAAMA,EAAO,GAAA,EAChB4X,EAAK,KAAA,GAAQlM,EAAU,qBAAA,IAC1B1L,CAAAA,EAAO,GAAA,GAAMA,EAAO,GAAA,GAAM4X,EAAK,8BAAA,CAA+B/c,EAAC,AAAA,GAEhEqa,IAAeuC,GACXG,EAAK,KAAA,GAAQlM,EAAU,gBAAA,GAC1BwJ,IAAe0C,EAAK,YAAA,CAAa/c,EAAC,GACxBA,MAAM,KAAM+c,EAAK,KAAA,GAAQlM,EAAU,qBAAA,IAC7CwJ,CAAAA,IAAe0C,EAAK,kBAAA,AAAA,GAErB5X,EAAO,OAAA,GAAY,CAAAkV,CAAAA,KAAgB,KAAK,CAAA,GACxClV,EAAO,UAAA,GAAckV,KAAgB,KAAK,GAC1ClV,EAAO,UAAA,GAAckV,KAAgB,KAAK,GAC1ClV,EAAO,cAAA,GAAkBkV,KAAgB,KAAK,GAC9ClV,EAAO,cAAA,GAAkBkV,KAAgB,KAAK,GAC9ClV,EAAO,oBAAA,GAAwBkV,IAAe;wBAE9C,IAAI2C,KAAQ,CAAA,CAAA1C,CAAAA,EAAK,IAAA,CAAK,KAAA,GAAQzJ,EAAU,0BAAA,AAAA,GACpCoM,KAAQ,CAAA,CAAA3C,CAAAA,EAAK,IAAA,CAAK,KAAA,GAAQzJ,EAAU,8BAAA,AAAA,GACpCqM,KAAO,CAAA,CAAAH,CAAAA,EAAK,KAAA,GAAQlM,EAAU,sBAAA,AAAA,GAC9BsM,IAAM;wBACLH,KAWJG,IAAM7C,EAAK,IAAA,CAAK,gBAAA,GAVX2C,MACAld,MAAM,IAMVod,IAAM/C,EAAK,KAAA,GAHV+C,IAAMN,GAQL9c,MAAM,KAAKC,MAAM,IAChBkd,KACH/X,EAAO,MAAA,GAASgY,IAAMJ,EAAK,WAAA,GAE3B5X,EAAO,MAAA,GAASgY,IAGjBhY,EAAO,MAAA,GAAS0X,GAEjBA,IAAoB1X,EAAO,MAAA,GAASA,EAAO,IAAA,EAAA,AACvCmV,CAAAA,EAAK,KAAA,CAAM,MAAA,GAAS,KAAKA,EAAK,KAAA,CAAM,MAAA,GAAS,KAChDxC,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,KAAKA,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAA,KAC3EJ,EAAQ,wBAAA,CAAyBI,GAAM3S,GAAQA,EAAO,cAAA,EAAgBmV,EAAK,kBAAkB;oBAE9F;gBACD;gBACD,IAAIA,EAAK,IAAA,EAAM;oBACdxC,EAAK,uBAAA,GAA0B,CAA/B;oBACA,IAAIsF,KAAe9C,EAAK,kBAAxB;oBACA,IAAKva,IAAI,GAAGA,IAAIua,EAAK,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQva,IACzCqd,MAAgB9C,EAAK,IAAA,CAAK,OAAA,CAAQva,EAAC,CAAE,YAAA,EACrCoF,IAAS2S,EAAK,OAAA,CAAQsF,KAAa,EAAC,EACpCjY,EAAO,UAAA,GAAamV,EAAK,IAAA,CAAK,OAAA,CAAQva,EAAC,CAAE,UAFzC;gBAID;YACD;QAAA;IAGH,GAMD2X,EAAQ,SAAA,CAAU,SAAA,GAAY,SAASI,CAAAA,EAAMe,CAAAA;QAC5C,IAAIzK,GACAjJ,IAAS2S,EAAK,OAAA,CAAQe,EAD1B;QAGA,IAAI,CAAC,IAAA,CAAK,IAAV,EACC,OAAO;QAGR,IAAI,CAAC1T,EAAO,IAAZ,EAECA,EAAO,IAAA,GAAO,IAAI,WAAWA,EAAO,IAAI,GACxCA,EAAO,WAAA,GAAc,GACrB,IAAA,CAAK,eAAA,IAAmBA,EAAO,IAAA,EAC/BzC,EAAI,KAAA,CAAM,WAAW,wBAAsBmW,IAAU,gBAAcf,EAAK,IAAA,CAAK,QAAA,GAAS,cAAY3S,EAAO,IAAA,GAAK,cAAY,IAAA,CAAK,eAAA,GAAgB;aAAG,IACxIA,EAAO,WAAA,IAAeA,EAAO,IAD2G,EAGlJ,OAAOA;QAIR,OAAY;YACX,IAAIsK,IAAQ,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,CAAA,GAAMtK,EAAO,MAAA,GAASA,EAAO,WAAA,EAAa,CAAA;YAC/E,IAAIsK,IAAQ,IAAI;gBACfrB,IAAS,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQqB,EAA7B;gBACA,IAAI4N,IAAmBjP,EAAO,UAAA,GAAcjJ,CAAAA,EAAO,MAAA,GAASA,EAAO,WAAA,GAAciJ,EAAO,SAAxF,AAAA;gBACA,IAAIjJ,EAAO,IAAA,GAAOA,EAAO,WAAA,IAAekY,GAGvC,OAAA3a,EAAI,KAAA,CAAM,WAAU,qBAAmBmW,IAAU,yBAAuB1T,EAAO,WAAA,GAAY,cACzFA,CAAAA,EAAO,MAAA,GAAOA,EAAO,WAAA,GAAciJ,EAAO,SAAA,AAAA,IAAW,iBAAgBjJ,CAAAA,EAAO,IAAA,GAAOA,EAAO,WAAA,AAAA,IAAa,iBAAeA,EAAO,IAAA,GAAK,MAEpImH,EAAW,MAHX,CAGkBnH,EAAO,IAAA,CAAK,MAAnB,EAA2BA,EAAO,WAAf,EACZiJ,GAAQjJ,EAAO,MAAA,GAAOA,EAAO,WAAA,GAAciJ,EAAO,SAAlD,EAA6DjJ,EAAO,IAAA,GAAOA,EAAO,WAAhC,GAGpEiJ,EAAO,SAAA,IAAajJ,EAAO,IAAA,GAAOA,EAAO,WAAA,EACzC,IAAA,CAAK,MAAA,CAAO,cAAA,IAEZA,EAAO,WAAA,GAAcA,EAAO,IAAA,EAErBA;gBAIP,IAAIkY,MAAqB,GAAG,OAAO;gBAEnC3a,EAAI,KAAA,CAAM,WAAU,qBAAmBmW,IAAU,iCAA+B1T,EAAO,WAAA,GAAY,cACjGA,CAAAA,EAAO,MAAA,GAAOA,EAAO,WAAA,GAAciJ,EAAO,SAAA,AAAA,IAAW,iBAAeiP,IAAiB,iBAAelY,EAAO,IAAA,GAAK,MAElHmH,EAAW,MAHX,CAGkBnH,EAAO,IAAA,CAAK,MAAnB,EAA2BA,EAAO,WAAf,EACZiJ,GAAQjJ,EAAO,MAAA,GAAOA,EAAO,WAAA,GAAciJ,EAAO,SAAlD,EAA6DiP,IAC/ElY,EAAO,WAAA,IAAekY,GAGtBjP,EAAO,SAAA,IAAaiP,GACpB,IAAA,CAAK,MAAA,CAAO,cALmE;YASnF,OACG,OAAO;QAER;IACD,GAGD3F,EAAQ,SAAA,CAAU,aAAA,GAAgB,SAASI,CAAAA,EAAMe,CAAAA;QAChD,IAAI1T,IAAS2S,EAAK,OAAA,CAAQe,EAA1B;QACA,OAAI1T,EAAO,IAAA,GACV,CAAA,IAAA,CAAK,eAAA,IAAmBA,EAAO,IAAA,EAC/BA,EAAO,IAAA,GAAO,MACdA,EAAO,WAAA,GAAc,GACdA,EAAO,IAAA,AAAA,IAEP;IAER,GAEDuS,EAAQ,SAAA,CAAU,0BAAA,GAA6B;QAC9C,OAAO,IAAA,CAAK,eAAZ;IACA,GAGDA,EAAQ,SAAA,CAAU,SAAA,GAAY;QAC7B,IAAIrY,GACAie,IAAS;QACb,IAAKje,IAAI,GAAGA,IAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IAAK;YAC5C,IAAIyY,IAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAMzY,EAA3B;YACIA,IAAE,KACLie,CAAAA,KAAQ,GAAA,GAETA,KAAUxF,EAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,EAAC,CAAE,QAH9C;QAIA;QACD,OAAOwF;IACP,GAGD5F,EAAQ,SAAA,CAAU,WAAA,GAAc,SAASC,CAAAA;QACxC,IAAItY;QACJ,IAAI,CAAC,IAAA,CAAK,IAAA,IAAQ,CAAC,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,OAAO;QAC1C,IAAKA,IAAI,GAAGA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IAAK;YACjD,IAAIyd,IAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAMzd,EAAhC;YACA,IAAIyd,EAAK,QAAA,IAAYnF,GAAI,OAAOmF;QAChC;QACD,OAAO;IACP,GAGDpF,EAAQ,SAAA,CAAU,YAAA,GAAe,SAASC,CAAAA;QACzC,IAAI,IAAA,CAAK,IAAA,KAAS,KAAlB,GACC,OAAO;QAER,IAAA,IAAS5X,IAAI,GAAGA,IAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IAAK;YAChD,IAAI+X,IAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM/X,EAA3B;YACA,IAAI+X,EAAK,IAAA,CAAK,QAAA,IAAYH,GAAI,OAAOG;QACrC;QACD,OAAO;IACP,GAEDJ,EAAQ,SAAA,CAAU,KAAA,GAAQ,EAAA,EAE1BA,EAAQ,SAAA,CAAU,aAAA,GAAgB,GAElCA,EAAQ,SAAA,CAAU,eAAA,GAAkB;QACnC,IAAI6F,IAAQ,IAAA,CAAK,KAAA,EACble,GAAGU,GACHqU,GACAoJ,IAAO,IAAA,CAAK,IAHhB;QAIA,IAAIA,KAAS,QACTA,EAAK,IAAA,KAAS,KAAA,KACdA,EAAK,IAAA,KAAS,KAAA,GAClB;YAAA,IAAKne,IAAI,GAAGA,IAAIme,EAAK,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQne,IAC5C+U,IAAO,CAAA,GACPA,EAAK,EAAA,GAAKoJ,EAAK,IAAA,CAAK,UAAA,CAAWne,EAAC,CAAE,OAAA,EAClCke,CAAAA,CAAMnJ,EAAK,EAAE,CAAA,GAAIA,GACjBA,EAAK,MAAA,GAAS,EAAA,EACdA,EAAK,IAAA,GAAOoJ,EAAK,IAAA,CAAK,UAAA,CAAWne,EAAC,CAAE,SAAA,EAChCme,EAAK,IAAA,CAAK,UAAA,CAAWne,EAAC,CAAE,gBAAA,GAAmB,KAC9C+U,CAAAA,EAAK,UAAA,GAAaoJ,EAAK,IAAA,CAAK,WAAA,CAAYA,EAAK,IAAA,CAAK,UAAA,CAAWne,EAAC,CAAE,gBAAA,GAAiB,EAAC,AAAA,GAE/Eme,EAAK,IAAA,CAAK,UAAA,CAAWne,EAAC,CAAE,SAAA,GAC3B+U,EAAK,IAAA,GAAOoJ,EAAK,IAAA,CAAK,UAAA,CAAWne,EAAC,CAAE,SAAA,GAEpC+U,EAAK,IAAA,GAAO,QAEbA,EAAK,YAAA,GAAeoJ,EAAK,IAAA,CAAK,UAAA,CAAWne,EAAC,CAAE,YAAA,EAC5C+U,EAAK,gBAAA,GAAmBoJ,EAAK,IAAA,CAAK,UAAA,CAAWne,EAAC,CAAE,gBAdhD;YAgBD,IAAIme,EAAK,IAAT,EACC,IAAIne,IAAI,GAAGA,IAAIme,EAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQne,IAAK;gBAE3C,IAAIoe,IAAUD,EAAK,IAAA,CAAK,KAAA,CAAMne,EAA9B;gBAMA,OALA+U,IAAOmJ,CAAAA,CAAME,EAAQ,OAAO,CAAA,EACxBA,EAAQ,oBAAA,KAAyB,KACpC/a,CAAAA,EAAI,IAAA,CAAK,8DACT0R,EAAK,MAAA,GAASoJ,EAAK,IAAA,CAAK,KAAA,CAAMC,EAAQ,oBAAA,GAAqB,EAAC,AAAA,GAEtDA,EAAQ,mBAAA;oBACd,KAAK;wBACL;oBACA,KAAK;wBACL/a,EAAI,IAAA,CAAK;wBACT;oBACA,KAAK;wBACLA,EAAI,IAAA,CAAK;wBACT;gBACA;gBAGD,IAFA0R,EAAK,OAAA,GAAU,EAAA,EACfA,EAAK,IAAA,GAAO,GACPrU,IAAI,GAAGA,IAAI0d,EAAQ,OAAA,CAAQ,MAAA,EAAQ1d,IACvCqU,EAAK,OAAA,CAAQrU,EAAC,GAAI,CAAA,GAClBqU,EAAK,OAAA,CAAQrU,EAAC,CAAE,MAAA,GAAS0d,EAAQ,OAAA,CAAQ1d,EAAC,CAAE,aAAA,GAAgB0d,EAAQ,WAAA,EACpErJ,EAAK,OAAA,CAAQrU,EAAC,CAAE,MAAA,GAAS0d,EAAQ,OAAA,CAAQ1d,EAAC,CAAE,aAAA,EAC5CqU,EAAK,OAAA,CAAQrU,EAAC,CAAE,WAAA,GAAc,GAC9BqU,EAAK,IAAA,IAAQA,EAAK,OAAA,CAAQrU,EAAC,CAAE,MAJ7B;YAMD;YAKF,IAHIyd,EAAK,IAAA,IACRD,CAAAA,CAAAA,CAAMC,EAAK,IAAA,CAAK,OAAO,CAAA,CAAE,OAAA,GAAU,CAAA,CAAA,GAEhCA,EAAK,IAAT,EACC,IAAKne,IAAE,GAAGA,IAAGme,EAAK,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQne,IAAK;gBAC9C,IAAImF,IAAMgZ,EAAK,IAAA,CAAK,UAAA,CAAWne,EAA/B;gBACA,IAAKU,IAAE,GAAGA,IAAEyE,EAAI,UAAA,CAAW,MAAA,EAAQzE,IAClCwd,CAAAA,CAAM/Y,EAAI,YAAY,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK;oBAAC,MAAMA,EAAI,IAAA;oBAAM,IAAIA,EAAI,UAAA,CAAWzE,EAAC;gBAAC;YAE3E;YAEF,IAAIyd,EAAK,IAAT,EACC,IAAA,IAASxd,IAAI,GAAGA,IAAIwd,EAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQxd,IAAK;gBAChD,IAAI0d,IAAOF,EAAK,IAAA,CAAK,KAAA,CAAMxd,EAA3B;gBACA,IAAKX,IAAI,GAAGA,IAAIqe,EAAK,YAAA,CAAa,MAAA,EAAQre,IAAK;oBAC9C,IAAIse,IAAcD,EAAK,YAAA,CAAare,EAApC;oBAMA,IALA+U,IAAOmJ,CAAAA,CAAMI,EAAY,EAAE,CAAA,EACvBvJ,EAAK,UAAA,KAAe,KAAA,KACvBA,CAAAA,EAAK,UAAA,GAAa,CAAA,GAClBA,EAAK,UAAA,CAAW,KAAA,GAAQ,EAAA,AAAA,GAEpBrU,IAAI,GAAGA,IAAI4d,EAAY,KAAA,CAAM,MAAA,EAAQ5d,IAAK;wBAC9C,IAAI6d,IAAYD,EAAY,KAAA,CAAM5d,EAAlC;wBACA,IAAI6d,EAAU,cAAA,GAAiB,KAAKA,EAAU,cAAA,GAAe,IAAIJ,EAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ;4BAC7F,IAAIK,IAAUL,EAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAMI,EAAU,cAAA,GAAe,EAA5D;4BACAxJ,EAAK,UAAA,CAAWyJ,EAAQ,IAAI,CAAA,GAAIA,GAChCzJ,EAAK,UAAA,CAAW,KAAA,CAAM,IAAA,CAAKyJ;wBAC3B;oBACD;gBACD;YACD;QAAA;IAEF,GAEDnG,EAAQ,SAAA,CAAU,OAAA,GAAU,SAASoG,CAAAA;QACpC,IAAI1P,GACAgG;QAEJ,IAAI,CAAC,IAAA,CAAK,IAAV,EACC,OAAO;QAIR,IADCA,IAAO,IAAA,CAAK,KAAA,CAAM0J,EAAO,EACtB,CAAC1J,EAAK,IAAA,IAAQA,EAAK,IAAvB,EAECA,EAAK,IAAA,GAAO,IAAI,WAAWA,EAAK,IAAI,GACpCA,EAAK,WAAA,GAAc,GACnB,IAAA,CAAK,aAAA,IAAiBA,EAAK,IAAA,EAC3B1R,EAAI,KAAA,CAAM,WAAW,sBAAoBob,IAAQ,cAAY1J,EAAK,IAAA,GAAK,cAAY,IAAA,CAAK,aAAA,GAAc;aAAG,IAC/FA,EAAK,WAAA,KAAgBA,EAAK,IADqE,EAGzG,OAAOA;QAKR,IAAA,IAAS/U,IAAI,GAAGA,IAAI+U,EAAK,OAAA,CAAQ,MAAA,EAAQ/U,IAAK;YAC7C,IAAIiV,IAASF,EAAK,OAAA,CAAQ/U,EAA1B;YACA,IAAIiV,EAAO,WAAA,KAAgBA,EAAO,MAAA,EAE3B;gBACN,IAAI7E,IAAQ,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,CAAA,GAAM6E,EAAO,MAAA,GAASA,EAAO,WAAA,EAAa,CAAA;gBAC/E,IAAI7E,IAAQ,IAAI;oBACfrB,IAAS,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQqB,EAA7B;oBACA,IAAI4N,IAAmBjP,EAAO,UAAA,GAAckG,CAAAA,EAAO,MAAA,GAASA,EAAO,WAAA,GAAclG,EAAO,SAAxF,AAAA;oBACA,IAAIkG,EAAO,MAAA,GAASA,EAAO,WAAA,IAAe+I,GAGzC3a,EAAI,KAAA,CAAM,WAAU,mBAAiBob,IAAQ,cAAYze,IAAE,yBAAuBiV,EAAO,WAAA,GACxF,cAAaA,CAAAA,EAAO,MAAA,GAAOA,EAAO,WAAA,GAAclG,EAAO,SAAA,AAAA,IAAW,iBAAgBkG,CAAAA,EAAO,MAAA,GAASA,EAAO,WAAA,AAAA,IACzG,wBAAsBA,EAAO,MAAA,GAAO,sBAAoBF,EAAK,IAAA,GAAK,MAEnE9H,EAAW,MAJX,CAIkB8H,EAAK,IAAA,CAAK,MAAjB,EAAyBA,EAAK,WAAb,EACVhG,GAAQkG,EAAO,MAAA,GAAOA,EAAO,WAAA,GAAclG,EAAO,SAAlD,EAA6DkG,EAAO,MAAA,GAASA,EAAO,WAAlC,GAGpElG,EAAO,SAAA,IAAakG,EAAO,MAAA,GAASA,EAAO,WAAA,EAC3C,IAAA,CAAK,MAAA,CAAO,cAAA,IAEZF,EAAK,WAAA,IAAgBE,EAAO,MAAA,GAASA,EAAO,WAAA,EAC5CA,EAAO,WAAA,GAAcA,EAAO,MAP0E;yBAWtG,OAAA5R,EAAI,KAAA,CAAM,WAAU,mBAAiBob,IAAQ,cAAYze,IAAE,iCAA+BiV,EAAO,WAAA,GAAY,cAC3GA,CAAAA,EAAO,MAAA,GAAOA,EAAO,WAAA,GAAclG,EAAO,SAAA,AAAA,IAAW,iBAAeiP,IACrE,wBAAsB/I,EAAO,MAAA,GAAO,sBAAoBF,EAAK,IAAA,GAAK,MAEnE9H,EAAW,MAJX,CAIkB8H,EAAK,IAAA,CAAK,MAAjB,EAAyBA,EAAK,WAAb,EACVhG,GAAQkG,EAAO,MAAA,GAAOA,EAAO,WAAA,GAAclG,EAAO,SAAlD,EAA6DiP,IAC/E/I,EAAO,WAAA,IAAe+I,GACtBjJ,EAAK,WAAA,IAAeiJ,GAGpBjP,EAAO,SAAA,IAAaiP,GACpB,IAAA,CAAK,MAAA,CAAO,cAAA,IACL;gBAEZ,OACI,OAAO;YAER;QACD;QACD,OAAIjJ,EAAK,WAAA,KAAgBA,EAAK,IAAA,GAEtBA,IAEA;IAER,GAGDsD,EAAQ,SAAA,CAAU,WAAA,GAAc,SAASoG,CAAAA;QACxC,IAAI1J,IAAO,IAAA,CAAK,KAAA,CAAM0J,EAAtB;QACA,IAAI1J,EAAK,IAAA,EAAM;YACd,IAAA,CAAK,aAAA,IAAiBA,EAAK,IAAA,EAC3BA,EAAK,IAAA,GAAO,MACZA,EAAK,WAAA,GAAc;YACnB,IAAA,IAAS/U,IAAI,GAAGA,IAAI+U,EAAK,OAAA,CAAQ,MAAA,EAAQ/U,IAAK;gBAC7C,IAAIiV,IAASF,EAAK,OAAA,CAAQ/U,EAA1B;gBACAiV,EAAO,WAAA,GAAc;YACrB;YACD,OAAOF,EAAK,IAAZ;QACF,OACE,OAAO;IAER,GAGDsD,EAAQ,SAAA,CAAU,YAAA,GAAe,SAASqG,CAAAA;QACzC,IAAA,IAAQ1e,KAAK,IAAA,CAAK,KAAA,CAAO;YACxB,IAAI+U,IAAO,IAAA,CAAK,KAAA,CAAM/U,EAAtB;YACA,IAAA,CAAK,OAAA,CAAQ+U,EAAK,EAAE,GAChB2J,KAAY,CAAC3J,EAAK,IAAA,IACrB2J,CAAAA,EAAS3J,IACTA,EAAK,IAAA,GAAO,CAAA,GACZA,EAAK,IAAA,GAAO,IAJb;QAMA;IACD,GAEDsD,EAAQ,SAAA,CAAU,OAAA,GAAU,SAASjG,CAAAA;QACpC,IAAA,IAAQpS,KAAK,IAAA,CAAK,KAAA,CAAO;YACxB,IAAI+U,IAAO,IAAA,CAAK,KAAA,CAAM/U,EAAtB;YACA,IAAI+U,EAAK,IAAA,KAAS3C,GACjB,OAAO2C,EAAK,EAAZ;QAED;QACD,OAAO;IACP,GAEDsD,EAAQ,SAAA,CAAU,cAAA,GAAiB;QAClC,OAAK,IAAA,CAAK,IAAA,GAGF,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,GAFf;IAIR,GAEDA,EAAQ,SAAA,CAAU,cAAA,GAAiB;QAClC,OAAI,CAAC,IAAA,CAAK,IAAA,IAAQ,CAAC,IAAA,CAAK,IAAA,CAAK,IAAA,GACrB,OAEA,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAO;IAE3C,GAEDA,EAAQ,SAAA,CAAU,yBAAA,GAA4B,SAASgC,CAAAA;QACtD,IAAI7B,IAAU6B,KAAY,CAAA,GACtBtF,IAAO;QAMX,IALIyD,EAAQ,MAAA,GACXzD,IAAO,IAAA,CAAK,OAAA,CAAQyD,EAAQ,MAAM,IAElCzD,IAAO,IAAA,CAAK,cAAA,IAETA,KAAQ,MAAM,OAAO;QAEzB,IAAI4J,IAAO,IAAItG;QACfsG,EAAK,eAAA,GAAkB,CAAvB;QAEA,IAAIC,IAAe;YAAE,MAAM7J,EAAK,IAAA;YAAM,mBAAmBA,EAAK,UAAA,CAAW,KAAA;QAAK;QAC1EA,EAAK,UAAA,CAAW,IAAA,IACnB6J,CAAAA,EAAa,KAAA,GAAQ7J,EAAK,UAAA,CAAW,IAAA,CAAK,WAAA,EAC1C6J,EAAa,MAAA,GAAS7J,EAAK,UAAA,CAAW,IAAA,CAAK,YAF5C,AAAA;QAIA,IAAI8J,IAAUF,EAAK,QAAA,CAASC;QAC5B,OAAIC,IACHF,CAAAA,EAAK,SAAA,CAAUE,GAAS9J,EAAK,IAAI,GAC1B4J,CAAAA,IAEA;IAER,GAIDtG,EAAQ,SAAA,CAAU,KAAA,GAAQ,SAASyG,CAAAA;QAClC,IAAA,IAAS9e,IAAE,GAAGA,IAAE,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IAClC,IAAA,CAAK,KAAA,CAAMA,EAAC,CAAE,KAAA,CAAM8e;IAErB,GAEDzG,EAAQ,SAAA,CAAU,cAAA,GAAiB,SAASkB,CAAAA,EAAUwF,CAAAA,EAAcjE,CAAAA;QACnE,IAAIrC,IAAO,IAAA,CAAK,YAAA,CAAac,IACzBzT,IAAS,IAAA,CAAK,SAAA,CAAU2S,GAAMsG;QAClC,IAAIjZ,KAAU,MACb,OAAA,IAAA,CAAK,6BAAA,CAA8B2S,EAAK,OAAA,CAAQsG,EAAa,GACtD;QAGR,IAAIhW,IAAS+R,KAAW,IAAI7N;QAC5BlE,EAAO,UAAA,GAAakE,EAAW,UAA/B;QAEA,IAAI8N,IAAO,IAAA,CAAK,sBAAA,CAAuBjV;QACvCiV,EAAK,KAAA,CAAMhS,IAGXgS,EAAK,KAAA,CAAM,EAAC,CAAE,KAAA,CAAM,EAAC,CAAE,WAAA,GAAcA,EAAK,IAAA,GAAK,GAC/C1X,EAAI,KAAA,CAAM,UAAU,0CAAwC0X,EAAK,KAAA,CAAM,EAAC,CAAE,KAAA,CAAM,EAAC,CAAE,WAAW,GAC9FhS,EAAO,YAAA,CAAagS,EAAK,KAAA,CAAM,EAAC,CAAE,KAAA,CAAM,EAAC,CAAE,oBAAA,EAAsBA,EAAK,KAAA,CAAM,EAAC,CAAE,KAAA,CAAM,EAAC,CAAE,WAAW;QAEnG,IAAIiE,IAAO,IAAIxN,EAAU,OAAzB;QACA,OAAAwN,EAAK,IAAA,GAAOlZ,EAAO,IAAA,EACnBkZ,EAAK,KAAA,CAAMjW,IACJA;IACP,GAGDsP,EAAQ,0BAAA,GAA6B,SAAS4G,CAAAA,EAAMpF,CAAAA,EAAMqF,CAAAA,EAAgBC,CAAAA;QACzE,IAAInf;QAKJqD,EAAI,KAAA,CAAM,WAAW;QAErB,IAAI0F,IAAS,IAAIkE;QACjBlE,EAAO,UAAA,GAAakE,EAAW,UAAA,EAC/BgS,EAAK,KAAA,CAAMlW;QAGX,IAAIqW,IAAOvF,EAAK,GAAA,CAAI;QAIpB,IAHIqF,KACHE,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,qBAAqBF,IAEtClf,IAAI,GAAGA,IAAI6Z,EAAK,KAAA,CAAM,MAAA,EAAQ7Z,IAClCof,EAAK,GAAA,CAAI,QAAQ,GAAA,CAAI,YAAYvF,EAAK,KAAA,CAAM7Z,EAAC,CAAE,IAAA,CAAK,QAAQ,EACvD,GAAA,CAAI,oCAAoC,GACxC,GAAA,CAAI,2BAA2Bmf,GAC/B,GAAA,CAAI,uBAAuB,GAC3B,GAAA,CAAI,wBAAwB;QAElC,OAAAtF,EAAK,KAAA,CAAM9Q,IAEJA,EAAO,MAFd;IAIA,GAEDsP,EAAQ,SAAA,CAAU,IAAA,GAAO,SAASjG,CAAAA;QACjC,IAAIrJ,IAAS,IAAIkE;QACjBlE,EAAO,UAAA,GAAakE,EAAW,UAAA,EAC/B,IAAA,CAAK,KAAA,CAAMlE,IACXA,EAAO,IAAA,CAAKqJ;IACZ,GAEDiG,EAAQ,SAAA,CAAU,SAAA,GAAY;QAC7B,IAAItP,IAAS,IAAIkE;QACjB,OAAAlE,EAAO,UAAA,GAAakE,EAAW,UAAA,EAC/B,IAAA,CAAK,KAAA,CAAMlE,IACJA,EAAO,MAFd;IAGA,GAEDsP,EAAQ,SAAA,CAAU,sBAAA,GAAyB;QAC1C,IAAIrY,GAGAqf,GACA5G,GACA6G;QAUJ,IATI,IAAA,CAAK,SAAA,KAAc,QACtBjc,EAAI,IAAA,CAAK,UAAU,kCAEf,IAAA,CAAK,0BAAA,IACT,CAAA,IAAA,CAAK,0BAAA,GAA6B,CAAA,GAClC,IAAA,CAAK,cAAA,GAAiB,GACtB,IAAA,CAAK,WAAA,EAAW,GAEjBgc,IAAW,EAAA,EACNrf,IAAI,GAAGA,IAAI,IAAA,CAAK,gBAAA,CAAiB,MAAA,EAAQA,IAAK;YAClD,IAAI6Z,IAAO,IAAIrI,EAAU,OAAzB;YACAqI,EAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,EACnBA,EAAK,KAAA,CAAM,IAAA,CAAKA,EAAK,IAAI,GAC5BpB,IAAO,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,gBAAA,CAAiBzY,EAAC,CAAE,EAAE,GACpD6Z,EAAK,KAAA,CAAM,IAAA,CAAKpB,IAChBoB,EAAK,KAAA,CAAM,IAAA,CAAKpB,IAChB6G,IAAM,CAAA,GACNA,EAAI,EAAA,GAAK7G,EAAK,IAAA,CAAK,QAAA,EACnB6G,EAAI,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiBtf,EAAC,CAAE,IAAA,EACpCsf,EAAI,MAAA,GAASjH,EAAQ,0BAAA,CAA2B,IAAA,CAAK,IAAA,EAAMwB,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,iBAAA,GAAmB,KAAA,GAAa,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM7Z,EAAC,CAAE,OAAA,CAAQ,MAAA,GAAO,IAAI,IAAA,CAAK,IAAA,CAAK,KAAA,CAAMA,EAAC,CAAE,OAAA,CAAQ,EAAC,CAAE,QAAA,GAAU,IAC5Oqf,EAAS,IAAA,CAAKC;QACd;QACD,OAAOD;IACP,GAOD7N,EAAU,GAAA,CAAI,SAAA,CAAU,WAAA,GAAc,SAAS+N,CAAAA;QAC9C,IAAA,CAAK,IAAA,IAAQ,GACT,IAAA,CAAK,IAAA,GAAOlR,KACf,CAAA,IAAA,CAAK,IAAA,IAAQ,CAAA,GAEV,IAAA,CAAK,IAAA,KAAS,UACjB,CAAA,IAAA,CAAK,IAAA,IAAQ,EAAA,GAEdkR,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,UAAQ,IAAA,CAAK,IAAI,GAC1CA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,UAAQ,IAAA,CAAK,IAAI;IAC1C,GAED/N,EAAU,OAAA,CAAQ,SAAA,CAAU,WAAA,GAAc,SAAS+N,CAAAA;QAClD,IAAA,CAAK,IAAA,IAAQ,GACb/N,EAAU,GAAA,CAAI,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM+N,IAC/CA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,aAAW,IAAA,CAAK,OAAO,GAChDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,WAAS,IAAA,CAAK,KAAK;IAC5C,GAED/N,EAAU,GAAA,CAAI,SAAA,CAAU,KAAA,GAAQ,SAAS+N,CAAAA;QACxC,IAAA,CAAK,WAAA,CAAYA;IACjB,GAED/N,EAAU,YAAA,CAAa,SAAA,CAAU,KAAA,GAAQ,SAAS+N,CAAAA;QACjD,IAAA,CAAK,WAAA,CAAYA;QACjB,IAAA,IAASvf,IAAE,GAAGA,IAAE,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IAClC,IAAI,IAAA,CAAK,KAAA,CAAMA,EAAC,EAAG;YAClB,IAAIwf,IAAcD,EAAO,MAAzB;YACAA,EAAO,MAAA,IAAU,KACjB,IAAA,CAAK,KAAA,CAAMvf,EAAC,CAAE,KAAA,CAAMuf,IACpBA,EAAO,MAAA,GAASC;QAChB;IAEF,GAEDnH,EAAQ,SAAA,CAAU,KAAA,GAAQ,SAASkH,CAAAA;QAClCA,EAAO,MAAA,GAAS;QAChB,IAAA,IAASvf,IAAE,GAAGA,IAAE,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQA,IAC9B,IAAA,CAAK,KAAA,CAAMA,EAAC,IACf,IAAA,CAAK,KAAA,CAAMA,EAAC,CAAE,KAAA,CAAMuf;IAGtB,GAED/N,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAAS+N,CAAAA;QAC5C/N,EAAU,OAAA,CAAQ,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM+N,IACnDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,oBAAkB,IAAA,CAAK,aAAa,GAC7DA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,wBAAsB,IAAA,CAAK,iBAAiB,GACrEA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,gBAAc,IAAA,CAAK,SAAS,GACrDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,eAAa,IAAA,CAAK,QAAQ,GACnDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,WAAS,IAAA,CAAK,IAAI,GAC3CA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,aAAY,CAAA,IAAA,CAAK,MAAA,IAAQ,CAAA,IAClDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,aAAW,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QACrDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,oBAAkB,IAAA,CAAK,aAAa;IAC7D,GAED/N,EAAU,OAAA,CAAQ,SAAA,CAAU,KAAA,GAAQ,SAAS+N,CAAAA;QAC5C/N,EAAU,OAAA,CAAQ,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM+N,IACnDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,oBAAkB,IAAA,CAAK,aAAa,GAC7DA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,wBAAsB,IAAA,CAAK,iBAAiB,GACrEA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,eAAa,IAAA,CAAK,QAAQ,GACnDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,eAAa,IAAA,CAAK,QAAQ,GACnDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,aAAY,CAAA,IAAA,CAAK,MAAA,IAAQ,CAAA,IAClDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,aAAW,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QACrDA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,YAAU,IAAA,CAAK,KAAK,GAC7CA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,sBAAoB,IAAA,CAAK,eAAe,GACjEA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,YAAU,IAAA,CAAK,KAAK,GAC7CA,EAAO,GAAA,CAAIA,EAAO,MAAA,GAAO,aAAW,IAAA,CAAK,MAAM;IAC/C;IAKD,IAAIE,IAAS,CAAA;IAEbA,EAAO,UAAA,GAAa,SAAUC,CAAAA,EAAeC,CAAAA;QAE5C,IAAIC,IAAgBF,MAAkB,KAAA,IAAYA,IAAgB,CAAA,GAC9Df,IAAO,IAAItG,EAAQsH;QACvB,OAAAhB,EAAK,eAAA,GAAmB,CAAAiB,GACjBjB;IACP,GAGAnS,EAAqB,UAAA,GAAAiT,EAAO,UAJrB;A,C,E;ACtxQKI,MAAAA,IAAAA,aAAAA,GAAAA,GAAAA,KAAAA,IAAqB;IAChC,YAAY;IACZ,cAAc;IACd,OAAO;AACT;ACvDgB,SAAAC,GAAkBnB,CAAAA,EAAerP,CAAAA;IACzC,MAAAyQ,IAASzQ,EAAK,WAAA,CAAY,EAAC,EAC3B/H,IAKF,CAAA;IACJ,IAAIwY,KAAU,MAAM;QAClB,MAAMC,IAAYC,GAAoBtB,EAAK,YAAA,CAAaoB,EAAO,EAAE,GAAG,MAAA,EAC9D,EAAE,SAAAG,CAAAA,EAAS,MAAAlX,CAAAA,EAAAA,GAAS+W,EAAO,KAAA,CAAM,UAAA,CAAW,UAC9C;YAAE,SAAS;YAA0B,MAAM;QAAO,IAClDA,EAAO,KAAA,CAAM,UAAA,CAAW,UACtB;YAAE,SAAS;YAA2B,MAAM;QAAA,IAC5C;YAAE,SAAS;YAAI,MAAM;QAAG;QAC1BG,MAAY,MACd3Y,CAAAA,EAAG,cAAA,GAAiB;YAClB,WAAWwY,EAAO,SADA;YAElB,UAAUA,EAAO,QADC;YAElB,OAAOA,EAAO,KAAA,CAAM,KADH;YAEjB,QAAQA,EAAO,KAAA,CAAM,MADD;YAEpB,QAAQzQ,EAAK,MADQ;YAErB,MAAAtG;YACA,CAACkX,EAAO,EAAGF;QAAA,CAAA,GAIfzY,EAAG,gBAAA,GAAmB;YACpB,OAAOwY,EAAO,KADM;YAEpB,aAAaA,EAAO,KAAA,CAAM,MADZ;YAEd,YAAYA,EAAO,KAAA,CAAM,KADC;YAE1B,aAAaC;QAAA;IAEjB;IAEM,MAAAG,IAAS7Q,EAAK,WAAA,CAAY,EAA1B;IACN,IAAI6Q,KAAU,MAAM;QACZ,MAAAC,IAAUC,GAAsB1B;QACtCpX,EAAG,cAAA,GAAiB;YAClB,WAAW4Y,EAAO,SADA;YAElB,YAAYA,EAAO,KAAA,CAAM,WADP;YAElB,eAAeA,EAAO,KAAA,CAAM,aADH;YAEzB,MAAM;YACN,MAAMA,EAAO,KAAA,CAAM,UAAA,CAAW,UAAU,SAASA,EAAO,KADlD;YAEN,aAAaE,GAAsB1B;QAAI,GAEzCpX,EAAG,gBAAA,GAAmB;YACpB,OAAO4Y,EAAO,KAAA,CAAM,UAAA,CAAW,UAC3BN,EAAmB,KAAA,GACnBM,EAAO,KAHS;YAIpB,kBAAkBA,EAAO,KAAA,CAAM,aADpB;YAEX,YAAYA,EAAO,KAAA,CAAM,WADM;YAE/B,GAAIC,KAAW,OAAO,CAAA,IAAKE,GAAuBF,EADzB;QACgC;IAE7D;IACO,OAAA7Y;AACT;AAGA,SAAS0Y,GAAoBjH,CAAAA;IAC3B,KAAA,MAAW7E,KAAS6E,EAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,CAAS;QAErD,MAAM3G,IAAM8B,EAAM,IAAA,IAAQA,EAAM,IAAA,IAAQA,EAAM,IAA9C;QACA,IAAI9B,KAAO,MAAM;YACT,MAAAtJ,IAAS,IAAIwX,EAAO,UAApB,CACJ,KADwB,GAExB,GACAA,EAAO,UAAA,CAAW,UADlB;YAGF,OAAAlO,EAAI,KAAA,CAAMtJ,IACH,IAAI,WAAWA,EAAO,MAAA,CAAO,KAAA,CAAM;QAC5C;IACF;IACA,MAAM,MAAM;AACd;AAEA,SAASsX,GAAsB1B,CAAAA,EAAe6B,IAAQ,MAAA;IXhF/C,IAAAvX;IWiFC,MAAAwX,IAAAA,AAAUxX,CAAAA,IAAA0V,EAAK,IAAA,AAAA,KAAL,OAAA,KAAA,IAAA1V,EAAW,KAAA,CACxB,GAAA,CAAI,CAAC/J,IAAMA,EAAE,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,EACjC,IAAA,GACA,IAAA,CAAK,CAAC,EAAE,MAAA8J,CAAAA,EAAW,GAAAA,MAASwX;IAE/B,OAAOC,KAAA,OAAA,KAAA,IAAAA,EAAS,IAAhB;AACF;AAGA,SAASH,GAAuBI,CAAAA;IX1FzB,IAAAzX;IW2FL,MAAM0X,IAAAA,AAAc1X,CAAAA,IAAAyX,EAAK,GAAA,CAAI,KAAA,CAAM,EAAC,AAAA,KAAhB,OAAA,KAAA,IAAAzX,EAAmB,KAAA,CAAM,EAA7C;IACI,IAAA0X,KAAe,MAAM,OAAO,CAA5B;IAEJ,MAAM,CAACC,GAAOC,EAAK,GAAIF,EAAY,IAAA,EAE7BG,IAAAA,AAAAA,CAAAA,AAAkBF,CAAAA,IAAQ,CAAA,KAAS,CAAA,IAAMC,CAAAA,KAAS,CAAA,GAElDE,IAAAA,AAAoBF,CAAAA,IAAQ,GAAA,KAAS;IAKpC,OAAA;QACL,YALqB;YACrB;YAAO;YAAO;YAAO;YAAO;YAAO;YAAO;YAAO;YAAO;YAAO;YAAO;YACtE;YAAM;SAAA,CAGqBC,EAHrB;QAIN,kBAAAC;IAAA;AAEJ;AAMO,SAASC,GAAwBrC,CAAAA;IAClC,IAAAA,EAAK,IAAA,IAAQ,MACjB;QAAA,IAAA,IAASje,IAAI,GAAGA,IAAIie,EAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQje,IAC1Cie,EAAK,IAAA,CAAK,KAAA,CAAMje,EAAC,CAAE,OAAA,GAAU,EAA7B;QAEFie,EAAK,KAAA,GAAQ,EAAA,EACbA,EAAK,KAAA,GAAQ,EADb;I;AAEF;AXxHO,IAAAsC;AYGA,MAAMC;IAgBX,aAAc;QAfdC,EAAA,IAAA,EAAA;QAWAA,EAAA,IAAA,EAAA;QAEAC,EAAA,IAAA,EAAAH,IAAkB;QAGV,MAAAtC,IAAO4B,EAAO,UAAd;QACN,IAAIc,IAAkB,CAAtB;QACA,IAAA,CAAK,QAAA,GAAW,IAAI,eAClB;YACE,OAAO,CAACC;gBACD3C,EAAA,OAAA,GAAU,CAACrP;oBZzBnB,IAAArG,GAAAK;oBY0BK,MAAMiY,IAAAA,AAAWtY,CAAAA,IAAAqG,EAAK,WAAA,CAAY,EAAC,AAAA,KAAlB,OAAA,KAAA,IAAArG,EAAqB,EAAtC;oBACIsY,KAAY,QACd5C,EAAK,oBAAA,CAAqB4C,GAAU,SAAS;wBAAE,WAAW;oBAAA;oBAE5D,MAAMC,IAAAA,AAAWlY,CAAAA,IAAAgG,EAAK,WAAA,CAAY,EAAC,AAAA,KAAlB,OAAA,KAAA,IAAAhG,EAAqB,EAAtC;oBACIkY,KAAY,QACd7C,EAAK,oBAAA,CAAqB6C,GAAU,SAAS;wBAAE,WAAW;oBAAA,IAEvDF,EAAA,OAAA,CAAQ;wBAAE,WAAW;wBAAS,MAAM;4BAAE,MAAAhS;4BAAM,MAAAqP;wBAAK;oBAAA,IACtDA,EAAK,KAAA;gBAAM;gBAGb,MAAM8C,IAAsC,CAAA;gBAC5C9C,EAAK,SAAA,GAAY,CAACrG,GAAItP,GAAMhE;oBAC1Bsc,EAAK,OAAA,CAAQ;wBACX,WAAW;wBACX,MAAM;4BAAE,IAAAhJ;4BAAI,MAAAtP;4BAAM,SAAShE,EAAQ,GAAA,CAAI,CAAC1F,IAAO,CAAA;oCAAE,GAAGA,CAAAA;gCAAA,CAAA;wBAAM;oBAAA,IAE5DmiB,CAAAA,CAAYnJ,EAAE,GAAA,AAAKmJ,CAAAA,CAAAA,CAAYnJ,EAAE,IAAK,CAAA,IAAKtT,EAAQ,MAAA,EACnD2Z,EAAK,kBAAA,CAAmBrG,GAAImJ,CAAAA,CAAYnJ,EAAG;gBAAA,GAG7CqG,EAAK,OAAA,GAAU;oBACb2C,EAAK,KAAA;gBAAM;YAEf;YACA,QAAQ;gBACN3C,EAAK,IAAA,IACa0C,IAAA,CADlB;YAEF;QACF,GACA;YAAA,qBAAA;YAEE,eAAe;QACjB,IAGG,IAAA,CAAA,QAAA,GAAW,IAAI,eAAe;YACjC,OAAO,OAAOK;gBACZ,IAAIL,GAAiB;oBACnB,IAAA,CAAK,QAAA,CAAS,KAAd;oBACA;gBACF;gBAEA,MAAMM,IAAWD,EAAO,MAAxB;gBACAC,EAAS,SAAA,GAAYC,EAAA,IAAA,EAAKX,KAC1BY,EAAA,IAAA,EAAKZ,IAALW,EAAA,IAAA,EAAKX,MAAmBU,EAAS,UAAA,GACjChD,EAAK,YAAA,CAAagD;YACpB;YACA,OAAO;gBZ3EN,IAAA1Y;gBY4EC0V,EAAK,KAAA,IACLA,EAAK,IAAA,IAAK,AACV1V,CAAAA,IAAA0V,EAAK,OAAA,AAAA,KAAL,QAAA1V,EAAA,IAAA,CAAA0V;YACF;QAAA;IAEJ;AACF;AAjEEsC,KAAA,IAAAA;ACXF,IAAIa,KAAU;AAGd,SAASC,GAASC,CAAAA;IAChB,OAAOA,EAAI,IAAA,KAAS,UAAUA,EAAI,YAAA,YAAwB;AAC5D;AbXO,IAAAC,IAAAC,IAAAC,GAAAC,GAAAC,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC,GAAAC;Aa2DA,MAAMC,KAAN,MAAMA;IAyCX,YACEC,CAAAA,EACAC,IAAoB;QAAE,OAAO,CAAA;IAAA,CAAA,CAC7B;QA3CF3B,EAAA,IAAA,EAAAa,IAAO5e,EAAI,MAAA,CAAO,CAAA,WAAA,EAAcye,KAAS,CAAA,CAAG;QAE5CX,EAAA,IAAA,EAAA;QAEAC,EAAA,IAAA,EAAAc,IAAa,CAAb;QAEAd,EAAA,IAAA,EAAAe,GAAQ;YAAA,KAAA;YAEN,UAAU;YACV,OAAO;YACP,QAAQ;YACR,iBAAiB;YACjB,gBAAgB;QAAA;QAOlBf,EAAA,IAAA,EAAAgB;QAEAhB,EAAA,IAAA,EAAAiB,IAAU;QAEVjB,EAAA,IAAA,EAAAkB,IAAgC,EAAhC;QAEAlB,EAAA,IAAA,EAAAmB,IAAgC,EAAhC;QAEAnB,EAAA,IAAA,EAAAoB,IAA6C;QAC7CpB,EAAA,IAAA,EAAAqB,IAA6C;QAE7CrB,EAAA,IAAA,EAAAsB,IAGI;YACF,OAAO;YACP,OAAO;QAAA;QAGTtB,EAAA,IAAA,EAAAuB,GAAqB;YAAE,OAAO,CAA9B;QAAA;QA0EA;;;;;;KAAA,GAAAxB,EAAA,IAAA,EAAA,mBAGkB,OAAO9f,GAAG2hB,IAAYA;QAqCxC5B,EAAA,IAAA,EAAAwB,IAAgB,IAAI;QA5GlB,IACE,CAAEE,CAAAA,aAAkB,cAAA,KACpB,CAACf,GAASe,MACV,CAAC,MAAM,OAAA,CAAQA,EAAO,YAAY,GAElC,MAAM,MAAM;QAGTjB,EAAA,IAAA,EAAAc,GAAQ;YAAE,GAAGI,CAAAA;QAAAA,IACblB,EAAA,IAAA,EAAAQ,IACH,OAAOU,EAAK,KAAA,IAAU,YAAY,YAAYA,EAAK,KAAA,GAC/CA,EAAK,KAAA,CAAM,MAAA,GACX;QAEA,MAAAE,IAAe,OAAO3jB,IACpB,CAAA,MAAA4jB,GAAMtB,EAAA,IAAA,EAAKQ,IAAY9iB,IACtB,MAAMsiB,EAAA,IAAA,EAAKQ,GAAW,MAFzB,EAAA;QAKDP,EAAA,IAAA,EAAAO,GAAaL,GAASe,KACvBA,IACA,eAAeA,IACbA,EAAO,SAAA,GACPjgB,OAEN,IAAA,CAAK,KAAA,GAAA,AACHigB,CAAAA,aAAkB,iBACdG,EAAaH,GAAQ,IAAA,CAAK,CAACxjB,IAAM6jB,GAAe7jB,GAAGsiB,EAAA,IAAA,EAAKe,OACxDZ,GAASe,KACPA,EAAO,MAAA,GAAS,IAAA,CAAK,CAACxjB,IAAM6jB,GAAe7jB,GAAGsiB,EAAA,IAAA,EAAKe,OACnD,QAAQ,OAAA,CAAQG,EAAM,EAC5B,IAAA,CAAK,OAAO,EAAE,cAAAM,CAAAA,EAAc,cAAAC,CAAAA,EAAc,aAAA1C,CAAAA,EAAAA;YAC1CkB,EAAA,IAAA,EAAKS,IAAgBc,IACrBvB,EAAA,IAAA,EAAKU,IAAgBc,IACrBxB,EAAA,IAAA,EAAKa,IAAe/B;YACd,MAAA,EAAE,kBAAA2C,CAAAA,EAAkB,kBAAAC,CAAAA,EAAA,GAAqBC,GAC7C;gBACE,OACE7C,EAAY,KAAA,IAAS,OACjB,OACA;oBACE,GAAGA,EAAY,KADjB;oBAEE,sBACEiB,EAAA,IAAA,EAAKe,GAAM,+BAFE;gBAGjB;gBACN,OAAOhC,EAAY,KADb;YAER,GACA,MAAMiB,EAAA,IAAA,EAAKQ,GAAW,YAAA,IACtBgB,GACAC,GACAzB,EAAA,IAAA,EAAKe,GAAM,KAAA,KAAU,CAAA,IAAQf,EAAA,IAAA,EAAKS,MAAU;YAE9C,OAAAR,EAAA,IAAA,EAAKW,IAAoBc,IACzBzB,EAAA,IAAA,EAAKY,IAAoBc,IAEzB1B,EAAA,IAAA,EAAKM,GAAQsB,GAAQ9C,GAAayC,GAAcC,KAChDzB,EAAA,IAAA,EAAKK,IAAK,IAAA,CAAK,iBAAiBL,EAAA,IAAA,EAAKO,KAC9B;gBAAE,GAAGP,EAAA,IAAA,EAAKO,EALjB;YAAA;QAKuB;IAE3B;IAxFA,IAAI,OAAO;QACF,OAAA;YAAE,GAAGP,EAAA,IAAA,EAAKO,EAAV;QAAA;IACT;IAAA;;;GAAA,GAwGA,MAAM,KAAK5d,CAAAA,EAIR;QbzLE,IAAA0E,GAAAK;Qa0LC,IAAA/E,KAAQqd,EAAA,IAAA,EAAKO,GAAM,QAAnB,EACK,OAAA,MAAM,IAAA,CAAK,eAAA,CAAgB5d,GAAM;YACtC,OAAO,EAD+B;YAEtC,OAAO;QAAA;QAIX,MAAM,CAACmf,GAAOC,EAAK,GAAI,MAAM,QAAQ,GAAA,CAAI;YAAA,CAAA,AACvC1a,CAAAA,IAAA2Y,EAAA,IAAA,EAAKa,GAAAA,KAAL,OAAA,KAAA,IAAAxZ,EAAwB,IAAA,CAAK1E,EAAAA,KAAS,EADC;YAEvC+E,CAAAA,IAAAsY,EAAA,IAAA,EAAKY,GAAAA,KAAL,OAAA,KAAA,IAAAlZ,EAAwB,IAAA,CAAK/E;SAC9B;QAED,OAAIof,KAAS,OACJ,MAAM,IAAA,CAAK,eAAA,CAAgBpf,GAAM;YACtC,OAAAmf;YACA,OAAO;QAAA,KAIJ,MAAM,IAAA,CAAK,eAAA,CAAgBnf,GAAM;YACtC,OAAAof;YACA,OAAAD;YACA,OAAO;QAAA;IAEX;IAAA;;;;;;GAAA,GAUA,MAAM,WACJE,IAAW,GAAA,EACXb,CAAAA,EAC2C;QAC3CnB,EAAA,IAAA,EAAKgB,IAAc,KAAA,IACdf,EAAA,IAAA,EAAAe,IAAgB,IAAI;QACnB,MAAAiB,IAAgBjC,EAAA,IAAA,EAAKgB,IAAc,MAAnC;QAEN,MAAM,IAAA,CAAK,KAAX;QACA,MAAMkB,IAAW;QACjB,IAAID,EAAc,OAAA,EAAe,MAAA,MAAMC;QAEvC,MAAM,EAAE,OAAAtlB,CAAAA,EAAO,QAAAC,CAAAA,EAAAA,GAAWmjB,EAAA,IAAA,EAAKO,IACzB4B,IAASC,GACbJ,GACA,KAAK,KAAA,CAAMnlB,IAAUmlB,CAAAA,IAAWplB,CAAAA,IAChC;YAAE,SAAS;YAAK,MAAM;QAAY;QAGpC,OAAO,IAAI,QACT,OAAOM,GAASmlB;YACd,IAAIC,IAAyD,EAA7D;YACM,MAAAC,IAAKvC,EAAA,IAAA,EAAKc,IAAa,KAAvB;YACN,IAAIyB,KAAM,QAAQvC,EAAA,IAAA,EAAKU,IAAc,MAAA,KAAW,GAAG;gBACxC8B;gBACT;YACF;YACcP,EAAA,gBAAA,CAAiB,SAAS;gBAC/BI,EAAA,MAAMH;YAAS;YAGxB,eAAeM;gBACTP,EAAc,OAAA,IAClB/kB,EACE,MAAM,QAAQ,GADhB,CAEIolB,EAAY,GAAA,CAAI,OAAOG,IAAQ,CAAA;wBAC7B,IAAIA,EAAG,EADsB;wBAE7B,KAAK,MAAMA,EAAG,GADP;oBACO,CAAA;YAItB;YAEA,SAASC,EAAeC,CAAAA;gBACtBL,EAAY,IAAA,CAAK;oBACf,IAAIK,EAAG,SADQ;oBAEf,KAAKR,EAAOQ;gBAAE;YAElB;YAEM,MAAA,EAAE,OAAA/Z,IAAQ,CAAA,EAAG,KAAAC,IAAMmX,EAAA,IAAA,EAAKO,GAAM,QAAA,EAAU,MAAAqC,CAAAA,EAAA,GAASzB,KAAQ,CAAzD;YACN,IAAIyB,GAAM;gBACR,IAAIC,IAAMja;gBAEV,MAAM8Y,IAAmB,IAAIoB,GAC3B,MAAM9C,EAAA,IAAA,EAAKQ,GAAW,YAAA,IACtBR,EAAA,IAAA,EAAKU,KACL;oBACE,GAAG6B,CADL;oBAEE,sBAAsBvC,EAAA,IAAA,EAAKe,GAAM,+BAD9B;gBAEL;gBAEF,MAAO8B,KAAOha,KAAO,CAACoZ,EAAc,OAAA,EAAS;oBAC3C,MAAMU,IAAK,MAAMjB,EAAiB,IAAA,CAAKmB;oBACnCF,KAAAA,EAAmBA,IAChBE,KAAAD;gBACT;gBACAlB,EAAiB,OAAA,IACRc;YAAA,OAEH,MAAAO,GACJ/C,EAAA,IAAA,EAAKU,KACLV,EAAA,IAAA,EAAKQ,IACL+B,GACAN,GACA;gBAAE,OAAArZ;gBAAO,KAAAC;YAAI,GACb,CAAC8Z,GAAItZ;gBACHqZ,EAAeC,IACXtZ,KAAemZ;YACrB;QAGN;IAEJ;IAEA,MAAM,MAAM7f,CAAAA,EAAc;QAGxB,IAFA,MAAM,IAAA,CAAK,KAAA,EAEPA,KAAQ,KAAKA,KAAQqd,EAAA,IAAA,EAAKO,GAAM,QAApC,EACE,MAAM,MAAM;QAER,MAAA,CAACyC,GAAeC,EAAc,GAAIC,GACtClD,EAAA,IAAA,EAAKU,KACL/d,IAEI,CAACwgB,GAAeC,EAAc,GAAIC,GACtCrD,EAAA,IAAA,EAAKW,KACLhe,IAEI2gB,IAAU,IAAIrC,GAClB;YACE,WAAWjB,EAAA,IAAA,EAAKQ;YAChB,cAAcwC,KAAiB,EADf;YAEhB,cAAcG,KAAiB,EADC;YAEhC,aAAanD,EAAA,IAAA,EAAKc;QACpB,GACAd,EAAA,IAAA,EAAKe,KAEDwC,IAAW,IAAItC,GACnB;YACE,WAAWjB,EAAA,IAAA,EAAKQ;YAChB,cAAcyC,KAAkB,EADhB;YAEhB,cAAcG,KAAkB,EADC;YAEjC,aAAapD,EAAA,IAAA,EAAKc;QACpB,GACAd,EAAA,IAAA,EAAKe;QAEP,OAAA,MAAM,QAAQ,GAAA,CAAI;YAACuC,EAAQ,KAAA;YAAOC,EAAS,KAAK;SAAC,GAE1C;YAACD;YAASC;SAFjB;IAGF;IAEA,MAAM,QAAQ;QACZ,MAAM,IAAA,CAAK,KAAX;QACA,MAAMC,IAAO,IAAIvC,GACf;YACE,WAAWjB,EAAA,IAAA,EAAKQ;YAChB,cAAc;mBAAIR,EAAA,IAAA,EAAKU;aADP;YAEhB,cAAc;mBAAIV,EAAA,IAAA,EAAKW;aADa;YAEpC,aAAaX,EAAA,IAAA,EAAKc;QACpB,GACAd,EAAA,IAAA,EAAKe;QAEP,OAAA,MAAMyC,EAAK,KAAA,EACXA,EAAK,eAAA,GAAkB,IAAA,CAAK,eAAA,EACrBA;IACT;IAAA;;;GAAA,GAMA,MAAM,aAAa;QACjB,MAAM,IAAA,CAAK,KAAX;QACA,MAAMC,IAAmB,EAAzB;QACI,IAAAzD,EAAA,IAAA,EAAKU,IAAc,MAAA,GAAS,GAAG;YACjC,MAAMgD,IAAY,IAAIzC,GACpB;gBACE,WAAWjB,EAAA,IAAA,EAAKQ;gBAChB,cAAc;uBAAIR,EAAA,IAAA,EAAKU;iBADP;gBAEhB,cAAc,EADsB;gBAEpC,aAAa;oBACX,OAAOV,EAAA,IAAA,EAAKc,IAAa,KADd;oBAEX,OAAO;gBACT;YACF,GACAd,EAAA,IAAA,EAAKe;YAEP,MAAM2C,EAAU,KAAA,EAChBA,EAAU,eAAA,GAAkB,IAAA,CAAK,eAAA,EACjCD,EAAM,IAAA,CAAKC;QACb;QACI,IAAA1D,EAAA,IAAA,EAAKW,IAAc,MAAA,GAAS,GAAG;YACjC,MAAMgD,IAAY,IAAI1C,GACpB;gBACE,WAAWjB,EAAA,IAAA,EAAKQ;gBAChB,cAAc,EADE;gBAEhB,cAAc;uBAAIR,EAAA,IAAA,EAAKW;iBADR;gBAEf,aAAa;oBACX,OAAOX,EAAA,IAAA,EAAKc,IAAa,KADd;oBAEX,OAAO;gBACT;YACF,GACAd,EAAA,IAAA,EAAKe;YAEP,MAAM4C,EAAU,KAAA,EAChBA,EAAU,eAAA,GAAkB,IAAA,CAAK,eAAA,EACjCF,EAAM,IAAA,CAAKE;QACb;QAEO,OAAAF;IACT;IAEA,UAAgB;QbpZX,IAAApc,GAAAK;QaqZCsY,EAAA,IAAA,EAAKM,OACJN,CAAAA,EAAA,IAAA,EAAAK,IAAK,IAAA,CAAK,oBACfJ,EAAA,IAAA,EAAKK,IAAa,CAAA,IAAA,AAElBjZ,CAAAA,IAAA2Y,EAAA,IAAA,EAAKY,GAAAA,KAAL,QAAAvZ,EAAwB,OAAA,IAAA,AACxBK,CAAAA,IAAAsY,EAAA,IAAA,EAAKa,GAAAA,KAAL,QAAAnZ,EAAwB,OALxB,EAAA;IAMF;AACF;AAhWE2Y,KAAA,IAAA,WAIAC,KAAA,IAAA,WAEAC,IAAA,IAAA,WAaAC,IAAA,IAAA,WAEAC,KAAA,IAAA,WAEAC,KAAA,IAAA,WAEAC,KAAA,IAAA,WAEAC,KAAA,IAAA,WACAC,KAAA,IAAA,WAEAC,KAAA,IAAA,WAQAC,IAAA,IAAA,WAkHAC,KAAA,IAxJAX;AADK,IAAMuD,KAAN3C;AAmWP,SAASY,GACP9C,CAAAA,EACAyC,CAAAA,EACAC,CAAAA;IAEA,MAAMlF,IAAO;QACX,UAAU;QACV,OAAO;QACP,QAAQ;QACR,iBAAiB;QACjB,gBAAgB;IAAA;IAEdwC,EAAY,KAAA,IAAS,QAAQyC,EAAa,MAAA,GAAS,KAChDjF,CAAAA,EAAA,KAAA,GAAQwC,EAAY,KAAA,CAAM,UAAA,IAAc,GACxCxC,EAAA,MAAA,GAASwC,EAAY,KAAA,CAAM,WAAA,IAAe,CAAA,GAE7CA,EAAY,KAAA,IAAS,QAAQ0C,EAAa,MAAA,GAAS,KACrDlF,CAAAA,EAAK,eAAA,GAAkB0B,EAAmB,UAAA,EAC1C1B,EAAK,cAAA,GAAiB0B,EAAmB,YAN3C,AAAA;IASA,IAAI4F,IAAY,GACZC,IAAY;IACZ,IAAAtC,EAAa,MAAA,GAAS,GACxB,IAAA,IAASpjB,IAAIojB,EAAa,MAAA,GAAS,GAAGpjB,KAAK,GAAGA,IAAK;QAC3C,MAAAV,IAAI8jB,CAAAA,CAAapjB,EAAjB;QACN,IAAI,CAAAV,EAAE,OAAA,EACM;YAAAmmB,IAAAnmB,EAAE,GAAA,GAAMA,EAAE,QAAV;YACZ;QAAA;IACF;IAEE,IAAA+jB,EAAa,MAAA,GAAS,GAAG;QACrB,MAAAsC,IAActC,EAAa,EAAA,CAAG;QACxBqC,IAAAC,EAAY,GAAA,GAAMA,EAAY,QAA9B;IACd;IACA,OAAAxH,EAAK,QAAA,GAAW,KAAK,GAAA,CAAIsH,GAAWC,IAE7BvH;AACT;AAEA,SAASqF,GACP7C,CAAAA,EACAiF,CAAAA,EACAxC,CAAAA,EACAC,CAAAA,EACA1a,CAAAA;IAEO,OAAA;QACL,kBACEA,KAAU,QAAQgY,EAAY,KAAA,IAAS,QAAQ0C,EAAa,MAAA,KAAW,IACnE,OACA,IAAIwC,GACFD,GACAvC,GACA1C,EAAY,KADZ,EAEA;YACE,QAAAhY;YACA,kBAAkBkX,EAAmB,UADrC;QAEF;QAER,kBACEc,EAAY,KAAA,IAAS,QAAQyC,EAAa,MAAA,KAAW,IACjD,OACA,IAAIsB,GACFkB,GACAxC,GACAzC,EAAY,KADZ;IAEF;AAEV;AAEA,eAAewC,GACbL,CAAAA,EACAC,IAAoB,CAAA,CAAA;IAEhB,IAAA+C;IACJ,MAAMnF,IAA8B;QAAE,OAAO;QAAM,OAAO;IAAK;IAC/D,IAAIyC,IAA+B,EAAA,EAC/BC,IAA+B,EADnC;IAGA,OAAO,IAAI,QAIR,OAAOvkB,GAASmlB;QACjB,IAAI8B,IAAe,IACfC,IAAe;QACnB,MAAMC,IAAWtb,GAAemY,EAAO,WAAA,CAAY,IAAI5B,OAAoB;YACzE,SAAS,OAAO,EAAE,WAAAgF,CAAAA,EAAW,MAAAtd,CAAAA,EAAAA;gBAC3B,IAAIsd,MAAc,SAAS;oBAEzBJ,IAAUld,EAAK,IAAf;oBACI,IAAA,EAAE,kBAAkBub,CAAAA,EAAI,kBAAkBgC,CAAAA,EAAA,GAC5CrG,GAAkBlX,EAAK,IAAA,EAAMA,EAAK,IAAI;oBACxC+X,EAAY,KAAA,GAAQwD,KAAM,MAC1BxD,EAAY,KAAA,GAAQwF,KAAM,MACtBhC,KAAM,QAAQgC,KAAM,QACbF,CAAAA,KACThC,EACE,MAAM,0DAAwD,GAG9D5gB,EAAA,IAH8D,CAIhE,yBACA;wBACE,GAAGuF,EAAK,IADV;wBAEE,QAAQ;wBACR,aAAa;wBACb,aAAa;oBACf,GACA+X;gBACF,OAAA,IACSuF,MAAc,WAFrB;oBAGE,IAAAtd,EAAK,IAAA,KAAS,SAAS;wBACrBmd,MAAiB,MAAIA,CAAAA,IAAend,EAAK,OAAA,CAAQ,EAAC,CAAE,GAAxD,AAAA;wBACW,KAAA,MAAA,KAAKA,EAAK,OAAV,CACTwa,EAAa,IAAA,CAAKgD,EAAmB,GAAGL,GAAc;oBAE/C,OAAA,IAAAnd,EAAK,IAAA,KAAS,WAAWma,EAAK,KAAA,EAAO;wBAC1CiD,MAAiB,MAAIA,CAAAA,IAAepd,EAAK,OAAA,CAAQ,EAAC,CAAE,GAAxD,AAAA;wBACW,KAAA,MAAA,KAAKA,EAAK,OAAV,CACTya,EAAa,IAAA,CAAK+C,EAAmB,GAAGJ,GAAc;oBAE1D;gBAAA;YAEJ;YACA,QAAQ;gBACN,MAAML,IAAcvC,EAAa,EAAA,CAAG,OAAOC,EAAa,EAAA,CAAG;gBAC3D,IAAIyC,KAAW,MAAM;oBACZ7B,EAAA,MAAM;oBACb;gBAAA,OAAA,IACS0B,KAAe,MAAM;oBACvB1B,EAAA,MAAM;oBACb;gBACF;gBAEM,MAAAoC,IAAcjD,CAAAA,CAAa,EAA3B;gBACFiD,KAAe,QAAQA,EAAY,GAAA,GAAM,OAC3CA,CAAAA,EAAY,QAAA,IAAYA,EAAY,GAAA,EACpCA,EAAY,GAAA,GAAM,CAAA,GAEpBhjB,EAAI,IAAA,CAAK,sBACDvE,EAAA;oBACN,cAAAskB;oBACA,cAAAC;oBACA,aAAA1C;gBAAA;YAEJ;QAAA;IACD;IAGH,SAASyF,EACP9mB,CAAAA,EACA0W,IAAQ,CAAA,EACRsQ,CAAAA;QAEO,OAAA;YACL,GAAGhnB,CADE;YAEL,QAAQgnB,MAAe,WAAWhnB,EAAE,OAAA,IAAWinB,GAAWjnB,EAAE,IAAI;YAChE,KAAA,AAAOA,CAAAA,EAAE,GAAA,GAAM0W,CAAAA,IAAS1W,EAAE,SAAA,GAAa;YACvC,KAAA,AAAOA,CAAAA,EAAE,GAAA,GAAM0W,CAAAA,IAAS1W,EAAE,SAAA,GAAa;YACvC,UAAWA,EAAE,QAAA,GAAWA,EAAE,SAAA,GAAa;YACvC,WAAW;YAAA,mBAAA;YAEX,MAAMgnB,MAAe,UAAU,OAAOhnB,EAAE,IAF7B;QAE6B;IAE5C;AACF;AbrkBO,IAAAknB,GAAAC,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC,GAAAC,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC;AaukBP,MAAM3C;IAEJ,YACSkB,CAAAA,EACA5gB,CAAAA,EACAsiB,CAAAA,CACP;QALFlG,EAAA,IAAA,EAAAoF,GAA4B;QAO5BpF,EAAA,IAAA,EAAAqF,IAAM;QACNrF,EAAA,IAAA,EAAAsF,IAAc;YAAE,OAAO,CAAA;YAAO,IAAI,YAAY,GAA9C;QAAA;QACAvF,EAAA,IAAA,EAAA,QAAO,OAAO5c,IAAAA,CAAAA,AACRqd,CAAAA,EAAA,IAAA,EAAK4E,MAAQ,QAAQjiB,KAAQqd,EAAA,IAAA,EAAK6E,OAAOliB,IAAOqd,EAAA,IAAA,EAAK6E,MAAM,GAAA,KAC7D7E,EAAA,IAAA,EAAKwF,IAAL,IAAA,CAAA,IAAA,EAAY7iB,IAGdqd,EAAA,IAAA,EAAK8E,IAAY,KAAA,GAAQ,CAAA,GACzB7E,EAAA,IAAA,EAAK4E,IAAMliB,IAEXsd,EAAA,IAAA,EAAK6E,IAAc;gBAAE,OAAO,CAAA;gBAAO,IAAI,YAAY,GAAA;YAAA,IAC5C,MAAM9E,EAAA,IAAA,EAAKqF,IAAL,IAAA,CAAA,IAAA,EAAiB1iB,GAAMqd,EAAA,IAAA,EAAK4E,IAAM5E,EAAA,IAAA,EAAK8E,IATtD;QAaA,kCAAA;QAAAtF,EAAA,IAAA,EAAAuF,IAAa;QAEbvF,EAAA,IAAA,EAAAwF,IAAuB,CAAvB;QACAxF,EAAA,IAAA,EAAAyF,IAAoB;QACpBzF,EAAA,IAAA,EAAA0F,GAA6B,EAA7B;QACA1F,EAAA,IAAA,EAAA2F,IAAkB;QAClB3F,EAAA,IAAA,EAAA4F,IAAiB;QACjB5F,EAAA,IAAA,EAAA6F,IAAc,OACZ1iB,GACAgjB,GACAC;YAEA,IAAID,KAAO,QAAQA,EAAI,KAAA,KAAU,YAAYC,EAAQ,KAAA,EAAc,OAAA;YAE/D,IAAA5F,EAAA,IAAA,EAAKkF,GAAa,MAAA,GAAS,GAAG;gBAC1B,MAAAvC,IAAK3C,EAAA,IAAA,EAAKkF,EAAAA,CAAa,EAAvB;gBACF,OAAAviB,IAAOggB,EAAG,SAAA,GAAkB,OAEhC3C,CAAAA,EAAA,IAAA,EAAKkF,GAAa,KAAA,IAEdviB,IAAOggB,EAAG,SAAA,GAAaA,CAAAA,EAAG,QAAA,IAAY,CAAA,IACxCA,CAAAA,EAAG,KAAA,IACI,MAAM3C,EAAA,IAAA,EAAKqF,IAAL,IAAA,CAAA,IAAA,EAAiB1iB,GAAMgjB,GAAKC,EAAAA,IAGvC5F,CAAAA,EAAA,IAAA,EAAKkF,GAAa,MAAA,GAAS,MAE7BlF,EAAA,IAAA,EAAKuF,IAAL,IAAA,CAAA,IAAA,EAAkBI,GAAK,KAAA,CAAM,CAAC7jB;oBAC5B,MAAAke,EAAA,IAAA,EAAKwF,IAAL,IAAA,CAAA,IAAA,EAAY7iB,IACNb;gBAAA,IAIH6gB,CAAAA,CAJG;YAKZ;YAIE,IAAA3C,EAAA,IAAA,EAAKsF,OACJtF,EAAA,IAAA,EAAKmF,MAAkBnF,EAAA,IAAA,EAAKoF,OAAkBO,EAAI,eAAA,GAAkB,GACrE;gBACA,IAAI,YAAY,GAAA,KAAQC,EAAQ,EAAA,GAAK,KAC7B,MAAA,MACJ,CAAA,4BAAA,EAA+B,KAAK,SAAA,CAAU5F,EAAA,IAAA,EAAKyF,IAAL,IAAA,CAAA,IAAA,GAD1C,CAAA;gBAKR,MAAMhd,GAAM;YACH,OAAA;gBAAA,IAAAuX,EAAA,IAAA,EAAKiF,OAAqB,IAAA,CAAK,OAAA,CAAQ,MAAvC,EAEF,OAAA;gBAEH,IAAA;oBACI,MAAAjF,EAAA,IAAA,EAAKuF,IAAL,IAAA,CAAA,IAAA,EAAkBI;gBAAA,EAAA,OACjB7jB,GAAK;oBACZ,MAAAke,EAAA,IAAA,EAAKwF,IAAL,IAAA,CAAA,IAAA,EAAY7iB,IACNb;gBACR;YAAA;YAEF,OAAO,MAAMke,EAAA,IAAA,EAAKqF,IAAL,IAAA,CAAA,IAAA,EAAiB1iB,GAAMgjB,GAAKC;QAAO;QAGlDpG,EAAA,IAAA,EAAA8F,IAAY,CAAZ;QACA9F,EAAA,IAAA,EAAA+F,IAAe,OAAOI;Yb7pBjB,IAAAte,GAAAK;Ya8pBH,IAAIsY,EAAA,IAAA,EAAKsF,KAAT;YACArF,EAAA,IAAA,EAAKqF,IAAY,CAAjB;YAGI,IAAAO,IAAS7F,EAAA,IAAA,EAAKiF,MAAoB,GAElCa,IAAgB,CAFhB;YAGJ,MAAOD,IAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IAAU;gBACvC,MAAAnoB,IAAI,IAAA,CAAK,OAAA,CAAQmoB,EAAjB;gBAKN,IAJI,CAACC,KAAiB,CAACpoB,EAAE,OAAA,IACPooB,CAAAA,IAAA,CAAA,CAAA,GAGdpoB,EAAE,MAAA,EAAN;YACF;YAEA,IAAIooB,GAAe;gBACjB,MAAM1iB,IAAU,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM4c,EAAA,IAAA,EAAKiF,KAAmBY;gBAC3D,IAAA,AAAA,CAAA,AAAIxe,CAAAA,IAAAjE,CAAAA,CAAQ,EAAC,AAAA,KAAT,OAAA,KAAA,IAAAiE,EAAY,MAAA,AAAA,MAAW,CAA3B,GACE5F,EAAI,IAAA,CAAK;qBACJ;oBACL,MAAMskB,IAAS,MAAMC,GAAoB5iB,GAAS,IAAA,CAAK,eAAe;oBAElE,IAAAuiB,EAAI,KAAA,KAAU,UAAd;oBAEJ1F,EAAA,IAAA,EAAK8E,IAAAA,AAAAA,CAAAA,AAAard,CAAAA,IAAAqe,CAAAA,CAAO,EAAC,AAAA,KAAR,OAAA,KAAA,IAAAre,EAAW,QAAA,AAAA,KAAY,IACzCue,GAAUN,GAAKI,GAAQ;wBACrB,iBAAiB,CAACjkB;4BAChB,IAAIke,EAAA,IAAA,EAAKgF,KACD,MAAAljB;4BAENme,EAAA,IAAA,EAAK+E,IAAuB,CAAA,IAC5BvjB,EAAI,IAAA,CAAK,iCACTue,EAAA,IAAA,EAAKwF,IAAL,IAFA,CAAA,IAAA;wBAIJ;oBAAA,IAGFvF,EAAA,IAAA,EAAKmF,IAALpF,EAAA,IAAA,EAAKoF,MAAkBW,EAAO,MAH5B;gBAIJ;YACF;YACA9F,EAAA,IAAA,EAAKgF,IAAoBY,IACzB5F,EAAA,IAAA,EAAKqF,IAAY,CADjB;QACiB;QAGnB9F,EAAA,IAAA,EAAAgG,IAAS,CAAC7iB;Yb3sBL,IAAA0E,GAAAK;Ya+sBC,IAHJuY,EAAA,IAAA,EAAKqF,IAAY,CAAA,IACjBtF,EAAA,IAAA,EAAKkF,GAAa,OAAA,CAAQ,CAACvlB,IAAMA,EAAE,KAAA,KACnCsgB,EAAA,IAAA,EAAKiF,GAAe,EAAA,GAChBviB,KAAQ,QAAQA,MAAS,GAC3Bsd,EAAA,IAAA,EAAKgF,IAAoB;iBACpB;gBACL,IAAIiB,IAAS;gBACb,IAAA,IAAS9nB,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IAAK;oBACtC,MAAAV,IAAI,IAAA,CAAK,OAAA,CAAQU,EAAjB;oBAEF,IADAV,EAAE,MAAA,IAAiBwoB,CAAAA,IAAA9nB,CAAAA,GACnB,CAAAV,CAAAA,EAAE,GAAA,GAAMiF,CAAAA,GACZ;wBAAAsd,EAAA,IAAA,EAAKgF,IAAoBiB;wBACzB;oBAAA;gBACF;YACF;YACAjG,EAAA,IAAA,EAAKmF,IAAiB,IACtBnF,EAAA,IAAA,EAAKkF,IAAkB,IAAA,AAAA,CAAA,AACnB9d,CAAAA,IAAA2Y,EAAA,IAAA,EAAK4E,EAAAA,KAAL,OAAA,KAAA,IAAAvd,EAAW,KAAA,AAAA,MAAU,YAAA,CAAA,AAAUK,CAAAA,IAAAsY,EAAA,IAAA,EAAK4E,EAAAA,KAAL,QAAAld,EAAW,KAAA,EAAA,GACzCuY,EAAA,IAAA,EAAA2E,GAAO,IAAI,aAAa;gBAC3B,QAAQ,CAACjC;oBAEH,IADJ1C,EAAA,IAAA,EAAKkF,IAALnF,EAAA,IAAA,EAAKmF,MAAmB,IACpBxC,EAAG,SAAA,KAAc,IAAI;wBACvBA,EAAG,KAAA;wBACH;oBACF;oBACA,IAAIwD,IAAOxD;oBACPA,EAAG,QAAA,IAAY,QACVwD,CAAAA,IAAA,IAAI,WAAWxD,GAAI;wBACxB,UAAU3C,EAAA,IAAA,EAAK+E;oBAAA,IAEjBpC,EAAG,KAAA,EAAM,GAEN3C,EAAA,IAAA,EAAAkF,GAAa,IAAA,CAAKiB;gBACzB;gBACA,OAAO,CAACrkB;oBACNL,EAAI,KAAA,CAAM,CAAA,0BAAA,EAA6BK,EAAI,OAAO,CAAA,CAAE;gBACtD;YAAA,KAEFke,EAAA,IAAA,EAAK4E,GAAK,SAAA,CAAU;gBAClB,GAAG,IAAA,CAAK,IADU;gBAElB,GAAI5E,EAAA,IAAA,EAAKgF,MACL;oBAAE,sBAAsB;gBAAA,IACxB,CAAC,CAHG;YAGH;QACN;QAGHxF,EAAA,IAAA,EAAAiG,IAAY;Yb1vBP,IAAApe,GAAAK;Ya0vBc,OAAA;gBACjB,MAAMsY,EAAA,IAAA,EAAK6E;gBACX,UAAA,AAAUxd,CAAAA,IAAA2Y,EAAA,IAAA,EAAK4E,EAAAA,KAAL,OAAA,KAAA,IAAAvd,EAAW,KADV;gBAEX,UAAA,AAAUK,CAAAA,IAAAsY,EAAA,IAAA,EAAK4E,EAAAA,KAAL,OAAA,KAAA,IAAAld,EAAW,eADA;gBAErB,aAAasY,EAAA,IAAA,EAAKiF;gBAClB,WAAW,IAAA,CAAK,OAAA,CAAQ,MADN;gBAElB,UAAUjF,EAAA,IAAA,EAAKoF;gBACf,WAAWpF,EAAA,IAAA,EAAKmF;gBAChB,eAAenF,EAAA,IAAA,EAAKkF,GAAa,MADjB;gBAEhB,YAAYlF,EAAA,IAAA,EAAKgF;YAAA;QAAA;QAGnBzF,EAAA,IAAA,EAAA,WAAU;YbtwBL,IAAAlY,GAAAK;YauwBH,CAAA,AAAIL,CAAAA,IAAA2Y,EAAA,IAAA,EAAK4E,EAAAA,KAAL,OAAA,KAAA,IAAAvd,EAAW,KAAA,AAAA,MAAU,YAAA,CAAA,AAAUK,CAAAA,IAAAsY,EAAA,IAAA,EAAK4E,EAAAA,KAAL,QAAAld,EAAW,KAAA,EAAA,GAC9CuY,EAAA,IAAA,EAAK2E,GAAO,OACZ5E,EAAA,IAAA,EAAK8E,IAAY,KAAA,GAAQ,CAAA,GACzB9E,EAAA,IAAA,EAAKkF,GAAa,OAAA,CAAQ,CAACvlB,IAAMA,EAAE,KAAA,KACnCsgB,EAAA,IAAA,EAAKiF,GAAe,EAAA,GACpB,IAAA,CAAK,eAAA,CAAgB,KALrB;QAK2B;QAlMpB,IAAA,CAAA,eAAA,GAAAlB,GACA,IAAA,CAAA,OAAA,GAAA5gB,GACA,IAAA,CAAA,IAAA,GAAAsiB;IACN;AAiML;AAtMEd,IAAA,IAAA,WAOAC,KAAA,IAAA,WACAC,KAAA,IAAA,WAcAC,KAAA,IAAA,WAEAC,KAAA,IAAA,WACAC,KAAA,IAAA,WACAC,IAAA,IAAA,WACAC,KAAA,IAAA,WACAC,KAAA,IAAA,WACAC,KAAA,IAAA,WAuDAC,KAAA,IAAA,WACAC,KAAA,IAAA,WA8CAC,KAAA,IAAA,WA+CAC,KAAA,IAlLAb;AbxkBK,IAAAnE,IAAA2F,IAAAxB,IAAAE,IAAAD,IAAAwB,IAAAC,IAAAjB,IAAAE,IAAAC,IAAAC;AagxBP,MAAMxB;IAGJ,YACSD,CAAAA,EACA5gB,CAAAA,EACAsiB,CAAAA,EACPvE,CAAAA,CACA;QAPF3B,EAAA,IAAA,EAAAiB,IAAU;QACVjB,EAAA,IAAA,EAAA4G;QAWA5G,EAAA,IAAA,EAAAoF,IAA2D;QAC3DpF,EAAA,IAAA,EAAAsF,IAAc;YAAE,OAAO,CAAA;YAAO,IAAI,YAAY,GAA9C;QAAA;QACAvF,EAAA,IAAA,EAAA,QAAO,OAAO5c;YAER,IAAAqd,EAAA,IAAA,EAAK4E,OAAQ,QAAQjiB,KAAQqd,EAAA,IAAA,EAAK6E,OAAOliB,IAAOqd,EAAA,IAAA,EAAK6E,MAAM,KAAO;gBACpE7E,EAAA,IAAA,EAAKwF,IAAL,IAAA,CAAA,IAAA,GACAvF,EAAA,IAAA,EAAK4E,IAAMliB;gBACX,IAAA,IAASvE,IAAI,GAAGA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQA,IACvC,IAAI,CAAA,CAAA,IAAA,CAAK,OAAA,CAAQA,EAAC,CAAE,GAAA,GAAMuE,CAAAA,GAC1B;oBAAAsd,EAAA,IAAA,EAAKoG,IAAejoB;oBACpB;gBAAA;gBAEF,OAAO,EAAP;YACF;YAEA4hB,EAAA,IAAA,EAAK8E,IAAY,KAAA,GAAQ,CAAzB;YACM,MAAAyB,IAAY5jB,IAAOqd,EAAA,IAAA,EAAK6E;YAC9B,OAAA5E,EAAA,IAAA,EAAK4E,IAAMliB,IAEXsd,EAAA,IAAA,EAAK6E,IAAc;gBAAE,OAAO,CAAA;gBAAO,IAAI,YAAY,GAAA;YAAA,IAC5C,MAAM9E,EAAA,IAAA,EAAKqF,IAAL,IAAA,CAAA,IAAA,EAAiBkB,GAAWvG,EAAA,IAAA,EAAK4E,KAAM5E,EAAA,IAAA,EAAK8E;QAAW;QAGtEtF,EAAA,IAAA,EAAAqF,IAAM;QACNrF,EAAA,IAAA,EAAA6G,IAAe;QACf7G,EAAA,IAAA,EAAA8G,IAGI;YACF,UAAU;YACV,MAAM,EADI;QACH;QAET9G,EAAA,IAAA,EAAA6F,IAAc,OACZkB,GACAZ,IAA0D,IAAA,EAC1DC;YAEI,IAAAD,KAAO,QAAQC,EAAQ,KAAA,IAASD,EAAI,KAAA,KAAU,UAAA,OAAiB,EAA/D;YAEJ,MAAMa,IAAe,KAAK,IAAA,CAAKD,IAAavG,CAAAA,EAAA,IAAA,EAAKoG,MAAc,GAAA;YAC3D,IAAAI,MAAiB,GAAG,OAAO,EAA3B;YAGE,MAAAC,IAAiBzG,EAAA,IAAA,EAAKsG,IAAS,QAAA,GAAWE;YAChD,IAAIC,IAAiB,GAEf,OAAAA,IAAiBxI,EAAmB,UAAA,GAAa,MACnD+B,EAAA,IAAA,EAAKuF,IAAL,IAAA,CAAA,IAAA,EAAkBI,IAEbe,GAAgB1G,EAAA,IAAA,EAAKsG,KAAUE;YAGpC,IAAAb,EAAI,eAAA,GAAkB,IAAI;gBAC5B,IAAI,YAAY,GAAA,KAAQC,EAAQ,EAAA,GAAK,KACnC,MAAAA,EAAQ,KAAA,GAAQ,CAAA,GACV,MACJ,CAAA,4BAAA,EAA+B,KAAK,SAAA,CAAU5F,EAAA,IAAA,EAAKyF,IAAL,IAAA,CAAA,IAAA,GAD1C,CAAA;gBAKR,MAAMhd,GAAM;YAAE,OAAA;gBACLuX,IAAAA,EAAA,IAAA,EAAKqG,OAAgB,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,GAEpD,OAAO,EAAP;gBAEArG,EAAA,IAAA,EAAKuF,IAAL,IAAA,CAAA,IAAA,EAAkBI;YAAA;YAEpB,OAAO3F,EAAA,IAAA,EAAKqF,IAAL,IAAA,CAAA,IAAA,EAAiBkB,GAAWZ,GAAKC;QAAO;QAGjDpG,EAAA,IAAA,EAAA+F,IAAe,CAACI;YACV,IAAAA,EAAI,eAAA,GAAkB,KAAtB;YAEJ,MAAMviB,IAAU,EAAhB;YACA,IAAIhF,IAAI4hB,EAAA,IAAA,EAAKqG;YACN,MAAAjoB,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ;gBACxB,MAAAV,IAAI,IAAA,CAAK,OAAA,CAAQU,EAAjB;gBAEN,IADKA,KAAA,GACD,CAAAV,EAAE,OAAA,IACN0F,CAAAA,EAAQ,IAAA,CAAK1F,IACT0F,EAAQ,MAAA,IAAU,EAFtB,GAE0B;YAC5B;YACA6c,EAAA,IAAA,EAAKoG,IAAejoB,IAEhBunB,EAAA,MAFJ,CAGEviB,EAAQ,GADN,CAEA,CAAC1F,IACC,IAAI,kBAAkB;oBACpB,MAAM;oBACN,WAAWA,EAAE,GADP;oBAEN,UAAUA,EAAE,QADC;oBAEb,MAAMA,EAAE,IADI;gBACJ;QAGhB;QAGF8hB,EAAA,IAAA,EAAAgG,IAAS;Yb93BJ,IAAAne;Ya+3BH4Y,EAAA,IAAA,EAAK4E,IAAM,IACX5E,EAAA,IAAA,EAAKoG,IAAe,IACpBpG,EAAA,IAAA,EAAKqG,IAAW;gBACd,UAAU;gBACV,MAAM,EADI;YACH,IAAA,AAETjf,CAAAA,IAAA2Y,EAAA,IAAA,EAAK4E,GAAAA,KAAL,QAAAvd,EAAW,KAAA,IACX4Y,EAAA,IAAA,EAAK2E,IAAO+B,GACV,IAAA,CAAK,IADK,EAEV;gBACE,cAAc1I,EAAmB,UADnC;gBAEE,QAAQ+B,EAAA,IAAA,EAAKS;YACf,GACA,CAACmG;gBACM5G,EAAA,IAAA,EAAAsG,IAAS,IAAA,CAAK,IAAA,CAAKM,IACxB5G,EAAA,IAAA,EAAKsG,IAAS,QAAA,IAAYM,CAAAA,CAAO,EAAC,CAAE,MAD/B;YAEP;QACF;QAGFpH,EAAA,IAAA,EAAAiG,IAAY;Ybn5BP,IAAApe,GAAAK;Yam5Bc,OAAA;gBACjB,MAAMsY,EAAA,IAAA,EAAK6E;gBACX,UAAA,AAAUxd,CAAAA,IAAA2Y,EAAA,IAAA,EAAK4E,GAAAA,KAAL,OAAA,KAAA,IAAAvd,EAAW,KADV;gBAEX,UAAA,AAAUK,CAAAA,IAAAsY,EAAA,IAAA,EAAK4E,GAAAA,KAAL,OAAA,KAAA,IAAAld,EAAW,eADA;gBAErB,aAAasY,EAAA,IAAA,EAAKqG;gBAClB,WAAW,IAAA,CAAK,OAAA,CAAQ,MADN;gBAElB,QAAQrG,EAAA,IAAA,EAAKsG,IAAS,QADE;YACF;QAAA;QAGxB/G,EAAA,IAAA,EAAA,WAAU;YACRU,EAAA,IAAA,EAAK2E,IAAO,OACZ5E,EAAA,IAAA,EAAK8E,IAAY,KAAA,GAAQ,CAAA,GACzB7E,EAAA,IAAA,EAAKqG,IAAW;gBACd,UAAU;gBACV,MAAM,EADI;YACH,IAET,IAAA,CAAK,eAAA,CAAgB,KAFZ;QAEkB;QA/IpB,IAAA,CAAA,eAAA,GAAAtC,GACA,IAAA,CAAA,OAAA,GAAA5gB,GACA,IAAA,CAAA,IAAA,GAAAsiB,GAGPzF,EAAA,IAAA,EAAKQ,IAAUU,EAAK,MAAA,GACpBlB,EAAA,IAAA,EAAKmG,IAAcjF,EAAK,gBANjB;IAOT;AA0IF;AApJEV,KAAA,IAAA,WACA2F,KAAA,IAAA,WAWAxB,KAAA,IAAA,WACAE,KAAA,IAAA,WAsBAD,KAAA,IAAA,WACAwB,KAAA,IAAA,WACAC,KAAA,IAAA,WAOAjB,KAAA,IAAA,WAsCAE,KAAA,IAAA,WA2BAC,KAAA,IAAA,WAqBAC,KAAA,IAlIAhF;AAsJF,SAASkG,GACP5H,CAAAA,EACAoC,CAAAA,EACA0F,CAAAA;IAEM,MAAAC,IAAgB,CAACF;QACjB,IAAAA,EAAO,MAAA,KAAW,GAElB;YAAA,IAAAzF,EAAK,MAAA,KAAW,GAClB,KAAA,MAAW4F,KAAOH,EACP,IAAA,IAAAxoB,IAAI,GAAGA,IAAI2oB,EAAI,MAAA,EAAQ3oB,IAAK2oB,CAAAA,CAAI3oB,EAAC,IAAK+iB,EAAK,MAA3C;YAITyF,EAAO,MAAA,KAAW,KAAYA,CAAAA,IAAA;gBAACA,CAAAA,CAAO,EAAC;gBAAGA,CAAAA,CAAO,EAAE;aAAA,AAAA,GAEvDC,EAASD;QAAM;IAAA,GAEXI,IAAYC,GAAmCH,IAE/CI,IAAe/F,EAAK,YAAA,KAAiBpC,EAAY,UAAA,EACjDoI,IAAO,IAAI,aAAa;QAC5B,QAAQ,CAACjhB;YACD,MAAA6gB,IAAM9gB,GAAqBC;YAC7BghB,IACFF,EAAU,IACR9e,GAAc6e,GAAK7gB,EAAG,UAAA,EAAY;oBAChC,MAAMib,EAAK,YADqB;oBAEhC,WAAWjb,EAAG,gBADH;gBACG,MAIlB4gB,EAAcC,IAEhB7gB,EAAG,KAAA;QACL;QACA,OAAO,CAACpE;YACNL,EAAI,KAAA,CAAM,CAAA,0BAAA,EAA6BK,EAAI,OAAO,CAAA,CAAE;QACtD;IAAA;IAEF,OAAAqlB,EAAK,SAAA,CAAUpI,IAER;QACL,QAAOgH,CAAAA;YACL,KAAA,MAAWqB,KAASrB,EAAaoB,EAAA,MAAA,CAAOC;QAC1C;QACA;YACMD,EAAK,KAAA,KAAU,YAAUA,EAAK,KAAA;QACpC;QACA,IAAI,SAAQ;YACV,OAAOA,EAAK,KAAZ;QACF;QACA,IAAI,mBAAkB;YACpB,OAAOA,EAAK,eAAZ;QACF;IAAA;AAEJ;AAGA,SAASF,GAAkCI,CAAAA;IACzC,MAAMC,IAAe,EAArB;IACA,IAAIC,IAAa;IAER,SAAAC,EAAS7hB,CAAAA,EAAO8hB,CAAAA;QACvBH,CAAAA,CAAQG,EAAO,GAAI9hB,GACZ+hB;IACT;IAEA,SAASA;QACD,MAAA/hB,IAAK2hB,CAAAA,CAAQC,EAAb;QACF5hB,KAAM,QACV0hB,CAAAA,EAAS1hB,IAEK4hB,KAAA,GACPG,GAJP;IAKF;IAEA,IAAIC,IAAS;IACb,OAAO,CAACC;QACN,MAAMH,IAAUE;QACNA,KAAA,GACVC,IACG,IAAA,CAAK,CAACjiB,IAAO6hB,EAAS7hB,GAAI8hB,IAC1B,KAAA,CAAM,CAAC3lB,IAAQ0lB,EAAS1lB,GAAK2lB;IAAQ;AAE5C;AAEA,SAASf,GACPve,CAAAA,EACA0f,CAAAA;IAGM,MAAA/F,IAAQ;QAAC,IAAI,aAAa+F;QAAU,IAAI,aAAaA;KAArD;IACN,IAAIhiB,IAAS,GACTzH,IAAI;IACD,MAAAA,IAAI+J,EAAQ,IAAA,CAAK,MAAA,EAAU;QAChC,MAAM,CAACN,GAAOC,EAAK,GAAIK,EAAQ,IAAA,CAAK/J,EAApC;QACI,IAAAyH,IAASgC,EAAM,MAAA,GAASggB,GAAS;YACnC,MAAMC,IAASD,IAAUhiB;YACnBic,CAAAA,CAAA,EAAC,CAAE,GAAA,CAAIja,EAAM,QAAA,CAAS,GAAGigB,IAASjiB,IAClCic,CAAAA,CAAA,EAAC,CAAE,GAAA,CAAIha,EAAM,QAAA,CAAS,GAAGggB,IAASjiB,IAChCsC,EAAA,IAAA,CAAK/J,EAAC,CAAE,EAAC,GAAIyJ,EAAM,QAAA,CAASigB,GAAQjgB,EAAM,MAAM,GAChDM,EAAA,IAAA,CAAK/J,EAAC,CAAE,EAAC,GAAI0J,EAAM,QAAA,CAASggB,GAAQhgB,EAAM,MAAM;YACxD;QAAA,OAEAga,CAAAA,CAAM,EAAC,CAAE,GAAA,CAAIja,GAAOhC,IACpBic,CAAAA,CAAM,EAAC,CAAE,GAAA,CAAIha,GAAOjC,IACpBA,KAAUgC,EAAM,MAAA,EAChBzJ;IAEJ;IACA,OAAA+J,EAAQ,IAAA,GAAOA,EAAQ,IAAA,CAAK,KAAA,CAAM/J,IAClC+J,EAAQ,QAAA,IAAY0f,GACb/F;AACT;AAEA,eAAekE,GACb5iB,CAAAA,EACA+F,CAAAA;IAEM,MAAA4e,IAAQ3kB,CAAAA,CAAQ,EAAC,EACjB6T,IAAO7T,EAAQ,EAAA,CAAG;IACpB,IAAA6T,KAAQ,MAAM,OAAO,EAArB;IAEJ,MAAM+Q,IAAW/Q,EAAK,MAAA,GAASA,EAAK,IAAA,GAAO8Q,EAAM,MAAjD;IACA,IAAIC,IAAW,KAAM;QAEnB,MAAMhhB,IAAO,IAAI,WACf,MAAMmC,EAAO,IAAA,CAAK6e,GAAU;YAAE,IAAID,EAAM,MAAA;QAAA;QAEnC,OAAA3kB,EAAQ,GAAA,CAAI,CAAC1F;YACZ,MAAAmI,IAASnI,EAAE,MAAA,GAASqqB,EAAM,MAA1B;YACN,IAAIE,IAAQjhB,EAAK,QAAA,CAASnB,GAAQA,IAASnI,EAAE,IAAI;YACjD,OAAIA,EAAE,MAAA,IAAgBuqB,CAAAA,IAAAC,GAAgBD,EAAK,GACpC,IAAI,kBAAkB;gBAC3B,MAAMvqB,EAAE,OAAA,GAAU,QAAQ;gBAC1B,WAAWA,EAAE,GADa;gBAE1B,UAAUA,EAAE,QADC;gBAEb,MAAMuqB;YAAA;QACP;IAEL;IAEA,OAAO,MAAM,QAAQ,GAArB,CACE7kB,EAAQ,GAAA,CAAI,OAAO1F;QACjB,IAAIuqB,IAAQ,MAAM9e,EAAO,IAAA,CAAKzL,EAAE,IAAA,EAAM;YACpC,IAAIA,EAAE,MAD8B;QAC9B;QAER,OAAIA,EAAE,MAAA,IAAQuqB,CAAAA,IAAQC,GAAgB,IAAI,WAAWD,GAAM,GACpD,IAAI,kBAAkB;YAC3B,MAAMvqB,EAAE,OAAA,GAAU,QAAQ;YAC1B,WAAWA,EAAE,GADa;YAE1B,UAAUA,EAAE,QADC;YAEb,MAAMuqB;QAAA;IACP;AAGP;AAEA,SAAS7F,GACPxlB,CAAAA,EACAC,CAAAA,EACAskB,CAAAA;IAEA,MAAMhkB,IAAM,IAAI,gBAAgBP,GAAOC,IACjCO,IAAMD,EAAI,UAAA,CAAW;IAE3B,OAAO,OAAOwlB,IACZvlB,CAAAA,EAAI,SAAA,CAAUulB,GAAI,GAAG,GAAG/lB,GAAOC,IAC/B8lB,EAAG,KAAA,IACU,MAAMxlB,EAAI,aAAA,CAAcgkB,EAAI;AAG7C;AAEA,SAAS+B,GAAuB1B,CAAAA,EAA8B7e,CAAAA;IAC5D,IAAI6e,EAAa,MAAA,KAAW,GAAG,OAAO,EAAtC;IACA,IAAI2G,IAAc,GACdC,IAAY,GACZC,IAAS;IACb,IAAA,IAASjqB,IAAI,GAAGA,IAAIojB,EAAa,MAAA,EAAQpjB,IAAK;QACtC,MAAAV,IAAI8jB,CAAAA,CAAapjB,EAAjB;QAEN,IADIiqB,MAAW,MAAM1lB,IAAOjF,EAAE,GAAA,IAAA,CAAA,IAAcU,IAAI,CAAA,GAC5CV,EAAE,MAAN;YACE,IAAI2qB,MAAW,IACCF,IAAA/pB;iBACT;gBACOgqB,IAAAhqB;gBACZ;YACF;;IAEJ;IAEM,MAAAkqB,IAAY9G,CAAAA,CAAa6G,EAAzB;IACN,IAAIC,KAAa,MAAY,MAAA,MAAM;IAEnC,MAAMC,IAAW/G,EACd,KAAA,CAAM,GAAG4G,MAAc,IAAI5G,EAAa,MAAA,GAAS4G,GACjD,GAAA,CAAI,CAAC1qB,IAAO,CAAA;YAAE,GAAGA,CAAAA;QAAI,CAAA;IACxB,IAAA,IAASU,IAAI+pB,GAAa/pB,IAAImqB,EAAS,MAAA,EAAQnqB,IAAK;QAC5C,MAAAV,IAAI6qB,CAAAA,CAASnqB,EAAb;QACFuE,IAAOjF,EAAE,GAAA,IACXA,CAAAA,EAAE,OAAA,GAAU,CAAA,GACZA,EAAE,GAAA,GAAM,EAFN;IAIN;IAEA,MAAM8qB,IAAYhH,EACf,KAAA,CAAM8G,EAAU,MAAA,GAASF,IAAYD,GACrC,GAAA,CAAI,CAACzqB,IAAO,CAAA;YAAE,GAAGA,CAAAA;YAAG,KAAKA,EAAE,GAAA,GAAMiF;QAAO,CAAA;IAE3C,KAAA,MAAWjF,KAAK8qB,EAAW;QACrB,IAAA9qB,EAAE,GAAA,IAAO,GAAT;QAEJA,EAAE,OAAA,GAAU,CAAA,GACZA,EAAE,GAAA,GAAM;IACV;IAEO,OAAA;QAAC6qB;QAAUC;KAAX;AACT;AAEA,SAASnF,GAAuB5B,CAAAA,EAA8B9e,CAAAA;IAC5D,IAAI8e,EAAa,MAAA,KAAW,GAAG,OAAO,EAAtC;IACA,IAAI4G,IAAS;IACb,IAAA,IAASjqB,IAAI,GAAGA,IAAIqjB,EAAa,MAAA,EAAQrjB,IAAK;QACtC,MAAAV,IAAI+jB,CAAAA,CAAarjB,EAAjB;QACF,IAAA,CAAAuE,CAAAA,IAAOjF,EAAE,GAAA,AAAA,GACJ;YAAA2qB,IAAAjqB;YACT;QAAA;IACF;IACA,IAAIiqB,MAAW,IAAU,MAAA,MAAM;IAC/B,MAAME,IAAW9G,EAAa,KAAA,CAAM,GAAG4G,IACjCG,IAAY/G,EACf,KAAA,CAAM4G,GACN,GAAA,CAAI,CAAC3qB,IAAO,CAAA;YAAE,GAAGA,CAAAA;YAAG,KAAKA,EAAE,GAAA,GAAMiF;QAAO,CAAA;IACpC,OAAA;QAAC4lB;QAAUC;KAAX;AACT;AAGA,SAASvC,GACPN,CAAAA,EACAI,CAAAA,EACA5E,CAAAA;IAIA,IAAI/iB,IAAI;IACJ,IAAAunB,EAAI,KAAA,KAAU,cACX;QAAA,MAAAvnB,IAAI2nB,EAAO,MAAA,EAAQ3nB,IAAAA,EAAS,MAAA,CAAO2nB,CAAAA,CAAO3nB,EAAE;QAGnDunB,EAAI,KAAA,GAAQ,KAAA,CAAM,CAAC7jB;YACb,IAAA,CAAEA,CAAAA,aAAe,KAAA,GAAc,MAAAA;YACnC,IACEA,EAAI,OAAA,CAAQ,QAAA,CAAS,qBACrBqf,EAAK,eAAA,IAAmB,MACxB;gBACAA,EAAK,eAAA,CAAgBrf;gBACrB;YACF;YAEA,IAAI,CAACA,EAAI,OAAA,CAAQ,QAAA,CAAS,yBAClB,MAAAA;QACR;IACD;AACH;AAGA,SAASomB,GAAgBO,CAAAA;IACvB,MAAMC,IAAK,IAAI,SAASD,EAAM,MAAM;IACpC,OAAA,AAAKC,CAAAA,EAAG,QAAA,CAAS,KAAK,EAAA,MAAU,IACvBD,EAAM,QAAA,CAASC,EAAG,SAAA,CAAU,KAAK,KAEnCD;AACT;AAEA,SAAS9D,GAAWgE,CAAAA;IAClB,MAAMD,IAAK,IAAI,SAASC,EAAM,MAAM;IACpC,IAAIvqB,IAAI;IACD,MAAAA,IAAIuqB,EAAM,UAAA,GAAa,GAAK;QACjC,IAAA,AAAKD,CAAAA,EAAG,QAAA,CAAStqB,IAAI,KAAK,EAAA,MAAU,GAAU,OAAA,CAA9C;QAEKA,KAAAsqB,EAAG,SAAA,CAAUtqB,KAAK;IACzB;IACO,OAAA,CAAA;AACT;AAEA,eAAe2kB,GACb3f,CAAAA,EACApC,CAAAA,EACA4nB,CAAAA,EACAC,CAAAA,EACAlmB,CAAAA,EACAmmB,CAAAA;IAEM,MAAAC,IAAa,MAAM/nB,EAAU,YAA7B;IACN,IAAI8H,IAAM;IACJ,MAAA6c,IAAM,IAAI,aAAa;QAC3B,QAAQ,CAAChD;YACA7Z,KAAA;YACD,MAAAO,IAAOP,MAAQid,EAAO,MAAtB;YACN+C,EAASnG,GAAItZ,IACTA,KAAAA,EAAiB,KADrB;QAEF;QACA,OAAO5H,EAAI,KADX;IACW;IAEFonB,EAAA,gBAAA,CAAiB,SAAS;QACnCE,EAAW,KAAA,IACXpD,EAAI,KAAA;IAAM;IAGZ,MAAMI,IAAS,MAAMC,GACnB5iB,EAAQ,MADW,CAEjB,CAAC1F,IACC,CAACA,EAAE,OAAA,IAAWA,EAAE,OAAA,IAAWA,EAAE,GAAA,IAAOiF,EAAK,KAAA,IAASjF,EAAE,GAAA,IAAOiF,EAAK,GAF5D,GAIRomB;IAEEhD,EAAO,MAAA,KAAW,KAAK8C,EAAW,OAAA,IAEtClD,CAAAA,EAAI,SAAA,CAAUiD,IACJ3C,GAAAN,GAAKI,GAAQ,CAAA,EAAE;AAC3B;AbzuCO,IAAAxF,GAAAyI,GAAAC,GAAAC,IAAAC;AciBA,MAAMC,KAAN,MAAMA;IAAyB;;;;GAAA,GA6BpC,YACEC,CAAAA,CAKA;QAnCG7J,EAAA,IAAA,EAAA0J;QACL3J,EAAA,IAAA,EAAA;QAEAC,EAAA,IAAA,EAAAe,GAAQ;YAAA,KAAA;YAEN,UAAU;YACV,OAAO;YACP,QAAQ;QAAA;QAaVf,EAAA,IAAA,EAAAwJ,GAA2B;QAE3BxJ,EAAA,IAAA,EAAAyJ,GAAwB,EAAxB;QAcQ,MAAAK,IAAoB,CAACC,IACzBtJ,CAAAA,EAAA,IAAA,EAAK+I,GAAOO,IACPvJ,EAAA,IAAA,EAAAO,GAAM,KAAA,GAAQgJ,EAAU,KAAA,EACxBvJ,EAAA,IAAA,EAAAO,GAAM,MAAA,GAASgJ,EAAU,MAAA,EAC9BvJ,EAAA,IAAA,EAAKO,GAAM,QAAA,GAAW,IAAA,GACf;gBAAE,GAAGP,EAAA,IAAA,EAAKO,EALb;YAAA,CAAA;QAQN,IAAI8I,aAAsB,gBACxB,IAAA,CAAK,KAAA,GAAQ,IAAI,SAASA,GACvB,IAAA,GACA,IAAA,CAAK,CAACriB,IAAS,kBAAkBA,IACjC,IAAA,CAAKsiB;aAAiB,IAChBD,aAAsB,aAC/B,IAAA,CAAK,KAAA,GAAQ,QAAQ,OAAA,CAAQC,EAAkBD;aAAW,IAE1D,MAAM,OAAA,CAAQA,MACdA,EAAW,KAAA,CAAM,CAAC5G,IAAOA,aAAc,aACvC;YACAxC,EAAA,IAAA,EAAKgJ,GAAUI;YACT,MAAAG,IAAQxJ,EAAA,IAAA,EAAKiJ,EAAAA,CAAQ,EAArB;YACN,IAAIO,KAAS,MAAY,MAAA,MAAM;YAC/BvJ,EAAA,IAAA,EAAKM,GAAQ;gBACX,OAAOiJ,EAAM,YADF;gBAEX,QAAQA,EAAM,aADD;gBAEb,UAAUxJ,EAAA,IAAA,EAAKiJ,GAAQ,MADT,CAEZ,CAAC7nB,GAAKyhB,IAAQzhB,IAAOyhB,CAAAA,EAAI,QAAA,IAAY,CAAA,GACrC;YACF,IAEG,IAAA,CAAA,KAAA,GAAQ,QAAQ,OAAA,CAAQ;gBAAE,GAAG7C,EAAA,IAAA,EAAKO,EAAAA;gBAAO,UAAU,IAAA;YAAA;QAAU,OAAA,IACzD,UAAU8I,GACnB,IAAA,CAAK,KAAA,GAAQI,EAAA,IAAA,EAAKP,IAAAC,IAAL,IAAA,CAAA,IAAA,EACXE,EAAW,MAAA,EACXA,EAAW,IAAA,EACX,IAAA,CAAK,IAAO,CAAA;gBACZ,OAAOrJ,EAAA,IAAA,EAAKO,GAAM,KADN;gBAEZ,QAAQP,EAAA,IAAA,EAAKO,GAAM,MADD;gBAElB,UAAU,IADS;YAEnB,CAAA;aAEF,MAAM,MAAM;IAEhB;IAAA;;;;;GAAA,GA/DA,IAAI,OAAO;QACF,OAAA;YAAE,GAAGP,EAAA,IAAA,EAAKO,EAAV;QAAA;IACT;IA+EA,MAAM,KAAK5d,CAAAA,EAGR;QACG,IAAAqd,EAAA,IAAA,EAAKgJ,MAAQ,MACR,OAAA;YACL,OAAO,MAAM,kBAAkBhJ,EAAA,IAAA,EAAKgJ;YACpC,OAAO;QAAA;QAGL,MAAAU,IAAK/mB,IAAOqd,EAAA,IAAA,EAAKO,GAAM,QAAvB;QACC,OAAA;YACL,OAAA,AACEP,CAAAA,EAAA,IAAA,EAAKiJ,GAAQ,IAFV,CAGD,CAACtpB,IAAM+pB,KAAM/pB,EAAE,SAAA,IAAa+pB,KAAM/pB,EAAE,SAAA,GAAaA,CAAAA,EAAE,QAAA,IAAY,CAAA,MAC5DqgB,EAAA,IAAA,EAAKiJ,EAAAA,CAAQ,EAAC,AAAA,EACnB,KAAA;YACF,OAAO;QAAA;IAEX;IAEA,MAAM,MAAMtmB,CAAAA,EAAc;QAEpB,IADJ,MAAM,IAAA,CAAK,KAAA,EACPqd,EAAA,IAAA,EAAKgJ,MAAQ,MACR,OAAA;YACL,IAAII,GAAQ,MAAM,kBAAkBpJ,EAAA,IAAA,EAAKgJ;YACzC,IAAII,GAAQ,MAAM,kBAAkBpJ,EAAA,IAAA,EAAKgJ;SAAK;QAGlD,IAAIX,IAAS;QACb,IAAA,IAASjqB,IAAI,GAAGA,IAAI4hB,EAAA,IAAA,EAAKiJ,GAAQ,MAAA,EAAQ7qB,IAAK;YACtC,MAAAukB,IAAK3C,EAAA,IAAA,EAAKiJ,EAAAA,CAAQ7qB,EAAlB;YACF,IAAA,CAAAuE,CAAAA,IAAOggB,EAAG,SAAA,AAAA,GACL;gBAAA0F,IAAAjqB;gBACT;YAAA;QACF;QACA,IAAIiqB,MAAW,IAAU,MAAA,MAAM;QAC/B,MAAME,IAAWvI,EAAA,IAAA,EAAKiJ,GACnB,KAAA,CAAM,GAAGZ,GACT,GAAA,CAAI,CAAC1F,IAAO,IAAI,WAAWA,KACxB6F,IAAYxI,EAAA,IAAA,EAAKiJ,GAAQ,KAAA,CAAMZ,GAAQ,GAH7C,CAIE,CAAC1F,IACC,IAAI,WAAWA,GAAI;gBACjB,WAAWA,EAAG,SAAA,GAAYhgB;YAAA;QAGzB,OAAA;YAAC,IAAIymB,GAAQb;YAAW,IAAIa,GAAQZ;SAApC;IACT;IAEA,MAAM,QAAQ;QACZ,MAAM,IAAA,CAAK,KAAX;QACA,MAAMxhB,IACJgZ,EAAA,IAAA,EAAKgJ,MAAQ,OACThJ,EAAA,IAAA,EAAKiJ,GAAQ,GAAA,CAAI,CAACtG,IAAOA,EAAG,KAAA,MAC5B,MAAM,kBAAkB3C,EAAA,IAAA,EAAKgJ;QAC5B,OAAA,IAAII,GAAQpiB;IACrB;IAEA,UAAgB;Qd5KX,IAAAK;Qc6KH5F,EAAI,IAAA,CAAK,oBAAiB,AAC1B4F,CAAAA,IAAA2Y,EAAA,IAAA,EAAKgJ,EAAAA,KAAL,QAAA3hB,EAAW,KAAA,IACX2Y,EAAA,IAAA,EAAKiJ,GAAQ,OAAA,CAAQ,CAACtpB,IAAMA,EAAE,KAAA;IAChC;AACF;AA7JE4gB,IAAA,IAAA,WAiBAyI,IAAA,IAAA,WAEAC,IAAA,IAAA,WAtBKC,KAAA,IAAA,WAiFCC,KACJ,eAAAhiB,CAAAA,EACAC,CAAAA;IAEA6Y,EAAA,IAAA,EAAKgJ,GAAU,MAAM/hB,GAAUC,GAAQC;IACjC,MAAAuiB,IAAU3J,EAAA,IAAA,EAAKiJ,EAAAA,CAAQ,EAAvB;IACN,IAAIU,KAAW,MAAY,MAAA,MAAM;IAEjC1J,EAAA,IAAA,EAAKM,GAAQ;QACX,UAAUP,EAAA,IAAA,EAAKiJ,GAAQ,MAAA,CAAO,CAAC7nB,GAAKyhB,IAAQzhB,IAAOyhB,CAAAA,EAAI,QAAA,IAAY,CAAA,GAAI;QACvE,OAAO8G,EAAQ,UADyD;QAExE,QAAQA,EAAQ,WADD;IACC,IAEdloB,EAAA,IAAA,CAAK,kBAAkBue,EAAA,IAAA,EAAKO;AAClC;AA/FK,IAAMqJ,KAANR;AdjBA,IAAA7I,IAAAsJ,IAAAC,IAAA/I,IAAAgJ,IAAAC,IAAAnF,IAAAoF;AecA,MAAMC,KAAN,MAAMA;IAA2B;;;;GAAA,GAyCtC,YACEb,CAAAA,EACAlI,IAAuB,CAAA,CAAA,CACvB;QA5CG3B,EAAA,IAAA,EAAAuK;QAGLxK,EAAA,IAAA,EAAA;QAEAC,EAAA,IAAA,EAAAe,IAAQ;YAAA,KAAA;YAEN,UAAU;YACV,OAAO;YACP,QAAQ;QAAA;QAgBVf,EAAA,IAAA,EAAAqK,IAAY,IAAI;QAChBrK,EAAA,IAAA,EAAAsK,IAAY,IAAI;QAQhBtK,EAAA,IAAA,EAAAuB;QA6DA,KAAA;QAAAvB,EAAA,IAAA,EAAAqF,IAAM;QACNrF,EAAA,IAAA,EAAAyK,IAAe;QAnDbhK,EAAA,IAAA,EAAKc,IAAQ;YACX,MAAM,CADK;YAEX,QAAQ;YACR,GAAGI,CADK;QACL,IAGL,IAAA,CAAK,KAAA,GAAQsI,EAAA,IAAA,EAAKM,IAAAC,IAAL,IAAA,CAAA,IAAA,EAAWX,GAAY,IAAA,CAAK,IAAO,CAAA;gBAAA,kBAAA;gBAE9C,OAAO;gBACP,QAAQ;gBACR,UAAUlI,EAAK,IAAA,GAAO,IAAA,IAAWnB,EAAA,IAAA,EAAKO,IAAM,QADpC;YAER,CAAA;IACJ;IAAA;;;;GAAA,GAxCA,IAAI,OAAO;QACF,OAAA;YACL,GAAGP,EAAA,IAAA,EAAKO,GADH;YAEL,YAAYtC,EAAmB,UADvB;YAER,WAAW;QAAA;IAEf;IAAA;;GAAA,GAOA,aAA6B;QAC3B,OAAO;YAAC+B,EAAA,IAAA,EAAK6J;YAAW7J,EAAA,IAAA,EAAK8J;SAA7B;IACF;IAAA;;;;;;;;GAAA,GA0EA,MAAM,KAAKnnB,CAAAA,EAGR;QACD,IAAI,CAACqd,EAAA,IAAA,EAAKe,IAAM,IAAA,IAAQpe,KAAQqd,EAAA,IAAA,EAAKO,IAAM,QAA3C,EAEE,OAAO;YAAE,OAAO,EAAA;YAAI,OAAO;QAAO;QAG9B,MAAAgG,IAAY5jB,IAAOqd,EAAA,IAAA,EAAK6E;QAG9B,IAAIliB,IAAOqd,EAAA,IAAA,EAAK6E,OAAO0B,IAAY,KACjC,OAAAtG,EAAA,IAAA,EAAK4E,IAAMliB,IACXsd,EAAA,IAAA,EAAKgK,IAAe,KAAK,IADzB,CAEGjK,EAAA,IAAA,EAAK6E,MAAM,MAAO5G,EAAmB,UADf,IAGlB;YACL,OAAO;gBAAC,IAAI,aAAa;gBAAI,IAAI,aAAa;aADzC;YAEL,OAAO;QAAA;QAIXgC,EAAA,IAAA,EAAK4E,IAAMliB;QACX,MAAM4E,IAAW,KAAK,IAAtB,CACGgf,IAAY,MAAOtI,EAAmB,UADnB,GAGhB4H,IAAS7F,EAAA,IAAA,EAAKiK,MAAe1iB,GAC7Bua,IAAQ9B,EAAA,IAAA,EAAKe,IAAM,IAAA,GACrB;YACEpY,GAAsBqX,EAAA,IAAA,EAAK6J,KAAW7J,EAAA,IAAA,EAAKiK,KAAcpE;YACzDld,GAAsBqX,EAAA,IAAA,EAAK8J,KAAW9J,EAAA,IAAA,EAAKiK,KAAcpE;SAAM,GAEjE;YACE7F,EAAA,IAAA,EAAK6J,IAAU,KAAA,CAAM7J,EAAA,IAAA,EAAKiK,KAAcpE;YACxC7F,EAAA,IAAA,EAAK8J,IAAU,KAAA,CAAM9J,EAAA,IAAA,EAAKiK,KAAcpE;SAAM;QAEpD,OAAA5F,EAAA,IAAA,EAAKgK,IAAepE,IAEb;YAAE,OAAA/D;YAAO,OAAO;QAFvB;IAGF;IAAA;;;GAAA,GAMA,MAAM,MAAMnf,CAAAA,EAAc;QACxB,MAAM,IAAA,CAAK,KAAX;QACA,MAAM4E,IAAW,KAAK,IAAA,CAAM5E,IAAO,MAAOsb,EAAmB,UAAU,GACjEsK,IAAW,IAAI2B,GACnB,IAAA,CAAK,UAAA,GAAa,GAAA,CAAI,CAACC,IAASA,EAAK,KAAA,CAAM,GAAG5iB,KAC9CyY,EAAA,IAAA,EAAKe,MAEDyH,IAAY,IAAI0B,GACpB,IAAA,CAAK,UAAA,GAAa,GAAA,CAAI,CAACC,IAASA,EAAK,KAAA,CAAM5iB,KAC3CyY,EAAA,IAAA,EAAKe;QAEA,OAAA;YAACwH;YAAUC;SAAX;IACT;IAEA,MAAM,QAAQ;QACZ,MAAM,IAAA,CAAK,KAAX;QACA,MAAMhF,IAAO,IAAI0G,GAAU,IAAA,CAAK,UAAA,IAAclK,EAAA,IAAA,EAAKe;QACnD,OAAA,MAAMyC,EAAK,KAAA,EACJA;IACT;IAAA;;GAAA,GAKA,UAAgB;QACTvD,EAAA,IAAA,EAAA4J,IAAY,IAAI,aAAa,KAC7B5J,EAAA,IAAA,EAAA6J,IAAY,IAAI,aAAa,KAClCroB,EAAI,IAAA,CAAK;IACX;AACF;AAhLE8e,KAAA,IAAA,WAoBAsJ,KAAA,IAAA,WACAC,KAAA,IAAA,WAQA/I,KAAA,IAAA,WAlCKgJ,KAAA,IAAA,WA2DCC,KAAAA,eACJX,CAAAA;IAEIa,GAAU,GAAA,IAAO,QACTA,CAAAA,GAAA,GAAA,GAAM,IAAI,aAAa;QAC/B,YAAYjM,EAAmB,UADA;IACA,EAChC;IAGG,MAAAmM,IAAS,YAAY,GAAA,IACrBrD,IACJsC,aAAsB,iBAClB,MAAMgB,GAAgBhB,GAAYa,GAAU,GAAG,IAC/Cb;IAEN5nB,EAAI,IAAA,CAAK,gCAAgC,YAAY,GAAA,KAAQ2oB;IAEvD,MAAArjB,IAASiZ,EAAA,IAAA,EAAKe,IAAM,MAApB;IACN,IAAIha,MAAW,GACb,KAAA,MAAWojB,KAAQpD,EACR,IAAA,IAAA3oB,IAAI,GAAGA,IAAI+rB,EAAK,MAAA,EAAQ/rB,KAAK,EAAQ+rB,CAAAA,CAAA/rB,EAAC,IAAK2I;IAGxDiZ,EAAA,IAAA,EAAKO,IAAM,QAAA,GAAYwG,CAAAA,CAAI,EAAC,CAAE,MAAA,GAAS9I,EAAmB,UAAA,GAAc,KAEnEgC,EAAA,IAAA,EAAA4J,IAAY9C,CAAAA,CAAI,EAAC,GAEtB9G,EAAA,IAAA,EAAK6J,IAAY/C,CAAAA,CAAI,EAAC,IAAK/G,EAAA,IAAA,EAAK6J,MAE5BpoB,EAAA,IANJ,CAOE,0CACA,YAAY,GAAA,KAAQ2oB;AAExB,GAGAvF,KAAA,IAAA,WACAoF,KAAA,IAAA,WA/FA1K,EADW2K,IACJ,OAA2B;AAD7B,IAAMI,KAANJ;AA0Le,eAAAK,GACpB9G,CAAAA,EACAtC,CAAAA;IAEA,MAAMzb,IAAyB,EAA/B;IACA,KAAA,MAAW8d,KAAQC,EACjB,MAAMD,EAAK,KAAA,EACN9d,EAAA,IAAA,CAAK8d,EAAK,UAAA;IAEjB,OAAO,IAAI8G,GAAUxkB,GAAmBJ,IAAOyb;AACjD;AAEA,eAAekJ,GACbljB,CAAAA,EACA/J,CAAAA;IAEA,MAAMwI,IAAM,MAAM,IAAI,SAASuB,GAAQ,WAAA;IACvC,OAAOP,GAAuB,MAAMxJ,EAAI,eAAA,CAAgBwI;AAC1D;Af1NO,IAAA2a,IAAAiK,IAAAC,IAAAC;AgBSA,MAAMC,KAAN,MAAMA;IA4BX,YAAYC,CAAAA,CAAiB;QAzB7BrL,EAAA,IAAA,EAAA;QAEAC,EAAA,IAAA,EAAAe,IAAQ;YAAA,KAAA;YAEN,UAAU;YACV,OAAO;YACP,QAAQ;QAAA;QASVf,EAAA,IAAA,EAAAgL,IAAiB,KAAM;QAKd;;KAAA,GAAAjL,EAAA,IAAA,EAAA;QAETC,EAAA,IAAA,EAAAiL,IAA+B;QAE/BjL,EAAA,IAAA,EAAAkL;QAEEzK,EAAA,IAAA,EAAKyK,IAAME;QACX,MAAMC,IAAaD,EAAG,cAAA,EAAe,CAAE,EAAvC;QACA,IAAIC,KAAc,MAAM;YACtB,MAAM,EAAE,OAAAjuB,CAAAA,EAAO,QAAAC,CAAAA,EAAO,GAAIguB,EAAW,WAAA;YACrCA,EAAW,WAAA,GAAc,UACpB7K,EAAA,IAAA,EAAAO,IAAM,KAAA,GAAQ3jB,KAAS,GACvBojB,EAAA,IAAA,EAAAO,IAAM,MAAA,GAAS1jB,KAAU,GAE9BojB,EAAA,IAAA,EAAKwK,IAAO,IAAI,gBAAgB7tB,KAAS,GAAGC,KAAU,KACtDojB,EAAA,IAAA,EAAKuK,IAAiBM,GACpB9K,EAAA,IAAA,EAAKyK,IAAK,UAAA,CAAW,OACrBI;QAEJ;QAEA,IAAA,CAAK,UAAA,GAAaD,EAAG,cAAA,EAAe,CAAE,EAAC,IAAK,MAE5C5K,EAAA,IAAA,EAAKO,IAAM,QAAA,GAAW,IAAA,GACtB,IAAA,CAAK,KAAA,GAAQ,QAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI;IACxC;IApCA,IAAI,OAAO;QACF,OAAA;YACL,GAAGP,EAAA,IAAA,EAAKO,GADH;QACG;IAEZ;IAkCA,MAAM,OAIH;QACM,OAAA;YACL,OAAOP,EAAA,IAAA,EAAKyK,OAAQ,OAAO,OAAO,MAAM,kBAAkBzK,EAAA,IAAA,EAAKyK;YAC/D,OAAO,EAD4D;YAEnE,OAAO;QAAA;IAEX;IAEA,MAAM,QAAQ;QACL,OAAA;YAAC,MAAM,IAAA,CAAK,KAAA;YAAS,MAAM,IAAA,CAAK,KAAA;SAAhC;IACT;IAEA,MAAM,QAAQ;QACZ,OAAO,IAAIE,GAAgB3K,EAAA,IAAA,EAAK0K,IAAI,KAAA;IACtC;IAEA,UAAgB;QACT1K,EAAA,IAAA,EAAA0K,IAAI,SAAA,GAAY,OAAA,CAAQ,CAACptB,IAAMA,EAAE,IAAA,KACtC0iB,EAAA,IAAA,EAAKwK,IAAL,IADK,CAAA,IAAA;IAEP;AACF;AArEEjK,KAAA,IAAA,WAaAiK,KAAA,IAAA,WAOAC,KAAA,IAAA,WAEAC,KAAA,IAAA,WA1BAnL,EADWoL,IACJ,OAA2B;AAD7B,IAAMI,KAANJ;AA4EP,SAASG,GACPE,CAAAA,EACA5T,CAAAA;IAEO,OAAArO,GACL,IAAI,0BAA0B;QAC5B,OAAAqO;IACD,GAAE,QADD,EAEF;QACE,SAAS,OAAOoS;YACPwB,EAAA,SAAA,CAAUxB,GAAO,GAAG,IAC3BA,EAAM,KAAA;QACR;QACA,QAAQ,WAAa;IACvB;AAEJ;AhBrGO,IAAAyB,GAAA1K,IAAAQ,IAAA0J,IAAAS,IAAAC,GAAAC,IAAAC,IAAAC,IAAAC;AiByCA,MAAMC,KAAN,MAAMA;IA6CX,YAAYC,CAAAA,EAAoCtK,CAAAA,CAA2B;QA7CtE3B,EAAA,IAAA,EAAA8L;QACL/L,EAAA,IAAA,EAAA;QAEAC,EAAA,IAAA,EAAAyL,GAA+B,EAA/B;QAEAzL,EAAA,IAAA,EAAAe,IAAQ;YACN,OAAO;YACP,QAAQ;YACR,UAAU;QAAA;QAOZf,EAAA,IAAA,EAAAuB,IAAuC;YACrC,OAAO;YACP,aAAa;YACb,MAAM;YACN,UAAU;YACV,eAAe;YACf,cAAc;YACd,YAAY;YACZ,aAAa;YACb,WAAW;YACX,SAAS;YACT,UAAU;YACV,YAAY;gBACV,SAAS;gBACT,SAAS;gBACT,MAAM;gBACN,OAAO;YACT;YACA,YAAY;YACZ,aAAa;QAAA;QAGfvB,EAAA,IAAA,EAAAiL;QACAjL,EAAA,IAAA,EAAA0L;QAEA1L,EAAA,IAAA,EAAA2L,GAA6B;QAE7B3L,EAAA,IAAA,EAAA4L,IAAc;QACd5L,EAAA,IAAA,EAAA6L,IAAe;QjBpFV,IAAAhkB;QiB8FH,IAPA4Y,EAAA,IAAA,EAAKgL,GAAa,MAAM,OAAA,CAAQQ,KAC5BA,IACAC,GAASD,GAAS,GAAA,CAAI,CAAC,EAAE,OAAA7iB,CAAAA,EAAO,KAAAC,CAAAA,EAAK,MAAA8iB,CAAAA,EAAAA,GAAY,CAAA;gBAC/C,OAAO/iB,IAAQ;gBACf,KAAKC,IAAM;gBACX,MAAA8iB;YACA,CAAA,KACF3L,EAAA,IAAA,EAAKiL,GAAW,MAAA,KAAW,GAAG,MAAM,MAAM;QAE9ChL,EAAA,IAAA,EAAKc,IAAQ,OAAO,MAAA,CAAOf,EAAA,IAAA,EAAKe,KAAOI,KAEvClB,EAAA,IAAA,EAAKoL,IACHlK,EAAK,WAAA,IAAe,OAAO,IAAA,AAAKA,CAAAA,EAAK,QAAA,IAAY,EAAA,IAAM;QAEzD,MAAM,EAAE,UAAAyK,CAAAA,EAAU,YAAAC,CAAAA,EAAY,YAAAC,CAAAA,EAAY,aAAAC,CAAAA,EAAa,eAAAC,CAAAA,EAAAA,GACrDhM,EAAA,IAAA,EAAKe;QACFd,EAAA,IAAA,EAAAmL,IAAcQ,IAAW5L,EAAA,IAAA,EAAKqL,MAAe,IAClDpL,EAAA,IAAA,EAAKwK,IAAO,IAAI,gBAAgBqB,GAAYC,KAC5C9L,EAAA,IAAA,EAAKiL,IAAOlL,EAAA,IAAA,EAAKyK,IAAK,UAAA,CAAW,QACjCzK,EAAA,IAAA,EAAKkL,IAAK,IAAA,GAAO,CAAA,EAAGU,EAAQ,GAAA,EAAMC,EAAU,CAAA,EAC5C7L,EAAA,IAAA,EAAKkL,IAAK,SAAA,GAAY,UACtBlL,EAAA,IAAA,EAAKkL,IAAK,YAAA,GAAe,OACpBlL,EAAA,IAAA,EAAAkL,IAAK,aAAA,GAAgBc,KAAiB,OAE3C/L,EAAA,IAAA,EAAKM,IAAQ;YACX,OAAOuL;YACP,QAAQC;YACR,UAAA,AAAA,CAAA,AAAU1kB,CAAAA,IAAA2Y,EAAA,IAAA,EAAKiL,GAAW,EAAA,CAAG,GAAE,KAArB,OAAA,KAAA,IAAA5jB,EAAwB,GAAA,AAAA,KAAO;QAAA,IAG3C,IAAA,CAAK,KAAA,GAAQ,QAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI;IACxC;IAlEA,IAAI,OAAO;QACF,OAAA;YAAE,GAAG2Y,EAAA,IAAA,EAAKO,GAAV;QAAA;IACT;IAAA;;GAAA,GAmJA,MAAM,KAAK5d,CAAAA,EAGR;QjB5ME,IAAA0E,GAAAK;QiB6MH,IACEsY,EAAA,IAAA,EAAKmL,MAAW,QAChBxoB,KAAQqd,EAAA,IAAA,EAAKmL,GAAQ,SAAA,IACrBxoB,KAAQqd,EAAA,IAAA,EAAKmL,GAAQ,SAAA,GAAanL,CAAAA,EAAA,IAAA,EAAKmL,GAAQ,QAAA,IAAY,CAAA,GAE3D,OAAO;YAAE,OAAOnL,EAAA,IAAA,EAAKmL,GAAQ,KAAA;YAAS,OAAO;QAA7C;QAGF,IAAI/sB,IAAI;QACR,MAAOA,IAAI4hB,EAAA,IAAA,EAAKiL,GAAW,MAAA,IACrB,CAAAtoB,CAAAA,KAAQqd,EAAA,IAAA,EAAKiL,EAAAA,CAAW7sB,EAAC,CAAE,GAAA,AAAA,GADEA,KAAK;QAIlC,MAAAqkB,IAAKzC,EAAA,IAAA,EAAKiL,EAAAA,CAAW7sB,EAAC,IAAK4hB,EAAA,IAAA,EAAKiL,GAAW,EAAA,CAAG;QACpD,IAAItoB,IAAO8f,EAAG,GAAA,EAAY,OAAA;YAAE,OAAO;QAAnC;QACI,IAAA9f,IAAO8f,EAAG,KAAA,EAAO;YAEdzC,EAAA,IAAA,EAAAkL,IAAK,SAAA,CAAU,GAAG,GAAGlL,EAAA,IAAA,EAAKyK,IAAK,KAAA,EAAOzK,EAAA,IAAA,EAAKyK,IAAK,MAAM;YAC3D,MAAM9H,IAAK,IAAI,WAAW3C,EAAA,IAAA,EAAKyK,KAAM;gBACnC,WAAW9nB;gBAAA,cAAA;gBAEX,UAAU8f,EAAG,KAAA,GAAQ9f;YAAA;YAEvB,OAAA,AAAA0E,CAAAA,IAAA2Y,EAAA,IAAA,EAAKmL,EAAAA,KAAL,QAAA9jB,EAAc,KAAA,IACd4Y,EAAA,IAAA,EAAKkL,GAAUxI,IAER;gBAAE,OAAOA,EAAG,KAAA;gBAAS,OAAO;YAHnC;QAIF;QAEK8G,EAAA,IAAA,EAAA6B,IAAAC,IAAA,IAAA,CAAA,IAAA,EAAW9I,EAAG,IAAd;QAEL,MAAME,IAAK,IAAI,WAAW3C,EAAA,IAAA,EAAKyK,KAAM;YACnC,WAAW9nB;YACX,UAAU8f,EAAG,GAAA,GAAM9f;QAAA;QAErB,OAAA,AAAA+E,CAAAA,IAAAsY,EAAA,IAAA,EAAKmL,EAAAA,KAAL,QAAAzjB,EAAc,KAAA,IACduY,EAAA,IAAA,EAAKkL,GAAUxI,IAER;YAAE,OAAOA,EAAG,KAAA;YAAS,OAAO;QAHnC;IAIF;IAAA;;GAAA,GAKA,MAAM,MAAMhgB,CAAAA,EAAc;QACxB,MAAM,IAAA,CAAK,KAAX;QACA,IAAI0lB,IAAS;QACb,IAAA,IAASjqB,IAAI,GAAGA,IAAI4hB,EAAA,IAAA,EAAKiL,GAAW,MAAA,EAAQ7sB,IAAK;YACzC,MAAA6tB,IAAMjM,EAAA,IAAA,EAAKiL,EAAAA,CAAW7sB,EAAtB;YACF,IAAA,CAAAuE,CAAAA,IAAOspB,EAAI,KAAA,AAAA,GACN;gBAAA5D,IAAAjqB;gBACT;YAAA;QACF;QACA,IAAIiqB,MAAW,IAAU,MAAA,MAAM;QAC/B,MAAME,IAAWvI,EAAA,IAAA,EAAKiL,GAAW,KAAA,CAAM,GAAG5C,GAAQ,GAAA,CAAI,CAAC3qB,IAAO,CAAA;gBAAE,GAAGA,CAAAA;YAAAA,CAAAA;QAC/D,IAAAwuB,IAAY3D,EAAS,EAAA,CAAG,KACxB4D,IAAc;QAEdD,KAAa,QAAQA,EAAU,GAAA,GAAMvpB,KACzBwpB,CAAAA,IAAA;YACZ,OAAO;YACP,KAAKD,EAAU,GAAA,GAAMvpB;YACrB,MAAMupB,EAAU,IADK;QACL,GAGlBA,EAAU,GAAA,GAAMvpB,CAAAA;QAEZ,MAAA6lB,IAAYxI,EAAA,IAAA,EAAKiL,GACpB,KAAA,CAAM5C,GACN,GAAA,CAAI,CAAC3qB,IAAO,CAAA;gBAAE,GAAGA,CAAAA;gBAAG,OAAOA,EAAE,KAAA,GAAQiF;gBAAM,KAAKjF,EAAE,GAAA,GAAMiF;YAAO,CAAA;QAClE,OAAIwpB,KAAe,QAAgB3D,EAAA,OAAA,CAAQ2D,IACpC;YACL,IAAIX,GAAmBjD,GAAUvI,EAAA,IAAA,EAAKe;YACtC,IAAIyK,GAAmBhD,GAAWxI,EAAA,IAAA,EAAKe;SAAK;IAEhD;IAAA;;GAAA,GAKA,MAAM,QAAQ;QACL,OAAA,IAAIyK,GAAmBxL,EAAA,IAAA,EAAKiL,GAAW,KAAA,CAAM,IAAIjL,EAAA,IAAA,EAAKe;IAC/D;IAAA;;GAAA,GAKA,UAAU;QjBpSL,IAAA1Z;QiBqSHA,CAAAA,IAAA2Y,EAAA,IAAA,EAAKmL,EAAAA,KAAL,QAAA9jB,EAAc,KAAd;IACF;AACF;AA3PE4jB,IAAA,IAAA,WAEA1K,KAAA,IAAA,WAUAQ,KAAA,IAAA,WAsBA0J,KAAA,IAAA,WACAS,KAAA,IAAA,WAEAC,IAAA,IAAA,WAEAC,KAAA,IAAA,WACAC,KAAA,IAAA,WA3CKC,KAAA,IAAA,WA+ELC,KAAAA,SAAW9uB,CAAAA;IACT,MAAM2vB,IAAQ3vB,EACX,KAAA,CAAM,CADT;AACS,CAAI,EACV,OAAA,GACA,GAAA,CAAI,CAACa,IAAMA,EAAE,IAAA,KAEV,EAAE,OAAAV,CAAAA,EAAO,QAAAC,CAAAA,EAAAA,GAAWmjB,EAAA,IAAA,EAAKyK,KAEzB,EACJ,OAAA4B,CADI,EAEJ,UAAAT,CADA,EAEA,aAAAU,CADA,EAEA,YAAAC,CADA,EAEA,aAAAC,CADA,EAEA,WAAAC,CADA,EAEA,SAAAC,CADA,EAEA,UAAAC,CADA,EAEA,cAAAC,CADA,EACA,GACE5M,EAAA,IAAA,EAAKe,KACH3jB,IAAM4iB,EAAA,IAAA,EAAKkL;IAEjB9tB,EAAI,SAAA,CAAU,GAAG,GAAGR,GAAOC,IAC3BO,EAAI,WAAA,GAAc;IAKlB,IAAIyvB,IAAiBD;IACrB,KAAA,MAAWE,KAAWV,EAAO;QACrB,MAAAW,IAAU3vB,EAAI,WAAA,CAAY0vB,IAC1BE,IAAUpwB,IAAQ;QACpB0vB,KAAe,QACjBlvB,CAAAA,EAAI,aAAA,GAAgB,GACpBA,EAAI,aAAA,GAAgB,GACpBA,EAAI,UAAA,GAAa,GAEjBA,EAAI,SAAA,GAAYkvB,GAChBlvB,EAAI,WAAA,GAAc,KACdA,EAAA,QAPN,CAQI4vB,IAAUD,EAAQ,qBAAA,GAAwB/M,EAAA,IAAA,EAAKqL,KAC/CxuB,IAASgwB,IAAiB7M,EAAA,IAAA,EAAKoL,KAC/B2B,EAAQ,KAAA,GAAQ/M,EAAA,IAAA,EAAKqL,MAAe,GACpCrL,EAAA,IAAA,EAAKoL,IAAA,GAKThuB,EAAI,WAAA,GAAcmvB,EAAW,KAAA,EAC7BnvB,EAAI,aAAA,GAAgBmvB,EAAW,OAAA,EAC/BnvB,EAAI,aAAA,GAAgBmvB,EAAW,OAAA,EAC/BnvB,EAAI,UAAA,GAAamvB,EAAW,IAAA,EAE5BnvB,EAAI,WAAA,GAAc,GAEdovB,KAAe,QACbpvB,CAAAA,EAAA,SAAA,GAAYqvB,KAAab,IAAW,GACpCc,KAAW,QAAMtvB,CAAAA,EAAI,OAAA,GAAUsvB,CAAAA,GAC/BC,KAAY,QAAMvvB,CAAAA,EAAI,QAAA,GAAWuvB,CAAAA,GACrCvvB,EAAI,WAAA,GAAcovB,GACdpvB,EAAA,UAjBG,CAkBL0vB,GACAE,GACAnwB,IAASgwB,IAAiB7M,EAAA,IAAA,EAAKoL,MAAcpL,EAAA,IAAA,EAAKqL,IAAA,GAItDjuB,EAAI,SAAA,GAAYivB,GACZjvB,EAAA,QALkD,CAMpD0vB,GACAE,GACAnwB,IAASgwB,IAAiB7M,EAAA,IAAA,EAAKoL,MAAcpL,EAAA,IAAA,EAAKqL,MAIlCwB,KAAA7M,EAAA,IAAA,EAAKoL,MAAcQ,IAAW;IAClD;AACF;AA3JK,IAAMqB,KAANzB;AAiQP,SAAS0B,GAAiBvqB,CAAAA;IAClB,MAAAwqB,IAAQxqB,EAAK,KAAA,CAAM;IACzB,IAAIwqB,KAAS,MAAM,MAAM,MAAM,CAAA,mBAAA,EAAsBxqB,EAAI,CAAE;IAE3D,MAAM6H,IAAQ,OAAO2iB,CAAAA,CAAM,EAAE,GACvB1iB,IAAU,OAAO0iB,CAAAA,CAAM,EAAE,GACzBC,IAAU,OAAOD,CAAAA,CAAM,EAAE,GACzBE,IAAe,OAAOF,CAAAA,CAAM,EAAE;IAEpC,OAAO3iB,IAAAA,OAAkBC,IAAU,KAAK2iB,IAAUC,IAAe;AACnE;AAEA,SAAS3B,GAAS4B,CAAAA;IAEd,OAAAA,EACG,KAAA,CAAM,SACN,GAAA,CAAI,CAAC5vB,IAAMA,EAAE,IAAA,IACb,MAAA,CAAO,CAAC2M,IAAQA,EAAI,MAAA,GAAS,GAE7B,GAAA,CAAI,CAAC3M,IAAO,CAAA;YACX,SAASA;YACT,OAAOA,EAAE,KADA,CAEP;QACF,CAAA,GAGD,MAHC,CAIA,CAAC,EAAE,SAAAovB,CAAAA,EAAQ,EAAG3mB,GAAK+a;QjBrUpB,IAAA7Z;QiBsUG,OAAA,CAAE,CAAA,QAAQ,IAAA,CAAKylB,MAAO,AAAA,CAAA,AAAKzlB,CAAAA,IAAA6Z,CAAAA,CAAO/a,IAAM,EAAC,AAAA,KAAd,OAAA,KAAA,IAAAkB,EAAiB,KAAA,AAAA,KAAS,IAArD;IAAqD,GAGxD,MAHwD,CAIvD,CAACjG,GAAK,EAAE,SAAA0rB,CAAAA,EAAS,OAAAK,CAAAA,EAAAA;QACf,IAAIA,KAAS,MAAM;YACX,MAAAlW,IAAO7V,EAAI,EAAA,CAAG;YAChB,IAAA6V,KAAQ,MAAa,OAAA7V;YAEzB6V,EAAK,IAAA,IAAQA,EAAK,IAAA,CAAK,MAAA,KAAW,IAAI6V,IAAU,CAAhD;AAAgD,EAAKA,EAAL,CAAA;QAAY,OAE5D1rB,EAAI,IAAA,CAAK;YACP,OAAO8rB,GAAiBC,CAAAA,CAAM,EAAE;YAChC,KAAKD,GAAiBC,CAAAA,CAAM,EAAE;YAC9B,MAAM;QAAA;QAIH,OAAA/rB;IACT,GACA,EADA;AAQR;AjBjWO,IAAAmsB;AkBSA,MAAMC;IAAN,aAAyC;QAoC9ChO,EAAA,IAAA,EAAA+N,IAAAA,aAAAA,GAAAA,IAAiB;QAKjB;;KAAA,GAAAhO,EAAA,IAAA,EAAA,MAAK,CAAuBnY,GAAYqmB;YACtC,MAAMC,IAAW1N,EAAA,IAAA,EAAKuN,IAAW,GAAA,CAAInmB,MAAI,aAAA,GAAA,IAAS;YAClD,OAAAsmB,EAAS,GAAA,CAAID,IAERzN,EAAA,IAAA,EAAKuN,IAAW,GAAA,CAAInmB,MAClB4Y,EAAA,IAAA,EAAAuN,IAAW,GAAA,CAAInmB,GAAMsmB,IAGrB;gBACLA,EAAS,MAAA,CAAOD,IACZC,EAAS,IAAA,KAAS,KACf1N,EAAA,IAAA,EAAAuN,IAAW,MAAA,CAAOnmB;YACzB;QACF;QAQF;;;;KAAA,GAAAmY,EAAA,IAAA,EAAA,QAAO,CACLnY,GACAqmB;YAGA,MAAME,IAAM,IAAA,CAAK,EAAA,CAAGvmB,GAAM,CAAA,GAAI7F;gBACxBosB,KACJF,KAAYlsB;YAAI;YAGX,OAAAosB;QAAA;QAST;;;;;KAAA,GAAApO,EAAA,IAAA,EAAA,QAAO,CACLnY,GAAAA,GACG7F;YAMH,MAAMmsB,IAAW1N,EAAA,IAAA,EAAKuN,IAAW,GAAA,CAAInmB;YACjCsmB,KAAY,QAEhBA,EAAS,OAAA,CAAQ,CAAChrB,IAAYA,KAAWnB;QAAK;IAAA;IAAA;;;;;;;;GAAA,GAlFhD,OAAO,aAKLqsB,CAAAA,EACAC,CAAAA,EAEAC,CAAAA,EACY;QACZ,MAAMC,IAAiBD,EAAS,GAAA,CAAI,CAACE;YAC7B,MAAA,CAACC,GAAaC,EAAS,GAC3B,MAAM,OAAA,CAAQF,KAAWA,IAAU;gBAACA;gBAASA;aADzC;YAKN,OAAOJ,EAAK,EAAA,CAAGK,GAAa,CAAA,GAAI1sB;gBAE3BssB,EAAA,IAAA,CAAKK,MAAc3sB;YAAI;QAC3B;QAEH,OAAO;YACLwsB,EAAe,OAAA,CAAQ,CAACvrB,IAAOA;QAAI;IAEvC;IA6DA,UAAgB;QACdwd,EAAA,IAAA,EAAKuN,IAAW,KAAhB;IACF;AACF;AA9DEA,KAAA,IAAAA;ACpDF,MAAMY,KAAkB,CAAC/mB,GAAc6D;IAC/B,MAAAkC,IAAS,IAAI,WAAW;IACjB,IAAI,SAASA,EAAO,MAAM,EAClC,SAAA,CAAU,GAAGlC;IAClB,IAAA,IAAS7M,IAAI,GAAGA,IAAI,GAAGA,IACrB+O,CAAAA,CAAO,IAAI/O,EAAC,GAAIgJ,EAAK,UAAA,CAAWhJ;IAE3B,OAAA+O;AACT,GAEMihB,KAAgB;IACd,MAAAC,IAAM,IAAI,eACVC,IAAcD,EAAI,MAAA,CAAO,SACzBE,IAAYF,EAAI,MAAA,CAAO,gBAEvBpjB,IAAO,KAAiBsjB,EAAU,UAAA,GAAa,GAC/CphB,IAAS,IAAI,WAAWlC,IACxBujB,IAAO,IAAI,SAASrhB,EAAO,MAAM;IAGvC,OAAAA,EAAO,GAAA,CAAIghB,GAAgB,QAAQljB,IAAO,IAGrCujB,EAAA,SAAA,CAAU,GAAG,IAEXrhB,EAAA,GAAA,CAAImhB,GAAa,KACjBnhB,EAAA,GAAA,CAAIohB,GAAW,KAEfphB;AACT,GAEMshB,KAAgB,CAACC;IACf,MAAAL,IAAM,IAAI,eACVM,IAAeN,EAAI,MAAA,CAAO,SAC1BO,IAAUF,EAAK,GAAA,CAAI,CAACG;QAClB,MAAAC,IAAST,EAAI,MAAA,CAAOQ,IAEpB5jB,IAAO,IAAQ6jB,EAAO,UAAA,EAEtBC,IAAW,IAAI,WAAW9jB;QAE7B,OADQ,IAAI,SAAS8jB,EAAS,MAAM,EACpC,SAAA,CAAU,GAAG9jB,IACP8jB,EAAA,GAAA,CAAIJ,GAAc,IAC3BI,EAAS,GAAA,CAAID,GAAQ,IAAIH,EAAa,UAAU,GAEzCI;IAAA,IAIH9jB,IAAO,KAFO2jB,EAAQ,MAAA,CAAO,CAACxtB,GAAKyhB,IAAQzhB,IAAMyhB,EAAI,UAAA,EAAY,IAGjE1V,IAAS,IAAI,WAAWlC,IACxBujB,IAAO,IAAI,SAASrhB,EAAO,MAAM;IAGvCA,EAAO,GAAA,CAAIghB,GAAgB,QAAQljB,IAAO,IAGrCujB,EAAA,SAAA,CAAU,GAAG,IACbA,EAAA,SAAA,CAAU,IAAIE,EAAK,MAAM;IAG9B,IAAI7oB,IAAS;IACb,KAAA,MAAWipB,KAAUF,EACZzhB,EAAA,GAAA,CAAI2hB,GAAQjpB,IACnBA,KAAUipB,EAAO,UADV;IAIF,OAAA3hB;AACT,GAEM6hB,KAAgB,CAAChoB;IACf,MAAAqnB,IAAM,IAAI,eACVY,IAAaZ,EAAI,MAAA,CAAO,SACxBa,IAAY,OAAO,OAAA,CAAQloB,GAAM,GAAA,CAAI,CAAC,CAACvH,GAAG2J,EAAK,EAAGoF;QACtD,MAAM2gB,IAAQ3gB,IAAQ,GAChB4gB,IAAaf,EAAI,MAAA,CAAOjlB,IAExBimB,IAAY,KAAwBD,EAAW,UAAA,EAE/CjiB,IAAS,IAAI,WAAWkiB,IACxBb,IAAO,IAAI,SAASrhB,EAAO,MAAM;QAClC,OAAAqhB,EAAA,SAAA,CAAU,GAAGa,IACbb,EAAA,SAAA,CAAU,GAAGW,IAElBX,EAAK,SAAA,CAAU,GAAG,KAAKY,EAAW,UAAU,GAC5CjiB,EAAO,GAAA,CAAI8hB,GAAY,KAGlBT,EAAA,SAAA,CAAU,IAAI,IAEnBrhB,EAAO,GAAA,CAAIiiB,GAAY,KAEhBjiB;IAAA,IAIHmiB,IAAa,IADGJ,EAAU,MAAA,CAAO,CAAC9tB,GAAKyhB,IAAQzhB,IAAMyhB,EAAI,UAAA,EAAY,IAErE1V,IAAS,IAAI,WAAWmiB;IAC9BniB,EAAO,GAAA,CAAIghB,GAAgB,QAAQmB,IAAa;IAEhD,IAAIzpB,IAAS;IACb,KAAA,MAAW0M,KAAS2c,EACX/hB,EAAA,GAAA,CAAIoF,GAAO1M,IAClBA,KAAU0M,EAAM,UADT;IAIF,OAAApF;AACT,GAEaoiB,KAAgB,CAACvoB;IAC5B,MAAMwoB,IAAUpB,MACVqB,IAAUhB,GAAc,OAAO,IAAA,CAAKznB,KACpC0oB,IAAUV,GAAchoB,IAExBiE,IAAOukB,EAAQ,MAAA,GAASC,EAAQ,MAAA,GAASC,EAAQ,MAAA,EACjDviB,IAAS,IAAI,WAAWlC;IAGvB,OAAAkC,EAAA,GAAA,CAAIqiB,GAAS,IACbriB,EAAA,GAAA,CAAIsiB,GAASD,EAAQ,MAAM,GAClCriB,EAAO,GAAA,CAAIuiB,GAASF,EAAQ,MAAA,GAASC,EAAQ,MAAM,GAE5CtiB;AACT;AC5DO,SAASwiB,GAAUxO,CAAAA;IA8BpB1f,EAAA,IAAA,CAAK,mBAAmB0f;IACtB,MAAAyO,IAAUjR,EAAO,UAAA,IAGjBkR,IAAgB,IAAIrC,MAIpBsC,IAAc,CAClB7X,GACA8X;QAGM,MAAAC,IADU/X,EAAK,GAAA,CAAI,QACD,GAAA,CAAI;QACpB+X,EAAA,IAAA,GAAOT,GAAcQ,IACrBC,EAAA,IAAA,GAAOA,EAAQ,IAAA,CAAK,UADpB;IACoB;IAG9B,IAAIC,IAAY,CAAhB;IACA,MAAMC,IAAc;QACdN,EAAQ,IAAA,IAAQ,QAAQK,KAChBA,CAAAA,IAAA,CAAA,GAER9O,EAAK,YAAA,IAAgB,QAAA,EAAkByO,EAAQ,IAAA,EAAMzO,EAAK,YAAY,GACtEA,EAAK,QAAA,IAAY,QACXyO,CAAAA,EAAA,IAAA,CAAK,IAAA,CAAK,QAAA,GAAWzO,EAAK,QALhC,AAAA,CAAA;IAMJ;IAGY0O,EAAA,IAAA,CAAK,cAAcK,IACnBL,EAAA,IAAA,CAAK,cAAcK;IAE7B,IAAAC,IACFhP,EAAK,KAAA,IAAS,OACViP,GAAiBjP,EAAK,KAAA,EAAOyO,GAASC,KACtC,MACFQ,IACFlP,EAAK,KAAA,IAAS,OACVmP,GAAiBnP,EAAK,KAAA,EAAOyO,GAASC,KACtC;IACN,OAAI1O,EAAK,KAAA,IAAS,QAAM0O,EAAc,IAAA,CAAK,eACvC1O,EAAK,KAAA,IAAS,QAAM0O,EAAc,IAAA,CAAK,eAEpC;QACL,aAAa,CAAClN,GAAIxB;YACNgP,KAAA,QAAAA,EAAA,MAAA,CAAOxN,GAAIxB,IACrBwB,EAAG,KAAA;QACL;QACA,aAAa,CAACzc;YACRmqB,KAAY,QAChBA,CAAAA,EAAS,MAAA,CAAOnqB,IAChBA,EAAG,KAAA,EAAM;QACX;QACA,oBAAoB,IAAA,AAClBiqB,CAAAA,KAAA,OAAA,KAAA,IAAAA,EAAU,eAAA,AAAA,KAAmBE,CAAAA,KAAA,OAAA,KAAA,IAAAA,EAAU,eAAA,AAAA,KAAmB;QAC5D,OAAO;YACL,MAAM,QAAQ,GAAA,CAAI;gBAChBF,KAAA,OAAA,KAAA,IAAAA,EAAU,KADM;gBAEhBE,CAAAA,KAAA,OAAA,KAAA,IAAAA,EAAU,KAAA,AAAA,MAAU,eAAeA,EAAS,KAAA,KAAU;aACvD;QAEH;QACA,OAAO;YACLR,EAAc,OAAA,IACdM,KAAA,QAAAA,EAAU,KAAA,IAAA,AACNE,CAAAA,KAAA,OAAA,KAAA,IAAAA,EAAU,KAAA,AAAA,MAAU,gBAAcA,EAAS,KAAA;QACjD;QACA,SAAAT;IAAA;AAEJ;AAEA,SAASQ,GACPjP,CAAAA,EACAoP,CAAAA,EACAV,CAAAA;IAEA,MAAMW,IAAiB;QAAA,KAAA;QAErB,WAAW;QACX,OAAOrP,EAAK,KADD;QAEX,QAAQA,EAAK,MADD;QAEZ,QAAQ;YAAC;YAAQ;YAAQ;YAAQ;YAAQ;SAD5B;QAEb,wBAAwB;QACxB,MAAM;IAAA;IAGR,IAAIlE,IAAU,IACVwT,IAAa,CADjB;IAEcZ,EAAA,IAAA,CAAK,cAAc;QAClBY,IAAA,CAAA;IAAA;IAGf,MAAMC,IAGF;QACF,UAAU,EADR;QAEF,UAAU,EADC;IACA,GAEP5J,IAAgB,CACpB6J,GACAvJ,GACA7K;QpB5LG,IAAAlV;QoB8LC,IAAA4V,MAAY,MAAMV,KAAQ,MAAM;YAC5B,MAAAlN,IAAAA,AAAOhI,CAAAA,IAAAkV,EAAK,aAAA,AAAA,KAAL,OAAA,KAAA,IAAAlV,EAAoB,WAA3B;YACNupB,GAA+BvhB,IAC/BmhB,EAAe,sBAAA,GAAyBnhB,GAC9B4N,IAAAsT,EAAQ,QAAA,CAASC,IAC3BX,EAAc,IAAA,CAAK,eACfpuB,EAAA,IAAA,CAAK,6CAA6Cwb;QACxD;QAEAyT,CAAAA,CAAaC,EAAK,CAAE,IAAA,CAAKE,GAAoBzJ;IAAM;IAGrD,IAAI0J,IAAoC,YACpCC,IAAsB;IAE1B,MAAMxK,IAAY;IAClB,SAASyK;QACP,IAAI,CAACP,GAAL;QACM,MAAAQ,IAAYH,MAAa,aAAa,aAAa,YACnDI,IAAWR,CAAAA,CAAaI,EAAQ,EAChCK,IAAYT,CAAAA,CAAaO,EAFzB;QAIN,IAAIC,EAAS,MAAA,KAAW,KAAKC,EAAU,MAAA,KAAW,GAAlD;QAEI,IAAAC,IAAWF,CAAAA,CAAS,EAApB;QACJ,IAAIE,KAAY,QAAQA,EAAS,GAAA,GAAML,IAAsBxK,GAAW;YAChE,MAAA8K,IAASC,EAAgBJ;YAC3BG,IAASN,KAA2CA,CAAAA,IAAAM,CAAAA;QAC1D;QAGM,MAAAE,IAAYJ,CAAAA,CAAU,EAAtB;QAEFI,KAAa,QAAQA,EAAU,GAAA,GAAMR,IAAsBxK,KAClDuK,CAAAA,IAAAG,GAEAD,GAHb;IAKF;IAEA,SAASM,EACPvL,CAAAA;QAEA,IAAIyL,IAAW,IACXpzB,IAAI;QACD,MAAAA,IAAI2nB,EAAO,MAAA,EAAQ3nB,IAAK;YACvB,MAAAI,IAAIunB,CAAAA,CAAO3nB,EAAX;YAEF,IAAAA,IAAI,KAAKI,EAAE,OAAA,EAAX;YAEJ+xB,EAAQ,SAAA,CAAUtT,GAASze,EAAE,IAAA,EAAMA,IACxBgzB,IAAAhzB,EAAE,GAAA,GAAMA,EAAE,QADrB;QAEF;QACO,OAAAunB,EAAA,MAAA,CAAO,GAAG3nB,IACVozB;IACT;IAEM,MAAAC,IAAYhvB,GAAYuuB,GAAY,KAEpCU,IAAWC,GAAmBxQ,GAAM,CAACiG,GAAO7K,IAChDuK,EAAc,YAAYM,GAAO7K,KAE7BqV,IAAWD,GAAmBxQ,GAAM,CAACiG,GAAO7K,IAChDuK,EAAc,YAAYM,GAAO7K;IAGnC,IAAIsV,IAAQ;IACL,OAAA;QACL,IAAI,mBAAkB;YACb,OAAAH,EAAS,eAAA,GAAkBE,EAAS,eAApC;QACT;QACA,QAAQ,CAACjP,GAAgBxB;YACnBA,EAAK,QAAA,IAAmB0Q,CAAAA,KAAA,CAAA,GAAA,AACZA,CAAAA,IAAQ,MAAM,IAAIH,IAAWE,CAAAA,EACrC,MAAA,CAAOjP,GAAIxB;QACrB;QACA,OAAO;YACL,MAAM,QAAQ,GAAA,CAAI;gBAChBuQ,EAAS,KAAA,KAAU,eAAe,MAAMA,EAAS,KAAA,KAAU;gBAC3DE,EAAS,KAAA,KAAU,eAAe,MAAMA,EAAS,KAAA,KAAU;aAC5D,GACSH,KACCT;QACb;QACA,OAAO;YACDU,EAAS,KAAA,KAAU,gBAAcA,EAAS,KAAA,IAC1CE,EAAS,KAAA,KAAU,gBAAcA,EAAS,KAAA;QAChD;IAAA;AAEJ;AAGA,SAAShB,GAA+BvhB,CAAAA;IAChC,MAAAhD,IAAK,IAAI,WAAWgD;IACAhD,CAAAA,CAAG,EAAC,CAGR,QAAA,CAAS,GAAG,KAAA,CAAM,IAAI,QAAA,CAAS,QACnDA,CAAAA,CAAAA,CAAG,EAAC,GAAI,CAAA;AAEZ;AAEA,SAASslB,GACPG,CAAAA,EACAC,CAAAA;IAEM,MAAAC,IAAU,IAAI,aAAa;QAC/B,OAAOvwB,EAAI,KADoB;QAE/B,QAAQswB;IAAA;IAGV,OAAAC,EAAQ,SAAA,CAAU;QAChB,OAAOF,EAAU,KADD;QAEhB,WAAWA,EAAU,SADJ;QAEjB,sBAAsBA,EAAU,+BADX;QACW,KAAA;QAEhC,SAASA,EAAU,OAFa;QAGhC,OAAOA,EAAU,KADE;QAEnB,QAAQA,EAAU,MADD;QACC,gBAAA;QAElB,OAAO;QAAA,oBAAA;QAEP,KAAK;YAAE,QAAQ;QAAM;IAAA,IAIhBE;AACT;AAEA,SAAS1B,GACP2B,CAAAA,EACA1B,CAAAA,EACAV,CAAAA;IAEA,MAAMqC,IAAiB;QACrB,WAAW;QACX,YAAYD,EAAU,UADX;QAEX,eAAeA,EAAU,YADH;QAEtB,MAAM;QACN,MAAMA,EAAU,KAAA,KAAU,QAAQ,SAAS;QAC3C,MAAM;IAAA;IAGR,IAAIhV,IAAU,IACVkV,IAA6B,EAAA,EAC7BC,IAAa,CAFjB;IAGcvC,EAAA,IAAA,CAAK,cAAc;QAClBuC,IAAA,CAAA,GACPD,EAAA,OAAA,CAAQ,CAAC3zB;YACP,MAAAd,IAAImzB,GAAoBryB;YAC9B+xB,EAAQ,SAAA,CAAUtT,GAASvf,EAAE,IAAA,EAAMA;QAAC,IAEtCy0B,IAAQ,EAF8B;IAE7B;IAGL,MAAAH,IAAU,IAAI,aAAa;QAC/B,OAAOvwB,EAAI,KADoB;QAE/B,QAAQ,CAAC2lB,GAAO7K;YpB3Vb,IAAAlV;YoB4VD,IAAI4V,MAAY,IAAI;gBAEZ,MAAA5N,IAAAA,AAAOhI,CAAAA,IAAAkV,EAAK,aAAA,AAAA,KAAL,OAAA,KAAA,IAAAlV,EAAoB,WAA3B;gBACN4V,IAAUsT,EAAQ,QAAA,CAAS;oBACzB,GAAG2B,CADsB;oBAEzB,aAAa7iB,KAAQ,OAAO,KAAA,IAAYgjB,GAAchjB;gBAAI,IAE5DwgB,EAAc,IAAA,CAAK,eACfpuB,EAAA,IAAA,CAAK,6CAA6Cwb;YACxD;YAEA,IAAImV,GAAY;gBACR,MAAA10B,IAAImzB,GAAoBzJ;gBAC9BmJ,EAAQ,SAAA,CAAUtT,GAASvf,EAAE,IAAA,EAAMA;YAAC,OAEpCy0B,EAAM,IAAA,CAAK/K;QAEf;IAAA;IAEF,OAAA4K,EAAQ,SAAA,CAAU;QAChB,OAAOC,EAAU,KAAA,KAAU,QAAQhU,EAAmB,KAAA,GAAQ;QAC9D,YAAYgU,EAAU,UADwC;QAE9D,kBAAkBA,EAAU,YADN;QAEtB,SAAS;IAAA,IAGJD;AACT;AA4CgB,SAAAM,GACdvV,CAAAA,EACAwV,CAAAA,EACAC,CAAAA;IAWA,IAAIxwB,IAAU,GAEVywB,IAAe;IACnB,MAAMC,IAAQ3V,EAAK,KAAnB;IAEA,IAAI4V,IAAiB,CAArB;IACA,MAAMC,IAAW;QpBvbZ,IAAAvrB;QoBybH,IAAI,CAACsrB;YACC,IAAAD,EAAM,IAAA,CAAK,CAACjiB,IAAQA,EAAI,IAAA,KAAS,WAAW,MAC7BkiB,IAAA,CAAA;iBAEV,OAAA;;QAGP,IAAAF,KAAgBC,EAAM,MAAA,EAAe,OAAA;QAEnC,MAAAG,IAAK,IAAIlU,EAAO,UAAhB;QACHkU,EAAA,UAAA,GAAalU,EAAO,UAAA,CAAW,UAA/B;QAEH,IAAIvgB,IAAIq0B;QACJ,IAAA;YACK,MAAAr0B,IAAIs0B,EAAM,MAAV,EACCA,CAAAA,CAAAt0B,EAAC,CAAE,KAAA,CAAMy0B,IACf,OAAOH,CAAAA,CAAMt0B,EAAC,EACTA,KAAA;QAAA,EAAA,OAEA0D,GAAK;YACN,MAAAgxB,IAASJ,CAAAA,CAAMt0B,EAAf;YACF,MAAA0D,aAAe,SAASgxB,KAAU,OAC9B,MACJ,CAAA,EAAGhxB,EAAI,OAAO,CAAA,sBAAA,EAAyBgxB,EAAO,IAAI,CAAA,WAAA,EAAcA,EAAO,IAAI,CAAA,cAAA,EAAA,AAAA,CAAA,AAAiBzrB,CAAAA,IAAAyrB,EAAO,IAAA,AAAA,KAAP,OAAA,KAAA,IAAAzrB,EAAa,MAAA,AAAA,KAAU,GAD/G,CAAA,CAAA,IAIFvF;QACR;QAEA,OAAAsd,GAAwBrC,IAExB0V,IAAeC,EAAM,MAAA,EACd,IAAI,WAAWG,EAAG,MAAM;IAAA;IAGjC,IAAI5pB,IAAS,CAAA,GACT8pB,IAAW,CAAA,GACXC,IAAuC;IAgCpC,OAAA;QACL,QAhCa,IAAI,eAAe;YAChC,OAAMtT,CAAAA;gBACM1d,IAAA,KAAK,WAAA,CAAY;oBACzB,MAAMnD,IAAI+zB;oBACN/zB,KAAK,QAAQ,CAACk0B,KAAUrT,EAAK,OAAA,CAAQ7gB;gBAAC,GACzC0zB,IAEHS,IAAO,CAAClxB;oBAGN,IAFA,cAAcE,IACd+a,EAAK,KAAA,IACDjb,KAAO,MAAM;wBACf4d,EAAK,KAAA,CAAM5d;wBACX;oBACF;oBAEA,MAAMjD,IAAI+zB;oBACN/zB,KAAK,QAAQ,CAACk0B,KAAUrT,EAAK,OAAA,CAAQ7gB,IAEpCk0B,KAAUrT,EAAK,KAFpB;gBAE0B,GAIxBzW,KAAa+pB;YACnB;YACA;gBACaD,IAAA,CAAA,GACX,cAAc/wB,IACHwwB,KAAA,QAAAA;YACb;QAAA;QAKA,MAAM,CAAC1wB;YACDmH,KACKA,CAAAA,IAAA,CAAA,GACT+pB,KAAA,QAAAA,EAAOlxB,EAFP;QAGF;IAAA;AAEJ;AAEA,SAASmxB,GACPC,CAAAA;IAEA,IAAIT,IAAe;IACnB,MAAMC,IAAQQ,EAAU,KAAA,EAClBC,IAAsD,EAD5D;IAEA,IAAIC,IAAgB;IAEpB,eAAeC;QACP,MAAAztB,IAAM0tB,EAAQZ,GAAOD;QAC3BA,IAAeC,EAAM,MAAA,EAGrBS,EAAO,OAAA,CAAQ,CAAC,EAAE,OAAA/b,CAAAA,EAAO,IAAAV,CAAAA,EAAAA;YACvB,MAAMhZ,IAAI0Z,EAAM,OAAA,CAAQ,EAAA,CAAG;YACvB1Z,KAAK,QACP01B,CAAAA,IAAgB,KAAK,GAAA,CAAIA,GAAe11B,EAAE,GAAA,GAAMA,EAAE,QAAQ,CAAA,GAE5Dw1B,EAAU,kBAAA,CAAmBxc,GAAIU,EAAM,OAAA,CAAQ,MAAM,GACrDA,EAAM,OAAA,GAAU,EAJhB;QAIiB,IAEnB8b,EAAU,KAAA,GAAQ,EAAA,EAClBA,EAAU,KAAA,GAAQ,EAAA,EACdttB,KAAO,QAAY,MAAA2tB,CAAAA,KAAA,OAAA,KAAA,IAAAA,EAAe,KAAA,CAAM3tB,EAJzB;IAKrB;IAEA,IAAI4tB,IAA8B,EAAlC;IACA,SAASC;QACH,IAAAD,EAAc,MAAA,GAAS,GAAU,OAAA,CAAjC;QAEJ,MAAME,IAAUhB,EAAM,SAAA,CAAU,CAACjiB,IAAQA,EAAI,IAAA,KAAS;QAClD,IAAAijB,MAAY,IAAW,OAAA,CAAvB;QAKA,IAHJF,IAAgBd,EAAM,KAAA,CAAM,GAAGgB,IAAU,IACzCjB,IAAeiB,IAAU,GAErBP,EAAO,MAAA,KAAW,GACpB,IAAA,IAAS/0B,IAAI,IAASA,KAAK,EAAG;YACtB,MAAAgZ,IAAQ8b,EAAU,YAAA,CAAa90B;YACrC,IAAIgZ,KAAS,MAAb;YACA+b,EAAO,IAAA,CAAK;gBAAE,OAAA/b;gBAAO,IAAIhZ;YAAG;QAC9B;QAGK,OAAA,CAAA;IACT;IAEA,IAAI4D,IAAU;IAEd,MAAM2xB,IAAW1yB;IACjB,IAAIsyB,IAEO;IAEX,MAAM3xB,IAAAA,AAAe,CAAA;QACH2xB,IAAA,MAAMI,EAAS,YAAA,IAErB3xB,IAAA,KAAK,WAAA,CAAY;YACpByxB,OACSJ;QACb,GAAA;IAAG,CAAA;IAGR,IAAIpqB,IAAS,CAAb;IACA,OAAO;QACD,IAAAA,GAAc,MAAA,MAAM;QAMxB,IALSA,IAAA,CAAA,GAEH,MAAArH,GACN,cAAcI,IAEV,CAACyxB,OAAkBF,KAAiB,MAAa,OAAA;QACrDL,EAAU,KAAA,IACV,MAAMG,KACN,MAAME,CAAAA,KAAA,OAAA,KAAA,IAAAA,EAAe,KAFrB,EAAA;QAIA,MAAMtb,IAAOub,EAAc,IAAA,CAAK,CAAC/iB,IAAQA,EAAI,IAAA,KAAS;QAGlD,IAAAwH,KAAQ,MAAa,OAAA;QAEzBA,EAAK,IAAA,CAAK,QAAA,GAAWmb;QAErB,MAAMQ,IAAS3yB,MACT2E,IAAM0tB,EAAQE,GAAe;QAC7B,OAAA,MAAAlS,GAAMsS,GAAQhuB,IACpB,MAAM0b,GAAMsS,GAAQD,GAAU;YAAE,WAAW,CAAA;QAAA,IAEpC,MAAMC,EAAO,MAHd;IAGqB;IAGpB,SAAAN,EAAQpS,CAAAA,EAAsB2S,CAAAA;QACjC,IAAAA,KAAY3S,EAAO,MAAA,EAAe,OAAA;QAEhC,MAAA2R,IAAK,IAAIlU,EAAO,UAAhB;QACHkU,EAAA,UAAA,GAAalU,EAAO,UAAA,CAAW,UAA/B;QAEH,IAAA,IAASvgB,IAAIy1B,GAAUz1B,IAAI8iB,EAAO,MAAA,EAAQ9iB,IACpC8iB,CAAAA,CAAO9iB,EAAC,KAAM,QACX8iB,CAAAA,CAAAA,CAAA9iB,EAAC,CAAE,KAAA,CAAMy0B,IAChB,OAAO3R,CAAAA,CAAO9iB,EAFV,AAEW;QAEV,OAAA,IAAI,WAAWy0B,EAAG,MAAM;IACjC;AACF;AAKA,SAAShC,GACPzJ,CAAAA;IAIA,MAAMxhB,IAAM,IAAI,YAAYwhB,EAAM,UAAU;IAC5CA,EAAM,MAAA,CAAOxhB;IACb,MAAMkuB,IAAM1M,EAAM,SAAlB;IACO,OAAA;QACL,UAAUA,EAAM,QAAA,IAAY;QAC5B,KAAA0M;QACA,KAAKA;QACL,SAAS1M,EAAM,IAAA,KAAS;QACxB,MAAMxhB;IAAA;AAEV;AAcA,eAAsBmuB,GACpBC,CAAAA;IAEM,MAAAC,IAAUtV,EAAO,UAAA,IAEjBuV,IAAWjB,GAAsBgB;IACjC,MAAAE,GAA0BH,GAASC;IACnC,MAAAG,IAAY,MAAMF;IACxB,IAAIE,KAAa,MAAY,MAAA,MAAM;IAC5B,OAAAA;AACT;AAEA,eAAeD,GACbH,CAAAA,EACAC,CAAAA;IAEA,IAAItU,IAAW,GACX0U,IAAO,GACPC,IAAO,GACP1U,IAAW,GACX2U,IAAO,GACPC,IAAO,GAEPC,IAAiB,MACjBC,IAAiB;IACrB,KAAA,MAAWvtB,KAAU6sB,EACb,MAAA,IAAI,QAAc,OAAO92B;QAC7B6L,GAAe5B,EAAO,WAAA,CAAY,IAAImY,OAAoB;YACxD,QAAQpiB;YACR,SAAS,OAAO,EAAE,WAAAonB,CAAAA,EAAW,MAAAtd,CAAAA,EAAAA;gBAC3B,IAAIsd,MAAc,SAAS;oBACnB,MAAA,EAAE,gBAAAqQ,CAAAA,EAAgB,gBAAAC,CAAAA,EAAA,GAAmB1W,GACzClX,EAAK,IADoC,EAEzCA,EAAK,IADA;oBAGH2Y,MAAa,KAAKgV,KAAkB,QAC3BhV,CAAAA,IAAAsU,EAAQ,QAAA,CAASU,EAAc,GAExC/U,MAAa,KAAKgV,KAAkB,QAC3BhV,CAAAA,IAAAqU,EAAQ,QAAA,CAASW,EAAc;gBAC5C,OAAA,IACStQ,MAAc,WAAW;oBAC5B,MAAA,EAAE,MAAAld,CAAAA,EAAM,SAAAhE,CAAAA,EAAY,GAAA4D,GACpBiW,IAAU7V,MAAS,UAAUuY,IAAWC,GACxCiV,IAAYztB,MAAS,UAAUitB,IAAOE,GACtCO,IAAY1tB,MAAS,UAAUktB,IAAOE;oBAEpCpxB,EAAA,OAAA,CAAQ,CAAC1F;wBACPu2B,EAAA,SAAA,CAAUhX,GAASvf,EAAE,IAAA,EAAM;4BACjC,UAAUA,EAAE,QADqB;4BAEjC,KAAKA,EAAE,GAAA,GAAMm3B;4BACb,KAAKn3B,EAAE,GAAA,GAAMo3B;4BACb,SAASp3B,EAAE,OADE;wBACF;oBACZ;oBAGG,MAAAq3B,IAAW3xB,EAAQ,EAAA,CAAG;oBAC5B,IAAI2xB,KAAY,MAAhB;oBACI3tB,MAAS,UACCqtB,IAAAM,IACH3tB,MAAS,WACNstB,CAAAA,IAAAK,CAAAA;gBAEhB;YACF;QAAA;IACD,IAECN,KAAa,QACfJ,CAAAA,KAAQI,EAAU,GAAA,EAClBH,KAAQG,EAAU,GAAA,AAAA,GAEhBC,KAAa,QACfH,CAAAA,KAAQG,EAAU,GAAA,EAClBF,KAAQE,EAAU,GARjB,AAAA;AAWP;AAKA,eAAsBM,GACpB7tB,CAAAA;IAEA,OAAO,MAAM4sB,GAAc;QAAC5sB;KAAO;AACrC;AASA,SAAS8tB,GACPC,CAAAA;IAEA,IAAIC,IAAuB,EAA3B;IACM,MAAAC,IAAY,IAAI,aAAa;QACjC,QAAQ,CAAClvB;YACPivB,EAAQ,IAAA,CAAKjvB;QACf;QACA,OAAOzE,EAAI,KADX;IACW;IAEb,OAAA2zB,EAAU,SAAA,CAAUF,IAEb;QACL,QAAQ,OAAOG;YACVA,EAAA,OAAA,CAAQ,CAAC33B;gBACA03B,EAAA,MAAA,CACR,IAAI,kBAAkB;oBACpB,MAAM13B,EAAE,OAAA,GAAU,QAAQ;oBAC1B,WAAY,MAAMA,EAAE,GAAA,GAAOA,EAAE,SADH;oBAE1B,UAAW,MAAMA,EAAE,QAAA,GAAYA,EAAE,SADJ;oBAE7B,MAAMA,EAAE,IADyB;gBACzB;YAEZ,IAGF,MAAM03B,EAAU,KAJX;YAML,MAAMzvB,IAAKwvB;YACX,OAAAA,IAAU,EAAA,EAEHxvB;QACT;QACA,OAAO;YACLyvB,EAAU,KAAA;QACZ;IAAA;AAEJ;AAIA,SAASE,GACPC,CAAAA,EACAzM,CAAAA;IAEM,MAAA0M,IAAY,IAAI,aAAa;QACjC,QAAQ,CAACpO;YACE0B,EAAA+H,GAAoBzJ;QAC/B;QACA,OAAO3lB,EAAI,KADX;IACW;IAGb+zB,EAAU,SAAA,CAAU;QAClB,OAAOD,EAAO,KADI;QAElB,YAAYA,EAAO,UADL;QAEd,kBAAkBA,EAAO,gBADN;IACM;IAI3B,IAAIE,IAAsD;IAEjD,SAAAC,EAAS1uB,CAAAA,EAAoB2uB,CAAAA;QACpC,OAAO,IAAI,UAAU;YACnB,WAAWA;YACX,kBAAkBJ,EAAO,gBADd;YAEX,gBAAgBvuB,EAAK,MAAA,GAASuuB,EAAO,gBADZ;YAEzB,YAAYA,EAAO,UADkB;YAErC,QAAQ;YACR,MAAAvuB;QAAA;IAEJ;IACO,OAAA;QACL,QAAQ,OAAOA,GAAoB2uB;YAC7BF,KAAY,QACdD,EAAU,MAAA,CAAOE,EAASD,EAAS,IAAA,EAAMA,EAAS,EAAE,IAE3CA,IAAA;gBAAE,MAAAzuB;gBAAM,IAAA2uB;YAHnB;QAIF;QACA,MAAM;YACAF,KAAY,QAEdG,CAAAA,GAAUH,EAAS,IAAA,EAAMF,EAAO,gBAAA,EAAkBA,EAAO,UAAU,GACnEC,EAAU,MAAA,CAAOE,EAASD,EAAS,IAAA,EAAMA,EAAS,EAAE,IACzCA,IAAA,IAAA,GAEb,MAAMD,EAAU,KAAA,IAChBA,EAAU,KAAA;QACZ;IAAA;AAEJ;AAMA,SAASI,GAAUztB,CAAAA,EAAuBG,CAAAA,EAAiBxE,CAAAA;IACnD,MAAA+xB,IAAU1tB,EAAQ,MAAA,GAAS,GAE3B2tB,IAAU,KAAK,GAAA,CAAIhyB,IAAa,GAAG+xB;IACzC,IAAA,IAASz3B,IAAI,GAAGA,IAAI03B,GAAS13B,IAC3B,IAAA,IAASU,IAAI,GAAGA,KAAKwJ,GAASxJ,IAE5BqJ,CAAAA,CAAQ,KAAK,KAAA,CAAM0tB,IAAU/2B,KAAKV,EAAC,IAAKA,IAAI03B;AAGlD;AAWgB,SAAAC,GACdC,CAAAA,EACAlU,CAAAA;IAMArgB,EAAI,IAAA,CAAK,2BAA2B;QAClC,QAAQqgB,EAAM,MADoB;QAElC,MAAMA,EAAM,IADE;IACF;IAGR,MAAAmS,IAAUtV,EAAO,UAAA,IACjB,EAAE,QAAQyV,CAAAA,EAAW,MAAM6B,CAAAA,EAAAA,GAAY3D,GAAY2B,GAAS;IAElE,IAAIiC,IAEO,MAEPC,IAEO,MAEPC,IAAgC,EAAA,EAEhCzW,IAAW,GACXC,IAAW,GACXyW,IAAc,GACdC,IAAc,CAAA,GACdxyB,IAAa;IACjBiF,GAAeitB,EAAU,WAAA,CAAY,IAAI1W,OAAoB;QAC3D,QAAQ;YACN,MAAM6W,CAAAA,KAAA,OAAA,KAAA,IAAAA,EAAoB,IAAA,EAAA,GAC1BD,KAAA,QAAAA,EAAoB,KAAA,IACZD;QACV;QACA,SAAS,OAAO,EAAE,WAAA3R,CAAAA,EAAW,MAAAtd,CAAAA,EAAAA;YAC3B,IAAIsd,MAAc,SAAS;gBACnB,MAAA,EAAE,gBAAAqQ,CAAAA,EAAgB,gBAAAC,CAAAA,EAAgB,kBAAA2B,CAAAA,EAAAA,GACtCrY,GAAkBlX,EAAK,IAAA,EAAMA,EAAK,IAAI;gBACpC2Y,MAAa,KAAKgV,KAAkB,QAC3BhV,CAAAA,IAAAsU,EAAQ,QAAA,CAASU,EAAc;gBAG5C,MAAM6B,IAAqB5B,KAAkB;oBAC3C,WAAW;oBACX,YAAY9wB;oBACZ,eAAema,EAAmB,YADtB;oBAEZ,MAAM;oBACN,MAAM;oBACN,MAAM;gBAAA;gBAEJ2B,MAAa,KACJA,CAAAA,IAAAqU,EAAQ,QAAA,CAASuC,IAC5B1yB,IAAAA,AAAa8wB,CAAAA,KAAA,OAAA,KAAA,IAAAA,EAAgB,UAAA,AAAA,KAAc9wB,GAC7BwyB,IAAA1B,KAAkB,IAHlC;gBAKA,MAAM6B,IAAW,IAAI,aAAa;oBAAE,YAAA3yB;gBAAY;gBAChCsyB,IAAAxvB,GACd,MAAM6vB,EAAS,eADD,CAEZ,MAAM,IAAI,SAAS3U,EAAM,MAAM,EAAE,WAAA,MAIjCyU,KAAoB,QACtBL,CAAAA,IAAqBjB,GAA4BsB,EAAgB,GAE9CJ,IAAAb,GACnBiB,KAAoB;oBAClB,OACEC,EAAmB,IAAA,KAAS,SACxBvY,EAAmB,KAAA,GACnBuY,EAAmB,IAJP;oBAKlB,kBAAkBA,EAAmB,aADZ;oBAEzB,YAAYA,EAAmB,UADM;gBAEvC,GACA,CAAC94B,IAAMu2B,EAAQ,SAAA,CAAUrU,GAAUliB,EAAE,IAAA,EAAMA;YAC7C,OAAA,IACS4mB,MAAc,WAAW;gBAClC,MAAM,EAAE,IAAA5N,CAAAA,EAAI,MAAAtP,CAAAA,EAAM,SAAAhE,CAAAA,EAAA,GAAY4D;gBAC9B,IAAII,MAAS,SAAS;oBACZhE,EAAA,OAAA,CAAQ,CAAC1F,IAAMu2B,EAAQ,SAAA,CAAUvd,GAAIhZ,EAAE,IAAA,EAAMA,KAEhD44B,KAAmB,MAAAI,EAAoBtzB;oBAC5C;gBACF;gBAEIgE,MAAS,WAAe,MAAAuvB,EAA4BvzB;YAC1D;QACF;IAAA;IAGF,SAASwzB,EAAmBxyB,CAAAA;QAC1B,MAAMuB,IAAKywB,EAAc,GAAzB,CAA6B,CAAC/vB,IAC5Byb,EAAM,IAAA,GACFnZ,GAAsBtC,GAASgwB,GAAaA,IAAcjyB,KAC1DiC,EAAQ,KAAA,CAAMgwB,GAAaA,IAAcjyB;QAI3C,IAFWiyB,KAAAjyB,GAEX0d,EAAM,MAAA,KAAW,GACnB,KAAA,MAAWlc,KAAOD,EACP,IAAA,IAAAvH,IAAI,GAAGA,IAAIwH,EAAI,MAAA,EAAQxH,IAAKwH,CAAAA,CAAIxH,EAAC,IAAK0jB,EAAM,MAA5C;QAGN,OAAAnc;IACT;IAEA,eAAe+wB,EAAoBG,CAAAA;QAC3B,MAAAC,IAAYD,CAAAA,CAAa,EAAC,EAC1B9B,IAAW8B,CAAAA,CAAaA,EAAa,MAAA,GAAS,EAAC,EAC/CE,IAAY,KAAK,KAFjB,CAEiB,AACnBhC,CAAAA,EAAS,GAAA,GAAMA,EAAS,QAAA,GAAW+B,EAAU,GAAA,AAAA,IAC7C/B,EAAS,SAAA,GACTjxB,IAEEkzB,IAAexvB,GAAS;YAACovB,EAAmBG;SAAW;QACzDC,EAAa,MAAA,KAAW,KACRb,CAAAA,KAAA,QAAAA,EAAA,MADhB,CAEFa,GACCF,EAAU,GAAA,GAAMA,EAAU,SAAA,GAAa,IAAA;IAE5C;IAEA,eAAeH,EAA4BvzB,CAAAA;QACzC,IAAI8yB,KAAsB,MAA1B;QAIA,MAAMe,IAAAA,AAAgB,CAAA,MAAMf,EAAmB,MAAA,CAAO9yB,EAAO,EAAG,GAAhE,CACE6C,KAGIixB,IAAcpxB,GAAmBmxB,IACjCb,IAAgBQ,EAAmBM,CAAAA,CAAY,EAAC,CAAE,MAAM,GACxDJ,IAAY1zB,CAAAA,CAAQ,EALxB;QAQkB+yB,KAAA,QAAAA,EAAA,MAAA,CAAA,aAAA;QAElB3uB,GAAS;YAAC0vB;YAAad;SAAc,GACpCU,EAAU,GAAA,GAAMA,EAAU,SAAA,GAAa;IAE5C;IAEO,OAAA1C;AACT;AAQA,SAAS/B,GAAc8E,CAAAA;IACrB,MAAMC,IAAYD,EAAO,UAAA,EACnBvxB,IAAM,IAAI,WAAW;QACzB;QAAA,YAAA;QACA;QACA;QACA;QAAA,QAAA;QAEA;QAAA,kBAAA;QACA,KAAOwxB;QAAA,SAAA;QACP;QAAA,iBAAA;QAEA;QAAA,QAAA;QACA;QAAA,kBAAA;QAEA;QAAA,kBAAA;QACA,KAAOA;QAAA,SAAA;QACP;QAAA,sBAAA;QACA;QAAA,cAAA;QACA;QACA;QACA;QAAA,cAAA;QACA;QACA;QACA;QACA;QAAA,aAAA;QACA;QACA;QACA;QACA;QAAA,aAAA;QAEA;QAAA,kBAAA;QAEAA;WACG,IAAI,WAAWD,aAAkB,cAAcA,IAASA,EAAO,MAAM;QAExE;QACA;QACA;KACD,GAEK3Y,IAAU,IAAIG,EAAO,SAAA,CAAU,OAAA,CAAQ/Y,EAAI,UAAU;IAC3D,OAAA4Y,EAAQ,QAAA,GAAW,GACXA,EAAA,KAAA,CAAM,IAAIG,EAAO,UAAA,CAAW/Y,GAAK,GAAG+Y,EAAO,UAAA,CAAW,UAAU,IACjEH;AACT;ACziCA,IAAI6Y,KAAsB,aAAA,GAAA;IACxB,SAASA;QACP,IAAA,CAAK,SAAA,GAAY,CAAjB;IACD;IAUD,IAAIC,IAASD,EAAO,SAApB;IAEA,OAAAC,EAAO,EAAA,GAAK,SAAYlwB,CAAAA,EAAMqmB,CAAAA;QACvB,IAAA,CAAK,SAAA,CAAUrmB,EAAI,IACtB,CAAA,IAAA,CAAK,SAAA,CAAUA,EAAI,GAAI,EAAA,AAAA,GAGzB,IAAA,CAAK,SAAA,CAAUA,EAAI,CAAE,IAAA,CAAKqmB;IAC3B,GAWD6J,EAAO,GAAA,GAAM,SAAalwB,CAAAA,EAAMqmB,CAAAA;QAC9B,IAAI,CAAC,IAAA,CAAK,SAAA,CAAUrmB,EAApB,EACE,OAAO,CAAP;QAGF,IAAIoH,IAAQ,IAAA,CAAK,SAAA,CAAUpH,EAAI,CAAE,OAAA,CAAQqmB;QASzC,OAAA,IAAA,CAAK,SAAA,CAAUrmB,EAAI,GAAI,IAAA,CAAK,SAAA,CAAUA,EAAI,CAAE,KAAA,CAAM,IAClD,IAAA,CAAK,SAAA,CAAUA,EAAI,CAAE,MAAA,CAAOoH,GAAO,IAC5BA,IAAQ;IAChB,GASD8oB,EAAO,OAAA,GAAU,SAAiBlwB,CAAAA;QAChC,IAAImwB,IAAY,IAAA,CAAK,SAAA,CAAUnwB,EAA/B;QAEA,IAAKmwB;YAQL,IAAI,UAAU,MAAA,KAAW,GAGvB,IAAA,IAFIntB,IAASmtB,EAAU,MAAA,EAEdn5B,IAAI,GAAGA,IAAIgM,GAAQ,EAAEhM,EAC5Bm5B,CAAAA,CAAUn5B,EAAC,CAAE,IAAA,CAAK,IAAA,EAAM,SAAA,CAAU,EAAE;iBAMtC,IAAA,IAHImD,IAAO,MAAM,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,WAAW,IAC7Ci2B,IAAUD,EAAU,MAAA,EAEfE,IAAK,GAAGA,IAAKD,GAAS,EAAEC,EAC/BF,CAAAA,CAAUE,EAAE,CAAE,KAAA,CAAM,IAAA,EAAMl2B;;IAG/B,GAMD+1B,EAAO,OAAA,GAAU;QACf,IAAA,CAAK,SAAA,GAAY,CAAjB;IACD,GAWDA,EAAO,IAAA,GAAO,SAAcI,CAAAA;QAC1B,IAAA,CAAK,EAAA,CAAG,QAAQ,SAAU1wB,CAAAA;YACxB0wB,EAAY,IAAA,CAAK1wB;QACvB;IACA,GAESqwB;AACT;ACtHA,SAASM;IACP,OAAOA,KAAW,OAAO,MAAA,GAAS,OAAO,MAAA,CAAO,IAAA,KAAS,SAAUt5B,CAAAA;QACjE,IAAA,IAASb,IAAI,GAAGA,IAAI,UAAU,MAAA,EAAQA,IAAK;YACzC,IAAIF,IAAI,SAAA,CAAUE,EAAlB;YACA,IAAA,IAAS,KAAKF,EAAG,AAAC,CAAA,CAAA,CAAA,EAAI,cAAA,CAAe,IAAA,CAAKA,GAAG,MAAOe,CAAAA,CAAAA,CAAE,EAAC,GAAIf,CAAAA,CAAE,EAA7D,AAA8D;QAC/D;QACD,OAAOe;IACR,GAAEs5B,GAAS,KAAA,CAAM,MAAM;AAC1B;ACRA,IAAIC;AAEA,OAAO,SAAW,MAClBA,KAAM,SACC,OAAOC,KAAW,MACzBD,KAAMC,KACC,OAAO,OAAS,MACvBD,KAAM,OAENA,KAAM,CAAA;AAGV,IAAAE,KAAiBF;A,M,K,a,G,G;ACVjB,IAAIG,KAAO,SAAcr6B,CAAAA;IACvB,OAAOgG,GAAO,IAAA,GAAOA,GAAO,IAAA,CAAKhG,KAAK,OAAO,IAAA,CAAKA,GAAG,UAAU,QAAA,CAAS;AAC1E;AAEe,SAASs6B,GAAsBC,CAAAA;IAI5C,IAAA,IAHIC,IAAgBH,GAAKE,IACrB/rB,IAAQ,IAAI,WAAWgsB,EAAc,MAAM,GAEtC95B,IAAI,GAAGA,IAAI85B,EAAc,MAAA,EAAQ95B,IACxC8N,CAAAA,CAAM9N,EAAC,GAAI85B,EAAc,UAAA,CAAW95B;IAGtC,OAAO8N;AACT;ACfA,yDAAA,GAgBA,MAAMisB,WAAmBd;IACvB,aAAc;QACZ,KAAA,IACA,IAAA,CAAK,MAAA,GAAS;IACf;IAAA;;;;GAAA,GAQD,KAAKrwB,CAAAA,EAAM;QACT,IAAIoxB;QAIJ,IAHA,IAAA,CAAK,MAAA,IAAUpxB,GACfoxB,IAAc,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAElC;AAFkC,CAAI,GAE/BA,IAAc,IAAIA,IAAc,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAFzB;AAEyB,CAAI,EAC7D,IAAA,CAAK,OAAA,CAAQ,QAAQ,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,GAAGA,KAC9C,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,SAAA,CAAUA,IAAc;IAErD;AAEH;AAEA,MAAMC,KAAM,KAENC,KAAiB,SAAUC,CAAAA;IAG/B,MAAMpL,IAAQ,yBAAyB,IAAA,CAAKoL,KAAmB,KACzD/gB,IAAS,CAAA;IAEf,OAAI2V,CAAAA,CAAM,EAAC,IACT3V,CAAAA,EAAO,MAAA,GAAS,SAAS2V,CAAAA,CAAM,EAAC,EAAG,GAAE,GAGnCA,CAAAA,CAAM,EAAC,IACT3V,CAAAA,EAAO,MAAA,GAAS,SAAS2V,CAAAA,CAAM,EAAC,EAAG,GAAE,GAGhC3V;AACT,GAUMghB,KAAqB;IAGzB,MAAMC,IAAW;IACjB,OAAO,IAAI,OAAO,aAAaA,IAAW;AAC5C,GAQMC,IAAkB,SAAUC,CAAAA;IAChC,MAAMnhB,IAAS,CAAA;IAEf,IAAI,CAACmhB,GACH,OAAOnhB;IAIT,MAAMohB,IAAQD,EAAW,KAAA,CAAMH;IAC/B,IAAIp6B,IAAIw6B,EAAM,MAAA,EACVC;IAEJ,MAAOz6B,KAEDw6B,CAAAA,CAAMx6B,EAAC,KAAM,MAKjBy6B,CAAAA,IAAO,eAAe,IAAA,CAAKD,CAAAA,CAAMx6B,EAAE,EAAE,KAAA,CAAM,IAE3Cy6B,CAAAA,CAAK,EAAC,GAAIA,CAAAA,CAAK,EAAC,CAAE,OAAA,CAAQ,cAAc,KACxCA,CAAAA,CAAK,EAAC,GAAIA,CAAAA,CAAK,EAAC,CAAE,OAAA,CAAQ,cAAc,KACxCA,CAAAA,CAAK,EAAC,GAAIA,CAAAA,CAAK,EAAC,CAAE,OAAA,CAAQ,mBAAmB,OAC7CrhB,CAAAA,CAAOqhB,CAAAA,CAAK,EAAE,CAAA,GAAIA,CAAAA,CAAK,EAVvB,AAUwB;IAG1B,OAAOrhB;AACT;AA2BA,MAAMshB,WAAoBzB;IACxB,aAAc;QACZ,KAAA,IACA,IAAA,CAAK,aAAA,GAAgB,EAAA,EACrB,IAAA,CAAK,UAAA,GAAa,EAFlB;IAGD;IAAA;;;;GAAA,GAQD,KAAK0B,CAAAA,EAAM;QACT,IAAI5L,GACA6L;QAIJ,IAFAD,IAAOA,EAAK,IAAA,IAERA,EAAK,MAAA,KAAW,GAElB;QAIF,IAAIA,CAAAA,CAAK,EAAC,KAAM,KAAK;YACnB,IAAA,CAAK,OAAA,CAAQ,QAAQ;gBACnB,MAAM;gBACN,KAAKA;YACb;YACM;QACD;QAGgB,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,CAAC33B,GAAK63B;YAC5C,MAAMC,IAAaD,EAAOF;YAE1B,OAAIG,MAAeH,IACV33B,IAGFA,EAAI,MAAA,CAAO;gBAAC83B;aAAW;QACpC,GAAO;YAACH;SAAK,EACA,OAAA,CAAQ,CAAAI;YACf,IAAA,IAAS/6B,IAAI,GAAGA,IAAI,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQA,IAC7C,IAAI,IAAA,CAAK,aAAA,CAAcA,EAAC,CAAE,IAAA,CAAK,IAAA,EAAM+6B,IACnC;YAKJ,IAAIA,EAAQ,OAAA,CAAQ,YAAY,GAAG;gBACjC,IAAA,CAAK,OAAA,CAAQ,QAAQ;oBACnB,MAAM;oBACN,MAAMA,EAAQ,KAAA,CAAM;gBAC9B;gBACQ;YACD;YAQD,IAJAA,IAAUA,EAAQ,OAAA,CAAQ,MAAM,KAEhChM,IAAQ,WAAW,IAAA,CAAKgM,IAEpBhM,GAAO;gBACT,IAAA,CAAK,OAAA,CAAQ,QAAQ;oBACnB,MAAM;oBACN,SAAS;gBACnB;gBACQ;YACD;YAID,IAFAA,IAAQ,+BAA+B,IAAA,CAAKgM,IAExChM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,QAAA,GAAW,WAAW7L,CAAAA,CAAM,EAAE,CAAA,GAGlCA,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,KAAA,GAAQ7L,CAAAA,CAAM,EAAC,AAAA,GAGvB,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAID,IAFA7L,IAAQ,oCAAoC,IAAA,CAAKgM,IAE7ChM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,QAAA,GAAW,SAAS7L,CAAAA,CAAM,EAAC,EAAG,GAAE,GAGxC,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAID,IAFA7L,IAAQ,6BAA6B,IAAA,CAAKgM,IAEtChM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,OAAA,GAAU,SAAS7L,CAAAA,CAAM,EAAC,EAAG,GAAE,GAGvC,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAID,IAFA7L,IAAQ,uCAAuC,IAAA,CAAKgM,IAEhDhM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,MAAA,GAAS,SAAS7L,CAAAA,CAAM,EAAC,EAAG,GAAE,GAGtC,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAID,IAFA7L,IAAQ,+CAA+C,IAAA,CAAKgM,IAExDhM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,MAAA,GAAS,SAAS7L,CAAAA,CAAM,EAAC,EAAG,GAAE,GAGtC,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAID,IAFA7L,IAAQ,+BAA+B,IAAA,CAAKgM,IAExChM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,YAAA,GAAe7L,CAAAA,CAAM,EAAC,AAAA,GAG9B,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAID,IAFA7L,IAAQ,2BAA2B,IAAA,CAAKgM,IAEpChM,GAAO;gBACT6L,IAAQrB,GAASW,GAAenL,CAAAA,CAAM,EAAE,GAAG;oBACzC,MAAM;oBACN,SAAS;gBACnB,IACQ,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAID,IAFA7L,IAAQ,gCAAgC,IAAA,CAAKgM,IAEzChM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,OAAA,GAAU,CAAC,KAAK,IAAA,CAAK7L,CAAAA,CAAM,EAAE,CAAA,GAGrC,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAID,IAFA7L,IAAQ,oBAAoB,IAAA,CAAKgM,IAE7BhM,GAAO;gBAMT,IALA6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,EAAG;oBACZ,MAAMwL,IAAaD,EAAgBvL,CAAAA,CAAM,EAAE;oBAEvCwL,EAAW,GAAA,IACbK,CAAAA,EAAM,GAAA,GAAML,EAAW,GAAA,AAAA,GAGrBA,EAAW,SAAA,IACbK,CAAAA,EAAM,SAAA,GAAYV,GAAeK,EAAW,SAAS,CAAA;gBAExD;gBAED,IAAA,CAAK,OAAA,CAAQ,QAAQK;gBACrB;YACD;YAID,IAFA7L,IAAQ,2BAA2B,IAAA,CAAKgM,IAEpChM,GAAO;gBAMT,IALA6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,EAAG;oBAGZ,IAFA6L,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAEvC6L,EAAM,UAAA,CAAW,UAAA,EAAY;wBAC/B,MAAMI,IAAQJ,EAAM,UAAA,CAAW,UAAA,CAAW,KAAA,CAAM,MAC1CK,IAAa,CAAA;wBAEfD,CAAAA,CAAM,EAAC,IACTC,CAAAA,EAAW,KAAA,GAAQ,SAASD,CAAAA,CAAM,EAAC,EAAG,GAAE,GAGtCA,CAAAA,CAAM,EAAC,IACTC,CAAAA,EAAW,MAAA,GAAS,SAASD,CAAAA,CAAM,EAAC,EAAG,GAAE,GAG3CJ,EAAM,UAAA,CAAW,UAAA,GAAaK;oBAC/B;oBAEGL,EAAM,UAAA,CAAW,SAAA,IACnBA,CAAAA,EAAM,UAAA,CAAW,SAAA,GAAY,SAASA,EAAM,UAAA,CAAW,SAAA,EAAW,GAAE,GAGlEA,EAAM,UAAA,CAAW,aAAY,IAC/BA,CAAAA,EAAM,UAAA,CAAW,aAAY,GAAI,WAAWA,EAAM,UAAA,CAAW,aAAa,CAAA,GAGxEA,EAAM,UAAA,CAAW,aAAY,IAC/BA,CAAAA,EAAM,UAAA,CAAW,aAAY,GAAI,SAASA,EAAM,UAAA,CAAW,aAAY,EAAG,GAAE;gBAE/E;gBAED,IAAA,CAAK,OAAA,CAAQ,QAAQA;gBACrB;YACD;YAID,IAFA7L,IAAQ,sBAAsB,IAAA,CAAKgM,IAE/BhM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,CAAA,GAG7C,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAID,IAFA7L,IAAQ,kBAAkB,IAAA,CAAKgM,IAE3BhM,GAAO;gBACT,IAAA,CAAK,OAAA,CAAQ,QAAQ;oBACnB,MAAM;oBACN,SAAS;gBACnB;gBACQ;YACD;YAID,IAFAA,IAAQ,wBAAwB,IAAA,CAAKgM,IAEjChM,GAAO;gBACT,IAAA,CAAK,OAAA,CAAQ,QAAQ;oBACnB,MAAM;oBACN,SAAS;gBACnB;gBACQ;YACD;YAID,IAFAA,IAAQ,kCAAkC,IAAA,CAAKgM,IAE3ChM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,cAAA,GAAiB7L,CAAAA,CAAM,EAAC,EAC9B6L,EAAM,cAAA,GAAiB,IAAI,KAAK7L,CAAAA,CAAM,EAAE,CAAA,GAG1C,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAID,IAFA7L,IAAQ,oBAAoB,IAAA,CAAKgM,IAE7BhM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAEvC6L,EAAM,UAAA,CAAW,EAAA,IACfA,CAAAA,EAAM,UAAA,CAAW,EAAA,CAAG,SAAA,CAAU,GAAG,GAAG,WAAA,OAAkB,QACxDA,CAAAA,EAAM,UAAA,CAAW,EAAA,GAAKA,EAAM,UAAA,CAAW,EAAA,CAAG,SAAA,CAAU,EAAC,GAGvDA,EAAM,UAAA,CAAW,EAAA,GAAKA,EAAM,UAAA,CAAW,EAAA,CAAG,KAAA,CAAM,UAChDA,EAAM,UAAA,CAAW,EAAA,CAAG,EAAC,GAAI,SAASA,EAAM,UAAA,CAAW,EAAA,CAAG,EAAC,EAAG,KAC1DA,EAAM,UAAA,CAAW,EAAA,CAAG,EAAC,GAAI,SAASA,EAAM,UAAA,CAAW,EAAA,CAAG,EAAC,EAAG,KAC1DA,EAAM,UAAA,CAAW,EAAA,CAAG,EAAC,GAAI,SAASA,EAAM,UAAA,CAAW,EAAA,CAAG,EAAC,EAAG,KAC1DA,EAAM,UAAA,CAAW,EAAA,CAAG,EAAC,GAAI,SAASA,EAAM,UAAA,CAAW,EAAA,CAAG,EAAC,EAAG,KAC1DA,EAAM,UAAA,CAAW,EAAA,GAAK,IAAI,YAAYA,EAAM,UAAA,CAAW,EAAE,CAAA,CAAA,GAI7D,IAAA,CAAK,OAAA,CAAQ,QAAQA;gBACrB;YACD;YAID,IAFA7L,IAAQ,sBAAsB,IAAA,CAAKgM,IAE/BhM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,IACT6L,CAAAA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAC3C6L,EAAM,UAAA,CAAW,cAAa,GAAI,WAAWA,EAAM,UAAA,CAAW,cAAc,GAC5EA,EAAM,UAAA,CAAW,OAAA,GAAU,MAAM,IAAA,CAAKA,EAAM,UAAA,CAAW,OAAO,CAAA,GAGhE,IAAA,CAAK,OAAA,CAAQ,QAAQA;gBACrB;YACD;YAID,IAFA7L,IAAQ,8BAA8B,IAAA,CAAKgM,IAEvChM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,GACT6L,EAAM,IAAA,GAAO7L,CAAAA,CAAM,EAAC,GAEpB6L,EAAM,IAAA,GAAO,IAGf,IAAA,CAAK,OAAA,CAAQ,QAAQA;gBACrB;YACD;YAID,IAFA7L,IAAQ,yBAAyB,IAAA,CAAKgM,IAElChM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,GACT6L,EAAM,IAAA,GAAO7L,CAAAA,CAAM,EAAC,GAEpB6L,EAAM,IAAA,GAAO,IAGf,IAAA,CAAK,OAAA,CAAQ,QAAQA;gBACrB;YACD;YAID,IAFA7L,IAAQ,wBAAwB,IAAA,CAAKgM,IAEjChM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GAEY7L,CAAAA,CAAM,EAAC,GACT6L,EAAM,IAAA,GAAO7L,CAAAA,CAAM,EAAC,GAEpB6L,EAAM,IAAA,GAAO,IAGf,IAAA,CAAK,OAAA,CAAQ,QAAQA;gBACrB;YACD;YAID,IAFA7L,IAAQ,qBAAqB,IAAA,CAAKgM,IAE9BhM,KAASA,CAAAA,CAAM,EAAC,EAAG;gBACrB6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GACQA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAEvC6L,EAAM,UAAA,CAAW,cAAA,CAAe,uBAClCA,CAAAA,EAAM,UAAA,CAAW,mBAAkB,GAAI,SAASA,EAAM,UAAA,CAAW,mBAAkB,EAAG,GAAE,GAGtFA,EAAM,UAAA,CAAW,cAAA,CAAe,kCAClCA,CAAAA,EAAM,UAAA,CAAW,8BAA6B,GAAIA,EAAM,UAAA,CAAW,8BAA6B,CAAE,KAAA,CAAMX,GAAG,GAG7G,IAAA,CAAK,OAAA,CAAQ,QAAQW;gBACrB;YACD;YAID,IAFA7L,IAAQ,qBAAqB,IAAA,CAAKgM,IAE9BhM,KAASA,CAAAA,CAAM,EAAC,EAAG;gBACrB6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GACQA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAC3C;oBAAC;iBAAU,CAAE,OAAA,CAAQ,SAAU0B,CAAAA;oBACzBmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAI,WAAWmK,EAAM,UAAA,CAAWnK,EAAI,CAAA;gBAEpE,IACQ;oBAAC;oBAAe;iBAAK,CAAE,OAAA,CAAQ,SAAUA,CAAAA;oBACnCmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAI,MAAM,IAAA,CAAKmK,EAAM,UAAA,CAAWnK,EAAI,CAAA;gBAEpE,IAEYmK,EAAM,UAAA,CAAW,cAAA,CAAe,gBAClCA,CAAAA,EAAM,UAAA,CAAW,SAAA,GAAYV,GAAeU,EAAM,UAAA,CAAW,SAAS,CAAA,GAGxE,IAAA,CAAK,OAAA,CAAQ,QAAQA;gBACrB;YACD;YAID,IAFA7L,IAAQ,+BAA+B,IAAA,CAAKgM,IAExChM,KAASA,CAAAA,CAAM,EAAC,EAAG;gBACrB6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GACQA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAC3C;oBAAC;oBAAkB;oBAAkB;iBAAW,CAAE,OAAA,CAAQ,SAAU0B,CAAAA;oBAC9DmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAI,WAAWmK,EAAM,UAAA,CAAWnK,EAAI,CAAA;gBAEpE,IACQ;oBAAC;oBAAuB;iBAAkB,CAAE,OAAA,CAAQ,SAAUA,CAAAA;oBACxDmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAI,MAAM,IAAA,CAAKmK,EAAM,UAAA,CAAWnK,EAAI,CAAA;gBAEpE,IACQ,IAAA,CAAK,OAAA,CAAQ,QAAQmK;gBACrB;YACD;YAID,IAFA7L,IAAQ,yBAAyB,IAAA,CAAKgM,IAElChM,KAASA,CAAAA,CAAM,EAAC,EAAG;gBACrB6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GACQA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAC3C;oBAAC;iBAAa,CAAE,OAAA,CAAQ,SAAU0B,CAAAA;oBAC5BmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAI,WAAWmK,EAAM,UAAA,CAAWnK,EAAI,CAAA;gBAEpE,IACQ,IAAA,CAAK,OAAA,CAAQ,QAAQmK;gBACrB;YACD;YAID,IAFA7L,IAAQ,6BAA6B,IAAA,CAAKgM,IAEtChM,KAASA,CAAAA,CAAM,EAAC,EAAG;gBACrB6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GACQA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAC3C;oBAAC;oBAAmB;iBAAkB,CAAE,OAAA,CAAQ,SAAU0B,CAAAA;oBACxD,IAAImK,EAAM,UAAA,CAAW,cAAA,CAAenK,IAAM;wBACxCmK,EAAM,UAAA,CAAWnK,EAAG,GAAI,SAASmK,EAAM,UAAA,CAAWnK,EAAG,EAAG;wBACxD,MAAMyK,IAASzK,MAAQ,qBAAqB,WAAW;wBACvDmK,EAAM,UAAA,CAAW,SAAA,GAAYA,EAAM,UAAA,CAAW,SAAA,IAAa,CAAA,GAC3DA,EAAM,UAAA,CAAW,SAAA,CAAUM,EAAM,GAAIN,EAAM,UAAA,CAAWnK,EAAG,EAEzD,OAAOmK,EAAM,UAAA,CAAWnK,EAHxB;oBAID;gBACX,IACQ,IAAA,CAAK,OAAA,CAAQ,QAAQmK;gBACrB;YACD;YAID,IAFA7L,IAAQ,iCAAiC,IAAA,CAAKgM,IAE1ChM,KAASA,CAAAA,CAAM,EAAC,EAAG;gBACrB6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GACQA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAC3C;oBAAC;oBAAY;iBAAW,CAAE,OAAA,CAAQ,SAAU0B,CAAAA;oBACtCmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAI,SAASmK,EAAM,UAAA,CAAWnK,EAAG,EAAG,GAAE;gBAEtE,IACQ,IAAA,CAAK,OAAA,CAAQ,QAAQmK;gBACrB;YACD;YAID,IAFA7L,IAAQ,0BAA0B,IAAA,CAAKgM,IAEnChM,KAASA,CAAAA,CAAM,EAAC,EAAG;gBACrB6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GACQA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAC3C;oBAAC;oBAAM;iBAAO,CAAE,OAAA,CAAQ,SAAU0B,CAAAA;oBAC5BmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAI,OAAOmK,EAAM,UAAA,CAAWnK,EAAI,CAAA;gBAEhE,IACQ;oBAAC;oBAAc;iBAAU,CAAE,OAAA,CAAQ,SAAUA,CAAAA;oBACvCmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAI,IAAI,KAAKmK,EAAM,UAAA,CAAWnK,EAAI,CAAA;gBAElE,IACQ;oBAAC;oBAAY;iBAAkB,CAAE,OAAA,CAAQ,SAAUA,CAAAA;oBAC7CmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAI,WAAWmK,EAAM,UAAA,CAAWnK,EAAI,CAAA;gBAEpE,IACQ;oBAAC;iBAAa,CAAE,OAAA,CAAQ,SAAUA,CAAAA;oBAC5BmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAI,OAAO,IAAA,CAAKmK,EAAM,UAAA,CAAWnK,EAAI,CAAA;gBAErE,IACQ;oBAAC;oBAAc;oBAAe;iBAAW,CAAE,OAAA,CAAQ,SAAUA,CAAAA;oBACvDmK,EAAM,UAAA,CAAW,cAAA,CAAenK,MAClCmK,CAAAA,EAAM,UAAA,CAAWnK,EAAG,GAAImK,EAAM,UAAA,CAAWnK,EAAG,CAAE,QAAA,CAAS,GAAE;gBAErE;gBACQ,MAAM0K,IAAyB;gBAE/B,IAAA,MAAW1K,KAAOmK,EAAM,UAAA,CAAY;oBAClC,IAAI,CAACO,EAAuB,IAAA,CAAK1K,IAC/B;oBAGF,MAAM2K,IAAgB,kBAAkB,IAAA,CAAKR,EAAM,UAAA,CAAWnK,EAAI,GAC5D4K,IAAoB,gBAAgB,IAAA,CAAKT,EAAM,UAAA,CAAWnK,EAAI;oBACpEmK,EAAM,UAAA,CAAWnK,EAAG,GAAI2K,IAAgBR,EAAM,UAAA,CAAWnK,EAAG,CAAE,QAAA,CAAS,MAAM4K,IAAoB,WAAWT,EAAM,UAAA,CAAWnK,EAAI,IAAI,OAAOmK,EAAM,UAAA,CAAWnK,EAAI;gBAClK;gBAED,IAAA,CAAK,OAAA,CAAQ,QAAQmK;gBACrB;YACD;YAID,IAFA7L,IAAQ,+BAA+B,IAAA,CAAKgM,IAExChM,GAAO;gBACT,IAAA,CAAK,OAAA,CAAQ,QAAQ;oBACnB,MAAM;oBACN,SAAS;gBACnB;gBACQ;YACD;YAID,IAFAA,IAAQ,iCAAiC,IAAA,CAAKgM,IAE1ChM,GAAO;gBACT6L,IAAQ;oBACN,MAAM;oBACN,SAAS;gBACnB,GACQA,EAAM,UAAA,GAAaN,EAAgBvL,CAAAA,CAAM,EAAE,GAC3C,IAAA,CAAK,OAAA,CAAQ,QAAQ6L;gBACrB;YACD;YAGD,IAAA,CAAK,OAAA,CAAQ,QAAQ;gBACnB,MAAM;gBACN,MAAMG,EAAQ,KAAA,CAAM;YAC5B;QACA;IACG;IAAA;;;;;;;;GAAA,GAYD,UAAU,EACR,YAAAO,CADQ,EAER,YAAAC,CADA,EAEA,YAAAC,CADA,EAEA,SAAAC,CADA,EAEJ,EAAK;QACG,OAAOD,KAAe,cACxBA,CAAAA,IAAa,CAAAb,IAAQA,CAAAA,GAGvB,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,CAAAA;YAGtB,IAFcW,EAAW,IAAA,CAAKX,IAG5B,OAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ;gBACnB,MAAM;gBACN,MAAMa,EAAWb;gBACjB,YAAAY;gBACA,SAAAE;YACV,IACe,CAFL;QAIV;IACG;IAAA;;;;;;GAAA,GAUD,aAAa,EACX,YAAAH,CADW,EAEX,KAAAl4B,CADA,EAEJ,EAAK;QACD,MAAMs4B,IAAQ,CAAAf,IACRW,EAAW,IAAA,CAAKX,KACXv3B,EAAIu3B,KAGNA;QAGT,IAAA,CAAK,UAAA,CAAW,IAAA,CAAKe;IACtB;AAEH;AAEA,MAAMC,KAAY,CAAA1vB,IAAOA,EAAI,WAAA,GAAc,OAAA,CAAQ,UAAU,CAAAxM,IAAKA,CAAAA,CAAE,EAAC,CAAE,WAAA,KAEjEm8B,KAAgB,SAAUrB,CAAAA;IAC9B,MAAMnhB,IAAS,CAAA;IACf,OAAA,OAAO,IAAA,CAAKmhB,GAAY,OAAA,CAAQ,SAAU9J,CAAAA;QACxCrX,CAAAA,CAAOuiB,GAAUlL,GAAI,GAAI8J,CAAAA,CAAW9J,EAApC;IACJ,IACSrX;AACT,GAMMyiB,KAAc,SAAUC,CAAAA;IAC5B,MAAM,EACJ,eAAAC,CADI,EAEJ,gBAAAC,CADA,EAEA,oBAAAC,CADA,EAED,GAAGH;IAEJ,IAAI,CAACC,GACH;IAGF,MAAMx4B,IAAM,yBACN24B,IAAK,YACLC,IAAM,gBACNC,IAAoBJ,KAAkBA,IAAiB,GACvDK,IAAkBJ,KAAsBA,IAAqB;IAE/DD,KAAkB,CAACD,EAAc,cAAA,CAAeG,MAClDH,CAAAA,CAAAA,CAAcG,EAAE,GAAIE,GACpB,IAAA,CAAK,OAAA,CAAQ,QAAQ;QACnB,SAAS,CAAA,EAAG74B,EAAG,6CAAA,EAAgD64B,EAD5C,EAAA,CAAA;IAEzB,EAAK,GAGCA,KAAqBL,CAAAA,CAAcG,EAAE,GAAIE,KAC3C,CAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ;QACnB,SAAS,CAAA,EAAG74B,EAAG,qBAAA,EAAwBw4B,CAAAA,CAAcG,EAAG,CAAA,yBAAA,EAA4BE,EADjE,CAAA,CAAA;IAEzB,IACIL,CAAAA,CAAcG,EAAE,GAAIE,CAAAA,GAIlBH,KAAsB,CAACF,EAAc,cAAA,CAAeI,MACtDJ,CAAAA,CAAAA,CAAcI,EAAG,GAAIF,IAAqB,GAC1C,IAAA,CAAK,OAAA,CAAQ,QAAQ;QACnB,SAAS,CAAA,EAAG14B,EAAG,sDAAA,EAAyDw4B,CAAAA,CAAcI,EAAI,CADvE,EAAA,CAAA;IAEzB,EAAK,GAICF,KAAsBF,CAAAA,CAAcI,EAAG,GAAIE,KAC7C,CAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ;QACnB,SAAS,CAAA,EAAG94B,EAAG,0BAAA,EAA6Bw4B,CAAAA,CAAcI,EAAI,CAAA,6BAAA,EAAgCE,EAD3E,EAAA,CAAA;IAEzB,IACIN,CAAAA,CAAcI,EAAG,GAAIE,CAAAA;AAEzB;AAwBA,MAAMC,WAAerD;IACnB,aAAc;QACZ,KAAA,IACA,IAAA,CAAK,UAAA,GAAa,IAAIc,MACtB,IAAA,CAAK,WAAA,GAAc,IAAIW,MACvB,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,IAAA,CAAK,WAAW,GACrC,IAAA,CAAK,mBAAA,GAAsB;QAG3B,MAAM6B,IAAO,IAAA,EAGPC,IAAO,EAHb;QAIA,IAAIC,IAAa,CAAA,GAEbC,GAEAjM,GACAkM,IAAW,CALf;QAOA,MAAMC,IAAO,YAAY,GAEnBC,IAAqB;YACzB,OAAS,CAAE;YACX,OAAS,CAAE;YACX,mBAAmB,CAAE;YACrB,WAAa,CAAE;QACrB,GAGUC,IAAe;QAErB,IAAIC,IAAkB;QAEtB,IAAA,CAAK,QAAA,GAAW;YACd,YAAY,CADE;YAEd,qBAAqB,EADT;YAEZ,YAAY,EADW;YAEvB,UAAU,EADI;QAEpB;QAII,IAAIC,IAAmB,GAEnBC,IAAuB;QAC3B,MAAMC,IAAgB,CAAA;QACtB,IAAA,CAAK,EAAA,CAAG,OAAO;YAGTT,EAAW,GAAA,IAAO,CAACA,EAAW,KAAA,IAAS,CAACA,EAAW,YAAA,IAInD,CAAA,CAACA,EAAW,GAAA,IAAOC,KACrBD,CAAAA,EAAW,GAAA,GAAMC,CAAAA,GAGf,CAACD,EAAW,GAAA,IAAOhM,KACrBgM,CAAAA,EAAW,GAAA,GAAMhM,CAAAA,GAGf,CAACgM,EAAW,QAAA,IAAY,OAAOM,KAAoB,YACrDN,CAAAA,EAAW,QAAA,GAAWM,CAAAA,GAGxB,IAAA,CAAK,QAAA,CAAS,cAAA,GAAiBN,CAAAA;QACrC,IAEI,IAAA,CAAK,WAAA,CAAY,EAAA,CAAG,QAAQ,SAAUtoB,CAAAA;YACpC,IAAIgpB,GACAC;YACH,CAAA;gBACC;oBAEI,CAAA,CAAA;wBACA;4BACMjpB,EAAM,OAAA,IACR,CAAA,IAAA,CAAK,QAAA,CAAS,OAAA,GAAUA,EAAM,OADhC,AAAA;wBAGD;wBAED;4BACE,IAAA,CAAK,QAAA,CAAS,UAAA,GAAaA,EAAM,OAAA,EAE3B,aAAaA,KACjB,CAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B,IACgB,IAAA,CAAK,QAAA,CAAS,UAAA,GAAa,CAFhB,CAAA;wBAId;wBAED;4BACE,MAAMkpB,IAAY,CAAA;4BAEd,YAAYlpB,KACdsoB,CAAAA,EAAW,SAAA,GAAYY,GACvBA,EAAU,MAAA,GAASlpB,EAAM,MAAA,EAEnB,YAAYA,KAWhBA,CAAAA,EAAM,MAAA,GAAS6oB,CAAAA,CAAAA,GAIf,YAAY7oB,KACdsoB,CAAAA,EAAW,SAAA,GAAYY,GACvBA,EAAU,MAAA,GAASlpB,EAAM,MAAA,AAAA,GAG3B6oB,IAAmBK,EAAU,MAAA,GAASA,EAAU,MAxBhD;wBAyBD;wBAED;4BACE,IAAA,CAAK,QAAA,CAAS,OAAA,GAAU,CAAxB;wBACD;wBAED;4BACQ,mBAAmB,IAAA,CAAK,QAAA,IAC5B,CAAA,IAAA,CAAK,QAAA,CAAS,aAAA,GAAgB,GAC9B,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B,EAAiB,GAGG,2BAA2B,IAAA,CAAK,QAAA,IACpC,CAAA,IAAA,CAAK,QAAA,CAAS,qBAAA,GAAwB,GACtC,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B,EAAiB,GAGClpB,EAAM,KAAA,IACRsoB,CAAAA,EAAW,KAAA,GAAQtoB,EAAM,KAAA,AAAA,GAGvBA,EAAM,QAAA,GAAW,KACnBsoB,CAAAA,EAAW,QAAA,GAAWtoB,EAAM,QAAA,AAAA,GAG1BA,EAAM,QAAA,KAAa,KACrBsoB,CAAAA,EAAW,QAAA,GAAW,MACtB,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B,EAAiB,GAGH,IAAA,CAAK,QAAA,CAAS,QAAA,GAAWD;wBAC1B;wBAED;4BACE,IAAI,CAACroB,EAAM,UAAA,EAAY;gCACrB,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS;gCAC3B;gCACgB;4BACD;4BAGD,IAAIA,EAAM,UAAA,CAAW,MAAA,KAAW,QAAQ;gCACtCsc,IAAM;gCACN;4BACD;4BAED,IAAI,CAACtc,EAAM,UAAA,CAAW,GAAA,EAAK;gCACzB,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS;gCAC3B;gCACgB;4BACD;4BAED,IAAIA,EAAM,UAAA,CAAW,SAAA,KAAc,kCAAkC;gCACnE,IAAA,CAAK,QAAA,CAAS,iBAAA,GAAoB,IAAA,CAAK,QAAA,CAAS,iBAAA,IAAqB,CAAA,GAErE,IAAA,CAAK,QAAA,CAAS,iBAAA,CAAkB,oBAAmB,GAAI;oCACrD,YAAYA,EAAM,UADmC;gCAEvE;gCACgB;4BACD;4BAED,IAAIA,EAAM,UAAA,CAAW,SAAA,KAAc,2BAA2B;gCAC5D,IAAA,CAAK,QAAA,CAAS,iBAAA,GAAoB,IAAA,CAAK,QAAA,CAAS,iBAAA,IAAqB,CAAA,GAErE,IAAA,CAAK,QAAA,CAAS,iBAAA,CAAkB,0BAAyB,GAAI;oCAC3D,KAAKA,EAAM,UAAA,CAAW,GADqC;gCAE7E;gCACgB;4BACD;4BAID,IAAIA,EAAM,UAAA,CAAW,SAAA,KAAc2oB,GAAc;gCAG/C,IAFsB;oCAAC;oCAAc;oCAAkB;iCAAiB,CAEtD,OAAA,CAAQ3oB,EAAM,UAAA,CAAW,MAAM,MAAM,IAAI;oCACzD,IAAA,CAAK,OAAA,CAAQ,QAAQ;wCACnB,SAAS;oCAC7B;oCACkB;gCACD;gCAQD,IANIA,EAAM,UAAA,CAAW,MAAA,KAAW,qBAC9B,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS;gCAC7B,IAGoBA,EAAM,UAAA,CAAW,GAAA,CAAI,SAAA,CAAU,GAAG,QAAQ,2BAA2B;oCACvE,IAAA,CAAK,OAAA,CAAQ,QAAQ;wCACnB,SAAS;oCAC7B;oCACkB;gCACD;gCAED,IAAI,CAAEA,CAAAA,EAAM,UAAA,CAAW,KAAA,IAASA,EAAM,UAAA,CAAW,KAAA,CAAM,SAAA,CAAU,GAAG,OAAO,IAAA,GAAO;oCAChF,IAAA,CAAK,OAAA,CAAQ,QAAQ;wCACnB,SAAS;oCAC7B;oCACkB;gCACD;gCAID,IAAA,CAAK,QAAA,CAAS,iBAAA,GAAoB,IAAA,CAAK,QAAA,CAAS,iBAAA,IAAqB,CAAA,GACrE,IAAA,CAAK,QAAA,CAAS,iBAAA,CAAkB,qBAAoB,GAAI;oCACtD,YAAY;wCACV,aAAaA,EAAM,UAAA,CAAW,SADpB;wCACoB,qCAAA;wCAE9B,OAAOA,EAAM,UAAA,CAAW,KAAA,CAAM,SAAA,CAAU;oCACzC;oCAAA,qCAAA;oCAED,MAAMylB,GAAsBzlB,EAAM,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,IAAG,CAAE,EAAE;gCAChF;gCACgB;4BACD;4BAEIA,EAAM,UAAA,CAAW,MAAA,IACpB,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B,IAIcsc,IAAM;gCACJ,QAAQtc,EAAM,UAAA,CAAW,MAAA,IAAU;gCACnC,KAAKA,EAAM,UAAA,CAAW,GADa;4BAEnD,GAEkB,OAAOA,EAAM,UAAA,CAAW,EAAA,GAAO,OACjCsc,CAAAA,EAAI,EAAA,GAAKtc,EAAM,UAAA,CAAW,EAJJ,AAAA;wBAMzB;wBAED;4BACE,IAAI,CAAC,SAASA,EAAM,MAAM,GAAG;gCAC3B,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS,sCAAsCA,EAAM,MADlC;gCAErC;gCACgB;4BACD;4BAED,IAAA,CAAK,QAAA,CAAS,aAAA,GAAgBA,EAAM,MAApC;wBACD;wBAED;4BACE,IAAI,CAAC,SAASA,EAAM,MAAM,GAAG;gCAC3B,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS,8CAA8CA,EAAM,MAD1C;gCAErC;gCACgB;4BACD;4BAED,IAAA,CAAK,QAAA,CAAS,qBAAA,GAAwBA,EAAM,MAAA,EAC5C4oB,IAAkB5oB,EAAM,MADxB;wBAED;wBAED;4BACE,IAAI,CAAC,YAAY,IAAA,CAAKA,EAAM,YAAY,GAAG;gCACzC,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS,qCAAqCA,EAAM,QADjC;gCAErC;gCACgB;4BACD;4BAED,IAAA,CAAK,QAAA,CAAS,YAAA,GAAeA,EAAM,YAAnC;wBACD;wBAED;4BACEuoB,IAAa,CAAA,GAETvoB,EAAM,GAAA,IACRuoB,CAAAA,EAAW,GAAA,GAAMvoB,EAAM,GAAA,AAAA,GAGrBA,EAAM,SAAA,IACRuoB,CAAAA,EAAW,SAAA,GAAYvoB,EAAM,SAAA,AAAA,GAG3Bsc,KACFiM,CAAAA,EAAW,GAAA,GAAMjM,CAAAA;wBAEpB;wBAED;4BAIE,IAHA,IAAA,CAAK,QAAA,CAAS,SAAA,GAAY+L,GAC1B,IAAA,CAAK,QAAA,CAAS,WAAA,GAAc,IAAA,CAAK,QAAA,CAAS,WAAA,IAAeK,GAErD,CAAC1oB,EAAM,UAAA,EAAY;gCACrB,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS;gCAC3B;gCACgB;4BACD;4BAEIsoB,EAAW,UAAA,IACdA,CAAAA,EAAW,UAAA,GAAa,CAAA,CAAA,GAG1BlD,GAASkD,EAAW,UAAA,EAAYtoB,EAAM,UAAU;wBACjD;wBAED;4BAGE,IAFA,IAAA,CAAK,QAAA,CAAS,WAAA,GAAc,IAAA,CAAK,QAAA,CAAS,WAAA,IAAe0oB,GAErD,CAAE1oB,CAAAA,EAAM,UAAA,IAAcA,EAAM,UAAA,CAAW,IAAA,IAAQA,EAAM,UAAA,CAAW,WAAU,IAAKA,EAAM,UAAA,CAAW,IAAA,AAAA,GAAO;gCACzG,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS;gCAC3B;gCACgB;4BACD;4BAGD,MAAMmpB,IAAiB,IAAA,CAAK,QAAA,CAAS,WAAA,CAAYnpB,EAAM,UAAA,CAAW,IAAI,CAAtE;4BACAmpB,CAAAA,CAAenpB,EAAM,UAAA,CAAW,WAAW,CAAA,GAAImpB,CAAAA,CAAenpB,EAAM,UAAA,CAAW,WAAW,CAAA,IAAK,CAAA,GAC/FgpB,IAAaG,CAAAA,CAAenpB,EAAM,UAAA,CAAW,WAAW,CAAA,EAExDipB,IAAY;gCACV,SAAS,OAAO,IAAA,CAAKjpB,EAAM,UAAA,CAAW,OAAO;4BAC7D,GAEkBipB,EAAU,OAAA,GACZA,EAAU,UAAA,GAAa,CAAA,IAEvBA,EAAU,UAAA,GAAa,OAAO,IAAA,CAAKjpB,EAAM,UAAA,CAAW,UAAU,GAG5DA,EAAM,UAAA,CAAW,QAAA,IACnBipB,CAAAA,EAAU,QAAA,GAAWjpB,EAAM,UAAA,CAAW,QAAA,AAAA,GAGpCA,EAAM,UAAA,CAAW,GAAA,IACnBipB,CAAAA,EAAU,GAAA,GAAMjpB,EAAM,UAAA,CAAW,GAAA,AAAA,GAG/BA,EAAM,UAAA,CAAW,cAAa,IAChCipB,CAAAA,EAAU,UAAA,GAAajpB,EAAM,UAAA,CAAW,cAAa,AAAA,GAGnDA,EAAM,UAAA,CAAW,eAAA,IACnBipB,CAAAA,EAAU,eAAA,GAAkBjpB,EAAM,UAAA,CAAW,eAAA,AAAA,GAG3CA,EAAM,UAAA,CAAW,MAAA,IACnBipB,CAAAA,EAAU,MAAA,GAAS,OAAO,IAAA,CAAKjpB,EAAM,UAAA,CAAW,MAAM,CAAA,GAIxDgpB,CAAAA,CAAWhpB,EAAM,UAAA,CAAW,IAAI,CAAA,GAAIipB;wBACrC;wBAED;4BACEL,KAAmB,GACnBN,EAAW,aAAA,GAAgB,CAAA,GAC3B,IAAA,CAAK,QAAA,CAAS,mBAAA,CAAoB,IAAA,CAAKD,EAAK,MAAM;wBACnD;wBAED;4BACM,OAAO,IAAA,CAAK,QAAA,CAAS,cAAA,GAAmB,OAK1C,CAAA,IAAA,CAAK,QAAA,CAAS,cAAA,GAAiBroB,EAAM,cAAA,EACrC,IAAA,CAAK,QAAA,CAAS,cAAA,GAAiBA,EAAM,cAAA,AAAA,GAGvCsoB,EAAW,cAAA,GAAiBtoB,EAAM,cAAA,EAClCsoB,EAAW,cAAA,GAAiBtoB,EAAM,cAVlC;4BAWA,MAAM,EACJ,qBAAAopB,CADI,EAEL,GAAG,IADF;4BAEF,IAAA,CAAK,mBAAA,GAAsB,IAAI,KAAKppB,EAAM,cAAc,EAAE,OAAA,IAGtDopB,MAAwB,QAI1B,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,WAAA,CAAY,CAACC,GAAiB/B,IACnDA,CAAAA,EAAQ,eAAA,GAAkB+B,IAAkB/B,EAAQ,QAAA,GAAW,KACxDA,EAAQ,eAAA,AAAA,GACd,IAAA,CAAK,mBAAmB;wBAE9B;wBAED;4BACE,IAAI,CAAC,SAAStnB,EAAM,QAAQ,KAAKA,EAAM,QAAA,GAAW,GAAG;gCACnD,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS,uCAAuCA,EAAM,QADnC;gCAErC;gCACgB;4BACD;4BAED,IAAA,CAAK,QAAA,CAAS,cAAA,GAAiBA,EAAM,QAAA,EACrC0nB,GAAY,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,QAAQ;wBACrC;wBAED;4BACE,IAAI,CAAC1nB,EAAM,UAAA,IAAc,MAAMA,EAAM,UAAA,CAAW,cAAc,GAAG;gCAC/D,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS;gCAC3B;gCACgB;4BACD;4BAED,IAAA,CAAK,QAAA,CAAS,KAAA,GAAQ;gCACpB,YAAYA,EAAM,UAAA,CAAW,cADT;gCAEpB,SAASA,EAAM,UAAA,CAAW,OADgB;4BAE1D;wBACa;wBAED;4BACEsoB,EAAW,MAAA,GAAStoB,EAAM,IAA1B;wBACD;wBAED;4BACEsoB,EAAW,UAAA,GAAatoB,EAAM,IAA9B;wBACD;wBAED;4BACEsoB,EAAW,KAAA,GAAQtoB,EAAM,IAAzB;wBACD;wBAED;4BACE,IAAA,CAAK,QAAA,CAAS,IAAA,GAAOynB,GAAcznB,EAAM,UAAU,GACnD,IAAA,CAAK,wBAAA,CAAyB,eAAeA,EAAM,UAAA,EAAY;gCAAC;6BAAmB;wBACpF;wBAED;4BACEwoB,IAAW,CAAX;4BAEA,MAAMc,IAAe,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,MAAA,EACtCC,IAAO9B,GAAcznB,EAAM,UAAU;4BAC3CsoB,EAAW,KAAA,GAAQA,EAAW,KAAA,IAAS,EAAA,EACvCA,EAAW,KAAA,CAAM,IAAA,CAAKiB,IAElBA,EAAK,SAAA,IACFA,CAAAA,EAAK,SAAA,CAAU,cAAA,CAAe,aACjCA,CAAAA,EAAK,SAAA,CAAU,MAAA,GAAST,CAAAA,GAG1BA,IAAuBS,EAAK,SAAA,CAAU,MAAA,GAASA,EAAK,SAAA,CAAU,MARhE,AAAA;4BAWA,MAAMC,IAAYlB,EAAW,KAAA,CAAM,MAAA,GAAS;4BAC5C,IAAA,CAAK,wBAAA,CAAyB,CAAA,aAAA,EAAgBkB,EAAS,cAAA,EAAiBF,EAAY,CAAA,EAAItpB,EAAM,UAAA,EAAY;gCAAC;gCAAO;6BAAW,GAEzH,IAAA,CAAK,QAAA,CAAS,gBAAA,IAChB,IAAA,CAAK,QAAA,CAAS,gBAAA,CAAiB,OAAA,CAAQ,CAAC9U,GAAGW;gCACpCX,EAAE,cAAA,CAAe,eACpB,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS,CAAA,yBAAA,EAA4BW,EADlB,uCAAA,CAAA;gCAEzC;4BAEA;wBAEa;wBAED;4BACE,MAAMw6B,IAAQ,IAAA,CAAK,QAAA,CAAS,aAAA,GAAgBoB,GAAcznB,EAAM,UAAU;4BAErEqmB,EAAM,cAAA,CAAe,qBACxBA,CAAAA,EAAM,cAAA,GAAiB,CAAA,GACvB,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B,EAAiB,GAGHqB,GAAY,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,QAAQ,GAEhCrB,EAAM,iBAAA,IAAqB,CAACA,EAAM,cAAA,CAAe,mBACnD,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B;wBAEa;wBAED;4BAEE,MAAMiD,IAAe,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,MAAA,EACtCG,IAAOhC,GAAcznB,EAAM,UAAU,GACrC0pB,IAASD,EAAK,IAAA,IAAQA,EAAK,IAAA,KAAS;4BAC1CnB,EAAW,YAAA,GAAeA,EAAW,YAAA,IAAgB,EAAA,EACrDA,EAAW,YAAA,CAAa,IAAA,CAAKmB,IAEzBA,EAAK,SAAA,IACFA,CAAAA,EAAK,SAAA,CAAU,cAAA,CAAe,aAEjCA,CAAAA,EAAK,SAAA,CAAU,MAAA,GAASC,IAASZ,IAAuB,GAEpDY,KACFZ,CAAAA,IAAuBW,EAAK,SAAA,CAAU,MAAA,GAASA,EAAK,SAAA,CAAU,MATpE,AAAA,CAAA,CAAA;4BAcA,MAAMxtB,IAAQqsB,EAAW,YAAA,CAAa,MAAA,GAAS;4BAG/C,IAFA,IAAA,CAAK,wBAAA,CAAyB,CAAA,qBAAA,EAAwBrsB,EAAK,cAAA,EAAiBqtB,EAAY,CAAA,EAAItpB,EAAM,UAAA,EAAY;gCAAC;gCAAQ;6BAAM,GAEzH,CAAA,CAACypB,EAAK,IAAV,EAMA,IAAA,IAAS59B,IAAI,GAAGA,IAAIy8B,EAAW,YAAA,CAAa,MAAA,GAAS,GAAGz8B,IAAK;gCAC3D,MAAM89B,IAAYrB,EAAW,YAAA,CAAaz8B,EAA1C;gCAEK89B,EAAU,IAAA,IAIXA,EAAU,IAAA,KAASF,EAAK,IAAA,IAC1B,IAAA,CAAK,OAAA,CAAQ,QAAQ;oCACnB,SAAS,CAAA,qBAAA,EAAwBxtB,EAAK,cAAA,EAAiBqtB,EAAY,mBAAA,EAAsBG,EAAK,IAAI,CAAA,kBAAA,EAAqB59B,EADpG,CAAA;gCAEvC;4BAEe;wBACF;wBAED;4BACE,MAAM+9B,IAASnC,GAAcznB,EAAM,UAAU;4BAC7C,IAAA,CAAK,QAAA,CAAS,gBAAA,GAAmB,IAAA,CAAK,QAAA,CAAS,gBAAA,IAAoB,EAAA,EACnE,IAAA,CAAK,QAAA,CAAS,gBAAA,CAAiB,IAAA,CAAK4pB;4BACpC,MAAM3tB,IAAQ,IAAA,CAAK,QAAA,CAAS,gBAAA,CAAiB,MAAA,GAAS,GAChD4tB,IAAW;gCAAC;gCAAY;6BAD9B;4BAGIrB,KACFqB,EAAS,IAAA,CAAK,cAGhB,IAAA,CAAK,wBAAA,CAAyB,CAAA,yBAAA,EAA4B5tB,EAAK,CAAA,EAAI+D,EAAM,UAAA,EAAY6pB;wBACtF;wBAED;4BACE,IAAA,CAAK,QAAA,CAAS,OAAA,GAAUpC,GAAcznB,EAAM,UAAU,GACtD,IAAA,CAAK,wBAAA,CAAyB,mBAAmBA,EAAM,UAAA,EAAY;gCAAC;6BAAc,GAE9E,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,UAAA,IACxB,CAAA,IAAA,CAAK,QAAA,CAAS,kBAAA,GAAqB,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,UAAA,AAAA,GAG3D0nB,GAAY,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,QAAQ;wBACrC;wBAED;4BACE,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,IAAA,CAAKD,GAAcznB,EAAM,UAAU;4BAC5D,MAAM/D,IAAQ,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,MAAA,GAAS;4BAChD,IAAA,CAAK,wBAAA,CAAyB,CAAA,kBAAA,EAAqBA,EAAK,CAAA,EAAI+D,EAAM,UAAA,EAAY;gCAAC;gCAAM;6BAAa;4BAClG,MAAM8pB,IAAY,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW7tB,EAA3C;4BAEI6tB,EAAU,OAAA,IAAWA,EAAU,SAAA,IAAa,IAAI,KAAKA,EAAU,OAAO,IAAI,IAAI,KAAKA,EAAU,SAAS,KACxG,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B,IAGkBA,EAAU,QAAA,IAAYA,EAAU,QAAA,GAAW,KAC7C,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B,IAGkBA,EAAU,eAAA,IAAmBA,EAAU,eAAA,GAAkB,KAC3D,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B;4BAGc,MAAMC,IAAe,CAAC,CAACD,EAAU,SAAjC;4BAcA,IAZIC,KAAgB,CAACD,EAAU,KAAA,IAC7B,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B,IAGkBC,KAAiBD,CAAAA,EAAU,QAAA,IAAYA,EAAU,OAAA,AAAA,KACnD,IAAA,CAAK,OAAA,CAAQ,QAAQ;gCACnB,SAAS;4BAC3B,IAGkBA,EAAU,QAAA,IAAYA,EAAU,OAAA,EAAS;gCAE3C,MAAME,IADYF,EAAU,SAAA,CACO,OAAA,KAAYA,EAAU,QAAA,GAAW;gCACpE,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW7tB,EAAK,CAAE,OAAA,GAAU,IAAI,KAAK+tB;4BACpD;4BAED,IAAI,CAACjB,CAAAA,CAAce,EAAU,EAAE,CAA/B,EACEf,CAAAA,CAAce,EAAU,EAAE,CAAA,GAAIA;iCACzB;gCACL,IAAA,MAAWG,KAAalB,CAAAA,CAAce,EAAU,EAAE,CAAlD,CACE,IAAMA,CAAAA,CAAUG,EAAS,IAAK,KAAK,SAAA,CAAUlB,CAAAA,CAAce,EAAU,EAAE,CAAA,CAAEG,EAAU,MAAM,KAAK,SAAA,CAAUH,CAAAA,CAAUG,EAAU,GAAG;oCAC7H,IAAA,CAAK,OAAA,CAAQ,QAAQ;wCACnB,SAAS;oCAC/B;oCACoB;gCACD;gCAIH,MAAMC,IAAsB,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,SAAA,CAAU,CAAAC,IAAmBA,EAAgB,EAAA,KAAOL,EAAU,EAAE;gCACrH,IAAA,CAAK,QAAA,CAAS,UAAA,CAAWI,EAAmB,GAAI9E,GAAS,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW8E,EAAmB,EAAGJ,IACxGf,CAAAA,CAAce,EAAU,EAAE,CAAA,GAAI1E,GAAS2D,CAAAA,CAAce,EAAU,EAAE,CAAA,EAAGA,IAEpE,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,GAHzB;4BAID;wBACF;wBAED;4BACE,IAAA,CAAK,QAAA,CAAS,mBAAA,GAAsB,CAApC;wBACD;wBAED;4BACE,IAAA,CAAK,QAAA,CAAS,eAAA,GAAkBrC,GAAcznB,EAAM,UAAU,GAC9D,IAAA,CAAK,wBAAA,CAAyB,2BAA2BA,EAAM,UAAA,EAAY;gCAAC;6BAAa;wBAC1F;oBAEb,CAAA,CAAA,CAAaA,EAAM,OAAO,CAAA,IAAKyoB,CAAAA,EAAM,IAAA,CAAKL;gBACjC;gBAED;oBACEE,EAAW,GAAA,GAAMtoB,EAAM,GAAA,EACvBqoB,EAAK,IAAA,CAAKC,IAEN,IAAA,CAAK,QAAA,CAAS,cAAA,IAAkB,CAAE,CAAA,cAAcA,CAAAA,KAClD,CAAA,IAAA,CAAK,OAAA,CAAQ,QAAQ;wBACnB,SAAS;oBACvB,IACYA,EAAW,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,cAAA,AAAA,GAIlChM,KACFgM,CAAAA,EAAW,GAAA,GAAMhM,CAAAA,GAGnBgM,EAAW,QAAA,GAAWM,GAElBL,KACFD,CAAAA,EAAW,GAAA,GAAMC,CAAAA,GAInBO,IAAuB,GAEnB,IAAA,CAAK,mBAAA,KAAwB,QAC/BR,CAAAA,EAAW,eAAA,GAAkB,IAAA,CAAK,mBAAA,EAClC,IAAA,CAAK,mBAAA,IAAuBA,EAAW,QAAA,GAAW,GAAA,GAIpDA,IAAa,CAAA;gBACd;gBAED,YACC;gBAED;oBAEMtoB,EAAM,OAAA,GACRsoB,CAAAA,EAAW,MAAA,GAASA,EAAW,MAAA,IAAU,CAAA,GACzCA,EAAW,MAAA,CAAOtoB,EAAM,UAAU,CAAA,GAAIA,EAAM,IAAA,AAAA,IAE5C,CAAA,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,MAAA,IAAU,CAAA,GAC/C,IAAA,CAAK,QAAA,CAAS,MAAA,CAAOA,EAAM,UAAU,CAAA,GAAIA,EAAM,IALjD,AAAA;gBAOD;YAEF,CAAA,CAAA,CAAEA,EAAM,IAAI,CAAA,CAAE,IAAA,CAAKooB;QAC1B;IACG;IAED,yBAAyBgC,CAAAA,EAAYhE,CAAAA,EAAYyD,CAAAA,EAAU;QACzD,MAAMQ,IAAU,EAAhB;QACAR,EAAS,OAAA,CAAQ,SAAUvN,CAAAA;YACpB8J,EAAW,cAAA,CAAe9J,MAC7B+N,EAAQ,IAAA,CAAK/N;QAErB,IAEQ+N,EAAQ,MAAA,IACV,IAAA,CAAK,OAAA,CAAQ,QAAQ;YACnB,SAAS,CAAA,EAAGD,EAAU,8BAAA,EAAiCC,EAAQ,IAAA,CAAK,MADjD,CAAA;QAE3B;IAEG;IAAA;;;;GAAA,GAQD,KAAKxV,CAAAA,EAAO;QACV,IAAA,CAAK,UAAA,CAAW,IAAA,CAAKA;IACtB;IAAA;;;;GAAA,GAQD,MAAM;QAEJ,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,CAArB;AAAqB,CAAI,GAErB,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,MAAA,IAAU,IAAA,CAAK,mBAAA,KAAwB,QAClE,IAAA,CAAK,OAAA,CAAQ,QAAQ;YACnB,SAAS;QACjB,IAGI,IAAA,CAAK,mBAAA,GAAsB,MAC3B,IAAA,CAAK,OAAA,CAAQ;IACd;IAAA;;;;;;;;GAAA,GAYD,UAAUxQ,CAAAA,EAAS;QACjB,IAAA,CAAK,WAAA,CAAY,SAAA,CAAUA;IAC5B;IAAA;;;;;;GAAA,GAUD,aAAaA,CAAAA,EAAS;QACpB,IAAA,CAAK,WAAA,CAAY,YAAA,CAAaA;IAC/B;AAEH;AC1oDsB,eAAAimB,GAAgBC,CAAAA,EAAiBC,IAAc,EAAA;IAC7D,MAAAC,IAAS,IAAItC;IACnBsC,EAAO,IAAA,CAAK,MAAA,AAAO,CAAA,MAAM,MAAMF,EAAO,EAAG,IAAA,KACzCE,EAAO,GAAA;IACD,MAAAC,IAAWD,EAAO,QAAA,CAAS,QAAA,CAAS,MAApC,CACJ,CAAC57B,GAAKyhB,IACAzhB,CAAAA,CAAAA,CAAAyhB,EAAI,GAAA,CAAI,GAAG,CAAA,GAAIzhB,CAAAA,CAAIyhB,EAAI,GAAA,CAAI,GAAG,CAAA,IAAK,EAAA,EACvCzhB,CAAAA,CAAIyhB,EAAI,GAAA,CAAI,GAAG,CAAA,CAAE,IAAA,CAAKA,IACfzhB,CAAAA,GAET,CAAC,IAEG87B,IAAO,IAAI,IAAIJ,GAAS,SAAS,IAAI,GAErCK,IAA0B,CAAA;IAEjB,eAAAC,EACbC,CAAAA,EACA3d,CAAAA,EACA4d,CAAAA;QAEA,SAASC,EAAgBR,CAAAA;YACvB,IAAIS,IAAU,GACVn0B,IAAO,GACPo0B,IAAQ,EAFZ;YAIA,eAAeC,EAAQ9V,CAAAA;gBACrB6V,EAAM,IAAA,CAAK7V,IACN+V;YACP;YAEA,eAAeA;gBACT,IAAAH,IAAUT,KAAeU,EAAM,MAAA,EAAQ;oBACnC,MAAA7V,IAAO6V,EAAM,KAAb;oBACND;oBACI,IAAA;wBACF,MAAM5V,CAAAA,KAAA,OAAA,KAAA,IAAAA,GAAAA,GACNve,KACQi0B,EAAA,IAFR,CAGE,YACA,KAAK,KAAA,CAAOj0B,IAAOg0B,EAAS,MAAA,GAAU,OAAO,MAE1CM;oBACE77B,EAAAA,OAAAA,GAAK;wBACZ27B,IAAQ,EAAA,EACR/d,EAAK,KAAA,CAAM5d,IACXw7B,EAAQ,OAAA,IACR77B,EAAI,KAAA,CAAMK;oBACZ;oBACA07B;gBACF;YACF;YAEOE,OAAAA;QACT;QAEA,eAAeE,EAA0Bx7B,CAAAA;YACvC,OAAA,AAAQ,CAAA,MAAM,MAAMA,EAAG,EAAG,WAAA;QAC5B;QAEM,MAAAs7B,IAAUH,EAAgBR;QAEhC,KAAA,MAAW,GAAG5pB,EAAI,IAAKkqB,EAAS,OAAA,GAAW;YACzC,MAAMj7B,IAAM,IAAI,IAAI+Q,EAAK,GAAA,EAAK+pB,GAAM,IAApC;YACAQ,EACE,IAAOP,CAAAA,CAAwB/6B,EAAG,GAAIw7B,EAA0Bx7B;QAEpE;IACF;IAEA,eAAey7B,EAAiBz7B,CAAAA;QACxB,MAAA07B,IAAgB,MAAMX,CAAAA,CAAwB/6B,EAA9C;QACN,OAAA,OAAO+6B,CAAAA,CAAwB/6B,EAAG,EAC3B07B;IACT;IAEO,OAAA;QAAA;;;KAAA,GAKL,MAAKC,IAAkB,CAAA,EAAGC,IAAgB,IAAA,CAAA;YACxC,MAAMC,IAAiB,CAAA;YAQvB,IAAIC,IAAkB,GAClBC,IAAgB;YACpB,KAAA,MAAW,CAACC,GAAMC,EAAK,IAAK,OAAO,OAAA,CAAQpB,GAAW;gBACpD,IAAIt6B,IAAO,GACP27B,IAAO,EAAA,EACPzK,IAAW,IACXhO,IAAS;gBACb,IAAA,IAASznB,IAAI,GAAGA,IAAIigC,EAAM,MAAA,EAAQjgC,IAAK;oBAC/B,MAAAsf,IAAM2gB,CAAAA,CAAMjgC,EAAZ;oBAMN,IALAuE,KAAQ+a,EAAI,QAAA,EACRmW,MAAa,MAAMlxB,IAAOo7B,IAAkB,OACnClK,CAAAA,IAAAz1B,GACQ8/B,IAAAA,AAAAv7B,CAAAA,IAAO+a,EAAI,QAAA,AAAA,IAAY,GAAA,GAExCmW,IAAW,MAAMhO,MAAW,MAAMljB,KAAQq7B,IAAgB,KAAK;wBACjEnY,IAASznB,IAAI,GACb+/B,IAAgBx7B,IAAO;wBACvB;oBACF;gBACF;gBACIq7B,KAAiBr7B,IAAO,OAC1BkjB,CAAAA,IAASwY,EAAM,MAAA,EACfF,IAAgBx7B,IAAO,GAAA,GAGrBkjB,IAASgO,KACXyK,CAAAA,IAAOA,EAAK,MAAA,CAAOD,EAAM,KAAA,CAAMxK,GAAUhO,GAAO,GAE9CyY,EAAK,MAAA,GAAS,KAChBL,CAAAA,CAAAA,CAAeG,EAAI,GAAI;oBACrB,iBAAAF;oBACA,eAAAC;oBACA,UAAUG;gBAAA,CAAA;YAEhB;YAEA,OAAI,OAAO,IAAA,CAAKL,GAAgB,MAAA,KAAW,IAAU,OAE9C,OAAO,OAAA,CAAQA,GAAgB,GAFtC,CAGE,CAAC,CAACM,GAAS,EAAE,iBAAAL,CAAAA,EAAiB,eAAAC,CAAAA,EAAe,UAAAd,CAAAA,EAAU,CAAA;gBACrD,IAAImB,IAAS;gBAEP,MAAAlB,IAAU,IAAI9P;gBAIb,OAAA;oBACL,iBAAA0Q;oBACA,eAAAC;oBACA,IAAIb,EAAQ,EADZa;oBAEA,QAAQ,IAAI,eAA2B;wBACrC,OAAO,OAAOze;4BACK0d,EAAAC,GAAU3d,GAAM4d,IAC5B5d,EAAA,OADY,CAEf,IAAI,WACF,MAAA,AACE,CAAA,MAAM,MAAM,IAAI,IAAI6e,GAASrB,GAAM,IAAI,CAAA,EACvC,WAAA;wBAGR;wBACA,MAAM,OAAOxd;4BACL,MAAAtd,IAAM,IAAI,IAAIi7B,CAAAA,CAASmB,EAAM,CAAE,GAAA,EAAKtB,GAAM,IAA1C;4BACNxd,EAAK,OAAA,CAAQ,IAAI,WAAW,MAAMme,EAAiBz7B,MACzCo8B,KAAA,GACNA,KAAUnB,EAAS,MAAA,IACrB3d,CAAAA,EAAK,KAAA,IACL4d,EAAQ,OAAA,EAAQ;wBAEpB;oBAAA;gBACD;YAEL;QAEJ;IAAA;AAEJ;AC5KA,MAAMmB,KAAe,CAArB;;;;;;;;AAAqB,CAAA,EAUfC,KAAiB,CAVF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUE,CAAA,EA0CjBC,KAAY;IAAC;IAAI;IAAG;IAAI;IAAI;IAAG;IAAI;IAAG;IAAI;IAAG;IAAG;IAAI;CAAC,EACrDC,KAAgB;IAAC;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;CA3CjC;AA8CvB,SAASC,GACPC,CAAAA,EACAC,CAAAA,EACAC,CAAAA;IAEA,MAAMP,IAAeQ,GAAWH,GAAIA,EAAG,aAAA,EAAeC,IAChDL,IAAiBO,GAAWH,GAAIA,EAAG,eAAA,EAAiBE,IAGpDE,IAAgBJ,EAAG,aAJzB;IASA,IAJGA,EAAA,YAAA,CAAaI,GAAeT,IAC5BK,EAAA,YAAA,CAAaI,GAAeR,IAC/BI,EAAG,WAAA,CAAYI,IAEX,CAACJ,EAAG,mBAAA,CAAoBI,GAAeJ,EAAG,WAAW,GACjD,MAAA,MACJA,EAAG,iBAAA,CAAkBI,MACnB;IAIC,OAAAA;AACT;AAGA,SAASD,GAAWH,CAAAA,EAA2B13B,CAAAA,EAAc8Z,CAAAA;IACrD,MAAAie,IAASL,EAAG,YAAA,CAAa13B;IAS/B,IANG03B,EAAA,YAAA,CAAaK,GAAQje,IAGxB4d,EAAG,aAAA,CAAcK,IAGb,CAACL,EAAG,kBAAA,CAAmBK,GAAQL,EAAG,cAAc,GAAG;QAC/C,MAAAM,IAASN,EAAG,gBAAA,CAAiBK;QACnC,MAAAL,EAAG,YAAA,CAAaK,IACV,MAAMC,KAAU;IACxB;IAEO,OAAAD;AACT;AAEA,SAASE,GACPP,CAAAA,EACAhiC,CAAAA,EACAwiC,CAAAA;IAEGR,EAAA,WAAA,CAAYA,EAAG,UAAA,EAAYQ,IAC3BR,EAAA,UAAA,CAAWA,EAAG,UAAA,EAAY,GAAGA,EAAG,IAAA,EAAMA,EAAG,IAAA,EAAMA,EAAG,aAAA,EAAehiC,IACpEgiC,EAAG,UAAA,CAAWA,EAAG,SAAA,EAAW,GAAG;AACjC;AAEA,SAASS,GAAYT,CAAAA;IACb,MAAAQ,IAAUR,EAAG,aAAb;IACN,IAAIQ,KAAW,MAAY,MAAA,MAAM;IAC9BR,EAAA,WAAA,CAAYA,EAAG,UAAA,EAAYQ;IAG9B,MAAM11B,IAAQ,GACR41B,IAAiBV,EAAG,IAAA,EACpBliC,IAAQ,GACRC,IAAS,GACT4iC,IAAS,GACTC,IAAYZ,EAAG,IAAA,EACfa,IAAUb,EAAG,aAAA,EACbc,IAAQ,IAAI,WAAW;QAAC;QAAG;QAAG;QAAK;KAAI;IAC1C,OAAAd,EAAA,UAAA,CACDA,EAAG,UADF,EAEDl1B,GACA41B,GACA5iC,GACAC,GACA4iC,GACAC,GACAC,GACAC,IAGFd,EAAG,aAAA,CAAcA,EAAG,UAAA,EAAYA,EAAG,kBAAA,EAAoBA,EAAG,MAAM,GAChEA,EAAG,aAAA,CAAcA,EAAG,UAAA,EAAYA,EAAG,kBAAA,EAAoBA,EAAG,MAAM,GAChEA,EAAG,aAAA,CAAcA,EAAG,UAAA,EAAYA,EAAG,cAAA,EAAgBA,EAAG,aAAa,GACnEA,EAAG,aAAA,CAAcA,EAAG,UAAA,EAAYA,EAAG,cAAA,EAAgBA,EAAG,aAAa,GAE5DQ;AACT;AASA,SAASO,GACP1e,CAAAA;IAKA,MAAMhkB,IACJ,cAAc,aACV,WAAW,QAAA,CAAS,aAAA,CAAc,YAClC,IAAI,gBAAgBgkB,EAAK,KAAA,EAAOA,EAAK,MAAM;IACjDhkB,EAAI,KAAA,GAAQgkB,EAAK,KAAA,EACjBhkB,EAAI,MAAA,GAASgkB,EAAK,MADlB;IAGM,MAAA2d,IAAK3hC,EAAI,UAAA,CAAW,UAAU;QAClC,oBAAoB,CADc;QAElC,OAAO,CADa;IACb;IAGT,IAAI2hC,KAAM,MAAY,MAAA,MAAM;IAE5B,MAAMI,IAAgBL,GAAkBC,GAAIL,IAAcC;IAC1DI,EAAG,UAAA,CAAWI,IAEXJ,EAAA,UAFH,CAGEA,EAAG,kBAAA,CAAmBI,GAAe,aACrC/d,EAAK,QAAA,CAAS,GAAA,CAAI,CAACviB,IAAMA,IAAI,OAE5BkgC,EAAA,SAF+B,CAGhCA,EAAG,kBAAA,CAAmBI,GAAe,eACrC/d,EAAK,UAD4C,GAGhD2d,EAAA,SAFI,CAGLA,EAAG,kBAAA,CAAmBI,GAAe,eACrC/d,EAAK,UAD4C,GAGnD2d,EAAG,SAAA,CAAUA,EAAG,kBAAA,CAAmBI,GAAe,UAAU/d,EAAK,KAAK;IAEhE,MAAA2e,IAAYhB,EAAG,YAAf;IACHA,EAAA,UAAA,CAAWA,EAAG,YAAA,EAAcgB,IAC5BhB,EAAA,UAAA,CAAWA,EAAG,YAAA,EAAc,IAAI,aAAaH,KAAYG,EAAG,WAAW;IAC1E,MAAMiB,IAAajB,EAAG,iBAAA,CAAkBI,GAAe;IACpDJ,EAAA,mBAAA,CACDiB,GACA,GACAjB,EAAG,KADH,EAEA,CADG,GAEH,aAAa,iBAAA,GAAoB,GACjC,IAEFA,EAAG,uBAAA,CAAwBiB;IAErB,MAAAC,IAAiBlB,EAAG,YAApB;IACHA,EAAA,UAAA,CAAWA,EAAG,YAAA,EAAckB,IAC5BlB,EAAA,UADA,CAEDA,EAAG,YADF,EAED,IAAI,aAAaF,KACjBE,EAAG,WAD2B;IAGhC,MAAMmB,IAAanB,EAAG,iBAAA,CAAkBI,GAAe;IACpD,OAAAJ,EAAA,mBAAA,CACDmB,GACA,GACAnB,EAAG,KADH,EAEA,CADG,GAEH,aAAa,iBAAA,GAAoB,GACjC,IAEFA,EAAG,uBAAA,CAAwBmB,IAExBnB,EAAA,WAAA,CAAYA,EAAG,mBAAA,EAAqB,IAEhC;QAAE,KAAA3hC;QAAK,IAAA2hC;IANZ;AAOJ;AAUA,SAASoB,GAAYC,CAAAA;IACnB,OAAOA,aAAqB,aACxB;QAAE,OAAOA,EAAU,UAAA;QAAY,QAAQA,EAAU,WAAA;IAAY,IAC7D;QAAE,OAAOA,EAAU,KAAA;QAAO,QAAQA,EAAU,MAFhD;IAAA;AAGF;AAEA,SAASC,GAAYD,CAAAA;IAEb,MAAA/iC,IADM,IAAI,gBAAgB,GAAG,GACnB,UAAA,CAAW;IACvBA,EAAA,SAAA,CAAU+iC,GAAW,GAAG;IACtB,MAAA,EACJ,MAAM,CAAC,GAAGnhC,GAAGN,EADT,EACU,GACZtB,EAAI,YAAA,CAAa,GAAG,GAAG,GAAG;IACvB,OAAA;QAAC;QAAG4B;QAAGN;KAAP;AACT;AAea,MAAA2hC,KAAkB,CAC7Blf;IAIA,IAAIhkB,IAAkD,MAClD2hC,IAAmC,MACnCwB,IAAOnf,EAAK,QAAA,EACZme,IAA+B;IAEnC,OAAO,OAAOa;QAaZ,IAAA,AAZIhjC,CAAAA,KAAO,QAAQ2hC,KAAM,QAAQQ,KAAW,IAAA,KACtCgB,CAAAA,KAAQ,QAAaA,CAAAA,IAAAF,GAAYD,EAAS,GAC7C,EAAE,KAAAhjC,CAAAA,EAAK,IAAA2hC,CAAAA,EAAG,GAAIe,GAAQ;YACrB,GAAGK,GAAYC,EADM;YAErB,UAAUG;YACV,GAAGnf,CADO;QACP,IAELme,IAAUC,GAAYT,EAAE,GAGZO,GAAAP,GAAIqB,GAAWb,IAG3B,WAAW,UAAA,IAAc,QACzBa,aAAqB,WAAW,UAAA,EAChC;YACM,MAAAx6B,IAAK,IAAI,WAAWxI,GAAK;gBAC7B,OAAO;gBACP,WAAWgjC,EAAU,SADd;gBAEP,UAAUA,EAAU,QAAA,IAAY,KADX;YACW;YAElC,OAAAA,EAAU,KAAA,IACHx6B;QACT;QAEA,OAAO,kBAAkBxI,GAAK;YAC5B,kBAAkBgjC,aAAqB,cAAc,UAAU;QAAA;IAChE;AAEL;A3BxSO,IAAAI,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC;A4ByBA,MAAMC,IAAN,MAAMA;IA4HX,YACEvgC,CAAAA,EACAR,CAAAA,EACAd,CAAAA,EACAT,CAAAA,EACAuiC,CAAAA,CACA;QAlIGxhB,EAAA,IAAA,EAAAqhB;QAuBLrhB,EAAA,IAAA,EAAA+gB,IAAW,IAAI/S;QAQf;;;;KAAA,GAAAjO,EAAA,IAAA,EAAA,MAAKS,EAAA,IAAA,EAAKugB,IAAS,EAAnB;QAEA/gB,EAAA,IAAA,EAAAghB,IAAK;QAULhhB,EAAA,IAAA,EAAAihB,IAAK;QAULjhB,EAAA,IAAA,EAAAkhB,IAAK;QAULlhB,EAAA,IAAA,EAAAmhB,IAAK;QAULnhB,EAAA,IAAA,EAAAohB,IAAS;QAiDT;;;;KAAA,GAAArhB,EAAA,IAAA,EAAA,UAAsB;QA6BtB;;;;KAAA,GAAAA,EAAA,IAAA,EAAA,oBAAmB,CAAnB;QApBE,IAAA,CAAK,CAAA,GAAI/e,KAAK,GACd,IAAA,CAAK,CAAA,GAAIR,KAAK,GACd,IAAA,CAAK,CAAA,GAAId,KAAK,GACd,IAAA,CAAK,CAAA,GAAIT,KAAK,GACd,IAAA,CAAK,MAAA,GAASuiC,KAAU;IAC1B;IAAA;;GAAA,GAnGA,IAAI,IAAI;QACN,OAAOhhB,EAAA,IAAA,EAAKwgB;IACd;IACA,IAAI,EAAE5hC,CAAAA,EAAG;QACF6qB,EAAA,IAAA,EAAAoX,IAAAC,IAAA,IAAA,CAAA,IAAA,EAAc,KAAKliC;IAC1B;IAEA,IAAI,IAAI;QACN,OAAOohB,EAAA,IAAA,EAAKygB;IACd;IAAA;;GAAA,GAIA,IAAI,EAAE7hC,CAAAA,EAAG;QACF6qB,EAAA,IAAA,EAAAoX,IAAAC,IAAA,IAAA,CAAA,IAAA,EAAc,KAAKliC;IAC1B;IAAA;;GAAA,GAKA,IAAI,IAAI;QACN,OAAOohB,EAAA,IAAA,EAAK0gB;IACd;IACA,IAAI,EAAE9hC,CAAAA,EAAG;QACF6qB,EAAA,IAAA,EAAAoX,IAAAC,IAAA,IAAA,CAAA,IAAA,EAAc,KAAKliC;IAC1B;IAAA;;GAAA,GAKA,IAAI,IAAI;QACN,OAAOohB,EAAA,IAAA,EAAK2gB;IACd;IACA,IAAI,EAAE/hC,CAAAA,EAAG;QACF6qB,EAAA,IAAA,EAAAoX,IAAAC,IAAA,IAAA,CAAA,IAAA,EAAc,KAAKliC;IAC1B;IAAA;;;GAAA,GAMA,IAAI,QAAQ;QACV,OAAOohB,EAAA,IAAA,EAAK4gB;IACd;IACA,IAAI,MAAMhiC,CAAAA,EAAG;QACN6qB,EAAA,IAAA,EAAAoX,IAAAC,IAAA,IAAA,CAAA,IAAA,EAAc,SAASliC;IAC9B;IAAA;;GAAA,GA0DA,IAAI,SAAiB;QACnB,MAAM,EAAE,GAAA4B,CAAAA,EAAG,GAAAR,CAAAA,EAAG,GAAAd,CAAAA,EAAG,GAAAT,CAAAA,EAAAA,GAAM,IAAvB;QACO,OAAA;YAAE,GAAG+B,IAAItB,IAAI;YAAG,GAAGc,IAAIvB,IAAI;QAA3B;IACT;IAAA;;;;GAAA,GAcA,IAAI,QAAQ;QACJ,MAAA,EAAE,GAAAS,CAAAA,EAAG,GAAAT,CAAAA,EAAM,GAAA,IAAA,EAEXwiC,IAAKF,EAAK,SAAA,EAEVG,IAAOD,IAAK,GACZE,IAAMjiC,IAAI,GACVkiC,IAAM3iC,IAAI,GAEV4iC,IAAOJ,IAAK,KACZK,IAASD,IAAO;QAUf,OAAA;YACL,GATW,IAAA,CAAK,gBAAA,GACd,CAAA,IACA;gBACE,GAAG,IAAIN,EAAK,CAACG,GAAM,CAACE,IAAMF,GAAMD,GAAIA,GAAI,IAAI;gBAC5C,GAAG,IAAIF,EAAK,CAACG,GAAME,IAAMF,GAAMD,GAAIA,GAAI,IAAI;gBAC3C,GAAG,IAAIF,EAAK,CAACI,IAAMD,GAAM,CAACA,GAAMD,GAAIA,GAAI,IAAI;gBAC5C,GAAG,IAAIF,EAAKI,IAAMD,GAAM,CAACA,GAAMD,GAAIA,GAAI,IAAI;YAAA,CAAA;YAI/C,IAAI,IAAIF,EAAK,CAACI,IAAMD,GAAM,CAACE,IAAMF,GAAMD,GAAIA,GAAI,IAAI;YACnD,IAAI,IAAIF,EAAK,CAACI,IAAMD,GAAME,IAAMF,GAAMD,GAAIA,GAAI,IAAI;YAClD,IAAI,IAAIF,EAAKI,IAAMD,GAAM,CAACE,IAAMF,GAAMD,GAAIA,GAAI,IAAI;YAClD,IAAI,IAAIF,EAAKI,IAAMD,GAAME,IAAMF,GAAMD,GAAIA,GAAI,IAAI;YACjD,QAAQ,IAAIF,EAAK,CAACO,GAAQ,CAACF,IAAMH,IAAK,IAAIK,GAAQD,GAAMA,GAAM,IAAI;QAAA;IAEtE;IAEA,QAAc;QACZ,MAAM,EAAE,GAAA7gC,CAAAA,EAAG,GAAAR,CAAAA,EAAG,GAAAd,CAAAA,EAAG,GAAAT,CAAAA,EAAG,QAAAuiC,CAAAA,EAAW,GAAA,IAAA,EACzBO,IAAO,IAAIR,EAAKvgC,GAAGR,GAAGd,GAAGT,GAAGuiC;QAClC,OAAAO,EAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,EAClBA,EAAK,gBAAA,GAAmB,IAAA,CAAK,gBAAA,EACtBA;IACT;IAAA;;;;GAAA,GAOA,SAASC,CAAAA,EAAYC,CAAAA,EAAqB;QACpC,IAAA,EAAE,OAAAC,CAAAA,EAAO,QAAAC,CAAAA,EAAQ,GAAAnhC,CAAAA,EAAG,GAAAR,CAAAA,EAAG,GAAAd,CAAAA,EAAG,GAAAT,CAAAA,EAAG,QAAAuiC,CAAAA,EAAW,GAAA,IAAxC;QAEE,MAAAl4B,IAAAA,AAAMk4B,CAAAA,KAAA,OAAA,KAAA,IAAAA,EAAQ,MAAA,AAAA,KAAUW,GACxBC,IAAAA,AAAMZ,CAAAA,KAAA,OAAA,KAAA,IAAAA,EAAQ,KAAA,AAAA,KAASU;QAGzBV,KAAU,QACZxgC,CAAAA,IAAIA,IAAIsI,EAAI,CAAA,EACZ9I,IAAIA,IAAI8I,EAAI,CAFd,AAEc;QAGR,MAAA+4B,IAAML,IAAK14B,EAAI,CAAA,EACfg5B,IAAML,IAAK34B,EAAI,CADf;QAGN,IAAIi5B,IAAKF,GACLG,IAAKF;QAOL,OANAF,MAAQ,KAELG,CAAAA,IAAAF,IAAM,KAAK,GAAA,CAAID,KAAOE,IAAM,KAAK,GAAA,CAAIF,IACrCI,IAAAF,IAAM,KAAK,GAAA,CAAIF,KAAOC,IAAM,KAAK,GAAA,CAAID,EAAG,GAG3C,CAAAG,CAAAA,IAAKvhC,KAAKuhC,IAAKvhC,IAAItB,KAAK8iC,IAAKhiC,KAAKgiC,IAAKhiC,IAAIvB,CAAAA;IAGjD;AACF;AA7ME8hC,KAAA,IAAA,WAUAC,KAAA,IAAA,WAUAC,KAAA,IAAA,WAUAC,KAAA,IAAA,WAUAC,KAAA,IAAA,WAUAC,KAAA,IAAA,WAzEKC,KAAA,IAAA,WAqFLC,KAAA,SAAcpwB,CAAAA,EAA4B9R,CAAAA;IAClC,MAAAqjC,IAAU,IAAA,CAAKvxB,EAAI,KAAM9R;IAC/B,OAAQ8R;QACN,KAAK;YACHuP,EAAA,IAAA,EAAKugB,IAAK5hC;YACV;QACF,KAAK;YACHqhB,EAAA,IAAA,EAAKwgB,IAAK7hC;YACV;QACF,KAAK;YACHqhB,EAAA,IAAA,EAAKygB,IAAK9hC;YACV;QACF,KAAK;YACHqhB,EAAA,IAAA,EAAK0gB,IAAK/hC;YACV;QACF,KAAK;YACHqhB,EAAA,IAAA,EAAK2gB,IAAShiC;YACd;IACJ;IACIqjC,KAAcjiB,EAAA,IAAA,EAAAugB,IAAS,IAAA,CAAK,eAAe;QAAE,CAAC7vB,EAAI,EAAG9R;IAAA;AAW3D,GAAA;;;;CAAA,GA7GA2gB,EANWwhB,GAMJ,aAAY,KAAnBxhB;;CAAmB,GAKnBA,EAXWwhB,GAWK,aAAY;IAC1B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CAAA;AApBG,IAAMmB,KAANnB;A5BzBA,IAAAR,IAAA4B,IAAAC,IAAAC;A6BgBA,MAAeC;IAkEpB,aAAc;QA9Dd;;KAAA,GAAA/iB,EAAA,IAAA,EAAA,QAAO,IAAI2iB;QAOX;;;;KAAA,GAAA3iB,EAAA,IAAA,EAAA,QAAO;YACL,QAAQ;YACR,UAAU;QAAA;QAMZ;;KAAA,GAAAA,EAAA,IAAA,EAAA,WAAU,CAAV;QAEAC,EAAA,IAAA,EAAA+gB,IAAW,IAAI/S;QAUf;;;;KAAA,GAAAjO,EAAA,IAAA,EAAA,MAAKS,EAAA,IAAA,EAAKugB,IAAS,EAAnB;QAEA/gB,EAAA,IAAA,EAAA2iB,IAAU;QAiBV;;KAAA,GAAA5iB,EAAA,IAAA,EAAA,WAAU;QAKV;;KAAA,GAAAA,EAAA,IAAA,EAAA,QAAyC;QAEzCC,EAAA,IAAA,EAAA4iB,IAA6C;QAE7C5iB,EAAA,IAAA,EAAA6iB,IAA+C;QAK/C;;KAAA,GAAA9iB,EAAA,IAAA,EAAA,SAAQ,QAAQ,OAAhB;QAGE,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,eAAe,CAACgjB;YAC3BviB,EAAA,IAAA,EAAKugB,IAAS,IAAA,CAAK,eAAe;gBAAE,MAAMgC;YAAAA;QAAO;IAErD;IApCA,IAAI,SAAiB;QACnB,OAAOviB,EAAA,IAAA,EAAKmiB;IACd;IAAA;;GAAA,GAKA,IAAI,OAAOvjC,CAAAA,EAAW;QACd,MAAAqjC,IAAUjiB,EAAA,IAAA,EAAKmiB,QAAYvjC;QACjCqhB,EAAA,IAAA,EAAKkiB,IAAUvjC,IACXqjC,KAAAA,EAAAA,IAAAA,EAAc1B,IAAS,IAAA,CAAK,eAAe;YAAE,QAAQ3hC;QAAAA;IAC3D;IA2BU,QACRxB,CAAAA,EACM;QACA,MAAA,EACJ,MAAM,EAAE,QAAAukC,CAAAA,EAAQ,OAAAD,CAAAA,EADZ,EAEF,GAAA,IADoB;QAEpBtkC,EAAA,YAAA,CAAA,WAAA;QAEF,IAAA,CAAK,IAAA,KAAS,eAAe,KAAK,GAClC,GAAA,WAAA;QAEA,GACA,IAAA,CAAK,IAAA,KAAS,aAAa,KAAK,GAAA,aAAA;QAEhCukC,EAAO,CAFyB,EAGhCA,EAAO,CADA,GAITvkC,EAAI,MAAA,CAAA,AAAQ,CAAA,IAAA,CAAK,IAAA,IAAQ,OAAO,IAAI,EAAA,IAAMskC,IAE1CtkC,EAAI,WAAA,GAAc,IAAA,CAAK,OALd;IAMX;IAAA;;;;;;;;;;;;;;;;GAAA,GAmBA,aAAaolC,CAAAA,EAAyBrhB,CAAAA,EAA4B;QAC3DlB,EAAA,IAAA,EAAAmiB,IAAkB,OAAO,OAAA,CAAQI,GAAU,GAAA,CAAI,CAAC,CAACzjC,GAAG8B,EAAG;YAC1D,MAAM4hC,IAAO;gBAAE,MAAM;gBAAG,IAAI;YAAI,CAAA,CAAE1jC,EAAC,IAAK,OAAOA,EAAE,KAAA,CAAM,GAAG;YAC1D,IAAI,MAAM0jC,MAASA,IAAO,OAAOA,IAAO,GACtC,MAAM,MAAM;YAEP,OAAA;gBAACA,IAAO;gBAAK5hC;aAAb;QAAgB,KAEzBof,EAAA,IAAA,EAAKoiB,IAAc,OAAO,MAAA,CAAO,CAAC,GAAGriB,EAAA,IAAA,EAAKqiB,KAAa;YACrD,UAAUlhB,EAAK,QAAA,GAAW;YAC1B,OAAA,AAAQA,CAAAA,EAAK,KAAA,IAAS,CAAA,IAAK;YAC3B,WAAWA,EAAK,SAAA,IAAa,IADF;QACE;IAEjC;IAAA;;GAAA,GAKA,QAAQxe,CAAAA,EAAoB;QAExB,IAAAqd,EAAA,IAAA,EAAKoiB,OAAmB,QACxBpiB,EAAA,IAAA,EAAKqiB,OAAe,QACpB1/B,IAAOqd,EAAA,IAAA,EAAKqiB,IAAY,KAFxB,EAIA;QACF,MAAMK,IAAcC,GAClBhgC,GACAqd,EAAA,IAAA,EAAKoiB,KACLpiB,EAAA,IAAA,EAAKqiB;QAEP,IAAA,MAAWtjC,KAAK2jC,EACd,OAAQ3jC;YACN,KAAK;gBACE,IAAA,CAAA,OAAA,GAAU2jC,CAAAA,CAAY3jC,EAAtB;gBACL;YACF,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;gBACH,IAAA,CAAK,IAAA,CAAKA,EAAC,GAAI2jC,CAAAA,CAAY3jC,EAA3B;gBACA;QACJ;IAEJ;IAAA;;;;GAAA,GAOA,YAAkCsJ,CAAAA,EAAW;QAC3C4X,EAAA5X,GAAO+5B,IAAkBpiB,EAAA,IAAA,EAAKoiB,MAC9BniB,EAAA5X,GAAOg6B,IAAcriB,EAAA,IAAA,EAAKqiB,MAC1Bh6B,EAAO,OAAA,GAAU,IAAA,CAAK,OAAA,EACtBA,EAAO,MAAA,GAAS,IAAA,CAAK,MAAA,EACrBA,EAAO,OAAA,GAAU,IAAA,CAAK,OAAA,EACtBA,EAAO,IAAA,GAAO,IAAA,CAAK,IAAA,EACZA,EAAA,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,KAAA,IACxBA,EAAO,IAAA,GAAO;YAAE,GAAG,IAAA,CAAK,IAAA;QAAK;IAC/B;IAEU,UAAU;QAClB2X,EAAA,IAAA,EAAKugB,IAAS,OAAd;IACF;AACF;AA5JEA,KAAA,IAAA,WAYA4B,KAAA,IAAA,WAwBAC,KAAA,IAAA,WAEAC,KAAA,IAtCA9B;AA8Jc,SAAAoC,GACdhgC,CAAAA,EACAigC,CAAAA,EACAzhB,CAAAA;IAEA,IAAIxe,IAAOwe,EAAK,QAAA,IAAYA,EAAK,SAAA,EAAA,OAAkB,CAAnD;IAEM,MAAA7jB,IAAIqF,IAAOwe,EAAK,QAAA,EAEhB0hB,IAAUlgC,MAASwe,EAAK,QAAA,GAAW,IAAI7jB,IAAI6jB,EAAK,QAAA,EAChDhb,IAAMy8B,EAAG,SAAA,CAAU,CAACngB,IAAOA,CAAAA,CAAG,EAAC,IAAKogB;IACtC,IAAA18B,MAAQ,IAAI,OAAO,CAAnB;IAEE,MAAA28B,IAAaF,CAAAA,CAAGz8B,IAAM,EAAC,EACvB48B,IAAYH,CAAAA,CAAGz8B,EAAG,EAClB68B,IAAYD,CAAAA,CAAU,EAFtB;IAGF,IAAAD,KAAc,MAAa,OAAAE;IACzB,MAAAC,IAAaH,CAAAA,CAAW,EAAC,EAEzBn9B,IAA6B,CAAA,GAE7Bu9B,IAAAA,AACHL,CAAAA,IAAUC,CAAAA,CAAW,EAAC,AAAA,IAAMC,CAAAA,CAAAA,CAAU,EAAC,GAAID,CAAAA,CAAW,EALnD,AAKoD;IAC1D,IAAA,MAAWpyB,KAAQsyB,EAAW;QAC5B,MAAM5jC,IAAIsR;QACNuyB,CAAAA,CAAW7jC,EAAC,IAAK,QAGlBuG,CAAAA,CAAAA,CAAAvG,EAAC,GAAA,AAAK4jC,CAAAA,CAAAA,CAAU5jC,EAAC,GAAI6jC,CAAAA,CAAW7jC,EAAC,AAAA,IAAK8jC,IAAeD,CAAAA,CAAW7jC,EAH/D,AAGgE;IACtE;IAEO,OAAAuG;AACT;A7BnOO,IAAAw9B,IAAAC,IAAA9iB;A8BYA,MAAM+iB,KAAN,MAAMA,WAAwBf;IAQnC,YAAY9e,CAAAA,CAAa;QACjB,KAAA;QARRhE,EAAA,IAAA,EAAA2jB;QAGA,gCAAA;QAAA3jB,EAAA,IAAA,EAAA4jB,IAA2C;QAE3C5jB,EAAA,IAAA,EAAAc,IAAa,CAAb;QAIEL,EAAA,IAAA,EAAKkjB,IAAQ3f,IACR,IAAA,CAAA,KAAA,GAAQA,EAAK,KAAA,CAAM,IAAA,CAAK,CAAC,EAAE,OAAA5mB,CAAAA,EAAO,QAAAC,CAAAA,EAAQ,UAAAkN,CAAAA,EAAAA;YACxC,IAAA,CAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAA,KAAM,IAAInN,IAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,EAC/C,IAAA,CAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAA,KAAM,IAAIC,IAAS,IAAA,CAAK,IAAA,CAAK,CAAA,EAChD,IAAA,CAAA,IAAA,CAAK,QAAA,GACR,IAAA,CAAK,IAAA,CAAK,QAAA,KAAa,IAAIkN,IAAW,IAAA,CAAK,IAAA,CAAK,QAH7C;QAG6C;IAEtD;IAAA;;;GAAA,GAMA,MAAM,gBACJ3M,CAAAA,EACAuF,CAAAA,EAIC;Q9BzCE,IAAA0E;Q8B0CH,IAAA,CAAK,OAAA,CAAQ1E,IACb,KAAA,CAAM,QAAQvF;QACd,MAAM,EAAE,GAAA8B,CAAAA,EAAG,GAAAT,CAAAA,EAAAA,GAAM,IAAA,CAAK,IAAA,EAChB,EAAE,OAAAsjB,CAAAA,EAAO,OAAAD,CAAAA,EAAO,OAAAwhB,CAAAA,EAAAA,GAAU,MAAMtjB,EAAA,IAAA,EAAKmjB,IAAM,IAAA,CAAKxgC;QACtD,IAAI2gC,MAAU,QACL,OAAA;YACL,OAAOxhB,KAAS,EADX;YAEL,MAAM,CADW;QACX;QAIJ,MAAAqe,IAAYpe,KAAS/B,EAAA,IAAA,EAAKojB;QAChC,OAAIjD,KAAa,QACX/iC,EAAA,SAAA,CAAU+iC,GAAW,CAACjhC,IAAI,GAAG,CAACT,IAAI,GAAGS,GAAGT,IAG1CsjB,KAAS,QAAA,CAAA,AACX1a,CAAAA,IAAA2Y,EAAA,IAAA,EAAKojB,GAAAA,KAAL,QAAA/7B,EAAc,KAAA,IACd4Y,EAAA,IAAA,EAAKmjB,IAAUrhB,EAAAA,GAGV;YACL,OAAOD,KAAS,EADX;YAEL,MAAM,CADW;QACX;IAEV;IAEA,MAAM,QAAQ;QACZ,MAAMyhB,IAAM,IAAIF,GAAgB,MAAMrjB,EAAA,IAAA,EAAKmjB,IAAM,KAAA;QACjD,OAAA,MAAMI,EAAI,KAAA,EACV,IAAA,CAAK,WAAA,CAAYA,IACVA;IACT;IAEA,UAAgB;Q9B5EX,IAAAl8B;Q8B6EC2Y,EAAA,IAAA,EAAKM,OACTL,CAAAA,EAAA,IAAA,EAAKK,IAAa,CAAA,IAElB7e,EAAI,IAAA,CAAK,4BACT,KAAA,CAAM,WAAQ,AACd4F,CAAAA,IAAA2Y,EAAA,IAAA,EAAKojB,GAAAA,KAAL,QAAA/7B,EAAc,KAAA,IACd4Y,EAAA,IAAA,EAAKmjB,IAAU,OACfpjB,EAAA,IAAA,EAAKmjB,IAAM,OAPX,EAAA;IAQF;AACF;AAzEEA,KAAA,IAAA,WAGAC,KAAA,IAAA,WAEA9iB,KAAA,IALA6iB;AADK,IAAMK,KAANH;A9BZA,IAAAF,IAAAC,IAAAK,IAAAC,IAAAC,IAAAC,IAAAC,IAAAvjB;A+BaA,MAAMwjB,WAAsBxB;IAMjC,YAAY9e,CAAAA,CAAa;QACjB,KAAA;QAPHhE,EAAA,IAAA,EAAAmkB;QACLnkB,EAAA,IAAA,EAAA2jB;QAiBA,gCAAA;QAAA3jB,EAAA,IAAA,EAAA4jB,IAA2C;QAC3C5jB,EAAA,IAAA,EAAAikB,IAA6B,EAA7B;QACAjkB,EAAA,IAAA,EAAAkkB,IAAW,CAAX;QAyBAlkB,EAAA,IAAA,EAAAqkB,IAAY;QAuBZrkB,EAAA,IAAA,EAAAc,IAAa,CAAb;QA5DEL,EAAA,IAAA,EAAKkjB,IAAQ3f,IACR,IAAA,CAAA,KAAA,GAAQA,EAAK,KAAA,CAAM,IAAA,CAAK,CAAC,EAAE,OAAA5mB,CAAAA,EAAO,QAAAC,CAAAA,EAAQ,UAAAkN,CAAAA,EAAAA;YACxC,IAAA,CAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAA,KAAM,IAAInN,IAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,EAC/C,IAAA,CAAA,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAA,KAAM,IAAIC,IAAS,IAAA,CAAK,IAAA,CAAK,CAAA,EAChD,IAAA,CAAA,IAAA,CAAK,QAAA,GACR,IAAA,CAAK,IAAA,CAAK,QAAA,KAAa,IAAIkN,IAAW,IAAA,CAAK,IAAA,CAAK,QAH7C;QAG6C;IAEtD;IAbA,UAAU;QACR,OAAOiW,EAAA,IAAA,EAAKmjB;IACd;IAAA;;GAAA,GAqCA,SAASxgC,CAAAA,EAAc;QACrB8mB,EAAA,IAAA,EAAKka,IAAAC,IAAL,IAAA,CAAA,IAAA,EAAajhC;IACf;IAAA;;;GAAA,GAOA,OACEvF,CAAAA,EACAuF,CAAAA,EAC2B;QAC3B,IAAA,CAAK,OAAA,CAAQA,IACb,KAAA,CAAM,QAAQvF;QACd,MAAM,EAAE,GAAA8B,CAAAA,EAAG,GAAAT,CAAAA,EAAAA,GAAM,IAAA,CAAK,IAAtB;QACIuhB,EAAA,IAAA,EAAK6jB,QAAclhC,KAAM8mB,EAAA,IAAA,EAAKka,IAAAC,IAAL,IAAA,CAAA,IAAA,EAAajhC,IAC1Csd,EAAA,IAAA,EAAK4jB,IAAYlhC;QAEjB,MAAMmf,IAAQ9B,EAAA,IAAA,EAAKyjB;QACnBxjB,EAAA,IAAA,EAAKwjB,IAAa,EAAlB;QACA,MAAM1hB,IAAQ/B,EAAA,IAAA,EAAKojB;QACnB,OAAIrhB,KAAS,QAAU3kB,EAAA,SAAA,CAAU2kB,GAAO,CAAC7iB,IAAI,GAAG,CAACT,IAAI,GAAGS,GAAGT,IAEpD;YAAE,OAAAqjB;QAAM;IACjB;IAGA,UAAgB;Q/BlFX,IAAAza;Q+BmFC2Y,EAAA,IAAA,EAAKM,OACTL,CAAAA,EAAA,IAAA,EAAKK,IAAa,CAAA,IAElB7e,EAAI,IAAA,CAAK,0BACT,KAAA,CAAM,WAAQ,AACd4F,CAAAA,IAAA2Y,EAAA,IAAA,EAAKojB,GAAAA,KAAL,QAAA/7B,EAAc,KAAA,IACd4Y,EAAA,IAAA,EAAKmjB,IAAU,OACfpjB,EAAA,IAAA,EAAKmjB,IAAM,OAPX,EAAA;IAQF;AACF;AA9EEA,KAAA,IAAA,WAiBAC,KAAA,IAAA,WACAK,KAAA,IAAA,WACAC,KAAA,IAAA,WApBKC,KAAA,IAAA,WAqBLC,KAAAA,SAAQjhC,CAAAA;IACFqd,EAAA,IAAA,EAAK0jB,OACTzjB,CAAAA,EAAA,IAAA,EAAKyjB,IAAW,CAAA,IACX1jB,EAAA,IAAA,EAAAmjB,IACF,IAAA,CAAKxgC,GACL,IAAA,CAAK,CAAC,EAAE,OAAAof,CAAAA,EAAO,OAAAD,CAAAA,EAAAA;Q/BvCf,IAAAza;Q+BwCK0a,KAAS,QAAA,CAAA,AACX1a,CAAAA,IAAA2Y,EAAA,IAAA,EAAKojB,GAAAA,KAAL,QAAA/7B,EAAc,KAAA,IACd4Y,EAAA,IAAA,EAAKmjB,IAAUrhB,KAAS,KAAA,GAErB9B,EAAA,IAAA,EAAAwjB,IAAa3hB,KAAS,EAJ3B;IAI4B,GAE7B,OAAA,CAAQ;QACP7B,EAAA,IAAA,EAAKyjB,IAAW,CAAhB;IAAgB,EACjB;AACL,GASAG,KAAA,IAAA,WAuBAvjB,KAAA,IAhCA;AC7BF,IAAIyjB,KAAS;AAKb,eAAeC,GAAmBC,CAAAA;IAC5BA,MAAa,MACf,CAAA,MAAMx7B,GAAM,KACZ,MAAMu7B,GAAmBC,EAAQ;AAErC;AhC9BO,IAAA5jB,IAAAC,IAAA4jB,IAAAzZ,IAAAS,IAAAiZ,IAAApjB,IAAAqjB,IAAA7D,IAAA8D,IAAAC,IAAAC;AgCmDA,MAAMC;IAAW;;;GAAA,GA+DtB,YAAYrjB,IAAwB,CAAA,CAAA,CAAI;QA/DnC3B,EAAA,IAAA,EAAA6kB;QAoCL7kB,EAAA,IAAA,EAAAa,IAAO5e,EAAI,MAAA,CAAO,CAAA,GAAA,EAAMsiC,KAAQ,CAAA,CAAG;QAEnCvkB,EAAA,IAAA,EAAAc,IAAa,CAAb;QAEAd,EAAA,IAAA,EAAA0kB,IAAyE,EAAzE;QAEA1kB,EAAA,IAAA,EAAAiL;QAEAjL,EAAA,IAAA,EAAA0L;QAGA,OAAA;QAAA1L,EAAA,IAAA,EAAA2kB,IAAmC;QAEnC3kB,EAAA,IAAA,EAAAuB;QAEAvB,EAAA,IAAA,EAAA4kB;QAEA5kB,EAAA,IAAA,EAAA+gB,IAAW,IAAI/S;QAIfjO,EAAA,IAAA,EAAA,MAAKS,EAAA,IAAA,EAAKugB,IAAS,EAAnB;QAOE,MAAM,EAAE,OAAA3jC,IAAQ,CAAA,EAAG,QAAAC,IAAS,CAAA,EAAA,GAAMskB;QAClClB,EAAA,IAAA,EAAKwK,IAAO,IAAI,gBAAgB7tB,GAAOC;QAEjC,MAAAO,IAAM4iB,EAAA,IAAA,EAAKyK,IAAK,UAAA,CAAW,MAAM;YAAE,OAAO,CAAA;QAAA;QAChD,IAAIrtB,KAAO,MAAY,MAAA,MAAM;QAC7B6iB,EAAA,IAAA,EAAKiL,IAAO9tB,IACZ6iB,EAAA,IAAA,EAAKc,IAAQ,OAAO,MADpB,CAEE;YACE,SAAS;YACT,OAAO;YACP,QAAQ;YACR,YAAY;YACZ,OAAO,CADK;YAEZ,SAAS;YACT,cAAc;QAChB,GACAI,KAGGlB,EAAA,IAAA,EAAAmkB,IAAiBxnC,IAAQC,IAAS;IACzC;IAAA;;;GAAA,GA/EA,aAAa,YACX0E,IAAO;QACL,YAAY;IAAA,CAAA,EAEI;QAEhB,OAAA,KAAK,eAAA,IAAmB,QACxB,KAAK,YAAA,IAAgB,QACrB,KAAK,YAAA,IAAgB,QACrB,KAAK,UAAA,IAAc,QACnB,KAAK,YAAA,IAAgB,QACrB,KAAK,YAAA,IAAgB,QACrB,KAAK,SAAA,IAAa,QAAA,CAAA,AAEhB,CAAA,MAAM,KAAK,YAAA,CAAa,iBAAA,CAAkB;YACxC,OAAOA,EAAK,UAD4B;YAExC,OAAO;YACP,QAAQ;QAAA,EACT,EACD,SAAA,IACA,CAAA,CAAA,KAAA,AAEA,CAAA,MAAM,KAAK,YAAA,CAAa,iBAAA,CAAkB;YACxC,OAAO0c,EAAmB,KADc;YAExC,YAAYA,EAAmB,UADL;YAE1B,kBAAkBA,EAAmB,YADN;QAEhC,EAAA,EACD,SAFuC;IAI7C;IAAA;;;;GAAA,GAyDA,MAAM,UACJwmB,CAAAA,EACAtjB,IAA2B,CAAA,CAAA,EACZ;QACVnB,EAAA,IAAA,EAAAK,IAAK,IAAA,CAAK,yBAAyBokB;QAClC,MAAAC,IAAQ,MAAMD,EAAG,KAAjB;QACDzkB,EAAA,IAAA,EAAAK,IAAK,IAAA,CAAK,+BAA+BokB,IAC9CzkB,EAAA,IAAA,EAAKkkB,IAAS,IADT,CAEH,OAAO,MAAA,CAAOQ,GAAO;YACnB,MAAMvjB,EAAK,IAAA,IAAQ,CADA;YAEnB,SAAS,CADU;QACV,KAGRnB,EAAA,IAAA,EAAAkkB,IAAS,IAAA,CAAK,CAACrmC,GAAGa,IAAMb,EAAE,MAAA,GAASa,EAAE,MAAM;IAClD;IAAA;;GAAA,GAkCA,SAAqC;QACnC,IAAIshB,EAAA,IAAA,EAAKkkB,IAAS,MAAA,KAAW,GAAG,MAAM,MAAM;QAE5C,MAAMS,IAAU3kB,EAAA,IAAA,EAAKkkB,IAAS,IAAA,CAAK,CAACzhB,IAAOA,EAAG,IAAI,GAE5CmiB,IACJD,KAAW,OACPA,EAAQ,IAAA,CAAK,MAAA,GAASA,EAAQ,IAAA,CAAK,QAAA,GACnC,KAAK,GALX,IAMW3kB,EAAA,IAAA,EAAKkkB,IAAS,GAAA,CAAI,CAACzhB,IAAOA,EAAG,IAAA,CAAK,MAAA,GAASA,EAAG,IAAA,CAAK,QAAQ;QAEtE,IAAImiB,MAAY,IAAhB,GACQ,MAAA,MACJ;QAIAA,MAAY,MACd5kB,EAAA,IAAA,EAAKK,IAAK,IADZ,CAEI,iEAIJL,EAAA,IAAA,EAAKK,IAAK,IAAA,CAAK,CAAA,+BAAA,EAAkCukB,EAAO,CAAE;QACpD,MAAAC,IAAQpb,EAAA,IAAA,EAAK4a,IAAAC,IAAL,IAAA,CAAA,IAAA,EAAqBM;QAC/B,IAAAE,IAAW,YAAY,GAAvB;QACJ,MAAMC,IAAgBtb,EAAA,IAAA,EAAK4a,IAAAE,IAAL,IAAA,CAAA,IAAA,EAAUM,GAAOD,GAAS;YAC9C,YAAY,CAACI;gBACNhlB,EAAA,IAAA,EAAAK,IAAK,KAAA,CAAM,mBAAmB2kB,IAC9BhlB,EAAA,IAAA,EAAAugB,IAAS,IAAA,CAAK,kBAAkByE;YACvC;YACA,SAAS;gBACP,MAAMH,EAAM,KAAA,IACZ7kB,EAAA,IAAA,EAAKK,IAAK,IADV,CAEE,mCACA,YAAY,GAAA,KAAQykB,IAEjB9kB,EAAA,IAAA,EAAAugB,IAAS,IAAA,CAAK,kBAAkB,IACrC,IAAA,CAAK,OAAA;YACP;YACA,SAAS,CAACz+B;gBACHke,EAAA,IAAA,EAAAugB,IAAS,IAAA,CAAK,SAASz+B,IAC5BmjC,EAAenjC,IACf,IAAA,CAAK,OAAA;YACP;QAAA;QAGFme,EAAA,IAAA,EAAKkkB,IAAc;YACHY,KACdF,EAAM,KAAA,IACSI;QAAA;QAEjB,MAAM,EAAE,QAAA99B,CAAAA,EAAQ,MAAM89B,CAAAA,EAAmB,GAAA3S,GACvCuS,EAAM,OADiC,EAEvC,KACA,IAAA,CAAK,OADL;QAIK,OAAA19B;IACT;IAAA;;GAAA,GAKA,UAAU;QhC9PL,IAAAE;QgC+PC2Y,EAAA,IAAA,EAAKM,OACTL,CAAAA,EAAA,IAAA,EAAKK,IAAa,CAAA,IAAA,AAElBjZ,CAAAA,IAAA2Y,EAAA,IAAA,EAAKmkB,GAAAA,KAAL,QAAA98B,EAAA,IAAA,CAAA,IAAA,GACA2Y,EAAA,IAAA,EAAKugB,IAAS,OAJd,EAAA;IAKF;AA6IF;AA1TElgB,KAAA,IAAA,WAEAC,KAAA,IAAA,WAEA4jB,KAAA,IAAA,WAEAzZ,KAAA,IAAA,WAEAS,KAAA,IAAA,WAGAiZ,KAAA,IAAA,WAEApjB,KAAA,IAAA,WAEAqjB,KAAA,IAAA,WAEA7D,KAAA,IAAA,WArDK8D,KAAA,IAAA,WA2GLC,KAAAA,SAAgBv6B,CAAAA;IACR,MAAA,EAAE,OAAAnN,CAAAA,EAAO,QAAAC,CAAAA,EAAQ,YAAAqoC,CAAAA,EAAY,SAAAC,CAAAA,EAAS,OAAArjB,CAAAA,EAAO,cAAAsjB,CAAAA,EAAA,GACjDplB,EAAA,IAAA,EAAKe;IAwBA,OAvBa4O,GAAU;QAC5B,OAAO3P,EAAA,IAAA,EAAKokB,MACR;YACE,OAAAxnC;YACA,QAAAC;YACA,WAAW;YACX,OAAOqoC;YACP,SAAAC;YACA,iCACEnlB,EAAA,IAAA,EAAKe,IAAM,+BAFb;QAEa,IAEf;QACJ,OACEe,MAAU,CAAA,IACN,OACA;YACE,OAAO;YACP,YAAY7D,EAAmB,UADxB;YAEP,cAAcA,EAAmB,YADF;QAEjC;QACN,UAAAlU;QACA,cAAAq7B;IAAA;AAGJ,GA6EAb,KAAA,SACEM,CAAAA,EACAD,CAAAA,EACA,EACE,YAAAS,CADF,EAEE,SAAAC,CADA,EAEA,SAAAC,CADA,EACA;IAOF,IAAIC,IAAW,GACXv8B,IAAS,CAAA,GACTnH,IAAoB;IAEX,CAAA;QAIX,IAAIyF,IAAW;QACf,MAAM,EAAE,OAAA3K,CAAAA,EAAO,QAAAC,CAAAA,EAAAA,GAAWmjB,EAAA,IAAA,EAAKyK,KACzBrtB,IAAM4iB,EAAA,IAAA,EAAKkL;QACjB,IAAIyK,IAAK;QACT,OAAa;YACX,IAAI7zB,KAAO,MAAX;YAEE,IAAAmH,KACC27B,MAAY,MAAajP,IAAKiP,KAC/B5kB,EAAA,IAAA,EAAKkkB,IAAS,MAAA,KAAW,GACzB;gBACKlR,KACL,MAAMsS;gBACN;YACF;YACAE,IAAW7P,IAAKiP,GAEZxnC,EAAA,SAAA,GAAY4iB,EAAA,IAAA,EAAKe,IAAM,OAAA,EAC3B3jB,EAAI,QAAA,CAAS,GAAG,GAAGR,GAAOC;YAE1B,MAAM4K,IAA2B,EAAjC;YACW,KAAA,MAAA/J,KAAKsiB,EAAA,IAAA,EAAKkkB,IAAU;gBAC7B,IAAIj7B,GAAJ;gBACA,IAAI0sB,IAAKj4B,EAAE,IAAA,CAAK,MAAA,IAAUA,EAAE,OAAA,EAA5B;gBAEAN,EAAI,IAAA;gBACJ,MAAM,EAAE,OAAA0kB,CAAAA,EAAO,MAAAzY,CAAAA,EAAAA,GAAS,MAAM3L,EAAE,eAAhC,CACEN,GACAu4B,IAAKj4B,EAAE,IAAA,CAAK,MADZ;gBAQC,IALH+J,EAAO,IAAA,CAAKqa,IACZ1kB,EAAI,OAAA,IAIDM,EAAE,IAAA,CAAK,QAAA,GAAW,KAAKi4B,IAAKj4B,EAAE,IAAA,CAAK,MAAA,GAASA,EAAE,IAAA,CAAK,QAAA,IACpD2L,GACA;oBACA,IAAI3L,EAAE,IAAA,EAAM;wBACLs1B,KACL,MAAMsS;wBACN;oBACF;oBAEA5nC,EAAE,OAAA,IACFA,EAAE,OAAA,GAAU,CADZ;gBAEF;YACF;YAEA,IAAIuL,GAAJ;YAEI,IAAA+W,EAAA,IAAA,EAAKe,IAAM,KAAA,KAAU,CAArB;gBACE,IAAAtZ,EAAO,IAAA,GAAO,KAAA,CAAM,CAAC5J,IAAMA,EAAE,MAAA,KAAW,IAEpCgnC,EAAA,WAAA,CACJY,GACE9P,GACA,MACA1X,EAAmB,UADnB;qBAIC;oBAEC,MAAAjX,IAAOQ,GAASC;oBAChBo9B,EAAA,WAAA,CACJ,IAAI,UAAU;wBACZ,WAAWlP;wBACX,kBAAkB1X,EAAmB,YAD1B;wBAEX,gBAAgBjX,EAAK,MAAA,GAASiX,EAAmB,YADZ;wBAErC,YAAYA,EAAmB,UADkB;wBAEjD,QAAQ;wBACR,MAAAjX;oBAAA;gBAGN;;YAGF,IAAIgZ,EAAA,IAAA,EAAKokB,KAAgB;gBACvB,MAAMzhB,IAAK,IAAI,WAAW3C,EAAA,IAAA,EAAKyK,KAAM;oBACnC,UAAU;oBACV,WAAWkL;gBAAA;gBAGbkP,EAAM,WAAA,CAAYliB,GAAI;oBACpB,UAAUpb,IAAW,QAAQ;gBAAA,IAE/BnK,EAAI,cAAA,IACJA,EAAI,SAAA,CAAU,GAAG,GAAGR,GAAOC,IAEf0K,KAAA;YACd;YAEMouB,KAAA,MAEA,MAAAqO,GAAmBa,EAAM,kBAAkB;QACnD;IAAA,CAAA,IAGK,KAAA,CAAM,CAACrnC;QACNsE,IAAAtE,GACDwiB,EAAA,IAAA,EAAAK,IAAK,KAAA,CAAM7iB,IACXw1B,KACLuS,EAAQ/nC;IAAC;IAGL,MAAAkoC,IAAe,YAAY;QAC/BL,EAAWG;IAAQ,GAClB,MAEGxS,IAAO;QACP/pB,KACKA,CAAAA,IAAA,CAAA,GACT,cAAcy8B,IACd1lB,EAAA,IAAA,EAAKkkB,IAAS,OAAA,CAAQ,CAACzhB,IAAOA,EAAG,OAAA,GAAS;IAAA;IAGrC,OAAAuQ;AACT;AAGF,SAASyS,GACP9P,CAAAA,EACA5rB,CAAAA,EACAjG,CAAAA;IAEA,MAAMyD,IAAW,KAAK,KAAA,CAAOzD,IAAaiG,IAAY;IACtD,OAAO,IAAI,UAAU;QACnB,WAAW4rB;QACX,kBAAkB1X,EAAmB,YAD1B;QAEX,gBAAgB1W;QAChB,YAAAzD;QACA,QAAQ;QACR,MAAM,IAAI,aAAayD,IAAW;IAAC;AAEvC;;;ACxaA;;;;;CAKC,GACD,2BAA2B,GAE3B;AAEA,IAAI,SAAS,QAAQ;AACrB,IAAI,UAAU,QAAQ;AACtB,IAAI,sBACF,AAAC,OAAO,WAAW,cAAc,OAAO,MAAM,CAAC,MAAM,KAAK,WAAY,mCAAmC;GACrG,MAAM,CAAC,MAAM,CAAC,8BAA8B,mCAAmC;GAC/E;AAEN,QAAQ,MAAM,GAAG;AACjB,QAAQ,UAAU,GAAG;AACrB,QAAQ,iBAAiB,GAAG;AAE5B,IAAI,eAAe;AACnB,QAAQ,UAAU,GAAG;AAErB;;;;;;;;;;;;;CAaC,GACD,OAAO,mBAAmB,GAAG;AAE7B,IAAI,CAAC,OAAO,mBAAmB,IAAI,OAAO,YAAY,eAClD,OAAO,QAAQ,KAAK,KAAK,YAC3B,QAAQ,KAAK,CACX;AAKJ,SAAS;IACP,8CAA8C;IAC9C,IAAI;QACF,IAAI,MAAM,IAAI,WAAW;QACzB,IAAI,QAAQ;YAAE,KAAK;gBAAc,OAAO;YAAG;QAAE;QAC7C,OAAO,cAAc,CAAC,OAAO,WAAW,SAAS;QACjD,OAAO,cAAc,CAAC,KAAK;QAC3B,OAAO,IAAI,GAAG,OAAO;IACvB,EAAE,OAAO,GAAG;QACV,OAAO;IACT;AACF;AAEA,OAAO,cAAc,CAAC,OAAO,SAAS,EAAE,UAAU;IAChD,YAAY;IACZ,KAAK;QACH,IAAI,CAAC,OAAO,QAAQ,CAAC,IAAI,GAAG,OAAO;QACnC,OAAO,IAAI,CAAC,MAAM;IACpB;AACF;AAEA,OAAO,cAAc,CAAC,OAAO,SAAS,EAAE,UAAU;IAChD,YAAY;IACZ,KAAK;QACH,IAAI,CAAC,OAAO,QAAQ,CAAC,IAAI,GAAG,OAAO;QACnC,OAAO,IAAI,CAAC,UAAU;IACxB;AACF;AAEA,SAAS,aAAc,MAAM;IAC3B,IAAI,SAAS,cACX,MAAM,IAAI,WAAW,gBAAgB,SAAS;IAEhD,4CAA4C;IAC5C,IAAI,MAAM,IAAI,WAAW;IACzB,OAAO,cAAc,CAAC,KAAK,OAAO,SAAS;IAC3C,OAAO;AACT;AAEA;;;;;;;;CAQC,GAED,SAAS,OAAQ,GAAG,EAAE,gBAAgB,EAAE,MAAM;IAC5C,eAAe;IACf,IAAI,OAAO,QAAQ,UAAU;QAC3B,IAAI,OAAO,qBAAqB,UAC9B,MAAM,IAAI,UACR;QAGJ,OAAO,YAAY;IACrB;IACA,OAAO,KAAK,KAAK,kBAAkB;AACrC;AAEA,OAAO,QAAQ,GAAG,KAAK,kCAAkC;;AAEzD,SAAS,KAAM,KAAK,EAAE,gBAAgB,EAAE,MAAM;IAC5C,IAAI,OAAO,UAAU,UACnB,OAAO,WAAW,OAAO;IAG3B,IAAI,YAAY,MAAM,CAAC,QACrB,OAAO,cAAc;IAGvB,IAAI,SAAS,MACX,MAAM,IAAI,UACR,oHAC0C,OAAO;IAIrD,IAAI,WAAW,OAAO,gBACjB,SAAS,WAAW,MAAM,MAAM,EAAE,cACrC,OAAO,gBAAgB,OAAO,kBAAkB;IAGlD,IAAI,OAAO,sBAAsB,eAC5B,CAAA,WAAW,OAAO,sBAClB,SAAS,WAAW,MAAM,MAAM,EAAE,kBAAkB,GACvD,OAAO,gBAAgB,OAAO,kBAAkB;IAGlD,IAAI,OAAO,UAAU,UACnB,MAAM,IAAI,UACR;IAIJ,IAAI,UAAU,MAAM,OAAO,IAAI,MAAM,OAAO;IAC5C,IAAI,WAAW,QAAQ,YAAY,OACjC,OAAO,OAAO,IAAI,CAAC,SAAS,kBAAkB;IAGhD,IAAI,IAAI,WAAW;IACnB,IAAI,GAAG,OAAO;IAEd,IAAI,OAAO,WAAW,eAAe,OAAO,WAAW,IAAI,QACvD,OAAO,KAAK,CAAC,OAAO,WAAW,CAAC,KAAK,YACvC,OAAO,OAAO,IAAI,CAChB,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC,WAAW,kBAAkB;IAI3D,MAAM,IAAI,UACR,oHAC0C,OAAO;AAErD;AAEA;;;;;;;EAOE,GACF,OAAO,IAAI,GAAG,SAAU,KAAK,EAAE,gBAAgB,EAAE,MAAM;IACrD,OAAO,KAAK,OAAO,kBAAkB;AACvC;AAEA,kFAAkF;AAClF,4CAA4C;AAC5C,OAAO,cAAc,CAAC,OAAO,SAAS,EAAE,WAAW,SAAS;AAC5D,OAAO,cAAc,CAAC,QAAQ;AAE9B,SAAS,WAAY,IAAI;IACvB,IAAI,OAAO,SAAS,UAClB,MAAM,IAAI,UAAU;SACf,IAAI,OAAO,GAChB,MAAM,IAAI,WAAW,gBAAgB,OAAO;AAEhD;AAEA,SAAS,MAAO,IAAI,EAAE,IAAI,EAAE,QAAQ;IAClC,WAAW;IACX,IAAI,QAAQ,GACV,OAAO,aAAa;IAEtB,IAAI,SAAS,WACX,wDAAwD;IACxD,uDAAuD;IACvD,oCAAoC;IACpC,OAAO,OAAO,aAAa,WACvB,aAAa,MAAM,IAAI,CAAC,MAAM,YAC9B,aAAa,MAAM,IAAI,CAAC;IAE9B,OAAO,aAAa;AACtB;AAEA;;;EAGE,GACF,OAAO,KAAK,GAAG,SAAU,IAAI,EAAE,IAAI,EAAE,QAAQ;IAC3C,OAAO,MAAM,MAAM,MAAM;AAC3B;AAEA,SAAS,YAAa,IAAI;IACxB,WAAW;IACX,OAAO,aAAa,OAAO,IAAI,IAAI,QAAQ,QAAQ;AACrD;AAEA;;GAEG,GACH,OAAO,WAAW,GAAG,SAAU,IAAI;IACjC,OAAO,YAAY;AACrB;AACA;;CAEC,GACD,OAAO,eAAe,GAAG,SAAU,IAAI;IACrC,OAAO,YAAY;AACrB;AAEA,SAAS,WAAY,MAAM,EAAE,QAAQ;IACnC,IAAI,OAAO,aAAa,YAAY,aAAa,IAC/C,WAAW;IAGb,IAAI,CAAC,OAAO,UAAU,CAAC,WACrB,MAAM,IAAI,UAAU,uBAAuB;IAG7C,IAAI,SAAS,WAAW,QAAQ,YAAY;IAC5C,IAAI,MAAM,aAAa;IAEvB,IAAI,SAAS,IAAI,KAAK,CAAC,QAAQ;IAE/B,IAAI,WAAW,QACb,2EAA2E;IAC3E,0EAA0E;IAC1E,oCAAoC;IACpC,MAAM,IAAI,KAAK,CAAC,GAAG;IAGrB,OAAO;AACT;AAEA,SAAS,cAAe,KAAK;IAC3B,IAAI,SAAS,MAAM,MAAM,GAAG,IAAI,IAAI,QAAQ,MAAM,MAAM,IAAI;IAC5D,IAAI,MAAM,aAAa;IACvB,IAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,EAC/B,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG;IAEtB,OAAO;AACT;AAEA,SAAS,cAAe,SAAS;IAC/B,IAAI,WAAW,WAAW,aAAa;QACrC,IAAI,OAAO,IAAI,WAAW;QAC1B,OAAO,gBAAgB,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU;IACtE;IACA,OAAO,cAAc;AACvB;AAEA,SAAS,gBAAiB,KAAK,EAAE,UAAU,EAAE,MAAM;IACjD,IAAI,aAAa,KAAK,MAAM,UAAU,GAAG,YACvC,MAAM,IAAI,WAAW;IAGvB,IAAI,MAAM,UAAU,GAAG,aAAc,CAAA,UAAU,CAAA,GAC7C,MAAM,IAAI,WAAW;IAGvB,IAAI;IACJ,IAAI,eAAe,aAAa,WAAW,WACzC,MAAM,IAAI,WAAW;SAChB,IAAI,WAAW,WACpB,MAAM,IAAI,WAAW,OAAO;SAE5B,MAAM,IAAI,WAAW,OAAO,YAAY;IAG1C,4CAA4C;IAC5C,OAAO,cAAc,CAAC,KAAK,OAAO,SAAS;IAE3C,OAAO;AACT;AAEA,SAAS,WAAY,GAAG;IACtB,IAAI,OAAO,QAAQ,CAAC,MAAM;QACxB,IAAI,MAAM,QAAQ,IAAI,MAAM,IAAI;QAChC,IAAI,MAAM,aAAa;QAEvB,IAAI,IAAI,MAAM,KAAK,GACjB,OAAO;QAGT,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG;QACpB,OAAO;IACT;IAEA,IAAI,IAAI,MAAM,KAAK,WAAW;QAC5B,IAAI,OAAO,IAAI,MAAM,KAAK,YAAY,YAAY,IAAI,MAAM,GAC1D,OAAO,aAAa;QAEtB,OAAO,cAAc;IACvB;IAEA,IAAI,IAAI,IAAI,KAAK,YAAY,MAAM,OAAO,CAAC,IAAI,IAAI,GACjD,OAAO,cAAc,IAAI,IAAI;AAEjC;AAEA,SAAS,QAAS,MAAM;IACtB,wEAAwE;IACxE,sDAAsD;IACtD,IAAI,UAAU,cACZ,MAAM,IAAI,WAAW,4DACa,aAAa,QAAQ,CAAC,MAAM;IAEhE,OAAO,SAAS;AAClB;AAEA,SAAS,WAAY,MAAM;IACzB,IAAI,CAAC,UAAU,QACb,SAAS;IAEX,OAAO,OAAO,KAAK,CAAC,CAAC;AACvB;AAEA,OAAO,QAAQ,GAAG,SAAS,SAAU,CAAC;IACpC,OAAO,KAAK,QAAQ,EAAE,SAAS,KAAK,QAClC,MAAM,OAAO,SAAS,CAAC,qDAAqD;;AAChF;AAEA,OAAO,OAAO,GAAG,SAAS,QAAS,CAAC,EAAE,CAAC;IACrC,IAAI,WAAW,GAAG,aAAa,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,UAAU;IACxE,IAAI,WAAW,GAAG,aAAa,IAAI,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,UAAU;IACxE,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,QAAQ,CAAC,IAC1C,MAAM,IAAI,UACR;IAIJ,IAAI,MAAM,GAAG,OAAO;IAEpB,IAAI,IAAI,EAAE,MAAM;IAChB,IAAI,IAAI,EAAE,MAAM;IAEhB,IAAK,IAAI,IAAI,GAAG,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,EAC/C,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE;QACjB,IAAI,CAAC,CAAC,EAAE;QACR,IAAI,CAAC,CAAC,EAAE;QACR;IACF;IAGF,IAAI,IAAI,GAAG,OAAO;IAClB,IAAI,IAAI,GAAG,OAAO;IAClB,OAAO;AACT;AAEA,OAAO,UAAU,GAAG,SAAS,WAAY,QAAQ;IAC/C,OAAQ,OAAO,UAAU,WAAW;QAClC,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QACT;YACE,OAAO;IACX;AACF;AAEA,OAAO,MAAM,GAAG,SAAS,OAAQ,IAAI,EAAE,MAAM;IAC3C,IAAI,CAAC,MAAM,OAAO,CAAC,OACjB,MAAM,IAAI,UAAU;IAGtB,IAAI,KAAK,MAAM,KAAK,GAClB,OAAO,OAAO,KAAK,CAAC;IAGtB,IAAI;IACJ,IAAI,WAAW,WAAW;QACxB,SAAS;QACT,IAAK,IAAI,GAAG,IAAI,KAAK,MAAM,EAAE,EAAE,EAC7B,UAAU,IAAI,CAAC,EAAE,CAAC,MAAM;IAE5B;IAEA,IAAI,SAAS,OAAO,WAAW,CAAC;IAChC,IAAI,MAAM;IACV,IAAK,IAAI,GAAG,IAAI,KAAK,MAAM,EAAE,EAAE,EAAG;QAChC,IAAI,MAAM,IAAI,CAAC,EAAE;QACjB,IAAI,WAAW,KAAK;YAClB,IAAI,MAAM,IAAI,MAAM,GAAG,OAAO,MAAM,EAClC,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ;iBAE9B,WAAW,SAAS,CAAC,GAAG,CAAC,IAAI,CAC3B,QACA,KACA;eAGC,IAAI,CAAC,OAAO,QAAQ,CAAC,MAC1B,MAAM,IAAI,UAAU;aAEpB,IAAI,IAAI,CAAC,QAAQ;QAEnB,OAAO,IAAI,MAAM;IACnB;IACA,OAAO;AACT;AAEA,SAAS,WAAY,MAAM,EAAE,QAAQ;IACnC,IAAI,OAAO,QAAQ,CAAC,SAClB,OAAO,OAAO,MAAM;IAEtB,IAAI,YAAY,MAAM,CAAC,WAAW,WAAW,QAAQ,cACnD,OAAO,OAAO,UAAU;IAE1B,IAAI,OAAO,WAAW,UACpB,MAAM,IAAI,UACR,6FACmB,OAAO;IAI9B,IAAI,MAAM,OAAO,MAAM;IACvB,IAAI,YAAa,UAAU,MAAM,GAAG,KAAK,SAAS,CAAC,EAAE,KAAK;IAC1D,IAAI,CAAC,aAAa,QAAQ,GAAG,OAAO;IAEpC,oCAAoC;IACpC,IAAI,cAAc;IAClB,OACE,OAAQ;QACN,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QACT,KAAK;QACL,KAAK;YACH,OAAO,YAAY,QAAQ,MAAM;QACnC,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO,MAAM;QACf,KAAK;YACH,OAAO,QAAQ;QACjB,KAAK;YACH,OAAO,cAAc,QAAQ,MAAM;QACrC;YACE,IAAI,aACF,OAAO,YAAY,KAAK,YAAY,QAAQ,MAAM,CAAC,cAAc;;YAEnE,WAAW,AAAC,CAAA,KAAK,QAAO,EAAG,WAAW;YACtC,cAAc;IAClB;AAEJ;AACA,OAAO,UAAU,GAAG;AAEpB,SAAS,aAAc,QAAQ,EAAE,KAAK,EAAE,GAAG;IACzC,IAAI,cAAc;IAElB,4EAA4E;IAC5E,6BAA6B;IAE7B,2EAA2E;IAC3E,mEAAmE;IACnE,8DAA8D;IAC9D,kEAAkE;IAClE,IAAI,UAAU,aAAa,QAAQ,GACjC,QAAQ;IAEV,6EAA6E;IAC7E,uBAAuB;IACvB,IAAI,QAAQ,IAAI,CAAC,MAAM,EACrB,OAAO;IAGT,IAAI,QAAQ,aAAa,MAAM,IAAI,CAAC,MAAM,EACxC,MAAM,IAAI,CAAC,MAAM;IAGnB,IAAI,OAAO,GACT,OAAO;IAGT,0EAA0E;IAC1E,SAAS;IACT,WAAW;IAEX,IAAI,OAAO,OACT,OAAO;IAGT,IAAI,CAAC,UAAU,WAAW;IAE1B,MAAO,KACL,OAAQ;QACN,KAAK;YACH,OAAO,SAAS,IAAI,EAAE,OAAO;QAE/B,KAAK;QACL,KAAK;YACH,OAAO,UAAU,IAAI,EAAE,OAAO;QAEhC,KAAK;YACH,OAAO,WAAW,IAAI,EAAE,OAAO;QAEjC,KAAK;QACL,KAAK;YACH,OAAO,YAAY,IAAI,EAAE,OAAO;QAElC,KAAK;YACH,OAAO,YAAY,IAAI,EAAE,OAAO;QAElC,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO,aAAa,IAAI,EAAE,OAAO;QAEnC;YACE,IAAI,aAAa,MAAM,IAAI,UAAU,uBAAuB;YAC5D,WAAW,AAAC,CAAA,WAAW,EAAC,EAAG,WAAW;YACtC,cAAc;IAClB;AAEJ;AAEA,+EAA+E;AAC/E,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,yEAAyE;AACzE,mDAAmD;AACnD,OAAO,SAAS,CAAC,SAAS,GAAG;AAE7B,SAAS,KAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACpB,IAAI,IAAI,CAAC,CAAC,EAAE;IACZ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;IACX,CAAC,CAAC,EAAE,GAAG;AACT;AAEA,OAAO,SAAS,CAAC,MAAM,GAAG,SAAS;IACjC,IAAI,MAAM,IAAI,CAAC,MAAM;IACrB,IAAI,MAAM,MAAM,GACd,MAAM,IAAI,WAAW;IAEvB,IAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,EAC5B,KAAK,IAAI,EAAE,GAAG,IAAI;IAEpB,OAAO,IAAI;AACb;AAEA,OAAO,SAAS,CAAC,MAAM,GAAG,SAAS;IACjC,IAAI,MAAM,IAAI,CAAC,MAAM;IACrB,IAAI,MAAM,MAAM,GACd,MAAM,IAAI,WAAW;IAEvB,IAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,EAAG;QAC/B,KAAK,IAAI,EAAE,GAAG,IAAI;QAClB,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI;IACxB;IACA,OAAO,IAAI;AACb;AAEA,OAAO,SAAS,CAAC,MAAM,GAAG,SAAS;IACjC,IAAI,MAAM,IAAI,CAAC,MAAM;IACrB,IAAI,MAAM,MAAM,GACd,MAAM,IAAI,WAAW;IAEvB,IAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,EAAG;QAC/B,KAAK,IAAI,EAAE,GAAG,IAAI;QAClB,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI;QACtB,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI;QACtB,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI;IACxB;IACA,OAAO,IAAI;AACb;AAEA,OAAO,SAAS,CAAC,QAAQ,GAAG,SAAS;IACnC,IAAI,SAAS,IAAI,CAAC,MAAM;IACxB,IAAI,WAAW,GAAG,OAAO;IACzB,IAAI,UAAU,MAAM,KAAK,GAAG,OAAO,UAAU,IAAI,EAAE,GAAG;IACtD,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE;AAClC;AAEA,OAAO,SAAS,CAAC,cAAc,GAAG,OAAO,SAAS,CAAC,QAAQ;AAE3D,OAAO,SAAS,CAAC,MAAM,GAAG,SAAS,OAAQ,CAAC;IAC1C,IAAI,CAAC,OAAO,QAAQ,CAAC,IAAI,MAAM,IAAI,UAAU;IAC7C,IAAI,IAAI,KAAK,GAAG,OAAO;IACvB,OAAO,OAAO,OAAO,CAAC,IAAI,EAAE,OAAO;AACrC;AAEA,OAAO,SAAS,CAAC,OAAO,GAAG,SAAS;IAClC,IAAI,MAAM;IACV,IAAI,MAAM,QAAQ,iBAAiB;IACnC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,KAAK,OAAO,CAAC,WAAW,OAAO,IAAI;IACjE,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,OAAO;IAC9B,OAAO,aAAa,MAAM;AAC5B;AACA,IAAI,qBACF,OAAO,SAAS,CAAC,oBAAoB,GAAG,OAAO,SAAS,CAAC,OAAO;AAGlE,OAAO,SAAS,CAAC,OAAO,GAAG,SAAS,QAAS,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO;IACjF,IAAI,WAAW,QAAQ,aACrB,SAAS,OAAO,IAAI,CAAC,QAAQ,OAAO,MAAM,EAAE,OAAO,UAAU;IAE/D,IAAI,CAAC,OAAO,QAAQ,CAAC,SACnB,MAAM,IAAI,UACR,mFACoB,OAAO;IAI/B,IAAI,UAAU,WACZ,QAAQ;IAEV,IAAI,QAAQ,WACV,MAAM,SAAS,OAAO,MAAM,GAAG;IAEjC,IAAI,cAAc,WAChB,YAAY;IAEd,IAAI,YAAY,WACd,UAAU,IAAI,CAAC,MAAM;IAGvB,IAAI,QAAQ,KAAK,MAAM,OAAO,MAAM,IAAI,YAAY,KAAK,UAAU,IAAI,CAAC,MAAM,EAC5E,MAAM,IAAI,WAAW;IAGvB,IAAI,aAAa,WAAW,SAAS,KACnC,OAAO;IAET,IAAI,aAAa,SACf,OAAO;IAET,IAAI,SAAS,KACX,OAAO;IAGT,WAAW;IACX,SAAS;IACT,eAAe;IACf,aAAa;IAEb,IAAI,IAAI,KAAK,QAAQ,OAAO;IAE5B,IAAI,IAAI,UAAU;IAClB,IAAI,IAAI,MAAM;IACd,IAAI,MAAM,KAAK,GAAG,CAAC,GAAG;IAEtB,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,WAAW;IACrC,IAAI,aAAa,OAAO,KAAK,CAAC,OAAO;IAErC,IAAK,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE,EACzB,IAAI,QAAQ,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,EAAE;QACjC,IAAI,QAAQ,CAAC,EAAE;QACf,IAAI,UAAU,CAAC,EAAE;QACjB;IACF;IAGF,IAAI,IAAI,GAAG,OAAO;IAClB,IAAI,IAAI,GAAG,OAAO;IAClB,OAAO;AACT;AAEA,+EAA+E;AAC/E,oEAAoE;AACpE,EAAE;AACF,aAAa;AACb,gCAAgC;AAChC,sCAAsC;AACtC,qEAAqE;AACrE,iEAAiE;AACjE,kDAAkD;AAClD,SAAS,qBAAsB,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG;IACnE,8BAA8B;IAC9B,IAAI,OAAO,MAAM,KAAK,GAAG,OAAO;IAEhC,uBAAuB;IACvB,IAAI,OAAO,eAAe,UAAU;QAClC,WAAW;QACX,aAAa;IACf,OAAO,IAAI,aAAa,YACtB,aAAa;SACR,IAAI,aAAa,aACtB,aAAa;IAEf,aAAa,CAAC,WAAW,oBAAoB;;IAC7C,IAAI,YAAY,aACd,4EAA4E;IAC5E,aAAa,MAAM,IAAK,OAAO,MAAM,GAAG;IAG1C,0EAA0E;IAC1E,IAAI,aAAa,GAAG,aAAa,OAAO,MAAM,GAAG;IACjD,IAAI,cAAc,OAAO,MAAM,EAAE;QAC/B,IAAI,KAAK,OAAO;aACX,aAAa,OAAO,MAAM,GAAG;IACpC,OAAO,IAAI,aAAa,GAAG;QACzB,IAAI,KAAK,aAAa;aACjB,OAAO;IACd;IAEA,gBAAgB;IAChB,IAAI,OAAO,QAAQ,UACjB,MAAM,OAAO,IAAI,CAAC,KAAK;IAGzB,iEAAiE;IACjE,IAAI,OAAO,QAAQ,CAAC,MAAM;QACxB,6DAA6D;QAC7D,IAAI,IAAI,MAAM,KAAK,GACjB,OAAO;QAET,OAAO,aAAa,QAAQ,KAAK,YAAY,UAAU;IACzD,OAAO,IAAI,OAAO,QAAQ,UAAU;QAClC,MAAM,MAAM,KAAK,kCAAkC;;QACnD,IAAI,OAAO,WAAW,SAAS,CAAC,OAAO,KAAK,YAAY;YACtD,IAAI,KACF,OAAO,WAAW,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK;iBAEtD,OAAO,WAAW,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,KAAK;QAE9D;QACA,OAAO,aAAa,QAAQ;YAAC;SAAI,EAAE,YAAY,UAAU;IAC3D;IAEA,MAAM,IAAI,UAAU;AACtB;AAEA,SAAS,aAAc,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG;IACxD,IAAI,YAAY;IAChB,IAAI,YAAY,IAAI,MAAM;IAC1B,IAAI,YAAY,IAAI,MAAM;IAE1B,IAAI,aAAa,WAAW;QAC1B,WAAW,OAAO,UAAU,WAAW;QACvC,IAAI,aAAa,UAAU,aAAa,WACpC,aAAa,aAAa,aAAa,YAAY;YACrD,IAAI,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,GACjC,OAAO;YAET,YAAY;YACZ,aAAa;YACb,aAAa;YACb,cAAc;QAChB;IACF;IAEA,SAAS,KAAM,GAAG,EAAE,CAAC;QACnB,IAAI,cAAc,GAChB,OAAO,GAAG,CAAC,EAAE;aAEb,OAAO,IAAI,YAAY,CAAC,IAAI;IAEhC;IAEA,IAAI;IACJ,IAAI,KAAK;QACP,IAAI,aAAa;QACjB,IAAK,IAAI,YAAY,IAAI,WAAW,IAClC,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,eAAe,KAAK,IAAI,IAAI,aAAa;YACtE,IAAI,eAAe,IAAI,aAAa;YACpC,IAAI,IAAI,aAAa,MAAM,WAAW,OAAO,aAAa;QAC5D,OAAO;YACL,IAAI,eAAe,IAAI,KAAK,IAAI;YAChC,aAAa;QACf;IAEJ,OAAO;QACL,IAAI,aAAa,YAAY,WAAW,aAAa,YAAY;QACjE,IAAK,IAAI,YAAY,KAAK,GAAG,IAAK;YAChC,IAAI,QAAQ;YACZ,IAAK,IAAI,IAAI,GAAG,IAAI,WAAW,IAC7B,IAAI,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,IAAI;gBACrC,QAAQ;gBACR;YACF;YAEF,IAAI,OAAO,OAAO;QACpB;IACF;IAEA,OAAO;AACT;AAEA,OAAO,SAAS,CAAC,QAAQ,GAAG,SAAS,SAAU,GAAG,EAAE,UAAU,EAAE,QAAQ;IACtE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,YAAY,cAAc;AACrD;AAEA,OAAO,SAAS,CAAC,OAAO,GAAG,SAAS,QAAS,GAAG,EAAE,UAAU,EAAE,QAAQ;IACpE,OAAO,qBAAqB,IAAI,EAAE,KAAK,YAAY,UAAU;AAC/D;AAEA,OAAO,SAAS,CAAC,WAAW,GAAG,SAAS,YAAa,GAAG,EAAE,UAAU,EAAE,QAAQ;IAC5E,OAAO,qBAAqB,IAAI,EAAE,KAAK,YAAY,UAAU;AAC/D;AAEA,SAAS,SAAU,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC5C,SAAS,OAAO,WAAW;IAC3B,IAAI,YAAY,IAAI,MAAM,GAAG;IAC7B,IAAI,CAAC,QACH,SAAS;SACJ;QACL,SAAS,OAAO;QAChB,IAAI,SAAS,WACX,SAAS;IAEb;IAEA,IAAI,SAAS,OAAO,MAAM;IAE1B,IAAI,SAAS,SAAS,GACpB,SAAS,SAAS;IAEpB,IAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,EAAG;QAC/B,IAAI,SAAS,SAAS,OAAO,MAAM,CAAC,IAAI,GAAG,IAAI;QAC/C,IAAI,YAAY,SAAS,OAAO;QAChC,GAAG,CAAC,SAAS,EAAE,GAAG;IACpB;IACA,OAAO;AACT;AAEA,SAAS,UAAW,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC7C,OAAO,WAAW,YAAY,QAAQ,IAAI,MAAM,GAAG,SAAS,KAAK,QAAQ;AAC3E;AAEA,SAAS,WAAY,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9C,OAAO,WAAW,aAAa,SAAS,KAAK,QAAQ;AACvD;AAEA,SAAS,YAAa,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC/C,OAAO,WAAW,cAAc,SAAS,KAAK,QAAQ;AACxD;AAEA,SAAS,UAAW,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC7C,OAAO,WAAW,eAAe,QAAQ,IAAI,MAAM,GAAG,SAAS,KAAK,QAAQ;AAC9E;AAEA,OAAO,SAAS,CAAC,KAAK,GAAG,SAAS,MAAO,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;IACvE,uBAAuB;IACvB,IAAI,WAAW,WAAW;QACxB,WAAW;QACX,SAAS,IAAI,CAAC,MAAM;QACpB,SAAS;IACX,iCAAiC;IACjC,OAAO,IAAI,WAAW,aAAa,OAAO,WAAW,UAAU;QAC7D,WAAW;QACX,SAAS,IAAI,CAAC,MAAM;QACpB,SAAS;IACX,qDAAqD;IACrD,OAAO,IAAI,SAAS,SAAS;QAC3B,SAAS,WAAW;QACpB,IAAI,SAAS,SAAS;YACpB,SAAS,WAAW;YACpB,IAAI,aAAa,WAAW,WAAW;QACzC,OAAO;YACL,WAAW;YACX,SAAS;QACX;IACF,OACE,MAAM,IAAI,MACR;IAIJ,IAAI,YAAY,IAAI,CAAC,MAAM,GAAG;IAC9B,IAAI,WAAW,aAAa,SAAS,WAAW,SAAS;IAEzD,IAAI,AAAC,OAAO,MAAM,GAAG,KAAM,CAAA,SAAS,KAAK,SAAS,CAAA,KAAO,SAAS,IAAI,CAAC,MAAM,EAC3E,MAAM,IAAI,WAAW;IAGvB,IAAI,CAAC,UAAU,WAAW;IAE1B,IAAI,cAAc;IAClB,OACE,OAAQ;QACN,KAAK;YACH,OAAO,SAAS,IAAI,EAAE,QAAQ,QAAQ;QAExC,KAAK;QACL,KAAK;YACH,OAAO,UAAU,IAAI,EAAE,QAAQ,QAAQ;QAEzC,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO,WAAW,IAAI,EAAE,QAAQ,QAAQ;QAE1C,KAAK;YACH,2DAA2D;YAC3D,OAAO,YAAY,IAAI,EAAE,QAAQ,QAAQ;QAE3C,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO,UAAU,IAAI,EAAE,QAAQ,QAAQ;QAEzC;YACE,IAAI,aAAa,MAAM,IAAI,UAAU,uBAAuB;YAC5D,WAAW,AAAC,CAAA,KAAK,QAAO,EAAG,WAAW;YACtC,cAAc;IAClB;AAEJ;AAEA,OAAO,SAAS,CAAC,MAAM,GAAG,SAAS;IACjC,OAAO;QACL,MAAM;QACN,MAAM,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;IACtD;AACF;AAEA,SAAS,YAAa,GAAG,EAAE,KAAK,EAAE,GAAG;IACnC,IAAI,UAAU,KAAK,QAAQ,IAAI,MAAM,EACnC,OAAO,OAAO,aAAa,CAAC;SAE5B,OAAO,OAAO,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO;AAEjD;AAEA,SAAS,UAAW,GAAG,EAAE,KAAK,EAAE,GAAG;IACjC,MAAM,KAAK,GAAG,CAAC,IAAI,MAAM,EAAE;IAC3B,IAAI,MAAM,EAAE;IAEZ,IAAI,IAAI;IACR,MAAO,IAAI,IAAK;QACd,IAAI,YAAY,GAAG,CAAC,EAAE;QACtB,IAAI,YAAY;QAChB,IAAI,mBAAmB,AAAC,YAAY,OAChC,IACA,AAAC,YAAY,OACT,IACA,AAAC,YAAY,OACT,IACA;QAEZ,IAAI,IAAI,oBAAoB,KAAK;YAC/B,IAAI,YAAY,WAAW,YAAY;YAEvC,OAAQ;gBACN,KAAK;oBACH,IAAI,YAAY,MACd,YAAY;oBAEd;gBACF,KAAK;oBACH,aAAa,GAAG,CAAC,IAAI,EAAE;oBACvB,IAAI,AAAC,CAAA,aAAa,IAAG,MAAO,MAAM;wBAChC,gBAAgB,AAAC,CAAA,YAAY,IAAG,KAAM,MAAO,aAAa;wBAC1D,IAAI,gBAAgB,MAClB,YAAY;oBAEhB;oBACA;gBACF,KAAK;oBACH,aAAa,GAAG,CAAC,IAAI,EAAE;oBACvB,YAAY,GAAG,CAAC,IAAI,EAAE;oBACtB,IAAI,AAAC,CAAA,aAAa,IAAG,MAAO,QAAQ,AAAC,CAAA,YAAY,IAAG,MAAO,MAAM;wBAC/D,gBAAgB,AAAC,CAAA,YAAY,GAAE,KAAM,MAAM,AAAC,CAAA,aAAa,IAAG,KAAM,MAAO,YAAY;wBACrF,IAAI,gBAAgB,SAAU,CAAA,gBAAgB,UAAU,gBAAgB,MAAK,GAC3E,YAAY;oBAEhB;oBACA;gBACF,KAAK;oBACH,aAAa,GAAG,CAAC,IAAI,EAAE;oBACvB,YAAY,GAAG,CAAC,IAAI,EAAE;oBACtB,aAAa,GAAG,CAAC,IAAI,EAAE;oBACvB,IAAI,AAAC,CAAA,aAAa,IAAG,MAAO,QAAQ,AAAC,CAAA,YAAY,IAAG,MAAO,QAAQ,AAAC,CAAA,aAAa,IAAG,MAAO,MAAM;wBAC/F,gBAAgB,AAAC,CAAA,YAAY,GAAE,KAAM,OAAO,AAAC,CAAA,aAAa,IAAG,KAAM,MAAM,AAAC,CAAA,YAAY,IAAG,KAAM,MAAO,aAAa;wBACnH,IAAI,gBAAgB,UAAU,gBAAgB,UAC5C,YAAY;oBAEhB;YACJ;QACF;QAEA,IAAI,cAAc,MAAM;YACtB,oDAAoD;YACpD,oDAAoD;YACpD,YAAY;YACZ,mBAAmB;QACrB,OAAO,IAAI,YAAY,QAAQ;YAC7B,yCAAyC;YACzC,aAAa;YACb,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ;YACpC,YAAY,SAAS,YAAY;QACnC;QAEA,IAAI,IAAI,CAAC;QACT,KAAK;IACP;IAEA,OAAO,sBAAsB;AAC/B;AAEA,wEAAwE;AACxE,iDAAiD;AACjD,qCAAqC;AACrC,IAAI,uBAAuB;AAE3B,SAAS,sBAAuB,UAAU;IACxC,IAAI,MAAM,WAAW,MAAM;IAC3B,IAAI,OAAO,sBACT,OAAO,OAAO,YAAY,CAAC,KAAK,CAAC,QAAQ,YAAY,sBAAsB;;IAG7E,wDAAwD;IACxD,IAAI,MAAM;IACV,IAAI,IAAI;IACR,MAAO,IAAI,IACT,OAAO,OAAO,YAAY,CAAC,KAAK,CAC9B,QACA,WAAW,KAAK,CAAC,GAAG,KAAK;IAG7B,OAAO;AACT;AAEA,SAAS,WAAY,GAAG,EAAE,KAAK,EAAE,GAAG;IAClC,IAAI,MAAM;IACV,MAAM,KAAK,GAAG,CAAC,IAAI,MAAM,EAAE;IAE3B,IAAK,IAAI,IAAI,OAAO,IAAI,KAAK,EAAE,EAC7B,OAAO,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG;IAEtC,OAAO;AACT;AAEA,SAAS,YAAa,GAAG,EAAE,KAAK,EAAE,GAAG;IACnC,IAAI,MAAM;IACV,MAAM,KAAK,GAAG,CAAC,IAAI,MAAM,EAAE;IAE3B,IAAK,IAAI,IAAI,OAAO,IAAI,KAAK,EAAE,EAC7B,OAAO,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE;IAEnC,OAAO;AACT;AAEA,SAAS,SAAU,GAAG,EAAE,KAAK,EAAE,GAAG;IAChC,IAAI,MAAM,IAAI,MAAM;IAEpB,IAAI,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACjC,IAAI,CAAC,OAAO,MAAM,KAAK,MAAM,KAAK,MAAM;IAExC,IAAI,MAAM;IACV,IAAK,IAAI,IAAI,OAAO,IAAI,KAAK,EAAE,EAC7B,OAAO,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;IAEpC,OAAO;AACT;AAEA,SAAS,aAAc,GAAG,EAAE,KAAK,EAAE,GAAG;IACpC,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO;IAC7B,IAAI,MAAM;IACV,4EAA4E;IAC5E,IAAK,IAAI,IAAI,GAAG,IAAI,MAAM,MAAM,GAAG,GAAG,KAAK,EACzC,OAAO,OAAO,YAAY,CAAC,KAAK,CAAC,EAAE,GAAI,KAAK,CAAC,IAAI,EAAE,GAAG;IAExD,OAAO;AACT;AAEA,OAAO,SAAS,CAAC,KAAK,GAAG,SAAS,MAAO,KAAK,EAAE,GAAG;IACjD,IAAI,MAAM,IAAI,CAAC,MAAM;IACrB,QAAQ,CAAC,CAAC;IACV,MAAM,QAAQ,YAAY,MAAM,CAAC,CAAC;IAElC,IAAI,QAAQ,GAAG;QACb,SAAS;QACT,IAAI,QAAQ,GAAG,QAAQ;IACzB,OAAO,IAAI,QAAQ,KACjB,QAAQ;IAGV,IAAI,MAAM,GAAG;QACX,OAAO;QACP,IAAI,MAAM,GAAG,MAAM;IACrB,OAAO,IAAI,MAAM,KACf,MAAM;IAGR,IAAI,MAAM,OAAO,MAAM;IAEvB,IAAI,SAAS,IAAI,CAAC,QAAQ,CAAC,OAAO;IAClC,4CAA4C;IAC5C,OAAO,cAAc,CAAC,QAAQ,OAAO,SAAS;IAE9C,OAAO;AACT;AAEA;;CAEC,GACD,SAAS,YAAa,MAAM,EAAE,GAAG,EAAE,MAAM;IACvC,IAAI,AAAC,SAAS,MAAO,KAAK,SAAS,GAAG,MAAM,IAAI,WAAW;IAC3D,IAAI,SAAS,MAAM,QAAQ,MAAM,IAAI,WAAW;AAClD;AAEA,OAAO,SAAS,CAAC,UAAU,GAC3B,OAAO,SAAS,CAAC,UAAU,GAAG,SAAS,WAAY,MAAM,EAAE,UAAU,EAAE,QAAQ;IAC7E,SAAS,WAAW;IACpB,aAAa,eAAe;IAC5B,IAAI,CAAC,UAAU,YAAY,QAAQ,YAAY,IAAI,CAAC,MAAM;IAE1D,IAAI,MAAM,IAAI,CAAC,OAAO;IACtB,IAAI,MAAM;IACV,IAAI,IAAI;IACR,MAAO,EAAE,IAAI,cAAe,CAAA,OAAO,KAAI,EACrC,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG;IAG5B,OAAO;AACT;AAEA,OAAO,SAAS,CAAC,UAAU,GAC3B,OAAO,SAAS,CAAC,UAAU,GAAG,SAAS,WAAY,MAAM,EAAE,UAAU,EAAE,QAAQ;IAC7E,SAAS,WAAW;IACpB,aAAa,eAAe;IAC5B,IAAI,CAAC,UACH,YAAY,QAAQ,YAAY,IAAI,CAAC,MAAM;IAG7C,IAAI,MAAM,IAAI,CAAC,SAAS,EAAE,WAAW;IACrC,IAAI,MAAM;IACV,MAAO,aAAa,KAAM,CAAA,OAAO,KAAI,EACnC,OAAO,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG;IAGvC,OAAO;AACT;AAEA,OAAO,SAAS,CAAC,SAAS,GAC1B,OAAO,SAAS,CAAC,SAAS,GAAG,SAAS,UAAW,MAAM,EAAE,QAAQ;IAC/D,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IACjD,OAAO,IAAI,CAAC,OAAO;AACrB;AAEA,OAAO,SAAS,CAAC,YAAY,GAC7B,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,MAAM,EAAE,QAAQ;IACrE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IACjD,OAAO,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,SAAS,EAAE,IAAI;AAC7C;AAEA,OAAO,SAAS,CAAC,YAAY,GAC7B,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,MAAM,EAAE,QAAQ;IACrE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IACjD,OAAO,AAAC,IAAI,CAAC,OAAO,IAAI,IAAK,IAAI,CAAC,SAAS,EAAE;AAC/C;AAEA,OAAO,SAAS,CAAC,YAAY,GAC7B,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,MAAM,EAAE,QAAQ;IACrE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IAEjD,OAAO,AAAC,CAAA,AAAC,IAAI,CAAC,OAAO,GAChB,IAAI,CAAC,SAAS,EAAE,IAAI,IACpB,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IACtB,IAAI,CAAC,SAAS,EAAE,GAAG;AAC1B;AAEA,OAAO,SAAS,CAAC,YAAY,GAC7B,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,MAAM,EAAE,QAAQ;IACrE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IAEjD,OAAO,AAAC,IAAI,CAAC,OAAO,GAAG,YACpB,CAAA,AAAC,IAAI,CAAC,SAAS,EAAE,IAAI,KACrB,IAAI,CAAC,SAAS,EAAE,IAAI,IACrB,IAAI,CAAC,SAAS,EAAE,AAAD;AACnB;AAEA,OAAO,SAAS,CAAC,SAAS,GAAG,SAAS,UAAW,MAAM,EAAE,UAAU,EAAE,QAAQ;IAC3E,SAAS,WAAW;IACpB,aAAa,eAAe;IAC5B,IAAI,CAAC,UAAU,YAAY,QAAQ,YAAY,IAAI,CAAC,MAAM;IAE1D,IAAI,MAAM,IAAI,CAAC,OAAO;IACtB,IAAI,MAAM;IACV,IAAI,IAAI;IACR,MAAO,EAAE,IAAI,cAAe,CAAA,OAAO,KAAI,EACrC,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG;IAE5B,OAAO;IAEP,IAAI,OAAO,KAAK,OAAO,KAAK,GAAG,CAAC,GAAG,IAAI;IAEvC,OAAO;AACT;AAEA,OAAO,SAAS,CAAC,SAAS,GAAG,SAAS,UAAW,MAAM,EAAE,UAAU,EAAE,QAAQ;IAC3E,SAAS,WAAW;IACpB,aAAa,eAAe;IAC5B,IAAI,CAAC,UAAU,YAAY,QAAQ,YAAY,IAAI,CAAC,MAAM;IAE1D,IAAI,IAAI;IACR,IAAI,MAAM;IACV,IAAI,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE;IAC5B,MAAO,IAAI,KAAM,CAAA,OAAO,KAAI,EAC1B,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG;IAE9B,OAAO;IAEP,IAAI,OAAO,KAAK,OAAO,KAAK,GAAG,CAAC,GAAG,IAAI;IAEvC,OAAO;AACT;AAEA,OAAO,SAAS,CAAC,QAAQ,GAAG,SAAS,SAAU,MAAM,EAAE,QAAQ;IAC7D,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IACjD,IAAI,CAAE,CAAA,IAAI,CAAC,OAAO,GAAG,IAAG,GAAI,OAAQ,IAAI,CAAC,OAAO;IAChD,OAAQ,AAAC,CAAA,OAAO,IAAI,CAAC,OAAO,GAAG,CAAA,IAAK;AACtC;AAEA,OAAO,SAAS,CAAC,WAAW,GAAG,SAAS,YAAa,MAAM,EAAE,QAAQ;IACnE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IACjD,IAAI,MAAM,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,SAAS,EAAE,IAAI;IAC9C,OAAO,AAAC,MAAM,SAAU,MAAM,aAAa;AAC7C;AAEA,OAAO,SAAS,CAAC,WAAW,GAAG,SAAS,YAAa,MAAM,EAAE,QAAQ;IACnE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IACjD,IAAI,MAAM,IAAI,CAAC,SAAS,EAAE,GAAI,IAAI,CAAC,OAAO,IAAI;IAC9C,OAAO,AAAC,MAAM,SAAU,MAAM,aAAa;AAC7C;AAEA,OAAO,SAAS,CAAC,WAAW,GAAG,SAAS,YAAa,MAAM,EAAE,QAAQ;IACnE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IAEjD,OAAO,AAAC,IAAI,CAAC,OAAO,GACjB,IAAI,CAAC,SAAS,EAAE,IAAI,IACpB,IAAI,CAAC,SAAS,EAAE,IAAI,KACpB,IAAI,CAAC,SAAS,EAAE,IAAI;AACzB;AAEA,OAAO,SAAS,CAAC,WAAW,GAAG,SAAS,YAAa,MAAM,EAAE,QAAQ;IACnE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IAEjD,OAAO,AAAC,IAAI,CAAC,OAAO,IAAI,KACrB,IAAI,CAAC,SAAS,EAAE,IAAI,KACpB,IAAI,CAAC,SAAS,EAAE,IAAI,IACpB,IAAI,CAAC,SAAS,EAAE;AACrB;AAEA,OAAO,SAAS,CAAC,WAAW,GAAG,SAAS,YAAa,MAAM,EAAE,QAAQ;IACnE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IACjD,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,QAAQ,MAAM,IAAI;AAC9C;AAEA,OAAO,SAAS,CAAC,WAAW,GAAG,SAAS,YAAa,MAAM,EAAE,QAAQ;IACnE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IACjD,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,QAAQ,OAAO,IAAI;AAC/C;AAEA,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,MAAM,EAAE,QAAQ;IACrE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IACjD,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,QAAQ,MAAM,IAAI;AAC9C;AAEA,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,MAAM,EAAE,QAAQ;IACrE,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,YAAY,QAAQ,GAAG,IAAI,CAAC,MAAM;IACjD,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,QAAQ,OAAO,IAAI;AAC/C;AAEA,SAAS,SAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;IAClD,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,MAAM,IAAI,UAAU;IAC/C,IAAI,QAAQ,OAAO,QAAQ,KAAK,MAAM,IAAI,WAAW;IACrD,IAAI,SAAS,MAAM,IAAI,MAAM,EAAE,MAAM,IAAI,WAAW;AACtD;AAEA,OAAO,SAAS,CAAC,WAAW,GAC5B,OAAO,SAAS,CAAC,WAAW,GAAG,SAAS,YAAa,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ;IACtF,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,aAAa,eAAe;IAC5B,IAAI,CAAC,UAAU;QACb,IAAI,WAAW,KAAK,GAAG,CAAC,GAAG,IAAI,cAAc;QAC7C,SAAS,IAAI,EAAE,OAAO,QAAQ,YAAY,UAAU;IACtD;IAEA,IAAI,MAAM;IACV,IAAI,IAAI;IACR,IAAI,CAAC,OAAO,GAAG,QAAQ;IACvB,MAAO,EAAE,IAAI,cAAe,CAAA,OAAO,KAAI,EACrC,IAAI,CAAC,SAAS,EAAE,GAAG,AAAC,QAAQ,MAAO;IAGrC,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,WAAW,GAC5B,OAAO,SAAS,CAAC,WAAW,GAAG,SAAS,YAAa,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ;IACtF,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,aAAa,eAAe;IAC5B,IAAI,CAAC,UAAU;QACb,IAAI,WAAW,KAAK,GAAG,CAAC,GAAG,IAAI,cAAc;QAC7C,SAAS,IAAI,EAAE,OAAO,QAAQ,YAAY,UAAU;IACtD;IAEA,IAAI,IAAI,aAAa;IACrB,IAAI,MAAM;IACV,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ;IAC3B,MAAO,EAAE,KAAK,KAAM,CAAA,OAAO,KAAI,EAC7B,IAAI,CAAC,SAAS,EAAE,GAAG,AAAC,QAAQ,MAAO;IAGrC,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,UAAU,GAC3B,OAAO,SAAS,CAAC,UAAU,GAAG,SAAS,WAAY,KAAK,EAAE,MAAM,EAAE,QAAQ;IACxE,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,MAAM;IACtD,IAAI,CAAC,OAAO,GAAI,QAAQ;IACxB,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,aAAa,GAC9B,OAAO,SAAS,CAAC,aAAa,GAAG,SAAS,cAAe,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC9E,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,QAAQ;IACxD,IAAI,CAAC,OAAO,GAAI,QAAQ;IACxB,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,aAAa,GAC9B,OAAO,SAAS,CAAC,aAAa,GAAG,SAAS,cAAe,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC9E,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,QAAQ;IACxD,IAAI,CAAC,OAAO,GAAI,UAAU;IAC1B,IAAI,CAAC,SAAS,EAAE,GAAI,QAAQ;IAC5B,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,aAAa,GAC9B,OAAO,SAAS,CAAC,aAAa,GAAG,SAAS,cAAe,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC9E,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,YAAY;IAC5D,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,IAAI,CAAC,OAAO,GAAI,QAAQ;IACxB,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,aAAa,GAC9B,OAAO,SAAS,CAAC,aAAa,GAAG,SAAS,cAAe,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC9E,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,YAAY;IAC5D,IAAI,CAAC,OAAO,GAAI,UAAU;IAC1B,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,IAAI,CAAC,SAAS,EAAE,GAAI,QAAQ;IAC5B,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,UAAU,GAAG,SAAS,WAAY,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ;IACpF,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU;QACb,IAAI,QAAQ,KAAK,GAAG,CAAC,GAAG,AAAC,IAAI,aAAc;QAE3C,SAAS,IAAI,EAAE,OAAO,QAAQ,YAAY,QAAQ,GAAG,CAAC;IACxD;IAEA,IAAI,IAAI;IACR,IAAI,MAAM;IACV,IAAI,MAAM;IACV,IAAI,CAAC,OAAO,GAAG,QAAQ;IACvB,MAAO,EAAE,IAAI,cAAe,CAAA,OAAO,KAAI,EAAI;QACzC,IAAI,QAAQ,KAAK,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,EAAE,KAAK,GACrD,MAAM;QAER,IAAI,CAAC,SAAS,EAAE,GAAG,AAAC,CAAA,AAAC,QAAQ,OAAQ,CAAA,IAAK,MAAM;IAClD;IAEA,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,UAAU,GAAG,SAAS,WAAY,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ;IACpF,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU;QACb,IAAI,QAAQ,KAAK,GAAG,CAAC,GAAG,AAAC,IAAI,aAAc;QAE3C,SAAS,IAAI,EAAE,OAAO,QAAQ,YAAY,QAAQ,GAAG,CAAC;IACxD;IAEA,IAAI,IAAI,aAAa;IACrB,IAAI,MAAM;IACV,IAAI,MAAM;IACV,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ;IAC3B,MAAO,EAAE,KAAK,KAAM,CAAA,OAAO,KAAI,EAAI;QACjC,IAAI,QAAQ,KAAK,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,EAAE,KAAK,GACrD,MAAM;QAER,IAAI,CAAC,SAAS,EAAE,GAAG,AAAC,CAAA,AAAC,QAAQ,OAAQ,CAAA,IAAK,MAAM;IAClD;IAEA,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,SAAS,GAAG,SAAS,UAAW,KAAK,EAAE,MAAM,EAAE,QAAQ;IACtE,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,MAAM;IACtD,IAAI,QAAQ,GAAG,QAAQ,OAAO,QAAQ;IACtC,IAAI,CAAC,OAAO,GAAI,QAAQ;IACxB,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC5E,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,QAAQ;IACxD,IAAI,CAAC,OAAO,GAAI,QAAQ;IACxB,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC5E,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,QAAQ;IACxD,IAAI,CAAC,OAAO,GAAI,UAAU;IAC1B,IAAI,CAAC,SAAS,EAAE,GAAI,QAAQ;IAC5B,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC5E,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,YAAY;IAC5D,IAAI,CAAC,OAAO,GAAI,QAAQ;IACxB,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC5E,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UAAU,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,YAAY;IAC5D,IAAI,QAAQ,GAAG,QAAQ,aAAa,QAAQ;IAC5C,IAAI,CAAC,OAAO,GAAI,UAAU;IAC1B,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,IAAI,CAAC,SAAS,EAAE,GAAI,UAAU;IAC9B,IAAI,CAAC,SAAS,EAAE,GAAI,QAAQ;IAC5B,OAAO,SAAS;AAClB;AAEA,SAAS,aAAc,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;IACtD,IAAI,SAAS,MAAM,IAAI,MAAM,EAAE,MAAM,IAAI,WAAW;IACpD,IAAI,SAAS,GAAG,MAAM,IAAI,WAAW;AACvC;AAEA,SAAS,WAAY,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ;IAC7D,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UACH,aAAa,KAAK,OAAO,QAAQ,GAAG,wBAAwB;IAE9D,QAAQ,KAAK,CAAC,KAAK,OAAO,QAAQ,cAAc,IAAI;IACpD,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC5E,OAAO,WAAW,IAAI,EAAE,OAAO,QAAQ,MAAM;AAC/C;AAEA,OAAO,SAAS,CAAC,YAAY,GAAG,SAAS,aAAc,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC5E,OAAO,WAAW,IAAI,EAAE,OAAO,QAAQ,OAAO;AAChD;AAEA,SAAS,YAAa,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ;IAC9D,QAAQ,CAAC;IACT,SAAS,WAAW;IACpB,IAAI,CAAC,UACH,aAAa,KAAK,OAAO,QAAQ,GAAG,yBAAyB;IAE/D,QAAQ,KAAK,CAAC,KAAK,OAAO,QAAQ,cAAc,IAAI;IACpD,OAAO,SAAS;AAClB;AAEA,OAAO,SAAS,CAAC,aAAa,GAAG,SAAS,cAAe,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC9E,OAAO,YAAY,IAAI,EAAE,OAAO,QAAQ,MAAM;AAChD;AAEA,OAAO,SAAS,CAAC,aAAa,GAAG,SAAS,cAAe,KAAK,EAAE,MAAM,EAAE,QAAQ;IAC9E,OAAO,YAAY,IAAI,EAAE,OAAO,QAAQ,OAAO;AACjD;AAEA,4EAA4E;AAC5E,OAAO,SAAS,CAAC,IAAI,GAAG,SAAS,KAAM,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG;IACpE,IAAI,CAAC,OAAO,QAAQ,CAAC,SAAS,MAAM,IAAI,UAAU;IAClD,IAAI,CAAC,OAAO,QAAQ;IACpB,IAAI,CAAC,OAAO,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM;IACxC,IAAI,eAAe,OAAO,MAAM,EAAE,cAAc,OAAO,MAAM;IAC7D,IAAI,CAAC,aAAa,cAAc;IAChC,IAAI,MAAM,KAAK,MAAM,OAAO,MAAM;IAElC,2BAA2B;IAC3B,IAAI,QAAQ,OAAO,OAAO;IAC1B,IAAI,OAAO,MAAM,KAAK,KAAK,IAAI,CAAC,MAAM,KAAK,GAAG,OAAO;IAErD,yBAAyB;IACzB,IAAI,cAAc,GAChB,MAAM,IAAI,WAAW;IAEvB,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,WAAW;IAC5D,IAAI,MAAM,GAAG,MAAM,IAAI,WAAW;IAElC,cAAc;IACd,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM;IACxC,IAAI,OAAO,MAAM,GAAG,cAAc,MAAM,OACtC,MAAM,OAAO,MAAM,GAAG,cAAc;IAGtC,IAAI,MAAM,MAAM;IAEhB,IAAI,IAAI,KAAK,UAAU,OAAO,WAAW,SAAS,CAAC,UAAU,KAAK,YAChE,iDAAiD;IACjD,IAAI,CAAC,UAAU,CAAC,aAAa,OAAO;SAEpC,WAAW,SAAS,CAAC,GAAG,CAAC,IAAI,CAC3B,QACA,IAAI,CAAC,QAAQ,CAAC,OAAO,MACrB;IAIJ,OAAO;AACT;AAEA,SAAS;AACT,0CAA0C;AAC1C,0CAA0C;AAC1C,sDAAsD;AACtD,OAAO,SAAS,CAAC,IAAI,GAAG,SAAS,KAAM,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ;IAC9D,uBAAuB;IACvB,IAAI,OAAO,QAAQ,UAAU;QAC3B,IAAI,OAAO,UAAU,UAAU;YAC7B,WAAW;YACX,QAAQ;YACR,MAAM,IAAI,CAAC,MAAM;QACnB,OAAO,IAAI,OAAO,QAAQ,UAAU;YAClC,WAAW;YACX,MAAM,IAAI,CAAC,MAAM;QACnB;QACA,IAAI,aAAa,aAAa,OAAO,aAAa,UAChD,MAAM,IAAI,UAAU;QAEtB,IAAI,OAAO,aAAa,YAAY,CAAC,OAAO,UAAU,CAAC,WACrD,MAAM,IAAI,UAAU,uBAAuB;QAE7C,IAAI,IAAI,MAAM,KAAK,GAAG;YACpB,IAAI,OAAO,IAAI,UAAU,CAAC;YAC1B,IAAI,AAAC,aAAa,UAAU,OAAO,OAC/B,aAAa,UACf,uEAAuE;YACvE,MAAM;QAEV;IACF,OAAO,IAAI,OAAO,QAAQ,UACxB,MAAM,MAAM;SACP,IAAI,OAAO,QAAQ,WACxB,MAAM,OAAO;IAGf,qEAAqE;IACrE,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,GAAG,SAAS,IAAI,CAAC,MAAM,GAAG,KACpD,MAAM,IAAI,WAAW;IAGvB,IAAI,OAAO,OACT,OAAO,IAAI;IAGb,QAAQ,UAAU;IAClB,MAAM,QAAQ,YAAY,IAAI,CAAC,MAAM,GAAG,QAAQ;IAEhD,IAAI,CAAC,KAAK,MAAM;IAEhB,IAAI;IACJ,IAAI,OAAO,QAAQ,UACjB,IAAK,IAAI,OAAO,IAAI,KAAK,EAAE,EACzB,IAAI,CAAC,EAAE,GAAG;SAEP;QACL,IAAI,QAAQ,OAAO,QAAQ,CAAC,OACxB,MACA,OAAO,IAAI,CAAC,KAAK;QACrB,IAAI,MAAM,MAAM,MAAM;QACtB,IAAI,QAAQ,GACV,MAAM,IAAI,UAAU,gBAAgB,MAClC;QAEJ,IAAK,IAAI,GAAG,IAAI,MAAM,OAAO,EAAE,EAC7B,IAAI,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,IAAI;IAEpC;IAEA,OAAO,IAAI;AACb;AAEA,mBAAmB;AACnB,mBAAmB;AAEnB,IAAI,oBAAoB;AAExB,SAAS,YAAa,GAAG;IACvB,uDAAuD;IACvD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;IACvB,wFAAwF;IACxF,MAAM,IAAI,IAAI,GAAG,OAAO,CAAC,mBAAmB;IAC5C,8CAA8C;IAC9C,IAAI,IAAI,MAAM,GAAG,GAAG,OAAO;IAC3B,uFAAuF;IACvF,MAAO,IAAI,MAAM,GAAG,MAAM,EACxB,MAAM,MAAM;IAEd,OAAO;AACT;AAEA,SAAS,YAAa,MAAM,EAAE,KAAK;IACjC,QAAQ,SAAS;IACjB,IAAI;IACJ,IAAI,SAAS,OAAO,MAAM;IAC1B,IAAI,gBAAgB;IACpB,IAAI,QAAQ,EAAE;IAEd,IAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,EAAG;QAC/B,YAAY,OAAO,UAAU,CAAC;QAE9B,yBAAyB;QACzB,IAAI,YAAY,UAAU,YAAY,QAAQ;YAC5C,uBAAuB;YACvB,IAAI,CAAC,eAAe;gBAClB,cAAc;gBACd,IAAI,YAAY,QAAQ;oBACtB,mBAAmB;oBACnB,IAAI,AAAC,CAAA,SAAS,CAAA,IAAK,IAAI,MAAM,IAAI,CAAC,MAAM,MAAM;oBAC9C;gBACF,OAAO,IAAI,IAAI,MAAM,QAAQ;oBAC3B,gBAAgB;oBAChB,IAAI,AAAC,CAAA,SAAS,CAAA,IAAK,IAAI,MAAM,IAAI,CAAC,MAAM,MAAM;oBAC9C;gBACF;gBAEA,aAAa;gBACb,gBAAgB;gBAEhB;YACF;YAEA,mBAAmB;YACnB,IAAI,YAAY,QAAQ;gBACtB,IAAI,AAAC,CAAA,SAAS,CAAA,IAAK,IAAI,MAAM,IAAI,CAAC,MAAM,MAAM;gBAC9C,gBAAgB;gBAChB;YACF;YAEA,uBAAuB;YACvB,YAAY,AAAC,CAAA,gBAAgB,UAAU,KAAK,YAAY,MAAK,IAAK;QACpE,OAAO,IAAI,eACT,2CAA2C;QAC3C;YAAA,IAAI,AAAC,CAAA,SAAS,CAAA,IAAK,IAAI,MAAM,IAAI,CAAC,MAAM,MAAM;QAAI;QAGpD,gBAAgB;QAEhB,cAAc;QACd,IAAI,YAAY,MAAM;YACpB,IAAI,AAAC,CAAA,SAAS,CAAA,IAAK,GAAG;YACtB,MAAM,IAAI,CAAC;QACb,OAAO,IAAI,YAAY,OAAO;YAC5B,IAAI,AAAC,CAAA,SAAS,CAAA,IAAK,GAAG;YACtB,MAAM,IAAI,CACR,aAAa,MAAM,MACnB,YAAY,OAAO;QAEvB,OAAO,IAAI,YAAY,SAAS;YAC9B,IAAI,AAAC,CAAA,SAAS,CAAA,IAAK,GAAG;YACtB,MAAM,IAAI,CACR,aAAa,MAAM,MACnB,aAAa,MAAM,OAAO,MAC1B,YAAY,OAAO;QAEvB,OAAO,IAAI,YAAY,UAAU;YAC/B,IAAI,AAAC,CAAA,SAAS,CAAA,IAAK,GAAG;YACtB,MAAM,IAAI,CACR,aAAa,OAAO,MACpB,aAAa,MAAM,OAAO,MAC1B,aAAa,MAAM,OAAO,MAC1B,YAAY,OAAO;QAEvB,OACE,MAAM,IAAI,MAAM;IAEpB;IAEA,OAAO;AACT;AAEA,SAAS,aAAc,GAAG;IACxB,IAAI,YAAY,EAAE;IAClB,IAAK,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,EAAE,EAAE,EAChC,sDAAsD;IACtD,UAAU,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK;IAErC,OAAO;AACT;AAEA,SAAS,eAAgB,GAAG,EAAE,KAAK;IACjC,IAAI,GAAG,IAAI;IACX,IAAI,YAAY,EAAE;IAClB,IAAK,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,EAAE,EAAE,EAAG;QACnC,IAAI,AAAC,CAAA,SAAS,CAAA,IAAK,GAAG;QAEtB,IAAI,IAAI,UAAU,CAAC;QACnB,KAAK,KAAK;QACV,KAAK,IAAI;QACT,UAAU,IAAI,CAAC;QACf,UAAU,IAAI,CAAC;IACjB;IAEA,OAAO;AACT;AAEA,SAAS,cAAe,GAAG;IACzB,OAAO,OAAO,WAAW,CAAC,YAAY;AACxC;AAEA,SAAS,WAAY,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;IAC3C,IAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,EAAG;QAC/B,IAAI,AAAC,IAAI,UAAU,IAAI,MAAM,IAAM,KAAK,IAAI,MAAM,EAAG;QACrD,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,CAAC,EAAE;IAC1B;IACA,OAAO;AACT;AAEA,mFAAmF;AACnF,qEAAqE;AACrE,mDAAmD;AACnD,SAAS,WAAY,GAAG,EAAE,IAAI;IAC5B,OAAO,eAAe,QACnB,OAAO,QAAQ,IAAI,WAAW,IAAI,QAAQ,IAAI,WAAW,CAAC,IAAI,IAAI,QACjE,IAAI,WAAW,CAAC,IAAI,KAAK,KAAK,IAAI;AACxC;AACA,SAAS,YAAa,GAAG;IACvB,mBAAmB;IACnB,OAAO,QAAQ,IAAI,sCAAsC;;AAC3D;AAEA,4CAA4C;AAC5C,mDAAmD;AACnD,IAAI,sBAAsB,AAAC;IACzB,IAAI,WAAW;IACf,IAAI,QAAQ,IAAI,MAAM;IACtB,IAAK,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,EAAG;QAC3B,IAAI,MAAM,IAAI;QACd,IAAK,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,EACxB,KAAK,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE;IAE9C;IACA,OAAO;AACT;;;ACxxDA;AAEA,QAAQ,UAAU,GAAG;AACrB,QAAQ,WAAW,GAAG;AACtB,QAAQ,aAAa,GAAG;AAExB,IAAI,SAAS,EAAE;AACf,IAAI,YAAY,EAAE;AAClB,IAAI,MAAM,OAAO,eAAe,cAAc,aAAa;AAE3D,IAAI,OAAO;AACX,IAAK,IAAI,IAAI,GAAG,MAAM,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,EAAG;IAC/C,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;IACnB,SAAS,CAAC,KAAK,UAAU,CAAC,GAAG,GAAG;AAClC;AAEA,6DAA6D;AAC7D,6DAA6D;AAC7D,SAAS,CAAC,IAAI,UAAU,CAAC,GAAG,GAAG;AAC/B,SAAS,CAAC,IAAI,UAAU,CAAC,GAAG,GAAG;AAE/B,SAAS,QAAS,GAAG;IACnB,IAAI,MAAM,IAAI,MAAM;IAEpB,IAAI,MAAM,IAAI,GACZ,MAAM,IAAI,MAAM;IAGlB,yDAAyD;IACzD,yDAAyD;IACzD,IAAI,WAAW,IAAI,OAAO,CAAC;IAC3B,IAAI,aAAa,IAAI,WAAW;IAEhC,IAAI,kBAAkB,aAAa,MAC/B,IACA,IAAK,WAAW;IAEpB,OAAO;QAAC;QAAU;KAAgB;AACpC;AAEA,4DAA4D;AAC5D,SAAS,WAAY,GAAG;IACtB,IAAI,OAAO,QAAQ;IACnB,IAAI,WAAW,IAAI,CAAC,EAAE;IACtB,IAAI,kBAAkB,IAAI,CAAC,EAAE;IAC7B,OAAO,AAAE,CAAA,WAAW,eAAc,IAAK,IAAI,IAAK;AAClD;AAEA,SAAS,YAAa,GAAG,EAAE,QAAQ,EAAE,eAAe;IAClD,OAAO,AAAE,CAAA,WAAW,eAAc,IAAK,IAAI,IAAK;AAClD;AAEA,SAAS,YAAa,GAAG;IACvB,IAAI;IACJ,IAAI,OAAO,QAAQ;IACnB,IAAI,WAAW,IAAI,CAAC,EAAE;IACtB,IAAI,kBAAkB,IAAI,CAAC,EAAE;IAE7B,IAAI,MAAM,IAAI,IAAI,YAAY,KAAK,UAAU;IAE7C,IAAI,UAAU;IAEd,sEAAsE;IACtE,IAAI,MAAM,kBAAkB,IACxB,WAAW,IACX;IAEJ,IAAI;IACJ,IAAK,IAAI,GAAG,IAAI,KAAK,KAAK,EAAG;QAC3B,MACE,AAAC,SAAS,CAAC,IAAI,UAAU,CAAC,GAAG,IAAI,KAChC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,KACpC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,IACrC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG;QAClC,GAAG,CAAC,UAAU,GAAG,AAAC,OAAO,KAAM;QAC/B,GAAG,CAAC,UAAU,GAAG,AAAC,OAAO,IAAK;QAC9B,GAAG,CAAC,UAAU,GAAG,MAAM;IACzB;IAEA,IAAI,oBAAoB,GAAG;QACzB,MACE,AAAC,SAAS,CAAC,IAAI,UAAU,CAAC,GAAG,IAAI,IAChC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI;QACvC,GAAG,CAAC,UAAU,GAAG,MAAM;IACzB;IAEA,IAAI,oBAAoB,GAAG;QACzB,MACE,AAAC,SAAS,CAAC,IAAI,UAAU,CAAC,GAAG,IAAI,KAChC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,IACpC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI;QACvC,GAAG,CAAC,UAAU,GAAG,AAAC,OAAO,IAAK;QAC9B,GAAG,CAAC,UAAU,GAAG,MAAM;IACzB;IAEA,OAAO;AACT;AAEA,SAAS,gBAAiB,GAAG;IAC3B,OAAO,MAAM,CAAC,OAAO,KAAK,KAAK,GAC7B,MAAM,CAAC,OAAO,KAAK,KAAK,GACxB,MAAM,CAAC,OAAO,IAAI,KAAK,GACvB,MAAM,CAAC,MAAM,KAAK;AACtB;AAEA,SAAS,YAAa,KAAK,EAAE,KAAK,EAAE,GAAG;IACrC,IAAI;IACJ,IAAI,SAAS,EAAE;IACf,IAAK,IAAI,IAAI,OAAO,IAAI,KAAK,KAAK,EAAG;QACnC,MACE,AAAC,CAAA,AAAC,KAAK,CAAC,EAAE,IAAI,KAAM,QAAO,IAC1B,CAAA,AAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAK,MAAK,IAC3B,CAAA,KAAK,CAAC,IAAI,EAAE,GAAG,IAAG;QACrB,OAAO,IAAI,CAAC,gBAAgB;IAC9B;IACA,OAAO,OAAO,IAAI,CAAC;AACrB;AAEA,SAAS,cAAe,KAAK;IAC3B,IAAI;IACJ,IAAI,MAAM,MAAM,MAAM;IACtB,IAAI,aAAa,MAAM,EAAE,sCAAsC;;IAC/D,IAAI,QAAQ,EAAE;IACd,IAAI,iBAAiB,MAAM,wBAAwB;;IAEnD,+EAA+E;IAC/E,IAAK,IAAI,IAAI,GAAG,OAAO,MAAM,YAAY,IAAI,MAAM,KAAK,eACtD,MAAM,IAAI,CAAC,YAAY,OAAO,GAAG,AAAC,IAAI,iBAAkB,OAAO,OAAQ,IAAI;IAG7E,sEAAsE;IACtE,IAAI,eAAe,GAAG;QACpB,MAAM,KAAK,CAAC,MAAM,EAAE;QACpB,MAAM,IAAI,CACR,MAAM,CAAC,OAAO,EAAE,GAChB,MAAM,CAAC,AAAC,OAAO,IAAK,KAAK,GACzB;IAEJ,OAAO,IAAI,eAAe,GAAG;QAC3B,MAAM,AAAC,CAAA,KAAK,CAAC,MAAM,EAAE,IAAI,CAAA,IAAK,KAAK,CAAC,MAAM,EAAE;QAC5C,MAAM,IAAI,CACR,MAAM,CAAC,OAAO,GAAG,GACjB,MAAM,CAAC,AAAC,OAAO,IAAK,KAAK,GACzB,MAAM,CAAC,AAAC,OAAO,IAAK,KAAK,GACzB;IAEJ;IAEA,OAAO,MAAM,IAAI,CAAC;AACpB;;;ACrJA,uFAAuF,GACvF,QAAQ,IAAI,GAAG,SAAU,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;IACzD,IAAI,GAAG;IACP,IAAI,OAAO,AAAC,SAAS,IAAK,OAAO;IACjC,IAAI,OAAO,AAAC,CAAA,KAAK,IAAG,IAAK;IACzB,IAAI,QAAQ,QAAQ;IACpB,IAAI,QAAQ;IACZ,IAAI,IAAI,OAAQ,SAAS,IAAK;IAC9B,IAAI,IAAI,OAAO,KAAK;IACpB,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE;IAE1B,KAAK;IAEL,IAAI,IAAK,AAAC,CAAA,KAAM,CAAC,KAAK,IAAK;IAC3B,MAAO,CAAC;IACR,SAAS;IACT,MAAO,QAAQ,GAAG,IAAI,AAAC,IAAI,MAAO,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,GAAG,SAAS;IAEvE,IAAI,IAAK,AAAC,CAAA,KAAM,CAAC,KAAK,IAAK;IAC3B,MAAO,CAAC;IACR,SAAS;IACT,MAAO,QAAQ,GAAG,IAAI,AAAC,IAAI,MAAO,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,GAAG,SAAS;IAEvE,IAAI,MAAM,GACR,IAAI,IAAI;SACH,IAAI,MAAM,MACf,OAAO,IAAI,MAAO,AAAC,CAAA,IAAI,KAAK,CAAA,IAAK;SAC5B;QACL,IAAI,IAAI,KAAK,GAAG,CAAC,GAAG;QACpB,IAAI,IAAI;IACV;IACA,OAAO,AAAC,CAAA,IAAI,KAAK,CAAA,IAAK,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI;AAC5C;AAEA,QAAQ,KAAK,GAAG,SAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;IACjE,IAAI,GAAG,GAAG;IACV,IAAI,OAAO,AAAC,SAAS,IAAK,OAAO;IACjC,IAAI,OAAO,AAAC,CAAA,KAAK,IAAG,IAAK;IACzB,IAAI,QAAQ,QAAQ;IACpB,IAAI,KAAM,SAAS,KAAK,KAAK,GAAG,CAAC,GAAG,OAAO,KAAK,GAAG,CAAC,GAAG,OAAO;IAC9D,IAAI,IAAI,OAAO,IAAK,SAAS;IAC7B,IAAI,IAAI,OAAO,IAAI;IACnB,IAAI,IAAI,QAAQ,KAAM,UAAU,KAAK,IAAI,QAAQ,IAAK,IAAI;IAE1D,QAAQ,KAAK,GAAG,CAAC;IAEjB,IAAI,MAAM,UAAU,UAAU,UAAU;QACtC,IAAI,MAAM,SAAS,IAAI;QACvB,IAAI;IACN,OAAO;QACL,IAAI,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,SAAS,KAAK,GAAG;QACzC,IAAI,QAAS,CAAA,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,EAAC,IAAK,GAAG;YACrC;YACA,KAAK;QACP;QACA,IAAI,IAAI,SAAS,GACf,SAAS,KAAK;aAEd,SAAS,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI;QAEhC,IAAI,QAAQ,KAAK,GAAG;YAClB;YACA,KAAK;QACP;QAEA,IAAI,IAAI,SAAS,MAAM;YACrB,IAAI;YACJ,IAAI;QACN,OAAO,IAAI,IAAI,SAAS,GAAG;YACzB,IAAI,AAAC,CAAA,AAAC,QAAQ,IAAK,CAAA,IAAK,KAAK,GAAG,CAAC,GAAG;YACpC,IAAI,IAAI;QACV,OAAO;YACL,IAAI,QAAQ,KAAK,GAAG,CAAC,GAAG,QAAQ,KAAK,KAAK,GAAG,CAAC,GAAG;YACjD,IAAI;QACN;IACF;IAEA,MAAO,QAAQ,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK,KAAK,QAAQ;IAE3E,IAAI,AAAC,KAAK,OAAQ;IAClB,QAAQ;IACR,MAAO,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,MAAM,KAAK,GAAG,KAAK,KAAK,QAAQ;IAE1E,MAAM,CAAC,SAAS,IAAI,EAAE,IAAI,IAAI;AAChC","sources":["packages/artplayer-proxy-webav/src/index.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/dist/av-cliper.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/dom-utils.ts","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/opfs-tools@0.6.1/node_modules/opfs-tools/dist/opfs-tools.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/log.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/worker-timer.ts","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/wave-resampler@1.0.0/node_modules/wave-resampler/lib/interpolator.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/wave-resampler@1.0.0/node_modules/wave-resampler/lib/fir-lpf.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/wave-resampler@1.0.0/node_modules/wave-resampler/lib/butterworth-lpf.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/wave-resampler@1.0.0/node_modules/wave-resampler/index.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/av-utils.ts","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/@webav+mp4box.js@0.5.3-fenghen/node_modules/@webav/mp4box.js/dist/mp4box.all.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/iclip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/mp4-utils/mp4box-utils.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/mp4-utils/sample-transform.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/mp4-clip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/img-clip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/audio-clip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/media-stream-clip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/clips/embed-subtitles-clip.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/event-tool.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/mp4-utils/meta-box.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/mp4-utils/index.ts","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/@videojs+vhs-utils@3.0.5/node_modules/@videojs/vhs-utils/es/stream.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/@babel+runtime@7.24.7/node_modules/@babel/runtime/helpers/esm/extends.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/global@4.4.0/node_modules/global/window.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/@videojs+vhs-utils@3.0.5/node_modules/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js","packages/artplayer-proxy-webav/node_modules/node_modules/.pnpm/m3u8-parser@7.1.0/node_modules/m3u8-parser/dist/m3u8-parser.es.js","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/data-loader/hls-loader.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/chromakey.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/sprite/rect.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/sprite/base-sprite.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/sprite/offscreen-sprite.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/sprite/visible-sprite.ts","packages/artplayer-proxy-webav/node_modules/_@webav_av-cliper@0.14.14@@webav/av-cliper/src/combinator.ts","node_modules/buffer/index.js","node_modules/base64-js/index.js","node_modules/ieee754/index.js"],"sourcesContent":["import { MP4Clip } from '@webav/av-cliper';\n\nexport default function artplayerProxyWebAV() {\n return (art) => {\n const { option, constructor } = art;\n const { createElement, def } = constructor.utils;\n\n const canvas = createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n let audioCtx;\n let gainNode;\n\n let clip = null;\n let audioSource = null;\n let intervalId = null;\n let seekTarget = null;\n let lastSeekTime = 0;\n\n const state = {\n playing: false,\n duration: 0,\n videoWidth: 0,\n videoHeight: 0,\n currentTime: 0,\n playbackRate: 1,\n paused: true,\n ended: false,\n readyState: 0,\n buffered: 0,\n muted: option.muted,\n volume: option.volume,\n autoplay: option.autoplay,\n };\n\n function reset() {\n Object.assign(state, {\n playing: false,\n duration: 0,\n videoWidth: 0,\n videoHeight: 0,\n currentTime: 0,\n playbackRate: 1,\n paused: true,\n ended: false,\n readyState: 0,\n buffered: 0,\n muted: option.muted,\n volume: option.volume,\n autoplay: option.autoplay,\n });\n }\n\n function stop() {\n if (intervalId) {\n clearInterval(intervalId);\n intervalId = null;\n }\n if (audioSource) {\n audioSource.stop();\n audioSource = null;\n }\n }\n\n function updateVolume() {\n if (gainNode) {\n const effectiveVolume = state.muted ? 0 : state.volume;\n gainNode.gain.setValueAtTime(effectiveVolume, audioCtx.currentTime);\n }\n }\n\n async function play() {\n if (!audioCtx) {\n audioCtx = new AudioContext();\n gainNode = audioCtx.createGain();\n gainNode.connect(audioCtx.destination);\n }\n\n let curTime = state.currentTime * 1e6;\n let startAt = 0;\n let first = true;\n let lastFrameTime = performance.now();\n\n stop();\n updateVolume();\n\n async function frameHandler() {\n if (!state.playing) return;\n\n const currentFrameTime = performance.now();\n const deltaTime = currentFrameTime - lastFrameTime;\n lastFrameTime = currentFrameTime;\n\n if (seekTarget !== null) {\n curTime = seekTarget * 1e6;\n seekTarget = null;\n first = true;\n } else {\n curTime += deltaTime * 1000 * state.playbackRate;\n }\n\n state.currentTime = curTime / 1e6;\n\n const { state: clipState, video, audio } = await clip.tick(Math.round(curTime));\n\n art.emit('video:timeupdate', { type: 'timeupdate' });\n\n if (clipState === 'done') {\n stop();\n state.ended = true;\n state.playing = false;\n state.paused = true;\n art.emit('video:ended', { type: 'ended' });\n return;\n }\n\n if (video && clipState === 'success') {\n ctx.clearRect(0, 0, state.videoWidth, state.videoHeight);\n ctx.drawImage(video, 0, 0, state.videoWidth, state.videoHeight);\n video.close();\n }\n\n if (first) {\n first = false;\n } else if (audio?.[0]?.length) {\n const buf = audioCtx.createBuffer(2, audio[0].length, 48000);\n buf.copyToChannel(audio[0], 0);\n buf.copyToChannel(audio[1], 1);\n audioSource = audioCtx.createBufferSource();\n audioSource.buffer = buf;\n audioSource.connect(gainNode);\n audioSource.playbackRate.setValueAtTime(state.playbackRate, audioCtx.currentTime);\n startAt = Math.max(audioCtx.currentTime, startAt);\n audioSource.start(startAt);\n startAt += buf.duration / state.playbackRate;\n }\n }\n\n state.playing = true;\n state.paused = false;\n intervalId = setInterval(frameHandler, 1000 / 60); // 约60fps\n }\n\n async function preview(time) {\n const { video } = await clip.tick(time * 1e6);\n if (video) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n video.close();\n }\n }\n\n function resize() {\n const player = art.template?.$player;\n if (!player || option.autoSize) return;\n\n const aspectRatio = canvas.videoWidth / canvas.videoHeight;\n const containerWidth = player.clientWidth;\n const containerHeight = player.clientHeight;\n const containerRatio = containerWidth / containerHeight;\n\n let paddingLeft = 0;\n let paddingTop = 0;\n\n if (containerRatio > aspectRatio) {\n const canvasWidth = containerHeight * aspectRatio;\n paddingLeft = (containerWidth - canvasWidth) / 2;\n } else {\n const canvasHeight = containerWidth / aspectRatio;\n paddingTop = (containerHeight - canvasHeight) / 2;\n }\n\n Object.assign(canvas.style, {\n padding: `${paddingTop}px ${paddingLeft}px`,\n });\n }\n\n async function init() {\n stop();\n reset();\n\n if (clip) {\n clip.destroy();\n art.emit('video:abort', { type: 'abort' });\n art.emit('video:emptied', { type: 'emptied' });\n }\n\n try {\n await Promise.resolve();\n art.emit('video:loadstart', { type: 'loadstart' });\n const response = await fetch(option.url);\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n clip = new MP4Clip(response.body);\n } catch (error) {\n art.emit('video:error', error);\n throw error;\n }\n\n const info = await clip.ready;\n\n Object.assign(state, {\n readyState: 4,\n duration: Math.round(info.duration / 1e6),\n videoWidth: info.width,\n videoHeight: info.height,\n });\n\n canvas.width = state.videoWidth;\n canvas.height = state.videoHeight;\n await preview(0.1);\n resize();\n\n art.emit('video:loadedmetadata', { type: 'loadedmetadata' });\n art.emit('video:durationchange', { type: 'durationchange' });\n art.emit('video:loadeddata', { type: 'loadeddata' });\n art.emit('video:canplay', { type: 'canplay' });\n art.emit('video:canplaythrough', { type: 'canplaythrough' });\n }\n\n def(canvas, 'textTracks', {\n get: () => [],\n });\n\n def(canvas, 'duration', {\n get: () => state.duration,\n });\n\n def(canvas, 'videoWidth', {\n get: () => state.videoWidth,\n });\n\n def(canvas, 'videoHeight', {\n get: () => state.videoHeight,\n });\n\n def(canvas, 'volume', {\n get: () => state.volume,\n set: (val) => {\n state.volume = Math.max(0, Math.min(1, val));\n updateVolume();\n art.emit('video:volumechange', { type: 'volumechange' });\n },\n });\n\n def(canvas, 'currentTime', {\n get: () => state.currentTime,\n set: (val) => {\n const newTime = Math.max(0, Math.min(val, state.duration));\n const now = performance.now();\n if (now - lastSeekTime > 16) {\n lastSeekTime = now;\n seekTarget = newTime;\n state.currentTime = newTime;\n if (!state.playing) {\n preview(newTime);\n }\n art.emit('video:timeupdate', { type: 'timeupdate' });\n }\n },\n });\n\n def(canvas, 'autoplay', {\n get: () => state.autoplay,\n set: (val) => {\n state.autoplay = val;\n if (val && state.readyState >= 4) {\n canvas.play();\n }\n },\n });\n\n def(canvas, 'src', {\n get: () => option.url,\n set: (val) => {\n option.url = val;\n init().then(() => {\n if (option.autoplay) {\n canvas.play();\n }\n });\n },\n });\n\n def(canvas, 'playbackRate', {\n get: () => state.playbackRate,\n set: (val) => {\n state.playbackRate = Math.max(0.25, Math.min(2, val));\n if (audioSource) {\n audioSource.playbackRate.setValueAtTime(state.playbackRate, audioCtx.currentTime);\n }\n art.emit('video:ratechange', { type: 'ratechange' });\n },\n });\n\n def(canvas, 'playing', {\n get: () => state.playing,\n });\n\n def(canvas, 'paused', {\n get: () => state.paused,\n });\n\n def(canvas, 'ended', {\n get: () => state.ended,\n });\n\n def(canvas, 'readyState', {\n get: () => state.readyState,\n });\n\n def(canvas, 'muted', {\n get: () => state.muted,\n set: (val) => {\n state.muted = val;\n updateVolume();\n art.emit('video:volumechange', { type: 'volumechange' });\n },\n });\n\n def(canvas, 'buffered', {\n get: () => ({\n start: () => 0,\n end: () => state.buffered,\n length: 1,\n }),\n });\n\n def(canvas, 'play', {\n value: async () => {\n await play();\n art.emit('video:play', { type: 'play' });\n art.emit('video:playing', { type: 'playing' });\n },\n });\n\n def(canvas, 'pause', {\n value: () => {\n stop();\n state.playing = false;\n state.paused = true;\n art.emit('video:pause', { type: 'pause' });\n },\n });\n\n art.on('destroy', () => {\n stop();\n if (clip) {\n clip.destroy();\n }\n });\n\n art.on('resize', resize);\n\n return canvas;\n };\n}\n\nif (typeof window !== 'undefined') {\n window['artplayerProxyWebAV'] = artplayerProxyWebAV;\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n",null,"// 在主线程中执行的 工具函数\n\n/**\n * 创建一个新的 HTML 元素\n * @param tagName - 要创建的元素的标签名\n * @returns 新创建的 HTML 元素\n */\nexport function createEl(tagName: string): HTMLElement {\n return document.createElement(tagName);\n}\n\n/**\n * 将文本渲染为图片\n * @param txt - 要渲染的文本\n * @param cssText - 应用于文本的 CSS 样式\n * @returns 渲染后的图片元素\n */\nexport function renderTxt2Img(txt: string, cssText: string): HTMLImageElement {\n const div = createEl('pre');\n div.style.cssText = `margin: 0; ${cssText}; visibility: hidden; position: fixed;`;\n div.textContent = txt;\n document.body.appendChild(div);\n\n const { width, height } = div.getBoundingClientRect();\n // 计算出 rect,立即从dom移除\n div.remove();\n div.style.visibility = 'visible';\n\n const img = new Image();\n img.width = width;\n img.height = height;\n const svgStr = `\n \n \n
${div.outerHTML}
\n
\n
\n `\n .replace(/\\t/g, '')\n .replace(/#/g, '%23');\n\n img.src = `data:image/svg+xml;charset=utf-8,${svgStr}`;\n return img;\n}\n\n/**\n * 将文本渲染为 {@link ImageBitmap},用来创建 {@link ImgClip}\n * @param txt - 要渲染的文本\n * @param cssText - 应用于文本的 CSS 样式\n *\n * @example\n * new ImgClip(\n * await renderTxt2ImgBitmap(\n * '水印',\n * `font-size:40px; color: white; text-shadow: 2px 2px 6px red;`,\n * )\n * )\n */\nexport async function renderTxt2ImgBitmap(\n txt: string,\n cssText: string,\n): Promise {\n const imgEl = renderTxt2Img(txt, cssText);\n await new Promise((resolve) => {\n imgEl.onload = resolve;\n });\n const cvs = new OffscreenCanvas(imgEl.width, imgEl.height);\n const ctx = cvs.getContext('2d');\n ctx?.drawImage(imgEl, 0, 0, imgEl.width, imgEl.height);\n return await createImageBitmap(cvs);\n}\n","var O = (t) => {\n throw TypeError(t);\n};\nvar E = (t, e, r) => e.has(t) || O(\"Cannot \" + r);\nvar s = (t, e, r) => (E(t, e, \"read from private field\"), r ? r.call(t) : e.get(t)), o = (t, e, r) => e.has(t) ? O(\"Cannot add the same private member more than once\") : e instanceof WeakSet ? e.add(t) : e.set(t, r), l = (t, e, r, a) => (E(t, e, \"write to private field\"), a ? a.call(t, r) : e.set(t, r), r);\nconst z = \"KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHUobil7aWYobj09PSIvIilyZXR1cm57cGFyZW50Om51bGwsbmFtZToiIn07Y29uc3QgZT1uLnNwbGl0KCIvIikuZmlsdGVyKGk9PmkubGVuZ3RoPjApO2lmKGUubGVuZ3RoPT09MCl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoIik7Y29uc3QgYT1lW2UubGVuZ3RoLTFdLHI9Ii8iK2Uuc2xpY2UoMCwtMSkuam9pbigiLyIpO3JldHVybntuYW1lOmEscGFyZW50OnJ9fWFzeW5jIGZ1bmN0aW9uIHcobixlKXtjb25zdHtwYXJlbnQ6YSxuYW1lOnJ9PXUobik7aWYoYT09bnVsbClyZXR1cm4gYXdhaXQgbmF2aWdhdG9yLnN0b3JhZ2UuZ2V0RGlyZWN0b3J5KCk7Y29uc3QgaT1hLnNwbGl0KCIvIikuZmlsdGVyKHQ9PnQubGVuZ3RoPjApO3RyeXtsZXQgdD1hd2FpdCBuYXZpZ2F0b3Iuc3RvcmFnZS5nZXREaXJlY3RvcnkoKTtmb3IoY29uc3QgcyBvZiBpKXQ9YXdhaXQgdC5nZXREaXJlY3RvcnlIYW5kbGUocyx7Y3JlYXRlOmUuY3JlYXRlfSk7aWYoZS5pc0ZpbGUpcmV0dXJuIGF3YWl0IHQuZ2V0RmlsZUhhbmRsZShyLHtjcmVhdGU6ZS5jcmVhdGV9KX1jYXRjaCh0KXtpZih0Lm5hbWU9PT0iTm90Rm91bmRFcnJvciIpcmV0dXJuIG51bGw7dGhyb3cgdH19Y29uc3QgZj17fTtzZWxmLm9ubWVzc2FnZT1hc3luYyBuPT57dmFyIGk7Y29uc3R7ZXZ0VHlwZTplLGFyZ3M6YX09bi5kYXRhO2xldCByPWZbYS5maWxlSWRdO3RyeXtsZXQgdDtjb25zdCBzPVtdO2lmKGU9PT0icmVnaXN0ZXIiKXtjb25zdCBsPWF3YWl0IHcoYS5maWxlUGF0aCx7Y3JlYXRlOiEwLGlzRmlsZTohMH0pO2lmKGw9PW51bGwpdGhyb3cgRXJyb3IoYG5vdCBmb3VuZCBmaWxlOiAke2EuZmlsZUlkfWApO3I9YXdhaXQgbC5jcmVhdGVTeW5jQWNjZXNzSGFuZGxlKHttb2RlOmEubW9kZX0pLGZbYS5maWxlSWRdPXJ9ZWxzZSBpZihlPT09ImNsb3NlIilhd2FpdCByLmNsb3NlKCksZGVsZXRlIGZbYS5maWxlSWRdO2Vsc2UgaWYoZT09PSJ0cnVuY2F0ZSIpYXdhaXQgci50cnVuY2F0ZShhLm5ld1NpemUpO2Vsc2UgaWYoZT09PSJ3cml0ZSIpe2NvbnN0e2RhdGE6bCxvcHRzOm99PW4uZGF0YS5hcmdzO3Q9YXdhaXQgci53cml0ZShsLG8pfWVsc2UgaWYoZT09PSJyZWFkIil7Y29uc3R7b2Zmc2V0Omwsc2l6ZTpvfT1uLmRhdGEuYXJncyxnPW5ldyBVaW50OEFycmF5KG8pLGQ9YXdhaXQgci5yZWFkKGcse2F0Omx9KSxjPWcuYnVmZmVyO3Q9ZD09PW8/YzooKGk9Yy50cmFuc2Zlcik9PW51bGw/dm9pZCAwOmkuY2FsbChjLGQpKT8/Yy5zbGljZSgwLGQpLHMucHVzaCh0KX1lbHNlIGU9PT0iZ2V0U2l6ZSI/dD1hd2FpdCByLmdldFNpemUoKTplPT09ImZsdXNoIiYmYXdhaXQgci5mbHVzaCgpO3NlbGYucG9zdE1lc3NhZ2Uoe2V2dFR5cGU6ImNhbGxiYWNrIixjYklkOm4uZGF0YS5jYklkLHJldHVyblZhbDp0fSxzKX1jYXRjaCh0KXtjb25zdCBzPXQ7c2VsZi5wb3N0TWVzc2FnZSh7ZXZ0VHlwZToidGhyb3dFcnJvciIsY2JJZDpuLmRhdGEuY2JJZCxlcnJNc2c6cy5uYW1lKyI6ICIrcy5tZXNzYWdlK2AKYCtKU09OLnN0cmluZ2lmeShuLmRhdGEpfSl9fX0pKCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZnMtd29ya2VyLUY0UldscWNfLmpzLm1hcAo=\", B = (t) => Uint8Array.from(atob(t), (e) => e.charCodeAt(0)), U = typeof self < \"u\" && self.Blob && new Blob([B(z)], { type: \"text/javascript;charset=utf-8\" });\nfunction Q(t) {\n let e;\n try {\n if (e = U && (self.URL || self.webkitURL).createObjectURL(U), !e) throw \"\";\n const r = new Worker(e, {\n name: t == null ? void 0 : t.name\n });\n return r.addEventListener(\"error\", () => {\n (self.URL || self.webkitURL).revokeObjectURL(e);\n }), r;\n } catch {\n return new Worker(\n \"data:text/javascript;base64,\" + z,\n {\n name: t == null ? void 0 : t.name\n }\n );\n } finally {\n e && (self.URL || self.webkitURL).revokeObjectURL(e);\n }\n}\nasync function D(t, e, r) {\n const a = M();\n return await a(\"register\", { fileId: t, filePath: e, mode: r }), {\n read: async (i, n) => await a(\"read\", {\n fileId: t,\n offset: i,\n size: n\n }),\n write: async (i, n) => await a(\n \"write\",\n {\n fileId: t,\n data: i,\n opts: n\n },\n [ArrayBuffer.isView(i) ? i.buffer : i]\n ),\n close: async () => await a(\"close\", {\n fileId: t\n }),\n truncate: async (i) => await a(\"truncate\", {\n fileId: t,\n newSize: i\n }),\n getSize: async () => await a(\"getSize\", {\n fileId: t\n }),\n flush: async () => await a(\"flush\", {\n fileId: t\n })\n };\n}\nconst I = [];\nlet V = 0;\nfunction M() {\n if (I.length < 3) {\n const e = t();\n return I.push(e), e;\n } else {\n const e = I[V];\n return V = (V + 1) % I.length, e;\n }\n function t() {\n const e = new Q();\n let r = 0, a = {};\n return e.onmessage = ({\n data: i\n }) => {\n var n, c;\n i.evtType === \"callback\" ? (n = a[i.cbId]) == null || n.resolve(i.returnVal) : i.evtType === \"throwError\" && ((c = a[i.cbId]) == null || c.reject(Error(i.errMsg))), delete a[i.cbId];\n }, async function(n, c, u = []) {\n r += 1;\n const h = new Promise((b, T) => {\n a[r] = { resolve: b, reject: T };\n });\n return e.postMessage(\n {\n cbId: r,\n evtType: n,\n args: c\n },\n u\n ), h;\n };\n }\n}\nfunction v(t) {\n if (t === \"/\") return { parent: null, name: \"\" };\n const e = t.split(\"/\").filter((i) => i.length > 0);\n if (e.length === 0) throw Error(\"Invalid path\");\n const r = e[e.length - 1], a = \"/\" + e.slice(0, -1).join(\"/\");\n return { name: r, parent: a };\n}\nasync function d(t, e) {\n const { parent: r, name: a } = v(t);\n if (r == null) return await navigator.storage.getDirectory();\n const i = r.split(\"/\").filter((n) => n.length > 0);\n try {\n let n = await navigator.storage.getDirectory();\n for (const c of i)\n n = await n.getDirectoryHandle(c, {\n create: e.create\n });\n return e.isFile ? await n.getFileHandle(a, {\n create: e.create\n }) : await n.getDirectoryHandle(a, {\n create: e.create\n });\n } catch (n) {\n if (n.name === \"NotFoundError\")\n return null;\n throw n;\n }\n}\nasync function j(t) {\n const { parent: e, name: r } = v(t);\n if (e == null) {\n const i = await navigator.storage.getDirectory();\n for await (const n of i.keys())\n await i.removeEntry(n, { recursive: !0 });\n return;\n }\n const a = await d(e, {\n create: !1,\n isFile: !1\n });\n a != null && await a.removeEntry(r, { recursive: !0 });\n}\nfunction k(t, e) {\n return `${t}/${e}`.replace(\"//\", \"/\");\n}\nfunction g(t) {\n return new K(t);\n}\nvar w, S, p;\nclass K {\n constructor(e) {\n o(this, w);\n o(this, S);\n o(this, p);\n l(this, w, e);\n const { parent: r, name: a } = v(e);\n l(this, S, a), l(this, p, r);\n }\n get kind() {\n return \"dir\";\n }\n get name() {\n return s(this, S);\n }\n get path() {\n return s(this, w);\n }\n get parent() {\n return s(this, p) == null ? null : g(s(this, p));\n }\n /**\n * Creates the directory.\n * return A promise that resolves when the directory is created.\n */\n async create() {\n return await d(s(this, w), {\n create: !0,\n isFile: !1\n }), g(s(this, w));\n }\n /**\n * Checks if the directory exists.\n * return A promise that resolves to true if the directory exists, otherwise false.\n */\n async exists() {\n return await d(s(this, w), {\n create: !1,\n isFile: !1\n }) instanceof FileSystemDirectoryHandle;\n }\n /**\n * Removes the directory.\n * return A promise that resolves when the directory is removed.\n */\n async remove() {\n for (const e of await this.children())\n try {\n await e.remove();\n } catch (r) {\n console.warn(r);\n }\n try {\n await j(s(this, w));\n } catch (e) {\n console.warn(e);\n }\n }\n /**\n * Retrieves the children of the directory.\n * return A promise that resolves to an array of objects representing the children.\n */\n async children() {\n const e = await d(s(this, w), {\n create: !1,\n isFile: !1\n });\n if (e == null) return [];\n const r = [];\n for await (const a of e.values())\n r.push((a.kind === \"file\" ? m : g)(k(s(this, w), a.name)));\n return r;\n }\n /**\n * If the dest folder exists, copy the current directory into the dest folder;\n * if the dest folder does not exist, rename the current directory to dest name.\n */\n async copyTo(e) {\n if (!await this.exists())\n throw Error(`dir ${this.path} not exists`);\n const r = await e.exists() ? g(k(e.path, this.name)) : e;\n return await r.create(), await Promise.all((await this.children()).map((a) => a.copyTo(r))), r;\n }\n /**\n * move directory, copy then remove current\n */\n async moveTo(e) {\n const r = await this.copyTo(e);\n return await this.remove(), r;\n }\n}\nw = new WeakMap(), S = new WeakMap(), p = new WeakMap();\nconst C = /* @__PURE__ */ new Map();\nfunction m(t, e = \"rw\") {\n if (e === \"rw\") {\n const r = C.get(t) ?? new F(t, e);\n return C.set(t, r), r;\n }\n return new F(t, e);\n}\nasync function J(t, e, r = { overwrite: !0 }) {\n if (e instanceof F) {\n await J(t, await e.stream(), r);\n return;\n }\n const a = await (t instanceof F ? t : m(t, \"rw\")).createWriter();\n try {\n if (r.overwrite && await a.truncate(0), e instanceof ReadableStream) {\n const i = e.getReader();\n for (; ; ) {\n const { done: n, value: c } = await i.read();\n if (n) break;\n await a.write(c);\n }\n } else\n await a.write(e);\n } catch (i) {\n throw i;\n } finally {\n await a.close();\n }\n}\nlet _ = 0;\nconst A = () => ++_;\nvar f, Z, G, Y, X, y, R, W;\nconst P = class P {\n constructor(e, r) {\n o(this, f);\n o(this, Z);\n o(this, G);\n o(this, Y);\n o(this, X);\n o(this, y, 0);\n o(this, R, /* @__PURE__ */ (() => {\n let e = null;\n return () => (l(this, y, s(this, y) + 1), e ?? (e = new Promise(async (r, a) => {\n try {\n const i = await D(\n s(this, X),\n s(this, f),\n s(this, Y)\n );\n r([\n i,\n async () => {\n l(this, y, s(this, y) - 1), !(s(this, y) > 0) && (e = null, await i.close());\n }\n ]);\n } catch (i) {\n a(i);\n }\n })));\n })());\n o(this, W, !1);\n l(this, X, A()), l(this, f, e), l(this, Y, {\n r: \"read-only\",\n rw: \"readwrite\",\n \"rw-unsafe\": \"readwrite-unsafe\"\n }[r]);\n const { parent: a, name: i } = v(e);\n l(this, G, i), l(this, Z, a);\n }\n get kind() {\n return \"file\";\n }\n get path() {\n return s(this, f);\n }\n get name() {\n return s(this, G);\n }\n get parent() {\n return s(this, Z) == null ? null : g(s(this, Z));\n }\n /**\n * Random write to file\n */\n async createWriter() {\n if (s(this, Y) === \"read-only\") throw Error(\"file is read-only\");\n if (s(this, W)) throw Error(\"Other writer have not been closed\");\n l(this, W, !0);\n const e = new TextEncoder(), [r, a] = await s(this, R).call(this);\n let i = await r.getSize(), n = !1;\n return {\n write: async (c, u = {}) => {\n if (n) throw Error(\"Writer is closed\");\n const h = typeof c == \"string\" ? e.encode(c) : c, b = u.at ?? i, T = h.byteLength;\n return i = b + T, await r.write(h, { at: b });\n },\n truncate: async (c) => {\n if (n) throw Error(\"Writer is closed\");\n await r.truncate(c), i > c && (i = c);\n },\n flush: async () => {\n if (n) throw Error(\"Writer is closed\");\n await r.flush();\n },\n close: async () => {\n if (n) throw Error(\"Writer is closed\");\n n = !0, l(this, W, !1), await a();\n }\n };\n }\n /**\n * Random access to file\n */\n async createReader() {\n const [e, r] = await s(this, R).call(this);\n let a = !1, i = 0;\n return {\n read: async (n, c = {}) => {\n if (a) throw Error(\"Reader is closed\");\n const u = c.at ?? i, h = await e.read(u, n);\n return i = u + h.byteLength, h;\n },\n getSize: async () => {\n if (a) throw Error(\"Reader is closed\");\n return await e.getSize();\n },\n close: async () => {\n a || (a = !0, await r());\n }\n };\n }\n async text() {\n return new TextDecoder().decode(await this.arrayBuffer());\n }\n async arrayBuffer() {\n const e = await d(s(this, f), { create: !1, isFile: !0 });\n return e == null ? new ArrayBuffer(0) : (await e.getFile()).arrayBuffer();\n }\n async stream() {\n const e = await this.getOriginFile();\n return e == null ? new ReadableStream({\n pull: (r) => {\n r.close();\n }\n }) : e.stream();\n }\n async getOriginFile() {\n var e;\n return (e = await d(s(this, f), { create: !1, isFile: !0 })) == null ? void 0 : e.getFile();\n }\n async getSize() {\n const e = await d(s(this, f), { create: !1, isFile: !0 });\n return e == null ? 0 : (await e.getFile()).size;\n }\n async exists() {\n return await d(s(this, f), {\n create: !1,\n isFile: !0\n }) instanceof FileSystemFileHandle;\n }\n async remove() {\n if (s(this, y)) throw Error(\"exists unclosed reader/writer\");\n await j(s(this, f));\n }\n /**\n * If the target is a file, use current overwrite the target;\n * if the target is a folder, copy the current file into that folder.\n */\n async copyTo(e) {\n if (!await this.exists())\n throw Error(`file ${this.path} not exists`);\n if (e instanceof P)\n return m(e.path) === this ? this : (await J(e.path, this), m(e.path));\n if (e instanceof K)\n return await this.copyTo(m(k(e.path, this.name)));\n throw Error(\"Illegal target type\");\n }\n /**\n * move file, copy then remove current\n */\n async moveTo(e) {\n const r = await this.copyTo(e);\n return await this.remove(), r;\n }\n};\nf = new WeakMap(), Z = new WeakMap(), G = new WeakMap(), Y = new WeakMap(), X = new WeakMap(), y = new WeakMap(), R = new WeakMap(), W = new WeakMap();\nlet F = P;\nconst L = \"/.opfs-tools-temp-dir\";\nasync function N(t) {\n try {\n if (t.kind === \"file\") {\n if (!await t.exists()) return !0;\n const e = await t.createWriter();\n await e.truncate(0), await e.close(), await t.remove();\n } else\n await t.remove();\n return !0;\n } catch (e) {\n return console.warn(e), !1;\n }\n}\nfunction $() {\n setInterval(async () => {\n for (const e of await g(L).children()) {\n const r = /^\\d+-(\\d+)$/.exec(e.name);\n (r == null || Date.now() - Number(r[1]) > 2592e5) && await N(e);\n }\n }, 60 * 1e3);\n}\nconst x = [];\nlet H = !1;\nasync function q() {\n if (globalThis.localStorage == null) return;\n const t = \"OPFS_TOOLS_EXPIRES_TMP_FILES\";\n H || (H = !0, globalThis.addEventListener(\"unload\", () => {\n x.length !== 0 && localStorage.setItem(\n t,\n `${localStorage.getItem(t) ?? \"\"},${x.join(\",\")}`\n );\n }));\n let e = localStorage.getItem(t) ?? \"\";\n for (const r of e.split(\",\"))\n r.length !== 0 && await N(m(`${L}/${r}`)) && (e = e.replace(r, \"\"));\n localStorage.setItem(t, e.replace(/,{2,}/g, \",\"));\n}\n(async function() {\n var e;\n globalThis.__opfs_tools_tmpfile_init__ !== !0 && (globalThis.__opfs_tools_tmpfile_init__ = !0, !(globalThis.FileSystemDirectoryHandle == null || globalThis.FileSystemFileHandle == null || ((e = globalThis.navigator) == null ? void 0 : e.storage.getDirectory) == null) && ($(), await q()));\n})();\nfunction te() {\n const t = `${Math.random().toString().slice(2)}-${Date.now()}`;\n return x.push(t), m(`${L}/${t}`);\n}\nfunction re(t, e) {\n let r = m(t), a = 0, i = r.createWriter(), n = r.createReader();\n const c = async (u) => {\n const b = await (await n).read(a, { at: Math.round(a * 0.3) });\n a = await u.write(b, { at: 0 }), await u.truncate(a);\n };\n return {\n append: async (u) => {\n const h = await i;\n a += await h.write(u), a >= e && await c(h);\n },\n text: r.text.bind(r),\n remove: async () => {\n await (await n).close(), await (await i).close(), await r.remove();\n },\n getSize: async () => a\n };\n}\nexport {\n g as dir,\n m as file,\n re as rollfile,\n te as tmpfile,\n J as write\n};\n//# sourceMappingURL=opfs-tools.js.map\n","import { tmpfile } from 'opfs-tools';\n\n/**\n * 将任意对象转换成String,如果包含Error,则将Error转换为err.toString()\n * @param val any\n */\nfunction any2Str(val: any): string {\n if (val instanceof Error) return String(val);\n return typeof val === 'object'\n ? JSON.stringify(val, (_, v) => (v instanceof Error ? String(v) : v))\n : String(val);\n}\n\nfunction getTimeStr() {\n const d = new Date();\n return `${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}.${d.getMilliseconds()}`;\n}\n\nlet THRESHOLD = 1;\n\nconst localFile = tmpfile();\n\nlet writer: Awaited> | null = null;\n\ntype LvName = 'debug' | 'info' | 'warn' | 'error';\nconst lvHandler = ['debug', 'info', 'warn', 'error'].reduce(\n (acc, lvName, lvThres) =>\n Object.assign(acc, {\n [lvName]: (...args: any[]) => {\n if (THRESHOLD <= lvThres) {\n console[lvName as LvName](...args);\n writer?.write(\n `[${lvName}][${getTimeStr()}] ${args\n .map((a) => any2Str(a))\n .join(' ')}\\n`,\n );\n }\n },\n }),\n {} as Record,\n);\n\nconst map = new Map();\n\n/**\n * 全局日志对象,将日志内容写入 OPFS 临时文件\n */\nexport const Log = {\n /**\n * 设置记录日志的级别\n *\n * @example\n * Log.setLogLevel(Log.warn) // 记录 warn,error 日志\n */\n setLogLevel: (logfn: T) => {\n THRESHOLD = map.get(logfn) ?? 1;\n },\n ...lvHandler,\n /**\n * 生成一个 log 实例,所有输出前都会附加 tag\n *\n * @example\n * const log = Log.create('')\n * log.info('xxx') // ' xxx'\n */\n create: (tag: string) => {\n return Object.fromEntries(\n Object.entries(lvHandler).map(([k, h]) => [\n k,\n (...args: any[]) => h(tag, ...args),\n ]),\n );\n },\n\n /**\n * 将所有日志导出为一个字符串\n *\n * @example\n * Log.dump() // => [level][time] 内容...\n *\n */\n async dump() {\n await initPromise;\n await writer?.flush();\n return await localFile.text();\n },\n};\n\nmap.set(Log.debug, 0);\nmap.set(Log.info, 1);\nmap.set(Log.warn, 2);\nmap.set(Log.error, 3);\n\nasync function init() {\n try {\n writer = await localFile.createWriter();\n Log.info(navigator.userAgent);\n Log.info('date: ' + new Date().toLocaleDateString());\n } catch (err) {\n if (!(err instanceof Error)) throw err;\n if (err.message.includes('createSyncAccessHandle is not a function')) {\n console.warn(err);\n } else {\n throw err;\n }\n }\n}\n\n// 如果是浏览器环境,再进行初始化,避免 node(SSR) 环境 import 时报错\nconst initPromise = globalThis.navigator == null ? null : init();\n\nif (import.meta.env?.DEV) {\n Log.setLogLevel(Log.debug);\n}\n\nif (import.meta.env?.MODE === 'test') {\n Log.setLogLevel(Log.warn);\n}\n","const setup = (): void => {\n let timerId: number;\n\n let interval: number = 16.6;\n\n self.onmessage = (e) => {\n if (e.data.event === 'start') {\n self.clearInterval(timerId);\n timerId = self.setInterval(() => {\n self.postMessage({});\n }, interval);\n }\n\n if (e.data.event === 'stop') {\n self.clearInterval(timerId);\n }\n };\n};\n\nconst createWorker = (): Worker => {\n const blob = new Blob([`(${setup.toString()})()`]);\n const url = URL.createObjectURL(blob);\n return new Worker(url);\n};\n\nconst handlerMap = new Map void>>();\nlet runCount = 1;\n\nlet worker: Worker | null = null;\nif (globalThis.Worker != null) {\n worker = createWorker();\n worker.onmessage = () => {\n runCount += 1;\n for (const [k, v] of handlerMap) {\n if (runCount % k === 0) for (const fn of v) fn();\n }\n };\n}\n\n/**\n * 专门解决页面长时间处于后台时,定时器不(或延迟)执行的问题\n *\n * 跟 `setInterval` 很相似,⚠️ 但 time 会有一定偏差,请优先使用 `setInterval`\n *\n * @see [JS 定时器时长控制细节](https://hughfenghen.github.io/posts/2023/06/15/timer-delay/)\n */\nexport const workerTimer = (\n handler: () => void,\n time: number,\n): (() => void) => {\n const groupId = Math.round(time / 16.6);\n const fns = handlerMap.get(groupId) ?? new Set();\n fns.add(handler);\n handlerMap.set(groupId, fns);\n\n if (handlerMap.size === 1 && fns.size === 1) {\n worker?.postMessage({ event: 'start' });\n }\n\n return () => {\n fns.delete(handler);\n if (fns.size === 0) handlerMap.delete(groupId);\n if (handlerMap.size === 0) {\n runCount = 0;\n worker?.postMessage({ event: 'stop' });\n }\n };\n};\n","/*\r\n * Copyright (c) 2019 Rafael da Silva Rocha.\r\n * Copyright 2012 Spencer Cohen\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview The Interpolator class. Based on Smooth.js by Spencer Cohen.\r\n * @see https://github.com/rochars/wave-resampler\r\n * @see https://github.com/osuushi/Smooth.js\r\n */\r\n\r\n/**\r\n * A class to get scaled values out of arrays.\r\n */\r\nexport class Interpolator {\r\n \r\n /**\r\n * @param {number} scaleFrom the length of the original array.\r\n * @param {number} scaleTo The length of the new array.\r\n * @param {?Object} details The extra configuration, if needed.\r\n */\r\n constructor(scaleFrom, scaleTo, details) {\r\n /**\r\n * The length of the original array.\r\n * @type {number}\r\n */\r\n this.length_ = scaleFrom;\r\n /**\r\n * The scaling factor.\r\n * @type {number}\r\n */\r\n this.scaleFactor_ = (scaleFrom - 1) / scaleTo;\r\n /**\r\n * The interpolation function.\r\n * @type {Function}\r\n */\r\n this.interpolate = this.cubic;\r\n if (details.method === 'point') {\r\n \tthis.interpolate = this.point;\r\n } else if(details.method === 'linear') {\r\n \tthis.interpolate = this.linear;\r\n } else if(details.method === 'sinc') {\r\n \tthis.interpolate = this.sinc;\r\n }\r\n /**\r\n * The tanget factor for cubic interpolation.\r\n * @type {number}\r\n */\r\n this.tangentFactor_ = 1 - Math.max(0, Math.min(1, details.tension || 0));\r\n // Configure the kernel for sinc\r\n /**\r\n * The sinc filter size.\r\n * @type {number}\r\n */\r\n this.sincFilterSize_ = details.sincFilterSize || 1;\r\n /**\r\n * The sinc kernel.\r\n * @type {Function}\r\n */\r\n this.kernel_ = sincKernel_(details.sincWindow || window_);\r\n }\r\n\r\n /**\r\n * @param {number} t The index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The interpolated value.\r\n */\r\n point(t, samples) {\r\n return this.getClippedInput_(Math.round(this.scaleFactor_ * t), samples);\r\n }\r\n\r\n /**\r\n * @param {number} t The index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The interpolated value.\r\n */\r\n linear(t, samples) {\r\n t = this.scaleFactor_ * t;\r\n let k = Math.floor(t);\r\n t -= k;\r\n return (1 - t) *\r\n \tthis.getClippedInput_(k, samples) + t *\r\n \tthis.getClippedInput_(k + 1, samples);\r\n }\r\n\r\n /**\r\n * @param {number} t The index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The interpolated value.\r\n */\r\n cubic(t, samples) {\r\n t = this.scaleFactor_ * t;\r\n let k = Math.floor(t);\r\n let m = [this.getTangent_(k, samples), this.getTangent_(k + 1, samples)];\r\n let p = [this.getClippedInput_(k, samples),\r\n this.getClippedInput_(k + 1, samples)];\r\n t -= k;\r\n let t2 = t * t;\r\n let t3 = t * t2;\r\n return (2 * t3 - 3 * t2 + 1) *\r\n p[0] + (t3 - 2 * t2 + t) *\r\n m[0] + (-2 * t3 + 3 * t2) *\r\n p[1] + (t3 - t2) * m[1];\r\n }\r\n\r\n /**\r\n * @param {number} t The index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The interpolated value.\r\n */\r\n sinc(t, samples) {\r\n t = this.scaleFactor_ * t;\r\n let k = Math.floor(t);\r\n let ref = k - this.sincFilterSize_ + 1;\r\n let ref1 = k + this.sincFilterSize_;\r\n let sum = 0;\r\n for (let n = ref; n <= ref1; n++) {\r\n sum += this.kernel_(t - n) * this.getClippedInput_(n, samples);\r\n }\r\n return sum;\r\n }\r\n\r\n /**\r\n * @param {number} k The scaled index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The tangent.\r\n * @private\r\n */\r\n getTangent_(k, samples) {\r\n return this.tangentFactor_ *\r\n (this.getClippedInput_(k + 1, samples) -\r\n this.getClippedInput_(k - 1, samples)) / 2;\r\n }\r\n\r\n /**\r\n * @param {number} t The scaled index to interpolate.\r\n * @param {Array|TypedArray} samples the original array.\r\n * @return {number} The interpolated value.\r\n * @private\r\n */\r\n getClippedInput_(t, samples) {\r\n if ((0 <= t && t < this.length_)) {\r\n return samples[t];\r\n }\r\n return 0;\r\n }\r\n}\r\n\r\n// Sinc functions\r\n\r\n/**\r\n * The default window function.\r\n * @param {number} x The sinc signal.\r\n * @return {number}\r\n * @private\r\n */\r\nfunction window_(x) {\r\n return Math.exp(-x / 2 * x / 2);\r\n}\r\n\r\n/**\r\n * @param {Function} window The window function.\r\n * @return {Function}\r\n * @private\r\n */\r\nfunction sincKernel_(window) {\r\n return function(x) { return sinc_(x) * window(x); };\r\n}\r\n\r\n/**\r\n * @param {number} x The sinc signal.\r\n * @return {number}\r\n * @private\r\n */\r\nfunction sinc_(x) {\r\n if (x === 0) {\r\n return 1;\r\n }\r\n return Math.sin(Math.PI * x) / (Math.PI * x);\r\n}\r\n\r\n","/*\r\n * Copyright (c) 2019 Rafael da Silva Rocha.\r\n * Copyright (c) 2014 Florian Markert\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview FIR LPF. Based on the FIR LPF from Fili by Florian Markert.\r\n * @see https://github.com/rochars/wave-resampler\r\n * @see https://github.com/markert/fili.js\r\n */\r\n\r\n/**\r\n * A FIR low pass filter.\r\n */\r\nexport class FIRLPF {\r\n \r\n /**\r\n * @param {number} order The order of the filter.\r\n * @param {number} sampleRate The sample rate.\r\n * @param {number} cutOff The cut off frequency.\r\n */\r\n constructor(order, sampleRate, cutOff) {\r\n let omega = 2 * Math.PI * cutOff / sampleRate;\r\n let dc = 0;\r\n this.filters = [];\r\n for (let i = 0; i <= order; i++) {\r\n if (i - order / 2 === 0) {\r\n this.filters[i] = omega;\r\n } else {\r\n this.filters[i] = Math.sin(omega * (i - order / 2)) / (i - order / 2);\r\n // Hamming window\r\n this.filters[i] *= (0.54 - 0.46 * Math.cos(2 * Math.PI * i / order));\r\n }\r\n dc = dc + this.filters[i];\r\n }\r\n // normalize\r\n for (let i = 0; i <= order; i++) {\r\n this.filters[i] /= dc;\r\n }\r\n this.z = this.initZ_();\r\n }\r\n\r\n /**\r\n * @param {number} sample A sample of a sequence.\r\n * @return {number}\r\n */\r\n filter(sample) {\r\n this.z.buf[this.z.pointer] = sample;\r\n let out = 0;\r\n for (let i = 0, len = this.z.buf.length; i < len; i++) {\r\n out += (\r\n this.filters[i] * this.z.buf[(this.z.pointer + i) % this.z.buf.length]);\r\n }\r\n this.z.pointer = (this.z.pointer + 1) % (this.z.buf.length);\r\n return out;\r\n }\r\n\r\n /**\r\n * Reset the filter.\r\n */\r\n reset() {\r\n this.z = this.initZ_();\r\n }\r\n\r\n /**\r\n * Return the default value for z.\r\n * @private\r\n */\r\n initZ_() {\r\n let r = [];\r\n for (let i = 0; i < this.filters.length - 1; i++) {\r\n r.push(0);\r\n }\r\n return {\r\n buf: r,\r\n pointer: 0\r\n };\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2019 Rafael da Silva Rocha.\r\n * Copyright (c) 2014 Florian Markert\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview Butterworth LPF. Based on the Butterworth LPF from Fili.js.\r\n * @see https://github.com/rochars/wave-resampler\r\n * @see https://github.com/markert/fili.js\r\n */\r\n\r\n/**\r\n * Butterworth LPF.\r\n */\r\nexport class ButterworthLPF {\r\n \r\n /**\r\n * @param {number} order The order of the filter.\r\n * @param {number} sampleRate The sample rate.\r\n * @param {number} cutOff The cut off frequency.\r\n */\r\n constructor(order, sampleRate, cutOff) {\r\n let filters = [];\r\n for (let i = 0; i < order; i++) {\r\n filters.push(this.getCoeffs_({\r\n Fs: sampleRate,\r\n Fc: cutOff,\r\n Q: 0.5 / (Math.sin((Math.PI / (order * 2)) * (i + 0.5)))\r\n }));\r\n }\r\n this.stages = [];\r\n for (let i = 0; i < filters.length; i++) {\r\n this.stages[i] = {\r\n b0 : filters[i].b[0],\r\n b1 : filters[i].b[1],\r\n b2 : filters[i].b[2],\r\n a1 : filters[i].a[0],\r\n a2 : filters[i].a[1],\r\n k : filters[i].k,\r\n z : [0, 0]\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * @param {number} sample A sample of a sequence.\r\n * @return {number}\r\n */\r\n filter(sample) {\r\n let out = sample;\r\n for (let i = 0, len = this.stages.length; i < len; i++) {\r\n out = this.runStage_(i, out);\r\n }\r\n return out;\r\n }\r\n\r\n getCoeffs_(params) {\r\n let coeffs = {};\r\n coeffs.z = [0, 0];\r\n coeffs.a = [];\r\n coeffs.b = [];\r\n let p = this.preCalc_(params, coeffs);\r\n coeffs.k = 1;\r\n coeffs.b.push((1 - p.cw) / (2 * p.a0));\r\n coeffs.b.push(2 * coeffs.b[0]);\r\n coeffs.b.push(coeffs.b[0]);\r\n return coeffs;\r\n }\r\n\r\n preCalc_(params, coeffs) {\r\n let pre = {};\r\n let w = 2 * Math.PI * params.Fc / params.Fs;\r\n pre.alpha = Math.sin(w) / (2 * params.Q);\r\n pre.cw = Math.cos(w);\r\n pre.a0 = 1 + pre.alpha;\r\n coeffs.a0 = pre.a0;\r\n coeffs.a.push((-2 * pre.cw) / pre.a0);\r\n coeffs.k = 1;\r\n coeffs.a.push((1 - pre.alpha) / pre.a0);\r\n return pre;\r\n }\r\n \r\n runStage_(i, input) {\r\n let temp =\r\n input * this.stages[i].k - this.stages[i].a1 * this.stages[i].z[0] -\r\n this.stages[i].a2 * this.stages[i].z[1];\r\n let out =\r\n this.stages[i].b0 * temp + this.stages[i].b1 * this.stages[i].z[0] +\r\n this.stages[i].b2 * this.stages[i].z[1];\r\n this.stages[i].z[1] = this.stages[i].z[0];\r\n this.stages[i].z[0] = temp;\r\n return out;\r\n }\r\n\r\n /**\r\n * Reset the filter.\r\n */\r\n reset() {\r\n for (let i = 0; i < this.stages.length; i++) {\r\n this.stages[i].z = [0, 0];\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2019 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview The resample function.\r\n * @see https://github.com/rochars/wave-resampler\r\n */\r\n\r\nimport { Interpolator } from './lib/interpolator';\r\nimport { FIRLPF } from './lib/fir-lpf';\r\nimport { ButterworthLPF } from './lib/butterworth-lpf';\r\n\r\n/**\r\n * Configures wich resampling method uses LPF by default.\r\n * @private\r\n */\r\nconst DEFAULT_LPF_USE = {\r\n 'point': false,\r\n 'linear': false,\r\n 'cubic': true,\r\n 'sinc': true\r\n};\r\n\r\n/**\r\n * The default orders for the LPF types.\r\n * @private\r\n */\r\nconst DEFAULT_LPF_ORDER = {\r\n 'IIR': 16,\r\n 'FIR': 71\r\n};\r\n\r\n/**\r\n * The classes to use with each LPF type.\r\n * @private\r\n */\r\nconst DEFAULT_LPF = {\r\n 'IIR': ButterworthLPF,\r\n 'FIR': FIRLPF\r\n};\r\n\r\n/**\r\n * Change the sample rate of the samples to a new sample rate.\r\n * @param {!Array|!TypedArray} samples The original samples.\r\n * @param {number} oldSampleRate The original sample rate.\r\n * @param {number} sampleRate The target sample rate.\r\n * @param {?Object} details The extra configuration, if needed.\r\n * @return {!Float64Array} the new samples.\r\n */\r\nexport function resample(samples, oldSampleRate, sampleRate, details={}) { \r\n // Make the new sample container\r\n let rate = ((sampleRate - oldSampleRate) / oldSampleRate) + 1;\r\n let newSamples = new Float64Array(samples.length * (rate));\r\n // Create the interpolator\r\n details.method = details.method || 'cubic';\r\n let interpolator = new Interpolator(\r\n samples.length,\r\n newSamples.length,\r\n {\r\n method: details.method,\r\n tension: details.tension || 0,\r\n sincFilterSize: details.sincFilterSize || 6,\r\n sincWindow: details.sincWindow || undefined\r\n });\r\n // Resample + LPF\r\n if (details.LPF === undefined) {\r\n details.LPF = DEFAULT_LPF_USE[details.method];\r\n } \r\n if (details.LPF) {\r\n details.LPFType = details.LPFType || 'IIR';\r\n const LPF = DEFAULT_LPF[details.LPFType];\r\n // Upsampling\r\n if (sampleRate > oldSampleRate) {\r\n let filter = new LPF(\r\n details.LPFOrder || DEFAULT_LPF_ORDER[details.LPFType],\r\n sampleRate,\r\n (oldSampleRate / 2));\r\n upsample_(\r\n samples, newSamples, interpolator, filter);\r\n // Downsampling\r\n } else {\r\n let filter = new LPF(\r\n details.LPFOrder || DEFAULT_LPF_ORDER[details.LPFType],\r\n oldSampleRate,\r\n sampleRate / 2);\r\n downsample_(\r\n samples, newSamples, interpolator, filter);\r\n }\r\n // Resample, no LPF\r\n } else {\r\n resample_(samples, newSamples, interpolator);\r\n }\r\n return newSamples;\r\n}\r\n\r\n/**\r\n * Resample.\r\n * @param {!Array|!TypedArray} samples The original samples.\r\n * @param {!Float64Array} newSamples The container for the new samples.\r\n * @param {Object} interpolator The interpolator.\r\n * @private\r\n */\r\nfunction resample_(samples, newSamples, interpolator) {\r\n // Resample\r\n for (let i = 0, len = newSamples.length; i < len; i++) {\r\n newSamples[i] = interpolator.interpolate(i, samples);\r\n }\r\n}\r\n\r\n/**\r\n * Upsample with LPF.\r\n * @param {!Array|!TypedArray} samples The original samples.\r\n * @param {!Float64Array} newSamples The container for the new samples.\r\n * @param {Object} interpolator The interpolator.\r\n * @param {Object} filter The LPF object.\r\n * @private\r\n */\r\nfunction upsample_(samples, newSamples, interpolator, filter) {\r\n // Resample and filter\r\n for (let i = 0, len = newSamples.length; i < len; i++) {\r\n newSamples[i] = filter.filter(interpolator.interpolate(i, samples));\r\n }\r\n // Reverse filter\r\n filter.reset();\r\n for (let i = newSamples.length - 1; i >= 0; i--) {\r\n newSamples[i] = filter.filter(newSamples[i]);\r\n }\r\n}\r\n\r\n/**\r\n * Downsample with LPF.\r\n * @param {!Array|!TypedArray} samples The original samples.\r\n * @param {!Float64Array} newSamples The container for the new samples.\r\n * @param {Object} interpolator The interpolator.\r\n * @param {Object} filter The LPF object.\r\n * @private\r\n */\r\nfunction downsample_(samples, newSamples, interpolator, filter) {\r\n // Filter\r\n for (let i = 0, len = samples.length; i < len; i++) {\r\n samples[i] = filter.filter(samples[i]);\r\n }\r\n // Reverse filter\r\n filter.reset();\r\n for (let i = samples.length - 1; i >= 0; i--) {\r\n samples[i] = filter.filter(samples[i]);\r\n }\r\n // Resample\r\n resample_(samples, newSamples, interpolator);\r\n}\r\n","// 能同时在 worker 和主线程中运行的工具函数\n\nimport { Log } from './log';\nimport { workerTimer } from './worker-timer';\nimport { resample } from 'wave-resampler';\n\n/**\n * 合并(串联)多个 Float32Array,通常用于合并 PCM 数据\n */\nexport function concatFloat32Array(bufs: Float32Array[]): Float32Array {\n const rs = new Float32Array(\n bufs.map((buf) => buf.length).reduce((a, b) => a + b),\n );\n\n let offset = 0;\n for (const buf of bufs) {\n rs.set(buf, offset);\n offset += buf.length;\n }\n\n return rs;\n}\n\n/**\n * 将小片段的 PCM 合并成一个大片段\n * @param fragments 小片段 PCM,子元素是不同声道的原始 PCM 数据\n */\nexport function concatPCMFragments(\n fragments: Float32Array[][],\n): Float32Array[] {\n // fragments: [[chan0, chan1], [chan0, chan1]...]\n // chanListPCM: [[chan0, chan0...], [chan1, chan1...]]\n const chanListPCM: Float32Array[][] = [];\n for (let i = 0; i < fragments.length; i += 1) {\n for (let j = 0; j < fragments[i].length; j += 1) {\n if (chanListPCM[j] == null) chanListPCM[j] = [];\n chanListPCM[j].push(fragments[i][j]);\n }\n }\n // [bigChan0, bigChan1]\n return chanListPCM.map(concatFloat32Array);\n}\n\n/**\n * 从 AudioData 中提取 PCM 数据的工具函数\n */\nexport function extractPCM4AudioData(ad: AudioData): Float32Array[] {\n if (ad.format === 'f32-planar') {\n const rs = [];\n for (let idx = 0; idx < ad.numberOfChannels; idx += 1) {\n const chanBufSize = ad.allocationSize({ planeIndex: idx });\n const chanBuf = new ArrayBuffer(chanBufSize);\n ad.copyTo(chanBuf, { planeIndex: idx });\n rs.push(new Float32Array(chanBuf));\n }\n return rs;\n } else if (ad.format === 's16') {\n const buf = new ArrayBuffer(ad.allocationSize({ planeIndex: 0 }));\n ad.copyTo(buf, { planeIndex: 0 });\n return convertS16ToF32Planar(new Int16Array(buf), ad.numberOfChannels);\n }\n throw Error('Unsupported audio data format');\n}\n\n/**\n * Convert s16 PCM to f32-planar\n * @param pcmS16Data - The s16 PCM data.\n * @param numChannels - Number of audio channels.\n * @returns An array of Float32Array, each containing the audio data for one channel.\n */\nfunction convertS16ToF32Planar(pcmS16Data: Int16Array, numChannels: number) {\n const numSamples = pcmS16Data.length / numChannels;\n const planarData = Array.from(\n { length: numChannels },\n () => new Float32Array(numSamples),\n );\n\n for (let i = 0; i < numSamples; i++) {\n for (let channel = 0; channel < numChannels; channel++) {\n const sample = pcmS16Data[i * numChannels + channel];\n planarData[channel][i] = sample / 32768; // Normalize to range [-1.0, 1.0]\n }\n }\n\n return planarData;\n}\n\n/**\n * 从 AudioBuffer 中提取 PCM\n */\nexport function extractPCM4AudioBuffer(ab: AudioBuffer): Float32Array[] {\n return Array(ab.numberOfChannels)\n .fill(0)\n .map((_, idx) => {\n return ab.getChannelData(idx);\n });\n}\n\n/**\n * 调整音频数据的音量\n * @param ad - 要调整的音频对象\n * @param volume - 音量调整系数(0.0 - 1.0)\n * @returns 调整音量后的新音频数据\n */\nexport function adjustAudioDataVolume(ad: AudioData, volume: number) {\n const data = new Float32Array(\n concatFloat32Array(extractPCM4AudioData(ad)),\n ).map((v) => v * volume);\n const newAd = new AudioData({\n sampleRate: ad.sampleRate,\n numberOfChannels: ad.numberOfChannels,\n timestamp: ad.timestamp,\n format: ad.format,\n numberOfFrames: ad.numberOfFrames,\n data,\n });\n ad.close();\n return newAd;\n}\n\n/**\n * 解码图像流,返回一个视频帧数组。\n *\n * @param stream - 包含图像数据的可读流。\n * @param type - 图像的 MIME 类型,例如 'image/jpeg'。\n *\n * @returns 返回一个 Promise,该 Promise 在解码完成后解析为 {@link VideoFrame} 数组。\n *\n * @see [解码动图](https://bilibili.github.io/WebAV/demo/1_3-decode-image)\n *\n * @example\n *\n * const frames = await decodeImg(\n * (await fetch('')).body!,\n * `image/gif`,\n * );\n */\nexport async function decodeImg(\n stream: ReadableStream,\n type: string,\n): Promise {\n const init = {\n type,\n data: stream,\n };\n const imageDecoder = new ImageDecoder(init);\n\n await Promise.all([imageDecoder.completed, imageDecoder.tracks.ready]);\n\n let frameCnt = imageDecoder.tracks.selectedTrack?.frameCount ?? 1;\n\n const rs: VideoFrame[] = [];\n for (let i = 0; i < frameCnt; i += 1) {\n rs.push((await imageDecoder.decode({ frameIndex: i })).image);\n }\n return rs;\n}\n\n/**\n * 混合双通道音轨的 PCM 数据,并将多声道并排成一个 Float32Array 输出\n * @param audios - 一个二维数组,每个元素是一个 Float32Array 数组,代表一个音频流的 PCM 数据。\n * 每个 Float32Array 数组的第一个元素是左声道数据,第二个元素(如果有)是右声道数据。\n * 如果只有左声道数据,则右声道将复用左声道数据。\n *\n * @returns 返回一个 Float32Array,返回结果是将这个一个音轨的左右声道并排成 Float32Array。\n *\n * @example\n *\n * const audios = [\n * [new Float32Array([0.1, 0.2, 0.3]), new Float32Array([0.4, 0.5, 0.6])],\n * [new Float32Array([0.7, 0.8, 0.9])],\n * ];\n * const mixed = mixinPCM(audios);\n */\nexport function mixinPCM(audios: Float32Array[][]): Float32Array {\n const maxLen = Math.max(...audios.map((a) => a[0]?.length ?? 0));\n const data = new Float32Array(maxLen * 2);\n\n for (let bufIdx = 0; bufIdx < maxLen; bufIdx++) {\n let chan0 = 0;\n let chan1 = 0;\n for (let trackIdx = 0; trackIdx < audios.length; trackIdx++) {\n const _c0 = audios[trackIdx][0]?.[bufIdx] ?? 0;\n // 如果是单声道 PCM,第二声道复用第一声道数据\n const _c1 = audios[trackIdx][1]?.[bufIdx] ?? _c0;\n chan0 += _c0;\n chan1 += _c1;\n }\n data[bufIdx] = chan0;\n data[bufIdx + maxLen] = chan1;\n }\n\n return data;\n}\n\n/**\n * 对 PCM 音频数据进行重采样。\n *\n * @param pcmData - 一个 Float32Array 数组,每个元素代表一个声道的 PCM 数据。\n * @param curRate - 当前的采样率。\n * @param target - 目标参数对象。\n * @param target.rate - 目标采样率。\n * @param target.chanCount - 目标声道数。\n *\n * @returns 返回一个 Promise,该 Promise 在重采样完成后解析为一个 Float32Array 数组,每个元素代表一个声道的 PCM 数据。\n *\n * @example\n *\n * const pcmData = [new Float32Array([0.1, 0.2, 0.3]), new Float32Array([0.4, 0.5, 0.6])];\n * const curRate = 44100;\n * const target = { rate: 48000, chanCount: 2 };\n * const resampled = await audioResample(pcmData, curRate, target);\n */\nexport async function audioResample(\n pcmData: Float32Array[],\n curRate: number,\n target: {\n rate: number;\n chanCount: number;\n },\n): Promise {\n const chanCnt = pcmData.length;\n const emptyPCM = Array(target.chanCount)\n .fill(0)\n .map(() => new Float32Array(0));\n if (chanCnt === 0) return emptyPCM;\n\n const len = Math.max(...pcmData.map((c) => c.length));\n if (len === 0) return emptyPCM;\n\n // The Worker scope does not have access to OfflineAudioContext\n if (globalThis.OfflineAudioContext == null) {\n return pcmData.map(\n (p) =>\n new Float32Array(\n resample(p, curRate, target.rate, { method: 'sinc', LPF: false }),\n ),\n );\n }\n\n const ctx = new globalThis.OfflineAudioContext(\n target.chanCount,\n (len * target.rate) / curRate,\n target.rate,\n );\n const abSource = ctx.createBufferSource();\n const ab = ctx.createBuffer(chanCnt, len, curRate);\n pcmData.forEach((d, idx) => ab.copyToChannel(d, idx));\n\n abSource.buffer = ab;\n abSource.connect(ctx.destination);\n abSource.start();\n\n return extractPCM4AudioBuffer(await ctx.startRendering());\n}\n\n/**\n * 使当前执行环境暂停一段时间。\n * @param time - 暂停的时间,单位为毫秒。\n * @example\n * await sleep(1000); // 暂停 1 秒\n */\nexport function sleep(time: number): Promise {\n return new Promise((resolve) => {\n const stop = workerTimer(() => {\n stop();\n resolve();\n }, time);\n });\n}\n\n/**\n * 从给定的 Float32Array 中提取一个环形切片,超出边界从 0 开始循环\n *\n * 主要用于截取 PCM 实现循环播放\n *\n * @param data - 输入的 Float32Array。\n * @param start - 切片的开始索引。\n * @param end - 切片的结束索引。\n * @returns - 返回一个新的 Float32Array,包含从 start 到 end 的数据。\n *\n * @example\n * const data = new Float32Array([0, 1, 2, 3, 4, 5]);\n * ringSliceFloat32Array(data, 4, 6); // => Float32Array [4, 5, 0]\n */\nexport function ringSliceFloat32Array(\n data: Float32Array,\n start: number,\n end: number,\n): Float32Array {\n const cnt = end - start;\n const rs = new Float32Array(cnt);\n let i = 0;\n while (i < cnt) {\n rs[i] = data[(start + i) % data.length];\n i += 1;\n }\n return rs;\n}\n\n/**\n * 自动读取流并处理每个数据块。\n *\n * @template ST - 可读流的类型。\n * @param stream - 要读取的流。\n * @param cbs - 回调函数对象。\n * @param cbs.onChunk - 当读取到新的数据块时调用的函数。该函数接收一个参数,即数据块,并返回一个 Promise。\n * @param cbs.onDone - 当读取完所有数据块时调用的函数。\n * @returns - 返回一个函数,调用该函数可以停止读取流。\n *\n * @example\n * const stream = getSomeReadableStream();\n * const onChunk = async (chunk) => {\n * console.log('New chunk:', chunk);\n * };\n * const onDone = () => {\n * console.log('Done reading stream');\n * };\n * const stopReading = autoReadStream(stream, { onChunk, onDone });\n * // Later...\n * stopReading();\n */\nexport function autoReadStream(\n stream: ST,\n cbs: {\n onChunk: ST extends ReadableStream\n ? (chunk: DT) => Promise\n : never;\n onDone: () => void;\n },\n) {\n let stoped = false;\n async function run() {\n const reader = stream.getReader();\n\n while (!stoped) {\n const { value, done } = await reader.read();\n if (done) {\n cbs.onDone();\n return;\n }\n await cbs.onChunk(value);\n }\n\n reader.releaseLock();\n await stream.cancel();\n }\n\n run().catch(Log.error);\n\n return () => {\n stoped = true;\n };\n}\n\n/**\n * 函数节流\n */\nexport function throttle any>(\n func: F,\n wait: number,\n): (...rest: Parameters) => undefined | ReturnType {\n let lastTime: number;\n return function (this: any, ...rest) {\n if (lastTime == null || performance.now() - lastTime > wait) {\n lastTime = performance.now();\n return func.apply(this, rest);\n }\n };\n}\n\n// 封装 decoder,一次解析一个 GOP\nexport function createGoPVideoDecoder(conf: VideoDecoderConfig) {\n type OutputHandle = (vf: VideoFrame | null, done: boolean) => void;\n\n let curCb: ((vf: VideoFrame) => void) | null = null;\n const vdec = new VideoDecoder({\n output: (vf) => {\n curCb?.(vf);\n },\n error: Log.error,\n });\n vdec.configure(conf);\n\n let tasks: Array<{ chunks: EncodedVideoChunk[]; cb: OutputHandle }> = [];\n\n async function run() {\n if (curCb != null) return;\n\n const t = tasks.shift();\n if (t == null) return;\n if (t.chunks.length <= 0) {\n t.cb(null, true);\n run().catch(Log.error);\n return;\n }\n\n let i = 0;\n curCb = (vf) => {\n i += 1;\n t.cb(vf, false);\n if (i >= t.chunks.length) {\n t.cb(null, true);\n curCb = null;\n run().catch(Log.error);\n }\n };\n for (const chunk of t.chunks) vdec.decode(chunk);\n await vdec.flush();\n }\n\n return {\n decode(chunks: EncodedVideoChunk[], cb: OutputHandle) {\n tasks.push({ chunks, cb });\n run().catch(Log.error);\n },\n };\n}\n","// file:src/log.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar Log = (function (){\n\t\tvar start = new Date();\n\t\tvar LOG_LEVEL_ERROR \t= 4;\n\t\tvar LOG_LEVEL_WARNING \t= 3;\n\t\tvar LOG_LEVEL_INFO \t\t= 2;\n\t\tvar LOG_LEVEL_DEBUG\t\t= 1;\n\t\tvar log_level = LOG_LEVEL_ERROR;\n\t\tvar logObject = {\n\t\t\tsetLogLevel : function(level) {\n\t\t\t\tif (level == this.debug) log_level = LOG_LEVEL_DEBUG;\n\t\t\t\telse if (level == this.info) log_level = LOG_LEVEL_INFO;\n\t\t\t\telse if (level == this.warn) log_level = LOG_LEVEL_WARNING;\n\t\t\t\telse if (level == this.error) log_level = LOG_LEVEL_ERROR;\n\t\t\t\telse log_level = LOG_LEVEL_ERROR;\n\t\t\t},\n\t\t\tdebug : function(module, msg) {\n\t\t\t\tif (console.debug === undefined) {\n\t\t\t\t\tconsole.debug = console.log;\n\t\t\t\t}\n\t\t\t\tif (LOG_LEVEL_DEBUG >= log_level) {\n\t\t\t\t\tconsole.debug(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tlog : function(module, msg) {\n\t\t\t\tthis.debug(module.msg)\n\t\t\t},\n\t\t\tinfo : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_INFO >= log_level) {\n\t\t\t\t\tconsole.info(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\twarn : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_WARNING >= log_level) {\n\t\t\t\t\tconsole.warn(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_ERROR >= log_level) {\n\t\t\t\t\tconsole.error(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn logObject;\n\t})();\n\t\n/* Helper function to print a duration value in the form H:MM:SS.MS */\nLog.getDurationString = function(duration, _timescale) {\n\tvar neg;\n\t/* Helper function to print a number on a fixed number of digits */\n\tfunction pad(number, length) {\n\t\tvar str = '' + number;\n\t\tvar a = str.split('.');\t\t\n\t\twhile (a[0].length < length) {\n\t\t\ta[0] = '0' + a[0];\n\t\t}\n\t\treturn a.join('.');\n\t}\n\tif (duration < 0) {\n\t\tneg = true;\n\t\tduration = -duration;\n\t} else {\n\t\tneg = false;\t\n\t}\n\tvar timescale = _timescale || 1;\n\tvar duration_sec = duration/timescale;\n\tvar hours = Math.floor(duration_sec/3600);\n\tduration_sec -= hours * 3600;\n\tvar minutes = Math.floor(duration_sec/60);\n\tduration_sec -= minutes * 60;\t\t\n\tvar msec = duration_sec*1000;\n\tduration_sec = Math.floor(duration_sec);\n\tmsec -= duration_sec*1000;\n\tmsec = Math.floor(msec);\n\treturn (neg ? \"-\": \"\")+hours+\":\"+pad(minutes,2)+\":\"+pad(duration_sec,2)+\".\"+pad(msec,3);\n}\n\t\n/* Helper function to stringify HTML5 TimeRanges objects */\t\nLog.printRanges = function(ranges) {\n\tvar length = ranges.length;\n\tif (length > 0) {\n\t\tvar str = \"\";\n\t\tfor (var i = 0; i < length; i++) {\n\t\t if (i > 0) str += \",\";\n\t\t str += \"[\"+Log.getDurationString(ranges.start(i))+ \",\"+Log.getDurationString(ranges.end(i))+\"]\";\n\t\t}\n\t\treturn str;\n\t} else {\n\t\treturn \"(empty)\";\n\t}\n}\n\nif (typeof exports !== 'undefined') {\n\texports.Log = Log;\n}\n// file:src/stream.js\nvar MP4BoxStream = function(arrayBuffer) {\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n this.dataview = new DataView(arrayBuffer);\n } else {\n throw (\"Needs an array buffer\");\n }\n this.position = 0;\n};\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\nMP4BoxStream.prototype.getPosition = function() {\n return this.position;\n}\n\nMP4BoxStream.prototype.getEndPosition = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.getLength = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.seek = function (pos) {\n var npos = Math.max(0, Math.min(this.buffer.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n return true;\n}\n\nMP4BoxStream.prototype.isEos = function () {\n return this.getPosition() >= this.getEndPosition();\n}\n\n/*************************************************************************\n Read methods, simimar to DataStream but simpler\n *************************************************************************/\nMP4BoxStream.prototype.readAnyInt = function(size, signed) {\n var res = 0;\n if (this.position + size <= this.buffer.byteLength) {\n switch (size) {\n case 1:\n if (signed) {\n res = this.dataview.getInt8(this.position);\n } else {\n res = this.dataview.getUint8(this.position);\n }\n break;\n case 2:\n if (signed) {\n res = this.dataview.getInt16(this.position);\n } else {\n res = this.dataview.getUint16(this.position);\n }\n break;\n case 3:\n if (signed) {\n throw (\"No method for reading signed 24 bits values\");\n } else {\n res = this.dataview.getUint8(this.position) << 16;\n res |= this.dataview.getUint8(this.position+1) << 8;\n res |= this.dataview.getUint8(this.position+2);\n }\n break;\n case 4:\n if (signed) {\n res = this.dataview.getInt32(this.position);\n } else {\n res = this.dataview.getUint32(this.position);\n }\n break;\n case 8:\n if (signed) {\n throw (\"No method for reading signed 64 bits values\");\n } else {\n res = this.dataview.getUint32(this.position) << 32;\n res |= this.dataview.getUint32(this.position+4);\n }\n break;\n default:\n throw (\"readInt method not implemented for size: \"+size);\n }\n this.position+= size;\n return res;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readUint8 = function() {\n return this.readAnyInt(1, false);\n}\n\nMP4BoxStream.prototype.readUint16 = function() {\n return this.readAnyInt(2, false);\n}\n\nMP4BoxStream.prototype.readUint24 = function() {\n return this.readAnyInt(3, false);\n}\n\nMP4BoxStream.prototype.readUint32 = function() {\n return this.readAnyInt(4, false);\n}\n\nMP4BoxStream.prototype.readUint64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readString = function(length) {\n if (this.position + length <= this.buffer.byteLength) {\n var s = \"\";\n for (var i = 0; i < length; i++) {\n s += String.fromCharCode(this.readUint8());\n }\n return s;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readCString = function() {\n var arr = [];\n while(true) {\n var b = this.readUint8();\n if (b !== 0) {\n arr.push(b);\n } else {\n break;\n }\n }\n return String.fromCharCode.apply(null, arr); \n}\n\nMP4BoxStream.prototype.readInt8 = function() {\n return this.readAnyInt(1, true);\n}\n\nMP4BoxStream.prototype.readInt16 = function() {\n return this.readAnyInt(2, true);\n}\n\nMP4BoxStream.prototype.readInt32 = function() {\n return this.readAnyInt(4, true);\n}\n\nMP4BoxStream.prototype.readInt64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readUint8Array = function(length) {\n var arr = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint8();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint32Array = function(length) {\n var arr = new Uint32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint32();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt32Array = function(length) {\n var arr = new Int32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt32();\n }\n return arr;\n}\n\nif (typeof exports !== 'undefined') {\n exports.MP4BoxStream = MP4BoxStream;\n}// file:src/DataStream.js\n/**\n DataStream reads scalars, arrays and structs of data from an ArrayBuffer.\n It's like a file-like DataView on steroids.\n\n @param {ArrayBuffer} arrayBuffer ArrayBuffer to read from.\n @param {?Number} byteOffset Offset from arrayBuffer beginning for the DataStream.\n @param {?Boolean} endianness DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN (the default).\n */\nvar DataStream = function(arrayBuffer, byteOffset, endianness) {\n this._byteOffset = byteOffset || 0;\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n } else if (typeof arrayBuffer == \"object\") {\n this.dataView = arrayBuffer;\n if (byteOffset) {\n this._byteOffset += byteOffset;\n }\n } else {\n this.buffer = new ArrayBuffer(arrayBuffer || 0);\n }\n this.position = 0;\n this.endianness = endianness == null ? DataStream.LITTLE_ENDIAN : endianness;\n};\nDataStream.prototype = {};\n\nDataStream.prototype.getPosition = function() {\n return this.position;\n}\n\n/**\n Internal function to resize the DataStream buffer when required.\n @param {number} extra Number of bytes to add to the buffer allocation.\n @return {null}\n */\nDataStream.prototype._realloc = function(extra) {\n if (!this._dynamicSize) {\n return;\n }\n var req = this._byteOffset + this.position + extra;\n var blen = this._buffer.byteLength;\n if (req <= blen) {\n if (req > this._byteLength) {\n this._byteLength = req;\n }\n return;\n }\n if (blen < 1) {\n blen = 1;\n }\n while (req > blen) {\n blen *= 2;\n }\n var buf = new ArrayBuffer(blen);\n var src = new Uint8Array(this._buffer);\n var dst = new Uint8Array(buf, 0, src.length);\n dst.set(src);\n this.buffer = buf;\n this._byteLength = req;\n};\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the extra bytes from the backing buffer when\n the virtual byteLength is smaller than the buffer byteLength (happens after\n growing the buffer with writes and not filling the extra space completely).\n\n @return {null}\n */\nDataStream.prototype._trimAlloc = function() {\n if (this._byteLength == this._buffer.byteLength) {\n return;\n }\n var buf = new ArrayBuffer(this._byteLength);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, 0, dst.length);\n dst.set(src);\n this.buffer = buf;\n};\n\n\n/**\n Big-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.BIG_ENDIAN = false;\n\n/**\n Little-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.LITTLE_ENDIAN = true;\n\n/**\n Virtual byte length of the DataStream backing buffer.\n Updated to be max of original buffer size and last written size.\n If dynamicSize is false is set to buffer size.\n @type {number}\n */\nDataStream.prototype._byteLength = 0;\n\n/**\n Returns the byte length of the DataStream object.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteLength',\n { get: function() {\n return this._byteLength - this._byteOffset;\n }});\n\n/**\n Set/get the backing ArrayBuffer of the DataStream object.\n The setter updates the DataView to point to the new buffer.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'buffer',\n { get: function() {\n this._trimAlloc();\n return this._buffer;\n },\n set: function(v) {\n this._buffer = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the byteOffset of the DataStream object.\n The setter updates the DataView to point to the new byteOffset.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteOffset',\n { get: function() {\n return this._byteOffset;\n },\n set: function(v) {\n this._byteOffset = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the backing DataView of the DataStream object.\n The setter updates the buffer and byteOffset to point to the DataView values.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'dataView',\n { get: function() {\n return this._dataView;\n },\n set: function(v) {\n this._byteOffset = v.byteOffset;\n this._buffer = v.buffer;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._byteOffset + v.byteLength;\n } });\n\n/**\n Sets the DataStream read/write position to given position.\n Clamps between 0 and DataStream length.\n\n @param {number} pos Position to seek to.\n @return {null}\n */\nDataStream.prototype.seek = function(pos) {\n var npos = Math.max(0, Math.min(this.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n};\n\n/**\n Returns true if the DataStream seek pointer is at the end of buffer and\n there's no more data to read.\n\n @return {boolean} True if the seek pointer is at the end of the buffer.\n */\nDataStream.prototype.isEof = function() {\n return (this.position >= this._byteLength);\n};\n\n\n/**\n Maps a Uint8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Uint8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n\n/**\n Reads an Int32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int32Array.\n */\nDataStream.prototype.readInt32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Int32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int16Array.\n */\nDataStream.prototype.readInt16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Int16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int8Array.\n */\nDataStream.prototype.readInt8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Int8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint32Array.\n */\nDataStream.prototype.readUint32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Uint32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint16Array.\n */\nDataStream.prototype.readUint16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Uint16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint8Array.\n */\nDataStream.prototype.readUint8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Uint8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float64Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float64Array.\n */\nDataStream.prototype.readFloat64Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 8) : length;\n var arr = new Float64Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float32Array.\n */\nDataStream.prototype.readFloat32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Float32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n\n/**\n Reads a 32-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt32 = function(e) {\n var v = this._dataView.getInt32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt16 = function(e) {\n var v = this._dataView.getInt16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readInt8 = function() {\n var v = this._dataView.getInt8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint32 = function(e) {\n var v = this._dataView.getUint32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint16 = function(e) {\n var v = this._dataView.getUint16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit unsigned int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readUint8 = function() {\n var v = this._dataView.getUint8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat32 = function(e) {\n var v = this._dataView.getFloat32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 64-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat64 = function(e) {\n var v = this._dataView.getFloat64(this.position, e == null ? this.endianness : e);\n this.position += 8;\n return v;\n};\n\n/**\n Native endianness. Either DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN\n depending on the platform endianness.\n\n @type {boolean}\n */\nDataStream.endianness = new Int8Array(new Int16Array([1]).buffer)[0] > 0;\n\n/**\n Copies byteLength bytes from the src buffer at srcOffset to the\n dst buffer at dstOffset.\n\n @param {Object} dst Destination ArrayBuffer to write to.\n @param {number} dstOffset Offset to the destination ArrayBuffer.\n @param {Object} src Source ArrayBuffer to read from.\n @param {number} srcOffset Offset to the source ArrayBuffer.\n @param {number} byteLength Number of bytes to copy.\n */\nDataStream.memcpy = function(dst, dstOffset, src, srcOffset, byteLength) {\n var dstU8 = new Uint8Array(dst, dstOffset, byteLength);\n var srcU8 = new Uint8Array(src, srcOffset, byteLength);\n dstU8.set(srcU8);\n};\n\n/**\n Converts array to native endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} arrayIsLittleEndian True if the data in the array is\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.arrayToNative = function(array, arrayIsLittleEndian) {\n if (arrayIsLittleEndian == this.endianness) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Converts native endianness array to desired endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} littleEndian True if the converted array should be\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.nativeToEndian = function(array, littleEndian) {\n if (this.endianness == littleEndian) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Flips typed array endianness in-place.\n\n @param {Object} array Typed array to flip.\n @return {Object} The converted typed array.\n */\nDataStream.flipArrayEndianness = function(array) {\n var u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n for (var i=0; ik; j--, k++) {\n var tmp = u8[k];\n u8[k] = u8[j];\n u8[j] = tmp;\n }\n }\n return array;\n};\n\n/**\n Seek position where DataStream#readStruct ran into a problem.\n Useful for debugging struct parsing.\n\n @type {number}\n */\nDataStream.prototype.failurePosition = 0;\n\nString.fromCharCodeUint8 = function(uint8arr) {\n var arr = [];\n for (var i = 0; i < uint8arr.length; i++) {\n arr[i] = uint8arr[i];\n }\n return String.fromCharCode.apply(null, arr);\n}\n/**\n Read a string of desired length and encoding from the DataStream.\n\n @param {number} length The length of the string to read in bytes.\n @param {?string} encoding The encoding of the string data in the DataStream.\n Defaults to ASCII.\n @return {string} The read string.\n */\nDataStream.prototype.readString = function(length, encoding) {\n if (encoding == null || encoding == \"ASCII\") {\n return String.fromCharCodeUint8.apply(null, [this.mapUint8Array(length == null ? this.byteLength-this.position : length)]);\n } else {\n return (new TextDecoder(encoding)).decode(this.mapUint8Array(length));\n }\n};\n\n/**\n Read null-terminated string of desired length from the DataStream. Truncates\n the returned string so that the null byte is not a part of it.\n\n @param {?number} length The length of the string to read.\n @return {string} The read string.\n */\nDataStream.prototype.readCString = function(length) {\n var blen = this.byteLength-this.position;\n var u8 = new Uint8Array(this._buffer, this._byteOffset + this.position);\n var len = blen;\n if (length != null) {\n len = Math.min(length, blen);\n }\n for (var i = 0; i < len && u8[i] !== 0; i++); // find first zero byte\n var s = String.fromCharCodeUint8.apply(null, [this.mapUint8Array(i)]);\n if (length != null) {\n this.position += len-i;\n } else if (i != blen) {\n this.position += 1; // trailing zero if not at end of buffer\n }\n return s;\n};\n\n/* \n TODO: fix endianness for 24/64-bit fields\n TODO: check range/support for 64-bits numbers in JavaScript\n*/\nvar MAX_SIZE = Math.pow(2, 32);\n\nDataStream.prototype.readInt64 = function () {\n return (this.readInt32()*MAX_SIZE)+this.readUint32();\n}\nDataStream.prototype.readUint64 = function () {\n\treturn (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readInt64 = function () {\n return (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readUint24 = function () {\n\treturn (this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8();\n}\n\nif (typeof exports !== 'undefined') {\n exports.DataStream = DataStream; \n}\n// file:src/DataStream-write.js\n/**\n Saves the DataStream contents to the given filename.\n Uses Chrome's anchor download property to initiate download.\n \n @param {string} filename Filename to save as.\n @return {null}\n */\nDataStream.prototype.save = function(filename) {\n var blob = new Blob([this.buffer]);\n if (window.URL && URL.createObjectURL) {\n var url = window.URL.createObjectURL(blob);\n var a = document.createElement('a');\n // Required in Firefox:\n document.body.appendChild(a);\n a.setAttribute('href', url);\n a.setAttribute('download', filename);\n // Required in Firefox:\n a.setAttribute('target', '_self');\n a.click();\n window.URL.revokeObjectURL(url);\n } else {\n throw(\"DataStream.save: Can't create object URL.\");\n }\n};\n\n/**\n Whether to extend DataStream buffer when trying to write beyond its size.\n If set, the buffer is reallocated to twice its current size until the\n requested write fits the buffer.\n @type {boolean}\n */\nDataStream.prototype._dynamicSize = true;\nObject.defineProperty(DataStream.prototype, 'dynamicSize',\n { get: function() {\n return this._dynamicSize;\n },\n set: function(v) {\n if (!v) {\n this._trimAlloc();\n }\n this._dynamicSize = v;\n } });\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the first bytes when not needed anymore.\n\n @return {null}\n */\nDataStream.prototype.shift = function(offset) {\n var buf = new ArrayBuffer(this._byteLength-offset);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, offset, dst.length);\n dst.set(src);\n this.buffer = buf;\n this.position -= offset;\n};\n\n/**\n Writes an Int32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Int32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt32Array(arr.length, e);\n } else {\n for (var i=0; i>16);\n\tthis.writeUint8((v & 0x0000FF00)>>8);\n\tthis.writeUint8((v & 0x000000FF));\n}\n\nDataStream.prototype.adjustUint32 = function(position, value) {\n\tvar pos = this.position;\n\tthis.seek(position);\n\tthis.writeUint32(value);\n\tthis.seek(pos);\n}\n// file:src/DataStream-map.js\n/**\n Maps an Int32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Int32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps an Int16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Int16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps an Int8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Int8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n/**\n Maps a Uint32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Uint32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps a Uint16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Uint16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps a Float64Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float64Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat64Array = function(length, e) {\n this._realloc(length * 8);\n var arr = new Float64Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 8;\n return arr;\n};\n\n/**\n Maps a Float32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Float32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n// file:src/buffer.js\n/**\n * MultiBufferStream is a class that acts as a SimpleStream for parsing \n * It holds several, possibly non-contiguous ArrayBuffer objects, each with a fileStart property \n * containing the offset for the buffer data in an original/virtual file \n *\n * It inherits also from DataStream for all read/write/alloc operations\n */\n\n/**\n * Constructor\n */\nvar MultiBufferStream = function(buffer) {\n\t/* List of ArrayBuffers, with a fileStart property, sorted in fileStart order and non overlapping */\n\tthis.buffers = [];\t\n\tthis.bufferIndex = -1;\n\tif (buffer) {\n\t\tthis.insertBuffer(buffer);\n\t\tthis.bufferIndex = 0;\n\t}\n}\nMultiBufferStream.prototype = new DataStream(new ArrayBuffer(), 0, DataStream.BIG_ENDIAN);\n\n/************************************************************************************\n Methods for the managnement of the buffers (insertion, removal, concatenation, ...)\n ***********************************************************************************/\n\nMultiBufferStream.prototype.initialized = function() {\n\tvar firstBuffer;\n\tif (this.bufferIndex > -1) {\n\t\treturn true;\n\t} else if (this.buffers.length > 0) {\n\t\tfirstBuffer = this.buffers[0];\n\t\tif (firstBuffer.fileStart === 0) {\n\t\t\tthis.buffer = firstBuffer;\n\t\t\tthis.bufferIndex = 0;\n\t\t\tLog.debug(\"MultiBufferStream\", \"Stream ready for parsing\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\tLog.warn(\"MultiBufferStream\", \"The first buffer should have a fileStart of 0\");\n\t\t\tthis.logBufferLevel();\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tLog.warn(\"MultiBufferStream\", \"No buffer to start parsing from\");\n\t\tthis.logBufferLevel();\n\t\treturn false;\n\t}\t\t\t\n}\n\n/**\n * helper functions to concatenate two ArrayBuffer objects\n * @param {ArrayBuffer} buffer1 \n * @param {ArrayBuffer} buffer2 \n * @return {ArrayBuffer} the concatenation of buffer1 and buffer2 in that order\n */\nArrayBuffer.concat = function(buffer1, buffer2) {\n Log.debug(\"ArrayBuffer\", \"Trying to create a new buffer of size: \"+(buffer1.byteLength + buffer2.byteLength));\n var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n};\n\n/**\n * Reduces the size of a given buffer, but taking the part between offset and offset+newlength\n * @param {ArrayBuffer} buffer \n * @param {Number} offset the start of new buffer\n * @param {Number} newLength the length of the new buffer\n * @return {ArrayBuffer} the new buffer\n */\nMultiBufferStream.prototype.reduceBuffer = function(buffer, offset, newLength) {\n\tvar smallB;\n\tsmallB = new Uint8Array(newLength);\n\tsmallB.set(new Uint8Array(buffer, offset, newLength));\n\tsmallB.buffer.fileStart = buffer.fileStart+offset;\n\tsmallB.buffer.usedBytes = 0;\n\treturn smallB.buffer;\t\n}\n\n/**\n * Inserts the new buffer in the sorted list of buffers,\n * making sure, it is not overlapping with existing ones (possibly reducing its size).\n * if the new buffer overrides/replaces the 0-th buffer (for instance because it is bigger), \n * updates the DataStream buffer for parsing \n*/\nMultiBufferStream.prototype.insertBuffer = function(ab) {\t\n\tvar to_add = true;\n\t/* TODO: improve insertion if many buffers */\n\tfor (var i = 0; i < this.buffers.length; i++) {\n\t\tvar b = this.buffers[i];\n\t\tif (ab.fileStart <= b.fileStart) {\n\t\t\t/* the insertion position is found */\n\t\t\tif (ab.fileStart === b.fileStart) {\n\t\t\t\t/* The new buffer overlaps with an existing buffer */\n\t\t\t\tif (ab.byteLength > b.byteLength) {\n\t\t\t\t\t/* the new buffer is bigger than the existing one\n\t\t\t\t\t remove the existing buffer and try again to insert \n\t\t\t\t\t the new buffer to check overlap with the next ones */\n\t\t\t\t\tthis.buffers.splice(i, 1);\n\t\t\t\t\ti--; \n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\t/* the new buffer is smaller than the existing one, just drop it */\n\t\t\t\t\tLog.warn(\"MultiBufferStream\", \"Buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\") already appended, ignoring\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/* The beginning of the new buffer is not overlapping with an existing buffer\n\t\t\t\t let's check the end of it */\n\t\t\t\tif (ab.fileStart + ab.byteLength <= b.fileStart) {\n\t\t\t\t\t/* no overlap, we can add it as is */\n\t\t\t\t} else {\n\t\t\t\t\t/* There is some overlap, cut the new buffer short, and add it*/\n\t\t\t\t\tab = this.reduceBuffer(ab, 0, b.fileStart - ab.fileStart);\n\t\t\t\t}\n\t\t\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\t\t\tthis.buffers.splice(i, 0, ab);\n\t\t\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tthis.buffer = ab;\n\t\t\t\t}\n\t\t\t}\n\t\t\tto_add = false;\n\t\t\tbreak;\n\t\t} else if (ab.fileStart < b.fileStart + b.byteLength) {\n\t\t\t/* the new buffer overlaps its beginning with the end of the current buffer */\n\t\t\tvar offset = b.fileStart + b.byteLength - ab.fileStart;\n\t\t\tvar newLength = ab.byteLength - offset;\n\t\t\tif (newLength > 0) {\n\t\t\t\t/* the new buffer is bigger than the current overlap, drop the overlapping part and try again inserting the remaining buffer */\n\t\t\t\tab = this.reduceBuffer(ab, offset, newLength);\n\t\t\t} else {\n\t\t\t\t/* the content of the new buffer is entirely contained in the existing buffer, drop it entirely */\n\t\t\t\tto_add = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* if the buffer has not been added, we can add it at the end */\n\tif (to_add) {\n\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\tthis.buffers.push(ab);\n\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\tif (i === 0) {\n\t\t\tthis.buffer = ab;\n\t\t}\n\t}\n}\n\n/**\n * Displays the status of the buffers (number and used bytes)\n * @param {Object} info callback method for display\n */\nMultiBufferStream.prototype.logBufferLevel = function(info) {\n\tvar i;\n\tvar buffer;\n\tvar used, total;\n\tvar ranges = [];\n\tvar range;\n\tvar bufferedString = \"\";\n\tused = 0;\n\ttotal = 0;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (i === 0) {\n\t\t\trange = {};\n\t\t\tranges.push(range);\n\t\t\trange.start = buffer.fileStart;\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tbufferedString += \"[\"+range.start+\"-\";\n\t\t} else if (range.end === buffer.fileStart) {\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t} else {\n\t\t\trange = {};\n\t\t\trange.start = buffer.fileStart;\n\t\t\tbufferedString += (ranges[ranges.length-1].end-1)+\"], [\"+range.start+\"-\";\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tranges.push(range);\n\t\t}\n\t\tused += buffer.usedBytes;\n\t\ttotal += buffer.byteLength;\n\t}\n\tif (ranges.length > 0) {\n\t\tbufferedString += (range.end-1)+\"]\";\n\t}\n\tvar log = (info ? Log.info : Log.debug)\n\tif (this.buffers.length === 0) {\n\t\tlog(\"MultiBufferStream\", \"No more buffer in memory\");\n\t} else {\n\t\tlog(\"MultiBufferStream\", \"\"+this.buffers.length+\" stored buffer(s) (\"+used+\"/\"+total+\" bytes), continuous ranges: \"+bufferedString);\n\t}\n}\n\nMultiBufferStream.prototype.cleanBuffers = function () {\n\tvar i;\n\tvar buffer;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (buffer.usedBytes === buffer.byteLength) {\n\t\t\tLog.debug(\"MultiBufferStream\", \"Removing buffer #\"+i);\n\t\t\tthis.buffers.splice(i, 1);\n\t\t\ti--;\n\t\t}\n\t}\n}\n\nMultiBufferStream.prototype.mergeNextBuffer = function() {\n\tvar next_buffer;\n\tif (this.bufferIndex+1 < this.buffers.length) {\n\t\tnext_buffer = this.buffers[this.bufferIndex+1];\n\t\tif (next_buffer.fileStart === this.buffer.fileStart + this.buffer.byteLength) {\n\t\t\tvar oldLength = this.buffer.byteLength;\n\t\t\tvar oldUsedBytes = this.buffer.usedBytes;\n\t\t\tvar oldFileStart = this.buffer.fileStart;\n\t\t\tthis.buffers[this.bufferIndex] = ArrayBuffer.concat(this.buffer, next_buffer);\n\t\t\tthis.buffer = this.buffers[this.bufferIndex];\n\t\t\tthis.buffers.splice(this.bufferIndex+1, 1);\n\t\t\tthis.buffer.usedBytes = oldUsedBytes; /* TODO: should it be += ? */\n\t\t\tthis.buffer.fileStart = oldFileStart;\n\t\t\tLog.debug(\"ISOFile\", \"Concatenating buffer for box parsing (length: \"+oldLength+\"->\"+this.buffer.byteLength+\")\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n}\n\n\n/*************************************************************************\n Seek-related functions\n *************************************************************************/\n\n/**\n * Finds the buffer that holds the given file position\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Number} the index of the buffer holding the seeked file position, -1 if not found.\n */\nMultiBufferStream.prototype.findPosition = function(fromStart, filePosition, markAsUsed) {\n\tvar i;\n\tvar abuffer = null;\n\tvar index = -1;\n\n\t/* find the buffer with the largest position smaller than the given position */\n\tif (fromStart === true) {\n\t /* the reposition can be in the past, we need to check from the beginning of the list of buffers */\n\t\ti = 0;\n\t} else {\n\t\ti = this.bufferIndex;\n\t}\n\n\twhile (i < this.buffers.length) {\n\t\tabuffer = this.buffers[i];\n\t\tif (abuffer.fileStart <= filePosition) {\n\t\t\tindex = i;\n\t\t\tif (markAsUsed) {\n\t\t\t\tif (abuffer.fileStart + abuffer.byteLength <= filePosition) {\n\t\t\t\t\tabuffer.usedBytes = abuffer.byteLength;\t\n\t\t\t\t} else {\n\t\t\t\t\tabuffer.usedBytes = filePosition - abuffer.fileStart;\n\t\t\t\t}\t\t\n\t\t\t\tthis.logBufferLevel();\t\n\t\t\t}\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\n\tif (index !== -1) {\n\t\tabuffer = this.buffers[index];\n\t\tif (abuffer.fileStart + abuffer.byteLength >= filePosition) {\t\t\t\n\t\t\tLog.debug(\"MultiBufferStream\", \"Found position in existing buffer #\"+index);\n\t\t\treturn index;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t} else {\n\t\treturn -1;\n\t}\n}\n\n/**\n * Finds the largest file position contained in a buffer or in the next buffers if they are contiguous (no gap)\n * starting from the given buffer index or from the current buffer if the index is not given\n *\n * @param {Number} inputindex Index of the buffer to start from\n * @return {Number} The largest file position found in the buffers\n */\nMultiBufferStream.prototype.findEndContiguousBuf = function(inputindex) {\n\tvar i;\n\tvar currentBuf;\n\tvar nextBuf;\n\tvar index = (inputindex !== undefined ? inputindex : this.bufferIndex);\n\tcurrentBuf = this.buffers[index];\n\t/* find the end of the contiguous range of data */\n\tif (this.buffers.length > index+1) {\n\t\tfor (i = index+1; i < this.buffers.length; i++) {\n\t\t\tnextBuf = this.buffers[i];\n\t\t\tif (nextBuf.fileStart === currentBuf.fileStart + currentBuf.byteLength) {\n\t\t\t\tcurrentBuf = nextBuf;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* return the position of last byte in the file that we have */\n\treturn currentBuf.fileStart + currentBuf.byteLength;\n}\n\n/**\n * Returns the largest file position contained in the buffers, larger than the given position\n * @param {Number} pos the file position to start from\n * @return {Number} the largest position in the current buffer or in the buffer and the next contiguous \n * buffer that holds the given position\n */\nMultiBufferStream.prototype.getEndFilePositionAfter = function(pos) {\n\tvar index = this.findPosition(true, pos, false);\n\tif (index !== -1) {\n\t\treturn this.findEndContiguousBuf(index);\n\t} else {\n\t\treturn pos;\n\t}\n}\n\n/*************************************************************************\n Garbage collection related functions\n *************************************************************************/\n\n/**\n * Marks a given number of bytes as used in the current buffer for garbage collection\n * @param {Number} nbBytes \n */\nMultiBufferStream.prototype.addUsedBytes = function(nbBytes) {\n\tthis.buffer.usedBytes += nbBytes;\n\tthis.logBufferLevel();\n}\n\n/**\n * Marks the entire current buffer as used, ready for garbage collection\n */\nMultiBufferStream.prototype.setAllUsedBytes = function() {\n\tthis.buffer.usedBytes = this.buffer.byteLength;\n\tthis.logBufferLevel();\n}\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\n\n/**\n * Tries to seek to a given file position\n * if possible, repositions the parsing from there and returns true \n * if not possible, does not change anything and returns false \n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Boolean} true if the seek succeeded, false otherwise\n */\nMultiBufferStream.prototype.seek = function(filePosition, fromStart, markAsUsed) {\n\tvar index;\n\tindex = this.findPosition(fromStart, filePosition, markAsUsed);\n\tif (index !== -1) {\n\t\tthis.buffer = this.buffers[index];\n\t\tthis.bufferIndex = index;\n\t\tthis.position = filePosition - this.buffer.fileStart;\n\t\tLog.debug(\"MultiBufferStream\", \"Repositioning parser at buffer position: \"+this.position);\n\t\treturn true;\n\t} else {\n\t\tLog.debug(\"MultiBufferStream\", \"Position \"+filePosition+\" not found in buffered data\");\n\t\treturn false;\n\t}\n}\n\n/**\n * Returns the current position in the file\n * @return {Number} the position in the file\n */\nMultiBufferStream.prototype.getPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.position;\n}\n\n/**\n * Returns the length of the current buffer\n * @return {Number} the length of the current buffer\n */\nMultiBufferStream.prototype.getLength = function() {\n\treturn this.byteLength;\n}\n\nMultiBufferStream.prototype.getEndPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.byteLength;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MultiBufferStream = MultiBufferStream;\n}// file:src/descriptor.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MPEG4DescriptorParser = function () {\n\tvar ES_DescrTag \t\t\t= 0x03;\n\tvar DecoderConfigDescrTag \t= 0x04;\n\tvar DecSpecificInfoTag \t\t= 0x05;\n\tvar SLConfigDescrTag \t\t= 0x06;\n\n\tvar descTagToName = [];\n\tdescTagToName[ES_DescrTag] \t\t\t\t= \"ES_Descriptor\";\n\tdescTagToName[DecoderConfigDescrTag] \t= \"DecoderConfigDescriptor\";\n\tdescTagToName[DecSpecificInfoTag] \t\t= \"DecoderSpecificInfo\";\n\tdescTagToName[SLConfigDescrTag] \t\t= \"SLConfigDescriptor\";\n\n\tthis.getDescriptorName = function(tag) {\n\t\treturn descTagToName[tag];\n\t}\n\n\tvar that = this;\n\tvar classes = {};\n\n\tthis.parseOneDescriptor = function (stream) {\n\t\tvar hdrSize = 0;\n\t\tvar size = 0;\n\t\tvar tag;\n\t\tvar desc;\n\t\tvar byteRead;\n\t\ttag = stream.readUint8();\n\t\thdrSize++;\n\t\tbyteRead = stream.readUint8();\n\t\thdrSize++;\n\t\twhile (byteRead & 0x80) {\n\t\t\tsize = (byteRead & 0x7F)<<7;\n\t\t\tbyteRead = stream.readUint8();\n\t\t\thdrSize++;\n\t\t}\n\t\tsize += byteRead & 0x7F;\n\t\tLog.debug(\"MPEG4DescriptorParser\", \"Found \"+(descTagToName[tag] || \"Descriptor \"+tag)+\", size \"+size+\" at position \"+stream.getPosition());\n\t\tif (descTagToName[tag]) {\n\t\t\tdesc = new classes[descTagToName[tag]](size);\n\t\t} else {\n\t\t\tdesc = new classes.Descriptor(size);\n\t\t}\n\t\tdesc.parse(stream);\n\t\treturn desc;\n\t}\n\n\tclasses.Descriptor = function(_tag, _size) {\n\t\tthis.tag = _tag;\n\t\tthis.size = _size;\n\t\tthis.descs = [];\n\t}\n\n\tclasses.Descriptor.prototype.parse = function (stream) {\n\t\tthis.data = stream.readUint8Array(this.size);\n\t}\n\n\tclasses.Descriptor.prototype.findDescriptor = function (tag) {\n\t\tfor (var i = 0; i < this.descs.length; i++) {\n\t\t\tif (this.descs[i].tag == tag) {\n\t\t\t\treturn this.descs[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tclasses.Descriptor.prototype.parseRemainingDescriptors = function (stream) {\n\t\tvar start = stream.position;\n\t\twhile (stream.position < start+this.size) {\n\t\t\tvar desc = that.parseOneDescriptor(stream);\n\t\t\tthis.descs.push(desc);\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor = function (size) {\n\t\tclasses.Descriptor.call(this, ES_DescrTag, size);\n\t}\n\n\tclasses.ES_Descriptor.prototype = new classes.Descriptor();\n\n\tclasses.ES_Descriptor.prototype.parse = function(stream) {\n\t\tthis.ES_ID = stream.readUint16();\n\t\tthis.flags = stream.readUint8();\n\t\tthis.size -= 3;\n\t\tif (this.flags & 0x80) {\n\t\t\tthis.dependsOn_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.dependsOn_ES_ID = 0;\n\t\t}\n\t\tif (this.flags & 0x40) {\n\t\t\tvar l = stream.readUint8();\n\t\t\tthis.URL = stream.readString(l);\n\t\t\tthis.size -= l+1;\n\t\t} else {\n\t\t\tthis.URL = \"\";\n\t\t}\n\t\tif (this.flags & 0x20) {\n\t\t\tthis.OCR_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.OCR_ES_ID = 0;\n\t\t}\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.ES_Descriptor.prototype.getOTI = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (dcd) {\n\t\t\treturn dcd.oti;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor.prototype.getAudioConfig = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (!dcd) return null;\n\t\tvar dsi = dcd.findDescriptor(DecSpecificInfoTag);\n\t\tif (dsi && dsi.data) {\n\t\t\tvar audioObjectType = (dsi.data[0]& 0xF8) >> 3;\n\t\t\tif (audioObjectType === 31 && dsi.data.length >= 2) {\n\t\t\t\taudioObjectType = 32 + ((dsi.data[0] & 0x7) << 3) + ((dsi.data[1] & 0xE0) >> 5);\n\t\t\t}\n\t\t\treturn audioObjectType;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tclasses.DecoderConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, DecoderConfigDescrTag, size);\n\t}\n\tclasses.DecoderConfigDescriptor.prototype = new classes.Descriptor();\n\n\tclasses.DecoderConfigDescriptor.prototype.parse = function(stream) {\n\t\tthis.oti = stream.readUint8();\n\t\tthis.streamType = stream.readUint8();\n\t\tthis.bufferSize = stream.readUint24();\n\t\tthis.maxBitrate = stream.readUint32();\n\t\tthis.avgBitrate = stream.readUint32();\n\t\tthis.size -= 13;\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.DecoderSpecificInfo = function (size) {\n\t\tclasses.Descriptor.call(this, DecSpecificInfoTag, size);\n\t}\n\tclasses.DecoderSpecificInfo.prototype = new classes.Descriptor();\n\n\tclasses.SLConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, SLConfigDescrTag, size);\n\t}\n\tclasses.SLConfigDescriptor.prototype = new classes.Descriptor();\n\n\treturn this;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MPEG4DescriptorParser = MPEG4DescriptorParser;\n}// file:src/box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar BoxParser = {\n\tERR_INVALID_DATA : -1,\n\tERR_NOT_ENOUGH_DATA : 0,\n\tOK : 1,\n\n\t// Boxes to be created with default parsing\n\tBASIC_BOXES: [ \"mdat\", \"idat\", \"free\", \"skip\", \"meco\", \"strk\" ],\n\tFULL_BOXES: [ \"hmhd\", \"nmhd\", \"iods\", \"xml \", \"bxml\", \"ipro\", \"mere\" ],\n\tCONTAINER_BOXES: [\n\t\t[ \"moov\", [ \"trak\", \"pssh\" ] ],\n\t\t[ \"trak\" ],\n\t\t[ \"edts\" ],\n\t\t[ \"mdia\" ],\n\t\t[ \"minf\" ],\n\t\t[ \"dinf\" ],\n\t\t[ \"stbl\", [ \"sgpd\", \"sbgp\" ] ],\n\t\t[ \"mvex\", [ \"trex\" ] ],\n\t\t[ \"moof\", [ \"traf\" ] ],\n\t\t[ \"traf\", [ \"trun\", \"sgpd\", \"sbgp\" ] ],\n\t\t[ \"vttc\" ],\n\t\t[ \"tref\" ],\n\t\t[ \"iref\" ],\n\t\t[ \"mfra\", [ \"tfra\" ] ],\n\t\t[ \"meco\" ],\n\t\t[ \"hnti\" ],\n\t\t[ \"hinf\" ],\n\t\t[ \"strk\" ],\n\t\t[ \"strd\" ],\n\t\t[ \"sinf\" ],\n\t\t[ \"rinf\" ],\n\t\t[ \"schi\" ],\n\t\t[ \"trgr\" ],\n\t\t[ \"udta\", [\"kind\"] ],\n\t\t[ \"iprp\", [\"ipma\"] ],\n\t\t[ \"ipco\" ],\n\t\t[ \"grpl\" ],\n\t\t[ \"j2kH\" ],\n\t\t[ \"etyp\", [ \"tyco\"] ]\n\t],\n\t// Boxes effectively created\n\tboxCodes : [],\n\tfullBoxCodes : [],\n\tcontainerBoxCodes : [],\n\tsampleEntryCodes : {},\n\tsampleGroupEntryCodes: [],\n\ttrackGroupTypes: [],\n\tUUIDBoxes: {},\n\tUUIDs: [],\n\tinitialize: function() {\n\t\tBoxParser.FullBox.prototype = new BoxParser.Box();\n\t\tBoxParser.ContainerBox.prototype = new BoxParser.Box();\n\t\tBoxParser.SampleEntry.prototype = new BoxParser.Box();\n\t\tBoxParser.TrackGroupTypeBox.prototype = new BoxParser.FullBox();\n\n\t\t/* creating constructors for simple boxes */\n\t\tBoxParser.BASIC_BOXES.forEach(function(type) {\n\t\t\tBoxParser.createBoxCtor(type)\n\t\t});\n\t\tBoxParser.FULL_BOXES.forEach(function(type) {\n\t\t\tBoxParser.createFullBoxCtor(type);\n\t\t});\n\t\tBoxParser.CONTAINER_BOXES.forEach(function(types) {\n\t\t\tBoxParser.createContainerBoxCtor(types[0], null, types[1]);\n\t\t});\n\t},\n\tBox: function(_type, _size, _uuid) {\n\t\tthis.type = _type;\n\t\tthis.size = _size;\n\t\tthis.uuid = _uuid;\n\t},\n\tFullBox: function(type, size, uuid) {\n\t\tBoxParser.Box.call(this, type, size, uuid);\n\t\tthis.flags = 0;\n\t\tthis.version = 0;\n\t},\n\tContainerBox: function(type, size, uuid) {\n\t\tBoxParser.Box.call(this, type, size, uuid);\n\t\tthis.boxes = [];\n\t},\n\tSampleEntry: function(type, size, hdr_size, start) {\n\t\tBoxParser.ContainerBox.call(this, type, size);\n\t\tthis.hdr_size = hdr_size;\n\t\tthis.start = start;\n\t},\n\tSampleGroupEntry: function(type) {\n\t\tthis.grouping_type = type;\n\t},\n\tTrackGroupTypeBox: function(type, size) {\n\t\tBoxParser.FullBox.call(this, type, size);\n\t},\n\tcreateBoxCtor: function(type, parseMethod){\n\t\tBoxParser.boxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.Box.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.Box();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateFullBoxCtor: function(type, parseMethod) {\n\t\t//BoxParser.fullBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.FullBox.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n\t\tBoxParser[type+\"Box\"].prototype.parse = function(stream) {\n\t\t\tthis.parseFullHeader(stream);\n\t\t\tif (parseMethod) {\n\t\t\t\tparseMethod.call(this, stream);\n\t\t\t}\n\t\t};\n\t},\n\taddSubBoxArrays: function(subBoxNames) {\n\t\tif (subBoxNames) {\n\t\t\tthis.subBoxNames = subBoxNames;\n\t\t\tvar nbSubBoxes = subBoxNames.length;\n\t\t\tfor (var k = 0; k parentSize) {\n\t\tLog.error(\"BoxParser\", \"Box of type '\"+type+\"' has a size \"+size+\" greater than its container size \"+parentSize);\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && start + size > stream.getEndPosition()) {\n\t\tstream.seek(start);\n\t\tLog.info(\"BoxParser\", \"Not enough data in stream to parse the entire '\"+type+\"' box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (headerOnly) {\n\t\treturn { code: BoxParser.OK, type: type, size: size, hdr_size: hdr_size, start: start };\n\t} else {\n\t\tif (BoxParser[type+\"Box\"]) {\n\t\t\tbox = new BoxParser[type+\"Box\"](size);\n\t\t} else {\n\t\t\tif (type !== \"uuid\") {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown box type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t} else {\n\t\t\t\tif (BoxParser.UUIDBoxes[uuid]) {\n\t\t\t\t\tbox = new BoxParser.UUIDBoxes[uuid](size);\n\t\t\t\t} else {\n\t\t\t\t\tLog.warn(\"BoxParser\", \"Unknown uuid type: '\"+uuid+\"'\");\n\t\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\t\tbox.uuid = uuid;\n\t\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tbox.hdr_size = hdr_size;\n\t/* recording the position of the box in the input stream */\n\tbox.start = start;\n\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\tLog.info(\"BoxParser\", \"'\"+box_type+\"' box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\tbox.parseDataAndRewind(stream);\n\t}\n\tbox.parse(stream);\n\tdiff = stream.getPosition() - (box.start+box.size);\n\tif (diff < 0) {\n\t\tLog.warn(\"BoxParser\", \"Parsing of box '\"+box_type+\"' did not read the entire indicated box data size (missing \"+(-diff)+\" bytes), seeking forward\");\n\t\tstream.seek(box.start+box.size);\n\t} else if (diff > 0) {\n\t\tLog.error(\"BoxParser\", \"Parsing of box '\"+box_type+\"' read \"+diff+\" more bytes than the indicated box data size, seeking backwards\");\n\t\tif (box.size !== 0) stream.seek(box.start+box.size);\n\t}\n\treturn { code: BoxParser.OK, box: box, size: box.size };\n}\n\nBoxParser.Box.prototype.parse = function(stream) {\n\tif (this.type != \"mdat\") {\n\t\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t} else {\n\t\tif (this.size === 0) {\n\t\t\tstream.seek(stream.getEndPosition());\n\t\t} else {\n\t\t\tstream.seek(this.start+this.size);\n\t\t}\n\t}\n}\n\n/* Used to parse a box without consuming its data, to allow detailled parsing\n Useful for boxes for which a write method is not yet implemented */\nBoxParser.Box.prototype.parseDataAndRewind = function(stream) {\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// restore the header size as if the full header had not been parsed\n\tthis.hdr_size -= 4;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseFullHeader = function (stream) {\n\tthis.version = stream.readUint8();\n\tthis.flags = stream.readUint24();\n\tthis.hdr_size += 4;\n}\n\nBoxParser.FullBox.prototype.parse = function (stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n}\n\nBoxParser.ContainerBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\t/* store the box in the 'boxes' array to preserve box order (for offset) but also store box in a property for more direct access */\n\t\t\tthis.boxes.push(box);\n\t\t\tif (this.subBoxNames && this.subBoxNames.indexOf(box.type) != -1) {\n\t\t\t\tthis[this.subBoxNames[this.subBoxNames.indexOf(box.type)]+\"s\"].push(box);\n\t\t\t} else {\n\t\t\t\tvar box_type = box.type !== \"uuid\" ? box.type : box.uuid;\n\t\t\t\tif (this[box_type]) {\n\t\t\t\t\tLog.warn(\"Box of type \"+box_type+\" already stored in field of this type\");\n\t\t\t\t} else {\n\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nBoxParser.Box.prototype.parseLanguage = function(stream) {\n\tthis.language = stream.readUint16();\n\tvar chars = [];\n\tchars[0] = (this.language>>10)&0x1F;\n\tchars[1] = (this.language>>5)&0x1F;\n\tchars[2] = (this.language)&0x1F;\n\tthis.languageString = String.fromCharCode(chars[0]+0x60, chars[1]+0x60, chars[2]+0x60);\n}\n\n// file:src/parsing/sampleentries/sampleentry.js\nBoxParser.SAMPLE_ENTRY_TYPE_VISUAL \t\t= \"Visual\";\nBoxParser.SAMPLE_ENTRY_TYPE_AUDIO \t\t= \"Audio\";\nBoxParser.SAMPLE_ENTRY_TYPE_HINT \t\t= \"Hint\";\nBoxParser.SAMPLE_ENTRY_TYPE_METADATA \t= \"Metadata\";\nBoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE \t= \"Subtitle\";\nBoxParser.SAMPLE_ENTRY_TYPE_SYSTEM \t\t= \"System\";\nBoxParser.SAMPLE_ENTRY_TYPE_TEXT \t\t= \"Text\";\n\nBoxParser.SampleEntry.prototype.parseHeader = function(stream) {\n\tstream.readUint8Array(6);\n\tthis.data_reference_index = stream.readUint16();\n\tthis.hdr_size += 8;\n}\n\nBoxParser.SampleEntry.prototype.parse = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n}\n\nBoxParser.SampleEntry.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n\t// restore the header size as if the sample entry header had not been parsed\n\tthis.hdr_size -= 8;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.SampleEntry.prototype.parseFooter = function(stream) {\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n}\n\n// Base SampleEntry types with default parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_HINT);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT);\n\n//Base SampleEntry types for Audio and Video with specific parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, function(stream) {\n\tvar compressorname_length;\n\tthis.parseHeader(stream);\n\tstream.readUint16();\n\tstream.readUint16();\n\tstream.readUint32Array(3);\n\tthis.width = stream.readUint16();\n\tthis.height = stream.readUint16();\n\tthis.horizresolution = stream.readUint32();\n\tthis.vertresolution = stream.readUint32();\n\tstream.readUint32();\n\tthis.frame_count = stream.readUint16();\n\tcompressorname_length = Math.min(31, stream.readUint8());\n\tthis.compressorname = stream.readString(compressorname_length);\n\tif (compressorname_length < 31) {\n\t\tstream.readString(31 - compressorname_length);\n\t}\n\tthis.depth = stream.readUint16();\n\tstream.readUint16();\n\tthis.parseFooter(stream);\n});\n\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, function(stream) {\n\tthis.parseHeader(stream);\n\tstream.readUint32Array(2);\n\tthis.channel_count = stream.readUint16();\n\tthis.samplesize = stream.readUint16();\n\tstream.readUint16();\n\tstream.readUint16();\n\tthis.samplerate = (stream.readUint32()/(1<<16));\n\tthis.parseFooter(stream);\n});\n\n// Sample entries inheriting from Audio and Video\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"av01\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dav1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hev1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvt1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"lhe1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvh1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvhe\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvi1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvs1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvcN\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp08\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp09\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avs3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"j2ki\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjp2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjpg\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,\t\"uncv\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mp4a\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ec-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"Opus\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm2\");\n\n// Encrypted sample entries\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \t\"encv\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"enca\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \t\"encu\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM, \t\"encs\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT, \t\t\"enct\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \t\"encm\");\n// file:src/parsing/a1lx.js\nBoxParser.createBoxCtor(\"a1lx\", function(stream) {\n\tvar large_size = stream.readUint8() & 1;\n\tvar FieldLength = ((large_size & 1) + 1) * 16;\n\tthis.layer_size = [];\n\tfor (var i = 0; i < 3; i++) {\n\t\tif (FieldLength == 16) {\n\t\t\tthis.layer_size[i] = stream.readUint16();\n\t\t} else {\n\t\t\tthis.layer_size[i] = stream.readUint32();\n\t\t}\n\t}\n});// file:src/parsing/a1op.js\nBoxParser.createBoxCtor(\"a1op\", function(stream) {\n\tthis.op_index = stream.readUint8();\n});// file:src/parsing/auxC.js\nBoxParser.createFullBoxCtor(\"auxC\", function(stream) {\n\tthis.aux_type = stream.readCString();\n\tvar aux_subtype_length = this.size - this.hdr_size - (this.aux_type.length + 1);\n\tthis.aux_subtype = stream.readUint8Array(aux_subtype_length);\n});// file:src/parsing/av1C.js\nBoxParser.createBoxCtor(\"av1C\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tvar tmp = stream.readUint8();\n\tif ((tmp >> 7) & 0x1 !== 1) {\n\t\tLog.error(\"av1C marker problem\");\n\t\treturn;\n\t}\n\tthis.version = tmp & 0x7F;\n\tif (this.version !== 1) {\n\t\tLog.error(\"av1C version \"+this.version+\" not supported\");\n\t\treturn;\n\t}\n\ttmp = stream.readUint8();\n\tthis.seq_profile = (tmp >> 5) & 0x7;\n\tthis.seq_level_idx_0 = tmp & 0x1F;\n\ttmp = stream.readUint8();\n\tthis.seq_tier_0 = (tmp >> 7) & 0x1;\n\tthis.high_bitdepth = (tmp >> 6) & 0x1;\n\tthis.twelve_bit = (tmp >> 5) & 0x1;\n\tthis.monochrome = (tmp >> 4) & 0x1;\n\tthis.chroma_subsampling_x = (tmp >> 3) & 0x1;\n\tthis.chroma_subsampling_y = (tmp >> 2) & 0x1;\n\tthis.chroma_sample_position = (tmp & 0x3);\n\ttmp = stream.readUint8();\n\tthis.reserved_1 = (tmp >> 5) & 0x7;\n\tif (this.reserved_1 !== 0) {\n\t\tLog.error(\"av1C reserved_1 parsing problem\");\n\t\treturn;\n\t}\n\tthis.initial_presentation_delay_present = (tmp >> 4) & 0x1;\n\tif (this.initial_presentation_delay_present === 1) {\n\t\tthis.initial_presentation_delay_minus_one = (tmp & 0xF);\n\t} else {\n\t\tthis.reserved_2 = (tmp & 0xF);\n\t\tif (this.reserved_2 !== 0) {\n\t\t\tLog.error(\"av1C reserved_2 parsing problem\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\tvar configOBUs_length = this.size - this.hdr_size - 4;\n\tthis.configOBUs = stream.readUint8Array(configOBUs_length);\n});\n\n// file:src/parsing/avcC.js\nBoxParser.createBoxCtor(\"avcC\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.AVCProfileIndication = stream.readUint8();\n\tthis.profile_compatibility = stream.readUint8();\n\tthis.AVCLevelIndication = stream.readUint8();\n\tthis.lengthSizeMinusOne = (stream.readUint8() & 0x3);\n\tthis.nb_SPS_nalus = (stream.readUint8() & 0x1F);\n\ttoparse = this.size - this.hdr_size - 6;\n\tthis.SPS = [];\n\tfor (i = 0; i < this.nb_SPS_nalus; i++) {\n\t\tthis.SPS[i] = {};\n\t\tthis.SPS[i].length = stream.readUint16();\n\t\tthis.SPS[i].nalu = stream.readUint8Array(this.SPS[i].length);\n\t\ttoparse -= 2+this.SPS[i].length;\n\t}\n\tthis.nb_PPS_nalus = stream.readUint8();\n\ttoparse--;\n\tthis.PPS = [];\n\tfor (i = 0; i < this.nb_PPS_nalus; i++) {\n\t\tthis.PPS[i] = {};\n\t\tthis.PPS[i].length = stream.readUint16();\n\t\tthis.PPS[i].nalu = stream.readUint8Array(this.PPS[i].length);\n\t\ttoparse -= 2+this.PPS[i].length;\n\t}\n\tif (toparse>0) {\n\t\tthis.ext = stream.readUint8Array(toparse);\n\t}\n});\n\n// file:src/parsing/btrt.js\nBoxParser.createBoxCtor(\"btrt\", function(stream) {\n\tthis.bufferSizeDB = stream.readUint32();\n\tthis.maxBitrate = stream.readUint32();\n\tthis.avgBitrate = stream.readUint32();\n});\n\n// file:src/parsing/ccst.js\nBoxParser.createFullBoxCtor(\"ccst\", function(stream) {\n\tvar flags = stream.readUint8();\n\tthis.all_ref_pics_intra = ((flags & 0x80) == 0x80);\n\tthis.intra_pred_used = ((flags & 0x40) == 0x40);\n\tthis.max_ref_per_pic = ((flags & 0x3f) >> 2);\n\tstream.readUint24();\n});\n\n// file:src/parsing/cdef.js\nBoxParser.createBoxCtor(\"cdef\", function(stream) {\n var i;\n this.channel_count = stream.readUint16();\n this.channel_indexes = [];\n this.channel_types = [];\n this.channel_associations = [];\n for (i = 0; i < this.channel_count; i++) {\n this.channel_indexes.push(stream.readUint16());\n this.channel_types.push(stream.readUint16());\n this.channel_associations.push(stream.readUint16());\n }\n});\n\n// file:src/parsing/clap.js\nBoxParser.createBoxCtor(\"clap\", function(stream) {\n\tthis.cleanApertureWidthN = stream.readUint32();\n\tthis.cleanApertureWidthD = stream.readUint32();\n\tthis.cleanApertureHeightN = stream.readUint32();\n\tthis.cleanApertureHeightD = stream.readUint32();\n\tthis.horizOffN = stream.readUint32();\n\tthis.horizOffD = stream.readUint32();\n\tthis.vertOffN = stream.readUint32();\n\tthis.vertOffD = stream.readUint32();\n});// file:src/parsing/clli.js\nBoxParser.createBoxCtor(\"clli\", function(stream) {\n\tthis.max_content_light_level = stream.readUint16();\n this.max_pic_average_light_level = stream.readUint16();\n});\n\n// file:src/parsing/cmex.js\nBoxParser.createFullBoxCtor(\"cmex\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.pos_x = stream.readInt32();\n\t}\n\tif (this.flags & 0x2) {\n\t\tthis.pos_y = stream.readInt32();\n\t}\n\tif (this.flags & 0x4) {\n\t\tthis.pos_z = stream.readInt32();\n\t}\n\tif (this.flags & 0x8) {\n\t\tif (this.version == 0) {\n\t\t\tif (this.flags & 0x10) {\n\t\t\t\tthis.quat_x = stream.readInt32();\n\t\t\t\tthis.quat_y = stream.readInt32();\n\t\t\t\tthis.quat_z = stream.readInt32();\n\t\t\t} else {\n\t\t\t\tthis.quat_x = stream.readInt16();\n\t\t\t\tthis.quat_y = stream.readInt16();\n\t\t\t\tthis.quat_z = stream.readInt16();\n\t\t\t}\n\t\t} else if (this.version == 1) {\n\t\t\t//ViewpointGlobalCoordinateSysRotationStruct rot;\n\t\t}\n\t}\n\tif (this.flags & 0x20) {\n\t\tthis.id = stream.readUint32();\n\t}\n});\n// file:src/parsing/cmin.js\nBoxParser.createFullBoxCtor(\"cmin\", function(stream) {\n\tthis.focal_length_x = stream.readInt32();\n\tthis.principal_point_x = stream.readInt32();\n\tthis.principal_point_y = stream.readInt32();\n\tif (this.flags & 0x1) {\n\t\tthis.focal_length_y = stream.readInt32();\n\t\tthis.skew_factor = stream.readInt32();\n\t}\n});// file:src/parsing/cmpd.js\nBoxParser.createBoxCtor(\"cmpd\", function(stream) {\n\tthis.component_count = stream.readUint16();\n\tthis.component_types = [];\n\tthis.component_type_urls = [];\n\tfor (i = 0; i < this.component_count; i++) {\n\t\tvar component_type = stream.readUint16();\n\t\tthis.component_types.push(component_type);\n\t\tif (component_type >= 0x8000) {\n\t\t\tthis.component_type_urls.push(stream.readCString());\n\t\t}\n\t}\n});// file:src/parsing/co64.js\nBoxParser.createFullBoxCtor(\"co64\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i> 7;\n\t} else if (this.colour_type === 'rICC') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t} else if (this.colour_type === 'prof') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t}\n});// file:src/parsing/cprt.js\nBoxParser.createFullBoxCtor(\"cprt\", function (stream) {\n\tthis.parseLanguage(stream);\n\tthis.notice = stream.readCString();\n});\n\n// file:src/parsing/cslg.js\nBoxParser.createFullBoxCtor(\"cslg\", function(stream) {\n\tvar entry_count;\n\tif (this.version === 0) {\n\t\tthis.compositionToDTSShift = stream.readInt32(); /* signed */\n\t\tthis.leastDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.greatestDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.compositionStartTime = stream.readInt32(); /* signed */\n\t\tthis.compositionEndTime = stream.readInt32(); /* signed */\n\t}\n});\n\n// file:src/parsing/ctts.js\nBoxParser.createFullBoxCtor(\"ctts\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i> 6;\n\tthis.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\tthis.bsmod = ((tmp_byte1 & 0x1) << 2) | ((tmp_byte2 >> 6) & 0x3);\n\tthis.acmod = ((tmp_byte2 >> 3) & 0x7);\n\tthis.lfeon = ((tmp_byte2 >> 2) & 0x1);\n\tthis.bit_rate_code = (tmp_byte2 & 0x3) | ((tmp_byte3 >> 5) & 0x7);\n});\n\n// file:src/parsing/dec3.js\nBoxParser.createBoxCtor(\"dec3\", function(stream) {\n\tvar tmp_16 = stream.readUint16();\n\tthis.data_rate = tmp_16 >> 3;\n\tthis.num_ind_sub = tmp_16 & 0x7;\n\tthis.ind_subs = [];\n\tfor (var i = 0; i < this.num_ind_sub+1; i++) {\n\t\tvar ind_sub = {};\n\t\tthis.ind_subs.push(ind_sub);\n\t\tvar tmp_byte1 = stream.readUint8();\n\t\tvar tmp_byte2 = stream.readUint8();\n\t\tvar tmp_byte3 = stream.readUint8();\n\t\tind_sub.fscod = tmp_byte1 >> 6;\n\t\tind_sub.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\t\tind_sub.bsmod = ((tmp_byte1 & 0x1) << 4) | ((tmp_byte2 >> 4) & 0xF);\n\t\tind_sub.acmod = ((tmp_byte2 >> 1) & 0x7);\n\t\tind_sub.lfeon = (tmp_byte2 & 0x1);\n\t\tind_sub.num_dep_sub = ((tmp_byte3 >> 1) & 0xF);\n\t\tif (ind_sub.num_dep_sub > 0) {\n\t\t\tind_sub.chan_loc = ((tmp_byte3 & 0x1) << 8) | stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dfLa.js\nBoxParser.createFullBoxCtor(\"dfLa\", function(stream) {\n var BLOCKTYPE_MASK = 0x7F;\n var LASTMETADATABLOCKFLAG_MASK = 0x80;\n\n var boxesFound = [];\n var knownBlockTypes = [\n \"STREAMINFO\",\n \"PADDING\",\n \"APPLICATION\",\n \"SEEKTABLE\",\n \"VORBIS_COMMENT\",\n \"CUESHEET\",\n \"PICTURE\",\n \"RESERVED\"\n ];\n\n // dfLa is a FullBox\n this.parseFullHeader(stream);\n\n // for (i=0; ; i++) { // to end of box\n do {\n var flagAndType = stream.readUint8();\n\n var type = Math.min(\n (flagAndType & BLOCKTYPE_MASK),\n (knownBlockTypes.length - 1)\n );\n\n // if this is a STREAMINFO block, read the true samplerate since this\n // can be different to the AudioSampleEntry samplerate.\n if (!(type)) {\n // read past all the other stuff\n stream.readUint8Array(13);\n\n // extract samplerate\n this.samplerate = (stream.readUint32() >> 12);\n\n // read to end of STREAMINFO\n stream.readUint8Array(20);\n } else {\n // not interested in other block types so just discard length bytes\n stream.readUint8Array(stream.readUint24());\n }\n\n boxesFound.push(knownBlockTypes[type]);\n\n if (!!(flagAndType & LASTMETADATABLOCKFLAG_MASK)) {\n break;\n }\n } while (true);\n\n this.numMetadataBlocks =\n boxesFound.length + \" (\" + boxesFound.join(\", \") + \")\";\n});\n// file:src/parsing/dimm.js\nBoxParser.createBoxCtor(\"dimm\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dmax.js\nBoxParser.createBoxCtor(\"dmax\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/dmed.js\nBoxParser.createBoxCtor(\"dmed\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dOps.js\nBoxParser.createBoxCtor(\"dOps\", function(stream) {\n\tthis.Version = stream.readUint8();\n\tthis.OutputChannelCount = stream.readUint8();\n\tthis.PreSkip = stream.readUint16();\n\tthis.InputSampleRate = stream.readUint32();\n\tthis.OutputGain = stream.readInt16();\n\tthis.ChannelMappingFamily = stream.readUint8();\n\tif (this.ChannelMappingFamily !== 0) {\n\t\tthis.StreamCount = stream.readUint8();\n\t\tthis.CoupledCount = stream.readUint8();\n\t\tthis.ChannelMapping = [];\n\t\tfor (var i = 0; i < this.OutputChannelCount; i++) {\n\t\t\tthis.ChannelMapping[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dref.js\nBoxParser.createFullBoxCtor(\"dref\", function(stream) {\n\tvar ret;\n\tvar box;\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/drep.js\nBoxParser.createBoxCtor(\"drep\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/elng.js\nBoxParser.createFullBoxCtor(\"elng\", function(stream) {\n\tthis.extended_language = stream.readString(this.size-this.hdr_size);\n});\n\n// file:src/parsing/elst.js\nBoxParser.createFullBoxCtor(\"elst\", function(stream) {\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tentry.segment_duration = stream.readUint64();\n\t\t\tentry.media_time = stream.readInt64();\n\t\t} else {\n\t\t\tentry.segment_duration = stream.readUint32();\n\t\t\tentry.media_time = stream.readInt32();\n\t\t}\n\t\tentry.media_rate_integer = stream.readInt16();\n\t\tentry.media_rate_fraction = stream.readInt16();\n\t}\n});\n\n// file:src/parsing/emsg.js\nBoxParser.createFullBoxCtor(\"emsg\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time \t\t\t= stream.readUint64();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t} else {\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time_delta \t= stream.readUint32();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t}\n\tvar message_size = this.size - this.hdr_size - (4*4 + (this.scheme_id_uri.length+1) + (this.value.length+1));\n\tif (this.version == 1) {\n\t\tmessage_size -= 4;\n\t}\n\tthis.message_data = stream.readUint8Array(message_size);\n});\n\n// file:src/parsing/EntityToGroup.js\n// ISO/IEC 14496-12:2022 Section 8.18.3 Entity to group box\nBoxParser.createEntityToGroupCtor = function(type, parseMethod) {\n BoxParser[type+\"Box\"] = function(size) {\n BoxParser.FullBox.call(this, type, size);\n }\n BoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n BoxParser[type+\"Box\"].prototype.parse = function(stream) {\n this.parseFullHeader(stream);\n if (parseMethod) {\n parseMethod.call(this, stream);\n } else {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n }\n };\n};\n\n// Auto exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.2.1)\nBoxParser.createEntityToGroupCtor(\"aebr\");\n\n// Flash exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.5.1)\nBoxParser.createEntityToGroupCtor(\"afbr\");\n\n// Album collection (ISO/IEC 23008-12:2022 Section 6.8.7.1)\nBoxParser.createEntityToGroupCtor(\"albc\");\n\n// Alternative entity (ISO/IEC 14496-12:2022 Section 8.18.3.1)\nBoxParser.createEntityToGroupCtor(\"altr\");\n\n// Burst image entity group (ISO/IEC 23008-12:2022 Section 6.8.2.2)\nBoxParser.createEntityToGroupCtor(\"brst\");\n\n// Depth of field bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.6.1)\nBoxParser.createEntityToGroupCtor(\"dobr\");\n\n// Equivalent entity (ISO/IEC 23008-12:2022 Section 6.8.1.1)\nBoxParser.createEntityToGroupCtor(\"eqiv\");\n\n// Favourites collection (ISO/IEC 23008-12:2022 Section 6.8.7.2)\nBoxParser.createEntityToGroupCtor(\"favc\");\n\n// Focus bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.4.1)\nBoxParser.createEntityToGroupCtor(\"fobr\");\n\n// Audio to image entity group (ISO/IEC 23008-12:2022 Section 6.8.4)\nBoxParser.createEntityToGroupCtor(\"iaug\");\n\n// Panorama (ISO/IEC 23008-12:2022 Section 6.8.8.1)\nBoxParser.createEntityToGroupCtor(\"pano\");\n\n// Slideshow (ISO/IEC 23008-12:2022 Section 6.8.9.1)\nBoxParser.createEntityToGroupCtor(\"slid\");\n\n// Stereo pair (ISO/IEC 23008-12:2022 Section 6.8.5)\nBoxParser.createEntityToGroupCtor(\"ster\");\n\n// Time-synchronised capture entity group (ISO/IEC 23008-12:2022 Section 6.8.3)\nBoxParser.createEntityToGroupCtor(\"tsyn\");\n\n// White balance bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.3.1)\nBoxParser.createEntityToGroupCtor(\"wbbr\");\n\n// Alternative entity (ISO/IEC 23008-12:2022 AMD1 Section 6.8.10)\nBoxParser.createEntityToGroupCtor(\"prgr\");\n// file:src/parsing/esds.js\nBoxParser.createFullBoxCtor(\"esds\", function(stream) {\n\tvar esd_data = stream.readUint8Array(this.size-this.hdr_size);\n\tthis.data = esd_data\n\tif (typeof MPEG4DescriptorParser !== \"undefined\") {\n\t\tvar esd_parser = new MPEG4DescriptorParser();\n\t\tthis.esd = esd_parser.parseOneDescriptor(new DataStream(esd_data.buffer, 0, DataStream.BIG_ENDIAN));\n\t}\n});\n\n// file:src/parsing/fiel.js\nBoxParser.createBoxCtor(\"fiel\", function(stream) {\n\tthis.fieldCount = stream.readUint8();\n\tthis.fieldOrdering = stream.readUint8();\n});\n\n// file:src/parsing/frma.js\nBoxParser.createBoxCtor(\"frma\", function(stream) {\n\tthis.data_format = stream.readString(4);\n});\n\n// file:src/parsing/ftyp.js\nBoxParser.createBoxCtor(\"ftyp\", function(stream) {\n\tvar toparse = this.size - this.hdr_size;\n\tthis.major_brand = stream.readString(4);\n\tthis.minor_version = stream.readUint32();\n\ttoparse -= 8;\n\tthis.compatible_brands = [];\n\tvar i = 0;\n\twhile (toparse>=4) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t\ttoparse -= 4;\n\t\ti++;\n\t}\n});\n\n// file:src/parsing/hdlr.js\nBoxParser.createFullBoxCtor(\"hdlr\", function(stream) {\n\tif (this.version === 0) {\n\t\tstream.readUint32();\n\t\tthis.handler = stream.readString(4);\n\t\tstream.readUint32Array(3);\n\t\tthis.name = stream.readString(this.size-this.hdr_size-20);\n\t\tif (this.name[this.name.length-1]==='\\0') {\n\t\t\tthis.name = this.name.slice(0,-1);\n\t\t}\n\t}\n});\n\n// file:src/parsing/hvcC.js\nBoxParser.createBoxCtor(\"hvcC\", function(stream) {\n\tvar i, j;\n\tvar nb_nalus;\n\tvar length;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\ttmp_byte = stream.readUint8();\n\tthis.general_profile_space = tmp_byte >> 6;\n\tthis.general_tier_flag = (tmp_byte & 0x20) >> 5;\n\tthis.general_profile_idc = (tmp_byte & 0x1F);\n\tthis.general_profile_compatibility = stream.readUint32();\n\tthis.general_constraint_indicator = stream.readUint8Array(6);\n\tthis.general_level_idc = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\tthis.chroma_format_idc = (stream.readUint8() & 0x3);\n\tthis.bit_depth_luma_minus8 = (stream.readUint8() & 0x7);\n\tthis.bit_depth_chroma_minus8 = (stream.readUint8() & 0x7);\n\tthis.avgFrameRate = stream.readUint16();\n\ttmp_byte = stream.readUint8();\n\tthis.constantFrameRate = (tmp_byte >> 6);\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tlength = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/iinf.js\nBoxParser.createFullBoxCtor(\"iinf\", function(stream) {\n\tvar ret;\n\tif (this.version === 0) {\n\t\tthis.entry_count = stream.readUint16();\n\t} else {\n\t\tthis.entry_count = stream.readUint32();\n\t}\n\tthis.item_infos = [];\n\tfor (var i = 0; i < this.entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (ret.box.type !== \"infe\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Expected 'infe' box, got \"+ret.box.type);\n\t\t\t}\n\t\t\tthis.item_infos[i] = ret.box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/iloc.js\nBoxParser.createFullBoxCtor(\"iloc\", function(stream) {\n\tvar byte;\n\tbyte = stream.readUint8();\n\tthis.offset_size = (byte >> 4) & 0xF;\n\tthis.length_size = byte & 0xF;\n\tbyte = stream.readUint8();\n\tthis.base_offset_size = (byte >> 4) & 0xF;\n\tif (this.version === 1 || this.version === 2) {\n\t\tthis.index_size = byte & 0xF;\n\t} else {\n\t\tthis.index_size = 0;\n\t\t// reserved = byte & 0xF;\n\t}\n\tthis.items = [];\n\tvar item_count = 0;\n\tif (this.version < 2) {\n\t\titem_count = stream.readUint16();\n\t} else if (this.version === 2) {\n\t\titem_count = stream.readUint32();\n\t} else {\n\t\tthrow \"version of iloc box not supported\";\n\t}\n\tfor (var i = 0; i < item_count; i++) {\n\t\tvar item = {};\n\t\tthis.items.push(item);\n\t\tif (this.version < 2) {\n\t\t\titem.item_ID = stream.readUint16();\n\t\t} else if (this.version === 2) {\n\t\t\titem.item_ID = stream.readUint16();\n\t\t} else {\n\t\t\tthrow \"version of iloc box not supported\";\n\t\t}\n\t\tif (this.version === 1 || this.version === 2) {\n\t\t\titem.construction_method = (stream.readUint16() & 0xF);\n\t\t} else {\n\t\t\titem.construction_method = 0;\n\t\t}\n\t\titem.data_reference_index = stream.readUint16();\n\t\tswitch(this.base_offset_size) {\n\t\t\tcase 0:\n\t\t\t\titem.base_offset = 0;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\titem.base_offset = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 8:\n\t\t\t\titem.base_offset = stream.readUint64();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow \"Error reading base offset size\";\n\t\t}\n\t\tvar extent_count = stream.readUint16();\n\t\titem.extents = [];\n\t\tfor (var j=0; j < extent_count; j++) {\n\t\t\tvar extent = {};\n\t\t\titem.extents.push(extent);\n\t\t\tif (this.version === 1 || this.version === 2) {\n\t\t\t\tswitch(this.index_size) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\textent.extent_index = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\textent.extent_index = stream.readUint32();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\textent.extent_index = stream.readUint64();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch(this.offset_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_offset = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_offset = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_offset = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t\tswitch(this.length_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_length = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_length = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_length = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/imir.js\nBoxParser.createBoxCtor(\"imir\", function(stream) {\n\tvar tmp = stream.readUint8();\n\tthis.reserved = tmp >> 7;\n\tthis.axis = tmp & 1;\n});// file:src/parsing/infe.js\nBoxParser.createFullBoxCtor(\"infe\", function(stream) {\n\tif (this.version === 0 || this.version === 1) {\n\t\tthis.item_ID = stream.readUint16();\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_name = stream.readCString();\n\t\tthis.content_type = stream.readCString();\n\t\tthis.content_encoding = stream.readCString();\n\t}\n\tif (this.version === 1) {\n\t\tthis.extension_type = stream.readString(4);\n\t\tLog.warn(\"BoxParser\", \"Cannot parse extension type\");\n\t\tstream.seek(this.start+this.size);\n\t\treturn;\n\t}\n\tif (this.version >= 2) {\n\t\tif (this.version === 2) {\n\t\t\tthis.item_ID = stream.readUint16();\n\t\t} else if (this.version === 3) {\n\t\t\tthis.item_ID = stream.readUint32();\n\t\t}\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_type = stream.readString(4);\n\t\tthis.item_name = stream.readCString();\n\t\tif (this.item_type === \"mime\") {\n\t\t\tthis.content_type = stream.readCString();\n\t\t\tthis.content_encoding = stream.readCString();\n\t\t} else if (this.item_type === \"uri \") {\n\t\t\tthis.item_uri_type = stream.readCString();\n\t\t}\n\t}\n});\n// file:src/parsing/ipma.js\nBoxParser.createFullBoxCtor(\"ipma\", function(stream) {\n\tvar i, j;\n\tentry_count = stream.readUint32();\n\tthis.associations = [];\n\tfor(i=0; i> 7) === 1;\n\t\t\tif (this.flags & 0x1) {\n\t\t\t\tp.property_index = (tmp & 0x7F) << 8 | stream.readUint8();\n\t\t\t} else {\n\t\t\t\tp.property_index = (tmp & 0x7F);\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/iref.js\nBoxParser.createFullBoxCtor(\"iref\", function(stream) {\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.references = [];\n\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t} else {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBoxLarge(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.warn(\"BoxParser\", box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.references.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n// file:src/parsing/irot.js\nBoxParser.createBoxCtor(\"irot\", function(stream) {\n\tthis.angle = stream.readUint8() & 0x3;\n});\n\n// file:src/parsing/ispe.js\nBoxParser.createFullBoxCtor(\"ispe\", function(stream) {\n\tthis.image_width = stream.readUint32();\n\tthis.image_height = stream.readUint32();\n});// file:src/parsing/kind.js\nBoxParser.createFullBoxCtor(\"kind\", function(stream) {\n\tthis.schemeURI = stream.readCString();\n\tthis.value = stream.readCString();\n});\n// file:src/parsing/leva.js\nBoxParser.createFullBoxCtor(\"leva\", function(stream) {\n\tvar count = stream.readUint8();\n\tthis.levels = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tvar level = {};\n\t\tthis.levels[i] = level;\n\t\tlevel.track_ID = stream.readUint32();\n\t\tvar tmp_byte = stream.readUint8();\n\t\tlevel.padding_flag = tmp_byte >> 7;\n\t\tlevel.assignment_type = tmp_byte & 0x7F;\n\t\tswitch (level.assignment_type) {\n\t\t\tcase 0:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tlevel.grouping_type_parameter = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tlevel.sub_track_id = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown leva assignement type\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/lsel.js\nBoxParser.createBoxCtor(\"lsel\", function(stream) {\n\tthis.layer_id = stream.readUint16();\n});// file:src/parsing/maxr.js\nBoxParser.createBoxCtor(\"maxr\", function(stream) {\n\tthis.period = stream.readUint32();\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/mdcv.js\nBoxParser.createBoxCtor(\"mdcv\", function(stream) {\n this.display_primaries = [];\n this.display_primaries[0] = {};\n this.display_primaries[0].x = stream.readUint16();\n this.display_primaries[0].y = stream.readUint16();\n this.display_primaries[1] = {};\n this.display_primaries[1].x = stream.readUint16();\n this.display_primaries[1].y = stream.readUint16();\n this.display_primaries[2] = {};\n this.display_primaries[2].x = stream.readUint16();\n this.display_primaries[2].y = stream.readUint16();\n this.white_point = {};\n this.white_point.x = stream.readUint16();\n this.white_point.y = stream.readUint16();\n this.max_display_mastering_luminance = stream.readUint32();\n this.min_display_mastering_luminance = stream.readUint32();\n});\n\n// file:src/parsing/mdhd.js\nBoxParser.createFullBoxCtor(\"mdhd\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.parseLanguage(stream);\n\tstream.readUint16();\n});\n\n// file:src/parsing/mehd.js\nBoxParser.createFullBoxCtor(\"mehd\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tLog.warn(\"BoxParser\", \"mehd box incorrectly uses flags set to 1, converting version to 1\");\n\t\tthis.version = 1;\n\t}\n\tif (this.version == 1) {\n\t\tthis.fragment_duration = stream.readUint64();\n\t} else {\n\t\tthis.fragment_duration = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/meta.js\nBoxParser.createFullBoxCtor(\"meta\", function(stream) {\n\tthis.boxes = [];\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n});\n// file:src/parsing/mfhd.js\nBoxParser.createFullBoxCtor(\"mfhd\", function(stream) {\n\tthis.sequence_number = stream.readUint32();\n});\n\n// file:src/parsing/mfro.js\nBoxParser.createFullBoxCtor(\"mfro\", function(stream) {\n\tthis._size = stream.readUint32();\n});\n\n// file:src/parsing/mvhd.js\nBoxParser.createFullBoxCtor(\"mvhd\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.rate = stream.readUint32();\n\tthis.volume = stream.readUint16()>>8;\n\tstream.readUint16();\n\tstream.readUint32Array(2);\n\tthis.matrix = stream.readUint32Array(9);\n\tstream.readUint32Array(6);\n\tthis.next_track_id = stream.readUint32();\n});\n// file:src/parsing/npck.js\nBoxParser.createBoxCtor(\"npck\", function(stream) {\n\tthis.packetssent = stream.readUint32();\n});\n\n// file:src/parsing/nump.js\nBoxParser.createBoxCtor(\"nump\", function(stream) {\n\tthis.packetssent = stream.readUint64();\n});\n\n// file:src/parsing/padb.js\nBoxParser.createFullBoxCtor(\"padb\", function(stream) {\n\tvar sample_count = stream.readUint32();\n\tthis.padbits = [];\n\tfor (var i = 0; i < Math.floor((sample_count+1)/2); i++) {\n\t\tthis.padbits = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pasp.js\nBoxParser.createBoxCtor(\"pasp\", function(stream) {\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n});// file:src/parsing/payl.js\nBoxParser.createBoxCtor(\"payl\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/payt.js\nBoxParser.createBoxCtor(\"payt\", function(stream) {\n\tthis.payloadID = stream.readUint32();\n\tvar count = stream.readUint8();\n\tthis.rtpmap_string = stream.readString(count);\n});\n\n// file:src/parsing/pdin.js\nBoxParser.createFullBoxCtor(\"pdin\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/8;\n\tthis.rate = [];\n\tthis.initial_delay = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.rate[i] = stream.readUint32();\n\t\tthis.initial_delay[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pitm.js\nBoxParser.createFullBoxCtor(\"pitm\", function(stream) {\n\tif (this.version === 0) {\n\t\tthis.item_id = stream.readUint16();\n\t} else {\n\t\tthis.item_id = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pixi.js\nBoxParser.createFullBoxCtor(\"pixi\", function(stream) {\n\tvar i;\n\tthis.num_channels = stream.readUint8();\n\tthis.bits_per_channels = [];\n\tfor (i = 0; i < this.num_channels; i++) {\n\t\tthis.bits_per_channels[i] = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pmax.js\nBoxParser.createBoxCtor(\"pmax\", function(stream) {\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/prdi.js\nBoxParser.createFullBoxCtor(\"prdi\", function(stream) {\n\tthis.step_count = stream.readUint16();\n\tthis.item_count = [];\n\tif (this.flags & 0x2) {\n\t\tfor (var i = 0; i < this.step_count; i++) {\n\t\t\tthis.item_count[i] = stream.readUint16();\n\t\t}\n\t}\n});// file:src/parsing/prft.js\nBoxParser.createFullBoxCtor(\"prft\", function(stream) {\n\tthis.ref_track_id = stream.readUint32();\n\tthis.ntp_timestamp = stream.readUint64();\n\tif (this.version === 0) {\n\t\tthis.media_time = stream.readUint32();\n\t} else {\n\t\tthis.media_time = stream.readUint64();\n\t}\n});\n\n// file:src/parsing/pssh.js\nBoxParser.createFullBoxCtor(\"pssh\", function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tif (this.version > 0) {\n\t\tvar count = stream.readUint32();\n\t\tthis.kid = [];\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tthis.kid[i] = BoxParser.parseHex16(stream);\n\t\t}\n\t}\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/qt/clef.js\nBoxParser.createFullBoxCtor(\"clef\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/enof.js\nBoxParser.createFullBoxCtor(\"enof\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/prof.js\nBoxParser.createFullBoxCtor(\"prof\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/tapt.js\nBoxParser.createContainerBoxCtor(\"tapt\", null, [ \"clef\", \"prof\", \"enof\"]);// file:src/parsing/rtp.js\nBoxParser.createBoxCtor(\"rtp \", function(stream) {\n\tthis.descriptionformat = stream.readString(4);\n\tthis.sdptext = stream.readString(this.size - this.hdr_size - 4);\n});\n\n// file:src/parsing/saio.js\nBoxParser.createFullBoxCtor(\"saio\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readUint32();\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tvar count = stream.readUint32();\n\tthis.offset = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tif (this.version === 0) {\n\t\t\tthis.offset[i] = stream.readUint32();\n\t\t} else {\n\t\t\tthis.offset[i] = stream.readUint64();\n\t\t}\n\t}\n});\n// file:src/parsing/saiz.js\nBoxParser.createFullBoxCtor(\"saiz\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readUint32();\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tthis.default_sample_info_size = stream.readUint8();\n\tvar count = stream.readUint32();\n\tthis.sample_info_size = [];\n\tif (this.default_sample_info_size === 0) {\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tthis.sample_info_size[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/sampleentries/mett.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"mett\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/metx.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"metx\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/sbtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"sbtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stpp.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stpp\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.auxiliary_mime_types = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stxt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stxt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/tx3g.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"tx3g\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.displayFlags = stream.readUint32();\n\tthis.horizontal_justification = stream.readInt8();\n\tthis.vertical_justification = stream.readInt8();\n\tthis.bg_color_rgba = stream.readUint8Array(4);\n\tthis.box_record = stream.readInt16Array(4);\n\tthis.style_record = stream.readUint8Array(12);\n\tthis.parseFooter(stream);\n});\n// file:src/parsing/sampleentries/wvtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"wvtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/samplegroups/alst.js\nBoxParser.createSampleGroupCtor(\"alst\", function(stream) {\n\tvar i;\n\tvar roll_count = stream.readUint16();\n\tthis.first_output_sample = stream.readUint16();\n\tthis.sample_offset = [];\n\tfor (i = 0; i < roll_count; i++) {\n\t\tthis.sample_offset[i] = stream.readUint32();\n\t}\n\tvar remaining = this.description_length - 4 - 4*roll_count;\n\tthis.num_output_samples = [];\n\tthis.num_total_samples = [];\n\tfor (i = 0; i < remaining/4; i++) {\n\t\tthis.num_output_samples[i] = stream.readUint16();\n\t\tthis.num_total_samples[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/avll.js\nBoxParser.createSampleGroupCtor(\"avll\", function(stream) {\n\tthis.layerNumber = stream.readUint8();\n\tthis.accurateStatisticsFlag = stream.readUint8();\n\tthis.avgBitRate = stream.readUint16();\n\tthis.avgFrameRate = stream.readUint16();\n});\n\n// file:src/parsing/samplegroups/avss.js\nBoxParser.createSampleGroupCtor(\"avss\", function(stream) {\n\tthis.subSequenceIdentifier = stream.readUint16();\n\tthis.layerNumber = stream.readUint8();\n\tvar tmp_byte = stream.readUint8();\n\tthis.durationFlag = tmp_byte >> 7;\n\tthis.avgRateFlag = (tmp_byte >> 6) & 0x1;\n\tif (this.durationFlag) {\n\t\tthis.duration = stream.readUint32();\n\t}\n\tif (this.avgRateFlag) {\n\t\tthis.accurateStatisticsFlag = stream.readUint8();\n\t\tthis.avgBitRate = stream.readUint16();\n\t\tthis.avgFrameRate = stream.readUint16();\n\t}\n\tthis.dependency = [];\n\tvar numReferences = stream.readUint8();\n\tfor (var i = 0; i < numReferences; i++) {\n\t\tvar dependencyInfo = {};\n\t\tthis.dependency.push(dependencyInfo);\n\t\tdependencyInfo.subSeqDirectionFlag = stream.readUint8();\n\t\tdependencyInfo.layerNumber = stream.readUint8();\n\t\tdependencyInfo.subSequenceIdentifier = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/dtrt.js\nBoxParser.createSampleGroupCtor(\"dtrt\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/mvif.js\nBoxParser.createSampleGroupCtor(\"mvif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/prol.js\nBoxParser.createSampleGroupCtor(\"prol\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/rap.js\nBoxParser.createSampleGroupCtor(\"rap \", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.num_leading_samples_known = tmp_byte >> 7;\n\tthis.num_leading_samples = tmp_byte & 0x7F;\n});\n\n// file:src/parsing/samplegroups/rash.js\nBoxParser.createSampleGroupCtor(\"rash\", function(stream) {\n\tthis.operation_point_count = stream.readUint16();\n\tif (this.description_length !== 2+(this.operation_point_count === 1?2:this.operation_point_count*6)+9) {\n\t\tLog.warn(\"BoxParser\", \"Mismatch in \"+this.grouping_type+\" sample group length\");\n\t\tthis.data = stream.readUint8Array(this.description_length-2);\n\t} else {\n\t\tif (this.operation_point_count === 1) {\n\t\t\tthis.target_rate_share = stream.readUint16();\n\t\t} else {\n\t\t\tthis.target_rate_share = [];\n\t\t\tthis.available_bitrate = [];\n\t\t\tfor (var i = 0; i < this.operation_point_count; i++) {\n\t\t\t\tthis.available_bitrate[i] = stream.readUint32();\n\t\t\t\tthis.target_rate_share[i] = stream.readUint16();\n\t\t\t}\n\t\t}\n\t\tthis.maximum_bitrate = stream.readUint32();\n\t\tthis.minimum_bitrate = stream.readUint32();\n\t\tthis.discard_priority = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/samplegroups/roll.js\nBoxParser.createSampleGroupCtor(\"roll\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.parse = function(stream) {\n\tLog.warn(\"BoxParser\", \"Unknown Sample Group type: \"+this.grouping_type);\n\tthis.data = stream.readUint8Array(this.description_length);\n}\n\n// file:src/parsing/samplegroups/scif.js\nBoxParser.createSampleGroupCtor(\"scif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/scnm.js\nBoxParser.createSampleGroupCtor(\"scnm\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/seig.js\nBoxParser.createSampleGroupCtor(\"seig\", function(stream) {\n\tthis.reserved = stream.readUint8();\n\tvar tmp = stream.readUint8();\n\tthis.crypt_byte_block = tmp >> 4;\n\tthis.skip_byte_block = tmp & 0xF;\n\tthis.isProtected = stream.readUint8();\n\tthis.Per_Sample_IV_Size = stream.readUint8();\n\tthis.KID = BoxParser.parseHex16(stream);\n\tthis.constant_IV_size = 0;\n\tthis.constant_IV = 0;\n\tif (this.isProtected === 1 && this.Per_Sample_IV_Size === 0) {\n\t\tthis.constant_IV_size = stream.readUint8();\n\t\tthis.constant_IV = stream.readUint8Array(this.constant_IV_size);\n\t}\n});\n\n// file:src/parsing/samplegroups/stsa.js\nBoxParser.createSampleGroupCtor(\"stsa\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/sync.js\nBoxParser.createSampleGroupCtor(\"sync\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.NAL_unit_type = tmp_byte & 0x3F;\n});\n\n// file:src/parsing/samplegroups/tele.js\nBoxParser.createSampleGroupCtor(\"tele\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.level_independently_decodable = tmp_byte >> 7;\n});\n\n// file:src/parsing/samplegroups/tsas.js\nBoxParser.createSampleGroupCtor(\"tsas\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/tscl.js\nBoxParser.createSampleGroupCtor(\"tscl\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/vipr.js\nBoxParser.createSampleGroupCtor(\"vipr\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/sbgp.js\nBoxParser.createFullBoxCtor(\"sbgp\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tif (this.version === 1) {\n\t\tthis.grouping_type_parameter = stream.readUint32();\n\t} else {\n\t\tthis.grouping_type_parameter = 0;\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tentry.sample_count = stream.readInt32();\n\t\tentry.group_description_index = stream.readInt32();\n\t}\n});\n\n// file:src/parsing/schm.js\nBoxParser.createFullBoxCtor(\"schm\", function(stream) {\n\tthis.scheme_type = stream.readString(4);\n\tthis.scheme_version = stream.readUint32();\n\tif (this.flags & 0x000001) {\n\t\tthis.scheme_uri = stream.readString(this.size - this.hdr_size - 8);\n\t}\n});\n\n// file:src/parsing/sdp.js\nBoxParser.createBoxCtor(\"sdp \", function(stream) {\n\tthis.sdptext = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/sdtp.js\nBoxParser.createFullBoxCtor(\"sdtp\", function(stream) {\n\tvar tmp_byte;\n\tvar count = (this.size - this.hdr_size);\n\tthis.is_leading = [];\n\tthis.sample_depends_on = [];\n\tthis.sample_is_depended_on = [];\n\tthis.sample_has_redundancy = [];\n\tfor (var i = 0; i < count; i++) {\n\t\ttmp_byte = stream.readUint8();\n\t\tthis.is_leading[i] = tmp_byte >> 6;\n\t\tthis.sample_depends_on[i] = (tmp_byte >> 4) & 0x3;\n\t\tthis.sample_is_depended_on[i] = (tmp_byte >> 2) & 0x3;\n\t\tthis.sample_has_redundancy[i] = tmp_byte & 0x3;\n\t}\n});\n\n// file:src/parsing/senc.js\n// Cannot be fully parsed because Per_Sample_IV_Size needs to be known\r\nBoxParser.createFullBoxCtor(\"senc\" /*, function(stream) {\r\n\tthis.parseFullHeader(stream);\r\n\tvar sample_count = stream.readUint32();\r\n\tthis.samples = [];\r\n\tfor (var i = 0; i < sample_count; i++) {\r\n\t\tvar sample = {};\r\n\t\t// tenc.default_Per_Sample_IV_Size or seig.Per_Sample_IV_Size\r\n\t\tsample.InitializationVector = this.readUint8Array(Per_Sample_IV_Size*8);\r\n\t\tif (this.flags & 0x2) {\r\n\t\t\tsample.subsamples = [];\r\n\t\t\tsubsample_count = stream.readUint16();\r\n\t\t\tfor (var j = 0; j < subsample_count; j++) {\r\n\t\t\t\tvar subsample = {};\r\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\r\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\r\n\t\t\t\tsample.subsamples.push(subsample);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// TODO\r\n\t\tthis.samples.push(sample);\r\n\t}\r\n}*/);\r\n// file:src/parsing/sgpd.js\nBoxParser.createFullBoxCtor(\"sgpd\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tLog.debug(\"BoxParser\", \"Found Sample Groups of type \"+this.grouping_type);\n\tif (this.version === 1) {\n\t\tthis.default_length = stream.readUint32();\n\t} else {\n\t\tthis.default_length = 0;\n\t}\n\tif (this.version >= 2) {\n\t\tthis.default_group_description_index = stream.readUint32();\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry;\n\t\tif (BoxParser[this.grouping_type+\"SampleGroupEntry\"]) {\n\t\t\tentry = new BoxParser[this.grouping_type+\"SampleGroupEntry\"](this.grouping_type);\n\t\t} else {\n\t\t\tentry = new BoxParser.SampleGroupEntry(this.grouping_type);\n\t\t}\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tentry.description_length = stream.readUint32();\n\t\t\t} else {\n\t\t\t\tentry.description_length = this.default_length;\n\t\t\t}\n\t\t} else {\n\t\t\tentry.description_length = this.default_length;\n\t\t}\n\t\tif (entry.write === BoxParser.SampleGroupEntry.prototype.write) {\n\t\t\tLog.info(\"BoxParser\", \"SampleGroup for type \"+this.grouping_type+\" writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t// storing data\n\t\t\tentry.data = stream.readUint8Array(entry.description_length);\n\t\t\t// rewinding\n\t\t\tstream.position -= entry.description_length;\n\t\t}\n\t\tentry.parse(stream);\n\t}\n});\n\n// file:src/parsing/sidx.js\nBoxParser.createFullBoxCtor(\"sidx\", function(stream) {\n\tthis.reference_ID = stream.readUint32();\n\tthis.timescale = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.earliest_presentation_time = stream.readUint32();\n\t\tthis.first_offset = stream.readUint32();\n\t} else {\n\t\tthis.earliest_presentation_time = stream.readUint64();\n\t\tthis.first_offset = stream.readUint64();\n\t}\n\tstream.readUint16();\n\tthis.references = [];\n\tvar count = stream.readUint16();\n\tfor (var i = 0; i < count; i++) {\n\t\tvar ref = {};\n\t\tthis.references.push(ref);\n\t\tvar tmp_32 = stream.readUint32();\n\t\tref.reference_type = (tmp_32 >> 31) & 0x1;\n\t\tref.referenced_size = tmp_32 & 0x7FFFFFFF;\n\t\tref.subsegment_duration = stream.readUint32();\n\t\ttmp_32 = stream.readUint32();\n\t\tref.starts_with_SAP = (tmp_32 >> 31) & 0x1;\n\t\tref.SAP_type = (tmp_32 >> 28) & 0x7;\n\t\tref.SAP_delta_time = tmp_32 & 0xFFFFFFF;\n\t}\n});\n\n// file:src/parsing/singleitemtypereference.js\nBoxParser.SingleItemTypeReferenceBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBox.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBox.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint16();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint16();\n\t}\n}\n\n// file:src/parsing/singleitemtypereferencelarge.js\nBoxParser.SingleItemTypeReferenceBoxLarge = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint32();\n\t}\n}\n\n// file:src/parsing/SmDm.js\nBoxParser.createFullBoxCtor(\"SmDm\", function(stream) {\n\tthis.primaryRChromaticity_x = stream.readUint16();\n this.primaryRChromaticity_y = stream.readUint16();\n this.primaryGChromaticity_x = stream.readUint16();\n this.primaryGChromaticity_y = stream.readUint16();\n this.primaryBChromaticity_x = stream.readUint16();\n this.primaryBChromaticity_y = stream.readUint16();\n this.whitePointChromaticity_x = stream.readUint16();\n this.whitePointChromaticity_y = stream.readUint16();\n this.luminanceMax = stream.readUint32();\n this.luminanceMin = stream.readUint32();\n});\n\n// file:src/parsing/smhd.js\nBoxParser.createFullBoxCtor(\"smhd\", function(stream) {\n\tthis.balance = stream.readUint16();\n\tstream.readUint16();\n});\n\n// file:src/parsing/ssix.js\nBoxParser.createFullBoxCtor(\"ssix\", function(stream) {\n\tthis.subsegments = [];\n\tvar subsegment_count = stream.readUint32();\n\tfor (var i = 0; i < subsegment_count; i++) {\n\t\tvar subsegment = {};\n\t\tthis.subsegments.push(subsegment);\n\t\tsubsegment.ranges = [];\n\t\tvar range_count = stream.readUint32();\n\t\tfor (var j = 0; j < range_count; j++) {\n\t\t\tvar range = {};\n\t\t\tsubsegment.ranges.push(range);\n\t\t\trange.level = stream.readUint8();\n\t\t\trange.range_size = stream.readUint24();\n\t\t}\n\t}\n});\n\n// file:src/parsing/stco.js\nBoxParser.createFullBoxCtor(\"stco\", function(stream) {\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor (var i = 0; i < entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stdp.js\nBoxParser.createFullBoxCtor(\"stdp\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/2;\n\tthis.priority = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.priority[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/sthd.js\nBoxParser.createFullBoxCtor(\"sthd\");\n\n// file:src/parsing/stri.js\nBoxParser.createFullBoxCtor(\"stri\", function(stream) {\n\tthis.switch_group = stream.readUint16();\n\tthis.alternate_group = stream.readUint16();\n\tthis.sub_track_id = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 8)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsc.js\nBoxParser.createFullBoxCtor(\"stsc\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.first_chunk = [];\n\tthis.samples_per_chunk = [];\n\tthis.sample_description_index = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i> 4) & 0xF;\n\t\t\t\tthis.sample_sizes[i+1] = tmp & 0xF;\n\t\t\t}\n\t\t} else if (this.field_size === 8) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint8();\n\t\t\t}\n\t\t} else if (this.field_size === 16) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint16();\n\t\t\t}\n\t\t} else {\n\t\t\tLog.error(\"BoxParser\", \"Error in length field in stz2 box\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/subs.js\nBoxParser.createFullBoxCtor(\"subs\", function(stream) {\n\tvar i,j;\n\tvar entry_count;\n\tvar subsample_count;\n\tentry_count = stream.readUint32();\n\tthis.entries = [];\n\tfor (i = 0; i < entry_count; i++) {\n\t\tvar sampleInfo = {};\n\t\tthis.entries[i] = sampleInfo;\n\t\tsampleInfo.sample_delta = stream.readUint32();\n\t\tsampleInfo.subsamples = [];\n\t\tsubsample_count = stream.readUint16();\n\t\tif (subsample_count>0) {\n\t\t\tfor (j = 0; j < subsample_count; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsampleInfo.subsamples.push(subsample);\n\t\t\t\tif (this.version == 1) {\n\t\t\t\t\tsubsample.size = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tsubsample.size = stream.readUint16();\n\t\t\t\t}\n\t\t\t\tsubsample.priority = stream.readUint8();\n\t\t\t\tsubsample.discardable = stream.readUint8();\n\t\t\t\tsubsample.codec_specific_parameters = stream.readUint32();\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tenc.js\nBoxParser.createFullBoxCtor(\"tenc\", function(stream) {\n\tstream.readUint8(); // reserved\n\tif (this.version === 0) {\n\t\tstream.readUint8();\n\t} else {\n\t\tvar tmp = stream.readUint8();\n\t\tthis.default_crypt_byte_block = (tmp >> 4) & 0xF;\n\t\tthis.default_skip_byte_block = tmp & 0xF;\n\t}\n\tthis.default_isProtected = stream.readUint8();\n\tthis.default_Per_Sample_IV_Size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n\tif (this.default_isProtected === 1 && this.default_Per_Sample_IV_Size === 0) {\n\t\tthis.default_constant_IV_size = stream.readUint8();\n\t\tthis.default_constant_IV = stream.readUint8Array(this.default_constant_IV_size);\n\t}\n});// file:src/parsing/tfdt.js\nBoxParser.createFullBoxCtor(\"tfdt\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.baseMediaDecodeTime = stream.readUint64();\n\t} else {\n\t\tthis.baseMediaDecodeTime = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/tfhd.js\nBoxParser.createFullBoxCtor(\"tfhd\", function(stream) {\n\tvar readBytes = 0;\n\tthis.track_id = stream.readUint32();\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET)) {\n\t\tthis.base_data_offset = stream.readUint64();\n\t\treadBytes += 8;\n\t} else {\n\t\tthis.base_data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC)) {\n\t\tthis.default_sample_description_index = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_description_index = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR)) {\n\t\tthis.default_sample_duration = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_duration = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE)) {\n\t\tthis.default_sample_size = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_size = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS)) {\n\t\tthis.default_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_flags = 0;\n\t}\n});\n\n// file:src/parsing/tfra.js\nBoxParser.createFullBoxCtor(\"tfra\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tstream.readUint24();\n\tvar tmp_byte = stream.readUint8();\n\tthis.length_size_of_traf_num = (tmp_byte >> 4) & 0x3;\n\tthis.length_size_of_trun_num = (tmp_byte >> 2) & 0x3;\n\tthis.length_size_of_sample_num = (tmp_byte) & 0x3;\n\tthis.entries = [];\n\tvar number_of_entries = stream.readUint32();\n\tfor (var i = 0; i < number_of_entries; i++) {\n\t\tif (this.version === 1) {\n\t\t\tthis.time = stream.readUint64();\n\t\t\tthis.moof_offset = stream.readUint64();\n\t\t} else {\n\t\t\tthis.time = stream.readUint32();\n\t\t\tthis.moof_offset = stream.readUint32();\n\t\t}\n\t\tthis.traf_number = stream[\"readUint\"+(8*(this.length_size_of_traf_num+1))]();\n\t\tthis.trun_number = stream[\"readUint\"+(8*(this.length_size_of_trun_num+1))]();\n\t\tthis.sample_number = stream[\"readUint\"+(8*(this.length_size_of_sample_num+1))]();\n\t}\n});\n\n// file:src/parsing/tkhd.js\nBoxParser.createFullBoxCtor(\"tkhd\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tstream.readUint32Array(2);\n\tthis.layer = stream.readInt16();\n\tthis.alternate_group = stream.readInt16();\n\tthis.volume = stream.readInt16()>>8;\n\tstream.readUint16();\n\tthis.matrix = stream.readInt32Array(9);\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});\n\n// file:src/parsing/tmax.js\nBoxParser.createBoxCtor(\"tmax\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/tmin.js\nBoxParser.createBoxCtor(\"tmin\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/totl.js\nBoxParser.createBoxCtor(\"totl\",function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpay.js\nBoxParser.createBoxCtor(\"tpay\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpyl.js\nBoxParser.createBoxCtor(\"tpyl\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/TrackGroup.js\nBoxParser.TrackGroupTypeBox.prototype.parse = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.track_group_id = stream.readUint32();\n}\n\n// file:src/parsing/trackgroups/msrc.js\nBoxParser.createTrackGroupCtor(\"msrc\");// file:src/parsing/TrakReference.js\nBoxParser.TrackReferenceTypeBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.TrackReferenceTypeBox.prototype = new BoxParser.Box();\nBoxParser.TrackReferenceTypeBox.prototype.parse = function(stream) {\n\tthis.track_ids = stream.readUint32Array((this.size-this.hdr_size)/4);\n}\n\n// file:src/parsing/tref.js\nBoxParser.trefBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = new BoxParser.TrackReferenceTypeBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.info(\"BoxParser\", \"TrackReference \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\n// file:src/parsing/trep.js\nBoxParser.createFullBoxCtor(\"trep\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/trex.js\nBoxParser.createFullBoxCtor(\"trex\", function(stream) {\n\tthis.track_id = stream.readUint32();\n\tthis.default_sample_description_index = stream.readUint32();\n\tthis.default_sample_duration = stream.readUint32();\n\tthis.default_sample_size = stream.readUint32();\n\tthis.default_sample_flags = stream.readUint32();\n});\n\n// file:src/parsing/trpy.js\nBoxParser.createBoxCtor(\"trpy\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/trun.js\nBoxParser.createFullBoxCtor(\"trun\", function(stream) {\n\tvar readBytes = 0;\n\tthis.sample_count = stream.readUint32();\n\treadBytes+= 4;\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ) {\n\t\tthis.data_offset = stream.readInt32(); //signed\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) ) {\n\t\tthis.first_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.first_sample_flags = 0;\n\t}\n\tthis.sample_duration = [];\n\tthis.sample_size = [];\n\tthis.sample_flags = [];\n\tthis.sample_composition_time_offset = [];\n\tif (this.size - this.hdr_size > readBytes) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\tthis.sample_duration[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\tthis.sample_size[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\tthis.sample_flags[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\tif (this.version === 0) {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readInt32(); //signed\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tsel.js\nBoxParser.createFullBoxCtor(\"tsel\", function(stream) {\n\tthis.switch_group = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 4)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/txtC.js\nBoxParser.createFullBoxCtor(\"txtC\", function(stream) {\n\tthis.config = stream.readCString();\n});\n\n// file:src/parsing/tyco.js\nBoxParser.createBoxCtor(\"tyco\", function(stream) {\n\tvar count = (this.size - this.hdr_size) / 4;\n\tthis.compatible_brands = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t}\n});\n\n// file:src/parsing/udes.js\nBoxParser.createFullBoxCtor(\"udes\", function(stream) {\n\tthis.lang = stream.readCString();\n\tthis.name = stream.readCString();\n\tthis.description = stream.readCString();\n\tthis.tags = stream.readCString();\n});\n\n// file:src/parsing/uncC.js\nBoxParser.createFullBoxCtor(\"uncC\", function(stream) {\n var i;\n this.profile = stream.readUint32();\n this.component_count = stream.readUint16();\n this.component_index = [];\n this.component_bit_depth_minus_one = [];\n this.component_format = [];\n this.component_align_size = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n this.component_bit_depth_minus_one.push(stream.readUint8());\n this.component_format.push(stream.readUint8());\n this.component_align_size.push(stream.readUint8());\n }\n this.sampling_type = stream.readUint8();\n this.interleave_type = stream.readUint8();\n this.block_size = stream.readUint8();\n var flags = stream.readUint8();\n this.component_little_endian = (flags >> 7) & 0x1;\n this.block_pad_lsb = (flags >> 6) & 0x1;\n this.block_little_endian = (flags >> 5) & 0x1;\n this.block_reversed = (flags >> 4) & 0x1;\n this.pad_unknown = (flags >> 3) & 0x1;\n this.pixel_size = stream.readUint8();\n this.row_align_size = stream.readUint32();\n this.tile_align_size = stream.readUint32();\n this.num_tile_cols_minus_one = stream.readUint32();\n this.num_tile_rows_minus_one = stream.readUint32();\n});\n\n// file:src/parsing/url.js\nBoxParser.createFullBoxCtor(\"url \", function(stream) {\n\tif (this.flags !== 0x000001) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/urn.js\nBoxParser.createFullBoxCtor(\"urn \", function(stream) {\n\tthis.name = stream.readCString();\n\tif (this.size - this.hdr_size - this.name.length - 1 > 0) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffLsm.js\nBoxParser.createUUIDBox(\"a5d40b30e81411ddba2f0800200c9a66\", true, false, function(stream) {\n this.LiveServerManifest = stream.readString(this.size - this.hdr_size)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n});// file:src/parsing/uuid/piff/piffPssh.js\nBoxParser.createUUIDBox(\"d08a4f1810f34a82b6c832d8aba183d3\", true, false, function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffSenc.js\nBoxParser.createUUIDBox(\"a2394f525a9b4f14a2446c427c648df4\", true, false /*, function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.AlgorithmID = stream.readUint24();\n\t\tthis.IV_size = stream.readUint8();\n\t\tthis.KID = BoxParser.parseHex16(stream);\n\t}\n\tvar sample_count = stream.readUint32();\n\tthis.samples = [];\n\tfor (var i = 0; i < sample_count; i++) {\n\t\tvar sample = {};\n\t\tsample.InitializationVector = this.readUint8Array(this.IV_size*8);\n\t\tif (this.flags & 0x2) {\n\t\t\tsample.subsamples = [];\n\t\t\tsample.NumberOfEntries = stream.readUint16();\n\t\t\tfor (var j = 0; j < sample.NumberOfEntries; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\n\t\t\t\tsample.subsamples.push(subsample);\n\t\t\t}\n\t\t}\n\t\tthis.samples.push(sample);\n\t}\n}*/);\n// file:src/parsing/uuid/piff/piffTenc.js\nBoxParser.createUUIDBox(\"8974dbce7be74c5184f97148f9882554\", true, false, function(stream) {\n\tthis.default_AlgorithmID = stream.readUint24();\n\tthis.default_IV_size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n});// file:src/parsing/uuid/piff/piffTfrf.js\nBoxParser.createUUIDBox(\"d4807ef2ca3946958e5426cb9e46a79f\", true, false, function(stream) {\n this.fragment_count = stream.readUint8();\n this.entries = [];\n\n for (var i = 0; i < this.fragment_count; i++) {\n var entry = {};\n var absolute_time = 0;\n var absolute_duration = 0;\n\n if (this.version === 1) {\n absolute_time = stream.readUint64();\n absolute_duration = stream.readUint64();\n } else {\n absolute_time = stream.readUint32();\n absolute_duration = stream.readUint32();\n }\n\n entry.absolute_time = absolute_time;\n entry.absolute_duration = absolute_duration;\n\n this.entries.push(entry);\n }\n});// file:src/parsing/uuid/piff/piffTfxd.js\nBoxParser.createUUIDBox(\"6d1d9b0542d544e680e2141daff757b2\", true, false, function(stream) {\n if (this.version === 1) {\n this.absolute_time = stream.readUint64();\n this.duration = stream.readUint64();\n } else {\n this.absolute_time = stream.readUint32();\n this.duration = stream.readUint32();\n }\n});// file:src/parsing/vmhd.js\nBoxParser.createFullBoxCtor(\"vmhd\", function(stream) {\n\tthis.graphicsmode = stream.readUint16();\n\tthis.opcolor = stream.readUint16Array(3);\n});\n\n// file:src/parsing/vpcC.js\nBoxParser.createFullBoxCtor(\"vpcC\", function (stream) {\n\tvar tmp;\n\tif (this.version === 1) {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = tmp >> 4;\n\t\tthis.chromaSubsampling = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.colourPrimaries = stream.readUint8();\n\t\tthis.transferCharacteristics = stream.readUint8();\n\t\tthis.matrixCoefficients = stream.readUint8();\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t} else {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = (tmp >> 4) & 0xF;\n\t\tthis.colorSpace = tmp & 0xF;\n\t\ttmp = stream.readUint8();\n\t\tthis.chromaSubsampling = (tmp >> 4) & 0xF;\n\t\tthis.transferFunction = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t}\n});// file:src/parsing/vttC.js\nBoxParser.createBoxCtor(\"vttC\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/vvcC.js\nBoxParser.createFullBoxCtor(\"vvcC\", function (stream) {\n var i, j;\n\n // helper object to simplify extracting individual bits\n var bitReader = {\n held_bits: undefined,\n num_held_bits: 0,\n\n stream_read_1_bytes: function (strm) {\n this.held_bits = strm.readUint8();\n this.num_held_bits = 1 * 8;\n },\n stream_read_2_bytes: function (strm) {\n this.held_bits = strm.readUint16();\n this.num_held_bits = 2 * 8;\n },\n\n extract_bits: function (num_bits) {\n var ret = (this.held_bits >> (this.num_held_bits - num_bits)) & ((1 << num_bits) - 1);\n this.num_held_bits -= num_bits;\n return ret;\n }\n };\n\n // VvcDecoderConfigurationRecord\n bitReader.stream_read_1_bytes(stream);\n bitReader.extract_bits(5); // reserved\n this.lengthSizeMinusOne = bitReader.extract_bits(2);\n this.ptl_present_flag = bitReader.extract_bits(1);\n\n if (this.ptl_present_flag) {\n bitReader.stream_read_2_bytes(stream);\n this.ols_idx = bitReader.extract_bits(9);\n this.num_sublayers = bitReader.extract_bits(3);\n this.constant_frame_rate = bitReader.extract_bits(2);\n this.chroma_format_idc = bitReader.extract_bits(2);\n\n bitReader.stream_read_1_bytes(stream);\n this.bit_depth_minus8 = bitReader.extract_bits(3);\n bitReader.extract_bits(5); // reserved\n\n // VvcPTLRecord\n {\n bitReader.stream_read_2_bytes(stream);\n bitReader.extract_bits(2); // reserved\n this.num_bytes_constraint_info = bitReader.extract_bits(6);\n this.general_profile_idc = bitReader.extract_bits(7);\n this.general_tier_flag = bitReader.extract_bits(1);\n\n this.general_level_idc = stream.readUint8();\n\n bitReader.stream_read_1_bytes(stream);\n this.ptl_frame_only_constraint_flag = bitReader.extract_bits(1);\n this.ptl_multilayer_enabled_flag = bitReader.extract_bits(1);\n\n this.general_constraint_info = new Uint8Array(this.num_bytes_constraint_info);\n if (this.num_bytes_constraint_info) {\n for (i = 0; i < this.num_bytes_constraint_info - 1; i++) {\n var cnstr1 = bitReader.extract_bits(6);\n bitReader.stream_read_1_bytes(stream);\n var cnstr2 = bitReader.extract_bits(2);\n\n this.general_constraint_info[i] = ((cnstr1 << 2) | cnstr2);\n }\n this.general_constraint_info[this.num_bytes_constraint_info - 1] = bitReader.extract_bits(6);\n } else {\n //forbidden in spec!\n bitReader.extract_bits(6);\n }\n\n if (this.num_sublayers > 1) {\n bitReader.stream_read_1_bytes(stream);\n this.ptl_sublayer_present_mask = 0;\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n var val = bitReader.extract_bits(1);\n this.ptl_sublayer_present_mask |= val << j;\n }\n for (j = this.num_sublayers; j <= 8 && this.num_sublayers > 1; ++j) {\n bitReader.extract_bits(1); // ptl_reserved_zero_bit\n }\n\n this.sublayer_level_idc = [];\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n if (this.ptl_sublayer_present_mask & (1 << j)) {\n this.sublayer_level_idc[j] = stream.readUint8();\n }\n }\n }\n\n this.ptl_num_sub_profiles = stream.readUint8();\n this.general_sub_profile_idc = [];\n if (this.ptl_num_sub_profiles) {\n for (i = 0; i < this.ptl_num_sub_profiles; i++) {\n this.general_sub_profile_idc.push(stream.readUint32());\n }\n }\n } // end VvcPTLRecord\n\n this.max_picture_width = stream.readUint16();\n this.max_picture_height = stream.readUint16();\n this.avg_frame_rate = stream.readUint16();\n }\n\n var VVC_NALU_OPI = 12;\n var VVC_NALU_DEC_PARAM = 13;\n\n this.nalu_arrays = [];\n var num_of_arrays = stream.readUint8();\n for (i = 0; i < num_of_arrays; i++) {\n var nalu_array = [];\n this.nalu_arrays.push(nalu_array);\n\n bitReader.stream_read_1_bytes(stream);\n nalu_array.completeness = bitReader.extract_bits(1);\n bitReader.extract_bits(2); // reserved\n nalu_array.nalu_type = bitReader.extract_bits(5);\n\n var numNalus = 1;\n if (nalu_array.nalu_type != VVC_NALU_DEC_PARAM && nalu_array.nalu_type != VVC_NALU_OPI) {\n numNalus = stream.readUint16();\n }\n\n for (j = 0; j < numNalus; j++) {\n var len = stream.readUint16();\n nalu_array.push({\n data: stream.readUint8Array(len),\n length: len\n });\n }\n }\n});\n// file:src/parsing/vvnC.js\nBoxParser.createFullBoxCtor(\"vvnC\", function (stream) {\n // VvcNALUConfigBox\n var tmp = strm.readUint8();\n this.lengthSizeMinusOne = (tmp & 0x3);\n});\n// file:src/box-codecs.js\nBoxParser.SampleEntry.prototype.isVideo = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isAudio = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isSubtitle = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isMetadata = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isHint = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.getCodec = function() {\n\treturn this.type.replace('.','');\n}\n\nBoxParser.SampleEntry.prototype.getWidth = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getHeight = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getChannelCount = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleRate = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleSize = function() {\n\treturn \"\";\n}\n\nBoxParser.VisualSampleEntry.prototype.isVideo = function() {\n\treturn true;\n}\n\nBoxParser.VisualSampleEntry.prototype.getWidth = function() {\n\treturn this.width;\n}\n\nBoxParser.VisualSampleEntry.prototype.getHeight = function() {\n\treturn this.height;\n}\n\nBoxParser.AudioSampleEntry.prototype.isAudio = function() {\n\treturn true;\n}\n\nBoxParser.AudioSampleEntry.prototype.getChannelCount = function() {\n\treturn this.channel_count;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleRate = function() {\n\treturn this.samplerate;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleSize = function() {\n\treturn this.samplesize;\n}\n\nBoxParser.SubtitleSampleEntry.prototype.isSubtitle = function() {\n\treturn true;\n}\n\nBoxParser.MetadataSampleEntry.prototype.isMetadata = function() {\n\treturn true;\n}\n\n\nBoxParser.decimalToHex = function(d, padding) {\n\tvar hex = Number(d).toString(16);\n\tpadding = typeof (padding) === \"undefined\" || padding === null ? padding = 2 : padding;\n\twhile (hex.length < padding) {\n\t\thex = \"0\" + hex;\n\t}\n\treturn hex;\n}\n\nBoxParser.avc1SampleEntry.prototype.getCodec =\nBoxParser.avc2SampleEntry.prototype.getCodec =\nBoxParser.avc3SampleEntry.prototype.getCodec =\nBoxParser.avc4SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.avcC) {\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(this.avcC.AVCProfileIndication)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.profile_compatibility)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.AVCLevelIndication);\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.hev1SampleEntry.prototype.getCodec =\nBoxParser.hvc1SampleEntry.prototype.getCodec = function() {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.hvcC) {\n\t\tbaseCodec += '.';\n\t\tswitch (this.hvcC.general_profile_space) {\n\t\t\tcase 0:\n\t\t\t\tbaseCodec += '';\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tbaseCodec += 'A';\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbaseCodec += 'B';\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbaseCodec += 'C';\n\t\t\t\tbreak;\n\t\t}\n\t\tbaseCodec += this.hvcC.general_profile_idc;\n\t\tbaseCodec += '.';\n\t\tvar val = this.hvcC.general_profile_compatibility;\n\t\tvar reversed = 0;\n\t\tfor (i=0; i<32; i++) {\n\t\t\treversed |= val & 1;\n\t\t\tif (i==31) break;\n\t\t\treversed <<= 1;\n\t\t\tval >>=1;\n\t\t}\n\t\tbaseCodec += BoxParser.decimalToHex(reversed, 0);\n\t\tbaseCodec += '.';\n\t\tif (this.hvcC.general_tier_flag === 0) {\n\t\t\tbaseCodec += 'L';\n\t\t} else {\n\t\t\tbaseCodec += 'H';\n\t\t}\n\t\tbaseCodec += this.hvcC.general_level_idc;\n\t\tvar hasByte = false;\n\t\tvar constraint_string = \"\";\n\t\tfor (i = 5; i >= 0; i--) {\n\t\t\tif (this.hvcC.general_constraint_indicator[i] || hasByte) {\n\t\t\t\tconstraint_string = \".\"+BoxParser.decimalToHex(this.hvcC.general_constraint_indicator[i], 0)+constraint_string;\n\t\t\t\thasByte = true;\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.vvc1SampleEntry.prototype.getCodec =\nBoxParser.vvi1SampleEntry.prototype.getCodec = function () {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.vvcC) {\n\t\tbaseCodec += '.' + this.vvcC.general_profile_idc;\n\t\tif (this.vvcC.general_tier_flag) {\n\t\t\tbaseCodec += '.H';\n\t\t} else {\n\t\t\tbaseCodec += '.L';\n\t\t}\n\t\tbaseCodec += this.vvcC.general_level_idc;\n\n\t\tvar constraint_string = \"\";\n\t\tif (this.vvcC.general_constraint_info) {\n\t\t\tvar bytes = [];\n\t\t\tvar byte = 0;\n\t\t\tbyte |= this.vvcC.ptl_frame_only_constraint << 7;\n\t\t\tbyte |= this.vvcC.ptl_multilayer_enabled << 6;\n\t\t\tvar last_nonzero;\n\t\t\tfor (i = 0; i < this.vvcC.general_constraint_info.length; ++i) {\n\t\t\t\tbyte |= (this.vvcC.general_constraint_info[i] >> 2) & 0x3f;\n\t\t\t\tbytes.push(byte);\n\t\t\t\tif (byte) {\n\t\t\t\t\tlast_nonzero = i;\n\t\t\t\t}\n\n\t\t\t\tbyte = (this.vvcC.general_constraint_info[i] >> 2) & 0x03;\n\t\t\t}\n\n\t\t\tif (last_nonzero === undefined) {\n\t\t\t\tconstraint_string = \".CA\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconstraint_string = \".C\"\n\t\t\t\tvar base32_chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\t\t\t\tvar held_bits = 0;\n\t\t\t\tvar num_held_bits = 0;\n\t\t\t\tfor (i = 0; i <= last_nonzero; ++i) {\n\t\t\t\t\theld_bits = (held_bits << 8) | bytes[i];\n\t\t\t\t\tnum_held_bits += 8;\n\n\t\t\t\t\twhile (num_held_bits >= 5) {\n\t\t\t\t\t\tvar val = (held_bits >> (num_held_bits - 5)) & 0x1f;\n\t\t\t\t\t\tconstraint_string += base32_chars[val];\n\n\t\t\t\t\t\tnum_held_bits -= 5;\n\t\t\t\t\t\theld_bits &= (1 << num_held_bits) - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (num_held_bits) {\n\t\t\t\t\theld_bits <<= (5 - num_held_bits); // right-pad with zeros to 5 bits (is this correct?)\n\t\t\t\t\tconstraint_string += base32_chars[held_bits & 0x1f];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.mp4aSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.esds && this.esds.esd) {\n\t\tvar oti = this.esds.esd.getOTI();\n\t\tvar dsi = this.esds.esd.getAudioConfig();\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(oti)+(dsi ? \".\"+dsi: \"\");\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.stxtSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif(this.mime_format) {\n\t\treturn baseCodec + \".\" + this.mime_format;\n\t} else {\n\t\treturn baseCodec\n\t}\n}\n\nBoxParser.vp08SampleEntry.prototype.getCodec =\nBoxParser.vp09SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.vpcC.level;\n\tif (level == 0) {\n\t\tlevel = \"00\";\n\t}\n\tvar bitDepth = this.vpcC.bitDepth;\n\tif (bitDepth == 8) {\n\t\tbitDepth = \"08\";\n\t}\n\treturn baseCodec + \".0\" + this.vpcC.profile + \".\" + level + \".\" + bitDepth;\n}\n\nBoxParser.av01SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.av1C.seq_level_idx_0;\n\tif (level < 10) {\n\t\tlevel = \"0\" + level;\n\t}\n\tvar bitdepth;\n\tif (this.av1C.seq_profile === 2 && this.av1C.high_bitdepth === 1) {\n\t\tbitdepth = (this.av1C.twelve_bit === 1) ? \"12\" : \"10\";\n\t} else if ( this.av1C.seq_profile <= 2 ) {\n\t\tbitdepth = (this.av1C.high_bitdepth === 1) ? \"10\" : \"08\";\n\t}\n\t// TODO need to parse the SH to find color config\n\treturn baseCodec+\".\"+this.av1C.seq_profile+\".\"+level+(this.av1C.seq_tier_0?\"H\":\"M\")+\".\"+bitdepth;//+\".\"+this.av1C.monochrome+\".\"+this.av1C.chroma_subsampling_x+\"\"+this.av1C.chroma_subsampling_y+\"\"+this.av1C.chroma_sample_position;\n}\n// file:src/box-write.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.writeHeader = function(stream, msg) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\tLog.debug(\"BoxWriter\", \"Writing box \"+this.type+\" of size: \"+this.size+\" at position \"+stream.getPosition()+(msg || \"\"));\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint32(1);\n\t} else {\n\t\tthis.sizePosition = stream.getPosition();\n\t\tstream.writeUint32(this.size);\n\t}\n\tstream.writeString(this.type, null, 4);\n\tif (this.type === \"uuid\") {\n\t\tstream.writeUint8Array(this.uuid);\n\t}\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint64(this.size);\n\t} \n}\n\nBoxParser.FullBox.prototype.writeHeader = function(stream) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream, \" v=\"+this.version+\" f=\"+this.flags);\n\tstream.writeUint8(this.version);\n\tstream.writeUint24(this.flags);\n}\n\nBoxParser.Box.prototype.write = function(stream) {\n\tif (this.type === \"mdat\") {\n\t\t/* TODO: fix this */\n\t\tif (this.data) {\n\t\t\tthis.size = this.data.length;\n\t\t\tthis.writeHeader(stream);\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t} else {\n\t\tthis.size = (this.data ? this.data.length : 0);\n\t\tthis.writeHeader(stream);\n\t\tif (this.data) {\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t}\n}\n\nBoxParser.ContainerBox.prototype.write = function(stream) {\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tfor (var i=0; i= 2) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tstream.writeUint32(this.entries.length);\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tstream.writeUint32(entry.description_length);\n\t\t\t}\n\t\t}\n\t\tentry.write(stream);\n\t}\n}\n\n\n// file:src/writing/sidx.js\nBoxParser.sidxBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+2+2+12*this.references.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.reference_ID);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.earliest_presentation_time);\n\tstream.writeUint32(this.first_offset);\n\tstream.writeUint16(0);\n\tstream.writeUint16(this.references.length);\n\tfor (var i = 0; i < this.references.length; i++) {\n\t\tvar ref = this.references[i];\n\t\tstream.writeUint32(ref.reference_type << 31 | ref.referenced_size);\n\t\tstream.writeUint32(ref.subsegment_duration);\n\t\tstream.writeUint32(ref.starts_with_SAP << 31 | ref.SAP_type << 28 | ref.SAP_delta_time);\n\t}\n}\n\n// file:src/writing/smhd.js\nBoxParser.smhdBox.prototype.write = function(stream) {\n var i;\n this.version = 0;\n this.flags = 1;\n this.size = 4;\n this.writeHeader(stream);\n stream.writeUint16(this.balance);\n stream.writeUint16(0);\n}\n// file:src/writing/stco.js\nBoxParser.stcoBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tstream.writeUint32Array(this.chunk_offsets);\n}\n\n// file:src/writing/stsc.js\nBoxParser.stscBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+12*this.first_chunk.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.first_chunk.length);\n\tfor(i=0; i 0) {\n\t\ti = 0;\n\t\twhile (i+1 < this.sample_sizes.length) {\n\t\t\tif (this.sample_sizes[i+1] !== this.sample_sizes[0]) {\n\t\t\t\tconstant = false;\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconstant = false;\n\t}\n\tthis.size = 8;\n\tif (!constant) {\n\t\tthis.size += 4*this.sample_sizes.length;\n\t}\n\tthis.writeHeader(stream);\n\tif (!constant) {\n\t\tstream.writeUint32(0);\n\t} else {\n\t\tstream.writeUint32(this.sample_sizes[0]);\n\t}\n\tstream.writeUint32(this.sample_sizes.length);\n\tif (!constant) {\n\t\tstream.writeUint32Array(this.sample_sizes);\n\t}\t\n}\n\n// file:src/writing/stts.js\nBoxParser.sttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i UINT32_MAX ? 1 : 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tif (this.version === 1) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.version === 1) {\n\t\tstream.writeUint64(this.baseMediaDecodeTime);\n\t} else {\n\t\tstream.writeUint32(this.baseMediaDecodeTime);\n\t}\n}\n\n// file:src/writing/tfhd.js\nBoxParser.tfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tthis.size += 8;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tstream.writeUint64(this.base_data_offset);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tstream.writeUint32(this.default_sample_duration);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tstream.writeUint32(this.default_sample_size);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tstream.writeUint32(this.default_sample_flags);\n\t}\n}\n\n// file:src/writing/tkhd.js\nBoxParser.tkhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\t//this.flags = 0;\n\tthis.size = 4*18+2*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeInt16(this.layer);\n\tstream.writeInt16(this.alternate_group);\n\tstream.writeInt16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeInt32Array(this.matrix);\n\tstream.writeUint32(this.width);\n\tstream.writeUint32(this.height);\n}\n\n// file:src/writing/trex.js\nBoxParser.trexBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(this.default_sample_description_index);\n\tstream.writeUint32(this.default_sample_duration);\n\tstream.writeUint32(this.default_sample_size);\n\tstream.writeUint32(this.default_sample_flags);\n}\n\n// file:src/writing/trun.js\nBoxParser.trunBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\tthis.size += 4*this.sample_duration.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\tthis.size += 4*this.sample_size.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\tthis.size += 4*this.sample_flags.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\tthis.size += 4*this.sample_composition_time_offset.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_count);\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.data_offset_position = stream.getPosition();\n\t\tstream.writeInt32(this.data_offset); //signed\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tstream.writeUint32(this.first_sample_flags);\n\t}\n\tfor (var i = 0; i < this.sample_count; i++) {\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\tstream.writeUint32(this.sample_duration[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\tstream.writeUint32(this.sample_size[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\tstream.writeUint32(this.sample_flags[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tstream.writeUint32(this.sample_composition_time_offset[i]);\n\t\t\t} else {\n\t\t\t\tstream.writeInt32(this.sample_composition_time_offset[i]); //signed\n\t\t\t}\n\t\t}\n\t}\t\t\n}\n\n// file:src/writing/url.js\nBoxParser[\"url Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tif (this.location) {\n\t\tthis.flags = 0;\n\t\tthis.size = this.location.length+1;\n\t} else {\n\t\tthis.flags = 0x000001;\n\t\tthis.size = 0;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/urn.js\nBoxParser[\"urn Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.name.length+1+(this.location ? this.location.length+1 : 0);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.name);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/vmhd.js\nBoxParser.vmhdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 1;\n\tthis.size = 8;\n\tthis.writeHeader(stream);\n\tstream.writeUint16(this.graphicsmode);\n\tstream.writeUint16Array(this.opcolor);\n}\n\n// file:src/box-unpack.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.cttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tsamples[k].pts = samples[k].dts + this.sample_offsets[i];\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.sttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tif (k === 0) {\n\t\t\t\tsamples[k].dts = 0;\n\t\t\t} else {\n\t\t\t\tsamples[k].dts = samples[k-1].dts + this.sample_deltas[i];\n\t\t\t}\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.stcoBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.chunk_offsets.length; i++) {\n\t\tsamples[i].offset = this.chunk_offsets[i];\n\t}\n}\n\nBoxParser.stscBox.prototype.unpack = function(samples) {\n\tvar i, j, k, l, m;\n\tl = 0;\n\tm = 0;\n\tfor (i = 0; i < this.first_chunk.length; i++) {\n\t\tfor (j = 0; j < (i+1 < this.first_chunk.length ? this.first_chunk[i+1] : Infinity); j++) {\n\t\t\tm++;\n\t\t\tfor (k = 0; k < this.samples_per_chunk[i]; k++) {\n\t\t\t\tif (samples[l]) {\n\t\t\t\t\tsamples[l].description_index = this.sample_description_index[i];\n\t\t\t\t\tsamples[l].chunk_index = m;\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tl++;\n\t\t\t}\t\t\t\n\t\t}\n\t}\n}\n\nBoxParser.stszBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.sample_sizes.length; i++) {\n\t\tsamples[i].size = this.sample_sizes[i];\n\t}\n}\n// file:src/box-diff.js\n\nBoxParser.DIFF_BOXES_PROP_NAMES = [ \"boxes\", \"entries\", \"references\", \"subsamples\",\n\t\t\t\t\t \t \"items\", \"item_infos\", \"extents\", \"associations\",\n\t\t\t\t\t \t \"subsegments\", \"ranges\", \"seekLists\", \"seekPoints\",\n\t\t\t\t\t \t \"esd\", \"levels\"];\n\nBoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES = [ \"compatible_brands\", \"matrix\", \"opcolor\", \"sample_counts\", \"sample_counts\", \"sample_deltas\",\n\"first_chunk\", \"samples_per_chunk\", \"sample_sizes\", \"chunk_offsets\", \"sample_offsets\", \"sample_description_index\", \"sample_duration\" ];\n\nBoxParser.boxEqualFields = function(box_a, box_b) {\n\tif (box_a && !box_b) return false;\n\tvar prop;\n\tfor (prop in box_a) {\n\t\tif (BoxParser.DIFF_BOXES_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\tcontinue;\n\t\t// } else if (excluded_fields && excluded_fields.indexOf(prop) > -1) {\n\t\t// \tcontinue;\n\t\t} else if (box_a[prop] instanceof BoxParser.Box || box_b[prop] instanceof BoxParser.Box) {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"undefined\" || typeof box_b[prop] === \"undefined\") {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"function\" || typeof box_b[prop] === \"function\") {\n\t\t\tcontinue;\n\t\t} else if (\n\t\t\t(box_a.subBoxNames && box_a.subBoxNames.indexOf(prop.slice(0,4)) > -1) ||\n\t\t\t(box_b.subBoxNames && box_b.subBoxNames.indexOf(prop.slice(0,4)) > -1)) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tif (prop === \"data\" || prop === \"start\" || prop === \"size\" || prop === \"creation_time\" || prop === \"modification_time\") {\n\t\t\t\tcontinue;\n\t\t\t} else if (BoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tif (box_a[prop] !== box_b[prop]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\nBoxParser.boxEqual = function(box_a, box_b) {\n\tif (!BoxParser.boxEqualFields(box_a, box_b)) {\n\t\treturn false;\n\t}\n\tfor (var j = 0; j < BoxParser.DIFF_BOXES_PROP_NAMES.length; j++) {\n\t\tvar name = BoxParser.DIFF_BOXES_PROP_NAMES[j];\n\t\tif (box_a[name] && box_b[name]) {\n\t\t\tif (!BoxParser.boxEqual(box_a[name], box_b[name])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}// file:src/text-mp4.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar VTTin4Parser = function() {\t\n}\n\nVTTin4Parser.prototype.parseSample = function(data) {\n\tvar cues, cue;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tcues = [];\n\twhile (!stream.isEos()) {\n\t\tcue = BoxParser.parseOneBox(stream, false);\n\t\tif (cue.code === BoxParser.OK && cue.box.type === \"vttc\") {\n\t\t\tcues.push(cue.box);\n\t\t}\t\t\n\t}\n\treturn cues;\n}\n\nVTTin4Parser.prototype.getText = function (startTime, endTime, data) {\n\tfunction pad(n, width, z) {\n\t z = z || '0';\n\t n = n + '';\n\t return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n\t}\n\tfunction secToTimestamp(insec) {\n\t\tvar h = Math.floor(insec/3600);\n\t\tvar m = Math.floor((insec - h*3600)/60);\n\t\tvar s = Math.floor(insec - h*3600 - m*60);\n\t\tvar ms = Math.floor((insec - h*3600 - m*60 - s)*1000);\n\t\treturn \"\"+pad(h, 2)+\":\"+pad(m,2)+\":\"+pad(s, 2)+\".\"+pad(ms, 3);\n\t}\n\tvar cues = this.parseSample(data);\n\tvar string = \"\";\n\tfor (var i = 0; i < cues.length; i++) {\n\t\tvar cueIn4 = cues[i];\n\t\tstring += secToTimestamp(startTime)+\" --> \"+secToTimestamp(endTime)+\"\\r\\n\";\n\t\tstring += cueIn4.payl.text;\n\t}\n\treturn string;\n}\n\nvar XMLSubtitlein4Parser = function() {\t\n}\n\nXMLSubtitlein4Parser.prototype.parseSample = function(sample) {\n\tvar res = {};\t\n\tvar i;\n\tres.resources = [];\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\tif (!sample.subsamples || sample.subsamples.length === 0) {\n\t\tres.documentString = stream.readString(sample.data.length);\n\t} else {\n\t\tres.documentString = stream.readString(sample.subsamples[0].size);\n\t\tif (sample.subsamples.length > 1) {\n\t\t\tfor (i = 1; i < sample.subsamples.length; i++) {\n\t\t\t\tres.resources[i] = stream.readUint8Array(sample.subsamples[i].size);\n\t\t\t}\n\t\t}\n\t}\n\tif (typeof (DOMParser) !== \"undefined\") {\n\t\tres.document = (new DOMParser()).parseFromString(res.documentString, \"application/xml\");\n\t}\n\treturn res;\n}\n\nvar Textin4Parser = function() {\t\n}\n\nTextin4Parser.prototype.parseSample = function(sample) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\ttextString = stream.readString(sample.data.length);\n\treturn textString;\n}\n\nTextin4Parser.prototype.parseConfig = function(data) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tstream.readUint32(); // version & flags\n\ttextString = stream.readCString();\n\treturn textString;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.XMLSubtitlein4Parser = XMLSubtitlein4Parser;\n\texports.Textin4Parser = Textin4Parser;\n}\n// file:src/isofile.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar ISOFile = function (stream) {\n\t/* MutiBufferStream object used to parse boxes */\n\tthis.stream = stream || new MultiBufferStream();\n\t/* Array of all boxes (in order) found in the file */\n\tthis.boxes = [];\n\t/* Array of all mdats */\n\tthis.mdats = [];\n\t/* Array of all moofs */\n\tthis.moofs = [];\n\t/* Boolean indicating if the file is compatible with progressive parsing (moov first) */\n\tthis.isProgressive = false;\n\t/* Boolean used to fire moov start event only once */\n\tthis.moovStartFound = false;\n\t/* Callback called when the moov parsing starts */\n\tthis.onMoovStart = null;\n\t/* Boolean keeping track of the call to onMoovStart, to avoid double calls */\n\tthis.moovStartSent = false;\n\t/* Callback called when the moov is entirely parsed */\n\tthis.onReady = null;\n\t/* Boolean keeping track of the call to onReady, to avoid double calls */\n\tthis.readySent = false;\n\t/* Callback to call when segments are ready */\n\tthis.onSegment = null;\n\t/* Callback to call when samples are ready */\n\tthis.onSamples = null;\n\t/* Callback to call when there is an error in the parsing or processing of samples */\n\tthis.onError = null;\n\t/* Boolean indicating if the moov box run-length encoded tables of sample information have been processed */\n\tthis.sampleListBuilt = false;\n\t/* Array of Track objects for which fragmentation of samples is requested */\n\tthis.fragmentedTracks = [];\n\t/* Array of Track objects for which extraction of samples is requested */\n\tthis.extractedTracks = [];\n\t/* Boolean indicating that fragmention is ready */\n\tthis.isFragmentationInitialized = false;\n\t/* Boolean indicating that fragmented has started */\n\tthis.sampleProcessingStarted = false;\n\t/* Number of the next 'moof' to generate when fragmenting */\n\tthis.nextMoofNumber = 0;\n\t/* Boolean indicating if the initial list of items has been produced */\n\tthis.itemListBuilt = false;\n\t/* Callback called when the sidx box is entirely parsed */\n\tthis.onSidx = null;\n\t/* Boolean keeping track of the call to onSidx, to avoid double calls */\n\tthis.sidxSent = false;\n}\n\nISOFile.prototype.setSegmentOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar fragTrack = {};\n\t\tthis.fragmentedTracks.push(fragTrack);\n\t\tfragTrack.id = id;\n\t\tfragTrack.user = user;\n\t\tfragTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\tfragTrack.segmentStream = null;\n\t\tfragTrack.nb_samples = 1000;\n\t\tfragTrack.rapAlignement = true;\n\t\tif (options) {\n\t\t\tif (options.nbSamples) fragTrack.nb_samples = options.nbSamples;\n\t\t\tif (options.rapAlignement) fragTrack.rapAlignement = options.rapAlignement;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetSegmentOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar fragTrack = this.fragmentedTracks[i];\n\t\tif (fragTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.fragmentedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.setExtractionOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar extractTrack = {};\n\t\tthis.extractedTracks.push(extractTrack);\n\t\textractTrack.id = id;\n\t\textractTrack.user = user;\n\t\textractTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\textractTrack.nb_samples = 1000;\n\t\textractTrack.samples = [];\n\t\tif (options) {\n\t\t\tif (options.nbSamples) extractTrack.nb_samples = options.nbSamples;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetExtractionOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.extractedTracks.length; i++) {\n\t\tvar extractTrack = this.extractedTracks[i];\n\t\tif (extractTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.extractedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.parse = function() {\n\tvar found;\n\tvar ret;\n\tvar box;\n\tvar parseBoxHeadersOnly = false;\n\n\tif (this.restoreParsePosition)\t{\n\t\tif (!this.restoreParsePosition()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\twhile (true) {\n\n\t\tif (this.hasIncompleteMdat && this.hasIncompleteMdat()) {\n\t\t\tif (this.processIncompleteMdat()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.saveParsePosition)\t{\n\t\t\t\tthis.saveParsePosition();\n\t\t\t}\n\t\t\tret = BoxParser.parseOneBox(this.stream, parseBoxHeadersOnly);\n\t\t\tif (ret.code === BoxParser.ERR_NOT_ENOUGH_DATA) {\n\t\t\t\tif (this.processIncompleteBox) {\n\t\t\t\t\tif (this.processIncompleteBox(ret)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar box_type;\n\t\t\t\t/* the box is entirely parsed */\n\t\t\t\tbox = ret.box;\n\t\t\t\tbox_type = (box.type !== \"uuid\" ? box.type : box.uuid);\n\t\t\t\t/* store the box in the 'boxes' array to preserve box order (for file rewrite if needed) */\n\t\t\t\tthis.boxes.push(box);\n\t\t\t\t/* but also store box in a property for more direct access */\n\t\t\t\tswitch (box_type) {\n\t\t\t\t\tcase \"mdat\":\n\t\t\t\t\t\tthis.mdats.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moof\":\n\t\t\t\t\t\tthis.moofs.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moov\":\n\t\t\t\t\t\tthis.moovStartFound = true;\n\t\t\t\t\t\tif (this.mdats.length === 0) {\n\t\t\t\t\t\t\tthis.isProgressive = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/* no break */\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (this[box_type] !== undefined) {\n\t\t\t\t\t\t\tLog.warn(\"ISOFile\", \"Duplicate Box of type: \"+box_type+\", overriding previous occurrence\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (this.updateUsedBytes) {\n\t\t\t\t\tthis.updateUsedBytes(box, ret);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.checkBuffer = function (ab) {\n\tif (ab === null || ab === undefined) {\n\t\tthrow(\"Buffer must be defined and non empty\");\n\t}\n\tif (ab.fileStart === undefined) {\n\t\tthrow(\"Buffer must have a fileStart property\");\n\t}\n\tif (ab.byteLength === 0) {\n\t\tLog.warn(\"ISOFile\", \"Ignoring empty buffer (fileStart: \"+ab.fileStart+\")\");\n\t\tthis.stream.logBufferLevel();\n\t\treturn false;\n\t}\n\tLog.info(\"ISOFile\", \"Processing buffer (fileStart: \"+ab.fileStart+\")\");\n\n\t/* mark the bytes in the buffer as not being used yet */\n\tab.usedBytes = 0;\n\tthis.stream.insertBuffer(ab);\n\tthis.stream.logBufferLevel();\n\n\tif (!this.stream.initialized()) {\n\t\tLog.warn(\"ISOFile\", \"Not ready to start parsing\");\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/* Processes a new ArrayBuffer (with a fileStart property)\n Returns the next expected file position, or undefined if not ready to parse */\nISOFile.prototype.appendBuffer = function(ab, last) {\n\tvar nextFileStart;\n\tif (!this.checkBuffer(ab)) {\n\t\treturn;\n\t}\n\n\t/* Parse whatever is in the existing buffers */\n\tthis.parse();\n\n\t/* Check if the moovStart callback needs to be called */\n\tif (this.moovStartFound && !this.moovStartSent) {\n\t\tthis.moovStartSent = true;\n\t\tif (this.onMoovStart) this.onMoovStart();\n\t}\n\n\tif (this.moov) {\n\t\t/* A moov box has been entirely parsed */\n\n\t\t/* if this is the first call after the moov is found we initialize the list of samples (may be empty in fragmented files) */\n\t\tif (!this.sampleListBuilt) {\n\t\t\tthis.buildSampleLists();\n\t\t\tthis.sampleListBuilt = true;\n\t\t}\n\n\t\t/* We update the sample information if there are any new moof boxes */\n\t\tthis.updateSampleLists();\n\n\t\t/* If the application needs to be informed that the 'moov' has been found,\n\t\t we create the information object and callback the application */\n\t\tif (this.onReady && !this.readySent) {\n\t\t\tthis.readySent = true;\n\t\t\tthis.onReady(this.getInfo());\n\t\t}\n\n\t\t/* See if any sample extraction or segment creation needs to be done with the available samples */\n\t\tthis.processSamples(last);\n\n\t\t/* Inform about the best range to fetch next */\n\t\tif (this.nextSeekPosition) {\n\t\t\tnextFileStart = this.nextSeekPosition;\n\t\t\tthis.nextSeekPosition = undefined;\n\t\t} else {\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t}\n\t\tif (this.stream.getEndFilePositionAfter) {\n\t\t\tnextFileStart = this.stream.getEndFilePositionAfter(nextFileStart);\n\t\t}\n\t} else {\n\t\tif (this.nextParsePosition) {\n\t\t\t/* moov has not been parsed but the first buffer was received,\n\t\t\t the next fetch should probably be the next box start */\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t} else {\n\t\t\t/* No valid buffer has been parsed yet, we cannot know what to parse next */\n\t\t\tnextFileStart = 0;\n\t\t}\n\t}\n\tif (this.sidx) {\n\t\tif (this.onSidx && !this.sidxSent) {\n\t\t\tthis.onSidx(this.sidx);\n\t\t\tthis.sidxSent = true;\n\t\t}\n\t}\n\tif (this.meta) {\n\t\tif (this.flattenItemInfo && !this.itemListBuilt) {\n\t\t\tthis.flattenItemInfo();\n\t\t\tthis.itemListBuilt = true;\n\t\t}\n\t\tif (this.processItems) {\n\t\t\tthis.processItems(this.onItem);\n\t\t}\n\t}\n\n\tif (this.stream.cleanBuffers) {\n\t\tLog.info(\"ISOFile\", \"Done processing buffer (fileStart: \"+ab.fileStart+\") - next buffer to fetch should have a fileStart position of \"+nextFileStart);\n\t\tthis.stream.logBufferLevel();\n\t\tthis.stream.cleanBuffers();\n\t\tthis.stream.logBufferLevel(true);\n\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t}\n\treturn nextFileStart;\n}\n\nISOFile.prototype.getInfo = function() {\n\tvar i, j;\n\tvar movie = {};\n\tvar trak;\n\tvar track;\n\tvar ref;\n\tvar sample_desc;\n\tvar _1904 = (new Date('1904-01-01T00:00:00Z').getTime());\n\n\tif (this.moov) {\n\t\tmovie.hasMoov = true;\n\t\tmovie.duration = this.moov.mvhd.duration;\n\t\tmovie.timescale = this.moov.mvhd.timescale;\n\t\tmovie.isFragmented = (this.moov.mvex != null);\n\t\tif (movie.isFragmented && this.moov.mvex.mehd) {\n\t\t\tmovie.fragment_duration = this.moov.mvex.mehd.fragment_duration;\n\t\t}\n\t\tmovie.isProgressive = this.isProgressive;\n\t\tmovie.hasIOD = (this.moov.iods != null);\n\t\tmovie.brands = [];\n\t\tmovie.brands.push(this.ftyp.major_brand);\n\t\tmovie.brands = movie.brands.concat(this.ftyp.compatible_brands);\n\t\tmovie.created = new Date(_1904+this.moov.mvhd.creation_time*1000);\n\t\tmovie.modified = new Date(_1904+this.moov.mvhd.modification_time*1000);\n\t\tmovie.tracks = [];\n\t\tmovie.audioTracks = [];\n\t\tmovie.videoTracks = [];\n\t\tmovie.subtitleTracks = [];\n\t\tmovie.metadataTracks = [];\n\t\tmovie.hintTracks = [];\n\t\tmovie.otherTracks = [];\n\t\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\t\ttrak = this.moov.traks[i];\n\t\t\tsample_desc = trak.mdia.minf.stbl.stsd.entries[0];\n\t\t\ttrack = {};\n\t\t\tmovie.tracks.push(track);\n\t\t\ttrack.id = trak.tkhd.track_id;\n\t\t\ttrack.name = trak.mdia.hdlr.name;\n\t\t\ttrack.references = [];\n\t\t\tif (trak.tref) {\n\t\t\t\tfor (j = 0; j < trak.tref.boxes.length; j++) {\n\t\t\t\t\tref = {};\n\t\t\t\t\ttrack.references.push(ref);\n\t\t\t\t\tref.type = trak.tref.boxes[j].type;\n\t\t\t\t\tref.track_ids = trak.tref.boxes[j].track_ids;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (trak.edts) {\n\t\t\t\ttrack.edits = trak.edts.elst.entries;\n\t\t\t}\n\t\t\ttrack.created = new Date(_1904+trak.tkhd.creation_time*1000);\n\t\t\ttrack.modified = new Date(_1904+trak.tkhd.modification_time*1000);\n\t\t\ttrack.movie_duration = trak.tkhd.duration;\n\t\t\ttrack.movie_timescale = movie.timescale;\n\t\t\ttrack.layer = trak.tkhd.layer;\n\t\t\ttrack.alternate_group = trak.tkhd.alternate_group;\n\t\t\ttrack.volume = trak.tkhd.volume;\n\t\t\ttrack.matrix = trak.tkhd.matrix;\n\t\t\ttrack.track_width = trak.tkhd.width/(1<<16);\n\t\t\ttrack.track_height = trak.tkhd.height/(1<<16);\n\t\t\ttrack.timescale = trak.mdia.mdhd.timescale;\n\t\t\ttrack.cts_shift = trak.mdia.minf.stbl.cslg;\n\t\t\ttrack.duration = trak.mdia.mdhd.duration;\n\t\t\ttrack.samples_duration = trak.samples_duration;\n\t\t\ttrack.codec = sample_desc.getCodec();\n\t\t\ttrack.kind = (trak.udta && trak.udta.kinds.length ? trak.udta.kinds[0] : { schemeURI: \"\", value: \"\"});\n\t\t\ttrack.language = (trak.mdia.elng ? trak.mdia.elng.extended_language : trak.mdia.mdhd.languageString);\n\t\t\ttrack.nb_samples = trak.samples.length;\n\t\t\ttrack.size = trak.samples_size;\n\t\t\ttrack.bitrate = (track.size*8*track.timescale)/track.samples_duration;\n\t\t\tif (sample_desc.isAudio()) {\n\t\t\t\ttrack.type = \"audio\";\n\t\t\t\tmovie.audioTracks.push(track);\n\t\t\t\ttrack.audio = {};\n\t\t\t\ttrack.audio.sample_rate = sample_desc.getSampleRate();\n\t\t\t\ttrack.audio.channel_count = sample_desc.getChannelCount();\n\t\t\t\ttrack.audio.sample_size = sample_desc.getSampleSize();\n\t\t\t} else if (sample_desc.isVideo()) {\n\t\t\t\ttrack.type = \"video\";\n\t\t\t\tmovie.videoTracks.push(track);\n\t\t\t\ttrack.video = {};\n\t\t\t\ttrack.video.width = sample_desc.getWidth();\n\t\t\t\ttrack.video.height = sample_desc.getHeight();\n\t\t\t} else if (sample_desc.isSubtitle()) {\n\t\t\t\ttrack.type = \"subtitles\";\n\t\t\t\tmovie.subtitleTracks.push(track);\n\t\t\t} else if (sample_desc.isHint()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.hintTracks.push(track);\n\t\t\t} else if (sample_desc.isMetadata()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.metadataTracks.push(track);\n\t\t\t} else {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.otherTracks.push(track);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tmovie.hasMoov = false;\n\t}\n\tmovie.mime = \"\";\n\tif (movie.hasMoov && movie.tracks) {\n\t\tif (movie.videoTracks && movie.videoTracks.length > 0) {\n\t\t\tmovie.mime += 'video/mp4; codecs=\\\"';\n\t\t} else if (movie.audioTracks && movie.audioTracks.length > 0) {\n\t\t\tmovie.mime += 'audio/mp4; codecs=\\\"';\n\t\t} else {\n\t\t\tmovie.mime += 'application/mp4; codecs=\\\"';\n\t\t}\n\t\tfor (i = 0; i < movie.tracks.length; i++) {\n\t\t\tif (i !== 0) movie.mime += ',';\n\t\t\tmovie.mime+= movie.tracks[i].codec;\n\t\t}\n\t\tmovie.mime += '\\\"; profiles=\\\"';\n\t\tmovie.mime += this.ftyp.compatible_brands.join();\n\t\tmovie.mime += '\\\"';\n\t}\n\treturn movie;\n}\n\nISOFile.prototype.setNextSeekPositionFromSample = function (sample) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (this.nextSeekPosition) {\n\t\tthis.nextSeekPosition = Math.min(sample.offset+sample.alreadyRead,this.nextSeekPosition);\n\t} else {\n\t\tthis.nextSeekPosition = sample.offset+sample.alreadyRead;\n\t}\n}\n\nISOFile.prototype.processSamples = function(last) {\n\tvar i;\n\tvar trak;\n\tif (!this.sampleProcessingStarted) return;\n\n\t/* For each track marked for fragmentation,\n\t check if the next sample is there (i.e. if the sample information is known (i.e. moof has arrived) and if it has been downloaded)\n\t and create a fragment with it */\n\tif (this.isFragmentationInitialized && this.onSegment !== null) {\n\t\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\t\tvar fragTrak = this.fragmentedTracks[i];\n\t\t\ttrak = fragTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\t/* The sample information is there (either because the file is not fragmented and this is not the last sample,\n\t\t\t\tor because the file is fragmented and the moof for that sample has been received */\n\t\t\t\tLog.debug(\"ISOFile\", \"Creating media fragment on track #\"+fragTrak.id +\" for sample \"+trak.nextSample);\n\t\t\t\tvar result = this.createFragment(fragTrak.id, trak.nextSample, fragTrak.segmentStream);\n\t\t\t\tif (result) {\n\t\t\t\t\tfragTrak.segmentStream = result;\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t} else {\n\t\t\t\t\t/* The fragment could not be created because the media data is not there (not downloaded), wait for it */\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t/* A fragment is created by sample, but the segment is the accumulation in the buffer of these fragments.\n\t\t\t\t It is flushed only as requested by the application (nb_samples) to avoid too many callbacks */\n\t\t\t\tif (trak.nextSample % fragTrak.nb_samples === 0 || (last || trak.nextSample >= trak.samples.length)) {\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sending fragmented data on track #\"+fragTrak.id+\" for samples [\"+Math.max(0,trak.nextSample-fragTrak.nb_samples)+\",\"+(trak.nextSample-1)+\"]\");\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t\t\t\t\tif (this.onSegment) {\n\t\t\t\t\t\tthis.onSegment(fragTrak.id, fragTrak.user, fragTrak.segmentStream.buffer, trak.nextSample, (last || trak.nextSample >= trak.samples.length));\n\t\t\t\t\t}\n\t\t\t\t\t/* force the creation of a new buffer */\n\t\t\t\t\tfragTrak.segmentStream = null;\n\t\t\t\t\tif (fragTrak !== this.fragmentedTracks[i]) {\n\t\t\t\t\t\t/* make sure we can stop fragmentation if needed */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.onSamples !== null) {\n\t\t/* For each track marked for data export,\n\t\t check if the next sample is there (i.e. has been downloaded) and send it */\n\t\tfor (i = 0; i < this.extractedTracks.length; i++) {\n\t\t\tvar extractTrak = this.extractedTracks[i];\n\t\t\ttrak = extractTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\tLog.debug(\"ISOFile\", \"Exporting on track #\"+extractTrak.id +\" sample #\"+trak.nextSample);\n\t\t\t\tvar sample = this.getSample(trak, trak.nextSample);\n\t\t\t\tif (sample) {\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t\textractTrak.samples.push(sample);\n\t\t\t\t} else {\n\t\t\t\t\tthis.setNextSeekPositionFromSample(trak.samples[trak.nextSample]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (trak.nextSample % extractTrak.nb_samples === 0 || trak.nextSample >= trak.samples.length) {\n\t\t\t\t\tLog.debug(\"ISOFile\", \"Sending samples on track #\"+extractTrak.id+\" for sample \"+trak.nextSample);\n\t\t\t\t\tif (this.onSamples) {\n\t\t\t\t\t\tthis.onSamples(extractTrak.id, extractTrak.user, extractTrak.samples);\n\t\t\t\t\t}\n\t\t\t\t\textractTrak.samples = [];\n\t\t\t\t\tif (extractTrak !== this.extractedTracks[i]) {\n\t\t\t\t\t\t/* check if the extraction needs to be stopped */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* Find and return specific boxes using recursion and early return */\nISOFile.prototype.getBox = function(type) {\n var result = this.getBoxes(type, true);\n return (result.length ? result[0] : null);\n}\n\nISOFile.prototype.getBoxes = function(type, returnEarly) {\n var result = [];\n ISOFile._sweep.call(this, type, result, returnEarly);\n return result;\n}\n\nISOFile._sweep = function(type, result, returnEarly) {\n if (this.type && this.type == type) result.push(this);\n for (var box in this.boxes) {\n if (result.length && returnEarly) return;\n ISOFile._sweep.call(this.boxes[box], type, result, returnEarly);\n }\n}\n\nISOFile.prototype.getTrackSamplesInfo = function(track_id) {\n\tvar track = this.getTrackById(track_id);\n\tif (track) {\n\t\treturn track.samples;\n\t} else {\n\t\treturn;\n\t}\n}\n\nISOFile.prototype.getTrackSample = function(track_id, number) {\n\tvar track = this.getTrackById(track_id);\n\tvar sample = this.getSample(track, number);\n\treturn sample;\n}\n\n/* Called by the application to release the resources associated to samples already forwarded to the application */\nISOFile.prototype.releaseUsedSamples = function (id, sampleNum) {\n\tvar size = 0;\n\tvar trak = this.getTrackById(id);\n\tif (!trak.lastValidSample) trak.lastValidSample = 0;\n\tfor (var i = trak.lastValidSample; i < sampleNum; i++) {\n\t\tsize+=this.releaseSample(trak, i);\n\t}\n\tLog.info(\"ISOFile\", \"Track #\"+id+\" released samples up to \"+sampleNum+\" (released size: \"+size+\", remaining: \"+this.samplesDataSize+\")\");\n\ttrak.lastValidSample = sampleNum;\n}\n\nISOFile.prototype.start = function() {\n\tthis.sampleProcessingStarted = true;\n\tthis.processSamples(false);\n}\n\nISOFile.prototype.stop = function() {\n\tthis.sampleProcessingStarted = false;\n}\n\n/* Called by the application to flush the remaining samples (e.g. once the download is finished or when no more samples will be added) */\nISOFile.prototype.flush = function() {\n\tLog.info(\"ISOFile\", \"Flushing remaining samples\");\n\tthis.updateSampleLists();\n\tthis.processSamples(true);\n\tthis.stream.cleanBuffers();\n\tthis.stream.logBufferLevel(true);\n}\n\n/* Finds the byte offset for a given time on a given track\n also returns the time of the previous rap */\nISOFile.prototype.seekTrack = function(time, useRap, trak) {\n\tvar j;\n\tvar sample;\n\tvar seek_offset = Infinity;\n\tvar rap_seek_sample_num = 0;\n\tvar seek_sample_num = 0;\n\tvar timescale;\n\n\tif (trak.samples.length === 0) {\n\t\tLog.info(\"ISOFile\", \"No sample in track, cannot seek! Using time \"+Log.getDurationString(0, 1) +\" and offset: \"+0);\n\t\treturn { offset: 0, time: 0 };\n\t}\n\n\tfor (j = 0; j < trak.samples.length; j++) {\n\t\tsample = trak.samples[j];\n\t\tif (j === 0) {\n\t\t\tseek_sample_num = 0;\n\t\t\ttimescale = sample.timescale;\n\t\t} else if (sample.cts > time * sample.timescale) {\n\t\t\tseek_sample_num = j-1;\n\t\t\tbreak;\n\t\t}\n\t\tif (useRap && sample.is_sync) {\n\t\t\trap_seek_sample_num = j;\n\t\t}\n\t}\n\tif (useRap) {\n\t\tseek_sample_num = rap_seek_sample_num;\n\t}\n\ttime = trak.samples[seek_sample_num].cts;\n\ttrak.nextSample = seek_sample_num;\n\twhile (trak.samples[seek_sample_num].alreadyRead === trak.samples[seek_sample_num].size) {\n\t\t// No remaining samples to look for, all are downloaded.\n\t\tif (!trak.samples[seek_sample_num + 1]) {\n\t\t\tbreak;\n\t\t}\n\t\tseek_sample_num++;\n\t}\n\tseek_offset = trak.samples[seek_sample_num].offset+trak.samples[seek_sample_num].alreadyRead;\n\tLog.info(\"ISOFile\", \"Seeking to \"+(useRap ? \"RAP\": \"\")+\" sample #\"+trak.nextSample+\" on track \"+trak.tkhd.track_id+\", time \"+Log.getDurationString(time, timescale) +\" and offset: \"+seek_offset);\n\treturn { offset: seek_offset, time: time/timescale };\n}\n\nISOFile.prototype.getTrackDuration = function (trak) {\n\tvar sample;\n\n\tif (!trak.samples) {\n\t\treturn Infinity;\n\t}\n\tsample = trak.samples[trak.samples.length - 1];\n\treturn (sample.cts + sample.duration) / sample.timescale;\n}\n\n/* Finds the byte offset in the file corresponding to the given time or to the time of the previous RAP */\nISOFile.prototype.seek = function(time, useRap) {\n\tvar moov = this.moov;\n\tvar trak;\n\tvar trak_seek_info;\n\tvar i;\n\tvar seek_info = { offset: Infinity, time: Infinity };\n\tif (!this.moov) {\n\t\tthrow \"Cannot seek: moov not received!\";\n\t} else {\n\t\tfor (i = 0; i this.getTrackDuration(trak)) { // skip tracks that already ended\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttrak_seek_info = this.seekTrack(time, useRap, trak);\n\t\t\tif (trak_seek_info.offset < seek_info.offset) {\n\t\t\t\tseek_info.offset = trak_seek_info.offset;\n\t\t\t}\n\t\t\tif (trak_seek_info.time < seek_info.time) {\n\t\t\t\tseek_info.time = trak_seek_info.time;\n\t\t\t}\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Seeking at time \"+Log.getDurationString(seek_info.time, 1)+\" needs a buffer with a fileStart position of \"+seek_info.offset);\n\t\tif (seek_info.offset === Infinity) {\n\t\t\t/* No sample info, in all tracks, cannot seek */\n\t\t\tseek_info = { offset: this.nextParsePosition, time: 0 };\n\t\t} else {\n\t\t\t/* check if the seek position is already in some buffer and\n\t\t\t in that case return the end of that buffer (or of the last contiguous buffer) */\n\t\t\t/* TODO: Should wait until append operations are done */\n\t\t\tseek_info.offset = this.stream.getEndFilePositionAfter(seek_info.offset);\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Adjusted seek position (after checking data already in buffer): \"+seek_info.offset);\n\t\treturn seek_info;\n\t}\n}\n\nISOFile.prototype.equal = function(b) {\n\tvar box_index = 0;\n\twhile (box_index < this.boxes.length && box_index < b.boxes.length) {\n\t\tvar a_box = this.boxes[box_index];\n\t\tvar b_box = b.boxes[box_index];\n\t\tif (!BoxParser.boxEqual(a_box, b_box)) {\n\t\t\treturn false;\n\t\t}\n\t\tbox_index++;\n\t}\n\treturn true;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.ISOFile = ISOFile;\n}\n// file:src/isofile-advanced-parsing.js\n/* position in the current buffer of the beginning of the last box parsed */\nISOFile.prototype.lastBoxStartPosition = 0;\n/* indicator if the parsing is stuck in the middle of an mdat box */\nISOFile.prototype.parsingMdat = null;\n/* next file position that the parser needs:\n - 0 until the first buffer (i.e. fileStart ===0) has been received \n - otherwise, the next box start until the moov box has been parsed\n - otherwise, the position of the next sample to fetch\n */\nISOFile.prototype.nextParsePosition = 0;\n/* keep mdat data */\nISOFile.prototype.discardMdatData = false;\n\nISOFile.prototype.processIncompleteBox = function(ret) {\n\tvar box;\n\tvar merged;\n\tvar found;\n\t\n\t/* we did not have enough bytes in the current buffer to parse the entire box */\n\tif (ret.type === \"mdat\") { \n\t\t/* we had enough bytes to get its type and size and it's an 'mdat' */\n\t\t\n\t\t/* special handling for mdat boxes, since we don't actually need to parse it linearly \n\t\t we create the box */\n\t\tbox = new BoxParser[ret.type+\"Box\"](ret.size);\t\n\t\tthis.parsingMdat = box;\n\t\tthis.boxes.push(box);\n\t\tthis.mdats.push(box);\t\t\t\n\t\tbox.start = ret.start;\n\t\tbox.hdr_size = ret.hdr_size;\n\t\tthis.stream.addUsedBytes(box.hdr_size);\n\n\t\t/* indicate that the parsing should start from the end of the box */\n\t\tthis.lastBoxStartPosition = box.start + box.size;\n \t\t/* let's see if we have the end of the box in the other buffers */\n\t\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\t\tif (found) {\n\t\t\t/* found the end of the box */\n\t\t\tthis.parsingMdat = null;\n\t\t\t/* let's see if we can parse more in this buffer */\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* 'mdat' end not found in the existing buffers */\n\t\t\t/* determine the next position in the file to start parsing from */\n\t\t\tif (!this.moovStartFound) {\n\t\t\t\t/* moov not find yet, \n\t\t\t\t the file probably has 'mdat' at the beginning, and 'moov' at the end, \n\t\t\t\t indicate that the downloader should not try to download those bytes now */\n\t\t\t\tthis.nextParsePosition = box.start + box.size;\n\t\t\t} else {\n\t\t\t\t/* we have the start of the moov box, \n\t\t\t\t the next bytes should try to complete the current 'mdat' */\n\t\t\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\t\t}\n\t\t\t/* not much we can do, wait for more buffers to arrive */\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\t/* box is incomplete, we may not even know its type */\n\t\tif (ret.type === \"moov\") { \n\t\t\t/* the incomplete box is a 'moov' box */\n\t\t\tthis.moovStartFound = true;\n\t\t\tif (this.mdats.length === 0) {\n\t\t\t\tthis.isProgressive = true;\n\t\t\t}\n\t\t}\n\t\t/* either it's not an mdat box (and we need to parse it, we cannot skip it)\n\t\t (TODO: we could skip 'free' boxes ...)\n\t\t\t or we did not have enough data to parse the type and size of the box, \n\t\t we try to concatenate the current buffer with the next buffer to restart parsing */\n\t\tmerged = (this.stream.mergeNextBuffer ? this.stream.mergeNextBuffer() : false);\n\t\tif (merged) {\n\t\t\t/* The next buffer was contiguous, the merging succeeded,\n\t\t\t we can now continue parsing, \n\t\t\t the next best position to parse is at the end of this new buffer */\n\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* we cannot concatenate existing buffers because they are not contiguous or because there is no additional buffer */\n\t\t\t/* The next best position to parse is still at the end of this old buffer */\n\t\t\tif (!ret.type) {\n\t\t\t\t/* There were not enough bytes in the buffer to parse the box type and length,\n\t\t\t\t the next fetch should retrieve those missing bytes, i.e. the next bytes after this buffer */\n\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t} else {\n\t\t\t\t/* we had enough bytes to parse size and type of the incomplete box\n\t\t\t\t if we haven't found yet the moov box, skip this one and try the next one \n\t\t\t\t if we have found the moov box, let's continue linear parsing */\n\t\t\t\tif (this.moovStartFound) {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getPosition() + ret.size;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasIncompleteMdat = function () {\n\treturn (this.parsingMdat !== null);\n}\n\nISOFile.prototype.processIncompleteMdat = function () {\n\tvar box;\n\tvar found;\n\t\n\t/* we are in the parsing of an incomplete mdat box */\n\tbox = this.parsingMdat;\n\n\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\tif (found) {\n\t\tLog.debug(\"ISOFile\", \"Found 'mdat' end in buffered data\");\n\t\t/* the end of the mdat has been found */ \n\t\tthis.parsingMdat = null;\n\t\t/* we can parse more in this buffer */\n\t\treturn true;\n\t} else {\n\t\t/* we don't have the end of this mdat yet, \n\t\t indicate that the next byte to fetch is the end of the buffers we have so far, \n\t\t return and wait for more buffer to come */\n\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\treturn false;\n\t}\n}\n\nISOFile.prototype.restoreParsePosition = function() {\n\t/* Reposition at the start position of the previous box not entirely parsed */\n\treturn this.stream.seek(this.lastBoxStartPosition, true, this.discardMdatData);\n}\n\nISOFile.prototype.saveParsePosition = function() {\n\t/* remember the position of the box start in case we need to roll back (if the box is incomplete) */\n\tthis.lastBoxStartPosition = this.stream.getPosition();\t\n}\n\nISOFile.prototype.updateUsedBytes = function(box, ret) {\n\tif (this.stream.addUsedBytes) {\n\t\tif (box.type === \"mdat\") {\n\t\t\t/* for an mdat box, only its header is considered used, other bytes will be used when sample data is requested */\n\t\t\tthis.stream.addUsedBytes(box.hdr_size);\n\t\t\tif (this.discardMdatData) {\n\t\t\t\tthis.stream.addUsedBytes(box.size-box.hdr_size);\n\t\t\t}\n\t\t} else {\n\t\t\t/* for all other boxes, the entire box data is considered used */\n\t\t\tthis.stream.addUsedBytes(box.size);\n\t\t}\t\n\t}\n}\n// file:src/isofile-advanced-creation.js\nISOFile.prototype.add = BoxParser.Box.prototype.add;\nISOFile.prototype.addBox = BoxParser.Box.prototype.addBox;\n\nISOFile.prototype.init = function (_options) {\n\tvar options = _options || {}; \n\tvar ftyp = this.add(\"ftyp\").set(\"major_brand\", (options.brands && options.brands[0]) || \"iso4\")\n\t\t\t\t\t\t\t .set(\"minor_version\", 0)\n\t\t\t\t\t\t\t .set(\"compatible_brands\", options.brands || [\"iso4\"]);\n\tvar moov = this.add(\"moov\");\n\tmoov.add(\"mvhd\").set(\"timescale\", options.timescale || 600)\n\t\t\t\t\t.set(\"rate\", options.rate || 1<<16)\n\t\t\t\t\t.set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"volume\", (options.width) ? 0 : 0x0100)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000])\n\t\t\t\t\t.set(\"next_track_id\", 1);\n\tmoov.add(\"mvex\");\n\treturn this;\n}\n\nISOFile.prototype.addTrack = function (_options) {\n\tif (!this.moov) {\n\t\tthis.init(_options);\n\t}\n\n\tvar options = _options || {}; \n\toptions.width = options.width || 320;\n\toptions.height = options.height || 320;\n\toptions.id = options.id || this.moov.mvhd.next_track_id;\n\toptions.type = options.type || \"avc1\";\n\n\tvar trak = this.moov.add(\"trak\");\n\tthis.moov.mvhd.next_track_id = options.id+1;\n\ttrak.add(\"tkhd\").set(\"flags\",BoxParser.TKHD_FLAG_ENABLED | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_MOVIE | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_PREVIEW)\n\t\t\t\t\t.set(\"creation_time\",0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"track_id\", options.id)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"layer\", options.layer || 0)\n\t\t\t\t\t.set(\"alternate_group\", 0)\n\t\t\t\t\t.set(\"volume\", 1)\n\t\t\t\t\t.set(\"matrix\", [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ])\n\t\t\t\t\t.set(\"width\", options.width << 16)\n\t\t\t\t\t.set(\"height\", options.height << 16);\n\n\tvar mdia = trak.add(\"mdia\");\n\tmdia.add(\"mdhd\").set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"timescale\", options.timescale || 1)\n\t\t\t\t\t.set(\"duration\", options.media_duration || 0)\n\t\t\t\t\t.set(\"language\", options.language || \"und\");\n\n\tmdia.add(\"hdlr\").set(\"handler\", options.hdlr || \"vide\")\n\t\t\t\t\t.set(\"name\", options.name || \"Track created with MP4Box.js\");\n\n\tmdia.add(\"elng\").set(\"extended_language\", options.language || \"fr-FR\");\n\n\tvar minf = mdia.add(\"minf\");\n\tif (BoxParser[options.type+\"SampleEntry\"] === undefined) return;\n\tvar sample_description_entry = new BoxParser[options.type+\"SampleEntry\"]();\n\tsample_description_entry.data_reference_index = 1;\n\tvar media_type = \"\";\n\tfor (var mediaType in BoxParser.sampleEntryCodes) {\n\t\tvar codes = BoxParser.sampleEntryCodes[mediaType];\n\t\tfor (var i = 0; i < codes.length; i++) {\n\t\t\tif (codes.indexOf(options.type) > -1) {\n\t\t\t\tmedia_type = mediaType;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tswitch(media_type) {\n\t\tcase \"Visual\":\n\t\t\tminf.add(\"vmhd\").set(\"graphicsmode\",0).set(\"opcolor\", [ 0, 0, 0 ]);\n\t\t\tsample_description_entry.set(\"width\", options.width)\n\t\t\t\t\t\t.set(\"height\", options.height)\n\t\t\t\t\t\t.set(\"horizresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"vertresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"frame_count\", 1)\n\t\t\t\t\t\t.set(\"compressorname\", options.type+\" Compressor\")\n\t\t\t\t\t\t.set(\"depth\", 0x18);\n\t\t\tif (options.avcDecoderConfigRecord) {\n\t\t\t\tvar avcC = new BoxParser.avcCBox();\n\t\t\t\tavcC.parse(new MP4BoxStream(options.avcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(avcC);\n\t\t\t} else if (options.hevcDecoderConfigRecord) {\n\t\t\t\tvar hvcC = new BoxParser.hvcCBox();\n\t\t\t\thvcC.parse(new MP4BoxStream(options.hevcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(hvcC);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Audio\":\n\t\t\tminf.add(\"smhd\").set(\"balance\", options.balance || 0);\n\t\t\tsample_description_entry.set(\"channel_count\", options.channel_count || 2)\n\t\t\t\t\t\t.set(\"samplesize\", options.samplesize || 16)\n\t\t\t\t\t\t.set(\"samplerate\", options.samplerate || 1<<16);\n\t\t\tbreak;\n\t\tcase \"Hint\":\n\t\t\tminf.add(\"hmhd\"); // TODO: add properties\n\t\t\tbreak;\n\t\tcase \"Subtitle\":\n\t\t\tminf.add(\"sthd\");\n\t\t\tswitch (options.type) {\n\t\t\t\tcase \"stpp\":\n\t\t\t\t\tsample_description_entry.set(\"namespace\", options.namespace || \"nonamespace\")\n\t\t\t\t\t\t\t\t.set(\"schema_location\", options.schema_location || \"\")\n\t\t\t\t\t\t\t\t.set(\"auxiliary_mime_types\", options.auxiliary_mime_types || \"\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Metadata\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tcase \"System\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t}\n\tif (options.description) {\n\t\tsample_description_entry.addBox(options.description);\n\t}\n\tif (options.description_boxes) {\n\t\toptions.description_boxes.forEach(function (b) {\n\t\t\tsample_description_entry.addBox(b);\n\t\t});\n\t}\n\tminf.add(\"dinf\").add(\"dref\").addEntry((new BoxParser[\"url Box\"]()).set(\"flags\", 0x1));\n\tvar stbl = minf.add(\"stbl\");\n\tstbl.add(\"stsd\").addEntry(sample_description_entry);\n\tstbl.add(\"stts\").set(\"sample_counts\", [])\n\t\t\t\t\t.set(\"sample_deltas\", []);\n\tstbl.add(\"stsc\").set(\"first_chunk\", [])\n\t\t\t\t\t.set(\"samples_per_chunk\", [])\n\t\t\t\t\t.set(\"sample_description_index\", []);\n\tstbl.add(\"stco\").set(\"chunk_offsets\", []);\n\tstbl.add(\"stsz\").set(\"sample_sizes\", []);\n\n\tthis.moov.mvex.add(\"trex\").set(\"track_id\", options.id)\n\t\t\t\t\t\t\t .set(\"default_sample_description_index\", options.default_sample_description_index || 1)\n\t\t\t\t\t\t\t .set(\"default_sample_duration\", options.default_sample_duration || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_size\", options.default_sample_size || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_flags\", options.default_sample_flags || 0);\n\tthis.buildTrakSampleLists(trak);\n\treturn options.id;\n}\n\nBoxParser.Box.prototype.computeSize = function(stream_) {\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n}\n\nISOFile.prototype.addSample = function (track_id, data, _options) {\n\tvar options = _options || {};\n\tvar sample = {};\n\tvar trak = this.getTrackById(track_id);\n\tif (trak === null) return;\n sample.number = trak.samples.length;\n\tsample.track_id = trak.tkhd.track_id;\n\tsample.timescale = trak.mdia.mdhd.timescale;\n\tsample.description_index = (options.sample_description_index ? options.sample_description_index - 1: 0);\n\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\tsample.data = data;\n\tsample.size = data.byteLength;\n\tsample.alreadyRead = sample.size;\n\tsample.duration = options.duration || 1;\n\tsample.cts = options.cts || 0;\n\tsample.dts = options.dts || 0;\n\tsample.is_sync = options.is_sync || false;\n\tsample.is_leading = options.is_leading || 0;\n\tsample.depends_on = options.depends_on || 0;\n\tsample.is_depended_on = options.is_depended_on || 0;\n\tsample.has_redundancy = options.has_redundancy || 0;\n\tsample.degradation_priority = options.degradation_priority || 0;\n\tsample.offset = 0;\n\tsample.subsamples = options.subsamples;\n\ttrak.samples.push(sample);\n\ttrak.samples_size += sample.size;\n\ttrak.samples_duration += sample.duration;\n\tif (trak.first_dts === undefined) {\n\t\ttrak.first_dts = options.dts;\n\t}\n\n\tthis.processSamples();\n\t\n\tvar moof = this.createSingleSampleMoof(sample);\n\tthis.addBox(moof);\n\tmoof.computeSize();\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tthis.add(\"mdat\").data = new Uint8Array(data);\n\treturn sample;\n}\n\nISOFile.prototype.createSingleSampleMoof = function(sample) {\n\tvar sample_flags = 0;\n\tif (sample.is_sync)\n\t\tsample_flags = (1 << 25); // sample_depends_on_none (I picture)\n\telse\n\t\tsample_flags = (1 << 16); // non-sync\n\n\tvar moof = new BoxParser.moofBox();\n\tmoof.add(\"mfhd\").set(\"sequence_number\", this.nextMoofNumber);\n\tthis.nextMoofNumber++;\n\tvar traf = moof.add(\"traf\");\n\tvar trak = this.getTrackById(sample.track_id);\n\ttraf.add(\"tfhd\").set(\"track_id\", sample.track_id)\n\t\t\t\t\t.set(\"flags\", BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF);\n\ttraf.add(\"tfdt\").set(\"baseMediaDecodeTime\", (sample.dts - (trak.first_dts || 0)));\n\ttraf.add(\"trun\").set(\"flags\", BoxParser.TRUN_FLAGS_DATA_OFFSET | BoxParser.TRUN_FLAGS_DURATION | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_SIZE | BoxParser.TRUN_FLAGS_FLAGS | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_CTS_OFFSET)\n\t\t\t\t\t.set(\"data_offset\",0)\n\t\t\t\t\t.set(\"first_sample_flags\",0)\n\t\t\t\t\t.set(\"sample_count\",1)\n\t\t\t\t\t.set(\"sample_duration\",[sample.duration])\n\t\t\t\t\t.set(\"sample_size\",[sample.size])\n\t\t\t\t\t.set(\"sample_flags\",[sample_flags])\n\t\t\t\t\t.set(\"sample_composition_time_offset\", [sample.cts - sample.dts]);\n\treturn moof;\n}\n\n// file:src/isofile-sample-processing.js\n/* Index of the last moof box received */\nISOFile.prototype.lastMoofIndex = 0;\n\n/* size of the buffers allocated for samples */\nISOFile.prototype.samplesDataSize = 0;\n\n/* Resets all sample tables */\nISOFile.prototype.resetTables = function () {\n\tvar i;\n\tvar trak, stco, stsc, stsz, stts, ctts, stss;\n\tthis.initial_duration = this.moov.mvhd.duration;\n\tthis.moov.mvhd.duration = 0;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\ttrak.tkhd.duration = 0;\n\t\ttrak.mdia.mdhd.duration = 0;\n\t\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\t\tstco.chunk_offsets = [];\n\t\tstsc = trak.mdia.minf.stbl.stsc;\n\t\tstsc.first_chunk = [];\n\t\tstsc.samples_per_chunk = [];\n\t\tstsc.sample_description_index = [];\n\t\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\t\tstsz.sample_sizes = [];\n\t\tstts = trak.mdia.minf.stbl.stts;\n\t\tstts.sample_counts = [];\n\t\tstts.sample_deltas = [];\n\t\tctts = trak.mdia.minf.stbl.ctts;\n\t\tif (ctts) {\n\t\t\tctts.sample_counts = [];\n\t\t\tctts.sample_offsets = [];\n\t\t}\n\t\tstss = trak.mdia.minf.stbl.stss;\n\t\tvar k = trak.mdia.minf.stbl.boxes.indexOf(stss);\n\t\tif (k != -1) trak.mdia.minf.stbl.boxes[k] = null;\n\t}\n}\n\nISOFile.initSampleGroups = function(trak, traf, sbgps, trak_sgpds, traf_sgpds) {\n\tvar l;\n\tvar k;\n\tvar sample_groups_info;\n\tvar sample_group_info;\n\tvar sample_group_key;\n\tfunction SampleGroupInfo(_type, _parameter, _sbgp) {\n\t\tthis.grouping_type = _type;\n\t\tthis.grouping_type_parameter = _parameter;\n\t\tthis.sbgp = _sbgp;\n\t\tthis.last_sample_in_run = -1;\n\t\tthis.entry_index = -1;\t\t\n\t}\n\tif (traf) {\n\t\ttraf.sample_groups_info = [];\n\t} \n\tif (!trak.sample_groups_info) {\n\t\ttrak.sample_groups_info = [];\n\t}\n\tfor (k = 0; k < sbgps.length; k++) {\n\t\tsample_group_key = sbgps[k].grouping_type +\"/\"+ sbgps[k].grouping_type_parameter;\n\t\tsample_group_info = new SampleGroupInfo(sbgps[k].grouping_type, sbgps[k].grouping_type_parameter, sbgps[k]);\n\t\tif (traf) {\n\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tfor (l=0; l = 2) {\n\t\t\t\tsample_group_key = trak_sgpds[k].grouping_type +\"/0\";\n\t\t\t\tsample_group_info = new SampleGroupInfo(trak_sgpds[k].grouping_type, 0);\n\t\t\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (traf_sgpds) {\n\t\t\tfor (k = 0; k < traf_sgpds.length; k++) {\n\t\t\t\tif (!traf_sgpds[k].used && traf_sgpds[k].version >= 2) {\n\t\t\t\t\tsample_group_key = traf_sgpds[k].grouping_type +\"/0\";\n\t\t\t\t\tsample_group_info = new SampleGroupInfo(traf_sgpds[k].grouping_type, 0);\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t\tif (!traf.sample_groups_info[sample_group_key]) {\n\t\t\t\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.setSampleGroupProperties = function(trak, sample, sample_number, sample_groups_info) {\n\tvar k;\n\tvar index;\n\tsample.sample_groups = [];\n\tfor (k in sample_groups_info) {\n\t\tsample.sample_groups[k] = {};\n\t\tsample.sample_groups[k].grouping_type = sample_groups_info[k].grouping_type;\n\t\tsample.sample_groups[k].grouping_type_parameter = sample_groups_info[k].grouping_type_parameter;\n\t\tif (sample_number >= sample_groups_info[k].last_sample_in_run) {\n\t\t\tif (sample_groups_info[k].last_sample_in_run < 0) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run = 0;\n\t\t\t}\n\t\t\tsample_groups_info[k].entry_index++;\t\n\t\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run += sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].sample_count;\n\t\t\t}\n\t\t}\n\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\tsample.sample_groups[k].group_description_index = sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].group_description_index;\n\t\t} else {\n\t\t\tsample.sample_groups[k].group_description_index = -1; // special value for not defined\n\t\t}\n\t\tif (sample.sample_groups[k].group_description_index !== 0) {\n\t\t\tvar description;\n\t\t\tif (sample_groups_info[k].fragment_description) {\n\t\t\t\tdescription = sample_groups_info[k].fragment_description;\n\t\t\t} else {\n\t\t\t\tdescription = sample_groups_info[k].description;\n\t\t\t}\n\t\t\tif (sample.sample_groups[k].group_description_index > 0) {\n\t\t\t\tif (sample.sample_groups[k].group_description_index > 65535) {\n\t\t\t\t\tindex = (sample.sample_groups[k].group_description_index >> 16)-1;\n\t\t\t\t} else {\n\t\t\t\t\tindex = sample.sample_groups[k].group_description_index-1;\n\t\t\t\t}\n\t\t\t\tif (description && index >= 0) {\n\t\t\t\t\tsample.sample_groups[k].description = description.entries[index];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (description && description.version >= 2) {\n\t\t\t\t\tif (description.default_group_description_index > 0) {\t\t\t\t\t\t\t\t\n\t\t\t\t\t\tsample.sample_groups[k].description = description.entries[description.default_group_description_index-1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.process_sdtp = function (sdtp, sample, number) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (sdtp) {\n\t\tsample.is_leading = sdtp.is_leading[number];\n\t\tsample.depends_on = sdtp.sample_depends_on[number];\n\t\tsample.is_depended_on = sdtp.sample_is_depended_on[number];\n\t\tsample.has_redundancy = sdtp.sample_has_redundancy[number];\n\t} else {\n\t\tsample.is_leading = 0;\n\t\tsample.depends_on = 0;\n\t\tsample.is_depended_on = 0\n\t\tsample.has_redundancy = 0;\n\t}\t\n}\n\n/* Build initial sample list from sample tables */\nISOFile.prototype.buildSampleLists = function() {\t\n\tvar i;\n\tvar trak;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\tthis.buildTrakSampleLists(trak);\n\t}\n}\n\nISOFile.prototype.buildTrakSampleLists = function(trak) {\t\n\tvar j, k;\n\tvar stco, stsc, stsz, stts, ctts, stss, stsd, subs, sbgps, sgpds, stdp;\n\tvar chunk_run_index, chunk_index, last_chunk_in_run, offset_in_chunk, last_sample_in_chunk;\n\tvar last_sample_in_stts_run, stts_run_index, last_sample_in_ctts_run, ctts_run_index, last_stss_index, last_subs_index, subs_entry_index, last_subs_sample_index;\n\n\ttrak.samples = [];\n\ttrak.samples_duration = 0;\n\ttrak.samples_size = 0;\n\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\tstsc = trak.mdia.minf.stbl.stsc;\n\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\tstts = trak.mdia.minf.stbl.stts;\n\tctts = trak.mdia.minf.stbl.ctts;\n\tstss = trak.mdia.minf.stbl.stss;\n\tstsd = trak.mdia.minf.stbl.stsd;\n\tsubs = trak.mdia.minf.stbl.subs;\n\tstdp = trak.mdia.minf.stbl.stdp;\n\tsbgps = trak.mdia.minf.stbl.sbgps;\n\tsgpds = trak.mdia.minf.stbl.sgpds;\n\t\n\tlast_sample_in_stts_run = -1;\n\tstts_run_index = -1;\n\tlast_sample_in_ctts_run = -1;\n\tctts_run_index = -1;\n\tlast_stss_index = 0;\n\tsubs_entry_index = 0;\n\tlast_subs_sample_index = 0;\t\t\n\n\tISOFile.initSampleGroups(trak, null, sbgps, sgpds);\n\n\tif (typeof stsz === \"undefined\") {\n\t\treturn;\n\t}\n\n\t/* we build the samples one by one and compute their properties */\n\tfor (j = 0; j < stsz.sample_sizes.length; j++) {\n\t\tvar sample = {};\n\t\tsample.number = j;\n\t\tsample.track_id = trak.tkhd.track_id;\n\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\tsample.alreadyRead = 0;\n\t\ttrak.samples[j] = sample;\n\t\t/* size can be known directly */\n\t\tsample.size = stsz.sample_sizes[j];\n\t\ttrak.samples_size += sample.size;\n\t\t/* computing chunk-based properties (offset, sample description index)*/\n\t\tif (j === 0) {\t\t\t\t\n\t\t\tchunk_index = 1; /* the first sample is in the first chunk (chunk indexes are 1-based) */\n\t\t\tchunk_run_index = 0; /* the first chunk is the first entry in the first_chunk table */\n\t\t\tsample.chunk_index = chunk_index;\n\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\tlast_sample_in_chunk = stsc.samples_per_chunk[chunk_run_index];\n\t\t\toffset_in_chunk = 0;\n\n\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t} else {\n\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t}\n\t\t} else {\n\t\t\tif (j < last_sample_in_chunk) {\n\t\t\t\t/* the sample is still in the current chunk */\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t} else {\n\t\t\t\t/* the sample is in the next chunk */\n\t\t\t\tchunk_index++;\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\t/* reset the accumulated offset in the chunk */\n\t\t\t\toffset_in_chunk = 0;\n\t\t\t\tif (chunk_index <= last_chunk_in_run) {\n\t\t\t\t\t/* stay in the same entry of the first_chunk table */\n\t\t\t\t\t/* chunk_run_index unmodified */\n\t\t\t\t} else {\n\t\t\t\t\tchunk_run_index++;\n\t\t\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t\tlast_sample_in_chunk += stsc.samples_per_chunk[chunk_run_index];\n\t\t\t}\n\t\t}\n\n\t\tsample.description_index = stsc.sample_description_index[sample.chunk_run_index]-1;\n\t\tsample.description = stsd.entries[sample.description_index];\n\t\tsample.offset = stco.chunk_offsets[sample.chunk_index-1] + offset_in_chunk; /* chunk indexes are 1-based */\n\t\toffset_in_chunk += sample.size;\n\n\t\t/* setting dts, cts, duration and rap flags */\n\t\tif (j > last_sample_in_stts_run) {\n\t\t\tstts_run_index++;\n\t\t\tif (last_sample_in_stts_run < 0) {\n\t\t\t\tlast_sample_in_stts_run = 0;\n\t\t\t}\n\t\t\tlast_sample_in_stts_run += stts.sample_counts[stts_run_index];\t\t\t\t\n\t\t}\n\t\tif (j > 0) {\n\t\t\ttrak.samples[j-1].duration = stts.sample_deltas[stts_run_index];\n\t\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t\t\tsample.dts = trak.samples[j-1].dts + trak.samples[j-1].duration;\n\t\t} else {\n\t\t\tsample.dts = 0;\n\t\t}\n\t\tif (ctts) {\n\t\t\tif (j >= last_sample_in_ctts_run) {\n\t\t\t\tctts_run_index++;\n\t\t\t\tif (last_sample_in_ctts_run < 0) {\n\t\t\t\t\tlast_sample_in_ctts_run = 0;\n\t\t\t\t}\n\t\t\t\tlast_sample_in_ctts_run += ctts.sample_counts[ctts_run_index];\t\t\t\t\n\t\t\t}\n\t\t\tsample.cts = trak.samples[j].dts + ctts.sample_offsets[ctts_run_index];\n\t\t} else {\n\t\t\tsample.cts = sample.dts;\n\t\t}\n\t\tif (stss) {\n\t\t\tif (j == stss.sample_numbers[last_stss_index] - 1) { // sample numbers are 1-based\n\t\t\t\tsample.is_sync = true;\n\t\t\t\tlast_stss_index++;\n\t\t\t} else {\n\t\t\t\tsample.is_sync = false;\t\t\t\t\n\t\t\t\tsample.degradation_priority = 0;\n\t\t\t}\n\t\t\tif (subs) {\n\t\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j+1) {\n\t\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t\t\tsubs_entry_index++;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tsample.is_sync = true;\n\t\t}\n\t\tISOFile.process_sdtp(trak.mdia.minf.stbl.sdtp, sample, sample.number);\n\t\tif (stdp) {\n\t\t\tsample.degradation_priority = stdp.priority[j];\n\t\t} else {\n\t\t\tsample.degradation_priority = 0;\n\t\t}\n\t\tif (subs) {\n\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j) {\n\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t}\n\t\t}\n\t\tif (sbgps.length > 0 || sgpds.length > 0) {\n\t\t\tISOFile.setSampleGroupProperties(trak, sample, j, trak.sample_groups_info);\n\t\t}\n\t}\n\tif (j>0) {\n\t\ttrak.samples[j-1].duration = Math.max(trak.mdia.mdhd.duration - trak.samples[j-1].dts, 0);\n\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t}\n}\n\n/* Update sample list when new 'moof' boxes are received */\nISOFile.prototype.updateSampleLists = function() {\t\n\tvar i, j, k;\n\tvar default_sample_description_index, default_sample_duration, default_sample_size, default_sample_flags;\n\tvar last_run_position;\n\tvar box, moof, traf, trak, trex;\n\tvar sample;\n\tvar sample_flags;\n\t\n\tif (this.moov === undefined) {\n\t\treturn;\n\t}\n\t/* if the input file is fragmented and fetched in multiple downloads, we need to update the list of samples */\n\twhile (this.lastMoofIndex < this.moofs.length) {\n\t\tbox = this.moofs[this.lastMoofIndex];\n\t\tthis.lastMoofIndex++;\n\t\tif (box.type == \"moof\") {\n\t\t\tmoof = box;\n\t\t\tfor (i = 0; i < moof.trafs.length; i++) {\n\t\t\t\ttraf = moof.trafs[i];\n\t\t\t\ttrak = this.getTrackById(traf.tfhd.track_id);\n\t\t\t\ttrex = this.getTrexById(traf.tfhd.track_id);\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\t\t\t\tdefault_sample_description_index = traf.tfhd.default_sample_description_index;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_description_index = (trex ? trex.default_sample_description_index: 1);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\t\t\t\tdefault_sample_duration = traf.tfhd.default_sample_duration;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_duration = (trex ? trex.default_sample_duration : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\t\t\t\tdefault_sample_size = traf.tfhd.default_sample_size;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_size = (trex ? trex.default_sample_size : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\t\t\t\tdefault_sample_flags = traf.tfhd.default_sample_flags;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_flags = (trex ? trex.default_sample_flags : 0);\n\t\t\t\t}\n\t\t\t\ttraf.sample_number = 0;\n\t\t\t\t/* process sample groups */\n\t\t\t\tif (traf.sbgps.length > 0) {\n\t\t\t\t\tISOFile.initSampleGroups(trak, traf, traf.sbgps, trak.mdia.minf.stbl.sgpds, traf.sgpds);\n\t\t\t\t}\n\t\t\t\tfor (j = 0; j < traf.truns.length; j++) {\n\t\t\t\t\tvar trun = traf.truns[j];\n\t\t\t\t\tfor (k = 0; k < trun.sample_count; k++) {\n\t\t\t\t\t\tsample = {};\n\t\t\t\t\t\tsample.moof_number = this.lastMoofIndex;\n\t\t\t\t\t\tsample.number_in_traf = traf.sample_number;\n\t\t\t\t\t\ttraf.sample_number++;\n\t\t\t sample.number = trak.samples.length;\n\t\t\t\t\t\ttraf.first_sample_index = trak.samples.length;\n\t\t\t\t\t\ttrak.samples.push(sample);\n\t\t\t\t\t\tsample.track_id = trak.tkhd.track_id;\n\t\t\t\t\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\t\t\t\t\tsample.description_index = default_sample_description_index-1;\n\t\t\t\t\t\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\t\t\t\t\t\tsample.size = default_sample_size;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\t\t\t\tsample.size = trun.sample_size[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_size += sample.size;\n\t\t\t\t\t\tsample.duration = default_sample_duration;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\t\t\t\tsample.duration = trun.sample_duration[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_duration += sample.duration;\n\t\t\t\t\t\tif (trak.first_traf_merged || k > 0) {\n\t\t\t\t\t\t\tsample.dts = trak.samples[trak.samples.length-2].dts+trak.samples[trak.samples.length-2].duration;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (traf.tfdt) {\n\t\t\t\t\t\t\t\tsample.dts = traf.tfdt.baseMediaDecodeTime;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.dts = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttrak.first_traf_merged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.cts = sample.dts;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\t\t\t\tsample.cts = sample.dts + trun.sample_composition_time_offset[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample_flags = default_sample_flags;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\t\t\t\tsample_flags = trun.sample_flags[k];\n\t\t\t\t\t\t} else if (k === 0 && (trun.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG)) {\n\t\t\t\t\t\t\tsample_flags = trun.first_sample_flags;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.is_sync = ((sample_flags >> 16 & 0x1) ? false : true);\n\t\t\t\t\t\tsample.is_leading = (sample_flags >> 26 & 0x3);\n\t\t\t\t\t\tsample.depends_on = (sample_flags >> 24 & 0x3);\n\t\t\t\t\t\tsample.is_depended_on = (sample_flags >> 22 & 0x3);\n\t\t\t\t\t\tsample.has_redundancy = (sample_flags >> 20 & 0x3);\n\t\t\t\t\t\tsample.degradation_priority = (sample_flags & 0xFFFF);\n\t\t\t\t\t\t//ISOFile.process_sdtp(traf.sdtp, sample, sample.number_in_traf);\n\t\t\t\t\t\tvar bdop = (traf.tfhd.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar dbim = (traf.tfhd.flags & BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF) ? true : false;\n\t\t\t\t\t\tvar dop = (trun.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar bdo = 0;\n\t\t\t\t\t\tif (!bdop) {\n\t\t\t\t\t\t\tif (!dbim) {\n\t\t\t\t\t\t\t\tif (j === 0) { // the first track in the movie fragment\n\t\t\t\t\t\t\t\t\tbdo = moof.start; // the position of the first byte of the enclosing Movie Fragment Box\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbdo = last_run_position; // end of the data defined by the preceding *track* (irrespective of the track id) fragment in the moof\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbdo = moof.start;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbdo = traf.tfhd.base_data_offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (j === 0 && k === 0) {\n\t\t\t\t\t\t\tif (dop) {\n\t\t\t\t\t\t\t\tsample.offset = bdo + trun.data_offset; // If the data-offset is present, it is relative to the base-data-offset established in the track fragment header\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.offset = bdo; // the data for this run starts the base-data-offset defined by the track fragment header\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsample.offset = last_run_position; // this run starts immediately after the data of the previous run\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlast_run_position = sample.offset + sample.size;\n\t\t\t\t\t\tif (traf.sbgps.length > 0 || traf.sgpds.length > 0 ||\n\t\t\t\t\t\t\ttrak.mdia.minf.stbl.sbgps.length > 0 || trak.mdia.minf.stbl.sgpds.length > 0) {\n\t\t\t\t\t\t\tISOFile.setSampleGroupProperties(trak, sample, sample.number_in_traf, traf.sample_groups_info);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (traf.subs) {\n\t\t\t\t\ttrak.has_fragment_subsamples = true;\n\t\t\t\t\tvar sample_index = traf.first_sample_index;\n\t\t\t\t\tfor (j = 0; j < traf.subs.entries.length; j++) {\n\t\t\t\t\t\tsample_index += traf.subs.entries[j].sample_delta;\n\t\t\t\t\t\tsample = trak.samples[sample_index-1];\n\t\t\t\t\t\tsample.subsamples = traf.subs.entries[j].subsamples;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\t\n}\n\n/* Try to get sample data for a given sample:\n returns null if not found\n returns the same sample if already requested\n */\nISOFile.prototype.getSample = function(trak, sampleNum) {\t\n\tvar buffer;\n\tvar sample = trak.samples[sampleNum];\n\t\n\tif (!this.moov) {\n\t\treturn null;\n\t}\n\n\tif (!sample.data) {\n\t\t/* Not yet fetched */\n\t\tsample.data = new Uint8Array(sample.size);\n\t\tsample.alreadyRead = 0;\n\t\tthis.samplesDataSize += sample.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating sample #\"+sampleNum+\" on track #\"+trak.tkhd.track_id+\" of size \"+sample.size+\" (total: \"+this.samplesDataSize+\")\");\n\t} else if (sample.alreadyRead == sample.size) {\n\t\t/* Already fetched entirely */\n\t\treturn sample;\n\t}\n\n\t/* The sample has only been partially fetched, we need to check in all buffers */\n\twhile(true) {\n\t\tvar index =\tthis.stream.findPosition(true, sample.offset + sample.alreadyRead, false);\n\t\tif (index > -1) {\n\t\t\tbuffer = this.stream.buffers[index];\n\t\t\tvar lengthAfterStart = buffer.byteLength - (sample.offset + sample.alreadyRead - buffer.fileStart);\n\t\t\tif (sample.size - sample.alreadyRead <= lengthAfterStart) {\n\t\t\t\t/* the (rest of the) sample is entirely contained in this buffer */\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+(sample.size - sample.alreadyRead)+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, sample.size - sample.alreadyRead);\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += sample.size - sample.alreadyRead;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\tsample.alreadyRead = sample.size;\n\n\t\t\t\treturn sample;\n\t\t\t} else {\n\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\tif (lengthAfterStart === 0) return null;\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" partial data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\tsample.alreadyRead += lengthAfterStart;\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t/* keep looking in the next buffer */\n\t\t\t}\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\n/* Release the memory used to store the data of the sample */\nISOFile.prototype.releaseSample = function(trak, sampleNum) {\t\n\tvar sample = trak.samples[sampleNum];\n\tif (sample.data) {\n\t\tthis.samplesDataSize -= sample.size;\n\t\tsample.data = null;\n\t\tsample.alreadyRead = 0;\n\t\treturn sample.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\nISOFile.prototype.getAllocatedSampleDataSize = function() {\n\treturn this.samplesDataSize;\n}\n\n/* Builds the MIME Type 'codecs' sub-parameters for the whole file */\nISOFile.prototype.getCodecs = function() {\t\n\tvar i;\n\tvar codecs = \"\";\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\tvar trak = this.moov.traks[i];\n\t\tif (i>0) {\n\t\t\tcodecs+=\",\"; \n\t\t}\n\t\tcodecs += trak.mdia.minf.stbl.stsd.entries[0].getCodec();\t\t\n\t}\n\treturn codecs;\n}\n\n/* Helper function */\nISOFile.prototype.getTrexById = function(id) {\t\n\tvar i;\n\tif (!this.moov || !this.moov.mvex) return null;\n\tfor (i = 0; i < this.moov.mvex.trexs.length; i++) {\n\t\tvar trex = this.moov.mvex.trexs[i];\n\t\tif (trex.track_id == id) return trex;\n\t}\n\treturn null;\n}\n\n/* Helper function */\nISOFile.prototype.getTrackById = function(id) {\n\tif (this.moov === undefined) {\n\t\treturn null;\n\t}\n\tfor (var j = 0; j < this.moov.traks.length; j++) {\n\t\tvar trak = this.moov.traks[j];\n\t\tif (trak.tkhd.track_id == id) return trak;\n\t}\n\treturn null;\n}\n// file:src/isofile-item-processing.js\nISOFile.prototype.items = [];\n/* size of the buffers allocated for samples */\nISOFile.prototype.itemsDataSize = 0;\n\nISOFile.prototype.flattenItemInfo = function() {\t\n\tvar items = this.items;\n\tvar i, j;\n\tvar item;\n\tvar meta = this.meta;\n\tif (meta === null || meta === undefined) return;\n\tif (meta.hdlr === undefined) return;\n\tif (meta.iinf === undefined) return;\n\tfor (i = 0; i < meta.iinf.item_infos.length; i++) {\n\t\titem = {};\n\t\titem.id = meta.iinf.item_infos[i].item_ID;\n\t\titems[item.id] = item;\n\t\titem.ref_to = [];\n\t\titem.name = meta.iinf.item_infos[i].item_name;\n\t\tif (meta.iinf.item_infos[i].protection_index > 0) {\n\t\t\titem.protection = meta.ipro.protections[meta.iinf.item_infos[i].protection_index-1];\n\t\t}\n\t\tif (meta.iinf.item_infos[i].item_type) {\n\t\t\titem.type = meta.iinf.item_infos[i].item_type;\n\t\t} else {\n\t\t\titem.type = \"mime\";\n\t\t}\n\t\titem.content_type = meta.iinf.item_infos[i].content_type;\n\t\titem.content_encoding = meta.iinf.item_infos[i].content_encoding;\n\t}\n\tif (meta.iloc) {\n\t\tfor(i = 0; i < meta.iloc.items.length; i++) {\n\t\t\tvar offset;\n\t\t\tvar itemloc = meta.iloc.items[i];\n\t\t\titem = items[itemloc.item_ID];\n\t\t\tif (itemloc.data_reference_index !== 0) {\n\t\t\t\tLog.warn(\"Item storage with reference to other files: not supported\");\n\t\t\t\titem.source = meta.dinf.boxes[itemloc.data_reference_index-1];\n\t\t\t}\n\t\t\tswitch(itemloc.construction_method) {\n\t\t\t\tcase 0: // offset into the file referenced by the data reference index\n\t\t\t\tbreak;\n\t\t\t\tcase 1: // offset into the idat box of this meta box\n\t\t\t\tLog.warn(\"Item storage with construction_method : not supported\");\n\t\t\t\tbreak;\n\t\t\t\tcase 2: // offset into another item\n\t\t\t\tLog.warn(\"Item storage with construction_method : not supported\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\titem.extents = [];\n\t\t\titem.size = 0;\n\t\t\tfor (j = 0; j < itemloc.extents.length; j++) {\n\t\t\t\titem.extents[j] = {};\n\t\t\t\titem.extents[j].offset = itemloc.extents[j].extent_offset + itemloc.base_offset;\n\t\t\t\titem.extents[j].length = itemloc.extents[j].extent_length;\n\t\t\t\titem.extents[j].alreadyRead = 0;\n\t\t\t\titem.size += item.extents[j].length;\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.pitm) {\n\t\titems[meta.pitm.item_id].primary = true;\n\t}\n\tif (meta.iref) {\n\t\tfor (i=0; i 0 && propEntry.property_index-1 < meta.iprp.ipco.boxes.length) {\n\t\t\t\t\t\tvar propbox = meta.iprp.ipco.boxes[propEntry.property_index-1];\n\t\t\t\t\t\titem.properties[propbox.type] = propbox;\n\t\t\t\t\t\titem.properties.boxes.push(propbox);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.getItem = function(item_id) {\t\n\tvar buffer;\n\tvar item;\n\t\n\tif (!this.meta) {\n\t\treturn null;\n\t}\n\n \titem = this.items[item_id];\n\tif (!item.data && item.size) {\n\t\t/* Not yet fetched */\n\t\titem.data = new Uint8Array(item.size);\n\t\titem.alreadyRead = 0;\n\t\tthis.itemsDataSize += item.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating item #\"+item_id+\" of size \"+item.size+\" (total: \"+this.itemsDataSize+\")\");\n\t} else if (item.alreadyRead === item.size) {\n\t\t/* Already fetched entirely */\n\t\treturn item;\n\t}\n\n\t/* The item has only been partially fetched, we need to check in all buffers to find the remaining extents*/\n\n\tfor (var i = 0; i < item.extents.length; i++) {\n\t\tvar extent = item.extents[i];\n\t\tif (extent.alreadyRead === extent.length) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tvar index =\tthis.stream.findPosition(true, extent.offset + extent.alreadyRead, false);\n\t\t\tif (index > -1) {\n\t\t\t\tbuffer = this.stream.buffers[index];\n\t\t\t\tvar lengthAfterStart = buffer.byteLength - (extent.offset + extent.alreadyRead - buffer.fileStart);\n\t\t\t\tif (extent.length - extent.alreadyRead <= lengthAfterStart) {\n\t\t\t\t\t/* the (rest of the) extent is entirely contained in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" data (alreadyRead: \"+extent.alreadyRead+\n\t\t\t\t\t\t\" offset: \"+(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+(extent.length - extent.alreadyRead)+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, extent.length - extent.alreadyRead);\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += extent.length - extent.alreadyRead;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t\titem.alreadyRead += (extent.length - extent.alreadyRead);\n\t\t\t\t\textent.alreadyRead = extent.length;\n\t\t\t\t} else {\n\t\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" partial data (alreadyRead: \"+extent.alreadyRead+\" offset: \"+\n\t\t\t\t\t\t(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\t\textent.alreadyRead += lengthAfterStart;\n\t\t\t\t\titem.alreadyRead += lengthAfterStart;\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tif (item.alreadyRead === item.size) {\n\t\t/* fetched entirely */\n\t\treturn item;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n/* Release the memory used to store the data of the item */\nISOFile.prototype.releaseItem = function(item_id) {\t\n\tvar item = this.items[item_id];\n\tif (item.data) {\n\t\tthis.itemsDataSize -= item.size;\n\t\titem.data = null;\n\t\titem.alreadyRead = 0;\n\t\tfor (var i = 0; i < item.extents.length; i++) {\n\t\t\tvar extent = item.extents[i];\n\t\t\textent.alreadyRead = 0;\n\t\t}\n\t\treturn item.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n\nISOFile.prototype.processItems = function(callback) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tthis.getItem(item.id);\n\t\tif (callback && !item.sent) {\n\t\t\tcallback(item);\n\t\t\titem.sent = true;\n\t\t\titem.data = null;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasItem = function(name) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tif (item.name === name) {\n\t\t\treturn item.id;\n\t\t}\n\t}\n\treturn -1;\n}\n\nISOFile.prototype.getMetaHandler = function() {\n\tif (!this.meta) {\n\t\treturn null;\n\t} else {\n\t\treturn this.meta.hdlr.handler;\t\t\n\t}\n}\n\nISOFile.prototype.getPrimaryItem = function() {\n\tif (!this.meta || !this.meta.pitm) {\n\t\treturn null;\n\t} else {\n\t\treturn this.getItem(this.meta.pitm.item_id);\n\t}\n}\n\nISOFile.prototype.itemToFragmentedTrackFile = function(_options) {\n\tvar options = _options || {};\n\tvar item = null;\n\tif (options.itemId) {\n\t\titem = this.getItem(options.itemId);\n\t} else {\n\t\titem = this.getPrimaryItem();\n\t}\n\tif (item == null) return null;\n\n\tvar file = new ISOFile();\n\tfile.discardMdatData = false;\n\t// assuming the track type is the same as the item type\n\tvar trackOptions = { type: item.type, description_boxes: item.properties.boxes};\n\tif (item.properties.ispe) {\n\t\ttrackOptions.width = item.properties.ispe.image_width;\n\t\ttrackOptions.height = item.properties.ispe.image_height;\n\t}\n\tvar trackId = file.addTrack(trackOptions);\n\tif (trackId) {\n\t\tfile.addSample(trackId, item.data);\n\t\treturn file;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n// file:src/isofile-write.js\n/* Rewrite the entire file */\nISOFile.prototype.write = function(outstream) {\n\tfor (var i=0; i0 ? this.moov.traks[i].samples[0].duration: 0));\n\t\tinitSegs.push(seg);\n\t}\n\treturn initSegs;\n}\n\n// file:src/box-print.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.printHeader = function(output) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\toutput.log(output.indent+\"size:\"+this.size);\n\toutput.log(output.indent+\"type:\"+this.type);\n}\n\nBoxParser.FullBox.prototype.printHeader = function(output) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"version:\"+this.version);\n\toutput.log(output.indent+\"flags:\"+this.flags);\n}\n\nBoxParser.Box.prototype.print = function(output) {\n\tthis.printHeader(output);\n}\n\nBoxParser.ContainerBox.prototype.print = function(output) {\n\tthis.printHeader(output);\n\tfor (var i=0; i>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"next_track_id: \"+this.next_track_id);\n}\n\nBoxParser.tkhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"track_id: \"+this.track_id);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"layer: \"+this.layer);\n\toutput.log(output.indent+\"alternate_group: \"+this.alternate_group);\n\toutput.log(output.indent+\"width: \"+this.width);\n\toutput.log(output.indent+\"height: \"+this.height);\n}// file:src/mp4box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MP4Box = {};\n\nMP4Box.createFile = function (_keepMdatData, _stream) {\n\t/* Boolean indicating if bytes containing media data should be kept in memory */\n\tvar keepMdatData = (_keepMdatData !== undefined ? _keepMdatData : true);\n\tvar file = new ISOFile(_stream);\n\tfile.discardMdatData = (keepMdatData ? false : true);\n\treturn file;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.createFile = MP4Box.createFile;\n}\n","interface IClipMeta {\n width: number;\n height: number;\n duration: number;\n}\n\n/**\n * 所有素材需要实现的接口\n *\n * 素材(Clip)是不同数据类型的抽象,给其他模块提供数据\n *\n * WebAV 内置了 {@link MP4Clip}, {@link AudioClip}, {@link ImgClip}, {@link MediaStreamClip} 等常用素材,用于给 {@link Combinator} {@link AVCanvas} 提供数据\n *\n * 你只需实现该接口即可自定义素材,拥有最大的灵活度来生成视频内容,比如动画、转场效果等\n * @see [自定义素材](https://bilibili.github.io/WebAV/demo/2_6-custom-clip)\n *\n */\nexport interface IClip {\n /**\n * 从素材中提取指定时间数据\n * @param time 时间,单位 微秒\n */\n tick: (time: number) => Promise<{\n video?: VideoFrame | ImageBitmap | null;\n audio?: Float32Array[];\n state: 'done' | 'success';\n }>;\n\n /**\n * 当素材准备完成,ready 会切换到 resolved 状态\n */\n readonly ready: Promise;\n\n /**\n * 数据元数据\n */\n readonly meta: IClipMeta;\n\n /**\n * clone,返回一个新素材\n */\n clone: () => Promise;\n\n /**\n * 按指定时间切割,返回该时刻前后两个新素材\n *\n * 该方法不会破坏原素材的数据\n *\n * @param time 时间,微秒\n * @returns\n */\n split: (time: number) => Promise<[this, this]>;\n\n /**\n * 销毁实例,释放资源\n */\n destroy: () => void;\n}\n\n/**\n * 默认的音频设置,⚠️ 不要变更它的值 ⚠️\n */\nexport const DEFAULT_AUDIO_CONF = {\n sampleRate: 48000,\n channelCount: 2,\n codec: 'mp4a.40.2',\n};\n","import mp4box, {\n AudioTrackOpts,\n ESDSBoxParser,\n MP4ABoxParser,\n MP4File,\n MP4Info,\n TrakBoxParser,\n VideoTrackOpts,\n} from '@webav/mp4box.js';\nimport { DEFAULT_AUDIO_CONF } from '../clips';\n\nexport function extractFileConfig(file: MP4File, info: MP4Info) {\n const vTrack = info.videoTracks[0];\n const rs: {\n videoTrackConf?: VideoTrackOpts;\n videoDecoderConf?: Parameters[0];\n audioTrackConf?: AudioTrackOpts;\n audioDecoderConf?: Parameters[0];\n } = {};\n if (vTrack != null) {\n const videoDesc = parseVideoCodecDesc(file.getTrackById(vTrack.id)).buffer;\n const { descKey, type } = vTrack.codec.startsWith('avc1')\n ? { descKey: 'avcDecoderConfigRecord', type: 'avc1' }\n : vTrack.codec.startsWith('hvc1')\n ? { descKey: 'hevcDecoderConfigRecord', type: 'hvc1' }\n : { descKey: '', type: '' };\n if (descKey !== '') {\n rs.videoTrackConf = {\n timescale: vTrack.timescale,\n duration: vTrack.duration,\n width: vTrack.video.width,\n height: vTrack.video.height,\n brands: info.brands,\n type,\n [descKey]: videoDesc,\n };\n }\n\n rs.videoDecoderConf = {\n codec: vTrack.codec,\n codedHeight: vTrack.video.height,\n codedWidth: vTrack.video.width,\n description: videoDesc,\n };\n }\n\n const aTrack = info.audioTracks[0];\n if (aTrack != null) {\n const esdsBox = getESDSBoxFromMP4File(file);\n rs.audioTrackConf = {\n timescale: aTrack.timescale,\n samplerate: aTrack.audio.sample_rate,\n channel_count: aTrack.audio.channel_count,\n hdlr: 'soun',\n type: aTrack.codec.startsWith('mp4a') ? 'mp4a' : aTrack.codec,\n description: getESDSBoxFromMP4File(file),\n };\n rs.audioDecoderConf = {\n codec: aTrack.codec.startsWith('mp4a')\n ? DEFAULT_AUDIO_CONF.codec\n : aTrack.codec,\n numberOfChannels: aTrack.audio.channel_count,\n sampleRate: aTrack.audio.sample_rate,\n ...(esdsBox == null ? {} : parseAudioInfo4ESDSBox(esdsBox)),\n };\n }\n return rs;\n}\n\n// track is H.264, H.265 or VPX.\nfunction parseVideoCodecDesc(track: TrakBoxParser): Uint8Array {\n for (const entry of track.mdia.minf.stbl.stsd.entries) {\n // @ts-expect-error\n const box = entry.avcC ?? entry.hvcC ?? entry.vpcC;\n if (box != null) {\n const stream = new mp4box.DataStream(\n undefined,\n 0,\n mp4box.DataStream.BIG_ENDIAN,\n );\n box.write(stream);\n return new Uint8Array(stream.buffer.slice(8)); // Remove the box header.\n }\n }\n throw Error('avcC, hvcC or VPX not found');\n}\n\nfunction getESDSBoxFromMP4File(file: MP4File, codec = 'mp4a') {\n const mp4aBox = file.moov?.traks\n .map((t) => t.mdia.minf.stbl.stsd.entries)\n .flat()\n .find(({ type }) => type === codec) as MP4ABoxParser;\n\n return mp4aBox?.esds;\n}\n\n// 解决封装层音频信息标识错误,导致解码异常\nfunction parseAudioInfo4ESDSBox(esds: ESDSBoxParser) {\n const decoderConf = esds.esd.descs[0]?.descs[0];\n if (decoderConf == null) return {};\n\n const [byte1, byte2] = decoderConf.data;\n // sampleRate 是第一字节后 3bit + 第二字节前 1bit\n const sampleRateIdx = ((byte1 & 0x07) << 1) + (byte2 >> 7);\n // numberOfChannels 是第二字节 [2, 5] 4bit\n const numberOfChannels = (byte2 & 0x7f) >> 3;\n const sampleRateEnum = [\n 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025,\n 8000, 7350,\n ] as const;\n return {\n sampleRate: sampleRateEnum[sampleRateIdx],\n numberOfChannels,\n };\n}\n\n/**\n * 强行回收 mp4boxfile 尽量降低内存占用,会破坏 file 导致无法正常使用\n * 仅用于获取二进制后,不再需要任何 file 功能的场景\n */\nexport function unsafeReleaseMP4BoxFile(file: MP4File) {\n if (file.moov == null) return;\n for (var j = 0; j < file.moov.traks.length; j++) {\n file.moov.traks[j].samples = [];\n }\n file.mdats = [];\n file.moofs = [];\n}\n","import mp4box, {\n MP4ArrayBuffer,\n MP4File,\n MP4Info,\n MP4Sample,\n} from '@webav/mp4box.js';\n\n/**\n * 将原始字节流转换成 MP4Sample 流\n */\nexport class SampleTransform {\n readable: ReadableStream<\n | {\n chunkType: 'ready';\n data: { info: MP4Info; file: MP4File };\n }\n | {\n chunkType: 'samples';\n data: { id: number; type: 'video' | 'audio'; samples: MP4Sample[] };\n }\n >;\n\n writable: WritableStream;\n\n #inputBufOffset = 0;\n\n constructor() {\n const file = mp4box.createFile();\n let streamCancelled = false;\n this.readable = new ReadableStream(\n {\n start: (ctrl) => {\n file.onReady = (info) => {\n const vTrackId = info.videoTracks[0]?.id;\n if (vTrackId != null)\n file.setExtractionOptions(vTrackId, 'video', { nbSamples: 100 });\n\n const aTrackId = info.audioTracks[0]?.id;\n if (aTrackId != null)\n file.setExtractionOptions(aTrackId, 'audio', { nbSamples: 100 });\n\n ctrl.enqueue({ chunkType: 'ready', data: { info, file } });\n file.start();\n };\n\n const releasedCnt: Record = {};\n file.onSamples = (id, type, samples) => {\n ctrl.enqueue({\n chunkType: 'samples',\n data: { id, type, samples: samples.map((s) => ({ ...s })) },\n });\n releasedCnt[id] = (releasedCnt[id] ?? 0) + samples.length;\n file.releaseUsedSamples(id, releasedCnt[id]);\n };\n\n file.onFlush = () => {\n ctrl.close();\n };\n },\n cancel: () => {\n file.stop();\n streamCancelled = true;\n },\n },\n {\n // 每条消息 100 个 samples\n highWaterMark: 50,\n },\n );\n\n this.writable = new WritableStream({\n write: async (ui8Arr) => {\n if (streamCancelled) {\n this.writable.abort();\n return;\n }\n\n const inputBuf = ui8Arr.buffer as MP4ArrayBuffer;\n inputBuf.fileStart = this.#inputBufOffset;\n this.#inputBufOffset += inputBuf.byteLength;\n file.appendBuffer(inputBuf);\n },\n close: () => {\n file.flush();\n file.stop();\n file.onFlush?.();\n },\n });\n }\n}\n","import { MP4Info, MP4Sample } from '@webav/mp4box.js';\nimport {\n audioResample,\n autoReadStream,\n extractPCM4AudioData,\n sleep,\n} from '../av-utils';\nimport { Log } from '../log';\nimport { extractFileConfig } from '../mp4-utils/mp4box-utils';\nimport { SampleTransform } from '../mp4-utils/sample-transform';\nimport { DEFAULT_AUDIO_CONF, IClip } from './iclip';\nimport { file, tmpfile, write } from 'opfs-tools';\n\nlet CLIP_ID = 0;\n\ntype OPFSToolFile = ReturnType;\nfunction isOTFile(obj: any): obj is OPFSToolFile {\n return obj.kind === 'file' && obj.createReader instanceof Function;\n}\n\n// 用于内部创建 MP4Clip 实例\ntype MPClipCloneArgs = Awaited> & {\n localFile: OPFSToolFile;\n};\n\ninterface MP4DecoderConf {\n video: VideoDecoderConfig | null;\n audio: AudioDecoderConfig | null;\n}\n\ninterface MP4ClipOpts {\n audio?: boolean | { volume: number };\n /**\n * 不安全,随时可能废弃\n */\n __unsafe_hardwareAcceleration__?: HardwarePreference;\n}\n\ntype ExtMP4Sample = Omit & {\n is_idr: boolean;\n deleted?: boolean;\n data: null | Uint8Array;\n};\n\ntype LocalFileReader = Awaited>;\n\ntype ThumbnailOpts = {\n start: number;\n end: number;\n step: number;\n};\n\n/**\n * MP4 素材,解析 MP4 文件,使用 {@link MP4Clip.tick} 按需解码指定时间的图像帧\n *\n * 可用于实现视频抽帧、生成缩略图、视频编辑等功能\n *\n * @example\n * new MP4Clip((await fetch('')).body)\n * new MP4Clip(mp4File.stream())\n *\n * @see {@link Combinator}\n * @see [AVCanvas](../../av-canvas/classes/AVCanvas.html)\n *\n * @see [解码播放视频](https://bilibili.github.io/WebAV/demo/1_1-decode-video)\n */\nexport class MP4Clip implements IClip {\n #log = Log.create(`MP4Clip id:${CLIP_ID++},`);\n\n ready: IClip['ready'];\n\n #destroyed = false;\n\n #meta = {\n // 微秒\n duration: 0,\n width: 0,\n height: 0,\n audioSampleRate: 0,\n audioChanCount: 0,\n };\n\n get meta() {\n return { ...this.#meta };\n }\n\n #localFile: OPFSToolFile;\n\n #volume = 1;\n\n #videoSamples: ExtMP4Sample[] = [];\n\n #audioSamples: ExtMP4Sample[] = [];\n\n #videoFrameFinder: VideoFrameFinder | null = null;\n #audioFrameFinder: AudioFrameFinder | null = null;\n\n #decoderConf: {\n video: VideoDecoderConfig | null;\n audio: AudioDecoderConfig | null;\n } = {\n video: null,\n audio: null,\n };\n\n #opts: MP4ClipOpts = { audio: true };\n\n constructor(\n source: OPFSToolFile | ReadableStream | MPClipCloneArgs,\n opts: MP4ClipOpts = { audio: true },\n ) {\n if (\n !(source instanceof ReadableStream) &&\n !isOTFile(source) &&\n !Array.isArray(source.videoSamples)\n ) {\n throw Error('Illegal argument');\n }\n\n this.#opts = { ...opts };\n this.#volume =\n typeof opts.audio === 'object' && 'volume' in opts.audio\n ? opts.audio.volume\n : 1;\n\n const initByStream = async (s: ReadableStream) => {\n await write(this.#localFile, s);\n return await this.#localFile.stream();\n };\n\n this.#localFile = isOTFile(source)\n ? source\n : 'localFile' in source\n ? source.localFile // from clone\n : tmpfile();\n\n this.ready = (\n source instanceof ReadableStream\n ? initByStream(source).then((s) => parseMP4Stream(s, this.#opts))\n : isOTFile(source)\n ? source.stream().then((s) => parseMP4Stream(s, this.#opts))\n : Promise.resolve(source)\n ).then(async ({ videoSamples, audioSamples, decoderConf }) => {\n this.#videoSamples = videoSamples;\n this.#audioSamples = audioSamples;\n this.#decoderConf = decoderConf;\n const { videoFrameFinder, audioFrameFinder } = genDecoder(\n {\n video:\n decoderConf.video == null\n ? null\n : {\n ...decoderConf.video,\n hardwareAcceleration:\n this.#opts.__unsafe_hardwareAcceleration__,\n },\n audio: decoderConf.audio,\n },\n await this.#localFile.createReader(),\n videoSamples,\n audioSamples,\n this.#opts.audio !== false ? this.#volume : null,\n );\n this.#videoFrameFinder = videoFrameFinder;\n this.#audioFrameFinder = audioFrameFinder;\n\n this.#meta = genMeta(decoderConf, videoSamples, audioSamples);\n this.#log.info('MP4Clip meta:', this.#meta);\n return { ...this.#meta };\n });\n }\n\n /**\n * 拦截 {@link MP4Clip.tick} 方法返回的数据,用于对图像、音频数据二次处理\n * @param time 调用 tick 的时间\n * @param tickRet tick 返回的数据\n *\n * @see [移除视频绿幕背景](https://bilibili.github.io/WebAV/demo/3_2-chromakey-video)\n */\n tickInterceptor: >>(\n time: number,\n tickRet: T,\n ) => Promise = async (_, tickRet) => tickRet;\n\n /**\n * 获取素材指定时刻的图像帧、音频数据\n * @param time 微秒\n */\n async tick(time: number): Promise<{\n video?: VideoFrame;\n audio: Float32Array[];\n state: 'success' | 'done';\n }> {\n if (time >= this.#meta.duration) {\n return await this.tickInterceptor(time, {\n audio: [],\n state: 'done',\n });\n }\n\n const [audio, video] = await Promise.all([\n this.#audioFrameFinder?.find(time) ?? [],\n this.#videoFrameFinder?.find(time),\n ]);\n\n if (video == null) {\n return await this.tickInterceptor(time, {\n audio,\n state: 'success',\n });\n }\n\n return await this.tickInterceptor(time, {\n video,\n audio,\n state: 'success',\n });\n }\n\n #thumbAborter = new AbortController();\n /**\n * 生成缩略图,默认每个关键帧生成一个 100px 宽度的缩略图。\n *\n * @param imgWidth 缩略图宽度,默认 100\n * @param opts Partial\n * @returns Promise>\n */\n async thumbnails(\n imgWidth = 100,\n opts?: Partial,\n ): Promise> {\n this.#thumbAborter.abort();\n this.#thumbAborter = new AbortController();\n const aborterSignal = this.#thumbAborter.signal;\n\n await this.ready;\n const abortMsg = 'generate thumbnails aborted';\n if (aborterSignal.aborted) throw Error(abortMsg);\n\n const { width, height } = this.#meta;\n const convtr = createVF2BlobConvtr(\n imgWidth,\n Math.round(height * (imgWidth / width)),\n { quality: 0.1, type: 'image/png' },\n );\n\n return new Promise>(\n async (resolve, reject) => {\n let pngPromises: Array<{ ts: number; img: Promise }> = [];\n const vc = this.#decoderConf.video;\n if (vc == null || this.#videoSamples.length === 0) {\n resolver();\n return;\n }\n aborterSignal.addEventListener('abort', () => {\n reject(Error(abortMsg));\n });\n\n async function resolver() {\n if (aborterSignal.aborted) return;\n resolve(\n await Promise.all(\n pngPromises.map(async (it) => ({\n ts: it.ts,\n img: await it.img,\n })),\n ),\n );\n }\n\n function pushPngPromise(vf: VideoFrame) {\n pngPromises.push({\n ts: vf.timestamp,\n img: convtr(vf),\n });\n }\n\n const { start = 0, end = this.#meta.duration, step } = opts ?? {};\n if (step) {\n let cur = start;\n // 创建一个新的 VideoFrameFinder 实例,避免与 tick 方法共用而导致冲突\n const videoFrameFinder = new VideoFrameFinder(\n await this.#localFile.createReader(),\n this.#videoSamples,\n {\n ...vc,\n hardwareAcceleration: this.#opts.__unsafe_hardwareAcceleration__,\n },\n );\n while (cur <= end && !aborterSignal.aborted) {\n const vf = await videoFrameFinder.find(cur);\n if (vf) pushPngPromise(vf);\n cur += step;\n }\n videoFrameFinder.destroy();\n resolver();\n } else {\n await thumbnailByKeyFrame(\n this.#videoSamples,\n this.#localFile,\n vc,\n aborterSignal,\n { start, end },\n (vf, done) => {\n pushPngPromise(vf);\n if (done) resolver();\n },\n );\n }\n },\n );\n }\n\n async split(time: number) {\n await this.ready;\n\n if (time <= 0 || time >= this.#meta.duration)\n throw Error('\"time\" out of bounds');\n\n const [preVideoSlice, postVideoSlice] = splitVideoSampleByTime(\n this.#videoSamples,\n time,\n );\n const [preAudioSlice, postAudioSlice] = splitAudioSampleByTime(\n this.#audioSamples,\n time,\n );\n const preClip = new MP4Clip(\n {\n localFile: this.#localFile,\n videoSamples: preVideoSlice ?? [],\n audioSamples: preAudioSlice ?? [],\n decoderConf: this.#decoderConf,\n },\n this.#opts,\n );\n const postClip = new MP4Clip(\n {\n localFile: this.#localFile,\n videoSamples: postVideoSlice ?? [],\n audioSamples: postAudioSlice ?? [],\n decoderConf: this.#decoderConf,\n },\n this.#opts,\n );\n await Promise.all([preClip.ready, postClip.ready]);\n\n return [preClip, postClip] as [this, this];\n }\n\n async clone() {\n await this.ready;\n const clip = new MP4Clip(\n {\n localFile: this.#localFile,\n videoSamples: [...this.#videoSamples],\n audioSamples: [...this.#audioSamples],\n decoderConf: this.#decoderConf,\n },\n this.#opts,\n );\n await clip.ready;\n clip.tickInterceptor = this.tickInterceptor;\n return clip as this;\n }\n\n /**\n * 拆分 MP4Clip 为仅包含视频轨道和音频轨道的 MP4Clip\n * @returns Mp4CLip[]\n */\n async splitTrack() {\n await this.ready;\n const clips: MP4Clip[] = [];\n if (this.#videoSamples.length > 0) {\n const videoClip = new MP4Clip(\n {\n localFile: this.#localFile,\n videoSamples: [...this.#videoSamples],\n audioSamples: [],\n decoderConf: {\n video: this.#decoderConf.video,\n audio: null,\n },\n },\n this.#opts,\n );\n await videoClip.ready;\n videoClip.tickInterceptor = this.tickInterceptor;\n clips.push(videoClip);\n }\n if (this.#audioSamples.length > 0) {\n const audioClip = new MP4Clip(\n {\n localFile: this.#localFile,\n videoSamples: [],\n audioSamples: [...this.#audioSamples],\n decoderConf: {\n audio: this.#decoderConf.audio,\n video: null,\n },\n },\n this.#opts,\n );\n await audioClip.ready;\n audioClip.tickInterceptor = this.tickInterceptor;\n clips.push(audioClip);\n }\n\n return clips;\n }\n\n destroy(): void {\n if (this.#destroyed) return;\n this.#log.info('MP4Clip destroy');\n this.#destroyed = true;\n\n this.#videoFrameFinder?.destroy();\n this.#audioFrameFinder?.destroy();\n }\n}\n\nfunction genMeta(\n decoderConf: MP4DecoderConf,\n videoSamples: ExtMP4Sample[],\n audioSamples: ExtMP4Sample[],\n) {\n const meta = {\n duration: 0,\n width: 0,\n height: 0,\n audioSampleRate: 0,\n audioChanCount: 0,\n };\n if (decoderConf.video != null && videoSamples.length > 0) {\n meta.width = decoderConf.video.codedWidth ?? 0;\n meta.height = decoderConf.video.codedHeight ?? 0;\n }\n if (decoderConf.audio != null && audioSamples.length > 0) {\n meta.audioSampleRate = DEFAULT_AUDIO_CONF.sampleRate;\n meta.audioChanCount = DEFAULT_AUDIO_CONF.channelCount;\n }\n\n let vDuration = 0;\n let aDuration = 0;\n if (videoSamples.length > 0) {\n for (let i = videoSamples.length - 1; i >= 0; i--) {\n const s = videoSamples[i];\n if (s.deleted) continue;\n vDuration = s.cts + s.duration;\n break;\n }\n }\n if (audioSamples.length > 0) {\n const lastSampele = audioSamples.at(-1)!;\n aDuration = lastSampele.cts + lastSampele.duration;\n }\n meta.duration = Math.max(vDuration, aDuration);\n\n return meta;\n}\n\nfunction genDecoder(\n decoderConf: MP4DecoderConf,\n localFileReader: LocalFileReader,\n videoSamples: ExtMP4Sample[],\n audioSamples: ExtMP4Sample[],\n volume: number | null,\n) {\n return {\n audioFrameFinder:\n volume == null || decoderConf.audio == null || audioSamples.length === 0\n ? null\n : new AudioFrameFinder(\n localFileReader,\n audioSamples,\n decoderConf.audio,\n {\n volume,\n targetSampleRate: DEFAULT_AUDIO_CONF.sampleRate,\n },\n ),\n videoFrameFinder:\n decoderConf.video == null || videoSamples.length === 0\n ? null\n : new VideoFrameFinder(\n localFileReader,\n videoSamples,\n decoderConf.video,\n ),\n };\n}\n\nasync function parseMP4Stream(\n source: ReadableStream,\n opts: MP4ClipOpts = {},\n) {\n let mp4Info: MP4Info;\n const decoderConf: MP4DecoderConf = { video: null, audio: null };\n let videoSamples: ExtMP4Sample[] = [];\n let audioSamples: ExtMP4Sample[] = [];\n\n return new Promise<{\n videoSamples: typeof videoSamples;\n audioSamples: typeof audioSamples;\n decoderConf: typeof decoderConf;\n }>(async (resolve, reject) => {\n let videoDeltaTS = -1;\n let audioDeltaTS = -1;\n const stopRead = autoReadStream(source.pipeThrough(new SampleTransform()), {\n onChunk: async ({ chunkType, data }) => {\n if (chunkType === 'ready') {\n // mp4File = data.file;\n mp4Info = data.info;\n let { videoDecoderConf: vc, audioDecoderConf: ac } =\n extractFileConfig(data.file, data.info);\n decoderConf.video = vc ?? null;\n decoderConf.audio = ac ?? null;\n if (vc == null && ac == null) {\n stopRead();\n reject(\n Error('MP4Clip must contain at least one video or audio track'),\n );\n }\n Log.info(\n 'mp4BoxFile moov ready',\n {\n ...data.info,\n tracks: null,\n videoTracks: null,\n audioTracks: null,\n },\n decoderConf,\n );\n } else if (chunkType === 'samples') {\n if (data.type === 'video') {\n if (videoDeltaTS === -1) videoDeltaTS = data.samples[0].dts;\n for (const s of data.samples) {\n videoSamples.push(normalizeTimescale(s, videoDeltaTS, 'video'));\n }\n } else if (data.type === 'audio' && opts.audio) {\n if (audioDeltaTS === -1) audioDeltaTS = data.samples[0].dts;\n for (const s of data.samples) {\n audioSamples.push(normalizeTimescale(s, audioDeltaTS, 'audio'));\n }\n }\n }\n },\n onDone: () => {\n const lastSampele = videoSamples.at(-1) ?? audioSamples.at(-1);\n if (mp4Info == null) {\n reject(Error('MP4Clip stream is done, but not emit ready'));\n return;\n } else if (lastSampele == null) {\n reject(Error('MP4Clip stream not contain any sample'));\n return;\n }\n // 修复首帧黑帧\n const firstSample = videoSamples[0];\n if (firstSample != null && firstSample.cts < 200e3) {\n firstSample.duration += firstSample.cts;\n firstSample.cts = 0;\n }\n Log.info('mp4 stream parsed');\n resolve({\n videoSamples,\n audioSamples,\n decoderConf,\n });\n },\n });\n });\n\n function normalizeTimescale(\n s: MP4Sample,\n delta = 0,\n sampleType: 'video' | 'audio',\n ) {\n return {\n ...s,\n is_idr: sampleType === 'video' && s.is_sync && isIDRFrame(s.data),\n cts: ((s.cts - delta) / s.timescale) * 1e6,\n dts: ((s.dts - delta) / s.timescale) * 1e6,\n duration: (s.duration / s.timescale) * 1e6,\n timescale: 1e6,\n // 音频数据量可控,直接保存在内存中\n data: sampleType === 'video' ? null : s.data,\n };\n }\n}\n\nclass VideoFrameFinder {\n #dec: VideoDecoder | null = null;\n constructor(\n public localFileReader: LocalFileReader,\n public samples: ExtMP4Sample[],\n public conf: VideoDecoderConfig,\n ) {}\n\n #ts = 0;\n #curAborter = { abort: false, st: performance.now() };\n find = async (time: number): Promise => {\n if (this.#dec == null || time <= this.#ts || time - this.#ts > 3e6) {\n this.#reset(time);\n }\n\n this.#curAborter.abort = true;\n this.#ts = time;\n\n this.#curAborter = { abort: false, st: performance.now() };\n return await this.#parseFrame(time, this.#dec, this.#curAborter);\n };\n\n // fix VideoFrame duration is null\n #lastVfDur = 0;\n\n #downgradeSoftDecode = false;\n #videoDecCusorIdx = 0;\n #videoFrames: VideoFrame[] = [];\n #outputFrameCnt = 0;\n #inputChunkCnt = 0;\n #parseFrame = async (\n time: number,\n dec: VideoDecoder | null,\n aborter: { abort: boolean; st: number },\n ): Promise => {\n if (dec == null || dec.state === 'closed' || aborter.abort) return null;\n\n if (this.#videoFrames.length > 0) {\n const vf = this.#videoFrames[0];\n if (time < vf.timestamp) return null;\n // 弹出第一帧\n this.#videoFrames.shift();\n // 第一帧过期,找下一帧\n if (time > vf.timestamp + (vf.duration ?? 0)) {\n vf.close();\n return await this.#parseFrame(time, dec, aborter);\n }\n\n if (this.#videoFrames.length < 10) {\n // 预解码 避免等待\n this.#startDecode(dec).catch((err) => {\n this.#reset(time);\n throw err;\n });\n }\n // 符合期望\n return vf;\n }\n\n // 缺少帧数据\n if (\n this.#decoding ||\n (this.#outputFrameCnt < this.#inputChunkCnt && dec.decodeQueueSize > 0)\n ) {\n if (performance.now() - aborter.st > 3e3) {\n throw Error(\n `MP4Clip.tick video timeout, ${JSON.stringify(this.#getState())}`,\n );\n }\n // 解码中,等待,然后重试\n await sleep(15);\n } else if (this.#videoDecCusorIdx >= this.samples.length) {\n // decode completed\n return null;\n } else {\n try {\n await this.#startDecode(dec);\n } catch (err) {\n this.#reset(time);\n throw err;\n }\n }\n return await this.#parseFrame(time, dec, aborter);\n };\n\n #decoding = false;\n #startDecode = async (dec: VideoDecoder) => {\n if (this.#decoding) return;\n this.#decoding = true;\n\n // 启动解码任务,然后重试\n let endIdx = this.#videoDecCusorIdx + 1;\n // 该 GoP 时间区间有时间匹配,且未被删除的帧\n let hasValidFrame = false;\n for (; endIdx < this.samples.length; endIdx++) {\n const s = this.samples[endIdx];\n if (!hasValidFrame && !s.deleted) {\n hasValidFrame = true;\n }\n // 找一个 GoP,所以是下一个 IDR 帧结束\n if (s.is_idr) break;\n }\n\n if (hasValidFrame) {\n const samples = this.samples.slice(this.#videoDecCusorIdx, endIdx);\n if (samples[0]?.is_idr !== true) {\n Log.warn('First sample not idr frame');\n } else {\n const chunks = await videosamples2Chunks(samples, this.localFileReader);\n // Wait for the previous asynchronous operation to complete, at which point the task may have already been terminated\n if (dec.state === 'closed') return;\n\n this.#lastVfDur = chunks[0]?.duration ?? 0;\n decodeGoP(dec, chunks, {\n onDecodingError: (err) => {\n if (this.#downgradeSoftDecode) {\n throw err;\n } else {\n this.#downgradeSoftDecode = true;\n Log.warn('Downgrade to software decode');\n this.#reset();\n }\n },\n });\n\n this.#inputChunkCnt += chunks.length;\n }\n }\n this.#videoDecCusorIdx = endIdx;\n this.#decoding = false;\n };\n\n #reset = (time?: number) => {\n this.#decoding = false;\n this.#videoFrames.forEach((f) => f.close());\n this.#videoFrames = [];\n if (time == null || time === 0) {\n this.#videoDecCusorIdx = 0;\n } else {\n let keyIdx = 0;\n for (let i = 0; i < this.samples.length; i++) {\n const s = this.samples[i];\n if (s.is_idr) keyIdx = i;\n if (s.cts < time) continue;\n this.#videoDecCusorIdx = keyIdx;\n break;\n }\n }\n this.#inputChunkCnt = 0;\n this.#outputFrameCnt = 0;\n if (this.#dec?.state !== 'closed') this.#dec?.close();\n this.#dec = new VideoDecoder({\n output: (vf) => {\n this.#outputFrameCnt += 1;\n if (vf.timestamp === -1) {\n vf.close();\n return;\n }\n let rsVf = vf;\n if (vf.duration == null) {\n rsVf = new VideoFrame(vf, {\n duration: this.#lastVfDur,\n });\n vf.close();\n }\n this.#videoFrames.push(rsVf);\n },\n error: (err) => {\n Log.error(`MP4Clip VideoDecoder err: ${err.message}`);\n },\n });\n this.#dec.configure({\n ...this.conf,\n ...(this.#downgradeSoftDecode\n ? { hardwareAcceleration: 'prefer-software' }\n : {}),\n });\n };\n\n #getState = () => ({\n time: this.#ts,\n decState: this.#dec?.state,\n decQSize: this.#dec?.decodeQueueSize,\n decCusorIdx: this.#videoDecCusorIdx,\n sampleLen: this.samples.length,\n inputCnt: this.#inputChunkCnt,\n outputCnt: this.#outputFrameCnt,\n cacheFrameLen: this.#videoFrames.length,\n softDeocde: this.#downgradeSoftDecode,\n });\n\n destroy = () => {\n if (this.#dec?.state !== 'closed') this.#dec?.close();\n this.#dec = null;\n this.#curAborter.abort = true;\n this.#videoFrames.forEach((f) => f.close());\n this.#videoFrames = [];\n this.localFileReader.close();\n };\n}\n\nclass AudioFrameFinder {\n #volume = 1;\n #sampleRate;\n constructor(\n public localFileReader: LocalFileReader,\n public samples: ExtMP4Sample[],\n public conf: AudioDecoderConfig,\n opts: { volume: number; targetSampleRate: number },\n ) {\n this.#volume = opts.volume;\n this.#sampleRate = opts.targetSampleRate;\n }\n\n #dec: ReturnType | null = null;\n #curAborter = { abort: false, st: performance.now() };\n find = async (time: number): Promise => {\n // 前后获取音频数据差异不能超过 100ms\n if (this.#dec == null || time <= this.#ts || time - this.#ts > 0.1e6) {\n this.#reset();\n this.#ts = time;\n for (let i = 0; i < this.samples.length; i++) {\n if (this.samples[i].cts < time) continue;\n this.#decCusorIdx = i;\n break;\n }\n return [];\n }\n\n this.#curAborter.abort = true;\n const deltaTime = time - this.#ts;\n this.#ts = time;\n\n this.#curAborter = { abort: false, st: performance.now() };\n return await this.#parseFrame(deltaTime, this.#dec, this.#curAborter);\n };\n\n #ts = 0;\n #decCusorIdx = 0;\n #pcmData: {\n frameCnt: number;\n data: [Float32Array, Float32Array][];\n } = {\n frameCnt: 0,\n data: [],\n };\n #parseFrame = async (\n deltaTime: number,\n dec: ReturnType | null = null,\n aborter: { abort: boolean; st: number },\n ): Promise => {\n if (dec == null || aborter.abort || dec.state === 'closed') return [];\n\n const emitFrameCnt = Math.ceil(deltaTime * (this.#sampleRate / 1e6));\n if (emitFrameCnt === 0) return [];\n\n // 数据满足需要\n const ramainFrameCnt = this.#pcmData.frameCnt - emitFrameCnt;\n if (ramainFrameCnt > 0) {\n // 剩余音频数据小于 100ms\n if (ramainFrameCnt < DEFAULT_AUDIO_CONF.sampleRate / 10) {\n this.#startDecode(dec);\n }\n return emitAudioFrames(this.#pcmData, emitFrameCnt);\n }\n\n if (dec.decodeQueueSize > 10) {\n if (performance.now() - aborter.st > 3e3) {\n aborter.abort = true;\n throw Error(\n `MP4Clip.tick audio timeout, ${JSON.stringify(this.#getState())}`,\n );\n }\n // 解码中,等待\n await sleep(15);\n } else if (this.#decCusorIdx >= this.samples.length - 1) {\n // decode completed\n return [];\n } else {\n this.#startDecode(dec);\n }\n return this.#parseFrame(deltaTime, dec, aborter);\n };\n\n #startDecode = (dec: ReturnType) => {\n if (dec.decodeQueueSize > 100) return;\n // 启动解码任务\n const samples = [];\n let i = this.#decCusorIdx;\n while (i < this.samples.length) {\n const s = this.samples[i];\n i += 1;\n if (s.deleted) continue;\n samples.push(s);\n if (samples.length >= 10) break;\n }\n this.#decCusorIdx = i;\n\n dec.decode(\n samples.map(\n (s) =>\n new EncodedAudioChunk({\n type: 'key',\n timestamp: s.cts,\n duration: s.duration,\n data: s.data!,\n }),\n ),\n );\n };\n\n #reset = () => {\n this.#ts = 0;\n this.#decCusorIdx = 0;\n this.#pcmData = {\n frameCnt: 0,\n data: [],\n };\n this.#dec?.close();\n this.#dec = createAudioChunksDecoder(\n this.conf,\n {\n resampleRate: DEFAULT_AUDIO_CONF.sampleRate,\n volume: this.#volume,\n },\n (pcmArr) => {\n this.#pcmData.data.push(pcmArr as [Float32Array, Float32Array]);\n this.#pcmData.frameCnt += pcmArr[0].length;\n },\n );\n };\n\n #getState = () => ({\n time: this.#ts,\n decState: this.#dec?.state,\n decQSize: this.#dec?.decodeQueueSize,\n decCusorIdx: this.#decCusorIdx,\n sampleLen: this.samples.length,\n pcmLen: this.#pcmData.frameCnt,\n });\n\n destroy = () => {\n this.#dec = null;\n this.#curAborter.abort = true;\n this.#pcmData = {\n frameCnt: 0,\n data: [],\n };\n this.localFileReader.close();\n };\n}\n\nfunction createAudioChunksDecoder(\n decoderConf: AudioDecoderConfig,\n opts: { resampleRate: number; volume: number },\n outputCb: (pcm: Float32Array[]) => void,\n) {\n const outputHandler = (pcmArr: Float32Array[]) => {\n if (pcmArr.length === 0) return;\n // 音量调节\n if (opts.volume !== 1) {\n for (const pcm of pcmArr)\n for (let i = 0; i < pcm.length; i++) pcm[i] *= opts.volume;\n }\n\n // 补齐双声道\n if (pcmArr.length === 1) pcmArr = [pcmArr[0], pcmArr[0]];\n\n outputCb(pcmArr);\n };\n const resampleQ = createPromiseQueue(outputHandler);\n\n const needResample = opts.resampleRate !== decoderConf.sampleRate;\n const adec = new AudioDecoder({\n output: (ad) => {\n const pcm = extractPCM4AudioData(ad);\n if (needResample) {\n resampleQ(() =>\n audioResample(pcm, ad.sampleRate, {\n rate: opts.resampleRate,\n chanCount: ad.numberOfChannels,\n }),\n );\n } else {\n outputHandler(pcm);\n }\n ad.close();\n },\n error: (err) => {\n Log.error(`MP4Clip AudioDecoder err: ${err.message}`);\n },\n });\n adec.configure(decoderConf);\n\n return {\n decode(chunks: EncodedAudioChunk[]) {\n for (const chunk of chunks) adec.decode(chunk);\n },\n close() {\n if (adec.state !== 'closed') adec.close();\n },\n get state() {\n return adec.state;\n },\n get decodeQueueSize() {\n return adec.decodeQueueSize;\n },\n };\n}\n\n// 并行执行任务,但按顺序emit结果\nfunction createPromiseQueue(onResult: (data: T) => void) {\n const rsCache: T[] = [];\n let waitingIdx = 0;\n\n function updateRs(rs: T, emitIdx: number) {\n rsCache[emitIdx] = rs;\n emitRs();\n }\n\n function emitRs() {\n const rs = rsCache[waitingIdx];\n if (rs == null) return;\n onResult(rs);\n\n waitingIdx += 1;\n emitRs();\n }\n\n let addIdx = 0;\n return (task: () => Promise) => {\n const emitIdx = addIdx;\n addIdx += 1;\n task()\n .then((rs) => updateRs(rs, emitIdx))\n .catch((err) => updateRs(err, emitIdx));\n };\n}\n\nfunction emitAudioFrames(\n pcmData: { frameCnt: number; data: [Float32Array, Float32Array][] },\n emitCnt: number,\n) {\n // todo: perf 重复利用内存空间\n const audio = [new Float32Array(emitCnt), new Float32Array(emitCnt)];\n let offset = 0;\n let i = 0;\n for (; i < pcmData.data.length; ) {\n const [chan0, chan1] = pcmData.data[i];\n if (offset + chan0.length > emitCnt) {\n const gapCnt = emitCnt - offset;\n audio[0].set(chan0.subarray(0, gapCnt), offset);\n audio[1].set(chan1.subarray(0, gapCnt), offset);\n pcmData.data[i][0] = chan0.subarray(gapCnt, chan0.length);\n pcmData.data[i][1] = chan1.subarray(gapCnt, chan1.length);\n break;\n } else {\n audio[0].set(chan0, offset);\n audio[1].set(chan1, offset);\n offset += chan0.length;\n i++;\n }\n }\n pcmData.data = pcmData.data.slice(i);\n pcmData.frameCnt -= emitCnt;\n return audio;\n}\n\nasync function videosamples2Chunks(\n samples: ExtMP4Sample[],\n reader: Awaited>,\n): Promise {\n const first = samples[0];\n const last = samples.at(-1);\n if (last == null) return [];\n\n const rangSize = last.offset + last.size - first.offset;\n if (rangSize < 30e6) {\n // 单次读取数据小于 30M,就一次性读取数据,降低 IO 频次\n const data = new Uint8Array(\n await reader.read(rangSize, { at: first.offset }),\n );\n return samples.map((s) => {\n const offset = s.offset - first.offset;\n let sData = data.subarray(offset, offset + s.size);\n if (s.is_idr) sData = removeSEIForIDR(sData);\n return new EncodedVideoChunk({\n type: s.is_sync ? 'key' : 'delta',\n timestamp: s.cts,\n duration: s.duration,\n data: sData,\n });\n });\n }\n\n return await Promise.all(\n samples.map(async (s) => {\n let sData = await reader.read(s.size, {\n at: s.offset,\n });\n if (s.is_idr) sData = removeSEIForIDR(new Uint8Array(sData));\n return new EncodedVideoChunk({\n type: s.is_sync ? 'key' : 'delta',\n timestamp: s.cts,\n duration: s.duration,\n data: sData,\n });\n }),\n );\n}\n\nfunction createVF2BlobConvtr(\n width: number,\n height: number,\n opts?: ImageEncodeOptions,\n) {\n const cvs = new OffscreenCanvas(width, height);\n const ctx = cvs.getContext('2d')!;\n\n return async (vf: VideoFrame) => {\n ctx.drawImage(vf, 0, 0, width, height);\n vf.close();\n const blob = await cvs.convertToBlob(opts);\n return blob;\n };\n}\n\nfunction splitVideoSampleByTime(videoSamples: ExtMP4Sample[], time: number) {\n if (videoSamples.length === 0) return [];\n let gopStartIdx = 0;\n let gopEndIdx = 0;\n let hitIdx = -1;\n for (let i = 0; i < videoSamples.length; i++) {\n const s = videoSamples[i];\n if (hitIdx === -1 && time < s.cts) hitIdx = i - 1;\n if (s.is_idr) {\n if (hitIdx === -1) {\n gopStartIdx = i;\n } else {\n gopEndIdx = i;\n break;\n }\n }\n }\n\n const hitSample = videoSamples[hitIdx];\n if (hitSample == null) throw Error('Not found video sample by time');\n\n const preSlice = videoSamples\n .slice(0, gopEndIdx === 0 ? videoSamples.length : gopEndIdx)\n .map((s) => ({ ...s }));\n for (let i = gopStartIdx; i < preSlice.length; i++) {\n const s = preSlice[i];\n if (time < s.cts) {\n s.deleted = true;\n s.cts = -1;\n }\n }\n\n const postSlice = videoSamples\n .slice(hitSample.is_idr ? gopEndIdx : gopStartIdx)\n .map((s) => ({ ...s, cts: s.cts - time }));\n\n for (const s of postSlice) {\n if (s.cts >= 0) break;\n // 将第一个 GoP 中前半部分标记为 deleted\n s.deleted = true;\n s.cts = -1;\n }\n\n return [preSlice, postSlice];\n}\n\nfunction splitAudioSampleByTime(audioSamples: ExtMP4Sample[], time: number) {\n if (audioSamples.length === 0) return [];\n let hitIdx = -1;\n for (let i = 0; i < audioSamples.length; i++) {\n const s = audioSamples[i];\n if (time > s.cts) continue;\n hitIdx = i;\n break;\n }\n if (hitIdx === -1) throw Error('Not found audio sample by time');\n const preSlice = audioSamples.slice(0, hitIdx);\n const postSlice = audioSamples\n .slice(hitIdx)\n .map((s) => ({ ...s, cts: s.cts - time }));\n return [preSlice, postSlice];\n}\n\n// 兼容解码错误\nfunction decodeGoP(\n dec: VideoDecoder,\n chunks: EncodedVideoChunk[],\n opts: {\n onDecodingError?: (err: Error) => void;\n },\n) {\n let i = 0;\n if (dec.state !== 'configured') return;\n for (; i < chunks.length; i++) dec.decode(chunks[i]);\n\n // windows 某些设备 flush 可能不会被 resolved,所以不能 await flush\n dec.flush().catch((err) => {\n if (!(err instanceof Error)) throw err;\n if (\n err.message.includes('Decoding error') &&\n opts.onDecodingError != null\n ) {\n opts.onDecodingError(err);\n return;\n }\n // reset 中断解码器,预期会抛出 AbortedError\n if (!err.message.includes('Aborted due to close')) {\n throw err;\n }\n });\n}\n\n// 当 IDR 帧前面携带其它数据(如 SEI)可能导致解码失败\nfunction removeSEIForIDR(u8buf: Uint8Array) {\n const dv = new DataView(u8buf.buffer);\n if ((dv.getUint8(4) & 0x1f) === 6) {\n return u8buf.subarray(dv.getUint32(0) + 4);\n }\n return u8buf;\n}\n\nfunction isIDRFrame(u8Arr: Uint8Array) {\n const dv = new DataView(u8Arr.buffer);\n let i = 0;\n for (; i < u8Arr.byteLength - 4; ) {\n if ((dv.getUint8(i + 4) & 0x1f) === 5) return true;\n // 跳至下一个 NALU 继续检查\n i += dv.getUint32(i) + 4;\n }\n return false;\n}\n\nasync function thumbnailByKeyFrame(\n samples: ExtMP4Sample[],\n localFile: OPFSToolFile,\n decConf: VideoDecoderConfig,\n abortSingl: AbortSignal,\n time: { start: number; end: number },\n onOutput: (vf: VideoFrame, done: boolean) => void,\n) {\n const fileReader = await localFile.createReader();\n let cnt = 0;\n const dec = new VideoDecoder({\n output: (vf) => {\n cnt += 1;\n const done = cnt === chunks.length;\n onOutput(vf, done);\n if (done) fileReader.close();\n },\n error: Log.error,\n });\n abortSingl.addEventListener('abort', () => {\n fileReader.close();\n dec.close();\n });\n\n const chunks = await videosamples2Chunks(\n samples.filter(\n (s) =>\n !s.deleted && s.is_sync && s.cts >= time.start && s.cts <= time.end,\n ),\n fileReader,\n );\n if (chunks.length === 0 || abortSingl.aborted) return;\n\n dec.configure(decConf);\n decodeGoP(dec, chunks, {});\n}\n","import { decodeImg } from '../av-utils';\nimport { Log } from '../log';\nimport { IClip } from './iclip';\n\ntype AnimateImgType = 'avif' | 'webp' | 'png' | 'gif';\n\n/**\n * 图像素材,支持动图\n *\n * 普通文字可通过 {@link renderTxt2ImgBitmap} 转换成图片素材\n *\n * @example\n * new ImgClip((await fetch('')).body);\n *\n * @example\n * new ImgClip(\n * await renderTxt2ImgBitmap(\n * '水印',\n * `font-size:40px; color: white; text-shadow: 2px 2px 6px red;`,\n * )\n * )\n *\n * @see [视频合成](https://bilibili.github.io/WebAV/demo/2_1-concat-video)\n */\nexport class ImgClip implements IClip {\n ready: IClip['ready'];\n\n #meta = {\n // 微秒\n duration: 0,\n width: 0,\n height: 0,\n };\n\n /**\n * ⚠️ 静态图片的 duration 为 Infinity\n *\n * 使用 Sprite 包装时需要将它的 duration 设置为有限数\n *\n */\n get meta() {\n return { ...this.#meta };\n }\n\n #img: ImageBitmap | null = null;\n\n #frames: VideoFrame[] = [];\n\n /**\n * 静态图片可使用流、ImageBitmap 初始化\n *\n * 动图需要使用 VideoFrame[] 或提供图片类型\n */\n constructor(\n dataSource:\n | ReadableStream\n | ImageBitmap\n | VideoFrame[]\n | { type: `image/${AnimateImgType}`; stream: ReadableStream },\n ) {\n const initWithImgBitmap = (imgBitmap: ImageBitmap) => {\n this.#img = imgBitmap;\n this.#meta.width = imgBitmap.width;\n this.#meta.height = imgBitmap.height;\n this.#meta.duration = Infinity;\n return { ...this.#meta };\n };\n\n if (dataSource instanceof ReadableStream) {\n this.ready = new Response(dataSource)\n .blob()\n .then((data) => createImageBitmap(data))\n .then(initWithImgBitmap);\n } else if (dataSource instanceof ImageBitmap) {\n this.ready = Promise.resolve(initWithImgBitmap(dataSource));\n } else if (\n Array.isArray(dataSource) &&\n dataSource.every((it) => it instanceof VideoFrame)\n ) {\n this.#frames = dataSource;\n const frame = this.#frames[0];\n if (frame == null) throw Error('The frame count must be greater than 0');\n this.#meta = {\n width: frame.displayWidth,\n height: frame.displayHeight,\n duration: this.#frames.reduce(\n (acc, cur) => acc + (cur.duration ?? 0),\n 0,\n ),\n };\n this.ready = Promise.resolve({ ...this.#meta, duration: Infinity });\n } else if ('type' in dataSource) {\n this.ready = this.#initAnimateImg(\n dataSource.stream,\n dataSource.type,\n ).then(() => ({\n width: this.#meta.width,\n height: this.#meta.height,\n duration: Infinity,\n }));\n } else {\n throw Error('Illegal arguments');\n }\n }\n\n async #initAnimateImg(\n stream: ReadableStream,\n type: `image/${AnimateImgType}`,\n ) {\n this.#frames = await decodeImg(stream, type);\n const firstVf = this.#frames[0];\n if (firstVf == null) throw Error('No frame available in gif');\n\n this.#meta = {\n duration: this.#frames.reduce((acc, cur) => acc + (cur.duration ?? 0), 0),\n width: firstVf.codedWidth,\n height: firstVf.codedHeight,\n };\n Log.info('ImgClip ready:', this.#meta);\n }\n\n async tick(time: number): Promise<{\n video: ImageBitmap | VideoFrame;\n state: 'success';\n }> {\n if (this.#img != null) {\n return {\n video: await createImageBitmap(this.#img),\n state: 'success',\n };\n }\n const tt = time % this.#meta.duration;\n return {\n video: (\n this.#frames.find(\n (f) => tt >= f.timestamp && tt <= f.timestamp + (f.duration ?? 0),\n ) ?? this.#frames[0]\n ).clone(),\n state: 'success',\n };\n }\n\n async split(time: number) {\n await this.ready;\n if (this.#img != null) {\n return [\n new ImgClip(await createImageBitmap(this.#img)),\n new ImgClip(await createImageBitmap(this.#img)),\n ] as [this, this];\n }\n let hitIdx = -1;\n for (let i = 0; i < this.#frames.length; i++) {\n const vf = this.#frames[i];\n if (time > vf.timestamp) continue;\n hitIdx = i;\n break;\n }\n if (hitIdx === -1) throw Error('Not found frame by time');\n const preSlice = this.#frames\n .slice(0, hitIdx)\n .map((vf) => new VideoFrame(vf));\n const postSlice = this.#frames.slice(hitIdx).map(\n (vf) =>\n new VideoFrame(vf, {\n timestamp: vf.timestamp - time,\n }),\n );\n return [new ImgClip(preSlice), new ImgClip(postSlice)] as [this, this];\n }\n\n async clone() {\n await this.ready;\n const data =\n this.#img == null\n ? this.#frames.map((vf) => vf.clone())\n : await createImageBitmap(this.#img);\n return new ImgClip(data) as this;\n }\n\n destroy(): void {\n Log.info('ImgClip destroy');\n this.#img?.close();\n this.#frames.forEach((f) => f.close());\n }\n}\n","import {\n concatPCMFragments,\n extractPCM4AudioBuffer,\n ringSliceFloat32Array,\n} from '../av-utils';\nimport { Log } from '../log';\nimport { DEFAULT_AUDIO_CONF, IClip } from './iclip';\n\ninterface IAudioClipOpts {\n loop?: boolean;\n volume?: number;\n}\n\n/**\n * 音频素材,为创建、编辑音视频功能提供音频数据\n *\n * @example\n * new AudioClip((await fetch('')).body, {\n * loop: true,\n * }),\n */\nexport class AudioClip implements IClip {\n static ctx: AudioContext | null = null;\n\n ready: IClip['ready'];\n\n #meta = {\n // 微秒\n duration: 0,\n width: 0,\n height: 0,\n };\n\n /**\n * 音频元信息\n *\n * ⚠️ 注意,这里是转换后(标准化)的元信息,非原始音频元信息\n */\n get meta() {\n return {\n ...this.#meta,\n sampleRate: DEFAULT_AUDIO_CONF.sampleRate,\n chanCount: 2,\n };\n }\n\n #chan0Buf = new Float32Array();\n #chan1Buf = new Float32Array();\n /**\n * 获取音频素材完整的 PCM 数据\n */\n getPCMData(): Float32Array[] {\n return [this.#chan0Buf, this.#chan1Buf];\n }\n\n #opts;\n\n /**\n *\n * @param dataSource 音频文件流\n * @param opts 音频配置,控制音量、是否循环\n */\n constructor(\n dataSource: ReadableStream | Float32Array[],\n opts: IAudioClipOpts = {},\n ) {\n this.#opts = {\n loop: false,\n volume: 1,\n ...opts,\n };\n\n this.ready = this.#init(dataSource).then(() => ({\n // audio 没有宽高,无需绘制\n width: 0,\n height: 0,\n duration: opts.loop ? Infinity : this.#meta.duration,\n }));\n }\n\n async #init(\n dataSource: ReadableStream | Float32Array[],\n ): Promise {\n if (AudioClip.ctx == null) {\n AudioClip.ctx = new AudioContext({\n sampleRate: DEFAULT_AUDIO_CONF.sampleRate,\n });\n }\n\n const tStart = performance.now();\n const pcm =\n dataSource instanceof ReadableStream\n ? await parseStream2PCM(dataSource, AudioClip.ctx)\n : dataSource;\n\n Log.info('Audio clip decoded complete:', performance.now() - tStart);\n\n const volume = this.#opts.volume;\n if (volume !== 1) {\n for (const chan of pcm)\n for (let i = 0; i < chan.length; i += 1) chan[i] *= volume;\n }\n\n this.#meta.duration = (pcm[0].length / DEFAULT_AUDIO_CONF.sampleRate) * 1e6;\n\n this.#chan0Buf = pcm[0];\n // 单声道 转 立体声\n this.#chan1Buf = pcm[1] ?? this.#chan0Buf;\n\n Log.info(\n 'Audio clip convert to AudioData, time:',\n performance.now() - tStart,\n );\n }\n\n // 微秒\n #ts = 0;\n #frameOffset = 0;\n /**\n * 返回上次与当前时刻差对应的音频 PCM 数据;\n *\n * 若差值超过 3s 或当前时间小于上次时间,则重置状态\n * @example\n * tick(0) // => []\n * tick(1e6) // => [leftChanPCM(1s), rightChanPCM(1s)]\n *\n */\n async tick(time: number): Promise<{\n audio: Float32Array[];\n state: 'success' | 'done';\n }> {\n if (!this.#opts.loop && time >= this.#meta.duration) {\n // 待观察:如果time跨度较大,返回done,理论上会丢失一些音频帧\n return { audio: [], state: 'done' };\n }\n\n const deltaTime = time - this.#ts;\n\n // reset\n if (time < this.#ts || deltaTime > 3e6) {\n this.#ts = time;\n this.#frameOffset = Math.ceil(\n (this.#ts / 1e6) * DEFAULT_AUDIO_CONF.sampleRate,\n );\n return {\n audio: [new Float32Array(0), new Float32Array(0)],\n state: 'success',\n };\n }\n\n this.#ts = time;\n const frameCnt = Math.ceil(\n (deltaTime / 1e6) * DEFAULT_AUDIO_CONF.sampleRate,\n );\n const endIdx = this.#frameOffset + frameCnt;\n const audio = this.#opts.loop\n ? [\n ringSliceFloat32Array(this.#chan0Buf, this.#frameOffset, endIdx),\n ringSliceFloat32Array(this.#chan1Buf, this.#frameOffset, endIdx),\n ]\n : [\n this.#chan0Buf.slice(this.#frameOffset, endIdx),\n this.#chan1Buf.slice(this.#frameOffset, endIdx),\n ];\n this.#frameOffset = endIdx;\n\n return { audio, state: 'success' };\n }\n\n /**\n * 按指定时间切割,返回前后两个音频素材\n * @param time 时间,单位微秒\n */\n async split(time: number) {\n await this.ready;\n const frameCnt = Math.ceil((time / 1e6) * DEFAULT_AUDIO_CONF.sampleRate);\n const preSlice = new AudioClip(\n this.getPCMData().map((chan) => chan.slice(0, frameCnt)),\n this.#opts,\n );\n const postSlice = new AudioClip(\n this.getPCMData().map((chan) => chan.slice(frameCnt)),\n this.#opts,\n );\n return [preSlice, postSlice] as [this, this];\n }\n\n async clone() {\n await this.ready;\n const clip = new AudioClip(this.getPCMData(), this.#opts) as this;\n await clip.ready;\n return clip;\n }\n\n /**\n * 销毁实例,释放资源\n */\n destroy(): void {\n this.#chan0Buf = new Float32Array(0);\n this.#chan1Buf = new Float32Array(0);\n Log.info('---- audioclip destroy ----');\n }\n}\n\n/**\n * 拼接多个 AudioClip\n */\nexport async function concatAudioClip(\n clips: AudioClip[],\n opts?: IAudioClipOpts,\n) {\n const bufs: Float32Array[][] = [];\n for (const clip of clips) {\n await clip.ready;\n bufs.push(clip.getPCMData());\n }\n return new AudioClip(concatPCMFragments(bufs), opts);\n}\n\nasync function parseStream2PCM(\n stream: ReadableStream,\n ctx: AudioContext | OfflineAudioContext,\n): Promise {\n const buf = await new Response(stream).arrayBuffer();\n return extractPCM4AudioBuffer(await ctx.decodeAudioData(buf));\n}\n","import { autoReadStream } from '../av-utils';\nimport { IClip } from './iclip';\n\n/**\n * 包装实时音视频流,仅用于 [AVCanvas](../../av-canvas/classes/AVCanvas.html)\n *\n * ⚠️ 不可用于 {@link Combinator} ,因为后台合成视频的速度是快于物理时间的,实时流无法提供非实时的数据\n *\n * @example\n * const spr = new VisibleSprite(\n * new MediaStreamClip(\n * await navigator.mediaDevices.getUserMedia({ video: true, audio: true, }),\n * ),\n * );\n * await avCvs.addSprite(spr);\n */\nexport class MediaStreamClip implements IClip {\n static ctx: AudioContext | null = null;\n\n ready: IClip['ready'];\n\n #meta = {\n // 微秒\n duration: 0,\n width: 0,\n height: 0,\n };\n\n get meta() {\n return {\n ...this.#meta,\n };\n }\n\n #stopRenderCvs = () => {};\n\n /**\n * 实时流的音轨\n */\n readonly audioTrack: MediaStreamAudioTrack | null;\n\n #cvs: OffscreenCanvas | null = null;\n\n #ms: MediaStream;\n constructor(ms: MediaStream) {\n this.#ms = ms;\n const videoTrack = ms.getVideoTracks()[0];\n if (videoTrack != null) {\n const { width, height } = videoTrack.getSettings();\n videoTrack.contentHint = 'motion';\n this.#meta.width = width ?? 0;\n this.#meta.height = height ?? 0;\n\n this.#cvs = new OffscreenCanvas(width ?? 0, height ?? 0);\n this.#stopRenderCvs = renderVideoTrackToCvs(\n this.#cvs.getContext('2d')!,\n videoTrack,\n );\n }\n\n this.audioTrack = ms.getAudioTracks()[0] ?? null;\n\n this.#meta.duration = Infinity;\n this.ready = Promise.resolve(this.meta);\n }\n\n async tick(): Promise<{\n video: ImageBitmap | null;\n audio: Float32Array[];\n state: 'success';\n }> {\n return {\n video: this.#cvs == null ? null : await createImageBitmap(this.#cvs),\n audio: [],\n state: 'success',\n };\n }\n\n async split() {\n return [await this.clone(), await this.clone()] as [this, this];\n }\n\n async clone() {\n return new MediaStreamClip(this.#ms.clone()) as this;\n }\n\n destroy(): void {\n this.#ms.getTracks().forEach((t) => t.stop());\n this.#stopRenderCvs();\n }\n}\n\nfunction renderVideoTrackToCvs(\n cvsCtx: OffscreenCanvasRenderingContext2D,\n track: MediaStreamVideoTrack,\n) {\n return autoReadStream(\n new MediaStreamTrackProcessor({\n track,\n }).readable,\n {\n onChunk: async (frame) => {\n cvsCtx.drawImage(frame, 0, 0);\n frame.close();\n },\n onDone: async () => {},\n },\n );\n}\n","import { IClip } from './iclip';\n\ninterface IEmbedSubtitlesOpts {\n color?: string;\n textBgColor?: string | null;\n type?: 'srt';\n fontFamily?: string;\n fontSize?: number;\n letterSpacing?: string | null;\n // 字幕偏离底部的距离\n bottomOffset?: number;\n strokeStyle?: string;\n lineWidth?: number | null;\n lineCap?: CanvasLineCap | null;\n lineJoin?: CanvasLineJoin | null;\n textShadow?: {\n offsetX: number;\n offsetY: number;\n blur: number;\n color: string;\n };\n videoWidth: number;\n videoHeight: number;\n}\n\ndeclare global {\n interface OffscreenCanvasRenderingContext2D {\n letterSpacing: string;\n }\n}\n\ninterface SubtitleStruct {\n start: number;\n end: number;\n text: string;\n}\n\n/**\n * 嵌入式字幕,将字幕(目前仅支持 SRT 格式)嵌入视频画面中\n *\n * @example\n * const es = new EmbedSubtitlesClip(srtSubtitleStr, {\n * videoWidth: 1280,\n * videoHeight: 720,\n * fontFamily: 'Noto Sans SC',\n * color: 'white',\n * });\n */\nexport class EmbedSubtitlesClip implements IClip {\n ready: IClip['ready'];\n\n #subtitles: SubtitleStruct[] = [];\n\n #meta = {\n width: 0,\n height: 0,\n duration: 0,\n };\n\n get meta() {\n return { ...this.#meta };\n }\n\n #opts: Required = {\n color: '#FFF',\n textBgColor: null,\n type: 'srt',\n fontSize: 30,\n letterSpacing: null,\n bottomOffset: 30,\n fontFamily: 'Noto Sans SC',\n strokeStyle: '#000',\n lineWidth: null,\n lineCap: null,\n lineJoin: null,\n textShadow: {\n offsetX: 2,\n offsetY: 2,\n blur: 4,\n color: '#000',\n },\n videoWidth: 1280,\n videoHeight: 720,\n };\n\n #cvs: OffscreenCanvas;\n #ctx: OffscreenCanvasRenderingContext2D;\n\n #lastVF: VideoFrame | null = null;\n\n #lineHeight = 0;\n #linePadding = 0;\n\n constructor(content: string | SubtitleStruct[], opts: IEmbedSubtitlesOpts) {\n this.#subtitles = Array.isArray(content)\n ? content\n : parseSrt(content).map(({ start, end, text }) => ({\n start: start * 1e6,\n end: end * 1e6,\n text,\n }));\n if (this.#subtitles.length === 0) throw Error('No subtitles content');\n\n this.#opts = Object.assign(this.#opts, opts);\n // 如果需要绘制背景,则需要给文字添加边距\n this.#linePadding =\n opts.textBgColor == null ? 0 : (opts.fontSize ?? 50) * 0.2;\n\n const { fontSize, fontFamily, videoWidth, videoHeight, letterSpacing } =\n this.#opts;\n this.#lineHeight = fontSize + this.#linePadding * 2;\n this.#cvs = new OffscreenCanvas(videoWidth, videoHeight);\n this.#ctx = this.#cvs.getContext('2d')!;\n this.#ctx.font = `${fontSize}px ${fontFamily}`;\n this.#ctx.textAlign = 'center';\n this.#ctx.textBaseline = 'top';\n this.#ctx.letterSpacing = letterSpacing ?? '0px';\n\n this.#meta = {\n width: videoWidth,\n height: videoHeight,\n duration: this.#subtitles.at(-1)?.end ?? 0,\n };\n // 字幕的宽高 由视频画面内容决定\n this.ready = Promise.resolve(this.meta);\n }\n\n #renderTxt(txt: string) {\n const lines = txt\n .split('\\n')\n .reverse()\n .map((t) => t.trim());\n\n const { width, height } = this.#cvs;\n\n const {\n color,\n fontSize,\n textBgColor,\n textShadow,\n strokeStyle,\n lineWidth,\n lineCap,\n lineJoin,\n bottomOffset,\n } = this.#opts;\n const ctx = this.#ctx;\n\n ctx.clearRect(0, 0, width, height);\n ctx.globalAlpha = 0.6;\n // 测试canvas背景\n // ctx.fillStyle = 'red'\n // ctx.fillRect(0, 0, this.#cvs.width, this.#cvs.height)\n\n let bottomDistance = bottomOffset;\n for (const lineStr of lines) {\n const txtMeas = ctx.measureText(lineStr);\n const centerX = width / 2;\n if (textBgColor != null) {\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n ctx.shadowBlur = 0;\n // 字幕背景\n ctx.fillStyle = textBgColor;\n ctx.globalAlpha = 0.5;\n ctx.fillRect(\n centerX - txtMeas.actualBoundingBoxLeft - this.#linePadding,\n height - bottomDistance - this.#lineHeight,\n txtMeas.width + this.#linePadding * 2,\n this.#lineHeight,\n );\n } else {\n }\n\n ctx.shadowColor = textShadow.color;\n ctx.shadowOffsetX = textShadow.offsetX;\n ctx.shadowOffsetY = textShadow.offsetY;\n ctx.shadowBlur = textShadow.blur;\n\n ctx.globalAlpha = 1;\n\n if (strokeStyle != null) {\n ctx.lineWidth = lineWidth ?? fontSize / 6;\n if (lineCap != null) ctx.lineCap = lineCap;\n if (lineJoin != null) ctx.lineJoin = lineJoin;\n ctx.strokeStyle = strokeStyle;\n ctx.strokeText(\n lineStr,\n centerX,\n height - bottomDistance - this.#lineHeight + this.#linePadding,\n );\n }\n\n ctx.fillStyle = color;\n ctx.fillText(\n lineStr,\n centerX,\n height - bottomDistance - this.#lineHeight + this.#linePadding,\n );\n\n // 多行,底部偏移距离叠加\n bottomDistance += this.#lineHeight + fontSize * 0.2;\n }\n }\n\n /**\n * @see {@link IClip.tick}\n */\n async tick(time: number): Promise<{\n video?: VideoFrame;\n state: 'done' | 'success';\n }> {\n if (\n this.#lastVF != null &&\n time >= this.#lastVF.timestamp &&\n time <= this.#lastVF.timestamp + (this.#lastVF.duration ?? 0)\n ) {\n return { video: this.#lastVF.clone(), state: 'success' };\n }\n\n let i = 0;\n for (; i < this.#subtitles.length; i += 1) {\n if (time <= this.#subtitles[i].end) break;\n }\n\n const it = this.#subtitles[i] ?? this.#subtitles.at(-1);\n if (time > it.end) return { state: 'done' };\n if (time < it.start) {\n // 此时无字幕内容,清空画布\n this.#ctx.clearRect(0, 0, this.#cvs.width, this.#cvs.height);\n const vf = new VideoFrame(this.#cvs, {\n timestamp: time,\n // 直到下个字幕出现的时机\n duration: it.start - time,\n });\n this.#lastVF?.close();\n this.#lastVF = vf;\n\n return { video: vf.clone(), state: 'success' };\n }\n\n this.#renderTxt(it.text);\n\n const vf = new VideoFrame(this.#cvs, {\n timestamp: time,\n duration: it.end - time,\n });\n this.#lastVF?.close();\n this.#lastVF = vf;\n\n return { video: vf.clone(), state: 'success' };\n }\n\n /**\n * @see {@link IClip.destroy}\n */\n async split(time: number) {\n await this.ready;\n let hitIdx = -1;\n for (let i = 0; i < this.#subtitles.length; i++) {\n const sub = this.#subtitles[i];\n if (time > sub.start) continue;\n hitIdx = i;\n break;\n }\n if (hitIdx === -1) throw Error('Not found subtitle by time');\n const preSlice = this.#subtitles.slice(0, hitIdx).map((s) => ({ ...s }));\n let preLastIt = preSlice.at(-1);\n let postFirstIt = null;\n // 切割时间命中字幕区间,需要将当前字幕元素拆成前后两份\n if (preLastIt != null && preLastIt.end > time) {\n postFirstIt = {\n start: 0,\n end: preLastIt.end - time,\n text: preLastIt.text,\n };\n\n preLastIt.end = time;\n }\n const postSlice = this.#subtitles\n .slice(hitIdx)\n .map((s) => ({ ...s, start: s.start - time, end: s.end - time }));\n if (postFirstIt != null) postSlice.unshift(postFirstIt);\n return [\n new EmbedSubtitlesClip(preSlice, this.#opts),\n new EmbedSubtitlesClip(postSlice, this.#opts),\n ] as [this, this];\n }\n\n /**\n * @see {@link IClip.clone}\n */\n async clone() {\n return new EmbedSubtitlesClip(this.#subtitles.slice(0), this.#opts) as this;\n }\n\n /**\n * @see {@link IClip.destroy}\n */\n destroy() {\n this.#lastVF?.close();\n }\n}\n\n// SRT字幕格式 https://www.cnblogs.com/tocy/p/subtitle-format-srt.html\nfunction srtTimeToSeconds(time: string) {\n const match = time.match(/(\\d{2}):(\\d{2}):(\\d{2}),(\\d{3})/);\n if (match == null) throw Error(`time format error: ${time}`);\n\n const hours = Number(match[1]);\n const minutes = Number(match[2]);\n const seconds = Number(match[3]);\n const milliseconds = Number(match[4]);\n\n return hours * 60 * 60 + minutes * 60 + seconds + milliseconds / 1000;\n}\n\nfunction parseSrt(srt: string) {\n return (\n srt\n .split(/\\r|\\n/)\n .map((s) => s.trim())\n .filter((str) => str.length > 0)\n // 匹配时间戳标记行,匹配失败的为字幕内容\n .map((s) => ({\n lineStr: s,\n match: s.match(\n /(\\d{2}:\\d{2}:\\d{2},\\d{3}) --> (\\d{2}:\\d{2}:\\d{2},\\d{3})/,\n ),\n }))\n // 过滤掉时间上一行的数字标记\n .filter(\n ({ lineStr }, idx, source) =>\n !(/^\\d+$/.test(lineStr) && source[idx + 1]?.match != null),\n )\n // 按时间标记行聚合,拼接字幕内容到 text 字段\n .reduce(\n (acc, { lineStr, match }) => {\n if (match == null) {\n const last = acc.at(-1);\n if (last == null) return acc;\n\n last.text += last.text.length === 0 ? lineStr : `\\n${lineStr}`;\n } else {\n acc.push({\n start: srtTimeToSeconds(match[1]),\n end: srtTimeToSeconds(match[2]),\n text: '',\n });\n }\n\n return acc;\n },\n [] as Array<{\n start: number;\n end: number;\n text: string;\n }>,\n )\n );\n}\n","type EventKey = string | symbol;\n\ntype EventToolType = Record any>;\n\n/**\n * 事件工具类\n *\n * @example\n * const evtTool = new EventTool<{\n * timeupdate: (time: number) => void;\n * paused: () => void;\n * playing: () => void;\n * }>()\n * evtTool.on('paused', () => {})\n * evtTool.emit('paused')\n */\nexport class EventTool {\n /**\n * 在两个 EventTool 实例间转发消息\n * @param from\n * @param to\n * @param evtTypes 需转发的消息类型\n *\n * @example\n * EventTool.forwardEvent(from, to, ['evtName']),\n */\n static forwardEvent<\n T1 extends EventToolType,\n T2 extends EventToolType,\n EvtType extends (keyof T1 | [keyof T1, keyof T2])[],\n >(\n from: { on: EventTool['on'] },\n to: { emit: EventTool['emit'] },\n // 转发的事件名,如果 evtTypes 为序对(元组)表示事件名称需要映射\n evtTypes: EvtType,\n ): () => void {\n const removeHandlers = evtTypes.map((evtType) => {\n const [fromEvtType, toEvtType] = (\n Array.isArray(evtType) ? evtType : [evtType, evtType]\n ) as [keyof T1, keyof T2];\n\n // @ts-expect-error\n return from.on(fromEvtType, (...args) => {\n // @ts-expect-error\n to.emit(toEvtType, ...args);\n });\n });\n return () => {\n removeHandlers.forEach((fn) => fn());\n };\n }\n\n #listeners = new Map>();\n\n /**\n * 监听 EventType 中定义的事件\n */\n on = (type: Type, listener: T[Type]): (() => void) => {\n const handlers = this.#listeners.get(type) ?? new Set();\n handlers.add(listener);\n\n if (!this.#listeners.has(type)) {\n this.#listeners.set(type, handlers);\n }\n\n return () => {\n handlers.delete(listener);\n if (handlers.size === 0) {\n this.#listeners.delete(type);\n }\n };\n };\n\n /**\n * 监听事件,首次触发后自动移除监听\n *\n * 期望回调一次的事件,使用 once; 期望多次回调使用 on\n */\n once = (\n type: Type,\n listener: T[Type],\n ): (() => void) => {\n // @ts-ignore\n const off = this.on(type, (...args) => {\n off();\n listener(...args);\n });\n\n return off;\n };\n\n /**\n * 触发事件\n * @param type\n * @param args\n * @returns\n */\n emit = (\n type: Type,\n ...args: Type extends string\n ? T[Type] extends (...args: any[]) => any\n ? Parameters\n : never\n : never\n ): void => {\n const handlers = this.#listeners.get(type);\n if (handlers == null) return;\n\n handlers.forEach((handler) => handler(...args));\n };\n\n destroy(): void {\n this.#listeners.clear();\n }\n}\n","const createBoxHeader = (type: string, size: number): Uint8Array => {\n const buffer = new Uint8Array(8);\n const view = new DataView(buffer.buffer);\n view.setUint32(0, size); // Write size as a 32-bit unsigned integer\n for (let i = 0; i < 4; i++) {\n buffer[4 + i] = type.charCodeAt(i); // Write type as a 4-character string\n }\n return buffer;\n};\n\nconst createHdlrBox = (): Uint8Array => {\n const tec = new TextEncoder();\n const handlerType = tec.encode('mdta');\n const nameBytes = tec.encode('mp4 handler');\n // header8 + ?8 + mdta4 + ?12 + nameSize + endFlag1\n const size = 8 + 8 + 4 + 12 + nameBytes.byteLength + 1;\n const buffer = new Uint8Array(size);\n const view = new DataView(buffer.buffer);\n\n // Box header\n buffer.set(createBoxHeader('hdlr', size), 0);\n\n // Full box header (version and flags)\n view.setUint32(8, 0);\n\n buffer.set(handlerType, 16);\n buffer.set(nameBytes, 32);\n\n return buffer;\n};\n\nconst createKeysBox = (keys: string[]): Uint8Array => {\n const tec = new TextEncoder();\n const keyNamespace = tec.encode('mdta');\n const keyData = keys.map((key) => {\n const keyBuf = tec.encode(key);\n // size4 + namespace4 + keyBuf\n const size = 4 + 4 + keyBuf.byteLength;\n\n const entryBuf = new Uint8Array(size);\n const dv = new DataView(entryBuf.buffer);\n dv.setUint32(0, size);\n entryBuf.set(keyNamespace, 4);\n entryBuf.set(keyBuf, 4 + keyNamespace.byteLength);\n\n return entryBuf;\n });\n const keyDataSize = keyData.reduce((acc, cur) => acc + cur.byteLength, 0);\n\n const size = 16 + keyDataSize; // 16 bytes for the header and version/flags\n const buffer = new Uint8Array(size);\n const view = new DataView(buffer.buffer);\n\n // Box header\n buffer.set(createBoxHeader('keys', size), 0);\n\n // Full box header (version and flags)\n view.setUint32(8, 0);\n view.setUint32(12, keys.length); // Entry count\n\n // Keys\n let offset = 16;\n for (const keyBuf of keyData) {\n buffer.set(keyBuf, offset);\n offset += keyBuf.byteLength;\n }\n\n return buffer;\n};\n\nconst createIlstBox = (data: Record): Uint8Array => {\n const tec = new TextEncoder();\n const dataStrBuf = tec.encode('data');\n const valueData = Object.entries(data).map(([_, value], index) => {\n const keyId = index + 1; // Assuming keys start from 1\n const valueBytes = tec.encode(value);\n // size4 + keyId4 + valueSize4 + data4 + idx4 + ?4 + value\n const entrySize = 4 + 4 + 4 + 4 + 4 + 4 + valueBytes.byteLength;\n\n const buffer = new Uint8Array(entrySize);\n const view = new DataView(buffer.buffer);\n view.setUint32(0, entrySize);\n view.setUint32(4, keyId);\n\n view.setUint32(8, 16 + valueBytes.byteLength);\n buffer.set(dataStrBuf, 12); // 'data' type\n\n // data idx=1\n view.setUint32(16, 1);\n // Value\n buffer.set(valueBytes, 24);\n\n return buffer;\n });\n\n const valueDataSize = valueData.reduce((acc, cur) => acc + cur.byteLength, 0);\n const totalSizwe = 8 + valueDataSize;\n const buffer = new Uint8Array(totalSizwe);\n buffer.set(createBoxHeader('ilst', totalSizwe), 0);\n\n let offset = 8;\n for (const entry of valueData) {\n buffer.set(entry, offset);\n offset += entry.byteLength;\n }\n\n return buffer;\n};\n\nexport const createMetaBox = (data: Record): Uint8Array => {\n const hdlrBox = createHdlrBox();\n const keysBox = createKeysBox(Object.keys(data));\n const ilstBox = createIlstBox(data);\n\n const size = hdlrBox.length + keysBox.length + ilstBox.length;\n const buffer = new Uint8Array(size);\n\n // buffer.set(createBoxHeader('meta', size), 0);\n buffer.set(hdlrBox, 0);\n buffer.set(keysBox, hdlrBox.length);\n buffer.set(ilstBox, hdlrBox.length + keysBox.length);\n\n return buffer;\n};\n","import mp4box, {\n MP4ArrayBuffer,\n MP4File,\n MP4Sample,\n SampleOpts,\n TrakBoxParser,\n} from '@webav/mp4box.js';\nimport { Log } from '../log';\nimport {\n autoReadStream,\n extractPCM4AudioData,\n extractPCM4AudioBuffer,\n mixinPCM,\n ringSliceFloat32Array,\n concatPCMFragments,\n} from '../av-utils';\nimport { DEFAULT_AUDIO_CONF } from '../clips';\nimport { EventTool } from '../event-tool';\nimport { SampleTransform } from './sample-transform';\nimport { extractFileConfig, unsafeReleaseMP4BoxFile } from './mp4box-utils';\nimport { tmpfile, write } from 'opfs-tools';\nimport { createMetaBox } from './meta-box';\nimport { workerTimer } from '../worker-timer';\n\ntype TCleanFn = () => void;\n\n/**\n * 定义 recodemux 函数的配置选项\n */\ninterface IRecodeMuxOpts {\n /**\n * 视频配置选项,如果为 null 则不处理视频。\n */\n video: {\n width: number;\n height: number;\n expectFPS: number;\n codec: string;\n bitrate: number;\n /**\n * 不安全,随时可能废弃\n */\n __unsafe_hardwareAcceleration__?: HardwareAcceleration;\n } | null;\n /**\n * 音频配置选项,如果为 null 则不处理音频。\n */\n audio: {\n codec: 'opus' | 'aac';\n sampleRate: number;\n channelCount: number;\n } | null;\n /**\n * 预设时长,不代表 track 实际时长\n */\n duration?: number;\n metaDataTags?: Record;\n}\n\n/**\n * 处理音视频的编码和解码。\n * @param opts - 编码音视频数据的配置\n */\nexport function recodemux(opts: IRecodeMuxOpts): {\n /**\n * 编码视频帧\n */\n encodeVideo: (\n frame: VideoFrame,\n options: VideoEncoderEncodeOptions,\n gopId?: number,\n ) => void;\n /**\n * 编码音频数据\n */\n encodeAudio: (data: AudioData) => void;\n /**\n * close 编码器,停止任务\n */\n close: TCleanFn;\n /**\n * 清空编码器队列\n */\n flush: () => Promise;\n /**\n * mp4box 实例\n */\n mp4file: MP4File;\n /**\n * 返回队列长度(背压),用于控制生产视频的进度,队列过大会会占用大量显存\n */\n getEncodeQueueSize: () => number;\n} {\n Log.info('recodemux opts:', opts);\n const mp4file = mp4box.createFile();\n\n // 音视频轨道必须同时创建, 保存在 moov 中\n const avSyncEvtTool = new EventTool<\n Record<'VideoReady' | 'AudioReady', () => void>\n >();\n\n const addMetadata = (\n moov: NonNullable,\n tags: NonNullable,\n ) => {\n const udtaBox = moov.add('udta');\n const metaBox = udtaBox.add('meta');\n metaBox.data = createMetaBox(tags);\n metaBox.size = metaBox.data.byteLength;\n };\n\n let moovReady = false;\n const onMoovReady = () => {\n if (mp4file.moov == null || moovReady) return;\n moovReady = true;\n\n if (opts.metaDataTags != null) addMetadata(mp4file.moov, opts.metaDataTags);\n if (opts.duration != null) {\n mp4file.moov.mvhd.duration = opts.duration;\n }\n };\n\n avSyncEvtTool.once('VideoReady', onMoovReady);\n avSyncEvtTool.once('AudioReady', onMoovReady);\n\n let vEncoder =\n opts.video != null\n ? encodeVideoTrack(opts.video, mp4file, avSyncEvtTool)\n : null;\n let aEncoder =\n opts.audio != null\n ? encodeAudioTrack(opts.audio, mp4file, avSyncEvtTool)\n : null;\n if (opts.video == null) avSyncEvtTool.emit('VideoReady');\n if (opts.audio == null) avSyncEvtTool.emit('AudioReady');\n\n return {\n encodeVideo: (vf, opts) => {\n vEncoder?.encode(vf, opts);\n vf.close();\n },\n encodeAudio: (ad) => {\n if (aEncoder == null) return;\n aEncoder.encode(ad);\n ad.close();\n },\n getEncodeQueueSize: () =>\n vEncoder?.encodeQueueSize ?? aEncoder?.encodeQueueSize ?? 0,\n flush: async () => {\n await Promise.all([\n vEncoder?.flush(),\n aEncoder?.state === 'configured' ? aEncoder.flush() : null,\n ]);\n return;\n },\n close: () => {\n avSyncEvtTool.destroy();\n vEncoder?.close();\n if (aEncoder?.state === 'configured') aEncoder.close();\n },\n mp4file,\n };\n}\n\nfunction encodeVideoTrack(\n opts: NonNullable,\n mp4File: MP4File,\n avSyncEvtTool: EventTool void>>,\n) {\n const videoTrackOpts = {\n // 微秒\n timescale: 1e6,\n width: opts.width,\n height: opts.height,\n brands: ['isom', 'iso2', 'avc1', 'mp42', 'mp41'],\n avcDecoderConfigRecord: null as ArrayBuffer | undefined | null,\n name: 'Track created with WebAV',\n };\n\n let trackId = -1;\n let audioReady = false;\n avSyncEvtTool.once('AudioReady', () => {\n audioReady = true;\n });\n\n const samplesCache: Record<\n 'encoder0' | 'encoder1',\n Array>\n > = {\n encoder0: [],\n encoder1: [],\n };\n const outputHandler = (\n encId: 'encoder0' | 'encoder1',\n chunk: EncodedVideoChunk,\n meta?: EncodedVideoChunkMetadata,\n ) => {\n if (trackId === -1 && meta != null) {\n const desc = meta.decoderConfig?.description as ArrayBuffer;\n fixChromeConstraintSetFlagsBug(desc);\n videoTrackOpts.avcDecoderConfigRecord = desc;\n trackId = mp4File.addTrack(videoTrackOpts);\n avSyncEvtTool.emit('VideoReady');\n Log.info('VideoEncoder, video track ready, trackId:', trackId);\n }\n\n samplesCache[encId].push(chunk2MP4SampleOpts(chunk));\n };\n\n let curEncId: 'encoder0' | 'encoder1' = 'encoder1';\n let lastAddedSampleTime = 0;\n // 小于 10 ms 的帧判定为连续的\n const deltaTime = 10e3;\n function checkCache() {\n if (!audioReady) return;\n const nextEncId = curEncId === 'encoder1' ? 'encoder0' : 'encoder1';\n const curCache = samplesCache[curEncId];\n const nextCache = samplesCache[nextEncId];\n // 无数据\n if (curCache.length === 0 && nextCache.length === 0) return;\n\n let curFirst = curCache[0];\n if (curFirst != null && curFirst.cts - lastAddedSampleTime < deltaTime) {\n const lastTs = addSampleToFile(curCache);\n if (lastTs > lastAddedSampleTime) lastAddedSampleTime = lastTs;\n }\n\n // 检测是否需要切换消费队列\n const nextFirst = nextCache[0];\n // 另一个队列跟已消费的最后一帧是连续的,则需要切换\n if (nextFirst != null && nextFirst.cts - lastAddedSampleTime < deltaTime) {\n curEncId = nextEncId;\n // 说明另一个队列有数据,尽快消费\n checkCache();\n }\n }\n\n function addSampleToFile(\n chunks: Array>,\n ) {\n let lastTime = -1;\n let i = 0;\n for (; i < chunks.length; i++) {\n const c = chunks[i];\n // 每次消费到下一个关键帧结束,可能需要切换队列\n if (i > 0 && c.is_sync) break;\n\n mp4File.addSample(trackId, c.data, c);\n lastTime = c.cts + c.duration;\n }\n chunks.splice(0, i);\n return lastTime;\n }\n\n const stopTimer = workerTimer(checkCache, 15);\n\n const encoder0 = createVideoEncoder(opts, (chunk, meta) =>\n outputHandler('encoder0', chunk, meta),\n );\n const encoder1 = createVideoEncoder(opts, (chunk, meta) =>\n outputHandler('encoder1', chunk, meta),\n );\n\n let gopId = 0;\n return {\n get encodeQueueSize() {\n return encoder0.encodeQueueSize + encoder1.encodeQueueSize;\n },\n encode: (vf: VideoFrame, opts: VideoEncoderEncodeOptions) => {\n if (opts.keyFrame) gopId += 1;\n const encoder = gopId % 2 === 0 ? encoder0 : encoder1;\n encoder.encode(vf, opts);\n },\n flush: async () => {\n await Promise.all([\n encoder0.state === 'configured' ? await encoder0.flush() : null,\n encoder1.state === 'configured' ? await encoder1.flush() : null,\n ]);\n stopTimer();\n checkCache();\n },\n close: () => {\n if (encoder0.state === 'configured') encoder0.close();\n if (encoder1.state === 'configured') encoder1.close();\n },\n };\n}\n\n// https://github.com/bilibili/WebAV/issues/203\nfunction fixChromeConstraintSetFlagsBug(desc: ArrayBuffer) {\n const u8 = new Uint8Array(desc);\n const constraintSetFlag = u8[2];\n // 如果 constraint_set_flags 字节二进制 第0位或第1位值为1\n // 说明取值错误,忽略该字段避免解码异常\n if (constraintSetFlag.toString(2).slice(-2).includes('1')) {\n u8[2] = 0;\n }\n}\n\nfunction createVideoEncoder(\n videoOpts: NonNullable,\n outHandler: EncodedVideoChunkOutputCallback,\n): VideoEncoder {\n const encoder = new VideoEncoder({\n error: Log.error,\n output: outHandler,\n });\n\n encoder.configure({\n codec: videoOpts.codec,\n framerate: videoOpts.expectFPS,\n hardwareAcceleration: videoOpts.__unsafe_hardwareAcceleration__,\n // 码率\n bitrate: videoOpts.bitrate,\n width: videoOpts.width,\n height: videoOpts.height,\n // H264 不支持背景透明度\n alpha: 'discard',\n // macos 自带播放器只支持avc\n avc: { format: 'avc' },\n // mp4box.js 无法解析 annexb 的 mimeCodec ,只会显示 avc1\n // avc: { format: 'annexb' }\n });\n return encoder;\n}\n\nfunction encodeAudioTrack(\n audioOpts: NonNullable,\n mp4File: MP4File,\n avSyncEvtTool: EventTool void>>,\n): AudioEncoder {\n const audioTrackOpts = {\n timescale: 1e6,\n samplerate: audioOpts.sampleRate,\n channel_count: audioOpts.channelCount,\n hdlr: 'soun',\n type: audioOpts.codec === 'aac' ? 'mp4a' : 'Opus',\n name: 'Track created with WebAV',\n };\n\n let trackId = -1;\n let cache: EncodedAudioChunk[] = [];\n let videoReady = false;\n avSyncEvtTool.once('VideoReady', () => {\n videoReady = true;\n cache.forEach((c) => {\n const s = chunk2MP4SampleOpts(c);\n mp4File.addSample(trackId, s.data, s);\n });\n cache = [];\n });\n\n const encoder = new AudioEncoder({\n error: Log.error,\n output: (chunk, meta) => {\n if (trackId === -1) {\n // 某些设备不会输出 description\n const desc = meta.decoderConfig?.description;\n trackId = mp4File.addTrack({\n ...audioTrackOpts,\n description: desc == null ? undefined : createESDSBox(desc),\n });\n avSyncEvtTool.emit('AudioReady');\n Log.info('AudioEncoder, audio track ready, trackId:', trackId);\n }\n\n if (videoReady) {\n const s = chunk2MP4SampleOpts(chunk);\n mp4File.addSample(trackId, s.data, s);\n } else {\n cache.push(chunk);\n }\n },\n });\n encoder.configure({\n codec: audioOpts.codec === 'aac' ? DEFAULT_AUDIO_CONF.codec : 'opus',\n sampleRate: audioOpts.sampleRate,\n numberOfChannels: audioOpts.channelCount,\n bitrate: 128_000,\n });\n\n return encoder;\n}\n\nexport function _deprecated_stream2file(stream: ReadableStream): {\n file: MP4File;\n stop: () => void;\n} {\n const reader = stream.getReader();\n let chunkOffset = 0;\n const file = mp4box.createFile();\n let stoped = false;\n async function readFile(): Promise {\n while (!stoped) {\n const { done, value } = await reader.read();\n if (done) {\n Log.info('stream source read done');\n file.flush();\n file.onFlush?.();\n return;\n }\n\n const chunk = value.buffer as MP4ArrayBuffer;\n chunk.fileStart = chunkOffset;\n chunkOffset += chunk.byteLength;\n file.appendBuffer(chunk);\n }\n reader.releaseLock();\n stream.cancel();\n }\n readFile().catch(Log.error);\n\n return {\n file,\n stop: () => {\n stoped = true;\n },\n };\n}\n\n/**\n * 将 mp4box file 转换为文件流,用于上传服务器或存储到本地\n * @param file - MP4 文件实例 {@link MP4File}。\n * @param timeSlice - 时间片,用于控制流的发送速度。\n * @param onCancel - 当返回的流被取消时触发该回调函数\n */\nexport function file2stream(\n file: MP4File,\n timeSlice: number,\n onCancel?: TCleanFn,\n): {\n /**\n * 可读流,流的数据是 `Uint8Array`\n */\n stream: ReadableStream;\n /**\n * 流的生产者主动停止向流中输出数据,可向消费者传递错误信息\n */\n stop: (err?: Error) => void;\n} {\n let timerId = 0;\n\n let sendedBoxIdx = 0;\n const boxes = file.boxes;\n\n let firstMoofReady = false;\n const deltaBuf = (): Uint8Array | null => {\n // 避免 moov 未完成时写入文件,导致文件无法被识别\n if (!firstMoofReady) {\n if (boxes.find((box) => box.type === 'moof') != null) {\n firstMoofReady = true;\n } else {\n return null;\n }\n }\n if (sendedBoxIdx >= boxes.length) return null;\n\n const ds = new mp4box.DataStream();\n ds.endianness = mp4box.DataStream.BIG_ENDIAN;\n\n let i = sendedBoxIdx;\n try {\n for (; i < boxes.length; ) {\n boxes[i].write(ds);\n delete boxes[i];\n i += 1;\n }\n } catch (err) {\n const errBox = boxes[i];\n if (err instanceof Error && errBox != null) {\n throw Error(\n `${err.message} | deltaBuf( boxType: ${errBox.type}, boxSize: ${errBox.size}, boxDataLen: ${errBox.data?.length ?? -1})`,\n );\n }\n throw err;\n }\n\n unsafeReleaseMP4BoxFile(file);\n\n sendedBoxIdx = boxes.length;\n return new Uint8Array(ds.buffer);\n };\n\n let stoped = false;\n let canceled = false;\n let exit: ((err?: Error) => void) | null = null;\n const stream = new ReadableStream({\n start(ctrl) {\n timerId = self.setInterval(() => {\n const d = deltaBuf();\n if (d != null && !canceled) ctrl.enqueue(d);\n }, timeSlice);\n\n exit = (err) => {\n clearInterval(timerId);\n file.flush();\n if (err != null) {\n ctrl.error(err);\n return;\n }\n\n const d = deltaBuf();\n if (d != null && !canceled) ctrl.enqueue(d);\n\n if (!canceled) ctrl.close();\n };\n\n // 安全起见,检测如果start触发时已经 stoped\n if (stoped) exit();\n },\n cancel() {\n canceled = true;\n clearInterval(timerId);\n onCancel?.();\n },\n });\n\n return {\n stream,\n stop: (err) => {\n if (stoped) return;\n stoped = true;\n exit?.(err);\n },\n };\n}\n\nfunction fixMP4BoxFileDuration(\n inMP4File: MP4File,\n): () => Promise | null> {\n let sendedBoxIdx = 0;\n const boxes = inMP4File.boxes;\n const tracks: Array<{ track: TrakBoxParser; id: number }> = [];\n let totalDuration = 0;\n\n async function write2TmpFile() {\n const buf = box2Buf(boxes, sendedBoxIdx);\n sendedBoxIdx = boxes.length;\n // 释放引用,避免内存泄露\n // todo: use unsafeReleaseMP4BoxFile\n tracks.forEach(({ track, id }) => {\n const s = track.samples.at(-1);\n if (s != null)\n totalDuration = Math.max(totalDuration, s.cts + s.duration);\n\n inMP4File.releaseUsedSamples(id, track.samples.length);\n track.samples = [];\n });\n inMP4File.mdats = [];\n inMP4File.moofs = [];\n if (buf != null) await tmpFileWriter?.write(buf);\n }\n\n let moovPrevBoxes: typeof boxes = [];\n function moovBoxReady() {\n if (moovPrevBoxes.length > 0) return true;\n\n const moovIdx = boxes.findIndex((box) => box.type === 'moov');\n if (moovIdx === -1) return false;\n\n moovPrevBoxes = boxes.slice(0, moovIdx + 1);\n sendedBoxIdx = moovIdx + 1;\n\n if (tracks.length === 0) {\n for (let i = 1; true; i += 1) {\n const track = inMP4File.getTrackById(i);\n if (track == null) break;\n tracks.push({ track, id: i });\n }\n }\n\n return true;\n }\n\n let timerId = 0;\n // 把 moov 之外的 box 先写入临时文件,待更新 duration 之后再拼接临时文件\n const postFile = tmpfile();\n let tmpFileWriter: Awaited<\n ReturnType['createWriter']>\n > | null = null;\n\n const initPromise = (async () => {\n tmpFileWriter = await postFile.createWriter();\n\n timerId = self.setInterval(() => {\n if (!moovBoxReady()) return;\n write2TmpFile();\n }, 100);\n })();\n\n let stoped = false;\n return async () => {\n if (stoped) throw Error('File exported');\n stoped = true;\n\n await initPromise;\n clearInterval(timerId);\n\n if (!moovBoxReady() || tmpFileWriter == null) return null;\n inMP4File.flush();\n await write2TmpFile();\n await tmpFileWriter?.close();\n\n const moov = moovPrevBoxes.find((box) => box.type === 'moov') as\n | typeof inMP4File.moov\n | undefined;\n if (moov == null) return null;\n\n moov.mvhd.duration = totalDuration;\n\n const rsFile = tmpfile();\n const buf = box2Buf(moovPrevBoxes, 0)!;\n await write(rsFile, buf);\n await write(rsFile, postFile, { overwrite: false });\n\n return await rsFile.stream();\n };\n\n function box2Buf(source: typeof boxes, startIdx: number): Uint8Array | null {\n if (startIdx >= source.length) return null;\n\n const ds = new mp4box.DataStream();\n ds.endianness = mp4box.DataStream.BIG_ENDIAN;\n\n for (let i = startIdx; i < source.length; i++) {\n if (source[i] === null) continue;\n source[i].write(ds);\n delete source[i];\n }\n return new Uint8Array(ds.buffer);\n }\n}\n\n/**\n * EncodedAudioChunk | EncodedVideoChunk 转换为 MP4 addSample 需要的参数\n */\nfunction chunk2MP4SampleOpts(\n chunk: EncodedAudioChunk | EncodedVideoChunk,\n): SampleOpts & {\n data: ArrayBuffer;\n} {\n const buf = new ArrayBuffer(chunk.byteLength);\n chunk.copyTo(buf);\n const dts = chunk.timestamp;\n return {\n duration: chunk.duration ?? 0,\n dts,\n cts: dts,\n is_sync: chunk.type === 'key',\n data: buf,\n };\n}\n\n/**\n * 快速拼接多个mp4 文件流,要求所有 mp4 的属性一致,\n * 属性包括(不限于):音视频编码格式、分辨率、采样率\n *\n * @param streams 一个包含 Uint8Array 的可读流数组。\n * @returns 返回一个 Promise,该 Promise 在解析时返回一个包含合并后的 MP4 数据的可读流。\n * @throws 如果无法从流生成文件,将抛出错误。\n *\n * @example\n * const streams = [stream1, stream2, stream3];\n * const resultStream = await fastConcatMP4(streams);\n */\nexport async function fastConcatMP4(\n streams: ReadableStream[],\n): Promise> {\n const outfile = mp4box.createFile();\n\n const dumpFile = fixMP4BoxFileDuration(outfile);\n await concatStreamsToMP4BoxFile(streams, outfile);\n const outStream = await dumpFile();\n if (outStream == null) throw Error('Can not generate file from streams');\n return outStream;\n}\n\nasync function concatStreamsToMP4BoxFile(\n streams: ReadableStream[],\n outfile: MP4File,\n) {\n let vTrackId = 0;\n let vDTS = 0;\n let vCTS = 0;\n let aTrackId = 0;\n let aDTS = 0;\n let aCTS = 0;\n // ts bug, 不能正确识别类型\n let lastVSamp: any = null;\n let lastASamp: any = null;\n for (const stream of streams) {\n await new Promise(async (resolve) => {\n autoReadStream(stream.pipeThrough(new SampleTransform()), {\n onDone: resolve,\n onChunk: async ({ chunkType, data }) => {\n if (chunkType === 'ready') {\n const { videoTrackConf, audioTrackConf } = extractFileConfig(\n data.file,\n data.info,\n );\n if (vTrackId === 0 && videoTrackConf != null) {\n vTrackId = outfile.addTrack(videoTrackConf);\n }\n if (aTrackId === 0 && audioTrackConf != null) {\n aTrackId = outfile.addTrack(audioTrackConf);\n }\n } else if (chunkType === 'samples') {\n const { type, samples } = data;\n const trackId = type === 'video' ? vTrackId : aTrackId;\n const offsetDTS = type === 'video' ? vDTS : aDTS;\n const offsetCTS = type === 'video' ? vCTS : aCTS;\n\n samples.forEach((s) => {\n outfile.addSample(trackId, s.data, {\n duration: s.duration,\n dts: s.dts + offsetDTS,\n cts: s.cts + offsetCTS,\n is_sync: s.is_sync,\n });\n });\n\n const lastSamp = samples.at(-1);\n if (lastSamp == null) return;\n if (type === 'video') {\n lastVSamp = lastSamp;\n } else if (type === 'audio') {\n lastASamp = lastSamp;\n }\n }\n },\n });\n });\n if (lastVSamp != null) {\n vDTS += lastVSamp.dts;\n vCTS += lastVSamp.cts;\n }\n if (lastASamp != null) {\n aDTS += lastASamp.dts;\n aCTS += lastASamp.cts;\n }\n }\n}\n\n/**\n * 为 WebAV 生成的 fmp4 文件设置正确的时长值\n */\nexport async function fixFMP4Duration(\n stream: ReadableStream,\n): Promise> {\n return await fastConcatMP4([stream]);\n}\n\n/**\n * 创建 MP4 音频样本解码器。\n * @param adConf - 音频解码器配置参数 {@link AudioDecoderConfig}。\n * @returns 返回一个对象,包含 `decode` 和 `close` 方法。\n * - `decode` 方法用于解码 MP4 音频样本,返回解码后的音频数据数组。\n * - `close` 方法用于关闭音频解码器。\n */\nfunction createMP4AudioSampleDecoder(\n adConf: Parameters[0],\n) {\n let cacheAD: AudioData[] = [];\n const adDecoder = new AudioDecoder({\n output: (ad) => {\n cacheAD.push(ad);\n },\n error: Log.error,\n });\n adDecoder.configure(adConf);\n\n return {\n decode: async (ss: MP4Sample[]) => {\n ss.forEach((s) => {\n adDecoder.decode(\n new EncodedAudioChunk({\n type: s.is_sync ? 'key' : 'delta',\n timestamp: (1e6 * s.cts) / s.timescale,\n duration: (1e6 * s.duration) / s.timescale,\n data: s.data,\n }),\n );\n });\n\n await adDecoder.flush();\n\n const rs = cacheAD;\n cacheAD = [];\n\n return rs;\n },\n close: () => {\n adDecoder.close();\n },\n };\n}\n\n// 音频编码与解码API有很大区别,\n// 是因为编码中途调用 AudioEncoder.flush ,会导致声音听起来卡顿\nfunction createMP4AudioSampleEncoder(\n aeConf: Parameters[0],\n onOutput: (s: ReturnType) => void,\n) {\n const adEncoder = new AudioEncoder({\n output: (chunk) => {\n onOutput(chunk2MP4SampleOpts(chunk));\n },\n error: Log.error,\n });\n\n adEncoder.configure({\n codec: aeConf.codec,\n sampleRate: aeConf.sampleRate,\n numberOfChannels: aeConf.numberOfChannels,\n });\n\n // 保留一个音频数据,用于最后做声音淡出\n let lastData: { data: Float32Array; ts: number } | null = null;\n\n function createAD(data: Float32Array, ts: number) {\n return new AudioData({\n timestamp: ts,\n numberOfChannels: aeConf.numberOfChannels,\n numberOfFrames: data.length / aeConf.numberOfChannels,\n sampleRate: aeConf.sampleRate,\n format: 'f32-planar',\n data,\n });\n }\n return {\n encode: async (data: Float32Array, ts: number) => {\n if (lastData != null) {\n adEncoder.encode(createAD(lastData.data, lastData.ts));\n }\n lastData = { data, ts };\n },\n stop: async () => {\n if (lastData != null) {\n // 副作用修改数据\n audioFade(lastData.data, aeConf.numberOfChannels, aeConf.sampleRate);\n adEncoder.encode(createAD(lastData.data, lastData.ts));\n lastData = null;\n }\n await adEncoder.flush();\n adEncoder.close();\n },\n };\n}\n\n/**\n * 音频线性淡出,避免 POP 声\n * 副作用调整音量值\n */\nfunction audioFade(pcmData: Float32Array, chanCnt: number, sampleRate: number) {\n const dataLen = pcmData.length - 1;\n // 避免超出边界,最长 500ms 的淡出时间\n const fadeLen = Math.min(sampleRate / 2, dataLen);\n for (let i = 0; i < fadeLen; i++) {\n for (let j = 1; j <= chanCnt; j++) {\n // 从尾部开始,调整每个声道音量值\n pcmData[Math.floor(dataLen / j) - i] *= i / fadeLen;\n }\n }\n}\n\n/**\n * 视频配音;混合 MP4 与音频文件,仅重编码音频,视频轨道不变\n * @param mp4Stream - MP4 流\n * @param audio - 音频信息\n * @param audio.stream - 音频数据流\n * @param audio.volume - 音频音量\n * @param audio.loop - 音频时长小于视频时,是否循环使用音频流\n * @returns 输出混合后的音频流\n */\nexport function mixinMP4AndAudio(\n mp4Stream: ReadableStream,\n audio: {\n stream: ReadableStream;\n volume: number;\n loop: boolean;\n },\n) {\n Log.info('mixinMP4AndAudio, opts:', {\n volume: audio.volume,\n loop: audio.loop,\n });\n\n const outfile = mp4box.createFile();\n const { stream: outStream, stop: stopOut } = file2stream(outfile, 500);\n\n let audioSampleDecoder: ReturnType<\n typeof createMP4AudioSampleDecoder\n > | null = null;\n\n let audioSampleEncoder: ReturnType<\n typeof createMP4AudioSampleEncoder\n > | null = null;\n\n let inputAudioPCM: Float32Array[] = [];\n\n let vTrackId = 0;\n let aTrackId = 0;\n let audioOffset = 0;\n let mp4HasAudio = true;\n let sampleRate = 48000;\n autoReadStream(mp4Stream.pipeThrough(new SampleTransform()), {\n onDone: async () => {\n await audioSampleEncoder?.stop();\n audioSampleDecoder?.close();\n stopOut();\n },\n onChunk: async ({ chunkType, data }) => {\n if (chunkType === 'ready') {\n const { videoTrackConf, audioTrackConf, audioDecoderConf } =\n extractFileConfig(data.file, data.info);\n if (vTrackId === 0 && videoTrackConf != null) {\n vTrackId = outfile.addTrack(videoTrackConf);\n }\n\n const safeAudioTrackConf = audioTrackConf ?? {\n timescale: 1e6,\n samplerate: sampleRate,\n channel_count: DEFAULT_AUDIO_CONF.channelCount,\n hdlr: 'soun',\n name: 'SoundHandler',\n type: 'mp4a',\n };\n if (aTrackId === 0) {\n aTrackId = outfile.addTrack(safeAudioTrackConf);\n sampleRate = audioTrackConf?.samplerate ?? sampleRate;\n mp4HasAudio = audioTrackConf == null ? false : true;\n }\n const audioCtx = new AudioContext({ sampleRate });\n inputAudioPCM = extractPCM4AudioBuffer(\n await audioCtx.decodeAudioData(\n await new Response(audio.stream).arrayBuffer(),\n ),\n );\n\n if (audioDecoderConf != null) {\n audioSampleDecoder = createMP4AudioSampleDecoder(audioDecoderConf);\n }\n audioSampleEncoder = createMP4AudioSampleEncoder(\n audioDecoderConf ?? {\n codec:\n safeAudioTrackConf.type === 'mp4a'\n ? DEFAULT_AUDIO_CONF.codec\n : safeAudioTrackConf.type,\n numberOfChannels: safeAudioTrackConf.channel_count,\n sampleRate: safeAudioTrackConf.samplerate,\n },\n (s) => outfile.addSample(aTrackId, s.data, s),\n );\n } else if (chunkType === 'samples') {\n const { id, type, samples } = data;\n if (type === 'video') {\n samples.forEach((s) => outfile.addSample(id, s.data, s));\n\n if (!mp4HasAudio) await addInputAudio2Track(samples);\n return;\n }\n\n if (type === 'audio') await mixinAudioSampleAndInputPCM(samples);\n }\n },\n });\n\n function getInputAudioSlice(len: number) {\n const rs = inputAudioPCM.map((chanBuf) =>\n audio.loop\n ? ringSliceFloat32Array(chanBuf, audioOffset, audioOffset + len)\n : chanBuf.slice(audioOffset, audioOffset + len),\n );\n audioOffset += len;\n\n if (audio.volume !== 1) {\n for (const buf of rs)\n for (let i = 0; i < buf.length; i++) buf[i] *= audio.volume;\n }\n\n return rs;\n }\n\n async function addInputAudio2Track(vdieoSamples: MP4Sample[]) {\n const firstSamp = vdieoSamples[0];\n const lastSamp = vdieoSamples[vdieoSamples.length - 1];\n const pcmLength = Math.floor(\n ((lastSamp.cts + lastSamp.duration - firstSamp.cts) /\n lastSamp.timescale) *\n sampleRate,\n );\n const audioDataBuf = mixinPCM([getInputAudioSlice(pcmLength)]);\n if (audioDataBuf.length === 0) return;\n audioSampleEncoder?.encode(\n audioDataBuf,\n (firstSamp.cts / firstSamp.timescale) * 1e6,\n );\n }\n\n async function mixinAudioSampleAndInputPCM(samples: MP4Sample[]) {\n if (audioSampleDecoder == null) return;\n\n // 1. 先解码mp4音频\n // [[chan0, chan1], [chan0, chan1]...]\n const pcmFragments = (await audioSampleDecoder.decode(samples)).map(\n extractPCM4AudioData,\n );\n // [chan0, chan1]\n const mp4AudioPCM = concatPCMFragments(pcmFragments);\n const inputAudioPCM = getInputAudioSlice(mp4AudioPCM[0].length);\n const firstSamp = samples[0];\n\n // 3. 重编码音频\n audioSampleEncoder?.encode(\n // 2. 混合输入的音频\n mixinPCM([mp4AudioPCM, inputAudioPCM]),\n (firstSamp.cts / firstSamp.timescale) * 1e6,\n );\n }\n\n return outStream;\n}\n\n/**\n * 创建 ESDS 盒子(MPEG-4 Elementary Stream Descriptor)\n * ESDS 盒子用于描述 MPEG-4 的流信息,如编解码器类型、流类型、最大比特率、平均比特率等\n * @param config - 配置信息,可以是 `ArrayBuffer` 或 `ArrayBufferView` 类型\n * @return 返回一个 ESDS box\n */\nfunction createESDSBox(config: ArrayBuffer | ArrayBufferView) {\n const configlen = config.byteLength;\n const buf = new Uint8Array([\n 0x00, // version 0\n 0x00,\n 0x00,\n 0x00, // flags\n\n 0x03, // descriptor_type\n 0x17 + configlen, // length\n 0x00,\n // 0x01, // es_id\n 0x02, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x12 + configlen, // length\n 0x40, // codec : mpeg4_audio\n 0x15, // stream_type\n 0x00,\n 0x00,\n 0x00, // buffer_size\n 0x00,\n 0x00,\n 0x00,\n 0x00, // maxBitrate\n 0x00,\n 0x00,\n 0x00,\n 0x00, // avgBitrate\n\n 0x05, // descriptor_type\n\n configlen,\n ...new Uint8Array(config instanceof ArrayBuffer ? config : config.buffer),\n\n 0x06,\n 0x01,\n 0x02,\n ]);\n\n const esdsBox = new mp4box.BoxParser.esdsBox(buf.byteLength);\n esdsBox.hdr_size = 0;\n esdsBox.parse(new mp4box.DataStream(buf, 0, mp4box.DataStream.BIG_ENDIAN));\n return esdsBox;\n}\n","/**\n * @file stream.js\n */\n\n/**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */\nvar Stream = /*#__PURE__*/function () {\n function Stream() {\n this.listeners = {};\n }\n /**\n * Add a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n\n var _proto = Stream.prototype;\n\n _proto.on = function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n\n this.listeners[type].push(listener);\n }\n /**\n * Remove a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {boolean} if we could turn it off or not\n */\n ;\n\n _proto.off = function off(type, listener) {\n if (!this.listeners[type]) {\n return false;\n }\n\n var index = this.listeners[type].indexOf(listener); // TODO: which is better?\n // In Video.js we slice listener functions\n // on trigger so that it does not mess up the order\n // while we loop through.\n //\n // Here we slice on off so that the loop in trigger\n // can continue using it's old reference to loop without\n // messing up the order.\n\n this.listeners[type] = this.listeners[type].slice(0);\n this.listeners[type].splice(index, 1);\n return index > -1;\n }\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {string} type the event name\n */\n ;\n\n _proto.trigger = function trigger(type) {\n var callbacks = this.listeners[type];\n\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n\n if (arguments.length === 2) {\n var length = callbacks.length;\n\n for (var i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var _length = callbacks.length;\n\n for (var _i = 0; _i < _length; ++_i) {\n callbacks[_i].apply(this, args);\n }\n }\n }\n /**\n * Destroys the stream and cleans up.\n */\n ;\n\n _proto.dispose = function dispose() {\n this.listeners = {};\n }\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\n ;\n\n _proto.pipe = function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n };\n\n return Stream;\n}();\n\nexport { Stream as default };","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","var win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\"){\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n","import window from 'global/window';\n\nvar atob = function atob(s) {\n return window.atob ? window.atob(s) : Buffer.from(s, 'base64').toString('binary');\n};\n\nexport default function decodeB64ToUint8Array(b64Text) {\n var decodedString = atob(b64Text);\n var array = new Uint8Array(decodedString.length);\n\n for (var i = 0; i < decodedString.length; i++) {\n array[i] = decodedString.charCodeAt(i);\n }\n\n return array;\n}","/*! @name m3u8-parser @version 7.1.0 @license Apache-2.0 */\nimport Stream from '@videojs/vhs-utils/es/stream.js';\nimport _extends from '@babel/runtime/helpers/extends';\nimport decodeB64ToUint8Array from '@videojs/vhs-utils/es/decode-b64-to-uint8-array.js';\n\n/**\n * @file m3u8/line-stream.js\n */\n/**\n * A stream that buffers string input and generates a `data` event for each\n * line.\n *\n * @class LineStream\n * @extends Stream\n */\n\nclass LineStream extends Stream {\n constructor() {\n super();\n this.buffer = '';\n }\n /**\n * Add new data to be parsed.\n *\n * @param {string} data the text to process\n */\n\n\n push(data) {\n let nextNewline;\n this.buffer += data;\n nextNewline = this.buffer.indexOf('\\n');\n\n for (; nextNewline > -1; nextNewline = this.buffer.indexOf('\\n')) {\n this.trigger('data', this.buffer.substring(0, nextNewline));\n this.buffer = this.buffer.substring(nextNewline + 1);\n }\n }\n\n}\n\nconst TAB = String.fromCharCode(0x09);\n\nconst parseByterange = function (byterangeString) {\n // optionally match and capture 0+ digits before `@`\n // optionally match and capture 0+ digits after `@`\n const match = /([0-9.]*)?@?([0-9.]*)?/.exec(byterangeString || '');\n const result = {};\n\n if (match[1]) {\n result.length = parseInt(match[1], 10);\n }\n\n if (match[2]) {\n result.offset = parseInt(match[2], 10);\n }\n\n return result;\n};\n/**\n * \"forgiving\" attribute list psuedo-grammar:\n * attributes -> keyvalue (',' keyvalue)*\n * keyvalue -> key '=' value\n * key -> [^=]*\n * value -> '\"' [^\"]* '\"' | [^,]*\n */\n\n\nconst attributeSeparator = function () {\n const key = '[^=]*';\n const value = '\"[^\"]*\"|[^,]*';\n const keyvalue = '(?:' + key + ')=(?:' + value + ')';\n return new RegExp('(?:^|,)(' + keyvalue + ')');\n};\n/**\n * Parse attributes from a line given the separator\n *\n * @param {string} attributes the attribute line to parse\n */\n\n\nconst parseAttributes = function (attributes) {\n const result = {};\n\n if (!attributes) {\n return result;\n } // split the string using attributes as the separator\n\n\n const attrs = attributes.split(attributeSeparator());\n let i = attrs.length;\n let attr;\n\n while (i--) {\n // filter out unmatched portions of the string\n if (attrs[i] === '') {\n continue;\n } // split the key and value\n\n\n attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1); // trim whitespace and remove optional quotes around the value\n\n attr[0] = attr[0].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^\\s+|\\s+$/g, '');\n attr[1] = attr[1].replace(/^['\"](.*)['\"]$/g, '$1');\n result[attr[0]] = attr[1];\n }\n\n return result;\n};\n/**\n * A line-level M3U8 parser event stream. It expects to receive input one\n * line at a time and performs a context-free parse of its contents. A stream\n * interpretation of a manifest can be useful if the manifest is expected to\n * be too large to fit comfortably into memory or the entirety of the input\n * is not immediately available. Otherwise, it's probably much easier to work\n * with a regular `Parser` object.\n *\n * Produces `data` events with an object that captures the parser's\n * interpretation of the input. That object has a property `tag` that is one\n * of `uri`, `comment`, or `tag`. URIs only have a single additional\n * property, `line`, which captures the entirety of the input without\n * interpretation. Comments similarly have a single additional property\n * `text` which is the input without the leading `#`.\n *\n * Tags always have a property `tagType` which is the lower-cased version of\n * the M3U8 directive without the `#EXT` or `#EXT-X-` prefix. For instance,\n * `#EXT-X-MEDIA-SEQUENCE` becomes `media-sequence` when parsed. Unrecognized\n * tags are given the tag type `unknown` and a single additional property\n * `data` with the remainder of the input.\n *\n * @class ParseStream\n * @extends Stream\n */\n\n\nclass ParseStream extends Stream {\n constructor() {\n super();\n this.customParsers = [];\n this.tagMappers = [];\n }\n /**\n * Parses an additional line of input.\n *\n * @param {string} line a single line of an M3U8 file to parse\n */\n\n\n push(line) {\n let match;\n let event; // strip whitespace\n\n line = line.trim();\n\n if (line.length === 0) {\n // ignore empty lines\n return;\n } // URIs\n\n\n if (line[0] !== '#') {\n this.trigger('data', {\n type: 'uri',\n uri: line\n });\n return;\n } // map tags\n\n\n const newLines = this.tagMappers.reduce((acc, mapper) => {\n const mappedLine = mapper(line); // skip if unchanged\n\n if (mappedLine === line) {\n return acc;\n }\n\n return acc.concat([mappedLine]);\n }, [line]);\n newLines.forEach(newLine => {\n for (let i = 0; i < this.customParsers.length; i++) {\n if (this.customParsers[i].call(this, newLine)) {\n return;\n }\n } // Comments\n\n\n if (newLine.indexOf('#EXT') !== 0) {\n this.trigger('data', {\n type: 'comment',\n text: newLine.slice(1)\n });\n return;\n } // strip off any carriage returns here so the regex matching\n // doesn't have to account for them.\n\n\n newLine = newLine.replace('\\r', ''); // Tags\n\n match = /^#EXTM3U/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'm3u'\n });\n return;\n }\n\n match = /^#EXTINF:([0-9\\.]*)?,?(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'inf'\n };\n\n if (match[1]) {\n event.duration = parseFloat(match[1]);\n }\n\n if (match[2]) {\n event.title = match[2];\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-TARGETDURATION:([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'targetduration'\n };\n\n if (match[1]) {\n event.duration = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-VERSION:([0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'version'\n };\n\n if (match[1]) {\n event.version = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-MEDIA-SEQUENCE:(\\-?[0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media-sequence'\n };\n\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-DISCONTINUITY-SEQUENCE:(\\-?[0-9.]*)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'discontinuity-sequence'\n };\n\n if (match[1]) {\n event.number = parseInt(match[1], 10);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PLAYLIST-TYPE:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'playlist-type'\n };\n\n if (match[1]) {\n event.playlistType = match[1];\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-BYTERANGE:(.*)?$/.exec(newLine);\n\n if (match) {\n event = _extends(parseByterange(match[1]), {\n type: 'tag',\n tagType: 'byterange'\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-ALLOW-CACHE:(YES|NO)?/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'allow-cache'\n };\n\n if (match[1]) {\n event.allowed = !/NO/.test(match[1]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-MAP:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'map'\n };\n\n if (match[1]) {\n const attributes = parseAttributes(match[1]);\n\n if (attributes.URI) {\n event.uri = attributes.URI;\n }\n\n if (attributes.BYTERANGE) {\n event.byterange = parseByterange(attributes.BYTERANGE);\n }\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-STREAM-INF:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'stream-inf'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.RESOLUTION) {\n const split = event.attributes.RESOLUTION.split('x');\n const resolution = {};\n\n if (split[0]) {\n resolution.width = parseInt(split[0], 10);\n }\n\n if (split[1]) {\n resolution.height = parseInt(split[1], 10);\n }\n\n event.attributes.RESOLUTION = resolution;\n }\n\n if (event.attributes.BANDWIDTH) {\n event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);\n }\n\n if (event.attributes['FRAME-RATE']) {\n event.attributes['FRAME-RATE'] = parseFloat(event.attributes['FRAME-RATE']);\n }\n\n if (event.attributes['PROGRAM-ID']) {\n event.attributes['PROGRAM-ID'] = parseInt(event.attributes['PROGRAM-ID'], 10);\n }\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-MEDIA:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'media'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-ENDLIST/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'endlist'\n });\n return;\n }\n\n match = /^#EXT-X-DISCONTINUITY/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'discontinuity'\n });\n return;\n }\n\n match = /^#EXT-X-PROGRAM-DATE-TIME:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'program-date-time'\n };\n\n if (match[1]) {\n event.dateTimeString = match[1];\n event.dateTimeObject = new Date(match[1]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-KEY:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'key'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]); // parse the IV string into a Uint32Array\n\n if (event.attributes.IV) {\n if (event.attributes.IV.substring(0, 2).toLowerCase() === '0x') {\n event.attributes.IV = event.attributes.IV.substring(2);\n }\n\n event.attributes.IV = event.attributes.IV.match(/.{8}/g);\n event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16);\n event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16);\n event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16);\n event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16);\n event.attributes.IV = new Uint32Array(event.attributes.IV);\n }\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-START:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'start'\n };\n\n if (match[1]) {\n event.attributes = parseAttributes(match[1]);\n event.attributes['TIME-OFFSET'] = parseFloat(event.attributes['TIME-OFFSET']);\n event.attributes.PRECISE = /YES/.test(event.attributes.PRECISE);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-CUE-OUT-CONT:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out-cont'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-CUE-OUT:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-out'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-CUE-IN:(.*)?$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'cue-in'\n };\n\n if (match[1]) {\n event.data = match[1];\n } else {\n event.data = '';\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-SKIP:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'skip'\n };\n event.attributes = parseAttributes(match[1]);\n\n if (event.attributes.hasOwnProperty('SKIPPED-SEGMENTS')) {\n event.attributes['SKIPPED-SEGMENTS'] = parseInt(event.attributes['SKIPPED-SEGMENTS'], 10);\n }\n\n if (event.attributes.hasOwnProperty('RECENTLY-REMOVED-DATERANGES')) {\n event.attributes['RECENTLY-REMOVED-DATERANGES'] = event.attributes['RECENTLY-REMOVED-DATERANGES'].split(TAB);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PART:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'part'\n };\n event.attributes = parseAttributes(match[1]);\n ['DURATION'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['INDEPENDENT', 'GAP'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/.test(event.attributes[key]);\n }\n });\n\n if (event.attributes.hasOwnProperty('BYTERANGE')) {\n event.attributes.byterange = parseByterange(event.attributes.BYTERANGE);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-SERVER-CONTROL:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'server-control'\n };\n event.attributes = parseAttributes(match[1]);\n ['CAN-SKIP-UNTIL', 'PART-HOLD-BACK', 'HOLD-BACK'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['CAN-SKIP-DATERANGES', 'CAN-BLOCK-RELOAD'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/.test(event.attributes[key]);\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PART-INF:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'part-inf'\n };\n event.attributes = parseAttributes(match[1]);\n ['PART-TARGET'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-PRELOAD-HINT:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'preload-hint'\n };\n event.attributes = parseAttributes(match[1]);\n ['BYTERANGE-START', 'BYTERANGE-LENGTH'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseInt(event.attributes[key], 10);\n const subkey = key === 'BYTERANGE-LENGTH' ? 'length' : 'offset';\n event.attributes.byterange = event.attributes.byterange || {};\n event.attributes.byterange[subkey] = event.attributes[key]; // only keep the parsed byterange object.\n\n delete event.attributes[key];\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-RENDITION-REPORT:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'rendition-report'\n };\n event.attributes = parseAttributes(match[1]);\n ['LAST-MSN', 'LAST-PART'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseInt(event.attributes[key], 10);\n }\n });\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-DATERANGE:(.*)$/.exec(newLine);\n\n if (match && match[1]) {\n event = {\n type: 'tag',\n tagType: 'daterange'\n };\n event.attributes = parseAttributes(match[1]);\n ['ID', 'CLASS'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = String(event.attributes[key]);\n }\n });\n ['START-DATE', 'END-DATE'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = new Date(event.attributes[key]);\n }\n });\n ['DURATION', 'PLANNED-DURATION'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = parseFloat(event.attributes[key]);\n }\n });\n ['END-ON-NEXT'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = /YES/i.test(event.attributes[key]);\n }\n });\n ['SCTE35-CMD', ' SCTE35-OUT', 'SCTE35-IN'].forEach(function (key) {\n if (event.attributes.hasOwnProperty(key)) {\n event.attributes[key] = event.attributes[key].toString(16);\n }\n });\n const clientAttributePattern = /^X-([A-Z]+-)+[A-Z]+$/;\n\n for (const key in event.attributes) {\n if (!clientAttributePattern.test(key)) {\n continue;\n }\n\n const isHexaDecimal = /[0-9A-Fa-f]{6}/g.test(event.attributes[key]);\n const isDecimalFloating = /^\\d+(\\.\\d+)?$/.test(event.attributes[key]);\n event.attributes[key] = isHexaDecimal ? event.attributes[key].toString(16) : isDecimalFloating ? parseFloat(event.attributes[key]) : String(event.attributes[key]);\n }\n\n this.trigger('data', event);\n return;\n }\n\n match = /^#EXT-X-INDEPENDENT-SEGMENTS/.exec(newLine);\n\n if (match) {\n this.trigger('data', {\n type: 'tag',\n tagType: 'independent-segments'\n });\n return;\n }\n\n match = /^#EXT-X-CONTENT-STEERING:(.*)$/.exec(newLine);\n\n if (match) {\n event = {\n type: 'tag',\n tagType: 'content-steering'\n };\n event.attributes = parseAttributes(match[1]);\n this.trigger('data', event);\n return;\n } // unknown tag type\n\n\n this.trigger('data', {\n type: 'tag',\n data: newLine.slice(4)\n });\n });\n }\n /**\n * Add a parser for custom headers\n *\n * @param {Object} options a map of options for the added parser\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {string} options.customType the custom type to register to the output\n * @param {Function} [options.dataParser] function to parse the line into an object\n * @param {boolean} [options.segment] should tag data be attached to the segment object\n */\n\n\n addParser({\n expression,\n customType,\n dataParser,\n segment\n }) {\n if (typeof dataParser !== 'function') {\n dataParser = line => line;\n }\n\n this.customParsers.push(line => {\n const match = expression.exec(line);\n\n if (match) {\n this.trigger('data', {\n type: 'custom',\n data: dataParser(line),\n customType,\n segment\n });\n return true;\n }\n });\n }\n /**\n * Add a custom header mapper\n *\n * @param {Object} options\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {Function} options.map function to translate tag into a different tag\n */\n\n\n addTagMapper({\n expression,\n map\n }) {\n const mapFn = line => {\n if (expression.test(line)) {\n return map(line);\n }\n\n return line;\n };\n\n this.tagMappers.push(mapFn);\n }\n\n}\n\nconst camelCase = str => str.toLowerCase().replace(/-(\\w)/g, a => a[1].toUpperCase());\n\nconst camelCaseKeys = function (attributes) {\n const result = {};\n Object.keys(attributes).forEach(function (key) {\n result[camelCase(key)] = attributes[key];\n });\n return result;\n}; // set SERVER-CONTROL hold back based upon targetDuration and partTargetDuration\n// we need this helper because defaults are based upon targetDuration and\n// partTargetDuration being set, but they may not be if SERVER-CONTROL appears before\n// target durations are set.\n\n\nconst setHoldBack = function (manifest) {\n const {\n serverControl,\n targetDuration,\n partTargetDuration\n } = manifest;\n\n if (!serverControl) {\n return;\n }\n\n const tag = '#EXT-X-SERVER-CONTROL';\n const hb = 'holdBack';\n const phb = 'partHoldBack';\n const minTargetDuration = targetDuration && targetDuration * 3;\n const minPartDuration = partTargetDuration && partTargetDuration * 2;\n\n if (targetDuration && !serverControl.hasOwnProperty(hb)) {\n serverControl[hb] = minTargetDuration;\n this.trigger('info', {\n message: `${tag} defaulting HOLD-BACK to targetDuration * 3 (${minTargetDuration}).`\n });\n }\n\n if (minTargetDuration && serverControl[hb] < minTargetDuration) {\n this.trigger('warn', {\n message: `${tag} clamping HOLD-BACK (${serverControl[hb]}) to targetDuration * 3 (${minTargetDuration})`\n });\n serverControl[hb] = minTargetDuration;\n } // default no part hold back to part target duration * 3\n\n\n if (partTargetDuration && !serverControl.hasOwnProperty(phb)) {\n serverControl[phb] = partTargetDuration * 3;\n this.trigger('info', {\n message: `${tag} defaulting PART-HOLD-BACK to partTargetDuration * 3 (${serverControl[phb]}).`\n });\n } // if part hold back is too small default it to part target duration * 2\n\n\n if (partTargetDuration && serverControl[phb] < minPartDuration) {\n this.trigger('warn', {\n message: `${tag} clamping PART-HOLD-BACK (${serverControl[phb]}) to partTargetDuration * 2 (${minPartDuration}).`\n });\n serverControl[phb] = minPartDuration;\n }\n};\n/**\n * A parser for M3U8 files. The current interpretation of the input is\n * exposed as a property `manifest` on parser objects. It's just two lines to\n * create and parse a manifest once you have the contents available as a string:\n *\n * ```js\n * var parser = new m3u8.Parser();\n * parser.push(xhr.responseText);\n * ```\n *\n * New input can later be applied to update the manifest object by calling\n * `push` again.\n *\n * The parser attempts to create a usable manifest object even if the\n * underlying input is somewhat nonsensical. It emits `info` and `warning`\n * events during the parse if it encounters input that seems invalid or\n * requires some property of the manifest object to be defaulted.\n *\n * @class Parser\n * @extends Stream\n */\n\n\nclass Parser extends Stream {\n constructor() {\n super();\n this.lineStream = new LineStream();\n this.parseStream = new ParseStream();\n this.lineStream.pipe(this.parseStream);\n this.lastProgramDateTime = null;\n /* eslint-disable consistent-this */\n\n const self = this;\n /* eslint-enable consistent-this */\n\n const uris = [];\n let currentUri = {}; // if specified, the active EXT-X-MAP definition\n\n let currentMap; // if specified, the active decryption key\n\n let key;\n let hasParts = false;\n\n const noop = function () {};\n\n const defaultMediaGroups = {\n 'AUDIO': {},\n 'VIDEO': {},\n 'CLOSED-CAPTIONS': {},\n 'SUBTITLES': {}\n }; // This is the Widevine UUID from DASH IF IOP. The same exact string is\n // used in MPDs with Widevine encrypted streams.\n\n const widevineUuid = 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed'; // group segments into numbered timelines delineated by discontinuities\n\n let currentTimeline = 0; // the manifest is empty until the parse stream begins delivering data\n\n this.manifest = {\n allowCache: true,\n discontinuityStarts: [],\n dateRanges: [],\n segments: []\n }; // keep track of the last seen segment's byte range end, as segments are not required\n // to provide the offset, in which case it defaults to the next byte after the\n // previous segment\n\n let lastByterangeEnd = 0; // keep track of the last seen part's byte range end.\n\n let lastPartByterangeEnd = 0;\n const dateRangeTags = {};\n this.on('end', () => {\n // only add preloadSegment if we don't yet have a uri for it.\n // and we actually have parts/preloadHints\n if (currentUri.uri || !currentUri.parts && !currentUri.preloadHints) {\n return;\n }\n\n if (!currentUri.map && currentMap) {\n currentUri.map = currentMap;\n }\n\n if (!currentUri.key && key) {\n currentUri.key = key;\n }\n\n if (!currentUri.timeline && typeof currentTimeline === 'number') {\n currentUri.timeline = currentTimeline;\n }\n\n this.manifest.preloadSegment = currentUri;\n }); // update the manifest with the m3u8 entry from the parse stream\n\n this.parseStream.on('data', function (entry) {\n let mediaGroup;\n let rendition;\n ({\n tag() {\n // switch based on the tag type\n (({\n version() {\n if (entry.version) {\n this.manifest.version = entry.version;\n }\n },\n\n 'allow-cache'() {\n this.manifest.allowCache = entry.allowed;\n\n if (!('allowed' in entry)) {\n this.trigger('info', {\n message: 'defaulting allowCache to YES'\n });\n this.manifest.allowCache = true;\n }\n },\n\n byterange() {\n const byterange = {};\n\n if ('length' in entry) {\n currentUri.byterange = byterange;\n byterange.length = entry.length;\n\n if (!('offset' in entry)) {\n /*\n * From the latest spec (as of this writing):\n * https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.2.2\n *\n * Same text since EXT-X-BYTERANGE's introduction in draft 7:\n * https://tools.ietf.org/html/draft-pantos-http-live-streaming-07#section-3.3.1)\n *\n * \"If o [offset] is not present, the sub-range begins at the next byte\n * following the sub-range of the previous media segment.\"\n */\n entry.offset = lastByterangeEnd;\n }\n }\n\n if ('offset' in entry) {\n currentUri.byterange = byterange;\n byterange.offset = entry.offset;\n }\n\n lastByterangeEnd = byterange.offset + byterange.length;\n },\n\n endlist() {\n this.manifest.endList = true;\n },\n\n inf() {\n if (!('mediaSequence' in this.manifest)) {\n this.manifest.mediaSequence = 0;\n this.trigger('info', {\n message: 'defaulting media sequence to zero'\n });\n }\n\n if (!('discontinuitySequence' in this.manifest)) {\n this.manifest.discontinuitySequence = 0;\n this.trigger('info', {\n message: 'defaulting discontinuity sequence to zero'\n });\n }\n\n if (entry.title) {\n currentUri.title = entry.title;\n }\n\n if (entry.duration > 0) {\n currentUri.duration = entry.duration;\n }\n\n if (entry.duration === 0) {\n currentUri.duration = 0.01;\n this.trigger('info', {\n message: 'updating zero segment duration to a small value'\n });\n }\n\n this.manifest.segments = uris;\n },\n\n key() {\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring key declaration without attribute list'\n });\n return;\n } // clear the active encryption key\n\n\n if (entry.attributes.METHOD === 'NONE') {\n key = null;\n return;\n }\n\n if (!entry.attributes.URI) {\n this.trigger('warn', {\n message: 'ignoring key declaration without URI'\n });\n return;\n }\n\n if (entry.attributes.KEYFORMAT === 'com.apple.streamingkeydelivery') {\n this.manifest.contentProtection = this.manifest.contentProtection || {}; // TODO: add full support for this.\n\n this.manifest.contentProtection['com.apple.fps.1_0'] = {\n attributes: entry.attributes\n };\n return;\n }\n\n if (entry.attributes.KEYFORMAT === 'com.microsoft.playready') {\n this.manifest.contentProtection = this.manifest.contentProtection || {}; // TODO: add full support for this.\n\n this.manifest.contentProtection['com.microsoft.playready'] = {\n uri: entry.attributes.URI\n };\n return;\n } // check if the content is encrypted for Widevine\n // Widevine/HLS spec: https://storage.googleapis.com/wvdocs/Widevine_DRM_HLS.pdf\n\n\n if (entry.attributes.KEYFORMAT === widevineUuid) {\n const VALID_METHODS = ['SAMPLE-AES', 'SAMPLE-AES-CTR', 'SAMPLE-AES-CENC'];\n\n if (VALID_METHODS.indexOf(entry.attributes.METHOD) === -1) {\n this.trigger('warn', {\n message: 'invalid key method provided for Widevine'\n });\n return;\n }\n\n if (entry.attributes.METHOD === 'SAMPLE-AES-CENC') {\n this.trigger('warn', {\n message: 'SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead'\n });\n }\n\n if (entry.attributes.URI.substring(0, 23) !== 'data:text/plain;base64,') {\n this.trigger('warn', {\n message: 'invalid key URI provided for Widevine'\n });\n return;\n }\n\n if (!(entry.attributes.KEYID && entry.attributes.KEYID.substring(0, 2) === '0x')) {\n this.trigger('warn', {\n message: 'invalid key ID provided for Widevine'\n });\n return;\n } // if Widevine key attributes are valid, store them as `contentProtection`\n // on the manifest to emulate Widevine tag structure in a DASH mpd\n\n\n this.manifest.contentProtection = this.manifest.contentProtection || {};\n this.manifest.contentProtection['com.widevine.alpha'] = {\n attributes: {\n schemeIdUri: entry.attributes.KEYFORMAT,\n // remove '0x' from the key id string\n keyId: entry.attributes.KEYID.substring(2)\n },\n // decode the base64-encoded PSSH box\n pssh: decodeB64ToUint8Array(entry.attributes.URI.split(',')[1])\n };\n return;\n }\n\n if (!entry.attributes.METHOD) {\n this.trigger('warn', {\n message: 'defaulting key method to AES-128'\n });\n } // setup an encryption key for upcoming segments\n\n\n key = {\n method: entry.attributes.METHOD || 'AES-128',\n uri: entry.attributes.URI\n };\n\n if (typeof entry.attributes.IV !== 'undefined') {\n key.iv = entry.attributes.IV;\n }\n },\n\n 'media-sequence'() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid media sequence: ' + entry.number\n });\n return;\n }\n\n this.manifest.mediaSequence = entry.number;\n },\n\n 'discontinuity-sequence'() {\n if (!isFinite(entry.number)) {\n this.trigger('warn', {\n message: 'ignoring invalid discontinuity sequence: ' + entry.number\n });\n return;\n }\n\n this.manifest.discontinuitySequence = entry.number;\n currentTimeline = entry.number;\n },\n\n 'playlist-type'() {\n if (!/VOD|EVENT/.test(entry.playlistType)) {\n this.trigger('warn', {\n message: 'ignoring unknown playlist type: ' + entry.playlist\n });\n return;\n }\n\n this.manifest.playlistType = entry.playlistType;\n },\n\n map() {\n currentMap = {};\n\n if (entry.uri) {\n currentMap.uri = entry.uri;\n }\n\n if (entry.byterange) {\n currentMap.byterange = entry.byterange;\n }\n\n if (key) {\n currentMap.key = key;\n }\n },\n\n 'stream-inf'() {\n this.manifest.playlists = uris;\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!entry.attributes) {\n this.trigger('warn', {\n message: 'ignoring empty stream-inf attributes'\n });\n return;\n }\n\n if (!currentUri.attributes) {\n currentUri.attributes = {};\n }\n\n _extends(currentUri.attributes, entry.attributes);\n },\n\n media() {\n this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;\n\n if (!(entry.attributes && entry.attributes.TYPE && entry.attributes['GROUP-ID'] && entry.attributes.NAME)) {\n this.trigger('warn', {\n message: 'ignoring incomplete or missing media group'\n });\n return;\n } // find the media group, creating defaults as necessary\n\n\n const mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE];\n mediaGroupType[entry.attributes['GROUP-ID']] = mediaGroupType[entry.attributes['GROUP-ID']] || {};\n mediaGroup = mediaGroupType[entry.attributes['GROUP-ID']]; // collect the rendition metadata\n\n rendition = {\n default: /yes/i.test(entry.attributes.DEFAULT)\n };\n\n if (rendition.default) {\n rendition.autoselect = true;\n } else {\n rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT);\n }\n\n if (entry.attributes.LANGUAGE) {\n rendition.language = entry.attributes.LANGUAGE;\n }\n\n if (entry.attributes.URI) {\n rendition.uri = entry.attributes.URI;\n }\n\n if (entry.attributes['INSTREAM-ID']) {\n rendition.instreamId = entry.attributes['INSTREAM-ID'];\n }\n\n if (entry.attributes.CHARACTERISTICS) {\n rendition.characteristics = entry.attributes.CHARACTERISTICS;\n }\n\n if (entry.attributes.FORCED) {\n rendition.forced = /yes/i.test(entry.attributes.FORCED);\n } // insert the new rendition\n\n\n mediaGroup[entry.attributes.NAME] = rendition;\n },\n\n discontinuity() {\n currentTimeline += 1;\n currentUri.discontinuity = true;\n this.manifest.discontinuityStarts.push(uris.length);\n },\n\n 'program-date-time'() {\n if (typeof this.manifest.dateTimeString === 'undefined') {\n // PROGRAM-DATE-TIME is a media-segment tag, but for backwards\n // compatibility, we add the first occurence of the PROGRAM-DATE-TIME tag\n // to the manifest object\n // TODO: Consider removing this in future major version\n this.manifest.dateTimeString = entry.dateTimeString;\n this.manifest.dateTimeObject = entry.dateTimeObject;\n }\n\n currentUri.dateTimeString = entry.dateTimeString;\n currentUri.dateTimeObject = entry.dateTimeObject;\n const {\n lastProgramDateTime\n } = this;\n this.lastProgramDateTime = new Date(entry.dateTimeString).getTime(); // We should extrapolate Program Date Time backward only during first program date time occurrence.\n // Once we have at least one program date time point, we can always extrapolate it forward using lastProgramDateTime reference.\n\n if (lastProgramDateTime === null) {\n // Extrapolate Program Date Time backward\n // Since it is first program date time occurrence we're assuming that\n // all this.manifest.segments have no program date time info\n this.manifest.segments.reduceRight((programDateTime, segment) => {\n segment.programDateTime = programDateTime - segment.duration * 1000;\n return segment.programDateTime;\n }, this.lastProgramDateTime);\n }\n },\n\n targetduration() {\n if (!isFinite(entry.duration) || entry.duration < 0) {\n this.trigger('warn', {\n message: 'ignoring invalid target duration: ' + entry.duration\n });\n return;\n }\n\n this.manifest.targetDuration = entry.duration;\n setHoldBack.call(this, this.manifest);\n },\n\n start() {\n if (!entry.attributes || isNaN(entry.attributes['TIME-OFFSET'])) {\n this.trigger('warn', {\n message: 'ignoring start declaration without appropriate attribute list'\n });\n return;\n }\n\n this.manifest.start = {\n timeOffset: entry.attributes['TIME-OFFSET'],\n precise: entry.attributes.PRECISE\n };\n },\n\n 'cue-out'() {\n currentUri.cueOut = entry.data;\n },\n\n 'cue-out-cont'() {\n currentUri.cueOutCont = entry.data;\n },\n\n 'cue-in'() {\n currentUri.cueIn = entry.data;\n },\n\n 'skip'() {\n this.manifest.skip = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-SKIP', entry.attributes, ['SKIPPED-SEGMENTS']);\n },\n\n 'part'() {\n hasParts = true; // parts are always specifed before a segment\n\n const segmentIndex = this.manifest.segments.length;\n const part = camelCaseKeys(entry.attributes);\n currentUri.parts = currentUri.parts || [];\n currentUri.parts.push(part);\n\n if (part.byterange) {\n if (!part.byterange.hasOwnProperty('offset')) {\n part.byterange.offset = lastPartByterangeEnd;\n }\n\n lastPartByterangeEnd = part.byterange.offset + part.byterange.length;\n }\n\n const partIndex = currentUri.parts.length - 1;\n this.warnOnMissingAttributes_(`#EXT-X-PART #${partIndex} for segment #${segmentIndex}`, entry.attributes, ['URI', 'DURATION']);\n\n if (this.manifest.renditionReports) {\n this.manifest.renditionReports.forEach((r, i) => {\n if (!r.hasOwnProperty('lastPart')) {\n this.trigger('warn', {\n message: `#EXT-X-RENDITION-REPORT #${i} lacks required attribute(s): LAST-PART`\n });\n }\n });\n }\n },\n\n 'server-control'() {\n const attrs = this.manifest.serverControl = camelCaseKeys(entry.attributes);\n\n if (!attrs.hasOwnProperty('canBlockReload')) {\n attrs.canBlockReload = false;\n this.trigger('info', {\n message: '#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false'\n });\n }\n\n setHoldBack.call(this, this.manifest);\n\n if (attrs.canSkipDateranges && !attrs.hasOwnProperty('canSkipUntil')) {\n this.trigger('warn', {\n message: '#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set'\n });\n }\n },\n\n 'preload-hint'() {\n // parts are always specifed before a segment\n const segmentIndex = this.manifest.segments.length;\n const hint = camelCaseKeys(entry.attributes);\n const isPart = hint.type && hint.type === 'PART';\n currentUri.preloadHints = currentUri.preloadHints || [];\n currentUri.preloadHints.push(hint);\n\n if (hint.byterange) {\n if (!hint.byterange.hasOwnProperty('offset')) {\n // use last part byterange end or zero if not a part.\n hint.byterange.offset = isPart ? lastPartByterangeEnd : 0;\n\n if (isPart) {\n lastPartByterangeEnd = hint.byterange.offset + hint.byterange.length;\n }\n }\n }\n\n const index = currentUri.preloadHints.length - 1;\n this.warnOnMissingAttributes_(`#EXT-X-PRELOAD-HINT #${index} for segment #${segmentIndex}`, entry.attributes, ['TYPE', 'URI']);\n\n if (!hint.type) {\n return;\n } // search through all preload hints except for the current one for\n // a duplicate type.\n\n\n for (let i = 0; i < currentUri.preloadHints.length - 1; i++) {\n const otherHint = currentUri.preloadHints[i];\n\n if (!otherHint.type) {\n continue;\n }\n\n if (otherHint.type === hint.type) {\n this.trigger('warn', {\n message: `#EXT-X-PRELOAD-HINT #${index} for segment #${segmentIndex} has the same TYPE ${hint.type} as preload hint #${i}`\n });\n }\n }\n },\n\n 'rendition-report'() {\n const report = camelCaseKeys(entry.attributes);\n this.manifest.renditionReports = this.manifest.renditionReports || [];\n this.manifest.renditionReports.push(report);\n const index = this.manifest.renditionReports.length - 1;\n const required = ['LAST-MSN', 'URI'];\n\n if (hasParts) {\n required.push('LAST-PART');\n }\n\n this.warnOnMissingAttributes_(`#EXT-X-RENDITION-REPORT #${index}`, entry.attributes, required);\n },\n\n 'part-inf'() {\n this.manifest.partInf = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-PART-INF', entry.attributes, ['PART-TARGET']);\n\n if (this.manifest.partInf.partTarget) {\n this.manifest.partTargetDuration = this.manifest.partInf.partTarget;\n }\n\n setHoldBack.call(this, this.manifest);\n },\n\n 'daterange'() {\n this.manifest.dateRanges.push(camelCaseKeys(entry.attributes));\n const index = this.manifest.dateRanges.length - 1;\n this.warnOnMissingAttributes_(`#EXT-X-DATERANGE #${index}`, entry.attributes, ['ID', 'START-DATE']);\n const dateRange = this.manifest.dateRanges[index];\n\n if (dateRange.endDate && dateRange.startDate && new Date(dateRange.endDate) < new Date(dateRange.startDate)) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE END-DATE must be equal to or later than the value of the START-DATE'\n });\n }\n\n if (dateRange.duration && dateRange.duration < 0) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE DURATION must not be negative'\n });\n }\n\n if (dateRange.plannedDuration && dateRange.plannedDuration < 0) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE PLANNED-DURATION must not be negative'\n });\n }\n\n const endOnNextYes = !!dateRange.endOnNext;\n\n if (endOnNextYes && !dateRange.class) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE with an END-ON-NEXT=YES attribute must have a CLASS attribute'\n });\n }\n\n if (endOnNextYes && (dateRange.duration || dateRange.endDate)) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE with an END-ON-NEXT=YES attribute must not contain DURATION or END-DATE attributes'\n });\n }\n\n if (dateRange.duration && dateRange.endDate) {\n const startDate = dateRange.startDate;\n const newDateInSeconds = startDate.getTime() + dateRange.duration * 1000;\n this.manifest.dateRanges[index].endDate = new Date(newDateInSeconds);\n }\n\n if (!dateRangeTags[dateRange.id]) {\n dateRangeTags[dateRange.id] = dateRange;\n } else {\n for (const attribute in dateRangeTags[dateRange.id]) {\n if (!!dateRange[attribute] && JSON.stringify(dateRangeTags[dateRange.id][attribute]) !== JSON.stringify(dateRange[attribute])) {\n this.trigger('warn', {\n message: 'EXT-X-DATERANGE tags with the same ID in a playlist must have the same attributes values'\n });\n break;\n }\n } // if tags with the same ID do not have conflicting attributes, merge them\n\n\n const dateRangeWithSameId = this.manifest.dateRanges.findIndex(dateRangeToFind => dateRangeToFind.id === dateRange.id);\n this.manifest.dateRanges[dateRangeWithSameId] = _extends(this.manifest.dateRanges[dateRangeWithSameId], dateRange);\n dateRangeTags[dateRange.id] = _extends(dateRangeTags[dateRange.id], dateRange); // after merging, delete the duplicate dateRange that was added last\n\n this.manifest.dateRanges.pop();\n }\n },\n\n 'independent-segments'() {\n this.manifest.independentSegments = true;\n },\n\n 'content-steering'() {\n this.manifest.contentSteering = camelCaseKeys(entry.attributes);\n this.warnOnMissingAttributes_('#EXT-X-CONTENT-STEERING', entry.attributes, ['SERVER-URI']);\n }\n\n })[entry.tagType] || noop).call(self);\n },\n\n uri() {\n currentUri.uri = entry.uri;\n uris.push(currentUri); // if no explicit duration was declared, use the target duration\n\n if (this.manifest.targetDuration && !('duration' in currentUri)) {\n this.trigger('warn', {\n message: 'defaulting segment duration to the target duration'\n });\n currentUri.duration = this.manifest.targetDuration;\n } // annotate with encryption information, if necessary\n\n\n if (key) {\n currentUri.key = key;\n }\n\n currentUri.timeline = currentTimeline; // annotate with initialization segment information, if necessary\n\n if (currentMap) {\n currentUri.map = currentMap;\n } // reset the last byterange end as it needs to be 0 between parts\n\n\n lastPartByterangeEnd = 0; // Once we have at least one program date time we can always extrapolate it forward\n\n if (this.lastProgramDateTime !== null) {\n currentUri.programDateTime = this.lastProgramDateTime;\n this.lastProgramDateTime += currentUri.duration * 1000;\n } // prepare for the next URI\n\n\n currentUri = {};\n },\n\n comment() {// comments are not important for playback\n },\n\n custom() {\n // if this is segment-level data attach the output to the segment\n if (entry.segment) {\n currentUri.custom = currentUri.custom || {};\n currentUri.custom[entry.customType] = entry.data; // if this is manifest-level data attach to the top level manifest object\n } else {\n this.manifest.custom = this.manifest.custom || {};\n this.manifest.custom[entry.customType] = entry.data;\n }\n }\n\n })[entry.type].call(self);\n });\n }\n\n warnOnMissingAttributes_(identifier, attributes, required) {\n const missing = [];\n required.forEach(function (key) {\n if (!attributes.hasOwnProperty(key)) {\n missing.push(key);\n }\n });\n\n if (missing.length) {\n this.trigger('warn', {\n message: `${identifier} lacks required attribute(s): ${missing.join(', ')}`\n });\n }\n }\n /**\n * Parse the input string and update the manifest object.\n *\n * @param {string} chunk a potentially incomplete portion of the manifest\n */\n\n\n push(chunk) {\n this.lineStream.push(chunk);\n }\n /**\n * Flush any remaining input. This can be handy if the last line of an M3U8\n * manifest did not contain a trailing newline but the file has been\n * completely received.\n */\n\n\n end() {\n // flush any buffered input\n this.lineStream.push('\\n');\n\n if (this.manifest.dateRanges.length && this.lastProgramDateTime === null) {\n this.trigger('warn', {\n message: 'A playlist with EXT-X-DATERANGE tag must contain atleast one EXT-X-PROGRAM-DATE-TIME tag'\n });\n }\n\n this.lastProgramDateTime = null;\n this.trigger('end');\n }\n /**\n * Add an additional parser for non-standard tags\n *\n * @param {Object} options a map of options for the added parser\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {string} options.customType the custom type to register to the output\n * @param {Function} [options.dataParser] function to parse the line into an object\n * @param {boolean} [options.segment] should tag data be attached to the segment object\n */\n\n\n addParser(options) {\n this.parseStream.addParser(options);\n }\n /**\n * Add a custom header mapper\n *\n * @param {Object} options\n * @param {RegExp} options.expression a regular expression to match the custom header\n * @param {Function} options.map function to translate tag into a different tag\n */\n\n\n addTagMapper(options) {\n this.parseStream.addTagMapper(options);\n }\n\n}\n\nexport { LineStream, ParseStream, Parser };\n","import { Parser } from 'm3u8-parser';\nimport { Log } from '../log';\nimport { EventTool } from '../event-tool';\n\n/**\n * 创建一个 HLS 资源加载器\n */\nexport async function createHLSLoader(m3u8URL: string, concurrency = 10) {\n const parser = new Parser();\n parser.push(await (await fetch(m3u8URL)).text());\n parser.end();\n const segGroup = parser.manifest.segments.reduce(\n (acc, cur) => {\n acc[cur.map.uri] = acc[cur.map.uri] ?? [];\n acc[cur.map.uri].push(cur);\n return acc;\n },\n {} as Record,\n );\n const base = new URL(m3u8URL, location.href);\n\n const segmentBufferFetchqueue = {} as Record>;\n\n async function downloadSegments(\n segments: Parser['manifest']['segments'],\n ctrl: ReadableStreamDefaultController,\n evtTool: EventTool<{ progress: (progress: number) => void }>,\n ) {\n function createTaskQueue(concurrency: number) {\n let running = 0;\n let done = 0;\n let queue = [] as Array<() => Promise>;\n\n async function runTask(task: () => Promise) {\n queue.push(task);\n next();\n }\n\n async function next() {\n if (running < concurrency && queue.length) {\n const task = queue.shift();\n running++;\n try {\n await task?.();\n done++;\n evtTool.emit(\n 'progress',\n Math.round((done / segments.length) * 100) / 100,\n );\n next();\n } catch (err) {\n queue = [];\n ctrl.error(err);\n evtTool.destroy();\n Log.error(err);\n }\n running--;\n }\n }\n\n return runTask;\n }\n\n async function fetchSegmentBufferPromise(url: string) {\n return (await fetch(url)).arrayBuffer();\n }\n\n const runTask = createTaskQueue(concurrency);\n\n for (const [, item] of segments.entries()) {\n const url = new URL(item.uri, base).href;\n runTask(\n () => (segmentBufferFetchqueue[url] = fetchSegmentBufferPromise(url)),\n );\n }\n }\n\n async function getSegmentBuffer(url: string) {\n const segmentBuffer = await segmentBufferFetchqueue[url];\n delete segmentBufferFetchqueue[url];\n return segmentBuffer;\n }\n\n return {\n /**\n * 下载期望时间区间的分配数据,封装成流\n * 每个分片包含一个时间段,实际下载的分片数据时长会略大于期望的时间区间\n */\n load(expectStartTime = 0, expectEndTime = Infinity) {\n const filterSegGroup = {} as Record<\n string,\n {\n actualStartTime: number;\n actualEndTime: number;\n segments: Parser['manifest']['segments'];\n }\n >;\n let actualStartTime = 0;\n let actualEndTime = 0;\n for (const [gKey, gData] of Object.entries(segGroup)) {\n let time = 0;\n let segs = [] as Parser['manifest']['segments'];\n let startIdx = -1;\n let endIdx = -1;\n for (let i = 0; i < gData.length; i++) {\n const seg = gData[i];\n time += seg.duration;\n if (startIdx === -1 && time > expectStartTime / 1e6) {\n startIdx = i;\n actualStartTime = (time - seg.duration) * 1e6;\n }\n if (startIdx > -1 && endIdx === -1 && time >= expectEndTime / 1e6) {\n endIdx = i + 1;\n actualEndTime = time * 1e6;\n break;\n }\n }\n if (expectEndTime >= time * 1e6) {\n endIdx = gData.length;\n actualEndTime = time * 1e6;\n }\n\n if (endIdx > startIdx) {\n segs = segs.concat(gData.slice(startIdx, endIdx));\n }\n if (segs.length > 0)\n filterSegGroup[gKey] = {\n actualStartTime,\n actualEndTime,\n segments: segs,\n };\n }\n\n if (Object.keys(filterSegGroup).length === 0) return null;\n\n return Object.entries(filterSegGroup).map(\n ([initUri, { actualStartTime, actualEndTime, segments }]) => {\n let segIdx = 0;\n\n const evtTool = new EventTool<{\n progress: (progress: number) => void;\n }>();\n\n return {\n actualStartTime,\n actualEndTime,\n on: evtTool.on,\n stream: new ReadableStream({\n start: async (ctrl) => {\n downloadSegments(segments, ctrl, evtTool);\n ctrl.enqueue(\n new Uint8Array(\n await (\n await fetch(new URL(initUri, base).href)\n ).arrayBuffer(),\n ),\n );\n },\n pull: async (ctrl) => {\n const url = new URL(segments[segIdx].uri, base).href;\n ctrl.enqueue(new Uint8Array(await getSegmentBuffer(url)));\n segIdx += 1;\n if (segIdx >= segments.length) {\n ctrl.close();\n evtTool.destroy();\n }\n },\n }),\n };\n },\n );\n },\n };\n}\n","// 改编自 https://jameshfisher.com/2020/08/11/production-ready-green-screen-in-the-browser/\nconst vertexShader = `#version 300 es\n layout (location = 0) in vec4 a_position;\n layout (location = 1) in vec2 a_texCoord;\n out vec2 v_texCoord;\n void main () {\n gl_Position = a_position;\n v_texCoord = a_texCoord;\n }\n`;\n\nconst fragmentShader = `#version 300 es\nprecision mediump float;\nout vec4 FragColor;\nin vec2 v_texCoord;\n\nuniform sampler2D frameTexture;\nuniform vec3 keyColor;\n\n// 色度的相似度计算\nuniform float similarity;\n// 透明度的平滑度计算\nuniform float smoothness;\n// 降低绿幕饱和度,提高抠图准确度\nuniform float spill;\n\nvec2 RGBtoUV(vec3 rgb) {\n return vec2(\n rgb.r * -0.169 + rgb.g * -0.331 + rgb.b * 0.5 + 0.5,\n rgb.r * 0.5 + rgb.g * -0.419 + rgb.b * -0.081 + 0.5\n );\n}\n\nvoid main() {\n // 获取当前像素的rgba值\n vec4 rgba = texture(frameTexture, v_texCoord);\n // 计算当前像素与绿幕像素的色度差值\n vec2 chromaVec = RGBtoUV(rgba.rgb) - RGBtoUV(keyColor);\n // 计算当前像素与绿幕像素的色度距离(向量长度), 越相像则色度距离越小\n float chromaDist = sqrt(dot(chromaVec, chromaVec));\n // 设置了一个相似度阈值,baseMask为负,则表明是绿幕,为正则表明不是绿幕\n float baseMask = chromaDist - similarity;\n // 如果baseMask为负数,fullMask等于0;baseMask为正数,越大,则透明度越低\n float fullMask = pow(clamp(baseMask / smoothness, 0., 1.), 1.5);\n rgba.a = fullMask; // 设置透明度\n // 如果baseMask为负数,spillVal等于0;baseMask为整数,越小,饱和度越低\n float spillVal = pow(clamp(baseMask / spill, 0., 1.), 1.5);\n float desat = clamp(rgba.r * 0.2126 + rgba.g * 0.7152 + rgba.b * 0.0722, 0., 1.); // 计算当前像素的灰度值\n rgba.rgb = mix(vec3(desat, desat, desat), rgba.rgb, spillVal);\n FragColor = rgba;\n}\n`;\n\nconst POINT_POS = [-1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1];\nconst TEX_COORD_POS = [0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1];\n\n// 初始化着色器程序,让 WebGL 知道如何绘制我们的数据\nfunction initShaderProgram(\n gl: WebGLRenderingContext,\n vsSource: string,\n fsSource: string,\n) {\n const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource)!;\n const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource)!;\n\n // 创建着色器程序\n const shaderProgram = gl.createProgram()!;\n gl.attachShader(shaderProgram, vertexShader);\n gl.attachShader(shaderProgram, fragmentShader);\n gl.linkProgram(shaderProgram);\n\n if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {\n throw Error(\n gl.getProgramInfoLog(shaderProgram) ??\n 'Unable to initialize the shader program',\n );\n }\n\n return shaderProgram;\n}\n\n// 创建指定类型的着色器,上传 source 源码并编译\nfunction loadShader(gl: WebGLRenderingContext, type: number, source: string) {\n const shader = gl.createShader(type)!;\n\n // Send the source to the shader object\n gl.shaderSource(shader, source);\n\n // Compile the shader program\n gl.compileShader(shader);\n\n // See if it compiled successfully\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const errMsg = gl.getShaderInfoLog(shader);\n gl.deleteShader(shader);\n throw Error(errMsg ?? 'An error occurred compiling the shaders');\n }\n\n return shader;\n}\n\nfunction updateTexture(\n gl: WebGLRenderingContext,\n img: TImgSource,\n texture: WebGLTexture,\n) {\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img);\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n}\n\nfunction initTexture(gl: WebGLRenderingContext) {\n const texture = gl.createTexture();\n if (texture == null) throw Error('Create WebGL texture error');\n gl.bindTexture(gl.TEXTURE_2D, texture);\n\n // put a single pixel in the texture so we can use it immediately.\n const level = 0;\n const internalFormat = gl.RGBA;\n const width = 1;\n const height = 1;\n const border = 0;\n const srcFormat = gl.RGBA;\n const srcType = gl.UNSIGNED_BYTE;\n const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue\n gl.texImage2D(\n gl.TEXTURE_2D,\n level,\n internalFormat,\n width,\n height,\n border,\n srcFormat,\n srcType,\n pixel,\n );\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n return texture;\n}\n\ninterface IChromakeyOpts {\n keyColor: [number, number, number];\n similarity: number;\n smoothness: number;\n spill: number;\n}\n\nfunction initCvs(\n opts: {\n width: number;\n height: number;\n } & IChromakeyOpts,\n) {\n const cvs =\n 'document' in globalThis\n ? globalThis.document.createElement('canvas')\n : new OffscreenCanvas(opts.width, opts.height);\n cvs.width = opts.width;\n cvs.height = opts.height;\n\n const gl = cvs.getContext('webgl2', {\n premultipliedAlpha: false,\n alpha: true,\n }) as WebGL2RenderingContext | null;\n\n if (gl == null) throw Error('Cant create gl context');\n\n const shaderProgram = initShaderProgram(gl, vertexShader, fragmentShader);\n gl.useProgram(shaderProgram);\n\n gl.uniform3fv(\n gl.getUniformLocation(shaderProgram, 'keyColor'),\n opts.keyColor.map((v) => v / 255),\n );\n gl.uniform1f(\n gl.getUniformLocation(shaderProgram, 'similarity'),\n opts.similarity,\n );\n gl.uniform1f(\n gl.getUniformLocation(shaderProgram, 'smoothness'),\n opts.smoothness,\n );\n gl.uniform1f(gl.getUniformLocation(shaderProgram, 'spill'), opts.spill);\n\n const posBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(POINT_POS), gl.STATIC_DRAW);\n const a_position = gl.getAttribLocation(shaderProgram, 'a_position');\n gl.vertexAttribPointer(\n a_position,\n 2,\n gl.FLOAT,\n false,\n Float32Array.BYTES_PER_ELEMENT * 2,\n 0,\n );\n gl.enableVertexAttribArray(a_position);\n\n const texCoordBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array(TEX_COORD_POS),\n gl.STATIC_DRAW,\n );\n const a_texCoord = gl.getAttribLocation(shaderProgram, 'a_texCoord');\n gl.vertexAttribPointer(\n a_texCoord,\n 2,\n gl.FLOAT,\n false,\n Float32Array.BYTES_PER_ELEMENT * 2,\n 0,\n );\n gl.enableVertexAttribArray(a_texCoord);\n\n gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);\n\n return { cvs, gl };\n}\n\ntype TImgSource =\n | HTMLVideoElement\n | HTMLCanvasElement\n | HTMLImageElement\n | ImageBitmap\n | OffscreenCanvas\n | VideoFrame;\n\nfunction getSourceWH(imgSource: TImgSource) {\n return imgSource instanceof VideoFrame\n ? { width: imgSource.codedWidth, height: imgSource.codedHeight }\n : { width: imgSource.width, height: imgSource.height };\n}\n\nfunction getKeyColor(imgSource: TImgSource) {\n const cvs = new OffscreenCanvas(1, 1);\n const ctx = cvs.getContext('2d')!;\n ctx.drawImage(imgSource, 0, 0);\n const {\n data: [r, g, b],\n } = ctx.getImageData(0, 0, 1, 1);\n return [r, g, b] as [number, number, number];\n}\n\n/**\n * 绿幕抠图\n * keyColor 需要扣除的背景色,若不传则取第一个像素点\n * similarity 背景色相似度阈值,过小可能保留背景色,过大可能扣掉更多非背景像素点\n * smoothness 平滑度;过小可能出现锯齿,过大导致整体变透明\n * spill 饱和度;过小可能保留绿色混合,过大导致图片变灰度\n * @param opts: {\n * keyColor?: [r, g, b]\n * similarity: number\n * smoothness: number\n * spill: number\n * }\n */\nexport const createChromakey = (\n opts: Omit & {\n keyColor?: [number, number, number];\n },\n) => {\n let cvs: HTMLCanvasElement | OffscreenCanvas | null = null;\n let gl: WebGLRenderingContext | null = null;\n let keyC = opts.keyColor;\n let texture: WebGLTexture | null = null;\n\n return async (imgSource: TImgSource) => {\n if (cvs == null || gl == null || texture == null) {\n if (keyC == null) keyC = getKeyColor(imgSource);\n ({ cvs, gl } = initCvs({\n ...getSourceWH(imgSource),\n keyColor: keyC,\n ...opts,\n }));\n texture = initTexture(gl);\n }\n\n updateTexture(gl, imgSource, texture);\n\n if (\n globalThis.VideoFrame != null &&\n imgSource instanceof globalThis.VideoFrame\n ) {\n const rs = new VideoFrame(cvs, {\n alpha: 'keep',\n timestamp: imgSource.timestamp,\n duration: imgSource.duration ?? undefined,\n });\n imgSource.close();\n return rs;\n }\n\n return createImageBitmap(cvs, {\n imageOrientation: imgSource instanceof ImageBitmap ? 'flipY' : 'none',\n });\n };\n};\n","import { EventTool } from '../event-tool';\n\ninterface IPoint {\n x: number;\n y: number;\n}\n\n/**\n * @see {@link Rect.CTRL_KEYS}\n */\nexport type TCtrlKey = (typeof Rect.CTRL_KEYS)[number];\n\nexport interface IRectBaseProps {\n x: number;\n y: number;\n w: number;\n h: number;\n angle: number;\n}\n\n/**\n * 用于记录素材在视频或画布中的空间属性:位置、大小、旋转\n *\n * 并提供控制点位置,支持用户在画布中缩放、旋转素材\n *\n * 一般由内部 WebAV SDK 内部创建维护\n *\n * @see {@link Combinator}, {@link OffscreenSprite}\n * @see [AVCanvas](../../av-canvas/classes/AVCanvas.html), {@link VisibleSprite}\n *\n * @see [视频剪辑](https://bilibili.github.io/WebAV/demo/6_4-video-editor)\n */\nexport class Rect implements IRectBaseProps {\n /**\n * 统一设置所有 {@link Rect.ctrls} 的边长\n *\n * ⚠️ 交给 [AVCanvas](../../av-canvas/classes/AVCanvas.html) 设置,不要随意改变它的值\n */\n static CTRL_SIZE = 16;\n\n /**\n * 控制点:上、下、左、右,左上、左下、右上、右下、旋转\n */\n static readonly CTRL_KEYS = [\n 't',\n 'b',\n 'l',\n 'r',\n 'lt',\n 'lb',\n 'rt',\n 'rb',\n 'rotate',\n ] as const;\n\n #evtTool = new EventTool<{\n propsChange: (props: Partial) => void;\n }>();\n /**\n * 监听属性变更事件\n * @example\n * rect.on('propsChange', (changedProps) => {})\n */\n on = this.#evtTool.on;\n\n #x = 0;\n /**\n * x 坐标\n */\n get x() {\n return this.#x;\n }\n set x(v) {\n this.#setBaseProps('x', v);\n }\n #y = 0;\n get y() {\n return this.#y;\n }\n /**\n * y 坐标\n */\n set y(v) {\n this.#setBaseProps('y', v);\n }\n #w = 0;\n /**\n * 宽\n */\n get w() {\n return this.#w;\n }\n set w(v) {\n this.#setBaseProps('w', v);\n }\n #h = 0;\n /**\n * 高\n */\n get h() {\n return this.#h;\n }\n set h(v) {\n this.#setBaseProps('h', v);\n }\n #angle = 0;\n /**\n * 旋转角度\n * @see [MDN Canvas rotate](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/rotate)\n */\n get angle() {\n return this.#angle;\n }\n set angle(v) {\n this.#setBaseProps('angle', v);\n }\n\n #setBaseProps(prop: keyof IRectBaseProps, v: number) {\n const changed = this[prop] !== v;\n switch (prop) {\n case 'x':\n this.#x = v;\n break;\n case 'y':\n this.#y = v;\n break;\n case 'w':\n this.#w = v;\n break;\n case 'h':\n this.#h = v;\n break;\n case 'angle':\n this.#angle = v;\n break;\n }\n if (changed) this.#evtTool.emit('propsChange', { [prop]: v });\n\n // concat emit\n // if (changed) this.#nextTickEmitData[prop] = v;\n // Promise.resolve().then(() => {\n // if (Object.keys(this.#nextTickEmitData).length > 0) {\n // const data = this.#nextTickEmitData;\n // this.#nextTickEmitData = {};\n // this.#evtTool.emit('propsChange', { ...data });\n // }\n // });\n }\n\n /**\n * 如果当前实例是 Rect 控制点({@link Rect.ctrls})之一,`master` 将指向该 Rect\n *\n * 控制点的坐标是相对于它的 `master` 定位到\n */\n master: Rect | null = null;\n\n constructor(\n x?: number,\n y?: number,\n w?: number,\n h?: number,\n master?: Rect | null,\n ) {\n this.x = x ?? 0;\n this.y = y ?? 0;\n this.w = w ?? 0;\n this.h = h ?? 0;\n this.master = master ?? null;\n }\n\n /**\n * 根据坐标、宽高计算出来的矩形中心点\n */\n get center(): IPoint {\n const { x, y, w, h } = this;\n return { x: x + w / 2, y: y + h / 2 };\n }\n\n /**\n * 是否保持固定宽高比例,禁止变形缩放\n *\n * 值为 true 时,{@link Rect.ctrls} 将缺少上下左右四个控制点\n */\n fixedAspectRatio = false;\n\n /**\n * 根据坐标、宽高计算出来的矩形控制点\n *\n * {@link Rect.fixedAspectRatio} = `true` 时,将缺少上下左右(`t,b,l,r`)四个控制点\n */\n get ctrls() {\n const { w, h } = this;\n // 控制点元素大小, 以 分辨率 为基准\n const sz = Rect.CTRL_SIZE;\n // half size\n const hfSz = sz / 2;\n const hfW = w / 2;\n const hfH = h / 2;\n // rotate size\n const rtSz = sz * 1.5;\n const hfRtSz = rtSz / 2;\n // ctrl 坐标是相对于 sprite 中心点\n const tblr = this.fixedAspectRatio\n ? {}\n : {\n t: new Rect(-hfSz, -hfH - hfSz, sz, sz, this),\n b: new Rect(-hfSz, hfH - hfSz, sz, sz, this),\n l: new Rect(-hfW - hfSz, -hfSz, sz, sz, this),\n r: new Rect(hfW - hfSz, -hfSz, sz, sz, this),\n };\n return {\n ...tblr,\n lt: new Rect(-hfW - hfSz, -hfH - hfSz, sz, sz, this),\n lb: new Rect(-hfW - hfSz, hfH - hfSz, sz, sz, this),\n rt: new Rect(hfW - hfSz, -hfH - hfSz, sz, sz, this),\n rb: new Rect(hfW - hfSz, hfH - hfSz, sz, sz, this),\n rotate: new Rect(-hfRtSz, -hfH - sz * 2 - hfRtSz, rtSz, rtSz, this),\n };\n }\n\n clone(): Rect {\n const { x, y, w, h, master } = this;\n const rect = new Rect(x, y, w, h, master);\n rect.angle = this.angle;\n rect.fixedAspectRatio = this.fixedAspectRatio;\n return rect;\n }\n\n /**\n * 检测目标坐标是否命中当前实例\n * @param tx 目标点 x 坐标\n * @param ty 目标点 y 坐标\n */\n checkHit(tx: number, ty: number): boolean {\n let { angle, center, x, y, w, h, master } = this;\n // ctrls 的中心点、旋转角度都去自于 master (sprite)\n const cnt = master?.center ?? center;\n const agl = master?.angle ?? angle;\n // ctrl 初始化时其坐标就是相对于 master 的,参见 get ctrls()\n // 所以此处不用转换\n if (master == null) {\n x = x - cnt.x;\n y = y - cnt.y;\n }\n // 鼠标点击坐标映射成以中点为原点的坐标\n const tOX = tx - cnt.x;\n const tOY = ty - cnt.y;\n // 如果有旋转,映射成相对 sprite 原点,旋转前的坐标\n let mx = tOX;\n let my = tOY;\n if (agl !== 0) {\n // 推导公式 https://github.com/hughfenghen/hughfenghen.github.io/issues/96\n mx = tOX * Math.cos(agl) + tOY * Math.sin(agl);\n my = tOY * Math.cos(agl) - tOX * Math.sin(agl);\n }\n\n if (mx < x || mx > x + w || my < y || my > y + h) return false;\n\n return true;\n }\n}\n","import { EventTool } from '../event-tool';\nimport { IRectBaseProps, Rect } from './rect';\n\ninterface IAnimationOpts {\n duration: number;\n delay?: number;\n iterCount?: number;\n}\n\ntype TAnimateProps = IRectBaseProps & { opacity: number };\n\nexport type TAnimationKeyFrame = Array<[number, Partial]>;\n\ntype TKeyFrameOpts = Partial<\n Record<`${number}%` | 'from' | 'to', Partial>\n>;\n\n/**\n * Sprite 基类\n *\n * @see {@link OffscreenSprite}\n * @see {@link VisibleSprite}\n */\nexport abstract class BaseSprite {\n /**\n * 控制素材在视频中的空间属性(坐标、旋转、缩放)\n */\n rect = new Rect();\n\n /**\n * 控制素材在视频中的时间偏移与时长,常用于剪辑场景时间轴(轨道)模块\n *\n * duration 不能大于引用 {@link IClip} 的时长,单位 微秒\n */\n time = {\n offset: 0,\n duration: 0,\n };\n\n /**\n * 元素是否可见,用于不想删除,期望临时隐藏 Sprite 的场景\n */\n visible = true;\n\n #evtTool = new EventTool<{\n propsChange: (\n value: Partial<{ rect: Partial; zIndex: number }>,\n ) => void;\n }>();\n /**\n * 监听属性变更事件\n * @example\n * sprite.on('propsChange', (changedProps) => {})\n */\n on = this.#evtTool.on;\n\n #zIndex = 0;\n get zIndex(): number {\n return this.#zIndex;\n }\n\n /**\n * 控制素材间的层级关系,zIndex 值较小的素材会被遮挡\n */\n set zIndex(v: number) {\n const changed = this.#zIndex !== v;\n this.#zIndex = v;\n if (changed) this.#evtTool.emit('propsChange', { zIndex: v });\n }\n\n /**\n * 不透明度\n */\n opacity = 1;\n\n /**\n * 水平或垂直方向翻转素材\n */\n flip: 'horizontal' | 'vertical' | null = null;\n\n #animatKeyFrame: TAnimationKeyFrame | null = null;\n\n #animatOpts: Required | null = null;\n\n /**\n * @see {@link IClip.ready}\n */\n ready = Promise.resolve();\n\n constructor() {\n this.rect.on('propsChange', (props) => {\n this.#evtTool.emit('propsChange', { rect: props });\n });\n }\n\n protected _render(\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n ): void {\n const {\n rect: { center, angle },\n } = this;\n ctx.setTransform(\n // 水平 缩放、倾斜\n this.flip === 'horizontal' ? -1 : 1,\n 0,\n // 垂直 倾斜、缩放\n 0,\n this.flip === 'vertical' ? -1 : 1,\n // 坐标原点偏移 x y\n center.x,\n center.y,\n );\n // 任意方向翻转,旋转角度转为负值,才能与控制点同步\n ctx.rotate((this.flip == null ? 1 : -1) * angle);\n\n ctx.globalAlpha = this.opacity;\n }\n\n /**\n * 给素材添加动画,使用方法参考 css animation\n *\n * @example\n * sprite.setAnimation(\n * {\n * '0%': { x: 0, y: 0 },\n * '25%': { x: 1200, y: 680 },\n * '50%': { x: 1200, y: 0 },\n * '75%': { x: 0, y: 680 },\n * '100%': { x: 0, y: 0 },\n * },\n * { duration: 4, iterCount: 1 },\n * );\n *\n * @see [视频水印动画](https://bilibili.github.io/WebAV/demo/2_1-concat-video)\n */\n setAnimation(keyFrame: TKeyFrameOpts, opts: IAnimationOpts): void {\n this.#animatKeyFrame = Object.entries(keyFrame).map(([k, val]) => {\n const numK = { from: 0, to: 100 }[k] ?? Number(k.slice(0, -1));\n if (isNaN(numK) || numK > 100 || numK < 0) {\n throw Error('keyFrame must between 0~100');\n }\n return [numK / 100, val];\n }) as TAnimationKeyFrame;\n this.#animatOpts = Object.assign({}, this.#animatOpts, {\n duration: opts.duration * 1e6,\n delay: (opts.delay ?? 0) * 1e6,\n iterCount: opts.iterCount ?? Infinity,\n });\n }\n\n /**\n * 如果当前 sprite 已被设置动画,将 sprite 的动画属性设定到指定时间的状态\n */\n animate(time: number): void {\n if (\n this.#animatKeyFrame == null ||\n this.#animatOpts == null ||\n time < this.#animatOpts.delay\n )\n return;\n const updateProps = linearTimeFn(\n time,\n this.#animatKeyFrame,\n this.#animatOpts,\n );\n for (const k in updateProps) {\n switch (k) {\n case 'opacity':\n this.opacity = updateProps[k] as number;\n break;\n case 'x':\n case 'y':\n case 'w':\n case 'h':\n case 'angle':\n this.rect[k] = updateProps[k] as number;\n break;\n }\n }\n }\n\n /**\n * 将当前 sprite 的属性赋值到目标\n *\n * 用于 clone,或 {@link VisibleSprite} 与 {@link OffscreenSprite} 实例间的类型转换\n */\n copyStateTo(target: T) {\n target.#animatKeyFrame = this.#animatKeyFrame;\n target.#animatOpts = this.#animatOpts;\n target.visible = this.visible;\n target.zIndex = this.zIndex;\n target.opacity = this.opacity;\n target.flip = this.flip;\n target.rect = this.rect.clone();\n target.time = { ...this.time };\n }\n\n protected destroy() {\n this.#evtTool.destroy();\n }\n}\n\nexport function linearTimeFn(\n time: number,\n kf: TAnimationKeyFrame,\n opts: Required,\n): Partial {\n if (time / opts.duration >= opts.iterCount) return {};\n\n const t = time % opts.duration;\n\n const process = time === opts.duration ? 1 : t / opts.duration;\n const idx = kf.findIndex((it) => it[0] >= process);\n if (idx === -1) return {};\n\n const startState = kf[idx - 1];\n const nextState = kf[idx];\n const nextFrame = nextState[1];\n if (startState == null) return nextFrame;\n const startFrame = startState[1];\n\n const rs: Partial = {};\n // 介于两个Frame状态间的进度\n const stateProcess =\n (process - startState[0]) / (nextState[0] - startState[0]);\n for (const prop in nextFrame) {\n const p = prop as keyof TAnimateProps;\n if (startFrame[p] == null) continue;\n // @ts-expect-error\n // eslint-disable-next-line\n rs[p] = (nextFrame[p] - startFrame[p]) * stateProcess + startFrame[p];\n }\n\n return rs;\n}\n","import { BaseSprite } from './base-sprite';\nimport { IClip } from '../clips';\nimport { Log } from '../log';\n\n/**\n * 包装 {@link IClip} 给素材扩展坐标、层级、透明度等信息,用于 {@link Combinator} 在后台合成视频\n *\n * 跟 {@link VisibleSprite} 非常相似,应用场景不同\n *\n * @example\n * const spr = new OffscreenSprite(\n * new MP4Clip((await fetch('')).body),\n * );\n * spr.opacity = 0.5 // 半透明\n * spr.rect.x = 100 // x 坐标偏移 100 像素\n * spr.time.offset = 10e6 // 视频第 10s 开始绘制该视频素材\n *\n * @see [视频合成](https://bilibili.github.io/WebAV/demo/2_1-concat-video)\n */\nexport class OffscreenSprite extends BaseSprite {\n #clip: IClip;\n\n // 保持最近一帧,若 clip 在当前帧无数据,则绘制最近一帧\n #lastVf: VideoFrame | ImageBitmap | null = null;\n\n #destroyed = false;\n\n constructor(clip: IClip) {\n super();\n this.#clip = clip;\n this.ready = clip.ready.then(({ width, height, duration }) => {\n this.rect.w = this.rect.w === 0 ? width : this.rect.w;\n this.rect.h = this.rect.h === 0 ? height : this.rect.h;\n this.time.duration =\n this.time.duration === 0 ? duration : this.time.duration;\n });\n }\n\n /**\n * 绘制素材指定时刻的图像到 canvas 上下文,并返回对应的音频数据\n * @param time 指定时刻,微秒\n */\n async offscreenRender(\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n time: number,\n ): Promise<{\n audio: Float32Array[];\n done: boolean;\n }> {\n this.animate(time);\n super._render(ctx);\n const { w, h } = this.rect;\n const { video, audio, state } = await this.#clip.tick(time);\n if (state === 'done') {\n return {\n audio: audio ?? [],\n done: true,\n };\n }\n\n const imgSource = video ?? this.#lastVf;\n if (imgSource != null) {\n ctx.drawImage(imgSource, -w / 2, -h / 2, w, h);\n }\n\n if (video != null) {\n this.#lastVf?.close();\n this.#lastVf = video;\n }\n\n return {\n audio: audio ?? [],\n done: false,\n };\n }\n\n async clone() {\n const spr = new OffscreenSprite(await this.#clip.clone());\n await spr.ready;\n this.copyStateTo(spr);\n return spr;\n }\n\n destroy(): void {\n if (this.#destroyed) return;\n this.#destroyed = true;\n\n Log.info('OffscreenSprite destroy');\n super.destroy();\n this.#lastVf?.close();\n this.#lastVf = null;\n this.#clip.destroy();\n }\n}\n","import { BaseSprite } from './base-sprite';\nimport { IClip } from '../clips';\nimport { Log } from '../log';\n\n/**\n * 包装 {@link IClip} 给素材扩展坐标、层级、透明度等信息,用于 {@link [AVCanvas](../../av-canvas/classes/AVCanvas.html)} 响应用户交互\n *\n * 跟 {@link OffscreenSprite} 非常相似,应用场景不同\n *\n * @example\n * const spr = new VisibleSprite(\n * new MP4Clip((await fetch('')).body),\n * );\n * spr.opacity = 0.5 // 半透明\n * spr.rect.x = 100 // x 坐标偏移 100 像素\n * spr.time.offset = 10e6 // 视频第 10s 开始绘制素材\n *\n * @see [视频剪辑](https://bilibili.github.io/WebAV/demo/6_4-video-editor)\n *\n */\nexport class VisibleSprite extends BaseSprite {\n #clip: IClip;\n getClip() {\n return this.#clip;\n }\n\n constructor(clip: IClip) {\n super();\n this.#clip = clip;\n this.ready = clip.ready.then(({ width, height, duration }) => {\n this.rect.w = this.rect.w === 0 ? width : this.rect.w;\n this.rect.h = this.rect.h === 0 ? height : this.rect.h;\n this.time.duration =\n this.time.duration === 0 ? duration : this.time.duration;\n });\n }\n\n // 保持最近一帧,若 clip 在当前帧无数据,则绘制最近一帧\n #lastVf: VideoFrame | ImageBitmap | null = null;\n #lastAudio: Float32Array[] = [];\n #ticking = false;\n #update(time: number) {\n if (this.#ticking) return;\n this.#ticking = true;\n this.#clip\n .tick(time)\n .then(({ video, audio }) => {\n if (video != null) {\n this.#lastVf?.close();\n this.#lastVf = video ?? null;\n }\n this.#lastAudio = audio ?? [];\n })\n .finally(() => {\n this.#ticking = false;\n });\n }\n\n /**\n * 提前准备指定 time 的帧\n */\n preFrame(time: number) {\n this.#update(time);\n }\n\n #lastTime = -1;\n /**\n * 绘制素材指定时刻的图像到 canvas 上下文,并返回对应的音频数据\n * @param time 指定时刻,微秒\n */\n render(\n ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n time: number,\n ): { audio: Float32Array[] } {\n this.animate(time);\n super._render(ctx);\n const { w, h } = this.rect;\n if (this.#lastTime !== time) this.#update(time);\n this.#lastTime = time;\n\n const audio = this.#lastAudio;\n this.#lastAudio = [];\n const video = this.#lastVf;\n if (video != null) ctx.drawImage(video, -w / 2, -h / 2, w, h);\n\n return { audio };\n }\n\n #destroyed = false;\n destroy(): void {\n if (this.#destroyed) return;\n this.#destroyed = true;\n\n Log.info('VisibleSprite destroy');\n super.destroy();\n this.#lastVf?.close();\n this.#lastVf = null;\n this.#clip.destroy();\n }\n}\n","import { OffscreenSprite } from './sprite/offscreen-sprite';\nimport { file2stream, recodemux } from './mp4-utils';\nimport { Log } from './log';\nimport { mixinPCM, sleep } from './av-utils';\nimport { EventTool } from './event-tool';\nimport { DEFAULT_AUDIO_CONF } from './clips';\n\ninterface ICombinatorOpts {\n width?: number;\n height?: number;\n bitrate?: number;\n bgColor?: string;\n videoCodec?: string;\n /**\n * false 合成的视频文件中排除音轨\n */\n audio?: false;\n /**\n * 向输出的视频中写入 meta tags 数据\n */\n metaDataTags?: Record;\n /**\n * 不安全,随时可能废弃\n */\n __unsafe_hardwareAcceleration__?: HardwarePreference;\n}\n\nlet COM_ID = 0;\n\n/**\n * 避免 VideoEncoder 队列中的 VideoFrame 过多,打爆显存\n */\nasync function letEncoderCalmDown(getQSize: () => number) {\n if (getQSize() > 50) {\n await sleep(15);\n await letEncoderCalmDown(getQSize);\n }\n}\n\n/**\n * 视频合成器;能添加多个 {@link VisibleSprite},根据它们位置、层级、时间偏移等信息,合成输出为视频文件\n * @see [视频合成](https://bilibili.github.io/WebAV/demo/2_1-concat-video)\n * @see [视频配音](https://bilibili.github.io/WebAV/demo/2_2-video-add-audio)\n * @example\n * const spr1 = new OffscreenSprite(\n * new MP4Clip((await fetch('')).body),\n * );\n * const spr2 = new OffscreenSprite(\n * new AudioClip((await fetch('