>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,o.isLeading<<2|o.dependsOn,o.isDependedOn<<6|o.hasRedundancy<<4|o.paddingValue<<1|o.isNonSync,61440&o.degradPrio,15&o.degradPrio,l>>>24&255,l>>>16&255,l>>>8&255,255&l],12+16*i);return e.box(e.types.trun,h)},e.initSegment=function(t){e.types||e.init();var r,i=e.moov(t);return(r=new Uint8Array(e.FTYP.byteLength+i.byteLength)).set(e.FTYP),r.set(i,e.FTYP.byteLength),r},e}();function O(e,t,r,i){void 0===r&&(r=1),void 0===i&&(i=!1);var a=e*t*r;return i?Math.round(a):a}function C(e,t){return void 0===t&&(t=!1),O(e,1e3,1/9e4,t)}function I(e,t){return void 0===t&&(t=1),O(e,9e4,1/t)}var P=I(10),x=I(.2),M=null;function F(e,t){var r;if(void 0===t)return e;for(r=t4294967296;)e+=r;return e}var U,N=function(){function e(e,t,r,i){if(this.observer=e,this.config=t,this.typeSupported=r,this.ISGenerated=!1,null===M){var a=navigator.userAgent.match(/Chrome\/(\d+)/i);M=a?parseInt(a[1]):0}}var t=e.prototype;return t.destroy=function(){},t.resetTimeStamp=function(e){this._initPTS=this._initDTS=e},t.resetInitSegment=function(){this.ISGenerated=!1},t.getVideoStartPts=function(e){var t=!1,r=e.reduce((function(e,r){var i=r.pts-e;return i<-4294967296?(t=!0,F(e,r.pts)):i>0?e:r.pts}),e[0].pts);return t&&o.b.debug("PTS rollover detected"),r},t.remux=function(e,t,r,a,n,s,l){if(this.ISGenerated||this.generateIS(e,t,n),this.ISGenerated){var d=e.samples.length,u=t.samples.length,c=n,h=n;if(d&&u){var f=this.getVideoStartPts(t.samples),g=(F(e.samples[0].pts,f)-f)/t.inputTimeScale;c+=Math.max(0,g),h+=Math.max(0,-g)}if(d){e.timescale||(o.b.warn("regenerate InitSegment as audio detected"),this.generateIS(e,t,n));var p,v=this.remuxAudio(e,c,s,l);if(u)v&&(p=v.endPTS-v.startPTS),t.timescale||(o.b.warn("regenerate InitSegment as video detected"),this.generateIS(e,t,n)),this.remuxVideo(t,h,s,p)}else if(u){var m=this.remuxVideo(t,h,s,0,l);m&&e.codec&&this.remuxEmptyAudio(e,c,s,m)}}r.samples.length&&this.remuxID3(r,n),a.samples.length&&this.remuxText(a,n),this.observer.trigger(i.a.FRAG_PARSED)},t.generateIS=function(e,t,r){var n,s,l=this.observer,d=e.samples,u=t.samples,c=this.typeSupported,h="audio/mp4",f={},g={tracks:f},p=void 0===this._initPTS;if(p&&(n=s=1/0),e.config&&d.length&&(e.timescale=e.samplerate,o.b.log("audio sampling rate : "+e.samplerate),e.isAAC||(c.mpeg?(h="audio/mpeg",e.codec=""):c.mp3&&(e.codec="mp3")),f.audio={container:h,codec:e.codec,initSegment:!e.isAAC&&c.mpeg?new Uint8Array:D.initSegment([e]),metadata:{channelCount:e.channelCount}},p&&(n=s=d[0].pts-Math.round(e.inputTimeScale*r))),t.sps&&t.pps&&u.length){var v=t.inputTimeScale;if(t.timescale=v,f.video={container:"video/mp4",codec:t.codec,initSegment:D.initSegment([t]),metadata:{width:t.width,height:t.height}},p){var m=this.getVideoStartPts(u),y=Math.round(v*r);s=Math.min(s,F(u[0].dts,m)-y),n=Math.min(n,m-y),this.observer.trigger(i.a.INIT_PTS_FOUND,{initPTS:n})}}else p&&f.audio&&this.observer.trigger(i.a.INIT_PTS_FOUND,{initPTS:n});Object.keys(f).length?(l.trigger(i.a.FRAG_PARSING_INIT_SEGMENT,g),this.ISGenerated=!0,p&&(this._initPTS=n,this._initDTS=s)):l.trigger(i.a.ERROR,{type:a.b.MEDIA_ERROR,details:a.a.FRAG_PARSING_ERROR,fatal:!1,reason:"no audio/video samples found"})},t.remuxVideo=function(e,t,r,n){var s,l,d,u,c,h=e.timescale,f=e.samples,g=[],p=f.length,v=this._initPTS,m=8,y=Number.POSITIVE_INFINITY,b=Number.NEGATIVE_INFINITY,T=0,E=!1,S=this.nextAvcDts;if(0!==p){if(!r)S=t*h-(f[0].pts-F(f[0].dts,f[0].pts));for(var _=0;_R.pts&&(T=Math.max(Math.min(T,R.pts-R.dts),-1*x)),R.dts0?_-1:_].dts&&(E=!0)}E&&f.sort((function(e,t){var r=e.dts-t.dts,i=e.pts-t.pts;return r||i||e.id-t.id})),u=f[0].dts,c=f[p-1].dts;var A=Math.round((c-u)/(p-1));if(T<0){if(T<-2*A){o.b.warn("PTS < DTS detected in video samples, offsetting DTS from PTS by "+C(-A,!0)+" ms");for(var k=T,w=0;wA;if(I||O<-1){I?o.b.warn("AVC: "+C(O,!0)+" ms ("+O+"dts) hole between fragments detected, filling it"):o.b.warn("AVC: "+C(-O,!0)+" ms ("+O+"dts) overlapping between fragments detected"),u=S;var P=f[0].pts-O;f[0].dts=u,f[0].pts=P,o.b.log("Video: First PTS/DTS adjusted: "+C(P,!0)+"/"+C(u,!0)+", delta: "+C(O,!0)+" ms")}}M&&M<75&&(u=Math.max(0,u));for(var U=0,N=0,B=0;B
0?q-1:q].dts;if(ie.stretchShortVideoTrack){var ne=ie.maxBufferHole,se=Math.floor(ne*h),oe=(n?y+n*h:this.nextAudioPts)-z.pts;oe>se?((s=oe-ae)<0&&(s=ae),o.b.log("It is approximately "+C(oe,!1)+" ms to the next segment; using duration "+C(s,!1)+" ms for the last video frame.")):s=ae}else s=ae}X=Math.round(z.pts-z.dts),g.push({size:$,duration:s,cts:X,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:z.key?2:1,isNonSync:z.key?0:1}})}this.nextAvcDts=c+s;var le=e.dropped;if(e.nbNalu=0,e.dropped=0,g.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var de=g[0].flags;de.dependsOn=2,de.isNonSync=0}e.samples=g,d=D.moof(e.sequenceNumber++,u,e),e.samples=[];var ue={data1:d,data2:l,startPTS:y/h,endPTS:(b+s)/h,startDTS:u/h,endDTS:this.nextAvcDts/h,type:"video",hasAudio:!1,hasVideo:!0,nb:g.length,dropped:le};return this.observer.trigger(i.a.FRAG_PARSING_DATA,ue),ue}},t.remuxAudio=function(e,t,r,n){var s,l,d,u,c,h,f=e.inputTimeScale,g=e.timescale,p=f/g,v=(e.isAAC?1024:1152)*p,m=this._initPTS,y=!e.isAAC&&this.typeSupported.mpeg,b=y?0:8,T=e.samples,E=[],S=this.nextAudioPts;if(r|=T.length&&S&&(n&&Math.abs(t-S/f)<.1||Math.abs(T[0].pts-S-m)<20*v),T.forEach((function(e){e.pts=e.dts=F(e.pts-m,t*f)})),0!==(T=T.filter((function(e){return e.pts>=0}))).length){if(r||(S=n?Math.max(0,t*f):T[0].pts),e.isAAC)for(var _=this.config.maxAudioFramesDrift,R=0,A=S;R0?(o.b.warn("Dropping 1 audio frame @ "+C(A,!0)/1e3+"s due to "+C(O,!0)+" ms overlap."),T.splice(R,1)):(o.b.warn("Audio frame @ "+C(L,!0)/1e3+"s overlaps nextAudioPts by "+C(O,!0)+" ms."),A=L+v,R++);else if(O>=_*v&&O0&&V
0&&((l=w.getSilentFrame(e.manifestCodec||e.codec,e.channelCount))||(l=j.subarray()),N+=Y*l.length);else if(V<-12){o.b.log("drop overlapping AAC sample, expected/parsed/delta: "+C(S,!0)+" ms / "+C(H,!0)+" ms / "+C(-V,!0)+" ms"),N-=j.byteLength;continue}H=S}if(c=H,!(N>0))return;N+=b;try{d=new Uint8Array(N)}catch(e){return void this.observer.trigger(i.a.ERROR,{type:a.b.MUX_ERROR,details:a.a.REMUX_ALLOC_ERROR,fatal:!1,bytes:N,reason:"fail allocating audio mdat "+N})}y||(new DataView(d.buffer).setUint32(0,N),d.set(D.types.mdat,4));for(var W=0;W=2&&(X=E[U-2].duration,s.duration=X),U){this.nextAudioPts=S=h+p*X,e.samples=E,u=y?new Uint8Array:D.moof(e.sequenceNumber++,c/p,e),e.samples=[];var z=c/f,Q=S/f,$={data1:u,data2:d,startPTS:z,endPTS:Q,startDTS:z,endDTS:Q,type:"audio",hasAudio:!0,hasVideo:!1,nb:U};return this.observer.trigger(i.a.FRAG_PARSING_DATA,$),$}return null}},t.remuxEmptyAudio=function(e,t,r,i){var a=e.inputTimeScale,n=a/(e.samplerate?e.samplerate:a),s=this.nextAudioPts,l=(void 0!==s?s:i.startDTS*a)+this._initDTS,d=i.endDTS*a+this._initDTS,u=1024*n,c=Math.ceil((d-l)/u),h=w.getSilentFrame(e.manifestCodec||e.codec,e.channelCount);if(o.b.warn("remux empty Audio"),h){for(var f=[],g=0;g0&&null!=t&&null!=t.key&&"AES-128"===t.method){var p=this.decrypter;null==p&&(p=this.decrypter=new n.a(this.observer,this.config));var v=U();p.decrypt(e,t.key.buffer,t.iv.buffer,(function(e){var n=U();g.observer.trigger(i.a.FRAG_DECRYPTED,{stats:{tstart:v,tdecrypt:n}}),g.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),a,s,o,l,d,u,c,h,f)}))}else this.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),a,s,o,l,d,u,c,h,f)},t.pushDecrypted=function(e,t,r,n,s,o,l,d,u,c,h,f){var g=this.demuxer,p=this.remuxer;if(!g||l||d){for(var v,m=this.observer,T=this.typeSupported,E=this.config,S=[{demux:A,remux:N},{demux:b.a,remux:B},{demux:y,remux:N},{demux:k,remux:N}],_=0,R=S.length;_0},e.bin2str=function(e){return String.fromCharCode.apply(null,e)},e.readUint16=function(e,t){e.data&&(t+=e.start,e=e.data);var r=e[t]<<8|e[t+1];return r<0?65536+r:r},e.readUint32=function(e,t){e.data&&(t+=e.start,e=e.data);var r=e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3];return r<0?4294967296+r:r},e.writeUint32=function(e,t,r){e.data&&(t+=e.start,e=e.data),e[t]=r>>24,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r},e.findBox=function(t,r){var i,a,n,s,o,l,d=[];if(t.data?(o=t.start,n=t.end,t=t.data):(o=0,n=t.byteLength),!r.length)return null;for(i=o;i1?i+a:n,e.bin2str(t.subarray(i+4,i+8))===r[0]&&(1===r.length?d.push({data:t,start:i+8,end:l}):(s=e.findBox({data:t,start:i+8,end:l},r.slice(1))).length&&(d=d.concat(s))),i=l;return d},e.parseSegmentIndex=function(t){var r,i=e.findBox(t,["moov"])[0],a=i?i.end:null,n=0,s=e.findBox(t,["sidx"]);if(!s||!s[0])return null;r=[];var o=(s=s[0]).data[0];n=0===o?8:16;var l=e.readUint32(s,n);n+=4;n+=0===o?8:16,n+=2;var d=s.end+0,u=e.readUint16(s,n);n+=2;for(var c=0;c>>31)return void console.warn("SIDX has hierarchical references (not supported)");var p=e.readUint32(s,h);h+=4,r.push({referenceSize:g,subsegmentDuration:p,info:{duration:p/l,start:d,end:d+g-1}}),d+=g,n=h+=4}return{earliestPresentationTime:0,timescale:l,version:o,referencesCount:u,references:r,moovEndOffset:a}},e.parseInitSegment=function(t){var r=[];return e.findBox(t,["moov","trak"]).forEach((function(t){var a=e.findBox(t,["tkhd"])[0];if(a){var n=a.data[a.start],s=0===n?12:20,o=e.readUint32(a,s),l=e.findBox(t,["mdia","mdhd"])[0];if(l){s=0===(n=l.data[l.start])?12:20;var d=e.readUint32(l,s),u=e.findBox(t,["mdia","hdlr"])[0];if(u){var c={soun:"audio",vide:"video"}[e.bin2str(u.data.subarray(u.start+8,u.start+12))];if(c){var h=e.findBox(t,["mdia","minf","stbl","stsd"]);if(h.length){h=h[0];var f=e.bin2str(h.data.subarray(h.start+12,h.start+16));i.b.log("MP4Demuxer:"+c+":"+f+" found")}r[o]={timescale:d,type:c},r[c]={timescale:d,id:o}}}}}})),r},e.getStartDTS=function(t,r){var i,a,n;return i=e.findBox(r,["moof","traf"]),a=[].concat.apply([],i.map((function(r){return e.findBox(r,["tfhd"]).map((function(i){var a,n;return a=e.readUint32(i,4),n=t[a].timescale||9e4,e.findBox(r,["tfdt"]).map((function(t){var r,i;return r=t.data[t.start],i=e.readUint32(t,4),1===r&&(i*=Math.pow(2,32),i+=e.readUint32(t,8)),i}))[0]/n}))}))),n=Math.min.apply(null,a),isFinite(n)?n:0},e.offsetStartDTS=function(t,r,i){e.findBox(r,["moof","traf"]).map((function(r){return e.findBox(r,["tfhd"]).map((function(a){var s=e.readUint32(a,4),o=t[s].timescale||9e4;e.findBox(r,["tfdt"]).map((function(t){var r=t.data[t.start],a=e.readUint32(t,4);if(0===r)e.writeUint32(t,4,a-i*o);else{a*=Math.pow(2,32),a+=e.readUint32(t,8),a-=i*o,a=Math.max(a,0);var s=Math.floor(a/(n+1)),l=Math.floor(a%(n+1));e.writeUint32(t,4,s),e.writeUint32(t,8,l)}}))}))}))},t.append=function(t,r,i,n){var s=this.initData;s||(this.resetInitSegment(t,this.audioCodec,this.videoCodec,!1),s=this.initData);var o,l=this.initPTS;if(void 0===l){var d=e.getStartDTS(s,t);this.initPTS=l=d-r,this.observer.trigger(a.a.INIT_PTS_FOUND,{initPTS:l})}e.offsetStartDTS(s,t,l),o=e.getStartDTS(s,t),this.remuxer.remux(s.audio,s.video,null,null,o,i,n,t)},t.destroy=function(){},e}();t.a=s},function(e,t,r){function i(e){var t={};function r(i){if(t[i])return t[i].exports;var a=t[i]={i:i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,r),a.l=!0,a.exports}r.m=e,r.c=t,r.i=function(e){return e},r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:i})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/",r.oe=function(e){throw console.error(e),e};var i=r(r.s=ENTRY_MODULE);return i.default||i}function a(e){return(e+"").replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}function n(e,t,i){var n={};n[i]=[];var s=t.toString(),o=s.match(/^function\s?\w*\(\w+,\s*\w+,\s*(\w+)\)/);if(!o)return n;for(var l,d=o[1],u=new RegExp("(\\\\n|\\W)"+a(d)+"\\(\\s*(/\\*.*?\\*/)?\\s*.*?([\\.|\\-|\\+|\\w|/|@]+).*?\\)","g");l=u.exec(s);)"dll-reference"!==l[3]&&n[i].push(l[3]);for(u=new RegExp("\\("+a(d)+'\\("(dll-reference\\s([\\.|\\-|\\+|\\w|/|@]+))"\\)\\)\\(\\s*(/\\*.*?\\*/)?\\s*.*?([\\.|\\-|\\+|\\w|/|@]+).*?\\)',"g");l=u.exec(s);)e[l[2]]||(n[i].push(l[1]),e[l[2]]=r(l[1]).m),n[l[2]]=n[l[2]]||[],n[l[2]].push(l[4]);for(var c,h=Object.keys(n),f=0;f0}),!1)}e.exports=function(e,t){t=t||{};var a={main:r.m},o=t.all?{main:Object.keys(a.main)}:function(e,t){for(var r={main:[t]},i={main:[]},a={main:{}};s(r);)for(var o=Object.keys(r),l=0;l1?r-1:0),a=1;a1?r-1:0),a=1;a1?t-1:0),i=1;i>8*(15-r)&255;return t},a.setDecryptDataFromLevelKey=function(e,t){var r=e;return(null==e?void 0:e.method)&&e.uri&&!e.iv&&((r=new v(e.baseuri,e.reluri)).method=e.method,r.iv=this.createInitializationVector(t)),r},t=e,(r=[{key:"url",get:function(){return!this._url&&this.relurl&&(this._url=Object(s.buildAbsoluteURL)(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url},set:function(e){this._url=e}},{key:"byteRange",get:function(){return this._byteRange?this._byteRange:[]}},{key:"byteRangeStartOffset",get:function(){return this.byteRange[0]}},{key:"byteRangeEndOffset",get:function(){return this.byteRange[1]}},{key:"decryptdata",get:function(){if(!this.levelkey&&!this._decryptdata)return null;if(!this._decryptdata&&this.levelkey){var e=this.sn;"number"!=typeof e&&(this.levelkey&&"AES-128"===this.levelkey.method&&!this.levelkey.iv&&u.b.warn('missing IV for initialization segment with method="'+this.levelkey.method+'" - compliance issue'),e=0),this._decryptdata=this.setDecryptDataFromLevelKey(this.levelkey,e)}return this._decryptdata}},{key:"endProgramDateTime",get:function(){if(null===this.programDateTime)return null;if(!Object(l.a)(this.programDateTime))return null;var e=Object(l.a)(this.duration)?this.duration:0;return this.programDateTime+1e3*e}},{key:"encrypted",get:function(){return!(!this.decryptdata||null===this.decryptdata.uri||null!==this.decryptdata.key)}}])&&m(t.prototype,r),i&&m(t,i),e}();function b(e,t){for(var r=0;rNumber.MAX_SAFE_INTEGER?1/0:t},t.hexadecimalInteger=function(e){if(this[e]){var t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;for(var r=new Uint8Array(t.length/2),i=0;iNumber.MAX_SAFE_INTEGER?1/0:t},t.decimalFloatingPoint=function(e){return parseFloat(this[e])},t.enumeratedString=function(e){return this[e]},t.decimalResolution=function(e){var t=E.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}},e.parseAttrList=function(e){var t,r={};for(S.lastIndex=0;null!==(t=S.exec(e));){var i=t[2];0===i.indexOf('"')&&i.lastIndexOf('"')===i.length-1&&(i=i.slice(1,-1)),r[t[1]]=i}return r},e}(),R={audio:{a3ds:!0,"ac-3":!0,"ac-4":!0,alac:!0,alaw:!0,dra1:!0,"dts+":!0,"dts-":!0,dtsc:!0,dtse:!0,dtsh:!0,"ec-3":!0,enca:!0,g719:!0,g726:!0,m4ae:!0,mha1:!0,mha2:!0,mhm1:!0,mhm2:!0,mlpa:!0,mp4a:!0,"raw ":!0,Opus:!0,samr:!0,sawb:!0,sawp:!0,sevc:!0,sqcp:!0,ssmv:!0,twos:!0,ulaw:!0},video:{avc1:!0,avc2:!0,avc3:!0,avc4:!0,avcp:!0,drac:!0,dvav:!0,dvhe:!0,encv:!0,hev1:!0,hvc1:!0,mjp2:!0,mp4v:!0,mvc1:!0,mvc2:!0,mvc3:!0,mvc4:!0,resv:!0,rv60:!0,s263:!0,svc1:!0,svc2:!0,"vc-1":!0,vp08:!0,vp09:!0}};function A(e,t){return MediaSource.isTypeSupported((t||"video")+'/mp4;codecs="'+e+'"')}var k=/(?:#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)|#EXT-X-SESSION-DATA:([^\n\r]*)[\r\n]+)/g,w=/#EXT-X-MEDIA:(.*)/g,L=new RegExp([/#EXTINF:\s*(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source,/|(?!#)([\S+ ?]+)/.source,/|#EXT-X-BYTERANGE:*(.+)/.source,/|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,/|#.*/.source].join(""),"g"),D=/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)([^:]*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/,O=/\.(mp4|m4s|m4v|m4a)$/i,C=function(){function e(){}return e.findGroup=function(e,t){for(var r=0;r2?(t=r.shift()+".",t+=parseInt(r.shift()).toString(16),t+=("000"+parseInt(r.shift()).toString(16)).substr(-4)):t=e,t},e.resolve=function(e,t){return s.buildAbsoluteURL(t,e,{alwaysNormalize:!0})},e.parseMasterPlaylist=function(t,r){var i,a=[],n={},s=!1;function o(e,t){["video","audio"].forEach((function(r){var i=e.filter((function(e){return function(e,t){var r=R[t];return!!r&&!0===r[e.slice(0,4)]}(e,r)}));if(i.length){var a=i.filter((function(e){return 0===e.lastIndexOf("avc1",0)||0===e.lastIndexOf("mp4a",0)}));t[r+"Codec"]=a.length>0?a[0]:i[0],e=e.filter((function(e){return-1===i.indexOf(e)}))}})),t.unknownCodecs=e}for(k.lastIndex=0;null!=(i=k.exec(t));)if(i[1]){var l={},d=l.attrs=new _(i[1]);l.url=e.resolve(i[2],r);var u=d.decimalResolution("RESOLUTION");u&&(l.width=u.width,l.height=u.height),l.bitrate=d.decimalInteger("AVERAGE-BANDWIDTH")||d.decimalInteger("BANDWIDTH"),l.name=d.NAME,o([].concat((d.CODECS||"").split(/[ ,]+/)),l),l.videoCodec&&-1!==l.videoCodec.indexOf("avc1")&&(l.videoCodec=e.convertAVC1ToAVCOTI(l.videoCodec)),a.push(l)}else if(i[3]){var c=new _(i[3]);c["DATA-ID"]&&(s=!0,n[c["DATA-ID"]]=c)}return{levels:a,sessionData:s?n:null}},e.parseMasterPlaylistMedia=function(t,r,i,a){var n;void 0===a&&(a=[]);var s=[],o=0;for(w.lastIndex=0;null!==(n=w.exec(t));){var l=new _(n[1]);if(l.TYPE===i){var d={attrs:l,id:o++,groupId:l["GROUP-ID"],instreamId:l["INSTREAM-ID"],name:l.NAME||l.LANGUAGE,type:i,default:"YES"===l.DEFAULT,autoselect:"YES"===l.AUTOSELECT,forced:"YES"===l.FORCED,lang:l.LANGUAGE};if(l.URI&&(d.url=e.resolve(l.URI,r)),a.length){var u=e.findGroup(a,d.groupId);d.audioCodec=u?u.codec:a[0].codec}s.push(d)}}return s},e.parseLevelPlaylist=function(e,t,r,i,a){var n,s,o,d=0,c=0,h=new T(t),f=0,g=null,p=new y,m=null;for(L.lastIndex=0;null!==(n=L.exec(e));){var b=n[1];if(b){p.duration=parseFloat(b);var E=(" "+n[2]).slice(1);p.title=E||null,p.tagList.push(E?["INF",b,E]:["INF",b])}else if(n[3]){if(Object(l.a)(p.duration)){var S=d++;p.type=i,p.start=c,o&&(p.levelkey=o),p.sn=S,p.level=r,p.cc=f,p.urlId=a,p.baseurl=t,p.relurl=(" "+n[3]).slice(1),I(p,g),h.fragments.push(p),g=p,c+=p.duration,p=new y}}else if(n[4]){var R=(" "+n[4]).slice(1);g?p.setByteRange(R,g):p.setByteRange(R)}else if(n[5])p.rawProgramDateTime=(" "+n[5]).slice(1),p.tagList.push(["PROGRAM-DATE-TIME",p.rawProgramDateTime]),null===m&&(m=h.fragments.length);else{if(!(n=n[0].match(D))){u.b.warn("No matches on slow regex match for level playlist!");continue}for(s=1;s=0&&(o.method=C,o.key=null,o.iv=x));break;case"START":var M=new _(A).decimalFloatingPoint("TIME-OFFSET");Object(l.a)(M)&&(h.startTimeOffset=M);break;case"MAP":var F=new _(A);p.relurl=F.URI,F.BYTERANGE&&p.setByteRange(F.BYTERANGE),p.baseurl=t,p.level=r,p.type=i,p.sn="initSegment",h.initSegment=p,(p=new y).rawProgramDateTime=h.initSegment.rawProgramDateTime;break;default:u.b.warn("line parsed but not handled: "+n)}}}return(p=g)&&!p.relurl&&(h.fragments.pop(),c-=p.duration),h.totalduration=c,h.averagetargetduration=c/h.fragments.length,h.endSN=d-1,h.startCC=h.fragments[0]?h.fragments[0].cc:0,h.endCC=f,!h.initSegment&&h.fragments.length&&h.fragments.every((function(e){return O.test(e.relurl)}))&&(u.b.warn("MP4 fragments found but no init segment (probably no MAP, incomplete M3U8), trying to fetch SIDX"),(p=new y).relurl=h.fragments[0].relurl,p.baseurl=t,p.level=r,p.type=i,p.sn="initSegment",h.initSegment=p,h.needSidxRanges=!0),m&&function(e,t){for(var r=e[t],i=t-1;i>=0;i--){var a=e[i];a.programDateTime=r.programDateTime-1e3*a.duration,r=a}}(h.fragments,m),h},e}();function I(e,t){e.rawProgramDateTime?e.programDateTime=Date.parse(e.rawProgramDateTime):(null==t?void 0:t.programDateTime)&&(e.programDateTime=t.endProgramDateTime),Object(l.a)(e.programDateTime)||(e.programDateTime=null,e.rawProgramDateTime=null)}var P=window.performance,x=function(e){var t,r;function i(t){var r;return(r=e.call(this,t,d.a.MANIFEST_LOADING,d.a.LEVEL_LOADING,d.a.AUDIO_TRACK_LOADING,d.a.SUBTITLE_TRACK_LOADING)||this).loaders={},r}r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,i.canHaveQualityLevels=function(e){return e!==a.AUDIO_TRACK&&e!==a.SUBTITLE_TRACK},i.mapContextToLevelType=function(e){switch(e.type){case a.AUDIO_TRACK:return n.AUDIO;case a.SUBTITLE_TRACK:return n.SUBTITLE;default:return n.MAIN}},i.getResponseUrl=function(e,t){var r=e.url;return void 0!==r&&0!==r.indexOf("data:")||(r=t.url),r};var s=i.prototype;return s.createInternalLoader=function(e){var t=this.hls.config,r=t.pLoader,i=t.loader,a=new(r||i)(t);return e.loader=a,this.loaders[e.type]=a,a},s.getInternalLoader=function(e){return this.loaders[e.type]},s.resetInternalLoader=function(e){this.loaders[e]&&delete this.loaders[e]},s.destroyInternalLoaders=function(){for(var e in this.loaders){var t=this.loaders[e];t&&t.destroy(),this.resetInternalLoader(e)}},s.destroy=function(){this.destroyInternalLoaders(),e.prototype.destroy.call(this)},s.onManifestLoading=function(e){this.load({url:e.url,type:a.MANIFEST,level:0,id:null,responseType:"text"})},s.onLevelLoading=function(e){this.load({url:e.url,type:a.LEVEL,level:e.level,id:e.id,responseType:"text"})},s.onAudioTrackLoading=function(e){this.load({url:e.url,type:a.AUDIO_TRACK,level:null,id:e.id,responseType:"text"})},s.onSubtitleTrackLoading=function(e){this.load({url:e.url,type:a.SUBTITLE_TRACK,level:null,id:e.id,responseType:"text"})},s.load=function(e){var t=this.hls.config;u.b.debug("Loading playlist of type "+e.type+", level: "+e.level+", id: "+e.id);var r,i,n,s,o=this.getInternalLoader(e);if(o){var l=o.context;if(l&&l.url===e.url)return u.b.trace("playlist request ongoing"),!1;u.b.warn("aborting previous loader for type: "+e.type),o.abort()}switch(e.type){case a.MANIFEST:r=t.manifestLoadingMaxRetry,i=t.manifestLoadingTimeOut,n=t.manifestLoadingRetryDelay,s=t.manifestLoadingMaxRetryTimeout;break;case a.LEVEL:r=0,s=0,n=0,i=t.levelLoadingTimeOut;break;default:r=t.levelLoadingMaxRetry,i=t.levelLoadingTimeOut,n=t.levelLoadingRetryDelay,s=t.levelLoadingMaxRetryTimeout}o=this.createInternalLoader(e);var d={timeout:i,maxRetry:r,retryDelay:n,maxRetryDelay:s},c={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this)};return u.b.debug("Calling internal loader delegate for URL: "+e.url),o.load(e,d,c),!0},s.loadsuccess=function(e,t,r,i){if(void 0===i&&(i=null),r.isSidxRequest)return this._handleSidxRequest(e,r),void this._handlePlaylistLoaded(e,t,r,i);if(this.resetInternalLoader(r.type),"string"!=typeof e.data)throw new Error('expected responseType of "text" for PlaylistLoader');var a=e.data;t.tload=P.now(),0===a.indexOf("#EXTM3U")?a.indexOf("#EXTINF:")>0||a.indexOf("#EXT-X-TARGETDURATION:")>0?this._handleTrackOrLevelPlaylist(e,t,r,i):this._handleMasterPlaylist(e,t,r,i):this._handleManifestParsingError(e,r,"no EXTM3U delimiter",i)},s.loaderror=function(e,t,r){void 0===r&&(r=null),this._handleNetworkError(t,r,!1,e)},s.loadtimeout=function(e,t,r){void 0===r&&(r=null),this._handleNetworkError(t,r,!0)},s._handleMasterPlaylist=function(e,t,r,a){var n=this.hls,s=e.data,o=i.getResponseUrl(e,r),l=C.parseMasterPlaylist(s,o),c=l.levels,h=l.sessionData;if(c.length){var f=c.map((function(e){return{id:e.attrs.AUDIO,codec:e.audioCodec}})),g=C.parseMasterPlaylistMedia(s,o,"AUDIO",f),p=C.parseMasterPlaylistMedia(s,o,"SUBTITLES"),v=C.parseMasterPlaylistMedia(s,o,"CLOSED-CAPTIONS");if(g.length){var m=!1;g.forEach((function(e){e.url||(m=!0)})),!1===m&&c[0].audioCodec&&!c[0].attrs.AUDIO&&(u.b.log("audio codec signaled in quality level, but no embedded audio track signaled, create one"),g.unshift({type:"main",name:"main",default:!1,autoselect:!1,forced:!1,id:-1,attrs:{},url:""}))}n.trigger(d.a.MANIFEST_LOADED,{levels:c,audioTracks:g,subtitles:p,captions:v,url:o,stats:t,networkDetails:a,sessionData:h})}else this._handleManifestParsingError(e,r,"no level found in manifest",a)},s._handleTrackOrLevelPlaylist=function(e,t,r,n){var s=this.hls,u=r.id,c=r.level,h=r.type,f=i.getResponseUrl(e,r),g=Object(l.a)(u)?u:0,p=Object(l.a)(c)?c:g,v=i.mapContextToLevelType(r),m=C.parseLevelPlaylist(e.data,f,p,v,g);if(m.tload=t.tload,m.fragments.length){if(h===a.MANIFEST){var y={url:f,details:m};s.trigger(d.a.MANIFEST_LOADED,{levels:[y],audioTracks:[],url:f,stats:t,networkDetails:n,sessionData:null})}if(t.tparsed=P.now(),m.needSidxRanges){var b=m.initSegment.url;this.load({url:b,isSidxRequest:!0,type:h,level:c,levelDetails:m,id:u,rangeStart:0,rangeEnd:2048,responseType:"arraybuffer"})}else r.levelDetails=m,this._handlePlaylistLoaded(e,t,r,n)}else s.trigger(d.a.ERROR,{type:o.b.NETWORK_ERROR,details:o.a.LEVEL_EMPTY_ERROR,fatal:!1,url:f,reason:"no fragments found in level",level:"number"==typeof r.level?r.level:void 0})},s._handleSidxRequest=function(e,t){if("string"==typeof e.data)throw new Error("sidx request must be made with responseType of array buffer");var r=f.a.parseSegmentIndex(new Uint8Array(e.data));if(r){var i=r.references,a=t.levelDetails;i.forEach((function(e,t){var r=e.info;if(a){var i=a.fragments[t];0===i.byteRange.length&&i.setByteRange(String(1+r.end-r.start)+"@"+String(r.start))}})),a&&a.initSegment.setByteRange(String(r.moovEndOffset)+"@0")}},s._handleManifestParsingError=function(e,t,r,i){this.hls.trigger(d.a.ERROR,{type:o.b.NETWORK_ERROR,details:o.a.MANIFEST_PARSING_ERROR,fatal:!0,url:e.url,reason:r,networkDetails:i})},s._handleNetworkError=function(e,t,r,i){var n,s;void 0===r&&(r=!1),void 0===i&&(i=null),u.b.info("A network error occured while loading a "+e.type+"-type playlist");var l=this.getInternalLoader(e);switch(e.type){case a.MANIFEST:n=r?o.a.MANIFEST_LOAD_TIMEOUT:o.a.MANIFEST_LOAD_ERROR,s=!0;break;case a.LEVEL:n=r?o.a.LEVEL_LOAD_TIMEOUT:o.a.LEVEL_LOAD_ERROR,s=!1;break;case a.AUDIO_TRACK:n=r?o.a.AUDIO_TRACK_LOAD_TIMEOUT:o.a.AUDIO_TRACK_LOAD_ERROR,s=!1;break;default:s=!1}l&&(l.abort(),this.resetInternalLoader(e.type));var c={type:o.b.NETWORK_ERROR,details:n,fatal:s,url:e.url,loader:l,context:e,networkDetails:t};i&&(c.response=i),this.hls.trigger(d.a.ERROR,c)},s._handlePlaylistLoaded=function(e,t,r,n){var s=r.type,o=r.level,l=r.id,u=r.levelDetails;if(u&&u.targetduration)if(i.canHaveQualityLevels(r.type))this.hls.trigger(d.a.LEVEL_LOADED,{details:u,level:o||0,id:l||0,stats:t,networkDetails:n});else switch(s){case a.AUDIO_TRACK:this.hls.trigger(d.a.AUDIO_TRACK_LOADED,{details:u,id:l,stats:t,networkDetails:n});break;case a.SUBTITLE_TRACK:this.hls.trigger(d.a.SUBTITLE_TRACK_LOADED,{details:u,id:l,stats:t,networkDetails:n})}else this._handleManifestParsingError(e,r,"invalid target duration",n)},i}(h);var M=function(e){var t,r;function i(t){var r;return(r=e.call(this,t,d.a.FRAG_LOADING)||this).loaders={},r}r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var a=i.prototype;return a.destroy=function(){var t=this.loaders;for(var r in t){var i=t[r];i&&i.destroy()}this.loaders={},e.prototype.destroy.call(this)},a.onFragLoading=function(e){var t=e.frag,r=t.type,i=this.loaders,a=this.hls.config,n=a.fLoader,s=a.loader;t.loaded=0;var o,d,c,h=i[r];h&&(u.b.warn("abort previous fragment loader for type: "+r),h.abort()),h=i[r]=t.loader=a.fLoader?new n(a):new s(a),o={url:t.url,frag:t,responseType:"arraybuffer",progressData:!1};var f=t.byteRangeStartOffset,g=t.byteRangeEndOffset;Object(l.a)(f)&&Object(l.a)(g)&&(o.rangeStart=f,o.rangeEnd=g),d={timeout:a.fragLoadingTimeOut,maxRetry:0,retryDelay:0,maxRetryDelay:a.fragLoadingMaxRetryTimeout},c={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this),onProgress:this.loadprogress.bind(this)},h.load(o,d,c)},a.loadsuccess=function(e,t,r,i){void 0===i&&(i=null);var a=e.data,n=r.frag;n.loader=void 0,this.loaders[n.type]=void 0,this.hls.trigger(d.a.FRAG_LOADED,{payload:a,frag:n,stats:t,networkDetails:i})},a.loaderror=function(e,t,r){void 0===r&&(r=null);var i=t.frag,a=i.loader;a&&a.abort(),this.loaders[i.type]=void 0,this.hls.trigger(d.a.ERROR,{type:o.b.NETWORK_ERROR,details:o.a.FRAG_LOAD_ERROR,fatal:!1,frag:t.frag,response:e,networkDetails:r})},a.loadtimeout=function(e,t,r){void 0===r&&(r=null);var i=t.frag,a=i.loader;a&&a.abort(),this.loaders[i.type]=void 0,this.hls.trigger(d.a.ERROR,{type:o.b.NETWORK_ERROR,details:o.a.FRAG_LOAD_TIMEOUT,fatal:!1,frag:t.frag,networkDetails:r})},a.loadprogress=function(e,t,r,i){void 0===i&&(i=null);var a=t.frag;a.loaded=e.loaded,this.hls.trigger(d.a.FRAG_LOAD_PROGRESS,{frag:a,stats:e,networkDetails:i})},i}(h);var F=function(e){var t,r;function i(t){var r;return(r=e.call(this,t,d.a.KEY_LOADING)||this).loaders={},r.decryptkey=null,r.decrypturl=null,r}r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var a=i.prototype;return a.destroy=function(){for(var t in this.loaders){var r=this.loaders[t];r&&r.destroy()}this.loaders={},e.prototype.destroy.call(this)},a.onKeyLoading=function(e){var t=e.frag,r=t.type,i=this.loaders[r];if(t.decryptdata){var a=t.decryptdata.uri;if(a!==this.decrypturl||null===this.decryptkey){var n=this.hls.config;if(i&&(u.b.warn("abort previous key loader for type:"+r),i.abort()),!a)return void u.b.warn("key uri is falsy");t.loader=this.loaders[r]=new n.loader(n),this.decrypturl=a,this.decryptkey=null;var s={url:a,frag:t,responseType:"arraybuffer"},o={timeout:n.fragLoadingTimeOut,maxRetry:0,retryDelay:n.fragLoadingRetryDelay,maxRetryDelay:n.fragLoadingMaxRetryTimeout},l={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this)};t.loader.load(s,o,l)}else this.decryptkey&&(t.decryptdata.key=this.decryptkey,this.hls.trigger(d.a.KEY_LOADED,{frag:t}))}else u.b.warn("Missing decryption data on fragment in onKeyLoading")},a.loadsuccess=function(e,t,r){var i=r.frag;i.decryptdata?(this.decryptkey=i.decryptdata.key=new Uint8Array(e.data),i.loader=void 0,delete this.loaders[i.type],this.hls.trigger(d.a.KEY_LOADED,{frag:i})):u.b.error("after key load, decryptdata unset")},a.loaderror=function(e,t){var r=t.frag,i=r.loader;i&&i.abort(),delete this.loaders[r.type],this.hls.trigger(d.a.ERROR,{type:o.b.NETWORK_ERROR,details:o.a.KEY_LOAD_ERROR,fatal:!1,frag:r,response:e})},a.loadtimeout=function(e,t){var r=t.frag,i=r.loader;i&&i.abort(),delete this.loaders[r.type],this.hls.trigger(d.a.ERROR,{type:o.b.NETWORK_ERROR,details:o.a.KEY_LOAD_TIMEOUT,fatal:!1,frag:r})},i}(h);var U="NOT_LOADED",N="APPENDING",B="PARTIAL",G="OK",K=function(e){var t,r;function i(t){var r;return(r=e.call(this,t,d.a.BUFFER_APPENDED,d.a.FRAG_BUFFERED,d.a.FRAG_LOADED)||this).bufferPadding=.2,r.fragments=Object.create(null),r.timeRanges=Object.create(null),r.config=t.config,r}r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var a=i.prototype;return a.destroy=function(){this.fragments=Object.create(null),this.timeRanges=Object.create(null),this.config=null,h.prototype.destroy.call(this),e.prototype.destroy.call(this)},a.getBufferedFrag=function(e,t){var r=this.fragments,i=Object.keys(r).filter((function(i){var a=r[i];if(a.body.type!==t)return!1;if(!a.buffered)return!1;var n=a.body;return n.startPTS<=e&&e<=n.endPTS}));if(0===i.length)return null;var a=i.pop();return r[a].body},a.detectEvictedFragments=function(e,t){var r=this;Object.keys(this.fragments).forEach((function(i){var a=r.fragments[i];if(a&&a.buffered){var n=a.range[e];if(n)for(var s=n.time,o=0;o=i&&t<=a){n.push({startPTS:Math.max(e,r.start(o)),endPTS:Math.min(t,r.end(o))});break}if(ei)n.push({startPTS:Math.max(e,r.start(o)),endPTS:Math.min(t,r.end(o))}),s=!0;else if(t<=i)break}return{time:n,partial:s}},a.getFragmentKey=function(e){return e.type+"_"+e.level+"_"+e.urlId+"_"+e.sn},a.getPartialFragment=function(e){var t,r,i,a=this,n=null,s=0;return Object.keys(this.fragments).forEach((function(o){var l=a.fragments[o];a.isPartial(l)&&(r=l.body.startPTS-a.bufferPadding,i=l.body.endPTS+a.bufferPadding,e>=r&&e<=i&&(t=Math.min(e-r,i-e),s<=t&&(n=l.body,s=t)))})),n},a.getState=function(e){var t=this.getFragmentKey(e),r=this.fragments[t],i=U;return void 0!==r&&(i=r.buffered?!0===this.isPartial(r)?B:G:N),i},a.isPartial=function(e){return!0===e.buffered&&(void 0!==e.range.video&&!0===e.range.video.partial||void 0!==e.range.audio&&!0===e.range.audio.partial)},a.isTimeBuffered=function(e,t,r){for(var i,a,n=0;n=i&&t<=a)return!0;if(t<=i)return!1}return!1},a.onFragLoaded=function(e){var t=e.frag;Object(l.a)(t.sn)&&!t.bitrateTest&&(this.fragments[this.getFragmentKey(t)]={body:t,range:Object.create(null),buffered:!1})},a.onBufferAppended=function(e){var t=this;this.timeRanges=e.timeRanges,Object.keys(this.timeRanges).forEach((function(e){var r=t.timeRanges[e];t.detectEvictedFragments(e,r)}))},a.onFragBuffered=function(e){this.detectPartialFragments(e.frag)},a.hasFragment=function(e){var t=this.getFragmentKey(e);return void 0!==this.fragments[t]},a.removeFragment=function(e){var t=this.getFragmentKey(e);delete this.fragments[t]},a.removeAllFragments=function(){this.fragments=Object.create(null)},i}(h),j={search:function(e,t){for(var r=0,i=e.length-1,a=null,n=null;r<=i;){var s=t(n=e[a=(r+i)/2|0]);if(s>0)r=a+1;else{if(!(s<0))return n;i=a-1}}return null}},H=function(){function e(){}return e.isBuffered=function(e,t){try{if(e)for(var r=e.buffered,i=0;i=r.start(i)&&t<=r.end(i))return!0}catch(e){}return!1},e.bufferInfo=function(e,t,r){try{if(e){var i,a=e.buffered,n=[];for(i=0;is&&(i[n-1].end=e[a].end):i.push(e[a])}else i.push(e[a])}else i=e;for(var o,l=0,d=t,u=t,c=0;c=h&&t1?t-1:0),i=1;it?(i.duration=n-i.start,i.duration<0&&u.b.warn("negative duration computed for frag "+i.sn+",level "+i.level+", there should be some duration drift between playlist and fragment!")):(a.duration=i.start-n,a.duration<0&&u.b.warn("negative duration computed for frag "+a.sn+",level "+a.level+", there should be some duration drift between playlist and fragment!"));else if(r>t){var s=i.cc===a.cc;a.start=i.start+(s&&i.minEndPTS?i.minEndPTS-i.start:i.duration)}else a.start=Math.max(i.start-a.duration,0)}function te(e,t,r,i,a,n){var s=r,o=i;if(Object(l.a)(t.startPTS)){var d=Math.abs(t.startPTS-r);Object(l.a)(t.deltaPTS)?t.deltaPTS=Math.max(d,t.deltaPTS):t.deltaPTS=d,s=Math.max(r,t.startPTS),r=Math.min(r,t.startPTS),o=Math.min(i,t.endPTS),i=Math.max(i,t.endPTS),a=Math.min(a,t.startDTS),n=Math.max(n,t.endDTS)}var u=r-t.start;t.start=t.startPTS=r,t.maxStartPTS=s,t.endPTS=i,t.minEndPTS=o,t.startDTS=a,t.endDTS=n,t.duration=i-r;var c,h,f,g=t.sn;if(!e||ge.endSN)return 0;for(c=g-e.startSN,(h=e.fragments)[c]=t,f=c;f>0;f--)ee(h,f,f-1);for(f=c;fi.length)return;for(var n=0;nr.startCC||e&&e.cc=(e[e.length-1].endProgramDateTime||0))return null;r=r||0;for(var i=0;ie&&r.start?-1:0}function ce(e,t,r){var i=1e3*Math.min(t,r.duration+(r.deltaPTS?r.deltaPTS:0));return(r.endProgramDateTime||0)-i>e}var he=function(){function e(e,t,r,i){this.config=e,this.media=t,this.fragmentTracker=r,this.hls=i,this.nudgeRetry=0,this.stallReported=!1,this.stalled=null,this.moved=!1,this.seeking=!1}var t=e.prototype;return t.poll=function(e){var t=this.config,r=this.media,i=this.stalled,a=r.currentTime,n=r.seeking,s=this.seeking&&!n,o=!this.seeking&&n;if(this.seeking=n,a===e){if((o||s)&&(this.stalled=null),!r.paused&&!r.ended&&0!==r.playbackRate&&r.buffered.length){var l=H.bufferInfo(r,a,0),d=l.len>0,c=l.nextStart||0;if(d||c){if(n){var h=l.len>2,f=!c||c-a>2&&!this.fragmentTracker.getPartialFragment(a);if(h||f)return;this.moved=!1}if(!this.moved&&this.stalled){var g=Math.max(c,l.start||0)-a;if(g>0&&g<=2)return void this._trySkipBufferHole(null)}var p=self.performance.now();if(null!==i){var v=p-i;!n&&v>=250&&this._reportStall(l.len);var m=H.bufferInfo(r,a,t.maxBufferHole);this._tryFixBufferStall(m,v)}else this.stalled=p}}}else if(this.moved=!0,null!==i){if(this.stallReported){var y=self.performance.now()-i;u.b.warn("playback not stuck anymore @"+a+", after "+Math.round(y)+"ms"),this.stallReported=!1}this.stalled=null,this.nudgeRetry=0}},t._tryFixBufferStall=function(e,t){var r=this.config,i=this.fragmentTracker,a=this.media.currentTime,n=i.getPartialFragment(a);if(n&&this._trySkipBufferHole(n))return;e.len>r.maxBufferHole&&t>1e3*r.highBufferWatchdogPeriod&&(u.b.warn("Trying to nudge playhead over buffer-hole"),this.stalled=null,this._tryNudgeBuffer())},t._reportStall=function(e){var t=this.hls,r=this.media;this.stallReported||(this.stallReported=!0,u.b.warn("Playback stalling at @"+r.currentTime+" due to low buffer (buffer="+e+")"),t.trigger(d.a.ERROR,{type:o.b.MEDIA_ERROR,details:o.a.BUFFER_STALLED_ERROR,fatal:!1,buffer:e}))},t._trySkipBufferHole=function(e){for(var t=this.config,r=this.hls,i=this.media,a=i.currentTime,n=0,s=0;s=n&&a1?i-1:0),n=1;n1&&(this.clearNextTick(),this._tickTimer=self.setTimeout(this._boundTick,0)),this._tickCallCount=0)},a.doTick=function(){},i}(h);var pe="STOPPED",ve="STARTING",me="IDLE",ye="PAUSED",be="KEY_LOADING",Te="FRAG_LOADING",Ee="FRAG_LOADING_WAITING_RETRY",Se="WAITING_TRACK",_e="PARSING",Re="PARSED",Ae="BUFFER_FLUSHING",ke="ENDED",we="ERROR",Le="WAITING_INIT_PTS",De="WAITING_LEVEL",Oe=function(e){var t,r;function i(){return e.apply(this,arguments)||this}r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var a=i.prototype;return a.doTick=function(){},a.startLoad=function(){},a.stopLoad=function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragmentTracker.removeFragment(e)),this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.fragCurrent=null,this.fragPrevious=null,this.clearInterval(),this.clearNextTick(),this.state=pe},a._streamEnded=function(e,t){var r=this.fragCurrent,i=this.fragmentTracker;if(!t.live&&r&&!r.backtracked&&r.sn===t.endSN&&!e.nextStart){var a=i.getState(r);return a===B||a===G}return!1},a.onMediaSeeking=function(){var e=this.config,t=this.media,r=this.mediaBuffer,i=this.state,a=t?t.currentTime:null,n=H.bufferInfo(r||t,a,this.config.maxBufferHole);if(u.b.log("media seeking to "+(Object(l.a)(a)?a.toFixed(3):a)),i===Te){var s=this.fragCurrent;if(0===n.len&&s){var o=e.maxFragLookUpTolerance,d=s.start-o,c=s.start+s.duration+o;ac?(s.loader&&(u.b.log("seeking outside of buffer while fragment load in progress, cancel fragment load"),s.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.state=me):u.b.log("seeking outside of buffer but within currently loaded fragment range")}}else i===ke&&(0===n.len&&(this.fragPrevious=null,this.fragCurrent=null),this.state=me);t&&(this.lastCurrentTime=a),this.loadedmetadata||(this.nextLoadPosition=this.startPosition=a),this.tick()},a.onMediaEnded=function(){this.startPosition=this.lastCurrentTime=0},a.onHandlerDestroying=function(){this.stopLoad(),e.prototype.onHandlerDestroying.call(this)},a.onHandlerDestroyed=function(){this.state=pe,this.fragmentTracker=null},a.computeLivePosition=function(e,t){var r=void 0!==this.config.liveSyncDuration?this.config.liveSyncDuration:this.config.liveSyncDurationCount*t.targetduration;return e+Math.max(0,t.totalduration-r)},i}(ge);function Ce(e,t){for(var r=0;r0&&-1===e&&(u.b.log("override startPosition with lastCurrentTime @"+t.toFixed(3)),e=t),this.state=me,this.nextLoadPosition=this.startPosition=this.lastCurrentTime=e,this.tick()}else this.forceStartLoad=!0,this.state=pe},h.stopLoad=function(){this.forceStartLoad=!1,e.prototype.stopLoad.call(this)},h.doTick=function(){switch(this.state){case Ae:this.fragLoadError=0;break;case me:this._doTickIdle();break;case De:var e=this.levels[this.level];e&&e.details&&(this.state=me);break;case Ee:var t=window.performance.now(),r=this.retryDate;(!r||t>=r||this.media&&this.media.seeking)&&(u.b.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=me)}this._checkBuffer(),this._checkFragmentChanged()},h._doTickIdle=function(){var e=this.hls,t=e.config,r=this.media;if(void 0!==this.levelLastLoaded&&(r||!this.startFragRequested&&t.startFragPrefetch))if(this.altAudio&&this.audioOnly)this.demuxer.frag=null;else{var i;i=this.loadedmetadata?r.currentTime:this.nextLoadPosition;var a=e.nextLoadLevel,n=this.levels[a];if(n){var s,o=n.bitrate;s=o?Math.max(8*t.maxBufferSize/o,t.maxBufferLength):t.maxBufferLength,s=Math.min(s,t.maxMaxBufferLength);var l=i=s)){u.b.trace("buffer length of "+h.toFixed(3)+" is below max of "+s.toFixed(3)+". checking for more payload ..."),this.level=e.nextLoadLevel=a;var f=n.details;if(!f||f.live&&this.levelLastLoaded!==a)this.state=De;else{if(this._streamEnded(c,f)){var g={};return this.altAudio&&(g.type="video"),this.hls.trigger(d.a.BUFFER_EOS,g),void(this.state=ke)}this._fetchPayloadOrEos(i,c,f)}}}}},h._fetchPayloadOrEos=function(e,t,r){var i=this.fragPrevious,a=(this.level,r.fragments),n=a.length;if(0!==n){var s,o=a[0].start,l=a[n-1].start+a[n-1].duration,d=t.end;if(r.initSegment&&!r.initSegment.data)s=r.initSegment;else if(r.live){var c=this.config.initialLiveManifestSize;if(nh&&h>d.currentTime&&(u.b.log("buffer end: "+t.toFixed(3)+" is located too far from the end of live sliding playlist, reset currentTime to : "+h.toFixed(3)),d.currentTime=h),this.nextLoadPosition=h}if(e.PTSKnown&&t>i&&d&&d.readyState)return null;if(this.startFragRequested&&!e.PTSKnown&&a)if(e.hasProgramDateTime)u.b.log("live playlist, switching playlist, load frag with same PDT: "+a.programDateTime),s=le(n,a.endProgramDateTime,o.maxFragLookUpTolerance);else{var f=a.sn+1;if(f>=e.startSN&&f<=e.endSN){var g=n[f-e.startSN];a.cc===g.cc&&(s=g,u.b.log("live playlist, switching playlist, load frag with next SN: "+s.sn))}s||(s=j.search(n,(function(e){return a.cc-e.cc})))&&u.b.log("live playlist, switching playlist, load frag with same CC: "+s.sn)}return s},h._findFragment=function(e,t,r,i,a,n,s){var o,l=this.hls.config;an-l.maxFragLookUpTolerance?0:l.maxFragLookUpTolerance):o=i[r-1];if(o){var d=o.sn-s.startSN,c=t&&o.level===t.level,h=i[d-1],f=i[d+1];if(t&&o.sn===t.sn)if(c&&!o.backtracked)if(o.snl.maxBufferHole&&t.dropped&&d?(o=h,u.b.warn("Previous fragment was dropped with large PTS gap between audio and video. Maybe fragment is not starting with a keyframe? Loading previous one to try to overcome this")):(o=f,this.fragmentTracker.getState(o)!==G&&u.b.log("Re-loading fragment with SN: "+o.sn))}else o=null;else o.backtracked&&(f&&f.backtracked?(u.b.warn("Already backtracked from fragment "+f.sn+", will not backtrack to fragment "+o.sn+". Loading fragment "+f.sn),o=f):(u.b.warn("Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe"),o.dropped=0,h?(o=h).backtracked=!0:d&&(o=null)))}return o},h._loadKey=function(e,t){u.b.log("Loading key for "+e.sn+" of ["+t.startSN+"-"+t.endSN+"], level "+this.level),this.state=be,this.hls.trigger(d.a.KEY_LOADING,{frag:e})},h._loadFragment=function(e,t,r,i){var a=this.fragmentTracker.getState(e);this.fragCurrent=e,"initSegment"!==e.sn&&(this.startFragRequested=!0),Object(l.a)(e.sn)&&!e.bitrateTest&&(this.nextLoadPosition=e.start+e.duration),e.backtracked||a===U||a===B?(e.autoLevel=this.hls.autoLevelEnabled,e.bitrateTest=this.bitrateTest,u.b.log("Loading "+e.sn+" of ["+t.startSN+"-"+t.endSN+"], level "+this.level+", "+(this.loadedmetadata?"currentTime":"nextLoadPosition")+": "+parseFloat(r.toFixed(3))+", bufferEnd: "+parseFloat(i.toFixed(3))),this.hls.trigger(d.a.FRAG_LOADING,{frag:e}),this.demuxer||(this.demuxer=new J(this.hls,"main")),this.state=Te):a===N&&this._reduceMaxBufferLength(e.duration)&&this.fragmentTracker.removeFragment(e)},h.getBufferedFrag=function(e){return this.fragmentTracker.getBufferedFrag(e,n.MAIN)},h.followingBufferedFrag=function(e){return e?this.getBufferedFrag(e.endPTS+.5):null},h._checkFragmentChanged=function(){var e,t,r=this.media;if(r&&r.readyState&&!1===r.seeking&&((t=r.currentTime)>this.lastCurrentTime&&(this.lastCurrentTime=t),H.isBuffered(r,t)?e=this.getBufferedFrag(t):H.isBuffered(r,t+.1)&&(e=this.getBufferedFrag(t+.1)),e)){var i=e;if(i!==this.fragPlaying){this.hls.trigger(d.a.FRAG_CHANGED,{frag:i});var a=i.level;this.fragPlaying&&this.fragPlaying.level===a||this.hls.trigger(d.a.LEVEL_SWITCHED,{level:a}),this.fragPlaying=i}}},h.immediateLevelSwitch=function(){if(u.b.log("immediateLevelSwitch"),!this.immediateSwitch){this.immediateSwitch=!0;var e,t=this.media;t?(e=t.paused)||t.pause():e=!0,this.previouslyPaused=e}var r=this.fragCurrent;r&&r.loader&&r.loader.abort(),this.fragCurrent=null,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)},h.immediateLevelSwitchEnd=function(){var e=this.media;e&&e.buffered.length&&(this.immediateSwitch=!1,e.currentTime>0&&H.isBuffered(e,e.currentTime)&&(e.currentTime-=1e-4),this.previouslyPaused||e.play())},h.nextLevelSwitch=function(){var e=this.media;if(e&&e.readyState){var t,r=this.getBufferedFrag(e.currentTime);if(r&&r.startPTS>1&&this.flushMainBuffer(0,r.startPTS-1),e.paused)t=0;else{var i=this.hls.nextLoadLevel,a=this.levels[i],n=this.fragLastKbps;t=n&&this.fragCurrent?this.fragCurrent.duration*a.bitrate/(1e3*n)+1:0}var s=this.getBufferedFrag(e.currentTime+t);if(s){var o=this.followingBufferedFrag(s);if(o){var l=this.fragCurrent;l&&l.loader&&l.loader.abort(),this.fragCurrent=null;var d=Math.max(s.endPTS,o.maxStartPTS+Math.min(this.config.maxFragLookUpTolerance,o.duration));this.flushMainBuffer(d,Number.POSITIVE_INFINITY)}}}},h.flushMainBuffer=function(e,t){this.state=Ae;var r={startOffset:e,endOffset:t};this.altAudio&&(r.type="video"),this.hls.trigger(d.a.BUFFER_FLUSHING,r)},h.onMediaAttached=function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("seeked",this.onvseeked),t.addEventListener("ended",this.onvended);var r=this.config;this.levels&&r.autoStartLoad&&this.hls.startLoad(r.startPosition),this.gapController=new he(r,t,this.fragmentTracker,this.hls)},h.onMediaDetaching=function(){var e=this.media;e&&e.ended&&(u.b.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.levels;t&&t.forEach((function(e){e.details&&e.details.fragments.forEach((function(e){e.backtracked=void 0}))})),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("seeked",this.onvseeked),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.fragmentTracker.removeAllFragments(),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()},h.onMediaSeeked=function(){var e=this.media,t=e?e.currentTime:void 0;Object(l.a)(t)&&u.b.log("media seeked to "+t.toFixed(3)),this.tick()},h.onManifestLoading=function(){u.b.log("trigger BUFFER_RESET"),this.hls.trigger(d.a.BUFFER_RESET),this.fragmentTracker.removeAllFragments(),this.stalled=!1,this.startPosition=this.lastCurrentTime=0},h.onManifestParsed=function(e){var t,r=!1,i=!1;e.levels.forEach((function(e){(t=e.audioCodec)&&(-1!==t.indexOf("mp4a.40.2")&&(r=!0),-1!==t.indexOf("mp4a.40.5")&&(i=!0))})),this.audioCodecSwitch=r&&i,this.audioCodecSwitch&&u.b.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.altAudio=e.altAudio,this.levels=e.levels,this.startFragRequested=!1;var a=this.config;(a.autoStartLoad||this.forceStartLoad)&&this.hls.startLoad(a.startPosition)},h.onLevelLoaded=function(e){var t=e.details,r=e.level,i=this.levels[this.levelLastLoaded],a=this.levels[r],n=t.totalduration,s=0;if(u.b.log("level "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+n),t.live||a.details&&a.details.live){var o=a.details;o&&t.fragments.length>0?(re(o,t),s=t.fragments[0].start,this.liveSyncPosition=this.computeLivePosition(s,o),t.PTSKnown&&Object(l.a)(s)?u.b.log("live playlist sliding:"+s.toFixed(3)):(u.b.log("live playlist - outdated PTS, unknown sliding"),oe(this.fragPrevious,i,t))):(u.b.log("live playlist - first load, unknown sliding"),t.PTSKnown=!1,oe(this.fragPrevious,i,t))}else t.PTSKnown=!1;if(a.details=t,this.levelLastLoaded=r,this.hls.trigger(d.a.LEVEL_UPDATED,{details:t,level:r}),!1===this.startFragRequested){if(-1===this.startPosition||-1===this.lastCurrentTime){var c=t.startTimeOffset;Object(l.a)(c)?(c<0&&(u.b.log("negative start time offset "+c+", count from end of last fragment"),c=s+n+c),u.b.log("start time offset found in playlist, adjust startPosition to "+c),this.startPosition=c):t.live?(this.startPosition=this.computeLivePosition(s,t),u.b.log("configure startPosition to "+this.startPosition)):this.startPosition=0,this.lastCurrentTime=this.startPosition}this.nextLoadPosition=this.startPosition}this.state===De&&(this.state=me),this.tick()},h.onKeyLoaded=function(){this.state===be&&(this.state=me,this.tick())},h.onFragLoaded=function(e){var t=this.fragCurrent,r=this.hls,i=this.levels,a=this.media,n=e.frag;if(this.state===Te&&t&&"main"===n.type&&n.level===t.level&&n.sn===t.sn){var s=e.stats,o=i[t.level],l=o.details;if(this.bitrateTest=!1,this.stats=s,u.b.log("Loaded "+t.sn+" of ["+l.startSN+" ,"+l.endSN+"],level "+t.level),n.bitrateTest&&r.nextLoadLevel)this.state=me,this.startFragRequested=!1,s.tparsed=s.tbuffered=window.performance.now(),r.trigger(d.a.FRAG_BUFFERED,{stats:s,frag:t,id:"main"}),this.tick();else if("initSegment"===n.sn)this.state=me,s.tparsed=s.tbuffered=window.performance.now(),l.initSegment.data=e.payload,r.trigger(d.a.FRAG_BUFFERED,{stats:s,frag:t,id:"main"}),this.tick();else{u.b.log("Parsing "+t.sn+" of ["+l.startSN+" ,"+l.endSN+"],level "+t.level+", cc "+t.cc),this.state=_e,this.pendingBuffering=!0,this.appended=!1,n.bitrateTest&&(n.bitrateTest=!1,this.fragmentTracker.onFragLoaded({frag:n}));var c=!(a&&a.seeking)&&(l.PTSKnown||!l.live),h=l.initSegment?l.initSegment.data:[],f=this._getAudioCodec(o);(this.demuxer=this.demuxer||new J(this.hls,"main")).push(e.payload,h,f,o.videoCodec,t,l.totalduration,c)}}this.fragLoadError=0},h.onFragParsingInitSegment=function(e){var t=this.fragCurrent,r=e.frag;if(t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===_e){var i,a,n=e.tracks;if(this.audioOnly=n.audio&&!n.video,this.altAudio&&!this.audioOnly&&delete n.audio,a=n.audio){var s=this.levels[this.level].audioCodec,o=navigator.userAgent.toLowerCase();s&&this.audioCodecSwap&&(u.b.log("swapping playlist audio codec"),s=-1!==s.indexOf("mp4a.40.5")?"mp4a.40.2":"mp4a.40.5"),this.audioCodecSwitch&&1!==a.metadata.channelCount&&-1===o.indexOf("firefox")&&(s="mp4a.40.5"),-1!==o.indexOf("android")&&"audio/mpeg"!==a.container&&(s="mp4a.40.2",u.b.log("Android: force audio codec to "+s)),a.levelCodec=s,a.id=e.id}for(i in(a=n.video)&&(a.levelCodec=this.levels[this.level].videoCodec,a.id=e.id),this.hls.trigger(d.a.BUFFER_CODECS,n),n){a=n[i],u.b.log("main track:"+i+",container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var l=a.initSegment;l&&(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(d.a.BUFFER_APPENDING,{type:i,data:l,parent:"main",content:"initSegment"}))}this.tick()}},h.onFragParsingData=function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"main"===e.id&&i.sn===r.sn&&i.level===r.level&&("audio"!==e.type||!this.altAudio)&&this.state===_e){var a=this.levels[this.level],n=r;if(Object(l.a)(e.endPTS)||(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),!0===e.hasAudio&&n.addElementaryStream(p.AUDIO),!0===e.hasVideo&&n.addElementaryStream(p.VIDEO),u.b.log("Parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb+",dropped:"+(e.dropped||0)),"video"===e.type)if(n.dropped=e.dropped,n.dropped)if(n.backtracked)u.b.warn("Already backtracked on this fragment, appending with the gap",n.sn);else{var s=a.details;if(!s||n.sn!==s.startSN)return u.b.warn("missing video frame(s), backtracking fragment",n.sn),this.fragmentTracker.removeFragment(n),n.backtracked=!0,this.nextLoadPosition=e.startPTS,this.state=me,this.fragPrevious=n,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),void this.tick();u.b.warn("missing video frame(s) on first frag, appending with gap",n.sn)}else n.backtracked=!1;var o=te(a.details,n,e.startPTS,e.endPTS,e.startDTS,e.endDTS),c=this.hls;c.trigger(d.a.LEVEL_PTS_UPDATED,{details:a.details,level:this.level,drift:o,type:e.type,start:e.startPTS,end:e.endPTS}),[e.data1,e.data2].forEach((function(r){r&&r.length&&t.state===_e&&(t.appended=!0,t.pendingBuffering=!0,c.trigger(d.a.BUFFER_APPENDING,{type:e.type,data:r,parent:"main",content:"data"}))})),this.tick()}},h.onFragParsed=function(e){var t=this.fragCurrent,r=e.frag;t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===_e&&(this.stats.tparsed=window.performance.now(),this.state=Re,this._checkAppendedParsed())},h.onAudioTrackSwitching=function(e){var t=this.altAudio,r=!!e.url,i=e.id;if(!r){if(this.mediaBuffer!==this.media){u.b.log("switching on main audio, use media.buffered to schedule main fragment loading"),this.mediaBuffer=this.media;var a=this.fragCurrent;a.loader&&(u.b.log("switching to main audio track, cancel main fragment load"),a.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=me}var n=this.hls;t&&n.trigger(d.a.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),n.trigger(d.a.AUDIO_TRACK_SWITCHED,{id:i})}},h.onAudioTrackSwitched=function(e){var t=e.id,r=!!this.hls.audioTracks[t].url;if(r){var i=this.videoBuffer;i&&this.mediaBuffer!==i&&(u.b.log("switching on alternate audio, use video.buffered to schedule main fragment loading"),this.mediaBuffer=i)}this.altAudio=r,this.tick()},h.onBufferCreated=function(e){var t,r,i=e.tracks,a=!1;for(var n in i){var s=i[n];"main"===s.id?(r=n,t=s,"video"===n&&(this.videoBuffer=i[n].buffer)):a=!0}a&&t?(u.b.log("alternate track found, use "+r+".buffered to schedule main fragment loading"),this.mediaBuffer=t.buffer):this.mediaBuffer=this.media},h.onBufferAppended=function(e){if("main"===e.parent){var t=this.state;t!==_e&&t!==Re||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}},h._checkAppendedParsed=function(){if(!(this.state!==Re||this.appended&&this.pendingBuffering)){var e=this.fragCurrent;if(e){var t=this.mediaBuffer?this.mediaBuffer:this.media;u.b.log("main buffered : "+ne.toString(t.buffered)),this.fragPrevious=e;var r=this.stats;r.tbuffered=window.performance.now(),this.fragLastKbps=Math.round(8*r.total/(r.tbuffered-r.tfirst)),this.hls.trigger(d.a.FRAG_BUFFERED,{stats:r,frag:e,id:"main"}),this.state=me}(this.loadedmetadata||this.startPosition<=0)&&this.tick()}},h.onError=function(e){var t=e.frag||this.fragCurrent;if(!t||"main"===t.type){var r=!!this.media&&H.isBuffered(this.media,this.media.currentTime)&&H.isBuffered(this.media,this.media.currentTime+.5);switch(e.details){case o.a.FRAG_LOAD_ERROR:case o.a.FRAG_LOAD_TIMEOUT:case o.a.KEY_LOAD_ERROR:case o.a.KEY_LOAD_TIMEOUT:if(!e.fatal)if(this.fragLoadError+1<=this.config.fragLoadingMaxRetry){var i=Math.min(Math.pow(2,this.fragLoadError)*this.config.fragLoadingRetryDelay,this.config.fragLoadingMaxRetryTimeout);u.b.warn("mediaController: frag loading failed, retry in "+i+" ms"),this.retryDate=window.performance.now()+i,this.loadedmetadata||(this.startFragRequested=!1,this.nextLoadPosition=this.startPosition),this.fragLoadError++,this.state=Ee}else u.b.error("mediaController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=we;break;case o.a.LEVEL_LOAD_ERROR:case o.a.LEVEL_LOAD_TIMEOUT:this.state!==we&&(e.fatal?(this.state=we,u.b.warn("streamController: "+e.details+",switch to "+this.state+" state ...")):e.levelRetry||this.state!==De||(this.state=me));break;case o.a.BUFFER_FULL_ERROR:"main"!==e.parent||this.state!==_e&&this.state!==Re||(r?(this._reduceMaxBufferLength(this.config.maxBufferLength),this.state=me):(u.b.warn("buffer full error also media.currentTime is not buffered, flush everything"),this.fragCurrent=null,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)))}}},h._reduceMaxBufferLength=function(e){var t=this.config;return t.maxMaxBufferLength>=e&&(t.maxMaxBufferLength/=2,u.b.warn("main:reduce max buffer length to "+t.maxMaxBufferLength+"s"),!0)},h._checkBuffer=function(){var e=this.media;if(e&&0!==e.readyState){var t=(this.mediaBuffer?this.mediaBuffer:e).buffered;!this.loadedmetadata&&t.length?(this.loadedmetadata=!0,this._seekToStartPos()):this.immediateSwitch?this.immediateLevelSwitchEnd():this.gapController.poll(this.lastCurrentTime,t)}},h.onFragLoadEmergencyAborted=function(){this.state=me,this.loadedmetadata||(this.startFragRequested=!1,this.nextLoadPosition=this.startPosition),this.tick()},h.onBufferFlushed=function(){var e=this.mediaBuffer?this.mediaBuffer:this.media;if(e){var t=this.audioOnly?p.AUDIO:p.VIDEO;this.fragmentTracker.detectEvictedFragments(t,e.buffered)}this.state=me,this.fragPrevious=null},h.onLevelsUpdated=function(e){this.levels=e.levels},h.swapAudioCodec=function(){this.audioCodecSwap=!this.audioCodecSwap},h._seekToStartPos=function(){var e=this.media,t=e.currentTime,r=this.startPosition;if(t!==r&&r>=0){if(e.seeking)return void u.b.log("could not seek to "+r+", already seeking at "+t);var i=(e.buffered.length?e.buffered.start(0):0)-r;i>0&&i"+e),this.hls.trigger(d.a.STREAM_STATE_TRANSITION,{previousState:t,nextState:e})}},get:function(){return this._state}},{key:"currentLevel",get:function(){var e=this.media;if(e){var t=this.getBufferedFrag(e.currentTime);if(t)return t.level}return-1}},{key:"nextBufferedFrag",get:function(){var e=this.media;return e?this.followingBufferedFrag(this.getBufferedFrag(e.currentTime)):null}},{key:"nextLevel",get:function(){var e=this.nextBufferedFrag;return e?e.level:-1}},{key:"liveSyncPosition",get:function(){return this._liveSyncPosition},set:function(e){this._liveSyncPosition=e}}])&&Ce(a.prototype,s),c&&Ce(a,c),i}(Oe);function xe(e,t){for(var r=0;r0){t=r[0].bitrate,r.sort((function(e,t){return e.bitrate-t.bitrate})),this._levels=r;for(var c=0;c=0&&e1&&c.loadError0){var t=this.currentLevelIndex,r=e.urlId,i=e.url[r];u.b.log("Attempt loading level index "+t+" with URL-id "+r),this.hls.trigger(d.a.LEVEL_LOADING,{url:i,level:t,id:r})}}},l.removeLevel=function(e,t){var r=this.levels.filter((function(r,i){return i!==e||r.url.length>1&&void 0!==t&&(r.url=r.url.filter((function(e,r){return r!==t})),r.urlId=0,!0)})).map((function(e,t){var r=e.details;return r&&r.fragments&&r.fragments.forEach((function(e){e.level=t})),e}));this._levels=r,this.hls.trigger(d.a.LEVELS_UPDATED,{levels:r})},a=i,(n=[{key:"levels",get:function(){return this._levels}},{key:"level",get:function(){return this.currentLevelIndex},set:function(e){var t=this._levels;t&&(e=Math.min(e,t.length-1),this.currentLevelIndex===e&&t[e].details||this.setLevelInternal(e))}},{key:"manualLevel",get:function(){return this.manualLevelIndex},set:function(e){this.manualLevelIndex=e,void 0===this._startLevel&&(this._startLevel=e),-1!==e&&(this.level=e)}},{key:"firstLevel",get:function(){return this._firstLevel},set:function(e){this._firstLevel=e}},{key:"startLevel",get:function(){if(void 0===this._startLevel){var e=this.hls.config.startLevel;return void 0!==e?e:this._firstLevel}return this._startLevel},set:function(e){this._startLevel=e}},{key:"nextLoadLevel",get:function(){return-1!==this.manualLevelIndex?this.manualLevelIndex:this.hls.nextAutoLevel},set:function(e){this.level=e,-1===this.manualLevelIndex&&(this.hls.nextAutoLevel=e)}}])&&xe(a.prototype,n),s&&xe(a,s),i}(h),Fe=r(4);function Ue(e,t){var r;try{r=new Event("addtrack")}catch(e){(r=document.createEvent("Event")).initEvent("addtrack",!1,!1)}r.track=e,t.dispatchEvent(r)}function Ne(e){if(null==e?void 0:e.cues)for(;e.cues.length>0;)e.removeCue(e.cues[0])}var Be=function(e){var t,r;function i(t){var r;return(r=e.call(this,t,d.a.MEDIA_ATTACHED,d.a.MEDIA_DETACHING,d.a.FRAG_PARSING_METADATA,d.a.LIVE_BACK_BUFFER_REACHED)||this).id3Track=void 0,r.media=void 0,r}r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var a=i.prototype;return a.destroy=function(){h.prototype.destroy.call(this)},a.onMediaAttached=function(e){this.media=e.media,this.media},a.onMediaDetaching=function(){Ne(this.id3Track),this.id3Track=void 0,this.media=void 0},a.getID3Track=function(e){for(var t=0;te[e.length-1].endTime)return e[e.length-1];for(var r=0,i=e.length-1;r<=i;){var a=Math.floor((i+r)/2);if(te[a].endTime))return e[a];r=a+1}}return e[r].endTime-t=this.minWeight_},t.getEstimate=function(){return this.canEstimate()?Math.min(this.fast_.getEstimate(),this.slow_.getEstimate()):this.defaultEstimate_},t.destroy=function(){},e}();function je(e,t){for(var r=0;r500*r.duration/s){var o=e.levels,l=Math.max(1,a.bw?a.bw/8:1e3*a.loaded/n),c=o[r.level];if(!c)return;var h=c.realBitrate?Math.max(c.realBitrate,c.bitrate):c.bitrate,f=a.total?a.total:Math.max(a.loaded,Math.round(r.duration*h/8)),g=t.currentTime,p=(f-a.loaded)/l,v=(H.bufferInfo(t,g,e.config.maxBufferHole).end-g)/s;if(v<2*r.duration/s&&p>v){var m,y=e.minAutoLevel;for(m=r.level-1;m>y;m--){var b=o[m].realBitrate?Math.max(o[m].realBitrate,o[m].bitrate):o[m].bitrate;if(r.duration*b/(6.4*l)=i;d--){var c=l[d];if(c){var h=c.details,f=h?h.totalduration/h.fragments.length:t,g=!!h&&h.live,p=void 0;p=d<=e?s*r:o*r;var v=l[d].realBitrate?Math.max(l[d].realBitrate,l[d].bitrate):l[d].bitrate,m=v*f/p;if(u.b.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: "+d+"/"+Math.round(p)+"/"+v+"/"+f+"/"+n+"/"+m),p>v&&(!m||g&&!this.bitrateTestDelay||m=0)return f;u.b.trace("rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering");var g=o?Math.min(o,i.maxStarvationDelay):i.maxStarvationDelay,p=i.abrBandWidthFactor,v=i.abrBandWidthUpFactor;if(0===h){var m=this.bitrateTestDelay;m&&(g=(o?Math.min(o,i.maxLoadingDelay):i.maxLoadingDelay)-m,u.b.trace("bitrate test took "+Math.round(1e3*m)+"ms, set first fragment max fetchDuration to "+Math.round(1e3*g)+" ms"),p=v=1)}return f=this._findBestLevel(s,o,c,a,t,h+g,p,v,r),Math.max(f,0)}}])&&je(a.prototype,n),s&&je(a,s),i}(h);var Ye=q(),We=function(e){var t,r;function i(t){var r;return(r=e.call(this,t,d.a.MEDIA_ATTACHING,d.a.MEDIA_DETACHING,d.a.MANIFEST_PARSED,d.a.BUFFER_RESET,d.a.BUFFER_APPENDING,d.a.BUFFER_CODECS,d.a.BUFFER_EOS,d.a.BUFFER_FLUSHING,d.a.LEVEL_PTS_UPDATED,d.a.LEVEL_UPDATED)||this)._msDuration=null,r._levelDuration=null,r._levelTargetDuration=10,r._live=null,r._objectUrl=null,r._needsFlush=!1,r._needsEos=!1,r.config=void 0,r.audioTimestampOffset=void 0,r.bufferCodecEventsExpected=0,r._bufferCodecEventsTotal=0,r.media=null,r.mediaSource=null,r.segments=[],r.parent=void 0,r.appending=!1,r.appended=0,r.appendError=0,r.flushBufferCounter=0,r.tracks={},r.pendingTracks={},r.sourceBuffer={},r.flushRange=[],r._onMediaSourceOpen=function(){u.b.log("media source opened"),r.hls.trigger(d.a.MEDIA_ATTACHED,{media:r.media});var e=r.mediaSource;e&&e.removeEventListener("sourceopen",r._onMediaSourceOpen),r.checkPendingTracks()},r._onMediaSourceClose=function(){u.b.log("media source closed")},r._onMediaSourceEnded=function(){u.b.log("media source ended")},r._onSBUpdateEnd=function(){if(r.audioTimestampOffset&&r.sourceBuffer.audio){var e=r.sourceBuffer.audio;u.b.warn("change mpeg audio timestamp offset from "+e.timestampOffset+" to "+r.audioTimestampOffset),e.timestampOffset=r.audioTimestampOffset,delete r.audioTimestampOffset}r._needsFlush&&r.doFlush(),r._needsEos&&r.checkEos(),r.appending=!1;var t=r.parent,i=r.segments.reduce((function(e,r){return r.parent===t?e+1:e}),0),a={},n=r.sourceBuffer;for(var s in n){var o=n[s];if(!o)throw Error("handling source buffer update end error: source buffer for "+s+" uninitilized and unable to update buffered TimeRanges.");a[s]=o.buffered}r.hls.trigger(d.a.BUFFER_APPENDED,{parent:t,pending:i,timeRanges:a}),r._needsFlush||r.doAppending(),r.updateMediaElementDuration(),0===i&&r.flushLiveBackBuffer()},r._onSBUpdateError=function(e){u.b.error("sourceBuffer error:",e),r.hls.trigger(d.a.ERROR,{type:o.b.MEDIA_ERROR,details:o.a.BUFFER_APPENDING_ERROR,fatal:!1})},r.config=t.config,r}r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var a=i.prototype;return a.destroy=function(){h.prototype.destroy.call(this)},a.onLevelPtsUpdated=function(e){var t=e.type,r=this.tracks.audio;if("audio"===t&&r&&"audio/mpeg"===r.container){var i=this.sourceBuffer.audio;if(!i)throw Error("Level PTS Updated and source buffer for audio uninitalized");if(Math.abs(i.timestampOffset-e.start)>.1){var a=i.updating;try{i.abort()}catch(e){u.b.warn("can not abort audio buffer: "+e)}a?this.audioTimestampOffset=e.start:(u.b.warn("change mpeg audio timestamp offset from "+i.timestampOffset+" to "+e.start),i.timestampOffset=e.start)}}},a.onManifestParsed=function(e){var t=2;(e.audio&&!e.video||!e.altAudio)&&(t=1),this.bufferCodecEventsExpected=this._bufferCodecEventsTotal=t,u.b.log(this.bufferCodecEventsExpected+" bufferCodec event(s) expected")},a.onMediaAttaching=function(e){var t=this.media=e.media;if(t&&Ye){var r=this.mediaSource=new Ye;r.addEventListener("sourceopen",this._onMediaSourceOpen),r.addEventListener("sourceended",this._onMediaSourceEnded),r.addEventListener("sourceclose",this._onMediaSourceClose),t.src=window.URL.createObjectURL(r),this._objectUrl=t.src}},a.onMediaDetaching=function(){u.b.log("media source detaching");var e=this.mediaSource;if(e){if("open"===e.readyState)try{e.endOfStream()}catch(e){u.b.warn("onMediaDetaching:"+e.message+" while calling endOfStream")}e.removeEventListener("sourceopen",this._onMediaSourceOpen),e.removeEventListener("sourceended",this._onMediaSourceEnded),e.removeEventListener("sourceclose",this._onMediaSourceClose),this.media&&(this._objectUrl&&window.URL.revokeObjectURL(this._objectUrl),this.media.src===this._objectUrl?(this.media.removeAttribute("src"),this.media.load()):u.b.warn("media.src was changed by a third party - skip cleanup")),this.mediaSource=null,this.media=null,this._objectUrl=null,this.bufferCodecEventsExpected=this._bufferCodecEventsTotal,this.pendingTracks={},this.tracks={},this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}this.hls.trigger(d.a.MEDIA_DETACHED)},a.checkPendingTracks=function(){var e=this.bufferCodecEventsExpected,t=this.pendingTracks,r=Object.keys(t).length;(r&&!e||2===r)&&(this.createSourceBuffers(t),this.pendingTracks={},this.doAppending())},a.onBufferReset=function(){var e=this.sourceBuffer;for(var t in e){var r=e[t];try{r&&(this.mediaSource&&this.mediaSource.removeSourceBuffer(r),r.removeEventListener("updateend",this._onSBUpdateEnd),r.removeEventListener("error",this._onSBUpdateError))}catch(e){}}this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0},a.onBufferCodecs=function(e){var t=this;Object.keys(this.sourceBuffer).length||(Object.keys(e).forEach((function(r){t.pendingTracks[r]=e[r]})),this.bufferCodecEventsExpected=Math.max(this.bufferCodecEventsExpected-1,0),this.mediaSource&&"open"===this.mediaSource.readyState&&this.checkPendingTracks())},a.createSourceBuffers=function(e){var t=this.sourceBuffer,r=this.mediaSource;if(!r)throw Error("createSourceBuffers called when mediaSource was null");for(var i in e)if(!t[i]){var a=e[i];if(!a)throw Error("source buffer exists for track "+i+", however track does not");var n=a.levelCodec||a.codec,s=a.container+";codecs="+n;u.b.log("creating sourceBuffer("+s+")");try{var l=t[i]=r.addSourceBuffer(s);l.addEventListener("updateend",this._onSBUpdateEnd),l.addEventListener("error",this._onSBUpdateError),this.tracks[i]={buffer:l,codec:n,id:a.id,container:a.container,levelCodec:a.levelCodec}}catch(e){u.b.error("error while trying to add sourceBuffer:"+e.message),this.hls.trigger(d.a.ERROR,{type:o.b.MEDIA_ERROR,details:o.a.BUFFER_ADD_CODEC_ERROR,fatal:!1,err:e,mimeType:s})}}this.hls.trigger(d.a.BUFFER_CREATED,{tracks:this.tracks})},a.onBufferAppending=function(e){this._needsFlush||(this.segments?this.segments.push(e):this.segments=[e],this.doAppending())},a.onBufferEos=function(e){for(var t in this.sourceBuffer)if(!e.type||e.type===t){var r=this.sourceBuffer[t];r&&!r.ended&&(r.ended=!0,u.b.log(t+" sourceBuffer now EOS"))}this.checkEos()},a.checkEos=function(){var e=this.sourceBuffer,t=this.mediaSource;if(t&&"open"===t.readyState){for(var r in e){var i=e[r];if(i){if(!i.ended)return;if(i.updating)return void(this._needsEos=!0)}}u.b.log("all media data are available, signal endOfStream() to MediaSource and stop loading fragment");try{t.endOfStream()}catch(e){u.b.warn("exception while calling mediaSource.endOfStream()")}this._needsEos=!1}else this._needsEos=!1},a.onBufferFlushing=function(e){e.type?this.flushRange.push({start:e.startOffset,end:e.endOffset,type:e.type}):(this.flushRange.push({start:e.startOffset,end:e.endOffset,type:"video"}),this.flushRange.push({start:e.startOffset,end:e.endOffset,type:"audio"})),this.flushBufferCounter=0,this.doFlush()},a.flushLiveBackBuffer=function(){if(this._live){var e=this.config.liveBackBufferLength;if(isFinite(e)&&!(e<0))if(this.media)for(var t=this.media.currentTime,r=this.sourceBuffer,i=Object.keys(r),a=t-Math.max(e,this._levelTargetDuration),n=i.length-1;n>=0;n--){var s=i[n],o=r[s];if(o){var l=o.buffered;l.length>0&&a>l.start(0)&&this.removeBufferRange(s,o,0,a)&&this.hls.trigger(d.a.LIVE_BACK_BUFFER_REACHED,{bufferEnd:a})}}else u.b.error("flushLiveBackBuffer called without attaching media")}},a.onLevelUpdated=function(e){var t=e.details;t.fragments.length>0&&(this._levelDuration=t.totalduration+t.fragments[0].start,this._levelTargetDuration=t.averagetargetduration||t.targetduration||10,this._live=t.live,this.updateMediaElementDuration())},a.updateMediaElementDuration=function(){var e,t=this.config;if(null!==this._levelDuration&&this.media&&this.mediaSource&&this.sourceBuffer&&0!==this.media.readyState&&"open"===this.mediaSource.readyState){for(var r in this.sourceBuffer){var i=this.sourceBuffer[r];if(i&&!0===i.updating)return}e=this.media.duration,null===this._msDuration&&(this._msDuration=this.mediaSource.duration),!0===this._live&&!0===t.liveDurationInfinity?(u.b.log("Media Source duration is set to Infinity"),this._msDuration=this.mediaSource.duration=1/0):(this._levelDuration>this._msDuration&&this._levelDuration>e||!Object(l.a)(e))&&(u.b.log("Updating Media Source duration to "+this._levelDuration.toFixed(3)),this._msDuration=this.mediaSource.duration=this._levelDuration)}},a.doFlush=function(){for(;this.flushRange.length;){var e=this.flushRange[0];if(!this.flushBuffer(e.start,e.end,e.type))return void(this._needsFlush=!0);this.flushRange.shift(),this.flushBufferCounter=0}if(0===this.flushRange.length){this._needsFlush=!1;var t=0,r=this.sourceBuffer;try{for(var i in r){var a=r[i];a&&(t+=a.buffered.length)}}catch(e){u.b.error("error while accessing sourceBuffer.buffered")}this.appended=t,this.hls.trigger(d.a.BUFFER_FLUSHED)}},a.doAppending=function(){var e=this.config,t=this.hls,r=this.segments,i=this.sourceBuffer;if(Object.keys(i).length){if(!this.media||this.media.error)return this.segments=[],void u.b.error("trying to append although a media error occured, flush segment and abort");if(!this.appending){var a=r.shift();if(a)try{var n=i[a.type];if(!n)return void this._onSBUpdateEnd();if(n.updating)return void r.unshift(a);n.ended=!1,this.parent=a.parent,n.appendBuffer(a.data),this.appendError=0,this.appended++,this.appending=!0}catch(i){u.b.error("error while trying to append buffer:"+i.message),r.unshift(a);var s={type:o.b.MEDIA_ERROR,parent:a.parent,details:"",fatal:!1};22===i.code?(this.segments=[],s.details=o.a.BUFFER_FULL_ERROR):(this.appendError++,s.details=o.a.BUFFER_APPEND_ERROR,this.appendError>e.appendErrorMaxRetry&&(u.b.log("fail "+e.appendErrorMaxRetry+" times to append segment in sourceBuffer"),this.segments=[],s.fatal=!0)),t.trigger(d.a.ERROR,s)}}}},a.flushBuffer=function(e,t,r){var i=this.sourceBuffer;if(!Object.keys(i).length)return!0;var a="null";if(this.media&&(a=this.media.currentTime.toFixed(3)),u.b.log("flushBuffer,pos/start/end: "+a+"/"+e+"/"+t),this.flushBufferCounter>=this.appended)return u.b.warn("abort flushing too many retries"),!0;var n=i[r];if(n){if(n.ended=!1,n.updating)return u.b.warn("cannot flush, sb updating in progress"),!1;if(this.removeBufferRange(r,n,e,t))return this.flushBufferCounter++,!1}return u.b.log("buffer flushed"),!0},a.removeBufferRange=function(e,t,r,i){try{for(var a=0;a.5){var d="null";return this.media&&(d=this.media.currentTime.toString()),u.b.log("sb remove "+e+" ["+o+","+l+"], of ["+n+","+s+"], pos:"+d),t.remove(o,l),!0}}}catch(e){u.b.warn("removeBufferRange failed",e)}return!1},i}(h);function qe(e,t){for(var r=0;rthis.autoLevelCapping&&t.streamController.nextLevelSwitch(),this.autoLevelCapping=t.autoLevelCapping}}},o.getMaxLevel=function(e){var t=this;if(!this.levels)return-1;var r=this.levels.filter((function(r,a){return i.isLevelAllowed(a,t.restrictedLevels)&&a<=e}));return this.clientRect=null,i.getMaxLevelByMediaSize(r,this.mediaWidth,this.mediaHeight)},o.startCapping=function(){this.timer||(this.autoLevelCapping=Number.POSITIVE_INFINITY,this.hls.firstLevel=this.getMaxLevel(this.firstLevel),clearInterval(this.timer),this.timer=setInterval(this.detectPlayerSize.bind(this),1e3),this.detectPlayerSize())},o.stopCapping=function(){this.restrictedLevels=[],this.firstLevel=null,this.autoLevelCapping=Number.POSITIVE_INFINITY,this.timer&&(this.timer=clearInterval(this.timer),this.timer=null)},o.getDimensions=function(){if(this.clientRect)return this.clientRect;var e=this.media,t={width:0,height:0};if(e){var r=e.getBoundingClientRect();t.width=r.width,t.height=r.height,t.width||t.height||(t.width=r.right-r.left||e.width||0,t.height=r.bottom-r.top||e.height||0)}return this.clientRect=t,t},i.isLevelAllowed=function(e,t){return void 0===t&&(t=[]),-1===t.indexOf(e)},i.getMaxLevelByMediaSize=function(e,t,r){if(!e||e&&!e.length)return-1;for(var i,a,n=e.length-1,s=0;s=t||o.height>=r)&&(i=o,!(a=e[s+1])||i.width!==a.width||i.height!==a.height)){n=s;break}}return n},a=i,s=[{key:"contentScaleFactor",get:function(){var e=1;try{e=window.devicePixelRatio}catch(e){}return e}}],(n=[{key:"mediaWidth",get:function(){return this.getDimensions().width*i.contentScaleFactor}},{key:"mediaHeight",get:function(){return this.getDimensions().height*i.contentScaleFactor}}])&&qe(a.prototype,n),s&&qe(a,s),i}(h);var ze=window.performance,Qe=function(e){var t,r;function i(t){return e.call(this,t,d.a.MEDIA_ATTACHING)||this}r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var a=i.prototype;return a.destroy=function(){this.timer&&clearInterval(this.timer),this.isVideoPlaybackQualityAvailable=!1},a.onMediaAttaching=function(e){var t=this.hls.config;t.capLevelOnFPSDrop&&("function"==typeof(this.video=e.media instanceof window.HTMLVideoElement?e.media:null).getVideoPlaybackQuality&&(this.isVideoPlaybackQualityAvailable=!0),clearInterval(this.timer),this.timer=setInterval(this.checkFPSInterval.bind(this),t.fpsDroppedMonitoringPeriod))},a.checkFPS=function(e,t,r){var i=ze.now();if(t){if(this.lastTime){var a=i-this.lastTime,n=r-this.lastDroppedFrames,s=t-this.lastDecodedFrames,o=1e3*n/a,l=this.hls;if(l.trigger(d.a.FPS_DROP,{currentDropped:n,currentDecoded:s,totalDroppedFrames:r}),o>0&&n>l.config.fpsDroppedMonitoringThreshold*s){var c=l.currentLevel;u.b.warn("drop FPS ratio greater than max allowed value for currentLevel: "+c),c>0&&(-1===l.autoLevelCapping||l.autoLevelCapping>=c)&&(c-=1,l.trigger(d.a.FPS_DROP_LEVEL_CAPPING,{level:c,droppedLevel:l.currentLevel}),l.autoLevelCapping=c,l.streamController.nextLevelSwitch())}}this.lastTime=i,this.lastDroppedFrames=r,this.lastDecodedFrames=t}},a.checkFPSInterval=function(){var e=this.video;if(e)if(this.isVideoPlaybackQualityAvailable){var t=e.getVideoPlaybackQuality();this.checkFPS(e,t.totalVideoFrames,t.droppedVideoFrames)}else this.checkFPS(e,e.webkitDecodedFrameCount,e.webkitDroppedFrameCount)},i}(h),$e=function(){function e(e){e&&e.xhrSetup&&(this.xhrSetup=e.xhrSetup)}var t=e.prototype;return t.destroy=function(){this.abort(),this.loader=null},t.abort=function(){var e=this.loader;e&&4!==e.readyState&&(this.stats.aborted=!0,e.abort()),window.clearTimeout(this.requestTimeout),this.requestTimeout=null,window.clearTimeout(this.retryTimeout),this.retryTimeout=null},t.load=function(e,t,r){this.context=e,this.config=t,this.callbacks=r,this.stats={trequest:window.performance.now(),retry:0},this.retryDelay=t.retryDelay,this.loadInternal()},t.loadInternal=function(){var e,t=this.context;e=this.loader=new window.XMLHttpRequest;var r=this.stats;r.tfirst=0,r.loaded=0;var i=this.xhrSetup;try{if(i)try{i(e,t.url)}catch(r){e.open("GET",t.url,!0),i(e,t.url)}e.readyState||e.open("GET",t.url,!0)}catch(r){return void this.callbacks.onError({code:e.status,text:r.message},t,e)}t.rangeEnd&&e.setRequestHeader("Range","bytes="+t.rangeStart+"-"+(t.rangeEnd-1)),e.onreadystatechange=this.readystatechange.bind(this),e.onprogress=this.loadprogress.bind(this),e.responseType=t.responseType,this.requestTimeout=window.setTimeout(this.loadtimeout.bind(this),this.config.timeout),e.send()},t.readystatechange=function(e){var t=e.currentTarget,r=t.readyState,i=this.stats,a=this.context,n=this.config;if(!i.aborted&&r>=2)if(window.clearTimeout(this.requestTimeout),0===i.tfirst&&(i.tfirst=Math.max(window.performance.now(),i.trequest)),4===r){var s=t.status;if(s>=200&&s<300){var o,l;i.tload=Math.max(i.tfirst,window.performance.now()),l="arraybuffer"===a.responseType?(o=t.response).byteLength:(o=t.responseText).length,i.loaded=i.total=l;var d={url:t.responseURL,data:o};this.callbacks.onSuccess(d,i,a,t)}else i.retry>=n.maxRetry||s>=400&&s<499?(u.b.error(s+" while loading "+a.url),this.callbacks.onError({code:s,text:t.statusText},a,t)):(u.b.warn(s+" while loading "+a.url+", retrying in "+this.retryDelay+"..."),this.destroy(),this.retryTimeout=window.setTimeout(this.loadInternal.bind(this),this.retryDelay),this.retryDelay=Math.min(2*this.retryDelay,n.maxRetryDelay),i.retry++)}else this.requestTimeout=window.setTimeout(this.loadtimeout.bind(this),n.timeout)},t.loadtimeout=function(){u.b.warn("timeout while loading "+this.context.url),this.callbacks.onTimeout(this.stats,this.context,null)},t.loadprogress=function(e){var t=e.currentTarget,r=this.stats;r.loaded=e.loaded,e.lengthComputable&&(r.total=e.total);var i=this.callbacks.onProgress;i&&i(r,this.context,null,t)},e}();function Je(e,t){for(var r=0;r=this.tracks.length)u.b.warn("Invalid audio track id:",e.id);else{if(u.b.log("audioTrack "+e.id+" loaded"),this.tracks[e.id].details=e.details,e.details.live&&!this.hasInterval()){var t=1e3*e.details.targetduration;this.setInterval(t)}!e.details.live&&this.hasInterval()&&this.clearInterval()}},l.onAudioTrackSwitched=function(e){var t=this.tracks[e.id].groupId;t&&this.audioGroupId!==t&&(this.audioGroupId=t)},l.onLevelLoaded=function(e){this._selectAudioGroup(e.level)},l.onError=function(e){e.type===o.b.NETWORK_ERROR&&(e.fatal&&this.clearInterval(),e.details===o.a.AUDIO_TRACK_LOAD_ERROR&&(u.b.warn("Network failure on audio-track id:",e.context.id),this._handleLoadError()))},l._setAudioTrack=function(e){if(this._trackId===e&&this.tracks[this._trackId].details)u.b.debug("Same id as current audio-track passed, and track details available -> no-op");else if(e<0||e>=this.tracks.length)u.b.warn("Invalid id passed to audio-track controller");else{var t=this.tracks[e];u.b.log("Now switching to audio-track index "+e),this.clearInterval(),this._trackId=e;var r=t.url,i=t.type,a=t.id;this.hls.trigger(d.a.AUDIO_TRACK_SWITCHING,{id:a,type:i,url:r}),this._loadTrackDetailsIfNeeded(t)}},l.doTick=function(){this._updateTrack(this._trackId)},l._selectAudioGroup=function(e){var t=this.hls.levels[e];if(t&&t.audioGroupIds){var r=t.audioGroupIds[t.urlId];this.audioGroupId!==r&&(this.audioGroupId=r,this._selectInitialAudioTrack())}},l._selectInitialAudioTrack=function(){var e=this,t=this.tracks;if(t.length){var r=this.tracks[this._trackId],i=null;if(r&&(i=r.name),this._selectDefaultTrack){var a=t.filter((function(e){return e.default}));a.length?t=a:u.b.warn("No default audio tracks defined")}var n=!1,s=function(){t.forEach((function(t){n||e.audioGroupId&&t.groupId!==e.audioGroupId||i&&i!==t.name||(e._setAudioTrack(t.id),n=!0)}))};s(),n||(i=null,s()),n||(u.b.error("No track found for running audio group-ID: "+this.audioGroupId),this.hls.trigger(d.a.ERROR,{type:o.b.MEDIA_ERROR,details:o.a.AUDIO_TRACK_LOAD_ERROR,fatal:!0}))}},l._needsTrackLoading=function(e){var t=e.details,r=e.url;return!(t&&!t.live)&&!!r},l._loadTrackDetailsIfNeeded=function(e){if(this._needsTrackLoading(e)){var t=e.url,r=e.id;u.b.log("loading audio-track playlist for id: "+r),this.hls.trigger(d.a.AUDIO_TRACK_LOADING,{url:t,id:r})}},l._updateTrack=function(e){if(!(e<0||e>=this.tracks.length)){this.clearInterval(),this._trackId=e,u.b.log("trying to update audio-track "+e);var t=this.tracks[e];this._loadTrackDetailsIfNeeded(t)}},l._handleLoadError=function(){this.trackIdBlacklist[this._trackId]=!0;var e=this._trackId,t=this.tracks[e],r=t.name,i=t.language,a=t.groupId;u.b.warn("Loading failed on audio track id: "+e+", group-id: "+a+', name/language: "'+r+'" / "'+i+'"');for(var n=e,s=0;s0&&-1===e?(u.b.log("audio:override startPosition with lastCurrentTime @"+t.toFixed(3)),this.state=me):(this.lastCurrentTime=this.startPosition?this.startPosition:e,this.state=ve),this.nextLoadPosition=this.startPosition=this.lastCurrentTime,this.tick()}else this.startPosition=e,this.state=pe},c.doTick=function(){var e,t,r,i=this.hls,a=i.config;switch(this.state){case we:case ye:case Ae:break;case ve:this.state=Se,this.loadedmetadata=!1;break;case me:var n=this.tracks;if(!n)break;if(!this.media&&(this.startFragRequested||!a.startFragPrefetch))break;if(this.loadedmetadata)e=this.media.currentTime;else if(void 0===(e=this.nextLoadPosition))break;var s=this.mediaBuffer?this.mediaBuffer:this.media,o=this.videoBuffer?this.videoBuffer:this.media,c=eR||h.nextStart))return;u.b.log("alt audio track ahead of main track, seek to start of alt audio track"),this.media.currentTime=R+.05}if(r.initSegment&&!r.initSegment.data)E=r.initSegment;else if(p<=R){if(E=S[0],null!==this.videoTrackCC&&E.cc!==this.videoTrackCC&&(E=function(e,t){return j.search(e,(function(e){return e.cct?-1:0}))}(S,this.videoTrackCC)),r.live&&E.loadIdx&&E.loadIdx===this.fragLoadIdx){var k=h.nextStart?h.nextStart:R;return u.b.log("no alt audio available @currentTime:"+this.media.currentTime+", seeking @"+(k+.05)),void(this.media.currentTime=k+.05)}}else{var w,L=a.maxFragLookUpTolerance,D=v?S[v.sn-S[0].sn+1]:void 0;pA-L&&(L=0),w=D&&!ue(p,L,D)?D:j.search(S,(function(e){return ue(p,L,e)}))):w=S[_-1],w&&(E=w,R=w.start,v&&E.level===v.level&&E.sn===v.sn&&(E.sn=C||I)&&(u.b.log("audioStreamController: retryDate reached, switch back to IDLE state"),this.state=me);break;case Le:var P=this.waitingFragment;if(P){var x=P.frag.cc;if(void 0!==this.initPTS[x])this.waitingFragment=null,this.state=Te,this.onFragLoaded(P);else if(this.videoTrackCC!==this.waitingVideoCC)u.b.log("Waiting fragment cc ("+x+") cancelled because video is at cc "+this.videoTrackCC),this.clearWaitingFragment();else{var M=H.bufferInfo(this.mediaBuffer,this.media.currentTime,a.maxBufferHole);ue(M.end,a.maxFragLookUpTolerance,P.frag)<0&&(u.b.log("Waiting fragment cc ("+x+") @ "+P.frag.start+" cancelled because another fragment at "+M.end+" is needed"),this.clearWaitingFragment())}}else this.state=me}},c.clearWaitingFragment=function(){var e=this.waitingFragment;e&&(this.fragmentTracker.removeFragment(e.frag),this.waitingFragment=null,this.waitingVideoCC=null,this.state=me)},c.onMediaAttached=function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("ended",this.onvended);var r=this.config;this.tracks&&r.autoStartLoad&&this.startLoad(r.startPosition)},c.onMediaDetaching=function(){var e=this.media;e&&e.ended&&(u.b.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=this.videoBuffer=null,this.loadedmetadata=!1,this.fragmentTracker.removeAllFragments(),this.stopLoad()},c.onAudioTracksUpdated=function(e){u.b.log("audio tracks updated"),this.tracks=e.audioTracks},c.onAudioTrackSwitching=function(e){var t=!!e.url;this.trackId=e.id,this.fragCurrent=null,this.clearWaitingFragment(),this.state=ye,t?this.setInterval(100):this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),t&&(this.audioSwitch=!0,this.state=me),this.tick()},c.onAudioTrackLoaded=function(e){var t=e.details,r=e.id,i=this.tracks[r],a=i.details,n=t.totalduration,s=0;if(u.b.log("track "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+n),t.live||a&&a.live?a&&t.fragments.length>0?(re(a,t),s=t.fragments[0].start,t.PTSKnown?u.b.log("live audio playlist sliding:"+s.toFixed(3)):u.b.log("live audio playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,u.b.log("live audio playlist - first load, unknown sliding")):t.PTSKnown=!1,i.details=t,!this.startFragRequested){if(-1===this.startPosition){var o=t.startTimeOffset;Object(l.a)(o)?(u.b.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o):t.live?(this.startPosition=this.computeLivePosition(s,t),u.b.log("compute startPosition for audio-track to "+this.startPosition)):this.startPosition=0}this.nextLoadPosition=this.startPosition}this.state===Se&&(this.state=me),this.tick()},c.onKeyLoaded=function(){this.state===be&&(this.state=me,this.tick())},c.onFragLoaded=function(e){var t=this.fragCurrent,r=e.frag;if(this.state===Te&&t&&"audio"===r.type&&r.level===t.level&&r.sn===t.sn){var i=this.tracks[this.trackId],a=i.details,n=a.totalduration,s=t.level,o=t.sn,l=t.cc,c=this.config.defaultAudioCodec||i.audioCodec||"mp4a.40.2",h=this.stats=e.stats;if("initSegment"===o)this.state=me,h.tparsed=h.tbuffered=tt.now(),a.initSegment.data=e.payload,this.hls.trigger(d.a.FRAG_BUFFERED,{stats:h,frag:t,id:"audio"}),this.tick();else{this.state=_e,this.appended=!1,this.demuxer||(this.demuxer=new J(this.hls,"audio"));var f=this.initPTS[l],g=a.initSegment?a.initSegment.data:[];if(void 0!==f){this.pendingBuffering=!0,u.b.log("Demuxing "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s);this.demuxer.push(e.payload,g,c,null,t,n,!1,f)}else u.b.log("Unknown video PTS for cc "+l+", waiting for video PTS before demuxing audio frag "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s),this.waitingFragment=e,this.waitingVideoCC=this.videoTrackCC,this.state=Le}}this.fragLoadError=0},c.onFragParsingInitSegment=function(e){var t=this.fragCurrent,r=e.frag;if(t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===_e){var i,a=e.tracks;if(a.video&&delete a.video,i=a.audio){i.levelCodec=i.codec,i.id=e.id,this.hls.trigger(d.a.BUFFER_CODECS,a),u.b.log("audio track:audio,container:"+i.container+",codecs[level/parsed]=["+i.levelCodec+"/"+i.codec+"]");var n=i.initSegment;if(n){var s={type:"audio",data:n,parent:"audio",content:"initSegment"};this.audioSwitch?this.pendingData=[s]:(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(d.a.BUFFER_APPENDING,s))}this.tick()}}},c.onFragParsingData=function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"audio"===e.id&&"audio"===e.type&&i.sn===r.sn&&i.level===r.level&&this.state===_e){var a=this.trackId,n=this.tracks[a],s=this.hls;Object(l.a)(e.endPTS)||(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),r.addElementaryStream(p.AUDIO),u.b.log("parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb),te(n.details,r,e.startPTS,e.endPTS);var c=this.media,h=!1;if(this.audioSwitch)if(c&&c.readyState){var f=c.currentTime;u.b.log("switching audio track : currentTime:"+f),f>=e.startPTS&&(u.b.log("switching audio track : flushing all audio"),this.state=Ae,s.trigger(d.a.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),h=!0,this.audioSwitch=!1,s.trigger(d.a.AUDIO_TRACK_SWITCHED,{id:a}))}else this.audioSwitch=!1,s.trigger(d.a.AUDIO_TRACK_SWITCHED,{id:a});var g=this.pendingData;if(!g)return u.b.warn("Apparently attempt to enqueue media payload without codec initialization data upfront"),void s.trigger(d.a.ERROR,{type:o.b.MEDIA_ERROR,details:null,fatal:!0});this.audioSwitch||([e.data1,e.data2].forEach((function(t){t&&t.length&&g.push({type:e.type,data:t,parent:"audio",content:"data"})})),!h&&g.length&&(g.forEach((function(e){t.state===_e&&(t.pendingBuffering=!0,t.hls.trigger(d.a.BUFFER_APPENDING,e))})),this.pendingData=[],this.appended=!0)),this.tick()}},c.onFragParsed=function(e){var t=this.fragCurrent,r=e.frag;t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===_e&&(this.stats.tparsed=tt.now(),this.state=Re,this._checkAppendedParsed())},c.onBufferReset=function(){this.mediaBuffer=this.videoBuffer=null,this.loadedmetadata=!1},c.onBufferCreated=function(e){var t=e.tracks.audio;t&&(this.mediaBuffer=t.buffer,this.loadedmetadata=!0),e.tracks.video&&(this.videoBuffer=e.tracks.video.buffer)},c.onBufferAppended=function(e){if("audio"===e.parent){var t=this.state;t!==_e&&t!==Re||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}},c._checkAppendedParsed=function(){if(!(this.state!==Re||this.appended&&this.pendingBuffering)){var e=this.fragCurrent,t=this.stats,r=this.hls;if(e){this.fragPrevious=e,t.tbuffered=tt.now(),r.trigger(d.a.FRAG_BUFFERED,{stats:t,frag:e,id:"audio"});var i=this.mediaBuffer?this.mediaBuffer:this.media;i&&u.b.log("audio buffered : "+ne.toString(i.buffered)),this.audioSwitch&&this.appended&&(this.audioSwitch=!1,r.trigger(d.a.AUDIO_TRACK_SWITCHED,{id:this.trackId})),this.state=me}this.tick()}},c.onError=function(e){var t=e.frag;if(!t||"audio"===t.type)switch(e.details){case o.a.FRAG_LOAD_ERROR:case o.a.FRAG_LOAD_TIMEOUT:var r=e.frag;if(r&&"audio"!==r.type)break;if(!e.fatal){var i=this.fragLoadError;i?i++:i=1;var a=this.config;if(i<=a.fragLoadingMaxRetry){this.fragLoadError=i;var n=Math.min(Math.pow(2,i-1)*a.fragLoadingRetryDelay,a.fragLoadingMaxRetryTimeout);u.b.warn("AudioStreamController: frag loading failed, retry in "+n+" ms"),this.retryDate=tt.now()+n,this.state=Ee}else u.b.error("AudioStreamController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=we}break;case o.a.AUDIO_TRACK_LOAD_ERROR:case o.a.AUDIO_TRACK_LOAD_TIMEOUT:case o.a.KEY_LOAD_ERROR:case o.a.KEY_LOAD_TIMEOUT:this.state!==we&&(this.state=e.fatal?we:me,u.b.warn("AudioStreamController: "+e.details+" while loading frag, now switching to "+this.state+" state ..."));break;case o.a.BUFFER_FULL_ERROR:if("audio"===e.parent&&(this.state===_e||this.state===Re)){var s=this.mediaBuffer,l=this.media.currentTime;if(s&&H.isBuffered(s,l)&&H.isBuffered(s,l+.5)){var c=this.config;c.maxMaxBufferLength>=c.maxBufferLength&&(c.maxMaxBufferLength/=2,u.b.warn("AudioStreamController: reduce max buffer length to "+c.maxMaxBufferLength+"s")),this.state=me}else u.b.warn("AudioStreamController: buffer full error also media.currentTime is not buffered, flush audio buffer"),this.fragCurrent=null,this.state=Ae,this.hls.trigger(d.a.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"})}}},c.onBufferFlushed=function(){var e=this,t=this.pendingData;t&&t.length?(u.b.log("AudioStreamController: appending pending audio data after buffer flushed"),t.forEach((function(t){e.hls.trigger(d.a.BUFFER_APPENDING,t)})),this.appended=!0,this.pendingData=[],this.state=Re):(this.state=me,this.fragPrevious=null,this.tick())},a=i,(n=[{key:"state",set:function(e){if(this.state!==e){var t=this.state;this._state=e,u.b.log("audio stream:"+t+"->"+e)}},get:function(){return this._state}}])&&et(a.prototype,n),s&&et(a,s),i}(Oe),it=function(){if("undefined"!=typeof window&&window.VTTCue)return window.VTTCue;var e={"":!0,lr:!0,rl:!0},t={start:!0,middle:!0,end:!0,left:!0,right:!0};function r(e){return"string"==typeof e&&(!!t[e.toLowerCase()]&&e.toLowerCase())}function i(e){for(var t=1;t100)throw new Error("Position must be between 0 and 100.");y=e,this.hasBeenReset=!0}})),Object.defineProperty(s,"positionAlign",i({},o,{get:function(){return b},set:function(e){var t=r(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");b=t,this.hasBeenReset=!0}})),Object.defineProperty(s,"size",i({},o,{get:function(){return T},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");T=e,this.hasBeenReset=!0}})),Object.defineProperty(s,"align",i({},o,{get:function(){return E},set:function(e){var t=r(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");E=t,this.hasBeenReset=!0}})),s.displayState=void 0}return a.prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)},a}(),at=function(){return{decode:function(e){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))}}};function nt(){this.window=window,this.state="INITIAL",this.buffer="",this.decoder=new at,this.regionList=[]}function st(){this.values=Object.create(null)}function ot(e,t,r,i){var a=i?e.split(i):[e];for(var n in a)if("string"==typeof a[n]){var s=a[n].split(r);if(2===s.length)t(s[0],s[1])}}st.prototype={set:function(e,t){this.get(e)||""===t||(this.values[e]=t)},get:function(e,t,r){return r?this.has(e)?this.values[e]:t[r]:this.has(e)?this.values[e]:t},has:function(e){return e in this.values},alt:function(e,t,r){for(var i=0;i=0&&t<=100)&&(this.set(e,t),!0)}};var lt=new it(0,0,0),dt="middle"===lt.align?"middle":"center";function ut(e,t,r){var i=e;function a(){var t=function(e){function t(e,t,r,i){return 3600*(0|e)+60*(0|t)+(0|r)+(0|i)/1e3}var r=e.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return r?r[3]?t(r[1],r[2],r[3].replace(":",""),r[4]):r[1]>59?t(r[1],r[2],0,r[4]):t(0,r[1],r[2],r[4]):null}(e);if(null===t)throw new Error("Malformed timestamp: "+i);return e=e.replace(/^[^\sa-zA-Z-]+/,""),t}function n(){e=e.replace(/^\s+/,"")}if(n(),t.startTime=a(),n(),"--\x3e"!==e.substr(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): "+i);e=e.substr(3),n(),t.endTime=a(),n(),function(e,t){var i=new st;ot(e,(function(e,t){switch(e){case"region":for(var a=r.length-1;a>=0;a--)if(r[a].id===t){i.set(e,r[a].region);break}break;case"vertical":i.alt(e,t,["rl","lr"]);break;case"line":var n=t.split(","),s=n[0];i.integer(e,s),i.percent(e,s)&&i.set("snapToLines",!1),i.alt(e,s,["auto"]),2===n.length&&i.alt("lineAlign",n[1],["start",dt,"end"]);break;case"position":n=t.split(","),i.percent(e,n[0]),2===n.length&&i.alt("positionAlign",n[1],["start",dt,"end","line-left","line-right","auto"]);break;case"size":i.percent(e,t);break;case"align":i.alt(e,t,["start",dt,"end","left","right"])}}),/:/,/\s/),t.region=i.get("region",null),t.vertical=i.get("vertical","");var a=i.get("line","auto");"auto"===a&&-1===lt.line&&(a=-1),t.line=a,t.lineAlign=i.get("lineAlign","start"),t.snapToLines=i.get("snapToLines",!0),t.size=i.get("size",100),t.align=i.get("align",dt);var n=i.get("position","auto");"auto"===n&&50===lt.position&&(n="start"===t.align||"left"===t.align?0:"end"===t.align||"right"===t.align?100:50),t.position=n}(e,t)}function ct(e){return e.replace(/
/gi,"\n")}nt.prototype={parse:function(e){var t=this;function r(){var e=t.buffer,r=0;for(e=ct(e);r=16?o--:o++,navigator.userAgent.match(/Firefox\//)?n.line=c+1:n.line=c>7?c-2:c+1,n.align="left",n.position=Math.max(0,Math.min(100,o/32*100)),d.push(n),e&&e.addCue(n)}return d}var gt,pt={42:225,92:233,94:237,95:243,96:250,123:231,124:247,125:209,126:241,127:9608,128:174,129:176,130:189,131:191,132:8482,133:162,134:163,135:9834,136:224,137:32,138:232,139:226,140:234,141:238,142:244,143:251,144:193,145:201,146:211,147:218,148:220,149:252,150:8216,151:161,152:42,153:8217,154:9473,155:169,156:8480,157:8226,158:8220,159:8221,160:192,161:194,162:199,163:200,164:202,165:203,166:235,167:206,168:207,169:239,170:212,171:217,172:249,173:219,174:171,175:187,176:195,177:227,178:205,179:204,180:236,181:210,182:242,183:213,184:245,185:123,186:125,187:92,188:94,189:95,190:124,191:8764,192:196,193:228,194:214,195:246,196:223,197:165,198:164,199:9475,200:197,201:229,202:216,203:248,204:9487,205:9491,206:9495,207:9499},vt=function(e){var t=e;return pt.hasOwnProperty(e)&&(t=pt[e]),String.fromCharCode(t)},mt={17:1,18:3,21:5,22:7,23:9,16:11,19:12,20:14},yt={17:2,18:4,21:6,22:8,23:10,19:13,20:15},bt={25:1,26:3,29:5,30:7,31:9,24:11,27:12,28:14},Tt={25:2,26:4,29:6,30:8,31:10,27:13,28:15},Et=["white","green","blue","cyan","red","yellow","magenta","black","transparent"];!function(e){e[e.ERROR=0]="ERROR",e[e.TEXT=1]="TEXT",e[e.WARNING=2]="WARNING",e[e.INFO=2]="INFO",e[e.DEBUG=3]="DEBUG",e[e.DATA=3]="DATA"}(gt||(gt={}));var St=function(){function e(){this.time=null,this.verboseLevel=gt.ERROR}return e.prototype.log=function(e,t){this.verboseLevel>=e&&u.b.log(this.time+" ["+e+"] "+t)},e}(),_t=function(e){for(var t=[],r=0;r100&&(this.logger.log(gt.DEBUG,"Too large cursor position "+this.pos),this.pos=100)},t.moveCursor=function(e){var t=this.pos+e;if(e>1)for(var r=this.pos+1;r=144&&this.backSpace();var t=vt(e);this.pos>=100?this.logger.log(gt.ERROR,"Cannot insert "+e.toString(16)+" ("+t+") at position "+this.pos+". Skipping it!"):(this.chars[this.pos].setChar(t,this.currPenState),this.moveCursor(1))},t.clearFromPos=function(e){var t;for(t=e;t<100;t++)this.chars[t].reset()},t.clear=function(){this.clearFromPos(0),this.pos=0,this.currPenState.reset()},t.clearToEndOfRow=function(){this.clearFromPos(this.pos)},t.getTextString=function(){for(var e=[],t=!0,r=0;r<100;r++){var i=this.chars[r].uchar;" "!==i&&(t=!1),e.push(i)}return t?"":e.join("")},t.setPenStyles=function(e){this.currPenState.setStyles(e),this.chars[this.pos].setPenState(this.currPenState)},e}(),wt=function(){function e(e){this.rows=void 0,this.currRow=void 0,this.nrRollUpRows=void 0,this.lastOutputScreen=void 0,this.logger=void 0,this.rows=[];for(var t=0;t<15;t++)this.rows.push(new kt(e));this.logger=e,this.currRow=14,this.nrRollUpRows=null,this.lastOutputScreen=null,this.reset()}var t=e.prototype;return t.reset=function(){for(var e=0;e<15;e++)this.rows[e].clear();this.currRow=14},t.equals=function(e){for(var t=!0,r=0;r<15;r++)if(!this.rows[r].equals(e.rows[r])){t=!1;break}return t},t.copy=function(e){for(var t=0;t<15;t++)this.rows[t].copy(e.rows[t])},t.isEmpty=function(){for(var e=!0,t=0;t<15;t++)if(!this.rows[t].isEmpty()){e=!1;break}return e},t.backSpace=function(){this.rows[this.currRow].backSpace()},t.clearToEndOfRow=function(){this.rows[this.currRow].clearToEndOfRow()},t.insertChar=function(e){this.rows[this.currRow].insertChar(e)},t.setPen=function(e){this.rows[this.currRow].setPenStyles(e)},t.moveCursor=function(e){this.rows[this.currRow].moveCursor(e)},t.setCursor=function(e){this.logger.log(gt.INFO,"setCursor: "+e),this.rows[this.currRow].setCursor(e)},t.setPAC=function(e){this.logger.log(gt.INFO,"pacData = "+JSON.stringify(e));var t=e.row-1;if(this.nrRollUpRows&&t0&&(r=e?"["+t.join(" | ")+"]":t.join("\n")),r},t.getTextAndFormat=function(){return this.rows},e}(),Lt=function(){function e(e,t,r){this.chNr=void 0,this.outputFilter=void 0,this.mode=void 0,this.verbose=void 0,this.displayedMemory=void 0,this.nonDisplayedMemory=void 0,this.lastOutputScreen=void 0,this.currRollUpRow=void 0,this.writeScreen=void 0,this.cueStartTime=void 0,this.logger=void 0,this.chNr=e,this.outputFilter=t,this.mode=null,this.verbose=0,this.displayedMemory=new wt(r),this.nonDisplayedMemory=new wt(r),this.lastOutputScreen=new wt(r),this.currRollUpRow=this.displayedMemory.rows[14],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.logger=r}var t=e.prototype;return t.reset=function(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.outputFilter.reset(),this.currRollUpRow=this.displayedMemory.rows[14],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null},t.getHandler=function(){return this.outputFilter},t.setHandler=function(e){this.outputFilter=e},t.setPAC=function(e){this.writeScreen.setPAC(e)},t.setBkgData=function(e){this.writeScreen.setBkgData(e)},t.setMode=function(e){e!==this.mode&&(this.mode=e,this.logger.log(gt.INFO,"MODE="+e),"MODE_POP-ON"===this.mode?this.writeScreen=this.nonDisplayedMemory:(this.writeScreen=this.displayedMemory,this.writeScreen.reset()),"MODE_ROLL-UP"!==this.mode&&(this.displayedMemory.nrRollUpRows=null,this.nonDisplayedMemory.nrRollUpRows=null),this.mode=e)},t.insertChars=function(e){for(var t=0;t=46,t.italics)t.foreground="white";else{var r=Math.floor(e/2)-16;t.foreground=["white","green","blue","cyan","red","yellow","magenta"][r]}this.logger.log(gt.INFO,"MIDROW: "+JSON.stringify(t)),this.writeScreen.setPen(t)},t.outputDataUpdate=function(e){void 0===e&&(e=!1);var t=this.logger.time;null!==t&&this.outputFilter&&(null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue(this.cueStartTime,t,this.lastOutputScreen),e&&this.outputFilter.dispatchCue&&this.outputFilter.dispatchCue(),this.cueStartTime=this.displayedMemory.isEmpty()?null:t):this.cueStartTime=t,this.lastOutputScreen.copy(this.displayedMemory))},t.cueSplitAtTime=function(e){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.displayedMemory),this.cueStartTime=e))},e}();function Dt(e,t,r){r.a=e,r.b=t}function Ot(e,t,r){return r.a===e&&r.b===t}var Ct=function(){function e(e,t,r){this.channels=void 0,this.currentChannel=0,this.cmdHistory=void 0,this.logger=void 0;var i=new St;this.channels=[null,new Lt(e,t,i),new Lt(e+1,r,i)],this.cmdHistory={a:null,b:null},this.logger=i}var t=e.prototype;return t.getHandler=function(e){return this.channels[e].getHandler()},t.setHandler=function(e,t){this.channels[e].setHandler(t)},t.addData=function(e,t){var r,i,a,n=!1;this.logger.time=e;for(var s=0;s ("+_t([i,a])+")"),(r=this.parseCmd(i,a))||(r=this.parseMidrow(i,a)),r||(r=this.parsePAC(i,a)),r||(r=this.parseBackgroundAttributes(i,a)),!r&&(n=this.parseChars(i,a))){var o=this.currentChannel;if(o&&o>0)this.channels[o].insertChars(n);else this.logger.log(gt.WARNING,"No channel found yet. TEXT-MODE?")}r||n||this.logger.log(gt.WARNING,"Couldn't parse cleaned data "+_t([i,a])+" orig: "+_t([t[s],t[s+1]]))}},t.parseCmd=function(e,t){var r=this.cmdHistory;if(!((20===e||28===e||21===e||29===e)&&t>=32&&t<=47)&&!((23===e||31===e)&&t>=33&&t<=35))return!1;if(Ot(e,t,r))return Dt(null,null,r),this.logger.log(gt.DEBUG,"Repeated command ("+_t([e,t])+") is dropped"),!0;var i=20===e||21===e||23===e?1:2,a=this.channels[i];return 20===e||21===e||28===e||29===e?32===t?a.ccRCL():33===t?a.ccBS():34===t?a.ccAOF():35===t?a.ccAON():36===t?a.ccDER():37===t?a.ccRU(2):38===t?a.ccRU(3):39===t?a.ccRU(4):40===t?a.ccFON():41===t?a.ccRDC():42===t?a.ccTR():43===t?a.ccRTD():44===t?a.ccEDM():45===t?a.ccCR():46===t?a.ccENM():47===t&&a.ccEOC():a.ccTO(t-32),Dt(e,t,r),this.currentChannel=i,!0},t.parseMidrow=function(e,t){var r=0;if((17===e||25===e)&&t>=32&&t<=47){if((r=17===e?1:2)!==this.currentChannel)return this.logger.log(gt.ERROR,"Mismatch channel in midrow parsing"),!1;var i=this.channels[r];return!!i&&(i.ccMIDROW(t),this.logger.log(gt.DEBUG,"MIDROW ("+_t([e,t])+")"),!0)}return!1},t.parsePAC=function(e,t){var r,i=this.cmdHistory;if(!((e>=17&&e<=23||e>=25&&e<=31)&&t>=64&&t<=127)&&!((16===e||24===e)&&t>=64&&t<=95))return!1;if(Ot(e,t,i))return Dt(null,null,i),!0;var a=e<=23?1:2;r=t>=64&&t<=95?1===a?mt[e]:bt[e]:1===a?yt[e]:Tt[e];var n=this.channels[a];return!!n&&(n.setPAC(this.interpretPAC(r,t)),Dt(e,t,i),this.currentChannel=a,!0)},t.interpretPAC=function(e,t){var r=t,i={color:null,italics:!1,indent:null,underline:!1,row:e};return r=t>95?t-96:t-64,i.underline=1==(1&r),r<=13?i.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(r/2)]:r<=15?(i.italics=!0,i.color="white"):i.indent=4*Math.floor((r-16)/2),i},t.parseChars=function(e,t){var r,i=null,a=null;if(e>=25?(r=2,a=e-8):(r=1,a=e),a>=17&&a<=19){var n=t;n=17===a?t+80:18===a?t+112:t+144,this.logger.log(gt.INFO,"Special char '"+vt(n)+"' in channel "+r),i=[n]}else e>=32&&e<=127&&(i=0===t?[e]:[e,t]);if(i){var s=_t(i);this.logger.log(gt.DEBUG,"Char codes = "+s.join(",")),Dt(e,t,this.cmdHistory)}return i},t.parseBackgroundAttributes=function(e,t){var r;if(!((16===e||24===e)&&t>=32&&t<=47)&&!((23===e||31===e)&&t>=45&&t<=47))return!1;var i={};16===e||24===e?(r=Math.floor((t-32)/2),i.background=Et[r],t%2==1&&(i.background=i.background+"_semi")):45===t?i.background="transparent":(i.foreground="black",47===t&&(i.underline=!0));var a=e<=23?1:2;return this.channels[a].setBkgData(i),Dt(e,t,this.cmdHistory),!0},t.reset=function(){for(var e=0;ee)&&(this.startTime=e),this.endTime=t,this.screen=r,this.timelineController.createCaptionsTrack(this.trackName)},t.reset=function(){this.cueRanges=[]},e}(),Pt=function(e,t,r){return e.substr(r||0,t.length)===t},xt=function(e){for(var t=5381,r=e.length;r;)t=33*t^e.charCodeAt(--r);return(t>>>0).toString()},Mt={parse:function(e,t,r,i,a,n){var s,o=Object(Fe.b)(new Uint8Array(e)).trim().replace(/\r\n|\n\r|\n|\r/g,"\n").split("\n"),d="00:00.000",u=0,c=0,h=0,f=[],g=!0,p=!1,v=new ht;v.oncue=function(e){var t=r[i],a=r.ccOffset;t&&t.new&&(void 0!==c?a=r.ccOffset=t.start:function(e,t,r){var i=e[t],a=e[i.prevCC];if(!a||!a.new&&i.new)return e.ccOffset=e.presentationOffset=i.start,void(i.new=!1);for(;a&&a.new;)e.ccOffset+=i.start-a.start,i.new=!1,a=e[(i=a).prevCC];e.presentationOffset=r}(r,i,h)),h&&(a=h-r.presentationOffset),p&&(e.startTime+=a-c,e.endTime+=a-c),e.id=xt(e.startTime.toString())+xt(e.endTime.toString())+xt(e.text),e.text=decodeURIComponent(encodeURIComponent(e.text)),e.endTime>0&&f.push(e)},v.onparsingerror=function(e){s=e},v.onflush=function(){s&&n?n(s):a(f)},o.forEach((function(e){if(g){if(Pt(e,"X-TIMESTAMP-MAP=")){g=!1,p=!0,e.substr(16).split(",").forEach((function(e){Pt(e,"LOCAL:")?d=e.substr(6):Pt(e,"MPEGTS:")&&(u=parseInt(e.substr(7)))}));try{t+(9e4*r[i].start||0)<0&&(t+=8589934592),u-=t,c=function(e){var t=parseInt(e.substr(-3)),r=parseInt(e.substr(-6,2)),i=parseInt(e.substr(-9,2)),a=e.length>9?parseInt(e.substr(0,e.indexOf(":"))):0;if(!(Object(l.a)(t)&&Object(l.a)(r)&&Object(l.a)(i)&&Object(l.a)(a)))throw Error("Malformed X-TIMESTAMP-MAP: Local:"+e);return t+=1e3*r,t+=6e4*i,t+=36e5*a}(d)/1e3,h=u/9e4}catch(e){p=!1,s=e}return}""===e&&(g=!1)}v.parse(e+"\n")})),v.flush()}};function Ft(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Ut(e,t){return e&&e.label===t.name&&!(e.textTrack1||e.textTrack2)}var Nt=function(e){var t,r;function i(t){var r;if((r=e.call(this,t,d.a.MEDIA_ATTACHING,d.a.MEDIA_DETACHING,d.a.FRAG_PARSING_USERDATA,d.a.FRAG_DECRYPTED,d.a.MANIFEST_LOADING,d.a.MANIFEST_LOADED,d.a.FRAG_LOADED,d.a.INIT_PTS_FOUND)||this).media=null,r.config=void 0,r.enabled=!0,r.Cues=void 0,r.textTracks=[],r.tracks=[],r.initPTS=[],r.unparsedVttFrags=[],r.captionsTracks={},r.nonNativeCaptionsTracks={},r.captionsProperties=void 0,r.cea608Parser1=void 0,r.cea608Parser2=void 0,r.lastSn=-1,r.prevCC=-1,r.vttCCs={ccOffset:0,presentationOffset:0,0:{start:0,prevCC:-1,new:!1}},r.hls=t,r.config=t.config,r.Cues=t.config.cueHandler,r.captionsProperties={textTrack1:{label:r.config.captionsTextTrack1Label,languageCode:r.config.captionsTextTrack1LanguageCode},textTrack2:{label:r.config.captionsTextTrack2Label,languageCode:r.config.captionsTextTrack2LanguageCode},textTrack3:{label:r.config.captionsTextTrack3Label,languageCode:r.config.captionsTextTrack3LanguageCode},textTrack4:{label:r.config.captionsTextTrack4Label,languageCode:r.config.captionsTextTrack4LanguageCode}},r.config.enableCEA708Captions){var i=new It(Ft(r),"textTrack1"),a=new It(Ft(r),"textTrack2"),n=new It(Ft(r),"textTrack3"),s=new It(Ft(r),"textTrack4");r.cea608Parser1=new Ct(1,i,a),r.cea608Parser2=new Ct(3,n,s)}return r}r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var a=i.prototype;return a.addCues=function(e,t,r,i,a){for(var n,s,o,l,u=!1,c=a.length;c--;){var h=a[c],f=(n=h[0],s=h[1],o=t,l=r,Math.min(s,l)-Math.max(n,o));if(f>=0&&(h[0]=Math.min(h[0],t),h[1]=Math.max(h[1],r),u=!0,f/(r-t)>.5))return}if(u||a.push([t,r]),this.config.renderTextTracksNatively)this.Cues.newCue(this.captionsTracks[e],t,r,i);else{var g=this.Cues.newCue(null,t,r,i);this.hls.trigger(d.a.CUES_PARSED,{type:"captions",cues:g,track:e})}},a.onInitPtsFound=function(e){var t=this,r=e.frag,i=e.id,a=e.initPTS,n=this.unparsedVttFrags;"main"===i&&(this.initPTS[r.cc]=a),n.length&&(this.unparsedVttFrags=[],n.forEach((function(e){t.onFragLoaded(e)})))},a.getExistingTrack=function(e){var t=this.media;if(t)for(var r=0;r=n.length||r!==a||!s||this.stopped)this._clearReloadTimer();else if(u.b.log("subtitle track "+r+" loaded"),i.live){var o=ae(s.details,i,e.stats.trequest);u.b.log("Reloading live subtitle playlist in "+o+"ms"),this.timer=setTimeout((function(){t._loadCurrentTrack()}),o)}else this._clearReloadTimer()},o.startLoad=function(){this.stopped=!1,this._loadCurrentTrack()},o.stopLoad=function(){this.stopped=!0,this._clearReloadTimer()},o._clearReloadTimer=function(){this.timer&&(clearTimeout(this.timer),this.timer=null)},o._loadCurrentTrack=function(){var e=this.trackId,t=this.tracks,r=this.hls,i=t[e];e<0||!i||i.details&&!i.details.live||(u.b.log("Loading subtitle track "+e),r.trigger(d.a.SUBTITLE_TRACK_LOADING,{url:i.url,id:e}))},o._toggleTrackModes=function(e){var t=this.media,r=this.subtitleDisplay,i=this.trackId;if(t){var a=Gt(t.textTracks);if(-1===e)[].slice.call(a).forEach((function(e){e.mode="disabled"}));else{var n=a[i];n&&(n.mode="disabled")}var s=a[e];s&&(s.mode=r?"showing":"hidden")}},o._setSubtitleTrackInternal=function(e){var t=this.hls,r=this.tracks;!Object(l.a)(e)||e<-1||e>=r.length||(this.trackId=e,u.b.log("Switching to subtitle track "+e),t.trigger(d.a.SUBTITLE_TRACK_SWITCH,{id:e}),this._loadCurrentTrack())},o._onTextTracksChanged=function(){if(this.media&&this.hls.config.renderTextTracksNatively){for(var e=-1,t=Gt(this.media.textTracks),r=0;r=i[s].start&&n<=i[s].end){a=i[s];break}var o=t.start+t.duration;a?a.end=o:(a={start:n,end:o},i.push(a))}}},a.onMediaAttached=function(e){var t=e.media;this.media=t,t.addEventListener("seeking",this._onMediaSeeking),this.state=me},a.onMediaDetaching=function(){var e=this;this.media&&(this.media.removeEventListener("seeking",this._onMediaSeeking),this.fragmentTracker.removeAllFragments(),this.currentTrackId=-1,this.tracks.forEach((function(t){e.tracksBuffered[t.id]=[]})),this.media=null,this.state=pe)},a.onError=function(e){var t=e.frag;t&&"subtitle"===t.type&&(this.fragCurrent&&this.fragCurrent.loader&&this.fragCurrent.loader.abort(),this.state=me)},a.onSubtitleTracksUpdated=function(e){var t=this;u.b.log("subtitle tracks updated"),this.tracksBuffered=[],this.tracks=e.subtitleTracks,this.tracks.forEach((function(e){t.tracksBuffered[e.id]=[]}))},a.onSubtitleTrackSwitch=function(e){if(this.currentTrackId=e.id,this.tracks&&this.tracks.length&&-1!==this.currentTrackId){var t=this.tracks[this.currentTrackId];t&&t.details&&this.setInterval(500)}else this.clearInterval()},a.onSubtitleTrackLoaded=function(e){var t=e.id,r=e.details,i=this.currentTrackId,a=this.tracks,n=a[i];t>=a.length||t!==i||!n||(r.live&&function(e,t,r){void 0===r&&(r=0);var i=-1;ie(e,t,(function(e,t,r){t.start=e.start,i=r}));var a=t.fragments;if(i<0)a.forEach((function(e){e.start+=r}));else for(var n=i+1;n0&&r&&r.key&&"AES-128"===r.method){var n=Vt.now();this.decrypter.decrypt(e.payload,r.key.buffer,r.iv.buffer,(function(e){var t=Vt.now();a.trigger(d.a.FRAG_DECRYPTED,{frag:i,payload:e,stats:{tstart:n,tdecrypt:t}})}))}},a.onLevelUpdated=function(e){var t=e.details.fragments;this.lastAVStart=t.length?t[0].start:0},a.doTick=function(){if(this.media)switch(this.state){case me:var e=this.config,t=this.currentTrackId,r=this.fragmentTracker,i=this.media,a=this.tracks;if(!a||!a[t]||!a[t].details)break;var n,s=e.maxBufferHole,o=e.maxFragLookUpTolerance,l=Math.min(e.maxBufferLength,e.maxMaxBufferLength),c=H.bufferedInfo(this._getBuffered(),i.currentTime,s),h=c.end,f=c.len,g=a[t].details,p=g.fragments,v=p.length,m=p[v-1].start+p[v-1].duration;if(f>l)return;var y=this.fragPrevious;hi)&&(this.fragCurrent.loader&&this.fragCurrent.loader.abort(),this.fragmentTracker.removeFragment(this.fragCurrent),this.fragCurrent=null,this.fragPrevious=null,this.state=me,this.tick())}},i}(Oe);!function(e){e.WIDEVINE="com.widevine.alpha",e.PLAYREADY="com.microsoft.playready"}(Ht||(Ht={}));var Wt="undefined"!=typeof window&&window.navigator&&window.navigator.requestMediaKeySystemAccess?window.navigator.requestMediaKeySystemAccess.bind(window.navigator):null;function qt(e,t){for(var r=0;r3)return void this.hls.trigger(d.a.ERROR,{type:o.b.KEY_SYSTEM_ERROR,details:o.a.KEY_SYSTEM_LICENSE_REQUEST_FAILED,fatal:!0});var a=3-this._requestLicenseFailureCount+1;u.b.warn("Retrying license request, "+a+" attempts left"),this._requestLicense(r,i)}}},l._generateLicenseRequestChallenge=function(e,t){switch(e.mediaKeySystemDomain){case Ht.WIDEVINE:return t}throw new Error("unsupported key-system: "+e.mediaKeySystemDomain)},l._requestLicense=function(e,t){u.b.log("Requesting content license for key-system");var r=this._mediaKeysList[0];if(!r)return u.b.error("Fatal error: Media is encrypted but no key-system access has been obtained yet"),void this.hls.trigger(d.a.ERROR,{type:o.b.KEY_SYSTEM_ERROR,details:o.a.KEY_SYSTEM_NO_ACCESS,fatal:!0});try{var i=this.getLicenseServerUrl(r.mediaKeySystemDomain),a=this._createLicenseXhr(i,e,t);u.b.log("Sending license request to URL: "+i);var n=this._generateLicenseRequestChallenge(r,e);a.send(n)}catch(e){u.b.error("Failure requesting DRM license: "+e),this.hls.trigger(d.a.ERROR,{type:o.b.KEY_SYSTEM_ERROR,details:o.a.KEY_SYSTEM_LICENSE_REQUEST_FAILED,fatal:!0})}},l.onMediaAttached=function(e){if(this._emeEnabled){var t=e.media;this._media=t,t.addEventListener("encrypted",this._onMediaEncrypted)}},l.onMediaDetached=function(){var e=this._media,t=this._mediaKeysList;e&&(e.removeEventListener("encrypted",this._onMediaEncrypted),this._media=null,this._mediaKeysList=[],Promise.all(t.map((function(e){if(e.mediaKeysSession)return e.mediaKeysSession.close().catch((function(){}))}))).then((function(){return e.setMediaKeys(null)})).catch((function(){})))},l.onManifestParsed=function(e){if(this._emeEnabled){var t=e.levels.map((function(e){return e.audioCodec})),r=e.levels.map((function(e){return e.videoCodec}));this._attemptKeySystemAccess(Ht.WIDEVINE,t,r)}},a=i,(n=[{key:"requestMediaKeySystemAccess",get:function(){if(!this._requestMediaKeySystemAccess)throw new Error("No requestMediaKeySystemAccess function configured");return this._requestMediaKeySystemAccess}}])&&qt(a.prototype,n),s&&qt(a,s),i}(h);function zt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function Qt(e){for(var t=1;tt)return i}return 0}},{key:"maxAutoLevel",get:function(){var e=this.levels,t=this.autoLevelCapping;return-1===t&&e&&e.length?e.length-1:t}},{key:"nextAutoLevel",get:function(){return Math.min(Math.max(this.abrController.nextAutoLevel,this.minAutoLevel),this.maxAutoLevel)},set:function(e){this.abrController.nextAutoLevel=Math.max(this.minAutoLevel,e)}},{key:"audioTracks",get:function(){var e=this.audioTrackController;return e?e.audioTracks:[]}},{key:"audioTrack",get:function(){var e=this.audioTrackController;return e?e.audioTrack:-1},set:function(e){var t=this.audioTrackController;t&&(t.audioTrack=e)}},{key:"liveSyncPosition",get:function(){return this.streamController.liveSyncPosition}},{key:"subtitleTracks",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTracks:[]}},{key:"subtitleTrack",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTrack:-1},set:function(e){var t=this.subtitleTrackController;t&&(t.subtitleTrack=e)}},{key:"subtitleDisplay",get:function(){var e=this.subtitleTrackController;return!!e&&e.subtitleDisplay},set:function(e){var t=this.subtitleTrackController;t&&(t.subtitleDisplay=e)}}]),i}(z);nr.defaultConfig=void 0}]).default}));
+//# sourceMappingURL=hls.min.js.map
\ No newline at end of file
diff --git a/trunk/research/players/js/hls.min.js.map b/trunk/research/players/js/hls.min.js.map
new file mode 100644
index 000000000..74b36022e
--- /dev/null
+++ b/trunk/research/players/js/hls.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack://Hls/webpack/universalModuleDefinition","webpack://Hls/webpack/bootstrap","webpack://Hls/./src/utils/logger.js","webpack://Hls/./src/events.js","webpack://Hls/./src/errors.ts","webpack://Hls/./src/polyfills/number.js","webpack://Hls/./src/demux/id3.js","webpack://Hls/./src/utils/get-self-scope.js","webpack://Hls/./node_modules/url-toolkit/src/url-toolkit.js","webpack://Hls/./src/crypt/aes-crypto.js","webpack://Hls/./src/crypt/fast-aes-key.js","webpack://Hls/./src/crypt/aes-decryptor.js","webpack://Hls/./src/crypt/decrypter.js","webpack://Hls/./node_modules/eventemitter3/index.js","webpack://Hls/./src/demux/adts.js","webpack://Hls/./src/demux/aacdemuxer.js","webpack://Hls/./src/demux/mpegaudio.js","webpack://Hls/./src/demux/exp-golomb.js","webpack://Hls/./src/demux/sample-aes.js","webpack://Hls/./src/demux/tsdemuxer.js","webpack://Hls/./src/demux/mp3demuxer.js","webpack://Hls/./src/remux/aac-helper.js","webpack://Hls/./src/remux/mp4-generator.js","webpack://Hls/./src/utils/timescale-conversion.ts","webpack://Hls/./src/remux/mp4-remuxer.js","webpack://Hls/./src/demux/demuxer-inline.js","webpack://Hls/./src/remux/passthrough-remuxer.js","webpack://Hls/./src/demux/mp4demuxer.js","webpack://Hls/./node_modules/webworkify-webpack/index.js","webpack://Hls/./src/demux/demuxer-worker.js","webpack://Hls/./src/types/loader.ts","webpack://Hls/./src/event-handler.ts","webpack://Hls/./src/loader/fragment.ts","webpack://Hls/./src/loader/level-key.ts","webpack://Hls/./src/loader/level.js","webpack://Hls/./src/utils/attr-list.js","webpack://Hls/./src/utils/codecs.ts","webpack://Hls/./src/loader/m3u8-parser.ts","webpack://Hls/./src/loader/playlist-loader.ts","webpack://Hls/./src/loader/fragment-loader.js","webpack://Hls/./src/loader/key-loader.ts","webpack://Hls/./src/controller/fragment-tracker.js","webpack://Hls/./src/utils/binary-search.ts","webpack://Hls/./src/utils/buffer-helper.ts","webpack://Hls/./src/utils/mediasource-helper.ts","webpack://Hls/./src/observer.ts","webpack://Hls/./src/demux/demuxer.js","webpack://Hls/./src/controller/level-helper.js","webpack://Hls/./src/utils/time-ranges.ts","webpack://Hls/./src/utils/discontinuities.js","webpack://Hls/./src/controller/fragment-finders.ts","webpack://Hls/./src/controller/gap-controller.js","webpack://Hls/./src/task-loop.ts","webpack://Hls/./src/controller/base-stream-controller.js","webpack://Hls/./src/controller/stream-controller.js","webpack://Hls/./src/controller/level-controller.js","webpack://Hls/./src/utils/texttrack-utils.ts","webpack://Hls/./src/controller/id3-track-controller.js","webpack://Hls/./src/utils/ewma.ts","webpack://Hls/./src/utils/ewma-bandwidth-estimator.ts","webpack://Hls/./src/controller/abr-controller.js","webpack://Hls/./src/controller/buffer-controller.ts","webpack://Hls/./src/controller/cap-level-controller.js","webpack://Hls/./src/controller/fps-controller.js","webpack://Hls/./src/utils/xhr-loader.js","webpack://Hls/./src/controller/audio-track-controller.js","webpack://Hls/./src/controller/audio-stream-controller.js","webpack://Hls/./src/utils/vttcue.js","webpack://Hls/./src/utils/vttparser.js","webpack://Hls/./src/utils/cues.ts","webpack://Hls/./src/utils/cea-608-parser.ts","webpack://Hls/./src/utils/output-filter.ts","webpack://Hls/./src/utils/webvtt-parser.js","webpack://Hls/./src/controller/timeline-controller.ts","webpack://Hls/./src/controller/subtitle-track-controller.js","webpack://Hls/./src/utils/mediakeys-helper.ts","webpack://Hls/./src/controller/subtitle-stream-controller.js","webpack://Hls/./src/controller/eme-controller.ts","webpack://Hls/./src/config.ts","webpack://Hls/./src/hls.ts","webpack://Hls/./src/is-supported.ts"],"names":["root","factory","exports","module","define","amd","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","noop","fakeLogger","trace","debug","log","warn","info","error","exportedLogger","formatMsg","type","msg","global","getSelfScope","consolePrintFn","func","console","args","apply","enableLogs","debugConfig","functions","forEach","exportLoggerFunctions","e","logger","HlsEvents","MEDIA_ATTACHING","MEDIA_ATTACHED","MEDIA_DETACHING","MEDIA_DETACHED","BUFFER_RESET","BUFFER_CODECS","BUFFER_CREATED","BUFFER_APPENDING","BUFFER_APPENDED","BUFFER_EOS","BUFFER_FLUSHING","BUFFER_FLUSHED","MANIFEST_LOADING","MANIFEST_LOADED","MANIFEST_PARSED","LEVEL_SWITCHING","LEVEL_SWITCHED","LEVEL_LOADING","LEVEL_LOADED","LEVEL_UPDATED","LEVEL_PTS_UPDATED","LEVELS_UPDATED","AUDIO_TRACKS_UPDATED","AUDIO_TRACK_SWITCHING","AUDIO_TRACK_SWITCHED","AUDIO_TRACK_LOADING","AUDIO_TRACK_LOADED","SUBTITLE_TRACKS_UPDATED","SUBTITLE_TRACK_SWITCH","SUBTITLE_TRACK_LOADING","SUBTITLE_TRACK_LOADED","SUBTITLE_FRAG_PROCESSED","CUES_PARSED","NON_NATIVE_TEXT_TRACKS_FOUND","INIT_PTS_FOUND","FRAG_LOADING","FRAG_LOAD_PROGRESS","FRAG_LOAD_EMERGENCY_ABORTED","FRAG_LOADED","FRAG_DECRYPTED","FRAG_PARSING_INIT_SEGMENT","FRAG_PARSING_USERDATA","FRAG_PARSING_METADATA","FRAG_PARSING_DATA","FRAG_PARSED","FRAG_BUFFERED","FRAG_CHANGED","FPS_DROP","FPS_DROP_LEVEL_CAPPING","ERROR","DESTROYING","KEY_LOADING","KEY_LOADED","STREAM_STATE_TRANSITION","LIVE_BACK_BUFFER_REACHED","ErrorTypes","ErrorDetails","isFiniteNumber","Number","isFinite","MAX_SAFE_INTEGER","decoder","ID3","isHeader","data","offset","length","isFooter","getID3Data","front","_readSize","subarray","size","getTimeStamp","frames","getID3Frames","frame","isTimeStampFrame","_readTimeStamp","_getFrameData","String","fromCharCode","id3Data","end","frameData","_decodeFrame","push","_decodePrivFrame","_decodeURLFrame","_decodeTextFrame","timeStampFrame","byteLength","Uint8Array","pts33Bit","timestamp","Math","round","owner","_utf8ArrayToStr","privateData","buffer","index","description","text","url","array","exitOnNull","getTextDecoder","decoded","decode","idx","indexOf","substring","replace","char2","char3","len","out","TextDecoder","utf8ArrayToStr","window","self","URL_REGEX","FIRST_SEGMENT_REGEX","SLASH_DOT_REGEX","SLASH_DOT_DOT_REGEX","URLToolkit","buildAbsoluteURL","baseURL","relativeURL","opts","trim","alwaysNormalize","basePartsForNormalise","parseURL","Error","path","normalizePath","buildURLFromParts","relativeParts","scheme","baseParts","netLoc","pathParts","exec","builtParts","params","query","fragment","baseURLPath","newPath","lastIndexOf","parts","split","reverse","join","AESCrypto","subtle","iv","aesIV","decrypt","FastAESKey","expandKey","importKey","AESDecryptor","rcon","subMix","Uint32Array","invSubMix","sBox","invSBox","initTable","uint8ArrayToUint32Array_","arrayBuffer","view","DataView","newArray","getUint32","subMix0","subMix1","subMix2","subMix3","invSubMix0","invSubMix1","invSubMix2","invSubMix3","x","xi","sx","x2","x4","x8","keyBuffer","sameKey","keySize","ksRow","invKsRow","prev","ksRows","keySchedule","invKeySchedule","sbox","networkToHostOrderSwap","word","inputArrayBuffer","removePKCS7Padding","t0","t1","t2","t3","s0","s1","s2","s3","inputWords0","inputWords1","inputWords2","inputWords3","outputBytes","paddingBytes","nRounds","invSBOX","initVector","initVector0","initVector1","initVector2","initVector3","inputInt32","Int32Array","outputInt32","swapWord","getUint8","slice","destroy","undefined","Decrypter","observer","config","logEnabled","browserCrypto","crypto","webkitSubtle","disableWebCrypto","isSync","enableSoftwareAES","callback","decryptor","fastAesKey","then","aesKey","catch","err","onWebCryptoError","result","message","trigger","Event","MEDIA_ERROR","details","FRAG_DECRYPT_ERROR","fatal","reason","has","prefix","Events","EE","fn","context","once","addListener","emitter","event","TypeError","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","__proto__","eventNames","events","names","getOwnPropertySymbols","concat","listeners","handlers","ee","Array","listenerCount","emit","a1","a2","a3","a4","a5","arguments","removeListener","j","on","removeAllListeners","off","prefixed","isHeaderPattern","getHeaderLength","getFullFrameLength","probe","headerLength","frameLength","newOffset","initTrackConfig","track","audioCodec","samplerate","adtsObjectType","adtsSampleingIndex","adtsExtensionSampleingIndex","adtsChanelConfig","userAgent","navigator","toLowerCase","manifestCodec","adtsSampleingRates","test","channelCount","codec","FRAG_PARSING_ERROR","getAudioConfig","getFrameDuration","appendFrame","pts","frameIndex","header","frameDuration","stamp","parseFrameHeader","aacSample","unit","dts","samples","sample","AACDemuxer","remuxer","resetInitSegment","initSegment","videoCodec","duration","_audioTrack","container","id","sequenceNumber","isAAC","inputTimeScale","resetTimeStamp","ADTS","append","timeOffset","contiguous","accurateTimeOffset","id3Samples","remux","MpegAudio","BitratesMap","SamplingRateMap","SamplesCoefficients","BytesInSlot","parseHeader","samplesPerFrame","sampleRate","headerB","headerC","headerE","headerF","headerG","columnInBitrates","bitRate","columnInSampleRates","sampleCoefficient","bytesInSlot","parseInt","ExpGolomb","bytesAvailable","bitsAvailable","loadWord","position","workingBytes","availableBytes","min","set","skipBits","count","skipBytes","readBits","bits","valu","skipLZ","leadingZeroCount","skipUEG","skipEG","readUEG","clz","readEG","readBoolean","readUByte","readUShort","readUInt","skipScalingList","lastScale","nextScale","readSPS","profileIdc","numRefFramesInPicOrderCntCycle","picWidthInMbsMinus1","picHeightInMapUnitsMinus1","frameMbsOnlyFlag","scalingListCount","frameCropLeftOffset","frameCropRightOffset","frameCropTopOffset","frameCropBottomOffset","chromaFormatIdc","picOrderCntType","pixelRatio","width","ceil","height","readSliceType","SampleAesDecrypter","decryptdata","discardEPB","decrypter","decryptBuffer","encryptedData","decryptAacSample","sampleIndex","sync","curUnit","encryptedBuffer","byteOffset","localthis","decryptedData","decryptAacSamples","getAvcEncryptedData","decodedData","encryptedDataLen","floor","Int8Array","outputPos","inputPos","getAvcDecryptedUnit","decryptAvcSample","unitIndex","decryptAvcSamples","curUnits","units","RemuxerTrackIdConfig","video","audio","id3","TSDemuxer","typeSupported","sampleAes","pmtUnknownTypes","setDecryptData","method","syncOffset","_syncOffset","scanwindow","createTrack","pid","dropped","pmtParsed","_pmtId","_avcTrack","_id3Track","_txtTrack","aacOverFlow","aacLastPTS","avcSample","_duration","start","stt","pes","unknownPIDs","avcTrack","audioTrack","id3Track","avcId","audioId","id3Id","pmtId","avcData","pesData","audioData","parsePAT","_parsePAT","parsePMT","_parsePMT","parsePES","_parsePES","parseAVCPES","_parseAVCPES","parseAACPES","_parseAACPES","parseMPEGPES","_parseMPEGPES","parseID3PES","_parseID3PES","parsedPIDs","mpeg","mp3","avc","decryptAndRemux","videoTrack","textTrack","decryptAndRemuxAvc","_initPTS","_initDTS","_trackUnknownPmt","logLevel","mpegSupported","isSampleAes","tableEnd","stream","frag","pesFlags","pesLen","pesHdrLen","pesPts","pesDts","payloadStartOffset","newData","splice","dataLen","pushAccesUnit","nbSamples","isNaN","lastSample","forceKeyFrameOnDiscontinuity","sps","last","expGolombDecoder","_parseAVCNALu","spsfound","createAVCSample","audFound","sliceType","payloadType","payloadSize","endOfCaptions","b","firstByte","totalCCs","byteArray","_insertSampleInOrder","bytes","uuidStrArray","toString","userDataPayloadBytes","uuid","userDataBytes","userData","codecarray","codecstring","h","pps","arr","pos","_getLastNalUnit","lastUnit","overflow","lastUnitType","state","naluState","lastState","lastUnitStart","tmp","newLength","EPBPositions","sourceIndex","shift","newPTS","abs","MP3Demuxer","AAC","getSilentFrame","UINT32_MAX","pow","MP4","init","types","avc1","avcC","btrt","dinf","dref","esds","ftyp","hdlr","mdat","mdhd","mdia","mfhd","minf","moof","moov","mp4a","mvex","mvhd","pasp","sdtp","stbl","stco","stsc","stsd","stsz","stts","tfdt","tfhd","traf","trak","trun","trex","tkhd","vmhd","smhd","charCodeAt","videoHdlr","audioHdlr","HDLR_TYPES","STTS","STSC","STCO","STSZ","VMHD","SMHD","STSD","majorBrand","avc1Brand","minorVersion","FTYP","box","DINF","payload","timescale","upperWordDuration","lowerWordDuration","sn","baseMediaDecodeTime","tracks","boxes","flags","dependsOn","isDependedOn","hasRedundancy","avcc","hSpacing","vSpacing","configlen","sampleDependencyTable","upperWordBaseMediaDecodeTime","lowerWordBaseMediaDecodeTime","cts","arraylen","isLeading","paddingValue","isNonSync","degradPrio","movie","toTimescaleFromBase","destScale","srcBase","toMsFromMpegTsClock","toMpegTsClockFromTimescale","srcScale","MAX_SILENT_FRAME_DURATION_90KHZ","PTS_DTS_SHIFT_TOLERANCE_90KHZ","chromeVersion","PTSNormalize","reference","MP4Remuxer","now","vendor","ISGenerated","match","defaultTimeStamp","getVideoStartPts","videoSamples","rolloverDetected","startPTS","reduce","minPTS","delta","generateIS","nbAudioSamples","nbVideoSamples","audioTimeOffset","videoTimeOffset","audiovideoTimestampDelta","max","audioTrackLength","remuxAudio","endPTS","remuxVideo","videoData","remuxEmptyAudio","remuxID3","remuxText","initPTS","initDTS","audioSamples","computePTSDTS","Infinity","metadata","startOffset","keys","mp4SampleDuration","firstDTS","lastDTS","timeScale","inputSamples","outputSamples","POSITIVE_INFINITY","maxPTS","NEGATIVE_INFINITY","ptsDtsShift","sortSamples","nextAvcDts","sort","a","deltadts","deltapts","averageSampleDuration","lastDts","foundHole","firstPTS","nbNalu","naluLen","nbUnits","sampleLen","mdatSize","MUX_ERROR","REMUX_ALLOC_ERROR","setUint32","compositionTimeOffset","avcSampleUnits","mp4SampleLength","unitData","unitDataLen","lastFrameDuration","stretchShortVideoTrack","maxBufferHole","gapTolerance","deltaToFrameEnd","nextAudioPts","data1","data2","startDTS","endDTS","hasAudio","hasVideo","nb","mp4Sample","fillFrame","lastPTS","mp4timeScale","scaleFactor","inputSampleDuration","rawMPEG","filter","maxAudioFramesDrift","nextPts","missing","newStamp","audioSample","numMissingFrames","unitLen","lastSampleDuration","silentFrame","PassThroughRemuxer","rawData","streamType","performance","Date","DemuxerInline","demuxer","discontinuity","trackSwitch","defaultInitPTS","startTime","endTime","stats","tstart","tdecrypt","pushDecrypted","mux","muxConfig","demux","MP4Demuxer","initData","parseInitSegment","audiovideo","findBox","bin2str","readUint16","val","readUint32","writeUint32","subresults","endbox","results","parseSegmentIndex","references","moovEndOffset","sidx","version","startByte","referencesCount","referenceIndex","referenceInfo","referenceSize","subsegmentDuration","earliestPresentationTime","trackId","codecBox","codecType","getStartDTS","trafs","baseTimes","map","scale","offsetStartDTS","upper","lower","webpackBootstrapFunc","configurable","oe","f","ENTRY_MODULE","default","quoteRegExp","str","getModuleDependencies","sources","queueName","retval","fnString","wrapperSignature","webpackRequireName","re","RegExp","hasValuesInQueues","queues","hasValues","options","main","requiredModules","all","modulesQueue","seenModules","moduleToCheck","pop","newModules","newModulesKeys","getRequiredModules","src","entryModule","JSON","stringify","blob","Blob","bare","workerUrl","URL","webkitURL","mozURL","msURL","createObjectURL","worker","Worker","objectURL","DemuxerWorker","forwardMessage","ev","postMessage","addEventListener","cmd","parse","transferable","PlaylistContextType","PlaylistLevelType","FORBIDDEN_EVENT_NAMES","EventHandler","hls","handledEvents","useGenericHandler","onEvent","registerListeners","onHandlerDestroying","unregisterListeners","onHandlerDestroyed","isEventHandler","onEventGeneric","funcName","constructor","OTHER_ERROR","INTERNAL_EXCEPTION","ElementaryStreamTypes","LevelKey","baseURI","relativeURI","_uri","baseuri","reluri","Fragment","_url","_byteRange","_decryptdata","_elementaryStreams","AUDIO","VIDEO","deltaPTS","rawProgramDateTime","programDateTime","title","tagList","cc","relurl","baseurl","urlId","level","levelkey","loader","setByteRange","previousFrag","byteRange","byteRangeEndOffset","addElementaryStream","hasElementaryStream","createInitializationVector","segmentNumber","uint8View","setDecryptDataFromLevelKey","uri","Level","baseUrl","endCC","endSN","fragments","live","needSidxRanges","startCC","startSN","startTimeOffset","targetduration","totalduration","DECIMAL_RESOLUTION_REGEX","ATTR_LIST_REGEX","AttrList","attrs","attr","parseAttrList","decimalInteger","attrName","intValue","hexadecimalInteger","stringValue","hexadecimalIntegerAsNumber","decimalFloatingPoint","parseFloat","enumeratedString","decimalResolution","res","input","lastIndex","sampleEntryCodesISO","isCodecSupportedInMp4","MediaSource","isTypeSupported","MASTER_PLAYLIST_REGEX","MASTER_PLAYLIST_MEDIA_REGEX","LEVEL_PLAYLIST_REGEX_FAST","source","LEVEL_PLAYLIST_REGEX_SLOW","MP4_REGEX_SUFFIX","M3U8Parser","findGroup","groups","mediaGroupId","group","convertAVC1ToAVCOTI","avcdata","substr","resolve","parseMasterPlaylist","string","levels","sessionData","hasSessionData","setCodecs","codecs","filtered","typeCodes","isCodecType","preferred","unknownCodecs","resolution","bitrate","NAME","CODECS","sessionAttrs","parseMasterPlaylistMedia","audioGroups","medias","TYPE","media","groupId","instreamId","LANGUAGE","DEFAULT","autoselect","AUTOSELECT","forced","FORCED","lang","URI","groupCodec","parseLevelPlaylist","levelUrlId","currentSN","discontinuityCounter","prevFrag","firstPdtIndex","assignProgramDateTime","value1","value2","toUpperCase","keyAttrs","decryptmethod","decrypturi","decryptiv","KEYFORMAT","mapAttrs","BYTERANGE","averagetargetduration","every","startIndex","fragPrev","backfillProgramDateTimes","endProgramDateTime","PlaylistLoader","loaders","canHaveQualityLevels","AUDIO_TRACK","SUBTITLE_TRACK","mapContextToLevelType","SUBTITLE","MAIN","getResponseUrl","response","createInternalLoader","PLoader","pLoader","Loader","getInternalLoader","resetInternalLoader","contextType","destroyInternalLoaders","onManifestLoading","load","MANIFEST","responseType","onLevelLoading","LEVEL","onAudioTrackLoading","onSubtitleTrackLoading","maxRetry","timeout","retryDelay","maxRetryDelay","loaderContext","abort","manifestLoadingMaxRetry","manifestLoadingTimeOut","manifestLoadingRetryDelay","manifestLoadingMaxRetryTimeout","levelLoadingTimeOut","levelLoadingMaxRetry","levelLoadingRetryDelay","levelLoadingMaxRetryTimeout","loaderConfig","loaderCallbacks","onSuccess","loadsuccess","onError","loaderror","onTimeout","loadtimeout","networkDetails","isSidxRequest","_handleSidxRequest","_handlePlaylistLoaded","tload","_handleTrackOrLevelPlaylist","_handleMasterPlaylist","_handleManifestParsingError","_handleNetworkError","audioTracks","subtitles","captions","embeddedAudioFound","unshift","levelId","levelType","levelDetails","singleLevel","tparsed","sidxUrl","rangeStart","rangeEnd","NETWORK_ERROR","LEVEL_EMPTY_ERROR","sidxInfo","sidxReferences","segmentRef","segRefInfo","MANIFEST_PARSING_ERROR","MANIFEST_LOAD_TIMEOUT","MANIFEST_LOAD_ERROR","LEVEL_LOAD_TIMEOUT","LEVEL_LOAD_ERROR","AUDIO_TRACK_LOAD_TIMEOUT","AUDIO_TRACK_LOAD_ERROR","errorData","FragmentLoader","loaderName","onFragLoading","FragmentILoader","fLoader","DefaultILoader","loaded","progressData","byteRangeStartOffset","fragLoadingTimeOut","fragLoadingMaxRetryTimeout","onProgress","loadprogress","FRAG_LOAD_ERROR","FRAG_LOAD_TIMEOUT","KeyLoader","decryptkey","decrypturl","onKeyLoading","fragLoadingRetryDelay","KEY_LOAD_ERROR","KEY_LOAD_TIMEOUT","FragmentState","FragmentTracker","bufferPadding","timeRanges","getBufferedFrag","bufferedFrags","fragmentEntity","body","buffered","bufferedFragKey","detectEvictedFragments","elementaryStream","timeRange","esData","range","fragmentTimes","time","isTimeBuffered","removeFragment","detectPartialFragments","fragKey","getFragmentKey","getBufferedTimes","fragmentPartial","partial","getPartialFragment","timePadding","bestFragment","bestOverlap","isPartial","getState","onFragLoaded","bitrateTest","onBufferAppended","onFragBuffered","hasFragment","removeAllFragments","BinarySearch","search","list","comparisonFn","minIndex","maxIndex","currentIndex","currentElement","comparisonResult","BufferHelper","isBuffered","bufferInfo","maxHoleDuration","vbuffered","bufferedInfo","nextStart","diff","buffered2","buf2len","buf2end","bufferStartNext","bufferLen","bufferStart","bufferEnd","getMediaSource","WebKitMediaSource","Observer","Demuxer","mp4","enableWorker","w","work","onwmsg","onWorkerMessage","onerror","filename","lineno","revokeObjectURL","removeEventListener","terminate","lastFrag","nextSN","ArrayBuffer","addGroupId","audioGroupIds","textGroupIds","updatePTS","fromIdx","toIdx","fragFrom","fragTo","fragToPTS","minEndPTS","updateFragPTSDTS","maxStartPTS","drift","fragIdx","PTSKnown","mergeDetails","oldDetails","newDetails","PTSFrag","ccOffset","mapFragmentIntersection","oldFrag","newFrag","backtracked","newFragments","oldPlaylist","newPlaylist","oldFragments","adjustSliding","intersectionFn","computeReloadInterval","currentPlaylist","lastRequestTime","reloadInterval","minReloadInterval","TimeRanges","toFixed","adjustPts","sliding","alignStream","lastLevel","shouldAlign","shouldAlignOnDiscontinuities","referenceFrag","prevDetails","curDetails","prevFrags","curFrags","prevStartFrag","firstFrag","currentFrag","findFirstFragWithCC","findDiscontinuousReferenceFrag","alignDiscontinuities","lastDetails","hasProgramDateTime","lastPDT","alignPDT","findFragmentByPDT","PDTValue","maxFragLookUpTolerance","isArray","seg","pdtWithinToleranceTest","findFragmentByPTS","fragPrevious","fragNext","fragmentWithinToleranceTest","foundFragment","candidate","candidateLookupTolerance","pdtBufferEnd","GapController","fragmentTracker","nudgeRetry","stallReported","stalled","moved","seeking","poll","lastCurrentTime","currentTime","seeked","beginSeek","paused","ended","playbackRate","hasEnoughBuffer","noBufferGap","startJump","_trySkipBufferHole","tnow","stalledDuration","_reportStall","bufferedWithHoles","_tryFixBufferStall","stalledDurationMs","highBufferWatchdogPeriod","_tryNudgeBuffer","BUFFER_STALLED_ERROR","lastEndTime","targetTime","BUFFER_SEEK_OVER_HOLE","nudgeMaxRetry","nudgeOffset","BUFFER_NUDGE_ON_STALL","TaskLoop","_boundTick","_tickTimer","_tickInterval","_tickCallCount","tick","clearNextTick","clearInterval","hasInterval","hasNextTick","setInterval","millis","clearTimeout","doTick","setTimeout","State","BaseStreamController","startLoad","stopLoad","fragCurrent","_streamEnded","fragState","onMediaSeeking","mediaBuffer","tolerance","fragStartOffset","fragEndOffset","loadedmetadata","nextLoadPosition","startPosition","onMediaEnded","computeLivePosition","targetLatency","liveSyncDuration","liveSyncDurationCount","chromeOrFirefox","StreamController","audioCodecSwap","_state","gapController","altAudio","audioOnly","fragLoadError","startFragRequested","startLevel","testBandwidth","nextAutoLevel","nextLoadLevel","forceStartLoad","_doTickIdle","retryDate","_checkBuffer","_checkFragmentChanged","levelLastLoaded","startFragPrefetch","levelInfo","maxBufLen","levelBitrate","maxBufferSize","maxBufferLength","maxMaxBufferLength","_fetchPayloadOrEos","fragLen","initialLiveManifestSize","_ensureFragmentAtLivePoint","_findFragment","encrypted","_loadKey","_loadFragment","maxLatency","liveMaxLatencyDuration","liveMaxLatencyDurationCount","liveSyncPosition","readyState","targetSN","fragPreviousLoad","fragmentIndexRange","fragNextLoad","curSNIdx","sameLevel","prevSnFrag","nextSnFrag","autoLevel","autoLevelEnabled","_reduceMaxBufferLength","followingBufferedFrag","fragPlayingCurrent","fragPlaying","fragPlayingLevel","immediateLevelSwitch","immediateSwitch","previouslyPaused","pause","flushMainBuffer","immediateLevelSwitchEnd","play","nextLevelSwitch","fetchdelay","nextLevelId","nextLevel","fragLastKbps","bufferedFrag","nextBufferedFrag","startPts","endOffset","flushScope","onMediaAttached","onvseeking","onvseeked","onMediaSeeked","onvended","autoStartLoad","onMediaDetaching","onManifestParsed","aac","heaac","audioCodecSwitch","onLevelLoaded","newLevelId","curLevel","LevelHelper","onKeyLoaded","fragLoaded","currentLevel","tbuffered","pendingBuffering","appended","initSegmentData","_getAudioCodec","onFragParsingInitSegment","fragNew","trackName","ua","levelCodec","parent","content","onFragParsingData","onFragParsed","_checkAppendedParsed","onAudioTrackSwitching","fromAltAudio","onAudioTrackSwitched","videoBuffer","onBufferCreated","mediaTrack","alternate","pending","total","tfirst","mediaBuffered","fragLoadingMaxRetry","delay","levelRetry","BUFFER_FULL_ERROR","minLength","_seekToStartPos","onFragLoadEmergencyAborted","onBufferFlushed","elementaryStreamType","onLevelsUpdated","swapAudioCodec","defaultAudioCodec","nextState","previousState","_liveSyncPosition","LevelController","canload","currentLevelIndex","manualLevelIndex","timer","clearTimer","_levels","levelRetryCount","loadError","loadLevel","onManifestLoaded","bitrateStart","levelSet","levelFromSet","videoCodecFound","audioCodecFound","attributes","fragmentError","SUBTITLES","_firstLevel","firstLevel","some","MANIFEST_INCOMPATIBLE_CODECS_ERROR","setLevelInternal","newLevel","levelProperties","LEVEL_SWITCH_ERROR","levelIndex","levelError","recoverLevel","errorEvent","redundantLevels","errorDetails","trequest","audioGroupId","levelObject","removeLevel","_startLevel","configStartLevel","sendAddTrackEvent","videoEl","document","createEvent","initEvent","dispatchEvent","clearCurrentCues","cues","removeCue","ID3TrackController","getID3Track","textTracks","kind","label","addTextTrack","onFragParsingMetadata","Cue","WebKitDataCue","VTTCue","TextTrackCue","cue","addCue","onLiveBackBufferReached","foundCue","left","right","mid","getClosestCue","EWMA","halfLife","alpha_","estimate_","totalWeight_","exp","weight","adjAlpha","getTotalWeight","getEstimate","zeroFactor","EwmaBandWidthEstimator","slow","fast","defaultEstimate","defaultEstimate_","minWeight_","minDelayMs_","slow_","fast_","durationMs","numBytes","durationS","bandwidthInBps","canEstimate","AbrController","lastLoadedFragLevel","_nextAutoLevel","_bwEstimator","onCheck","_abandonRulesCheck","ewmaFast","ewmaSlow","abrEwmaFastLive","abrEwmaSlowLive","abrEwmaFastVoD","abrEwmaSlowVoD","abrEwmaDefaultEstimate","aborted","requestDelay","loadRate","bw","realBitrate","expectedLen","fragLoadedDelay","bufferStarvationDelay","minAutoLevel","levelNextBitrate","fragLevelNextLoadedDelay","abrMaxWithRealBitrate","loadedBytes","loadedDuration","fragLoadingProcessingMs","bwEstimate","bitrateTestDelay","_findBestLevel","currentFragDuration","currentBw","maxAutoLevel","maxFetchDuration","bwFactor","bwUpFactor","avgDuration","adjustedbw","fetchDuration","forcedAutoLevel","bwEstimator","nextABRAutoLevel","_nextABRAutoLevel","avgbw","bestLevel","abrBandWidthFactor","abrBandWidthUpFactor","maxStarvationDelay","maxLoadingDelay","BufferController","_msDuration","_levelDuration","_levelTargetDuration","_live","_objectUrl","_needsFlush","_needsEos","audioTimestampOffset","bufferCodecEventsExpected","_bufferCodecEventsTotal","mediaSource","segments","appending","appendError","flushBufferCounter","pendingTracks","sourceBuffer","flushRange","_onMediaSourceOpen","checkPendingTracks","_onMediaSourceClose","_onMediaSourceEnded","_onSBUpdateEnd","audioBuffer","timestampOffset","doFlush","checkEos","counter","segment","sbSet","sb","doAppending","updateMediaElementDuration","flushLiveBackBuffer","_onSBUpdateError","BUFFER_APPENDING_ERROR","onLevelPtsUpdated","updating","codecEvents","onMediaAttaching","ms","endOfStream","removeAttribute","pendingTracksCount","createSourceBuffers","onBufferReset","removeSourceBuffer","onBufferCodecs","mimeType","addSourceBuffer","BUFFER_ADD_CODEC_ERROR","onBufferAppending","onBufferEos","onBufferFlushing","liveBackBufferLength","bufferTypes","targetBackBufferPosition","bufferType","removeBufferRange","onLevelUpdated","liveDurationInfinity","flushBuffer","appendBuffer","code","BUFFER_APPEND_ERROR","appendErrorMaxRetry","sbType","bufStart","bufEnd","removeStart","removeEnd","remove","CapLevelController","autoLevelCapping","restrictedLevels","clientRect","capLevelToPlayerSize","stopCapping","onFpsDropLevelCapping","isLevelAllowed","droppedLevel","HTMLVideoElement","startCapping","detectPlayerSize","levelsLength","getMaxLevel","streamController","capLevelIndex","validLevels","getMaxLevelByMediaSize","mediaWidth","mediaHeight","getDimensions","boundsRect","getBoundingClientRect","bottom","top","maxLevelIndex","devicePixelRatio","contentScaleFactor","FPSController","isVideoPlaybackQualityAvailable","capLevelOnFPSDrop","getVideoPlaybackQuality","checkFPSInterval","fpsDroppedMonitoringPeriod","checkFPS","decodedFrames","droppedFrames","lastTime","currentPeriod","currentDropped","lastDroppedFrames","currentDecoded","lastDecodedFrames","droppedFPS","totalDroppedFrames","fpsDroppedMonitoringThreshold","videoPlaybackQuality","totalVideoFrames","droppedVideoFrames","webkitDecodedFrameCount","webkitDroppedFrameCount","XhrLoader","xhrSetup","requestTimeout","retryTimeout","callbacks","retry","loadInternal","xhr","XMLHttpRequest","open","status","setRequestHeader","onreadystatechange","readystatechange","onprogress","send","currentTarget","responseText","responseURL","statusText","lengthComputable","AudioTrackController","_trackId","_selectDefaultTrack","trackIdBlacklist","_selectAudioGroup","onAudioTrackLoaded","updatePeriodMs","_handleLoadError","_setAudioTrack","newId","_loadTrackDetailsIfNeeded","_updateTrack","_selectInitialAudioTrack","currentAudioTrack","defaultTracks","trackFound","traverseTracks","_needsTrackLoading","previousId","language","AudioStreamController","waitingFragment","videoTrackCC","waitingVideoCC","onInitPtsFound","demuxerId","trackDetails","mainBufferInfo","maxConfigBuffer","audioSwitch","CC","findFragWithCC","loadIdx","fragLoadIdx","nextBuffered","foundFrag","isSeeking","waitingFrag","waitingFragCC","clearWaitingFragment","onAudioTracksUpdated","appendObj","pendingData","appendOnBufferFlush","directionSetting","lr","rl","alignSetting","middle","findAlignSetting","extend","obj","cobj","baseObj","hasBeenReset","_id","_pauseOnExit","_startTime","_endTime","_text","_region","_vertical","_snapToLines","_line","_lineAlign","_position","_positionAlign","_size","_align","setting","findDirectionSetting","SyntaxError","displayState","getCueAsHTML","WebVTT","convertCueToDOMTree","StringDecoder","decodeURIComponent","encodeURIComponent","VTTParser","regionList","Settings","values","parseOptions","keyValueDelim","groupDelim","kv","k","v","dflt","defaultKey","alt","integer","percent","defaults","center","align","parseCue","oInput","consumeTimeStamp","ts","computeSeconds","parseTimeStamp","skipWhitespace","settings","region","vals","vals0","vertical","line","lineAlign","snapToLines","consumeCueSettings","fixLineBreaks","collectNextLine","alreadyCollectedLine","hasSubstring","oncue","flush","onflush","newCue","captionScreen","row","indenting","indent","rows","isEmpty","chars","uchar","cueStartTime","VerboseLevel","specialCea608CharsCodes","getCharForByte","byte","charCode","rowsLowCh1","rowsHighCh1","rowsLowCh2","rowsHighCh2","backgroundColors","CaptionsLogger","verboseLevel","severity","numArrayToHexArray","numArray","hexArray","PenState","foreground","underline","italics","background","flash","reset","setStyles","styles","attribs","style","isDefault","equals","other","copy","newPenState","StyledUnicodeChar","penState","setChar","setPenState","newChar","Row","currPenState","equal","empty","setCursor","absPos","DEBUG","moveCursor","relPos","newPos","backSpace","insertChar","char","clearFromPos","startPos","clear","clearToEndOfRow","getTextString","setPenStyles","CaptionScreen","currRow","nrRollUpRows","lastOutputScreen","NR_ROWS","setPen","INFO","setPAC","pacData","newRow","topRowIndex","prevLineTime","prevPos","color","setBkgData","bkgData","setRollUpRows","nrRows","rollUp","TEXT","getDisplayText","topRow","asOneRow","displayText","rowNr","rowText","getTextAndFormat","Cea608Channel","channelNumber","outputFilter","chNr","verbose","displayedMemory","nonDisplayedMemory","currRollUpRow","writeScreen","getHandler","setHandler","newHandler","setMode","newMode","insertChars","screen","outputDataUpdate","ccRCL","ccBS","ccAOF","ccAON","ccDER","ccRU","ccFON","ccRDC","ccTR","ccRTD","ccEDM","ccCR","ccENM","ccEOC","ccTO","nrCols","ccMIDROW","secondByte","colorIndex","dispatch","dispatchCue","cueSplitAtTime","setLastCmd","cmdHistory","hasCmdRepeated","Cea608Parser","field","out1","out2","channels","currentChannel","channel","addData","byteList","cmdFound","charsFound","DATA","parseCmd","parseMidrow","parsePAC","parseBackgroundAttributes","parseChars","currChNr","WARNING","interpretPAC","pacIndex","channelNr","charCodes","charCode1","oneCode","hexCodes","OutputFilter","timelineController","cueRanges","addCues","createCaptionsTrack","startsWith","inputString","searchString","hash","WebVTTParser","vttByteArray","syncPTS","vttCCs","callBack","errorCallBack","parsingError","vttLines","cueTime","mpegTs","localTime","presentationTime","inHeader","timestampMap","parser","currCC","cueOffset","new","prevCC","presentationOffset","calculateOffset","onparsingerror","timeString","secs","mins","hours","cueString2millis","canReuseVttTextTrack","inUseTrack","manifestTrack","textTrack1","textTrack2","TimelineController","enabled","Cues","unparsedVttFrags","captionsTracks","nonNativeCaptionsTracks","captionsProperties","cea608Parser1","cea608Parser2","lastSn","0","cueHandler","captionsTextTrack1Label","languageCode","captionsTextTrack1LanguageCode","captionsTextTrack2Label","captionsTextTrack2LanguageCode","textTrack3","captionsTextTrack3Label","captionsTextTrack3LanguageCode","textTrack4","captionsTextTrack4Label","captionsTextTrack4LanguageCode","enableCEA708Captions","channel1","channel2","channel3","channel4","x1","y1","y2","merged","cueRange","overlap","renderTextTracksNatively","getExistingTrack","createNativeTrack","createNonNativeTrack","existingTrack","createTextTrack","trackProperties","closedCaptions","_cleanTracks","enableWebVTT","sameTracks","inUseTracks","subtitleDisplay","tracksList","subtitleTrack","captionsTrack","instreamIdMatch","success","decryptData","_parseVTTs","currentTrack","getCueById","textTrackCue","onFragDecrypted","onFragParsingUserdata","ccBytes","ccdatas","extractCea608Data","actualCCBytes","tmpByte","ccbyte1","ccbyte2","ccType","filterSubtitleTracks","textTrackList","SubtitleTrackController","stopped","queuedDefaultTrack","trackChangeListener","_onTextTracksChanged","useTextTrackPolling","subtitlePollingInterval","subtitleTracks","onSubtitleTrackLoaded","_clearReloadTimer","_loadCurrentTrack","_toggleTrackModes","oldTrack","nextTrack","_setSubtitleTrackInternal","subtitleTrackId","KeySystems","SubtitleStreamController","tracksBuffered","currentTrackId","lastAVStart","_onMediaSeeking","onSubtitleFragProcessed","fragStart","fragEnd","onSubtitleTracksUpdated","onSubtitleTrackSwitch","referenceStart","frags","mergeSubtitlePlaylists","_getBuffered","requestMediaKeySystemAccess","EMEController","_widevineLicenseUrl","_licenseXhrSetup","_emeEnabled","_requestMediaKeySystemAccess","_drmSystemOptions","_config","_mediaKeysList","_media","_hasSetMediaKeys","_requestLicenseFailureCount","mediaKeysPromise","_onMediaEncrypted","initDataType","KEY_SYSTEM_ERROR","KEY_SYSTEM_NO_KEYS","finallySetKeyAndStartSession","mediaKeys","_attemptSetMediaKeys","_generateRequestWithPreferredKeySession","widevineLicenseUrl","licenseXhrSetup","emeEnabled","requestMediaKeySystemAccessFunc","drmSystemOptions","getLicenseServerUrl","keySystem","WIDEVINE","_attemptKeySystemAccess","audioCodecs","videoCodecs","mediaKeySystemConfigs","baseConfig","audioCapabilities","videoCapabilities","contentType","robustness","audioRobustness","videoRobustness","createWidevineMediaKeySystemConfigurations","getSupportedMediaKeySystemConfigurations","keySystemAccessPromise","mediaKeySystemAccess","_onMediaKeySystemAccessObtained","mediaKeysListItem","mediaKeysSessionInitialized","mediaKeySystemDomain","Promise","createMediaKeys","_onMediaKeysCreated","mediaKeysSession","createSession","_onNewMediaKeySession","keySession","sessionId","_onKeySessionMessage","_requestLicense","update","keysListItem","setMediaKeys","KEY_SYSTEM_NO_ACCESS","KEY_SYSTEM_NO_SESSION","KEY_SYSTEM_NO_INIT_DATA","generateRequest","_createLicenseXhr","keyMessage","_onLicenseRequestReadyStageChange","KEY_SYSTEM_LICENSE_REQUEST_FAILED","attemptsLeft","_generateLicenseRequestChallenge","challenge","onMediaDetached","mediaKeysList","close","hlsDefaultConfig","lowBufferWatchdogPeriod","abrController","bufferController","capLevelController","fpsController","minAutoBitrate","__USE_SUBTITLES__","subtitleStreamController","subtitleTrackController","audioStreamController","audioTrackController","emeController","Hls","userConfig","_autoLevelCapping","levelController","networkControllers","coreComponents","defaultConfig","DefaultConfig","playListLoader","fragmentLoader","keyLoader","id3TrackController","Controller","isSupported","SourceBuffer","WebKitSourceBuffer","sourceBufferValidAPI","__VERSION__","detachMedia","component","attachMedia","loadSource","location","href","controller","recoverMediaError","manualLevel","shouldStartCapping","newCapLevelToPlayerSize","NaN","audioTrackId"],"mappings":"4BAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAa,IAAID,IAEjBD,EAAU,IAAIC,IARhB,CASGK,MAAM,WACT,O,YCTE,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUP,QAGnC,IAAIC,EAASI,EAAiBE,GAAY,CACzCC,EAAGD,EACHE,GAAG,EACHT,QAAS,IAUV,OANAU,EAAQH,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOQ,GAAI,EAGJR,EAAOD,QA0Df,OArDAM,EAAoBM,EAAIF,EAGxBJ,EAAoBO,EAAIR,EAGxBC,EAAoBQ,EAAI,SAASd,EAASe,EAAMC,GAC3CV,EAAoBW,EAAEjB,EAASe,IAClCG,OAAOC,eAAenB,EAASe,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEV,EAAoBgB,EAAI,SAAStB,GACX,oBAAXuB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAenB,EAASuB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAenB,EAAS,aAAc,CAAEyB,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBQ,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAShC,GAChC,IAAIe,EAASf,GAAUA,EAAO2B,WAC7B,WAAwB,OAAO3B,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAK,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG7B,EAAoBgC,EAAI,SAIjBhC,EAAoBA,EAAoBiC,EAAI,I,+BClFrD,+EAEA,SAASC,KAET,IAAMC,EAAa,CACjBC,MAAOF,EACPG,MAAOH,EACPI,IAAKJ,EACLK,KAAML,EACNM,KAAMN,EACNO,MAAOP,GAGLQ,EAAiBP,EAWrB,SAASQ,EAAWC,EAAMC,GAExB,OADAA,EAAM,IAAMD,EAAO,OAASC,EAI9B,IAAMC,EAASC,cAEf,SAASC,EAAgBJ,GACvB,IAAMK,EAAOH,EAAOI,QAAQN,GAC5B,OAAIK,EACK,WAAmB,2BAANE,EAAM,yBAANA,EAAM,gBACpBA,EAAK,KACPA,EAAK,GAAKR,EAAUC,EAAMO,EAAK,KAGjCF,EAAKG,MAAMN,EAAOI,QAASC,IAGxBjB,EASF,IAAMmB,EAAa,SAAUC,GAElC,GAAKR,EAAOI,UAA2B,IAAhBI,GAAgD,iBAAhBA,EAA0B,EARnF,SAAgCA,GAA2B,2BAAXC,EAAW,iCAAXA,EAAW,kBACzDA,EAAUC,SAAQ,SAAUZ,GAC1BF,EAAeE,GAAQU,EAAYV,GAAQU,EAAYV,GAAMlB,KAAK4B,GAAeN,EAAeJ,MAOhGa,CAAsBH,EAGpB,QACA,MACA,OACA,OACA,SAIF,IACEZ,EAAeJ,MACf,MAAOoB,GACPhB,EAAiBP,QAGnBO,EAAiBP,GAIRwB,EAASjB,G,6BC0CPkB,IAjHG,CAEhBC,gBAAiB,oBAEjBC,eAAgB,mBAEhBC,gBAAiB,oBAEjBC,eAAgB,mBAEhBC,aAAc,iBAEdC,cAAe,kBAEfC,eAAgB,mBAEhBC,iBAAkB,qBAElBC,gBAAiB,oBAEjBC,WAAY,eAEZC,gBAAiB,oBAEjBC,eAAgB,mBAEhBC,iBAAkB,qBAElBC,gBAAiB,oBAEjBC,gBAAiB,oBAEjBC,gBAAiB,oBAEjBC,eAAgB,mBAEhBC,cAAe,kBAEfC,aAAc,iBAEdC,cAAe,kBAEfC,kBAAmB,qBAEnBC,eAAgB,mBAEhBC,qBAAsB,wBAEtBC,sBAAuB,yBAEvBC,qBAAsB,wBAEtBC,oBAAqB,uBAErBC,mBAAoB,sBAEpBC,wBAAyB,2BAEzBC,sBAAuB,yBAEvBC,uBAAwB,0BAExBC,sBAAuB,yBAEvBC,wBAAyB,2BAEzBC,YAAa,gBAEbC,6BAA8B,8BAE9BC,eAAgB,kBAEhBC,aAAc,iBAEdC,mBAAoB,sBAEpBC,4BAA6B,8BAE7BC,YAAa,gBAEbC,eAAgB,mBAEhBC,0BAA2B,4BAE3BC,sBAAuB,yBAEvBC,sBAAuB,yBAEvBC,kBAAmB,qBAEnBC,YAAa,gBAEbC,cAAe,kBAEfC,aAAc,iBAEdC,SAAU,aAEVC,uBAAwB,yBAExBC,MAAO,WAEPC,WAAY,gBAEZC,YAAa,gBAEbC,WAAY,eAEZC,wBAAyB,2BAEzBC,yBAA0B,6B,6BClHrB,IAAKC,EAiBAC,EAjBZ,oE,SAAYD,K,6BAAAA,E,yBAAAA,E,kCAAAA,E,qBAAAA,E,0BAAAA,M,cAiBAC,K,qCAAAA,E,yCAAAA,E,2CAAAA,E,kEAAAA,E,8CAAAA,E,wCAAAA,E,4CAAAA,E,8CAAAA,E,qEAAAA,E,oCAAAA,E,kCAAAA,E,sCAAAA,E,sCAAAA,E,6CAAAA,E,iDAAAA,E,gCAAAA,E,oCAAAA,E,sCAAAA,E,sCAAAA,E,oCAAAA,E,8BAAAA,E,kCAAAA,E,6CAAAA,E,wCAAAA,E,8CAAAA,E,0CAAAA,E,oCAAAA,E,2CAAAA,E,2CAAAA,E,wCAAAA,M,mCCjBZ,kCAAO,IAAMC,EAAiBC,OAAOC,UAAY,SAAUrG,GACzD,MAAwB,iBAAVA,GAAsBqG,SAASrG,IAGfoG,OAAOE,kB,6BCJvC,sCA6VIC,EA7VJ,OAKMC,E,kCAOGC,SAAP,SAAiBC,EAAMC,GAcrB,OAAIA,EAAS,IAAMD,EAAKE,QAED,KAAjBF,EAAKC,IAAyC,KAArBD,EAAKC,EAAS,IAAoC,KAArBD,EAAKC,EAAS,IAElED,EAAKC,EAAS,GAAK,KAAQD,EAAKC,EAAS,GAAK,KAE5CD,EAAKC,EAAS,GAAK,KAAQD,EAAKC,EAAS,GAAK,KAAQD,EAAKC,EAAS,GAAK,KAAQD,EAAKC,EAAS,GAAK,K,EAgBzGE,SAAP,SAAiBH,EAAMC,GAIrB,OAAIA,EAAS,IAAMD,EAAKE,QAED,KAAjBF,EAAKC,IAAyC,KAArBD,EAAKC,EAAS,IAAoC,KAArBD,EAAKC,EAAS,IAElED,EAAKC,EAAS,GAAK,KAAQD,EAAKC,EAAS,GAAK,KAE5CD,EAAKC,EAAS,GAAK,KAAQD,EAAKC,EAAS,GAAK,KAAQD,EAAKC,EAAS,GAAK,KAAQD,EAAKC,EAAS,GAAK,K,EAgBzGG,WAAP,SAAmBJ,EAAMC,GAIvB,IAHA,IAAMI,EAAQJ,EACVC,EAAS,EAENJ,EAAIC,SAASC,EAAMC,IAAS,CAEjCC,GAAU,GAGVA,GADaJ,EAAIQ,UAAUN,EAAMC,EAAS,GAGtCH,EAAIK,SAASH,EAAMC,EAAS,MAE9BC,GAAU,IAGZD,GAAUC,EAGZ,GAAIA,EAAS,EACX,OAAOF,EAAKO,SAASF,EAAOA,EAAQH,I,EAMjCI,UAAP,SAAkBN,EAAMC,GACtB,IAAIO,EAAO,EAKX,OAJAA,GAAwB,IAAfR,EAAKC,KAAmB,GACjCO,IAA6B,IAAnBR,EAAKC,EAAS,KAAc,GACtCO,IAA6B,IAAnBR,EAAKC,EAAS,KAAc,EACtCO,GAA4B,IAAnBR,EAAKC,EAAS,I,EASlBQ,aAAP,SAAqBT,GAEnB,IADA,IAAMU,EAASZ,EAAIa,aAAaX,GACvB3H,EAAI,EAAGA,EAAIqI,EAAOR,OAAQ7H,IAAK,CACtC,IAAMuI,EAAQF,EAAOrI,GACrB,GAAIyH,EAAIe,iBAAiBD,GACvB,OAAOd,EAAIgB,eAAeF,K,EAWzBC,iBAAP,SAAyBD,GACvB,OAAQA,GAAuB,SAAdA,EAAMhH,KAAiC,iDAAfgH,EAAMjG,M,EAG1CoG,cAAP,SAAsBf,GAMpB,IAAMjF,EAAOiG,OAAOC,aAAajB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC3DQ,EAAOV,EAAIQ,UAAUN,EAAM,GAKjC,MAAO,CAAEjF,OAAMyF,OAAMR,KAAMA,EAAKO,SAFnB,MAE6CC,K,EAQrDG,aAAP,SAAqBO,GAInB,IAHA,IAAIjB,EAAS,EACPS,EAAS,GAERZ,EAAIC,SAASmB,EAASjB,IAAS,CAMpC,IALA,IAAMO,EAAOV,EAAIQ,UAAUY,EAASjB,EAAS,GAGvCkB,GADNlB,GAAU,IACWO,EAEdP,EAAS,EAAIkB,GAAK,CACvB,IAAMC,EAAYtB,EAAIiB,cAAcG,EAAQX,SAASN,IAC/CW,EAAQd,EAAIuB,aAAaD,GAC3BR,GACFF,EAAOY,KAAKV,GAIdX,GAAUmB,EAAUZ,KAAO,GAGzBV,EAAIK,SAASe,EAASjB,KACxBA,GAAU,IAId,OAAOS,G,EAGFW,aAAP,SAAqBT,GACnB,MAAmB,SAAfA,EAAM7F,KACD+E,EAAIyB,iBAAiBX,GACD,MAAlBA,EAAM7F,KAAK,GACb+E,EAAI0B,gBAAgBZ,GAGtBd,EAAI2B,iBAAiBb,I,EAGvBE,eAAP,SAAuBY,GACrB,GAAuC,IAAnCA,EAAe1B,KAAK2B,WAAkB,CACxC,IAAM3B,EAAO,IAAI4B,WAAWF,EAAe1B,MAGrC6B,EAAqB,EAAV7B,EAAK,GAClB8B,GAAa9B,EAAK,IAAM,KACXA,EAAK,IAAM,KACXA,EAAK,IAAM,GACXA,EAAK,GAOtB,OANA8B,GAAa,GAETD,IACFC,GAAa,aAGRC,KAAKC,MAAMF,K,EAMfP,iBAAP,SAAyBX,GAIvB,KAAIA,EAAMJ,KAAO,GAAjB,CAIA,IAAMyB,EAAQnC,EAAIoC,gBAAgBtB,EAAMZ,MAAM,GACxCmC,EAAc,IAAIP,WAAWhB,EAAMZ,KAAKO,SAAS0B,EAAM/B,OAAS,IAEtE,MAAO,CAAEtG,IAAKgH,EAAM7F,KAAMJ,KAAMsH,EAAOjC,KAAMmC,EAAYC,U,EAGpDX,iBAAP,SAAyBb,GACvB,KAAIA,EAAMJ,KAAO,GAAjB,CAIA,GAAmB,SAAfI,EAAM7F,KAAiB,CAMzB,IAAIsH,EAAQ,EACNC,EAAcxC,EAAIoC,gBAAgBtB,EAAMZ,KAAKO,SAAS8B,IAAQ,GAEpEA,GAASC,EAAYpC,OAAS,EAC9B,IAAM5G,EAAQwG,EAAIoC,gBAAgBtB,EAAMZ,KAAKO,SAAS8B,IAEtD,MAAO,CAAEzI,IAAKgH,EAAM7F,KAAMJ,KAAM2H,EAAatC,KAAM1G,GAOnD,IAAMiJ,EAAOzC,EAAIoC,gBAAgBtB,EAAMZ,KAAKO,SAAS,IACrD,MAAO,CAAE3G,IAAKgH,EAAM7F,KAAMiF,KAAMuC,K,EAI7Bf,gBAAP,SAAwBZ,GACtB,GAAmB,SAAfA,EAAM7F,KAAiB,CAMzB,GAAI6F,EAAMJ,KAAO,EACf,OAGF,IAAI6B,EAAQ,EACNC,EAAcxC,EAAIoC,gBAAgBtB,EAAMZ,KAAKO,SAAS8B,IAAQ,GAEpEA,GAASC,EAAYpC,OAAS,EAC9B,IAAM5G,EAAQwG,EAAIoC,gBAAgBtB,EAAMZ,KAAKO,SAAS8B,IAEtD,MAAO,CAAEzI,IAAKgH,EAAM7F,KAAMJ,KAAM2H,EAAatC,KAAM1G,GAMnD,IAAMkJ,EAAM1C,EAAIoC,gBAAgBtB,EAAMZ,MACtC,MAAO,CAAEpG,IAAKgH,EAAM7F,KAAMiF,KAAMwC,I,EAa7BN,gBAAP,SAAwBO,EAAOC,QAAoB,IAApBA,OAAa,GAC1C,IAAM7C,EAAU8C,IAChB,GAAI9C,EAAS,CACX,IAAM+C,EAAU/C,EAAQgD,OAAOJ,GAE/B,GAAIC,EAAY,CAEd,IAAMI,EAAMF,EAAQG,QAAQ,MAC5B,OAAgB,IAATD,EAAaF,EAAQI,UAAU,EAAGF,GAAOF,EAIlD,OAAOA,EAAQK,QAAQ,MAAO,IAShC,IANA,IACIvK,EACAwK,EACAC,EAHEC,EAAMX,EAAMvC,OAIdmD,EAAM,GACNhL,EAAI,EACDA,EAAI+K,GAAK,CAEd,GAAU,KADV1K,EAAI+J,EAAMpK,OACQqK,EAChB,OAAOW,EACF,GAAU,IAAN3K,GAAoB,IAANA,EAIzB,OAAQA,GAAK,GACb,KAAK,EAAG,KAAK,EAAG,KAAK,EAAG,KAAK,EAAG,KAAK,EAAG,KAAK,EAAG,KAAK,EAAG,KAAK,EAE3D2K,GAAOrC,OAAOC,aAAavI,GAC3B,MACF,KAAK,GAAI,KAAK,GAEZwK,EAAQT,EAAMpK,KACdgL,GAAOrC,OAAOC,cAAmB,GAAJvI,IAAa,EAAc,GAARwK,GAChD,MACF,KAAK,GAEHA,EAAQT,EAAMpK,KACd8K,EAAQV,EAAMpK,KACdgL,GAAOrC,OAAOC,cAAmB,GAAJvI,IAAa,IACpB,GAARwK,IAAiB,GACT,GAARC,IAAiB,IAKnC,OAAOE,G,KAMX,SAASV,IACP,IAAM1H,EAASC,cAKf,OAJK2E,QAAyC,IAAvB5E,EAAOqI,cAC5BzD,EAAU,IAAI5E,EAAOqI,YAAY,UAG5BzD,EAGT,IAAM0D,EAAiBzD,EAAIoC,gBAEZpC,O,6BC1WR,SAAS5E,IAEd,MAAsB,oBAAXsI,OAEFC,KAEAD,OANX,mC,gBCEA,IACME,EACAC,EACAC,EACAC,EAEAC,EALAJ,EAAY,+FACZC,EAAsB,mBACtBC,EAAkB,oBAClBC,EAAsB,wCAEtBC,EAAa,CAOfC,iBAAkB,SAAUC,EAASC,EAAaC,GAKhD,GAJAA,EAAOA,GAAQ,GAEfF,EAAUA,EAAQG,SAClBF,EAAcA,EAAYE,QACR,CAIhB,IAAKD,EAAKE,gBACR,OAAOJ,EAET,IAAIK,EAAwBP,EAAWQ,SAASN,GAChD,IAAKK,EACH,MAAM,IAAIE,MAAM,mCAKlB,OAHAF,EAAsBG,KAAOV,EAAWW,cACtCJ,EAAsBG,MAEjBV,EAAWY,kBAAkBL,GAEtC,IAAIM,EAAgBb,EAAWQ,SAASL,GACxC,IAAKU,EACH,MAAM,IAAIJ,MAAM,uCAElB,GAAII,EAAcC,OAGhB,OAAKV,EAAKE,iBAGVO,EAAcH,KAAOV,EAAWW,cAAcE,EAAcH,MACrDV,EAAWY,kBAAkBC,IAH3BV,EAKX,IAAIY,EAAYf,EAAWQ,SAASN,GACpC,IAAKa,EACH,MAAM,IAAIN,MAAM,mCAElB,IAAKM,EAAUC,QAAUD,EAAUL,MAA8B,MAAtBK,EAAUL,KAAK,GAAY,CAGpE,IAAIO,EAAYpB,EAAoBqB,KAAKH,EAAUL,MACnDK,EAAUC,OAASC,EAAU,GAC7BF,EAAUL,KAAOO,EAAU,GAEzBF,EAAUC,SAAWD,EAAUL,OACjCK,EAAUL,KAAO,KAEnB,IAAIS,EAAa,CAGfL,OAAQC,EAAUD,OAClBE,OAAQH,EAAcG,OACtBN,KAAM,KACNU,OAAQP,EAAcO,OACtBC,MAAOR,EAAcQ,MACrBC,SAAUT,EAAcS,UAE1B,IAAKT,EAAcG,SAIjBG,EAAWH,OAASD,EAAUC,OAGA,MAA1BH,EAAcH,KAAK,IACrB,GAAKG,EAAcH,KAgBZ,CAKL,IAAIa,EAAcR,EAAUL,KACxBc,EACFD,EAAYrC,UAAU,EAAGqC,EAAYE,YAAY,KAAO,GACxDZ,EAAcH,KAChBS,EAAWT,KAAOV,EAAWW,cAAca,QAtB3CL,EAAWT,KAAOK,EAAUL,KAIvBG,EAAcO,SACjBD,EAAWC,OAASL,EAAUK,OAIzBP,EAAcQ,QACjBF,EAAWE,MAAQN,EAAUM,QAqBvC,OALwB,OAApBF,EAAWT,OACbS,EAAWT,KAAON,EAAKE,gBACnBN,EAAWW,cAAcE,EAAcH,MACvCG,EAAcH,MAEbV,EAAWY,kBAAkBO,IAEtCX,SAAU,SAAU9B,GAClB,IAAIgD,EAAQ9B,EAAUsB,KAAKxC,GAC3B,OAAKgD,EAGE,CACLZ,OAAQY,EAAM,IAAM,GACpBV,OAAQU,EAAM,IAAM,GACpBhB,KAAMgB,EAAM,IAAM,GAClBN,OAAQM,EAAM,IAAM,GACpBL,MAAOK,EAAM,IAAM,GACnBJ,SAAUI,EAAM,IAAM,IARf,MAWXf,cAAe,SAAUD,GAgBvB,IATAA,EAAOA,EAAKiB,MAAM,IAAIC,UAAUC,KAAK,IAAI1C,QAAQW,EAAiB,IAUhEY,EAAKtE,UAAYsE,EAAOA,EAAKvB,QAAQY,EAAqB,KAAK3D,SAEjE,OAAOsE,EAAKiB,MAAM,IAAIC,UAAUC,KAAK,KAEvCjB,kBAAmB,SAAUc,GAC3B,OACEA,EAAMZ,OACNY,EAAMV,OACNU,EAAMhB,KACNgB,EAAMN,OACNM,EAAML,MACNK,EAAMJ,WAMVtN,EAAOD,QAAUiM,G,iCCrKA8B,E,WACnB,WAAaC,EAAQC,GACnB7N,KAAK4N,OAASA,EACd5N,KAAK8N,MAAQD,E,mBAGfE,QAAA,SAAShG,EAAMpG,GACb,OAAO3B,KAAK4N,OAAOG,QAAQ,CAAEpN,KAAM,UAAWkN,GAAI7N,KAAK8N,OAASnM,EAAKoG,I,KCI1DiG,E,WAVb,WAAaJ,EAAQjM,GACnB3B,KAAK4N,OAASA,EACd5N,KAAK2B,IAAMA,E,mBAGbsM,UAAA,WACE,OAAOjO,KAAK4N,OAAOM,UAAU,MAAOlO,KAAK2B,IAAK,CAAEhB,KAAM,YAAa,EAAO,CAAC,UAAW,a,SCkR3EwN,E,WA7Qb,aAEEnO,KAAKoO,KAAO,CAAC,EAAK,EAAK,EAAK,EAAK,EAAK,GAAM,GAAM,GAAM,IAAM,GAAM,IACpEpO,KAAKqO,OAAS,CAAC,IAAIC,YAAY,KAAM,IAAIA,YAAY,KAAM,IAAIA,YAAY,KAAM,IAAIA,YAAY,MACjGtO,KAAKuO,UAAY,CAAC,IAAID,YAAY,KAAM,IAAIA,YAAY,KAAM,IAAIA,YAAY,KAAM,IAAIA,YAAY,MACpGtO,KAAKwO,KAAO,IAAIF,YAAY,KAC5BtO,KAAKyO,QAAU,IAAIH,YAAY,KAG/BtO,KAAK2B,IAAM,IAAI2M,YAAY,GAE3BtO,KAAK0O,Y,2BAIPC,yBAAA,SAA0BC,GAGxB,IAFA,IAAIC,EAAO,IAAIC,SAASF,GACpBG,EAAW,IAAIT,YAAY,GACtBlO,EAAI,EAAGA,EAAI,EAAGA,IACrB2O,EAAS3O,GAAKyO,EAAKG,UAAc,EAAJ5O,GAG/B,OAAO2O,G,EAGTL,UAAA,WACE,IAAIF,EAAOxO,KAAKwO,KACZC,EAAUzO,KAAKyO,QACfJ,EAASrO,KAAKqO,OACdY,EAAUZ,EAAO,GACjBa,EAAUb,EAAO,GACjBc,EAAUd,EAAO,GACjBe,EAAUf,EAAO,GACjBE,EAAYvO,KAAKuO,UACjBc,EAAad,EAAU,GACvBe,EAAaf,EAAU,GACvBgB,EAAahB,EAAU,GACvBiB,EAAajB,EAAU,GAEvB7N,EAAI,IAAI4N,YAAY,KACpBmB,EAAI,EACJC,EAAK,EACLtP,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAI,IAAKA,IAEjBM,EAAEN,GADAA,EAAI,IACCA,GAAK,EAEJA,GAAK,EAAK,IAItB,IAAKA,EAAI,EAAGA,EAAI,IAAKA,IAAK,CACxB,IAAIuP,EAAKD,EAAMA,GAAM,EAAMA,GAAM,EAAMA,GAAM,EAAMA,GAAM,EACzDC,EAAMA,IAAO,EAAW,IAALA,EAAa,GAChCnB,EAAKiB,GAAKE,EACVlB,EAAQkB,GAAMF,EAGd,IAAIG,EAAKlP,EAAE+O,GACPI,EAAKnP,EAAEkP,GACPE,EAAKpP,EAAEmP,GAGPvO,EAAa,IAARZ,EAAEiP,GAAqB,SAALA,EAC3BV,EAAQQ,GAAMnO,GAAK,GAAOA,IAAM,EAChC4N,EAAQO,GAAMnO,GAAK,GAAOA,IAAM,GAChC6N,EAAQM,GAAMnO,GAAK,EAAMA,IAAM,GAC/B8N,EAAQK,GAAKnO,EAGbA,EAAU,SAALwO,EAAwB,MAALD,EAAsB,IAALD,EAAmB,SAAJH,EACxDJ,EAAWM,GAAOrO,GAAK,GAAOA,IAAM,EACpCgO,EAAWK,GAAOrO,GAAK,GAAOA,IAAM,GACpCiO,EAAWI,GAAOrO,GAAK,EAAMA,IAAM,GACnCkO,EAAWG,GAAMrO,EAGZmO,GAGHA,EAAIG,EAAKlP,EAAEA,EAAEA,EAAEoP,EAAKF,KACpBF,GAAMhP,EAAEA,EAAEgP,KAHVD,EAAIC,EAAK,I,EAQfzB,UAAA,SAAW8B,GAMT,IAJA,IAAIpO,EAAM3B,KAAK2O,yBAAyBoB,GACpCC,GAAU,EACVhI,EAAS,EAENA,EAASrG,EAAIsG,QAAU+H,GAC5BA,EAAWrO,EAAIqG,KAAYhI,KAAK2B,IAAIqG,GACpCA,IAGF,IAAIgI,EAAJ,CAIAhQ,KAAK2B,IAAMA,EACX,IAAIsO,EAAUjQ,KAAKiQ,QAAUtO,EAAIsG,OAEjC,GAAgB,IAAZgI,GAA6B,IAAZA,GAA6B,IAAZA,EACpC,MAAM,IAAI3D,MAAM,wBAA0B2D,GAG5C,IACIC,EACAC,EAaAC,EACA9O,EAhBA+O,EAASrQ,KAAKqQ,OAA6B,GAAnBJ,EAAU,EAAI,GAItCK,EAActQ,KAAKsQ,YAAc,IAAIhC,YAAY+B,GACjDE,EAAiBvQ,KAAKuQ,eAAiB,IAAIjC,YAAY+B,GACvDG,EAAOxQ,KAAKwO,KACZJ,EAAOpO,KAAKoO,KAEZG,EAAYvO,KAAKuO,UACjBc,EAAad,EAAU,GACvBe,EAAaf,EAAU,GACvBgB,EAAahB,EAAU,GACvBiB,EAAajB,EAAU,GAK3B,IAAK2B,EAAQ,EAAGA,EAAQG,EAAQH,IAC1BA,EAAQD,EACVG,EAAOE,EAAYJ,GAASvO,EAAIuO,IAGlC5O,EAAI8O,EAEAF,EAAQD,GAAY,GAKtB3O,EAAKkP,GAHLlP,EAAKA,GAAK,EAAMA,IAAM,MAGN,KAAO,GAAOkP,EAAMlP,IAAM,GAAM,MAAS,GAAOkP,EAAMlP,IAAM,EAAK,MAAS,EAAKkP,EAAS,IAAJlP,GAGpGA,GAAK8M,EAAM8B,EAAQD,EAAW,IAAM,IAC3BA,EAAU,GAAKC,EAAQD,GAAY,IAE5C3O,EAAKkP,EAAKlP,IAAM,KAAO,GAAOkP,EAAMlP,IAAM,GAAM,MAAS,GAAOkP,EAAMlP,IAAM,EAAK,MAAS,EAAKkP,EAAS,IAAJlP,IAGtGgP,EAAYJ,GAASE,GAAQE,EAAYJ,EAAQD,GAAW3O,KAAO,GAGrE,IAAK6O,EAAW,EAAGA,EAAWE,EAAQF,IACpCD,EAAQG,EAASF,EAEf7O,EADa,EAAX6O,EACEG,EAAYJ,GAEZI,EAAYJ,EAAQ,GAIxBK,EAAeJ,GADbA,EAAW,GAAKD,GAAS,EACA5O,EAEA+N,EAAWmB,EAAKlP,IAAM,KAAOgO,EAAWkB,EAAMlP,IAAM,GAAM,MAASiO,EAAWiB,EAAMlP,IAAM,EAAK,MAASkO,EAAWgB,EAAS,IAAJlP,IAGrJiP,EAAeJ,GAAYI,EAAeJ,KAAc,I,EAK5DM,uBAAA,SAAwBC,GACtB,OAAQA,GAAQ,IAAe,MAAPA,IAAkB,GAAc,SAAPA,IAAoB,EAAMA,IAAS,I,EAGtF3C,QAAA,SAAS4C,EAAkB3I,EAAQ8F,EAAO8C,GA2BxC,IA1BA,IAmBIC,EAAIC,EAAIC,EAAIC,EACZC,EAAIC,EAAIC,EAAIC,EACZC,EAAaC,EAAaC,EAAaC,EAEvCtB,EAAO9P,EAhNgB+J,EACvBsH,EACAC,EAuLAC,EAAU3R,KAAKiQ,QAAU,EACzBM,EAAiBvQ,KAAKuQ,eACtBqB,EAAU5R,KAAKyO,QAEfF,EAAYvO,KAAKuO,UACjBc,EAAad,EAAU,GACvBe,EAAaf,EAAU,GACvBgB,EAAahB,EAAU,GACvBiB,EAAajB,EAAU,GAEvBsD,EAAa7R,KAAK2O,yBAAyBb,GAC3CgE,EAAcD,EAAW,GACzBE,EAAcF,EAAW,GACzBG,EAAcH,EAAW,GACzBI,EAAcJ,EAAW,GAEzBK,EAAa,IAAIC,WAAWxB,GAC5ByB,EAAc,IAAID,WAAWD,EAAWjK,QAOxCoK,EAAWrS,KAAKyQ,uBAEbzI,EAASkK,EAAWjK,QAAQ,CAcjC,IAbAoJ,EAAcgB,EAASH,EAAWlK,IAClCsJ,EAAce,EAASH,EAAWlK,EAAS,IAC3CuJ,EAAcc,EAASH,EAAWlK,EAAS,IAC3CwJ,EAAca,EAASH,EAAWlK,EAAS,IAE3CiJ,EAAKI,EAAcd,EAAe,GAClCW,EAAKM,EAAcjB,EAAe,GAClCY,EAAKI,EAAchB,EAAe,GAClCa,EAAKE,EAAcf,EAAe,GAElCL,EAAQ,EAGH9P,EAAI,EAAGA,EAAIuR,EAASvR,IACvByQ,EAAKxB,EAAW4B,IAAO,IAAM3B,EAAY4B,GAAM,GAAM,KAAQ3B,EAAY4B,GAAM,EAAK,KAAQ3B,EAAgB,IAAL4B,GAAab,EAAeL,GACnIY,EAAKzB,EAAW6B,IAAO,IAAM5B,EAAY6B,GAAM,GAAM,KAAQ5B,EAAY6B,GAAM,EAAK,KAAQ5B,EAAgB,IAALyB,GAAaV,EAAeL,EAAQ,GAC3Ia,EAAK1B,EAAW8B,IAAO,IAAM7B,EAAY8B,GAAM,GAAM,KAAQ7B,EAAY0B,GAAM,EAAK,KAAQzB,EAAgB,IAAL0B,GAAaX,EAAeL,EAAQ,GAC3Ic,EAAK3B,EAAW+B,IAAO,IAAM9B,EAAY2B,GAAM,GAAM,KAAQ1B,EAAY2B,GAAM,EAAK,KAAQ1B,EAAgB,IAAL2B,GAAaZ,EAAeL,EAAQ,GAE3Ie,EAAKJ,EACLK,EAAKJ,EACLK,EAAKJ,EACLK,EAAKJ,EAELd,GAAgB,EAIlBW,EAAOe,EAAQX,IAAO,KAAO,GAAOW,EAASV,GAAM,GAAM,MAAS,GAAOU,EAAST,GAAM,EAAK,MAAS,EAAKS,EAAa,IAALR,GAAcb,EAAeL,GAChJY,EAAOc,EAAQV,IAAO,KAAO,GAAOU,EAAST,GAAM,GAAM,MAAS,GAAOS,EAASR,GAAM,EAAK,MAAS,EAAKQ,EAAa,IAALX,GAAcV,EAAeL,EAAQ,GACxJa,EAAOa,EAAQT,IAAO,KAAO,GAAOS,EAASR,GAAM,GAAM,MAAS,GAAOQ,EAASX,GAAM,EAAK,MAAS,EAAKW,EAAa,IAALV,GAAcX,EAAeL,EAAQ,GACxJc,EAAOY,EAAQR,IAAO,KAAO,GAAOQ,EAASX,GAAM,GAAM,MAAS,GAAOW,EAASV,GAAM,EAAK,MAAS,EAAKU,EAAa,IAALT,GAAcZ,EAAeL,EAAQ,GACxJA,GAAgB,EAGhBkC,EAAYpK,GAAUqK,EAASxB,EAAKiB,GACpCM,EAAYpK,EAAS,GAAKqK,EAASrB,EAAKe,GACxCK,EAAYpK,EAAS,GAAKqK,EAAStB,EAAKiB,GACxCI,EAAYpK,EAAS,GAAKqK,EAASvB,EAAKmB,GAGxCH,EAAcT,EACdU,EAAcT,EACdU,EAAcT,EACdU,EAAcT,EAEdxJ,GAAkB,EAGpB,OAAO4I,GArQoBzG,EAqQeiI,EAAYjI,OApQlDsH,EAActH,EAAOT,YACrBgI,EAAeD,GAAgB,IAAI3C,SAAS3E,GAASmI,SAASb,EAAc,IAEzEtH,EAAOoI,MAAM,EAAGd,EAAcC,GAE9BvH,GA+PyDiI,EAAYjI,Q,EAG9EqI,QAAA,WACExS,KAAK2B,SAAM8Q,EACXzS,KAAKiQ,aAAUwC,EACfzS,KAAKqQ,YAASoC,EAEdzS,KAAKwO,UAAOiE,EACZzS,KAAKyO,aAAUgE,EACfzS,KAAKqO,YAASoE,EACdzS,KAAKuO,eAAYkE,EACjBzS,KAAKsQ,iBAAcmC,EACnBzS,KAAKuQ,oBAAiBkC,EAEtBzS,KAAKoO,UAAOqE,G,iCCzQVzP,EAASC,cAETyP,E,WACJ,WAAaC,EAAUC,EAAvB,GAAmE,kBAAJ,GAAI,GAAlChC,0BAAkC,SAMjE,GALA5Q,KAAK6S,YAAa,EAClB7S,KAAK2S,SAAWA,EAChB3S,KAAK4S,OAASA,EACd5S,KAAK4Q,mBAAqBA,EAEtBA,EACF,IACE,IAAMkC,EAAgB9P,EAAO+P,OACzBD,IACF9S,KAAK4N,OAASkF,EAAclF,QAAUkF,EAAcE,cAEtD,MAAOpP,IAEX5D,KAAKiT,kBAAoBjT,KAAK4N,O,2BAGhCsF,OAAA,WACE,OAAQlT,KAAKiT,kBAAoBjT,KAAK4S,OAAOO,mB,EAG/CpF,QAAA,SAAShG,EAAMpG,EAAKkM,EAAIuF,GAAU,WAChC,GAAIpT,KAAKiT,kBAAoBjT,KAAK4S,OAAOO,kBAAmB,CACtDnT,KAAK6S,aACPhP,IAAOrB,IAAI,kBACXxC,KAAK6S,YAAa,GAEpB,IAAIQ,EAAYrT,KAAKqT,UAChBA,IACHrT,KAAKqT,UAAYA,EAAY,IAAIlF,GAGnCkF,EAAUpF,UAAUtM,GACpByR,EAASC,EAAUtF,QAAQhG,EAAM,EAAG8F,EAAI7N,KAAK4Q,yBACxC,CACD5Q,KAAK6S,aACPhP,IAAOrB,IAAI,yBACXxC,KAAK6S,YAAa,GAEpB,IAAMjF,EAAS5N,KAAK4N,OAChB5N,KAAK2B,MAAQA,IACf3B,KAAK2B,IAAMA,EACX3B,KAAKsT,WAAa,IAAItF,EAAWJ,EAAQjM,IAG3C3B,KAAKsT,WAAWrF,YACbsF,MAAK,SAACC,GAEQ,IAAI7F,EAAUC,EAAQC,GAC5BE,QAAQhG,EAAMyL,GAClBC,OAAM,SAACC,GACN,EAAKC,iBAAiBD,EAAK3L,EAAMpG,EAAKkM,EAAIuF,MAE3CG,MAAK,SAACK,GACLR,EAASQ,SAGdH,OAAM,SAACC,GACN,EAAKC,iBAAiBD,EAAK3L,EAAMpG,EAAKkM,EAAIuF,Q,EAKlDO,iBAAA,SAAkBD,EAAK3L,EAAMpG,EAAKkM,EAAIuF,GAChCpT,KAAK4S,OAAOO,mBACdtP,IAAOrB,IAAI,0CACXxC,KAAKiT,kBAAmB,EACxBjT,KAAK6S,YAAa,EAClB7S,KAAK+N,QAAQhG,EAAMpG,EAAKkM,EAAIuF,KAE5BvP,IAAOlB,MAAP,sBAAmC+Q,EAAIG,SACvC7T,KAAK2S,SAASmB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAW0M,YAAaC,QAAS1M,IAAa2M,mBAAoBC,OAAO,EAAMC,OAAQV,EAAIG,Y,EAI1IrB,QAAA,WACE,IAAIa,EAAYrT,KAAKqT,UACjBA,IACFA,EAAUb,UACVxS,KAAKqT,eAAYZ,I,KAKRC,O,6BCjGf,IAAI2B,EAAMvT,OAAOkB,UAAUC,eACvBqS,EAAS,IASb,SAASC,KA4BT,SAASC,EAAGC,EAAIC,EAASC,GACvB3U,KAAKyU,GAAKA,EACVzU,KAAK0U,QAAUA,EACf1U,KAAK2U,KAAOA,IAAQ,EActB,SAASC,EAAYC,EAASC,EAAOL,EAAIC,EAASC,GAChD,GAAkB,mBAAPF,EACT,MAAM,IAAIM,UAAU,mCAGtB,IAAIC,EAAW,IAAIR,EAAGC,EAAIC,GAAWG,EAASF,GAC1CM,EAAMX,EAASA,EAASQ,EAAQA,EAMpC,OAJKD,EAAQK,QAAQD,GACXJ,EAAQK,QAAQD,GAAKR,GAC1BI,EAAQK,QAAQD,GAAO,CAACJ,EAAQK,QAAQD,GAAMD,GADhBH,EAAQK,QAAQD,GAAK5L,KAAK2L,IADlCH,EAAQK,QAAQD,GAAOD,EAAUH,EAAQM,gBAI7DN,EAUT,SAASO,EAAWP,EAASI,GACI,KAAzBJ,EAAQM,aAAoBN,EAAQK,QAAU,IAAIX,SAC5CM,EAAQK,QAAQD,GAU9B,SAASI,IACPrV,KAAKkV,QAAU,IAAIX,EACnBvU,KAAKmV,aAAe,EAxElBrU,OAAOY,SACT6S,EAAOvS,UAAYlB,OAAOY,OAAO,OAM5B,IAAI6S,GAASe,YAAWhB,GAAS,IA2ExCe,EAAarT,UAAUuT,WAAa,WAClC,IACIC,EACA7U,EAFA8U,EAAQ,GAIZ,GAA0B,IAAtBzV,KAAKmV,aAAoB,OAAOM,EAEpC,IAAK9U,KAAS6U,EAASxV,KAAKkV,QACtBb,EAAI9T,KAAKiV,EAAQ7U,IAAO8U,EAAMpM,KAAKiL,EAAS3T,EAAK4R,MAAM,GAAK5R,GAGlE,OAAIG,OAAO4U,sBACFD,EAAME,OAAO7U,OAAO4U,sBAAsBF,IAG5CC,GAUTJ,EAAarT,UAAU4T,UAAY,SAAmBd,GACpD,IAAIG,EAAMX,EAASA,EAASQ,EAAQA,EAChCe,EAAW7V,KAAKkV,QAAQD,GAE5B,IAAKY,EAAU,MAAO,GACtB,GAAIA,EAASpB,GAAI,MAAO,CAACoB,EAASpB,IAElC,IAAK,IAAIrU,EAAI,EAAGC,EAAIwV,EAAS5N,OAAQ6N,EAAK,IAAIC,MAAM1V,GAAID,EAAIC,EAAGD,IAC7D0V,EAAG1V,GAAKyV,EAASzV,GAAGqU,GAGtB,OAAOqB,GAUTT,EAAarT,UAAUgU,cAAgB,SAAuBlB,GAC5D,IAAIG,EAAMX,EAASA,EAASQ,EAAQA,EAChCc,EAAY5V,KAAKkV,QAAQD,GAE7B,OAAKW,EACDA,EAAUnB,GAAW,EAClBmB,EAAU3N,OAFM,GAYzBoN,EAAarT,UAAUiU,KAAO,SAAcnB,EAAOoB,EAAIC,EAAIC,EAAIC,EAAIC,GACjE,IAAIrB,EAAMX,EAASA,EAASQ,EAAQA,EAEpC,IAAK9U,KAAKkV,QAAQD,GAAM,OAAO,EAE/B,IAEI5R,EACAjD,EAHAwV,EAAY5V,KAAKkV,QAAQD,GACzB9J,EAAMoL,UAAUtO,OAIpB,GAAI2N,EAAUnB,GAAI,CAGhB,OAFImB,EAAUjB,MAAM3U,KAAKwW,eAAe1B,EAAOc,EAAUnB,QAAIhC,GAAW,GAEhEtH,GACN,KAAK,EAAG,OAAOyK,EAAUnB,GAAGlU,KAAKqV,EAAUlB,UAAU,EACrD,KAAK,EAAG,OAAOkB,EAAUnB,GAAGlU,KAAKqV,EAAUlB,QAASwB,IAAK,EACzD,KAAK,EAAG,OAAON,EAAUnB,GAAGlU,KAAKqV,EAAUlB,QAASwB,EAAIC,IAAK,EAC7D,KAAK,EAAG,OAAOP,EAAUnB,GAAGlU,KAAKqV,EAAUlB,QAASwB,EAAIC,EAAIC,IAAK,EACjE,KAAK,EAAG,OAAOR,EAAUnB,GAAGlU,KAAKqV,EAAUlB,QAASwB,EAAIC,EAAIC,EAAIC,IAAK,EACrE,KAAK,EAAG,OAAOT,EAAUnB,GAAGlU,KAAKqV,EAAUlB,QAASwB,EAAIC,EAAIC,EAAIC,EAAIC,IAAK,EAG3E,IAAKlW,EAAI,EAAGiD,EAAO,IAAI0S,MAAM5K,EAAK,GAAI/K,EAAI+K,EAAK/K,IAC7CiD,EAAKjD,EAAI,GAAKmW,UAAUnW,GAG1BwV,EAAUnB,GAAGnR,MAAMsS,EAAUlB,QAASrR,OACjC,CACL,IACIoT,EADAxO,EAAS2N,EAAU3N,OAGvB,IAAK7H,EAAI,EAAGA,EAAI6H,EAAQ7H,IAGtB,OAFIwV,EAAUxV,GAAGuU,MAAM3U,KAAKwW,eAAe1B,EAAOc,EAAUxV,GAAGqU,QAAIhC,GAAW,GAEtEtH,GACN,KAAK,EAAGyK,EAAUxV,GAAGqU,GAAGlU,KAAKqV,EAAUxV,GAAGsU,SAAU,MACpD,KAAK,EAAGkB,EAAUxV,GAAGqU,GAAGlU,KAAKqV,EAAUxV,GAAGsU,QAASwB,GAAK,MACxD,KAAK,EAAGN,EAAUxV,GAAGqU,GAAGlU,KAAKqV,EAAUxV,GAAGsU,QAASwB,EAAIC,GAAK,MAC5D,KAAK,EAAGP,EAAUxV,GAAGqU,GAAGlU,KAAKqV,EAAUxV,GAAGsU,QAASwB,EAAIC,EAAIC,GAAK,MAChE,QACE,IAAK/S,EAAM,IAAKoT,EAAI,EAAGpT,EAAO,IAAI0S,MAAM5K,EAAK,GAAIsL,EAAItL,EAAKsL,IACxDpT,EAAKoT,EAAI,GAAKF,UAAUE,GAG1Bb,EAAUxV,GAAGqU,GAAGnR,MAAMsS,EAAUxV,GAAGsU,QAASrR,IAKpD,OAAO,GAYTgS,EAAarT,UAAU0U,GAAK,SAAY5B,EAAOL,EAAIC,GACjD,OAAOE,EAAY5U,KAAM8U,EAAOL,EAAIC,GAAS,IAY/CW,EAAarT,UAAU2S,KAAO,SAAcG,EAAOL,EAAIC,GACrD,OAAOE,EAAY5U,KAAM8U,EAAOL,EAAIC,GAAS,IAa/CW,EAAarT,UAAUwU,eAAiB,SAAwB1B,EAAOL,EAAIC,EAASC,GAClF,IAAIM,EAAMX,EAASA,EAASQ,EAAQA,EAEpC,IAAK9U,KAAKkV,QAAQD,GAAM,OAAOjV,KAC/B,IAAKyU,EAEH,OADAW,EAAWpV,KAAMiV,GACVjV,KAGT,IAAI4V,EAAY5V,KAAKkV,QAAQD,GAE7B,GAAIW,EAAUnB,GAEVmB,EAAUnB,KAAOA,GACfE,IAAQiB,EAAUjB,MAClBD,GAAWkB,EAAUlB,UAAYA,GAEnCU,EAAWpV,KAAMiV,OAEd,CACL,IAAK,IAAI7U,EAAI,EAAGoV,EAAS,GAAIvN,EAAS2N,EAAU3N,OAAQ7H,EAAI6H,EAAQ7H,KAEhEwV,EAAUxV,GAAGqU,KAAOA,GACnBE,IAASiB,EAAUxV,GAAGuU,MACtBD,GAAWkB,EAAUxV,GAAGsU,UAAYA,IAErCc,EAAOnM,KAAKuM,EAAUxV,IAOtBoV,EAAOvN,OAAQjI,KAAKkV,QAAQD,GAAyB,IAAlBO,EAAOvN,OAAeuN,EAAO,GAAKA,EACpEJ,EAAWpV,KAAMiV,GAGxB,OAAOjV,MAUTqV,EAAarT,UAAU2U,mBAAqB,SAA4B7B,GACtE,IAAIG,EAUJ,OARIH,GACFG,EAAMX,EAASA,EAASQ,EAAQA,EAC5B9U,KAAKkV,QAAQD,IAAMG,EAAWpV,KAAMiV,KAExCjV,KAAKkV,QAAU,IAAIX,EACnBvU,KAAKmV,aAAe,GAGfnV,MAMTqV,EAAarT,UAAU4U,IAAMvB,EAAarT,UAAUwU,eACpDnB,EAAarT,UAAU4S,YAAcS,EAAarT,UAAU0U,GAK5DrB,EAAawB,SAAWvC,EAKxBe,EAAaA,aAAeA,EAM1BxV,EAAOD,QAAUyV,G,2ECvMZ,SAASyB,EAAiB/O,EAAMC,GACrC,OAAwB,MAAjBD,EAAKC,IAAkD,MAAV,IAAnBD,EAAKC,EAAS,IAG1C,SAAS+O,EAAiBhP,EAAMC,GACrC,OAA2B,EAAnBD,EAAKC,EAAS,GAAY,EAAI,EAGjC,SAASgP,EAAoBjP,EAAMC,GACxC,OAA4B,EAAnBD,EAAKC,EAAS,KAAc,GAClCD,EAAKC,EAAS,IAAM,GACA,IAAnBD,EAAKC,EAAS,MAAe,EAG5B,SAASF,EAAUC,EAAMC,GAI9B,SAAIA,EAAS,EAAID,EAAKE,QAAU6O,EAAgB/O,EAAMC,IAOjD,SAASiP,EAAOlP,EAAMC,GAG3B,GAAIF,EAASC,EAAMC,GAAS,CAE1B,IAAIkP,EAAeH,EAAgBhP,EAAMC,GACzC,GAAIA,EAASkP,GAAgBnP,EAAKE,OAChC,OAAO,EAGT,IAAIkP,EAAcH,EAAmBjP,EAAMC,GAC3C,GAAImP,GAAeD,EACjB,OAAO,EAGT,IAAIE,EAAYpP,EAASmP,EACzB,GAAIC,IAAcrP,EAAKE,QAAWmP,EAAY,EAAIrP,EAAKE,QAAU6O,EAAgB/O,EAAMqP,GACrF,OAAO,EAGX,OAAO,EAGF,SAASC,EAAiBC,EAAO3E,EAAU5K,EAAMC,EAAQuP,GAC9D,IAAKD,EAAME,WAAY,CACrB,IAAI5E,EA9KD,SAAyBD,EAAU5K,EAAMC,EAAQuP,GACtD,IAAIE,EACFC,EACAC,EACAC,EACAhF,EACAiF,EAAYC,UAAUD,UAAUE,cAChCC,EAAgBT,EAChBU,EAAqB,CACnB,KAAO,MACP,KAAO,KACP,MAAO,KACP,KAAO,MACP,KAAO,KACP,MAAO,IACP,MAIJ,GAFAR,EAAqD,IAAf,IAAnB1P,EAAKC,EAAS,MAAe,MAChD0P,GAA0C,GAAnB3P,EAAKC,EAAS,MAAe,GAC3BiQ,EAAmBhQ,OAAS,GAsGrD,OAlGA2P,GAAwC,EAAnB7P,EAAKC,EAAS,KAAc,EAEjD4P,IAAyC,IAAnB7P,EAAKC,EAAS,MAAe,EACnDnE,IAAOrB,IAAP,kBAA6B+U,EAA7B,mBAA0DE,EAA1D,mBAA2FC,EAA3F,IAAiHO,EAAmBP,GAApI,qBAA4KE,GAExK,WAAWM,KAAKL,GACdH,GAAsB,GACxBD,EAAiB,EACjB7E,EAAS,IAAImD,MAAM,GAInB4B,EAA8BD,EAAqB,IAEnDD,EAAiB,EACjB7E,EAAS,IAAImD,MAAM,GACnB4B,EAA8BD,IAGW,IAAlCG,EAAU/M,QAAQ,YAC3B2M,EAAiB,EACjB7E,EAAS,IAAImD,MAAM,GACnB4B,EAA8BD,IAK9BD,EAAiB,EACjB7E,EAAS,IAAImD,MAAM,GAEdwB,KAAsD,IAAtCA,EAAWzM,QAAQ,gBACA,IAArCyM,EAAWzM,QAAQ,gBAClByM,GAAcG,GAAsB,EAItCC,EAA8BD,EAAqB,IAI/CH,IAAmD,IAArCA,EAAWzM,QAAQ,eAAyB4M,GAAsB,GAA0B,IAArBE,GACnF,WAAWM,KAAKL,MAClBN,GAAmC,IAArBK,KAChBH,EAAiB,EACjB7E,EAAS,IAAImD,MAAM,IAErB4B,EAA8BD,IAqClC9E,EAAO,GAAK6E,GAAkB,EAE9B7E,EAAO,KAA4B,GAArB8E,IAA8B,EAC5C9E,EAAO,KAA4B,EAArB8E,IAA8B,EAE5C9E,EAAO,IAAMgF,GAAoB,EACV,IAAnBH,IAEF7E,EAAO,KAAqC,GAA9B+E,IAAuC,EACrD/E,EAAO,IAAoC,EAA9B+E,IAAuC,EAGpD/E,EAAO,IAAM,EACbA,EAAO,GAAK,GAEP,CAAEA,OAAQA,EAAQ4E,WAAYS,EAAmBP,GAAqBS,aAAcP,EAAkBQ,MAAQ,WAAaX,EAAiBO,cAAeA,GArGhKrF,EAASmB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAW0M,YAAaC,QAAS1M,IAAa8Q,mBAAoBlE,OAAO,EAAMC,OAAQ,+BAA+BsD,IA0J/IY,CAAe3F,EAAU5K,EAAMC,EAAQuP,GACpDD,EAAM1E,OAASA,EAAOA,OACtB0E,EAAME,WAAa5E,EAAO4E,WAC1BF,EAAMa,aAAevF,EAAOuF,aAC5Bb,EAAMc,MAAQxF,EAAOwF,MACrBd,EAAMU,cAAgBpF,EAAOoF,cAC7BnU,IAAOrB,IAAP,gBAA2B8U,EAAMc,MAAjC,SAA+CxF,EAAO4E,WAAtD,eAA+E5E,EAAOuF,eAInF,SAASI,EAAkBf,GAChC,OAAO,OAAeA,EAsBjB,SAASgB,EAAalB,EAAOvP,EAAMC,EAAQyQ,EAAKC,GACrD,IACIC,EArBC,SAA2B5Q,EAAMC,EAAQyQ,EAAKC,EAAYE,GAC/D,IAAI1B,EAAcC,EACdlP,EAASF,EAAKE,OAQlB,GALAiP,EAAeH,EAAgBhP,EAAMC,GAErCmP,EAAcH,EAAmBjP,EAAMC,IACvCmP,GAAeD,GAEI,GAAQlP,EAASkP,EAAeC,GAAgBlP,EAGjE,MAAO,CAAEiP,eAAcC,cAAa0B,MAF5BJ,EAAMC,EAAaE,GAUhBE,CAAiB/Q,EAAMC,EAAQyQ,EAAKC,EAD7BH,EAAiBjB,EAAME,aAE3C,GAAImB,EAAQ,CACV,IAAIE,EAAQF,EAAOE,MACf3B,EAAeyB,EAAOzB,aACtBC,EAAcwB,EAAOxB,YAGrB4B,EAAY,CACdC,KAAMjR,EAAKO,SAASN,EAASkP,EAAclP,EAASkP,EAAeC,GACnEsB,IAAKI,EACLI,IAAKJ,GAIP,OADAvB,EAAM4B,QAAQ7P,KAAK0P,GACZ,CAAEI,OAAQJ,EAAW9Q,OAAQkP,EAAcD,I,WChJvCkC,E,WAlFb,WAAazG,EAAU0G,EAASzG,GAC9B5S,KAAK2S,SAAWA,EAChB3S,KAAK4S,OAASA,EACd5S,KAAKqZ,QAAUA,E,2BAGjBC,iBAAA,SAAkBC,EAAahC,EAAYiC,EAAYC,GACrDzZ,KAAK0Z,YAAc,CAAEC,UAAW,aAAc7W,KAAM,QAAS8W,GAAI,EAAGC,eAAgB,EAAGC,OAAO,EAAMZ,QAAS,GAAI/N,IAAK,EAAG6M,cAAeT,EAAYkC,SAAUA,EAAUM,eAAgB,M,EAG1LC,eAAA,a,EAGO/C,MAAP,SAAclP,GACZ,IAAKA,EACH,OAAO,EAUT,IAHA,IACIC,GADYH,IAAIM,WAAWJ,EAAM,IAAM,IACtBE,OAEZA,EAASF,EAAKE,OAAQD,EAASC,EAAQD,IAC9C,GAAIiS,EAAWlS,EAAMC,GAEnB,OADAnE,IAAOrB,IAAI,2BACJ,EAGX,OAAO,G,EAIT0X,OAAA,SAAQnS,EAAMoS,EAAYC,EAAYC,GAYpC,IAXA,IAAI/C,EAAQtX,KAAK0Z,YACbzQ,EAAUpB,IAAIM,WAAWJ,EAAM,IAAM,GACrC8B,EAAYhC,IAAIW,aAAaS,GAC7BwP,EAAM,YAAgB5O,GAAyB,GAAZA,EAA8B,IAAbsQ,EACpDzB,EAAa,EACbG,EAAQJ,EACRxQ,EAASF,EAAKE,OACdD,EAASiB,EAAQhB,OAEjBqS,EAAa,CAAC,CAAE7B,IAAKI,EAAOI,IAAKJ,EAAO9Q,KAAMkB,IAE3CjB,EAASC,EAAS,GACvB,GAAIgS,EAAclS,EAAMC,IAAYA,EAAS,EAAKC,EAAQ,CACxDgS,EAAqB3C,EAAOtX,KAAK2S,SAAU5K,EAAMC,EAAQsP,EAAMU,eAC/D,IAAIrP,EAAQsR,EAAiB3C,EAAOvP,EAAMC,EAAQyQ,EAAKC,GACvD,IAAI/P,EAIG,CACL9E,IAAOrB,IAAI,6BACX,MALAwF,GAAUW,EAAMV,OAChB4Q,EAAQlQ,EAAMwQ,OAAOV,IACrBC,SAKO7Q,IAAIC,SAASC,EAAMC,IAC5BiB,EAAUpB,IAAIM,WAAWJ,EAAMC,GAC/BsS,EAAWjR,KAAK,CAAEoP,IAAKI,EAAOI,IAAKJ,EAAO9Q,KAAMkB,IAChDjB,GAAUiB,EAAQhB,QAGlBD,IAIJhI,KAAKqZ,QAAQkB,MAAMjD,EACjB,CAAE4B,QAAS,IACX,CAAEA,QAASoB,EAAYP,eAAgB,KACvC,CAAEb,QAAS,IACXiB,EACAC,EACAC,I,EAGJ7H,QAAA,a,aClFIgI,EAAY,CAEhBC,YAAa,CACX,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3D,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,KAExDC,gBAAiB,CAAC,MAAO,KAAO,KAAO,MAAO,KAAO,KAAO,MAAO,KAAO,KAE1EC,oBAAqB,CAEnB,CACE,EACA,GACA,IACA,IAGF,CACE,EACA,EACA,EACA,GAGF,CACE,EACA,GACA,IACA,IAGF,CACE,EACA,IACA,IACA,KAIJC,YAAa,CACX,EACA,EACA,EACA,GAGFpC,YAAa,SAAUlB,EAAOvP,EAAMC,EAAQyQ,EAAKC,GAE/C,KAAI1Q,EAAS,GAAKD,EAAKE,QAAvB,CAIA,IAAI0Q,EAAS3Y,KAAK6a,YAAY9S,EAAMC,GACpC,GAAI2Q,GAAU3Q,EAAS2Q,EAAOxB,aAAepP,EAAKE,OAAQ,CACxD,IACI4Q,EAAQJ,EAAMC,GAD2B,IAAzBC,EAAOmC,gBAA0BnC,EAAOoC,YAExD5B,EAAS,CAAEH,KAAMjR,EAAKO,SAASN,EAAQA,EAAS2Q,EAAOxB,aAAcsB,IAAKI,EAAOI,IAAKJ,GAO1F,OALAvB,EAAM1E,OAAS,GACf0E,EAAMa,aAAeQ,EAAOR,aAC5Bb,EAAME,WAAamB,EAAOoC,WAC1BzD,EAAM4B,QAAQ7P,KAAK8P,GAEZ,CAAEA,SAAQlR,OAAQ0Q,EAAOxB,gBAMpC0D,YAAa,SAAU9S,EAAMC,GAC3B,IAAIgT,EAAWjT,EAAKC,EAAS,IAAM,EAAK,EACpCiT,EAAWlT,EAAKC,EAAS,IAAM,EAAK,EACpCkT,EAAWnT,EAAKC,EAAS,IAAM,EAAK,GACpCmT,EAAWpT,EAAKC,EAAS,IAAM,EAAK,EACpCoT,EAAWrT,EAAKC,EAAS,IAAM,EAAK,EACxC,GAAgB,IAAZgT,GAA6B,IAAZE,GAA6B,KAAZA,GAA8B,IAAZC,EAAe,CACrE,IAAIE,EAA+B,IAAZL,EAAiB,EAAIC,EAAwB,IAAZA,EAAgB,EAAI,EACxEK,EAAuE,IAA7Dd,EAAUC,YAA+B,GAAnBY,EAAwBH,EAAU,GAClEK,EAAkC,IAAZP,EAAgB,EAAgB,IAAZA,EAAgB,EAAI,EAC9DD,EAAaP,EAAUE,gBAAsC,EAAtBa,EAA0BJ,GACjEhD,EAAepQ,EAAKC,EAAS,IAAM,GAAM,EAAI,EAAI,EACjDwT,EAAoBhB,EAAUG,oBAAoBK,GAASC,GAC3DQ,EAAcjB,EAAUI,YAAYK,GACpCH,EAAsC,EAApBU,EAAwBC,EAG9C,MAAO,CAAEV,aAAY5C,eAAchB,YAFjBuE,SAASF,EAAoBF,EAAUP,EAAaK,EAAS,IAAMK,EAErCX,qBAMpDhE,gBAAiB,SAAU/O,EAAMC,GAC/B,OAAwB,MAAjBD,EAAKC,IAAkD,MAAV,IAAnBD,EAAKC,EAAS,KAAqD,IAAV,EAAnBD,EAAKC,EAAS,KAGvFF,SAAU,SAAUC,EAAMC,GAIxB,SAAIA,EAAS,EAAID,EAAKE,QAAUjI,KAAK8W,gBAAgB/O,EAAMC,KAO7DiP,MAAO,SAAUlP,EAAMC,GAGrB,GAAIA,EAAS,EAAID,EAAKE,QAAUjI,KAAK8W,gBAAgB/O,EAAMC,GAAS,CAElE,IAEI2Q,EAAS3Y,KAAK6a,YAAY9S,EAAMC,GAChCmP,EAHe,EAIfwB,GAAUA,EAAOxB,cACnBA,EAAcwB,EAAOxB,aAGvB,IAAIC,EAAYpP,EAASmP,EACzB,GAAIC,IAAcrP,EAAKE,QAAWmP,EAAY,EAAIrP,EAAKE,QAAUjI,KAAK8W,gBAAgB/O,EAAMqP,GAC1F,OAAO,EAGX,OAAO,IAIIoD,ICyKAmB,E,WA1Sb,WAAa5T,GACX/H,KAAK+H,KAAOA,EAEZ/H,KAAK4b,eAAiB7T,EAAK2B,WAE3B1J,KAAK0Q,KAAO,EAEZ1Q,KAAK6b,cAAgB,E,2BAIvBC,SAAA,WACE,IACE/T,EAAO/H,KAAK+H,KACZ6T,EAAiB5b,KAAK4b,eACtBG,EAAWhU,EAAK2B,WAAakS,EAC7BI,EAAe,IAAIrS,WAAW,GAC9BsS,EAAiBnS,KAAKoS,IAAI,EAAGN,GAC/B,GAAuB,IAAnBK,EACF,MAAM,IAAI3P,MAAM,sBAGlB0P,EAAaG,IAAIpU,EAAKO,SAASyT,EAAUA,EAAWE,IACpDjc,KAAK0Q,KAAO,IAAI5B,SAASkN,EAAa7R,QAAQ6E,UAAU,GAExDhP,KAAK6b,cAAiC,EAAjBI,EACrBjc,KAAK4b,gBAAkBK,G,EAIzBG,SAAA,SAAUC,GACR,IAAIC,EACAtc,KAAK6b,cAAgBQ,GACvBrc,KAAK0Q,OAAS2L,EACdrc,KAAK6b,eAAiBQ,IAEtBA,GAASrc,KAAK6b,cAEdQ,IADAC,EAAYD,GAAS,IACE,EACvBrc,KAAK4b,gBAAkBU,EACvBtc,KAAK8b,WACL9b,KAAK0Q,OAAS2L,EACdrc,KAAK6b,eAAiBQ,I,EAK1BE,SAAA,SAAUhU,GACR,IACEiU,EAAO1S,KAAKoS,IAAIlc,KAAK6b,cAAetT,GACpCkU,EAAOzc,KAAK0Q,OAAU,GAAK8L,EAa7B,OAZIjU,EAAO,IACT1E,IAAOlB,MAAM,2CAGf3C,KAAK6b,eAAiBW,EAClBxc,KAAK6b,cAAgB,EACvB7b,KAAK0Q,OAAS8L,EACLxc,KAAK4b,eAAiB,GAC/B5b,KAAK8b,YAGPU,EAAOjU,EAAOiU,GACH,GAAKxc,KAAK6b,cACZY,GAAQD,EAAOxc,KAAKuc,SAASC,GAE7BC,G,EAKXC,OAAA,WACE,IAAIC,EACJ,IAAKA,EAAmB,EAAGA,EAAmB3c,KAAK6b,gBAAiBc,EAClE,GAAwD,IAAnD3c,KAAK0Q,KAAQ,aAAeiM,GAI/B,OAFA3c,KAAK0Q,OAASiM,EACd3c,KAAK6b,eAAiBc,EACfA,EAKX,OADA3c,KAAK8b,WACEa,EAAmB3c,KAAK0c,U,EAIjCE,QAAA,WACE5c,KAAKoc,SAAS,EAAIpc,KAAK0c,W,EAIzBG,OAAA,WACE7c,KAAKoc,SAAS,EAAIpc,KAAK0c,W,EAIzBI,QAAA,WACE,IAAIC,EAAM/c,KAAK0c,SACf,OAAO1c,KAAKuc,SAASQ,EAAM,GAAK,G,EAIlCC,OAAA,WACE,IAAIP,EAAOzc,KAAK8c,UAChB,OAAI,EAAOL,EAED,EAAIA,IAAU,GAEd,GAAKA,IAAS,I,EAM1BQ,YAAA,WACE,OAA4B,IAArBjd,KAAKuc,SAAS,I,EAIvBW,UAAA,WACE,OAAOld,KAAKuc,SAAS,I,EAIvBY,WAAA,WACE,OAAOnd,KAAKuc,SAAS,K,EAGvBa,SAAA,WACE,OAAOpd,KAAKuc,SAAS,K,EAUvBc,gBAAA,SAAiBhB,GACf,IAGE5F,EAFA6G,EAAY,EACZC,EAAY,EAGd,IAAK9G,EAAI,EAAGA,EAAI4F,EAAO5F,IACH,IAAd8G,IAEFA,GAAaD,EADAtd,KAAKgd,SACoB,KAAO,KAE/CM,EAA2B,IAAdC,EAAmBD,EAAYC,G,EAahDC,QAAA,WACE,IAKEC,EACAC,EAAgCC,EAChCC,EACAC,EACAC,EACA1d,EATA2d,EAAsB,EACtBC,EAAuB,EACvBC,EAAqB,EACrBC,EAAwB,EAOxBhB,EAAYld,KAAKkd,UAAUtb,KAAK5B,MAChCuc,EAAWvc,KAAKuc,SAAS3a,KAAK5B,MAC9B8c,EAAU9c,KAAK8c,QAAQlb,KAAK5B,MAC5Bid,EAAcjd,KAAKid,YAAYrb,KAAK5B,MACpCoc,EAAWpc,KAAKoc,SAASxa,KAAK5B,MAC9B6c,EAAS7c,KAAK6c,OAAOjb,KAAK5B,MAC1B4c,EAAU5c,KAAK4c,QAAQhb,KAAK5B,MAC5Bqd,EAAkBrd,KAAKqd,gBAAgBzb,KAAK5B,MAS9C,GAPAkd,IACAO,EAAaP,IACGX,EAAS,GACzBH,EAAS,GACEc,IACXN,IAEmB,MAAfa,GACe,MAAfA,GACe,MAAfA,GACe,MAAfA,GACe,KAAfA,GACe,KAAfA,GACe,KAAfA,GACe,MAAfA,GACe,MAAfA,EAAoB,CACtB,IAAIU,EAAkBrB,IAQtB,GAPwB,IAApBqB,GACF/B,EAAS,GAGXQ,IACAA,IACAR,EAAS,GACLa,IAEF,IADAa,EAAwC,IAApBK,EAAyB,EAAI,GAC5C/d,EAAI,EAAGA,EAAI0d,EAAkB1d,IAC5B6c,KAEAI,EADEjd,EAAI,EACU,GAEA,IAM1Bwc,IACA,IAAIwB,EAAkBtB,IACtB,GAAwB,IAApBsB,EACFtB,SACK,GAAwB,IAApBsB,EAKT,IAJAhC,EAAS,GACTS,IACAA,IACAa,EAAiCZ,IAC5B1c,EAAI,EAAGA,EAAIsd,EAAgCtd,IAC9Cyc,IAGJD,IACAR,EAAS,GACTuB,EAAsBb,IACtBc,EAA4Bd,IAEH,KADzBe,EAAmBtB,EAAS,KAE1BH,EAAS,GAGXA,EAAS,GACLa,MACFc,EAAsBjB,IACtBkB,EAAuBlB,IACvBmB,EAAqBnB,IACrBoB,EAAwBpB,KAE1B,IAAIuB,EAAa,CAAC,EAAG,GACrB,GAAIpB,KAEEA,IAGF,OADuBC,KAEvB,KAAK,EAAGmB,EAAa,CAAC,EAAG,GAAI,MAC7B,KAAK,EAAGA,EAAa,CAAC,GAAI,IAAK,MAC/B,KAAK,EAAGA,EAAa,CAAC,GAAI,IAAK,MAC/B,KAAK,EAAGA,EAAa,CAAC,GAAI,IAAK,MAC/B,KAAK,EAAGA,EAAa,CAAC,GAAI,IAAK,MAC/B,KAAK,EAAGA,EAAa,CAAC,GAAI,IAAK,MAC/B,KAAK,EAAGA,EAAa,CAAC,GAAI,IAAK,MAC/B,KAAK,EAAGA,EAAa,CAAC,GAAI,IAAK,MAC/B,KAAK,EAAGA,EAAa,CAAC,GAAI,IAAK,MAC/B,KAAK,GAAIA,EAAa,CAAC,GAAI,IAAK,MAChC,KAAK,GAAIA,EAAa,CAAC,GAAI,IAAK,MAChC,KAAK,GAAIA,EAAa,CAAC,GAAI,IAAK,MAChC,KAAK,GAAIA,EAAa,CAAC,IAAK,IAAK,MACjC,KAAK,GAAIA,EAAa,CAAC,EAAG,GAAI,MAC9B,KAAK,GAAIA,EAAa,CAAC,EAAG,GAAI,MAC9B,KAAK,GAAIA,EAAa,CAAC,EAAG,GAAI,MAC9B,KAAK,IACHA,EAAa,CAACnB,KAAe,EAAIA,IAAaA,KAAe,EAAIA,KAMvE,MAAO,CACLoB,MAAOxU,KAAKyU,KAAmC,IAA3BZ,EAAsB,GAAiC,EAAtBI,EAAiD,EAAvBC,GAC/EQ,QAAU,EAAIX,IAAqBD,EAA4B,GAAK,IAAQC,EAAmB,EAAI,IAAMI,EAAqBC,GAC9HG,WAAYA,I,EAIhBI,cAAA,WAME,OAJAze,KAAKkd,YAELld,KAAK8c,UAEE9c,KAAK8c,W,KClLD4B,E,WApHb,WAAa/L,EAAUC,EAAQ+L,EAAaC,GAC1C5e,KAAK2e,YAAcA,EACnB3e,KAAK4e,WAAaA,EAClB5e,KAAK6e,UAAY,IAAInM,IAAUC,EAAUC,EAAQ,CAAEhC,oBAAoB,I,2BAGzEkO,cAAA,SAAeC,EAAe3L,GAC5BpT,KAAK6e,UAAU9Q,QAAQgR,EAAe/e,KAAK2e,YAAYhd,IAAIwI,OAAQnK,KAAK2e,YAAY9Q,GAAG1D,OAAQiJ,I,EAIjG4L,iBAAA,SAAkB9F,EAAS+F,EAAa7L,EAAU8L,GAChD,IAAIC,EAAUjG,EAAQ+F,GAAajG,KAC/B+F,EAAgBI,EAAQ7W,SAAS,GAAI6W,EAAQlX,OAASkX,EAAQlX,OAAS,IACvEmX,EAAkBL,EAAc5U,OAAOoI,MACzCwM,EAAcM,WACdN,EAAcM,WAAaN,EAAc9W,QAEvCqX,EAAYtf,KAChBA,KAAK8e,cAAcM,GAAiB,SAAUG,GAC5CA,EAAgB,IAAI5V,WAAW4V,GAC/BJ,EAAQhD,IAAIoD,EAAe,IAEtBL,GACHI,EAAUE,kBAAkBtG,EAAS+F,EAAc,EAAG7L,O,EAK5DoM,kBAAA,SAAmBtG,EAAS+F,EAAa7L,GACvC,MAAQ6L,IAAe,CACrB,GAAIA,GAAe/F,EAAQjR,OAEzB,YADAmL,IAIF,KAAI8F,EAAQ+F,GAAajG,KAAK/Q,OAAS,IAAvC,CAIA,IAAIiX,EAAOlf,KAAK6e,UAAU3L,SAI1B,GAFAlT,KAAKgf,iBAAiB9F,EAAS+F,EAAa7L,EAAU8L,IAEjDA,EACH,U,EAMNO,oBAAA,SAAqBC,GAInB,IAHA,IAAIC,EAAiE,GAA9C7V,KAAK8V,OAAOF,EAAYzX,OAAS,IAAM,KAAY,GACtE8W,EAAgB,IAAIc,UAAUF,GAC9BG,EAAY,EACPC,EAAW,GAAIA,GAAYL,EAAYzX,OAAS,GAAI8X,GAAY,IAAKD,GAAa,GACzFf,EAAc5C,IAAIuD,EAAYpX,SAASyX,EAAUA,EAAW,IAAKD,GAGnE,OAAOf,G,EAGTiB,oBAAA,SAAqBN,EAAaH,GAChCA,EAAgB,IAAI5V,WAAW4V,GAE/B,IADA,IAAIQ,EAAW,EACND,EAAY,GAAIA,GAAaJ,EAAYzX,OAAS,GAAI6X,GAAa,IAAKC,GAAY,GAC3FL,EAAYvD,IAAIoD,EAAcjX,SAASyX,EAAUA,EAAW,IAAKD,GAGnE,OAAOJ,G,EAGTO,iBAAA,SAAkB/G,EAAS+F,EAAaiB,EAAW9M,EAAU+L,EAASD,GACpE,IAAIQ,EAAc1f,KAAK4e,WAAWO,EAAQpX,MACtCgX,EAAgB/e,KAAKyf,oBAAoBC,GACzCJ,EAAYtf,KAEhBA,KAAK8e,cAAcC,EAAc5U,QAAQ,SAAUoV,GACjDJ,EAAQpX,KAAOuX,EAAUU,oBAAoBN,EAAaH,GAErDL,GACHI,EAAUa,kBAAkBjH,EAAS+F,EAAaiB,EAAY,EAAG9M,O,EAKvE+M,kBAAA,SAAmBjH,EAAS+F,EAAaiB,EAAW9M,GAClD,MAAQ6L,IAAeiB,EAAY,EAAG,CACpC,GAAIjB,GAAe/F,EAAQjR,OAEzB,YADAmL,IAKF,IADA,IAAIgN,EAAWlH,EAAQ+F,GAAaoB,QAE9BH,GAAaE,EAASnY,QADpBiY,IAAa,CAKnB,IAAIf,EAAUiB,EAASF,GACvB,KAAIf,EAAQpX,KAAKE,QAAU,IAAwB,IAAjBkX,EAAQrc,MAA+B,IAAjBqc,EAAQrc,MAAhE,CAIA,IAAIoc,EAAOlf,KAAK6e,UAAU3L,SAI1B,GAFAlT,KAAKigB,iBAAiB/G,EAAS+F,EAAaiB,EAAW9M,EAAU+L,EAASD,IAErEA,EACH,W,KCvFJoB,EAAuB,CAC3BC,MAAO,EACPC,MAAO,EACPC,IAAK,EACLnW,KAAM,GAgjCOoW,E,WA5iCb,WAAa/N,EAAU0G,EAASzG,EAAQ+N,GACtC3gB,KAAK2S,SAAWA,EAChB3S,KAAK4S,OAASA,EACd5S,KAAK2gB,cAAgBA,EACrB3gB,KAAKqZ,QAAUA,EACfrZ,KAAK4gB,UAAY,KACjB5gB,KAAK6gB,gBAAkB,G,2BAGzBC,eAAA,SAAgBnC,GACM,MAAfA,GAA4C,MAAnBA,EAAYhd,KAAwC,eAAvBgd,EAAYoC,OACrE/gB,KAAK4gB,UAAY,IAAIlC,EAAmB1e,KAAK2S,SAAU3S,KAAK4S,OAAQ+L,EAAa3e,KAAK4e,YAEtF5e,KAAK4gB,UAAY,M,EAId3J,MAAP,SAAclP,GACZ,IAAMiZ,EAAaN,EAAUO,YAAYlZ,GACzC,QAAIiZ,EAAa,KAGXA,GACFnd,IAAOpB,KAAP,wDAAoEue,EAApE,mBAGK,I,EAIJC,YAAP,SAAoBlZ,GAIlB,IAFA,IAAMmZ,EAAapX,KAAKoS,IAAI,IAAMnU,EAAKE,OAAS,KAC5C7H,EAAI,EACDA,EAAI8gB,GAAY,CAErB,GAAgB,KAAZnZ,EAAK3H,IAAiC,KAAlB2H,EAAK3H,EAAI,MAAuC,KAAtB2H,EAAK3H,EAAI,KACzD,OAAOA,EAEPA,IAGJ,OAAQ,G,EAUH+gB,YAAP,SAAoBre,EAAM2W,GACxB,MAAO,CACLE,UAAoB,UAAT7W,GAA6B,UAATA,EAAmB,kBAAe2P,EACjE3P,OACA8W,GAAI0G,EAAqBxd,GACzBse,KAAM,EACNrH,eAAgB,IAChBF,eAAgB,EAChBX,QAAS,GACTmI,QAAkB,UAATve,EAAmB,OAAI2P,EAChCqH,MAAgB,UAAThX,QAA0B2P,EACjCgH,SAAmB,UAAT3W,EAAmB2W,OAAWhH,I,EAc5C6G,iBAAA,SAAkBC,EAAahC,EAAYiC,EAAYC,GACrDzZ,KAAKshB,WAAY,EACjBthB,KAAKuhB,QAAU,EACfvhB,KAAK6gB,gBAAkB,GAEvB7gB,KAAKwhB,UAAYd,EAAUS,YAAY,QAAS1H,GAChDzZ,KAAK0Z,YAAcgH,EAAUS,YAAY,QAAS1H,GAClDzZ,KAAKyhB,UAAYf,EAAUS,YAAY,MAAO1H,GAC9CzZ,KAAK0hB,UAAYhB,EAAUS,YAAY,OAAQ1H,GAG/CzZ,KAAK2hB,YAAc,KACnB3hB,KAAK4hB,WAAa,KAClB5hB,KAAK6hB,UAAY,KACjB7hB,KAAKuX,WAAaA,EAClBvX,KAAKwZ,WAAaA,EAClBxZ,KAAK8hB,UAAYrI,G,EAOnBO,eAAA,a,EAGAE,OAAA,SAAQnS,EAAMoS,EAAYC,EAAYC,GACpC,IAAI0H,EAA0BC,EAAKZ,EAAUpZ,EAAQia,EAA1C9W,EAAMpD,EAAKE,OACpBia,GAAc,EAChBliB,KAAK6gB,gBAAkB,GACvB7gB,KAAKoa,WAAaA,EAClB,IAAIkH,EAAYthB,KAAKshB,UACnBa,EAAWniB,KAAKwhB,UAChBY,EAAapiB,KAAK0Z,YAClB2I,EAAWriB,KAAKyhB,UAChBa,EAAQH,EAASf,IACjBmB,EAAUH,EAAWhB,IACrBoB,EAAQH,EAASjB,IACjBqB,EAAQziB,KAAKuhB,OACbmB,EAAUP,EAASQ,QACnBC,EAAYR,EAAWO,QACvB1Z,EAAUoZ,EAASM,QACnBE,EAAW7iB,KAAK8iB,UAChBC,EAAW/iB,KAAKgjB,UAAUphB,KAAK5B,MAC/BijB,EAAWjjB,KAAKkjB,UAChBC,EAAcnjB,KAAKojB,aAAaxhB,KAAK5B,MACrCqjB,EAAcrjB,KAAKsjB,aAAa1hB,KAAK5B,MACrCujB,EAAevjB,KAAKwjB,cAAc5hB,KAAK5B,MACvCyjB,EAAczjB,KAAK0jB,aAAa9hB,KAAK5B,MAEjCghB,EAAaN,EAAUO,YAAYlZ,GAMzC,IAHAoD,IAAQA,EAAM6V,GAAc,IAGvBe,EAAQf,EAAYe,EAAQ5W,EAAK4W,GAAS,IAC7C,GAAoB,KAAhBha,EAAKga,GAAiB,CAMxB,GALAC,KAA2B,GAAlBja,EAAKga,EAAQ,IAEtBX,IAA0B,GAAlBrZ,EAAKga,EAAQ,KAAc,GAAKha,EAAKga,EAAQ,IAC5B,GAAlBha,EAAKga,EAAQ,KAAc,EAExB,GAGR,IAFA/Z,EAAS+Z,EAAQ,EAAIha,EAAKga,EAAQ,MAElBA,EAAQ,IACtB,cAGF/Z,EAAS+Z,EAAQ,EAEnB,OAAQX,GACR,KAAKkB,EACCN,IACEU,IAAYT,EAAMgB,EAASP,KAC7BS,EAAYlB,GAAK,GAGnBS,EAAU,CAAE3a,KAAM,GAAIQ,KAAM,IAE1Bma,IACFA,EAAQ3a,KAAKsB,KAAKtB,EAAKO,SAASN,EAAQ+Z,EAAQ,MAChDW,EAAQna,MAAQwZ,EAAQ,IAAM/Z,GAEhC,MACF,KAAKua,EACCP,IACEY,IAAcX,EAAMgB,EAASL,MAC3BR,EAAWtI,MACbuJ,EAAYpB,GAEZsB,EAAatB,IAGjBW,EAAY,CAAE7a,KAAM,GAAIQ,KAAM,IAE5Bqa,IACFA,EAAU7a,KAAKsB,KAAKtB,EAAKO,SAASN,EAAQ+Z,EAAQ,MAClDa,EAAUra,MAAQwZ,EAAQ,IAAM/Z,GAElC,MACF,KAAKwa,EACCR,IACE/Y,IAAYgZ,EAAMgB,EAASha,KAC7Bwa,EAAYxB,GAGdhZ,EAAU,CAAElB,KAAM,GAAIQ,KAAM,IAE1BU,IACFA,EAAQlB,KAAKsB,KAAKtB,EAAKO,SAASN,EAAQ+Z,EAAQ,MAChD9Y,EAAQV,MAAQwZ,EAAQ,IAAM/Z,GAEhC,MACF,KAAK,EACCga,IACFha,GAAUD,EAAKC,GAAU,GAG3Bya,EAAQziB,KAAKuhB,OAASsB,EAAS9a,EAAMC,GACrC,MACF,KAAKya,EACCT,IACFha,GAAUD,EAAKC,GAAU,GAG3B,IAAI2b,EAAaZ,EAAShb,EAAMC,GAAoC,IAA5BhI,KAAK2gB,cAAciD,OAA4C,IAA3B5jB,KAAK2gB,cAAckD,IAAgC,MAAlB7jB,KAAK4gB,YAQlH0B,EAAQqB,EAAWG,KACP,IACV3B,EAASf,IAAMkB,IAGjBC,EAAUoB,EAAWnD,OACP,IACZ4B,EAAWhB,IAAMmB,EACjBH,EAAWtI,MAAQ6J,EAAW7J,QAEhC0I,EAAQmB,EAAWlD,KACP,IACV4B,EAASjB,IAAMoB,GAGbN,IAAgBZ,IAClBzd,IAAOrB,IAAI,0BACX0f,GAAc,EAEdH,EAAQf,EAAa,KAEvBM,EAAYthB,KAAKshB,WAAY,EAC7B,MACF,KAAK,GACL,KAAK,KACH,MACF,QACEY,GAAc,QAIhBliB,KAAK2S,SAASmB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAW0M,YAAaC,QAAS1M,IAAa8Q,mBAAoBlE,OAAO,EAAOC,OAAQ,sCAInIsO,IAAYT,EAAMgB,EAASP,KAC7BS,EAAYlB,GAAK,GACjBE,EAASQ,QAAU,MAGnBR,EAASQ,QAAUD,EAGjBE,IAAcX,EAAMgB,EAASL,KAC3BR,EAAWtI,MACbuJ,EAAYpB,GAEZsB,EAAatB,GAGfG,EAAWO,QAAU,OAEjBC,GAAaA,EAAUra,MACzB1E,IAAOrB,IAAI,iEAIb4f,EAAWO,QAAUC,GAGnB3Z,IAAYgZ,EAAMgB,EAASha,KAC7Bwa,EAAYxB,GACZI,EAASM,QAAU,MAGnBN,EAASM,QAAU1Z,EAGC,MAAlBjJ,KAAK4gB,UACP5gB,KAAKqZ,QAAQkB,MAAM6H,EAAYD,EAAUE,EAAUriB,KAAK0hB,UAAWvH,EAAYC,EAAYC,GAE3Fra,KAAK+jB,gBAAgB3B,EAAYD,EAAUE,EAAUriB,KAAK0hB,UAAWvH,EAAYC,EAAYC,I,EAIjG0J,gBAAA,SAAiB3B,EAAY4B,EAAY3B,EAAU4B,EAAW9J,EAAYC,EAAYC,GACpF,GAAI+H,EAAWlJ,SAAWkJ,EAAWtI,MAAO,CAC1C,IAAIwF,EAAYtf,KAChBA,KAAK4gB,UAAUpB,kBAAkB4C,EAAWlJ,QAAS,GAAG,WACtDoG,EAAU4E,mBAAmB9B,EAAY4B,EAAY3B,EAAU4B,EAAW9J,EAAYC,EAAYC,WAGpGra,KAAKkkB,mBAAmB9B,EAAY4B,EAAY3B,EAAU4B,EAAW9J,EAAYC,EAAYC,I,EAIjG6J,mBAAA,SAAoB9B,EAAY4B,EAAY3B,EAAU4B,EAAW9J,EAAYC,EAAYC,GACvF,GAAI2J,EAAW9K,QAAS,CACtB,IAAIoG,EAAYtf,KAChBA,KAAK4gB,UAAUT,kBAAkB6D,EAAW9K,QAAS,EAAG,GAAG,WACzDoG,EAAUjG,QAAQkB,MAAM6H,EAAY4B,EAAY3B,EAAU4B,EAAW9J,EAAYC,EAAYC,WAG/Fra,KAAKqZ,QAAQkB,MAAM6H,EAAY4B,EAAY3B,EAAU4B,EAAW9J,EAAYC,EAAYC,I,EAI5F7H,QAAA,WACExS,KAAKmkB,SAAWnkB,KAAKokB,cAAW3R,EAChCzS,KAAK8hB,UAAY,G,EAGnBgB,UAAA,SAAW/a,EAAMC,GAEf,OAA4B,GAApBD,EAAKC,EAAS,MAAe,EAAID,EAAKC,EAAS,K,EAIzDqc,iBAAA,SAAkBvhB,EAAMwhB,EAAUzQ,GAIhC,IAAMD,EAAS5T,KAAK6gB,gBAAgB/d,IAAS,EAM7C,OALe,IAAX8Q,IACF5T,KAAK6gB,gBAAgB/d,GAAQ,EAC7BwhB,EAAS/jB,KAAKsD,IAAQgQ,IAExB7T,KAAK6gB,gBAAgB/d,KACd8Q,G,EAGToP,UAAA,SAAWjb,EAAMC,EAAQuc,EAAeC,GACtC,IAAmBC,EAA6BrD,EAAKxN,EAAS,CAAE4M,OAAQ,EAAGsD,KAAM,EAAGrD,KAAM,EAAG3G,OAAO,GAQpG,IANA2K,EAAWzc,EAAS,IADgB,GAAnBD,EAAKC,EAAS,KAAc,EAAID,EAAKC,EAAS,IACvB,EAKxCA,GAAU,KAF+B,GAApBD,EAAKC,EAAS,MAAe,EAAID,EAAKC,EAAS,KAG7DA,EAASyc,GAAU,CAExB,OADArD,GAA0B,GAAnBrZ,EAAKC,EAAS,KAAc,EAAID,EAAKC,EAAS,GAC7CD,EAAKC,IACb,KAAK,IACH,IAAKwc,EAAa,CAChBxkB,KAAKqkB,iBAAiBtc,EAAKC,GAASnE,IAAOpB,KAAM,0EACjD,MAKJ,KAAK,IAEmB,IAAlBmR,EAAO4M,QACT5M,EAAO4M,MAAQY,GAGjB,MAGF,KAAK,IAEiB,IAAhBxN,EAAO6M,MACT7M,EAAO6M,IAAMW,GAGf,MAEF,KAAK,IACH,IAAKoD,EAAa,CAChBxkB,KAAKqkB,iBAAiBtc,EAAKC,GAASnE,IAAOpB,KAAM,uEACjD,MAKJ,KAAK,IAEiB,IAAhBmR,EAAOkQ,MACTlQ,EAAOkQ,IAAM1C,GAGf,MAIF,KAAK,EACL,KAAK,EAEEmD,GAEwB,IAAlB3Q,EAAO4M,QAChB5M,EAAO4M,MAAQY,EACfxN,EAAOkG,OAAQ,GAHf9Z,KAAKqkB,iBAAiBtc,EAAKC,GAASnE,IAAOpB,KAAM,mDAKnD,MAEF,KAAK,GACHzC,KAAKqkB,iBAAiBtc,EAAKC,GAASnE,IAAOpB,KAAM,sCACjD,MAEF,QACEzC,KAAKqkB,iBAAiBtc,EAAKC,GAASnE,IAAOrB,IAAK,uBAAyBuF,EAAKC,IAKhFA,GAAgE,IAAjC,GAAnBD,EAAKC,EAAS,KAAc,EAAID,EAAKC,EAAS,IAE5D,OAAO4L,G,EAGTsP,UAAA,SAAWwB,GACT,IAAWC,EAAMC,EAAqBC,EAAQC,EAAWnC,EAASoC,EAAQC,EAAQC,EAA9E7kB,EAAI,EAA8F2H,EAAO2c,EAAO3c,KAEpH,IAAK2c,GAA0B,IAAhBA,EAAOnc,KACpB,OAAO,KAMT,KAAOR,EAAK,GAAGE,OAAS,IAAMF,EAAKE,OAAS,GAAG,CAC7C,IAAIid,EAAU,IAAIvb,WAAW5B,EAAK,GAAGE,OAASF,EAAK,GAAGE,QACtDid,EAAQ/I,IAAIpU,EAAK,IACjBmd,EAAQ/I,IAAIpU,EAAK,GAAIA,EAAK,GAAGE,QAC7BF,EAAK,GAAKmd,EACVnd,EAAKod,OAAO,EAAG,GAKjB,GAAkB,MAFlBR,EAAO5c,EAAK,IACM,IAAM,KAAO4c,EAAK,IAAM,GAAKA,EAAK,GAC/B,CAInB,IAHAE,GAAUF,EAAK,IAAM,GAAKA,EAAK,KAGjBE,EAASH,EAAOnc,KAAO,EACnC,OAAO,KAiCT,GA7Be,KADfqc,EAAWD,EAAK,MAKdI,EAA4B,WAAR,GAAVJ,EAAK,IACO,SAAR,IAAXA,EAAK,KACc,OAAR,IAAXA,EAAK,KACc,KAAR,IAAXA,EAAK,MACM,IAAXA,EAAK,KAAc,EAEP,GAAXC,EAOEG,GANJC,EAA6B,WAAR,GAAXL,EAAK,KACO,SAAR,IAAXA,EAAK,KACc,OAAR,IAAXA,EAAK,KACc,KAAR,IAAXA,EAAK,MACM,IAAXA,EAAK,KAAc,GAEA,OACpB9gB,IAAOpB,KAAQqH,KAAKC,OAAOgb,EAASC,GAAU,KAA9C,2CACAD,EAASC,GAGXA,EAASD,GAKbE,GAFAH,EAAYH,EAAK,IAEgB,EAE7BD,EAAOnc,MAAQ0c,EACjB,OAAO,KAETP,EAAOnc,MAAQ0c,EAEftC,EAAU,IAAIhZ,WAAW+a,EAAOnc,MAChC,IAAK,IAAIkO,EAAI,EAAG2O,EAAUrd,EAAKE,OAAQwO,EAAI2O,EAAS3O,IAAK,CAEvD,IAAItL,GADJwZ,EAAO5c,EAAK0O,IACG/M,WACf,GAAIub,EAAoB,CACtB,GAAIA,EAAqB9Z,EAAK,CAE5B8Z,GAAsB9Z,EACtB,SAGAwZ,EAAOA,EAAKrc,SAAS2c,GACrB9Z,GAAO8Z,EACPA,EAAqB,EAGzBtC,EAAQxG,IAAIwI,EAAMvkB,GAClBA,GAAK+K,EAMP,OAJI0Z,IAEFA,GAAUC,EAAY,GAEjB,CAAE/c,KAAM4a,EAASlK,IAAKsM,EAAQ9L,IAAK+L,EAAQ7Z,IAAK0Z,GAEvD,OAAO,M,EAIXQ,cAAA,SAAexD,EAAWM,GACxB,GAAIN,EAAUxB,MAAMpY,QAAU4Z,EAAUlZ,MAAO,CAC7C,IAAMuQ,EAAUiJ,EAASjJ,QACnBoM,EAAYpM,EAAQjR,OAE1B,GAAIsd,MAAM1D,EAAUpJ,KAAM,CACxB,IAAI6M,EAOF,YADAnD,EAASd,UALT,IAAMmE,EAAatM,EAAQoM,EAAY,GACvCzD,EAAUpJ,IAAM+M,EAAW/M,IAC3BoJ,EAAU5I,IAAMuM,EAAWvM,KAW1BjZ,KAAK4S,OAAO6S,+BACK,IAAlB5D,EAAUlgB,KACTwgB,EAASuD,MAAQJ,GAAatlB,KAAKoa,aACtCyH,EAAUjI,GAAK0L,EACfpM,EAAQ7P,KAAKwY,IAGbM,EAASd,UAGTQ,EAAUtf,MAAM0F,QAClBpE,IAAOrB,IAAIqf,EAAUpJ,IAAM,IAAMoJ,EAAU5I,IAAM,IAAM4I,EAAUtf,Q,EAIrE6gB,aAAA,SAAcnB,EAAK0D,GAAM,IAKrBC,EAEAvc,EAEAjJ,EATqB,OAEnBkX,EAAQtX,KAAKwhB,UACfnB,EAAQrgB,KAAK6lB,cAAc5D,EAAIla,MAG/B8Z,EAAY7hB,KAAK6hB,UAEjBiE,GAAW,EAEXT,EAAgBrlB,KAAKqlB,cAAczjB,KAAK5B,MACxC+lB,EAAkB,SAAUpkB,EAAK8W,EAAKQ,EAAK1W,GACzC,MAAO,CAAEZ,IAAKA,EAAK8W,IAAKA,EAAKQ,IAAKA,EAAKoH,MAAO,GAAI9d,MAAOA,IAG7D0f,EAAIla,KAAO,KAIP8Z,GAAaxB,EAAMpY,SAAWqP,EAAM0O,WACtCX,EAAcxD,EAAWvK,GACzBuK,EAAY7hB,KAAK6hB,UAAYkE,GAAgB,EAAO9D,EAAIxJ,IAAKwJ,EAAIhJ,IAAK,KAGxEoH,EAAM3c,SAAQ,SAAAsV,GACZ,OAAQA,EAAKlW,MAEb,KAAK,EACHuG,GAAO,EACFwY,IACHA,EAAY,EAAKA,UAAYkE,GAAgB,EAAM9D,EAAIxJ,IAAKwJ,EAAIhJ,IAAK,KAOvE4I,EAAUlZ,OAAQ,EAClB,IAAIZ,EAAOiR,EAAKjR,KAEhB,GAAI+d,GAAY/d,EAAKE,OAAS,EAAG,CAE/B,IAAIge,EAAY,IAAItK,EAAU5T,GAAM0W,gBAMlB,IAAdwH,GAAiC,IAAdA,GAAiC,IAAdA,GAAiC,IAAdA,IAC3DpE,EAAUlgB,KAAM,GAGpB,MAEF,KAAK,EACH0H,GAAO,EAEFwY,IACHA,EAAY,EAAKA,UAAYkE,GAAgB,EAAM9D,EAAIxJ,IAAKwJ,EAAIhJ,IAAK,KAOvE4I,EAAUlgB,KAAM,EAChBkgB,EAAUlZ,OAAQ,EAClB,MAEF,KAAK,EACHU,GAAO,GAKPuc,EAAmB,IAAIjK,EAAU,EAAKiD,WAAW5F,EAAKjR,QAGrCmV,YAOjB,IALA,IAAIgJ,EAAc,EACdC,EAAc,EACdC,GAAgB,EAChBC,EAAI,GAEAD,GAAiBR,EAAiBhK,eAAiB,GAAG,CAC5DsK,EAAc,EACd,GAEEA,GADAG,EAAIT,EAAiB1I,kBAER,MAANmJ,GAGTF,EAAc,EACd,GAEEA,GADAE,EAAIT,EAAiB1I,kBAER,MAANmJ,GAIT,GAAoB,IAAhBH,GAAyD,IAApCN,EAAiBhK,gBAKxC,GAJAwK,GAAgB,EAII,MAFFR,EAAiB1I,YAKjC,GAAqB,KAFF0I,EAAiBzI,aAKlC,GAAsB,aAFFyI,EAAiBxI,WAMnC,GAAqB,IAHFwI,EAAiB1I,YAGZ,CACtB,IAAIoJ,EAAYV,EAAiB1I,YAG7BqJ,EAAW,GAAKD,EAChBE,EAAY,CAACF,EAHAV,EAAiB1I,aAKlC,IAAK9c,EAAI,EAAGA,EAAImmB,EAAUnmB,IAExBomB,EAAUnd,KAAKuc,EAAiB1I,aAChCsJ,EAAUnd,KAAKuc,EAAiB1I,aAChCsJ,EAAUnd,KAAKuc,EAAiB1I,aAGlC,EAAKuJ,qBAAqB,EAAK/E,UAAUxI,QAAS,CAAEpW,KAAM,EAAG2V,IAAKwJ,EAAIxJ,IAAKiO,MAAOF,UAKrF,GAAoB,IAAhBN,GAAyD,IAApCN,EAAiBhK,gBAG/C,GAFAwK,GAAgB,EAEZD,EAAc,GAAI,CACpB,IAAMQ,EAAe,GACrB,IAAKvmB,EAAI,EAAGA,EAAI,GAAIA,IAClBumB,EAAatd,KAAKuc,EAAiB1I,YAAY0J,SAAS,KAE9C,IAANxmB,GAAiB,IAANA,GAAiB,IAANA,GAAiB,IAANA,GACnCumB,EAAatd,KAAK,KAGtB,IAAMpB,EAASke,EAAc,GACvBU,EAAuB,IAAIld,WAAW1B,GAC5C,IAAK7H,EAAI,EAAGA,EAAI6H,EAAQ7H,IACtBymB,EAAqBzmB,GAAKwlB,EAAiB1I,YAG7C,EAAKuJ,qBAAqB,EAAK/E,UAAUxI,QAAS,CAChDT,IAAKwJ,EAAIxJ,IACTyN,YAAaA,EACbY,KAAMH,EAAajZ,KAAK,IACxBqZ,cAAeF,EACfG,SAAU1b,YAAeub,EAAqB1c,gBAG7C,GAAIgc,EAAcP,EAAiBhK,eACxC,IAAKxb,EAAI,EAAGA,EAAI+lB,EAAa/lB,IAC3BwlB,EAAiB1I,YAIvB,MAEF,KAAK,EAOH,GANA7T,GAAO,EACPyc,GAAW,GAKNxO,EAAMoO,IAAK,CAEd,IAAI9S,GADJgT,EAAmB,IAAIjK,EAAU3C,EAAKjR,OACRyV,UAC9BlG,EAAMgH,MAAQ1L,EAAO0L,MACrBhH,EAAMkH,OAAS5L,EAAO4L,OACtBlH,EAAM+G,WAAazL,EAAOyL,WAC1B/G,EAAMoO,IAAM,CAAC1M,EAAKjR,MAClBuP,EAAMmC,SAAW,EAAKqI,UACtB,IAAImF,EAAajO,EAAKjR,KAAKO,SAAS,EAAG,GACnC4e,EAAc,QAClB,IAAK9mB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,IAAI+mB,EAAIF,EAAW7mB,GAAGwmB,SAAS,IAC3BO,EAAElf,OAAS,IACbkf,EAAI,IAAMA,GAGZD,GAAeC,EAEjB7P,EAAMc,MAAQ8O,EAEhB,MAEF,KAAK,EACH7d,GAAO,EAKFiO,EAAM8P,MACT9P,EAAM8P,IAAM,CAACpO,EAAKjR,OAGpB,MAEF,KAAK,EACHsB,GAAO,EACPiO,EAAM0O,UAAW,EACbnE,GACFwD,EAAcxD,EAAWvK,GAG3BuK,EAAY,EAAKA,UAAYkE,GAAgB,EAAO9D,EAAIxJ,IAAKwJ,EAAIhJ,IAAsB,IACvF,MAEF,KAAK,GACH5P,GAAO,EACP,MACF,QACEA,GAAO,EACHwY,IACFA,EAAUtf,OAAS,eAAiByW,EAAKlW,KAAO,KAKhD+e,GAAaxY,GACHwY,EAAUxB,MAChBhX,KAAK2P,MAIX2M,GAAQ9D,IACVwD,EAAcxD,EAAWvK,GACzBtX,KAAK6hB,UAAY,O,EAIrB4E,qBAAA,SAAsBY,EAAKtf,GACzB,IAAIoD,EAAMkc,EAAIpf,OACd,GAAIkD,EAAM,GACR,GAAIpD,EAAK0Q,KAAO4O,EAAIlc,EAAM,GAAGsN,IAC3B4O,EAAIhe,KAAKtB,QAET,IAAK,IAAIuf,EAAMnc,EAAM,EAAGmc,GAAO,EAAGA,IAChC,GAAIvf,EAAK0Q,IAAM4O,EAAIC,GAAK7O,IAAK,CAC3B4O,EAAIlC,OAAOmC,EAAK,EAAGvf,GACnB,YAKNsf,EAAIhe,KAAKtB,I,EAIbwf,gBAAA,WACE,IAAgCC,EAA5B3F,EAAY7hB,KAAK6hB,UAErB,IAAKA,GAAwC,IAA3BA,EAAUxB,MAAMpY,OAAc,CAC9C,IAA4BiR,EAAhBlZ,KAAKwhB,UAA2BtI,QAC5C2I,EAAY3I,EAAQA,EAAQjR,OAAS,GAEvC,GAAI4Z,EAAW,CACb,IAAIxB,EAAQwB,EAAUxB,MACtBmH,EAAWnH,EAAMA,EAAMpY,OAAS,GAElC,OAAOuf,G,EAGT3B,cAAA,SAAerb,GACb,IAAmCnJ,EAAOomB,EAC1BzO,EAAoC0O,EADhDtnB,EAAI,EAAG+K,EAAMX,EAAMd,WAA6B4N,EAAQtX,KAAKwhB,UAAWmG,EAAQrQ,EAAMsQ,WAAa,EAAGC,EAAYF,EAClHtH,EAAQ,GAAoByH,GAAiB,EAYjD,KATe,IAAXH,IAEFG,EAAgB,EAEhBJ,EAA0B,GAAXld,EAAM,GACrBmd,EAAQ,EACRvnB,EAAI,GAGCA,EAAI+K,GAGT,GAFA9J,EAAQmJ,EAAMpK,KAETunB,EAIL,GAAc,IAAVA,EAKJ,GAAKtmB,EAEE,GAAc,IAAVA,EAAa,CACtB,GAAIymB,GAAiB,EACnB9O,EAAO,CAAEjR,KAAMyC,EAAMlC,SAASwf,EAAe1nB,EAAIunB,EAAQ,GAAI7kB,KAAM4kB,GAEnErH,EAAMhX,KAAK2P,OACN,CAKL,IAAIwO,EAAWxnB,KAAKunB,kBACpB,GAAIC,IACEK,GAAcznB,GAAK,EAAIynB,GAIrBL,EAASG,QAEXH,EAASzf,KAAOyf,EAASzf,KAAKO,SAAS,EAAGkf,EAASzf,KAAK2B,WAAame,KAIzEJ,EAAWrnB,EAAIunB,EAAQ,GACR,GAAG,CAEhB,IAAII,EAAM,IAAIpe,WAAW6d,EAASzf,KAAK2B,WAAa+d,GACpDM,EAAI5L,IAAIqL,EAASzf,KAAM,GACvBggB,EAAI5L,IAAI3R,EAAMlC,SAAS,EAAGmf,GAAWD,EAASzf,KAAK2B,YACnD8d,EAASzf,KAAOggB,GAKlB3nB,EAAI+K,GAGN2c,EAAgB1nB,EAChBsnB,EAHsB,GAAXld,EAAMpK,GAIjBunB,EAAQ,GAGRA,GAAS,OAGXA,EAAQ,OA7CRA,EAAQ,OALRA,EAAQtmB,EAAQ,EAAI,OAJpBsmB,EAAQtmB,EAAQ,EAAI,EA+DxB,GANIymB,GAAiB,GAAKH,GAAS,IACjC3O,EAAO,CAAEjR,KAAMyC,EAAMlC,SAASwf,EAAe3c,GAAMrI,KAAM4kB,EAAcC,MAAOA,GAC9EtH,EAAMhX,KAAK2P,IAIQ,IAAjBqH,EAAMpY,OAAc,CAEtB,IAAIuf,EAAWxnB,KAAKunB,kBACpB,GAAIC,EAAU,CACZ,IAAIO,EAAM,IAAIpe,WAAW6d,EAASzf,KAAK2B,WAAac,EAAMd,YAC1Dqe,EAAI5L,IAAIqL,EAASzf,KAAM,GACvBggB,EAAI5L,IAAI3R,EAAOgd,EAASzf,KAAK2B,YAC7B8d,EAASzf,KAAOggB,GAIpB,OADAzQ,EAAMsQ,UAAYD,EACXtH,G,EAMTzB,WAAA,SAAY7W,GAOV,IANA,IAGEigB,EAAW9C,EAHTjd,EAASF,EAAK2B,WAChBue,EAAe,GACf7nB,EAAI,EAICA,EAAI6H,EAAS,GACF,IAAZF,EAAK3H,IACW,IAAhB2H,EAAK3H,EAAI,IACO,IAAhB2H,EAAK3H,EAAI,IACX6nB,EAAa5e,KAAKjJ,EAAI,GACtBA,GAAK,GAELA,IAMJ,GAA4B,IAAxB6nB,EAAahgB,OACf,OAAOF,EAITigB,EAAY/f,EAASggB,EAAahgB,OAClCid,EAAU,IAAIvb,WAAWqe,GACzB,IAAIE,EAAc,EAElB,IAAK9nB,EAAI,EAAGA,EAAI4nB,EAAWE,IAAe9nB,IACpC8nB,IAAgBD,EAAa,KAE/BC,IAEAD,EAAaE,SAEfjD,EAAQ9kB,GAAK2H,EAAKmgB,GAEpB,OAAOhD,G,EAGT5B,aAAA,SAAcrB,GACZ,IAMErJ,EAAeF,EAAY1Q,EAAQ6Q,EAAO1N,EAgBtCiJ,EAAQD,EAtBVmD,EAAQtX,KAAK0Z,YACf3R,EAAOka,EAAIla,KACX0Q,EAAMwJ,EAAIxJ,IAEVkJ,EAAc3hB,KAAK2hB,YACnBC,EAAa5hB,KAAK4hB,WAEpB,GAAID,EAAa,CACf,IAAIoG,EAAM,IAAIpe,WAAWgY,EAAYjY,WAAa3B,EAAK2B,YACvDqe,EAAI5L,IAAIwF,EAAa,GACrBoG,EAAI5L,IAAIpU,EAAM4Z,EAAYjY,YAE1B3B,EAAOggB,EAGT,IAAK/f,EAZW,EAYWmD,EAAMpD,EAAKE,OAAQD,EAASmD,EAAM,IACvD8O,EAAclS,EAAMC,GADsCA,KAMhE,GAAIA,IAEEA,EAASmD,EAAM,GACjBiJ,EAAS,iDAAiDpM,EAC1DmM,GAAQ,IAERC,EAAS,kCACTD,GAAQ,GAEVtQ,IAAOpB,KAAP,iBAA6B2R,GAC7BpU,KAAK2S,SAASmB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAW0M,YAAaC,QAAS1M,IAAa8Q,mBAAoBlE,MAAOA,EAAOC,OAAQA,IAC/HD,GACF,OAUJ,GANA8F,EAAqB3C,EAAOtX,KAAK2S,SAAU5K,EAAMC,EAAQhI,KAAKuX,YAC9DmB,EAAa,EACbE,EAAgBqB,EAAsB3C,EAAME,YAIxCmK,GAAeC,EAAY,CAC7B,IAAIwG,EAASxG,EAAahJ,EACtB9O,KAAKue,IAAID,EAAS3P,GAAO,IAC3B5U,IAAOrB,IAAP,4CAAuDsH,KAAKC,OAAOqe,EAAS3P,GAAO,KACnFA,EAAM2P,GAKV,KAAOpgB,EAASmD,GAAK,CACnB,GAAI8O,EAAclS,EAAMC,GAAS,CAC/B,GAAKA,EAAS,EAAKmD,EAAK,CACtB,IAAMxC,EAAQsR,EAAiB3C,EAAOvP,EAAMC,EAAQyQ,EAAKC,GACzD,GAAI/P,EAAO,CACTX,GAAUW,EAAMV,OAChB4Q,EAAQlQ,EAAMwQ,OAAOV,IACrBC,IACA,UAKJ,MAGA1Q,IAKF2Z,EADE3Z,EAASmD,EACGpD,EAAKO,SAASN,EAAQmD,GAGtB,KAGhBnL,KAAK2hB,YAAcA,EACnB3hB,KAAK4hB,WAAa/I,G,EAGpB2K,cAAA,SAAevB,GAOb,IANA,IAAIla,EAAOka,EAAIla,KACXE,EAASF,EAAKE,OACdyQ,EAAa,EACb1Q,EAAS,EACTyQ,EAAMwJ,EAAIxJ,IAEPzQ,EAASC,GACd,GAAIuS,EAAU1S,SAASC,EAAMC,GAAS,CACpC,IAAIW,EAAQ6R,EAAUhC,YAAYxY,KAAK0Z,YAAa3R,EAAMC,EAAQyQ,EAAKC,GACvE,IAAI/P,EAKF,MAJAX,GAAUW,EAAMV,OAChByQ,SAOF1Q,K,EAKN0b,aAAA,SAAczB,GACZjiB,KAAKyhB,UAAUvI,QAAQ7P,KAAK4Y,I,KCx/BjBqG,E,WA7Eb,WAAa3V,EAAU0G,EAASzG,GAC9B5S,KAAK2S,SAAWA,EAChB3S,KAAK4S,OAASA,EACd5S,KAAKqZ,QAAUA,E,2BAGjBC,iBAAA,SAAkBC,EAAahC,EAAYiC,EAAYC,GACrDzZ,KAAK0Z,YAAc,CAAEC,UAAW,aAAc7W,KAAM,QAAS8W,IAAK,EAAGC,eAAgB,EAAGC,OAAO,EAAOZ,QAAS,GAAI/N,IAAK,EAAG6M,cAAeT,EAAYkC,SAAUA,EAAUM,eAAgB,M,EAG5LC,eAAA,a,EAGO/C,MAAP,SAAclP,GAEZ,IAAIC,EAAQC,EACRgB,EAAUpB,IAAIM,WAAWJ,EAAM,GACnC,GAAIkB,QAAyCwJ,IAA9B5K,IAAIW,aAAaS,GAI9B,IAAKjB,EAASiB,EAAQhB,OAAQA,EAAS6B,KAAKoS,IAAInU,EAAKE,OAAS,EAAGD,EAAS,KAAMA,EAASC,EAAQD,IAC/F,GAAIwS,EAAUvD,MAAMlP,EAAMC,GAExB,OADAnE,IAAOrB,IAAI,iCACJ,EAIb,OAAO,G,EAIT0X,OAAA,SAAQnS,EAAMoS,EAAYC,EAAYC,GAWpC,IAVA,IAAIpR,EAAUpB,IAAIM,WAAWJ,EAAM,IAAM,GACrC8B,EAAYhC,IAAIW,aAAaS,GAC7BwP,OAAoBhG,IAAd5I,EAA0B,GAAKA,EAAyB,IAAbsQ,EACjDnS,EAASiB,EAAQhB,OACjBA,EAASF,EAAKE,OACdyQ,EAAa,EAAGG,EAAQ,EACxBvB,EAAQtX,KAAK0Z,YAEbY,EAAa,CAAC,CAAE7B,IAAKA,EAAKQ,IAAKR,EAAK1Q,KAAMkB,IAEvCjB,EAASC,GACd,GAAIuS,EAAU1S,SAASC,EAAMC,GAAS,CACpC,IAAIW,EAAQ6R,EAAUhC,YAAYlB,EAAOvP,EAAMC,EAAQyQ,EAAKC,GAC5D,IAAI/P,EAMF,MALAX,GAAUW,EAAMV,OAChB4Q,EAAQlQ,EAAMwQ,OAAOV,IACrBC,SAKO7Q,IAAIC,SAASC,EAAMC,IAC5BiB,EAAUpB,IAAIM,WAAWJ,EAAMC,GAC/BsS,EAAWjR,KAAK,CAAEoP,IAAKI,EAAOI,IAAKJ,EAAO9Q,KAAMkB,IAChDjB,GAAUiB,EAAQhB,QAGlBD,IAIJhI,KAAKqZ,QAAQkB,MAAMjD,EACjB,CAAE4B,QAAS,IACX,CAAEA,QAASoB,EAAYP,eAAgB,KACvC,CAAEb,QAAS,IACXiB,EACAC,EACAC,I,EAGJ7H,QAAA,a,KCxCa+V,E,kCApCNC,eAAP,SAAuBpQ,EAAOD,GAC5B,OAAQC,GACR,IAAK,YACH,GAAqB,IAAjBD,EACF,OAAO,IAAIxO,WAAW,CAAC,EAAM,IAAM,EAAM,IAAM,GAAM,MAChD,GAAqB,IAAjBwO,EACT,OAAO,IAAIxO,WAAW,CAAC,GAAM,EAAM,GAAM,IAAM,EAAM,GAAM,EAAM,GAAM,MAClE,GAAqB,IAAjBwO,EACT,OAAO,IAAIxO,WAAW,CAAC,EAAM,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,GAAM,GAAM,EAAM,IAAM,EAAM,MAC1F,GAAqB,IAAjBwO,EACT,OAAO,IAAIxO,WAAW,CAAC,EAAM,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,GAAM,GAAM,EAAM,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,EAAM,KACxH,GAAqB,IAAjBwO,EACT,OAAO,IAAIxO,WAAW,CAAC,EAAM,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,GAAM,GAAM,EAAM,IAAM,EAAM,IAAM,GAAM,EAAM,IAAM,EAAM,GAAM,IAAM,EAAM,KAC1I,GAAqB,IAAjBwO,EACT,OAAO,IAAIxO,WAAW,CAAC,EAAM,IAAM,EAAM,IAAM,GAAM,IAAM,EAAM,GAAM,GAAM,EAAM,IAAM,EAAM,IAAM,GAAM,EAAM,IAAM,EAAM,GAAM,IAAM,EAAM,EAAM,IAAM,EAAM,GAAM,EAAM,MAG/K,MAEF,QACE,GAAqB,IAAjBwO,EAEF,OAAO,IAAIxO,WAAW,CAAC,EAAK,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,EAAK,EAAK,EAAK,EAAK,GAAM,EAAK,IAAM,IAAM,GAAK,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KACvW,GAAqB,IAAjBwO,EAET,OAAO,IAAIxO,WAAW,CAAC,EAAK,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,EAAK,EAAK,EAAK,EAAK,EAAK,IAAM,EAAK,EAAK,IAAM,IAAM,GAAK,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KACrW,GAAqB,IAAjBwO,EAET,OAAO,IAAIxO,WAAW,CAAC,EAAK,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,EAAK,EAAK,EAAK,EAAK,EAAK,IAAM,EAAK,EAAK,IAAM,IAAM,GAAK,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KAI9W,OAAO,M,KCjCL8e,EAAa3e,KAAK4e,IAAI,EAAG,IAAM,EAwoBtBC,E,kCAroBNC,KAAP,WAwCE,IAAIxoB,EACJ,IAAKA,KAxCLuoB,EAAIE,MAAQ,CACVC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACN,OAAQ,GACRC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,GACNC,KAAM,IAIErC,EAAIE,MACRF,EAAIE,MAAM5mB,eAAe7B,KAC3BuoB,EAAIE,MAAMzoB,GAAK,CACbA,EAAE6qB,WAAW,GACb7qB,EAAE6qB,WAAW,GACb7qB,EAAE6qB,WAAW,GACb7qB,EAAE6qB,WAAW,KAKnB,IAAIC,EAAY,IAAIvhB,WAAW,CAC7B,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,IAAM,IAAM,IAAM,IAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,GAAM,IAAM,IAAM,IAClB,IAAM,GAAM,GAAM,IAClB,IAAM,IAAM,IAAM,IAAM,IAGtBwhB,EAAY,IAAIxhB,WAAW,CAC7B,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,IAAM,IAAM,IAAM,IAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,GAAM,IAAM,IAAM,IAClB,IAAM,GAAM,GAAM,IAClB,IAAM,IAAM,IAAM,IAAM,IAG1Bgf,EAAIyC,WAAa,CACf,MAASF,EACT,MAASC,GAGX,IAAIjC,EAAO,IAAIvf,WAAW,CACxB,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,GAClB,IAAM,IAAM,IAAM,GAClB,EACA,EAAM,EAAM,IAGVwgB,EAAO,IAAIxgB,WAAW,CACxB,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,IAGpBgf,EAAI0C,KAAO1C,EAAI2C,KAAO3C,EAAI4C,KAAOpB,EAEjCxB,EAAI6C,KAAO,IAAI7hB,WAAW,CACxB,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,IAEpBgf,EAAI8C,KAAO,IAAI9hB,WAAW,CACxB,EACA,EAAM,EAAM,EACZ,EAAM,EACN,EAAM,EACN,EAAM,EACN,EAAM,IAERgf,EAAI+C,KAAO,IAAI/hB,WAAW,CACxB,EACA,EAAM,EAAM,EACZ,EAAM,EACN,EAAM,IAGRgf,EAAIgD,KAAO,IAAIhiB,WAAW,CACxB,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,IAEpB,IAAIiiB,EAAa,IAAIjiB,WAAW,CAAC,IAAK,IAAK,IAAK,MAC5CkiB,EAAY,IAAIliB,WAAW,CAAC,GAAI,IAAK,GAAI,KACzCmiB,EAAe,IAAIniB,WAAW,CAAC,EAAG,EAAG,EAAG,IAE5Cgf,EAAIoD,KAAOpD,EAAIqD,IAAIrD,EAAIE,MAAMO,KAAMwC,EAAYE,EAAcF,EAAYC,GACzElD,EAAIsD,KAAOtD,EAAIqD,IAAIrD,EAAIE,MAAMI,KAAMN,EAAIqD,IAAIrD,EAAIE,MAAMK,KAAMA,K,EAGtD8C,IAAP,SAAYlpB,GAQV,IAPA,IAKE8Q,EAJAsY,EAAUnW,MAAM/T,UAAUuQ,MAAMhS,KAAKgW,UAAW,GAChDhO,EAAO,EACPnI,EAAI8rB,EAAQjkB,OACZkD,EAAM/K,EAGDA,KACLmI,GAAQ2jB,EAAQ9rB,GAAGsJ,WAUrB,KAPAkK,EAAS,IAAIjK,WAAWpB,IACjB,GAAMA,GAAQ,GAAM,IAC3BqL,EAAO,GAAMrL,GAAQ,GAAM,IAC3BqL,EAAO,GAAMrL,GAAQ,EAAK,IAC1BqL,EAAO,GAAY,IAAPrL,EACZqL,EAAOuI,IAAIrZ,EAAM,GAEZ1C,EAAI,EAAGmI,EAAO,EAAGnI,EAAI+K,EAAK/K,IAE7BwT,EAAOuI,IAAI+P,EAAQ9rB,GAAImI,GACvBA,GAAQ2jB,EAAQ9rB,GAAGsJ,WAErB,OAAOkK,G,EAGFyV,KAAP,SAAavmB,GACX,OAAO6lB,EAAIqD,IAAIrD,EAAIE,MAAMQ,KAAMV,EAAIyC,WAAWtoB,K,EAGzCwmB,KAAP,SAAavhB,GACX,OAAO4gB,EAAIqD,IAAIrD,EAAIE,MAAMS,KAAMvhB,I,EAG1BwhB,KAAP,SAAa4C,EAAW1S,GACtBA,GAAY0S,EACZ,IAAMC,EAAoBtiB,KAAK8V,MAAMnG,GAAYgP,EAAa,IACxD4D,EAAoBviB,KAAK8V,MAAMnG,GAAYgP,EAAa,IAC9D,OAAOE,EAAIqD,IAAIrD,EAAIE,MAAMU,KAAM,IAAI5f,WAAW,CAC5C,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACzCwiB,GAAa,GAAM,IACnBA,GAAa,GAAM,IACnBA,GAAa,EAAK,IACP,IAAZA,EACCC,GAAqB,GACrBA,GAAqB,GAAM,IAC3BA,GAAqB,EAAK,IACP,IAApBA,EACCC,GAAqB,GACrBA,GAAqB,GAAM,IAC3BA,GAAqB,EAAK,IACP,IAApBA,EACA,GAAM,IACN,EAAM,M,EAIH7C,KAAP,SAAalS,GACX,OAAOqR,EAAIqD,IAAIrD,EAAIE,MAAMW,KAAMb,EAAIY,KAAKjS,EAAM6U,UAAW7U,EAAMmC,UAAWkP,EAAIU,KAAK/R,EAAMxU,MAAO6lB,EAAIe,KAAKpS,K,EAGpGmS,KAAP,SAAa5P,GACX,OAAO8O,EAAIqD,IAAIrD,EAAIE,MAAMY,KAAM,IAAI9f,WAAW,CAC5C,EACA,EAAM,EAAM,EACXkQ,GAAkB,GAClBA,GAAkB,GAAM,IACxBA,GAAkB,EAAK,IACP,IAAjBA,M,EAIG6P,KAAP,SAAapS,GACX,MAAmB,UAAfA,EAAMxU,KACD6lB,EAAIqD,IAAIrD,EAAIE,MAAMa,KAAMf,EAAIqD,IAAIrD,EAAIE,MAAMmC,KAAMrC,EAAI+C,MAAO/C,EAAIsD,KAAMtD,EAAIuB,KAAK5S,IAE9EqR,EAAIqD,IAAIrD,EAAIE,MAAMa,KAAMf,EAAIqD,IAAIrD,EAAIE,MAAMkC,KAAMpC,EAAI8C,MAAO9C,EAAIsD,KAAMtD,EAAIuB,KAAK5S,K,EAIlFqS,KAAP,SAAa2C,EAAIC,EAAqBjV,GACpC,OAAOqR,EAAIqD,IAAIrD,EAAIE,MAAMc,KAAMhB,EAAIc,KAAK6C,GAAK3D,EAAI+B,KAAKpT,EAAOiV,K,EAKxD3C,KAAP,SAAa4C,GAKX,IAJA,IACEpsB,EAAIosB,EAAOvkB,OACXwkB,EAAQ,GAEHrsB,KACLqsB,EAAMrsB,GAAKuoB,EAAIgC,KAAK6B,EAAOpsB,IAG7B,OAAOuoB,EAAIqD,IAAI1oB,MAAM,KAAM,CAACqlB,EAAIE,MAAMe,KAAMjB,EAAIoB,KAAKyC,EAAO,GAAGL,UAAWK,EAAO,GAAG/S,WAAW9D,OAAO8W,GAAO9W,OAAOgT,EAAImB,KAAK0C,M,EAGxH1C,KAAP,SAAa0C,GAKX,IAJA,IACEpsB,EAAIosB,EAAOvkB,OACXwkB,EAAQ,GAEHrsB,KACLqsB,EAAMrsB,GAAKuoB,EAAIkC,KAAK2B,EAAOpsB,IAG7B,OAAOuoB,EAAIqD,IAAI1oB,MAAM,KAAM,CAACqlB,EAAIE,MAAMiB,MAAMnU,OAAO8W,K,EAG9C1C,KAAP,SAAaoC,EAAW1S,GACtBA,GAAY0S,EACZ,IAAMC,EAAoBtiB,KAAK8V,MAAMnG,GAAYgP,EAAa,IACxD4D,EAAoBviB,KAAK8V,MAAMnG,GAAYgP,EAAa,IAE5D/B,EAAQ,IAAI/c,WAAW,CACrB,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACzCwiB,GAAa,GAAM,IACnBA,GAAa,GAAM,IACnBA,GAAa,EAAK,IACP,IAAZA,EACCC,GAAqB,GACrBA,GAAqB,GAAM,IAC3BA,GAAqB,EAAK,IACP,IAApBA,EACCC,GAAqB,GACrBA,GAAqB,GAAM,IAC3BA,GAAqB,EAAK,IACP,IAApBA,EACA,EAAM,EAAM,EAAM,EAClB,EAAM,EACN,EAAM,EACN,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,GAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,IAAM,IAAM,IAAM,MAEtB,OAAO1D,EAAIqD,IAAIrD,EAAIE,MAAMkB,KAAMrD,I,EAG1BuD,KAAP,SAAa3S,GACX,IAGEoV,EACAtsB,EAHA8Y,EAAU5B,EAAM4B,SAAW,GAC3BwN,EAAQ,IAAI/c,WAAW,EAAIuP,EAAQjR,QAKrC,IAAK7H,EAAI,EAAGA,EAAI8Y,EAAQjR,OAAQ7H,IAC9BssB,EAAQxT,EAAQ9Y,GAAGssB,MACnBhG,EAAMtmB,EAAI,GAAMssB,EAAMC,WAAa,EAChCD,EAAME,cAAgB,EACtBF,EAAMG,cAGX,OAAOlE,EAAIqD,IAAIrD,EAAIE,MAAMoB,KAAMvD,I,EAG1BwD,KAAP,SAAa5S,GACX,OAAOqR,EAAIqD,IAAIrD,EAAIE,MAAMqB,KAAMvB,EAAI0B,KAAK/S,GAAQqR,EAAIqD,IAAIrD,EAAIE,MAAM0B,KAAM5B,EAAI0C,MAAO1C,EAAIqD,IAAIrD,EAAIE,MAAMuB,KAAMzB,EAAI2C,MAAO3C,EAAIqD,IAAIrD,EAAIE,MAAMyB,KAAM3B,EAAI6C,MAAO7C,EAAIqD,IAAIrD,EAAIE,MAAMsB,KAAMxB,EAAI4C,Q,EAGhLzC,KAAP,SAAaxR,GACX,IAAwBlX,EAAG2H,EAAMoD,EAA7Bua,EAAM,GAAI0B,EAAM,GAGpB,IAAKhnB,EAAI,EAAGA,EAAIkX,EAAMoO,IAAIzd,OAAQ7H,IAEhC+K,GADApD,EAAOuP,EAAMoO,IAAItlB,IACNsJ,WACXgc,EAAIrc,KAAM8B,IAAQ,EAAK,KACvBua,EAAIrc,KAAY,IAAN8B,GAGVua,EAAMA,EAAI/P,OAAOI,MAAM/T,UAAUuQ,MAAMhS,KAAKwH,IAI9C,IAAK3H,EAAI,EAAGA,EAAIkX,EAAM8P,IAAInf,OAAQ7H,IAEhC+K,GADApD,EAAOuP,EAAM8P,IAAIhnB,IACNsJ,WACX0d,EAAI/d,KAAM8B,IAAQ,EAAK,KACvBic,EAAI/d,KAAY,IAAN8B,GAEVic,EAAMA,EAAIzR,OAAOI,MAAM/T,UAAUuQ,MAAMhS,KAAKwH,IAG9C,IAAI+kB,EAAOnE,EAAIqD,IAAIrD,EAAIE,MAAME,KAAM,IAAIpf,WAAW,CAC9C,EACA+b,EAAI,GACJA,EAAI,GACJA,EAAI,GACJ,IACA,IAAOpO,EAAMoO,IAAIzd,QACjB0N,OAAO+P,GAAK/P,OAAO,CACnB2B,EAAM8P,IAAInf,SACT0N,OAAOyR,KACV9I,EAAQhH,EAAMgH,MACdE,EAASlH,EAAMkH,OACfuO,EAAWzV,EAAM+G,WAAW,GAC5B2O,EAAW1V,EAAM+G,WAAW,GAE9B,OAAOsK,EAAIqD,IAAIrD,EAAIE,MAAMC,KAAM,IAAInf,WAAW,CAC5C,EAAM,EAAM,EACZ,EAAM,EAAM,EACZ,EAAM,EACN,EAAM,EACN,EAAM,EACN,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EACjB2U,GAAS,EAAK,IACP,IAARA,EACCE,GAAU,EAAK,IACP,IAATA,EACA,EAAM,GAAM,EAAM,EAClB,EAAM,GAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EACN,GACA,IAAM,GAAM,IAAM,IAClB,IAAM,IAAM,IAAM,IAClB,IAAM,IAAM,IAAM,GAClB,IAAM,IAAM,IAAM,GAClB,IAAM,IAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EACZ,EAAM,GACN,GAAM,KACRsO,EACAnE,EAAIqD,IAAIrD,EAAIE,MAAMG,KAAM,IAAIrf,WAAW,CACrC,EAAM,GAAM,IAAM,IAClB,EAAM,GAAM,IAAM,IAClB,EAAM,GAAM,IAAM,OACpBgf,EAAIqD,IAAIrD,EAAIE,MAAMmB,KAAM,IAAIrgB,WAAW,CACpCojB,GAAY,GACZA,GAAY,GAAM,IAClBA,GAAY,EAAK,IACP,IAAXA,EACCC,GAAY,GACZA,GAAY,GAAM,IAClBA,GAAY,EAAK,IACP,IAAXA,O,EAIG7D,KAAP,SAAa7R,GACX,IAAI2V,EAAY3V,EAAM1E,OAAO3K,OAC7B,OAAO,IAAI0B,WAAW,CACpB,EACA,EAAM,EAAM,EAEZ,EACA,GAAOsjB,EACP,EAAM,EACN,EAEA,EACA,GAAOA,EACP,GACA,GACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAElB,GACAtX,OAAO,CAACsX,IAAYtX,OAAO2B,EAAM1E,QAAQ+C,OAAO,CAAC,EAAM,EAAM,M,EAG1DkU,KAAP,SAAavS,GACX,IAAIE,EAAaF,EAAME,WACvB,OAAOmR,EAAIqD,IAAIrD,EAAIE,MAAMgB,KAAM,IAAIlgB,WAAW,CAC5C,EAAM,EAAM,EACZ,EAAM,EAAM,EACZ,EAAM,EACN,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM2N,EAAMa,aACZ,EAAM,GACN,EAAM,EAAM,EAAM,EACjBX,GAAc,EAAK,IACP,IAAbA,EACA,EAAM,IACRmR,EAAIqD,IAAIrD,EAAIE,MAAMM,KAAMR,EAAIQ,KAAK7R,M,EAG5BuM,IAAP,SAAYvM,GACV,IAAIE,EAAaF,EAAME,WACvB,OAAOmR,EAAIqD,IAAIrD,EAAIE,MAAM,QAAS,IAAIlf,WAAW,CAC/C,EAAM,EAAM,EACZ,EAAM,EAAM,EACZ,EAAM,EACN,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM2N,EAAMa,aACZ,EAAM,GACN,EAAM,EAAM,EAAM,EACjBX,GAAc,EAAK,IACP,IAAbA,EACA,EAAM,M,EAGH6S,KAAP,SAAa/S,GACX,MAAmB,UAAfA,EAAMxU,KACHwU,EAAMwC,OAAyB,QAAhBxC,EAAMc,MAInBuQ,EAAIqD,IAAIrD,EAAIE,MAAMwB,KAAM1B,EAAIgD,KAAMhD,EAAIkB,KAAKvS,IAHzCqR,EAAIqD,IAAIrD,EAAIE,MAAMwB,KAAM1B,EAAIgD,KAAMhD,EAAI9E,IAAIvM,IAK5CqR,EAAIqD,IAAIrD,EAAIE,MAAMwB,KAAM1B,EAAIgD,KAAMhD,EAAIG,KAAKxR,K,EAI/CwT,KAAP,SAAaxT,GACX,IAAIsC,EAAKtC,EAAMsC,GACbH,EAAWnC,EAAMmC,SAAWnC,EAAM6U,UAClC7N,EAAQhH,EAAMgH,MACdE,EAASlH,EAAMkH,OACf4N,EAAoBtiB,KAAK8V,MAAMnG,GAAYgP,EAAa,IACxD4D,EAAoBviB,KAAK8V,MAAMnG,GAAYgP,EAAa,IAC1D,OAAOE,EAAIqD,IAAIrD,EAAIE,MAAMiC,KAAM,IAAInhB,WAAW,CAC5C,EACA,EAAM,EAAM,EACZ,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC1C,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EACzCiQ,GAAM,GAAM,IACZA,GAAM,GAAM,IACZA,GAAM,EAAK,IACP,IAALA,EACA,EAAM,EAAM,EAAM,EACjBwS,GAAqB,GACrBA,GAAqB,GAAM,IAC3BA,GAAqB,EAAK,IACP,IAApBA,EACCC,GAAqB,GACrBA,GAAqB,GAAM,IAC3BA,GAAqB,EAAK,IACP,IAApBA,EACA,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EACN,EAAM,EACN,EAAM,EACN,EAAM,EACN,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,GAAM,EAAM,EAAM,EACjB/N,GAAS,EAAK,IACP,IAARA,EACA,EAAM,EACLE,GAAU,EAAK,IACP,IAATA,EACA,EAAM,M,EAIHkM,KAAP,SAAapT,EAAOiV,GAClB,IAAIW,EAAwBvE,EAAIsB,KAAK3S,GACnCsC,EAAKtC,EAAMsC,GACXuT,EAA+BrjB,KAAK8V,MAAM2M,GAAuB9D,EAAa,IAC9E2E,EAA+BtjB,KAAK8V,MAAM2M,GAAuB9D,EAAa,IAChF,OAAOE,EAAIqD,IAAIrD,EAAIE,MAAM6B,KACvB/B,EAAIqD,IAAIrD,EAAIE,MAAM4B,KAAM,IAAI9gB,WAAW,CACrC,EACA,EAAM,EAAM,EACXiQ,GAAM,GACNA,GAAM,GAAM,IACZA,GAAM,EAAK,IACN,IAALA,KAEH+O,EAAIqD,IAAIrD,EAAIE,MAAM2B,KAAM,IAAI7gB,WAAW,CACrC,EACA,EAAM,EAAM,EACXwjB,GAAgC,GAChCA,GAAgC,GAAM,IACtCA,GAAgC,EAAK,IACN,IAA/BA,EACAC,GAAgC,GAChCA,GAAgC,GAAM,IACtCA,GAAgC,EAAK,IACN,IAA/BA,KAEHzE,EAAIiC,KAAKtT,EACP4V,EAAsBjlB,OACV,GACA,GACA,EACA,GACA,EACA,GACdilB,I,EAQGvC,KAAP,SAAarT,GAEX,OADAA,EAAMmC,SAAWnC,EAAMmC,UAAY,WAC5BkP,EAAIqD,IAAIrD,EAAIE,MAAM8B,KAAMhC,EAAImC,KAAKxT,GAAQqR,EAAIa,KAAKlS,K,EAGpDuT,KAAP,SAAavT,GACX,IAAIsC,EAAKtC,EAAMsC,GACf,OAAO+O,EAAIqD,IAAIrD,EAAIE,MAAMgC,KAAM,IAAIlhB,WAAW,CAC5C,EACA,EAAM,EAAM,EACXiQ,GAAM,GACNA,GAAM,GAAM,IACZA,GAAM,EAAK,IACN,IAALA,EACD,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,EAClB,EAAM,EAAM,EAAM,M,EAIfgR,KAAP,SAAatT,EAAOtP,GAClB,IAIE5H,EAAG+Y,EAAQM,EAAUlR,EAAMmkB,EAAOW,EAJhCnU,EAAU5B,EAAM4B,SAAW,GAC7B/N,EAAM+N,EAAQjR,OACdqlB,EAAW,GAAM,GAAKniB,EACtBX,EAAQ,IAAIb,WAAW2jB,GAezB,IAbAtlB,GAAU,EAAIslB,EACd9iB,EAAM2R,IAAI,CACR,EACA,EAAM,GAAM,EACXhR,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,EACCnD,IAAW,GAAM,IACjBA,IAAW,GAAM,IACjBA,IAAW,EAAK,IACR,IAATA,GACC,GACE5H,EAAI,EAAGA,EAAI+K,EAAK/K,IAEnBqZ,GADAN,EAASD,EAAQ9Y,IACCqZ,SAClBlR,EAAO4Q,EAAO5Q,KACdmkB,EAAQvT,EAAOuT,MACfW,EAAMlU,EAAOkU,IACb7iB,EAAM2R,IAAI,CACP1C,IAAa,GAAM,IACnBA,IAAa,GAAM,IACnBA,IAAa,EAAK,IACR,IAAXA,EACClR,IAAS,GAAM,IACfA,IAAS,GAAM,IACfA,IAAS,EAAK,IACR,IAAPA,EACCmkB,EAAMa,WAAa,EAAKb,EAAMC,UAC9BD,EAAME,cAAgB,EACpBF,EAAMG,eAAiB,EACvBH,EAAMc,cAAgB,EACvBd,EAAMe,UACW,MAAnBf,EAAMgB,WACa,GAAnBhB,EAAMgB,WACLL,IAAQ,GAAM,IACdA,IAAQ,GAAM,IACdA,IAAQ,EAAK,IACR,IAANA,GACC,GAAK,GAAKjtB,GAEf,OAAOuoB,EAAIqD,IAAIrD,EAAIE,MAAM+B,KAAMpgB,I,EAG1B+O,YAAP,SAAoBiT,GACb7D,EAAIE,OACPF,EAAIC,OAGN,IAA8BhV,EAA1B+Z,EAAQhF,EAAIiB,KAAK4C,GAIrB,OAHA5Y,EAAS,IAAIjK,WAAWgf,EAAIoD,KAAKriB,WAAaikB,EAAMjkB,aAC7CyS,IAAIwM,EAAIoD,MACfnY,EAAOuI,IAAIwR,EAAOhF,EAAIoD,KAAKriB,YACpBkK,G,KCloBJ,SAASga,EAAqBvsB,EAAOwsB,EAAmBC,EAAqB/jB,QAAgC,IAArD+jB,MAAkB,QAAmC,IAAhC/jB,OAAiB,GACnG,IAAM6J,EAASvS,EAAQwsB,EAAYC,EACnC,OAAO/jB,EAAQD,KAAKC,MAAM6J,GAAUA,EAG/B,SAASma,EAAqB1sB,EAAe0I,GAClD,YADkF,IAAhCA,OAAiB,GAC5D6jB,EAAoBvsB,EAAO,IAAM,EAZZ,IAYuC0I,GAG9D,SAASikB,EAA4B3sB,EAAe4sB,GACzD,YADuF,IAA9BA,MAAmB,GACrEL,EAAoBvsB,EAhBC,IAgB6B,EAAI4sB,GCF/D,IAAMC,EAAkCF,EAA2B,IAC7DG,EAAgCH,EAA2B,IAE7DI,EAAgB,KAgyBpB,SAASC,EAAchtB,EAAOitB,GAC5B,IAAItmB,EACJ,QAAkByK,IAAd6b,EACF,OAAOjtB,EAaT,IARE2G,EAFEsmB,EAAYjtB,GAEJ,WAGD,WAKJyI,KAAKue,IAAIhnB,EAAQitB,GAAa,YACnCjtB,GAAS2G,EAGX,OAAO3G,EAGMktB,ICjzBXC,EDizBWD,E,WApzBb,WAAa5b,EAAUC,EAAQ+N,EAAe8N,GAK5C,GAJAzuB,KAAK2S,SAAWA,EAChB3S,KAAK4S,OAASA,EACd5S,KAAK2gB,cAAgBA,EACrB3gB,KAAK0uB,aAAc,EACG,OAAlBN,EAAwB,CAC1B,IAAMxa,EAASkE,UAAUD,UAAU8W,MAAM,kBACzCP,EAAgBxa,EAAS8H,SAAS9H,EAAO,IAAM,G,2BAInDpB,QAAA,a,EAGAwH,eAAA,SAAgB4U,GACd5uB,KAAKmkB,SAAWnkB,KAAKokB,SAAWwK,G,EAGlCtV,iBAAA,WACEtZ,KAAK0uB,aAAc,G,EAGrBG,iBAAA,SAAkBC,GAChB,IAAIC,GAAmB,EACjBC,EAAWF,EAAaG,QAAO,SAACC,EAAQ/V,GAC5C,IAAMgW,EAAQhW,EAAOV,IAAMyW,EAC3B,OAAIC,GAAS,YACXJ,GAAmB,EACZV,EAAaa,EAAQ/V,EAAOV,MAC1B0W,EAAQ,EACVD,EAEA/V,EAAOV,MAEfqW,EAAa,GAAGrW,KAInB,OAHIsW,GACFlrB,IAAOtB,MAAM,yBAERysB,G,EAGTzU,MAAA,SAAO6H,EAAY4B,EAAY3B,EAAU4B,EAAW9J,EAAYC,EAAYC,GAM1E,GAJKra,KAAK0uB,aACR1uB,KAAKovB,WAAWhN,EAAY4B,EAAY7J,GAGtCna,KAAK0uB,YAAa,CACpB,IAAMW,EAAiBjN,EAAWlJ,QAAQjR,OACpCqnB,EAAiBtL,EAAW9K,QAAQjR,OACtCsnB,EAAkBpV,EAClBqV,EAAkBrV,EACtB,GAAIkV,GAAkBC,EAAgB,CAKpC,IAAMN,EAAWhvB,KAAK6uB,iBAAiB7K,EAAW9K,SAE5CuW,GADUpB,EAAajM,EAAWlJ,QAAQ,GAAGT,IAAKuW,GAAYA,GACzBhL,EAAWjK,eACtDwV,GAAmBzlB,KAAK4lB,IAAI,EAAGD,GAC/BD,GAAmB1lB,KAAK4lB,IAAI,GAAID,GAKlC,GAAIJ,EAAgB,CAEbjN,EAAW+J,YACdtoB,IAAOpB,KAAK,4CACZzC,KAAKovB,WAAWhN,EAAY4B,EAAY7J,IAE1C,IAGMwV,EAHF/M,EAAY5iB,KAAK4vB,WAAWxN,EAAYmN,EAAiBnV,EAAYC,GAEzE,GAAIiV,EAEE1M,IACF+M,EAAmB/M,EAAUiN,OAASjN,EAAUoM,UAI7ChL,EAAWmI,YACdtoB,IAAOpB,KAAK,4CACZzC,KAAKovB,WAAWhN,EAAY4B,EAAY7J,IAE1Cna,KAAK8vB,WAAW9L,EAAYwL,EAAiBpV,EAAYuV,QAI3D,GAAIL,EAAgB,CAClB,IAAIS,EAAY/vB,KAAK8vB,WAAW9L,EAAYwL,EAAiBpV,EAAY,EAAGC,GACxE0V,GAAa3N,EAAWhK,OAC1BpY,KAAKgwB,gBAAgB5N,EAAYmN,EAAiBnV,EAAY2V,IAMlE1N,EAASnJ,QAAQjR,QACnBjI,KAAKiwB,SAAS5N,EAAUlI,GAItB8J,EAAU/K,QAAQjR,QACpBjI,KAAKkwB,UAAUjM,EAAW9J,GAI5Bna,KAAK2S,SAASmB,QAAQC,IAAMpN,c,EAG9ByoB,WAAA,SAAYhN,EAAY4B,EAAY7J,GAClC,IAQEgW,EAASC,EARPzd,EAAW3S,KAAK2S,SAClB0d,EAAejO,EAAWlJ,QAC1B4V,EAAe9K,EAAW9K,QAC1ByH,EAAgB3gB,KAAK2gB,cACrBhH,EAAY,YACZ6S,EAAS,GACTzkB,EAAO,CAAEykB,UACT8D,OAAmC7d,IAAlBzS,KAAKmkB,SAoCxB,GAjCImM,IACFH,EAAUC,EAAUG,KAGlBnO,EAAWxP,QAAUyd,EAAapoB,SAKpCma,EAAW+J,UAAY/J,EAAW5K,WAClC3T,IAAOrB,IAAP,yBAAoC4f,EAAW5K,YAC1C4K,EAAWtI,QACV6G,EAAciD,MAChBjK,EAAY,aACZyI,EAAWhK,MAAQ,IACVuI,EAAckD,MACvBzB,EAAWhK,MAAQ,QAGvBoU,EAAOhM,MAAQ,CACb7G,UAAWA,EACXvB,MAAOgK,EAAWhK,MAClBmB,aAAc6I,EAAWtI,OAAS6G,EAAciD,KAAO,IAAIja,WAAegf,EAAIpP,YAAY,CAAC6I,IAC3FoO,SAAU,CACRrY,aAAciK,EAAWjK,eAGzBmY,IAEFH,EAAUC,EAAUC,EAAa,GAAG5X,IAAM3O,KAAKC,MAAMqY,EAAWrI,eAAiBI,KAIjF6J,EAAW0B,KAAO1B,EAAWoD,KAAO0H,EAAa7mB,OAAQ,CAG3D,IAAM8R,EAAiBiK,EAAWjK,eAWlC,GAVAiK,EAAWmI,UAAYpS,EACvByS,EAAOjM,MAAQ,CACb5G,UAAW,YACXvB,MAAO4L,EAAW5L,MAClBmB,YAAaoP,EAAIpP,YAAY,CAACyK,IAC9BwM,SAAU,CACRlS,MAAO0F,EAAW1F,MAClBE,OAAQwF,EAAWxF,SAGnB8R,EAAe,CACjB,IAAMtB,EAAWhvB,KAAK6uB,iBAAiBC,GACjC2B,EAAc3mB,KAAKC,MAAMgQ,EAAiBI,GAChDiW,EAAUtmB,KAAKoS,IAAIkU,EAAS/B,EAAaS,EAAa,GAAG7V,IAAK+V,GAAYyB,GAC1EN,EAAUrmB,KAAKoS,IAAIiU,EAASnB,EAAWyB,GACvCzwB,KAAK2S,SAASmB,QAAQC,IAAM9N,eAAgB,CAAEkqB,kBAEvCG,GAAiB9D,EAAOhM,OAEjCxgB,KAAK2S,SAASmB,QAAQC,IAAM9N,eAAgB,CAAEkqB,YAG5CrvB,OAAO4vB,KAAKlE,GAAQvkB,QACtB0K,EAASmB,QAAQC,IAAMxN,0BAA2BwB,GAClD/H,KAAK0uB,aAAc,EACf4B,IACFtwB,KAAKmkB,SAAWgM,EAChBnwB,KAAKokB,SAAWgM,IAGlBzd,EAASmB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAW0M,YAAaC,QAAS1M,IAAa8Q,mBAAoBlE,OAAO,EAAOC,OAAQ,kC,EAIlI0b,WAAA,SAAYxY,EAAO6C,EAAYC,EAAYuV,GACzC,IAOIgB,EACArH,EACAK,EACAiH,EACAC,EAXEC,EAAYxZ,EAAM6U,UAClB4E,EAAezZ,EAAM4B,QACrB8X,EAAgB,GAChB1L,EAAYyL,EAAa9oB,OACzBkoB,EAAUnwB,KAAKmkB,SAEjBnc,EAAS,EAMTknB,EAASznB,OAAOwpB,kBAChBC,EAASzpB,OAAO0pB,kBAChBC,EAAc,EACdC,GAAc,EAGdC,EAAatxB,KAAKsxB,WAEtB,GAAkB,IAAdhM,EAAJ,CAIA,IAAKlL,EAIHkX,EAHYnX,EAAa2W,GACbC,EAAa,GAAGtY,IAAM4V,EAAa0C,EAAa,GAAG9X,IAAK8X,EAAa,GAAGtY,MAOtF,IAAK,IAAIrY,EAAI,EAAGA,EAAIklB,EAAWllB,IAAK,CAClC,IAAM+Y,EAAS4X,EAAa3wB,GAC5B+Y,EAAOV,IAAM4V,EAAalV,EAAOV,IAAM0X,EAASmB,GAChDnY,EAAOF,IAAMoV,EAAalV,EAAOF,IAAMkX,EAASmB,GAC5CnY,EAAOF,IAAME,EAAOV,MACtB2Y,EAActnB,KAAK4lB,IAAI5lB,KAAKoS,IAAIkV,EAAajY,EAAOV,IAAMU,EAAOF,MAAO,EAAIkV,IAE1EhV,EAAOF,IAAM8X,EAAa3wB,EAAI,EAAIA,EAAI,EAAIA,GAAG6Y,MAC/CoY,GAAc,GAKdA,GACFN,EAAaQ,MAAK,SAAUC,EAAGnL,GAC7B,IAAMoL,EAAWD,EAAEvY,IAAMoN,EAAEpN,IACrByY,EAAWF,EAAE/Y,IAAM4N,EAAE5N,IAC3B,OAAOgZ,GAAaC,GAAaF,EAAE5X,GAAKyM,EAAEzM,MAK9CgX,EAAWG,EAAa,GAAG9X,IAC3B4X,EAAUE,EAAazL,EAAY,GAAGrM,IAKtC,IAAM0Y,EAAwB7nB,KAAKC,OAAO8mB,EAAUD,IAAatL,EAAY,IAG7E,GAAI8L,EAAc,EAAG,CACnB,GAAIA,GAAuC,EAAzBO,EAA4B,CAG5C9tB,IAAOpB,KAAP,mEAA+EsrB,GAAqB4D,GAAuB,GAA3H,OAEA,IADA,IAAIC,EAAUR,EACLhxB,EAAI,EAAGA,EAAIklB,EAAWllB,IAC7B2wB,EAAa3wB,GAAG6Y,IAAM2Y,EAAU9nB,KAAK4lB,IAAIkC,EAASb,EAAa3wB,GAAGqY,IAAMkZ,GACxEZ,EAAa3wB,GAAGqY,IAAM3O,KAAK4lB,IAAIkC,EAASb,EAAa3wB,GAAGqY,SAErD,CAGL5U,IAAOpB,KAAP,wDAAoEsrB,EAAoBqD,GAAa,GAArG,8BACA,IAAK,IAAIhxB,EAAI,EAAGA,EAAIklB,EAAWllB,IAC7B2wB,EAAa3wB,GAAG6Y,IAAM8X,EAAa3wB,GAAG6Y,IAAMmY,EAGhDR,EAAWG,EAAa,GAAG9X,IAC3B4X,EAAUE,EAAazL,EAAY,GAAGrM,IAIxC,GAAImB,EAAY,CAEd,IAAM+U,EAAQyB,EAAWU,EACnBO,EAAY1C,EAAQwC,EAE1B,GAAIE,GADiB1C,GAAS,EACC,CACzB0C,EACFhuB,IAAOpB,KAAP,QAAoBsrB,EAAoBoB,GAAO,GAA/C,QAA4DA,EAA5D,oDAEAtrB,IAAOpB,KAAP,QAAoBsrB,GAAqBoB,GAAO,GAAhD,QAA6DA,EAA7D,+CAEFyB,EAAWU,EACX,IAAMQ,EAAWf,EAAa,GAAGtY,IAAM0W,EACvC4B,EAAa,GAAG9X,IAAM2X,EACtBG,EAAa,GAAGtY,IAAMqZ,EACtBjuB,IAAOrB,IAAP,kCAA6CurB,EAAoB+D,GAAU,GAA3E,IAAoF/D,EAAoB6C,GAAU,GAAlH,YAAmI7C,EAAoBoB,GAAO,GAA9J,QAIAf,GAAiBA,EAAgB,KACnCwC,EAAW9mB,KAAK4lB,IAAI,EAAGkB,IAIzB,IAFA,IAAImB,EAAS,EACTC,EAAU,EACL5xB,EAAI,EAAGA,EAAIklB,EAAWllB,IAAK,CAMlC,IAJA,IAAM+Y,EAAS4X,EAAa3wB,GACtBigB,EAAQlH,EAAOkH,MACf4R,EAAU5R,EAAMpY,OAClBiqB,EAAY,EACPzb,EAAI,EAAGA,EAAIwb,EAASxb,IAC3Byb,GAAa7R,EAAM5J,GAAG1O,KAAKE,OAG7B+pB,GAAWE,EACXH,GAAUE,EACV9Y,EAAOlR,OAASiqB,EAIhB/Y,EAAOF,IAAMnP,KAAK4lB,IAAIvW,EAAOF,IAAK2X,GAElCzX,EAAOV,IAAM3O,KAAK4lB,IAAIvW,EAAOV,IAAKU,EAAOF,IAAK,GAC9CiW,EAASplB,KAAKoS,IAAI/C,EAAOV,IAAKyW,GAC9BgC,EAASpnB,KAAK4lB,IAAIvW,EAAOV,IAAKyY,GAEhCL,EAAUE,EAAazL,EAAY,GAAGrM,IAItC,IAAIkZ,EAAWH,EAAW,EAAID,EAAU,EACxC,IACEzI,EAAO,IAAI3f,WAAWwoB,GACtB,MAAOze,GAEP,YADA1T,KAAK2S,SAASmB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAW8qB,UAAWne,QAAS1M,IAAa8qB,kBAAmBle,OAAO,EAAOuS,MAAOyL,EAAU/d,OAAQ,8BAA8B+d,IAGjL,IAAItjB,EAAO,IAAIC,SAASwa,EAAKnf,QAC7B0E,EAAKyjB,UAAU,EAAGH,GAClB7I,EAAKnN,IAAIwM,EAAIE,MAAMS,KAAM,GAEzB,IAAK,IAAIlpB,EAAI,EAAGA,EAAIklB,EAAWllB,IAAK,CAMlC,IALA,IAGImyB,EAHE1Q,EAAYkP,EAAa3wB,GACzBoyB,EAAiB3Q,EAAUxB,MAC7BoS,EAAkB,EAGbhc,EAAI,EAAGwb,EAAUO,EAAevqB,OAAQwO,EAAIwb,EAASxb,IAAK,CACjE,IAAMuC,GAAOwZ,EAAe/b,GACtBic,GAAW1Z,GAAKjR,KAChB4qB,GAAc3Z,GAAKjR,KAAK2B,WAC9BmF,EAAKyjB,UAAUtqB,EAAQ2qB,IACvB3qB,GAAU,EACVshB,EAAKnN,IAAIuW,GAAU1qB,GACnBA,GAAU2qB,GACVF,GAAmB,EAAIE,GAIzB,GAAIvyB,EAAIklB,EAAY,EAClBqL,EAAoBI,EAAa3wB,EAAI,GAAG6Y,IAAM4I,EAAU5I,QACnD,CACL,IAAMrG,GAAS5S,KAAK4S,OACdggB,GAAoB/Q,EAAU5I,IAAM8X,EAAa3wB,EAAI,EAAIA,EAAI,EAAIA,GAAG6Y,IAC1E,GAAIrG,GAAOigB,uBAAwB,CAMjC,IAAMC,GAAgBlgB,GAAOkgB,cACvBC,GAAejpB,KAAK8V,MAAMkT,GAAgBhC,GAC1CkC,IAAmBrD,EAAmBT,EAASS,EAAmBmB,EAAY9wB,KAAKizB,cAAgBpR,EAAUpJ,IAC/Gua,GAAkBD,KAGpBpC,EAAoBqC,GAAkBJ,IACd,IACtBjC,EAAoBiC,IAGtB/uB,IAAOrB,IAAP,uBAAkCurB,EAAoBiF,IAAiB,GAAvE,2CAAwHjF,EAAoB4C,GAAmB,GAA/J,kCAEAA,EAAoBiC,QAGtBjC,EAAoBiC,GAGxBL,EAAwBzoB,KAAKC,MAAM8X,EAAUpJ,IAAMoJ,EAAU5I,KAG7D+X,EAAc3nB,KAAK,CACjBd,KAAMkqB,EAENhZ,SAAUkX,EACVtD,IAAKkF,EACL7F,MAAO,CACLa,UAAW,EACXX,aAAc,EACdC,cAAe,EACfa,WAAY,EACZf,UAAW9K,EAAUlgB,IAAM,EAAI,EAC/B8rB,UAAW5L,EAAUlgB,IAAM,EAAI,KAKrC3B,KAAKsxB,WAAaT,EAAUF,EAC5B,IAAMtP,GAAU/J,EAAM+J,QAGtB,GAFA/J,EAAMya,OAAS,EACfza,EAAM+J,QAAU,EACZ2P,EAAc/oB,QAAU6P,UAAUD,UAAUE,cAAcjN,QAAQ,WAAa,EAAG,CACpF,IAAM4hB,GAAQsE,EAAc,GAAGtE,MAG/BA,GAAMC,UAAY,EAClBD,GAAMe,UAAY,EAEpBnW,EAAM4B,QAAU8X,EAChBrH,EAAOhB,EAAIgB,KAAKrS,EAAMuC,iBAAkB+W,EAAUtZ,GAClDA,EAAM4B,QAAU,GAEhB,IAAMnR,GAAO,CACXmrB,MAAOvJ,EACPwJ,MAAO7J,EACP0F,SAAUE,EAAS4B,EACnBjB,QAASqB,EAASP,GAAqBG,EACvCsC,SAAUxC,EAAWE,EACrBuC,OAAQrzB,KAAKsxB,WAAaR,EAC1BhuB,KAAM,QACNwwB,UAAU,EACVC,UAAU,EACVC,GAAIxC,EAAc/oB,OAClBoZ,QAASA,IAGX,OADArhB,KAAK2S,SAASmB,QAAQC,IAAMrN,kBAAmBqB,IACxCA,K,EAGT6nB,WAAA,SAAYtY,EAAO6C,EAAYC,EAAYC,GACzC,IAQIoZ,EACAC,EACApK,EACAK,EACAmI,EACA6B,EAbE5Z,EAAiBzC,EAAMyC,eACvB6Z,EAAetc,EAAM6U,UACrB0H,EAAc9Z,EAAiB6Z,EAE/BE,GADoBxc,EAAMwC,MAAQ,KAAO,MACC+Z,EAC1C1D,EAAUnwB,KAAKmkB,SACf4P,GAAWzc,EAAMwC,OAAS9Z,KAAK2gB,cAAciD,KAQ/C5b,EAAU+rB,EAAU,EAAI,EACxBhD,EAAezZ,EAAM4B,QACrB8X,EAAgB,GAChBiC,EAAejzB,KAAKizB,aA0BxB,GAhBA7Y,GAAe2W,EAAa9oB,QAAUgrB,IACrB5Y,GAAsBvQ,KAAKue,IAAIlO,EAAa8Y,EAAelZ,GAAkB,IAC9EjQ,KAAKue,IAAK0I,EAAa,GAAGtY,IAAMwa,EAAe9C,GAAY,GAAK2D,GAIhF/C,EAAartB,SAAQ,SAAUyV,GAC7BA,EAAOV,IAAMU,EAAOF,IAAMoV,EAAalV,EAAOV,IAAM0X,EAAShW,EAAaJ,MAShD,KAH5BgX,EAAeA,EAAaiD,QAAO,SAAC7a,GAAD,OAAYA,EAAOV,KAAO,MAG5CxQ,OAAjB,CAoBA,GAhBKmS,IAMD6Y,EALG5Y,EAKYvQ,KAAK4lB,IAAI,EAAGvV,EAAaJ,GAHzBgX,EAAa,GAAGtY,KAa/BnB,EAAMwC,MAER,IADA,IAAMma,EAAsBj0B,KAAK4S,OAAOqhB,oBAC/B7zB,EAAI,EAAG8zB,EAAUjB,EAAc7yB,EAAI2wB,EAAa9oB,QAAS,CAEhE,IAAMkR,EAAS4X,EAAa3wB,GACxBqY,EAAMU,EAAOV,IACb0W,EAAQ1W,EAAMyb,EAGlB,GAAI/E,IAAU8E,EAAsBH,EAC9B1Z,GAAcha,EAAI,GACpByD,IAAOpB,KAAP,4BAAwCsrB,EAAoBmG,GAAS,GAAQ,IAA7E,YAA6FnG,EAAoBoB,GAAO,GAAxH,gBACA4B,EAAa5L,OAAO/kB,EAAG,KAKvByD,IAAOpB,KAAP,iBAA6BsrB,EAAoBtV,GAAK,GAAQ,IAA9D,8BAAgGsV,EAAoBoB,GAAO,GAA3H,QACA+E,EAAUzb,EAAMqb,EAChB1zB,UAQC,GAAI+uB,GAAS8E,EAAsBH,GAAuB3E,EAAQjB,GAAmCgG,EAAS,CACjH,IAAIC,EAAUrqB,KAAKC,MAAMolB,EAAQ2E,GACjCjwB,IAAOpB,KAAP,aAAyB0xB,EAAzB,mBAAmDpG,EAAoBmG,GAAS,GAAQ,IAAxF,YAAwGnG,EAAoBoB,GAAO,GAAnI,YACA,IAAK,IAAI1Y,EAAI,EAAGA,EAAI0d,EAAS1d,IAAK,CAChC,IAAI2d,EAAWtqB,KAAK4lB,IAAIwE,EAAS,IACjCR,EAAYnL,EAAIC,eAAelR,EAAMU,eAAiBV,EAAMc,MAAOd,EAAMa,iBAEvEtU,IAAOrB,IAAI,qFACXkxB,EAAYva,EAAOH,KAAK1Q,YAE1ByoB,EAAa5L,OAAO/kB,EAAG,EAAG,CAAE4Y,KAAM0a,EAAWjb,IAAK2b,EAAUnb,IAAKmb,IACjEF,GAAWJ,EACX1zB,IAIF+Y,EAAOV,IAAMU,EAAOF,IAAMib,EAC1BA,GAAWJ,EACX1zB,SAGI0J,KAAKue,IAAI8G,GAGbhW,EAAOV,IAAMU,EAAOF,IAAMib,EAC1BA,GAAWJ,EACX1zB,IAQN,IAFA,IAAIklB,EAAYyL,EAAa9oB,OACzBkqB,EAAW,EACR7M,KACL6M,GAAYpB,EAAazL,GAAWtM,KAAKtP,WAG3C,IAAK,IAAI+M,EAAI,EAAG6O,EAAYyL,EAAa9oB,OAAQwO,EAAI6O,EAAW7O,IAAK,CACnE,IAAI4d,EAActD,EAAata,GAC3BuC,EAAOqb,EAAYrb,KACnBP,EAAM4b,EAAY5b,IAKtB,QAAgBhG,IAAZkhB,GAAyBF,EAC3BA,EAAUha,SAAW3P,KAAKC,OAAO0O,EAAMkb,GAAWE,OAC7C,CACL,IAAI1E,EAAQ1W,EAAMwa,EACdqB,EAAmB,EAIvB,GAAIla,GAAc9C,EAAMwC,OAElBqV,EAAO,CACT,GAAIA,EAAQ,GAAKA,EAAQjB,EAGvBoG,EAAmBxqB,KAAKC,OAAO0O,EAAMwa,GAAgBa,GAErDjwB,IAAOrB,IAAOurB,EAAoBoB,GAAO,GAAzC,oDACImF,EAAmB,KACrBZ,EAAYnL,EAAIC,eAAelR,EAAMU,eAAiBV,EAAMc,MAAOd,EAAMa,iBAEvEub,EAAY1a,EAAK1Q,YAGnB6pB,GAAYmC,EAAmBZ,EAAUzrB,aAGtC,GAAIknB,GAAS,GAAI,CAEtBtrB,IAAOrB,IAAP,uDAAkEurB,EAAoBkF,GAAc,GAApG,SAAkHlF,EAAoBtV,GAAK,GAA3I,SAAyJsV,GAAqBoB,GAAO,GAArL,OACAgD,GAAYnZ,EAAKtP,WACjB,SAGF+O,EAAMwa,EAKV,GADAnB,EAAWrZ,IACP0Z,EAAW,GAeb,OAdAA,GAAYnqB,EACZ,IACEshB,EAAO,IAAI3f,WAAWwoB,GACtB,MAAOze,GAEP,YADA1T,KAAK2S,SAASmB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAW8qB,UAAWne,QAAS1M,IAAa8qB,kBAAmBle,OAAO,EAAOuS,MAAOyL,EAAU/d,OAAQ,8BAA8B+d,IAG5K4B,IACU,IAAIjlB,SAASwa,EAAKnf,QAC1BmoB,UAAU,EAAGH,GAClB7I,EAAKnN,IAAIwM,EAAIE,MAAMS,KAAM,IAM7B,IAAK,IAAIlpB,EAAI,EAAGA,EAAIk0B,EAAkBl0B,KACpCszB,EAAYnL,EAAIC,eAAelR,EAAMU,eAAiBV,EAAMc,MAAOd,EAAMa,iBAEvEtU,IAAOrB,IAAI,qFACXkxB,EAAY1a,EAAK1Q,YAEnBghB,EAAKnN,IAAIuX,EAAW1rB,GACpBA,GAAU0rB,EAAUhqB,WACpB+pB,EAAY,CACVlrB,KAAMmrB,EAAUhqB,WAChB2jB,IAAK,EACL5T,SAAU,KACViT,MAAO,CACLa,UAAW,EACXX,aAAc,EACdC,cAAe,EACfa,WAAY,EACZf,UAAW,IAGfqE,EAAc3nB,KAAKoqB,GAGvBnK,EAAKnN,IAAInD,EAAMhR,GACf,IAAIusB,EAAUvb,EAAKtP,WACnB1B,GAAUusB,EAEVd,EAAY,CACVlrB,KAAMgsB,EACNlH,IAAK,EACL5T,SAAU,EACViT,MAAO,CACLa,UAAW,EACXX,aAAc,EACdC,cAAe,EACfa,WAAY,EACZf,UAAW,IAGfqE,EAAc3nB,KAAKoqB,GACnBE,EAAUlb,EAEZ,IAAI+b,EAAqB,EAOzB,IANAlP,EAAY0L,EAAc/oB,SAET,IACfusB,EAAqBxD,EAAc1L,EAAY,GAAG7L,SAClDga,EAAUha,SAAW+a,GAEnBlP,EAAW,CAEbtlB,KAAKizB,aAAeA,EAAeU,EAAUE,EAAcW,EAE3Dld,EAAM4B,QAAU8X,EAEdrH,EADEoK,EACK,IAAIpqB,WAEJgf,EAAIgB,KAAKrS,EAAMuC,iBAAkBiY,EAAW+B,EAAavc,GAGlEA,EAAM4B,QAAU,GAChB,IAAM6I,EAAQ+P,EAAW/X,EACnB7Q,EAAM+pB,EAAelZ,EACrB6I,EAAY,CAChBsQ,MAAOvJ,EACPwJ,MAAO7J,EACP0F,SAAUjN,EACV8N,OAAQ3mB,EACRkqB,SAAUrR,EACVsR,OAAQnqB,EACRpG,KAAM,QACNwwB,UAAU,EACVC,UAAU,EACVC,GAAIlO,GAGN,OADAtlB,KAAK2S,SAASmB,QAAQC,IAAMrN,kBAAmBkc,GACxCA,EAET,OAAO,O,EAGToN,gBAAA,SAAiB1Y,EAAO6C,EAAYC,EAAY2V,GAC9C,IAAIhW,EAAiBzC,EAAMyC,eAEvB8Z,EAAc9Z,GADCzC,EAAME,WAAaF,EAAME,WAAauC,GAErDkZ,EAAejzB,KAAKizB,aAGpBG,QAA6B3gB,IAAjBwgB,EAA6BA,EAAelD,EAAUqD,SAAWrZ,GAAkB/Z,KAAKokB,SACpGiP,EAAStD,EAAUsD,OAAStZ,EAAiB/Z,KAAKokB,SAGlDxL,EADiB,KACDib,EAGhBvO,EAAYxb,KAAKyU,MAAM8U,EAASD,GAAYxa,GAG5C6b,EAAclM,EAAIC,eAAelR,EAAMU,eAAiBV,EAAMc,MAAOd,EAAMa,cAI/E,GAFAtU,IAAOpB,KAAK,qBAEPgyB,EAAL,CAMA,IADA,IAAIvb,EAAU,GACL9Y,EAAI,EAAGA,EAAIklB,EAAWllB,IAAK,CAClC,IAAIyY,EAAQua,EAAWhzB,EAAIwY,EAC3BM,EAAQ7P,KAAK,CAAE2P,KAAMyb,EAAahc,IAAKI,EAAOI,IAAKJ,IAErDvB,EAAM4B,QAAUA,EAEhBlZ,KAAK4vB,WAAWtY,EAAO6C,EAAYC,QAXjCvW,IAAOvB,MAAM,gG,EAcjB2tB,SAAA,SAAU3Y,EAAO6C,GACf,IAAMlS,EAASqP,EAAM4B,QAAQjR,OAC7B,GAAKA,EAAL,CAOA,IAJA,IAAM8R,EAAiBzC,EAAMyC,eACvBoW,EAAUnwB,KAAKmkB,SACfiM,EAAUpwB,KAAKokB,SAEZha,EAAQ,EAAGA,EAAQnC,EAAQmC,IAAS,CAC3C,IAAM+O,EAAS7B,EAAM4B,QAAQ9O,GAG7B+O,EAAOV,IAAM4V,EAAalV,EAAOV,IAAM0X,EAAShW,EAAaJ,GAAkBA,EAC/EZ,EAAOF,IAAMoV,EAAalV,EAAOF,IAAMmX,EAASjW,EAAaJ,GAAkBA,EAEjF/Z,KAAK2S,SAASmB,QAAQC,IAAMtN,sBAAuB,CACjDyS,QAAS5B,EAAM4B,UAGjB5B,EAAM4B,QAAU,K,EAGlBgX,UAAA,SAAW5Y,EAAO6C,GAChB,IAAMlS,EAASqP,EAAM4B,QAAQjR,OACvB8R,EAAiBzC,EAAMyC,eACvBoW,EAAUnwB,KAAKmkB,SAErB,GAAIlc,EAAQ,CACV,IAAK,IAAImC,EAAQ,EAAGA,EAAQnC,EAAQmC,IAAS,CAC3C,IAAM+O,EAAS7B,EAAM4B,QAAQ9O,GAG7B+O,EAAOV,IAAM4V,EAAalV,EAAOV,IAAM0X,EAAShW,EAAaJ,GAAkBA,EAEjFzC,EAAM4B,QAAQqY,MAAK,SAAUC,EAAGnL,GAC9B,OAAQmL,EAAE/Y,IAAM4N,EAAE5N,OAEpBzY,KAAK2S,SAASmB,QAAQC,IAAMvN,sBAAuB,CACjD0S,QAAS5B,EAAM4B,UAInB5B,EAAM4B,QAAU,I,KEhwBLwb,E,WAvCb,WAAa/hB,GACX3S,KAAK2S,SAAWA,E,2BAGlBH,QAAA,a,EAGAwH,eAAA,a,EAGAV,iBAAA,a,EAGAiB,MAAA,SAAO6H,EAAY4B,EAAY3B,EAAU4B,EAAW9J,EAAYC,EAAYC,EAAoBsa,GAC9F,IAAIhiB,EAAW3S,KAAK2S,SAChBiiB,EAAa,GACbxS,IACFwS,GAAc,SAGZ5Q,IACF4Q,GAAc,SAGhBjiB,EAASmB,QAAQC,IAAMrN,kBAAmB,CACxCwsB,MAAOyB,EACP3F,SAAU7U,EACViZ,SAAUjZ,EACVrX,KAAM8xB,EACNtB,WAAYlR,EACZmR,WAAYvP,EACZwP,GAAI,EACJnS,QAAS,IAGX1O,EAASmB,QAAQC,IAAMpN,c,KDpBrB3D,EAASC,cAIf,IACEurB,EAAMxrB,EAAO6xB,YAAYrG,IAAI5sB,KAAKoB,EAAO6xB,aACzC,MAAOnhB,GACP7P,IAAOtB,MAAM,qDACbisB,EAAMxrB,EAAO8xB,KAAKtG,I,IAGduG,E,WACJ,WAAapiB,EAAUgO,EAAe/N,EAAQ6b,GAC5CzuB,KAAK2S,SAAWA,EAChB3S,KAAK2gB,cAAgBA,EACrB3gB,KAAK4S,OAASA,EACd5S,KAAKyuB,OAASA,E,2BAGhBjc,QAAA,WACE,IAAIwiB,EAAUh1B,KAAKg1B,QACfA,GACFA,EAAQxiB,W,EAIZnJ,KAAA,SAAMtB,EAAM4W,EAAapF,EAAahC,EAAYiC,EAAYW,EAAY8a,EAAeC,EAAa9a,EAAYX,EAAUY,EAAoB8a,GAAgB,WAC9J,GAAKptB,EAAK2B,WAAa,GAAsB,MAAfiV,GAA4C,MAAnBA,EAAYhd,KAAwC,YAAvBgd,EAAYoC,OAAuB,CACrH,IAAIlC,EAAY7e,KAAK6e,UACJ,MAAbA,IACFA,EAAY7e,KAAK6e,UAAY,IAAInM,IAAU1S,KAAK2S,SAAU3S,KAAK4S,SAGjE,IAAMwiB,EAAY5G,IAClB3P,EAAU9Q,QAAQhG,EAAM4W,EAAYhd,IAAIwI,OAAQwU,EAAY9Q,GAAG1D,QAAQ,SAACoV,GACtE,IAAM8V,EAAU7G,IAChB,EAAK7b,SAASmB,QAAQC,IAAMzN,eAAgB,CAAEgvB,MAAO,CAAEC,OAAQH,EAAWI,SAAUH,KACpF,EAAKI,cAAc,IAAI9rB,WAAW4V,GAAgBZ,EAAa,IAAIhV,WAAW4P,GAAchC,EAAYiC,EAAYW,EAAY8a,EAAeC,EAAa9a,EAAYX,EAAUY,EAAoB8a,WAGxMn1B,KAAKy1B,cAAc,IAAI9rB,WAAW5B,GAAO4W,EAAa,IAAIhV,WAAW4P,GAAchC,EAAYiC,EAAYW,EAAY8a,EAAeC,EAAa9a,EAAYX,EAAUY,EAAoB8a,I,EAIjMM,cAAA,SAAe1tB,EAAM4W,EAAapF,EAAahC,EAAYiC,EAAYW,EAAY8a,EAAeC,EAAa9a,EAAYX,EAAUY,EAAoB8a,GACvJ,IAAIH,EAAUh1B,KAAKg1B,QACf3b,EAAUrZ,KAAKqZ,QACnB,IAAK2b,GAGFC,GAAiBC,EAAc,CAchC,IAbA,IAYIQ,EAZE/iB,EAAW3S,KAAK2S,SAChBgO,EAAgB3gB,KAAK2gB,cACrB/N,EAAS5S,KAAK4S,OAEd+iB,EAAY,CAChB,CAAEC,MAAOlV,EAAWnG,MAAOgU,GAC3B,CAAEqH,MAAOC,IAAYtb,MAAOma,GAC5B,CAAEkB,MAAOxc,EAAYmB,MAAOgU,GAC5B,CAAEqH,MAAOtN,EAAY/N,MAAOgU,IAKrBnuB,EAAI,EAAG+K,EAAMwqB,EAAU1tB,OAAQ7H,EAAI+K,KAC1CuqB,EAAMC,EAAUv1B,IACRw1B,MAAM3e,MAAMlP,GAF2B3H,KAMjD,IAAKs1B,EAEH,YADA/iB,EAASmB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAW0M,YAAaC,QAAS1M,IAAa8Q,mBAAoBlE,OAAO,EAAMC,OAAQ,yCAI1HiF,GAAaA,aAAmBqc,EAAInb,QACvClB,EAAU,IAAIqc,EAAInb,MAAM5H,EAAUC,EAAQ+N,EAAe3gB,KAAKyuB,SAE3DuG,GAAaA,aAAmBU,EAAIE,QACvCZ,EAAU,IAAIU,EAAIE,MAAMjjB,EAAU0G,EAASzG,EAAQ+N,GACnD3gB,KAAKiX,MAAQye,EAAIE,MAAM3e,OAEzBjX,KAAKg1B,QAAUA,EACfh1B,KAAKqZ,QAAUA,GAGb4b,GAAiBC,KACnBF,EAAQ1b,iBAAiBC,EAAahC,EAAYiC,EAAYC,GAC9DJ,EAAQC,oBAEN2b,IACFD,EAAQhb,eAAemb,GACvB9b,EAAQW,eAAemb,IAEa,mBAA3BH,EAAQlU,gBACjBkU,EAAQlU,eAAenC,GAGzBqW,EAAQ9a,OAAOnS,EAAMoS,EAAYC,EAAYC,I,KAIlC0a,O,6BE3Hf,kBAMMtM,EAAa3e,KAAK4e,IAAI,EAAG,IAAM,EAE/BmN,E,WACJ,WAAaljB,EAAU0G,GACrBrZ,KAAK2S,SAAWA,EAChB3S,KAAKqZ,QAAUA,E,2BAGjBW,eAAA,SAAgBmW,GACdnwB,KAAKmwB,QAAUA,G,EAGjB7W,iBAAA,SAAkBC,EAAahC,EAAYiC,EAAYC,GAErD,GAAIF,GAAeA,EAAY7P,WAAY,CACzC,IAAMosB,EAAW91B,KAAK81B,SAAWD,EAAWE,iBAAiBxc,GAI3C,MAAdhC,IACFA,EAAa,aAGG,MAAdiC,IACFA,EAAa,eAGf,IAAMgT,EAAS,GACXsJ,EAAStV,OAASsV,EAASvV,MAC7BiM,EAAOwJ,WAAa,CAAErc,UAAW,YAAavB,MAAOb,EAAa,IAAMiC,EAAYD,YAAaE,EAAWF,EAAc,OAEtHuc,EAAStV,QACXgM,EAAOhM,MAAQ,CAAE7G,UAAW,YAAavB,MAAOb,EAAYgC,YAAaE,EAAWF,EAAc,OAGhGuc,EAASvV,QACXiM,EAAOjM,MAAQ,CAAE5G,UAAW,YAAavB,MAAOoB,EAAYD,YAAaE,EAAWF,EAAc,QAGtGvZ,KAAK2S,SAASmB,QAAQC,IAAMxN,0BAA2B,CAAEimB,gBAErDjV,IACFvX,KAAKuX,WAAaA,GAGhBiC,IACFxZ,KAAKwZ,WAAaA,I,EAKjBvC,MAAP,SAAclP,GAEZ,OAAO8tB,EAAWI,QAAQ,CAAEluB,KAAMA,EAAMga,MAAO,EAAG7Y,IAAKY,KAAKoS,IAAInU,EAAKE,OAAQ,QAAU,CAAC,SAASA,OAAS,G,EAGrGiuB,QAAP,SAAgB/rB,GACd,OAAOpB,OAAOC,aAAa1F,MAAM,KAAM6G,I,EAGlCgsB,WAAP,SAAmBhsB,EAAQnC,GACrBmC,EAAOpC,OACTC,GAAUmC,EAAO4X,MACjB5X,EAASA,EAAOpC,MAGlB,IAAMquB,EAAMjsB,EAAOnC,IAAW,EAClBmC,EAAOnC,EAAS,GAE5B,OAAOouB,EAAM,EAAI,MAAQA,EAAMA,G,EAG1BC,WAAP,SAAmBlsB,EAAQnC,GACrBmC,EAAOpC,OACTC,GAAUmC,EAAO4X,MACjB5X,EAASA,EAAOpC,MAGlB,IAAMquB,EAAMjsB,EAAOnC,IAAW,GAClBmC,EAAOnC,EAAS,IAAM,GACtBmC,EAAOnC,EAAS,IAAM,EACtBmC,EAAOnC,EAAS,GAC5B,OAAOouB,EAAM,EAAI,WAAaA,EAAMA,G,EAG/BE,YAAP,SAAoBnsB,EAAQnC,EAAQ3G,GAC9B8I,EAAOpC,OACTC,GAAUmC,EAAO4X,MACjB5X,EAASA,EAAOpC,MAElBoC,EAAOnC,GAAU3G,GAAS,GAC1B8I,EAAOnC,EAAS,GAAM3G,GAAS,GAAM,IACrC8I,EAAOnC,EAAS,GAAM3G,GAAS,EAAK,IACpC8I,EAAOnC,EAAS,GAAa,IAAR3G,G,EAIhB40B,QAAP,SAAgBluB,EAAMwE,GACpB,IACEnM,EAAGmI,EAAYW,EAAKqtB,EAAYxU,EAAOyU,EADrCC,EAAU,GAYd,GATI1uB,EAAKA,MACPga,EAAQha,EAAKga,MACb7Y,EAAMnB,EAAKmB,IACXnB,EAAOA,EAAKA,OAEZga,EAAQ,EACR7Y,EAAMnB,EAAK2B,aAGR6C,EAAKtE,OAER,OAAO,KAGT,IAAK7H,EAAI2hB,EAAO3hB,EAAI8I,GAGlBstB,GAFAjuB,EAAOstB,EAAWQ,WAAWtuB,EAAM3H,IAEnB,EAAIA,EAAImI,EAAOW,EADxB2sB,EAAWK,QAAQnuB,EAAKO,SAASlI,EAAI,EAAGA,EAAI,MAGtCmM,EAAK,KACI,IAAhBA,EAAKtE,OAGPwuB,EAAQptB,KAAK,CAAEtB,KAAMA,EAAMga,MAAO3hB,EAAI,EAAG8I,IAAKstB,KAG9CD,EAAaV,EAAWI,QAAQ,CAAEluB,KAAMA,EAAMga,MAAO3hB,EAAI,EAAG8I,IAAKstB,GAAUjqB,EAAKgG,MAAM,KACvEtK,SACbwuB,EAAUA,EAAQ9gB,OAAO4gB,KAI/Bn2B,EAAIo2B,EAIN,OAAOC,G,EAGFC,kBAAP,SAA0Bnd,GACxB,IAKIod,EALE/M,EAAOiM,EAAWI,QAAQ1c,EAAa,CAAC,SAAS,GACjDqd,EAAgBhN,EAAOA,EAAK1gB,IAAM,KAEpCkB,EAAQ,EACRysB,EAAOhB,EAAWI,QAAQ1c,EAAa,CAAC,SAG5C,IAAKsd,IAASA,EAAK,GACjB,OAAO,KAGTF,EAAa,GAGb,IAAMG,GAFND,EAAOA,EAAK,IAES9uB,KAAK,GAG1BqC,EAAoB,IAAZ0sB,EAAgB,EAAI,GAE5B,IAAM3K,EAAY0J,EAAWQ,WAAWQ,EAAMzsB,GAC9CA,GAAS,EAQPA,GADc,IAAZ0sB,EACO,EAEA,GAIX1sB,GAAS,EAET,IAAI2sB,EAAYF,EAAK3tB,IAXH,EAaZ8tB,EAAkBnB,EAAWM,WAAWU,EAAMzsB,GACpDA,GAAS,EAET,IAAK,IAAIhK,EAAI,EAAGA,EAAI42B,EAAiB52B,IAAK,CACxC,IAAI62B,EAAiB7sB,EAEf8sB,EAAgBrB,EAAWQ,WAAWQ,EAAMI,GAClDA,GAAkB,EAElB,IAAME,EAAgC,WAAhBD,EAGtB,GAAsB,KAFiB,WAAhBA,KAAgC,GAIrD,YADA9zB,QAAQX,KAAK,oDAIf,IAAM20B,EAAqBvB,EAAWQ,WAAWQ,EAAMI,GACvDA,GAAkB,EAElBN,EAAWttB,KAAK,CACd8tB,gBACAC,qBACA10B,KAAM,CACJ+W,SAAU2d,EAAqBjL,EAC/BpK,MAAOgV,EACP7tB,IAAK6tB,EAAYI,EAAgB,KAIrCJ,GAAaI,EAOb/sB,EAHA6sB,GAAkB,EAMpB,MAAO,CACLI,yBAvD6B,EAwD7BlL,YACA2K,UACAE,kBACAL,aACAC,kB,EAuBGb,iBAAP,SAAyBxc,GACvB,IAAI3F,EAAS,GAmCb,OAlCYiiB,EAAWI,QAAQ1c,EAAa,CAAC,OAAQ,SAE/C7V,SAAQ,SAAAinB,GACZ,IAAMG,EAAO+K,EAAWI,QAAQtL,EAAM,CAAC,SAAS,GAChD,GAAIG,EAAM,CACR,IAAIgM,EAAUhM,EAAK/iB,KAAK+iB,EAAK/I,OACzB3X,EAAoB,IAAZ0sB,EAAgB,GAAK,GAC7BQ,EAAUzB,EAAWQ,WAAWvL,EAAM1gB,GAEpCmf,EAAOsM,EAAWI,QAAQtL,EAAM,CAAC,OAAQ,SAAS,GACxD,GAAIpB,EAAM,CAERnf,EAAoB,KADpB0sB,EAAUvN,EAAKxhB,KAAKwhB,EAAKxH,QACD,GAAK,GAC7B,IAAMoK,EAAY0J,EAAWQ,WAAW9M,EAAMnf,GAExCif,EAAOwM,EAAWI,QAAQtL,EAAM,CAAC,OAAQ,SAAS,GACxD,GAAItB,EAAM,CACR,IACIvmB,EAAO,CAAE,KAAQ,QAAS,KAAQ,SADrB+yB,EAAWK,QAAQ7M,EAAKthB,KAAKO,SAAS+gB,EAAKtH,MAAQ,EAAGsH,EAAKtH,MAAQ,MAEpF,GAAIjf,EAAM,CAER,IAAIy0B,EAAW1B,EAAWI,QAAQtL,EAAM,CAAC,OAAQ,OAAQ,OAAQ,SACjE,GAAI4M,EAAStvB,OAAQ,CACnBsvB,EAAWA,EAAS,GACpB,IAAIC,EAAY3B,EAAWK,QAAQqB,EAASxvB,KAAKO,SAASivB,EAASxV,MAAQ,GAAIwV,EAASxV,MAAQ,KAChGle,IAAOrB,IAAP,cAAyBM,EAAzB,IAAiC00B,EAAjC,UAEF5jB,EAAO0jB,GAAW,CAAEnL,UAAWA,EAAWrpB,KAAMA,GAChD8Q,EAAO9Q,GAAQ,CAAEqpB,UAAWA,EAAWvS,GAAI0d,UAM9C1jB,G,EAmBF6jB,YAAP,SAAoB3B,EAAU3oB,GAC5B,IAAIuqB,EAAOC,EAAW/jB,EAmCtB,OAhCA8jB,EAAQ7B,EAAWI,QAAQ9oB,EAAU,CAAC,OAAQ,SAG9CwqB,EAAY,GAAGhiB,OAAOrS,MAAM,GAAIo0B,EAAME,KAAI,SAAUlN,GAClD,OAAOmL,EAAWI,QAAQvL,EAAM,CAAC,SAASkN,KAAI,SAAUnN,GACtD,IAAI7Q,EAAIie,EAqBR,OAlBAje,EAAKic,EAAWQ,WAAW5L,EAAM,GAEjCoN,EAAQ/B,EAASlc,GAAIuS,WAAa,IAGvB0J,EAAWI,QAAQvL,EAAM,CAAC,SAASkN,KAAI,SAAUpN,GAC1D,IAAIsM,EAASljB,EASb,OAPAkjB,EAAUtM,EAAKziB,KAAKyiB,EAAKzI,OACzBnO,EAASiiB,EAAWQ,WAAW7L,EAAM,GACrB,IAAZsM,IACFljB,GAAU9J,KAAK4e,IAAI,EAAG,IAEtB9U,GAAUiiB,EAAWQ,WAAW7L,EAAM,IAEjC5W,KACN,GAEeikB,SAKtBjkB,EAAS9J,KAAKoS,IAAI5Y,MAAM,KAAMq0B,GACvBjwB,SAASkM,GAAUA,EAAS,G,EAG9BkkB,eAAP,SAAuBhC,EAAU3oB,EAAUgN,GACzC0b,EAAWI,QAAQ9oB,EAAU,CAAC,OAAQ,SAASyqB,KAAI,SAAUlN,GAC3D,OAAOmL,EAAWI,QAAQvL,EAAM,CAAC,SAASkN,KAAI,SAAUnN,GAEtD,IAAI7Q,EAAKic,EAAWQ,WAAW5L,EAAM,GAEjC0B,EAAY2J,EAASlc,GAAIuS,WAAa,IAG1C0J,EAAWI,QAAQvL,EAAM,CAAC,SAASkN,KAAI,SAAUpN,GAC/C,IAAIsM,EAAUtM,EAAKziB,KAAKyiB,EAAKzI,OACzBwK,EAAsBsJ,EAAWQ,WAAW7L,EAAM,GACtD,GAAgB,IAAZsM,EACFjB,EAAWS,YAAY9L,EAAM,EAAG+B,EAAsBpS,EAAagS,OAC9D,CACLI,GAAuBziB,KAAK4e,IAAI,EAAG,IACnC6D,GAAuBsJ,EAAWQ,WAAW7L,EAAM,GACnD+B,GAAuBpS,EAAagS,EACpCI,EAAsBziB,KAAK4lB,IAAInD,EAAqB,GACpD,IAAMwL,EAAQjuB,KAAK8V,MAAM2M,GAAuB9D,EAAa,IACvDuP,EAAQluB,KAAK8V,MAAM2M,GAAuB9D,EAAa,IAC7DoN,EAAWS,YAAY9L,EAAM,EAAGuN,GAChClC,EAAWS,YAAY9L,EAAM,EAAGwN,c,EAQ1C9d,OAAA,SAAQnS,EAAMoS,EAAYC,EAAYC,GACpC,IAAIyb,EAAW91B,KAAK81B,SACfA,IACH91B,KAAKsZ,iBAAiBvR,EAAM/H,KAAKuX,WAAYvX,KAAKwZ,YAAY,GAC9Dsc,EAAW91B,KAAK81B,UAElB,IAAI1C,EAAUjD,EAAUnwB,KAAKmwB,QAC7B,QAAgB1d,IAAZ0d,EAAuB,CACzB,IAAIiD,EAAWyC,EAAW4B,YAAY3B,EAAU/tB,GAChD/H,KAAKmwB,QAAUA,EAAUiD,EAAWjZ,EACpCna,KAAK2S,SAASmB,QAAQC,IAAM9N,eAAgB,CAAEkqB,QAASA,IAEzD0F,EAAWiC,eAAehC,EAAU/tB,EAAMooB,GAC1CiD,EAAWyC,EAAW4B,YAAY3B,EAAU/tB,GAC5C/H,KAAKqZ,QAAQkB,MAAMub,EAAStV,MAAOsV,EAASvV,MAAO,KAAM,KAAM6S,EAAUhZ,EAAYC,EAAoBtS,I,EAG3GyK,QAAA,a,KAGaqjB,O,gBC9Yf,SAASoC,EAAsB33B,GAErB,IAAIL,EAAmB,GAGvB,SAASC,EAAoBC,GAG3B,GAAGF,EAAiBE,GAClB,OAAOF,EAAiBE,GAAUP,QAGpC,IAAIC,EAASI,EAAiBE,GAAY,CACxCC,EAAGD,EACHE,GAAG,EACHT,QAAS,IAUX,OANAU,EAAQH,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOQ,GAAI,EAGJR,EAAOD,QAIhBM,EAAoBM,EAAIF,EAGxBJ,EAAoBO,EAAIR,EAGxBC,EAAoBE,EAAI,SAASiB,GAAS,OAAOA,GAGjDnB,EAAoBQ,EAAI,SAASd,EAASe,EAAMC,GAC1CV,EAAoBW,EAAEjB,EAASe,IACjCG,OAAOC,eAAenB,EAASe,EAAM,CACnCu3B,cAAc,EACdl3B,YAAY,EACZC,IAAKL,KAMXV,EAAoBgB,EAAI,SAAStB,GAC/BkB,OAAOC,eAAenB,EAAS,aAAc,CAAEyB,OAAO,KAIxDnB,EAAoB2B,EAAI,SAAShC,GAC/B,IAAIe,EAASf,GAAUA,EAAO2B,WAC5B,WAAwB,OAAO3B,EAAgB,SAC/C,WAA8B,OAAOA,GAEvC,OADAK,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAITV,EAAoBW,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG7B,EAAoBgC,EAAI,IAGxBhC,EAAoBi4B,GAAK,SAASzkB,GAA2B,MAApBtQ,QAAQT,MAAM+Q,GAAYA,GAE3E,IAAI0kB,EAAIl4B,EAAoBA,EAAoBiC,EAAIk2B,cACpD,OAAOD,EAAEE,SAAWF,EAOtB,SAASG,EAAaC,GACpB,OAAQA,EAAM,IAAIxtB,QAAQ,uBAAwB,QAOpD,SAASytB,EAAuBC,EAAS74B,EAAQ84B,GAC/C,IAAIC,EAAS,GACbA,EAAOD,GAAa,GAEpB,IAAIE,EAAWh5B,EAAO+mB,WAClBkS,EAAmBD,EAASlK,MAAM,0CACtC,IAAKmK,EAAkB,OAAOF,EAM9B,IALA,IAIIjK,EAJAoK,EAAqBD,EAAiB,GAGtCE,EAAK,IAAIC,OAAO,cAAgBV,EAAYQ,GArB3B,6DAqBmE,KAEhFpK,EAAQqK,EAAGjsB,KAAK8rB,IACL,kBAAblK,EAAM,IACViK,EAAOD,GAAWtvB,KAAKslB,EAAM,IAK/B,IADAqK,EAAK,IAAIC,OAAO,MAAQV,EAAYQ,GAApB,kHAAwH,KAChIpK,EAAQqK,EAAGjsB,KAAK8rB,IACjBH,EAAQ/J,EAAM,MACjBiK,EAAOD,GAAWtvB,KAAKslB,EAAM,IAC7B+J,EAAQ/J,EAAM,IAAMzuB,EAAoByuB,EAAM,IAAInuB,GAEpDo4B,EAAOjK,EAAM,IAAMiK,EAAOjK,EAAM,KAAO,GACvCiK,EAAOjK,EAAM,IAAItlB,KAAKslB,EAAM,IAK9B,IADA,IAjCiB9sB,EAiCb6uB,EAAO5vB,OAAO4vB,KAAKkI,GACdx4B,EAAI,EAAGA,EAAIswB,EAAKzoB,OAAQ7H,IAC/B,IAAK,IAAIqW,EAAI,EAAGA,EAAImiB,EAAOlI,EAAKtwB,IAAI6H,OAAQwO,IAnC7B5U,EAoCC+2B,EAAOlI,EAAKtwB,IAAIqW,GAnC1B8O,MAAM,EAAI1jB,KAoCZ+2B,EAAOlI,EAAKtwB,IAAIqW,GAAK,EAAImiB,EAAOlI,EAAKtwB,IAAIqW,IAK/C,OAAOmiB,EAGT,SAASM,EAAmBC,GAE1B,OADWr4B,OAAO4vB,KAAKyI,GACXlK,QAAO,SAAUmK,EAAWz3B,GACtC,OAAOy3B,GAAaD,EAAOx3B,GAAKsG,OAAS,KACxC,GAqCLpI,EAAOD,QAAU,SAAUO,EAAUk5B,GACnCA,EAAUA,GAAW,GACrB,IAAIX,EAAU,CACZY,KAAM,KAGJC,EAAkBF,EAAQG,IAAM,CAAEF,KAAMx4B,OAAO4vB,KAAKgI,EAAQY,OAxClE,SAA6BZ,EAASv4B,GAWpC,IAVA,IAAIs5B,EAAe,CACjBH,KAAM,CAACn5B,IAELo5B,EAAkB,CACpBD,KAAM,IAEJI,EAAc,CAChBJ,KAAM,IAGDJ,EAAkBO,IAEvB,IADA,IAAIN,EAASr4B,OAAO4vB,KAAK+I,GAChBr5B,EAAI,EAAGA,EAAI+4B,EAAOlxB,OAAQ7H,IAAK,CACtC,IAAIu4B,EAAYQ,EAAO/4B,GAEnBu5B,EADQF,EAAad,GACCiB,MAE1B,GADAF,EAAYf,GAAae,EAAYf,IAAc,IAC/Ce,EAAYf,GAAWgB,IAAmBjB,EAAQC,GAAWgB,GAAjE,CACAD,EAAYf,GAAWgB,IAAiB,EACxCJ,EAAgBZ,GAAaY,EAAgBZ,IAAc,GAC3DY,EAAgBZ,GAAWtvB,KAAKswB,GAGhC,IAFA,IAAIE,EAAapB,EAAsBC,EAASA,EAAQC,GAAWgB,GAAgBhB,GAC/EmB,EAAiBh5B,OAAO4vB,KAAKmJ,GACxBpjB,EAAI,EAAGA,EAAIqjB,EAAe7xB,OAAQwO,IACzCgjB,EAAaK,EAAerjB,IAAMgjB,EAAaK,EAAerjB,KAAO,GACrEgjB,EAAaK,EAAerjB,IAAMgjB,EAAaK,EAAerjB,IAAId,OAAOkkB,EAAWC,EAAerjB,MAKzG,OAAO8iB,EASmEQ,CAAmBrB,EAASv4B,GAElG65B,EAAM,GAEVl5B,OAAO4vB,KAAK6I,GAAiBvF,QAAO,SAAUxzB,GAAK,MAAa,SAANA,KAAgBkD,SAAQ,SAAU7D,GAE1F,IADA,IAAIo6B,EAAc,EACXV,EAAgB15B,GAAQo6B,IAC7BA,IAEFV,EAAgB15B,GAAQwJ,KAAK4wB,GAC7BvB,EAAQ74B,GAAQo6B,GAAe,6FAC/BD,EAAMA,EAAM,OAASn6B,EAAS,OAASo4B,EAAqBrR,WAAW5b,QAAQ,eAAgBkvB,KAAKC,UAAUF,IAAgB,MAAQV,EAAgB15B,GAAQ+3B,KAAI,SAAUhe,GAAM,OAAYsgB,KAAKC,UAAUvgB,GAAM,KAAO8e,EAAQ74B,GAAQ+Z,GAAIgN,cAAclZ,KAAK,KAAO,WAG1QssB,EAAMA,EAAM,SAAW/B,EAAqBrR,WAAW5b,QAAQ,eAAgBkvB,KAAKC,UAAUh6B,IAAa,MAAQo5B,EAAgBD,KAAK1B,KAAI,SAAUhe,GAAM,OAAYsgB,KAAKC,UAAUvgB,GAAM,KAAO8e,EAAQY,KAAK1f,GAAIgN,cAAclZ,KAAK,KAAO,aAE/O,IAAI0sB,EAAO,IAAI7uB,OAAO8uB,KAAK,CAACL,GAAM,CAAEl3B,KAAM,oBAC1C,GAAIu2B,EAAQiB,KAAQ,OAAOF,EAE3B,IAEIG,GAFMhvB,OAAOivB,KAAOjvB,OAAOkvB,WAAalvB,OAAOmvB,QAAUnvB,OAAOovB,OAEhDC,gBAAgBR,GAChCS,EAAS,IAAItvB,OAAOuvB,OAAOP,GAG/B,OAFAM,EAAOE,UAAYR,EAEZM,I,6BCxMT,uCA0EeG,UA/DK,SAAUxvB,GAE5B,IAAImH,EAAW,IAAI0C,eACnB1C,EAASmB,QAAU,SAAkBgB,GAAgB,2BAAN/M,EAAM,iCAANA,EAAM,kBACnD4K,EAASsD,KAAT,MAAAtD,EAAQ,CAAMmC,EAAOA,GAAb,OAAuB/M,KAGjC4K,EAASiE,IAAM,SAAc9B,GAAgB,2BAAN/M,EAAM,iCAANA,EAAM,kBAC3C4K,EAAS6D,eAAT,MAAA7D,EAAQ,CAAgBmC,GAAhB,OAA0B/M,KAGpC,IAAIkzB,EAAiB,SAAUC,EAAInzB,GACjCyD,EAAK2vB,YAAY,CAAErmB,MAAOomB,EAAInzB,KAAMA,KAGtCyD,EAAK4vB,iBAAiB,WAAW,SAAUF,GACzC,IAAInzB,EAAOmzB,EAAGnzB,KAEd,OAAQA,EAAKszB,KACb,IAAK,OACH,IAAMzoB,EAASsnB,KAAKoB,MAAMvzB,EAAK6K,QAC/BpH,EAAKwpB,QAAU,IAAID,IAAcpiB,EAAU5K,EAAK4Y,cAAe/N,EAAQ7K,EAAK0mB,QAE5ElrB,YAAWqP,EAAOrQ,OAGlB04B,EAAe,OAAQ,MACvB,MACF,IAAK,QACHzvB,EAAKwpB,QAAQ3rB,KAAKtB,EAAKA,KAAMA,EAAK4W,YAAa5W,EAAKwR,YAAaxR,EAAKwP,WAAYxP,EAAKyR,WAAYzR,EAAKoS,WAAYpS,EAAKktB,cAAeltB,EAAKmtB,YAAantB,EAAKqS,WAAYrS,EAAK0R,SAAU1R,EAAKsS,mBAAoBtS,EAAKotB,oBAQ5NxiB,EAAS+D,GAAG3C,IAAMzN,eAAgB20B,GAClCtoB,EAAS+D,GAAG3C,IAAMxN,0BAA2B00B,GAC7CtoB,EAAS+D,GAAG3C,IAAMpN,YAAas0B,GAC/BtoB,EAAS+D,GAAG3C,IAAM/M,MAAOi0B,GACzBtoB,EAAS+D,GAAG3C,IAAMtN,sBAAuBw0B,GACzCtoB,EAAS+D,GAAG3C,IAAMvN,sBAAuBy0B,GACzCtoB,EAAS+D,GAAG3C,IAAM9N,eAAgBg1B,GAGlCtoB,EAAS+D,GAAG3C,IAAMrN,mBAAmB,SAAUw0B,EAAInzB,GACjD,IAAIwzB,EAAe,GACf1nB,EAAU,CAAEiB,MAAOomB,EAAInzB,KAAMA,GAC7BA,EAAKmrB,QACPrf,EAAQqf,MAAQnrB,EAAKmrB,MAAM/oB,OAC3BoxB,EAAalyB,KAAKtB,EAAKmrB,MAAM/oB,eACtBpC,EAAKmrB,OAEVnrB,EAAKorB,QACPtf,EAAQsf,MAAQprB,EAAKorB,MAAMhpB,OAC3BoxB,EAAalyB,KAAKtB,EAAKorB,MAAMhpB,eACtBpC,EAAKorB,OAEd3nB,EAAK2vB,YAAYtnB,EAAS0nB,Q,yICiClBC,EAUAC,E,mCCtGNC,EAAwB,CAC5B,iBAAmB,EACnB,sBAAwB,EACxB,qBAAuB,GA2EVC,E,WAnEb,WAAaC,GAA4B,KAJzCA,SAIyC,OAHzCC,mBAGyC,OAFzCC,uBAEyC,EACvC97B,KAAK47B,IAAMA,EACX57B,KAAK+7B,QAAU/7B,KAAK+7B,QAAQn6B,KAAK5B,MAFM,2BAAfwV,EAAe,iCAAfA,EAAe,kBAGvCxV,KAAK67B,cAAgBrmB,EACrBxV,KAAK87B,mBAAoB,EAEzB97B,KAAKg8B,oB,2BAGPxpB,QAAA,WACExS,KAAKi8B,sBACLj8B,KAAKk8B,sBACLl8B,KAAKm8B,sB,EAGGF,oBAAV,a,EACUE,mBAAV,a,EAEAC,eAAA,WACE,MAAqC,iBAAvBp8B,KAAK67B,eAA8B77B,KAAK67B,cAAc5zB,QAAkC,mBAAjBjI,KAAK+7B,S,EAG5FC,kBAAA,WACMh8B,KAAKo8B,kBACPp8B,KAAK67B,cAAcn4B,SAAQ,SAAUoR,GACnC,GAAI4mB,EAAsB5mB,GACxB,MAAM,IAAIxI,MAAM,yBAA2BwI,GAG7C9U,KAAK47B,IAAIllB,GAAG5B,EAAO9U,KAAK+7B,WACvB/7B,O,EAIPk8B,oBAAA,WACMl8B,KAAKo8B,kBACPp8B,KAAK67B,cAAcn4B,SAAQ,SAAUoR,GACnC9U,KAAK47B,IAAIhlB,IAAI9B,EAAO9U,KAAK+7B,WACxB/7B,O,EAOP+7B,QAAA,SAASjnB,EAAe/M,GACtB/H,KAAKq8B,eAAevnB,EAAO/M,I,EAG7Bs0B,eAAA,SAAgBvnB,EAAe/M,GAS7B,KARsB,SAAU+M,EAAe/M,GAC7C,IAAIu0B,EAAW,KAAOxnB,EAAM9J,QAAQ,MAAO,IAC3C,GAA8B,mBAAnBhL,KAAKs8B,GACd,MAAM,IAAIhwB,MAAJ,SAAmBwI,EAAnB,mCAA2D9U,KAAKu8B,YAAY57B,KAA5E,iBAAiG27B,EAAjG,KAGR,OAAOt8B,KAAKs8B,GAAU16B,KAAK5B,KAAM+H,KAGjBxH,KAAKP,KAAM8U,EAAO/M,GAAMxH,OACxC,MAAOmT,GACP7P,IAAOlB,MAAP,mDAAgEmS,EAAhE,qBAA0FpB,EAAIG,QAA9F,2BAAiIH,GACjI1T,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAWk1B,YAAavoB,QAAS1M,IAAak1B,mBAAoBtoB,OAAO,EAAOW,MAAOA,EAAOpB,IAAKA,M,eDmBnI8nB,K,oBAAAA,E,cAAAA,E,yBAAAA,E,gCAAAA,M,cAUAC,K,YAAAA,E,cAAAA,E,qBAAAA,M,2LE3GAiB,ECJSC,E,WASnB,WAAaC,EAAiBC,GAAqB,KAR3CC,KAAsB,KAQqB,KAN5CC,aAM4C,OAL5CC,YAK4C,OAJ5Cjc,OAAwB,KAIoB,KAH5Cpf,IAAyB,KAGmB,KAF5CkM,GAAwB,KAG7B7N,KAAK+8B,QAAUH,EACf58B,KAAKg9B,OAASH,E,mDAQd,OAJK78B,KAAK88B,MAAQ98B,KAAKg9B,SACrBh9B,KAAK88B,KAAOhxB,2BAAiB9L,KAAK+8B,QAAS/8B,KAAKg9B,OAAQ,CAAE7wB,iBAAiB,KAGtEnM,KAAK88B,U,gNDfJJ,K,cAAAA,E,eAAAA,M,SAKSO,E,mCACXC,KAAsB,K,KACtBC,WAA8B,K,KAC9BC,aAAgC,K,KAGhCC,qB,MACLX,EAAsBY,QAAQ,E,EAC9BZ,EAAsBa,QAAQ,E,QAI1BC,SAAmB,E,KAEnBC,mBAAoC,K,KACpCC,gBAAiC,K,KACjCC,MAAuB,K,KACvBC,QAA2B,G,KAS3BC,Q,OAEA/6B,U,OAEAg7B,Y,OAEAC,a,OAEAtkB,c,OAEAsI,W,OAEAuK,GAA6B,E,KAE7B0R,MAAgB,E,KAEhBC,MAAgB,E,KAIhBC,c,OAGAC,Y,mCAGPC,aAAA,SAAc/8B,EAAeg9B,GAC3B,IAAMpxB,EAAS5L,EAAMmM,MAAM,IAAK,GAC1B8wB,EAAsB,GACN,IAAlBrxB,EAAOhF,OACTq2B,EAAU,GAAKD,EAAeA,EAAaE,mBAAqB,EAEhED,EAAU,GAAK5iB,SAASzO,EAAO,IAEjCqxB,EAAU,GAAK5iB,SAASzO,EAAO,IAAMqxB,EAAU,GAC/Ct+B,KAAKm9B,WAAamB,G,EAqFpBE,oBAAA,SAAqB17B,GACnB9C,KAAKq9B,mBAAmBv6B,IAAQ,G,EAMlC27B,oBAAA,SAAqB37B,GACnB,OAAyC,IAAlC9C,KAAKq9B,mBAAmBv6B,I,EAQjC47B,2BAAA,SAA4BC,GAG1B,IAFA,IAAIC,EAAY,IAAIj1B,WAAW,IAEtBvJ,EAAI,GAAIA,EAAI,GAAIA,IACvBw+B,EAAUx+B,GAAMu+B,GAAiB,GAAK,GAAKv+B,GAAM,IAGnD,OAAOw+B,G,EASTC,2BAAA,SAA4BX,EAAoBS,GAC9C,IAAIhgB,EAAcuf,EAQlB,OANIA,aAAA,EAAAA,EAAUnd,SAAUmd,EAASY,MAAQZ,EAASrwB,MAChD8Q,EAAc,IAAIge,EAASuB,EAASnB,QAASmB,EAASlB,SAC1Cjc,OAASmd,EAASnd,OAC9BpC,EAAY9Q,GAAK7N,KAAK0+B,2BAA2BC,IAG5ChgB,G,kCAtHP,OAJK3e,KAAKk9B,MAAQl9B,KAAK89B,SACrB99B,KAAKk9B,KAAOpxB,2BAAiB9L,KAAK+9B,QAAS/9B,KAAK89B,OAAQ,CAAE3xB,iBAAiB,KAGtEnM,KAAKk9B,M,aAGL77B,GACPrB,KAAKk9B,KAAO77B,I,gCAIZ,OAAKrB,KAAKm9B,WAIHn9B,KAAKm9B,WAHH,K,2CAUT,OAAOn9B,KAAKs+B,UAAU,K,yCAItB,OAAOt+B,KAAKs+B,UAAU,K,kCAItB,IAAKt+B,KAAKk+B,WAAal+B,KAAKo9B,aAC1B,OAAO,KAGT,IAAKp9B,KAAKo9B,cAAgBp9B,KAAKk+B,SAAU,CACvC,IAAI5R,EAAKtsB,KAAKssB,GACI,iBAAPA,IAILtsB,KAAKk+B,UAAqC,YAAzBl+B,KAAKk+B,SAASnd,SAAyB/gB,KAAKk+B,SAASrwB,IACxEhK,IAAOpB,KAAP,sDAAkEzC,KAAKk+B,SAASnd,OAAhF,wBAUFuL,EAAK,GAEPtsB,KAAKo9B,aAAep9B,KAAK6+B,2BAA2B7+B,KAAKk+B,SAAU5R,GAGrE,OAAOtsB,KAAKo9B,e,yCAIZ,GAA6B,OAAzBp9B,KAAK09B,gBACP,OAAO,KAGT,IAAK,YAAgB19B,KAAK09B,iBACxB,OAAO,KAGT,IAAIjkB,EAAY,YAAgBzZ,KAAKyZ,UAAgBzZ,KAAKyZ,SAAT,EAEjD,OAAOzZ,KAAK09B,gBAA8B,IAAXjkB,I,gCAI/B,SAAWzZ,KAAK2e,aAAwC,OAAzB3e,KAAK2e,YAAYmgB,KAA2C,OAAzB9+B,KAAK2e,YAAYhd,U,0MEvJlEo9B,E,WACnB,WAAaC,GAEXh/B,KAAKi/B,MAAQ,EACbj/B,KAAKk/B,MAAQ,EACbl/B,KAAKm/B,UAAY,GACjBn/B,KAAKuZ,YAAc,KACnBvZ,KAAKo/B,MAAO,EACZp/B,KAAKq/B,gBAAiB,EACtBr/B,KAAKs/B,QAAU,EACft/B,KAAKu/B,QAAU,EACfv/B,KAAKw/B,gBAAkB,KACvBx/B,KAAKy/B,eAAiB,EACtBz/B,KAAK0/B,cAAgB,EACrB1/B,KAAK8C,KAAO,KACZ9C,KAAKuK,IAAMy0B,EACXh/B,KAAK82B,QAAU,K,kEAIf,SAAU92B,KAAKm/B,UAAU,KAAM,YAAgBn/B,KAAKm/B,UAAU,GAAGzB,uB,gCCpB/DiC,EAA2B,gBAC3BC,EAAkB,wCAuFTC,E,WAnFb,WAAaC,GAKX,IAAK,IAAIC,IAJY,iBAAVD,IACTA,EAAQD,EAASG,cAAcF,IAGhBA,EACXA,EAAM79B,eAAe89B,KACvB//B,KAAK+/B,GAAQD,EAAMC,I,2BAKzBE,eAAA,SAAgBC,GACd,IAAMC,EAAWzkB,SAAS1b,KAAKkgC,GAAW,IAC1C,OAAIC,EAAW14B,OAAOE,iBACb4oB,IAGF4P,G,EAGTC,mBAAA,SAAoBF,GAClB,GAAIlgC,KAAKkgC,GAAW,CAClB,IAAIG,GAAergC,KAAKkgC,IAAa,MAAM3tB,MAAM,GACjD8tB,GAAqC,EAArBA,EAAYp4B,OAAc,IAAM,IAAMo4B,EAGtD,IADA,IAAMh/B,EAAQ,IAAIsI,WAAW02B,EAAYp4B,OAAS,GACzC7H,EAAI,EAAGA,EAAIigC,EAAYp4B,OAAS,EAAG7H,IAC1CiB,EAAMjB,GAAKsb,SAAS2kB,EAAY9tB,MAAU,EAAJnS,EAAW,EAAJA,EAAQ,GAAI,IAG3D,OAAOiB,EAEP,OAAO,M,EAIXi/B,2BAAA,SAA4BJ,GAC1B,IAAMC,EAAWzkB,SAAS1b,KAAKkgC,GAAW,IAC1C,OAAIC,EAAW14B,OAAOE,iBACb4oB,IAGF4P,G,EAGTI,qBAAA,SAAsBL,GACpB,OAAOM,WAAWxgC,KAAKkgC,K,EAGzBO,iBAAA,SAAkBP,GAChB,OAAOlgC,KAAKkgC,I,EAGdQ,kBAAA,SAAmBR,GACjB,IAAMS,EAAMhB,EAAyB5yB,KAAK/M,KAAKkgC,IAC/C,GAAY,OAARS,EAIJ,MAAO,CACLriB,MAAO5C,SAASilB,EAAI,GAAI,IACxBniB,OAAQ9C,SAASilB,EAAI,GAAI,M,EAItBX,cAAP,SAAsBY,GACpB,IAAIjS,EAAOmR,EAAQ,GAEnB,IADAF,EAAgBiB,UAAY,EACqB,QAAzClS,EAAQiR,EAAgB7yB,KAAK6zB,KAAkB,CACrD,IAAIv/B,EAAQstB,EAAM,GAEW,IAAzBttB,EAAMyJ,QAFoB,MAG1BzJ,EAAMiM,YAHoB,OAGIjM,EAAM4G,OAAS,IAC/C5G,EAAQA,EAAMkR,MAAM,GAAI,IAG1ButB,EAAMnR,EAAM,IAAMttB,EAEpB,OAAOy+B,G,KCnFLgB,EAAsB,CAC1BtgB,MAAO,CACL,MAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,QAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,QAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,GAEVD,MAAO,CACL,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,MAAQ,EACR,QAAQ,EACR,MAAQ,EACR,MAAQ,IAWZ,SAASwgB,EAAuB3oB,EAAetV,GAC7C,OAAOk+B,YAAYC,iBAAmBn+B,GAAQ,SAAvC,gBAA8DsV,EAA9D,KCvDT,IAAM8oB,EAAwB,2FACxBC,EAA8B,qBAE9BC,EAA4B,IAAInI,OAAO,CAC3C,0CAA0CoI,OAC1C,mBAAmBA,OACnB,0BAA0BA,OAC1B,iCAAiCA,OACjC,OAAOA,QACP3zB,KAAK,IAAK,KAEN4zB,EAA4B,iWAE5BC,EAAmB,wBAEJC,E,kCACZC,UAAP,SAAkBC,EAA2BC,GAC3C,IAAK,IAAIvhC,EAAI,EAAGA,EAAIshC,EAAOz5B,OAAQ7H,IAAK,CACtC,IAAMwhC,EAAQF,EAAOthC,GACrB,GAAIwhC,EAAMhoB,KAAO+nB,EACf,OAAOC,I,EAKNC,oBAAP,SAA4BzpB,GAC1B,IACIxE,EADAkuB,EAAU1pB,EAAM5K,MAAM,KAS1B,OAPIs0B,EAAQ75B,OAAS,GACnB2L,EAASkuB,EAAQ3Z,QAAU,IAC3BvU,GAAU8H,SAASomB,EAAQ3Z,SAASvB,SAAS,IAC7ChT,IAAW,MAAQ8H,SAASomB,EAAQ3Z,SAASvB,SAAS,KAAKmb,QAAQ,IAEnEnuB,EAASwE,EAEJxE,G,EAGFouB,QAAP,SAAgBz3B,EAAKy0B,GACnB,OAAOnzB,mBAA4BmzB,EAASz0B,EAAK,CAAE4B,iBAAiB,K,EAG/D81B,oBAAP,SAA4BC,EAAgBnE,GAE1C,IAuBInqB,EAvBAuuB,EAAqB,GACrBC,EAAwC,GACxCC,GAAiB,EAIrB,SAASC,EAAWC,EAAuBtE,GACzC,CAAC,QAAS,SAASv6B,SAAQ,SAACZ,GAC1B,IAAM0/B,EAAWD,EAAOvO,QAAO,SAAC5b,GAAD,ODHvC,SAAsBA,EAAetV,GACnC,IAAM2/B,EAAY3B,EAAoBh+B,GACtC,QAAS2/B,IAA8C,IAAjCA,EAAUrqB,EAAM7F,MAAM,EAAG,ICCCmwB,CAAYtqB,EAAOtV,MAC7D,GAAI0/B,EAASv6B,OAAQ,CACnB,IAAM06B,EAAYH,EAASxO,QAAO,SAAC5b,GACjC,OAAwC,IAAjCA,EAAM9K,YAAY,OAAQ,IAA6C,IAAjC8K,EAAM9K,YAAY,OAAQ,MAEzE2wB,EAASn7B,EAAJ,SAAmB6/B,EAAU16B,OAAS,EAAI06B,EAAU,GAAKH,EAAS,GAGvED,EAASA,EAAOvO,QAAO,SAAC5b,GAAD,OAAwC,IAA7BoqB,EAAS13B,QAAQsN,UAIvD6lB,EAAM2E,cAAgBL,EAIxB,IArBArB,EAAsBL,UAAY,EAqBsB,OAAhDjtB,EAASstB,EAAsBn0B,KAAKm1B,KAC1C,GAAItuB,EAAO,GAAI,CAIb,IAAMqqB,EAAa,GAEb6B,EAAQ7B,EAAM6B,MAAQ,IAAID,EAASjsB,EAAO,IAChDqqB,EAAM1zB,IAAMi3B,EAAWQ,QAAQpuB,EAAO,GAAImqB,GAE1C,IAAM8E,EAAa/C,EAAMY,kBAAkB,cACvCmC,IACF5E,EAAM3f,MAAQukB,EAAWvkB,MACzB2f,EAAMzf,OAASqkB,EAAWrkB,QAE5Byf,EAAM6E,QAAUhD,EAAMG,eAAe,sBAAwBH,EAAMG,eAAe,aAClFhC,EAAMt9B,KAAOm/B,EAAMiD,KAEnBT,EAAU,GAAG3sB,QAAQmqB,EAAMkD,QAAU,IAAIx1B,MAAM,UAAWywB,GAEtDA,EAAMzkB,aAAoD,IAAtCykB,EAAMzkB,WAAW1O,QAAQ,UAC/CmzB,EAAMzkB,WAAagoB,EAAWK,oBAAoB5D,EAAMzkB,aAG1D2oB,EAAO94B,KAAK40B,QACP,GAAIrqB,EAAO,GAAI,CAEpB,IAAIqvB,EAAe,IAAIpD,EAASjsB,EAAO,IACnCqvB,EAAa,aACfZ,GAAiB,EACjBD,EAAYa,EAAa,YAAcA,GAI7C,MAAO,CACLd,SACAC,YAAaC,EAAiBD,EAAc,O,EAIzCc,yBAAP,SAAiChB,EAAgBnE,EAAiBj7B,EAAyBqgC,GACzF,IAAIvvB,OADgJ,IAA3DuvB,MAAiC,IAE1H,IAAIC,EAA+B,GAC/BxpB,EAAK,EAET,IADAunB,EAA4BN,UAAY,EACuB,QAAvDjtB,EAASutB,EAA4Bp0B,KAAKm1B,KAAmB,CACnE,IAAMpC,EAAQ,IAAID,EAASjsB,EAAO,IAClC,GAAIksB,EAAMuD,OAASvgC,EAAM,CACvB,IAAMwgC,EAAuB,CAC3BxD,QACAlmB,GAAIA,IACJ2pB,QAASzD,EAAM,YACf0D,WAAY1D,EAAM,eAClBn/B,KAAMm/B,EAAMiD,MAAQjD,EAAM2D,SAC1B3gC,OACAw1B,QAA4B,QAAlBwH,EAAM4D,QAChBC,WAAkC,QAArB7D,EAAM8D,WACnBC,OAA0B,QAAjB/D,EAAMgE,OACfC,KAAMjE,EAAM2D,UAOd,GAJI3D,EAAMkE,MACRV,EAAM/4B,IAAMi3B,EAAWQ,QAAQlC,EAAMkE,IAAKjG,IAGxCoF,EAAYl7B,OAAQ,CAEtB,IAAMg8B,EAAazC,EAAWC,UAAU0B,EAAaG,EAAMC,SAI3DD,EAAM/rB,WAAa0sB,EAAaA,EAAW7rB,MAAQ+qB,EAAY,GAAG/qB,MAGpEgrB,EAAO/5B,KAAKi6B,IAGhB,OAAOF,G,EAGFc,mBAAP,SAA2BhC,EAAgBnE,EAAiBnkB,EAAY9W,EAAyBqhC,GAC/F,IAMIvwB,EACAxT,EACA89B,EARAkG,EAAY,EACZ1E,EAAgB,EAChBzB,EAAQ,IAAIc,EAAMhB,GAClBsG,EAAuB,EACvBC,EAA4B,KAC5B3f,EAAwB,IAAIsY,EAK5BsH,EAAgB,KAIpB,IAFAnD,EAA0BP,UAAY,EAEuB,QAArDjtB,EAASwtB,EAA0Br0B,KAAKm1B,KAAmB,CACjE,IAAMzoB,EAAW7F,EAAO,GACxB,GAAI6F,EAAU,CACZkL,EAAKlL,SAAW+mB,WAAW/mB,GAE3B,IAAMkkB,GAAS,IAAM/pB,EAAO,IAAIrB,MAAM,GACtCoS,EAAKgZ,MAAQA,GAAS,KACtBhZ,EAAKiZ,QAAQv0B,KAAKs0B,EAAQ,CAAE,MAAOlkB,EAAUkkB,GAAU,CAAE,MAAOlkB,SAC3D,GAAI7F,EAAO,IAChB,GAAI,YAAgB+Q,EAAKlL,UAAW,CAClC,IAAM6S,EAAK8X,IACXzf,EAAK7hB,KAAOA,EACZ6hB,EAAK5C,MAAQ2d,EACTxB,IACFvZ,EAAKuZ,SAAWA,GAElBvZ,EAAK2H,GAAKA,EACV3H,EAAKsZ,MAAQrkB,EACb+K,EAAKkZ,GAAKwG,EACV1f,EAAKqZ,MAAQmG,EACbxf,EAAKoZ,QAAUA,EAEfpZ,EAAKmZ,QAAU,IAAMlqB,EAAO,IAAIrB,MAAM,GACtCiyB,EAAsB7f,EAAM2f,GAE5BrG,EAAMkB,UAAU91B,KAAKsb,GACrB2f,EAAW3f,EACX+a,GAAiB/a,EAAKlL,SAEtBkL,EAAO,IAAIsY,QAER,GAAIrpB,EAAO,GAAI,CACpB,IAAM7L,GAAQ,IAAM6L,EAAO,IAAIrB,MAAM,GACjC+xB,EACF3f,EAAKyZ,aAAar2B,EAAMu8B,GAExB3f,EAAKyZ,aAAar2B,QAEf,GAAI6L,EAAO,GAEhB+Q,EAAK8Y,oBAAsB,IAAM7pB,EAAO,IAAIrB,MAAM,GAClDoS,EAAKiZ,QAAQv0B,KAAK,CAAC,oBAAqBsb,EAAK8Y,qBACvB,OAAlB8G,IACFA,EAAgBtG,EAAMkB,UAAUl3B,YAE7B,CAEL,KADA2L,EAASA,EAAO,GAAG+a,MAAM2S,IACZ,CACXz9B,IAAOpB,KAAK,sDACZ,SAEF,IAAKrC,EAAI,EAAGA,EAAIwT,EAAO3L,aACI,IAAd2L,EAAOxT,GADWA,KAO/B,IAAMqkC,GAAU,IAAM7wB,EAAOxT,EAAI,IAAImS,MAAM,GACrCmyB,GAAU,IAAM9wB,EAAOxT,EAAI,IAAImS,MAAM,GAE3C,OAAQqB,EAAOxT,IACf,IAAK,IACHukB,EAAKiZ,QAAQv0B,KAAKq7B,EAAS,CAAED,EAAQC,GAAW,CAAED,IAClD,MACF,IAAK,gBACHxG,EAAMn7B,KAAO2hC,EAAOE,cACpB,MACF,IAAK,iBACHP,EAAYnG,EAAMsB,QAAU7jB,SAAS+oB,GACrC,MACF,IAAK,iBACHxG,EAAMwB,eAAiBe,WAAWiE,GAClC,MACF,IAAK,UACHxG,EAAMnH,QAAUpb,SAAS+oB,GACzB,MACF,IAAK,SACH,MACF,IAAK,UACHxG,EAAMmB,MAAO,EACb,MACF,IAAK,MACHiF,IACA1f,EAAKiZ,QAAQv0B,KAAK,CAAC,QACnB,MACF,IAAK,oBACHg7B,EAAuB3oB,SAAS+oB,GAChC,MACF,IAAK,MAEH,IACMG,EAAW,IAAI/E,EADC4E,GAEhBI,EAAgBD,EAASnE,iBAAiB,UAC1CqE,EAAaF,EAASZ,IACtBe,EAAYH,EAASxE,mBAAmB,MAI9C,GAAyB,oCAFAwE,EAASI,WAAa,YAEY,CACzDnhC,IAAOpB,KAAK,6DACZ,SAGEoiC,IACF3G,EAAW,IAAIvB,EAASoB,EAAS+G,GAC5BA,GAAgB,CAAC,UAAW,aAAc,mBAAmBh6B,QAAQ+5B,IAAkB,IAC1F3G,EAASnd,OAAS8jB,EAClB3G,EAASv8B,IAAM,KAEfu8B,EAASrwB,GAAKk3B,IAGlB,MAEF,IAAK,QACH,IACMvF,EADa,IAAIK,EAAS4E,GACGlE,qBAAqB,eAEpD,YAAgBf,KAClBvB,EAAMuB,gBAAkBA,GAE1B,MAEF,IAAK,MACH,IAAMyF,EAAW,IAAIpF,EAAS4E,GAC9B9f,EAAKmZ,OAASmH,EAASjB,IACnBiB,EAASC,WACXvgB,EAAKyZ,aAAa6G,EAASC,WAE7BvgB,EAAKoZ,QAAUA,EACfpZ,EAAKsZ,MAAQrkB,EACb+K,EAAK7hB,KAAOA,EACZ6hB,EAAK2H,GAAK,cACV2R,EAAM1kB,YAAcoL,GACpBA,EAAO,IAAIsY,GACNQ,mBAAqBQ,EAAM1kB,YAAYkkB,mBAC5C,MAEF,QACE55B,IAAOpB,KAAP,gCAA4CmR,KAiDlD,OA5CA+Q,EAAO2f,KAEM3f,EAAKmZ,SAChBG,EAAMkB,UAAUvF,MAChB8F,GAAiB/a,EAAKlL,UAExBwkB,EAAMyB,cAAgBA,EACtBzB,EAAMkH,sBAAwBzF,EAAgBzB,EAAMkB,UAAUl3B,OAC9Dg2B,EAAMiB,MAAQkF,EAAY,EAC1BnG,EAAMqB,QAAUrB,EAAMkB,UAAU,GAAKlB,EAAMkB,UAAU,GAAGtB,GAAK,EAC7DI,EAAMgB,MAAQoF,GAETpG,EAAM1kB,aAAe0kB,EAAMkB,UAAUl3B,QAIpCg2B,EAAMkB,UAAUiG,OAAM,SAACzgB,GAAD,OAAU4c,EAAiBrpB,KAAKyM,EAAKmZ,aAC7Dj6B,IAAOpB,KAAK,qGAEZkiB,EAAO,IAAIsY,GACNa,OAASG,EAAMkB,UAAU,GAAGrB,OACjCnZ,EAAKoZ,QAAUA,EACfpZ,EAAKsZ,MAAQrkB,EACb+K,EAAK7hB,KAAOA,EACZ6hB,EAAK2H,GAAK,cAEV2R,EAAM1kB,YAAcoL,EACpBsZ,EAAMoB,gBAAiB,GAavBkF,GAQR,SAAmCpF,EAAWkG,GAE5C,IADA,IAAIC,EAAWnG,EAAUkG,GAChBjlC,EAAIilC,EAAa,EAAGjlC,GAAK,EAAGA,IAAK,CACxC,IAAMukB,EAAOwa,EAAU/+B,GACvBukB,EAAK+Y,gBAAkB4H,EAAS5H,gBAAmC,IAAhB/Y,EAAKlL,SACxD6rB,EAAW3gB,GAZT4gB,CAAyBtH,EAAMkB,UAAWoF,GAGrCtG,G,KAaX,SAASuG,EAAuB7f,EAAM2f,GAChC3f,EAAK8Y,mBACP9Y,EAAK+Y,gBAAkB5I,KAAKwG,MAAM3W,EAAK8Y,qBAC9B6G,aAAJ,EAAIA,EAAU5G,mBACnB/Y,EAAK+Y,gBAAkB4G,EAASkB,oBAG7B,YAAgB7gB,EAAK+Y,mBACxB/Y,EAAK+Y,gBAAkB,KACvB/Y,EAAK8Y,mBAAqB,M,ICpXtB5I,EAAgBtpB,OAAhBspB,YA+gBO4Q,E,oBAngBb,WAAa7J,GAAK,aAChB,cAAMA,EACJ7nB,IAAMpP,iBACNoP,IAAM/O,cACN+O,IAAMvO,oBACNuO,IAAMnO,yBAJR,MAPM8/B,QAA+E,GAMrE,E,yFAYXC,qBAAP,SAA6B7iC,GAC3B,OAAQA,IAAS04B,EAAoBoK,aACnC9iC,IAAS04B,EAAoBqK,gB,EAQ1BC,sBAAP,SAA8BpxB,GAG5B,OAFiBA,EAAT5R,MAGR,KAAK04B,EAAoBoK,YACvB,OAAOnK,EAAkB6B,MAC3B,KAAK9B,EAAoBqK,eACvB,OAAOpK,EAAkBsK,SAC3B,QACE,OAAOtK,EAAkBuK,O,EAItBC,eAAP,SAAuBC,EAA0BxxB,GAC/C,IAAInK,EAAM27B,EAAS37B,IAOnB,YAJYkI,IAARlI,GAA8C,IAAzBA,EAAIO,QAAQ,WAEnCP,EAAMmK,EAAQnK,KAETA,G,2BAST47B,qBAAA,SAAsBzxB,GACpB,IAAM9B,EAAS5S,KAAK47B,IAAIhpB,OAClBwzB,EAAUxzB,EAAOyzB,QACjBC,EAAS1zB,EAAOurB,OAIhBA,EAAS,IAFQiI,GAAWE,GAEA1zB,GAMlC,OAHA8B,EAAQypB,OAASA,EACjBn+B,KAAK0lC,QAAQhxB,EAAQ5R,MAAQq7B,EAEtBA,G,EAGToI,kBAAA,SAAmB7xB,GACjB,OAAO1U,KAAK0lC,QAAQhxB,EAAQ5R,O,EAG9B0jC,oBAAA,SAAqBC,GACfzmC,KAAK0lC,QAAQe,WACRzmC,KAAK0lC,QAAQe,I,EAOxBC,uBAAA,WACE,IAAK,IAAID,KAAezmC,KAAK0lC,QAAS,CACpC,IAAIvH,EAASn+B,KAAK0lC,QAAQe,GACtBtI,GACFA,EAAO3rB,UAGTxS,KAAKwmC,oBAAoBC,K,EAI7Bj0B,QAAA,WACExS,KAAK0mC,yBAEL,YAAMl0B,QAAN,Y,EAGFm0B,kBAAA,SAAmB5+B,GACjB/H,KAAK4mC,KAAK,CACRr8B,IAAKxC,EAAKwC,IACVzH,KAAM04B,EAAoBqL,SAC1B5I,MAAO,EACPrkB,GAAI,KACJktB,aAAc,U,EAIlBC,eAAA,SAAgBh/B,GACd/H,KAAK4mC,KAAK,CACRr8B,IAAKxC,EAAKwC,IACVzH,KAAM04B,EAAoBwL,MAC1B/I,MAAOl2B,EAAKk2B,MACZrkB,GAAI7R,EAAK6R,GACTktB,aAAc,U,EAIlBG,oBAAA,SAAqBl/B,GACnB/H,KAAK4mC,KAAK,CACRr8B,IAAKxC,EAAKwC,IACVzH,KAAM04B,EAAoBoK,YAC1B3H,MAAO,KACPrkB,GAAI7R,EAAK6R,GACTktB,aAAc,U,EAIlBI,uBAAA,SAAwBn/B,GACtB/H,KAAK4mC,KAAK,CACRr8B,IAAKxC,EAAKwC,IACVzH,KAAM04B,EAAoBqK,eAC1B5H,MAAO,KACPrkB,GAAI7R,EAAK6R,GACTktB,aAAc,U,EAIlBF,KAAA,SAAMlyB,GACJ,IAAM9B,EAAS5S,KAAK47B,IAAIhpB,OAExB/O,IAAOtB,MAAP,4BAAyCmS,EAAQ5R,KAAjD,YAAiE4R,EAAQupB,MAAzE,SAAuFvpB,EAAQkF,IAG/F,IAYIutB,EACAC,EACAC,EACAC,EAfAnJ,EAASn+B,KAAKumC,kBAAkB7xB,GACpC,GAAIypB,EAAQ,CACV,IAAMoJ,EAAgBpJ,EAAOzpB,QAC7B,GAAI6yB,GAAiBA,EAAch9B,MAAQmK,EAAQnK,IAEjD,OADA1G,IAAOvB,MAAM,6BACN,EAEPuB,IAAOpB,KAAP,sCAAkDiS,EAAQ5R,MAC1Dq7B,EAAOqJ,QAWX,OAAQ9yB,EAAQ5R,MAChB,KAAK04B,EAAoBqL,SACvBM,EAAWv0B,EAAO60B,wBAClBL,EAAUx0B,EAAO80B,uBACjBL,EAAaz0B,EAAO+0B,0BACpBL,EAAgB10B,EAAOg1B,+BACvB,MACF,KAAKpM,EAAoBwL,MAEvBG,EAAW,EACXG,EAAgB,EAChBD,EAAa,EACbD,EAAUx0B,EAAOi1B,oBAEjB,MACF,QACEV,EAAWv0B,EAAOk1B,qBAClBV,EAAUx0B,EAAOi1B,oBACjBR,EAAaz0B,EAAOm1B,uBACpBT,EAAgB10B,EAAOo1B,4BAIzB7J,EAASn+B,KAAKmmC,qBAAqBzxB,GAEnC,IAAMuzB,EAAoC,CACxCb,UACAD,WACAE,aACAC,iBAGIY,EAA0D,CAC9DC,UAAWnoC,KAAKooC,YAAYxmC,KAAK5B,MACjCqoC,QAASroC,KAAKsoC,UAAU1mC,KAAK5B,MAC7BuoC,UAAWvoC,KAAKwoC,YAAY5mC,KAAK5B,OAMnC,OAHA6D,IAAOtB,MAAP,6CAA0DmS,EAAQnK,KAClE4zB,EAAOyI,KAAKlyB,EAASuzB,EAAcC,IAE5B,G,EAGTE,YAAA,SAAalC,EAA0B5Q,EAAoB5gB,EAAgC+zB,GACzF,QADyH,IAAhCA,MAA0B,MAC/G/zB,EAAQg0B,cAGV,OAFA1oC,KAAK2oC,mBAAmBzC,EAAUxxB,QAClC1U,KAAK4oC,sBAAsB1C,EAAU5Q,EAAO5gB,EAAS+zB,GAKvD,GADAzoC,KAAKwmC,oBAAoB9xB,EAAQ5R,MACJ,iBAAlBojC,EAASn+B,KAClB,MAAM,IAAIuE,MAAM,sDAGlB,IAAM41B,EAASgE,EAASn+B,KAExButB,EAAMuT,MAAQhU,EAAYrG,MAIQ,IAA9B0T,EAAOp3B,QAAQ,WAMfo3B,EAAOp3B,QAAQ,YAAc,GAAKo3B,EAAOp3B,QAAQ,0BAA4B,EAC/E9K,KAAK8oC,4BAA4B5C,EAAU5Q,EAAO5gB,EAAS+zB,GAE3DzoC,KAAK+oC,sBAAsB7C,EAAU5Q,EAAO5gB,EAAS+zB,GARrDzoC,KAAKgpC,4BAA4B9C,EAAUxxB,EAAS,sBAAuB+zB,I,EAY/EH,UAAA,SAAWpC,EAA0BxxB,EAAgC+zB,QAAuB,IAAvBA,MAAiB,MACpFzoC,KAAKipC,oBAAoBv0B,EAAS+zB,GAAgB,EAAOvC,I,EAG3DsC,YAAA,SAAalT,EAAoB5gB,EAAgC+zB,QAAuB,IAAvBA,MAAiB,MAChFzoC,KAAKipC,oBAAoBv0B,EAAS+zB,GAAgB,I,EAKpDM,sBAAA,SAAuB7C,EAA0B5Q,EAAoB5gB,EAAgC+zB,GACnG,IAAM7M,EAAM57B,KAAK47B,IACXsG,EAASgE,EAASn+B,KAElBwC,EAAMk7B,EAAeQ,eAAeC,EAAUxxB,GAJwE,EAK5F8sB,EAAWS,oBAAoBC,EAAQ33B,GAA/D43B,EALoH,EAKpHA,OAAQC,EAL4G,EAK5GA,YAChB,GAAKD,EAAOl6B,OAAZ,CAMA,IAAMk7B,EAAiChB,EAAOvK,KAAI,SAAAqG,GAAK,MAAK,CAC1DrkB,GAAIqkB,EAAM6B,MAAMxC,MAChBllB,MAAO6lB,EAAM1mB,eAGT2xB,EAAc1H,EAAW0B,yBAAyBhB,EAAQ33B,EAAK,QAAS44B,GACxEgG,EAAY3H,EAAW0B,yBAAyBhB,EAAQ33B,EAAK,aAC7D6+B,EAAW5H,EAAW0B,yBAAyBhB,EAAQ33B,EAAK,mBAElE,GAAI2+B,EAAYjhC,OAAQ,CAEtB,IAAIohC,GAAqB,EACzBH,EAAYxlC,SAAQ,SAAA0e,GACbA,EAAW7X,MACd8+B,GAAqB,OAQE,IAAvBA,GAAgClH,EAAO,GAAG5qB,aAAe4qB,EAAO,GAAGrC,MAAMxC,QAC3Ez5B,IAAOrB,IAAI,2FACX0mC,EAAYI,QAAQ,CAClBxmC,KAAM,OACNnC,KAAM,OACN23B,SAAS,EACTqL,YAAY,EACZE,QAAQ,EACRjqB,IAAK,EACLkmB,MAAO,GACPv1B,IAAK,MAKXqxB,EAAI9nB,QAAQC,IAAMnP,gBAAiB,CACjCu9B,SACA+G,cACAC,YACAC,WACA7+B,MACA+qB,QACAmT,iBACArG,qBAlDApiC,KAAKgpC,4BAA4B9C,EAAUxxB,EAAS,6BAA8B+zB,I,EAsDtFK,4BAAA,SAA6B5C,EAA0B5Q,EAAoB5gB,EAAgC+zB,GACzG,IAAM7M,EAAM57B,KAAK47B,IAEThiB,EAAoBlF,EAApBkF,GAAIqkB,EAAgBvpB,EAAhBupB,MAAOn7B,EAAS4R,EAAT5R,KAEbyH,EAAMk7B,EAAeQ,eAAeC,EAAUxxB,GAG9CyvB,EAAa,YAAgBvqB,GAAgBA,EAAe,EAC5D2vB,EAAU,YAAgBtL,GAAmBA,EAAkBkG,EAE/DqF,EAAY/D,EAAeK,sBAAsBpxB,GACjD+0B,EAAejI,EAAW0C,mBAAmBgC,EAASn+B,KAAgBwC,EAAKg/B,EAASC,EAAWrF,GAMrG,GAFCsF,EAAqBZ,MAAQvT,EAAMuT,MAE/BY,EAAatK,UAAUl3B,OAA5B,CAgBA,GAAInF,IAAS04B,EAAoBqL,SAAU,CACzC,IAAM6C,EAAc,CAClBn/B,MACA0J,QAASw1B,GAGX7N,EAAI9nB,QAAQC,IAAMnP,gBAAiB,CACjCu9B,OAAQ,CAACuH,GACTR,YAAa,GACb3+B,MACA+qB,QACAmT,iBACArG,YAAa,OAUjB,GALA9M,EAAMqU,QAAU9U,EAAYrG,MAKxBib,EAAapK,eAAjB,CACE,IAAMuK,EAAUH,EAAalwB,YAAYhP,IACzCvK,KAAK4mC,KAAK,CACRr8B,IAAKq/B,EACLlB,eAAe,EACf5lC,OACAm7B,QACAwL,eACA7vB,KACAiwB,WAAY,EACZC,SAAU,KACVhD,aAAc,qBAMlBpyB,EAAQ+0B,aAAeA,EAEvBzpC,KAAK4oC,sBAAsB1C,EAAU5Q,EAAO5gB,EAAS+zB,QAxDnD7M,EAAI9nB,QAAQC,IAAM/M,MAAO,CACvBlE,KAAMwE,IAAWyiC,cACjB91B,QAAS1M,IAAayiC,kBACtB71B,OAAO,EACP5J,IAAKA,EACL6J,OAAQ,8BACR6pB,MAAgC,iBAAlBvpB,EAAQupB,MAAqBvpB,EAAQupB,WAAQxrB,K,EAqDjEk2B,mBAAA,SAAoBzC,EAA0BxxB,GAC5C,GAA6B,iBAAlBwxB,EAASn+B,KAClB,MAAM,IAAIuE,MAAM,+DAGlB,IAAM29B,EAAWpU,IAAWa,kBAAkB,IAAI/sB,WAAWu8B,EAASn+B,OAEtE,GAAKkiC,EAAL,CAGA,IAAMC,EAAiBD,EAAStT,WAC1B8S,EAAe/0B,EAAQ+0B,aAC7BS,EAAexmC,SAAQ,SAACymC,EAAY//B,GAClC,IAAMggC,EAAaD,EAAWznC,KAC9B,GAAK+mC,EAAL,CAGA,IAAM9kB,EAAO8kB,EAAatK,UAAU/0B,GACN,IAA1Bua,EAAK2Z,UAAUr2B,QACjB0c,EAAKyZ,aAAar1B,OAAO,EAAIqhC,EAAWlhC,IAAMkhC,EAAWroB,OAAS,IAAMhZ,OAAOqhC,EAAWroB,YAI1F0nB,GACFA,EAAalwB,YAAY6kB,aAAar1B,OAAOkhC,EAASrT,eAAiB,Q,EAI3EoS,4BAAA,SAA6B9C,EAA0BxxB,EAAgCN,EAAgBq0B,GACrGzoC,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAWyiC,cACjB91B,QAAS1M,IAAa8iC,uBACtBl2B,OAAO,EACP5J,IAAK27B,EAAS37B,IACd6J,SACAq0B,oB,EAIJQ,oBAAA,SAAqBv0B,EAAgC+zB,EAAyBrB,EAA0BlB,GAGtG,IAAIjyB,EACAE,OAJ0I,IAAlEizB,OAAmB,QAA+C,IAAxClB,MAAkC,MACxIriC,IAAOnB,KAAP,2CAAuDgS,EAAQ5R,KAA/D,kBAKA,IAAMq7B,EAASn+B,KAAKumC,kBAAkB7xB,GAEtC,OAAQA,EAAQ5R,MAChB,KAAK04B,EAAoBqL,SACvB5yB,EAAWmzB,EAAU7/B,IAAa+iC,sBAAwB/iC,IAAagjC,oBACvEp2B,GAAQ,EACR,MACF,KAAKqnB,EAAoBwL,MACvB/yB,EAAWmzB,EAAU7/B,IAAaijC,mBAAqBjjC,IAAakjC,iBACpEt2B,GAAQ,EACR,MACF,KAAKqnB,EAAoBoK,YACvB3xB,EAAWmzB,EAAU7/B,IAAamjC,yBAA2BnjC,IAAaojC,uBAC1Ex2B,GAAQ,EACR,MACF,QAEEA,GAAQ,EAGNgqB,IACFA,EAAOqJ,QACPxnC,KAAKwmC,oBAAoB9xB,EAAQ5R,OAInC,IAAI8nC,EAAiB,CACnB9nC,KAAMwE,IAAWyiC,cACjB91B,UACAE,QACA5J,IAAKmK,EAAQnK,IACb4zB,SACAzpB,UACA+zB,kBAGEvC,IACF0E,EAAU1E,SAAWA,GAGvBlmC,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO4jC,I,EAGhChC,sBAAA,SAAuB1C,EAA0B5Q,EAAoB5gB,EAAgC+zB,GAAyB,IACpH3lC,EAAkC4R,EAAlC5R,KAAMm7B,EAA4BvpB,EAA5BupB,MAAOrkB,EAAqBlF,EAArBkF,GAAI6vB,EAAiB/0B,EAAjB+0B,aAEzB,GAAKA,GAAiBA,EAAahK,eAMnC,GADsBgG,EAAeE,qBAAqBjxB,EAAQ5R,MAEhE9C,KAAK47B,IAAI9nB,QAAQC,IAAM9O,aAAc,CACnCgP,QAASw1B,EACTxL,MAAOA,GAAS,EAChBrkB,GAAIA,GAAM,EACV0b,QACAmT,wBAGF,OAAQ3lC,GACR,KAAK04B,EAAoBoK,YACvB5lC,KAAK47B,IAAI9nB,QAAQC,IAAMtO,mBAAoB,CACzCwO,QAASw1B,EACT7vB,KACA0b,QACAmT,mBAEF,MACF,KAAKjN,EAAoBqK,eACvB7lC,KAAK47B,IAAI9nB,QAAQC,IAAMlO,sBAAuB,CAC5CoO,QAASw1B,EACT7vB,KACA0b,QACAmT,wBA5BJzoC,KAAKgpC,4BAA4B9C,EAAUxxB,EAAS,0BAA2B+zB,I,GAtexD9M,G,IC0FdkP,E,oBAzGb,WAAajP,GAAK,aAChB,cAAMA,EAAK7nB,IAAM7N,eAAjB,MACKw/B,QAAU,GAFC,E,kHAKlBlzB,QAAA,WACE,IAAIkzB,EAAU1lC,KAAK0lC,QACnB,IAAK,IAAIoF,KAAcpF,EAAS,CAC9B,IAAIvH,EAASuH,EAAQoF,GACjB3M,GACFA,EAAO3rB,UAGXxS,KAAK0lC,QAAU,GAEf,YAAMlzB,QAAN,Y,EAGFu4B,cAAA,SAAehjC,GACb,IAAM4c,EAAO5c,EAAK4c,KAChB7hB,EAAO6hB,EAAK7hB,KACZ4iC,EAAU1lC,KAAK0lC,QACf9yB,EAAS5S,KAAK47B,IAAIhpB,OAClBo4B,EAAkBp4B,EAAOq4B,QACzBC,EAAiBt4B,EAAOurB,OAG1BxZ,EAAKwmB,OAAS,EAEd,IASI5D,EAAeU,EAAcC,EAT7B/J,EAASuH,EAAQ5iC,GACjBq7B,IACFt6B,IAAOpB,KAAP,4CAAwDK,GACxDq7B,EAAOqJ,SAGTrJ,EAASuH,EAAQ5iC,GAAQ6hB,EAAKwZ,OAC5BvrB,EAAOq4B,QAAU,IAAID,EAAgBp4B,GAAU,IAAIs4B,EAAet4B,GAIpE20B,EAAgB,CAAEh9B,IAAKoa,EAAKpa,IAAKoa,KAAMA,EAAMmiB,aAAc,cAAesE,cAAc,GAExF,IAAIrpB,EAAQ4C,EAAK0mB,qBACfniC,EAAMyb,EAAK4Z,mBAET,YAAgBxc,IAAU,YAAgB7Y,KAC5Cq+B,EAAcsC,WAAa9nB,EAC3BwlB,EAAcuC,SAAW5gC,GAG3B++B,EAAe,CACbb,QAASx0B,EAAO04B,mBAChBnE,SAAU,EACVE,WAAY,EACZC,cAAe10B,EAAO24B,4BAGxBrD,EAAkB,CAChBC,UAAWnoC,KAAKooC,YAAYxmC,KAAK5B,MACjCqoC,QAASroC,KAAKsoC,UAAU1mC,KAAK5B,MAC7BuoC,UAAWvoC,KAAKwoC,YAAY5mC,KAAK5B,MACjCwrC,WAAYxrC,KAAKyrC,aAAa7pC,KAAK5B,OAGrCm+B,EAAOyI,KAAKW,EAAeU,EAAcC,I,EAG3CE,YAAA,SAAalC,EAAU5Q,EAAO5gB,EAAS+zB,QAAuB,IAAvBA,MAAiB,MACtD,IAAIvc,EAAUga,EAASn+B,KAAM4c,EAAOjQ,EAAQiQ,KAE5CA,EAAKwZ,YAAS1rB,EACdzS,KAAK0lC,QAAQ/gB,EAAK7hB,WAAQ2P,EAC1BzS,KAAK47B,IAAI9nB,QAAQC,IAAM1N,YAAa,CAAE6lB,QAASA,EAASvH,KAAMA,EAAM2Q,MAAOA,EAAOmT,eAAgBA,K,EAGpGH,UAAA,SAAWpC,EAAUxxB,EAAS+zB,QAAuB,IAAvBA,MAAiB,MAC7C,IAAM9jB,EAAOjQ,EAAQiQ,KACjBwZ,EAASxZ,EAAKwZ,OACdA,GACFA,EAAOqJ,QAGTxnC,KAAK0lC,QAAQ/gB,EAAK7hB,WAAQ2P,EAC1BzS,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAWyiC,cAAe91B,QAAS1M,IAAamkC,gBAAiBv3B,OAAO,EAAOwQ,KAAMjQ,EAAQiQ,KAAMuhB,SAAUA,EAAUuC,eAAgBA,K,EAG/KD,YAAA,SAAalT,EAAO5gB,EAAS+zB,QAAuB,IAAvBA,MAAiB,MAC5C,IAAM9jB,EAAOjQ,EAAQiQ,KACjBwZ,EAASxZ,EAAKwZ,OACdA,GACFA,EAAOqJ,QAGTxnC,KAAK0lC,QAAQ/gB,EAAK7hB,WAAQ2P,EAC1BzS,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAWyiC,cAAe91B,QAAS1M,IAAaokC,kBAAmBx3B,OAAO,EAAOwQ,KAAMjQ,EAAQiQ,KAAM8jB,eAAgBA,K,EAI7JgD,aAAA,SAAcnW,EAAO5gB,EAAS3M,EAAM0gC,QAAuB,IAAvBA,MAAiB,MACnD,IAAI9jB,EAAOjQ,EAAQiQ,KACnBA,EAAKwmB,OAAS7V,EAAM6V,OACpBnrC,KAAK47B,IAAI9nB,QAAQC,IAAM5N,mBAAoB,CAAEwe,KAAMA,EAAM2Q,MAAOA,EAAOmT,eAAgBA,K,GAtG9D9M,G,IC6HdiQ,E,oBA7Gb,WAAahQ,GAAU,aACrB,cAAMA,EAAK7nB,IAAM7M,cAAjB,MALKw+B,QAAU,GAIM,EAHhBmG,WAAgC,KAGhB,EAFhBC,WAA4B,KAEZ,E,kHAIvBt5B,QAAA,WACE,IAAK,IAAMs4B,KAAc9qC,KAAK0lC,QAAS,CACrC,IAAIvH,EAASn+B,KAAK0lC,QAAQoF,GACtB3M,GACFA,EAAO3rB,UAGXxS,KAAK0lC,QAAU,GAEf,YAAMlzB,QAAN,Y,EAGFu5B,aAAA,SAAchkC,GAA2B,IAC/B4c,EAAS5c,EAAT4c,KACF7hB,EAAO6hB,EAAK7hB,KACZq7B,EAASn+B,KAAK0lC,QAAQ5iC,GAC5B,GAAK6hB,EAAKhG,YAAV,CAMA,IAAMmgB,EAAMna,EAAKhG,YAAYmgB,IAC7B,GAAIA,IAAQ9+B,KAAK8rC,YAAkC,OAApB9rC,KAAK6rC,WAAqB,CACvD,IAAIj5B,EAAS5S,KAAK47B,IAAIhpB,OAKtB,GAJIurB,IACFt6B,IAAOpB,KAAP,sCAAkDK,GAClDq7B,EAAOqJ,UAEJ1I,EAEH,YADAj7B,IAAOpB,KAAK,oBAIdkiB,EAAKwZ,OAASn+B,KAAK0lC,QAAQ5iC,GAAQ,IAAI8P,EAAOurB,OAAOvrB,GACrD5S,KAAK8rC,WAAahN,EAClB9+B,KAAK6rC,WAAa,KAElB,IAAMtE,EAAkC,CACtCh9B,IAAKu0B,EACLna,KAAMA,EACNmiB,aAAc,eAMVmB,EAAoC,CACxCb,QAASx0B,EAAO04B,mBAChBnE,SAAU,EACVE,WAAYz0B,EAAOo5B,sBACnB1E,cAAe10B,EAAO24B,4BAGlBrD,EAAqD,CACzDC,UAAWnoC,KAAKooC,YAAYxmC,KAAK5B,MACjCqoC,QAASroC,KAAKsoC,UAAU1mC,KAAK5B,MAC7BuoC,UAAWvoC,KAAKwoC,YAAY5mC,KAAK5B,OAGnC2kB,EAAKwZ,OAAOyI,KAAKW,EAAeU,EAAcC,QACrCloC,KAAK6rC,aAEdlnB,EAAKhG,YAAYhd,IAAM3B,KAAK6rC,WAC5B7rC,KAAK47B,IAAI9nB,QAAQC,IAAM5M,WAAY,CAAEwd,KAAMA,UA/C3C9gB,IAAOpB,KAAK,wD,EAmDhB2lC,YAAA,SAAalC,EAA0B5Q,EAAoB5gB,GACzD,IAAIiQ,EAAOjQ,EAAQiQ,KACdA,EAAKhG,aAIV3e,KAAK6rC,WAAalnB,EAAKhG,YAAYhd,IAAM,IAAIgI,WAAWu8B,EAASn+B,MAGjE4c,EAAKwZ,YAAS1rB,SACPzS,KAAK0lC,QAAQ/gB,EAAK7hB,MACzB9C,KAAK47B,IAAI9nB,QAAQC,IAAM5M,WAAY,CAAEwd,KAAMA,KARzC9gB,IAAOlB,MAAM,sC,EAWjB2lC,UAAA,SAAWpC,EAA0BxxB,GACnC,IAAIiQ,EAAOjQ,EAAQiQ,KACfwZ,EAASxZ,EAAKwZ,OACdA,GACFA,EAAOqJ,eAGFxnC,KAAK0lC,QAAQ/gB,EAAK7hB,MACzB9C,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAWyiC,cAAe91B,QAAS1M,IAAa0kC,eAAgB93B,OAAO,EAAOwQ,OAAMuhB,c,EAG5HsC,YAAA,SAAalT,EAAoB5gB,GAC/B,IAAIiQ,EAAOjQ,EAAQiQ,KACfwZ,EAASxZ,EAAKwZ,OACdA,GACFA,EAAOqJ,eAGFxnC,KAAK0lC,QAAQ/gB,EAAK7hB,MACzB9C,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAWyiC,cAAe91B,QAAS1M,IAAa2kC,iBAAkB/3B,OAAO,EAAOwQ,U,GA9GlGgX,GCjBjB,IAAMwQ,EACC,aADDA,EAEA,YAFAA,EAGF,UAHEA,EAIP,KAGOC,EAAb,Y,QACE,WAAaxQ,GAAK,aAChB,cAAMA,EACJ7nB,IAAMxP,gBACNwP,IAAMnN,cACNmN,IAAM1N,cAHR,MAMKgmC,cAAgB,GAErB,EAAKlN,UAAYr+B,OAAOY,OAAO,MAC/B,EAAK4qC,WAAaxrC,OAAOY,OAAO,MAEhC,EAAKkR,OAASgpB,EAAIhpB,OAZF,E,EADpB,G,EAAA,G,6EAAA,2BAgBEJ,QAAA,WACExS,KAAKm/B,UAAYr+B,OAAOY,OAAO,MAC/B1B,KAAKssC,WAAaxrC,OAAOY,OAAO,MAChC1B,KAAK4S,OAAS,KACd+oB,EAAa35B,UAAUwQ,QAAQjS,KAAKP,MACpC,YAAMwS,QAAN,YArBJ,EA+BE+5B,gBAAA,SAAiBxwB,EAAUytB,GACzB,IAAMrK,EAAYn/B,KAAKm/B,UACjBqN,EAAgB1rC,OAAO4vB,KAAKyO,GAAWnL,QAAO,SAAAryB,GAClD,IAAM8qC,EAAiBtN,EAAUx9B,GACjC,GAAI8qC,EAAeC,KAAK5pC,OAAS0mC,EAC/B,OAAO,EAGT,IAAKiD,EAAeE,SAClB,OAAO,EAGT,IAAMhoB,EAAO8nB,EAAeC,KAC5B,OAAO/nB,EAAKqK,UAAYjT,GAAYA,GAAY4I,EAAKkL,UAEvD,GAA6B,IAAzB2c,EAAcvkC,OAChB,OAAO,KAGP,IAAM2kC,EAAkBJ,EAAc5S,MACtC,OAAOuF,EAAUyN,GAAiBF,MAnDxC,EA8DEG,uBAAA,SAAwBC,EAAkBC,GAAW,WAEnDjsC,OAAO4vB,KAAK1wB,KAAKm/B,WAAWz7B,SAAQ,SAAA/B,GAClC,IAAM8qC,EAAiB,EAAKtN,UAAUx9B,GACtC,GAAK8qC,GAAmBA,EAAeE,SAAvC,CAGA,IAAMK,EAASP,EAAeQ,MAAMH,GACpC,GAAKE,EAIL,IADA,IAAME,EAAgBF,EAAOG,KACpB/sC,EAAI,EAAGA,EAAI8sC,EAAcjlC,OAAQ7H,IAAK,CAC7C,IAAM+sC,EAAOD,EAAc9sC,GAC3B,IAAK,EAAKgtC,eAAeD,EAAKne,SAAUme,EAAKtd,OAAQkd,GAAY,CAE/D,EAAKM,eAAeZ,EAAeC,MACnC,aA/EV,EA0FEY,uBAAA,SAAwBngC,GAAU,WAC5BogC,EAAUvtC,KAAKwtC,eAAergC,GAC9Bs/B,EAAiBzsC,KAAKm/B,UAAUoO,GAChCd,IACFA,EAAeE,UAAW,EAE1B7rC,OAAO4vB,KAAK1wB,KAAKssC,YAAY5oC,SAAQ,SAAAopC,GACnC,GAAI3/B,EAASsxB,oBAAoBqO,GAAmB,CAClD,IAAIC,EAAY,EAAKT,WAAWQ,GAGhCL,EAAeQ,MAAMH,GAAoB,EAAKW,iBAAiBtgC,EAAS6hB,SAAU7hB,EAAS0iB,OAAQkd,SArG7G,EA2GEU,iBAAA,SAAkBze,EAAUa,EAAQkd,GAIlC,IAHA,IACI3X,EAAWC,EADX6X,EAAgB,GAEhBQ,GAAkB,EACbttC,EAAI,EAAGA,EAAI2sC,EAAU9kC,OAAQ7H,IAAK,CAGzC,GAFAg1B,EAAY2X,EAAUhrB,MAAM3hB,GAAKJ,KAAKqsC,cACtChX,EAAU0X,EAAU7jC,IAAI9I,GAAKJ,KAAKqsC,cAC9Brd,GAAYoG,GAAavF,GAAUwF,EAAS,CAG9C6X,EAAc7jC,KAAK,CACjB2lB,SAAUllB,KAAK4lB,IAAIV,EAAU+d,EAAUhrB,MAAM3hB,IAC7CyvB,OAAQ/lB,KAAKoS,IAAI2T,EAAQkd,EAAU7jC,IAAI9I,MAEzC,MACK,GAAI4uB,EAAWqG,GAAWxF,EAASuF,EAGxC8X,EAAc7jC,KAAK,CACjB2lB,SAAUllB,KAAK4lB,IAAIV,EAAU+d,EAAUhrB,MAAM3hB,IAC7CyvB,OAAQ/lB,KAAKoS,IAAI2T,EAAQkd,EAAU7jC,IAAI9I,MAEzCstC,GAAkB,OACb,GAAI7d,GAAUuF,EAEnB,MAIJ,MAAO,CACL+X,KAAMD,EACNS,QAASD,IA1If,EA8IEF,eAAA,SAAgBrgC,GACd,OAAUA,EAASrK,KAAnB,IAA2BqK,EAAS8wB,MAApC,IAA6C9wB,EAAS6wB,MAAtD,IAA+D7wB,EAASmf,IA/I5E,EAuJEshB,mBAAA,SAAoBT,GAAM,IACpBU,EAAazY,EAAWC,EADJ,OAEpByY,EAAe,KACfC,EAAc,EAgBlB,OAfAjtC,OAAO4vB,KAAK1wB,KAAKm/B,WAAWz7B,SAAQ,SAAA/B,GAClC,IAAM8qC,EAAiB,EAAKtN,UAAUx9B,GAClC,EAAKqsC,UAAUvB,KACjBrX,EAAYqX,EAAeC,KAAK1d,SAAW,EAAKqd,cAChDhX,EAAUoX,EAAeC,KAAK7c,OAAS,EAAKwc,cACxCc,GAAQ/X,GAAa+X,GAAQ9X,IAE/BwY,EAAc/jC,KAAKoS,IAAIixB,EAAO/X,EAAWC,EAAU8X,GAC/CY,GAAeF,IACjBC,EAAerB,EAAeC,KAC9BqB,EAAcF,QAKfC,GA1KX,EAiLEG,SAAA,SAAU9gC,GACR,IAAIogC,EAAUvtC,KAAKwtC,eAAergC,GAC9Bs/B,EAAiBzsC,KAAKm/B,UAAUoO,GAChC5lB,EAAQwkB,EAYZ,YAVuB15B,IAAnBg6B,IAIA9kB,EAHG8kB,EAAeE,UAE0B,IAAnC3sC,KAAKguC,UAAUvB,GAChBN,EAEAA,EAJAA,GAQLxkB,GAhMX,EAmMEqmB,UAAA,SAAWvB,GACT,OAAmC,IAA5BA,EAAeE,gBACal6B,IAA/Bg6B,EAAeQ,MAAM1sB,QAA8D,IAAvCksB,EAAeQ,MAAM1sB,MAAMotB,cACvCl7B,IAA/Bg6B,EAAeQ,MAAMzsB,QAA8D,IAAvCisB,EAAeQ,MAAMzsB,MAAMmtB,UAtMhF,EAyMEP,eAAA,SAAgBpe,EAAUa,EAAQkd,GAEhC,IADA,IAAI3X,EAAWC,EACNj1B,EAAI,EAAGA,EAAI2sC,EAAU9kC,OAAQ7H,IAAK,CAGzC,GAFAg1B,EAAY2X,EAAUhrB,MAAM3hB,GAAKJ,KAAKqsC,cACtChX,EAAU0X,EAAU7jC,IAAI9I,GAAKJ,KAAKqsC,cAC9Brd,GAAYoG,GAAavF,GAAUwF,EACrC,OAAO,EAGT,GAAIxF,GAAUuF,EAEZ,OAAO,EAIX,OAAO,GAxNX,EA8NE8Y,aAAA,SAActqC,GACZ,IAAMuJ,EAAWvJ,EAAE+gB,KAGd,YAAgBxX,EAASmf,MAAOnf,EAASghC,cAI9CnuC,KAAKm/B,UAAUn/B,KAAKwtC,eAAergC,IAAa,CAC9Cu/B,KAAMv/B,EACN8/B,MAAOnsC,OAAOY,OAAO,MACrBirC,UAAU,KAzOhB,EAgPEyB,iBAAA,SAAkBxqC,GAAG,WAEnB5D,KAAKssC,WAAa1oC,EAAE0oC,WACpBxrC,OAAO4vB,KAAK1wB,KAAKssC,YAAY5oC,SAAQ,SAAAopC,GACnC,IAAIC,EAAY,EAAKT,WAAWQ,GAChC,EAAKD,uBAAuBC,EAAkBC,OArPpD,EA4PEsB,eAAA,SAAgBzqC,GACd5D,KAAKstC,uBAAuB1pC,EAAE+gB,OA7PlC,EAqQE2pB,YAAA,SAAanhC,GACX,IAAMogC,EAAUvtC,KAAKwtC,eAAergC,GACpC,YAAmCsF,IAA5BzS,KAAKm/B,UAAUoO,IAvQ1B,EA8QEF,eAAA,SAAgBlgC,GACd,IAAIogC,EAAUvtC,KAAKwtC,eAAergC,UAC3BnN,KAAKm/B,UAAUoO,IAhR1B,EAsREgB,mBAAA,WACEvuC,KAAKm/B,UAAYr+B,OAAOY,OAAO,OAvRnC,GAAqCi6B,GCiCtB6S,EAzCM,CAiBnBC,OAAQ,SAAaC,EAAWC,GAM9B,IALA,IAAIC,EAAmB,EACnBC,EAAmBH,EAAKzmC,OAAS,EACjC6mC,EAA8B,KAC9BC,EAA2B,KAExBH,GAAYC,GAAU,CAI3B,IAAIG,EAAmBL,EAFvBI,EAAiBL,EADjBI,GAAgBF,EAAWC,GAAY,EAAI,IAI3C,GAAIG,EAAmB,EACrBJ,EAAWE,EAAe,MACrB,MAAIE,EAAmB,GAG5B,OAAOD,EAFPF,EAAWC,EAAe,GAM9B,OAAO,OCpBEG,EAAb,kCAOSC,WAAP,SAAmB5L,EAAmBvnB,GACpC,IACE,GAAIunB,EAEF,IADA,IAAIqJ,EAAWrJ,EAAMqJ,SACZvsC,EAAI,EAAGA,EAAIusC,EAAS1kC,OAAQ7H,IACnC,GAAI2b,GAAY4wB,EAAS5qB,MAAM3hB,IAAM2b,GAAY4wB,EAASzjC,IAAI9I,GAC5D,OAAO,EAIb,MAAOuC,IAKT,OAAO,GAtBX,EAyBSwsC,WAAP,SACE7L,EACAhc,EACA8nB,GAOA,IACE,GAAI9L,EAAO,CACT,IAEIljC,EAFAivC,EAAY/L,EAAMqJ,SAClBA,EAA8B,GAElC,IAAKvsC,EAAI,EAAGA,EAAIivC,EAAUpnC,OAAQ7H,IAChCusC,EAAStjC,KAAK,CAAE0Y,MAAOstB,EAAUttB,MAAM3hB,GAAI8I,IAAKmmC,EAAUnmC,IAAI9I,KAGhE,OAAOJ,KAAKsvC,aAAa3C,EAAUrlB,EAAK8nB,IAE1C,MAAOzsC,IAKT,MAAO,CAAEwI,IAAK,EAAG4W,MAAOuF,EAAKpe,IAAKoe,EAAKioB,eAAW98B,IAnDtD,EAsDS68B,aAAP,SACE3C,EACArlB,EACA8nB,GAQAzC,EAASpb,MAAK,SAAUC,EAAGnL,GACzB,IAAImpB,EAAOhe,EAAEzP,MAAQsE,EAAEtE,MACvB,OAAIytB,GAGKnpB,EAAEnd,IAAMsoB,EAAEtoB,OAIrB,IAAIumC,EAA+B,GACnC,GAAIL,EAIF,IAAK,IAAIhvC,EAAI,EAAGA,EAAIusC,EAAS1kC,OAAQ7H,IAAK,CACxC,IAAIsvC,EAAUD,EAAUxnC,OACxB,GAAIynC,EAAS,CACX,IAAIC,EAAUF,EAAUC,EAAU,GAAGxmC,IAEhCyjC,EAASvsC,GAAG2hB,MAAQ4tB,EAAWP,EAK9BzC,EAASvsC,GAAG8I,IAAMymC,IACpBF,EAAUC,EAAU,GAAGxmC,IAAMyjC,EAASvsC,GAAG8I,KAI3CumC,EAAUpmC,KAAKsjC,EAASvsC,SAI1BqvC,EAAUpmC,KAAKsjC,EAASvsC,SAI5BqvC,EAAY9C,EAWd,IARA,IAGIiD,EAHAC,EAAY,EAMZC,EAAsBxoB,EACtByoB,EAAoBzoB,EACflnB,EAAI,EAAGA,EAAIqvC,EAAUxnC,OAAQ7H,IAAK,CACzC,IAAI2hB,EAAQ0tB,EAAUrvC,GAAG2hB,MACvB7Y,EAAMumC,EAAUrvC,GAAG8I,IAErB,GAAKoe,EAAM8nB,GAAoBrtB,GAASuF,EAAMpe,EAE5C4mC,EAAc/tB,EAEd8tB,GADAE,EAAY7mC,GACYoe,OACnB,GAAKA,EAAM8nB,EAAmBrtB,EAAO,CAC1C6tB,EAAkB7tB,EAClB,OAGJ,MAAO,CAAE5W,IAAK0kC,EAAW9tB,MAAO+tB,EAAa5mC,IAAK6mC,EAAWR,UAAWK,IA/H5E,K,sBCfO,SAASI,IACd,OAAQzkC,OAAey1B,aAAgBz1B,OAAe0kC,kB,WCAjD,IAAMC,EAAb,Y,QAAA,yD,EAAA,G,EAAA,G,6EAAA,YAMEp8B,QAAA,SAASgB,GAA0C,2BAAxB/M,EAAwB,iCAAxBA,EAAwB,kBACjD/H,KAAKiW,KAAL,MAAAjW,KAAA,CAAU8U,EAAOA,GAAjB,OAA2B/M,KAP/B,GAA8BsN,gBCQxBrS,EAASC,cACT+9B,EAAcgP,KAAoB,CAAE/O,gBAAiB,kBAAM,IAwIlDkP,E,WArIb,WAAavU,EAAKhiB,GAAI,WACpB5Z,KAAK47B,IAAMA,EACX57B,KAAK4Z,GAAKA,EAEV,IAAMjH,EAAW3S,KAAK2S,SAAW,IAAIu9B,EAC/Bt9B,EAASgpB,EAAIhpB,OAEbqoB,EAAiB,SAACC,EAAInzB,IAC1BA,EAAOA,GAAQ,IACV4c,KAAO,EAAKA,KACjB5c,EAAK6R,GAAK,EAAKA,GACfgiB,EAAI9nB,QAAQonB,EAAInzB,IAIlB4K,EAAS+D,GAAG3C,IAAMzN,eAAgB20B,GAClCtoB,EAAS+D,GAAG3C,IAAMxN,0BAA2B00B,GAC7CtoB,EAAS+D,GAAG3C,IAAMrN,kBAAmBu0B,GACrCtoB,EAAS+D,GAAG3C,IAAMpN,YAAas0B,GAC/BtoB,EAAS+D,GAAG3C,IAAM/M,MAAOi0B,GACzBtoB,EAAS+D,GAAG3C,IAAMtN,sBAAuBw0B,GACzCtoB,EAAS+D,GAAG3C,IAAMvN,sBAAuBy0B,GACzCtoB,EAAS+D,GAAG3C,IAAM9N,eAAgBg1B,GAElC,IAAMta,EAAgB,CACpByvB,IAAKpP,EAAYC,gBAAgB,aACjCrd,KAAMod,EAAYC,gBAAgB,cAClCpd,IAAKmd,EAAYC,gBAAgB,4BAI7BxS,EAAS3W,UAAU2W,OACzB,GAAI7b,EAAOy9B,cAAqC,oBAAZvV,OAA0B,CAE5D,IAAIwV,EADJzsC,IAAOrB,IAAI,yBAEX,IACE8tC,EAAItwC,KAAKswC,EAAIC,EAAK,IAClBvwC,KAAKwwC,OAASxwC,KAAKywC,gBAAgB7uC,KAAK5B,MACxCswC,EAAElV,iBAAiB,UAAWp7B,KAAKwwC,QACnCF,EAAEI,QAAU,SAAU57B,GACpB8mB,EAAI9nB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAWk1B,YAAavoB,QAAS1M,IAAak1B,mBAAoBtoB,OAAO,EAAMW,MAAO,gBAAiBpB,IAAK,CAAEG,QAASiB,EAAMjB,QAAU,KAAOiB,EAAM67B,SAAW,IAAM77B,EAAM87B,OAAS,QAEvNN,EAAEnV,YAAY,CAAEE,IAAK,OAAQ1a,cAAeA,EAAe8N,OAAQA,EAAQ7U,GAAIA,EAAIhH,OAAQsnB,KAAKC,UAAUvnB,KAC1G,MAAOc,GACP7P,IAAOpB,KAAK,mBAAoBiR,GAChC7P,IAAOlB,MAAM,qEACT2tC,GAEFttC,EAAOw3B,IAAIqW,gBAAgBP,EAAEvV,WAE/B/6B,KAAKg1B,QAAU,IAAID,IAAcpiB,EAAUgO,EAAe/N,EAAQ6b,GAClEzuB,KAAKswC,OAAI79B,QAGXzS,KAAKg1B,QAAU,IAAID,IAAcpiB,EAAUgO,EAAe/N,EAAQ6b,G,2BAItEjc,QAAA,WACE,IAAI89B,EAAItwC,KAAKswC,EACb,GAAIA,EACFA,EAAEQ,oBAAoB,UAAW9wC,KAAKwwC,QACtCF,EAAES,YACF/wC,KAAKswC,EAAI,SACJ,CACL,IAAItb,EAAUh1B,KAAKg1B,QACfA,IACFA,EAAQxiB,UACRxS,KAAKg1B,QAAU,MAGnB,IAAMriB,EAAW3S,KAAK2S,SAClBA,IACFA,EAASgE,qBACT3W,KAAK2S,SAAW,O,EAIpBtJ,KAAA,SAAMtB,EAAMwR,EAAahC,EAAYiC,EAAYmL,EAAMlL,EAAUY,EAAoB8a,GACnF,IAAMmb,EAAItwC,KAAKswC,EACTn2B,EAAa,YAAgBwK,EAAKqK,UAAYrK,EAAKqK,SAAWrK,EAAK5C,MACnEpD,EAAcgG,EAAKhG,YACnBqyB,EAAWhxC,KAAK2kB,KAChBsQ,IAAkB+b,GAAarsB,EAAKkZ,KAAOmT,EAASnT,IACpD3I,IAAgB8b,GAAarsB,EAAKsZ,QAAU+S,EAAS/S,OACrDgT,EAASD,GAAarsB,EAAK2H,KAAQ0kB,EAAS1kB,GAAK,EACjDlS,GAAc8a,GAAe+b,EAUnC,GATIhc,GACFpxB,IAAOrB,IAAOxC,KAAK4Z,GAAnB,2BAGEsb,GACFrxB,IAAOrB,IAAOxC,KAAK4Z,GAAnB,oBAGF5Z,KAAK2kB,KAAOA,EACR2rB,EAEFA,EAAEnV,YAAY,CAAEE,IAAK,QAAStzB,OAAM4W,cAAapF,cAAahC,aAAYiC,aAAYW,aAAY8a,gBAAeC,cAAa9a,aAAYX,WAAUY,qBAAoB8a,kBAAkBptB,aAAgBmpC,YAAc,CAACnpC,GAAQ,QAC5N,CACL,IAAIitB,EAAUh1B,KAAKg1B,QACfA,GACFA,EAAQ3rB,KAAKtB,EAAM4W,EAAapF,EAAahC,EAAYiC,EAAYW,EAAY8a,EAAeC,EAAa9a,EAAYX,EAAUY,EAAoB8a,K,EAK7Jsb,gBAAA,SAAiBvV,GACf,IAAInzB,EAAOmzB,EAAGnzB,KACZ6zB,EAAM57B,KAAK47B,IACb,OAAQ7zB,EAAK+M,OACb,IAAK,OAEH9R,EAAOw3B,IAAIqW,gBAAgB7wC,KAAKswC,EAAEvV,WAClC,MAEF,KAAKhnB,IAAMrN,kBACTqB,EAAKA,KAAKmrB,MAAQ,IAAIvpB,WAAW5B,EAAKmrB,OAClCnrB,EAAKorB,QACPprB,EAAKA,KAAKorB,MAAQ,IAAIxpB,WAAW5B,EAAKorB,QAI1C,QACEprB,EAAKA,KAAOA,EAAKA,MAAQ,GACzBA,EAAKA,KAAK4c,KAAO3kB,KAAK2kB,KACtB5c,EAAKA,KAAK6R,GAAK5Z,KAAK4Z,GACpBgiB,EAAI9nB,QAAQ/L,EAAK+M,MAAO/M,EAAKA,Q,KCrI5B,SAASopC,EAAYlT,EAAOn7B,EAAM8W,GACvC,OAAQ9W,GACR,IAAK,QACEm7B,EAAMmT,gBACTnT,EAAMmT,cAAgB,IAExBnT,EAAMmT,cAAc/nC,KAAKuQ,GACzB,MACF,IAAK,OACEqkB,EAAMoT,eACTpT,EAAMoT,aAAe,IAEvBpT,EAAMoT,aAAahoC,KAAKuQ,IAKrB,SAAS03B,GAAWnS,EAAWoS,EAASC,GAC7C,IAAIC,EAAWtS,EAAUoS,GAAUG,EAASvS,EAAUqS,GAAQG,EAAYD,EAAO1iB,SAEjF,GAAI,YAAgB2iB,GAGdH,EAAQD,GACVE,EAASh4B,SAAWk4B,EAAYF,EAAS1vB,MACrC0vB,EAASh4B,SAAW,GACtB5V,IAAOpB,KAAP,uCAAmDgvC,EAASnlB,GAA5D,UAAwEmlB,EAASxT,MAAjF,0EAGFyT,EAAOj4B,SAAWg4B,EAAS1vB,MAAQ4vB,EAC/BD,EAAOj4B,SAAW,GACpB5V,IAAOpB,KAAP,uCAAmDivC,EAAOplB,GAA1D,UAAsEolB,EAAOzT,MAA7E,8EAKJ,GAAIuT,EAAQD,EAAS,CACnB,IAAMn3B,EAAaq3B,EAAS5T,KAAO6T,EAAO7T,GAC1C6T,EAAO3vB,MAAQ0vB,EAAS1vB,OAAU3H,GAAcq3B,EAASG,UAAaH,EAASG,UAAYH,EAAS1vB,MAAQ0vB,EAASh4B,eAErHi4B,EAAO3vB,MAAQjY,KAAK4lB,IAAI+hB,EAAS1vB,MAAQ2vB,EAAOj4B,SAAU,GAKzD,SAASo4B,GAAkB59B,EAAS0Q,EAAMqK,EAAUa,EAAQuD,EAAUC,GAE3E,IAAIye,EAAc9iB,EACd4iB,EAAY/hB,EAChB,GAAI,YAAgBlL,EAAKqK,UAAW,CAElC,IAAIwO,EAAW1zB,KAAKue,IAAI1D,EAAKqK,SAAWA,GACnC,YAAgBrK,EAAK6Y,UAGxB7Y,EAAK6Y,SAAW1zB,KAAK4lB,IAAI8N,EAAU7Y,EAAK6Y,UAFxC7Y,EAAK6Y,SAAWA,EAKlBsU,EAAchoC,KAAK4lB,IAAIV,EAAUrK,EAAKqK,UACtCA,EAAWllB,KAAKoS,IAAI8S,EAAUrK,EAAKqK,UACnC4iB,EAAY9nC,KAAKoS,IAAI2T,EAAQlL,EAAKkL,QAClCA,EAAS/lB,KAAK4lB,IAAIG,EAAQlL,EAAKkL,QAC/BuD,EAAWtpB,KAAKoS,IAAIkX,EAAUzO,EAAKyO,UACnCC,EAASvpB,KAAK4lB,IAAI2D,EAAQ1O,EAAK0O,QAGjC,IAAM0e,EAAQ/iB,EAAWrK,EAAK5C,MAC9B4C,EAAK5C,MAAQ4C,EAAKqK,SAAWA,EAC7BrK,EAAKmtB,YAAcA,EACnBntB,EAAKkL,OAASA,EACdlL,EAAKitB,UAAYA,EACjBjtB,EAAKyO,SAAWA,EAChBzO,EAAK0O,OAASA,EACd1O,EAAKlL,SAAWoW,EAASb,EAEzB,IAMIgjB,EAAS7S,EAAW/+B,EANlBksB,EAAK3H,EAAK2H,GAEhB,IAAKrY,GAAWqY,EAAKrY,EAAQsrB,SAAWjT,EAAKrY,EAAQirB,MACnD,OAAO,EAaT,IATA8S,EAAU1lB,EAAKrY,EAAQsrB,SACvBJ,EAAYlrB,EAAQkrB,WAMV6S,GAAWrtB,EAEhBvkB,EAAI4xC,EAAS5xC,EAAI,EAAGA,IACvBkxC,GAAUnS,EAAW/+B,EAAGA,EAAI,GAI9B,IAAKA,EAAI4xC,EAAS5xC,EAAI++B,EAAUl3B,OAAS,EAAG7H,IAC1CkxC,GAAUnS,EAAW/+B,EAAGA,EAAI,GAI9B,OADA6T,EAAQg+B,UAAW,EACZF,EAGF,SAASG,GAAcC,EAAYC,GAEpCA,EAAW74B,aAAe44B,EAAW54B,cACvC64B,EAAW74B,YAAc44B,EAAW54B,aAKtC,IACI84B,EADAC,EAAW,EAgBf,GAdAC,GAAwBJ,EAAYC,GAAY,SAACI,EAASC,GACxDH,EAAWE,EAAQ3U,GAAK4U,EAAQ5U,GAC5B,YAAgB2U,EAAQxjB,YAC1ByjB,EAAQ1wB,MAAQ0wB,EAAQzjB,SAAWwjB,EAAQxjB,SAC3CyjB,EAAQ5iB,OAAS2iB,EAAQ3iB,OACzB4iB,EAAQh5B,SAAW+4B,EAAQ/4B,SAC3Bg5B,EAAQC,YAAcF,EAAQE,YAC9BD,EAAQpxB,QAAUmxB,EAAQnxB,QAC1BgxB,EAAUI,GAGZL,EAAWH,UAAW,KAGnBG,EAAWH,SAAhB,CAIA,GAAIK,EAAU,CACZzuC,IAAOrB,IAAI,gEAEX,IADA,IAAMmwC,EAAeP,EAAWjT,UACvB/+B,EAAI,EAAGA,EAAIuyC,EAAa1qC,OAAQ7H,IACvCuyC,EAAavyC,GAAGy9B,IAAMyU,EAKtBD,EACFR,GAAiBO,EAAYC,EAASA,EAAQrjB,SAAUqjB,EAAQxiB,OAAQwiB,EAAQjf,SAAUif,EAAQhf,QAmD/F,SAAwBuf,EAAaC,GAC1C,IAAM1jB,EAAQ0jB,EAAYtT,QAAUqT,EAAYrT,QAC1CuT,EAAeF,EAAYzT,UAC3BwT,EAAeE,EAAY1T,UAEjC,GAAIhQ,EAAQ,GAAKA,EAAQ2jB,EAAa7qC,OACpC,OAEF,IAAK,IAAI7H,EAAI,EAAGA,EAAIuyC,EAAa1qC,OAAQ7H,IACvCuyC,EAAavyC,GAAG2hB,OAAS+wB,EAAa3jB,GAAOpN,MAvD7CgxB,CAAcZ,EAAYC,GAI5BA,EAAWH,SAAWE,EAAWF,UAuB5B,SAASM,GAAyBK,EAAaC,EAAaG,GACjE,GAAKJ,GAAgBC,EAQrB,IAJA,IAAM9wB,EAAQjY,KAAK4lB,IAAIkjB,EAAYrT,QAASsT,EAAYtT,SAAWsT,EAAYtT,QACzEr2B,EAAMY,KAAKoS,IAAI02B,EAAY1T,MAAO2T,EAAY3T,OAAS2T,EAAYtT,QACnEpQ,EAAQ0jB,EAAYtT,QAAUqT,EAAYrT,QAEvCn/B,EAAI2hB,EAAO3hB,GAAK8I,EAAK9I,IAAK,CACjC,IAAMoyC,EAAUI,EAAYzT,UAAUhQ,EAAQ/uB,GACxCqyC,EAAUI,EAAY1T,UAAU/+B,GACtC,IAAKoyC,IAAYC,EACf,MAEFO,EAAeR,EAASC,EAASryC,IAiB9B,SAAS6yC,GAAuBC,EAAiBL,EAAaM,GACnE,IAAIC,EAAiB,KAAQP,EAAY1N,sBAAwB0N,EAAY1N,sBAAwB0N,EAAYpT,gBAC3G4T,EAAoBD,EAAiB,EAY3C,OAXIF,GAAmBL,EAAY3T,QAAUgU,EAAgBhU,QAI3DkU,EAAiBC,GAGfF,IACFC,EAAiBtpC,KAAK4lB,IAAI2jB,EAAmBD,GAAkB7nC,OAAOspB,YAAYrG,MAAQ2kB,KAGrFrpC,KAAKC,MAAMqpC,GCnOpB,IAYeE,GAZI,CACjB1sB,SAAU,SAAU1lB,GAGlB,IAFA,IAAIsB,EAAM,GACN2I,EAAMjK,EAAE+G,OACH7H,EAAI,EAAGA,EAAI+K,EAAK/K,IACvBoC,GAAO,IAAMtB,EAAE6gB,MAAM3hB,GAAGmzC,QAAQ,GAAK,IAAMryC,EAAEgI,IAAI9I,GAAGmzC,QAAQ,GAAK,IAGnE,OAAO/wC,IC+CJ,SAASgxC,GAAWC,EAASx/B,GAClCA,EAAQkrB,UAAUz7B,SAAQ,SAACihB,GACzB,GAAIA,EAAM,CACR,IAAI5C,EAAQ4C,EAAK5C,MAAQ0xB,EACzB9uB,EAAK5C,MAAQ4C,EAAKqK,SAAWjN,EAC7B4C,EAAKkL,OAAS9N,EAAQ4C,EAAKlL,aAG/BxF,EAAQg+B,UAAW,EAad,SAASyB,GAAa1C,EAAU2C,EAAW1/B,IAgB3C,SAA+B+8B,EAAU/8B,EAAS0/B,GACvD,GApEK,SAAuC3C,EAAU2C,EAAW1/B,GACjE,IAAI2/B,GAAc,EAMlB,OALID,GAAaA,EAAU1/B,SAAWA,IAChCA,EAAQgrB,MAAQhrB,EAAQqrB,SAAY0R,GAAYA,EAASnT,GAAK5pB,EAAQqrB,WACxEsU,GAAc,GAGXA,EA6DHC,CAA6B7C,EAAU2C,EAAW1/B,GAAU,CAC9D,IAAM6/B,EA1DH,SAAyCC,EAAaC,GAC3D,IAAMC,EAAYF,EAAY5U,UACxB+U,EAAWF,EAAW7U,UAE5B,GAAK+U,EAASjsC,QAAWgsC,EAAUhsC,OAAnC,CAKA,IAAMksC,EA9CD,SAA8BhV,EAAWtB,GAG9C,IAFA,IAAIuW,EAAY,KAEPh0C,EAAI,EAAGA,EAAI++B,EAAUl3B,OAAQ7H,GAAK,EAAG,CAC5C,IAAMi0C,EAAclV,EAAU/+B,GAC9B,GAAIi0C,GAAeA,EAAYxW,KAAOA,EAAI,CACxCuW,EAAYC,EACZ,OAIJ,OAAOD,EAmCeE,CAAoBL,EAAWC,EAAS,GAAGrW,IAEjE,GAAKsW,KAAkBA,GAAkBA,EAAcnlB,UAKvD,OAAOmlB,EAJLtwC,IAAOrB,IAAI,8CAPXqB,IAAOrB,IAAI,yBAqDW+xC,CAA+BZ,EAAU1/B,QAASA,GACpE6/B,IACFjwC,IAAOrB,IAAI,0EACXgxC,GAAUM,EAAc/xB,MAAO9N,KApBnCugC,CAAqBxD,EAAU/8B,EAAS0/B,IACnC1/B,EAAQg+B,UAAY0B,GA6BpB,SAAmB1/B,EAASwgC,GACjC,GAAIA,GAAeA,EAAYtV,UAAUl3B,OAAQ,CAC/C,IAAKgM,EAAQygC,qBAAuBD,EAAYC,mBAC9C,OAKF,IAAIC,EAAUF,EAAYtV,UAAU,GAAGzB,gBAGnC+V,GAFSx/B,EAAQkrB,UAAU,GAAGzB,gBAEViX,GAAW,IAAOF,EAAYtV,UAAU,GAAGpd,MAC/D,YAAgB0xB,KAClB5vC,IAAOrB,IAAP,sDAAiEixC,EAAQF,QAAQ,IACjFC,GAAUC,EAASx/B,KAvCrB2gC,CAAS3gC,EAAS0/B,EAAU1/B,SC5EzB,SAAS4gC,GAAmB1V,EAA4B2V,EAAyBC,GACtF,GAAiB,OAAbD,IAAsB/+B,MAAMi/B,QAAQ7V,KAAeA,EAAUl3B,SAAW,YAAgB6sC,GAC1F,OAAO,KAKT,GAAIA,GADa3V,EAAU,GAAGzB,iBACF,GAC1B,OAAO,KAIT,GAAIoX,IADW3V,EAAUA,EAAUl3B,OAAS,GAAGu9B,oBACpB,GACzB,OAAO,KAGTuP,EAAyBA,GAA0B,EACnD,IAAK,IAAIE,EAAM,EAAGA,EAAM9V,EAAUl3B,SAAUgtC,EAAK,CAC/C,IAAItwB,EAAOwa,EAAU8V,GACrB,GAAIC,GAAuBJ,EAAUC,EAAwBpwB,GAC3D,OAAOA,EAIX,OAAO,KAaF,SAASwwB,GAAmBC,EAAwBjW,EAA4B4Q,EAAuBgF,QAAqD,IAA5EhF,MAAoB,QAAwD,IAArDgF,MAAiC,GAC7I,IAAIM,EAA4B,KAOhC,GANID,EACFC,EAAWlW,EAAUiW,EAAa9oB,GAAgB6S,EAAU,GAAG7S,GAAgB,GACxD,IAAdyjB,GAA0C,IAAvB5Q,EAAU,GAAGpd,QACzCszB,EAAWlW,EAAU,IAGnBkW,GAAyF,IAA7EC,GAA4BvF,EAAWgF,EAAwBM,GAC7E,OAAOA,EAGT,IAAME,EAAgB/G,EAAaC,OAAOtP,EAAWmW,GAA4B1zC,KAAK,KAAMmuC,EAAWgF,IACvG,OAAIQ,GAIGF,EAUF,SAASC,GAA6BvF,EAAegF,EAA4BS,QAAqB,IAAhEzF,MAAY,QAAoD,IAAjDgF,MAAyB,GAenF,IAAIU,EAA2B3rC,KAAKoS,IAAI64B,EAAwBS,EAAU/7B,UAAY+7B,EAAUhY,SAAWgY,EAAUhY,SAAW,IAChI,OAAIgY,EAAUzzB,MAAQyzB,EAAU/7B,SAAWg8B,GAA4B1F,EAC9D,EACEyF,EAAUzzB,MAAQ0zB,EAA2B1F,GAAayF,EAAUzzB,OAErE,EAGH,EAWF,SAASmzB,GAAwBQ,EAAsBX,EAAgCS,GAC5F,IAAIC,EAAkI,IAAvG3rC,KAAKoS,IAAI64B,EAAwBS,EAAU/7B,UAAY+7B,EAAUhY,SAAWgY,EAAUhY,SAAW,IAIhI,OAD2BgY,EAAUhQ,oBAAsB,GAC/BiQ,EAA2BC,EC5GlD,IAKcC,G,WACnB,WAAa/iC,EAAQ0wB,EAAOsS,EAAiBha,GAC3C57B,KAAK4S,OAASA,EACd5S,KAAKsjC,MAAQA,EACbtjC,KAAK41C,gBAAkBA,EACvB51C,KAAK47B,IAAMA,EACX57B,KAAK61C,WAAa,EAClB71C,KAAK81C,eAAgB,EACrB91C,KAAK+1C,QAAU,KACf/1C,KAAKg2C,OAAQ,EACbh2C,KAAKi2C,SAAU,E,2BASjBC,KAAA,SAAMC,GAAiB,IACbvjC,EAA2B5S,KAA3B4S,OAAQ0wB,EAAmBtjC,KAAnBsjC,MAAOyS,EAAY/1C,KAAZ+1C,QACfK,EAAyB9S,EAAzB8S,YAAaH,EAAY3S,EAAZ2S,QACfI,EAASr2C,KAAKi2C,UAAYA,EAC1BK,GAAat2C,KAAKi2C,SAAWA,EAKnC,GAHAj2C,KAAKi2C,QAAUA,EAGXG,IAAgBD,GAqBpB,IALIG,GAAaD,KACfr2C,KAAK+1C,QAAU,OAIbzS,EAAMiT,SAAUjT,EAAMkT,OAAgC,IAAvBlT,EAAMmT,cAAuBnT,EAAMqJ,SAAS1kC,OAA/E,CAIA,IAAMknC,EAAaF,EAAaE,WAAW7L,EAAO8S,EAAa,GACzDlH,EAAaC,EAAWhkC,IAAM,EAC9BokC,EAAYJ,EAAWI,WAAa,EAG1C,GAAKL,GAAeK,EAApB,CAIA,GAAI0G,EAAS,CAEX,IAAMS,EAAkBvH,EAAWhkC,IApEP,EAsEtBwrC,GAAepH,GAClBA,EAAY6G,EAvEa,IAuEwBp2C,KAAK41C,gBAAgBhI,mBAAmBwI,GAC5F,GAAIM,GAAmBC,EACrB,OAGF32C,KAAKg2C,OAAQ,EAKf,IAAKh2C,KAAKg2C,OAASh2C,KAAK+1C,QAAS,CAE/B,IAAMa,EAAY9sC,KAAK4lB,IAAI6f,EAAWJ,EAAWptB,OAAS,GAAKq0B,EAC/D,GAAIQ,EAAY,GAAKA,GApFO,EAsF1B,YADA52C,KAAK62C,mBAAmB,MAM5B,IAAMC,EAAOtrC,KAAKqpB,YAAYrG,MAC9B,GAAgB,OAAZunB,EAAJ,CAKA,IAAMgB,EAAkBD,EAAOf,GAC1BE,GAAWc,GAnGqB,KAqGnC/2C,KAAKg3C,aAAa7H,EAAWhkC,KAG/B,IAAM8rC,EAAoBhI,EAAaE,WAAW7L,EAAO8S,EAAaxjC,EAAOkgB,eAC7E9yB,KAAKk3C,mBAAmBD,EAAmBF,QAXzC/2C,KAAK+1C,QAAUe,SA3Df,GADA92C,KAAKg2C,OAAQ,EACG,OAAZD,EAAkB,CAEpB,GAAI/1C,KAAK81C,cAAe,CACtB,IAAMiB,EAAkBvrC,KAAKqpB,YAAYrG,MAAQunB,EACjDlyC,IAAOpB,KAAP,+BAA2C2zC,EAA3C,WAAiEtsC,KAAKC,MAAMgtC,GAA5E,MACA/2C,KAAK81C,eAAgB,EAEvB91C,KAAK+1C,QAAU,KACf/1C,KAAK61C,WAAa,I,EAuExBqB,mBAAA,SAAoB/H,EAAYgI,GAAmB,IACzCvkC,EAAmC5S,KAAnC4S,OAAQgjC,EAA2B51C,KAA3B41C,gBACVQ,EADqCp2C,KAAVsjC,MACP8S,YAEpBzI,EAAUiI,EAAgBhI,mBAAmBwI,GACnD,GAAIzI,GAGiB3tC,KAAK62C,mBAAmBlJ,GAIzC,OAQAwB,EAAWhkC,IAAMyH,EAAOkgB,eAC1BqkB,EAAsD,IAAlCvkC,EAAOwkC,2BAC3BvzC,IAAOpB,KAAK,6CAIZzC,KAAK+1C,QAAU,KACf/1C,KAAKq3C,oB,EASTL,aAAA,SAAcnH,GAAW,IACfjU,EAA8B57B,KAA9B47B,IAAK0H,EAAyBtjC,KAAzBsjC,MAAyBtjC,KAAlB81C,gBAGlB91C,KAAK81C,eAAgB,EACrBjyC,IAAOpB,KAAP,yBAAqC6gC,EAAM8S,YAA3C,8BAAoFvG,EAApF,KACAjU,EAAI9nB,QAAQC,IAAM/M,MAAO,CACvBlE,KAAMwE,IAAW0M,YACjBC,QAAS1M,IAAa+vC,qBACtBnjC,OAAO,EACPhK,OAAQ0lC,M,EAUdgH,mBAAA,SAAoBlJ,GAKlB,IAL2B,IACnB/6B,EAAuB5S,KAAvB4S,OAAQgpB,EAAe57B,KAAf47B,IAAK0H,EAAUtjC,KAAVsjC,MACf8S,EAAc9S,EAAM8S,YACtBmB,EAAc,EAETn3C,EAAI,EAAGA,EAAIkjC,EAAMqJ,SAAS1kC,OAAQ7H,IAAK,CAC9C,IAAMg1B,EAAYkO,EAAMqJ,SAAS5qB,MAAM3hB,GACvC,GAAIg2C,EAAcxjC,EAAOkgB,eAAiBykB,GAAenB,EAAchhB,EAAW,CAChF,IAAMoiB,EAAa1tC,KAAK4lB,IAAI0F,EA/KG,IA+KkCkO,EAAM8S,YAhLlC,IA8LrC,OAbAvyC,IAAOpB,KAAP,6CAAyD2zC,EAAzD,OAA2EoB,GAC3Ex3C,KAAKg2C,OAAQ,EACbh2C,KAAK+1C,QAAU,KACfzS,EAAM8S,YAAcoB,EAChB7J,GACF/R,EAAI9nB,QAAQC,IAAM/M,MAAO,CACvBlE,KAAMwE,IAAW0M,YACjBC,QAAS1M,IAAakwC,sBACtBtjC,OAAO,EACPC,OAAQ,mDAAmDgiC,EAArD,OAAuEoB,EAC7E7yB,KAAMgpB,IAGH6J,EAETD,EAAcjU,EAAMqJ,SAASzjC,IAAI9I,GAEnC,OAAO,G,EAOTi3C,gBAAA,WAAmB,IACTzkC,EAAuB5S,KAAvB4S,OAAQgpB,EAAe57B,KAAf47B,IAAK0H,EAAUtjC,KAAVsjC,MACf8S,EAAc9S,EAAM8S,YACpBP,GAAc71C,KAAK61C,YAAc,GAAK,EAG5C,GAFA71C,KAAK61C,WAAaA,EAEdA,EAAajjC,EAAO8kC,cAAe,CACrC,IAAMF,EAAapB,EAAcP,EAAajjC,EAAO+kC,YAErD9zC,IAAOpB,KAAP,8BAA0C2zC,EAA1C,OAA4DoB,GAC5DlU,EAAM8S,YAAcoB,EAEpB5b,EAAI9nB,QAAQC,IAAM/M,MAAO,CACvBlE,KAAMwE,IAAW0M,YACjBC,QAAS1M,IAAaqwC,sBACtBzjC,OAAO,SAGTtQ,IAAOlB,MAAP,yDAAsEyzC,EAAtE,UAA2FxjC,EAAO8kC,cAAlG,WACA9b,EAAI9nB,QAAQC,IAAM/M,MAAO,CACvBlE,KAAMwE,IAAW0M,YACjBC,QAAS1M,IAAa+vC,qBACtBnjC,OAAO,K,qICtMM0jC,G,oBAMnB,WAAajc,GAA+B,6BAAlBpmB,EAAkB,iCAAlBA,EAAkB,yBAC1C,uBAAMomB,GAAN,OAAcpmB,KAAd,MANesiC,gBAK2B,IAJpCC,WAA4B,KAIQ,EAHpCC,cAA+B,KAGK,EAFpCC,eAAiB,EAIvB,EAAKH,WAAa,EAAKI,KAAKt2C,KAAV,OAFwB,E,kHAQlCq6B,oBAAV,WAEEj8B,KAAKm4C,gBACLn4C,KAAKo4C,iB,EAMAC,YAAP,WACE,QAASr4C,KAAKg4C,e,EAMTM,YAAP,WACE,QAASt4C,KAAK+3C,Y,EAOTQ,YAAP,SAAoBC,GAClB,OAAKx4C,KAAKg4C,gBACRh4C,KAAKg4C,cAAgBxsC,KAAK+sC,YAAYv4C,KAAK83C,WAAYU,IAChD,I,EAQJJ,cAAP,WACE,QAAIp4C,KAAKg4C,gBACPxsC,KAAK4sC,cAAcp4C,KAAKg4C,eACxBh4C,KAAKg4C,cAAgB,MACd,I,EAQJG,cAAP,WACE,QAAIn4C,KAAK+3C,aACPvsC,KAAKitC,aAAaz4C,KAAK+3C,YACvB/3C,KAAK+3C,WAAa,MACX,I,EAUJG,KAAP,WACEl4C,KAAKi4C,iBACuB,IAAxBj4C,KAAKi4C,iBACPj4C,KAAK04C,SAGD14C,KAAKi4C,eAAiB,IAExBj4C,KAAKm4C,gBACLn4C,KAAK+3C,WAAavsC,KAAKmtC,WAAW34C,KAAK83C,WAAY,IAErD93C,KAAKi4C,eAAiB,I,EAQhBS,OAAV,a,GA9FoC/c,GC3B/B,IAAMid,GACF,UADEA,GAED,WAFCA,GAGL,OAHKA,GAIH,SAJGA,GAKE,cALFA,GAMG,eANHA,GAOiB,6BAPjBA,GAQI,gBARJA,GASF,UATEA,GAUH,SAVGA,GAWM,kBAXNA,GAYJ,QAZIA,GAaJ,QAbIA,GAcO,mBAdPA,GAeI,gBAGIC,G,wLACnBH,OAAA,a,EAEAI,UAAA,a,EAEAC,SAAA,WACE,IAAIp0B,EAAO3kB,KAAKg5C,YACZr0B,IACEA,EAAKwZ,QACPxZ,EAAKwZ,OAAOqJ,QAEdxnC,KAAK41C,gBAAgBvI,eAAe1oB,IAElC3kB,KAAKg1B,UACPh1B,KAAKg1B,QAAQxiB,UACbxS,KAAKg1B,QAAU,MAEjBh1B,KAAKg5C,YAAc,KACnBh5C,KAAKo1C,aAAe,KACpBp1C,KAAKo4C,gBACLp4C,KAAKm4C,gBACLn4C,KAAK2nB,MAAQixB,I,EAGfK,aAAA,SAAc9J,EAAY1F,GAAc,IAC9BuP,EAAiCh5C,KAAjCg5C,YAAapD,EAAoB51C,KAApB41C,gBAKrB,IAAKnM,EAAarK,MAAQ4Z,IAAgBA,EAAYtG,aAAesG,EAAY1sB,KAAOmd,EAAavK,QAAUiQ,EAAWI,UAAW,CACnI,IAAM2J,EAAYtD,EAAgB3H,SAAS+K,GAC3C,OAAOE,IAAc/M,GAAyB+M,IAAc/M,EAE9D,OAAO,G,EAGTgN,eAAA,WAAkB,IACRvmC,EAAsC5S,KAAtC4S,OAAQ0wB,EAA8BtjC,KAA9BsjC,MAAO8V,EAAuBp5C,KAAvBo5C,YAAazxB,EAAU3nB,KAAV2nB,MAC9ByuB,EAAc9S,EAAQA,EAAM8S,YAAc,KAC1CjH,EAAaF,EAAaE,WAAWiK,GAAe9V,EAAO8S,EAAap2C,KAAK4S,OAAOkgB,eAI1F,GAFAjvB,IAAOrB,IAAP,qBAA+B,YAAgB4zC,GAAeA,EAAY7C,QAAQ,GAAK6C,IAEnFzuB,IAAUixB,GAAoB,CAChC,IAAII,EAAch5C,KAAKg5C,YAEvB,GAAuB,IAAnB7J,EAAWhkC,KAAa6tC,EAAa,CACvC,IAAMK,EAAYzmC,EAAOmiC,uBACnBuE,EAAkBN,EAAYj3B,MAAQs3B,EACtCE,EAAgBP,EAAYj3B,MAAQi3B,EAAYv/B,SAAW4/B,EAE7DjD,EAAckD,GAAmBlD,EAAcmD,GAC7CP,EAAY7a,SACdt6B,IAAOrB,IAAI,mFACXw2C,EAAY7a,OAAOqJ,SAErBxnC,KAAKg5C,YAAc,KACnBh5C,KAAKo1C,aAAe,KAEpBp1C,KAAK2nB,MAAQixB,IAEb/0C,IAAOrB,IAAI,8EAGNmlB,IAAUixB,KAEI,IAAnBzJ,EAAWhkC,MACbnL,KAAKo1C,aAAe,KACpBp1C,KAAKg5C,YAAc,MAIrBh5C,KAAK2nB,MAAQixB,IAEXtV,IACFtjC,KAAKm2C,gBAAkBC,GAIpBp2C,KAAKw5C,iBACRx5C,KAAKy5C,iBAAmBz5C,KAAK05C,cAAgBtD,GAI/Cp2C,KAAKk4C,Q,EAGPyB,aAAA,WAEE35C,KAAK05C,cAAgB15C,KAAKm2C,gBAAkB,G,EAG9Cla,oBAAA,WACEj8B,KAAK+4C,WACL,YAAM9c,oBAAN,Y,EAGFE,mBAAA,WACEn8B,KAAK2nB,MAAQixB,GACb54C,KAAK41C,gBAAkB,M,EAGzBgE,oBAAA,SAAqBnG,EAAShK,GAC5B,IAAIoQ,OAAiDpnC,IAAjCzS,KAAK4S,OAAOknC,iBAAiC95C,KAAK4S,OAAOknC,iBAAmB95C,KAAK4S,OAAOmnC,sBAAwBtQ,EAAahK,eACjJ,OAAOgU,EAAU3pC,KAAK4lB,IAAI,EAAG+Z,EAAa/J,cAAgBma,I,GAzGZhC,I,uKCHlD,ICTImC,GD22CWC,G,oBA/1Cb,WAAare,EAAKga,GAAiB,aACjC,cAAMha,EACJ7nB,IAAM/P,eACN+P,IAAM9P,gBACN8P,IAAMpP,iBACNoP,IAAMlP,gBACNkP,IAAM9O,aACN8O,IAAM3O,eACN2O,IAAM5M,WACN4M,IAAM1N,YACN0N,IAAM3N,4BACN2N,IAAMxN,0BACNwN,IAAMrN,kBACNqN,IAAMpN,YACNoN,IAAM/M,MACN+M,IAAMzO,sBACNyO,IAAMxO,qBACNwO,IAAM1P,eACN0P,IAAMxP,gBACNwP,IAAMrP,iBAlBR,MAoBKkxC,gBAAkBA,EACvB,EAAKhjC,OAASgpB,EAAIhpB,OAClB,EAAKsnC,gBAAiB,EACtB,EAAKC,OAASvB,GACd,EAAK9C,eAAgB,EACrB,EAAKsE,cAAgB,KACrB,EAAKC,UAAW,EAChB,EAAKC,WAAY,EACjB,EAAKnM,aAAc,EA7Bc,E,wHAgCnC2K,UAAA,SAAWY,GACT,GAAI15C,KAAKmiC,OAAQ,CACf,IAAIgU,EAAkBn2C,KAAKm2C,gBAAiBva,EAAM57B,KAAK47B,IAKvD,GAJA57B,KAAK+4C,WACL/4C,KAAKu4C,YAvCW,KAwChBv4C,KAAKi+B,OAAS,EACdj+B,KAAKu6C,cAAgB,GAChBv6C,KAAKw6C,mBAAoB,CAE5B,IAAIC,EAAa7e,EAAI6e,YACD,IAAhBA,IACE7e,EAAIhpB,OAAO8nC,eAEbD,EAAa,EACbz6C,KAAKmuC,aAAc,GAEnBsM,EAAa7e,EAAI+e,eAKrB36C,KAAKi+B,MAAQrC,EAAIgf,cAAgBH,EACjCz6C,KAAKw5C,gBAAiB,EAGpBrD,EAAkB,IAAwB,IAAnBuD,IACzB71C,IAAOrB,IAAP,gDAA2D2zC,EAAgB5C,QAAQ,IACnFmG,EAAgBvD,GAElBn2C,KAAK2nB,MAAQixB,GACb54C,KAAKy5C,iBAAmBz5C,KAAK05C,cAAgB15C,KAAKm2C,gBAAkBuD,EACpE15C,KAAKk4C,YAELl4C,KAAK66C,gBAAiB,EACtB76C,KAAK2nB,MAAQixB,I,EAIjBG,SAAA,WACE/4C,KAAK66C,gBAAiB,EACtB,YAAM9B,SAAN,Y,EAGFL,OAAA,WACE,OAAQ14C,KAAK2nB,OACb,KAAKixB,GAEH54C,KAAKu6C,cAAgB,EACrB,MACF,KAAK3B,GACH54C,KAAK86C,cACL,MACF,KAAKlC,GACH,IAAI3a,EAAQj+B,KAAKmiC,OAAOniC,KAAKi+B,OAEzBA,GAASA,EAAMhqB,UACjBjU,KAAK2nB,MAAQixB,IAGf,MACF,KAAKA,GACH,IAAIpqB,EAAMjjB,OAAOspB,YAAYrG,MACzBusB,EAAY/6C,KAAK+6C,YAEhBA,GAAcvsB,GAAOusB,GAAe/6C,KAAKsjC,OAAStjC,KAAKsjC,MAAM2S,WAChEpyC,IAAOrB,IAAI,iEACXxC,KAAK2nB,MAAQixB,IAcjB54C,KAAKg7C,eAELh7C,KAAKi7C,yB,EAMPH,YAAA,WACE,IAAMlf,EAAM57B,KAAK47B,IACfhpB,EAASgpB,EAAIhpB,OACb0wB,EAAQtjC,KAAKsjC,MAKf,QAA6B7wB,IAAzBzS,KAAKk7C,kBACN5X,IAAUtjC,KAAKw6C,oBAAuB5nC,EAAOuoC,mBAKhD,GAAIn7C,KAAKq6C,UAAYr6C,KAAKs6C,UAExBt6C,KAAKg1B,QAAQrQ,KAAO,SAFtB,CAOA,IAAI2C,EAEFA,EADEtnB,KAAKw5C,eACDlW,EAAM8S,YAENp2C,KAAKy5C,iBAIb,IAAIxb,EAAQrC,EAAIgf,cACdQ,EAAYp7C,KAAKmiC,OAAOlE,GAE1B,GAAKmd,EAAL,CAIA,IACEC,EADEC,EAAeF,EAAUtY,QAK3BuY,EADEC,EACUxxC,KAAK4lB,IAAI,EAAI9c,EAAO2oC,cAAgBD,EAAc1oC,EAAO4oC,iBAEzD5oC,EAAO4oC,gBAGrBH,EAAYvxC,KAAKoS,IAAIm/B,EAAWzoC,EAAO6oC,oBAKvC,IAAM3oB,EAAgBxL,EAAM1U,EAAOkgB,cAAgBhpB,KAAK4lB,IH5L1B,EG4LkD9c,EAAOkgB,eAAiBlgB,EAAOkgB,cACzGqc,EAAaF,EAAaE,WAAWnvC,KAAKo5C,YAAcp5C,KAAKo5C,YAAc9V,EAAOhc,EAAKwL,GACvF+c,EAAYV,EAAWhkC,IAE7B,KAAI0kC,GAAawL,GAAjB,CAKAx3C,IAAOvB,MAAP,oBAAiCutC,EAAU0D,QAAQ,GAAnD,oBAAyE8H,EAAU9H,QAAQ,GAA3F,mCAGAvzC,KAAKi+B,MAAQrC,EAAIgf,cAAgB3c,EAEjC,IAAMwL,EAAe2R,EAAUnnC,QAI/B,IAAKw1B,GAAiBA,EAAarK,MAAQp/B,KAAKk7C,kBAAoBjd,EAClEj+B,KAAK2nB,MAAQixB,OADf,CAKA,GAAI54C,KAAKi5C,aAAa9J,EAAY1F,GAAe,CAC/C,IAAM1hC,EAAO,GAOb,OANI/H,KAAKq6C,WACPtyC,EAAKjF,KAAO,SAGd9C,KAAK47B,IAAI9nB,QAAQC,IAAMvP,WAAYuD,QACnC/H,KAAK2nB,MAAQixB,IAIf54C,KAAK07C,mBAAmBp0B,EAAK6nB,EAAY1F,Q,EAG3CiS,mBAAA,SAAoBp0B,EAAK6nB,EAAY1F,GACnC,IAAM2L,EAAep1C,KAAKo1C,aAExBjW,GADQn/B,KAAKi+B,MACDwL,EAAatK,WACzBwc,EAAUxc,EAAUl3B,OAGtB,GAAgB,IAAZ0zC,EAAJ,CAKA,IAGEh3B,EAHE5C,EAAQod,EAAU,GAAGpd,MACvB7Y,EAAMi2B,EAAUwc,EAAU,GAAG55B,MAAQod,EAAUwc,EAAU,GAAGliC,SAC5Ds2B,EAAYZ,EAAWjmC,IAGzB,GAAIugC,EAAalwB,cAAgBkwB,EAAalwB,YAAYxR,KACxD4c,EAAO8kB,EAAalwB,iBAGpB,GAAIkwB,EAAarK,KAAM,CACrB,IAAIwc,EAA0B57C,KAAK4S,OAAOgpC,wBAC1C,GAAID,EAAUC,EAEZ,YADA/3C,IAAOpB,KAAP,mEAA+Ek5C,EAA/E,MAA4FC,GAM9F,GAAa,QAFbj3B,EAAO3kB,KAAK67C,2BAA2BpS,EAAcsG,EAAWhuB,EAAO7Y,EAAKksC,EAAcjW,IAGxF,YAIE4Q,EAAYhuB,IACd4C,EAAOwa,EAAU,IAIlBxa,IACHA,EAAO3kB,KAAK87C,cAAc/5B,EAAOqzB,EAAcuG,EAASxc,EAAW4Q,EAAW7mC,EAAKugC,IAGjF9kB,IACEA,EAAKo3B,UACP/7C,KAAKg8C,SAASr3B,EAAM8kB,GAEpBzpC,KAAKi8C,cAAct3B,EAAM8kB,EAAcniB,EAAKyoB,M,EAKlD8L,2BAAA,SAA4BpS,EAAcsG,EAAWhuB,EAAO7Y,EAAKksC,EAAcjW,GAC7E,IAEIxa,EAFE/R,EAAS5S,KAAK47B,IAAIhpB,OAAQ0wB,EAAQtjC,KAAKsjC,MAMzC4Y,EAAa3rB,IAQjB,QANsC9d,IAAlCG,EAAOupC,uBACTD,EAAatpC,EAAOupC,uBACX,YAAgBvpC,EAAOwpC,+BAChCF,EAAatpC,EAAOwpC,4BAA8B3S,EAAahK,gBAG7DsQ,EAAYjmC,KAAK4lB,IAAI3N,EAAQnP,EAAOmiC,uBAAwB7rC,EAAMgzC,GAAa,CACjF,IAAIG,EAAmBr8C,KAAKq8C,iBAAmBr8C,KAAK45C,oBAAoB73B,EAAO0nB,GAC/EsG,EAAYsM,EACR/Y,IAAUA,EAAMiT,QAAUjT,EAAMgZ,YAAchZ,EAAM7pB,SAAW4iC,GAAoBA,EAAmB/Y,EAAM8S,cAC9GvyC,IAAOrB,IAAP,eAA0ButC,EAAUwD,QAAQ,GAA5C,qFAAmI8I,EAAiB9I,QAAQ,IAC5JjQ,EAAM8S,YAAciG,GAGtBr8C,KAAKy5C,iBAAmB4C,EAa1B,GAAI5S,EAAawI,UAAYlC,EAAY7mC,GAAOo6B,GAASA,EAAMgZ,WAC7D,OAAO,KAGT,GAAIt8C,KAAKw6C,qBAAuB/Q,EAAawI,UAKvCmD,EACF,GAAI3L,EAAaiL,mBAEf7wC,IAAOrB,IAAP,+DAA0E4yC,EAAa1X,iBACvF/Y,EAAOkwB,GAAkB1V,EAAWiW,EAAa5P,mBAAoB5yB,EAAOmiC,4BACvE,CAEL,IAAMwH,EAAWnH,EAAa9oB,GAAK,EACnC,GAAIiwB,GAAY9S,EAAalK,SAAWgd,GAAY9S,EAAavK,MAAO,CACtE,IAAMmW,EAAWlW,EAAUod,EAAW9S,EAAalK,SAC/C6V,EAAavX,KAAOwX,EAASxX,KAC/BlZ,EAAO0wB,EACPxxC,IAAOrB,IAAP,8DAAyEmiB,EAAK2H,KAK7E3H,IACHA,EAAO6pB,EAAaC,OAAOtP,GAAW,SAAUxa,GAC9C,OAAOywB,EAAavX,GAAKlZ,EAAKkZ,QAG9Bh6B,IAAOrB,IAAP,8DAAyEmiB,EAAK2H,IAOxF,OAAO3H,G,EAGTm3B,cAAA,SAAe/5B,EAAOy6B,EAAkBC,EAAoBtd,EAAW4Q,EAAW7mC,EAAKugC,GACrF,IACIiT,EADE9pC,EAAS5S,KAAK47B,IAAIhpB,OAGpBm9B,EAAY7mC,EAIdwzC,EAAevH,GAAkBqH,EAAkBrd,EAAW4Q,EAHrCA,EAAY7mC,EAAM0J,EAAOmiC,uBAA0B,EAAIniC,EAAOmiC,wBAMvF2H,EAAevd,EAAUsd,EAAqB,GAGhD,GAAIC,EAAc,CAChB,IAAMC,EAAWD,EAAapwB,GAAKmd,EAAalK,QAC1Cqd,EAAYJ,GAAoBE,EAAaze,QAAUue,EAAiBve,MACxE4e,EAAa1d,EAAUwd,EAAW,GAClCG,EAAa3d,EAAUwd,EAAW,GAGxC,GAAIH,GAAoBE,EAAapwB,KAAOkwB,EAAiBlwB,GAC3D,GAAIswB,IAAcF,EAAahK,YAC7B,GAAIgK,EAAapwB,GAAKmd,EAAavK,MAAO,CACxC,IAAI1B,EAAWgf,EAAiBhf,SAK5BA,GAAYA,EAAW5qB,EAAOkgB,eAAiB0pB,EAAiBn7B,SAAWs7B,GAC7ED,EAAeG,EACfh5C,IAAOpB,KAAK,4KAEZi6C,EAAeI,EACX98C,KAAK41C,gBAAgB3H,SAASyO,KAAkBvQ,GAClDtoC,IAAOrB,IAAP,gCAA2Ck6C,EAAapwB,UAI5DowB,EAAe,UAERA,EAAahK,cAElBoK,GAAcA,EAAWpK,aAC3B7uC,IAAOpB,KAAP,qCAAiDq6C,EAAWxwB,GAA5D,oCAAkGowB,EAAapwB,GAA/G,sBAAuIwwB,EAAWxwB,IAClJowB,EAAeI,IAIfj5C,IAAOpB,KAAK,kFACZi6C,EAAar7B,QAAU,EACnBw7B,GACFH,EAAeG,GACFnK,aAAc,EAClBiK,IAETD,EAAe,QAOzB,OAAOA,G,EAGTV,SAAA,SAAUr3B,EAAM8kB,GACd5lC,IAAOrB,IAAP,mBAA8BmiB,EAAK2H,GAAnC,QAA6Cmd,EAAalK,QAA1D,IAAqEkK,EAAavK,MAAlF,YAAmGl/B,KAAKi+B,OACxGj+B,KAAK2nB,MAAQixB,GACb54C,KAAK47B,IAAI9nB,QAAQC,IAAM7M,YAAa,CAAEyd,U,EAGxCs3B,cAAA,SAAet3B,EAAM8kB,EAAcniB,EAAKyoB,GAEtC,IAAImJ,EAAYl5C,KAAK41C,gBAAgB3H,SAAStpB,GAE9C3kB,KAAKg5C,YAAcr0B,EACH,gBAAZA,EAAK2H,KACPtsB,KAAKw6C,oBAAqB,GAGxB,YAAgB71B,EAAK2H,MAAQ3H,EAAKwpB,cACpCnuC,KAAKy5C,iBAAmB90B,EAAK5C,MAAQ4C,EAAKlL,UAIxCkL,EAAK+tB,aAAewG,IAAc/M,GAA4B+M,IAAc/M,GAC9ExnB,EAAKo4B,UAAY/8C,KAAK47B,IAAIohB,iBAC1Br4B,EAAKwpB,YAAcnuC,KAAKmuC,YAExBtqC,IAAOrB,IAAP,WAAsBmiB,EAAK2H,GAA3B,QAAqCmd,EAAalK,QAAlD,IAA6DkK,EAAavK,MAA1E,YAA2Fl/B,KAAKi+B,MAAhG,MACEj+B,KAAKw5C,eAAiB,cAAgB,oBADxC,KAEKhZ,WAAWlZ,EAAIisB,QAAQ,IAF5B,gBAE+C/S,WAAWuP,EAAUwD,QAAQ,KAE5EvzC,KAAK47B,IAAI9nB,QAAQC,IAAM7N,aAAc,CAAEye,SAElC3kB,KAAKg1B,UACRh1B,KAAKg1B,QAAU,IAAImb,EAAQnwC,KAAK47B,IAAK,SAGvC57B,KAAK2nB,MAAQixB,IACJM,IAAc/M,GAEnBnsC,KAAKi9C,uBAAuBt4B,EAAKlL,WACnCzZ,KAAK41C,gBAAgBvI,eAAe1oB,I,EAkB1C4nB,gBAAA,SAAiBxwB,GACf,OAAO/b,KAAK41C,gBAAgBrJ,gBAAgBxwB,EAAU0f,EAAkBuK,O,EAwB1EkX,sBAAA,SAAuBv4B,GACrB,OAAIA,EAEK3kB,KAAKusC,gBAAgB5nB,EAAKkL,OAAS,IAErC,M,EAYTorB,sBAAA,WACE,IAAIkC,EAAoB/G,EAAa71B,EAAQvgB,KAAKsjC,MAClD,GAAI/iB,GAASA,EAAM+7B,aAAgC,IAAlB/7B,EAAM01B,WACrCG,EAAc71B,EAAM61B,aAOFp2C,KAAKm2C,kBACrBn2C,KAAKm2C,gBAAkBC,GAGrBnH,EAAaC,WAAW3uB,EAAO61B,GACjC+G,EAAqBn9C,KAAKusC,gBAAgB6J,GACjCnH,EAAaC,WAAW3uB,EAAO61B,EAAc,MAMtD+G,EAAqBn9C,KAAKusC,gBAAgB6J,EAAc,KAEtD+G,GAAoB,CACtB,IAAIC,EAAcD,EAClB,GAAIC,IAAgBp9C,KAAKo9C,YAAa,CACpCp9C,KAAK47B,IAAI9nB,QAAQC,IAAMlN,aAAc,CAAE8d,KAAMy4B,IAC7C,IAAMC,EAAmBD,EAAYnf,MAChCj+B,KAAKo9C,aAAep9C,KAAKo9C,YAAYnf,QAAUof,GAClDr9C,KAAK47B,IAAI9nB,QAAQC,IAAMhP,eAAgB,CAAEk5B,MAAOof,IAGlDr9C,KAAKo9C,YAAcA,K,EAY3BE,qBAAA,WAEE,GADAz5C,IAAOrB,IAAI,yBACNxC,KAAKu9C,gBAAiB,CACzBv9C,KAAKu9C,iBAAkB,EACvB,IAAwBC,EAApBla,EAAQtjC,KAAKsjC,MACbA,GACFka,EAAmBla,EAAMiT,SAEvBjT,EAAMma,QAIRD,GAAmB,EAErBx9C,KAAKw9C,iBAAmBA,EAE1B,IAAIxE,EAAch5C,KAAKg5C,YACnBA,GAAeA,EAAY7a,QAC7B6a,EAAY7a,OAAOqJ,QAGrBxnC,KAAKg5C,YAAc,KAEnBh5C,KAAK09C,gBAAgB,EAAGj2C,OAAOwpB,oB,EAQjC0sB,wBAAA,WACE,IAAMra,EAAQtjC,KAAKsjC,MACfA,GAASA,EAAMqJ,SAAS1kC,SAC1BjI,KAAKu9C,iBAAkB,EACnBja,EAAM8S,YAAc,GAAKnH,EAAaC,WAAW5L,EAAOA,EAAM8S,eAEhE9S,EAAM8S,aAAe,MAElBp2C,KAAKw9C,kBACRla,EAAMsa,S,EAWZC,gBAAA,WACE,IAAMva,EAAQtjC,KAAKsjC,MAEnB,GAAIA,GAASA,EAAMgZ,WAAY,CAC7B,IAAIwB,EACEX,EAAqBn9C,KAAKusC,gBAAgBjJ,EAAM8S,aAMtD,GALI+G,GAAsBA,EAAmBnuB,SAAW,GAGtDhvB,KAAK09C,gBAAgB,EAAGP,EAAmBnuB,SAAW,GAEnDsU,EAAMiT,OASTuH,EAAa,MATI,CAEjB,IAAIC,EAAc/9C,KAAK47B,IAAIgf,cAAeoD,EAAYh+C,KAAKmiC,OAAO4b,GAAcE,EAAej+C,KAAKi+C,aAElGH,EADEG,GAAgBj+C,KAAKg5C,YACVh5C,KAAKg5C,YAAYv/B,SAAWukC,EAAUlb,SAAW,IAAOmb,GAAgB,EAExE,EAOjB,IAAMC,EAAel+C,KAAKusC,gBAAgBjJ,EAAM8S,YAAc0H,GAC9D,GAAII,EAAc,CAEhB,IAAMC,EAAmBn+C,KAAKk9C,sBAAsBgB,GACpD,GAAIC,EAAkB,CAEpB,IAAInF,EAAch5C,KAAKg5C,YACnBA,GAAeA,EAAY7a,QAC7B6a,EAAY7a,OAAOqJ,QAGrBxnC,KAAKg5C,YAAc,KAInB,IAAMoF,EAAWt0C,KAAK4lB,IAAIwuB,EAAaruB,OAAQsuB,EAAiBrM,YAAchoC,KAAKoS,IAAIlc,KAAK4S,OAAOmiC,uBAAwBoJ,EAAiB1kC,WAC5IzZ,KAAK09C,gBAAgBU,EAAU32C,OAAOwpB,uB,EAM9CysB,gBAAA,SAAiBjtB,EAAa4tB,GAC5Br+C,KAAK2nB,MAAQixB,GACb,IAAI0F,EAAa,CAAE7tB,YAAaA,EAAa4tB,UAAWA,GAEpDr+C,KAAKq6C,WACPiE,EAAWx7C,KAAO,SAGpB9C,KAAK47B,IAAI9nB,QAAQC,IAAMtP,gBAAiB65C,I,EAG1CC,gBAAA,SAAiBx2C,GACf,IAAIu7B,EAAQtjC,KAAKsjC,MAAQtjC,KAAKo5C,YAAcrxC,EAAKu7B,MACjDtjC,KAAKw+C,WAAax+C,KAAKm5C,eAAev3C,KAAK5B,MAC3CA,KAAKy+C,UAAYz+C,KAAK0+C,cAAc98C,KAAK5B,MACzCA,KAAK2+C,SAAW3+C,KAAK25C,aAAa/3C,KAAK5B,MACvCsjC,EAAMlI,iBAAiB,UAAWp7B,KAAKw+C,YACvClb,EAAMlI,iBAAiB,SAAUp7B,KAAKy+C,WACtCnb,EAAMlI,iBAAiB,QAASp7B,KAAK2+C,UACrC,IAAI/rC,EAAS5S,KAAK4S,OACd5S,KAAKmiC,QAAUvvB,EAAOgsC,eACxB5+C,KAAK47B,IAAIkd,UAAUlmC,EAAO8mC,eAG5B15C,KAAKo6C,cAAgB,IAAIzE,GAAc/iC,EAAQ0wB,EAAOtjC,KAAK41C,gBAAiB51C,KAAK47B,M,EAGnFijB,iBAAA,WACE,IAAIvb,EAAQtjC,KAAKsjC,MACbA,GAASA,EAAMkT,QACjB3yC,IAAOrB,IAAI,sDACXxC,KAAK05C,cAAgB15C,KAAKm2C,gBAAkB,GAI9C,IAAIhU,EAASniC,KAAKmiC,OACdA,GACFA,EAAOz+B,SAAQ,SAAAu6B,GACTA,EAAMhqB,SACRgqB,EAAMhqB,QAAQkrB,UAAUz7B,SAAQ,SAAAyJ,GAC9BA,EAASulC,iBAAcjgC,QAO3B6wB,IACFA,EAAMwN,oBAAoB,UAAW9wC,KAAKw+C,YAC1Clb,EAAMwN,oBAAoB,SAAU9wC,KAAKy+C,WACzCnb,EAAMwN,oBAAoB,QAAS9wC,KAAK2+C,UACxC3+C,KAAKw+C,WAAax+C,KAAKy+C,UAAYz+C,KAAK2+C,SAAW,MAGrD3+C,KAAK41C,gBAAgBrH,qBACrBvuC,KAAKsjC,MAAQtjC,KAAKo5C,YAAc,KAChCp5C,KAAKw5C,gBAAiB,EACtBx5C,KAAK+4C,Y,EAGP2F,cAAA,WACE,IAAMpb,EAAQtjC,KAAKsjC,MACb8S,EAAc9S,EAAQA,EAAM8S,iBAAc3jC,EAC5C,YAAgB2jC,IAClBvyC,IAAOrB,IAAP,mBAA8B4zC,EAAY7C,QAAQ,IAIpDvzC,KAAKk4C,Q,EAGPvR,kBAAA,WAEE9iC,IAAOrB,IAAI,wBACXxC,KAAK47B,IAAI9nB,QAAQC,IAAM5P,cACvBnE,KAAK41C,gBAAgBrH,qBACrBvuC,KAAK+1C,SAAU,EACf/1C,KAAK05C,cAAgB15C,KAAKm2C,gBAAkB,G,EAG9C2I,iBAAA,SAAkB/2C,GAChB,IAAgCqQ,EAA5B2mC,GAAM,EAAOC,GAAQ,EACzBj3C,EAAKo6B,OAAOz+B,SAAQ,SAAAu6B,IAElB7lB,EAAQ6lB,EAAM1mB,eAEwB,IAAhCa,EAAMtN,QAAQ,eAChBi0C,GAAM,IAG4B,IAAhC3mC,EAAMtN,QAAQ,eAChBk0C,GAAQ,OAIdh/C,KAAKi/C,iBAAoBF,GAAOC,EAC5Bh/C,KAAKi/C,kBACPp7C,IAAOrB,IAAI,0EAGbxC,KAAKq6C,SAAWtyC,EAAKsyC,SACrBr6C,KAAKmiC,OAASp6B,EAAKo6B,OACnBniC,KAAKw6C,oBAAqB,EAC1B,IAAI5nC,EAAS5S,KAAK4S,QACdA,EAAOgsC,eAAiB5+C,KAAK66C,iBAC/B76C,KAAK47B,IAAIkd,UAAUlmC,EAAO8mC,gB,EAI9BwF,cAAA,SAAen3C,GACb,IAAMqqC,EAAarqC,EAAKkM,QAClBkrC,EAAap3C,EAAKk2B,MAClB0V,EAAY3zC,KAAKmiC,OAAOniC,KAAKk7C,iBAC7BkE,EAAWp/C,KAAKmiC,OAAOgd,GACvB1lC,EAAW24B,EAAW1S,cACxB+T,EAAU,EAId,GAFA5vC,IAAOrB,IAAP,SAAoB28C,EAApB,YAA0C/M,EAAW7S,QAArD,IAAgE6S,EAAWlT,MAA3E,cAA8FzlB,GAE1F24B,EAAWhT,MAASggB,EAASnrC,SAAWmrC,EAASnrC,QAAQmrB,KAAO,CAClE,IAAI4U,EAAaoL,EAASnrC,QACtB+/B,GAAc5B,EAAWjT,UAAUl3B,OAAS,GAE9Co3C,GAAyBrL,EAAY5B,GACrCqB,EAAUrB,EAAWjT,UAAU,GAAGpd,MAClC/hB,KAAKq8C,iBAAmBr8C,KAAK45C,oBAAoBnG,EAASO,GACtD5B,EAAWH,UAAY,YAAgBwB,GACzC5vC,IAAOrB,IAAP,yBAAoCixC,EAAQF,QAAQ,KAEpD1vC,IAAOrB,IAAI,iDACXkxC,GAAY1zC,KAAKo1C,aAAczB,EAAWvB,MAG5CvuC,IAAOrB,IAAI,+CACX4vC,EAAWH,UAAW,EACtByB,GAAY1zC,KAAKo1C,aAAczB,EAAWvB,SAG5CA,EAAWH,UAAW,EAOxB,GAJAmN,EAASnrC,QAAUm+B,EACnBpyC,KAAKk7C,gBAAkBiE,EACvBn/C,KAAK47B,IAAI9nB,QAAQC,IAAM7O,cAAe,CAAE+O,QAASm+B,EAAYnU,MAAOkhB,KAEpC,IAA5Bn/C,KAAKw6C,mBAA8B,CAErC,IAA4B,IAAxBx6C,KAAK05C,gBAAkD,IAA1B15C,KAAKm2C,gBAAwB,CAE5D,IAAI3W,EAAkB4S,EAAW5S,gBAC7B,YAAgBA,IACdA,EAAkB,IACpB37B,IAAOrB,IAAP,8BAAyCg9B,EAAzC,qCACAA,EAAkBiU,EAAUh6B,EAAW+lB,GAEzC37B,IAAOrB,IAAP,gEAA2Eg9B,GAC3Ex/B,KAAK05C,cAAgBla,GAGjB4S,EAAWhT,MACbp/B,KAAK05C,cAAgB15C,KAAK45C,oBAAoBnG,EAASrB,GACvDvuC,IAAOrB,IAAP,8BAAyCxC,KAAK05C,gBAE9C15C,KAAK05C,cAAgB,EAGzB15C,KAAKm2C,gBAAkBn2C,KAAK05C,cAE9B15C,KAAKy5C,iBAAmBz5C,KAAK05C,cAG3B15C,KAAK2nB,QAAUixB,KACjB54C,KAAK2nB,MAAQixB,IAIf54C,KAAKk4C,Q,EAGPoH,YAAA,WACMt/C,KAAK2nB,QAAUixB,KACjB54C,KAAK2nB,MAAQixB,GACb54C,KAAKk4C,S,EAIThK,aAAA,SAAcnmC,GAAM,IACVixC,EAAoCh5C,KAApCg5C,YAAapd,EAAuB57B,KAAvB47B,IAAKuG,EAAkBniC,KAAlBmiC,OAAQmB,EAAUtjC,KAAVsjC,MAC5Bic,EAAax3C,EAAK4c,KACxB,GAAI3kB,KAAK2nB,QAAUixB,IACfI,GACoB,SAApBuG,EAAWz8C,MACXy8C,EAAWthB,QAAU+a,EAAY/a,OACjCshB,EAAWjzB,KAAO0sB,EAAY1sB,GAAI,CACpC,IAAMgJ,EAAQvtB,EAAKutB,MACbkqB,EAAerd,EAAO6W,EAAY/a,OAClChqB,EAAUurC,EAAavrC,QAQ7B,GAJAjU,KAAKmuC,aAAc,EACnBnuC,KAAKs1B,MAAQA,EAEbzxB,IAAOrB,IAAP,UAAqBw2C,EAAY1sB,GAAjC,QAA2CrY,EAAQsrB,QAAnD,KAA+DtrB,EAAQirB,MAAvE,WAAuF8Z,EAAY/a,OAC/FshB,EAAWpR,aAAevS,EAAIgf,cAEhC56C,KAAK2nB,MAAQixB,GACb54C,KAAKw6C,oBAAqB,EAC1BllB,EAAMqU,QAAUrU,EAAMmqB,UAAYl0C,OAAOspB,YAAYrG,MACrDoN,EAAI9nB,QAAQC,IAAMnN,cAAe,CAAE0uB,MAAOA,EAAO3Q,KAAMq0B,EAAap/B,GAAI,SACxE5Z,KAAKk4C,YACA,GAAsB,gBAAlBqH,EAAWjzB,GACpBtsB,KAAK2nB,MAAQixB,GACbtjB,EAAMqU,QAAUrU,EAAMmqB,UAAYl0C,OAAOspB,YAAYrG,MACrDva,EAAQsF,YAAYxR,KAAOA,EAAKmkB,QAChC0P,EAAI9nB,QAAQC,IAAMnN,cAAe,CAAE0uB,MAAOA,EAAO3Q,KAAMq0B,EAAap/B,GAAI,SACxE5Z,KAAKk4C,WACA,CACLr0C,IAAOrB,IAAP,WAAsBw2C,EAAY1sB,GAAlC,QAA4CrY,EAAQsrB,QAApD,KAAgEtrB,EAAQirB,MAAxE,WAAwF8Z,EAAY/a,MAApG,QAAiH+a,EAAYnb,IAC7H79B,KAAK2nB,MAAQixB,GACb54C,KAAK0/C,kBAAmB,EACxB1/C,KAAK2/C,UAAW,EAIZJ,EAAWpR,cACboR,EAAWpR,aAAc,EACzBnuC,KAAK41C,gBAAgB1H,aAAa,CAChCvpB,KAAM46B,KAKV,IAAMllC,IAAuBipB,GAASA,EAAM2S,WAAahiC,EAAQg+B,WAAah+B,EAAQmrB,MAChFwgB,EAAkB3rC,EAAQsF,YAActF,EAAQsF,YAAYxR,KAAO,GACnEwP,EAAavX,KAAK6/C,eAAeL,IAGvBx/C,KAAKg1B,QAAUh1B,KAAKg1B,SAAW,IAAImb,EAAQnwC,KAAK47B,IAAK,SAC7DvyB,KACNtB,EAAKmkB,QACL0zB,EACAroC,EACAioC,EAAahmC,WACbw/B,EACA/kC,EAAQyrB,cACRrlB,IAINra,KAAKu6C,cAAgB,G,EAGvBuF,yBAAA,SAA0B/3C,GACxB,IAAMixC,EAAch5C,KAAKg5C,YACnB+G,EAAUh4C,EAAK4c,KAErB,GAAIq0B,GACY,SAAZjxC,EAAK6R,IACLmmC,EAAQzzB,KAAO0sB,EAAY1sB,IAC3ByzB,EAAQ9hB,QAAU+a,EAAY/a,OAC9Bj+B,KAAK2nB,QAAUixB,GAAe,CAChC,IAA0BoH,EAAW1oC,EAAjCkV,EAASzkB,EAAKykB,OAWlB,GATAxsB,KAAKs6C,UAAY9tB,EAAOhM,QAAUgM,EAAOjM,MAGrCvgB,KAAKq6C,WAAar6C,KAAKs6C,kBAClB9tB,EAAOhM,MAIhBlJ,EAAQkV,EAAOhM,MACJ,CACT,IAAIjJ,EAAavX,KAAKmiC,OAAOniC,KAAKi+B,OAAO1mB,WACvC0oC,EAAKnoC,UAAUD,UAAUE,cACvBR,GAAcvX,KAAKk6C,iBACrBr2C,IAAOrB,IAAI,iCAET+U,GADuC,IAArCA,EAAWzM,QAAQ,aACR,YAEA,aAOb9K,KAAKi/C,kBAE6B,IAAhC3nC,EAAMkZ,SAASrY,eAEU,IAA3B8nC,EAAGn1C,QAAQ,aACXyM,EAAa,cAIc,IAA3B0oC,EAAGn1C,QAAQ,YAAyC,eAApBwM,EAAMqC,YACxCpC,EAAa,YACb1T,IAAOrB,IAAP,iCAA4C+U,IAE9CD,EAAM4oC,WAAa3oC,EACnBD,EAAMsC,GAAK7R,EAAK6R,GASlB,IAAKomC,KAPL1oC,EAAQkV,EAAOjM,SAEbjJ,EAAM4oC,WAAalgD,KAAKmiC,OAAOniC,KAAKi+B,OAAOzkB,WAC3ClC,EAAMsC,GAAK7R,EAAK6R,IAElB5Z,KAAK47B,IAAI9nB,QAAQC,IAAM3P,cAAeooB,GAEpBA,EAAQ,CACxBlV,EAAQkV,EAAOwzB,GACfn8C,IAAOrB,IAAP,cAAyBw9C,EAAzB,cAAgD1oC,EAAMqC,UAAtD,0BAAyFrC,EAAM4oC,WAA/F,IAA6G5oC,EAAMc,MAAnH,KACA,IAAImB,EAAcjC,EAAMiC,YACpBA,IACFvZ,KAAK2/C,UAAW,EAEhB3/C,KAAK0/C,kBAAmB,EACxB1/C,KAAK47B,IAAI9nB,QAAQC,IAAMzP,iBAAkB,CAAExB,KAAMk9C,EAAWj4C,KAAMwR,EAAa4mC,OAAQ,OAAQC,QAAS,iBAI5GpgD,KAAKk4C,S,EAITmI,kBAAA,SAAmBt4C,GAAM,WACjBixC,EAAch5C,KAAKg5C,YACnB+G,EAAUh4C,EAAK4c,KACrB,GAAIq0B,GACY,SAAZjxC,EAAK6R,IACLmmC,EAAQzzB,KAAO0sB,EAAY1sB,IAC3ByzB,EAAQ9hB,QAAU+a,EAAY/a,QACd,UAAdl2B,EAAKjF,OAAoB9C,KAAKq6C,WAChCr6C,KAAK2nB,QAAUixB,GAAe,CAChC,IAAI3a,EAAQj+B,KAAKmiC,OAAOniC,KAAKi+B,OAC3BtZ,EAAOq0B,EAiBT,GAhBK,YAAgBjxC,EAAK8nB,UACxB9nB,EAAK8nB,OAAS9nB,EAAKinB,SAAWgqB,EAAYv/B,SAC1C1R,EAAKsrB,OAAStrB,EAAKqrB,SAAW4lB,EAAYv/B,WAGtB,IAAlB1R,EAAKurB,UACP3O,EAAK6Z,oBAAoB9B,EAAsBY,QAG3B,IAAlBv1B,EAAKwrB,UACP5O,EAAK6Z,oBAAoB9B,EAAsBa,OAGjD15B,IAAOrB,IAAP,UAAqBuF,EAAKjF,KAA1B,SAAuCiF,EAAKinB,SAASukB,QAAQ,GAA7D,IAAmExrC,EAAK8nB,OAAO0jB,QAAQ,GAAvF,UAAmGxrC,EAAKqrB,SAASmgB,QAAQ,GAAzH,IAA+HxrC,EAAKsrB,OAAOkgB,QAAQ,GAAnJ,QAA6JxrC,EAAKyrB,GAAlK,aAAgLzrB,EAAKsZ,SAAW,IAG9K,UAAdtZ,EAAKjF,KAEP,GADA6hB,EAAKtD,QAAUtZ,EAAKsZ,QAChBsD,EAAKtD,QACP,GAAKsD,EAAK+tB,YAsBR7uC,IAAOpB,KAAK,+DAAgEkiB,EAAK2H,QAtB5D,CACrB,IAAMmd,EAAexL,EAAMhqB,QAC3B,IAAIw1B,GAAgB9kB,EAAK2H,KAAOmd,EAAalK,QAiB3C,OAdA17B,IAAOpB,KAAK,gDAAiDkiB,EAAK2H,IAIlEtsB,KAAK41C,gBAAgBvI,eAAe1oB,GACpCA,EAAK+tB,aAAc,EACnB1yC,KAAKy5C,iBAAmB1xC,EAAKinB,SAC7BhvB,KAAK2nB,MAAQixB,GACb54C,KAAKo1C,aAAezwB,EAChB3kB,KAAKg1B,UACPh1B,KAAKg1B,QAAQxiB,UACbxS,KAAKg1B,QAAU,WAEjBh1B,KAAKk4C,OAfLr0C,IAAOpB,KAAK,2DAA4DkiB,EAAK2H,SAuBjF3H,EAAK+tB,aAAc,EAIvB,IAAIX,EAAQsN,GAA6BphB,EAAMhqB,QAAS0Q,EAAM5c,EAAKinB,SAAUjnB,EAAK8nB,OAAQ9nB,EAAKqrB,SAAUrrB,EAAKsrB,QAC5GuI,EAAM57B,KAAK47B,IACbA,EAAI9nB,QAAQC,IAAM5O,kBAAmB,CAAE8O,QAASgqB,EAAMhqB,QAASgqB,MAAOj+B,KAAKi+B,MAAO8T,MAAOA,EAAOjvC,KAAMiF,EAAKjF,KAAMif,MAAOha,EAAKinB,SAAU9lB,IAAKnB,EAAK8nB,SAEjJ,CAAC9nB,EAAKmrB,MAAOnrB,EAAKorB,OAAOzvB,SAAQ,SAAAyG,GAG3BA,GAAUA,EAAOlC,QAAU,EAAK0f,QAAUixB,KAC5C,EAAK+G,UAAW,EAEhB,EAAKD,kBAAmB,EACxB9jB,EAAI9nB,QAAQC,IAAMzP,iBAAkB,CAAExB,KAAMiF,EAAKjF,KAAMiF,KAAMoC,EAAQg2C,OAAQ,OAAQC,QAAS,aAIlGpgD,KAAKk4C,S,EAIToI,aAAA,SAAcv4C,GACZ,IAAMixC,EAAch5C,KAAKg5C,YACnB+G,EAAUh4C,EAAK4c,KACjBq0B,GACY,SAAZjxC,EAAK6R,IACLmmC,EAAQzzB,KAAO0sB,EAAY1sB,IAC3ByzB,EAAQ9hB,QAAU+a,EAAY/a,OAC9Bj+B,KAAK2nB,QAAUixB,KACjB54C,KAAKs1B,MAAMqU,QAAUp+B,OAAOspB,YAAYrG,MACxCxuB,KAAK2nB,MAAQixB,GACb54C,KAAKugD,yB,EAITC,sBAAA,SAAuBz4C,GAErB,IAAM04C,EAAezgD,KAAKq6C,SACpBA,IAAatyC,EAAKwC,IAClB+sB,EAAUvvB,EAAK6R,GAIrB,IAAKygC,EAAU,CACb,GAAIr6C,KAAKo5C,cAAgBp5C,KAAKsjC,MAAO,CACnCz/B,IAAOrB,IAAI,iFACXxC,KAAKo5C,YAAcp5C,KAAKsjC,MACxB,IAAI0V,EAAch5C,KAAKg5C,YAEnBA,EAAY7a,SACdt6B,IAAOrB,IAAI,4DACXw2C,EAAY7a,OAAOqJ,SAErBxnC,KAAKg5C,YAAc,KACnBh5C,KAAKo1C,aAAe,KAEhBp1C,KAAKg1B,UACPh1B,KAAKg1B,QAAQxiB,UACbxS,KAAKg1B,QAAU,MAGjBh1B,KAAK2nB,MAAQixB,GAEf,IAAIhd,EAAM57B,KAAK47B,IAEX6kB,GACF7kB,EAAI9nB,QAAQC,IAAMtP,gBAAiB,CACjCgsB,YAAa,EACb4tB,UAAW52C,OAAOwpB,kBAClBnuB,KAAM,UAGV84B,EAAI9nB,QAAQC,IAAMxO,qBAAsB,CACtCqU,GAAI0d,M,EAKVopB,qBAAA,SAAsB34C,GACpB,IAAIuvB,EAAUvvB,EAAK6R,GACjBygC,IAAar6C,KAAK47B,IAAIsN,YAAY5R,GAAS/sB,IAC7C,GAAI8vC,EAAU,CACZ,IAAIsG,EAAc3gD,KAAK2gD,YAEnBA,GAAe3gD,KAAKo5C,cAAgBuH,IACtC98C,IAAOrB,IAAI,sFACXxC,KAAKo5C,YAAcuH,GAGvB3gD,KAAKq6C,SAAWA,EAChBr6C,KAAKk4C,Q,EAGP0I,gBAAA,SAAiB74C,GACf,IAA0B84C,EAAYlgD,EAAlC6rB,EAASzkB,EAAKykB,OAA0Bs0B,GAAY,EACxD,IAAK,IAAIh+C,KAAQ0pB,EAAQ,CACvB,IAAIlV,EAAQkV,EAAO1pB,GACF,SAAbwU,EAAMsC,IACRjZ,EAAOmC,EACP+9C,EAAavpC,EAEA,UAATxU,IACF9C,KAAK2gD,YAAcn0B,EAAO1pB,GAAMqH,SAGlC22C,GAAY,EAGZA,GAAaD,GACfh9C,IAAOrB,IAAP,8BAAyC7B,EAAzC,+CACAX,KAAKo5C,YAAcyH,EAAW12C,QAE9BnK,KAAKo5C,YAAcp5C,KAAKsjC,O,EAI5B8K,iBAAA,SAAkBrmC,GAChB,GAAoB,SAAhBA,EAAKo4C,OAAmB,CAC1B,IAAMx4B,EAAQ3nB,KAAK2nB,MACfA,IAAUixB,IAAiBjxB,IAAUixB,KAEvC54C,KAAK0/C,iBAAoB33C,EAAKg5C,QAAU,EACxC/gD,KAAKugD,0B,EAKXA,qBAAA,WAEE,KAAIvgD,KAAK2nB,QAAUixB,IAAkB54C,KAAK2/C,UAAa3/C,KAAK0/C,kBAAmB,CAC7E,IAAM/6B,EAAO3kB,KAAKg5C,YAClB,GAAIr0B,EAAM,CACR,IAAM2e,EAAQtjC,KAAKo5C,YAAcp5C,KAAKo5C,YAAcp5C,KAAKsjC,MACzDz/B,IAAOrB,IAAP,mBAA8B8wC,GAAW1sB,SAAS0c,EAAMqJ,WACxD3sC,KAAKo1C,aAAezwB,EACpB,IAAM2Q,EAAQt1B,KAAKs1B,MACnBA,EAAMmqB,UAAYl0C,OAAOspB,YAAYrG,MAErCxuB,KAAKi+C,aAAen0C,KAAKC,MAAM,EAAIurB,EAAM0rB,OAAS1rB,EAAMmqB,UAAYnqB,EAAM2rB,SAC1EjhD,KAAK47B,IAAI9nB,QAAQC,IAAMnN,cAAe,CAAE0uB,MAAOA,EAAO3Q,KAAMA,EAAM/K,GAAI,SACtE5Z,KAAK2nB,MAAQixB,IAGX54C,KAAKw5C,gBAAkBx5C,KAAK05C,eAAiB,IAC/C15C,KAAKk4C,S,EAKX7P,QAAA,SAAStgC,GACP,IAAI4c,EAAO5c,EAAK4c,MAAQ3kB,KAAKg5C,YAE7B,IAAIr0B,GAAsB,SAAdA,EAAK7hB,KAAjB,CAKA,IAAIo+C,IAAkBlhD,KAAKsjC,OAAS2L,EAAaC,WAAWlvC,KAAKsjC,MAAOtjC,KAAKsjC,MAAM8S,cAAgBnH,EAAaC,WAAWlvC,KAAKsjC,MAAOtjC,KAAKsjC,MAAM8S,YAAc,IAEhK,OAAQruC,EAAKkM,SACb,KAAK1M,IAAamkC,gBAClB,KAAKnkC,IAAaokC,kBAClB,KAAKpkC,IAAa0kC,eAClB,KAAK1kC,IAAa2kC,iBAChB,IAAKnkC,EAAKoM,MAER,GAAKnU,KAAKu6C,cAAgB,GAAMv6C,KAAK4S,OAAOuuC,oBAAqB,CAE/D,IAAIC,EAAQt3C,KAAKoS,IAAIpS,KAAK4e,IAAI,EAAG1oB,KAAKu6C,eAAiBv6C,KAAK4S,OAAOo5B,sBAAuBhsC,KAAK4S,OAAO24B,4BACtG1nC,IAAOpB,KAAP,kDAA8D2+C,EAA9D,OACAphD,KAAK+6C,UAAYxvC,OAAOspB,YAAYrG,MAAQ4yB,EAIvCphD,KAAKw5C,iBACRx5C,KAAKw6C,oBAAqB,EAC1Bx6C,KAAKy5C,iBAAmBz5C,KAAK05C,eAE/B15C,KAAKu6C,gBACLv6C,KAAK2nB,MAAQixB,QAEb/0C,IAAOlB,MAAP,oBAAiCoF,EAAKkM,QAAtC,+CAEAlM,EAAKoM,OAAQ,EACbnU,KAAK2nB,MAAQixB,GAGjB,MACF,KAAKrxC,IAAakjC,iBAClB,KAAKljC,IAAaijC,mBACZxqC,KAAK2nB,QAAUixB,KACb7wC,EAAKoM,OAEPnU,KAAK2nB,MAAQixB,GACb/0C,IAAOpB,KAAP,qBAAiCsF,EAAKkM,QAAtC,cAA2DjU,KAAK2nB,MAAhE,eAGK5f,EAAKs5C,YAAcrhD,KAAK2nB,QAAUixB,KACrC54C,KAAK2nB,MAAQixB,KAInB,MACF,KAAKrxC,IAAa+5C,kBAEI,SAAhBv5C,EAAKo4C,QAAsBngD,KAAK2nB,QAAUixB,IAAiB54C,KAAK2nB,QAAUixB,KAExEsI,GACFlhD,KAAKi9C,uBAAuBj9C,KAAK4S,OAAO4oC,iBACxCx7C,KAAK2nB,MAAQixB,KAKb/0C,IAAOpB,KAAK,8EACZzC,KAAKg5C,YAAc,KAEnBh5C,KAAK09C,gBAAgB,EAAGj2C,OAAOwpB,wB,EASvCgsB,uBAAA,SAAwBsE,GACtB,IAAI3uC,EAAS5S,KAAK4S,OAClB,OAAIA,EAAO6oC,oBAAsB8F,IAE/B3uC,EAAO6oC,oBAAsB,EAC7B53C,IAAOpB,KAAP,oCAAgDmQ,EAAO6oC,mBAAvD,MACO,I,EASXT,aAAA,WAAgB,IACN1X,EAAUtjC,KAAVsjC,MACR,GAAKA,GAA8B,IAArBA,EAAMgZ,WAApB,CAKA,IACM3P,GADc3sC,KAAKo5C,YAAcp5C,KAAKo5C,YAAc9V,GAC7BqJ,UAExB3sC,KAAKw5C,gBAAkB7M,EAAS1kC,QACnCjI,KAAKw5C,gBAAiB,EACtBx5C,KAAKwhD,mBACIxhD,KAAKu9C,gBACdv9C,KAAK29C,0BAEL39C,KAAKo6C,cAAclE,KAAKl2C,KAAKm2C,gBAAiBxJ,K,EAIlD8U,2BAAA,WACEzhD,KAAK2nB,MAAQixB,GAGR54C,KAAKw5C,iBACRx5C,KAAKw6C,oBAAqB,EAC1Bx6C,KAAKy5C,iBAAmBz5C,KAAK05C,eAE/B15C,KAAKk4C,Q,EAGPwJ,gBAAA,WAIE,IAAMpe,EAAQtjC,KAAKo5C,YAAcp5C,KAAKo5C,YAAcp5C,KAAKsjC,MACzD,GAAIA,EAAO,CAET,IAAMqe,EAAuB3hD,KAAKs6C,UAAY5d,EAAsBY,MAAQZ,EAAsBa,MAClGv9B,KAAK41C,gBAAgB/I,uBAAuB8U,EAAsBre,EAAMqJ,UAG1E3sC,KAAK2nB,MAAQixB,GAEb54C,KAAKo1C,aAAe,M,EAGtBwM,gBAAA,SAAiB75C,GACf/H,KAAKmiC,OAASp6B,EAAKo6B,Q,EAGrB0f,eAAA,WACE7hD,KAAKk6C,gBAAkBl6C,KAAKk6C,gB,EAM9BsH,gBAAA,WAAmB,IACTle,EAAUtjC,KAAVsjC,MACF8S,EAAc9S,EAAM8S,YACtBsD,EAAgB15C,KAAK05C,cAGzB,GAAItD,IAAgBsD,GAAiBA,GAAiB,EAAG,CACvD,GAAIpW,EAAM2S,QAER,YADApyC,IAAOrB,IAAP,qBAAgCk3C,EAAhC,wBAAqEtD,GAGvE,IACMjnB,GADcmU,EAAMqJ,SAAS1kC,OAASq7B,EAAMqJ,SAAS5qB,MAAM,GAAK,GAC1C23B,EACxBvqB,EAAQ,GAAKA,EAAQnvB,KAAK4S,OAAOkgB,gBACnCjvB,IAAOrB,IAAP,+BAA0C2sB,EAA1C,0BACAuqB,GAAiBvqB,EACjBnvB,KAAK05C,cAAgBA,GAEvB71C,IAAOrB,IAAP,iCAA4Ck3C,EAA5C,sBAA+EtD,EAA/E,iBAA2G9S,EAAMgZ,YACjHhZ,EAAM8S,YAAcsD,I,EAIxBmG,eAAA,SAAgBL,GACd,IAAIjoC,EAAavX,KAAK4S,OAAOkvC,mBAAqBtC,EAAajoC,WAY/D,OAXIvX,KAAKk6C,iBACPr2C,IAAOrB,IAAI,iCACP+U,IAEAA,GADuC,IAArCA,EAAWzM,QAAQ,aACR,YAEA,cAKZyM,G,kCAr5BEwqC,GACT,GAAI/hD,KAAK2nB,QAAUo6B,EAAW,CAC5B,IAAMC,EAAgBhiD,KAAK2nB,MAC3B3nB,KAAKm6C,OAAS4H,EACdl+C,IAAOrB,IAAP,2BAAsCw/C,EAAtC,KAAwDD,GACxD/hD,KAAK47B,IAAI9nB,QAAQC,IAAM3M,wBAAyB,CAAE46C,gBAAeD,gB,eAKnE,OAAO/hD,KAAKm6C,S,mCAQZ,IAAI7W,EAAQtjC,KAAKsjC,MACjB,GAAIA,EAAO,CACT,IAAM3e,EAAO3kB,KAAKusC,gBAAgBjJ,EAAM8S,aACxC,GAAIzxB,EACF,OAAOA,EAAKsZ,MAGhB,OAAQ,I,uCAIR,IAAIqF,EAAQtjC,KAAKsjC,MACjB,OAAIA,EAEKtjC,KAAKk9C,sBAAsBl9C,KAAKusC,gBAAgBjJ,EAAM8S,cAEtD,O,gCAaT,IAAMzxB,EAAO3kB,KAAKm+C,iBAClB,OAAIx5B,EACKA,EAAKsZ,OAEJ,I,uCAs2BV,OAAOj+B,KAAKiiD,mB,aAGQ5gD,GACpBrB,KAAKiiD,kBAAoB5gD,O,gCA71CEw3C,I,2KCTVqJ,G,oBACnB,WAAatmB,GAAK,aAChB,cAAMA,EACJ7nB,IAAMnP,gBACNmP,IAAM9O,aACN8O,IAAMxO,qBACNwO,IAAM1N,YACN0N,IAAM/M,QALR,MAOKm7C,SAAU,EACf,EAAKC,kBAAoB,KACzB,EAAKC,kBAAoB,EACzB,EAAKC,MAAQ,KAEbtI,GAAkB,iBAAiB9hC,KAAKJ,UAAUD,UAAUE,eAb5C,E,wHAgBlBkkB,oBAAA,WACEj8B,KAAKuiD,aACLviD,KAAKqiD,kBAAoB,G,EAG3BE,WAAA,WACqB,OAAfviD,KAAKsiD,QACP7J,aAAaz4C,KAAKsiD,OAClBtiD,KAAKsiD,MAAQ,O,EAIjBxJ,UAAA,WACE,IAAI3W,EAASniC,KAAKwiD,QAElBxiD,KAAKmiD,SAAU,EACfniD,KAAKyiD,gBAAkB,EAGnBtgB,GACFA,EAAOz+B,SAAQ,SAAAu6B,GACbA,EAAMykB,UAAY,EAClB,IAAMjZ,EAAexL,EAAMhqB,QACvBw1B,GAAgBA,EAAarK,OAC/BnB,EAAMhqB,aAAUxB,MAKH,OAAfzS,KAAKsiD,OACPtiD,KAAK2iD,a,EAIT5J,SAAA,WACE/4C,KAAKmiD,SAAU,G,EAGjBS,iBAAA,SAAkB76C,GAChB,IAEI86C,EAFA1gB,EAAS,GACT+G,EAAc,GAEd4Z,EAAW,GACXC,EAAe,KACfC,GAAkB,EAClBC,GAAkB,EAwDtB,GArDAl7C,EAAKo6B,OAAOz+B,SAAQ,SAAAu6B,GAClB,IAAMilB,EAAajlB,EAAM6B,MACzB7B,EAAMykB,UAAY,EAClBzkB,EAAMklB,eAAgB,EAEtBH,EAAkBA,KAAqB/kB,EAAMzkB,WAC7CypC,EAAkBA,KAAqBhlB,EAAM1mB,WAIzCyiC,IAAmB/b,EAAM1mB,aAA0D,IAA5C0mB,EAAM1mB,WAAWzM,QAAQ,gBAClEmzB,EAAM1mB,gBAAa9E,IAGrBswC,EAAeD,EAAS7kB,EAAM6E,UAQ5BigB,EAAax4C,IAAIlB,KAAK40B,EAAM1zB,MAL5B0zB,EAAM1zB,IAAM,CAAC0zB,EAAM1zB,KACnB0zB,EAAMD,MAAQ,EACd8kB,EAAS7kB,EAAM6E,SAAW7E,EAC1BkE,EAAO94B,KAAK40B,IAKVilB,IACEA,EAAW5lB,OACb6T,EAAW4R,GAAgB9kB,EAAO,QAASilB,EAAW5lB,OAEpD4lB,EAAWE,WACbjS,EAAW4R,GAAgB9kB,EAAO,OAAQilB,EAAWE,eAMvDJ,GAAmBC,IACrB9gB,EAASA,EAAOnO,QAAO,sBAAGxa,eAI5B2oB,EAASA,EAAOnO,QAAO,YAAgC,IAA7Bzc,EAA6B,EAA7BA,WAAYiC,EAAiB,EAAjBA,WACpC,QAASjC,GAAcwpB,EAAsBxpB,EAAY,aAAeiC,GAAcunB,EAAsBvnB,EAAY,aAGtHzR,EAAKmhC,cACPA,EAAcnhC,EAAKmhC,YAAYlV,QAAO,SAAA1c,GAAK,OAAKA,EAAMC,YAAcwpB,EAAsBzpB,EAAMC,WAAY,aAEhG7T,SAAQ,SAAC4T,EAAOlN,GAC1BkN,EAAMsC,GAAKxP,KAIX+3B,EAAOl6B,OAAS,EAAG,CAErB46C,EAAe1gB,EAAO,GAAGW,QAEzBX,EAAO5Q,MAAK,SAACC,EAAGnL,GAAJ,OAAUmL,EAAEsR,QAAUzc,EAAEyc,WACpC9iC,KAAKwiD,QAAUrgB,EAEf,IAAK,IAAI/hC,EAAI,EAAGA,EAAI+hC,EAAOl6B,OAAQ7H,IACjC,GAAI+hC,EAAO/hC,GAAG0iC,UAAY+f,EAAc,CACtC7iD,KAAKqjD,YAAcjjD,EACnByD,IAAOrB,IAAP,mBAA8B2/B,EAAOl6B,OAArC,kCAA6E46C,GAC7E,MAMJ,IAAMvI,EAAY2I,IAAoBD,EACtChjD,KAAK47B,IAAI9nB,QAAQC,IAAMlP,gBAAiB,CACtCs9B,SACA+G,cACAoa,WAAYtjD,KAAKqjD,YACjB/tB,MAAOvtB,EAAKutB,MACZ9U,MAAOyiC,EACP1iC,MAAOyiC,EACP3I,UAAWC,GAAapR,EAAYqa,MAAK,SAAAjiD,GAAC,QAAMA,EAAEiJ,cAGpDvK,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAW0M,YACjBC,QAAS1M,IAAai8C,mCACtBrvC,OAAO,EACP5J,IAAKvK,KAAK47B,IAAIrxB,IACd6J,OAAQ,uD,EAuBdqvC,iBAAA,SAAkBC,GAChB,IAAMvhB,EAASniC,KAAKwiD,QACd5mB,EAAM57B,KAAK47B,IAEjB,GAAI8nB,GAAY,GAAKA,EAAWvhB,EAAOl6B,OAAQ,CAG7C,GADAjI,KAAKuiD,aACDviD,KAAKoiD,oBAAsBsB,EAAU,CACvC7/C,IAAOrB,IAAP,sBAAiCkhD,GACjC1jD,KAAKoiD,kBAAoBsB,EACzB,IAAMC,EAAkBxhB,EAAOuhB,GAC/BC,EAAgB1lB,MAAQylB,EACxB9nB,EAAI9nB,QAAQC,IAAMjP,gBAAiB6+C,GAErC,IAAM1lB,EAAQkE,EAAOuhB,GACfja,EAAexL,EAAMhqB,QAG3B,IAAKw1B,GAAgBA,EAAarK,KAAM,CAEtC,IAAIpB,EAAQC,EAAMD,MAClBpC,EAAI9nB,QAAQC,IAAM/O,cAAe,CAAEuF,IAAK0zB,EAAM1zB,IAAIyzB,GAAQC,MAAOylB,EAAU9pC,GAAIokB,UAIjFpC,EAAI9nB,QAAQC,IAAM/M,MAAO,CACvBlE,KAAMwE,IAAWk1B,YACjBvoB,QAAS1M,IAAaq8C,mBACtB3lB,MAAOylB,EACPvvC,OAAO,EACPC,OAAQ,uB,EA+Cdi0B,QAAA,SAAStgC,GACP,GAAIA,EAAKoM,MACHpM,EAAKjF,OAASwE,IAAWyiC,eAC3B/pC,KAAKuiD,iBAFT,CAQA,IACIsB,EADAC,GAAa,EAAOX,GAAgB,EAIxC,OAAQp7C,EAAKkM,SACb,KAAK1M,IAAamkC,gBAClB,KAAKnkC,IAAaokC,kBAClB,KAAKpkC,IAAa0kC,eAClB,KAAK1kC,IAAa2kC,iBAChB2X,EAAa97C,EAAK4c,KAAKsZ,MACvBklB,GAAgB,EAChB,MACF,KAAK57C,IAAakjC,iBAClB,KAAKljC,IAAaijC,mBAChBqZ,EAAa97C,EAAK2M,QAAQupB,MAC1B6lB,GAAa,EACb,MACF,KAAKv8C,IAAa8qB,kBAChBwxB,EAAa97C,EAAKk2B,MAClB6lB,GAAa,OAIIrxC,IAAfoxC,GACF7jD,KAAK+jD,aAAah8C,EAAM87C,EAAYC,EAAYX,K,EAcpDY,aAAA,SAAcC,EAAYH,EAAYC,EAAYX,GAAe,IAI3Dc,EAAiB7C,EAAOpD,EAJmC,OACzDprC,EAAW5S,KAAK47B,IAAhBhpB,OACSsxC,EAAiBF,EAA1B/vC,QACFgqB,EAAQj+B,KAAKwiD,QAAQqB,GAMzB,GAHA5lB,EAAMykB,YACNzkB,EAAMklB,cAAgBA,EAElBW,EAAY,CACd,KAAK9jD,KAAKyiD,gBAAkB,GAAM7vC,EAAOk1B,sBAgBvC,OANAjkC,IAAOlB,MAAP,yCAAsDuhD,EAAtD,UACAlkD,KAAKoiD,kBAAoB,KAEzBpiD,KAAKuiD,kBAELyB,EAAW7vC,OAAQ,GAbnBitC,EAAQt3C,KAAKoS,IAAIpS,KAAK4e,IAAI,EAAG1oB,KAAKyiD,iBAAmB7vC,EAAOm1B,uBAAwBn1B,EAAOo1B,6BAE3FhoC,KAAKsiD,MAAQ3J,YAAW,kBAAM,EAAKgK,cAAavB,GAEhD4C,EAAW3C,YAAa,EACxBrhD,KAAKyiD,kBACL5+C,IAAOpB,KAAP,qBAAiCyhD,EAAjC,cAA2D9C,EAA3D,+BAA+FphD,KAAKyiD,kBAcpGqB,GAAcX,MAChBc,EAAkBhmB,EAAM1zB,IAAItC,QAEN,GAAKg2B,EAAMykB,UAAYuB,GAC3ChmB,EAAMD,OAASC,EAAMD,MAAQ,GAAKimB,EAClChmB,EAAMhqB,aAAUxB,EAEhB5O,IAAOpB,KAAP,qBAAiCyhD,EAAjC,cAA2DL,EAA3D,mCAAwG5lB,EAAMD,SAM/E,IAA3Bh+B,KAAKqiD,kBAEPrE,EAA4B,IAAf6F,EAAoB7jD,KAAKwiD,QAAQv6C,OAAS,EAAI47C,EAAa,EACxEhgD,IAAOpB,KAAP,qBAAiCyhD,EAAjC,eAA4DlG,GAC5Dh+C,KAAK47B,IAAI+e,cAAgB36C,KAAKoiD,kBAAoBpE,GACzCmF,IAGTt/C,IAAOpB,KAAP,qBAAiCyhD,EAAjC,uBACAlkD,KAAKoiD,kBAAoB,Q,EAOjClU,aAAA,YAAwB,IAARvpB,EAAQ,EAARA,KACd,QAAalS,IAATkS,GAAoC,SAAdA,EAAK7hB,KAAiB,CAC9C,IAAMm7B,EAAQj+B,KAAKwiD,QAAQ79B,EAAKsZ,YAClBxrB,IAAVwrB,IACFA,EAAMklB,eAAgB,EACtBllB,EAAMykB,UAAY,EAClB1iD,KAAKyiD,gBAAkB,K,EAK7BvD,cAAA,SAAen3C,GAAM,WACXk2B,EAAmBl2B,EAAnBk2B,MAAOhqB,EAAYlM,EAAZkM,QAEf,GAAIgqB,IAAUj+B,KAAKoiD,kBAAnB,CAIA,IAAMhD,EAAWp/C,KAAKwiD,QAAQvkB,GAO9B,GALKmhB,EAAS+D,gBACZ/D,EAASsD,UAAY,EACrB1iD,KAAKyiD,gBAAkB,GAGrBxuC,EAAQmrB,KAAM,CAChB,IAAMgU,EAAiBH,GAAsBmM,EAASnrC,QAASA,EAASlM,EAAKutB,MAAM6uB,UACnFtgD,IAAOrB,IAAP,4BAAuCsH,KAAKC,MAAMqpC,GAAlD,OACApzC,KAAKsiD,MAAQ3J,YAAW,kBAAM,EAAKgK,cAAavP,QAEhDpzC,KAAKuiD,e,EAIT7B,qBAAA,SAAsB34C,GACpB,IAAMq8C,EAAepkD,KAAK47B,IAAIsN,YAAYnhC,EAAK6R,IAAI2pB,QAE7Cic,EAAex/C,KAAK47B,IAAIuG,OAAOniC,KAAKoiD,mBAC1C,GAAK5C,GAIDA,EAAapO,cAAe,CAG9B,IAFA,IAAIpT,GAAS,EAEJ59B,EAAI,EAAGA,EAAIo/C,EAAapO,cAAcnpC,OAAQ7H,IACrD,GAAIo/C,EAAapO,cAAchxC,KAAOgkD,EAAc,CAClDpmB,EAAQ59B,EACR,MAIA49B,IAAUwhB,EAAaxhB,QACzBwhB,EAAaxhB,MAAQA,EACrBh+B,KAAK84C,e,EAKX6J,UAAA,WAGE,GAFA9+C,IAAOtB,MAAM,qBAEkB,OAA3BvC,KAAKoiD,mBAA8BpiD,KAAKmiD,QAAS,CACnD,IAAMkC,EAAcrkD,KAAKwiD,QAAQxiD,KAAKoiD,mBAEtC,GAA2B,iBAAhBiC,GACTA,EAAY95C,IAAItC,OAAS,EAAG,CAC5B,IAAMg2B,EAAQj+B,KAAKoiD,kBACbxoC,EAAKyqC,EAAYrmB,MACjBzzB,EAAM85C,EAAY95C,IAAIqP,GAE5B/V,IAAOrB,IAAP,+BAA0Cy7B,EAA1C,gBAA+DrkB,GAK/D5Z,KAAK47B,IAAI9nB,QAAQC,IAAM/O,cAAe,CAAEuF,MAAK0zB,QAAOrkB,U,EAoB1D0qC,YAAA,SAAaT,EAAY7lB,GACvB,IAAMmE,EAASniC,KAAKmiC,OAAOnO,QAAO,SAACiK,EAAO7zB,GACxC,OAAIA,IAAUy5C,GAIV5lB,EAAM1zB,IAAItC,OAAS,QAAewK,IAAVurB,IAC1BC,EAAM1zB,IAAM0zB,EAAM1zB,IAAIypB,QAAO,SAACzpB,EAAKqP,GAAN,OAAaA,IAAOokB,KACjDC,EAAMD,MAAQ,GACP,MAGRpG,KAAI,SAACqG,EAAO7zB,GAAU,IACf6J,EAAYgqB,EAAZhqB,QAMR,OALIA,GAAWA,EAAQkrB,WACrBlrB,EAAQkrB,UAAUz7B,SAAQ,SAACyJ,GACzBA,EAAS8wB,MAAQ7zB,KAGd6zB,KAGTj+B,KAAKwiD,QAAUrgB,EAEfniC,KAAK47B,IAAI9nB,QAAQC,IAAM3O,eAAgB,CAAE+8B,Y,qCAlUzC,OAAOniC,KAAKwiD,U,4BAIZ,OAAOxiD,KAAKoiD,mB,aAGHsB,GACT,IAAIvhB,EAASniC,KAAKwiD,QACdrgB,IACFuhB,EAAW55C,KAAKoS,IAAIwnC,EAAUvhB,EAAOl6B,OAAS,GAC1CjI,KAAKoiD,oBAAsBsB,GAAavhB,EAAOuhB,GAAUzvC,SAC3DjU,KAAKyjD,iBAAiBC,M,kCAyC1B,OAAO1jD,KAAKqiD,kB,aAGGqB,GACf1jD,KAAKqiD,iBAAmBqB,OACCjxC,IAArBzS,KAAKukD,cACPvkD,KAAKukD,YAAcb,IAGH,IAAdA,IACF1jD,KAAKi+B,MAAQylB,K,iCAKf,OAAO1jD,KAAKqjD,a,aAGEK,GACd1jD,KAAKqjD,YAAcK,I,iCAMnB,QAAyBjxC,IAArBzS,KAAKukD,YAA2B,CAClC,IAAIC,EAAmBxkD,KAAK47B,IAAIhpB,OAAO6nC,WACvC,YAAyBhoC,IAArB+xC,EACKA,EAEAxkD,KAAKqjD,YAGd,OAAOrjD,KAAKukD,a,aAIAb,GACd1jD,KAAKukD,YAAcb,I,oCAiMnB,OAA+B,IAA3B1jD,KAAKqiD,iBACAriD,KAAKqiD,iBAELriD,KAAK47B,IAAI+e,e,aAIDqD,GACjBh+C,KAAKi+B,MAAQ+f,GACkB,IAA3Bh+C,KAAKqiD,mBACPriD,KAAK47B,IAAI+e,cAAgBqD,Q,gCAnccriB,G,QCZtC,SAAS8oB,GAAmBntC,EAAkBotC,GACnD,IAAI5vC,EACJ,IACEA,EAAQ,IAAIf,MAAM,YAClB,MAAOL,IAEPoB,EAAQ6vC,SAASC,YAAY,UACvBC,UAAU,YAAY,GAAO,GAEpC/vC,EAAcwC,MAAQA,EACvBotC,EAAQI,cAAchwC,GAGjB,SAASiwC,GAAkBztC,GAChC,GAAIA,aAAJ,EAAIA,EAAO0tC,KACT,KAAO1tC,EAAM0tC,KAAK/8C,OAAS,GACzBqP,EAAM2tC,UAAU3tC,EAAM0tC,KAAK,ICRjC,IAwGeE,G,oBArGb,WAAatpB,GAAK,aAChB,cAAMA,EACJ7nB,IAAM/P,eACN+P,IAAM9P,gBACN8P,IAAMtN,sBACNsN,IAAM1M,2BAJR,MAMKgb,cAAW5P,EAChB,EAAK6wB,WAAQ7wB,EARG,E,kHAWlBD,QAAA,WACEmpB,EAAa35B,UAAUwQ,QAAQjS,KAAKP,O,EAItCu+C,gBAAA,SAAiBx2C,GACf/H,KAAKsjC,MAAQv7B,EAAKu7B,MACbtjC,KAAKsjC,O,EAKZub,iBAAA,WACEkG,GAAiB/kD,KAAKqiB,UACtBriB,KAAKqiB,cAAW5P,EAChBzS,KAAKsjC,WAAQ7wB,G,EAGf0yC,YAAA,SAAaC,GACX,IAAK,IAAIhlD,EAAI,EAAGA,EAAIglD,EAAWn9C,OAAQ7H,IAAK,CAC1C,IAAI6jB,EAAYmhC,EAAWhlD,GAC3B,GAAuB,aAAnB6jB,EAAUohC,MAA2C,QAApBphC,EAAUqhC,MAK7C,OAFAb,GAAkBxgC,EAAWjkB,KAAKsjC,OAE3Brf,EAGX,OAAOjkB,KAAKsjC,MAAMiiB,aAAa,WAAY,Q,EAG7CC,sBAAA,SAAuBz9C,GACrB,IAAMoF,EAAWpF,EAAK4c,KAChBzL,EAAUnR,EAAKmR,QAGhBlZ,KAAKqiB,WACRriB,KAAKqiB,SAAWriB,KAAKmlD,YAAYnlD,KAAKsjC,MAAM8hB,YAC5CplD,KAAKqiB,SAAS9gB,KAAO,UAQvB,IAFA,IAAIkkD,EAAMl6C,OAAOm6C,eAAiBn6C,OAAOo6C,QAAUp6C,OAAOq6C,aAEjDxlD,EAAI,EAAGA,EAAI8Y,EAAQjR,OAAQ7H,IAAK,CACvC,IAAMqI,EAASZ,KAAIa,aAAawQ,EAAQ9Y,GAAG2H,MAC3C,GAAIU,EAAQ,CAEV,IAAI2sB,EAAYtrB,KAAK4lB,IAAIxW,EAAQ9Y,GAAGqY,IAAK,GACrC4c,EAAUj1B,EAAI8Y,EAAQjR,OAAS,EAAIiR,EAAQ9Y,EAAI,GAAGqY,IAAMtL,EAAS0iB,OAChEwF,IACHA,EAAUloB,EAAS4U,MAAQ5U,EAASsM,UAGrB4b,EAAUD,GACX,IACdC,EAAUD,EAzEK,KA4EjB,IAAK,IAAI3e,EAAI,EAAGA,EAAIhO,EAAOR,OAAQwO,IAAK,CACtC,IAAM9N,EAAQF,EAAOgO,GAErB,IAAK5O,KAAIe,iBAAiBD,GAAQ,CAChC,IAAMk9C,EAAM,IAAIJ,EAAIrwB,EAAWC,EAAS,IACxCwwB,EAAIxkD,MAAQsH,EACZ3I,KAAKqiB,SAASyjC,OAAOD,Q,EAO/BE,wBAAA,YAAwC,IAAbhW,EAAa,EAAbA,UACjB1tB,EAAariB,KAAbqiB,SACR,GAAKA,GAAaA,EAAS2iC,MAAS3iC,EAAS2iC,KAAK/8C,OAAlD,CAGA,IAAM+9C,EDxEH,SAAwBhB,EAAyC7X,GAEtE,GAAIA,EAAO6X,EAAK,GAAG3vB,QACjB,OAAO2vB,EAAK,GAGd,GAAI7X,EAAO6X,EAAKA,EAAK/8C,OAAS,GAAGotB,QAC/B,OAAO2vB,EAAKA,EAAK/8C,OAAS,GAM5B,IAHA,IAAIg+C,EAAO,EACPC,EAAQlB,EAAK/8C,OAAS,EAEnBg+C,GAAQC,GAAO,CACpB,IAAMC,EAAMr8C,KAAK8V,OAAOsmC,EAAQD,GAAQ,GAExC,GAAI9Y,EAAO6X,EAAKmB,GAAK9wB,QACnB6wB,EAAQC,EAAM,MACT,MAAIhZ,EAAO6X,EAAKmB,GAAK9wB,SAI1B,OAAO2vB,EAAKmB,GAHZF,EAAOE,EAAM,GAQjB,OAAQnB,EAAKiB,GAAM5wB,QAAU8X,EAASA,EAAO6X,EAAKkB,GAAO7wB,QAAW2vB,EAAKiB,GAAQjB,EAAKkB,GC6CnEE,CAAc/jC,EAAS2iC,KAAMjV,GAC9C,GAAKiW,EAGL,KAAO3jC,EAAS2iC,KAAK,KAAOgB,GAC1B3jC,EAAS4iC,UAAU5iC,EAAS2iC,KAAK,M,GAjGNrpB,G,IC4BlB0qB,G,WA3Bb,WAAaC,GAAkB,KALvBC,YAKuB,OAJvBC,eAIuB,OAHvBC,kBAGuB,EAE7BzmD,KAAKumD,OAASD,EAAWx8C,KAAK48C,IAAI58C,KAAKtH,IAAI,IAAO8jD,GAAY,EAC9DtmD,KAAKwmD,UAAY,EACjBxmD,KAAKymD,aAAe,E,2BAGtBttC,OAAA,SAAQwtC,EAAgBtlD,GACtB,IAAIulD,EAAW98C,KAAK4e,IAAI1oB,KAAKumD,OAAQI,GACrC3mD,KAAKwmD,UAAYnlD,GAAS,EAAIulD,GAAYA,EAAW5mD,KAAKwmD,UAC1DxmD,KAAKymD,cAAgBE,G,EAGvBE,eAAA,WACE,OAAO7mD,KAAKymD,c,EAGdK,YAAA,WACE,GAAI9mD,KAAKumD,OAAQ,CACf,IAAIQ,EAAa,EAAIj9C,KAAK4e,IAAI1oB,KAAKumD,OAAQvmD,KAAKymD,cAChD,OAAOzmD,KAAKwmD,UAAYO,EAExB,OAAO/mD,KAAKwmD,W,KC0BHQ,G,WAxCb,WAAaprB,EAAUqrB,EAAcC,EAAcC,GAAyB,KAT5EvrB,SAS4E,OAPpEwrB,sBAOoE,OANpEC,gBAMoE,OALpEC,iBAKoE,OAJpEC,WAIoE,OAHpEC,WAGoE,EAC1ExnD,KAAK47B,IAAMA,EACX57B,KAAKonD,iBAAmBD,EACxBnnD,KAAKqnD,WAAa,KAClBrnD,KAAKsnD,YAAc,GACnBtnD,KAAKunD,MAAQ,IAAIlB,GAAKY,GACtBjnD,KAAKwnD,MAAQ,IAAInB,GAAKa,G,2BAGxB/tC,OAAA,SAAQsuC,EAAoBC,GAE1B,IAEEC,GAHFF,EAAa39C,KAAK4lB,IAAI+3B,EAAYznD,KAAKsnD,cAGZ,IAEzBM,EAJY,EAAIF,EAIWC,EAC7B3nD,KAAKwnD,MAAMruC,OAAOwuC,EAAWC,GAC7B5nD,KAAKunD,MAAMpuC,OAAOwuC,EAAWC,I,EAG/BC,YAAA,WACE,IAAIX,EAAOlnD,KAAKwnD,MAChB,OAAQN,GAAQA,EAAKL,kBAAoB7mD,KAAKqnD,Y,EAGhDP,YAAA,WACE,OAAI9mD,KAAK6nD,cAKA/9C,KAAKoS,IAAIlc,KAAKwnD,MAAMV,cAAe9mD,KAAKunD,MAAMT,eAE9C9mD,KAAKonD,kB,EAIhB50C,QAAA,a,gLC5CMqiB,GAAgBtpB,OAAhBspB,YAmUOizB,G,oBAhUb,WAAalsB,GAAK,aAChB,cAAMA,EAAK7nB,IAAM7N,aACf6N,IAAM1N,YACN0N,IAAMnN,cACNmN,IAAM/M,QAHR,MAIK+gD,oBAAsB,EAC3B,EAAKC,gBAAkB,EACvB,EAAKpsB,IAAMA,EACX,EAAK0mB,MAAQ,KACb,EAAK2F,aAAe,KACpB,EAAKC,QAAU,EAAKC,mBAAmBvmD,K,yHAAxB,KAVC,E,wHAalB4Q,QAAA,WACExS,KAAKuiD,aACL5mB,EAAa35B,UAAUwQ,QAAQjS,KAAKP,O,EAGtC+qC,cAAA,SAAehjC,GACb,IAAM4c,EAAO5c,EAAK4c,KAClB,GAAkB,SAAdA,EAAK7hB,OACF9C,KAAKsiD,QACRtiD,KAAKg5C,YAAcr0B,EACnB3kB,KAAKsiD,MAAQ/J,YAAYv4C,KAAKkoD,QAAS,OAKpCloD,KAAKioD,cAAc,CACtB,IAKIG,EACAC,EANEzsB,EAAM57B,KAAK47B,IACXhpB,EAASgpB,EAAIhpB,OACbqrB,EAAQtZ,EAAKsZ,MACJrC,EAAIuG,OAAOlE,GAAOhqB,QAAQmrB,MAKvCgpB,EAAWx1C,EAAO01C,gBAClBD,EAAWz1C,EAAO21C,kBAElBH,EAAWx1C,EAAO41C,eAClBH,EAAWz1C,EAAO61C,gBAEpBzoD,KAAKioD,aAAe,IAAIjB,GAAuBprB,EAAKysB,EAAUD,EAAUx1C,EAAO81C,0B,EAKrFP,mBAAA,WAME,IAAMvsB,EAAM57B,KAAK47B,IACXrb,EAAQqb,EAAI0H,MACZ3e,EAAO3kB,KAAKg5C,YAElB,GAAKr0B,EAAL,CAIA,IAAMwZ,EAASxZ,EAAKwZ,OAGpB,IAAKA,GAAWA,EAAO7I,OAAS6I,EAAO7I,MAAMqzB,QAK3C,OAJA9kD,IAAOpB,KAAK,uDACZzC,KAAKuiD,kBAELviD,KAAKgoD,gBAAkB,GAGzB,IAAI1yB,EAAQ6I,EAAO7I,MAGnB,GAAI/U,GAAS+U,KAAY/U,EAAMg2B,QAAkC,IAAvBh2B,EAAMk2B,eAAyBl2B,EAAM+7B,aAAe33B,EAAKo4B,WAAap4B,EAAKsZ,MAAO,CAC1H,IAAM2qB,EAAe/zB,GAAYrG,MAAQ8G,EAAM6uB,SACzC1N,EAAe3sC,KAAKue,IAAI9H,EAAMk2B,cAGpC,GAAImS,EAAgB,IAAMjkC,EAAKlL,SAAWg9B,EAAe,CACvD,IAAMtU,EAASvG,EAAIuG,OACb0mB,EAAW/+C,KAAK4lB,IAAI,EAAG4F,EAAMwzB,GAAKxzB,EAAMwzB,GAAK,EAAmB,IAAfxzB,EAAM6V,OAAgByd,GAGvE3qB,EAAQkE,EAAOxd,EAAKsZ,OAC1B,IAAKA,EACH,OAEF,IAAMqd,EAAerd,EAAM8qB,YAAcj/C,KAAK4lB,IAAIuO,EAAM8qB,YAAa9qB,EAAM6E,SAAW7E,EAAM6E,QACtFkmB,EAAc1zB,EAAM0rB,MAAQ1rB,EAAM0rB,MAAQl3C,KAAK4lB,IAAI4F,EAAM6V,OAAQrhC,KAAKC,MAAM4a,EAAKlL,SAAW6hC,EAAe,IAC3Gh0B,EAAM/G,EAAM61B,YACZ6S,GAAmBD,EAAc1zB,EAAM6V,QAAU0d,EACjDK,GAAyBja,EAAaE,WAAW5uB,EAAO+G,EAAKsU,EAAIhpB,OAAOkgB,eAAe5pB,IAAMoe,GAAOmvB,EAK1G,GAAKyS,EAAyB,EAAIvkC,EAAKlL,SAAWg9B,GAAmBwS,EAAkBC,EAAwB,CAC7G,IAEItO,EAFEuO,EAAevtB,EAAIutB,aAKzB,IAAKvO,EAAgBj2B,EAAKsZ,MAAQ,EAAG2c,EAAgBuO,EAAcvO,IAAiB,CAIlF,IAAMwO,EAAmBjnB,EAAOyY,GAAemO,YAC3Cj/C,KAAK4lB,IAAIyS,EAAOyY,GAAemO,YAAa5mB,EAAOyY,GAAe9X,SAClEX,EAAOyY,GAAe9X,QAI1B,GAFiCne,EAAKlL,SAAW2vC,GAAoB,IAAUP,GAEhDK,EAE7B,WAhBAG,EAqB2BJ,IAC7BplD,IAAOpB,KAAP,gEAA4Em4C,EAA5E,oBAA6GA,EAA7G,sBAA+Ij2B,EAAKsZ,MAAQ,GAA5J,iCAtBEorB,GAsB+M9V,QAAQ,GAAzN,IAA+N0V,EAAgB1V,QAAQ,GAAvP,IAA6P2V,EAAsB3V,QAAQ,IAE3R3X,EAAIgf,cAAgBA,EAEpB56C,KAAKioD,aAAa9uC,OAAOyvC,EAActzB,EAAM6V,QAE7ChN,EAAOqJ,QAEPxnC,KAAKuiD,aACL3mB,EAAI9nB,QAAQC,IAAM3N,4BAA6B,CAAEue,KAAMA,EAAM2Q,MAAOA,U,EAO9E4Y,aAAA,SAAcnmC,GACZ,IAAM4c,EAAO5c,EAAK4c,KAClB,GAAkB,SAAdA,EAAK7hB,MAAmB,YAAgB6hB,EAAK2H,IAAK,CASpD,GAPAtsB,KAAKuiD,aAELviD,KAAK+nD,oBAAsBpjC,EAAKsZ,MAEhCj+B,KAAKgoD,gBAAkB,EAGnBhoD,KAAK47B,IAAIhpB,OAAO02C,sBAAuB,CACzC,IAAMrrB,EAAQj+B,KAAK47B,IAAIuG,OAAOxd,EAAKsZ,OAC/BsrB,GAAetrB,EAAMkN,OAASlN,EAAMkN,OAAOzkB,MAAQ,GAAK3e,EAAKutB,MAAM6V,OACnEqe,GAAkBvrB,EAAMkN,OAASlN,EAAMkN,OAAO1xB,SAAW,GAAK1R,EAAK4c,KAAKlL,SAC5EwkB,EAAMkN,OAAS,CAAEzkB,MAAO6iC,EAAa9vC,SAAU+vC,GAC/CvrB,EAAM8qB,YAAcj/C,KAAKC,MAAM,EAAIw/C,EAAcC,GAGnD,GAAIzhD,EAAK4c,KAAKwpB,YAAa,CACzB,IAAI7Y,EAAQvtB,EAAKutB,MACjBA,EAAMqU,QAAUrU,EAAMmqB,UAAYnqB,EAAMuT,MACxC7oC,KAAKquC,eAAetmC,M,EAK1BsmC,eAAA,SAAgBtmC,GACd,IAAMutB,EAAQvtB,EAAKutB,MACb3Q,EAAO5c,EAAK4c,KAKlB,IAAsB,IAAlB2Q,EAAMqzB,SAAkC,SAAdhkC,EAAK7hB,MAAmB,YAAgB6hB,EAAK2H,OAAU3H,EAAKwpB,aAAe7Y,EAAMuT,QAAUvT,EAAMmqB,WAAa,CAI1I,IAAIgK,EAA0Bn0B,EAAMqU,QAAUrU,EAAM6uB,SACpDtgD,IAAOrB,IAAP,uCAAkDsH,KAAKC,MAAMurB,EAAM2rB,OAAS3rB,EAAM6uB,UAAlF,IAA+Fr6C,KAAKC,MAAMurB,EAAMuT,MAAQvT,EAAM2rB,QAA9H,IAAyIn3C,KAAKC,MAAMurB,EAAMqU,QAAUrU,EAAMuT,OAA1K,IAAoL/+B,KAAKC,MAAMurB,EAAMmqB,UAAYnqB,EAAMqU,SAAvN,IAAmO7/B,KAAKC,MAAM,EAAIurB,EAAM6V,QAAU7V,EAAMmqB,UAAYnqB,EAAM6uB,YAC1RnkD,KAAKioD,aAAa9uC,OAAOswC,EAAyBn0B,EAAM6V,QACxD7V,EAAMo0B,WAAa1pD,KAAKioD,aAAanB,cAEjCniC,EAAKwpB,YACPnuC,KAAK2pD,iBAAmBF,EAA0B,IAElDzpD,KAAK2pD,iBAAmB,I,EAK9BthB,QAAA,SAAStgC,GAEP,OAAQA,EAAKkM,SACb,KAAK1M,IAAamkC,gBAClB,KAAKnkC,IAAaokC,kBAChB3rC,KAAKuiD,e,EAOTA,WAAA,WACEnK,cAAcp4C,KAAKsiD,OACnBtiD,KAAKsiD,MAAQ,M,EAqEfsH,eAAA,SAAgBpK,EAAcqK,EAAqBC,EAAWX,EAAcY,EAAcC,EAAkBC,EAAUC,EAAY/nB,GAChI,IAAK,IAAI/hC,EAAI2pD,EAAc3pD,GAAK+oD,EAAc/oD,IAAK,CACjD,IAAIg7C,EAAYjZ,EAAO/hC,GAEvB,GAAKg7C,EAAL,CAIA,IAAM3R,EAAe2R,EAAUnnC,QACzBk2C,EAAc1gB,EAAeA,EAAa/J,cAAgB+J,EAAatK,UAAUl3B,OAAS4hD,EAC1FzqB,IAAOqK,GAAeA,EAAarK,KAErCgrB,OAAU,EAQZA,EADEhqD,GAAKo/C,EACMyK,EAAWH,EAEXI,EAAaJ,EAG5B,IAAMhnB,EAAUX,EAAO/hC,GAAG2oD,YAAcj/C,KAAK4lB,IAAIyS,EAAO/hC,GAAG2oD,YAAa5mB,EAAO/hC,GAAG0iC,SAAWX,EAAO/hC,GAAG0iC,QACjGunB,EAAgBvnB,EAAUqnB,EAAcC,EAI9C,GAFAvmD,IAAOvB,MAAP,wEAAqFlC,EAArF,IAA0F0J,KAAKC,MAAMqgD,GAArG,IAAoHtnB,EAApH,IAA+HqnB,EAA/H,IAA8IH,EAA9I,IAAkKK,GAE9JD,EAAatnB,KAIbunB,GAAkBjrB,IAASp/B,KAAK2pD,kBAAqBU,EAAgBL,GAEvE,OAAO5pD,GAIX,OAAQ,G,4CAxGR,IAAMkqD,EAAkBtqD,KAAKgoD,eACvBuC,EAAcvqD,KAAKioD,aAEzB,MAAyB,IAArBqC,GAA4BC,GAAgBA,EAAY1C,eAC1D,OAAOyC,EAIT,IAAIE,EAAmBxqD,KAAKyqD,kBAM5B,OAJyB,IAArBH,IACFE,EAAmB1gD,KAAKoS,IAAIouC,EAAiBE,IAGxCA,G,aA6FUxM,GACjBh+C,KAAKgoD,eAAiBhK,I,wCA3FtB,IAAIpiB,EAAM57B,KAAK47B,IACPmuB,EAA+CnuB,EAA/CmuB,aAAc5nB,EAAiCvG,EAAjCuG,OAAQvvB,EAAyBgpB,EAAzBhpB,OAAQu2C,EAAiBvtB,EAAjButB,aAChC5oC,EAAQqb,EAAI0H,MACZkc,EAAex/C,KAAK+nD,oBACpB8B,EAAsB7pD,KAAKg5C,YAAch5C,KAAKg5C,YAAYv/B,SAAW,EACrE6N,EAAO/G,EAAQA,EAAM61B,YAAc,EAInCK,EAAiBl2B,GAAiC,IAAvBA,EAAMk2B,aAAuB3sC,KAAKue,IAAI9H,EAAMk2B,cAAgB,EACvFiU,EAAQ1qD,KAAKioD,aAAejoD,KAAKioD,aAAanB,cAAgBl0C,EAAO81C,uBAErEQ,GAAyBja,EAAaE,WAAW5uB,EAAO+G,EAAK1U,EAAOkgB,eAAe5pB,IAAMoe,GAAOmvB,EAGlGkU,EAAY3qD,KAAK4pD,eAAepK,EAAcqK,EAAqBa,EAAOvB,EAAcY,EAAcb,EAAuBt2C,EAAOg4C,mBAAoBh4C,EAAOi4C,qBAAsB1oB,GACzL,GAAIwoB,GAAa,EACf,OAAOA,EAEP9mD,IAAOvB,MAAM,+FAGb,IAAIwoD,EAAqBjB,EAAsB//C,KAAKoS,IAAI2tC,EAAqBj3C,EAAOk4C,oBAAsBl4C,EAAOk4C,mBAC7Gb,EAAWr3C,EAAOg4C,mBAClBV,EAAat3C,EAAOi4C,qBAExB,GAA8B,IAA1B3B,EAA6B,CAE/B,IAAIS,EAAmB3pD,KAAK2pD,iBACxBA,IAOFmB,GADwBjB,EAAsB//C,KAAKoS,IAAI2tC,EAAqBj3C,EAAOm4C,iBAAmBn4C,EAAOm4C,iBACtEpB,EACvC9lD,IAAOvB,MAAP,qBAAkCwH,KAAKC,MAAM,IAAO4/C,GAApD,+CAAoH7/C,KAAKC,MAAM,IAAO+gD,GAAtI,OAEAb,EAAWC,EAAa,GAI5B,OADAS,EAAY3qD,KAAK4pD,eAAepK,EAAcqK,EAAqBa,EAAOvB,EAAcY,EAAcb,EAAwB4B,EAAoBb,EAAUC,EAAY/nB,GACjKr4B,KAAK4lB,IAAIi7B,EAAW,Q,gCA7QLhvB,GCa5B,IAAMqF,GAAcgP,IAwtBLgb,G,oBAhqBb,WAAapvB,GAAU,aACrB,cAAMA,EACJrnB,IAAOxQ,gBACPwQ,IAAOtQ,gBACPsQ,IAAO1P,gBACP0P,IAAOpQ,aACPoQ,IAAOjQ,iBACPiQ,IAAOnQ,cACPmQ,IAAO/P,WACP+P,IAAO9P,gBACP8P,IAAOpP,kBACPoP,IAAOrP,gBAVT,MApDM+lD,YAA6B,KAmDd,EAjDfC,eAAgC,KAiDjB,EA/CfC,qBAA+B,GA+ChB,EA7CfC,MAAwB,KA6CT,EA3CfC,WAA4B,KA2Cb,EAxCfC,aAAuB,EAwCR,EArCfC,WAAqB,EAqCN,EAnCf34C,YAmCe,IAhChB44C,0BAgCgB,IA7BhBC,0BAAoC,EA6BpB,EA1BfC,wBAAkC,EA0BnB,EAvBhBpoB,MAAiC,KAuBjB,EApBhBqoB,YAAkC,KAoBlB,EAjBhBC,SAAsB,GAiBN,EAfhBzL,YAegB,IAZhB0L,WAAqB,EAYL,EAThBlM,SAAmB,EASH,EARhBmM,YAAsB,EAQN,EAPhBC,mBAA6B,EAOb,EALhBv/B,OAAmB,GAKH,EAJhBw/B,cAA0B,GAIV,EAHhBC,aAA8B,GAGd,EAFhBC,WAAuC,GAEvB,EA6JfC,mBAAqB,WAC3BtoD,IAAOrB,IAAI,uBACX,EAAKo5B,IAAI9nB,QAAQS,IAAOvQ,eAAgB,CAAEs/B,MAAO,EAAKA,QACtD,IAAIqoB,EAAc,EAAKA,YACnBA,GAEFA,EAAY7a,oBAAoB,aAAc,EAAKqb,oBAErD,EAAKC,sBArKgB,EAwKfC,oBAAsB,WAC5BxoD,IAAOrB,IAAI,wBAzKU,EA4Kf8pD,oBAAsB,WAC5BzoD,IAAOrB,IAAI,uBA7KU,EAgLf+pD,eAAiB,WAEvB,GAAI,EAAKf,sBAAwB,EAAKS,aAAazrC,MAAO,CACxD,IAAIgsC,EAAc,EAAKP,aAAazrC,MAEpC3c,IAAOpB,KAAP,2CAAuD+pD,EAAYC,gBAAnE,OAAyF,EAAKjB,sBAC9FgB,EAAYC,gBAAkB,EAAKjB,4BAC5B,EAAKA,qBAGV,EAAKF,aACP,EAAKoB,UAGH,EAAKnB,WACP,EAAKoB,WAGP,EAAKd,WAAY,EACjB,IAAI1L,EAAS,EAAKA,OAEdY,EAAU,EAAK6K,SAAS38B,QAAO,SAAC29B,EAASC,GAAV,OAAuBA,EAAQ1M,SAAWA,EAAUyM,EAAU,EAAIA,IAAS,GAGxGtgB,EAA4D,GAC5DwgB,EAAQ,EAAKb,aACnB,IAAK,IAAIr3B,KAAck4B,EAAO,CAC5B,IAAMC,EAAKD,EAAMl4B,GACjB,IAAKm4B,EACH,MAAMzgD,MAAM,8DAA8DsoB,EAA/D,2DAEb0X,EAAW1X,GAAkCm4B,EAAGpgB,SAGlD,EAAK/Q,IAAI9nB,QAAQS,IAAOhQ,gBAAiB,CAAE47C,SAAQY,UAASzU,eAEvD,EAAKgf,aACR,EAAK0B,cAGP,EAAKC,6BAGW,IAAZlM,GACF,EAAKmM,uBA5Nc,EAgOfC,iBAAmB,SAACr4C,GAC1BjR,IAAOlB,MAAM,sBAAuBmS,GAIpC,EAAK8mB,IAAI9nB,QAAQS,IAAOvN,MAAO,CAAElE,KAAMwE,IAAW0M,YAAaC,QAAS1M,IAAa6lD,uBAAwBj5C,OAAO,KAxNpH,EAAKvB,OAASgpB,EAAIhpB,OAbG,E,kHAgBvBJ,QAAA,WACEmpB,EAAa35B,UAAUwQ,QAAQjS,KAAKP,O,EAGtCqtD,kBAAA,SAAmBtlD,GACjB,IAAIjF,EAAOiF,EAAKjF,KACZsf,EAAapiB,KAAKwsB,OAAOhM,MAS7B,GAAa,UAAT1d,GAAoBsf,GAAuC,eAAzBA,EAAWzI,UAA4B,CAC3E,IAAI6yC,EAAcxsD,KAAKisD,aAAazrC,MACpC,IAAKgsC,EACH,MAAMlgD,MAAM,8DAMd,GAHYxC,KAAKue,IAAImkC,EAAYC,gBAAkB1kD,EAAKga,OAG5C,GAAK,CACf,IAAIurC,EAAWd,EAAYc,SAE3B,IACEd,EAAYhlB,QACZ,MAAO9zB,GACP7P,IAAOpB,KAAK,+BAAiCiR,GAG1C45C,EAIHttD,KAAKwrD,qBAAuBzjD,EAAKga,OAHjCle,IAAOpB,KAAK,2CAA6C+pD,EAAYC,gBAAkB,OAAS1kD,EAAKga,OACrGyqC,EAAYC,gBAAkB1kD,EAAKga,U,EAQ3C+8B,iBAAA,SAAkB/2C,GAKhB,IAAIwlD,EAAsB,GACtBxlD,EAAKyY,QAAUzY,EAAKwY,QAAUxY,EAAKsyC,YACrCkT,EAAc,GAEhBvtD,KAAKyrD,0BAA4BzrD,KAAK0rD,wBAA0B6B,EAEhE1pD,IAAOrB,IAAOxC,KAAKyrD,0BAAnB,mC,EAGF+B,iBAAA,SAAkBzlD,GAChB,IAAIu7B,EAAQtjC,KAAKsjC,MAAQv7B,EAAKu7B,MAC9B,GAAIA,GAAStC,GAAa,CAExB,IAAIysB,EAAKztD,KAAK2rD,YAAc,IAAI3qB,GAEhCysB,EAAGryB,iBAAiB,aAAcp7B,KAAKmsD,oBACvCsB,EAAGryB,iBAAiB,cAAep7B,KAAKssD,qBACxCmB,EAAGryB,iBAAiB,cAAep7B,KAAKqsD,qBAExC/oB,EAAMtJ,IAAMzuB,OAAOivB,IAAII,gBAAgB6yB,GAEvCztD,KAAKqrD,WAAa/nB,EAAMtJ,M,EAI5B6kB,iBAAA,WACEh7C,IAAOrB,IAAI,0BACX,IAAIirD,EAAKztD,KAAK2rD,YACd,GAAI8B,EAAI,CACN,GAAsB,SAAlBA,EAAGnR,WACL,IAKEmR,EAAGC,cACH,MAAOh6C,GACP7P,IAAOpB,KAAP,oBAAgCiR,EAAIG,QAApC,8BAGJ45C,EAAG3c,oBAAoB,aAAc9wC,KAAKmsD,oBAC1CsB,EAAG3c,oBAAoB,cAAe9wC,KAAKssD,qBAC3CmB,EAAG3c,oBAAoB,cAAe9wC,KAAKqsD,qBAIvCrsD,KAAKsjC,QACHtjC,KAAKqrD,YACP9/C,OAAOivB,IAAIqW,gBAAgB7wC,KAAKqrD,YAK9BrrD,KAAKsjC,MAAMtJ,MAAQh6B,KAAKqrD,YAC1BrrD,KAAKsjC,MAAMqqB,gBAAgB,OAC3B3tD,KAAKsjC,MAAMsD,QAEX/iC,IAAOpB,KAAK,0DAIhBzC,KAAK2rD,YAAc,KACnB3rD,KAAKsjC,MAAQ,KACbtjC,KAAKqrD,WAAa,KAClBrrD,KAAKyrD,0BAA4BzrD,KAAK0rD,wBACtC1rD,KAAKgsD,cAAgB,GACrBhsD,KAAKwsB,OAAS,GACdxsB,KAAKisD,aAAe,GACpBjsD,KAAKksD,WAAa,GAClBlsD,KAAK4rD,SAAW,GAChB5rD,KAAK2/C,SAAW,EAGlB3/C,KAAK47B,IAAI9nB,QAAQS,IAAOrQ,iB,EAG1BkoD,mBAAA,WAAsB,IACdX,EAA6CzrD,KAA7CyrD,0BAA2BO,EAAkBhsD,KAAlBgsD,cAM3B4B,EAAqB9sD,OAAO4vB,KAAKs7B,GAAe/jD,QACjD2lD,IAAuBnC,GAAqD,IAAvBmC,KAExD5tD,KAAK6tD,oBAAoB7B,GACzBhsD,KAAKgsD,cAAgB,GAErBhsD,KAAKgtD,gB,EAgFTc,cAAA,WACE,IAAM7B,EAAejsD,KAAKisD,aAC1B,IAAK,IAAInpD,KAAQmpD,EAAc,CAC7B,IAAMc,EAAKd,EAAanpD,GACxB,IACMiqD,IACE/sD,KAAK2rD,aACP3rD,KAAK2rD,YAAYoC,mBAAmBhB,GAEtCA,EAAGjc,oBAAoB,YAAa9wC,KAAKusD,gBACzCQ,EAAGjc,oBAAoB,QAAS9wC,KAAKmtD,mBAEvC,MAAOz5C,KAGX1T,KAAKisD,aAAe,GACpBjsD,KAAKksD,WAAa,GAClBlsD,KAAK4rD,SAAW,GAChB5rD,KAAK2/C,SAAW,G,EAGlBqO,eAAA,SAAgBxhC,GAAkB,WAG5B1rB,OAAO4vB,KAAK1wB,KAAKisD,cAAchkD,SAInCnH,OAAO4vB,KAAKlE,GAAQ9oB,SAAQ,SAAAs8C,GAC1B,EAAKgM,cAAchM,GAAaxzB,EAAOwzB,MAGzChgD,KAAKyrD,0BAA4B3hD,KAAK4lB,IAAI1vB,KAAKyrD,0BAA4B,EAAG,GAC1EzrD,KAAK2rD,aAA+C,SAAhC3rD,KAAK2rD,YAAYrP,YACvCt8C,KAAKosD,uB,EAITyB,oBAAA,SAAqBrhC,GAAkB,IAC7By/B,EAA8BjsD,KAA9BisD,aAAcN,EAAgB3rD,KAAhB2rD,YACtB,IAAKA,EACH,MAAMr/C,MAAM,wDAGd,IAAK,IAAI0zC,KAAaxzB,EACpB,IAAKy/B,EAAajM,GAAY,CAC5B,IAAI1oC,EAAQkV,EAAOwzB,GACnB,IAAK1oC,EACH,MAAMhL,MAAM,kCAAkC0zC,EAAnC,4BAGb,IAAI5nC,EAAQd,EAAM4oC,YAAc5oC,EAAMc,MAClC61C,EAAc32C,EAAMqC,UAAZ,WAAgCvB,EAC5CvU,IAAOrB,IAAP,yBAAoCyrD,EAApC,KACA,IACE,IAAIlB,EAAKd,EAAajM,GAAa2L,EAAYuC,gBAAgBD,GAC/DlB,EAAG3xB,iBAAiB,YAAap7B,KAAKusD,gBACtCQ,EAAG3xB,iBAAiB,QAASp7B,KAAKmtD,kBAClCntD,KAAKwsB,OAAOwzB,GAAa,CACvB71C,OAAQ4iD,EACR30C,MAAOA,EACPwB,GAAItC,EAAMsC,GACVD,UAAWrC,EAAMqC,UACjBumC,WAAY5oC,EAAM4oC,YAEpB,MAAOxsC,GACP7P,IAAOlB,MAAP,0CAAuD+Q,EAAIG,SAC3D7T,KAAK47B,IAAI9nB,QAAQS,IAAOvN,MAAO,CAAElE,KAAMwE,IAAW0M,YAAaC,QAAS1M,IAAa4mD,uBAAwBh6C,OAAO,EAAOT,IAAKA,EAAKu6C,SAAUA,KAIrJjuD,KAAK47B,IAAI9nB,QAAQS,IAAOlQ,eAAgB,CAAEmoB,OAAQxsB,KAAKwsB,U,EAGzD4hC,kBAAA,SAAmBrmD,GACZ/H,KAAKsrD,cACHtrD,KAAK4rD,SAGR5rD,KAAK4rD,SAASviD,KAAKtB,GAFnB/H,KAAK4rD,SAAW,CAAE7jD,GAKpB/H,KAAKgtD,gB,EAMTqB,YAAA,SAAatmD,GACX,IAAK,IAAMjF,KAAQ9C,KAAKisD,aACtB,IAAKlkD,EAAKjF,MAAQiF,EAAKjF,OAASA,EAAM,CACpC,IAAMiqD,EAAK/sD,KAAKisD,aAAanpD,GACzBiqD,IAAOA,EAAGvW,QACZuW,EAAGvW,OAAQ,EACX3yC,IAAOrB,IAAOM,EAAd,0BAKN9C,KAAK2sD,Y,EAIPA,SAAA,WAAY,IACFV,EAA8BjsD,KAA9BisD,aAAcN,EAAgB3rD,KAAhB2rD,YACtB,GAAKA,GAA0C,SAA3BA,EAAYrP,WAAhC,CAKA,IAAK,IAAIx5C,KAAQmpD,EAAc,CAC7B,IAAMc,EAAKd,EAAanpD,GACxB,GAAKiqD,EAAL,CAEA,IAAKA,EAAGvW,MACN,OAGF,GAAIuW,EAAGO,SAEL,YADAttD,KAAKurD,WAAY,IAKrB1nD,IAAOrB,IAAI,+FAEX,IACEmpD,EAAY+B,cACZ,MAAO9pD,GACPC,IAAOpB,KAAK,qDAEdzC,KAAKurD,WAAY,OAzBfvrD,KAAKurD,WAAY,G,EA4BrB+C,iBAAA,SAAkBvmD,GACZA,EAAKjF,KACP9C,KAAKksD,WAAW7iD,KAAK,CAAE0Y,MAAOha,EAAK0oB,YAAavnB,IAAKnB,EAAKs2C,UAAWv7C,KAAMiF,EAAKjF,QAEhF9C,KAAKksD,WAAW7iD,KAAK,CAAE0Y,MAAOha,EAAK0oB,YAAavnB,IAAKnB,EAAKs2C,UAAWv7C,KAAM,UAC3E9C,KAAKksD,WAAW7iD,KAAK,CAAE0Y,MAAOha,EAAK0oB,YAAavnB,IAAKnB,EAAKs2C,UAAWv7C,KAAM,WAI7E9C,KAAK+rD,mBAAqB,EAC1B/rD,KAAK0sD,W,EAGPQ,oBAAA,WAEE,GAAKltD,KAAKorD,MAAV,CAIA,IAAMmD,EAAuBvuD,KAAK4S,OAAO27C,qBACzC,GAAK7mD,SAAS6mD,MAAyBA,EAAuB,GAI9D,GAAKvuD,KAAKsjC,MAUV,IALA,IAAM8S,EAAcp2C,KAAKsjC,MAAM8S,YACzB6V,EAAejsD,KAAKisD,aACpBuC,EAAc1tD,OAAO4vB,KAAKu7B,GAC1BwC,EAA2BrY,EAActsC,KAAK4lB,IAAI6+B,EAAsBvuD,KAAKmrD,sBAE1E/gD,EAAQokD,EAAYvmD,OAAS,EAAGmC,GAAS,EAAGA,IAAS,CAC5D,IAAMskD,EAAaF,EAAYpkD,GACzB2iD,EAAKd,EAAayC,GACxB,GAAI3B,EAAI,CACN,IAAMpgB,EAAWogB,EAAGpgB,SAEhBA,EAAS1kC,OAAS,GAAKwmD,EAA2B9hB,EAAS5qB,MAAM,IAI/D/hB,KAAK2uD,kBAAkBD,EAAY3B,EAAI,EAAG0B,IAC5CzuD,KAAK47B,IAAI9nB,QAAQS,IAAOlN,yBAA0B,CAAE0oC,UAAW0e,UApBrE5qD,IAAOlB,MAAM,wD,EA2BjBisD,eAAA,YAA+J,IAA7I36C,EAA6I,EAA7IA,QACZA,EAAQkrB,UAAUl3B,OAAS,IAC7BjI,KAAKkrD,eAAiBj3C,EAAQyrB,cAAgBzrB,EAAQkrB,UAAU,GAAGpd,MACnE/hB,KAAKmrD,qBAAuBl3C,EAAQkxB,uBAAyBlxB,EAAQwrB,gBAAkB,GACvFz/B,KAAKorD,MAAQn3C,EAAQmrB,KACrBp/B,KAAKitD,+B,EASTA,2BAAA,WAA8B,IAExBxzC,EADE7G,EAAW5S,KAAX4S,OAGN,GAA4B,OAAxB5S,KAAKkrD,gBACNlrD,KAAKsjC,OACLtjC,KAAK2rD,aACL3rD,KAAKisD,cACoB,IAA1BjsD,KAAKsjC,MAAMgZ,YACqB,SAAhCt8C,KAAK2rD,YAAYrP,WALnB,CASA,IAAK,IAAIx5C,KAAQ9C,KAAKisD,aAAc,CAClC,IAAMc,EAAK/sD,KAAKisD,aAAanpD,GAC7B,GAAIiqD,IAAsB,IAAhBA,EAAGO,SAEX,OAIJ7zC,EAAWzZ,KAAKsjC,MAAM7pB,SAEG,OAArBzZ,KAAKirD,cACPjrD,KAAKirD,YAAcjrD,KAAK2rD,YAAYlyC,WAGnB,IAAfzZ,KAAKorD,QAAkD,IAAhCx4C,EAAOi8C,sBAEhChrD,IAAOrB,IAAI,4CACXxC,KAAKirD,YAAcjrD,KAAK2rD,YAAYlyC,SAAW8W,MACrCvwB,KAAKkrD,eAAiBlrD,KAAKirD,aAAejrD,KAAKkrD,eAAiBzxC,IAAc,YAAgBA,MAKxG5V,IAAOrB,IAAP,qCAAgDxC,KAAKkrD,eAAe3X,QAAQ,IAC5EvzC,KAAKirD,YAAcjrD,KAAK2rD,YAAYlyC,SAAWzZ,KAAKkrD,kB,EAIxDwB,QAAA,WAEE,KAAO1sD,KAAKksD,WAAWjkD,QAAQ,CAC7B,IAAIglC,EAAQjtC,KAAKksD,WAAW,GAE5B,IAAIlsD,KAAK8uD,YAAY7hB,EAAMlrB,MAAOkrB,EAAM/jC,IAAK+jC,EAAMnqC,MAOjD,YAFA9C,KAAKsrD,aAAc,GAHnBtrD,KAAKksD,WAAW/jC,QAChBnoB,KAAK+rD,mBAAqB,EAO9B,GAA+B,IAA3B/rD,KAAKksD,WAAWjkD,OAAc,CAEhCjI,KAAKsrD,aAAc,EAGnB,IAAI3L,EAAW,EACXsM,EAAejsD,KAAKisD,aACxB,IACE,IAAK,IAAInpD,KAAQmpD,EAAc,CAC7B,IAAMc,EAAKd,EAAanpD,GACpBiqD,IACFpN,GAAYoN,EAAGpgB,SAAS1kC,SAG5B,MAAOtF,GAGPkB,IAAOlB,MAAM,+CAEf3C,KAAK2/C,SAAWA,EAChB3/C,KAAK47B,IAAI9nB,QAAQS,IAAO7P,kB,EAI5BsoD,YAAA,WAAe,IACPp6C,EAAwC5S,KAAxC4S,OAAQgpB,EAAgC57B,KAAhC47B,IAAKgwB,EAA2B5rD,KAA3B4rD,SAAUK,EAAiBjsD,KAAjBisD,aAC7B,GAAKnrD,OAAO4vB,KAAKu7B,GAAchkD,OAA/B,CAKA,IAAKjI,KAAKsjC,OAAStjC,KAAKsjC,MAAM3gC,MAG5B,OAFA3C,KAAK4rD,SAAW,QAChB/nD,IAAOlB,MAAM,4EAIf,IAAI3C,KAAK6rD,UAAT,CAKA,IAAMgB,EAAUjB,EAASzjC,QACzB,GAAK0kC,EAIL,IACE,IAAME,EAAKd,EAAaY,EAAQ/pD,MAChC,IAAKiqD,EAKH,YADA/sD,KAAKusD,iBAIP,GAAIQ,EAAGO,SAGL,YADA1B,EAAStiB,QAAQujB,GAKnBE,EAAGvW,OAAQ,EAEXx2C,KAAKmgD,OAAS0M,EAAQ1M,OACtB4M,EAAGgC,aAAalC,EAAQ9kD,MACxB/H,KAAK8rD,YAAc,EACnB9rD,KAAK2/C,WACL3/C,KAAK6rD,WAAY,EACjB,MAAOn4C,GAEP7P,IAAOlB,MAAP,uCAAoD+Q,EAAIG,SACxD+3C,EAAStiB,QAAQujB,GACjB,IAAI/3C,EAAQ,CAAEhS,KAAMwE,IAAW0M,YAAamsC,OAAQ0M,EAAQ1M,OAAQlsC,QAAS,GAAIE,OAAO,GACvE,KAAbT,EAAIs7C,MAGNhvD,KAAK4rD,SAAW,GAChB92C,EAAMb,QAAU1M,IAAa+5C,oBAE7BthD,KAAK8rD,cACLh3C,EAAMb,QAAU1M,IAAa0nD,oBAIzBjvD,KAAK8rD,YAAcl5C,EAAOs8C,sBAC5BrrD,IAAOrB,IAAP,QAAmBoQ,EAAOs8C,oBAA1B,4CACAlvD,KAAK4rD,SAAW,GAChB92C,EAAMX,OAAQ,IAGlBynB,EAAI9nB,QAAQS,IAAOvN,MAAO8N,O,EAS9Bg6C,YAAA,SAAar+B,EAAqB4tB,EAAmB8Q,GACnD,IAAMlD,EAAejsD,KAAKisD,aAE1B,IAAKnrD,OAAO4vB,KAAKu7B,GAAchkD,OAC7B,OAAO,EAGT,IAAImuC,EAAsB,OAO1B,GANIp2C,KAAKsjC,QACP8S,EAAcp2C,KAAKsjC,MAAM8S,YAAY7C,QAAQ,IAE/C1vC,IAAOrB,IAAP,8BAAyC4zC,EAAzC,IAAwD3lB,EAAxD,IAAuE4tB,GAGnEr+C,KAAK+rD,oBAAsB/rD,KAAK2/C,SAElC,OADA97C,IAAOpB,KAAK,oCACL,EAGT,IAAMsqD,EAAKd,EAAakD,GAExB,GAAIpC,EAAI,CAEN,GADAA,EAAGvW,OAAQ,EACNuW,EAAGO,SAON,OADAzpD,IAAOpB,KAAK,0CACL,EANP,GAAIzC,KAAK2uD,kBAAkBQ,EAAQpC,EAAIt8B,EAAa4tB,GAElD,OADAr+C,KAAK+rD,sBACE,EAUb,OAFAloD,IAAOrB,IAAI,mBAEJ,G,EAaTmsD,kBAAA,SAAmB7rD,EAAciqD,EAA0Bt8B,EAAqB4tB,GAC9E,IACE,IAAK,IAAIj+C,EAAI,EAAGA,EAAI2sD,EAAGpgB,SAAS1kC,OAAQ7H,IAAK,CAC3C,IAAIgvD,EAAWrC,EAAGpgB,SAAS5qB,MAAM3hB,GAC7BivD,EAAStC,EAAGpgB,SAASzjC,IAAI9I,GACzBkvD,EAAcxlD,KAAK4lB,IAAI0/B,EAAU3+B,GACjC8+B,EAAYzlD,KAAKoS,IAAImzC,EAAQhR,GAOjC,GAAIv0C,KAAKoS,IAAIqzC,EAAWF,GAAUC,EAAc,GAAK,CACnD,IAAIlZ,EAAsB,OAO1B,OANIp2C,KAAKsjC,QACP8S,EAAcp2C,KAAKsjC,MAAM8S,YAAYxvB,YAGvC/iB,IAAOrB,IAAP,aAAwBM,EAAxB,KAAiCwsD,EAAjC,IAAgDC,EAAhD,UAAmEH,EAAnE,IAA+EC,EAA/E,UAA+FjZ,GAC/F2W,EAAGyC,OAAOF,EAAaC,IAChB,IAGX,MAAO5sD,GACPkB,IAAOpB,KAAK,2BAA4BE,GAG1C,OAAO,G,GAltBoBg5B,G,2KC8KhB8zB,G,oBApMb,WAAa7zB,GAAK,aAChB,cAAMA,EACJ7nB,IAAMhN,uBACNgN,IAAMhQ,gBACNgQ,IAAMlP,gBACNkP,IAAM3O,eACN2O,IAAM3P,cACN2P,IAAM9P,kBANR,MAQKyrD,iBAAmBjoD,OAAOwpB,kBAC/B,EAAKqyB,WAAa,KAClB,EAAKnhB,OAAS,GACd,EAAKmB,MAAQ,KACb,EAAKqsB,iBAAmB,GACxB,EAAKrN,MAAQ,KACb,EAAKsN,WAAa,KAfF,E,wHAkBlBp9C,QAAA,WACMxS,KAAK47B,IAAIhpB,OAAOi9C,uBAClB7vD,KAAKsjC,MAAQ,KACbtjC,KAAK4vD,WAAa,KAClB5vD,KAAK8vD,gB,EAITC,sBAAA,SAAuBhoD,GAEjB0nD,EAAmBO,eAAejoD,EAAKkoD,aAAcjwD,KAAK2vD,mBAC5D3vD,KAAK2vD,iBAAiBtmD,KAAKtB,EAAKkoD,e,EAIpCzC,iBAAA,SAAkBzlD,GAChB/H,KAAKsjC,MAAQv7B,EAAKu7B,iBAAiB/3B,OAAO2kD,iBAAmBnoD,EAAKu7B,MAAQ,M,EAG5Ewb,iBAAA,SAAkB/2C,GAChB,IAAM6zB,EAAM57B,KAAK47B,IACjB57B,KAAK2vD,iBAAmB,GACxB3vD,KAAKmiC,OAASp6B,EAAKo6B,OACnBniC,KAAKsjD,WAAav7C,EAAKu7C,WACnB1nB,EAAIhpB,OAAOi9C,sBAAwB9nD,EAAKwY,OAE1CvgB,KAAKmwD,gB,EAMTnC,eAAA,SAAgBjmD,GACF/H,KAAK47B,IACThpB,OAAOi9C,sBAAwB9nD,EAAKwY,OAE1CvgB,KAAKmwD,gB,EAITvO,gBAAA,SAAiB75C,GACf/H,KAAKmiC,OAASp6B,EAAKo6B,Q,EAGrB0c,iBAAA,WACE7+C,KAAK8vD,e,EAGPM,iBAAA,WACE,GAAIpwD,KAAKsjC,MAAO,CACd,IAAI+sB,EAAerwD,KAAKmiC,OAASniC,KAAKmiC,OAAOl6B,OAAS,EACtD,GAAIooD,EAAc,CAChB,IAAMz0B,EAAM57B,KAAK47B,IACjBA,EAAI8zB,iBAAmB1vD,KAAKswD,YAAYD,EAAe,GACnDz0B,EAAI8zB,iBAAmB1vD,KAAK0vD,kBAG9B9zB,EAAI20B,iBAAiB1S,kBAEvB79C,KAAK0vD,iBAAmB9zB,EAAI8zB,oB,EAQlCY,YAAA,SAAaE,GAAe,WAC1B,IAAKxwD,KAAKmiC,OACR,OAAQ,EAGV,IAAMsuB,EAAczwD,KAAKmiC,OAAOnO,QAAO,SAACiK,EAAO7zB,GAAR,OACrCqlD,EAAmBO,eAAe5lD,EAAO,EAAKulD,mBAAqBvlD,GAASomD,KAI9E,OADAxwD,KAAK4vD,WAAa,KACXH,EAAmBiB,uBAAuBD,EAAazwD,KAAK2wD,WAAY3wD,KAAK4wD,c,EAGtFT,aAAA,WACMnwD,KAAKsiD,QAITtiD,KAAK0vD,iBAAmBjoD,OAAOwpB,kBAC/BjxB,KAAK47B,IAAI0nB,WAAatjD,KAAKswD,YAAYtwD,KAAKsjD,YAC5ClL,cAAcp4C,KAAKsiD,OACnBtiD,KAAKsiD,MAAQ/J,YAAYv4C,KAAKowD,iBAAiBxuD,KAAK5B,MAAO,KAC3DA,KAAKowD,qB,EAGPN,YAAA,WACE9vD,KAAK2vD,iBAAmB,GACxB3vD,KAAKsjD,WAAa,KAClBtjD,KAAK0vD,iBAAmBjoD,OAAOwpB,kBAC3BjxB,KAAKsiD,QACPtiD,KAAKsiD,MAAQlK,cAAcp4C,KAAKsiD,OAChCtiD,KAAKsiD,MAAQ,O,EAIjBuO,cAAA,WACE,GAAI7wD,KAAK4vD,WACP,OAAO5vD,KAAK4vD,WAEd,IAAMtsB,EAAQtjC,KAAKsjC,MACbwtB,EAAa,CACjBxyC,MAAO,EACPE,OAAQ,GAGV,GAAI8kB,EAAO,CACT,IAAMssB,EAAatsB,EAAMytB,wBACzBD,EAAWxyC,MAAQsxC,EAAWtxC,MAC9BwyC,EAAWtyC,OAASoxC,EAAWpxC,OAC1BsyC,EAAWxyC,OAAUwyC,EAAWtyC,SAGnCsyC,EAAWxyC,MAAQsxC,EAAW1J,MAAQ0J,EAAW3J,MAAQ3iB,EAAMhlB,OAAS,EACxEwyC,EAAWtyC,OAASoxC,EAAWoB,OAASpB,EAAWqB,KAAO3tB,EAAM9kB,QAAU,GAI9E,OADAxe,KAAK4vD,WAAakB,EACXA,G,EAmBFd,eAAP,SAAuB/xB,EAAO0xB,GAC5B,YADmD,IAAvBA,MAAmB,KACH,IAArCA,EAAiB7kD,QAAQmzB,I,EAG3ByyB,uBAAP,SAA+BvuB,EAAQ7jB,EAAOE,GAC5C,IAAK2jB,GAAWA,IAAWA,EAAOl6B,OAChC,OAAQ,EAiBV,IAZA,IAA6Bm3C,EAAUpB,EAUnCkT,EAAgB/uB,EAAOl6B,OAAS,EAE3B7H,EAAI,EAAGA,EAAI+hC,EAAOl6B,OAAQ7H,GAAK,EAAG,CACzC,IAAM69B,EAAQkE,EAAO/hC,GACrB,IAAK69B,EAAM3f,OAASA,GAAS2f,EAAMzf,QAAUA,KAdlB4gC,EAciDnhB,IAdvC+f,EAc8C7b,EAAO/hC,EAAI,KATvFg/C,EAAS9gC,QAAU0/B,EAAU1/B,OAAS8gC,EAAS5gC,SAAWw/B,EAAUx/B,QASwB,CACjG0yC,EAAgB9wD,EAChB,OAIJ,OAAO8wD,G,gDAtCP,IAAI7yC,EAAa,EACjB,IACEA,EAAa9S,OAAO4lD,iBACpB,MAAOvtD,IACT,OAAOya,M,oCAZP,OAAOre,KAAK6wD,gBAAgBvyC,MAAQmxC,EAAmB2B,qB,kCAIvD,OAAOpxD,KAAK6wD,gBAAgBryC,OAASixC,EAAmB2B,wB,gCAvJ3Bz1B,G,ICCzB9G,GAAgBtpB,OAAhBspB,YAuEOw8B,G,oBApEb,WAAaz1B,GAAK,OAChB,YAAMA,EAAK7nB,IAAMhQ,kBADD,K,kHAIlByO,QAAA,WACMxS,KAAKsiD,OACPlK,cAAcp4C,KAAKsiD,OAGrBtiD,KAAKsxD,iCAAkC,G,EAGzC9D,iBAAA,SAAkBzlD,GAChB,IAAM6K,EAAS5S,KAAK47B,IAAIhpB,OACpBA,EAAO2+C,oBAEoC,mBAD/BvxD,KAAKugB,MAAQxY,EAAKu7B,iBAAiB/3B,OAAO2kD,iBAAmBnoD,EAAKu7B,MAAQ,MACvEkuB,0BACfxxD,KAAKsxD,iCAAkC,GAGzClZ,cAAcp4C,KAAKsiD,OACnBtiD,KAAKsiD,MAAQ/J,YAAYv4C,KAAKyxD,iBAAiB7vD,KAAK5B,MAAO4S,EAAO8+C,8B,EAItEC,SAAA,SAAUpxC,EAAOqxC,EAAeC,GAC9B,IAAIzb,EAAcvhB,GAAYrG,MAC9B,GAAIojC,EAAe,CACjB,GAAI5xD,KAAK8xD,SAAU,CACjB,IAAIC,EAAgB3b,EAAcp2C,KAAK8xD,SACrCE,EAAiBH,EAAgB7xD,KAAKiyD,kBACtCC,EAAiBN,EAAgB5xD,KAAKmyD,kBACtCC,EAAa,IAAOJ,EAAiBD,EACrCn2B,EAAM57B,KAAK47B,IAEb,GADAA,EAAI9nB,QAAQC,IAAMjN,SAAU,CAAEkrD,eAAgBA,EAAgBE,eAAgBA,EAAgBG,mBAAoBR,IAC9GO,EAAa,GAEXJ,EAAiBp2B,EAAIhpB,OAAO0/C,8BAAgCJ,EAAgB,CAC9E,IAAI1S,EAAe5jB,EAAI4jB,aACvB37C,IAAOpB,KAAK,mEAAqE+8C,GAC7EA,EAAe,KAAgC,IAA1B5jB,EAAI8zB,kBAA2B9zB,EAAI8zB,kBAAoBlQ,KAC9EA,GAA8B,EAC9B5jB,EAAI9nB,QAAQC,IAAMhN,uBAAwB,CAAEk3B,MAAOuhB,EAAcyQ,aAAcr0B,EAAI4jB,eACnF5jB,EAAI8zB,iBAAmBlQ,EACvB5jB,EAAI20B,iBAAiB1S,oBAK7B79C,KAAK8xD,SAAW1b,EAChBp2C,KAAKiyD,kBAAoBJ,EACzB7xD,KAAKmyD,kBAAoBP,I,EAI7BH,iBAAA,WACE,IAAMlxC,EAAQvgB,KAAKugB,MACnB,GAAIA,EACF,GAAIvgB,KAAKsxD,gCAAiC,CACxC,IAAIiB,EAAuBhyC,EAAMixC,0BACjCxxD,KAAK2xD,SAASpxC,EAAOgyC,EAAqBC,iBAAkBD,EAAqBE,yBAEjFzyD,KAAK2xD,SAASpxC,EAAOA,EAAMmyC,wBAAyBnyC,EAAMoyC,0B,GA/DtCh3B,GC0Jbi3B,G,WA7Jb,WAAahgD,GACPA,GAAUA,EAAOigD,WACnB7yD,KAAK6yD,SAAWjgD,EAAOigD,U,2BAI3BrgD,QAAA,WACExS,KAAKwnC,QACLxnC,KAAKm+B,OAAS,M,EAGhBqJ,MAAA,WACE,IAAIrJ,EAASn+B,KAAKm+B,OACdA,GAAgC,IAAtBA,EAAOme,aACnBt8C,KAAKs1B,MAAMqzB,SAAU,EACrBxqB,EAAOqJ,SAGTj8B,OAAOktC,aAAaz4C,KAAK8yD,gBACzB9yD,KAAK8yD,eAAiB,KACtBvnD,OAAOktC,aAAaz4C,KAAK+yD,cACzB/yD,KAAK+yD,aAAe,M,EAGtBnsB,KAAA,SAAMlyB,EAAS9B,EAAQogD,GACrBhzD,KAAK0U,QAAUA,EACf1U,KAAK4S,OAASA,EACd5S,KAAKgzD,UAAYA,EACjBhzD,KAAKs1B,MAAQ,CAAE6uB,SAAU54C,OAAOspB,YAAYrG,MAAOykC,MAAO,GAC1DjzD,KAAKqnC,WAAaz0B,EAAOy0B,WACzBrnC,KAAKkzD,gB,EAGPA,aAAA,WACE,IAAIC,EAAKz+C,EAAU1U,KAAK0U,QACxBy+C,EAAMnzD,KAAKm+B,OAAS,IAAI5yB,OAAO6nD,eAE/B,IAAI99B,EAAQt1B,KAAKs1B,MACjBA,EAAM2rB,OAAS,EACf3rB,EAAM6V,OAAS,EACf,IAAM0nB,EAAW7yD,KAAK6yD,SAEtB,IACE,GAAIA,EACF,IACEA,EAASM,EAAKz+C,EAAQnK,KACtB,MAAO3G,GAGPuvD,EAAIE,KAAK,MAAO3+C,EAAQnK,KAAK,GAC7BsoD,EAASM,EAAKz+C,EAAQnK,KAGrB4oD,EAAI7W,YACP6W,EAAIE,KAAK,MAAO3+C,EAAQnK,KAAK,GAE/B,MAAO3G,GAGP,YADA5D,KAAKgzD,UAAU3qB,QAAQ,CAAE2mB,KAAMmE,EAAIG,OAAQhpD,KAAM1G,EAAEiQ,SAAWa,EAASy+C,GAIrEz+C,EAAQo1B,UACVqpB,EAAII,iBAAiB,QAAS,SAAW7+C,EAAQm1B,WAAa,KAAOn1B,EAAQo1B,SAAW,IAG1FqpB,EAAIK,mBAAqBxzD,KAAKyzD,iBAAiB7xD,KAAK5B,MACpDmzD,EAAIO,WAAa1zD,KAAKyrC,aAAa7pC,KAAK5B,MACxCmzD,EAAIrsB,aAAepyB,EAAQoyB,aAG3B9mC,KAAK8yD,eAAiBvnD,OAAOotC,WAAW34C,KAAKwoC,YAAY5mC,KAAK5B,MAAOA,KAAK4S,OAAOw0B,SACjF+rB,EAAIQ,Q,EAGNF,iBAAA,SAAkB3+C,GAChB,IAAIq+C,EAAMr+C,EAAM8+C,cACdtX,EAAa6W,EAAI7W,WACjBhnB,EAAQt1B,KAAKs1B,MACb5gB,EAAU1U,KAAK0U,QACf9B,EAAS5S,KAAK4S,OAGhB,IAAI0iB,EAAMqzB,SAKNrM,GAAc,EAOhB,GALA/wC,OAAOktC,aAAaz4C,KAAK8yD,gBACJ,IAAjBx9B,EAAM2rB,SACR3rB,EAAM2rB,OAASn3C,KAAK4lB,IAAInkB,OAAOspB,YAAYrG,MAAO8G,EAAM6uB,WAGvC,IAAf7H,EAAkB,CACpB,IAAIgX,EAASH,EAAIG,OAEjB,GAAIA,GAAU,KAAOA,EAAS,IAAK,CAEjC,IAAIvrD,EAAMoD,EADVmqB,EAAMuT,MAAQ/+B,KAAK4lB,IAAI4F,EAAM2rB,OAAQ11C,OAAOspB,YAAYrG,OAItDrjB,EAF2B,gBAAzBuJ,EAAQoyB,cACV/+B,EAAOorD,EAAIjtB,UACAx8B,YAEX3B,EAAOorD,EAAIU,cACA5rD,OAEbqtB,EAAM6V,OAAS7V,EAAM0rB,MAAQ71C,EAC7B,IAAI+6B,EAAW,CAAE37B,IAAK4oD,EAAIW,YAAa/rD,KAAMA,GAC7C/H,KAAKgzD,UAAU7qB,UAAUjC,EAAU5Q,EAAO5gB,EAASy+C,QAG/C79B,EAAM29B,OAASrgD,EAAOu0B,UAAamsB,GAAU,KAAOA,EAAS,KAC/DzvD,IAAOlB,MAAS2wD,EAAhB,kBAAwC5+C,EAAQnK,KAChDvK,KAAKgzD,UAAU3qB,QAAQ,CAAE2mB,KAAMsE,EAAQhpD,KAAM6oD,EAAIY,YAAcr/C,EAASy+C,KAGxEtvD,IAAOpB,KAAQ6wD,EAAf,kBAAuC5+C,EAAQnK,IAA/C,iBAAmEvK,KAAKqnC,WAAxE,OAEArnC,KAAKwS,UAELxS,KAAK+yD,aAAexnD,OAAOotC,WAAW34C,KAAKkzD,aAAatxD,KAAK5B,MAAOA,KAAKqnC,YAEzErnC,KAAKqnC,WAAav9B,KAAKoS,IAAI,EAAIlc,KAAKqnC,WAAYz0B,EAAO00B,eACvDhS,EAAM29B,cAKVjzD,KAAK8yD,eAAiBvnD,OAAOotC,WAAW34C,KAAKwoC,YAAY5mC,KAAK5B,MAAO4S,EAAOw0B,U,EAKlFoB,YAAA,WACE3kC,IAAOpB,KAAP,yBAAqCzC,KAAK0U,QAAQnK,KAClDvK,KAAKgzD,UAAUzqB,UAAUvoC,KAAKs1B,MAAOt1B,KAAK0U,QAAS,O,EAGrD+2B,aAAA,SAAc32B,GACZ,IAAIq+C,EAAMr+C,EAAM8+C,cACdt+B,EAAQt1B,KAAKs1B,MAEfA,EAAM6V,OAASr2B,EAAMq2B,OACjBr2B,EAAMk/C,mBACR1+B,EAAM0rB,MAAQlsC,EAAMksC,OAGtB,IAAIxV,EAAaxrC,KAAKgzD,UAAUxnB,WAC5BA,GAEFA,EAAWlW,EAAOt1B,KAAK0U,QAAS,KAAMy+C,I,gLC4P7Bc,G,oBAhYb,WAAar4B,GAAK,aAChB,cAAMA,EACJ7nB,IAAMpP,iBACNoP,IAAMlP,gBACNkP,IAAMtO,mBACNsO,IAAMxO,qBACNwO,IAAM9O,aACN8O,IAAM/M,QANR,MAcKktD,UAAY,EAOjB,EAAKC,qBAAsB,EAO3B,EAAK3nC,OAAS,GAOd,EAAK4nC,iBAAmBtzD,OAAOY,OAAO,MAQtC,EAAK0iD,aAAe,KA5CJ,E,wHAkDlBzd,kBAAA,WACE3mC,KAAKwsB,OAAS,GACdxsB,KAAKk0D,UAAY,EACjBl0D,KAAKm0D,qBAAsB,G,EAU7BrV,iBAAA,SAAkB/2C,GAChB,IAAMykB,EAASxsB,KAAKwsB,OAASzkB,EAAKmhC,aAAe,GACjDlpC,KAAK47B,IAAI9nB,QAAQC,IAAM1O,qBAAsB,CAAE6jC,YAAa1c,IAE5DxsB,KAAKq0D,kBAAkBr0D,KAAK47B,IAAIgf,gB,EAUlC0Z,mBAAA,SAAoBvsD,GAClB,GAAIA,EAAK6R,IAAM5Z,KAAKwsB,OAAOvkB,OACzBpE,IAAOpB,KAAK,0BAA2BsF,EAAK6R,QAD9C,CAWA,GANA/V,IAAOrB,IAAP,cAAyBuF,EAAK6R,GAA9B,WAEA5Z,KAAKwsB,OAAOzkB,EAAK6R,IAAI3F,QAAUlM,EAAKkM,QAIhClM,EAAKkM,QAAQmrB,OAASp/B,KAAKq4C,cAAe,CAG5C,IAAMkc,EAA+C,IAA9BxsD,EAAKkM,QAAQwrB,eACpCz/B,KAAKu4C,YAAYgc,IAGdxsD,EAAKkM,QAAQmrB,MAAQp/B,KAAKq4C,eAE7Br4C,KAAKo4C,kB,EAYTsI,qBAAA,SAAsB34C,GACpB,IAAMq8C,EAAepkD,KAAKwsB,OAAOzkB,EAAK6R,IAAI2pB,QACtC6gB,GAAiBpkD,KAAKokD,eAAiBA,IACzCpkD,KAAKokD,aAAeA,I,EAaxBlF,cAAA,SAAen3C,GACb/H,KAAKq0D,kBAAkBtsD,EAAKk2B,Q,EAS9BoK,QAAA,SAAStgC,GAEHA,EAAKjF,OAASwE,IAAWyiC,gBAKzBhiC,EAAKoM,OACPnU,KAAKo4C,gBAIHrwC,EAAKkM,UAAY1M,IAAaojC,yBAIlC9mC,IAAOpB,KAAK,qCAAsCsF,EAAK2M,QAAQkF,IAC/D5Z,KAAKw0D,sB,EA8BPC,eAAA,SAAgBC,GAEd,GAAI10D,KAAKk0D,WAAaQ,GAAS10D,KAAKwsB,OAAOxsB,KAAKk0D,UAAUjgD,QACxDpQ,IAAOtB,MAAM,oFAKf,GAAImyD,EAAQ,GAAKA,GAAS10D,KAAKwsB,OAAOvkB,OACpCpE,IAAOpB,KAAK,mDADd,CAKA,IAAM2f,EAAapiB,KAAKwsB,OAAOkoC,GAE/B7wD,IAAOrB,IAAP,sCAAiDkyD,GAGjD10D,KAAKo4C,gBACLp4C,KAAKk0D,SAAWQ,EAnBK,IAqBbnqD,EAAkB6X,EAAlB7X,IAAKzH,EAAasf,EAAbtf,KAAM8W,EAAOwI,EAAPxI,GACnB5Z,KAAK47B,IAAI9nB,QAAQC,IAAMzO,sBAAuB,CAAEsU,KAAI9W,OAAMyH,QAC1DvK,KAAK20D,0BAA0BvyC,K,EAMjCs2B,OAAA,WACE14C,KAAK40D,aAAa50D,KAAKk0D,W,EAOzBG,kBAAA,SAAmB9qB,GACjB,IAAM6R,EAAYp7C,KAAK47B,IAAIuG,OAAOoH,GAElC,GAAK6R,GAAcA,EAAUhK,cAA7B,CAIA,IAAMgT,EAAehJ,EAAUhK,cAAcgK,EAAUpd,OACnDh+B,KAAKokD,eAAiBA,IACxBpkD,KAAKokD,aAAeA,EACpBpkD,KAAK60D,8B,EAQTA,yBAAA,WAA4B,WACtBroC,EAASxsB,KAAKwsB,OAClB,GAAKA,EAAOvkB,OAAZ,CAIA,IAAM6sD,EAAoB90D,KAAKwsB,OAAOxsB,KAAKk0D,UAEvCvzD,EAAO,KAMX,GALIm0D,IACFn0D,EAAOm0D,EAAkBn0D,MAIvBX,KAAKm0D,oBAAqB,CAC5B,IAAMY,EAAgBvoC,EAAOwH,QAAO,SAAC1c,GAAD,OAAWA,EAAMghB,WACjDy8B,EAAc9sD,OAChBukB,EAASuoC,EAETlxD,IAAOpB,KAAK,mCAIhB,IAAIuyD,GAAa,EAEXC,EAAiB,WAErBzoC,EAAO9oB,SAAQ,SAAC4T,GACV09C,GAKE,EAAK5Q,cAAgB9sC,EAAMisB,UAAY,EAAK6gB,cAC9CzjD,GAAQA,IAAS2W,EAAM3W,OAGzB,EAAK8zD,eAAen9C,EAAMsC,IAC1Bo7C,GAAa,OAKnBC,IAEKD,IACHr0D,EAAO,KACPs0D,KAGGD,IACHnxD,IAAOlB,MAAP,8CAA2D3C,KAAKokD,cAEhEpkD,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAW0M,YACjBC,QAAS1M,IAAaojC,uBACtBx2B,OAAO,O,EAUb+gD,mBAAA,SAAoB9yC,GAAY,IACtBnO,EAAiBmO,EAAjBnO,QAAS1J,EAAQ6X,EAAR7X,IAEjB,QAAK0J,IAAWA,EAAQmrB,SAEb70B,G,EAUboqD,0BAAA,SAA2BvyC,GACzB,GAAIpiB,KAAKk1D,mBAAmB9yC,GAAa,KAC/B7X,EAAY6X,EAAZ7X,IAAKqP,EAAOwI,EAAPxI,GAEb/V,IAAOrB,IAAP,wCAAmDoX,GACnD5Z,KAAK47B,IAAI9nB,QAAQC,IAAMvO,oBAAqB,CAAE+E,MAAKqP,S,EAQvDg7C,aAAA,SAAcF,GAEZ,KAAIA,EAAQ,GAAKA,GAAS10D,KAAKwsB,OAAOvkB,QAAtC,CAKAjI,KAAKo4C,gBACLp4C,KAAKk0D,SAAWQ,EAChB7wD,IAAOrB,IAAP,gCAA2CkyD,GAC3C,IAAMtyC,EAAapiB,KAAKwsB,OAAOkoC,GAC/B10D,KAAK20D,0BAA0BvyC,K,EAMjCoyC,iBAAA,WAEEx0D,KAAKo0D,iBAAiBp0D,KAAKk0D,WAAY,EAGvC,IAAMiB,EAAan1D,KAAKk0D,SALN,EAMkBl0D,KAAKwsB,OAAO2oC,GAAxCx0D,EANU,EAMVA,KAAMy0D,EANI,EAMJA,SAAU7xB,EANN,EAMMA,QAExB1/B,IAAOpB,KAAP,qCAAiD0yD,EAAjD,eAA0E5xB,EAA1E,qBAAsG5iC,EAAtG,QAAkHy0D,EAAlH,KAKA,IADA,IAAIV,EAAQS,EACH/0D,EAAI,EAAGA,EAAIJ,KAAKwsB,OAAOvkB,OAAQ7H,IAAK,CAC3C,IAAIJ,KAAKo0D,iBAAiBh0D,GAI1B,GADiBJ,KAAKwsB,OAAOpsB,GAChBO,OAASA,EAAM,CAC1B+zD,EAAQt0D,EACR,OAIAs0D,IAAUS,GAKdtxD,IAAOrB,IAAI,sCAAuCkyD,EAAO,YAAa10D,KAAKwsB,OAAOkoC,GAAOnxB,SAEzFvjC,KAAKy0D,eAAeC,IANlB7wD,IAAOpB,KAAP,qDAAiE9B,EAAjE,QAA6Ey0D,EAA7E,M,0CAtNF,OAAOp1D,KAAKwsB,S,iCAOZ,OAAOxsB,KAAKk0D,U,aAMEQ,GACd10D,KAAKy0D,eAAeC,GAEpB10D,KAAKm0D,qBAAsB,O,gCAjLItc,I,2KCP3BhjB,GAAgBtpB,OAAhBspB,YAiyBOwgC,G,oBA5xBb,WAAaz5B,EAAKga,GAAiB,aACjC,cAAMha,EACJ7nB,IAAM/P,eACN+P,IAAM9P,gBACN8P,IAAM1O,qBACN0O,IAAMzO,sBACNyO,IAAMtO,mBACNsO,IAAM5M,WACN4M,IAAM1N,YACN0N,IAAMxN,0BACNwN,IAAMrN,kBACNqN,IAAMpN,YACNoN,IAAM/M,MACN+M,IAAM5P,aACN4P,IAAM1P,eACN0P,IAAMxP,gBACNwP,IAAMrP,eACNqP,IAAM9N,iBAhBR,MAiBK2vC,gBAAkBA,EACvB,EAAKhjC,OAASgpB,EAAIhpB,OAClB,EAAKsnC,gBAAiB,EACtB,EAAKC,OAASvB,GACd,EAAKzoB,QAAU,GACf,EAAKmlC,gBAAkB,KACvB,EAAKC,aAAe,KACpB,EAAKC,eAAiB,KAzBW,E,wHA6BnCC,eAAA,SAAgB1tD,GACd,IAAI2tD,EAAY3tD,EAAK6R,GAAIikB,EAAK91B,EAAK4c,KAAKkZ,GAAI1N,EAAUpoB,EAAKooB,QACzC,SAAdulC,IAGF11D,KAAKmwB,QAAQ0N,GAAM1N,EACnBnwB,KAAKu1D,aAAe13B,EACpBh6B,IAAOrB,IAAP,mBAA8Bq7B,EAA9B,qBAAqD1N,GAIjDnwB,KAAK2nB,QAAUixB,IACjB54C,KAAKk4C,S,EAKXY,UAAA,SAAWY,GACT,GAAI15C,KAAKwsB,OAAQ,CACf,IAAI2pB,EAAkBn2C,KAAKm2C,gBAC3Bn2C,KAAK+4C,WACL/4C,KAAKu4C,YArDW,KAsDhBv4C,KAAKu6C,cAAgB,EACjBpE,EAAkB,IAAwB,IAAnBuD,GACzB71C,IAAOrB,IAAP,sDAAiE2zC,EAAgB5C,QAAQ,IACzFvzC,KAAK2nB,MAAQixB,KAEb54C,KAAKm2C,gBAAkBn2C,KAAK05C,cAAgB15C,KAAK05C,cAAgBA,EACjE15C,KAAK2nB,MAAQixB,IAEf54C,KAAKy5C,iBAAmBz5C,KAAK05C,cAAgB15C,KAAKm2C,gBAClDn2C,KAAKk4C,YAELl4C,KAAK05C,cAAgBA,EACrB15C,KAAK2nB,MAAQixB,I,EAgBjBF,OAAA,WACE,IAAIpxB,EAAKhQ,EAAOq+C,EAAc/5B,EAAM57B,KAAK47B,IAAKhpB,EAASgpB,EAAIhpB,OAE3D,OAAQ5S,KAAK2nB,OACb,KAAKixB,GAEL,KAAKA,GAEL,KAAKA,GACH,MACF,KAAKA,GACH54C,KAAK2nB,MAAQixB,GACb54C,KAAKw5C,gBAAiB,EACtB,MACF,KAAKZ,GACH,IAAMpsB,EAASxsB,KAAKwsB,OAEpB,IAAKA,EACH,MAOF,IAAKxsB,KAAKsjC,QACLtjC,KAAKw6C,qBAAuB5nC,EAAOuoC,mBACtC,MAMF,GAAIn7C,KAAKw5C,eACPlyB,EAAMtnB,KAAKsjC,MAAM8S,iBAGjB,QAAY3jC,KADZ6U,EAAMtnB,KAAKy5C,kBAET,MAGJ,IAAInW,EAAQtjC,KAAKo5C,YAAcp5C,KAAKo5C,YAAcp5C,KAAKsjC,MACjDqd,EAAc3gD,KAAK2gD,YAAc3gD,KAAK2gD,YAAc3gD,KAAKsjC,MACzDxQ,EAAgBxL,EAAM1U,EAAOkgB,cAAgBhpB,KAAK4lB,If5I5B,Ee4IoD9c,EAAOkgB,eAAiBlgB,EAAOkgB,cACzGqc,EAAaF,EAAaE,WAAW7L,EAAOhc,EAAKwL,GACjD8iC,EAAiB3mB,EAAaE,WAAWwR,EAAar5B,EAAKwL,GAC3D+c,EAAYV,EAAWhkC,IACzB4kC,EAAYZ,EAAWjmC,IACrBksC,EAAep1C,KAAKo1C,aAIpBygB,EAAkB/rD,KAAKoS,IAAItJ,EAAO4oC,gBAAiB5oC,EAAO6oC,oBAC1DJ,EAAYvxC,KAAK4lB,IAAImmC,EAAiBD,EAAezqD,KACrD2qD,EAAc91D,KAAK81D,YACnBx+B,EAAUt3B,KAAKs3B,QAGrB,IAAKuY,EAAYwL,GAAaya,IAAgBx+B,EAAU9K,EAAOvkB,OAAQ,CAGrE,QAA4B,KAF5B0tD,EAAenpC,EAAO8K,GAASrjB,SAEU,CACvCjU,KAAK2nB,MAAQixB,GACb,MAGF,IAAKkd,GAAe91D,KAAKi5C,aAAa9J,EAAYwmB,GAGhD,OAFA31D,KAAK47B,IAAI9nB,QAAQC,IAAMvP,WAAY,CAAE1B,KAAM,eAC3C9C,KAAK2nB,MAAQixB,IAKf,IAIEj0B,EAJEwa,EAAYw2B,EAAax2B,UAC3Bwc,EAAUxc,EAAUl3B,OACpB8Z,EAAQod,EAAU,GAAGpd,MACrB7Y,EAAMi2B,EAAUwc,EAAU,GAAG55B,MAAQod,EAAUwc,EAAU,GAAGliC,SAI9D,GAAIq8C,EACF,GAAIH,EAAav2B,OAASu2B,EAAa1jB,SACrCpuC,IAAOrB,IAAI,sEACXutC,EAAY,OAIZ,GAFAA,EAAYzoB,EAERquC,EAAa1jB,UAAY3qB,EAAMvF,EAAO,CAExC,KAAIotB,EAAWjmC,IAAM6Y,GAASotB,EAAWI,WAIvC,OAHA1rC,IAAOrB,IAAI,yEACXxC,KAAKsjC,MAAM8S,YAAcr0B,EAAQ,IAOzC,GAAI4zC,EAAap8C,cAAgBo8C,EAAap8C,YAAYxR,KACxD4c,EAAOgxC,EAAap8C,iBAGjB,GAAIw2B,GAAahuB,GAMpB,GALA4C,EAAOwa,EAAU,GACS,OAAtBn/B,KAAKu1D,cAAyB5wC,EAAKkZ,KAAO79B,KAAKu1D,eAEjD5wC,EjBhML,SAAyBwa,EAAW42B,GACzC,OAAOvnB,EAAaC,OAAOtP,GAAW,SAACqW,GACrC,OAAIA,EAAU3X,GAAKk4B,EACV,EACEvgB,EAAU3X,GAAKk4B,GAChB,EAED,KiByLMC,CAAe72B,EAAWn/B,KAAKu1D,eAEpCI,EAAav2B,MAAQza,EAAKsxC,SAAWtxC,EAAKsxC,UAAYj2D,KAAKk2D,YAAa,CAG1E,IAAMC,EAAehnB,EAAWI,UAAYJ,EAAWI,UAAYxtB,EAGnE,OAFAle,IAAOrB,IAAP,uCAAkDxC,KAAKsjC,MAAM8S,YAA7D,eAAsF+f,EAAe,WACrGn2D,KAAKsjC,MAAM8S,YAAc+f,EAAe,UAGrC,CACL,IAAIC,EACArhB,EAAyBniC,EAAOmiC,uBAC9BM,EAAWD,EAAejW,EAAUiW,EAAa9oB,GAAK6S,EAAU,GAAG7S,GAAK,QAAK7Z,EAE/Es9B,EAAY7mC,GACV6mC,EAAY7mC,EAAM6rC,IACpBA,EAAyB,GAKzBqhB,EADE/gB,IAAaC,GAA4BvF,EAAWgF,EAAwBM,GAClEA,EAEA7G,EAAaC,OAAOtP,GAAW,SAACxa,GAAD,OAAU2wB,GAA4BvF,EAAWgF,EAAwBpwB,OAItHyxC,EAAYj3B,EAAUwc,EAAU,GAE9Bya,IACFzxC,EAAOyxC,EACPr0C,EAAQq0C,EAAUr0C,MAEdqzB,GAAgBzwB,EAAKsZ,QAAUmX,EAAanX,OAAStZ,EAAK2H,KAAO8oB,EAAa9oB,KAC5E3H,EAAK2H,GAAKqpC,EAAaz2B,OACzBva,EAAOwa,EAAUxa,EAAK2H,GAAK,EAAIqpC,EAAap2B,SACxCv/B,KAAK41C,gBAAgB3H,SAAStpB,KAAUwnB,GAC1CtoC,IAAOrB,IAAP,kCAA6CmiB,EAAK2H,KAGpD3H,EAAO,OAKXA,IAEEA,EAAKo3B,WACPl4C,IAAOrB,IAAP,mBAA8BmiB,EAAK2H,GAAnC,QAA6CqpC,EAAap2B,QAA1D,KAAsEo2B,EAAaz2B,MAAnF,WAAmG5H,GACnGt3B,KAAK2nB,MAAQixB,GACbhd,EAAI9nB,QAAQC,IAAM7M,YAAa,CAAEyd,KAAMA,MAIvC3kB,KAAKg5C,YAAcr0B,GACfmxC,GAAe91D,KAAK41C,gBAAgB3H,SAAStpB,KAAUwnB,KACzDtoC,IAAOrB,IAAP,WAAsBmiB,EAAK2H,GAA3B,SAAsC3H,EAAKkZ,GAA3C,QAAqD83B,EAAap2B,QAAlE,KAA8Eo2B,EAAaz2B,MAA3F,WAA2G5H,EAA3G,MACEt3B,KAAKw5C,eAAiB,cAAgB,oBADxC,KAEKlyB,EAFL,gBAEwByoB,EAAUwD,QAAQ,IAE1B,gBAAZ5uB,EAAK2H,KACPtsB,KAAKw6C,oBAAqB,GAExB,YAAgB71B,EAAK2H,MACvBtsB,KAAKy5C,iBAAmB90B,EAAK5C,MAAQ4C,EAAKlL,UAG5CmiB,EAAI9nB,QAAQC,IAAM7N,aAAc,CAAEye,SAClC3kB,KAAK2nB,MAAQixB,MAKrB,MACF,KAAKA,IACHthC,EAAQtX,KAAKwsB,OAAOxsB,KAAKs3B,WAEZhgB,EAAMrD,UACjBjU,KAAK2nB,MAAQixB,IAGf,MACF,KAAKA,GACH,IAAIpqB,EAAMqG,GAAYrG,MAClBusB,EAAY/6C,KAAK+6C,UAEjBsb,GADJ/yB,EAAQtjC,KAAKsjC,QACYA,EAAM2S,UAE1B8E,GAAcvsB,GAAOusB,GAAcsb,KACtCxyD,IAAOrB,IAAI,uEACXxC,KAAK2nB,MAAQixB,IAEf,MACF,KAAKA,GAEH,IAAM0d,EAAct2D,KAAKs1D,gBACzB,GAAIgB,EAAa,CACf,IAAMC,EAAgBD,EAAY3xC,KAAKkZ,GACvC,QAAoCprB,IAAhCzS,KAAKmwB,QAAQomC,GACfv2D,KAAKs1D,gBAAkB,KACvBt1D,KAAK2nB,MAAQixB,GACb54C,KAAKkuC,aAAaooB,QACb,GAAIt2D,KAAKu1D,eAAiBv1D,KAAKw1D,eAEpC3xD,IAAOrB,IAAP,wBAAmC+zD,EAAnC,sCAAsFv2D,KAAKu1D,cAC3Fv1D,KAAKw2D,2BACA,CAEL,IAAMrnB,EAAaF,EAAaE,WAAWnvC,KAAKo5C,YAAap5C,KAAKsjC,MAAM8S,YAAaxjC,EAAOkgB,eAC1DwiB,GAA4BnG,EAAWjmC,IAAK0J,EAAOmiC,uBAAwBuhB,EAAY3xC,MACzF,IAC9B9gB,IAAOrB,IAAP,wBAAmC+zD,EAAnC,OAAuDD,EAAY3xC,KAAK5C,MAAxE,0CAAuHotB,EAAWjmC,IAAlI,cACAlJ,KAAKw2D,8BAITx2D,KAAK2nB,MAAQixB,K,EAenB4d,qBAAA,WACE,IAAMF,EAAct2D,KAAKs1D,gBACrBgB,IACFt2D,KAAK41C,gBAAgBvI,eAAeipB,EAAY3xC,MAChD3kB,KAAKs1D,gBAAkB,KACvBt1D,KAAKw1D,eAAiB,KACtBx1D,KAAK2nB,MAAQixB,K,EAIjB2F,gBAAA,SAAiBx2C,GACf,IAAIu7B,EAAQtjC,KAAKsjC,MAAQtjC,KAAKo5C,YAAcrxC,EAAKu7B,MACjDtjC,KAAKw+C,WAAax+C,KAAKm5C,eAAev3C,KAAK5B,MAC3CA,KAAK2+C,SAAW3+C,KAAK25C,aAAa/3C,KAAK5B,MACvCsjC,EAAMlI,iBAAiB,UAAWp7B,KAAKw+C,YACvClb,EAAMlI,iBAAiB,QAASp7B,KAAK2+C,UACrC,IAAI/rC,EAAS5S,KAAK4S,OACd5S,KAAKwsB,QAAU5Z,EAAOgsC,eACxB5+C,KAAK84C,UAAUlmC,EAAO8mC,gB,EAI1BmF,iBAAA,WACE,IAAIvb,EAAQtjC,KAAKsjC,MACbA,GAASA,EAAMkT,QACjB3yC,IAAOrB,IAAI,sDACXxC,KAAK05C,cAAgB15C,KAAKm2C,gBAAkB,GAI1C7S,IACFA,EAAMwN,oBAAoB,UAAW9wC,KAAKw+C,YAC1Clb,EAAMwN,oBAAoB,QAAS9wC,KAAK2+C,UACxC3+C,KAAKw+C,WAAax+C,KAAKy+C,UAAYz+C,KAAK2+C,SAAW,MAErD3+C,KAAKsjC,MAAQtjC,KAAKo5C,YAAcp5C,KAAK2gD,YAAc,KACnD3gD,KAAKw5C,gBAAiB,EACtBx5C,KAAK41C,gBAAgBrH,qBACrBvuC,KAAK+4C,Y,EAGP0d,qBAAA,SAAsB1uD,GACpBlE,IAAOrB,IAAI,wBACXxC,KAAKwsB,OAASzkB,EAAKmhC,a,EAGrBsX,sBAAA,SAAuBz4C,GAErB,IAAIsyC,IAAatyC,EAAKwC,IACtBvK,KAAKs3B,QAAUvvB,EAAK6R,GAEpB5Z,KAAKg5C,YAAc,KACnBh5C,KAAKw2D,uBACLx2D,KAAK2nB,MAAQixB,GAERyB,EAOHr6C,KAAKu4C,YA9XW,KAwXZv4C,KAAKg1B,UACPh1B,KAAKg1B,QAAQxiB,UACbxS,KAAKg1B,QAAU,MAQfqlB,IACFr6C,KAAK81D,aAAc,EAEnB91D,KAAK2nB,MAAQixB,IAEf54C,KAAKk4C,Q,EAGPoc,mBAAA,SAAoBvsD,GAClB,IAAIqqC,EAAarqC,EAAKkM,QACpBqjB,EAAUvvB,EAAK6R,GACftC,EAAQtX,KAAKwsB,OAAO8K,GACpB0c,EAAa18B,EAAMrD,QACnBwF,EAAW24B,EAAW1S,cACtB+T,EAAU,EA0BZ,GAxBA5vC,IAAOrB,IAAP,SAAoB80B,EAApB,YAAuC8a,EAAW7S,QAAlD,IAA6D6S,EAAWlT,MAAxE,cAA2FzlB,GAEvF24B,EAAWhT,MAAS4U,GAAcA,EAAW5U,KAC3C4U,GAAc5B,EAAWjT,UAAUl3B,OAAS,GAE9Co3C,GAAyBrL,EAAY5B,GACrCqB,EAAUrB,EAAWjT,UAAU,GAAGpd,MAG9BqwB,EAAWH,SACbpuC,IAAOrB,IAAP,+BAA0CixC,EAAQF,QAAQ,IAE1D1vC,IAAOrB,IAAI,yDAGb4vC,EAAWH,UAAW,EACtBpuC,IAAOrB,IAAI,sDAGb4vC,EAAWH,UAAW,EAExB36B,EAAMrD,QAAUm+B,GAGXpyC,KAAKw6C,mBAAoB,CAE5B,IAA4B,IAAxBx6C,KAAK05C,cAAsB,CAE7B,IAAIla,EAAkB4S,EAAW5S,gBAC7B,YAAgBA,IAClB37B,IAAOrB,IAAP,gEAA2Eg9B,GAC3Ex/B,KAAK05C,cAAgBla,GAEjB4S,EAAWhT,MACbp/B,KAAK05C,cAAgB15C,KAAK45C,oBAAoBnG,EAASrB,GACvDvuC,IAAOrB,IAAP,4CAAuDxC,KAAK05C,gBAE5D15C,KAAK05C,cAAgB,EAI3B15C,KAAKy5C,iBAAmBz5C,KAAK05C,cAG3B15C,KAAK2nB,QAAUixB,KACjB54C,KAAK2nB,MAAQixB,IAIf54C,KAAKk4C,Q,EAGPoH,YAAA,WACMt/C,KAAK2nB,QAAUixB,KACjB54C,KAAK2nB,MAAQixB,GACb54C,KAAKk4C,S,EAIThK,aAAA,SAAcnmC,GACZ,IAAIixC,EAAch5C,KAAKg5C,YACrBuG,EAAax3C,EAAK4c,KACpB,GAAI3kB,KAAK2nB,QAAUixB,IACfI,GACoB,UAApBuG,EAAWz8C,MACXy8C,EAAWthB,QAAU+a,EAAY/a,OACjCshB,EAAWjzB,KAAO0sB,EAAY1sB,GAAI,CACpC,IAAIhV,EAAQtX,KAAKwsB,OAAOxsB,KAAKs3B,SAC3BrjB,EAAUqD,EAAMrD,QAChBwF,EAAWxF,EAAQyrB,cACnBpI,EAAU0hB,EAAY/a,MACtB3R,EAAK0sB,EAAY1sB,GACjBuR,EAAKmb,EAAYnb,GACjBtmB,EAAavX,KAAK4S,OAAOkvC,mBAAqBxqC,EAAMC,YAAc,YAClE+d,EAAQt1B,KAAKs1B,MAAQvtB,EAAKutB,MAC5B,GAAW,gBAAPhJ,EACFtsB,KAAK2nB,MAAQixB,GAEbtjB,EAAMqU,QAAUrU,EAAMmqB,UAAY5qB,GAAYrG,MAC9Cva,EAAQsF,YAAYxR,KAAOA,EAAKmkB,QAChClsB,KAAK47B,IAAI9nB,QAAQC,IAAMnN,cAAe,CAAE0uB,MAAOA,EAAO3Q,KAAMq0B,EAAap/B,GAAI,UAC7E5Z,KAAKk4C,WACA,CACLl4C,KAAK2nB,MAAQixB,GAEb54C,KAAK2/C,UAAW,EACX3/C,KAAKg1B,UACRh1B,KAAKg1B,QAAU,IAAImb,EAAQnwC,KAAK47B,IAAK,UAKvC,IAAIzL,EAAUnwB,KAAKmwB,QAAQ0N,GACvB+hB,EAAkB3rC,EAAQsF,YAActF,EAAQsF,YAAYxR,KAAO,GACvE,QAAgB0K,IAAZ0d,EAAuB,CACzBnwB,KAAK0/C,kBAAmB,EACxB77C,IAAOrB,IAAP,YAAuB8pB,EAAvB,QAAiCrY,EAAQsrB,QAAzC,KAAqDtrB,EAAQirB,MAA7D,WAA6E5H,GAG7Et3B,KAAKg1B,QAAQ3rB,KAAKtB,EAAKmkB,QAAS0zB,EAAiBroC,EAAY,KAAMyhC,EAAav/B,GADvD,EACqF0W,QAE9GtsB,IAAOrB,IAAP,4BAAuCq7B,EAAvC,sDAA+FvR,EAA/F,QAAyGrY,EAAQsrB,QAAjH,KAA6HtrB,EAAQirB,MAArI,WAAqJ5H,GACrJt3B,KAAKs1D,gBAAkBvtD,EACvB/H,KAAKw1D,eAAiBx1D,KAAKu1D,aAC3Bv1D,KAAK2nB,MAAQixB,IAInB54C,KAAKu6C,cAAgB,G,EAGvBuF,yBAAA,SAA0B/3C,GACxB,IAAMixC,EAAch5C,KAAKg5C,YACnB+G,EAAUh4C,EAAK4c,KACrB,GAAIq0B,GACY,UAAZjxC,EAAK6R,IACLmmC,EAAQzzB,KAAO0sB,EAAY1sB,IAC3ByzB,EAAQ9hB,QAAU+a,EAAY/a,OAC9Bj+B,KAAK2nB,QAAUixB,GAAe,CAChC,IAA0BthC,EAAtBkV,EAASzkB,EAAKykB,OASlB,GANIA,EAAOjM,cACFiM,EAAOjM,MAIhBjJ,EAAQkV,EAAOhM,MACJ,CACTlJ,EAAM4oC,WAAa5oC,EAAMc,MACzBd,EAAMsC,GAAK7R,EAAK6R,GAChB5Z,KAAK47B,IAAI9nB,QAAQC,IAAM3P,cAAeooB,GACtC3oB,IAAOrB,IAAP,+BAA0C8U,EAAMqC,UAAhD,0BAAmFrC,EAAM4oC,WAAzF,IAAuG5oC,EAAMc,MAA7G,KACA,IAAImB,EAAcjC,EAAMiC,YACxB,GAAIA,EAAa,CACf,IAAIm9C,EAAY,CAAE5zD,KAAM,QAASiF,KAAMwR,EAAa4mC,OAAQ,QAASC,QAAS,eAC1EpgD,KAAK81D,YACP91D,KAAK22D,YAAc,CAACD,IAEpB12D,KAAK2/C,UAAW,EAEhB3/C,KAAK0/C,kBAAmB,EACxB1/C,KAAK47B,IAAI9nB,QAAQC,IAAMzP,iBAAkBoyD,IAI7C12D,KAAKk4C,U,EAKXmI,kBAAA,SAAmBt4C,GAAM,WACjBixC,EAAch5C,KAAKg5C,YACnB+G,EAAUh4C,EAAK4c,KACrB,GAAIq0B,GACY,UAAZjxC,EAAK6R,IACS,UAAd7R,EAAKjF,MACLi9C,EAAQzzB,KAAO0sB,EAAY1sB,IAC3ByzB,EAAQ9hB,QAAU+a,EAAY/a,OAC9Bj+B,KAAK2nB,QAAUixB,GAAe,CAChC,IAAIthB,EAAUt3B,KAAKs3B,QACjBhgB,EAAQtX,KAAKwsB,OAAO8K,GACpBsE,EAAM57B,KAAK47B,IAER,YAAgB7zB,EAAK8nB,UACxB9nB,EAAK8nB,OAAS9nB,EAAKinB,SAAWgqB,EAAYv/B,SAC1C1R,EAAKsrB,OAAStrB,EAAKqrB,SAAW4lB,EAAYv/B,UAG5Cu/B,EAAYxa,oBAAoB9B,EAAsBY,OAEtDz5B,IAAOrB,IAAP,UAAqBuF,EAAKjF,KAA1B,SAAuCiF,EAAKinB,SAASukB,QAAQ,GAA7D,IAAmExrC,EAAK8nB,OAAO0jB,QAAQ,GAAvF,UAAmGxrC,EAAKqrB,SAASmgB,QAAQ,GAAzH,IAA+HxrC,EAAKsrB,OAAOkgB,QAAQ,GAAnJ,QAA6JxrC,EAAKyrB,IAClK6rB,GAA6B/nC,EAAMrD,QAAS+kC,EAAajxC,EAAKinB,SAAUjnB,EAAK8nB,QAE7E,IAAMyT,EAAQtjC,KAAKsjC,MACfszB,GAAsB,EAE1B,GAAI52D,KAAK81D,YACP,GAAIxyB,GAASA,EAAMgZ,WAAY,CAC7B,IAAIlG,EAAc9S,EAAM8S,YACxBvyC,IAAOrB,IAAI,uCAAyC4zC,GAChDA,GAAeruC,EAAKinB,WACtBnrB,IAAOrB,IAAI,8CACXxC,KAAK2nB,MAAQixB,GACbhd,EAAI9nB,QAAQC,IAAMtP,gBAAiB,CAAEgsB,YAAa,EAAG4tB,UAAW52C,OAAOwpB,kBAAmBnuB,KAAM,UAChG8zD,GAAsB,EAEtB52D,KAAK81D,aAAc,EACnBl6B,EAAI9nB,QAAQC,IAAMxO,qBAAsB,CAAEqU,GAAI0d,UAIhDt3B,KAAK81D,aAAc,EACnBl6B,EAAI9nB,QAAQC,IAAMxO,qBAAsB,CAAEqU,GAAI0d,IAIlD,IAAIq/B,EAAc32D,KAAK22D,YAEvB,IAAKA,EAGH,OAFA9yD,IAAOpB,KAAK,8FACZm5B,EAAI9nB,QAAQC,IAAM/M,MAAO,CAAElE,KAAMwE,IAAW0M,YAAaC,QAAS,KAAME,OAAO,IAI5EnU,KAAK81D,cACR,CAAC/tD,EAAKmrB,MAAOnrB,EAAKorB,OAAOzvB,SAAQ,SAAAyG,GAC3BA,GAAUA,EAAOlC,QACnB0uD,EAAYttD,KAAK,CAAEvG,KAAMiF,EAAKjF,KAAMiF,KAAMoC,EAAQg2C,OAAQ,QAASC,QAAS,aAG3EwW,GAAuBD,EAAY1uD,SACtC0uD,EAAYjzD,SAAQ,SAAAgzD,GAGd,EAAK/uC,QAAUixB,KAEjB,EAAK8G,kBAAmB,EACxB,EAAK9jB,IAAI9nB,QAAQC,IAAMzP,iBAAkBoyD,OAG7C12D,KAAK22D,YAAc,GACnB32D,KAAK2/C,UAAW,IAIpB3/C,KAAKk4C,S,EAIToI,aAAA,SAAcv4C,GACZ,IAAMixC,EAAch5C,KAAKg5C,YACnB+G,EAAUh4C,EAAK4c,KACjBq0B,GACY,UAAZjxC,EAAK6R,IACLmmC,EAAQzzB,KAAO0sB,EAAY1sB,IAC3ByzB,EAAQ9hB,QAAU+a,EAAY/a,OAC9Bj+B,KAAK2nB,QAAUixB,KACjB54C,KAAKs1B,MAAMqU,QAAU9U,GAAYrG,MACjCxuB,KAAK2nB,MAAQixB,GACb54C,KAAKugD,yB,EAITuN,cAAA,WAEE9tD,KAAKo5C,YAAcp5C,KAAK2gD,YAAc,KACtC3gD,KAAKw5C,gBAAiB,G,EAGxBoH,gBAAA,SAAiB74C,GACf,IAAIqa,EAAara,EAAKykB,OAAOhM,MACzB4B,IACFpiB,KAAKo5C,YAAch3B,EAAWjY,OAC9BnK,KAAKw5C,gBAAiB,GAEpBzxC,EAAKykB,OAAOjM,QACdvgB,KAAK2gD,YAAc54C,EAAKykB,OAAOjM,MAAMpW,S,EAIzCikC,iBAAA,SAAkBrmC,GAChB,GAAoB,UAAhBA,EAAKo4C,OAAoB,CAC3B,IAAMx4B,EAAQ3nB,KAAK2nB,MACfA,IAAUixB,IAAiBjxB,IAAUixB,KAEvC54C,KAAK0/C,iBAAoB33C,EAAKg5C,QAAU,EACxC/gD,KAAKugD,0B,EAKXA,qBAAA,WAEE,KAAIvgD,KAAK2nB,QAAUixB,IAAkB54C,KAAK2/C,UAAa3/C,KAAK0/C,kBAAmB,CAC7E,IAAI/6B,EAAO3kB,KAAKg5C,YAAa1jB,EAAQt1B,KAAKs1B,MAAOsG,EAAM57B,KAAK47B,IAC5D,GAAIjX,EAAM,CACR3kB,KAAKo1C,aAAezwB,EACpB2Q,EAAMmqB,UAAY5qB,GAAYrG,MAC9BoN,EAAI9nB,QAAQC,IAAMnN,cAAe,CAAE0uB,MAAOA,EAAO3Q,KAAMA,EAAM/K,GAAI,UACjE,IAAI0pB,EAAQtjC,KAAKo5C,YAAcp5C,KAAKo5C,YAAcp5C,KAAKsjC,MACnDA,GACFz/B,IAAOrB,IAAP,oBAA+B8wC,GAAW1sB,SAAS0c,EAAMqJ,WAEvD3sC,KAAK81D,aAAe91D,KAAK2/C,WAC3B3/C,KAAK81D,aAAc,EACnBl6B,EAAI9nB,QAAQC,IAAMxO,qBAAsB,CAAEqU,GAAI5Z,KAAKs3B,WAErDt3B,KAAK2nB,MAAQixB,GAEf54C,KAAKk4C,S,EAIT7P,QAAA,SAAStgC,GACP,IAAI4c,EAAO5c,EAAK4c,KAEhB,IAAIA,GAAsB,UAAdA,EAAK7hB,KAIjB,OAAQiF,EAAKkM,SACb,KAAK1M,IAAamkC,gBAClB,KAAKnkC,IAAaokC,kBAChB,IAAMhnB,EAAO5c,EAAK4c,KAElB,GAAIA,GAAsB,UAAdA,EAAK7hB,KACf,MAGF,IAAKiF,EAAKoM,MAAO,CACf,IAAIuuC,EAAY1iD,KAAKu6C,cACjBmI,EACFA,IAEAA,EAAY,EAGd,IAAM9vC,EAAS5S,KAAK4S,OACpB,GAAI8vC,GAAa9vC,EAAOuuC,oBAAqB,CAC3CnhD,KAAKu6C,cAAgBmI,EAErB,IAAMtB,EAAQt3C,KAAKoS,IAAIpS,KAAK4e,IAAI,EAAGg6B,EAAY,GAAK9vC,EAAOo5B,sBAAuBp5B,EAAO24B,4BACzF1nC,IAAOpB,KAAP,wDAAoE2+C,EAApE,OACAphD,KAAK+6C,UAAYlmB,GAAYrG,MAAQ4yB,EAErCphD,KAAK2nB,MAAQixB,QAEb/0C,IAAOlB,MAAP,0BAAuCoF,EAAKkM,QAA5C,+CAEAlM,EAAKoM,OAAQ,EACbnU,KAAK2nB,MAAQixB,GAGjB,MACF,KAAKrxC,IAAaojC,uBAClB,KAAKpjC,IAAamjC,yBAClB,KAAKnjC,IAAa0kC,eAClB,KAAK1kC,IAAa2kC,iBAEZlsC,KAAK2nB,QAAUixB,KAEjB54C,KAAK2nB,MAAQ5f,EAAKoM,MAAQykC,GAAcA,GACxC/0C,IAAOpB,KAAP,0BAAsCsF,EAAKkM,QAA3C,yCAA2FjU,KAAK2nB,MAAhG,eAEF,MACF,KAAKpgB,IAAa+5C,kBAEhB,GAAoB,UAAhBv5C,EAAKo4C,SAAuBngD,KAAK2nB,QAAUixB,IAAiB54C,KAAK2nB,QAAUixB,IAAe,CAC5F,IAAMtV,EAAQtjC,KAAKo5C,YACjBhD,EAAcp2C,KAAKsjC,MAAM8S,YAG3B,GAFkB9S,GAAS2L,EAAaC,WAAW5L,EAAO8S,IAAgBnH,EAAaC,WAAW5L,EAAO8S,EAAc,IAEpG,CACjB,IAAMxjC,EAAS5S,KAAK4S,OAChBA,EAAO6oC,oBAAsB7oC,EAAO4oC,kBAEtC5oC,EAAO6oC,oBAAsB,EAC7B53C,IAAOpB,KAAP,sDAAkEmQ,EAAO6oC,mBAAzE,MAEFz7C,KAAK2nB,MAAQixB,QAKb/0C,IAAOpB,KAAK,uGACZzC,KAAKg5C,YAAc,KAEnBh5C,KAAK2nB,MAAQixB,GACb54C,KAAK47B,IAAI9nB,QAAQC,IAAMtP,gBAAiB,CAAEgsB,YAAa,EAAG4tB,UAAW52C,OAAOwpB,kBAAmBnuB,KAAM,a,EAS7G4+C,gBAAA,WAAmB,WACbiV,EAAc32D,KAAK22D,YACnBA,GAAeA,EAAY1uD,QAC7BpE,IAAOrB,IAAI,4EACXm0D,EAAYjzD,SAAQ,SAAAgzD,GAClB,EAAK96B,IAAI9nB,QAAQC,IAAMzP,iBAAkBoyD,MAE3C12D,KAAK2/C,UAAW,EAChB3/C,KAAK22D,YAAc,GACnB32D,KAAK2nB,MAAQixB,KAGb54C,KAAK2nB,MAAQixB,GAEb54C,KAAKo1C,aAAe,KACpBp1C,KAAKk4C,S,kCArtBE6J,GACT,GAAI/hD,KAAK2nB,QAAUo6B,EAAW,CAC5B,IAAMC,EAAgBhiD,KAAK2nB,MAC3B3nB,KAAKm6C,OAAS4H,EACdl+C,IAAOrB,IAAP,gBAA2Bw/C,EAA3B,KAA6CD,K,eAK/C,OAAO/hD,KAAKm6C,Y,gCA7EoBtB,ICPrB,cACb,GAAsB,oBAAXttC,QAA0BA,OAAOo6C,OAC1C,OAAOp6C,OAAOo6C,OAGhB,IACIkR,EAAmB,CACrB,IAAI,EACJC,IAAI,EACJC,IAAI,GAEFC,EAAe,CACjBj1C,OAAO,EACPk1C,QAAQ,EACR/tD,KAAK,EACL+8C,MAAM,EACNC,OAAO,GAYT,SAASgR,EAAkB71D,GACzB,MAAqB,iBAAVA,MAIC21D,EAAa31D,EAAM0W,gBAChB1W,EAAM0W,eAGvB,SAASo/C,EAAQC,GAEf,IADA,IAAIh3D,EAAI,EACDA,EAAImW,UAAUtO,OAAQ7H,IAAK,CAChC,IAAIi3D,EAAO9gD,UAAUnW,GACrB,IAAK,IAAI8B,KAAKm1D,EACZD,EAAIl1D,GAAKm1D,EAAKn1D,GAIlB,OAAOk1D,EAGT,SAASzR,EAAQvwB,EAAWC,EAAS/qB,GACnC,IAAIu7C,EAAM7lD,KACNs3D,EAAU,CAEdA,YAAqB,GAUrBzR,EAAI0R,cAAe,EAOnB,IAAIC,EAAM,GACNC,GAAe,EACfC,EAAatiC,EACbuiC,EAAWtiC,EACXuiC,EAAQttD,EACRutD,EAAU,KACVC,EAAY,GACZC,GAAe,EACfC,EAAQ,OACRC,EAAa,QACbC,EAAY,GACZC,EAAiB,SACjBC,EAAQ,GACRC,EAAS,SAEbv3D,OAAOC,eAAe8kD,EAAK,KAAMsR,EAAO,GAAIG,EAAS,CACnDr2D,IAAK,WACH,OAAOu2D,GAETr7C,IAAK,SAAU9a,GACbm2D,EAAM,GAAKn2D,MAIfP,OAAOC,eAAe8kD,EAAK,cAAesR,EAAO,GAAIG,EAAS,CAC5Dr2D,IAAK,WACH,OAAOw2D,GAETt7C,IAAK,SAAU9a,GACbo2D,IAAiBp2D,MAIrBP,OAAOC,eAAe8kD,EAAK,YAAasR,EAAO,GAAIG,EAAS,CAC1Dr2D,IAAK,WACH,OAAOy2D,GAETv7C,IAAK,SAAU9a,GACb,GAAqB,iBAAVA,EACT,MAAM,IAAI0T,UAAU,uCAGtB2iD,EAAar2D,EACbrB,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,UAAWsR,EAAO,GAAIG,EAAS,CACxDr2D,IAAK,WACH,OAAO02D,GAETx7C,IAAK,SAAU9a,GACb,GAAqB,iBAAVA,EACT,MAAM,IAAI0T,UAAU,qCAGtB4iD,EAAWt2D,EACXrB,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,OAAQsR,EAAO,GAAIG,EAAS,CACrDr2D,IAAK,WACH,OAAO22D,GAETz7C,IAAK,SAAU9a,GACbu2D,EAAQ,GAAKv2D,EACbrB,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,SAAUsR,EAAO,GAAIG,EAAS,CACvDr2D,IAAK,WACH,OAAO42D,GAET17C,IAAK,SAAU9a,GACbw2D,EAAUx2D,EACVrB,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,WAAYsR,EAAO,GAAIG,EAAS,CACzDr2D,IAAK,WACH,OAAO62D,GAET37C,IAAK,SAAU9a,GACb,IAAIi3D,EAzIV,SAA+Bj3D,GAC7B,MAAqB,iBAAVA,MAIDw1D,EAAiBx1D,EAAM0W,gBACpB1W,EAAM0W,eAmIDwgD,CAAqBl3D,GAEnC,IAAgB,IAAZi3D,EACF,MAAM,IAAIE,YAAY,+CAGxBV,EAAYQ,EACZt4D,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,cAAesR,EAAO,GAAIG,EAAS,CAC5Dr2D,IAAK,WACH,OAAO82D,GAET57C,IAAK,SAAU9a,GACb02D,IAAiB12D,EACjBrB,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,OAAQsR,EAAO,GAAIG,EAAS,CACrDr2D,IAAK,WACH,OAAO+2D,GAET77C,IAAK,SAAU9a,GACb,GAAqB,iBAAVA,GAjLC,SAiLqBA,EAC/B,MAAM,IAAIm3D,YAAY,sDAGxBR,EAAQ32D,EACRrB,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,YAAasR,EAAO,GAAIG,EAAS,CAC1Dr2D,IAAK,WACH,OAAOg3D,GAET97C,IAAK,SAAU9a,GACb,IAAIi3D,EAAUpB,EAAiB71D,GAC/B,IAAKi3D,EACH,MAAM,IAAIE,YAAY,+CAGxBP,EAAaK,EACbt4D,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,WAAYsR,EAAO,GAAIG,EAAS,CACzDr2D,IAAK,WACH,OAAOi3D,GAET/7C,IAAK,SAAU9a,GACb,GAAIA,EAAQ,GAAKA,EAAQ,IACvB,MAAM,IAAIiL,MAAM,uCAGlB4rD,EAAY72D,EACZrB,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,gBAAiBsR,EAAO,GAAIG,EAAS,CAC9Dr2D,IAAK,WACH,OAAOk3D,GAETh8C,IAAK,SAAU9a,GACb,IAAIi3D,EAAUpB,EAAiB71D,GAC/B,IAAKi3D,EACH,MAAM,IAAIE,YAAY,+CAGxBL,EAAiBG,EACjBt4D,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,OAAQsR,EAAO,GAAIG,EAAS,CACrDr2D,IAAK,WACH,OAAOm3D,GAETj8C,IAAK,SAAU9a,GACb,GAAIA,EAAQ,GAAKA,EAAQ,IACvB,MAAM,IAAIiL,MAAM,mCAGlB8rD,EAAQ/2D,EACRrB,KAAKu3D,cAAe,MAIxBz2D,OAAOC,eAAe8kD,EAAK,QAASsR,EAAO,GAAIG,EAAS,CACtDr2D,IAAK,WACH,OAAOo3D,GAETl8C,IAAK,SAAU9a,GACb,IAAIi3D,EAAUpB,EAAiB71D,GAC/B,IAAKi3D,EACH,MAAM,IAAIE,YAAY,+CAGxBH,EAASC,EACTt4D,KAAKu3D,cAAe,MASxB1R,EAAI4S,kBAAe,EAarB,OANA9S,EAAO3jD,UAAU02D,aAAe,WAG9B,OADantD,OAAOotD,OACNC,oBAAoBrtD,OAAQvL,KAAKsK,OAG1Cq7C,EA1RM,GCVTkT,GAAgB,WACpB,MAAO,CACLjuD,OAAQ,SAAU7C,GAChB,IAAKA,EACH,MAAO,GAGT,GAAoB,iBAATA,EACT,MAAM,IAAIuE,MAAM,iCAGlB,OAAOwsD,mBAAmBC,mBAAmBhxD,OAKnD,SAASixD,KACPh5D,KAAKuL,OAASA,OACdvL,KAAK2nB,MAAQ,UACb3nB,KAAKmK,OAAS,GACdnK,KAAK4H,QAAU,IAAIixD,GACnB74D,KAAKi5D,WAAa,GA6BpB,SAASC,KACPl5D,KAAKm5D,OAASr4D,OAAOY,OAAO,MAyD9B,SAAS03D,GAAcx4B,EAAOxtB,EAAUimD,EAAeC,GACrD,IAAI53B,EAAS43B,EAAa14B,EAAMpzB,MAAM8rD,GAAc,CAAC14B,GACrD,IAAK,IAAIxgC,KAAKshC,EACZ,GAAyB,iBAAdA,EAAOthC,GAAlB,CAIA,IAAIm5D,EAAK73B,EAAOthC,GAAGoN,MAAM6rD,GACzB,GAAkB,IAAdE,EAAGtxD,OAMPmL,EAFQmmD,EAAG,GACHA,EAAG,KAnEfL,GAASl3D,UAAY,CAEnBma,IAAK,SAAUq9C,EAAGC,GACXz5D,KAAKiB,IAAIu4D,IAAY,KAANC,IAClBz5D,KAAKm5D,OAAOK,GAAKC,IAQrBx4D,IAAK,SAAUu4D,EAAGE,EAAMC,GACtB,OAAIA,EACK35D,KAAKqU,IAAImlD,GAAKx5D,KAAKm5D,OAAOK,GAAKE,EAAKC,GAGtC35D,KAAKqU,IAAImlD,GAAKx5D,KAAKm5D,OAAOK,GAAKE,GAGxCrlD,IAAK,SAAUmlD,GACb,OAAOA,KAAKx5D,KAAKm5D,QAGnBS,IAAK,SAAUJ,EAAGC,EAAGjoC,GACnB,IAAK,IAAI3vB,EAAI,EAAGA,EAAI2vB,EAAEvpB,SAAUpG,EAC9B,GAAI43D,IAAMjoC,EAAE3vB,GAAI,CACd7B,KAAKmc,IAAIq9C,EAAGC,GACZ,QAKNI,QAAS,SAAUL,EAAGC,GAChB,UAAUvhD,KAAKuhD,IACjBz5D,KAAKmc,IAAIq9C,EAAG99C,SAAS+9C,EAAG,MAI5BK,QAAS,SAAUN,EAAGC,GAEpB,SAASA,EAAE9qC,MAAM,8BACf8qC,EAAIj5B,WAAWi5B,KACN,GAAKA,GAAK,OACjBz5D,KAAKmc,IAAIq9C,EAAGC,IACL,KA2Bf,IAAIM,GAAW,IAAIpU,GAAO,EAAG,EAAG,GAG5BqU,GAA4B,WAAnBD,GAASE,MAAqB,SAAW,SAEtD,SAASC,GAAUt5B,EAAOilB,EAAKoT,GAE7B,IAAIkB,EAASv5B,EAEb,SAASw5B,IACP,IAAIC,EA/GR,SAAyBz5B,GACvB,SAAS05B,EAAgBnzC,EAAG3mB,EAAG2B,EAAGi2B,GAChC,OAAiB,MAAL,EAAJjR,GAA0B,IAAL,EAAJ3mB,IAAmB,EAAJ2B,IAAc,EAAJi2B,GAAS,IAG7D,IAAI53B,EAAIogC,EAAMjS,MAAM,oCACpB,OAAKnuB,EAIDA,EAAE,GAEG85D,EAAe95D,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAGwK,QAAQ,IAAK,IAAKxK,EAAE,IAClDA,EAAE,GAAK,GAGT85D,EAAe95D,EAAE,GAAIA,EAAE,GAAI,EAAGA,EAAE,IAGhC85D,EAAe,EAAG95D,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAZhC,KAwGE+5D,CAAe35B,GACxB,GAAW,OAAPy5B,EACF,MAAM,IAAI/tD,MAAM,wBAA0B6tD,GAK5C,OADAv5B,EAAQA,EAAM51B,QAAQ,iBAAkB,IACjCqvD,EAyET,SAASG,IACP55B,EAAQA,EAAM51B,QAAQ,OAAQ,IAOhC,GAHAwvD,IACA3U,EAAIzwB,UAAYglC,IAChBI,IAC2B,WAAvB55B,EAAMmB,OAAO,EAAG,GAClB,MAAM,IAAIz1B,MAAM,qEACd6tD,GAEJv5B,EAAQA,EAAMmB,OAAO,GACrBy4B,IACA3U,EAAIxwB,QAAU+kC,IAGdI,IAtFA,SAA6B55B,EAAOilB,GAClC,IAAI4U,EAAW,IAAIvB,GAEnBE,GAAax4B,GAAO,SAAU44B,EAAGC,GAC/B,OAAQD,GACR,IAAK,SAEH,IAAK,IAAIp5D,EAAI64D,EAAWhxD,OAAS,EAAG7H,GAAK,EAAGA,IAC1C,GAAI64D,EAAW74D,GAAGwZ,KAAO6/C,EAAG,CAC1BgB,EAASt+C,IAAIq9C,EAAGP,EAAW74D,GAAGs6D,QAC9B,MAGJ,MACF,IAAK,WACHD,EAASb,IAAIJ,EAAGC,EAAG,CAAC,KAAM,OAC1B,MACF,IAAK,OACH,IAAIkB,EAAOlB,EAAEjsD,MAAM,KACjBotD,EAAQD,EAAK,GACfF,EAASZ,QAAQL,EAAGoB,GAChBH,EAASX,QAAQN,EAAGoB,IACtBH,EAASt+C,IAAI,eAAe,GAG9Bs+C,EAASb,IAAIJ,EAAGoB,EAAO,CAAC,SACJ,IAAhBD,EAAK1yD,QACPwyD,EAASb,IAAI,YAAae,EAAK,GAAI,CAAC,QAASX,GAAQ,QAGvD,MACF,IAAK,WACHW,EAAOlB,EAAEjsD,MAAM,KACfitD,EAASX,QAAQN,EAAGmB,EAAK,IACL,IAAhBA,EAAK1yD,QACPwyD,EAASb,IAAI,gBAAiBe,EAAK,GAAI,CAAC,QAASX,GAAQ,MAAO,YAAa,aAAc,SAG7F,MACF,IAAK,OACHS,EAASX,QAAQN,EAAGC,GACpB,MACF,IAAK,QACHgB,EAASb,IAAIJ,EAAGC,EAAG,CAAC,QAASO,GAAQ,MAAO,OAAQ,aAGrD,IAAK,MAGRnU,EAAI6U,OAASD,EAASx5D,IAAI,SAAU,MACpC4kD,EAAIgV,SAAWJ,EAASx5D,IAAI,WAAY,IACxC,IAAI65D,EAAOL,EAASx5D,IAAI,OAAQ,QACnB,SAAT65D,IAAsC,IAAnBf,GAASe,OAE9BA,GAAQ,GAEVjV,EAAIiV,KAAOA,EACXjV,EAAIkV,UAAYN,EAASx5D,IAAI,YAAa,SAC1C4kD,EAAImV,YAAcP,EAASx5D,IAAI,eAAe,GAC9C4kD,EAAIt9C,KAAOkyD,EAASx5D,IAAI,OAAQ,KAChC4kD,EAAIoU,MAAQQ,EAASx5D,IAAI,QAAS+4D,IAClC,IAAIj+C,EAAW0+C,EAASx5D,IAAI,WAAY,QACvB,SAAb8a,GAA6C,KAAtBg+C,GAASh+C,WAElCA,EAAyB,UAAd8pC,EAAIoU,OAAmC,SAAdpU,EAAIoU,MAAmB,EAAkB,QAAdpU,EAAIoU,OAAiC,UAAdpU,EAAIoU,MAAoB,IAAM,IAEtHpU,EAAI9pC,SAAWA,EAqBjBk/C,CAAmBr6B,EAAOilB,GAG5B,SAASqV,GAAet6B,GACtB,OAAOA,EAAM51B,QAAQ,iBAAkB,MAGzCguD,GAAUh3D,UAAY,CACpBs5B,MAAO,SAAUvzB,GACf,IAAIyD,EAAOxL,KAUX,SAASm7D,IACP,IAAIhxD,EAASqB,EAAKrB,OACdmd,EAAM,EAIV,IAFAnd,EAAS+wD,GAAc/wD,GAEhBmd,EAAMnd,EAAOlC,QAA0B,OAAhBkC,EAAOmd,IAAiC,OAAhBnd,EAAOmd,MACzDA,EAGJ,IAAIwzC,EAAO3wD,EAAO43B,OAAO,EAAGza,GAW5B,MAToB,OAAhBnd,EAAOmd,MACPA,EAGgB,OAAhBnd,EAAOmd,MACPA,EAGJ9b,EAAKrB,OAASA,EAAO43B,OAAOza,GACrBwzC,EA1BL/yD,IAEFyD,EAAKrB,QAAUqB,EAAK5D,QAAQgD,OAAO7C,EAAM,CAAE2c,QAAQ,KAyCrD,IACE,IAAIo2C,EACJ,GAAmB,YAAftvD,EAAKmc,MAAqB,CAE5B,IAAK,UAAUzP,KAAK1M,EAAKrB,QACvB,OAAOnK,KAMT,IAAIQ,GAHJs6D,EAAOK,KAGMxsC,MAAM,4BACnB,IAAKnuB,IAAMA,EAAE,GACX,MAAM,IAAI8L,MAAM,+BAGlBd,EAAKmc,MAAQ,SAIf,IADA,IAAIyzC,GAAuB,EACpB5vD,EAAKrB,QAAQ,CAElB,IAAK,UAAU+N,KAAK1M,EAAKrB,QACvB,OAAOnK,KAST,OANKo7D,EAGHA,GAAuB,EAFvBN,EAAOK,IAKD3vD,EAAKmc,OACb,IAAK,SAEC,IAAIzP,KAAK4iD,GA/CjB1B,GAgDkB0B,GAhDE,SAAUtB,EAAGC,MAQ9B,KAyCaqB,IAEVtvD,EAAKmc,MAAQ,MAEf,SACF,IAAK,OAEEmzC,IACHtvD,EAAKmc,MAAQ,MAGf,SACF,IAAK,KAEH,GAAI,iBAAiBzP,KAAK4iD,GAAO,CAC/BtvD,EAAKmc,MAAQ,OACb,MAGF,IAAKmzC,EACH,SAMF,GAHAtvD,EAAKq6C,IAAM,IAAIF,GAAO,EAAG,EAAG,IAC5Bn6C,EAAKmc,MAAQ,OAEgB,IAAzBmzC,EAAKhwD,QAAQ,UAAe,CAC9BU,EAAKq6C,IAAIjsC,GAAKkhD,EACd,SAIJ,IAAK,MAEH,IACEZ,GAASY,EAAMtvD,EAAKq6C,IAAKr6C,EAAKytD,YAC9B,MAAOr1D,GAEP4H,EAAKq6C,IAAM,KACXr6C,EAAKmc,MAAQ,SACb,SAEFnc,EAAKmc,MAAQ,UACb,SACF,IAAK,UACH,IAAI0zC,GAAwC,IAAzBP,EAAKhwD,QAAQ,UAKhC,IAAKgwD,GAAQO,IAAiBD,GAAuB,GAAO,CAEtD5vD,EAAK8vD,OACP9vD,EAAK8vD,MAAM9vD,EAAKq6C,KAGlBr6C,EAAKq6C,IAAM,KACXr6C,EAAKmc,MAAQ,KACb,SAEEnc,EAAKq6C,IAAIv7C,OACXkB,EAAKq6C,IAAIv7C,MAAQ,MAGnBkB,EAAKq6C,IAAIv7C,MAAQwwD,EACjB,SACF,IAAK,SAEEA,IACHtvD,EAAKmc,MAAQ,MAGf,WAGJ,MAAO/jB,GAEY,YAAf4H,EAAKmc,OAAuBnc,EAAKq6C,KAAOr6C,EAAK8vD,OAC/C9vD,EAAK8vD,MAAM9vD,EAAKq6C,KAGlBr6C,EAAKq6C,IAAM,KAGXr6C,EAAKmc,MAAuB,YAAfnc,EAAKmc,MAAsB,YAAc,SAExD,OAAO3nB,MAETu7D,MAAO,WAEL,IAWE,GAZSv7D,KAGJmK,QAHInK,KAGW4H,QAAQgD,UAHnB5K,KAKA6lD,KAAsB,WALtB7lD,KAKY2nB,SALZ3nB,KAMFmK,QAAU,OANRnK,KAOFs7B,SAKY,YAZVt7B,KAYA2nB,MACP,MAAM,IAAIrb,MAAM,+BAElB,MAAO1I,GACP,MAAMA,EAMR,OAtBW5D,KAkBFw7D,SAlBEx7D,KAmBJw7D,UAGAx7D,OAMIg5D,UCrbR,SAASyC,GAAQnkD,EAAyB8d,EAAmBC,EAAiBqmC,GAUnF,IATA,IACIC,EAEA9V,EACA+V,EACAC,EACAvxD,EANEsJ,EAAmB,GAOrB+xC,EAAkBp6C,OAAeo6C,QAAoBC,aAEhD1kD,EAAI,EAAGA,EAAIw6D,EAAcI,KAAK7zD,OAAQ/G,IAM7C,GAJA06D,GAAY,EACZC,EAAS,EACTvxD,EAAO,KAHPqxD,EAAMD,EAAcI,KAAK56D,IAKhB66D,UAAW,CAClB,IAAK,IAAIt7D,EAAI,EAAGA,EAAIk7D,EAAIK,MAAM/zD,OAAQxH,IAChCk7D,EAAIK,MAAMv7D,GAAGw7D,MAAMttC,MAAM,OAASitC,EACpCC,KAEAvxD,GAAQqxD,EAAIK,MAAMv7D,GAAGw7D,MACrBL,GAAY,GAIhBD,EAAIO,aAAe9mC,EAGfA,IAAcC,IAChBA,GAAW,MAGbwwB,EAAM,IAAIF,EAAOvwB,EAAWC,EAAS6lC,GAAc5wD,EAAK4B,SAEpD2vD,GAAU,GACZA,IAEAA,IAKE/jD,UAAUD,UAAU8W,MAAM,aAC5Bk3B,EAAIiV,KAAO55D,EAAI,EAEf2kD,EAAIiV,KAAQ55D,EAAI,EAAIA,EAAI,EAAIA,EAAI,EAGlC2kD,EAAIoU,MAAQ,OAEZpU,EAAI9pC,SAAWjS,KAAK4lB,IAAI,EAAG5lB,KAAKoS,IAAI,IAAY2/C,EAAS,GAAhB,MACzCjoD,EAAOvK,KAAKw8C,GACRvuC,GACFA,EAAMwuC,OAAOD,GAInB,OAAOjyC,EC5BT,IA0HKuoD,GA1HCC,GAA0B,CAC9B,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,GAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,KAIN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,KACN,IAAM,IACN,IAAM,IACN,IAAM,KACN,IAAM,IACN,IAAM,GACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IAGN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,KACN,IAAM,IACN,IAAM,GACN,IAAM,KACN,IAAM,KACN,IAAM,IACN,IAAM,KACN,IAAM,KACN,IAAM,KACN,IAAM,KACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IAGN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,GACN,IAAM,GACN,IAAM,GACN,IAAM,IACN,IAAM,KACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,KACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,IACN,IAAM,KACN,IAAM,KACN,IAAM,KACN,IAAM,MAMFC,GAAiB,SAAUC,GAC/B,IAAIC,EAAWD,EAKf,OAJIF,GAAwBn6D,eAAeq6D,KACzCC,EAAWH,GAAwBE,IAG9BvzD,OAAOC,aAAauzD,IAMvBC,GAAa,CAAE,GAAM,EAAG,GAAM,EAAG,GAAM,EAAG,GAAM,EAAG,GAAM,EAAG,GAAM,GAAI,GAAM,GAAI,GAAM,IACtFC,GAAc,CAAE,GAAM,EAAG,GAAM,EAAG,GAAM,EAAG,GAAM,EAAG,GAAM,GAAI,GAAM,GAAI,GAAM,IAC9EC,GAAa,CAAE,GAAM,EAAG,GAAM,EAAG,GAAM,EAAG,GAAM,EAAG,GAAM,EAAG,GAAM,GAAI,GAAM,GAAI,GAAM,IACtFC,GAAc,CAAE,GAAM,EAAG,GAAM,EAAG,GAAM,EAAG,GAAM,EAAG,GAAM,GAAI,GAAM,GAAI,GAAM,IAE9EC,GAAmB,CAAC,QAAS,QAAS,OAAQ,OAAQ,MAAO,SAAU,UAAW,QAAS,gB,SAE5FT,O,iBAAAA,I,eAAAA,I,qBAAAA,I,eAAAA,I,iBAAAA,I,gBAAAA,Q,SASCU,G,6BACG1vB,KAAsB,K,KACtB2vB,aAA6BX,GAAan1D,M,mBAEjDxE,IAAA,SAAKu6D,EAAwBh6D,GACvB/C,KAAK88D,cAAgBC,GACvBl5D,IAAOrB,IAAOxC,KAAKmtC,KAAnB,KAA4B4vB,EAA5B,KAAyCh6D,I,KAKzCi6D,GAAqB,SAAUC,GAEnC,IADA,IAAMC,EAAqB,GAClBzmD,EAAI,EAAGA,EAAIwmD,EAASh1D,OAAQwO,IACnCymD,EAAS7zD,KAAK4zD,EAASxmD,GAAGmQ,SAAS,KAGrC,OAAOs2C,GAWHC,G,WAOJ,WAAaC,EAAqBC,EAAqBC,EAAmBC,EAAqBC,GAAiB,KANzGJ,gBAMyG,OALzGC,eAKyG,OAJzGC,aAIyG,OAHzGC,gBAGyG,OAFzGC,WAEyG,EAC9Gx9D,KAAKo9D,WAAaA,GAAc,QAChCp9D,KAAKq9D,UAAYA,IAAa,EAC9Br9D,KAAKs9D,QAAUA,IAAW,EAC1Bt9D,KAAKu9D,WAAaA,GAAc,QAChCv9D,KAAKw9D,MAAQA,IAAS,E,2BAGxBC,MAAA,WACEz9D,KAAKo9D,WAAa,QAClBp9D,KAAKq9D,WAAY,EACjBr9D,KAAKs9D,SAAU,EACft9D,KAAKu9D,WAAa,QAClBv9D,KAAKw9D,OAAQ,G,EAGfE,UAAA,SAAWC,GAET,IADA,IAAMC,EAAU,CAAC,aAAc,YAAa,UAAW,aAAc,SAC5Dx9D,EAAI,EAAGA,EAAIw9D,EAAQ31D,OAAQ7H,IAAK,CACvC,IAAMy9D,EAAQD,EAAQx9D,GAClBu9D,EAAO17D,eAAe47D,KACxB79D,KAAK69D,GAASF,EAAOE,M,EAK3BC,UAAA,WACE,MAA4B,UAApB99D,KAAKo9D,aAA2Bp9D,KAAKq9D,YAAcr9D,KAAKs9D,SAC1C,UAApBt9D,KAAKu9D,aAA2Bv9D,KAAKw9D,O,EAGzCO,OAAA,SAAQC,GACN,OAASh+D,KAAKo9D,aAAeY,EAAMZ,YAChCp9D,KAAKq9D,YAAcW,EAAMX,WACzBr9D,KAAKs9D,UAAYU,EAAMV,SACvBt9D,KAAKu9D,aAAeS,EAAMT,YAC1Bv9D,KAAKw9D,QAAUQ,EAAMR,O,EAG1BS,KAAA,SAAMC,GACJl+D,KAAKo9D,WAAac,EAAYd,WAC9Bp9D,KAAKq9D,UAAYa,EAAYb,UAC7Br9D,KAAKs9D,QAAUY,EAAYZ,QAC3Bt9D,KAAKu9D,WAAaW,EAAYX,WAC9Bv9D,KAAKw9D,MAAQU,EAAYV,O,EAG3B52C,SAAA,WACE,MAAQ,SAAW5mB,KAAKo9D,WAAa,eAAiBp9D,KAAKq9D,UAAY,aAAer9D,KAAKs9D,QACzF,gBAAkBt9D,KAAKu9D,WAAa,WAAav9D,KAAKw9D,O,KAQtDW,G,WAIJ,WAAalC,EAAgBmB,EAAqBC,EAAqBC,EAAmBC,EAAqBC,GAAiB,KAHhIvB,WAGgI,OAFhImC,cAEgI,EAC9Hp+D,KAAKi8D,MAAQA,GAAS,IACtBj8D,KAAKo+D,SAAW,IAAIjB,GAASC,EAAYC,EAAWC,EAASC,EAAYC,G,2BAG3EC,MAAA,WACEz9D,KAAKi8D,MAAQ,IACbj8D,KAAKo+D,SAASX,S,EAGhBY,QAAA,SAASpC,EAAeiC,GACtBl+D,KAAKi8D,MAAQA,EACbj8D,KAAKo+D,SAASH,KAAKC,I,EAGrBI,YAAA,SAAaJ,GACXl+D,KAAKo+D,SAASH,KAAKC,I,EAGrBH,OAAA,SAAQC,GACN,OAAOh+D,KAAKi8D,QAAU+B,EAAM/B,OAASj8D,KAAKo+D,SAASL,OAAOC,EAAMI,W,EAGlEH,KAAA,SAAMM,GACJv+D,KAAKi8D,MAAQsC,EAAQtC,MACrBj8D,KAAKo+D,SAASH,KAAKM,EAAQH,W,EAG7BrC,QAAA,WACE,MAAsB,MAAf/7D,KAAKi8D,OAAiBj8D,KAAKo+D,SAASN,a,KAQlCU,GAAb,WAOE,WAAa36D,GAAwB,KAN9Bm4D,WAM8B,OAL9B10C,SAK8B,OAJ9Bm3C,kBAI8B,OAH9BvC,kBAG8B,OAFrCr4D,YAEqC,EACnC7D,KAAKg8D,MAAQ,GACb,IAAK,IAAI57D,EAAI,EAAGA,EAhKJ,IAgKiBA,IAC3BJ,KAAKg8D,MAAM3yD,KAAK,IAAI80D,IAGtBn+D,KAAK6D,OAASA,EACd7D,KAAKsnB,IAAM,EACXtnB,KAAKy+D,aAAe,IAAItB,GAf5B,2BAkBEY,OAAA,SAAQC,GAEN,IADA,IAAIU,GAAQ,EACHt+D,EAAI,EAAGA,EA3KJ,IA2KiBA,IAC3B,IAAKJ,KAAKg8D,MAAM57D,GAAG29D,OAAOC,EAAMhC,MAAM57D,IAAK,CACzCs+D,GAAQ,EACR,MAGJ,OAAOA,GA1BX,EA6BET,KAAA,SAAMD,GACJ,IAAK,IAAI59D,EAAI,EAAGA,EArLJ,IAqLiBA,IAC3BJ,KAAKg8D,MAAM57D,GAAG69D,KAAKD,EAAMhC,MAAM57D,KA/BrC,EAmCE27D,QAAA,WAEE,IADA,IAAI4C,GAAQ,EACHv+D,EAAI,EAAGA,EA5LJ,IA4LiBA,IAC3B,IAAKJ,KAAKg8D,MAAM57D,GAAG27D,UAAW,CAC5B4C,GAAQ,EACR,MAGJ,OAAOA,GA3CX,EAiDEC,UAAA,SAAWC,GACL7+D,KAAKsnB,MAAQu3C,IACf7+D,KAAKsnB,IAAMu3C,GAGT7+D,KAAKsnB,IAAM,GACbtnB,KAAK6D,OAAOrB,IAAI25D,GAAa2C,MAAO,4BAA8B9+D,KAAKsnB,KACvEtnB,KAAKsnB,IAAM,GACFtnB,KAAKsnB,IAhNJ,MAiNVtnB,KAAK6D,OAAOrB,IAAI25D,GAAa2C,MAAO,6BAA+B9+D,KAAKsnB,KACxEtnB,KAAKsnB,IAlNK,MAuJhB,EAkEEy3C,WAAA,SAAYC,GACV,IAAMC,EAASj/D,KAAKsnB,IAAM03C,EAC1B,GAAIA,EAAS,EACX,IAAK,IAAI5+D,EAAIJ,KAAKsnB,IAAM,EAAGlnB,EAAI6+D,EAAS,EAAG7+D,IACzCJ,KAAKg8D,MAAM57D,GAAGk+D,YAAYt+D,KAAKy+D,cAGnCz+D,KAAK4+D,UAAUK,IAzEnB,EA+EEC,UAAA,WACEl/D,KAAK++D,YAAY,GACjB/+D,KAAKg8D,MAAMh8D,KAAKsnB,KAAK+2C,QAAQ,IAAKr+D,KAAKy+D,eAjF3C,EAoFEU,WAAA,SAAY7C,GACNA,GAAQ,KACVt8D,KAAKk/D,YAEP,IAAME,EAAO/C,GAAeC,GACxBt8D,KAAKsnB,KAhPG,IAiPVtnB,KAAK6D,OAAOrB,IAAI25D,GAAan1D,MAAO,iBAAmBs1D,EAAK11C,SAAS,IACnE,KAAOw4C,EAAO,iBAAmBp/D,KAAKsnB,IAAM,mBAGhDtnB,KAAKg8D,MAAMh8D,KAAKsnB,KAAK+2C,QAAQe,EAAMp/D,KAAKy+D,cACxCz+D,KAAK++D,WAAW,KA/FpB,EAkGEM,aAAA,SAAcC,GACZ,IAAIl/D,EACJ,IAAKA,EAAIk/D,EAAUl/D,EA3PP,IA2PoBA,IAC9BJ,KAAKg8D,MAAM57D,GAAGq9D,SArGpB,EAyGE8B,MAAA,WACEv/D,KAAKq/D,aAAa,GAClBr/D,KAAKsnB,IAAM,EACXtnB,KAAKy+D,aAAahB,SA5GtB,EA+GE+B,gBAAA,WACEx/D,KAAKq/D,aAAar/D,KAAKsnB,MAhH3B,EAmHEm4C,cAAA,WAGE,IAFA,IAAMzD,EAAkB,GACpB2C,GAAQ,EACHv+D,EAAI,EAAGA,EA7QJ,IA6QiBA,IAAK,CAChC,IAAMg/D,EAAOp/D,KAAKg8D,MAAM57D,GAAG67D,MACd,MAATmD,IACFT,GAAQ,GAGV3C,EAAM3yD,KAAK+1D,GAEb,OAAIT,EACK,GAEA3C,EAAMtuD,KAAK,KAjIxB,EAqIEgyD,aAAA,SAAc/B,GACZ39D,KAAKy+D,aAAaf,UAAUC,GACX39D,KAAKg8D,MAAMh8D,KAAKsnB,KACxBg3C,YAAYt+D,KAAKy+D,eAxI9B,KAgJakB,GAAb,WAOE,WAAa97D,GAAwB,KANrCi4D,UAMqC,OALrC8D,aAKqC,OAJrCC,kBAIqC,OAHrCC,sBAGqC,OAFrCj8D,YAEqC,EACnC7D,KAAK87D,KAAO,GACZ,IAAK,IAAI17D,EAAI,EAAGA,EAjTJ,GAiTiBA,IAC3BJ,KAAK87D,KAAKzyD,KAAK,IAAIm1D,GAAI36D,IAGzB7D,KAAK6D,OAASA,EACd7D,KAAK4/D,QAAUG,GACf//D,KAAK6/D,aAAe,KACpB7/D,KAAK8/D,iBAAmB,KACxB9/D,KAAKy9D,QAjBT,2BAoBEA,MAAA,WACE,IAAK,IAAIr9D,EAAI,EAAGA,EA7TJ,GA6TiBA,IAC3BJ,KAAK87D,KAAK17D,GAAGm/D,QAGfv/D,KAAK4/D,QAAUG,IAzBnB,EA4BEhC,OAAA,SAAQC,GAEN,IADA,IAAIU,GAAQ,EACHt+D,EAAI,EAAGA,EAtUJ,GAsUiBA,IAC3B,IAAKJ,KAAK87D,KAAK17D,GAAG29D,OAAOC,EAAMlC,KAAK17D,IAAK,CACvCs+D,GAAQ,EACR,MAGJ,OAAOA,GApCX,EAuCET,KAAA,SAAMD,GACJ,IAAK,IAAI59D,EAAI,EAAGA,EAhVJ,GAgViBA,IAC3BJ,KAAK87D,KAAK17D,GAAG69D,KAAKD,EAAMlC,KAAK17D,KAzCnC,EA6CE27D,QAAA,WAEE,IADA,IAAI4C,GAAQ,EACHv+D,EAAI,EAAGA,EAvVJ,GAuViBA,IAC3B,IAAKJ,KAAK87D,KAAK17D,GAAG27D,UAAW,CAC3B4C,GAAQ,EACR,MAGJ,OAAOA,GArDX,EAwDEO,UAAA,WACcl/D,KAAK87D,KAAK97D,KAAK4/D,SACvBV,aA1DR,EA6DEM,gBAAA,WACcx/D,KAAK87D,KAAK97D,KAAK4/D,SACvBJ,mBA/DR,EAqEEL,WAAA,SAAYC,GACEp/D,KAAK87D,KAAK97D,KAAK4/D,SACvBT,WAAWC,IAvEnB,EA0EEY,OAAA,SAAQrC,GACM39D,KAAK87D,KAAK97D,KAAK4/D,SACvBF,aAAa/B,IA5ErB,EA+EEoB,WAAA,SAAYC,GACEh/D,KAAK87D,KAAK97D,KAAK4/D,SACvBb,WAAWC,IAjFnB,EAoFEJ,UAAA,SAAWC,GACT7+D,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,cAAgBpB,GACvC7+D,KAAK87D,KAAK97D,KAAK4/D,SACvBhB,UAAUC,IAvFlB,EA0FEqB,OAAA,SAAQC,GACNngE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,aAAe/lC,KAAKC,UAAUgmC,IACjE,IAAIC,EAASD,EAAQxE,IAAM,EAM3B,GALI37D,KAAK6/D,cAAgBO,EAASpgE,KAAK6/D,aAAe,IACpDO,EAASpgE,KAAK6/D,aAAe,GAI3B7/D,KAAK6/D,cAAgB7/D,KAAK4/D,UAAYQ,EAAQ,CAEhD,IAAK,IAAIhgE,EAAI,EAAGA,EA5YN,GA4YmBA,IAC3BJ,KAAK87D,KAAK17D,GAAGm/D,QAKf,IAAMc,EAAcrgE,KAAK4/D,QAAU,EAAK5/D,KAAK6/D,aAGvCC,EAAmB9/D,KAAK8/D,iBAC9B,GAAIA,EAAkB,CACpB,IAAMQ,EAAeR,EAAiBhE,KAAKuE,GAAanE,aAClD/uB,EAAOntC,KAAK6D,OAAOspC,KACzB,GAAImzB,GAAyB,OAATnzB,GAAiBmzB,EAAenzB,EAClD,IAAK,IAAI/sC,EAAI,EAAGA,EAAIJ,KAAK6/D,aAAcz/D,IACrCJ,KAAK87D,KAAKsE,EAASpgE,KAAK6/D,aAAez/D,EAAI,GAAG69D,KAAK6B,EAAiBhE,KAAKuE,EAAcjgE,KAM/FJ,KAAK4/D,QAAUQ,EACf,IAAMzE,EAAM37D,KAAK87D,KAAK97D,KAAK4/D,SAC3B,GAAuB,OAAnBO,EAAQtE,OAAiB,CAC3B,IAAMA,EAASsE,EAAQtE,OACjB0E,EAAUz2D,KAAK4lB,IAAImsC,EAAS,EAAG,GACrCF,EAAIiD,UAAUuB,EAAQtE,QACtBsE,EAAQK,MAAQ7E,EAAIK,MAAMuE,GAASnC,SAAShB,WAE9C,IAAMO,EAAoB,CAAEP,WAAY+C,EAAQK,MAAOnD,UAAW8C,EAAQ9C,UAAWC,QAAS6C,EAAQ7C,QAASC,WAAY,QAASC,OAAO,GAC3Ix9D,KAAKggE,OAAOrC,IAlIhB,EAwIE8C,WAAA,SAAYC,GACV1gE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,aAAe/lC,KAAKC,UAAUumC,IACjE1gE,KAAKk/D,YACLl/D,KAAKggE,OAAOU,GACZ1gE,KAAKm/D,WAAW,KA5IpB,EA+IEwB,cAAA,SAAeC,GACb5gE,KAAK6/D,aAAee,GAhJxB,EAmJEC,OAAA,WACE,GAA0B,OAAtB7gE,KAAK6/D,aAAT,CAIA7/D,KAAK6D,OAAOrB,IAAI25D,GAAa2E,KAAM9gE,KAAK+gE,kBACxC,IAAMV,EAAcrgE,KAAK4/D,QAAU,EAAI5/D,KAAK6/D,aACtCmB,EAAShhE,KAAK87D,KAAK32C,OAAOk7C,EAAa,GAAG,GAChDW,EAAOzB,QACPv/D,KAAK87D,KAAK32C,OAAOnlB,KAAK4/D,QAAS,EAAGoB,GAClChhE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,mBARjCjgE,KAAK6D,OAAOrB,IAAI25D,GAAa2C,MAAO,yCArJ1C,EAoKEiC,eAAA,SAAgBE,GACdA,EAAWA,IAAY,EAIvB,IAHA,IAAMC,EAAwB,GAC1B52D,EAAO,GACP62D,GAAS,EACJ/gE,EAAI,EAAGA,EAjdJ,GAidiBA,IAAK,CAChC,IAAMghE,EAAUphE,KAAK87D,KAAK17D,GAAGq/D,gBACzB2B,IACFD,EAAQ/gE,EAAI,EACR6gE,EACFC,EAAY73D,KAAK,OAAS83D,EAAQ,MAASC,EAAU,KAErDF,EAAY73D,KAAK+3D,EAAQl1D,SAW/B,OAPIg1D,EAAYj5D,OAAS,IAErBqC,EADE22D,EACK,IAAMC,EAAYxzD,KAAK,OAAS,IAEhCwzD,EAAYxzD,KAAK,OAGrBpD,GA3LX,EA8LE+2D,iBAAA,WACE,OAAOrhE,KAAK87D,MA/LhB,KAuMMwF,G,WAaJ,WAAaC,EAAuBC,EAA4B39D,GAAwB,KAZxF49D,UAYwF,OAXxFD,kBAWwF,OAVxFjgE,UAUwF,OATxFmgE,aASwF,OARxFC,qBAQwF,OAPxFC,wBAOwF,OANxF9B,sBAMwF,OALxF+B,mBAKwF,OAJxFC,iBAIwF,OAHxF5F,kBAGwF,OAFxFr4D,YAEwF,EACtF7D,KAAKyhE,KAAOF,EACZvhE,KAAKwhE,aAAeA,EACpBxhE,KAAKuB,KAAO,KACZvB,KAAK0hE,QAAU,EACf1hE,KAAK2hE,gBAAkB,IAAIhC,GAAc97D,GACzC7D,KAAK4hE,mBAAqB,IAAIjC,GAAc97D,GAC5C7D,KAAK8/D,iBAAmB,IAAIH,GAAc97D,GAC1C7D,KAAK6hE,cAAgB7hE,KAAK2hE,gBAAgB7F,KAAKiE,IAC/C//D,KAAK8hE,YAAc9hE,KAAK2hE,gBACxB3hE,KAAKuB,KAAO,KACZvB,KAAKk8D,aAAe,KACpBl8D,KAAK6D,OAASA,E,2BAGhB45D,MAAA,WACEz9D,KAAKuB,KAAO,KACZvB,KAAK2hE,gBAAgBlE,QACrBz9D,KAAK4hE,mBAAmBnE,QACxBz9D,KAAK8/D,iBAAiBrC,QACtBz9D,KAAKwhE,aAAa/D,QAClBz9D,KAAK6hE,cAAgB7hE,KAAK2hE,gBAAgB7F,KAAKiE,IAC/C//D,KAAK8hE,YAAc9hE,KAAK2hE,gBACxB3hE,KAAKuB,KAAO,KACZvB,KAAKk8D,aAAe,M,EAGtB6F,WAAA,WACE,OAAO/hE,KAAKwhE,c,EAGdQ,WAAA,SAAYC,GACVjiE,KAAKwhE,aAAeS,G,EAGtB/B,OAAA,SAAQC,GACNngE,KAAK8hE,YAAY5B,OAAOC,I,EAG1BM,WAAA,SAAYC,GACV1gE,KAAK8hE,YAAYrB,WAAWC,I,EAG9BwB,QAAA,SAASC,GACHA,IAAYniE,KAAKuB,OAIrBvB,KAAKuB,KAAO4gE,EACZniE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,QAAUkC,GAC3B,gBAAdniE,KAAKuB,KACPvB,KAAK8hE,YAAc9hE,KAAK4hE,oBAExB5hE,KAAK8hE,YAAc9hE,KAAK2hE,gBACxB3hE,KAAK8hE,YAAYrE,SAED,iBAAdz9D,KAAKuB,OACPvB,KAAK2hE,gBAAgB9B,aAAe,KACpC7/D,KAAK4hE,mBAAmB/B,aAAe,MAEzC7/D,KAAKuB,KAAO4gE,I,EAGdC,YAAA,SAAapG,GACX,IAAK,IAAI57D,EAAI,EAAGA,EAAI47D,EAAM/zD,OAAQ7H,IAChCJ,KAAK8hE,YAAY3C,WAAWnD,EAAM57D,IAGpC,IAAMiiE,EAASriE,KAAK8hE,cAAgB9hE,KAAK2hE,gBAAkB,OAAS,WACpE3hE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAMoC,EAAS,KAAOriE,KAAK8hE,YAAYf,gBAAe,IACjE,kBAAd/gE,KAAKuB,MAA0C,iBAAdvB,KAAKuB,OACxCvB,KAAK6D,OAAOrB,IAAI25D,GAAa2E,KAAM,cAAgB9gE,KAAK2hE,gBAAgBZ,gBAAe,IACvF/gE,KAAKsiE,qB,EAITC,MAAA,WACEviE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,gCACnCjgE,KAAKkiE,QAAQ,gB,EAGfM,KAAA,WACExiE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,kBACjB,cAAdjgE,KAAKuB,OAITvB,KAAK8hE,YAAY5C,YACbl/D,KAAK8hE,cAAgB9hE,KAAK2hE,iBAC5B3hE,KAAKsiE,qB,EAITG,MAAA,a,EAIAC,MAAA,a,EAIAC,MAAA,WACE3iE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,6BACnCjgE,KAAK8hE,YAAYtC,kBACjBx/D,KAAKsiE,oB,EAGPM,KAAA,SAAMhC,GACJ5gE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,MAAQW,EAAS,eACpD5gE,KAAK8hE,YAAc9hE,KAAK2hE,gBACxB3hE,KAAKkiE,QAAQ,gBACbliE,KAAK8hE,YAAYnB,cAAcC,I,EAGjCiC,MAAA,WACE7iE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,kBACnCjgE,KAAK8hE,YAAY9B,OAAO,CAAExC,OAAO,K,EAGnCsF,MAAA,WACE9iE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,kCACnCjgE,KAAKkiE,QAAQ,kB,EAGfa,KAAA,WACE/iE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,MACnCjgE,KAAKkiE,QAAQ,c,EAGfc,MAAA,WACEhjE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,OACnCjgE,KAAKkiE,QAAQ,c,EAGfe,MAAA,WACEjjE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,gCACnCjgE,KAAK2hE,gBAAgBlE,QACrBz9D,KAAKsiE,kBAAiB,I,EAGxBY,KAAA,WACEljE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,wBACnCjgE,KAAK8hE,YAAYjB,SACjB7gE,KAAKsiE,kBAAiB,I,EAGxBa,MAAA,WACEnjE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,oCACnCjgE,KAAK4hE,mBAAmBnE,S,EAG1B2F,MAAA,WAEE,GADApjE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,wBACjB,gBAAdjgE,KAAKuB,KAAwB,CAC/B,IAAMwmB,EAAM/nB,KAAK2hE,gBACjB3hE,KAAK2hE,gBAAkB3hE,KAAK4hE,mBAC5B5hE,KAAK4hE,mBAAqB75C,EAC1B/nB,KAAK8hE,YAAc9hE,KAAK4hE,mBACxB5hE,KAAK6D,OAAOrB,IAAI25D,GAAa2E,KAAM,SAAW9gE,KAAK2hE,gBAAgBZ,kBAErE/gE,KAAKsiE,kBAAiB,I,EAGxBe,KAAA,SAAMC,GACJtjE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,MAAQqD,EAAS,kBACpDtjE,KAAK8hE,YAAY/C,WAAWuE,I,EAG9BC,SAAA,SAAUC,GACR,IAAM7F,EAA6B,CAAEH,OAAO,GAG5C,GAFAG,EAAON,UAAYmG,EAAa,GAAM,EACtC7F,EAAOL,QAAUkG,GAAc,GAC1B7F,EAAOL,QAKVK,EAAOP,WAAa,YALD,CACnB,IAAMqG,EAAa35D,KAAK8V,MAAM4jD,EAAa,GAAK,GAEhD7F,EAAOP,WADQ,CAAC,QAAS,QAAS,OAAQ,OAAQ,MAAO,SAAU,WACxCqG,GAI7BzjE,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,WAAa/lC,KAAKC,UAAUwjC,IAC/D39D,KAAK8hE,YAAY9B,OAAOrC,I,EAG1B2E,iBAAA,SAAkBoB,QAA2B,IAA3BA,OAAoB,GACpC,IAAMv2B,EAAOntC,KAAK6D,OAAOspC,KACZ,OAATA,GAIAntC,KAAKwhE,eACmB,OAAtBxhE,KAAKk8D,cAA0Bl8D,KAAK2hE,gBAAgB5F,UAGjD/7D,KAAK2hE,gBAAgB5D,OAAO/9D,KAAK8/D,oBACpC9/D,KAAKwhE,aAAa/F,OAAOz7D,KAAKk8D,aAAe/uB,EAAMntC,KAAK8/D,kBACpD4D,GAAY1jE,KAAKwhE,aAAamC,aAChC3jE,KAAKwhE,aAAamC,cAGpB3jE,KAAKk8D,aAAel8D,KAAK2hE,gBAAgB5F,UAAY,KAAO5uB,GAR9DntC,KAAKk8D,aAAe/uB,EAWtBntC,KAAK8/D,iBAAiB7B,KAAKj+D,KAAK2hE,mB,EAIpCiC,eAAA,SAAgBtiE,GACVtB,KAAKwhE,eACFxhE,KAAK2hE,gBAAgB5F,YACpB/7D,KAAKwhE,aAAa/F,QACpBz7D,KAAKwhE,aAAa/F,OAAOz7D,KAAKk8D,aAAe56D,EAAGtB,KAAK2hE,iBAGvD3hE,KAAKk8D,aAAe56D,K,KAkW5B,SAASuiE,GAAYryC,EAAkBnL,EAAkBy9C,GACvDA,EAAWtyC,EAAIA,EACfsyC,EAAWz9C,EAAIA,EAGjB,SAAS09C,GAAgBvyC,EAAWnL,EAAWy9C,GAC7C,OAAOA,EAAWtyC,IAAMA,GAAKsyC,EAAWz9C,IAAMA,EAUjC29C,O,WArVb,WAAaC,EAAuBC,EAAoBC,GAAoB,KAL5EC,cAK4E,OAJ5EC,eAA2B,EAIiD,KAH5EP,gBAG4E,OAF5EjgE,YAE4E,EAC1E,IAAMA,EAAS,IAAIg5D,GACnB78D,KAAKokE,SAAW,CACd,KACA,IAAI9C,GAAc2C,EAAOC,EAAMrgE,GAC/B,IAAIy9D,GAAc2C,EAAQ,EAAGE,EAAMtgE,IAErC7D,KAAK8jE,WAwUA,CACLtyC,EAAG,KACHnL,EAAG,MAzUHrmB,KAAK6D,OAASA,E,2BAGhBk+D,WAAA,SAAYuC,GACV,OAAQtkE,KAAKokE,SAASE,GAA2BvC,c,EAGnDC,WAAA,SAAYsC,EAAiBrC,GAC1BjiE,KAAKokE,SAASE,GAA2BtC,WAAWC,I,EAMvDsC,QAAA,SAASp3B,EAAqBq3B,GAC5B,IAAIC,EACAjzC,EACAnL,EACAq+C,GAAwC,EAE5C1kE,KAAK6D,OAAOspC,KAAOA,EAEnB,IAAK,IAAI/sC,EAAI,EAAGA,EAAIokE,EAASv8D,OAAQ7H,GAAK,EAGxC,GAFAoxB,EAAkB,IAAdgzC,EAASpkE,GACbimB,EAAsB,IAAlBm+C,EAASpkE,EAAI,GACP,IAANoxB,GAAiB,IAANnL,EAAf,CAoBA,GAjBErmB,KAAK6D,OAAOrB,IAAI25D,GAAawI,KAAM,IAAM3H,GAAmB,CAACwH,EAASpkE,GAAIokE,EAASpkE,EAAI,KAAO,SAAW48D,GAAmB,CAACxrC,EAAGnL,IAAM,MAGxIo+C,EAAWzkE,KAAK4kE,SAASpzC,EAAGnL,MAG1Bo+C,EAAWzkE,KAAK6kE,YAAYrzC,EAAGnL,IAG5Bo+C,IACHA,EAAWzkE,KAAK8kE,SAAStzC,EAAGnL,IAGzBo+C,IACHA,EAAWzkE,KAAK+kE,0BAA0BvzC,EAAGnL,KAG1Co+C,IACHC,EAAa1kE,KAAKglE,WAAWxzC,EAAGnL,IAChB,CACd,IAAM4+C,EAAWjlE,KAAKqkE,eACtB,GAAIY,GAAYA,EAAW,EACTjlE,KAAKokE,SAASa,GACtB7C,YAAYsC,QAEpB1kE,KAAK6D,OAAOrB,IAAI25D,GAAa+I,QAAS,oCAIvCT,GAAaC,GAChB1kE,KAAK6D,OAAOrB,IAAI25D,GAAa+I,QAAS,+BAAkClI,GAAmB,CAACxrC,EAAGnL,IAC7F,UAAY22C,GAAmB,CAACwH,EAASpkE,GAAIokE,EAASpkE,EAAI,Q,EASlEwkE,SAAA,SAAUpzC,EAAWnL,GAAW,IACtBy9C,EAAe9jE,KAAf8jE,WAGR,MAFqB,KAANtyC,GAAoB,KAANA,GAAoB,KAANA,GAAoB,KAANA,IAAgBnL,GAAK,IAAQA,GAAK,QACtE,KAANmL,GAAoB,KAANA,IAAgBnL,GAAK,IAAQA,GAAK,IAE7D,OAAO,EAGT,GAAI09C,GAAevyC,EAAGnL,EAAGy9C,GAGvB,OAFAD,GAAW,KAAM,KAAMC,GACvB9jE,KAAK6D,OAAOrB,IAAI25D,GAAa2C,MAAO,qBAAuB9B,GAAmB,CAACxrC,EAAGnL,IAAM,iBACjF,EAGT,IAAMo7C,EAAc,KAANjwC,GAAoB,KAANA,GAAoB,KAANA,EAAc,EAAI,EACtD8yC,EAAUtkE,KAAKokE,SAAS3C,GAyC9B,OAvCU,KAANjwC,GAAoB,KAANA,GAAoB,KAANA,GAAoB,KAANA,EAClC,KAANnL,EACFi+C,EAAQ/B,QACO,KAANl8C,EACTi+C,EAAQ9B,OACO,KAANn8C,EACTi+C,EAAQ7B,QACO,KAANp8C,EACTi+C,EAAQ5B,QACO,KAANr8C,EACTi+C,EAAQ3B,QACO,KAANt8C,EACTi+C,EAAQ1B,KAAK,GACE,KAANv8C,EACTi+C,EAAQ1B,KAAK,GACE,KAANv8C,EACTi+C,EAAQ1B,KAAK,GACE,KAANv8C,EACTi+C,EAAQzB,QACO,KAANx8C,EACTi+C,EAAQxB,QACO,KAANz8C,EACTi+C,EAAQvB,OACO,KAAN18C,EACTi+C,EAAQtB,QACO,KAAN38C,EACTi+C,EAAQrB,QACO,KAAN58C,EACTi+C,EAAQpB,OACO,KAAN78C,EACTi+C,EAAQnB,QACO,KAAN98C,GACTi+C,EAAQlB,QAGVkB,EAAQjB,KAAKh9C,EAAI,IAEnBw9C,GAAWryC,EAAGnL,EAAGy9C,GACjB9jE,KAAKqkE,eAAiB5C,GACf,G,EAOToD,YAAA,SAAarzC,EAAWnL,GACtB,IAAIo7C,EAAe,EAEnB,IAAY,KAANjwC,GAAsB,KAANA,IAAgBnL,GAAK,IAAQA,GAAK,GAAM,CAO5D,IALEo7C,EADQ,KAANjwC,EACK,EAEA,KAGIxxB,KAAKqkE,eAEhB,OADArkE,KAAK6D,OAAOrB,IAAI25D,GAAan1D,MAAO,uCAC7B,EAET,IAAMs9D,EAAUtkE,KAAKokE,SAAS3C,GAC9B,QAAK6C,IAGLA,EAAQf,SAASl9C,GACjBrmB,KAAK6D,OAAOrB,IAAI25D,GAAa2C,MAAO,WAAa9B,GAAmB,CAACxrC,EAAGnL,IAAM,MACvE,GAET,OAAO,G,EAOTy+C,SAAA,SAAUtzC,EAAWnL,GACnB,IAAIs1C,EACEmI,EAAa9jE,KAAK8jE,WAIxB,MAFgBtyC,GAAK,IAAQA,GAAK,IAAUA,GAAK,IAAQA,GAAK,KAAWnL,GAAK,IAAQA,GAAK,SACtE,KAANmL,GAAoB,KAANA,IAAgBnL,GAAK,IAAQA,GAAK,IAE7D,OAAO,EAGT,GAAI09C,GAAevyC,EAAGnL,EAAGy9C,GAEvB,OADAD,GAAW,KAAM,KAAMC,IAChB,EAGT,IAAMrC,EAAkBjwC,GAAK,GAAQ,EAAI,EAGvCmqC,EADEt1C,GAAK,IAAQA,GAAK,GACJ,IAATo7C,EAAcjF,GAAWhrC,GAAKkrC,GAAWlrC,GAEhC,IAATiwC,EAAchF,GAAYjrC,GAAKmrC,GAAYnrC,GAEpD,IAAM8yC,EAAUtkE,KAAKokE,SAAS3C,GAC9B,QAAK6C,IAGLA,EAAQpE,OAAOlgE,KAAKmlE,aAAaxJ,EAAKt1C,IACtCw9C,GAAWryC,EAAGnL,EAAGy9C,GACjB9jE,KAAKqkE,eAAiB5C,GACf,I,EAOT0D,aAAA,SAAcxJ,EAAaW,GACzB,IAAI8I,EAAW9I,EACT6D,EAAmB,CAAEK,MAAO,KAAMlD,SAAS,EAAOzB,OAAQ,KAAMwB,WAAW,EAAO1B,IAAKA,GAiB7F,OAdEyJ,EADE9I,EAAO,GACEA,EAAO,GAEPA,EAAO,GAGpB6D,EAAQ9C,UAA+B,IAAP,EAAX+H,GACjBA,GAAY,GACdjF,EAAQK,MAAQ,CAAC,QAAS,QAAS,OAAQ,OAAQ,MAAO,SAAU,UAAW,SAAS12D,KAAK8V,MAAMwlD,EAAW,IACrGA,GAAY,IACrBjF,EAAQ7C,SAAU,EAClB6C,EAAQK,MAAQ,SAEhBL,EAAQtE,OAA+C,EAArC/xD,KAAK8V,OAAOwlD,EAAW,IAAQ,GAE5CjF,G,EAOT6E,WAAA,SAAYxzC,EAAWnL,GACrB,IAAIg/C,EACAC,EAA6B,KAC7BC,EAA2B,KAS/B,GAPI/zC,GAAK,IACP6zC,EAAY,EACZE,EAAY/zC,EAAI,IAEhB6zC,EAAY,EACZE,EAAY/zC,GAEV+zC,GAAa,IAAQA,GAAa,GAAM,CAE1C,IAAIC,EAAUn/C,EAEZm/C,EADgB,KAAdD,EACQl/C,EAAI,GACS,KAAdk/C,EACCl/C,EAAI,IAEJA,EAAI,IAGhBrmB,KAAK6D,OAAOrB,IAAI25D,GAAa8D,KAAM,iBAAoB5D,GAAemJ,GAAW,gBAAmBH,GACpGC,EAAY,CAACE,QACJh0C,GAAK,IAAQA,GAAK,MAC3B8zC,EAAmB,IAANj/C,EAAW,CAACmL,GAAK,CAACA,EAAGnL,IAEpC,GAAIi/C,EAAW,CACb,IAAMG,EAAWzI,GAAmBsI,GACpCtlE,KAAK6D,OAAOrB,IAAI25D,GAAa2C,MAAO,iBAAmB2G,EAAS/3D,KAAK,MACrEm2D,GAAWryC,EAAGnL,EAAGrmB,KAAK8jE,YAExB,OAAOwB,G,EAOTP,0BAAA,SAA2BvzC,EAAWnL,GACpC,IAKIjc,EAHJ,MAFqB,KAANonB,GAAoB,KAANA,IAAgBnL,GAAK,IAAQA,GAAK,QAC1C,KAANmL,GAAoB,KAANA,IAAgBnL,GAAK,IAAQA,GAAK,IAE7D,OAAO,EAGT,IAAMq6C,EAA8B,GAC1B,KAANlvC,GAAoB,KAANA,GAChBpnB,EAAQN,KAAK8V,OAAOyG,EAAI,IAAQ,GAChCq6C,EAAQnD,WAAaX,GAAiBxyD,GAClCic,EAAI,GAAM,IACZq6C,EAAQnD,WAAamD,EAAQnD,WAAa,UAE7B,KAANl3C,EACTq6C,EAAQnD,WAAa,eAErBmD,EAAQtD,WAAa,QACX,KAAN/2C,IACFq6C,EAAQrD,WAAY,IAGxB,IAAMoE,EAAkBjwC,GAAK,GAAQ,EAAI,EAIzC,OAH+BxxB,KAAKokE,SAAS3C,GACrChB,WAAWC,GACnBmD,GAAWryC,EAAGnL,EAAGrmB,KAAK8jE,aACf,G,EAMTrG,MAAA,WACE,IAAK,IAAIr9D,EAAI,EAAGA,EAAIU,OAAO4vB,KAAK1wB,KAAKokE,UAAUn8D,OAAQ7H,IAAK,CAC1D,IAAMkkE,EAAUtkE,KAAKokE,SAAShkE,GAC1BkkE,GACFA,EAAQ7G,QAGZz9D,KAAK8jE,WA0BA,CACLtyC,EAAG,KACHnL,EAAG,O,EAtBLu9C,eAAA,SAAgBtiE,GACd,IAAK,IAAIlB,EAAI,EAAGA,EAAIJ,KAAKokE,SAASn8D,OAAQ7H,IAAK,CAC7C,IAAMkkE,EAAUtkE,KAAKokE,SAAShkE,GAC1BkkE,GACFA,EAAQV,eAAetiE,K,KCtsCVokE,G,WAQnB,WAAaC,EAAwC3lB,GAAmB,KAPhE2lB,wBAOgE,OANhEC,UAAqC,GAM2B,KALhE5lB,eAKgE,OAJhE5qB,UAA2B,KAIqC,KAHhEC,QAAyB,KAGuC,KAFhEgtC,OAA+B,KAGrCriE,KAAK2lE,mBAAqBA,EAC1B3lE,KAAKggD,UAAYA,E,2BAGnB2jB,YAAA,WACyB,OAAnB3jE,KAAKo1B,YAITp1B,KAAK2lE,mBAAmBE,QAAQ7lE,KAAKggD,UAAWhgD,KAAKo1B,UAAWp1B,KAAKq1B,QAAmBr1B,KAAKqiE,OAAyBriE,KAAK4lE,WAC3H5lE,KAAKo1B,UAAY,O,EAGnBqmC,OAAA,SAAQrmC,EAAmBC,EAAiBgtC,IACnB,OAAnBriE,KAAKo1B,WAAsBp1B,KAAKo1B,UAAYA,KAC9Cp1B,KAAKo1B,UAAYA,GAGnBp1B,KAAKq1B,QAAUA,EACfr1B,KAAKqiE,OAASA,EACdriE,KAAK2lE,mBAAmBG,oBAAoB9lE,KAAKggD,Y,EAGnDyd,MAAA,WACEz9D,KAAK4lE,UAAY,I,KChCfG,GAAa,SAAUC,EAAaC,EAAclqD,GACtD,OAAOiqD,EAAYjkC,OAAOhmB,GAAY,EAAGkqD,EAAah+D,UAAYg+D,GAqB9DC,GAAO,SAAU57D,GAGrB,IAFA,IAAI47D,EAAO,KACP9lE,EAAIkK,EAAKrC,OACN7H,GACL8lE,EAAe,GAAPA,EAAa57D,EAAK2gB,aAAa7qB,GAGzC,OAAQ8lE,IAAS,GAAGt/C,YA4IPu/C,GAjHM,CACnB7qC,MAAO,SAAU8qC,EAAcC,EAASC,EAAQzoC,EAAI0oC,EAAUC,GAE5D,IASIC,EAPAC,EAAWp7D,aAAe,IAAI3B,WAAWy8D,IAAel6D,OAAOlB,QAF1D,mBAEsE,MAAMwC,MAAM,MAEvFm5D,EAAU,YACVC,EAAS,EACTC,EAAY,EACZC,EAAmB,EACnB9hB,EAAO,GAEP+hB,GAAW,EACXC,GAAe,EAIfC,EAAS,IAAIjO,GAEjBiO,EAAO3L,MAAQ,SAAUzV,GAEvB,IAAIqhB,EAASZ,EAAOzoC,GAChBspC,EAAYb,EAAOh0B,SAGnB40B,GAAUA,EAAOE,WACD30D,IAAdo0D,EAEFM,EAAYb,EAAOh0B,SAAW40B,EAAOnlD,MArDvB,SAAUukD,EAAQzoC,EAAIipC,GAC5C,IAAII,EAASZ,EAAOzoC,GAChBwpC,EAASf,EAAOY,EAAOG,QAI3B,IAAKA,IAAYA,EAAOD,KAAOF,EAAOE,IAGpC,OAFAd,EAAOh0B,SAAWg0B,EAAOgB,mBAAqBJ,EAAOnlD,WACrDmlD,EAAOE,KAAM,GAMf,KAAOC,GAAUA,EAAOD,KACtBd,EAAOh0B,UAAY40B,EAAOnlD,MAAQslD,EAAOtlD,MACzCmlD,EAAOE,KAAM,EAEbC,EAASf,GADTY,EAASG,GACcA,QAGzBf,EAAOgB,mBAAqBR,EAkCpBS,CAAgBjB,EAAQzoC,EAAIipC,IAI5BA,IAEFK,EAAYL,EAAmBR,EAAOgB,oBAGpCN,IACFnhB,EAAIzwB,WAAa+xC,EAAYN,EAC7BhhB,EAAIxwB,SAAW8xC,EAAYN,GAK7BhhB,EAAIjsC,GAAKssD,GAAKrgB,EAAIzwB,UAAUxO,YAAcs/C,GAAKrgB,EAAIxwB,QAAQzO,YAAcs/C,GAAKrgB,EAAIv7C,MAGlFu7C,EAAIv7C,KAAOwuD,mBAAmBC,mBAAmBlT,EAAIv7C,OACjDu7C,EAAIxwB,QAAU,GAChB2vB,EAAK37C,KAAKw8C,IAIdohB,EAAOO,eAAiB,SAAU5jE,GAChC6iE,EAAe7iE,GAGjBqjE,EAAOzL,QAAU,WACXiL,GAAgBD,EAClBA,EAAcC,GAGhBF,EAASvhB,IAIX0hB,EAAShjE,SAAQ,SAAAo3D,GACf,GAAIiM,EAAU,CAEZ,GAAIhB,GAAWjL,EAAM,oBAAqB,CAExCiM,GAAW,EACXC,GAAe,EAEflM,EAAK/4B,OAAO,IAAIv0B,MAAM,KAAK9J,SAAQ,SAAAmG,GAC7Bk8D,GAAWl8D,EAAW,UACxB88D,EAAU98D,EAAUk4B,OAAO,GAClBgkC,GAAWl8D,EAAW,aAC/B+8D,EAASlrD,SAAS7R,EAAUk4B,OAAO,QAGvC,IAEMskC,GAA+B,IAAnBC,EAAOzoC,GAAI9b,OAAkB,GAAK,IAChDskD,GAAW,YAGbO,GAAUP,EAEVQ,EAhJa,SAAUY,GACjC,IAAIpN,EAAK3+C,SAAS+rD,EAAW1lC,QAAQ,IACjC2lC,EAAOhsD,SAAS+rD,EAAW1lC,QAAQ,EAAG,IACtC4lC,EAAOjsD,SAAS+rD,EAAW1lC,QAAQ,EAAG,IACtC6lC,EAAQH,EAAWx/D,OAAS,EAAIyT,SAAS+rD,EAAW1lC,OAAO,EAAG0lC,EAAW38D,QAAQ,OAAS,EAE9F,KAAK,YAAgBuvD,IAAQ,YAAgBqN,IAAU,YAAgBC,IAAU,YAAgBC,IAC/F,MAAMt7D,MAAM,oCAAoCm7D,GAOlD,OAJApN,GAAM,IAAOqN,EACbrN,GAAM,IAAYsN,EAClBtN,GAAM,KAAiBuN,EAoIDC,CAAiBlB,GAAW,IAExCG,EAAmBF,EAAS,IAC5B,MAAOhjE,GACPojE,GAAe,EACfP,EAAe7iE,EAGjB,OACkB,KAATk3D,IACTiM,GAAW,GAIfE,EAAO3rC,MAAMw/B,EAAO,SAGtBmM,EAAO1L,U,4HCgUX,SAASuM,GAAsBC,EAAYC,GACzC,OAAOD,GAAcA,EAAWziB,QAAU0iB,EAAcrnE,QAAUonE,EAAWE,YAAcF,EAAWG,YAmBzFC,O,oBAjcb,WAAavsC,GAAK,MAkChB,IAjCA,cAAMA,EACJ7nB,IAAMhQ,gBACNgQ,IAAM9P,gBACN8P,IAAMvN,sBACNuN,IAAMzN,eACNyN,IAAMpP,iBACNoP,IAAMnP,gBACNmP,IAAM1N,YACN0N,IAAM9N,iBARR,MAvBMq9B,MAAiC,KAsBvB,EArBV1wB,YAqBU,IApBVw1D,SAAmB,EAoBT,EAnBVC,UAmBU,IAlBVjjB,WAA+B,GAkBrB,EAjBV54B,OAA+B,GAiBrB,EAhBV2D,QAAyB,GAgBf,EAfVm4C,iBAAoE,GAe1D,EAdVC,eAA4C,GAclC,EAbVC,wBAAkE,GAaxD,EAZVC,wBAYU,IANDC,mBAMC,IALDC,mBAKC,IAJVC,QAAkB,EAIR,EAHVvB,QAAkB,EAGR,EAFVf,OAwbD,CACLh0B,SAAU,EACVg1B,mBAAoB,EACpBuB,EAAG,CACD9mD,MAAO,EACPslD,QAAS,EACTD,KAAK,IAjbP,EAAKxrC,IAAMA,EACX,EAAKhpB,OAASgpB,EAAIhpB,OAClB,EAAKy1D,KAAOzsC,EAAIhpB,OAAOk2D,WAEvB,EAAKL,mBAAqB,CACxBR,WAAY,CACV3iB,MAAO,EAAK1yC,OAAOm2D,wBACnBC,aAAc,EAAKp2D,OAAOq2D,gCAE5Bf,WAAY,CACV5iB,MAAO,EAAK1yC,OAAOs2D,wBACnBF,aAAc,EAAKp2D,OAAOu2D,gCAE5BC,WAAY,CACV9jB,MAAO,EAAK1yC,OAAOy2D,wBACnBL,aAAc,EAAKp2D,OAAO02D,gCAE5BC,WAAY,CACVjkB,MAAO,EAAK1yC,OAAO42D,wBACnBR,aAAc,EAAKp2D,OAAO62D,iCAI1B,EAAK72D,OAAO82D,qBAAsB,CACpC,IAAMC,EAAW,IAAIjE,GAAJ,MAAuB,cAClCkE,EAAW,IAAIlE,GAAJ,MAAuB,cAClCmE,EAAW,IAAInE,GAAJ,MAAuB,cAClCoE,EAAW,IAAIpE,GAAJ,MAAuB,cACxC,EAAKgD,cAAgB,IAAI1E,GAAa,EAAG2F,EAAUC,GACnD,EAAKjB,cAAgB,IAAI3E,GAAa,EAAG6F,EAAUC,GAxCrC,S,kHA4ClBjE,QAAA,SAAS7lB,EAAmB5qB,EAAmBC,EAAiBgtC,EAAuBuD,GAGrF,IADA,IAmYmBmE,EAAYn6D,EAAYo6D,EAAYC,EAnYnDC,GAAS,EACJ9pE,EAAIwlE,EAAU39D,OAAQ7H,KAAM,CACnC,IAAI+pE,EAAWvE,EAAUxlE,GACrBgqE,GAgYaL,EAhYUI,EAAS,GAgYPv6D,EAhYWu6D,EAAS,GAgYRH,EAhYY50C,EAgYA60C,EAhYW50C,EAiY7DvrB,KAAKoS,IAAItM,EAAIq6D,GAAMngE,KAAK4lB,IAAIq6C,EAAIC,IAhYnC,GAAII,GAAW,IACbD,EAAS,GAAKrgE,KAAKoS,IAAIiuD,EAAS,GAAI/0C,GACpC+0C,EAAS,GAAKrgE,KAAK4lB,IAAIy6C,EAAS,GAAI90C,GACpC60C,GAAS,EACJE,GAAW/0C,EAAUD,GAAc,IACtC,OAQN,GAJK80C,GACHtE,EAAUv8D,KAAK,CAAC+rB,EAAWC,IAGzBr1B,KAAK4S,OAAOy3D,yBACdrqE,KAAKqoE,KAAK5M,OAAOz7D,KAAKuoE,eAAevoB,GAAY5qB,EAAWC,EAASgtC,OAChE,CACL,IAAMrd,EAAOhlD,KAAKqoE,KAAK5M,OAAO,KAAMrmC,EAAWC,EAASgtC,GACxDriE,KAAK47B,IAAI9nB,QAAQC,IAAMhO,YAAa,CAAEjD,KAAM,WAAYkiD,OAAM1tC,MAAO0oC,M,EAKzEyV,eAAA,SAAgB1tD,GAAsD,WAC5D4c,EAAsB5c,EAAtB4c,KAAM/K,EAAgB7R,EAAhB6R,GAAIuW,EAAYpoB,EAAZooB,QACVm4C,EAAqBtoE,KAArBsoE,iBACG,SAAP1uD,IACF5Z,KAAKmwB,QAAQxL,EAAKkZ,IAAM1N,GAKtBm4C,EAAiBrgE,SACnBjI,KAAKsoE,iBAAmB,GACxBA,EAAiB5kE,SAAQ,SAAAihB,GACvB,EAAKupB,aAAavpB,Q,EAKxB2lD,iBAAA,SAAkBtqB,GAAqC,IAC7C1c,EAAUtjC,KAAVsjC,MACR,GAAIA,EACF,IAAK,IAAIljC,EAAI,EAAGA,EAAIkjC,EAAM8hB,WAAWn9C,OAAQ7H,IAAK,CAChD,IAAI6jB,EAAYqf,EAAM8hB,WAAWhlD,GACjC,GAAI6jB,EAAU+7B,GACZ,OAAO/7B,EAIb,OAAO,M,EAGT6hD,oBAAA,SAAqB9lB,GACfhgD,KAAK4S,OAAOy3D,yBACdrqE,KAAKuqE,kBAAkBvqB,GAEvBhgD,KAAKwqE,qBAAqBxqB,I,EAI9BuqB,kBAAA,SAAmBvqB,GACjB,IAAIhgD,KAAKuoE,eAAevoB,GAAxB,CADoC,IAI5ByoB,EAA8CzoE,KAA9CyoE,mBAAoBF,EAA0BvoE,KAA1BuoE,eAAgBjlC,EAAUtjC,KAAVsjC,MAJR,EAKJmlC,EAAmBzoB,GAA3CsF,EAL4B,EAK5BA,MAAO0jB,EALqB,EAKrBA,aAETyB,EAAgBzqE,KAAKsqE,iBAAiBtqB,GAC5C,GAAKyqB,EAQHlC,EAAevoB,GAAayqB,EAC5B1lB,GAAiBwjB,EAAevoB,IAChCyE,GAAkB8jB,EAAevoB,GAAY1c,OAV3B,CAClB,IAAMrf,EAAYjkB,KAAK0qE,gBAAgB,WAAYplB,EAAO0jB,GACtD/kD,IAEFA,EAAU+7B,IAAa,EACvBuoB,EAAevoB,GAAa/7B,M,EASlCumD,qBAAA,SAAsBxqB,GACpB,IAAIhgD,KAAKwoE,wBAAwBxoB,GAAjC,CAIA,IAAM2qB,EAAmC3qE,KAAKyoE,mBAAmBzoB,GACjE,GAAK2qB,EAAL,CAGA,IACMrzD,EAAQ,CACZkgD,IAAKxX,EACLsF,MAHYqlB,EAAgBrlB,MAI5BD,KAAM,WACN/sB,UAASqyC,EAAgBrnC,SAAUqnC,EAAgBrnC,MAAMhL,QACzDsyC,eAAgBD,EAAgBrnC,OAElCtjC,KAAKwoE,wBAAwBxoB,GAAa1oC,EAC1CtX,KAAK47B,IAAI9nB,QAAQC,IAAM/N,6BAA8B,CAAEwmB,OAAQ,CAAClV,Q,EAElEozD,gBAAA,SAAiBrlB,EAAqBC,EAAevhB,GACnD,IAAMT,EAAQtjC,KAAKsjC,MACnB,GAAKA,EAGL,OAAOA,EAAMiiB,aAAaF,EAAMC,EAAOvhB,I,EAGzCvxB,QAAA,WACE,YAAMA,QAAN,Y,EAGFg7C,iBAAA,SAAkBzlD,GAChB/H,KAAKsjC,MAAQv7B,EAAKu7B,MAClBtjC,KAAK6qE,gB,EAGPhsB,iBAAA,WAAoB,IACV0pB,EAAmBvoE,KAAnBuoE,eACRznE,OAAO4vB,KAAK63C,GAAgB7kE,SAAQ,SAAAs8C,GAClC+E,GAAiBwjB,EAAevoB,WACzBuoB,EAAevoB,MAExBhgD,KAAKwoE,wBAA0B,I,EAGjC7hC,kBAAA,WACE3mC,KAAK4oE,QAAU,EACf5oE,KAAKqnE,QAAU,EACfrnE,KAAKsmE,OAiQA,CACLh0B,SAAU,EACVg1B,mBAAoB,EACpBuB,EAAG,CACD9mD,MAAO,EACPslD,QAAS,EACTD,KAAK,IAtQPpnE,KAAK6qE,eACL7qE,KAAKwsB,OAAS,GACdxsB,KAAKuoE,eAAiB,GACtBvoE,KAAKwoE,wBAA0B,I,EAGjCqC,aAAA,WAAgB,IAENvnC,EAAUtjC,KAAVsjC,MACR,GAAKA,EAAL,CAGA,IAAM8hB,EAAa9hB,EAAM8hB,WACzB,GAAIA,EACF,IAAK,IAAIhlD,EAAI,EAAGA,EAAIglD,EAAWn9C,OAAQ7H,IACrC2kD,GAAiBK,EAAWhlD,M,EAKlCwiD,iBAAA,SAAkB76C,GAA2E,WAS3F,GARA/H,KAAKolD,WAAa,GAClBplD,KAAKsoE,iBAAmBtoE,KAAKsoE,kBAAoB,GACjDtoE,KAAKmwB,QAAU,GACXnwB,KAAK0oE,eAAiB1oE,KAAK2oE,gBAC7B3oE,KAAK0oE,cAAcjL,QACnBz9D,KAAK2oE,cAAclL,SAGjBz9D,KAAK4S,OAAOk4D,aAAc,CAC5B,IAAMt+C,EAASzkB,EAAKohC,WAAa,GAC3B4hC,EAAa/qE,KAAKwsB,QAAUA,GAAUxsB,KAAKwsB,OAAOvkB,SAAWukB,EAAOvkB,OAG1E,GAFAjI,KAAKwsB,OAASzkB,EAAKohC,WAAa,GAE5BnpC,KAAK4S,OAAOy3D,yBAA0B,CACxC,IAAMW,EAAchrE,KAAKsjC,MAAQtjC,KAAKsjC,MAAM8hB,WAAa,GAEzDplD,KAAKwsB,OAAO9oB,SAAQ,SAAC4T,EAAOlN,GAC1B,IAAI6Z,EACJ,GAAI7Z,EAAQ4gE,EAAY/iE,OAAQ,CAG9B,IAFA,IAAI8/D,EAA+B,KAE1B3nE,EAAI,EAAGA,EAAI4qE,EAAY/iE,OAAQ7H,IACtC,GAAI0nE,GAAqBkD,EAAY5qE,GAAIkX,GAAQ,CAC/CywD,EAAaiD,EAAY5qE,GACzB,MAKA2nE,IACF9jD,EAAY8jD,GAGX9jD,IACHA,EAAY,EAAKymD,gBAAgB,YAAapzD,EAAM3W,KAAM2W,EAAMysB,OAG9DzsB,EAAMghB,QACRrU,EAAU1iB,KAAO,EAAKq6B,IAAIqvC,gBAAkB,UAAY,SAExDhnD,EAAU1iB,KAAO,WAGnB,EAAK6jD,WAAW/7C,KAAK4a,WAElB,IAAK8mD,GAAc/qE,KAAKwsB,QAAUxsB,KAAKwsB,OAAOvkB,OAAQ,CAE3D,IAAMijE,EAAalrE,KAAKwsB,OAAOoL,KAAI,SAACtgB,GAClC,MAAO,CACLguC,MAAOhuC,EAAM3W,KACb0kD,KAAM/tC,EAAMxU,KAAKiV,cACjBugB,QAAShhB,EAAMghB,QACf6yC,cAAe7zD,MAGnBtX,KAAK47B,IAAI9nB,QAAQC,IAAM/N,6BAA8B,CAAEwmB,OAAQ0+C,KAI/DlrE,KAAK4S,OAAO82D,sBAAwB3hE,EAAKqhC,UAC3CrhC,EAAKqhC,SAAS1lC,SAAQ,SAAA0nE,GACpB,IAAMC,EAAkB,wBAAwBt+D,KAAKq+D,EAAc5nC,YACnE,GAAK6nC,EAAL,CAGA,IAAMrrB,EAAY,YAAYqrB,EAAgB,GACxCV,EAAmC,EAAKlC,mBAAmBzoB,GAC5D2qB,IAGLA,EAAgBrlB,MAAQ8lB,EAAczqE,KAClCyqE,EAAcrnC,OAChB4mC,EAAgB3B,aAAeoC,EAAcrnC,MAE/C4mC,EAAgBrnC,MAAQ8nC,Q,EAK9Bl9B,aAAA,SAAcnmC,GAAgD,IACpD4c,EAAkB5c,EAAlB4c,KAAMuH,EAAYnkB,EAAZmkB,QACNw8C,EAAoE1oE,KAApE0oE,cAAeC,EAAqD3oE,KAArD2oE,cAAex4C,EAAsCnwB,KAAtCmwB,QAASy4C,EAA6B5oE,KAA7B4oE,OAAQN,EAAqBtoE,KAArBsoE,iBACvD,GAAkB,SAAd3jD,EAAK7hB,KAAiB,CACxB,IAAMwpB,EAAK3H,EAAK2H,GAEZ3H,EAAK2H,KAAOs8C,EAAS,GACnBF,GAAiBC,IACnBD,EAAcjL,QACdkL,EAAclL,SAGlBz9D,KAAK4oE,OAASt8C,OAGX,GAAkB,aAAd3H,EAAK7hB,KACZ,GAAIopB,EAAQxiB,WAAY,CAEtB,IAAK,YAAgBymB,EAAQxL,EAAKkZ,KAMhC,OALAyqC,EAAiBj/D,KAAKtB,QAClBooB,EAAQloB,QAEVjI,KAAK47B,IAAI9nB,QAAQC,IAAMjO,wBAAyB,CAAEwlE,SAAS,EAAO3mD,UAKtE,IAAI4mD,EAAc5mD,EAAKhG,YAEH,MAAf4sD,GAA4C,MAAnBA,EAAY5pE,KAAwC,YAAvB4pE,EAAYxqD,QACrE/gB,KAAKwrE,WAAW7mD,EAAMuH,QAIxBlsB,KAAK47B,IAAI9nB,QAAQC,IAAMjO,wBAAyB,CAAEwlE,SAAS,EAAO3mD,U,EAKxE6mD,WAAA,SAAY7mD,EAAgBuH,GAAsB,WACxC0P,EAAoC57B,KAApC47B,IAAKyrC,EAA+BrnE,KAA/BqnE,OAAQjiB,EAAuBplD,KAAvBolD,WAAYkhB,EAAWtmE,KAAXsmE,OAC5BA,EAAO3hD,EAAKkZ,MACfyoC,EAAO3hD,EAAKkZ,IAAM,CAAE9b,MAAO4C,EAAK5C,MAAOslD,SAAQD,KAAK,GACpDpnE,KAAKqnE,OAAS1iD,EAAKkZ,IAGrBsoC,GAAa7qC,MAAMpP,EAASlsB,KAAKmwB,QAAQxL,EAAKkZ,IAAKyoC,EAAQ3hD,EAAKkZ,IAAI,SAACmnB,GACnE,GAAI,EAAKpyC,OAAOy3D,yBAA0B,CACxC,IAAMoB,EAAermB,EAAWzgC,EAAKsZ,OAKrC,GAA0B,aAAtBwtC,EAAalqE,KAEf,YADAq6B,EAAI9nB,QAAQC,IAAMjO,wBAAyB,CAAEwlE,SAAS,EAAO3mD,KAAMA,IAKrEqgC,EAAKthD,SAAQ,SAAAmiD,GAIX,IAAK4lB,EAAazmB,KAAM0mB,WAAW7lB,EAAIjsC,IACrC,IAEE,GADA6xD,EAAa3lB,OAAOD,IACf4lB,EAAazmB,KAAM0mB,WAAW7lB,EAAIjsC,IACrC,MAAM,IAAItN,MAAJ,yBAAmCu5C,GAE3C,MAAOnyC,GACP7P,IAAOtB,MAAP,mCAAgDmR,GAChD,IAAMi4D,EAAe,IAAKpgE,OAAeq6C,aAAaC,EAAIzwB,UAAWywB,EAAIxwB,QAASwwB,EAAIv7C,MACtFqhE,EAAa/xD,GAAKisC,EAAIjsC,GACtB6xD,EAAa3lB,OAAO6lB,WAIrB,CACL,IAAIr0C,EAAU,EAAK9K,OAAO7H,EAAKsZ,OAAO3F,QAAU,UAAY,YAAc3T,EAAKsZ,MAC/ErC,EAAI9nB,QAAQC,IAAMhO,YAAa,CAAEjD,KAAM,YAAakiD,KAAMA,EAAM1tC,MAAOggB,IAEzEsE,EAAI9nB,QAAQC,IAAMjO,wBAAyB,CAAEwlE,SAAS,EAAM3mD,KAAMA,OAEpE,SAAU/gB,GAERC,IAAOrB,IAAP,4BAAuCoB,GACvCg4B,EAAI9nB,QAAQC,IAAMjO,wBAAyB,CAAEwlE,SAAS,EAAO3mD,KAAMA,Q,EAIvEinD,gBAAA,SAAiB7jE,GAAuC,IAC9C4c,EAAkB5c,EAAlB4c,KAAMuH,EAAYnkB,EAAZmkB,QACd,GAAkB,aAAdvH,EAAK7hB,KAAqB,CAC5B,IAAK,YAAgB9C,KAAKmwB,QAAQxL,EAAKkZ,KAErC,YADA79B,KAAKsoE,iBAAiBj/D,KAAKtB,GAI7B/H,KAAKwrE,WAAW7mD,EAAMuH,K,EAI1B2/C,sBAAA,SAAuB9jE,GAA+B,IAC5C2gE,EAAiC1oE,KAAjC0oE,cAAeC,EAAkB3oE,KAAlB2oE,cACvB,GAAK3oE,KAAKooE,SAAaM,GAAiBC,EAMxC,IAAK,IAAIvoE,EAAI,EAAGA,EAAI2H,EAAKmR,QAAQjR,OAAQ7H,IAAK,CAC5C,IAAM0rE,EAAU/jE,EAAKmR,QAAQ9Y,GAAGsmB,MAChC,GAAIolD,EAAS,CACX,IAAMC,EAAU/rE,KAAKgsE,kBAAkBF,GACvCpD,EAAcnE,QAAQx8D,EAAKmR,QAAQ9Y,GAAGqY,IAAKszD,EAAQ,IACnDpD,EAAcpE,QAAQx8D,EAAKmR,QAAQ9Y,GAAGqY,IAAKszD,EAAQ,O,EAKzDC,kBAAA,SAAmBxlD,GAKjB,IAJA,IAAMnK,EAAuB,GAAfmK,EAAU,GACpBzK,EAAW,EACTkwD,EAA4B,CAAC,GAAI,IAE9Bx1D,EAAI,EAAGA,EAAI4F,EAAO5F,IAAK,CAC9B,IAAMy1D,EAAU1lD,EAAUzK,KACpBowD,EAAU,IAAO3lD,EAAUzK,KAC3BqwD,EAAU,IAAO5lD,EAAUzK,KAE3BswD,EAAS,EAAIH,EAEH,IAAZC,GAA6B,IAAZC,GAHa,IAAjB,EAAIF,KAQJ,IAAXG,GAA2B,IAAXA,IAClBJ,EAAcI,GAAQhjE,KAAK8iE,GAC3BF,EAAcI,GAAQhjE,KAAK+iE,KAIjC,OAAOH,G,GAhcsBtwC,G,uKC8MjC,SAAS2wC,GAAsBC,GAE7B,IADA,IAAI//C,EAAS,GACJpsB,EAAI,EAAGA,EAAImsE,EAActkE,OAAQ7H,IAAK,CAC7C,IAAMkX,EAAQi1D,EAAcnsE,GAET,cAAfkX,EAAM+tC,MAAwB/tC,EAAMguC,OACtC94B,EAAOnjB,KAAKkjE,EAAcnsE,IAG9B,OAAOosB,EAGMggD,O,oBAxPb,WAAa5wC,GAAK,aAChB,cAAMA,EACJ7nB,IAAM/P,eACN+P,IAAM9P,gBACN8P,IAAMnP,gBACNmP,IAAMlO,wBAJR,MAKK2mB,OAAS,GACd,EAAK8K,SAAW,EAChB,EAAKgM,MAAQ,KACb,EAAKmpC,SAAU,EAKf,EAAKxB,iBAAkB,EAMvB,EAAKyB,mBAAqB,KApBV,E,wHAuBlBl6D,QAAA,WACEmpB,EAAa35B,UAAUwQ,QAAQjS,KAAKP,O,EAItCu+C,gBAAA,SAAiBx2C,GAAM,WACrB/H,KAAKsjC,MAAQv7B,EAAKu7B,MACbtjC,KAAKsjC,QAIN,YAAgBtjC,KAAK0sE,sBACvB1sE,KAAKmrE,cAAgBnrE,KAAK0sE,mBAC1B1sE,KAAK0sE,mBAAqB,MAG5B1sE,KAAK2sE,oBAAsB3sE,KAAK4sE,qBAAqBhrE,KAAK5B,MAE1DA,KAAK6sE,sBAAwB7sE,KAAKsjC,MAAM8hB,YAAc,aAAcplD,KAAKsjC,MAAM8hB,YAC3EplD,KAAK6sE,oBACP7sE,KAAK8sE,wBAA0Bv0B,aAAY,WACzC,EAAKo0B,wBACJ,KAEH3sE,KAAKsjC,MAAM8hB,WAAWhqB,iBAAiB,SAAUp7B,KAAK2sE,uB,EAI1D9tB,iBAAA,WACO7+C,KAAKsjC,QAINtjC,KAAK6sE,oBACPz0B,cAAcp4C,KAAK8sE,yBAEnB9sE,KAAKsjC,MAAM8hB,WAAWtU,oBAAoB,SAAU9wC,KAAK2sE,qBAGvD,YAAgB3sE,KAAKmrE,iBACvBnrE,KAAK0sE,mBAAqB1sE,KAAKmrE,eAGdmB,GAAqBtsE,KAAKsjC,MAAM8hB,YAExC1hD,SAAQ,SAAC4T,GAClBytC,GAAiBztC,MAGnBtX,KAAKmrE,eAAiB,EACtBnrE,KAAKsjC,MAAQ,O,EAIfsf,iBAAA,SAAkB76C,GAAM,WAClBykB,EAASzkB,EAAKohC,WAAa,GAC/BnpC,KAAKwsB,OAASA,EACdxsB,KAAK47B,IAAI9nB,QAAQC,IAAMrO,wBAAyB,CAAEqnE,eAAgBvgD,IAIlEA,EAAO9oB,SAAQ,SAAA4T,GACTA,EAAMghB,UAKJ,EAAKgL,MACP,EAAK6nC,cAAgB7zD,EAAMsC,GAE3B,EAAK8yD,mBAAqBp1D,EAAMsC,Q,EAMxCozD,sBAAA,SAAuBjlE,GAAM,WACnB6R,EAAgB7R,EAAhB6R,GAAI3F,EAAYlM,EAAZkM,QACJqjB,EAAoBt3B,KAApBs3B,QAAS9K,EAAWxsB,KAAXwsB,OACXi/C,EAAej/C,EAAO8K,GAC5B,GAAI1d,GAAM4S,EAAOvkB,QAAU2R,IAAO0d,IAAYm0C,GAAgBzrE,KAAKysE,QACjEzsE,KAAKitE,yBAKP,GADAppE,IAAOrB,IAAP,kBAA6BoX,EAA7B,WACI3F,EAAQmrB,KAAM,CAChB,IAAMgU,EAAiBH,GAAsBw4B,EAAax3D,QAASA,EAASlM,EAAKutB,MAAM6uB,UACvFtgD,IAAOrB,IAAP,uCAAkD4wC,EAAlD,MACApzC,KAAKsiD,MAAQ3J,YAAW,WACtB,EAAKu0B,sBACJ95B,QAEHpzC,KAAKitE,qB,EAITn0B,UAAA,WACE94C,KAAKysE,SAAU,EACfzsE,KAAKktE,qB,EAGPn0B,SAAA,WACE/4C,KAAKysE,SAAU,EACfzsE,KAAKitE,qB,EAqBPA,kBAAA,WACMjtE,KAAKsiD,QACP7J,aAAaz4C,KAAKsiD,OAClBtiD,KAAKsiD,MAAQ,O,EAIjB4qB,kBAAA,WAAqB,IACX51C,EAAyBt3B,KAAzBs3B,QAAS9K,EAAgBxsB,KAAhBwsB,OAAQoP,EAAQ57B,KAAR47B,IACnB6vC,EAAej/C,EAAO8K,GACxBA,EAAU,IAAMm0C,GAAiBA,EAAax3D,UAAYw3D,EAAax3D,QAAQmrB,OAGnFv7B,IAAOrB,IAAP,0BAAqC80B,GACrCsE,EAAI9nB,QAAQC,IAAMnO,uBAAwB,CAAE2E,IAAKkhE,EAAalhE,IAAKqP,GAAI0d,M,EAUzE61C,kBAAA,SAAmBzY,GAAO,IAChBpxB,EAAoCtjC,KAApCsjC,MAAO2nC,EAA6BjrE,KAA7BirE,gBAAiB3zC,EAAYt3B,KAAZs3B,QAChC,GAAKgM,EAAL,CAIA,IAAM8hB,EAAaknB,GAAqBhpC,EAAM8hB,YAC9C,IAAe,IAAXsP,EACF,GAAGniD,MAAMhS,KAAK6kD,GAAY1hD,SAAQ,SAAA4T,GAChCA,EAAM/V,KAAO,kBAEV,CACL,IAAM6rE,EAAWhoB,EAAW9tB,GACxB81C,IACFA,EAAS7rE,KAAO,YAIpB,IAAM8rE,EAAYjoB,EAAWsP,GACzB2Y,IACFA,EAAU9rE,KAAO0pE,EAAkB,UAAY,Y,EASnDqC,0BAAA,SAA2B5Y,GAAO,IACxB94B,EAAgB57B,KAAhB47B,IAAKpP,EAAWxsB,KAAXwsB,QACR,YAAgBkoC,IAAUA,GAAS,GAAKA,GAASloC,EAAOvkB,SAI7DjI,KAAKs3B,QAAUo9B,EACf7wD,IAAOrB,IAAP,+BAA0CkyD,GAC1C94B,EAAI9nB,QAAQC,IAAMpO,sBAAuB,CAAEiU,GAAI86C,IAC/C10D,KAAKktE,sB,EAGPN,qBAAA,WAEE,GAAK5sE,KAAKsjC,OAAUtjC,KAAK47B,IAAIhpB,OAAOy3D,yBAApC,CAMA,IAFA,IAAI/yC,GAAW,EACX9K,EAAS8/C,GAAqBtsE,KAAKsjC,MAAM8hB,YACpCxrC,EAAK,EAAGA,EAAK4S,EAAOvkB,OAAQ2R,IACnC,GAAwB,WAApB4S,EAAO5S,GAAIrY,KAEb+1B,EAAU1d,OACL,GAAwB,YAApB4S,EAAO5S,GAAIrY,KAAoB,CACxC+1B,EAAU1d,EACV,MAKJ5Z,KAAKmrE,cAAgB7zC,I,6CApGrB,OAAOt3B,KAAKwsB,S,oCAKZ,OAAOxsB,KAAKs3B,S,aAIKi2C,GACbvtE,KAAKs3B,UAAYi2C,IACnBvtE,KAAKmtE,kBAAkBI,GACvBvtE,KAAKstE,0BAA0BC,S,gCAjJC5xC,G,YCH1B6xC,GCUJ34C,GAAgBtpB,OAAhBspB,YAGK44C,GAAb,Y,QACE,WAAa7xC,EAAKga,GAAiB,aACjC,cAAMha,EACJ7nB,IAAM/P,eACN+P,IAAM9P,gBACN8P,IAAM/M,MACN+M,IAAM5M,WACN4M,IAAM1N,YACN0N,IAAMrO,wBACNqO,IAAMpO,sBACNoO,IAAMlO,sBACNkO,IAAMjO,wBACNiO,IAAM7O,gBAVR,MAYK0wC,gBAAkBA,EACvB,EAAKhjC,OAASgpB,EAAIhpB,OAClB,EAAK+U,MAAQixB,GACb,EAAKpsB,OAAS,GACd,EAAKkhD,eAAiB,GACtB,EAAKC,gBAAkB,EACvB,EAAK9uD,UAAY,IAAInM,KAAUkpB,EAAKA,EAAIhpB,QAExC,EAAKg7D,YAAc,EACnB,EAAKC,gBAAkB,EAAK10B,eAAev3C,K,yHAApB,KAtBU,E,EADrC,G,EAAA,G,6EAAA,2BA0BEk3C,UAAA,WACE94C,KAAK+4C,WACL/4C,KAAK2nB,MAAQixB,GAGb,IAAM6yB,EAAezrE,KAAKwsB,OAAOxsB,KAAK2tE,gBAClClC,GAAgBA,EAAax3D,UAC/BjU,KAAKu4C,YAnCW,KAoChBv4C,KAAKk4C,SAlCX,EAsCE41B,wBAAA,SAAyB/lE,GAAM,IACrB4c,EAAkB5c,EAAlB4c,KAAM2mD,EAAYvjE,EAAZujE,QAGd,GAFAtrE,KAAKo1C,aAAezwB,EACpB3kB,KAAK2nB,MAAQixB,GACR0yB,EAAL,CAIA,IAAM3+B,EAAW3sC,KAAK0tE,eAAe1tE,KAAK2tE,gBAC1C,GAAKhhC,EAAL,CAQA,IAFA,IAAII,EACEghC,EAAYppD,EAAK5C,MACd3hB,EAAI,EAAGA,EAAIusC,EAAS1kC,OAAQ7H,IACnC,GAAI2tE,GAAaphC,EAASvsC,GAAG2hB,OAASgsD,GAAaphC,EAASvsC,GAAG8I,IAAK,CAClE6jC,EAAYJ,EAASvsC,GACrB,MAIJ,IAAM4tE,EAAUrpD,EAAK5C,MAAQ4C,EAAKlL,SAC9BszB,EACFA,EAAU7jC,IAAM8kE,GAEhBjhC,EAAY,CACVhrB,MAAOgsD,EACP7kE,IAAK8kE,GAEPrhC,EAAStjC,KAAK0jC,OAtEpB,EA0EEwR,gBAAA,YAA4B,IAATjb,EAAS,EAATA,MACjBtjC,KAAKsjC,MAAQA,EACbA,EAAMlI,iBAAiB,UAAWp7B,KAAK6tE,iBACvC7tE,KAAK2nB,MAAQixB,IA7EjB,EAgFEiG,iBAAA,WAAoB,WACb7+C,KAAKsjC,QAGVtjC,KAAKsjC,MAAMwN,oBAAoB,UAAW9wC,KAAK6tE,iBAC/C7tE,KAAK41C,gBAAgBrH,qBACrBvuC,KAAK2tE,gBAAkB,EACvB3tE,KAAKwsB,OAAO9oB,SAAQ,SAAC4T,GACnB,EAAKo2D,eAAep2D,EAAMsC,IAAM,MAElC5Z,KAAKsjC,MAAQ,KACbtjC,KAAK2nB,MAAQixB,KA3FjB,EA+FEvQ,QAAA,SAAStgC,GACP,IAAI4c,EAAO5c,EAAK4c,KAEXA,GAAsB,aAAdA,EAAK7hB,OAId9C,KAAKg5C,aAAeh5C,KAAKg5C,YAAY7a,QACvCn+B,KAAKg5C,YAAY7a,OAAOqJ,QAG1BxnC,KAAK2nB,MAAQixB,KA1GjB,EA8GEq1B,wBAAA,SAAyBlmE,GAAM,WAC7BlE,IAAOrB,IAAI,2BACXxC,KAAK0tE,eAAiB,GACtB1tE,KAAKwsB,OAASzkB,EAAKglE,eACnB/sE,KAAKwsB,OAAO9oB,SAAQ,SAAC4T,GACnB,EAAKo2D,eAAep2D,EAAMsC,IAAM,OAnHtC,EAuHEs0D,sBAAA,SAAuBnmE,GAGrB,GAFA/H,KAAK2tE,eAAiB5lE,EAAK6R,GAEtB5Z,KAAKwsB,QAAWxsB,KAAKwsB,OAAOvkB,SAAmC,IAAzBjI,KAAK2tE,eAAhD,CAMA,IAAMlC,EAAezrE,KAAKwsB,OAAOxsB,KAAK2tE,gBAClClC,GAAgBA,EAAax3D,SAC/BjU,KAAKu4C,YApIW,UA6HhBv4C,KAAKo4C,iBA3HX,EAuIE40B,sBAAA,SAAuBjlE,GAAM,IACnB6R,EAAgB7R,EAAhB6R,GAAI3F,EAAYlM,EAAZkM,QACJ05D,EAA2B3tE,KAA3B2tE,eAAgBnhD,EAAWxsB,KAAXwsB,OAClBi/C,EAAej/C,EAAOmhD,GACxB/zD,GAAM4S,EAAOvkB,QAAU2R,IAAO+zD,IAAmBlC,IAIjDx3D,EAAQmrB,M7BMT,SAAiCwT,EAAaC,EAAas7B,QAAoB,IAApBA,MAAiB,GACjF,IAAIttC,GAAa,EACjB0R,GAAwBK,EAAaC,GAAa,SAACL,EAASC,EAASroC,GACnEqoC,EAAQ1wB,MAAQywB,EAAQzwB,MACxB8e,EAAYz2B,KAGd,IAAMgkE,EAAQv7B,EAAY1T,UAC1B,GAAI0B,EAAY,EACdutC,EAAM1qE,SAAQ,SAAAihB,GACZA,EAAK5C,OAASosD,UAKlB,IAAK,IAAI/tE,EAAIygC,EAAY,EAAGzgC,EAAIguE,EAAMnmE,OAAQ7H,IAC5CguE,EAAMhuE,GAAG2hB,MAASqsD,EAAMhuE,EAAI,GAAG2hB,MAAQqsD,EAAMhuE,EAAI,GAAGqZ,S6BrBlD40D,CAAuB5C,EAAax3D,QAASA,EAASjU,KAAK4tE,aAE7DnC,EAAax3D,QAAUA,EACvBjU,KAAKu4C,YArJa,OAEtB,EAsJE+G,YAAA,WACMt/C,KAAK2nB,QAAUixB,KACjB54C,KAAK2nB,MAAQixB,KAxJnB,EA4JE1K,aAAA,SAAcnmC,GACZ,IAAMixC,EAAch5C,KAAKg5C,YACnBuyB,EAAcxjE,EAAK4c,KAAKhG,YACxB4gC,EAAax3C,EAAK4c,KAClBiX,EAAM57B,KAAK47B,IAEjB,GAAI57B,KAAK2nB,QAAUixB,IACfI,GACmB,aAAnBjxC,EAAK4c,KAAK7hB,MACVk2C,EAAY1sB,KAAOvkB,EAAK4c,KAAK2H,IAE3BvkB,EAAKmkB,QAAQxiB,WAAa,GAAM6hE,GAAeA,EAAY5pE,KAA8B,YAAvB4pE,EAAYxqD,OAAuB,CACvG,IAAIqU,EAAYP,GAAYrG,MAG5BxuB,KAAK6e,UAAU9Q,QAAQhG,EAAKmkB,QAASq/C,EAAY5pE,IAAIwI,OAAQohE,EAAY19D,GAAG1D,QAAQ,SAAUoV,GAC5F,IAAI8V,EAAUR,GAAYrG,MAC1BoN,EAAI9nB,QAAQC,IAAMzN,eAAgB,CAAEqe,KAAM46B,EAAYrzB,QAAS3M,EAAe+V,MAAO,CAAEC,OAAQH,EAAWI,SAAUH,UA7K9H,EAmLEu5B,eAAA,YAA6B,IACrBwf,EADqB,EAAXn6D,QACMkrB,UACtBn/B,KAAK4tE,YAAcQ,EAAMnmE,OAASmmE,EAAM,GAAGrsD,MAAQ,GArLvD,EAwLE22B,OAAA,WACE,GAAK14C,KAAKsjC,MAKV,OAAQtjC,KAAK2nB,OACb,KAAKixB,GAAY,IACPhmC,EAA2D5S,KAA3D4S,OAAQ+6D,EAAmD3tE,KAAnD2tE,eAAgB/3B,EAAmC51C,KAAnC41C,gBAAiBtS,EAAkBtjC,KAAlBsjC,MAAO9W,EAAWxsB,KAAXwsB,OACxD,IAAKA,IAAWA,EAAOmhD,KAAoBnhD,EAAOmhD,GAAgB15D,QAChE,MAHa,IAoBXmiD,EAdItjC,EAA0ClgB,EAA1CkgB,cAAeiiB,EAA2BniC,EAA3BmiC,uBACjB8gB,EAAkB/rD,KAAKoS,IAAItJ,EAAO4oC,gBAAiB5oC,EAAO6oC,oBAC1DnM,EAAeL,EAAaK,aAAatvC,KAAKsuE,eAAgBhrC,EAAM8S,YAAatjB,GAC1Eid,EAA8BT,EAAnCpmC,IAAqB2mC,EAAcP,EAAnBnkC,IAElBwqD,EAAenpC,EAAOmhD,GAAgB15D,QACtCkrB,EAAYw2B,EAAax2B,UACzBwc,EAAUxc,EAAUl3B,OACpBiB,EAAMi2B,EAAUwc,EAAU,GAAG55B,MAAQod,EAAUwc,EAAU,GAAGliC,SAElE,GAAIo2B,EAAYgmB,EACd,OAIF,IAAMzgB,EAAep1C,KAAKo1C,aACtBrF,EAAY7mC,GACVksC,GAAgBugB,EAAajhB,qBAC/B0hB,EAAYvhB,GAAkB1V,EAAWiW,EAAa5P,mBAAoBuP,IAEvEqhB,IACHA,EAAYjhB,GAAkBC,EAAcjW,EAAW4Q,EAAWgF,KAGpEqhB,EAAYj3B,EAAUwc,EAAU,GAG9Bya,GAAaA,EAAUra,WACzBl4C,IAAOrB,IAAP,mBAA8B4zD,EAAU9pC,IACxCtsB,KAAK2nB,MAAQixB,GACb54C,KAAK47B,IAAI9nB,QAAQC,IAAM7M,YAAa,CAAEyd,KAAMyxC,KACnCA,GAAaxgB,EAAgB3H,SAASmoB,KAAejqB,IAE9DnsC,KAAKg5C,YAAcod,EACnBp2D,KAAK2nB,MAAQixB,GACb54C,KAAK47B,IAAI9nB,QAAQC,IAAM7N,aAAc,CAAEye,KAAMyxC,UA9C/Cp2D,KAAK2nB,MAAQixB,IA1LnB,EA8OEG,SAAA,WACE/4C,KAAK4tE,YAAc,EACnB5tE,KAAKo1C,aAAe,KACpB,YAAM2D,SAAN,YAjPJ,EAoPEu1B,aAAA,WACE,OAAOtuE,KAAK0tE,eAAe1tE,KAAK2tE,iBAAmB,IArPvD,EAwPEx0B,eAAA,WACE,GAAIn5C,KAAKg5C,YAAa,CACpB,IAAM5C,EAAcp2C,KAAKsjC,MAAQtjC,KAAKsjC,MAAM8S,YAAc,EACpDiD,EAAYr5C,KAAK4S,OAAOmiC,uBACxBuE,EAAkBt5C,KAAKg5C,YAAYj3B,MAAQs3B,EAC3CE,EAAgBv5C,KAAKg5C,YAAYj3B,MAAQ/hB,KAAKg5C,YAAYv/B,SAAW4/B,GAGvEjD,EAAckD,GAAmBlD,EAAcmD,KAC7Cv5C,KAAKg5C,YAAY7a,QACnBn+B,KAAKg5C,YAAY7a,OAAOqJ,QAG1BxnC,KAAK41C,gBAAgBvI,eAAertC,KAAKg5C,aACzCh5C,KAAKg5C,YAAc,KACnBh5C,KAAKo1C,aAAe,KAGpBp1C,KAAK2nB,MAAQixB,GAGb54C,KAAKk4C,UA7Qb,GAA8CW,K,SDblC20B,K,8BAAAA,E,qCAAAA,Q,KAMZ,IAAMe,GACkB,oBAAXhjE,QAA0BA,OAAOuM,WAAavM,OAAOuM,UAAUy2D,4BACjEhjE,OAAOuM,UAAUy2D,4BAA4B3sE,KAAK2J,OAAOuM,WAEzD,K,uKECX,IAmjBe02D,G,oBA5cb,WAAa5yC,GAAK,aAChB,cAAMA,EACJ7nB,IAAM/P,eACN+P,IAAM7P,eACN6P,IAAMlP,kBAHR,MAnBM4pE,yBAkBU,IAjBVC,sBAiBU,IAhBVC,iBAgBU,IAfVC,kCAeU,IAdVC,uBAcU,IAZVC,aAYU,IAXVC,eAAsC,GAW5B,EAVVC,OAAkC,KAUxB,EATVC,kBAA4B,EASlB,EARVC,4BAAsC,EAQ5B,EANVC,iBAA8C,KAMpC,EAmJVC,kBAAoB,SAACxrE,GAG3B,GAFAC,IAAOrB,IAAP,6BAAwCoB,EAAEyrE,aAA1C,qBAEK,EAAKF,iBAOR,OANAtrE,IAAOlB,MAAM,mFACb,EAAKi5B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAWgoE,iBACjBr7D,QAAS1M,IAAagoE,mBACtBp7D,OAAO,IAKX,IAAMq7D,EAA+B,SAACC,GAC/B,EAAKT,SAGV,EAAKU,qBAAqBD,GAC1B,EAAKE,wCAAwC/rE,EAAEyrE,aAAczrE,EAAEkyB,YAIjE,EAAKq5C,iBAAiB57D,KAAKi8D,GAA8B/7D,MAAM+7D,IAnK/D,EAAKV,QAAUlzC,EAAIhpB,OAEnB,EAAK67D,oBAAsB,EAAKK,QAAQc,mBACxC,EAAKlB,iBAAmB,EAAKI,QAAQe,gBACrC,EAAKlB,YAAc,EAAKG,QAAQgB,WAChC,EAAKlB,6BAA+B,EAAKE,QAAQiB,gCACjD,EAAKlB,kBAAoBjzC,EAAIhpB,OAAOo9D,iBAZpB,E,wHAoBlBC,oBAAA,SAAqBC,GACnB,OAAQA,GACR,KAAK1C,GAAW2C,SACd,IAAKnwE,KAAKyuE,oBACR,MAEF,OAAOzuE,KAAKyuE,oBAGd,MAAM,IAAIniE,MAAJ,oDAA8D4jE,EAA9D,M,EAWAE,wBAAR,SAAiCF,EAAuBG,EAAuBC,GAAuB,WAE9FC,EA1FuC,SAC/CL,EACAG,EACAC,EACAN,GAEA,OAAQE,GACR,KAAK1C,GAAW2C,SACd,OArD+C,SACjDE,EACAC,EACAN,GAEA,IAAMQ,EAA0C,CAM9CC,kBAAmB,GACnBC,kBAAmB,IAgBrB,OAbAL,EAAY3sE,SAAQ,SAAC0U,GACnBo4D,EAAWC,kBAAmBpnE,KAAK,CACjCsnE,YAAa,sBAAsBv4D,EAAxB,IACXw4D,WAAYZ,EAAiBa,iBAAmB,QAGpDP,EAAY5sE,SAAQ,SAAC0U,GACnBo4D,EAAWE,kBAAmBrnE,KAAK,CACjCsnE,YAAa,sBAAsBv4D,EAAxB,IACXw4D,WAAYZ,EAAiBc,iBAAmB,QAI7C,CACLN,GAwBOO,CAA2CV,EAAaC,EAAaN,GAC9E,QACE,MAAM,IAAI1jE,MAAJ,uBAAiC4jE,IAgFTc,CAAyCd,EAAWG,EAAaC,EAAatwE,KAAK6uE,mBAEjHhrE,IAAOrB,IAAI,gDAGX,IAAMyuE,EAAyBjxE,KAAKuuE,4BAA4B2B,EAAWK,GAE3EvwE,KAAKmvE,iBAAmB8B,EAAuB19D,MAAK,SAAC29D,GAAD,OAClD,EAAKC,gCAAgCjB,EAAWgB,MAElDD,EAAuBx9D,OAAM,SAACC,GAC5B7P,IAAOlB,MAAP,gCAA6CutE,EAA7C,YAAmEx8D,O,EAkB/Dy9D,gCAAR,SAAyCjB,EAAuBgB,GAAgE,WAC9HrtE,IAAOrB,IAAP,0BAAqC0tE,EAArC,cAEA,IAAMkB,EAAuC,CAC3CC,6BAA6B,EAC7BH,qBAAsBA,EACtBI,qBAAsBpB,GAGxBlwE,KAAK+uE,eAAe1lE,KAAK+nE,GAEzB,IAAMjC,EAAmBoC,QAAQvvC,UAAUzuB,MAAK,kBAAM29D,EAAqBM,qBACxEj+D,MAAK,SAACk8D,GAOL,OANA2B,EAAkB3B,UAAYA,EAE9B5rE,IAAOrB,IAAP,sCAAiD0tE,EAAjD,KAEA,EAAKuB,sBAEEhC,KAOX,OAJAN,EAAiB17D,OAAM,SAACC,GACtB7P,IAAOlB,MAAM,+BAAgC+Q,MAGxCy7D,G,EASDsC,oBAAR,WAA+B,WAE7BzxE,KAAK+uE,eAAerrE,SAAQ,SAAC0tE,GACtBA,EAAkBM,mBAErBN,EAAkBM,iBAAmBN,EAAkB3B,UAAWkC,gBAClE,EAAKC,sBAAsBR,EAAkBM,uB,EAS3CE,sBAAR,SAA+BC,GAA6B,WAC1DhuE,IAAOrB,IAAP,0BAAqCqvE,EAAWC,WAEhDD,EAAWz2C,iBAAiB,WAAW,SAACtmB,GACtC,EAAKi9D,qBAAqBF,EAAY/8D,EAAMjB,YAC3C,I,EAQGk+D,qBAAR,SAA8BF,EAA6Bh+D,GACzDhQ,IAAOrB,IAAI,mDAEXxC,KAAKgyE,gBAAgBn+D,GAAS,SAAC9L,GAC7BlE,IAAOrB,IAAP,mCAA6CuF,EAAOA,EAAK2B,WAAa3B,GAAtE,2BACA8pE,EAAWI,OAAOlqE,O,EAoCd2nE,qBAAR,SAA8BD,GAC5B,IAAKzvE,KAAKgvE,OACR,MAAM,IAAI1iE,MAAM,sEAGlB,IAAKtM,KAAKivE,iBAAkB,CAE1B,IAAMiD,EAAelyE,KAAK+uE,eAAe,GACzC,IAAKmD,IAAiBA,EAAazC,UAOjC,OANA5rE,IAAOlB,MAAM,sFACb3C,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAWgoE,iBACjBr7D,QAAS1M,IAAagoE,mBACtBp7D,OAAO,IAKXtQ,IAAOrB,IAAI,oCAEXxC,KAAKgvE,OAAOmD,aAAaD,EAAazC,WACtCzvE,KAAKivE,kBAAmB,I,EAOpBU,wCAAR,SAAiDN,EAAsBv5C,GAA8B,WAE7Fo8C,EAAelyE,KAAK+uE,eAAe,GACzC,IAAKmD,EAOH,OANAruE,IAAOlB,MAAM,sFACb3C,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAWgoE,iBACjBr7D,QAAS1M,IAAa6qE,qBACtBj+D,OAAO,IAKX,GAAI+9D,EAAab,4BACfxtE,IAAOpB,KAAK,2DADd,CAKA,IAAMovE,EAAaK,EAAaR,iBAChC,IAAKG,EAOH,OANAhuE,IAAOlB,MAAM,8DACb3C,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAWgoE,iBACjBr7D,QAAS1M,IAAa8qE,sBACtBl+D,OAAO,IAMX,IAAK2hB,EAOH,OANAjyB,IAAOpB,KAAK,sEACZzC,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAWgoE,iBACjBr7D,QAAS1M,IAAa+qE,wBACtBn+D,OAAO,IAKXtQ,IAAOrB,IAAP,uCAAkD6sE,EAAlD,oBACA6C,EAAab,6BAA8B,EAE3CQ,EAAWU,gBAAgBlD,EAAcv5C,GACtCviB,MAAK,WACJ1P,IAAOtB,MAAM,uCAEdkR,OAAM,SAACC,GACN7P,IAAOlB,MAAM,wCAAyC+Q,GACtD,EAAKkoB,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAWgoE,iBACjBr7D,QAAS1M,IAAa8qE,sBACtBl+D,OAAO,S,EAaPq+D,kBAAR,SAA2BjoE,EAAakoE,EAAyBr/D,GAC/D,IAAM+/C,EAAM,IAAIC,eACVyc,EAAkB7vE,KAAK0uE,iBAE7B,IACE,GAAImB,EACF,IACEA,EAAgB1c,EAAK5oD,GACrB,MAAO3G,GAEPuvD,EAAIE,KAAK,OAAQ9oD,GAAK,GACtBslE,EAAgB1c,EAAK5oD,GAIpB4oD,EAAI7W,YACP6W,EAAIE,KAAK,OAAQ9oD,GAAK,GAExB,MAAO3G,GAEP,MAAM,IAAI0I,MAAJ,0CAAoD1I,GAO5D,OAHAuvD,EAAIrsB,aAAe,cACnBqsB,EAAIK,mBACAxzD,KAAK0yE,kCAAkC9wE,KAAK5B,KAAMmzD,EAAK5oD,EAAKkoE,EAAYr/D,GACrE+/C,G,EAUDuf,kCAAR,SAA2Cvf,EAAqB5oD,EAAakoE,EAAyBr/D,GACpG,OAAQ+/C,EAAI7W,YACZ,KAAK,EACH,GAAmB,MAAf6W,EAAIG,OACNtzD,KAAKkvE,4BAA8B,EACnCrrE,IAAOrB,IAAI,6BAEc,gBAArB2wD,EAAIrsB,cACNjjC,IAAOpB,KAAK,iFAEd2Q,EAAS+/C,EAAIjtB,cACR,CAGL,GAFAriC,IAAOlB,MAAP,+BAA4C4H,EAA5C,cAA6D4oD,EAAIG,OAAjE,KAA4EH,EAAIY,WAAhF,KACA/zD,KAAKkvE,8BACDlvE,KAAKkvE,4BAtaoB,EA4a3B,YALAlvE,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAWgoE,iBACjBr7D,QAAS1M,IAAaorE,kCACtBx+D,OAAO,IAKX,IAAMy+D,EA/auB,EA+auB5yE,KAAKkvE,4BAA8B,EACvFrrE,IAAOpB,KAAP,6BAAyCmwE,EAAzC,kBACA5yE,KAAKgyE,gBAAgBS,EAAYr/D,M,EAa/By/D,iCAAR,SAA0CX,EAAiCO,GACzE,OAAQP,EAAaZ,sBAuBrB,KAAK9D,GAAW2C,SAEd,OAAOsC,EAGT,MAAM,IAAInmE,MAAJ,2BAAqC4lE,EAAaZ,uB,EAQlDU,gBAAR,SAAyBS,EAAyBr/D,GAChDvP,IAAOrB,IAAI,6CAEX,IAAM0vE,EAAelyE,KAAK+uE,eAAe,GACzC,IAAKmD,EAOH,OANAruE,IAAOlB,MAAM,uFACb3C,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAWgoE,iBACjBr7D,QAAS1M,IAAa6qE,qBACtBj+D,OAAO,IAKX,IACE,IAAM5J,EAAMvK,KAAKiwE,oBAAoBiC,EAAaZ,sBAC5Cne,EAAMnzD,KAAKwyE,kBAAkBjoE,EAAKkoE,EAAYr/D,GACpDvP,IAAOrB,IAAP,mCAA8C+H,GAC9C,IAAMuoE,EAAY9yE,KAAK6yE,iCAAiCX,EAAcO,GACtEtf,EAAIQ,KAAKmf,GACT,MAAOlvE,GACPC,IAAOlB,MAAP,mCAAgDiB,GAChD5D,KAAK47B,IAAI9nB,QAAQC,IAAM/M,MAAO,CAC5BlE,KAAMwE,IAAWgoE,iBACjBr7D,QAAS1M,IAAaorE,kCACtBx+D,OAAO,M,EAKboqC,gBAAA,SAAiBx2C,GACf,GAAK/H,KAAK2uE,YAAV,CAIA,IAAMrrC,EAAQv7B,EAAKu7B,MAGnBtjC,KAAKgvE,OAAS1rC,EAEdA,EAAMlI,iBAAiB,YAAap7B,KAAKovE,qB,EAG3C2D,gBAAA,WACE,IAAMzvC,EAAQtjC,KAAKgvE,OACbgE,EAAgBhzE,KAAK+uE,eACtBzrC,IAGLA,EAAMwN,oBAAoB,YAAa9wC,KAAKovE,mBAC5CpvE,KAAKgvE,OAAS,KACdhvE,KAAK+uE,eAAiB,GAEtBwC,QAAQ/3C,IAAIw5C,EAAcp7C,KAAI,SAACw5C,GAC7B,GAAIA,EAAkBM,iBAClB,OAAON,EAAkBM,iBAAiBuB,QAAQx/D,OAAM,mBAK1DF,MAAK,WACP,OAAO+vB,EAAM6uC,aAAa,SACzB1+D,OAAM,iB,EAMXqrC,iBAAA,SAAkB/2C,GAChB,GAAK/H,KAAK2uE,YAAV,CAIA,IAAM0B,EAActoE,EAAKo6B,OAAOvK,KAAI,SAACqG,GAAD,OAAWA,EAAM1mB,cAC/C+4D,EAAcvoE,EAAKo6B,OAAOvK,KAAI,SAACqG,GAAD,OAAWA,EAAMzkB,cAErDxZ,KAAKowE,wBAAwB5C,GAAW2C,SAAUE,EAAaC,K,0DA9Y/D,IAAKtwE,KAAK4uE,6BACR,MAAM,IAAItiE,MAAM,sDAGlB,OAAOtM,KAAK4uE,kC,gCAjFYjzC,G,6rBCgFrB,IAAMu3C,GAA8B,GAAH,IACtCt0B,eAAe,EACflF,eAAgB,EAChBoI,uBAAmB,EACnBv/C,OAAO,EACPgvD,mBAAmB,EACnB1B,sBAAsB,EACtBjU,wBAAyB,EACzBJ,gBAAiB,GACjBD,cAAe,IACfzoB,cAAe,GAEfqgD,wBAAyB,GACzB/7B,yBAA0B,EAC1BO,YAAa,GACbD,cAAe,EACf3C,uBAAwB,IACxBgF,sBAAuB,EACvBqC,4BAA6B7rB,IAC7BupB,sBAAkB,EAClBqC,4BAAwB,EACxB0S,sBAAsB,EACtBN,qBAAsBh+B,IACtBkrB,mBAAoB,IACpBpL,cAAc,EACdl9B,mBAAmB,EACnBu0B,uBAAwB,IACxBD,wBAAyB,EACzBE,0BAA2B,IAC3BC,+BAAgC,KAChC6S,gBAAY,EACZ5S,oBAAqB,IACrBC,qBAAsB,EACtBC,uBAAwB,IACxBC,4BAA6B,KAC7BsD,mBAAoB,IACpB6V,oBAAqB,EACrBnV,sBAAuB,IACvBT,2BAA4B,KAC5B4P,mBAAmB,EACnBuW,2BAA4B,IAC5BY,8BAA+B,GAC/BpD,oBAAqB,EACrB/wB,OAAQy0B,GAER3nB,aAAS,EACT5E,aAAS,EACTwsB,cAAU,EACVgd,qBAAiB,EAEjBuD,cAAetrB,GACfurB,iBAAkBroB,GAClBsoB,mBAAoB7jB,GACpB8jB,cAAeliB,GACfx+B,wBAAwB,EACxBoB,oBAAqB,EACrBxO,8BAA8B,EAC9B6iC,gBAAiB,EACjBC,gBAAiB,EACjBC,eAAgB,EAChBC,eAAgB,EAChBC,uBAAwB,IACxBkC,mBAAoB,IACpBC,qBAAsB,GACtBvB,uBAAuB,EACvBwB,mBAAoB,EACpBC,gBAAiB,EACjByoB,eAAgB,EAChB1D,YAAY,EACZF,wBAAoB,EACpBI,iBAAkB,GAClBD,gCAAiCxB,GACjC7zB,eAAe,GAaR,CACLouB,WAAYT,EACZqB,sBAAsB+J,EACtB3I,cAAc2I,EACd1K,wBAAyB,UACzBE,+BAAgC,KAChCC,wBAAyB,UACzBC,+BAAgC,KAChCE,wBAAyB,aACzBC,+BAAgC,GAChCE,wBAAyB,aACzBC,+BAAgC,GAChCY,0BAA0B,IAjGU,IA4EtCqJ,yBAAgDjG,GAChDkG,wBAA+CnH,GAC/C7G,mBAA0CwC,GAC1CyL,sBAA6Cve,GAC7Cwe,qBAA4C5f,GAC5C6f,cAAmCtF,K,giCCtOhBuF,G,oBA4EnB,WAAaC,GAAqC,eAArCA,MAAiC,KAC5C,sBA3EKphE,YA0E2C,IAxE1CqhE,uBAwE0C,IAvE1Cb,mBAuE0C,IAtE1CE,wBAsE0C,IArE1CY,qBAqE0C,IApE1C3jB,sBAoE0C,IAnE1C4jB,wBAmE0C,IAlE1CN,0BAkE0C,IAjE1CF,6BAiE0C,IAhE1CG,mBAgE0C,IA/D1CM,oBA+D0C,IA9D1C9wC,MAAiC,KA8DS,EA7D1C/4B,IAAqB,KAgE3B,IAAM8pE,EAAgBN,EAAIO,cAE1B,IAAKN,EAAWj6B,uBAAyBi6B,EAAW53B,+BAAiC43B,EAAWl6B,kBAAoBk6B,EAAW73B,wBAC7H,MAAM,IAAI7vC,MAAM,qIAIlB,EAAKsG,OAAL,SACKyhE,GACAL,GAZ2C,IAexCphE,EAfwC,MAexCA,OAER,QAA2C,IAAvCA,EAAOwpC,6BAA0CxpC,EAAOwpC,6BAA+BxpC,EAAOmnC,sBAChG,MAAM,IAAIztC,MAAM,2FAGlB,QAAsC,IAAlCsG,EAAOupC,8BAAkE,IAA5BvpC,EAAOknC,kBAA+BlnC,EAAOupC,wBAA0BvpC,EAAOknC,kBAC7H,MAAM,IAAIxtC,MAAM,iFAGlB/I,YAAWqP,EAAOrQ,OAElB,EAAK0xE,mBAAqB,EAO1B,IAAMb,EAAgB,EAAKA,cAAgB,IAAIxgE,EAAOwgE,cAAX,OACrCC,EAAmB,IAAIzgE,EAAOygE,iBAAX,OACnBC,EAAqB,EAAKA,mBAAqB,IAAI1gE,EAAO0gE,mBAAX,OAC/CC,EAAgB,IAAI3gE,EAAO2gE,cAAX,OAChBgB,EAAiB,IAAI9uC,EAAJ,OACjB+uC,EAAiB,IAAI3pC,EAAJ,OACjB4pC,EAAY,IAAI7oC,EAAJ,OACZ8oC,EAAqB,IAAIxvB,GAAJ,OAOrBgvB,EAAkB,EAAKA,gBAAkB,IAAIhyB,GAAJ,OAGzCtM,EAAkB,IAAIxJ,EAAJ,OAOpB+nC,EAAqB,CAACD,EAFD,EAAK3jB,iBAAmB,IAAItW,GAAJ,MAA2BrE,IAQxE++B,EAAa/hE,EAAOghE,sBACpBe,GACFR,EAAmB9qE,KAAK,IAAIsrE,EAAJ,MAAqB/+B,IAM/C,EAAKu+B,mBAAqBA,EAK1B,IAAMC,EAAiB,CACrBG,EACAC,EACAC,EACArB,EACAC,EACAC,EACAC,EACAmB,EACA9+B,GAKF,GADA++B,EAAa/hE,EAAOihE,qBACJ,CACd,IAAMA,EAAuB,IAAIc,EAAJ,OAK7B,EAAKd,qBAAuBA,EAC5BO,EAAe/qE,KAAKwqE,GAItB,GADAc,EAAa/hE,EAAO+gE,wBACJ,CACd,IAAMA,EAA0B,IAAIgB,EAAJ,OAKhC,EAAKhB,wBAA0BA,EAC/BQ,EAAmB9qE,KAAKsqE,GAI1B,GADAgB,EAAa/hE,EAAOkhE,cACJ,CACd,IAAMA,EAAgB,IAAIa,EAAJ,OAKtB,EAAKb,cAAgBA,EACrBM,EAAe/qE,KAAKyqE,GAxH0B,OA4HhDa,EAAa/hE,EAAO8gE,2BAElBS,EAAmB9qE,KAAK,IAAIsrE,EAAJ,MAAqB/+B,KAE/C++B,EAAa/hE,EAAO+yD,qBAElByO,EAAe/qE,KAAK,IAAIsrE,EAAJ,QAMtB,EAAKP,eAAiBA,EAxI0B,E,yFAjD3CQ,YAAP,WACE,OCvDG,WACL,IAAMjpB,EAAc3b,IACpB,IAAK2b,EACH,OAAO,EAET,IAAMM,EAAezgD,KAAKqpE,cAAiBrpE,KAAaspE,mBAClD7zC,EAAkB0qB,GACiB,mBAAhCA,EAAY1qB,iBACnB0qB,EAAY1qB,gBAAgB,6CAIxB8zC,GAAwB9oB,GAC3BA,EAAajqD,WACmC,mBAAxCiqD,EAAajqD,UAAU+sD,cACW,mBAAlC9C,EAAajqD,UAAUwtD,OAClC,QAASvuB,KAAqB8zC,EDuCrBH,I,yCAPP,MAAOI,Y,6BAcP,OAAOlxE,M,iCAOP,OAAOwD,M,mCAOP,OAAOC,M,oCAOP,OAAKwsE,EAAIM,cAIFN,EAAIM,cAHFnB,I,aASemB,GACxBN,EAAIM,cAAgBA,M,2BAuJtB7hE,QAAA,WACE3O,IAAOrB,IAAI,WACXxC,KAAK8T,QAAQhQ,IAAUmD,YACvBjH,KAAKi1E,cACLj1E,KAAKo0E,eAAez+D,OAAO3V,KAAKm0E,oBAAoBzwE,SAAQ,SAAAwxE,GAC1DA,EAAU1iE,aAEZxS,KAAKuK,IAAM,KACXvK,KAAK2W,qBACL3W,KAAKi0E,mBAAqB,G,EAO5BkB,YAAA,SAAa7xC,GACXz/B,IAAOrB,IAAI,eACXxC,KAAKsjC,MAAQA,EACbtjC,KAAK8T,QAAQhQ,IAAUC,gBAAiB,CAAEu/B,MAAOA,K,EAMnD2xC,YAAA,WACEpxE,IAAOrB,IAAI,eACXxC,KAAK8T,QAAQhQ,IAAUG,iBACvBjE,KAAKsjC,MAAQ,M,EAOf8xC,WAAA,SAAY7qE,GACVA,EAAMsB,mBAA4BN,OAAO8pE,SAASC,KAAM/qE,EAAK,CAAE4B,iBAAiB,IAChFtI,IAAOrB,IAAP,cAAyB+H,GACzBvK,KAAKuK,IAAMA,EAEXvK,KAAK8T,QAAQhQ,IAAUa,iBAAkB,CAAE4F,IAAKA,K,EAUlDuuC,UAAA,SAAWY,QAA4B,IAA5BA,OAAyB,GAClC71C,IAAOrB,IAAP,aAAwBk3C,EAAxB,KACA15C,KAAKm0E,mBAAmBzwE,SAAQ,SAAA6xE,GAC9BA,EAAWz8B,UAAUY,O,EAOzBX,SAAA,WACEl1C,IAAOrB,IAAI,YACXxC,KAAKm0E,mBAAmBzwE,SAAQ,SAAA6xE,GAC9BA,EAAWx8B,e,EAOf8I,eAAA,WACEh+C,IAAOrB,IAAI,kBACXxC,KAAKuwD,iBAAiB1O,kB,EASxB2zB,kBAAA,WACE3xE,IAAOrB,IAAI,qBACX,IAAI8gC,EAAQtjC,KAAKsjC,MACjBtjC,KAAKi1E,cACD3xC,GACFtjC,KAAKm1E,YAAY7xC,I,EAYrBghB,YAAA,SAAaT,EAAY7lB,QAAW,IAAXA,MAAQ,GAC/Bh+B,KAAKk0E,gBAAgB5vB,YAAYT,EAAY7lB,I,mCAQ7C,OAAOh+B,KAAKk0E,gBAAgB/xC,S,mCAQ5B,OAAOniC,KAAKuwD,iBAAiB/Q,c,aASbkE,GAChB7/C,IAAOrB,IAAP,oBAA+BkhD,GAC/B1jD,KAAK2iD,UAAYe,EACjB1jD,KAAKuwD,iBAAiBjT,yB,gCAQtB,OAAOt9C,KAAKuwD,iBAAiBvS,W,aAShB0F,GACb7/C,IAAOrB,IAAP,iBAA4BkhD,GAC5B1jD,KAAKk0E,gBAAgBuB,YAAc/xB,EACnC1jD,KAAKuwD,iBAAiB1S,oB,gCAQtB,OAAO79C,KAAKk0E,gBAAgBj2C,O,aASfylB,GACb7/C,IAAOrB,IAAP,iBAA4BkhD,GAC5B1jD,KAAKk0E,gBAAgBuB,YAAc/xB,I,oCAQnC,OAAO1jD,KAAKk0E,gBAAgBt5B,e,aAQX3c,GACjBj+B,KAAKk0E,gBAAgBt5B,cAAgB3c,I,iCASrC,OAAOn0B,KAAK4lB,IAAI1vB,KAAKk0E,gBAAgB5wB,WAAYtjD,KAAKmpD,e,aAOxCzF,GACd7/C,IAAOrB,IAAP,kBAA6BkhD,GAC7B1jD,KAAKk0E,gBAAgB5wB,WAAaI,I,iCAWlC,OAAO1jD,KAAKk0E,gBAAgBz5B,Y,aAUdiJ,GACd7/C,IAAOrB,IAAP,kBAA6BkhD,IAEX,IAAdA,IACFA,EAAW55C,KAAK4lB,IAAIg0B,EAAU1jD,KAAKmpD,eAGrCnpD,KAAKk0E,gBAAgBz5B,WAAaiJ,I,yCAQVgyB,GACxB,IAAMC,IAA4BD,EAE9BC,IAA4B31E,KAAK4S,OAAOi9C,uBACtC8lB,EACF31E,KAAKszE,mBAAmBnjB,gBAExBnwD,KAAKszE,mBAAmBxjB,cACxB9vD,KAAK0vD,kBAAoB,EACzB1vD,KAAKuwD,iBAAiB1S,mBAGxB79C,KAAK4S,OAAOi9C,qBAAuB8lB,K,uCASrC,OAAO31E,KAAKi0E,mB,aAgBQvwB,GACpB7/C,IAAOrB,IAAP,wBAAmCkhD,GACnC1jD,KAAKi0E,kBAAoBvwB,I,wCAVzB,IAAM6G,EAAcvqD,KAAKozE,cAAcnrB,aACvC,OAAOsC,EAAcA,EAAYzD,cAAgB8uB,M,uCAiBjD,OAA8C,IAAtC51E,KAAKk0E,gBAAgBuB,c,kCAQ7B,OAAOz1E,KAAKk0E,gBAAgBuB,c,mCAW5B,IAJ0B,IAClBtzC,EAAuCniC,KAAvCmiC,OAAkBqxC,EAAqBxzE,KAA/B4S,OAAU4gE,eACpBroE,EAAMg3B,EAASA,EAAOl6B,OAAS,EAE5B7H,EAAI,EAAGA,EAAI+K,EAAK/K,IAAK,CAK5B,IAJyB+hC,EAAO/hC,GAAG2oD,YAC/Bj/C,KAAK4lB,IAAIyS,EAAO/hC,GAAG2oD,YAAa5mB,EAAO/hC,GAAG0iC,SAC1CX,EAAO/hC,GAAG0iC,SAES0wC,EACrB,OAAOpzE,EAIX,OAAO,I,mCAOmB,IAClB+hC,EAA6BniC,KAA7BmiC,OAAQutB,EAAqB1vD,KAArB0vD,iBAShB,OAN0B,IAAtBA,GAA2BvtB,GAAUA,EAAOl6B,OAC/Bk6B,EAAOl6B,OAAS,EAEhBynD,I,oCAYjB,OAAO5lD,KAAKoS,IAAIpS,KAAK4lB,IAAI1vB,KAAKozE,cAAcz4B,cAAe36C,KAAKmpD,cAAenpD,KAAK+pD,e,aAWnE/L,GACjBh+C,KAAKozE,cAAcz4B,cAAgB7wC,KAAK4lB,IAAI1vB,KAAKmpD,aAAcnL,K,kCAQ/D,IAAM61B,EAAuB7zE,KAAK6zE,qBAClC,OAAOA,EAAuBA,EAAqB3qC,YAAc,K,iCAQjE,IAAM2qC,EAAuB7zE,KAAK6zE,qBAClC,OAAOA,EAAuBA,EAAqBzxD,YAAc,G,aAOnDyzD,GACd,IAAMhC,EAAuB7zE,KAAK6zE,qBAC9BA,IACFA,EAAqBzxD,WAAayzD,K,uCAQpC,OAAO71E,KAAKuwD,iBAAiBlU,mB,qCAS7B,IAAMs3B,EAA0B3zE,KAAK2zE,wBACrC,OAAOA,EAA0BA,EAAwB5G,eAAiB,K,oCAQ1E,IAAM4G,EAA0B3zE,KAAK2zE,wBACrC,OAAOA,EAA0BA,EAAwBxI,eAAiB,G,aAOzDoC,GACjB,IAAMoG,EAA0B3zE,KAAK2zE,wBACjCA,IACFA,EAAwBxI,cAAgBoC,K,sCAQ1C,IAAMoG,EAA0B3zE,KAAK2zE,wBACrC,QAAOA,GAA0BA,EAAwB1I,iB,aAOtC5pE,GACnB,IAAMsyE,EAA0B3zE,KAAK2zE,wBACjCA,IACFA,EAAwB1I,gBAAkB5pE,O,GA7oBf6uC,GAAZ6jC,GACLM,mB","file":"hls.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Hls\"] = factory();\n\telse\n\t\troot[\"Hls\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 13);\n","import { getSelfScope } from './get-self-scope';\n\nfunction noop (...args) {}\n\nconst fakeLogger = {\n trace: noop,\n debug: noop,\n log: noop,\n warn: noop,\n info: noop,\n error: noop\n};\n\nlet exportedLogger = fakeLogger;\n\n// let lastCallTime;\n// function formatMsgWithTimeInfo(type, msg) {\n// const now = Date.now();\n// const diff = lastCallTime ? '+' + (now - lastCallTime) : '0';\n// lastCallTime = now;\n// msg = (new Date(now)).toISOString() + ' | [' + type + '] > ' + msg + ' ( ' + diff + ' ms )';\n// return msg;\n// }\n\nfunction formatMsg (type, msg) {\n msg = '[' + type + '] > ' + msg;\n return msg;\n}\n\nconst global = getSelfScope();\n\nfunction consolePrintFn (type) {\n const func = global.console[type];\n if (func) {\n return function (...args) {\n if (args[0]) {\n args[0] = formatMsg(type, args[0]);\n }\n\n func.apply(global.console, args);\n };\n }\n return noop;\n}\n\nfunction exportLoggerFunctions (debugConfig, ...functions) {\n functions.forEach(function (type) {\n exportedLogger[type] = debugConfig[type] ? debugConfig[type].bind(debugConfig) : consolePrintFn(type);\n });\n}\n\nexport const enableLogs = function (debugConfig) {\n // check that console is available\n if ((global.console && debugConfig === true) || typeof debugConfig === 'object') {\n exportLoggerFunctions(debugConfig,\n // Remove out from list here to hard-disable a log-level\n // 'trace',\n 'debug',\n 'log',\n 'info',\n 'warn',\n 'error'\n );\n // Some browsers don't allow to use bind on console object anyway\n // fallback to default if needed\n try {\n exportedLogger.log();\n } catch (e) {\n exportedLogger = fakeLogger;\n }\n } else {\n exportedLogger = fakeLogger;\n }\n};\n\nexport const logger = exportedLogger;\n","/**\n * @readonly\n * @enum {string}\n */\nconst HlsEvents = {\n // fired before MediaSource is attaching to media element - data: { media }\n MEDIA_ATTACHING: 'hlsMediaAttaching',\n // fired when MediaSource has been succesfully attached to media element - data: { }\n MEDIA_ATTACHED: 'hlsMediaAttached',\n // fired before detaching MediaSource from media element - data: { }\n MEDIA_DETACHING: 'hlsMediaDetaching',\n // fired when MediaSource has been detached from media element - data: { }\n MEDIA_DETACHED: 'hlsMediaDetached',\n // fired when we buffer is going to be reset - data: { }\n BUFFER_RESET: 'hlsBufferReset',\n // fired when we know about the codecs that we need buffers for to push into - data: {tracks : { container, codec, levelCodec, initSegment, metadata }}\n BUFFER_CODECS: 'hlsBufferCodecs',\n // fired when sourcebuffers have been created - data: { tracks : tracks }\n BUFFER_CREATED: 'hlsBufferCreated',\n // fired when we append a segment to the buffer - data: { segment: segment object }\n BUFFER_APPENDING: 'hlsBufferAppending',\n // fired when we are done with appending a media segment to the buffer - data : { parent : segment parent that triggered BUFFER_APPENDING, pending : nb of segments waiting for appending for this segment parent}\n BUFFER_APPENDED: 'hlsBufferAppended',\n // fired when the stream is finished and we want to notify the media buffer that there will be no more data - data: { }\n BUFFER_EOS: 'hlsBufferEos',\n // fired when the media buffer should be flushed - data { startOffset, endOffset }\n BUFFER_FLUSHING: 'hlsBufferFlushing',\n // fired when the media buffer has been flushed - data: { }\n BUFFER_FLUSHED: 'hlsBufferFlushed',\n // fired to signal that a manifest loading starts - data: { url : manifestURL}\n MANIFEST_LOADING: 'hlsManifestLoading',\n // fired after manifest has been loaded - data: { levels : [available quality levels], audioTracks : [ available audio tracks], url : manifestURL, stats : { trequest, tfirst, tload, mtime}}\n MANIFEST_LOADED: 'hlsManifestLoaded',\n // fired after manifest has been parsed - data: { levels : [available quality levels], firstLevel : index of first quality level appearing in Manifest}\n MANIFEST_PARSED: 'hlsManifestParsed',\n // fired when a level switch is requested - data: { level : id of new level }\n LEVEL_SWITCHING: 'hlsLevelSwitching',\n // fired when a level switch is effective - data: { level : id of new level }\n LEVEL_SWITCHED: 'hlsLevelSwitched',\n // fired when a level playlist loading starts - data: { url : level URL, level : id of level being loaded}\n LEVEL_LOADING: 'hlsLevelLoading',\n // fired when a level playlist loading finishes - data: { details : levelDetails object, level : id of loaded level, stats : { trequest, tfirst, tload, mtime} }\n LEVEL_LOADED: 'hlsLevelLoaded',\n // fired when a level's details have been updated based on previous details, after it has been loaded - data: { details : levelDetails object, level : id of updated level }\n LEVEL_UPDATED: 'hlsLevelUpdated',\n // fired when a level's PTS information has been updated after parsing a fragment - data: { details : levelDetails object, level : id of updated level, drift: PTS drift observed when parsing last fragment }\n LEVEL_PTS_UPDATED: 'hlsLevelPtsUpdated',\n // fired to notify that levels have changed after removing a level - data: { levels : [available quality levels] }\n LEVELS_UPDATED: 'hlsLevelsUpdated',\n // fired to notify that audio track lists has been updated - data: { audioTracks : audioTracks }\n AUDIO_TRACKS_UPDATED: 'hlsAudioTracksUpdated',\n // fired when an audio track switching is requested - data: { id : audio track id }\n AUDIO_TRACK_SWITCHING: 'hlsAudioTrackSwitching',\n // fired when an audio track switch actually occurs - data: { id : audio track id }\n AUDIO_TRACK_SWITCHED: 'hlsAudioTrackSwitched',\n // fired when an audio track loading starts - data: { url : audio track URL, id : audio track id }\n AUDIO_TRACK_LOADING: 'hlsAudioTrackLoading',\n // fired when an audio track loading finishes - data: { details : levelDetails object, id : audio track id, stats : { trequest, tfirst, tload, mtime } }\n AUDIO_TRACK_LOADED: 'hlsAudioTrackLoaded',\n // fired to notify that subtitle track lists has been updated - data: { subtitleTracks : subtitleTracks }\n SUBTITLE_TRACKS_UPDATED: 'hlsSubtitleTracksUpdated',\n // fired when an subtitle track switch occurs - data: { id : subtitle track id }\n SUBTITLE_TRACK_SWITCH: 'hlsSubtitleTrackSwitch',\n // fired when a subtitle track loading starts - data: { url : subtitle track URL, id : subtitle track id }\n SUBTITLE_TRACK_LOADING: 'hlsSubtitleTrackLoading',\n // fired when a subtitle track loading finishes - data: { details : levelDetails object, id : subtitle track id, stats : { trequest, tfirst, tload, mtime } }\n SUBTITLE_TRACK_LOADED: 'hlsSubtitleTrackLoaded',\n // fired when a subtitle fragment has been processed - data: { success : boolean, frag : the processed frag }\n SUBTITLE_FRAG_PROCESSED: 'hlsSubtitleFragProcessed',\n // fired when a set of VTTCues to be managed externally has been parsed - data: { type: string, track: string, cues: [ VTTCue ] }\n CUES_PARSED: 'hlsCuesParsed',\n // fired when a text track to be managed externally is found - data: { tracks: [ { label: string, kind: string, default: boolean } ] }\n NON_NATIVE_TEXT_TRACKS_FOUND: 'hlsNonNativeTextTracksFound',\n // fired when the first timestamp is found - data: { id : demuxer id, initPTS: initPTS, frag : fragment object }\n INIT_PTS_FOUND: 'hlsInitPtsFound',\n // fired when a fragment loading starts - data: { frag : fragment object }\n FRAG_LOADING: 'hlsFragLoading',\n // fired when a fragment loading is progressing - data: { frag : fragment object, { trequest, tfirst, loaded } }\n FRAG_LOAD_PROGRESS: 'hlsFragLoadProgress',\n // Identifier for fragment load aborting for emergency switch down - data: { frag : fragment object }\n FRAG_LOAD_EMERGENCY_ABORTED: 'hlsFragLoadEmergencyAborted',\n // fired when a fragment loading is completed - data: { frag : fragment object, payload : fragment payload, stats : { trequest, tfirst, tload, length } }\n FRAG_LOADED: 'hlsFragLoaded',\n // fired when a fragment has finished decrypting - data: { id : demuxer id, frag: fragment object, payload : fragment payload, stats : { tstart, tdecrypt } }\n FRAG_DECRYPTED: 'hlsFragDecrypted',\n // fired when Init Segment has been extracted from fragment - data: { id : demuxer id, frag: fragment object, moov : moov MP4 box, codecs : codecs found while parsing fragment }\n FRAG_PARSING_INIT_SEGMENT: 'hlsFragParsingInitSegment',\n // fired when parsing sei text is completed - data: { id : demuxer id, frag: fragment object, samples : [ sei samples pes ] }\n FRAG_PARSING_USERDATA: 'hlsFragParsingUserdata',\n // fired when parsing id3 is completed - data: { id : demuxer id, frag: fragment object, samples : [ id3 samples pes ] }\n FRAG_PARSING_METADATA: 'hlsFragParsingMetadata',\n // fired when data have been extracted from fragment - data: { id : demuxer id, frag: fragment object, data1 : moof MP4 box or TS fragments, data2 : mdat MP4 box or null}\n FRAG_PARSING_DATA: 'hlsFragParsingData',\n // fired when fragment parsing is completed - data: { id : demuxer id, frag: fragment object }\n FRAG_PARSED: 'hlsFragParsed',\n // fired when fragment remuxed MP4 boxes have all been appended into SourceBuffer - data: { id : demuxer id, frag : fragment object, stats : { trequest, tfirst, tload, tparsed, tbuffered, length, bwEstimate } }\n FRAG_BUFFERED: 'hlsFragBuffered',\n // fired when fragment matching with current media position is changing - data : { id : demuxer id, frag : fragment object }\n FRAG_CHANGED: 'hlsFragChanged',\n // Identifier for a FPS drop event - data: { curentDropped, currentDecoded, totalDroppedFrames }\n FPS_DROP: 'hlsFpsDrop',\n // triggered when FPS drop triggers auto level capping - data: { level, droppedlevel }\n FPS_DROP_LEVEL_CAPPING: 'hlsFpsDropLevelCapping',\n // Identifier for an error event - data: { type : error type, details : error details, fatal : if true, hls.js cannot/will not try to recover, if false, hls.js will try to recover,other error specific data }\n ERROR: 'hlsError',\n // fired when hls.js instance starts destroying. Different from MEDIA_DETACHED as one could want to detach and reattach a media to the instance of hls.js to handle mid-rolls for example - data: { }\n DESTROYING: 'hlsDestroying',\n // fired when a decrypt key loading starts - data: { frag : fragment object }\n KEY_LOADING: 'hlsKeyLoading',\n // fired when a decrypt key loading is completed - data: { frag : fragment object, payload : key payload, stats : { trequest, tfirst, tload, length } }\n KEY_LOADED: 'hlsKeyLoaded',\n // fired upon stream controller state transitions - data: { previousState, nextState }\n STREAM_STATE_TRANSITION: 'hlsStreamStateTransition',\n // fired when the live back buffer is reached defined by the liveBackBufferLength config option - data : { bufferEnd: number }\n LIVE_BACK_BUFFER_REACHED: 'hlsLiveBackBufferReached'\n};\n\nexport default HlsEvents;\n","export enum ErrorTypes {\n // Identifier for a network error (loading error / timeout ...)\n NETWORK_ERROR = 'networkError',\n // Identifier for a media Error (video/parsing/mediasource error)\n MEDIA_ERROR = 'mediaError',\n // EME (encrypted media extensions) errors\n KEY_SYSTEM_ERROR = 'keySystemError',\n // Identifier for a mux Error (demuxing/remuxing)\n MUX_ERROR = 'muxError',\n // Identifier for all other errors\n OTHER_ERROR = 'otherError'\n}\n\n/**\n * @enum {ErrorDetails}\n * @typedef {string} ErrorDetail\n */\nexport enum ErrorDetails {\n KEY_SYSTEM_NO_KEYS = 'keySystemNoKeys',\n KEY_SYSTEM_NO_ACCESS = 'keySystemNoAccess',\n KEY_SYSTEM_NO_SESSION = 'keySystemNoSession',\n KEY_SYSTEM_LICENSE_REQUEST_FAILED = 'keySystemLicenseRequestFailed',\n KEY_SYSTEM_NO_INIT_DATA = 'keySystemNoInitData',\n // Identifier for a manifest load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n MANIFEST_LOAD_ERROR = 'manifestLoadError',\n // Identifier for a manifest load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n MANIFEST_LOAD_TIMEOUT = 'manifestLoadTimeOut',\n // Identifier for a manifest parsing error - data: { url : faulty URL, reason : error reason}\n MANIFEST_PARSING_ERROR = 'manifestParsingError',\n // Identifier for a manifest with only incompatible codecs error - data: { url : faulty URL, reason : error reason}\n MANIFEST_INCOMPATIBLE_CODECS_ERROR = 'manifestIncompatibleCodecsError',\n // Identifier for a level which contains no fragments - data: { url: faulty URL, reason: \"no fragments found in level\", level: index of the bad level }\n LEVEL_EMPTY_ERROR = 'levelEmptyError',\n // Identifier for a level load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n LEVEL_LOAD_ERROR = 'levelLoadError',\n // Identifier for a level load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n LEVEL_LOAD_TIMEOUT = 'levelLoadTimeOut',\n // Identifier for a level switch error - data: { level : faulty level Id, event : error description}\n LEVEL_SWITCH_ERROR = 'levelSwitchError',\n // Identifier for an audio track load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n AUDIO_TRACK_LOAD_ERROR = 'audioTrackLoadError',\n // Identifier for an audio track load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n AUDIO_TRACK_LOAD_TIMEOUT = 'audioTrackLoadTimeOut',\n // Identifier for fragment load error - data: { frag : fragment object, response : { code: error code, text: error text }}\n FRAG_LOAD_ERROR = 'fragLoadError',\n // Identifier for fragment load timeout error - data: { frag : fragment object}\n FRAG_LOAD_TIMEOUT = 'fragLoadTimeOut',\n // Identifier for a fragment decryption error event - data: {id : demuxer Id,frag: fragment object, reason : parsing error description }\n FRAG_DECRYPT_ERROR = 'fragDecryptError',\n // Identifier for a fragment parsing error event - data: { id : demuxer Id, reason : parsing error description }\n // will be renamed DEMUX_PARSING_ERROR and switched to MUX_ERROR in the next major release\n FRAG_PARSING_ERROR = 'fragParsingError',\n // Identifier for a remux alloc error event - data: { id : demuxer Id, frag : fragment object, bytes : nb of bytes on which allocation failed , reason : error text }\n REMUX_ALLOC_ERROR = 'remuxAllocError',\n // Identifier for decrypt key load error - data: { frag : fragment object, response : { code: error code, text: error text }}\n KEY_LOAD_ERROR = 'keyLoadError',\n // Identifier for decrypt key load timeout error - data: { frag : fragment object}\n KEY_LOAD_TIMEOUT = 'keyLoadTimeOut',\n // Triggered when an exception occurs while adding a sourceBuffer to MediaSource - data : { err : exception , mimeType : mimeType }\n BUFFER_ADD_CODEC_ERROR = 'bufferAddCodecError',\n // Identifier for a buffer append error - data: append error description\n BUFFER_APPEND_ERROR = 'bufferAppendError',\n // Identifier for a buffer appending error event - data: appending error description\n BUFFER_APPENDING_ERROR = 'bufferAppendingError',\n // Identifier for a buffer stalled error event\n BUFFER_STALLED_ERROR = 'bufferStalledError',\n // Identifier for a buffer full event\n BUFFER_FULL_ERROR = 'bufferFullError',\n // Identifier for a buffer seek over hole event\n BUFFER_SEEK_OVER_HOLE = 'bufferSeekOverHole',\n // Identifier for a buffer nudge on stall (playback is stuck although currentTime is in a buffered area)\n BUFFER_NUDGE_ON_STALL = 'bufferNudgeOnStall',\n // Identifier for an internal exception happening inside hls.js while handling an event\n INTERNAL_EXCEPTION = 'internalException'\n}\n","export const isFiniteNumber = Number.isFinite || function (value) {\n return typeof value === 'number' && isFinite(value);\n};\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n","import { getSelfScope } from '../utils/get-self-scope';\n\n/**\n * ID3 parser\n */\nclass ID3 {\n /**\n * Returns true if an ID3 header can be found at offset in data\n * @param {Uint8Array} data - The data to search in\n * @param {number} offset - The offset at which to start searching\n * @return {boolean} - True if an ID3 header is found\n */\n static isHeader (data, offset) {\n /*\n * http://id3.org/id3v2.3.0\n * [0] = 'I'\n * [1] = 'D'\n * [2] = '3'\n * [3,4] = {Version}\n * [5] = {Flags}\n * [6-9] = {ID3 Size}\n *\n * An ID3v2 tag can be detected with the following pattern:\n * $49 44 33 yy yy xx zz zz zz zz\n * Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80\n */\n if (offset + 10 <= data.length) {\n // look for 'ID3' identifier\n if (data[offset] === 0x49 && data[offset + 1] === 0x44 && data[offset + 2] === 0x33) {\n // check version is within range\n if (data[offset + 3] < 0xFF && data[offset + 4] < 0xFF) {\n // check size is within range\n if (data[offset + 6] < 0x80 && data[offset + 7] < 0x80 && data[offset + 8] < 0x80 && data[offset + 9] < 0x80) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n /**\n * Returns true if an ID3 footer can be found at offset in data\n * @param {Uint8Array} data - The data to search in\n * @param {number} offset - The offset at which to start searching\n * @return {boolean} - True if an ID3 footer is found\n */\n static isFooter (data, offset) {\n /*\n * The footer is a copy of the header, but with a different identifier\n */\n if (offset + 10 <= data.length) {\n // look for '3DI' identifier\n if (data[offset] === 0x33 && data[offset + 1] === 0x44 && data[offset + 2] === 0x49) {\n // check version is within range\n if (data[offset + 3] < 0xFF && data[offset + 4] < 0xFF) {\n // check size is within range\n if (data[offset + 6] < 0x80 && data[offset + 7] < 0x80 && data[offset + 8] < 0x80 && data[offset + 9] < 0x80) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n /**\n * Returns any adjacent ID3 tags found in data starting at offset, as one block of data\n * @param {Uint8Array} data - The data to search in\n * @param {number} offset - The offset at which to start searching\n * @return {Uint8Array} - The block of data containing any ID3 tags found\n */\n static getID3Data (data, offset) {\n const front = offset;\n let length = 0;\n\n while (ID3.isHeader(data, offset)) {\n // ID3 header is 10 bytes\n length += 10;\n\n const size = ID3._readSize(data, offset + 6);\n length += size;\n\n if (ID3.isFooter(data, offset + 10)) {\n // ID3 footer is 10 bytes\n length += 10;\n }\n\n offset += length;\n }\n\n if (length > 0) {\n return data.subarray(front, front + length);\n }\n\n return undefined;\n }\n\n static _readSize (data, offset) {\n let size = 0;\n size = ((data[offset] & 0x7f) << 21);\n size |= ((data[offset + 1] & 0x7f) << 14);\n size |= ((data[offset + 2] & 0x7f) << 7);\n size |= (data[offset + 3] & 0x7f);\n return size;\n }\n\n /**\n * Searches for the Elementary Stream timestamp found in the ID3 data chunk\n * @param {Uint8Array} data - Block of data containing one or more ID3 tags\n * @return {number} - The timestamp\n */\n static getTimeStamp (data) {\n const frames = ID3.getID3Frames(data);\n for (let i = 0; i < frames.length; i++) {\n const frame = frames[i];\n if (ID3.isTimeStampFrame(frame)) {\n return ID3._readTimeStamp(frame);\n }\n }\n\n return undefined;\n }\n\n /**\n * Returns true if the ID3 frame is an Elementary Stream timestamp frame\n * @param {ID3 frame} frame\n */\n static isTimeStampFrame (frame) {\n return (frame && frame.key === 'PRIV' && frame.info === 'com.apple.streaming.transportStreamTimestamp');\n }\n\n static _getFrameData (data) {\n /*\n Frame ID $xx xx xx xx (four characters)\n Size $xx xx xx xx\n Flags $xx xx\n */\n const type = String.fromCharCode(data[0], data[1], data[2], data[3]);\n const size = ID3._readSize(data, 4);\n\n // skip frame id, size, and flags\n let offset = 10;\n\n return { type, size, data: data.subarray(offset, offset + size) };\n }\n\n /**\n * Returns an array of ID3 frames found in all the ID3 tags in the id3Data\n * @param {Uint8Array} id3Data - The ID3 data containing one or more ID3 tags\n * @return {ID3 frame[]} - Array of ID3 frame objects\n */\n static getID3Frames (id3Data) {\n let offset = 0;\n const frames = [];\n\n while (ID3.isHeader(id3Data, offset)) {\n const size = ID3._readSize(id3Data, offset + 6);\n // skip past ID3 header\n offset += 10;\n const end = offset + size;\n // loop through frames in the ID3 tag\n while (offset + 8 < end) {\n const frameData = ID3._getFrameData(id3Data.subarray(offset));\n const frame = ID3._decodeFrame(frameData);\n if (frame) {\n frames.push(frame);\n }\n\n // skip frame header and frame data\n offset += frameData.size + 10;\n }\n\n if (ID3.isFooter(id3Data, offset)) {\n offset += 10;\n }\n }\n\n return frames;\n }\n\n static _decodeFrame (frame) {\n if (frame.type === 'PRIV') {\n return ID3._decodePrivFrame(frame);\n } else if (frame.type[0] === 'W') {\n return ID3._decodeURLFrame(frame);\n }\n\n return ID3._decodeTextFrame(frame);\n }\n\n static _readTimeStamp (timeStampFrame) {\n if (timeStampFrame.data.byteLength === 8) {\n const data = new Uint8Array(timeStampFrame.data);\n // timestamp is 33 bit expressed as a big-endian eight-octet number,\n // with the upper 31 bits set to zero.\n const pts33Bit = data[3] & 0x1;\n let timestamp = (data[4] << 23) +\n (data[5] << 15) +\n (data[6] << 7) +\n data[7];\n timestamp /= 45;\n\n if (pts33Bit) {\n timestamp += 47721858.84;\n } // 2^32 / 90\n\n return Math.round(timestamp);\n }\n\n return undefined;\n }\n\n static _decodePrivFrame (frame) {\n /*\n Format: \\0\n */\n if (frame.size < 2) {\n return undefined;\n }\n\n const owner = ID3._utf8ArrayToStr(frame.data, true);\n const privateData = new Uint8Array(frame.data.subarray(owner.length + 1));\n\n return { key: frame.type, info: owner, data: privateData.buffer };\n }\n\n static _decodeTextFrame (frame) {\n if (frame.size < 2) {\n return undefined;\n }\n\n if (frame.type === 'TXXX') {\n /*\n Format:\n [0] = {Text Encoding}\n [1-?] = {Description}\\0{Value}\n */\n let index = 1;\n const description = ID3._utf8ArrayToStr(frame.data.subarray(index), true);\n\n index += description.length + 1;\n const value = ID3._utf8ArrayToStr(frame.data.subarray(index));\n\n return { key: frame.type, info: description, data: value };\n } else {\n /*\n Format:\n [0] = {Text Encoding}\n [1-?] = {Value}\n */\n const text = ID3._utf8ArrayToStr(frame.data.subarray(1));\n return { key: frame.type, data: text };\n }\n }\n\n static _decodeURLFrame (frame) {\n if (frame.type === 'WXXX') {\n /*\n Format:\n [0] = {Text Encoding}\n [1-?] = {Description}\\0{URL}\n */\n if (frame.size < 2) {\n return undefined;\n }\n\n let index = 1;\n const description = ID3._utf8ArrayToStr(frame.data.subarray(index), true);\n\n index += description.length + 1;\n const value = ID3._utf8ArrayToStr(frame.data.subarray(index));\n\n return { key: frame.type, info: description, data: value };\n } else {\n /*\n Format:\n [0-?] = {URL}\n */\n const url = ID3._utf8ArrayToStr(frame.data);\n return { key: frame.type, data: url };\n }\n }\n\n // http://stackoverflow.com/questions/8936984/uint8array-to-string-in-javascript/22373197\n // http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n /* utf.js - UTF-8 <=> UTF-16 convertion\n *\n * Copyright (C) 1999 Masanao Izumo \n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free. You can redistribute it and/or modify it.\n */\n static _utf8ArrayToStr (array, exitOnNull = false) {\n const decoder = getTextDecoder();\n if (decoder) {\n const decoded = decoder.decode(array);\n\n if (exitOnNull) {\n // grab up to the first null\n const idx = decoded.indexOf('\\0');\n return idx !== -1 ? decoded.substring(0, idx) : decoded;\n }\n\n // remove any null characters\n return decoded.replace(/\\0/g, '');\n }\n\n const len = array.length;\n let c;\n let char2;\n let char3;\n let out = '';\n let i = 0;\n while (i < len) {\n c = array[i++];\n if (c === 0x00 && exitOnNull) {\n return out;\n } else if (c === 0x00 || c === 0x03) {\n // If the character is 3 (END_OF_TEXT) or 0 (NULL) then skip it\n continue;\n }\n switch (c >> 4) {\n case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:\n // 0xxxxxxx\n out += String.fromCharCode(c);\n break;\n case 12: case 13:\n // 110x xxxx 10xx xxxx\n char2 = array[i++];\n out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));\n break;\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2 = array[i++];\n char3 = array[i++];\n out += String.fromCharCode(((c & 0x0F) << 12) |\n ((char2 & 0x3F) << 6) |\n ((char3 & 0x3F) << 0));\n break;\n default:\n }\n }\n return out;\n }\n}\n\nlet decoder;\n\nfunction getTextDecoder () {\n const global = getSelfScope(); // safeguard for code that might run both on worker and main thread\n if (!decoder && typeof global.TextDecoder !== 'undefined') {\n decoder = new global.TextDecoder('utf-8');\n }\n\n return decoder;\n}\n\nconst utf8ArrayToStr = ID3._utf8ArrayToStr;\n\nexport default ID3;\n\nexport { utf8ArrayToStr };\n","export function getSelfScope () {\n // see https://stackoverflow.com/a/11237259/589493\n if (typeof window === 'undefined') {\n /* eslint-disable-next-line no-undef */\n return self;\n } else {\n return window;\n }\n}\n","// see https://tools.ietf.org/html/rfc1808\n\n(function (root) {\n var URL_REGEX = /^((?:[a-zA-Z0-9+\\-.]+:)?)(\\/\\/[^\\/?#]*)?((?:[^\\/?#]*\\/)*[^;?#]*)?(;[^?#]*)?(\\?[^#]*)?(#.*)?$/;\n var FIRST_SEGMENT_REGEX = /^([^\\/?#]*)(.*)$/;\n var SLASH_DOT_REGEX = /(?:\\/|^)\\.(?=\\/)/g;\n var SLASH_DOT_DOT_REGEX = /(?:\\/|^)\\.\\.\\/(?!\\.\\.\\/)[^\\/]*(?=\\/)/g;\n\n var URLToolkit = {\n // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or //\n // E.g\n // With opts.alwaysNormalize = false (default, spec compliant)\n // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g\n // With opts.alwaysNormalize = true (not spec compliant)\n // http://a.com/b/cd + /e/f/../g => http://a.com/e/g\n buildAbsoluteURL: function (baseURL, relativeURL, opts) {\n opts = opts || {};\n // remove any remaining space and CRLF\n baseURL = baseURL.trim();\n relativeURL = relativeURL.trim();\n if (!relativeURL) {\n // 2a) If the embedded URL is entirely empty, it inherits the\n // entire base URL (i.e., is set equal to the base URL)\n // and we are done.\n if (!opts.alwaysNormalize) {\n return baseURL;\n }\n var basePartsForNormalise = URLToolkit.parseURL(baseURL);\n if (!basePartsForNormalise) {\n throw new Error('Error trying to parse base URL.');\n }\n basePartsForNormalise.path = URLToolkit.normalizePath(\n basePartsForNormalise.path\n );\n return URLToolkit.buildURLFromParts(basePartsForNormalise);\n }\n var relativeParts = URLToolkit.parseURL(relativeURL);\n if (!relativeParts) {\n throw new Error('Error trying to parse relative URL.');\n }\n if (relativeParts.scheme) {\n // 2b) If the embedded URL starts with a scheme name, it is\n // interpreted as an absolute URL and we are done.\n if (!opts.alwaysNormalize) {\n return relativeURL;\n }\n relativeParts.path = URLToolkit.normalizePath(relativeParts.path);\n return URLToolkit.buildURLFromParts(relativeParts);\n }\n var baseParts = URLToolkit.parseURL(baseURL);\n if (!baseParts) {\n throw new Error('Error trying to parse base URL.');\n }\n if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== '/') {\n // If netLoc missing and path doesn't start with '/', assume everthing before the first '/' is the netLoc\n // This causes 'example.com/a' to be handled as '//example.com/a' instead of '/example.com/a'\n var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path);\n baseParts.netLoc = pathParts[1];\n baseParts.path = pathParts[2];\n }\n if (baseParts.netLoc && !baseParts.path) {\n baseParts.path = '/';\n }\n var builtParts = {\n // 2c) Otherwise, the embedded URL inherits the scheme of\n // the base URL.\n scheme: baseParts.scheme,\n netLoc: relativeParts.netLoc,\n path: null,\n params: relativeParts.params,\n query: relativeParts.query,\n fragment: relativeParts.fragment,\n };\n if (!relativeParts.netLoc) {\n // 3) If the embedded URL's is non-empty, we skip to\n // Step 7. Otherwise, the embedded URL inherits the \n // (if any) of the base URL.\n builtParts.netLoc = baseParts.netLoc;\n // 4) If the embedded URL path is preceded by a slash \"/\", the\n // path is not relative and we skip to Step 7.\n if (relativeParts.path[0] !== '/') {\n if (!relativeParts.path) {\n // 5) If the embedded URL path is empty (and not preceded by a\n // slash), then the embedded URL inherits the base URL path\n builtParts.path = baseParts.path;\n // 5a) if the embedded URL's is non-empty, we skip to\n // step 7; otherwise, it inherits the of the base\n // URL (if any) and\n if (!relativeParts.params) {\n builtParts.params = baseParts.params;\n // 5b) if the embedded URL's is non-empty, we skip to\n // step 7; otherwise, it inherits the of the base\n // URL (if any) and we skip to step 7.\n if (!relativeParts.query) {\n builtParts.query = baseParts.query;\n }\n }\n } else {\n // 6) The last segment of the base URL's path (anything\n // following the rightmost slash \"/\", or the entire path if no\n // slash is present) is removed and the embedded URL's path is\n // appended in its place.\n var baseURLPath = baseParts.path;\n var newPath =\n baseURLPath.substring(0, baseURLPath.lastIndexOf('/') + 1) +\n relativeParts.path;\n builtParts.path = URLToolkit.normalizePath(newPath);\n }\n }\n }\n if (builtParts.path === null) {\n builtParts.path = opts.alwaysNormalize\n ? URLToolkit.normalizePath(relativeParts.path)\n : relativeParts.path;\n }\n return URLToolkit.buildURLFromParts(builtParts);\n },\n parseURL: function (url) {\n var parts = URL_REGEX.exec(url);\n if (!parts) {\n return null;\n }\n return {\n scheme: parts[1] || '',\n netLoc: parts[2] || '',\n path: parts[3] || '',\n params: parts[4] || '',\n query: parts[5] || '',\n fragment: parts[6] || '',\n };\n },\n normalizePath: function (path) {\n // The following operations are\n // then applied, in order, to the new path:\n // 6a) All occurrences of \"./\", where \".\" is a complete path\n // segment, are removed.\n // 6b) If the path ends with \".\" as a complete path segment,\n // that \".\" is removed.\n path = path.split('').reverse().join('').replace(SLASH_DOT_REGEX, '');\n // 6c) All occurrences of \"/../\", where is a\n // complete path segment not equal to \"..\", are removed.\n // Removal of these path segments is performed iteratively,\n // removing the leftmost matching pattern on each iteration,\n // until no matching pattern remains.\n // 6d) If the path ends with \"/..\", where is a\n // complete path segment not equal to \"..\", that\n // \"/..\" is removed.\n while (\n path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, '')).length\n ) {}\n return path.split('').reverse().join('');\n },\n buildURLFromParts: function (parts) {\n return (\n parts.scheme +\n parts.netLoc +\n parts.path +\n parts.params +\n parts.query +\n parts.fragment\n );\n },\n };\n\n if (typeof exports === 'object' && typeof module === 'object')\n module.exports = URLToolkit;\n else if (typeof define === 'function' && define.amd)\n define([], function () {\n return URLToolkit;\n });\n else if (typeof exports === 'object') exports['URLToolkit'] = URLToolkit;\n else root['URLToolkit'] = URLToolkit;\n})(this);\n","export default class AESCrypto {\n constructor (subtle, iv) {\n this.subtle = subtle;\n this.aesIV = iv;\n }\n\n decrypt (data, key) {\n return this.subtle.decrypt({ name: 'AES-CBC', iv: this.aesIV }, key, data);\n }\n}\n","class FastAESKey {\n constructor (subtle, key) {\n this.subtle = subtle;\n this.key = key;\n }\n\n expandKey () {\n return this.subtle.importKey('raw', this.key, { name: 'AES-CBC' }, false, ['encrypt', 'decrypt']);\n }\n}\n\nexport default FastAESKey;\n","// PKCS7\nexport function removePadding (buffer) {\n const outputBytes = buffer.byteLength;\n const paddingBytes = outputBytes && (new DataView(buffer)).getUint8(outputBytes - 1);\n if (paddingBytes) {\n return buffer.slice(0, outputBytes - paddingBytes);\n } else {\n return buffer;\n }\n}\n\nclass AESDecryptor {\n constructor () {\n // Static after running initTable\n this.rcon = [0x0, 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n this.sBox = new Uint32Array(256);\n this.invSBox = new Uint32Array(256);\n\n // Changes during runtime\n this.key = new Uint32Array(0);\n\n this.initTable();\n }\n\n // Using view.getUint32() also swaps the byte order.\n uint8ArrayToUint32Array_ (arrayBuffer) {\n let view = new DataView(arrayBuffer);\n let newArray = new Uint32Array(4);\n for (let i = 0; i < 4; i++) {\n newArray[i] = view.getUint32(i * 4);\n }\n\n return newArray;\n }\n\n initTable () {\n let sBox = this.sBox;\n let invSBox = this.invSBox;\n let subMix = this.subMix;\n let subMix0 = subMix[0];\n let subMix1 = subMix[1];\n let subMix2 = subMix[2];\n let subMix3 = subMix[3];\n let invSubMix = this.invSubMix;\n let invSubMix0 = invSubMix[0];\n let invSubMix1 = invSubMix[1];\n let invSubMix2 = invSubMix[2];\n let invSubMix3 = invSubMix[3];\n\n let d = new Uint32Array(256);\n let x = 0;\n let xi = 0;\n let i = 0;\n for (i = 0; i < 256; i++) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = (i << 1) ^ 0x11b;\n }\n }\n\n for (i = 0; i < 256; i++) {\n let sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n sBox[x] = sx;\n invSBox[sx] = x;\n\n // Compute multiplication\n let x2 = d[x];\n let x4 = d[x2];\n let x8 = d[x4];\n\n // Compute sub/invSub bytes, mix columns tables\n let t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n subMix0[x] = (t << 24) | (t >>> 8);\n subMix1[x] = (t << 16) | (t >>> 16);\n subMix2[x] = (t << 8) | (t >>> 24);\n subMix3[x] = t;\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n invSubMix0[sx] = (t << 24) | (t >>> 8);\n invSubMix1[sx] = (t << 16) | (t >>> 16);\n invSubMix2[sx] = (t << 8) | (t >>> 24);\n invSubMix3[sx] = t;\n\n // Compute next counter\n if (!x) {\n x = xi = 1;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n }\n }\n\n expandKey (keyBuffer) {\n // convert keyBuffer to Uint32Array\n let key = this.uint8ArrayToUint32Array_(keyBuffer);\n let sameKey = true;\n let offset = 0;\n\n while (offset < key.length && sameKey) {\n sameKey = (key[offset] === this.key[offset]);\n offset++;\n }\n\n if (sameKey) {\n return;\n }\n\n this.key = key;\n let keySize = this.keySize = key.length;\n\n if (keySize !== 4 && keySize !== 6 && keySize !== 8) {\n throw new Error('Invalid aes key size=' + keySize);\n }\n\n let ksRows = this.ksRows = (keySize + 6 + 1) * 4;\n let ksRow;\n let invKsRow;\n\n let keySchedule = this.keySchedule = new Uint32Array(ksRows);\n let invKeySchedule = this.invKeySchedule = new Uint32Array(ksRows);\n let sbox = this.sBox;\n let rcon = this.rcon;\n\n let invSubMix = this.invSubMix;\n let invSubMix0 = invSubMix[0];\n let invSubMix1 = invSubMix[1];\n let invSubMix2 = invSubMix[2];\n let invSubMix3 = invSubMix[3];\n\n let prev;\n let t;\n\n for (ksRow = 0; ksRow < ksRows; ksRow++) {\n if (ksRow < keySize) {\n prev = keySchedule[ksRow] = key[ksRow];\n continue;\n }\n t = prev;\n\n if (ksRow % keySize === 0) {\n // Rot word\n t = (t << 8) | (t >>> 24);\n\n // Sub word\n t = (sbox[t >>> 24] << 24) | (sbox[(t >>> 16) & 0xff] << 16) | (sbox[(t >>> 8) & 0xff] << 8) | sbox[t & 0xff];\n\n // Mix Rcon\n t ^= rcon[(ksRow / keySize) | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize === 4) {\n // Sub word\n t = (sbox[t >>> 24] << 24) | (sbox[(t >>> 16) & 0xff] << 16) | (sbox[(t >>> 8) & 0xff] << 8) | sbox[t & 0xff];\n }\n\n keySchedule[ksRow] = prev = (keySchedule[ksRow - keySize] ^ t) >>> 0;\n }\n\n for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n ksRow = ksRows - invKsRow;\n if (invKsRow & 3) {\n t = keySchedule[ksRow];\n } else {\n t = keySchedule[ksRow - 4];\n }\n\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = invSubMix0[sbox[t >>> 24]] ^ invSubMix1[sbox[(t >>> 16) & 0xff]] ^ invSubMix2[sbox[(t >>> 8) & 0xff]] ^ invSubMix3[sbox[t & 0xff]];\n }\n\n invKeySchedule[invKsRow] = invKeySchedule[invKsRow] >>> 0;\n }\n }\n\n // Adding this as a method greatly improves performance.\n networkToHostOrderSwap (word) {\n return (word << 24) | ((word & 0xff00) << 8) | ((word & 0xff0000) >> 8) | (word >>> 24);\n }\n\n decrypt (inputArrayBuffer, offset, aesIV, removePKCS7Padding) {\n let nRounds = this.keySize + 6;\n let invKeySchedule = this.invKeySchedule;\n let invSBOX = this.invSBox;\n\n let invSubMix = this.invSubMix;\n let invSubMix0 = invSubMix[0];\n let invSubMix1 = invSubMix[1];\n let invSubMix2 = invSubMix[2];\n let invSubMix3 = invSubMix[3];\n\n let initVector = this.uint8ArrayToUint32Array_(aesIV);\n let initVector0 = initVector[0];\n let initVector1 = initVector[1];\n let initVector2 = initVector[2];\n let initVector3 = initVector[3];\n\n let inputInt32 = new Int32Array(inputArrayBuffer);\n let outputInt32 = new Int32Array(inputInt32.length);\n\n let t0, t1, t2, t3;\n let s0, s1, s2, s3;\n let inputWords0, inputWords1, inputWords2, inputWords3;\n\n let ksRow, i;\n let swapWord = this.networkToHostOrderSwap;\n\n while (offset < inputInt32.length) {\n inputWords0 = swapWord(inputInt32[offset]);\n inputWords1 = swapWord(inputInt32[offset + 1]);\n inputWords2 = swapWord(inputInt32[offset + 2]);\n inputWords3 = swapWord(inputInt32[offset + 3]);\n\n s0 = inputWords0 ^ invKeySchedule[0];\n s1 = inputWords3 ^ invKeySchedule[1];\n s2 = inputWords2 ^ invKeySchedule[2];\n s3 = inputWords1 ^ invKeySchedule[3];\n\n ksRow = 4;\n\n // Iterate through the rounds of decryption\n for (i = 1; i < nRounds; i++) {\n t0 = invSubMix0[s0 >>> 24] ^ invSubMix1[(s1 >> 16) & 0xff] ^ invSubMix2[(s2 >> 8) & 0xff] ^ invSubMix3[s3 & 0xff] ^ invKeySchedule[ksRow];\n t1 = invSubMix0[s1 >>> 24] ^ invSubMix1[(s2 >> 16) & 0xff] ^ invSubMix2[(s3 >> 8) & 0xff] ^ invSubMix3[s0 & 0xff] ^ invKeySchedule[ksRow + 1];\n t2 = invSubMix0[s2 >>> 24] ^ invSubMix1[(s3 >> 16) & 0xff] ^ invSubMix2[(s0 >> 8) & 0xff] ^ invSubMix3[s1 & 0xff] ^ invKeySchedule[ksRow + 2];\n t3 = invSubMix0[s3 >>> 24] ^ invSubMix1[(s0 >> 16) & 0xff] ^ invSubMix2[(s1 >> 8) & 0xff] ^ invSubMix3[s2 & 0xff] ^ invKeySchedule[ksRow + 3];\n // Update state\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n\n ksRow = ksRow + 4;\n }\n\n // Shift rows, sub bytes, add round key\n t0 = ((invSBOX[s0 >>> 24] << 24) ^ (invSBOX[(s1 >> 16) & 0xff] << 16) ^ (invSBOX[(s2 >> 8) & 0xff] << 8) ^ invSBOX[s3 & 0xff]) ^ invKeySchedule[ksRow];\n t1 = ((invSBOX[s1 >>> 24] << 24) ^ (invSBOX[(s2 >> 16) & 0xff] << 16) ^ (invSBOX[(s3 >> 8) & 0xff] << 8) ^ invSBOX[s0 & 0xff]) ^ invKeySchedule[ksRow + 1];\n t2 = ((invSBOX[s2 >>> 24] << 24) ^ (invSBOX[(s3 >> 16) & 0xff] << 16) ^ (invSBOX[(s0 >> 8) & 0xff] << 8) ^ invSBOX[s1 & 0xff]) ^ invKeySchedule[ksRow + 2];\n t3 = ((invSBOX[s3 >>> 24] << 24) ^ (invSBOX[(s0 >> 16) & 0xff] << 16) ^ (invSBOX[(s1 >> 8) & 0xff] << 8) ^ invSBOX[s2 & 0xff]) ^ invKeySchedule[ksRow + 3];\n ksRow = ksRow + 3;\n\n // Write\n outputInt32[offset] = swapWord(t0 ^ initVector0);\n outputInt32[offset + 1] = swapWord(t3 ^ initVector1);\n outputInt32[offset + 2] = swapWord(t2 ^ initVector2);\n outputInt32[offset + 3] = swapWord(t1 ^ initVector3);\n\n // reset initVector to last 4 unsigned int\n initVector0 = inputWords0;\n initVector1 = inputWords1;\n initVector2 = inputWords2;\n initVector3 = inputWords3;\n\n offset = offset + 4;\n }\n\n return removePKCS7Padding ? removePadding(outputInt32.buffer) : outputInt32.buffer;\n }\n\n destroy () {\n this.key = undefined;\n this.keySize = undefined;\n this.ksRows = undefined;\n\n this.sBox = undefined;\n this.invSBox = undefined;\n this.subMix = undefined;\n this.invSubMix = undefined;\n this.keySchedule = undefined;\n this.invKeySchedule = undefined;\n\n this.rcon = undefined;\n }\n}\n\nexport default AESDecryptor;\n","import AESCrypto from './aes-crypto';\nimport FastAESKey from './fast-aes-key';\nimport AESDecryptor from './aes-decryptor';\n\nimport { ErrorTypes, ErrorDetails } from '../errors';\nimport { logger } from '../utils/logger';\n\nimport Event from '../events';\n\nimport { getSelfScope } from '../utils/get-self-scope';\n\n// see https://stackoverflow.com/a/11237259/589493\nconst global = getSelfScope(); // safeguard for code that might run both on worker and main thread\n\nclass Decrypter {\n constructor (observer, config, { removePKCS7Padding = true } = {}) {\n this.logEnabled = true;\n this.observer = observer;\n this.config = config;\n this.removePKCS7Padding = removePKCS7Padding;\n // built in decryptor expects PKCS7 padding\n if (removePKCS7Padding) {\n try {\n const browserCrypto = global.crypto;\n if (browserCrypto) {\n this.subtle = browserCrypto.subtle || browserCrypto.webkitSubtle;\n }\n } catch (e) {}\n }\n this.disableWebCrypto = !this.subtle;\n }\n\n isSync () {\n return (this.disableWebCrypto && this.config.enableSoftwareAES);\n }\n\n decrypt (data, key, iv, callback) {\n if (this.disableWebCrypto && this.config.enableSoftwareAES) {\n if (this.logEnabled) {\n logger.log('JS AES decrypt');\n this.logEnabled = false;\n }\n let decryptor = this.decryptor;\n if (!decryptor) {\n this.decryptor = decryptor = new AESDecryptor();\n }\n\n decryptor.expandKey(key);\n callback(decryptor.decrypt(data, 0, iv, this.removePKCS7Padding));\n } else {\n if (this.logEnabled) {\n logger.log('WebCrypto AES decrypt');\n this.logEnabled = false;\n }\n const subtle = this.subtle;\n if (this.key !== key) {\n this.key = key;\n this.fastAesKey = new FastAESKey(subtle, key);\n }\n\n this.fastAesKey.expandKey()\n .then((aesKey) => {\n // decrypt using web crypto\n let crypto = new AESCrypto(subtle, iv);\n crypto.decrypt(data, aesKey)\n .catch((err) => {\n this.onWebCryptoError(err, data, key, iv, callback);\n })\n .then((result) => {\n callback(result);\n });\n })\n .catch((err) => {\n this.onWebCryptoError(err, data, key, iv, callback);\n });\n }\n }\n\n onWebCryptoError (err, data, key, iv, callback) {\n if (this.config.enableSoftwareAES) {\n logger.log('WebCrypto Error, disable WebCrypto API');\n this.disableWebCrypto = true;\n this.logEnabled = true;\n this.decrypt(data, key, iv, callback);\n } else {\n logger.error(`decrypting error : ${err.message}`);\n this.observer.trigger(Event.ERROR, { type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_DECRYPT_ERROR, fatal: true, reason: err.message });\n }\n }\n\n destroy () {\n let decryptor = this.decryptor;\n if (decryptor) {\n decryptor.destroy();\n this.decryptor = undefined;\n }\n }\n}\n\nexport default Decrypter;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/**\n * ADTS parser helper\n * @link https://wiki.multimedia.cx/index.php?title=ADTS\n */\nimport { logger } from '../utils/logger';\nimport { ErrorTypes, ErrorDetails } from '../errors';\n\nimport Event from '../events';\n\nimport { getSelfScope } from '../utils/get-self-scope';\n\nexport function getAudioConfig (observer, data, offset, audioCodec) {\n let adtsObjectType, // :int\n adtsSampleingIndex, // :int\n adtsExtensionSampleingIndex, // :int\n adtsChanelConfig, // :int\n config,\n userAgent = navigator.userAgent.toLowerCase(),\n manifestCodec = audioCodec,\n adtsSampleingRates = [\n 96000, 88200,\n 64000, 48000,\n 44100, 32000,\n 24000, 22050,\n 16000, 12000,\n 11025, 8000,\n 7350];\n // byte 2\n adtsObjectType = ((data[offset + 2] & 0xC0) >>> 6) + 1;\n adtsSampleingIndex = ((data[offset + 2] & 0x3C) >>> 2);\n if (adtsSampleingIndex > adtsSampleingRates.length - 1) {\n observer.trigger(Event.ERROR, { type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: true, reason: `invalid ADTS sampling index:${adtsSampleingIndex}` });\n return;\n }\n adtsChanelConfig = ((data[offset + 2] & 0x01) << 2);\n // byte 3\n adtsChanelConfig |= ((data[offset + 3] & 0xC0) >>> 6);\n logger.log(`manifest codec:${audioCodec},ADTS data:type:${adtsObjectType},sampleingIndex:${adtsSampleingIndex}[${adtsSampleingRates[adtsSampleingIndex]}Hz],channelConfig:${adtsChanelConfig}`);\n // firefox: freq less than 24kHz = AAC SBR (HE-AAC)\n if (/firefox/i.test(userAgent)) {\n if (adtsSampleingIndex >= 6) {\n adtsObjectType = 5;\n config = new Array(4);\n // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n // there is a factor 2 between frame sample rate and output sample rate\n // multiply frequency by 2 (see table below, equivalent to substract 3)\n adtsExtensionSampleingIndex = adtsSampleingIndex - 3;\n } else {\n adtsObjectType = 2;\n config = new Array(2);\n adtsExtensionSampleingIndex = adtsSampleingIndex;\n }\n // Android : always use AAC\n } else if (userAgent.indexOf('android') !== -1) {\n adtsObjectType = 2;\n config = new Array(2);\n adtsExtensionSampleingIndex = adtsSampleingIndex;\n } else {\n /* for other browsers (Chrome/Vivaldi/Opera ...)\n always force audio type to be HE-AAC SBR, as some browsers do not support audio codec switch properly (like Chrome ...)\n */\n adtsObjectType = 5;\n config = new Array(4);\n // if (manifest codec is HE-AAC or HE-AACv2) OR (manifest codec not specified AND frequency less than 24kHz)\n if ((audioCodec && ((audioCodec.indexOf('mp4a.40.29') !== -1) ||\n (audioCodec.indexOf('mp4a.40.5') !== -1))) ||\n (!audioCodec && adtsSampleingIndex >= 6)) {\n // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n // there is a factor 2 between frame sample rate and output sample rate\n // multiply frequency by 2 (see table below, equivalent to substract 3)\n adtsExtensionSampleingIndex = adtsSampleingIndex - 3;\n } else {\n // if (manifest codec is AAC) AND (frequency less than 24kHz AND nb channel is 1) OR (manifest codec not specified and mono audio)\n // Chrome fails to play back with low frequency AAC LC mono when initialized with HE-AAC. This is not a problem with stereo.\n if (audioCodec && audioCodec.indexOf('mp4a.40.2') !== -1 && ((adtsSampleingIndex >= 6 && adtsChanelConfig === 1) ||\n /vivaldi/i.test(userAgent)) ||\n (!audioCodec && adtsChanelConfig === 1)) {\n adtsObjectType = 2;\n config = new Array(2);\n }\n adtsExtensionSampleingIndex = adtsSampleingIndex;\n }\n }\n /* refer to http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio#Audio_Specific_Config\n ISO 14496-3 (AAC).pdf - Table 1.13 — Syntax of AudioSpecificConfig()\n Audio Profile / Audio Object Type\n 0: Null\n 1: AAC Main\n 2: AAC LC (Low Complexity)\n 3: AAC SSR (Scalable Sample Rate)\n 4: AAC LTP (Long Term Prediction)\n 5: SBR (Spectral Band Replication)\n 6: AAC Scalable\n sampling freq\n 0: 96000 Hz\n 1: 88200 Hz\n 2: 64000 Hz\n 3: 48000 Hz\n 4: 44100 Hz\n 5: 32000 Hz\n 6: 24000 Hz\n 7: 22050 Hz\n 8: 16000 Hz\n 9: 12000 Hz\n 10: 11025 Hz\n 11: 8000 Hz\n 12: 7350 Hz\n 13: Reserved\n 14: Reserved\n 15: frequency is written explictly\n Channel Configurations\n These are the channel configurations:\n 0: Defined in AOT Specifc Config\n 1: 1 channel: front-center\n 2: 2 channels: front-left, front-right\n */\n // audioObjectType = profile => profile, the MPEG-4 Audio Object Type minus 1\n config[0] = adtsObjectType << 3;\n // samplingFrequencyIndex\n config[0] |= (adtsSampleingIndex & 0x0E) >> 1;\n config[1] |= (adtsSampleingIndex & 0x01) << 7;\n // channelConfiguration\n config[1] |= adtsChanelConfig << 3;\n if (adtsObjectType === 5) {\n // adtsExtensionSampleingIndex\n config[1] |= (adtsExtensionSampleingIndex & 0x0E) >> 1;\n config[2] = (adtsExtensionSampleingIndex & 0x01) << 7;\n // adtsObjectType (force to 2, chrome is checking that object type is less than 5 ???\n // https://chromium.googlesource.com/chromium/src.git/+/master/media/formats/mp4/aac.cc\n config[2] |= 2 << 2;\n config[3] = 0;\n }\n return { config: config, samplerate: adtsSampleingRates[adtsSampleingIndex], channelCount: adtsChanelConfig, codec: ('mp4a.40.' + adtsObjectType), manifestCodec: manifestCodec };\n}\n\nexport function isHeaderPattern (data, offset) {\n return data[offset] === 0xff && (data[offset + 1] & 0xf6) === 0xf0;\n}\n\nexport function getHeaderLength (data, offset) {\n return (data[offset + 1] & 0x01 ? 7 : 9);\n}\n\nexport function getFullFrameLength (data, offset) {\n return ((data[offset + 3] & 0x03) << 11) |\n (data[offset + 4] << 3) |\n ((data[offset + 5] & 0xE0) >>> 5);\n}\n\nexport function isHeader (data, offset) {\n // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n // More info https://wiki.multimedia.cx/index.php?title=ADTS\n if (offset + 1 < data.length && isHeaderPattern(data, offset)) {\n return true;\n }\n\n return false;\n}\n\nexport function probe (data, offset) {\n // same as isHeader but we also check that ADTS frame follows last ADTS frame\n // or end of data is reached\n if (isHeader(data, offset)) {\n // ADTS header Length\n let headerLength = getHeaderLength(data, offset);\n if (offset + headerLength >= data.length) {\n return false;\n }\n // ADTS frame Length\n let frameLength = getFullFrameLength(data, offset);\n if (frameLength <= headerLength) {\n return false;\n }\n\n let newOffset = offset + frameLength;\n if (newOffset === data.length || (newOffset + 1 < data.length && isHeaderPattern(data, newOffset))) {\n return true;\n }\n }\n return false;\n}\n\nexport function initTrackConfig (track, observer, data, offset, audioCodec) {\n if (!track.samplerate) {\n let config = getAudioConfig(observer, data, offset, audioCodec);\n track.config = config.config;\n track.samplerate = config.samplerate;\n track.channelCount = config.channelCount;\n track.codec = config.codec;\n track.manifestCodec = config.manifestCodec;\n logger.log(`parsed codec:${track.codec},rate:${config.samplerate},nb channel:${config.channelCount}`);\n }\n}\n\nexport function getFrameDuration (samplerate) {\n return 1024 * 90000 / samplerate;\n}\n\nexport function parseFrameHeader (data, offset, pts, frameIndex, frameDuration) {\n let headerLength, frameLength, stamp;\n let length = data.length;\n\n // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n headerLength = getHeaderLength(data, offset);\n // retrieve frame size\n frameLength = getFullFrameLength(data, offset);\n frameLength -= headerLength;\n\n if ((frameLength > 0) && ((offset + headerLength + frameLength) <= length)) {\n stamp = pts + frameIndex * frameDuration;\n // logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n return { headerLength, frameLength, stamp };\n }\n\n return undefined;\n}\n\nexport function appendFrame (track, data, offset, pts, frameIndex) {\n let frameDuration = getFrameDuration(track.samplerate);\n let header = parseFrameHeader(data, offset, pts, frameIndex, frameDuration);\n if (header) {\n let stamp = header.stamp;\n let headerLength = header.headerLength;\n let frameLength = header.frameLength;\n\n // logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n let aacSample = {\n unit: data.subarray(offset + headerLength, offset + headerLength + frameLength),\n pts: stamp,\n dts: stamp\n };\n\n track.samples.push(aacSample);\n return { sample: aacSample, length: frameLength + headerLength };\n }\n\n return undefined;\n}\n","/**\n * AAC demuxer\n */\nimport * as ADTS from './adts';\nimport { logger } from '../utils/logger';\nimport ID3 from '../demux/id3';\n\nclass AACDemuxer {\n constructor (observer, remuxer, config) {\n this.observer = observer;\n this.config = config;\n this.remuxer = remuxer;\n }\n\n resetInitSegment (initSegment, audioCodec, videoCodec, duration) {\n this._audioTrack = { container: 'audio/adts', type: 'audio', id: 0, sequenceNumber: 0, isAAC: true, samples: [], len: 0, manifestCodec: audioCodec, duration: duration, inputTimeScale: 90000 };\n }\n\n resetTimeStamp () {\n }\n\n static probe (data) {\n if (!data) {\n return false;\n }\n\n // Check for the ADTS sync word\n // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n // More info https://wiki.multimedia.cx/index.php?title=ADTS\n const id3Data = ID3.getID3Data(data, 0) || [];\n let offset = id3Data.length;\n\n for (let length = data.length; offset < length; offset++) {\n if (ADTS.probe(data, offset)) {\n logger.log('ADTS sync word found !');\n return true;\n }\n }\n return false;\n }\n\n // feed incoming data to the front of the parsing pipeline\n append (data, timeOffset, contiguous, accurateTimeOffset) {\n let track = this._audioTrack;\n let id3Data = ID3.getID3Data(data, 0) || [];\n let timestamp = ID3.getTimeStamp(id3Data);\n let pts = Number.isFinite(timestamp) ? timestamp * 90 : timeOffset * 90000;\n let frameIndex = 0;\n let stamp = pts;\n let length = data.length;\n let offset = id3Data.length;\n\n let id3Samples = [{ pts: stamp, dts: stamp, data: id3Data }];\n\n while (offset < length - 1) {\n if (ADTS.isHeader(data, offset) && (offset + 5) < length) {\n ADTS.initTrackConfig(track, this.observer, data, offset, track.manifestCodec);\n let frame = ADTS.appendFrame(track, data, offset, pts, frameIndex);\n if (frame) {\n offset += frame.length;\n stamp = frame.sample.pts;\n frameIndex++;\n } else {\n logger.log('Unable to parse AAC frame');\n break;\n }\n } else if (ID3.isHeader(data, offset)) {\n id3Data = ID3.getID3Data(data, offset);\n id3Samples.push({ pts: stamp, dts: stamp, data: id3Data });\n offset += id3Data.length;\n } else {\n // nothing found, keep looking\n offset++;\n }\n }\n\n this.remuxer.remux(track,\n { samples: [] },\n { samples: id3Samples, inputTimeScale: 90000 },\n { samples: [] },\n timeOffset,\n contiguous,\n accurateTimeOffset);\n }\n\n destroy () {\n }\n}\n\nexport default AACDemuxer;\n","/**\n * MPEG parser helper\n */\n\nconst MpegAudio = {\n\n BitratesMap: [\n 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448,\n 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,\n 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320,\n 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,\n 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],\n\n SamplingRateMap: [44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000],\n\n SamplesCoefficients: [\n // MPEG 2.5\n [\n 0, // Reserved\n 72, // Layer3\n 144, // Layer2\n 12 // Layer1\n ],\n // Reserved\n [\n 0, // Reserved\n 0, // Layer3\n 0, // Layer2\n 0 // Layer1\n ],\n // MPEG 2\n [\n 0, // Reserved\n 72, // Layer3\n 144, // Layer2\n 12 // Layer1\n ],\n // MPEG 1\n [\n 0, // Reserved\n 144, // Layer3\n 144, // Layer2\n 12 // Layer1\n ]\n ],\n\n BytesInSlot: [\n 0, // Reserved\n 1, // Layer3\n 1, // Layer2\n 4 // Layer1\n ],\n\n appendFrame: function (track, data, offset, pts, frameIndex) {\n // Using http://www.datavoyage.com/mpgscript/mpeghdr.htm as a reference\n if (offset + 24 > data.length) {\n return undefined;\n }\n\n let header = this.parseHeader(data, offset);\n if (header && offset + header.frameLength <= data.length) {\n let frameDuration = header.samplesPerFrame * 90000 / header.sampleRate;\n let stamp = pts + frameIndex * frameDuration;\n let sample = { unit: data.subarray(offset, offset + header.frameLength), pts: stamp, dts: stamp };\n\n track.config = [];\n track.channelCount = header.channelCount;\n track.samplerate = header.sampleRate;\n track.samples.push(sample);\n\n return { sample, length: header.frameLength };\n }\n\n return undefined;\n },\n\n parseHeader: function (data, offset) {\n let headerB = (data[offset + 1] >> 3) & 3;\n let headerC = (data[offset + 1] >> 1) & 3;\n let headerE = (data[offset + 2] >> 4) & 15;\n let headerF = (data[offset + 2] >> 2) & 3;\n let headerG = (data[offset + 2] >> 1) & 1;\n if (headerB !== 1 && headerE !== 0 && headerE !== 15 && headerF !== 3) {\n let columnInBitrates = headerB === 3 ? (3 - headerC) : (headerC === 3 ? 3 : 4);\n let bitRate = MpegAudio.BitratesMap[columnInBitrates * 14 + headerE - 1] * 1000;\n let columnInSampleRates = headerB === 3 ? 0 : headerB === 2 ? 1 : 2;\n let sampleRate = MpegAudio.SamplingRateMap[columnInSampleRates * 3 + headerF];\n let channelCount = data[offset + 3] >> 6 === 3 ? 1 : 2; // If bits of channel mode are `11` then it is a single channel (Mono)\n let sampleCoefficient = MpegAudio.SamplesCoefficients[headerB][headerC];\n let bytesInSlot = MpegAudio.BytesInSlot[headerC];\n let samplesPerFrame = sampleCoefficient * 8 * bytesInSlot;\n let frameLength = parseInt(sampleCoefficient * bitRate / sampleRate + headerG, 10) * bytesInSlot;\n\n return { sampleRate, channelCount, frameLength, samplesPerFrame };\n }\n\n return undefined;\n },\n\n isHeaderPattern: function (data, offset) {\n return data[offset] === 0xff && (data[offset + 1] & 0xe0) === 0xe0 && (data[offset + 1] & 0x06) !== 0x00;\n },\n\n isHeader: function (data, offset) {\n // Look for MPEG header | 1111 1111 | 111X XYZX | where X can be either 0 or 1 and Y or Z should be 1\n // Layer bits (position 14 and 15) in header should be always different from 0 (Layer I or Layer II or Layer III)\n // More info http://www.mp3-tech.org/programmer/frame_header.html\n if (offset + 1 < data.length && this.isHeaderPattern(data, offset)) {\n return true;\n }\n\n return false;\n },\n\n probe: function (data, offset) {\n // same as isHeader but we also check that MPEG frame follows last MPEG frame\n // or end of data is reached\n if (offset + 1 < data.length && this.isHeaderPattern(data, offset)) {\n // MPEG header Length\n let headerLength = 4;\n // MPEG frame Length\n let header = this.parseHeader(data, offset);\n let frameLength = headerLength;\n if (header && header.frameLength) {\n frameLength = header.frameLength;\n }\n\n let newOffset = offset + frameLength;\n if (newOffset === data.length || (newOffset + 1 < data.length && this.isHeaderPattern(data, newOffset))) {\n return true;\n }\n }\n return false;\n }\n};\n\nexport default MpegAudio;\n","/**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.\n*/\n\nimport { logger } from '../utils/logger';\n\nclass ExpGolomb {\n constructor (data) {\n this.data = data;\n // the number of bytes left to examine in this.data\n this.bytesAvailable = data.byteLength;\n // the current word being examined\n this.word = 0; // :uint\n // the number of bits left to examine in the current word\n this.bitsAvailable = 0; // :uint\n }\n\n // ():void\n loadWord () {\n let\n data = this.data,\n bytesAvailable = this.bytesAvailable,\n position = data.byteLength - bytesAvailable,\n workingBytes = new Uint8Array(4),\n availableBytes = Math.min(4, bytesAvailable);\n if (availableBytes === 0) {\n throw new Error('no bytes available');\n }\n\n workingBytes.set(data.subarray(position, position + availableBytes));\n this.word = new DataView(workingBytes.buffer).getUint32(0);\n // track the amount of this.data that has been processed\n this.bitsAvailable = availableBytes * 8;\n this.bytesAvailable -= availableBytes;\n }\n\n // (count:int):void\n skipBits (count) {\n let skipBytes; // :int\n if (this.bitsAvailable > count) {\n this.word <<= count;\n this.bitsAvailable -= count;\n } else {\n count -= this.bitsAvailable;\n skipBytes = count >> 3;\n count -= (skipBytes >> 3);\n this.bytesAvailable -= skipBytes;\n this.loadWord();\n this.word <<= count;\n this.bitsAvailable -= count;\n }\n }\n\n // (size:int):uint\n readBits (size) {\n let\n bits = Math.min(this.bitsAvailable, size), // :uint\n valu = this.word >>> (32 - bits); // :uint\n if (size > 32) {\n logger.error('Cannot read more than 32 bits at a time');\n }\n\n this.bitsAvailable -= bits;\n if (this.bitsAvailable > 0) {\n this.word <<= bits;\n } else if (this.bytesAvailable > 0) {\n this.loadWord();\n }\n\n bits = size - bits;\n if (bits > 0 && this.bitsAvailable) {\n return valu << bits | this.readBits(bits);\n } else {\n return valu;\n }\n }\n\n // ():uint\n skipLZ () {\n let leadingZeroCount; // :uint\n for (leadingZeroCount = 0; leadingZeroCount < this.bitsAvailable; ++leadingZeroCount) {\n if ((this.word & (0x80000000 >>> leadingZeroCount)) !== 0) {\n // the first bit of working word is 1\n this.word <<= leadingZeroCount;\n this.bitsAvailable -= leadingZeroCount;\n return leadingZeroCount;\n }\n }\n // we exhausted word and still have not found a 1\n this.loadWord();\n return leadingZeroCount + this.skipLZ();\n }\n\n // ():void\n skipUEG () {\n this.skipBits(1 + this.skipLZ());\n }\n\n // ():void\n skipEG () {\n this.skipBits(1 + this.skipLZ());\n }\n\n // ():uint\n readUEG () {\n let clz = this.skipLZ(); // :uint\n return this.readBits(clz + 1) - 1;\n }\n\n // ():int\n readEG () {\n let valu = this.readUEG(); // :int\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n return (1 + valu) >>> 1; // add 1 to make it even, and divide by 2\n } else {\n return -1 * (valu >>> 1); // divide by two then make it negative\n }\n }\n\n // Some convenience functions\n // :Boolean\n readBoolean () {\n return this.readBits(1) === 1;\n }\n\n // ():int\n readUByte () {\n return this.readBits(8);\n }\n\n // ():int\n readUShort () {\n return this.readBits(16);\n }\n // ():int\n readUInt () {\n return this.readBits(32);\n }\n\n /**\n * Advance the ExpGolomb decoder past a scaling list. The scaling\n * list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count {number} the number of entries in this scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n skipScalingList (count) {\n let\n lastScale = 8,\n nextScale = 8,\n j,\n deltaScale;\n for (j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = this.readEG();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = (nextScale === 0) ? lastScale : nextScale;\n }\n }\n\n /**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @param data {Uint8Array} the bytes of a sequence parameter set\n * @return {object} an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */\n readSPS () {\n let\n frameCropLeftOffset = 0,\n frameCropRightOffset = 0,\n frameCropTopOffset = 0,\n frameCropBottomOffset = 0,\n profileIdc, profileCompat, levelIdc,\n numRefFramesInPicOrderCntCycle, picWidthInMbsMinus1,\n picHeightInMapUnitsMinus1,\n frameMbsOnlyFlag,\n scalingListCount,\n i,\n readUByte = this.readUByte.bind(this),\n readBits = this.readBits.bind(this),\n readUEG = this.readUEG.bind(this),\n readBoolean = this.readBoolean.bind(this),\n skipBits = this.skipBits.bind(this),\n skipEG = this.skipEG.bind(this),\n skipUEG = this.skipUEG.bind(this),\n skipScalingList = this.skipScalingList.bind(this);\n\n readUByte();\n profileIdc = readUByte(); // profile_idc\n profileCompat = readBits(5); // constraint_set[0-4]_flag, u(5)\n skipBits(3); // reserved_zero_3bits u(3),\n levelIdc = readUByte(); // level_idc u(8)\n skipUEG(); // seq_parameter_set_id\n // some profiles have more optional data we don't need\n if (profileIdc === 100 ||\n profileIdc === 110 ||\n profileIdc === 122 ||\n profileIdc === 244 ||\n profileIdc === 44 ||\n profileIdc === 83 ||\n profileIdc === 86 ||\n profileIdc === 118 ||\n profileIdc === 128) {\n let chromaFormatIdc = readUEG();\n if (chromaFormatIdc === 3) {\n skipBits(1);\n } // separate_colour_plane_flag\n\n skipUEG(); // bit_depth_luma_minus8\n skipUEG(); // bit_depth_chroma_minus8\n skipBits(1); // qpprime_y_zero_transform_bypass_flag\n if (readBoolean()) { // seq_scaling_matrix_present_flag\n scalingListCount = (chromaFormatIdc !== 3) ? 8 : 12;\n for (i = 0; i < scalingListCount; i++) {\n if (readBoolean()) { // seq_scaling_list_present_flag[ i ]\n if (i < 6) {\n skipScalingList(16);\n } else {\n skipScalingList(64);\n }\n }\n }\n }\n }\n skipUEG(); // log2_max_frame_num_minus4\n let picOrderCntType = readUEG();\n if (picOrderCntType === 0) {\n readUEG(); // log2_max_pic_order_cnt_lsb_minus4\n } else if (picOrderCntType === 1) {\n skipBits(1); // delta_pic_order_always_zero_flag\n skipEG(); // offset_for_non_ref_pic\n skipEG(); // offset_for_top_to_bottom_field\n numRefFramesInPicOrderCntCycle = readUEG();\n for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n skipEG();\n } // offset_for_ref_frame[ i ]\n }\n skipUEG(); // max_num_ref_frames\n skipBits(1); // gaps_in_frame_num_value_allowed_flag\n picWidthInMbsMinus1 = readUEG();\n picHeightInMapUnitsMinus1 = readUEG();\n frameMbsOnlyFlag = readBits(1);\n if (frameMbsOnlyFlag === 0) {\n skipBits(1);\n } // mb_adaptive_frame_field_flag\n\n skipBits(1); // direct_8x8_inference_flag\n if (readBoolean()) { // frame_cropping_flag\n frameCropLeftOffset = readUEG();\n frameCropRightOffset = readUEG();\n frameCropTopOffset = readUEG();\n frameCropBottomOffset = readUEG();\n }\n let pixelRatio = [1, 1];\n if (readBoolean()) {\n // vui_parameters_present_flag\n if (readBoolean()) {\n // aspect_ratio_info_present_flag\n const aspectRatioIdc = readUByte();\n switch (aspectRatioIdc) {\n case 1: pixelRatio = [1, 1]; break;\n case 2: pixelRatio = [12, 11]; break;\n case 3: pixelRatio = [10, 11]; break;\n case 4: pixelRatio = [16, 11]; break;\n case 5: pixelRatio = [40, 33]; break;\n case 6: pixelRatio = [24, 11]; break;\n case 7: pixelRatio = [20, 11]; break;\n case 8: pixelRatio = [32, 11]; break;\n case 9: pixelRatio = [80, 33]; break;\n case 10: pixelRatio = [18, 11]; break;\n case 11: pixelRatio = [15, 11]; break;\n case 12: pixelRatio = [64, 33]; break;\n case 13: pixelRatio = [160, 99]; break;\n case 14: pixelRatio = [4, 3]; break;\n case 15: pixelRatio = [3, 2]; break;\n case 16: pixelRatio = [2, 1]; break;\n case 255: {\n pixelRatio = [readUByte() << 8 | readUByte(), readUByte() << 8 | readUByte()];\n break;\n }\n }\n }\n }\n return {\n width: Math.ceil((((picWidthInMbsMinus1 + 1) * 16) - frameCropLeftOffset * 2 - frameCropRightOffset * 2)),\n height: ((2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16) - ((frameMbsOnlyFlag ? 2 : 4) * (frameCropTopOffset + frameCropBottomOffset)),\n pixelRatio: pixelRatio\n };\n }\n\n readSliceType () {\n // skip NALu type\n this.readUByte();\n // discard first_mb_in_slice\n this.readUEG();\n // return slice_type\n return this.readUEG();\n }\n}\n\nexport default ExpGolomb;\n","/**\n * SAMPLE-AES decrypter\n*/\n\nimport Decrypter from '../crypt/decrypter';\n\nclass SampleAesDecrypter {\n constructor (observer, config, decryptdata, discardEPB) {\n this.decryptdata = decryptdata;\n this.discardEPB = discardEPB;\n this.decrypter = new Decrypter(observer, config, { removePKCS7Padding: false });\n }\n\n decryptBuffer (encryptedData, callback) {\n this.decrypter.decrypt(encryptedData, this.decryptdata.key.buffer, this.decryptdata.iv.buffer, callback);\n }\n\n // AAC - encrypt all full 16 bytes blocks starting from offset 16\n decryptAacSample (samples, sampleIndex, callback, sync) {\n let curUnit = samples[sampleIndex].unit;\n let encryptedData = curUnit.subarray(16, curUnit.length - curUnit.length % 16);\n let encryptedBuffer = encryptedData.buffer.slice(\n encryptedData.byteOffset,\n encryptedData.byteOffset + encryptedData.length);\n\n let localthis = this;\n this.decryptBuffer(encryptedBuffer, function (decryptedData) {\n decryptedData = new Uint8Array(decryptedData);\n curUnit.set(decryptedData, 16);\n\n if (!sync) {\n localthis.decryptAacSamples(samples, sampleIndex + 1, callback);\n }\n });\n }\n\n decryptAacSamples (samples, sampleIndex, callback) {\n for (;; sampleIndex++) {\n if (sampleIndex >= samples.length) {\n callback();\n return;\n }\n\n if (samples[sampleIndex].unit.length < 32) {\n continue;\n }\n\n let sync = this.decrypter.isSync();\n\n this.decryptAacSample(samples, sampleIndex, callback, sync);\n\n if (!sync) {\n return;\n }\n }\n }\n\n // AVC - encrypt one 16 bytes block out of ten, starting from offset 32\n getAvcEncryptedData (decodedData) {\n let encryptedDataLen = Math.floor((decodedData.length - 48) / 160) * 16 + 16;\n let encryptedData = new Int8Array(encryptedDataLen);\n let outputPos = 0;\n for (let inputPos = 32; inputPos <= decodedData.length - 16; inputPos += 160, outputPos += 16) {\n encryptedData.set(decodedData.subarray(inputPos, inputPos + 16), outputPos);\n }\n\n return encryptedData;\n }\n\n getAvcDecryptedUnit (decodedData, decryptedData) {\n decryptedData = new Uint8Array(decryptedData);\n let inputPos = 0;\n for (let outputPos = 32; outputPos <= decodedData.length - 16; outputPos += 160, inputPos += 16) {\n decodedData.set(decryptedData.subarray(inputPos, inputPos + 16), outputPos);\n }\n\n return decodedData;\n }\n\n decryptAvcSample (samples, sampleIndex, unitIndex, callback, curUnit, sync) {\n let decodedData = this.discardEPB(curUnit.data);\n let encryptedData = this.getAvcEncryptedData(decodedData);\n let localthis = this;\n\n this.decryptBuffer(encryptedData.buffer, function (decryptedData) {\n curUnit.data = localthis.getAvcDecryptedUnit(decodedData, decryptedData);\n\n if (!sync) {\n localthis.decryptAvcSamples(samples, sampleIndex, unitIndex + 1, callback);\n }\n });\n }\n\n decryptAvcSamples (samples, sampleIndex, unitIndex, callback) {\n for (;; sampleIndex++, unitIndex = 0) {\n if (sampleIndex >= samples.length) {\n callback();\n return;\n }\n\n let curUnits = samples[sampleIndex].units;\n for (;; unitIndex++) {\n if (unitIndex >= curUnits.length) {\n break;\n }\n\n let curUnit = curUnits[unitIndex];\n if (curUnit.data.length <= 48 || (curUnit.type !== 1 && curUnit.type !== 5)) {\n continue;\n }\n\n let sync = this.decrypter.isSync();\n\n this.decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit, sync);\n\n if (!sync) {\n return;\n }\n }\n }\n }\n}\n\nexport default SampleAesDecrypter;\n","/**\n * highly optimized TS demuxer:\n * parse PAT, PMT\n * extract PES packet from audio and video PIDs\n * extract AVC/H264 NAL units and AAC/ADTS samples from PES packet\n * trigger the remuxer upon parsing completion\n * it also tries to workaround as best as it can audio codec switch (HE-AAC to AAC and vice versa), without having to restart the MediaSource.\n * it also controls the remuxing process :\n * upon discontinuity or level switch detection, it will also notifies the remuxer so that it can reset its state.\n*/\n\nimport * as ADTS from './adts';\nimport MpegAudio from './mpegaudio';\nimport Event from '../events';\nimport ExpGolomb from './exp-golomb';\nimport SampleAesDecrypter from './sample-aes';\n// import Hex from '../utils/hex';\nimport { logger } from '../utils/logger';\nimport { ErrorTypes, ErrorDetails } from '../errors';\nimport { utf8ArrayToStr } from './id3';\n\n// We are using fixed track IDs for driving the MP4 remuxer\n// instead of following the TS PIDs.\n// There is no reason not to do this and some browsers/SourceBuffer-demuxers\n// may not like if there are TrackID \"switches\"\n// See https://github.com/video-dev/hls.js/issues/1331\n// Here we are mapping our internal track types to constant MP4 track IDs\n// With MSE currently one can only have one track of each, and we are muxing\n// whatever video/audio rendition in them.\nconst RemuxerTrackIdConfig = {\n video: 1,\n audio: 2,\n id3: 3,\n text: 4\n};\n\nclass TSDemuxer {\n constructor (observer, remuxer, config, typeSupported) {\n this.observer = observer;\n this.config = config;\n this.typeSupported = typeSupported;\n this.remuxer = remuxer;\n this.sampleAes = null;\n this.pmtUnknownTypes = {};\n }\n\n setDecryptData (decryptdata) {\n if ((decryptdata != null) && (decryptdata.key != null) && (decryptdata.method === 'SAMPLE-AES')) {\n this.sampleAes = new SampleAesDecrypter(this.observer, this.config, decryptdata, this.discardEPB);\n } else {\n this.sampleAes = null;\n }\n }\n\n static probe (data) {\n const syncOffset = TSDemuxer._syncOffset(data);\n if (syncOffset < 0) {\n return false;\n } else {\n if (syncOffset) {\n logger.warn(`MPEG2-TS detected but first sync word found @ offset ${syncOffset}, junk ahead ?`);\n }\n\n return true;\n }\n }\n\n static _syncOffset (data) {\n // scan 1000 first bytes\n const scanwindow = Math.min(1000, data.length - 3 * 188);\n let i = 0;\n while (i < scanwindow) {\n // a TS fragment should contain at least 3 TS packets, a PAT, a PMT, and one PID, each starting with 0x47\n if (data[i] === 0x47 && data[i + 188] === 0x47 && data[i + 2 * 188] === 0x47) {\n return i;\n } else {\n i++;\n }\n }\n return -1;\n }\n\n /**\n * Creates a track model internal to demuxer used to drive remuxing input\n *\n * @param {string} type 'audio' | 'video' | 'id3' | 'text'\n * @param {number} duration\n * @return {object} TSDemuxer's internal track model\n */\n static createTrack (type, duration) {\n return {\n container: type === 'video' || type === 'audio' ? 'video/mp2t' : undefined,\n type,\n id: RemuxerTrackIdConfig[type],\n pid: -1,\n inputTimeScale: 90000,\n sequenceNumber: 0,\n samples: [],\n dropped: type === 'video' ? 0 : undefined,\n isAAC: type === 'audio' ? true : undefined,\n duration: type === 'audio' ? duration : undefined\n };\n }\n\n /**\n * Initializes a new init segment on the demuxer/remuxer interface. Needed for discontinuities/track-switches (or at stream start)\n * Resets all internal track instances of the demuxer.\n *\n * @override Implements generic demuxing/remuxing interface (see DemuxerInline)\n * @param {object} initSegment\n * @param {string} audioCodec\n * @param {string} videoCodec\n * @param {number} duration (in TS timescale = 90kHz)\n */\n resetInitSegment (initSegment, audioCodec, videoCodec, duration) {\n this.pmtParsed = false;\n this._pmtId = -1;\n this.pmtUnknownTypes = {};\n\n this._avcTrack = TSDemuxer.createTrack('video', duration);\n this._audioTrack = TSDemuxer.createTrack('audio', duration);\n this._id3Track = TSDemuxer.createTrack('id3', duration);\n this._txtTrack = TSDemuxer.createTrack('text', duration);\n\n // flush any partial content\n this.aacOverFlow = null;\n this.aacLastPTS = null;\n this.avcSample = null;\n this.audioCodec = audioCodec;\n this.videoCodec = videoCodec;\n this._duration = duration;\n }\n\n /**\n *\n * @override\n */\n resetTimeStamp () {}\n\n // feed incoming data to the front of the parsing pipeline\n append (data, timeOffset, contiguous, accurateTimeOffset) {\n let start, len = data.length, stt, pid, atf, offset, pes,\n unknownPIDs = false;\n this.pmtUnknownTypes = {};\n this.contiguous = contiguous;\n let pmtParsed = this.pmtParsed,\n avcTrack = this._avcTrack,\n audioTrack = this._audioTrack,\n id3Track = this._id3Track,\n avcId = avcTrack.pid,\n audioId = audioTrack.pid,\n id3Id = id3Track.pid,\n pmtId = this._pmtId,\n avcData = avcTrack.pesData,\n audioData = audioTrack.pesData,\n id3Data = id3Track.pesData,\n parsePAT = this._parsePAT,\n parsePMT = this._parsePMT.bind(this),\n parsePES = this._parsePES,\n parseAVCPES = this._parseAVCPES.bind(this),\n parseAACPES = this._parseAACPES.bind(this),\n parseMPEGPES = this._parseMPEGPES.bind(this),\n parseID3PES = this._parseID3PES.bind(this);\n\n const syncOffset = TSDemuxer._syncOffset(data);\n\n // don't parse last TS packet if incomplete\n len -= (len + syncOffset) % 188;\n\n // loop through TS packets\n for (start = syncOffset; start < len; start += 188) {\n if (data[start] === 0x47) {\n stt = !!(data[start + 1] & 0x40);\n // pid is a 13-bit field starting at the last bit of TS[1]\n pid = ((data[start + 1] & 0x1f) << 8) + data[start + 2];\n atf = (data[start + 3] & 0x30) >> 4;\n // if an adaption field is present, its length is specified by the fifth byte of the TS packet header.\n if (atf > 1) {\n offset = start + 5 + data[start + 4];\n // continue if there is only adaptation field\n if (offset === (start + 188)) {\n continue;\n }\n } else {\n offset = start + 4;\n }\n switch (pid) {\n case avcId:\n if (stt) {\n if (avcData && (pes = parsePES(avcData))) {\n parseAVCPES(pes, false);\n }\n\n avcData = { data: [], size: 0 };\n }\n if (avcData) {\n avcData.data.push(data.subarray(offset, start + 188));\n avcData.size += start + 188 - offset;\n }\n break;\n case audioId:\n if (stt) {\n if (audioData && (pes = parsePES(audioData))) {\n if (audioTrack.isAAC) {\n parseAACPES(pes);\n } else {\n parseMPEGPES(pes);\n }\n }\n audioData = { data: [], size: 0 };\n }\n if (audioData) {\n audioData.data.push(data.subarray(offset, start + 188));\n audioData.size += start + 188 - offset;\n }\n break;\n case id3Id:\n if (stt) {\n if (id3Data && (pes = parsePES(id3Data))) {\n parseID3PES(pes);\n }\n\n id3Data = { data: [], size: 0 };\n }\n if (id3Data) {\n id3Data.data.push(data.subarray(offset, start + 188));\n id3Data.size += start + 188 - offset;\n }\n break;\n case 0:\n if (stt) {\n offset += data[offset] + 1;\n }\n\n pmtId = this._pmtId = parsePAT(data, offset);\n break;\n case pmtId:\n if (stt) {\n offset += data[offset] + 1;\n }\n\n let parsedPIDs = parsePMT(data, offset, this.typeSupported.mpeg === true || this.typeSupported.mp3 === true, this.sampleAes != null);\n\n // only update track id if track PID found while parsing PMT\n // this is to avoid resetting the PID to -1 in case\n // track PID transiently disappears from the stream\n // this could happen in case of transient missing audio samples for example\n // NOTE this is only the PID of the track as found in TS,\n // but we are not using this for MP4 track IDs.\n avcId = parsedPIDs.avc;\n if (avcId > 0) {\n avcTrack.pid = avcId;\n }\n\n audioId = parsedPIDs.audio;\n if (audioId > 0) {\n audioTrack.pid = audioId;\n audioTrack.isAAC = parsedPIDs.isAAC;\n }\n id3Id = parsedPIDs.id3;\n if (id3Id > 0) {\n id3Track.pid = id3Id;\n }\n\n if (unknownPIDs && !pmtParsed) {\n logger.log('reparse from beginning');\n unknownPIDs = false;\n // we set it to -188, the += 188 in the for loop will reset start to 0\n start = syncOffset - 188;\n }\n pmtParsed = this.pmtParsed = true;\n break;\n case 17:\n case 0x1fff:\n break;\n default:\n unknownPIDs = true;\n break;\n }\n } else {\n this.observer.trigger(Event.ERROR, { type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: false, reason: 'TS packet did not start with 0x47' });\n }\n }\n // try to parse last PES packets\n if (avcData && (pes = parsePES(avcData))) {\n parseAVCPES(pes, true);\n avcTrack.pesData = null;\n } else {\n // either avcData null or PES truncated, keep it for next frag parsing\n avcTrack.pesData = avcData;\n }\n\n if (audioData && (pes = parsePES(audioData))) {\n if (audioTrack.isAAC) {\n parseAACPES(pes);\n } else {\n parseMPEGPES(pes);\n }\n\n audioTrack.pesData = null;\n } else {\n if (audioData && audioData.size) {\n logger.log('last AAC PES packet truncated,might overlap between fragments');\n }\n\n // either audioData null or PES truncated, keep it for next frag parsing\n audioTrack.pesData = audioData;\n }\n\n if (id3Data && (pes = parsePES(id3Data))) {\n parseID3PES(pes);\n id3Track.pesData = null;\n } else {\n // either id3Data null or PES truncated, keep it for next frag parsing\n id3Track.pesData = id3Data;\n }\n\n if (this.sampleAes == null) {\n this.remuxer.remux(audioTrack, avcTrack, id3Track, this._txtTrack, timeOffset, contiguous, accurateTimeOffset);\n } else {\n this.decryptAndRemux(audioTrack, avcTrack, id3Track, this._txtTrack, timeOffset, contiguous, accurateTimeOffset);\n }\n }\n\n decryptAndRemux (audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset) {\n if (audioTrack.samples && audioTrack.isAAC) {\n let localthis = this;\n this.sampleAes.decryptAacSamples(audioTrack.samples, 0, function () {\n localthis.decryptAndRemuxAvc(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset);\n });\n } else {\n this.decryptAndRemuxAvc(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset);\n }\n }\n\n decryptAndRemuxAvc (audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset) {\n if (videoTrack.samples) {\n let localthis = this;\n this.sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, function () {\n localthis.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset);\n });\n } else {\n this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset);\n }\n }\n\n destroy () {\n this._initPTS = this._initDTS = undefined;\n this._duration = 0;\n }\n\n _parsePAT (data, offset) {\n // skip the PSI header and parse the first PMT entry\n return (data[offset + 10] & 0x1F) << 8 | data[offset + 11];\n // logger.log('PMT PID:' + this._pmtId);\n }\n\n _trackUnknownPmt (type, logLevel, message) {\n // Only log unknown and unsupported stream types once per append or stream (by resetting this.pmtUnknownTypes)\n // For more information on elementary stream types see:\n // https://en.wikipedia.org/wiki/Program-specific_information#Elementary_stream_types\n const result = this.pmtUnknownTypes[type] || 0;\n if (result === 0) {\n this.pmtUnknownTypes[type] = 0;\n logLevel.call(logger, message);\n }\n this.pmtUnknownTypes[type]++;\n return result;\n }\n\n _parsePMT (data, offset, mpegSupported, isSampleAes) {\n let sectionLength, tableEnd, programInfoLength, pid, result = { audio: -1, avc: -1, id3: -1, isAAC: true };\n sectionLength = (data[offset + 1] & 0x0f) << 8 | data[offset + 2];\n tableEnd = offset + 3 + sectionLength - 4;\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n programInfoLength = (data[offset + 10] & 0x0f) << 8 | data[offset + 11];\n // advance the offset to the first entry in the mapping table\n offset += 12 + programInfoLength;\n while (offset < tableEnd) {\n pid = (data[offset + 1] & 0x1F) << 8 | data[offset + 2];\n switch (data[offset]) {\n case 0xcf: // SAMPLE-AES AAC\n if (!isSampleAes) {\n this._trackUnknownPmt(data[offset], logger.warn, 'ADTS AAC with AES-128-CBC frame encryption found in unencrypted stream');\n break;\n }\n /* falls through */\n\n // ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)\n case 0x0f:\n // logger.log('AAC PID:' + pid);\n if (result.audio === -1) {\n result.audio = pid;\n }\n\n break;\n\n // Packetized metadata (ID3)\n case 0x15:\n // logger.log('ID3 PID:' + pid);\n if (result.id3 === -1) {\n result.id3 = pid;\n }\n\n break;\n\n case 0xdb: // SAMPLE-AES AVC\n if (!isSampleAes) {\n this._trackUnknownPmt(data[offset], logger.warn, 'H.264 with AES-128-CBC slice encryption found in unencrypted stream');\n break;\n }\n /* falls through */\n\n // ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)\n case 0x1b:\n // logger.log('AVC PID:' + pid);\n if (result.avc === -1) {\n result.avc = pid;\n }\n\n break;\n\n // ISO/IEC 11172-3 (MPEG-1 audio)\n // or ISO/IEC 13818-3 (MPEG-2 halved sample rate audio)\n case 0x03:\n case 0x04:\n // logger.log('MPEG PID:' + pid);\n if (!mpegSupported) {\n this._trackUnknownPmt(data[offset], logger.warn, 'MPEG audio found, not supported in this browser');\n } else if (result.audio === -1) {\n result.audio = pid;\n result.isAAC = false;\n }\n break;\n\n case 0x24:\n this._trackUnknownPmt(data[offset], logger.warn, 'Unsupported HEVC stream type found');\n break;\n\n default:\n this._trackUnknownPmt(data[offset], logger.log, 'Unknown stream type:' + data[offset]);\n break;\n }\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += ((data[offset + 3] & 0x0F) << 8 | data[offset + 4]) + 5;\n }\n return result;\n }\n\n _parsePES (stream) {\n let i = 0, frag, pesFlags, pesPrefix, pesLen, pesHdrLen, pesData, pesPts, pesDts, payloadStartOffset, data = stream.data;\n // safety check\n if (!stream || stream.size === 0) {\n return null;\n }\n\n // we might need up to 19 bytes to read PES header\n // if first chunk of data is less than 19 bytes, let's merge it with following ones until we get 19 bytes\n // usually only one merge is needed (and this is rare ...)\n while (data[0].length < 19 && data.length > 1) {\n let newData = new Uint8Array(data[0].length + data[1].length);\n newData.set(data[0]);\n newData.set(data[1], data[0].length);\n data[0] = newData;\n data.splice(1, 1);\n }\n // retrieve PTS/DTS from first fragment\n frag = data[0];\n pesPrefix = (frag[0] << 16) + (frag[1] << 8) + frag[2];\n if (pesPrefix === 1) {\n pesLen = (frag[4] << 8) + frag[5];\n // if PES parsed length is not zero and greater than total received length, stop parsing. PES might be truncated\n // minus 6 : PES header size\n if (pesLen && pesLen > stream.size - 6) {\n return null;\n }\n\n pesFlags = frag[7];\n if (pesFlags & 0xC0) {\n /* PES header described here : http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n as PTS / DTS is 33 bit we cannot use bitwise operator in JS,\n as Bitwise operators treat their operands as a sequence of 32 bits */\n pesPts = (frag[9] & 0x0E) * 536870912 +// 1 << 29\n (frag[10] & 0xFF) * 4194304 +// 1 << 22\n (frag[11] & 0xFE) * 16384 +// 1 << 14\n (frag[12] & 0xFF) * 128 +// 1 << 7\n (frag[13] & 0xFE) / 2;\n\n if (pesFlags & 0x40) {\n pesDts = (frag[14] & 0x0E) * 536870912 +// 1 << 29\n (frag[15] & 0xFF) * 4194304 +// 1 << 22\n (frag[16] & 0xFE) * 16384 +// 1 << 14\n (frag[17] & 0xFF) * 128 +// 1 << 7\n (frag[18] & 0xFE) / 2;\n\n if (pesPts - pesDts > 60 * 90000) {\n logger.warn(`${Math.round((pesPts - pesDts) / 90000)}s delta between PTS and DTS, align them`);\n pesPts = pesDts;\n }\n } else {\n pesDts = pesPts;\n }\n }\n pesHdrLen = frag[8];\n // 9 bytes : 6 bytes for PES header + 3 bytes for PES extension\n payloadStartOffset = pesHdrLen + 9;\n\n if (stream.size <= payloadStartOffset) {\n return null;\n }\n stream.size -= payloadStartOffset;\n // reassemble PES packet\n pesData = new Uint8Array(stream.size);\n for (let j = 0, dataLen = data.length; j < dataLen; j++) {\n frag = data[j];\n let len = frag.byteLength;\n if (payloadStartOffset) {\n if (payloadStartOffset > len) {\n // trim full frag if PES header bigger than frag\n payloadStartOffset -= len;\n continue;\n } else {\n // trim partial frag if PES header smaller than frag\n frag = frag.subarray(payloadStartOffset);\n len -= payloadStartOffset;\n payloadStartOffset = 0;\n }\n }\n pesData.set(frag, i);\n i += len;\n }\n if (pesLen) {\n // payload size : remove PES header + PES extension\n pesLen -= pesHdrLen + 3;\n }\n return { data: pesData, pts: pesPts, dts: pesDts, len: pesLen };\n } else {\n return null;\n }\n }\n\n pushAccesUnit (avcSample, avcTrack) {\n if (avcSample.units.length && avcSample.frame) {\n const samples = avcTrack.samples;\n const nbSamples = samples.length;\n // if sample does not have PTS/DTS, patch with last sample PTS/DTS\n if (isNaN(avcSample.pts)) {\n if (nbSamples) {\n const lastSample = samples[nbSamples - 1];\n avcSample.pts = lastSample.pts;\n avcSample.dts = lastSample.dts;\n } else {\n // dropping samples, no timestamp found\n avcTrack.dropped++;\n return;\n }\n }\n // only push AVC sample if starting with a keyframe is not mandatory OR\n // if keyframe already found in this fragment OR\n // keyframe found in last fragment (track.sps) AND\n // samples already appended (we already found a keyframe in this fragment) OR fragment is contiguous\n if (!this.config.forceKeyFrameOnDiscontinuity ||\n avcSample.key === true ||\n (avcTrack.sps && (nbSamples || this.contiguous))) {\n avcSample.id = nbSamples;\n samples.push(avcSample);\n } else {\n // dropped samples, track it\n avcTrack.dropped++;\n }\n }\n if (avcSample.debug.length) {\n logger.log(avcSample.pts + '/' + avcSample.dts + ':' + avcSample.debug);\n }\n }\n\n _parseAVCPES (pes, last) {\n // logger.log('parse new PES');\n let track = this._avcTrack,\n units = this._parseAVCNALu(pes.data),\n debug = false,\n expGolombDecoder,\n avcSample = this.avcSample,\n push,\n spsfound = false,\n i,\n pushAccesUnit = this.pushAccesUnit.bind(this),\n createAVCSample = function (key, pts, dts, debug) {\n return { key: key, pts: pts, dts: dts, units: [], debug: debug };\n };\n // free pes.data to save up some memory\n pes.data = null;\n\n // if new NAL units found and last sample still there, let's push ...\n // this helps parsing streams with missing AUD (only do this if AUD never found)\n if (avcSample && units.length && !track.audFound) {\n pushAccesUnit(avcSample, track);\n avcSample = this.avcSample = createAVCSample(false, pes.pts, pes.dts, '');\n }\n\n units.forEach(unit => {\n switch (unit.type) {\n // NDR\n case 1:\n push = true;\n if (!avcSample) {\n avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');\n }\n\n if (debug) {\n avcSample.debug += 'NDR ';\n }\n\n avcSample.frame = true;\n let data = unit.data;\n // only check slice type to detect KF in case SPS found in same packet (any keyframe is preceded by SPS ...)\n if (spsfound && data.length > 4) {\n // retrieve slice type by parsing beginning of NAL unit (follow H264 spec, slice_header definition) to detect keyframe embedded in NDR\n let sliceType = new ExpGolomb(data).readSliceType();\n // 2 : I slice, 4 : SI slice, 7 : I slice, 9: SI slice\n // SI slice : A slice that is coded using intra prediction only and using quantisation of the prediction samples.\n // An SI slice can be coded such that its decoded samples can be constructed identically to an SP slice.\n // I slice: A slice that is not an SI slice that is decoded using intra prediction only.\n // if (sliceType === 2 || sliceType === 7) {\n if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {\n avcSample.key = true;\n }\n }\n break;\n // IDR\n case 5:\n push = true;\n // handle PES not starting with AUD\n if (!avcSample) {\n avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');\n }\n\n if (debug) {\n avcSample.debug += 'IDR ';\n }\n\n avcSample.key = true;\n avcSample.frame = true;\n break;\n // SEI\n case 6:\n push = true;\n if (debug && avcSample) {\n avcSample.debug += 'SEI ';\n }\n\n expGolombDecoder = new ExpGolomb(this.discardEPB(unit.data));\n\n // skip frameType\n expGolombDecoder.readUByte();\n\n var payloadType = 0;\n var payloadSize = 0;\n var endOfCaptions = false;\n var b = 0;\n\n while (!endOfCaptions && expGolombDecoder.bytesAvailable > 1) {\n payloadType = 0;\n do {\n b = expGolombDecoder.readUByte();\n payloadType += b;\n } while (b === 0xFF);\n\n // Parse payload size.\n payloadSize = 0;\n do {\n b = expGolombDecoder.readUByte();\n payloadSize += b;\n } while (b === 0xFF);\n\n // TODO: there can be more than one payload in an SEI packet...\n // TODO: need to read type and size in a while loop to get them all\n if (payloadType === 4 && expGolombDecoder.bytesAvailable !== 0) {\n endOfCaptions = true;\n\n let countryCode = expGolombDecoder.readUByte();\n\n if (countryCode === 181) {\n let providerCode = expGolombDecoder.readUShort();\n\n if (providerCode === 49) {\n let userStructure = expGolombDecoder.readUInt();\n\n if (userStructure === 0x47413934) {\n let userDataType = expGolombDecoder.readUByte();\n\n // Raw CEA-608 bytes wrapped in CEA-708 packet\n if (userDataType === 3) {\n let firstByte = expGolombDecoder.readUByte();\n let secondByte = expGolombDecoder.readUByte();\n\n let totalCCs = 31 & firstByte;\n let byteArray = [firstByte, secondByte];\n\n for (i = 0; i < totalCCs; i++) {\n // 3 bytes per CC\n byteArray.push(expGolombDecoder.readUByte());\n byteArray.push(expGolombDecoder.readUByte());\n byteArray.push(expGolombDecoder.readUByte());\n }\n\n this._insertSampleInOrder(this._txtTrack.samples, { type: 3, pts: pes.pts, bytes: byteArray });\n }\n }\n }\n }\n } else if (payloadType === 5 && expGolombDecoder.bytesAvailable !== 0) {\n endOfCaptions = true;\n\n if (payloadSize > 16) {\n const uuidStrArray = [];\n for (i = 0; i < 16; i++) {\n uuidStrArray.push(expGolombDecoder.readUByte().toString(16));\n\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n uuidStrArray.push('-');\n }\n }\n const length = payloadSize - 16;\n const userDataPayloadBytes = new Uint8Array(length);\n for (i = 0; i < length; i++) {\n userDataPayloadBytes[i] = expGolombDecoder.readUByte();\n }\n\n this._insertSampleInOrder(this._txtTrack.samples, {\n pts: pes.pts,\n payloadType: payloadType,\n uuid: uuidStrArray.join(''),\n userDataBytes: userDataPayloadBytes,\n userData: utf8ArrayToStr(userDataPayloadBytes.buffer)\n });\n }\n } else if (payloadSize < expGolombDecoder.bytesAvailable) {\n for (i = 0; i < payloadSize; i++) {\n expGolombDecoder.readUByte();\n }\n }\n }\n break;\n // SPS\n case 7:\n push = true;\n spsfound = true;\n if (debug && avcSample) {\n avcSample.debug += 'SPS ';\n }\n\n if (!track.sps) {\n expGolombDecoder = new ExpGolomb(unit.data);\n let config = expGolombDecoder.readSPS();\n track.width = config.width;\n track.height = config.height;\n track.pixelRatio = config.pixelRatio;\n track.sps = [unit.data];\n track.duration = this._duration;\n let codecarray = unit.data.subarray(1, 4);\n let codecstring = 'avc1.';\n for (i = 0; i < 3; i++) {\n let h = codecarray[i].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n\n codecstring += h;\n }\n track.codec = codecstring;\n }\n break;\n // PPS\n case 8:\n push = true;\n if (debug && avcSample) {\n avcSample.debug += 'PPS ';\n }\n\n if (!track.pps) {\n track.pps = [unit.data];\n }\n\n break;\n // AUD\n case 9:\n push = false;\n track.audFound = true;\n if (avcSample) {\n pushAccesUnit(avcSample, track);\n }\n\n avcSample = this.avcSample = createAVCSample(false, pes.pts, pes.dts, debug ? 'AUD ' : '');\n break;\n // Filler Data\n case 12:\n push = false;\n break;\n default:\n push = false;\n if (avcSample) {\n avcSample.debug += 'unknown NAL ' + unit.type + ' ';\n }\n\n break;\n }\n if (avcSample && push) {\n let units = avcSample.units;\n units.push(unit);\n }\n });\n // if last PES packet, push samples\n if (last && avcSample) {\n pushAccesUnit(avcSample, track);\n this.avcSample = null;\n }\n }\n\n _insertSampleInOrder (arr, data) {\n let len = arr.length;\n if (len > 0) {\n if (data.pts >= arr[len - 1].pts) {\n arr.push(data);\n } else {\n for (let pos = len - 1; pos >= 0; pos--) {\n if (data.pts < arr[pos].pts) {\n arr.splice(pos, 0, data);\n break;\n }\n }\n }\n } else {\n arr.push(data);\n }\n }\n\n _getLastNalUnit () {\n let avcSample = this.avcSample, lastUnit;\n // try to fallback to previous sample if current one is empty\n if (!avcSample || avcSample.units.length === 0) {\n let track = this._avcTrack, samples = track.samples;\n avcSample = samples[samples.length - 1];\n }\n if (avcSample) {\n let units = avcSample.units;\n lastUnit = units[units.length - 1];\n }\n return lastUnit;\n }\n\n _parseAVCNALu (array) {\n let i = 0, len = array.byteLength, value, overflow, track = this._avcTrack, state = track.naluState || 0, lastState = state;\n let units = [], unit, unitType, lastUnitStart = -1, lastUnitType;\n // logger.log('PES:' + Hex.hexDump(array));\n\n if (state === -1) {\n // special use case where we found 3 or 4-byte start codes exactly at the end of previous PES packet\n lastUnitStart = 0;\n // NALu type is value read from offset 0\n lastUnitType = array[0] & 0x1f;\n state = 0;\n i = 1;\n }\n\n while (i < len) {\n value = array[i++];\n // optimization. state 0 and 1 are the predominant case. let's handle them outside of the switch/case\n if (!state) {\n state = value ? 0 : 1;\n continue;\n }\n if (state === 1) {\n state = value ? 0 : 2;\n continue;\n }\n // here we have state either equal to 2 or 3\n if (!value) {\n state = 3;\n } else if (value === 1) {\n if (lastUnitStart >= 0) {\n unit = { data: array.subarray(lastUnitStart, i - state - 1), type: lastUnitType };\n // logger.log('pushing NALU, type/size:' + unit.type + '/' + unit.data.byteLength);\n units.push(unit);\n } else {\n // lastUnitStart is undefined => this is the first start code found in this PES packet\n // first check if start code delimiter is overlapping between 2 PES packets,\n // ie it started in last packet (lastState not zero)\n // and ended at the beginning of this PES packet (i <= 4 - lastState)\n let lastUnit = this._getLastNalUnit();\n if (lastUnit) {\n if (lastState && (i <= 4 - lastState)) {\n // start delimiter overlapping between PES packets\n // strip start delimiter bytes from the end of last NAL unit\n // check if lastUnit had a state different from zero\n if (lastUnit.state) {\n // strip last bytes\n lastUnit.data = lastUnit.data.subarray(0, lastUnit.data.byteLength - lastState);\n }\n }\n // If NAL units are not starting right at the beginning of the PES packet, push preceding data into previous NAL unit.\n overflow = i - state - 1;\n if (overflow > 0) {\n // logger.log('first NALU found with overflow:' + overflow);\n let tmp = new Uint8Array(lastUnit.data.byteLength + overflow);\n tmp.set(lastUnit.data, 0);\n tmp.set(array.subarray(0, overflow), lastUnit.data.byteLength);\n lastUnit.data = tmp;\n }\n }\n }\n // check if we can read unit type\n if (i < len) {\n unitType = array[i] & 0x1f;\n // logger.log('find NALU @ offset:' + i + ',type:' + unitType);\n lastUnitStart = i;\n lastUnitType = unitType;\n state = 0;\n } else {\n // not enough byte to read unit type. let's read it on next PES parsing\n state = -1;\n }\n } else {\n state = 0;\n }\n }\n if (lastUnitStart >= 0 && state >= 0) {\n unit = { data: array.subarray(lastUnitStart, len), type: lastUnitType, state: state };\n units.push(unit);\n // logger.log('pushing NALU, type/size/state:' + unit.type + '/' + unit.data.byteLength + '/' + state);\n }\n // no NALu found\n if (units.length === 0) {\n // append pes.data to previous NAL unit\n let lastUnit = this._getLastNalUnit();\n if (lastUnit) {\n let tmp = new Uint8Array(lastUnit.data.byteLength + array.byteLength);\n tmp.set(lastUnit.data, 0);\n tmp.set(array, lastUnit.data.byteLength);\n lastUnit.data = tmp;\n }\n }\n track.naluState = state;\n return units;\n }\n\n /**\n * remove Emulation Prevention bytes from a RBSP\n */\n discardEPB (data) {\n let length = data.byteLength,\n EPBPositions = [],\n i = 1,\n newLength, newData;\n\n // Find all `Emulation Prevention Bytes`\n while (i < length - 2) {\n if (data[i] === 0 &&\n data[i + 1] === 0 &&\n data[i + 2] === 0x03) {\n EPBPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n }\n\n // If no Emulation Prevention Bytes were found just return the original\n // array\n if (EPBPositions.length === 0) {\n return data;\n }\n\n // Create a new array to hold the NAL unit data\n newLength = length - EPBPositions.length;\n newData = new Uint8Array(newLength);\n let sourceIndex = 0;\n\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === EPBPositions[0]) {\n // Skip this byte\n sourceIndex++;\n // Remove this position index\n EPBPositions.shift();\n }\n newData[i] = data[sourceIndex];\n }\n return newData;\n }\n\n _parseAACPES (pes) {\n let track = this._audioTrack,\n data = pes.data,\n pts = pes.pts,\n startOffset = 0,\n aacOverFlow = this.aacOverFlow,\n aacLastPTS = this.aacLastPTS,\n frameDuration, frameIndex, offset, stamp, len;\n if (aacOverFlow) {\n let tmp = new Uint8Array(aacOverFlow.byteLength + data.byteLength);\n tmp.set(aacOverFlow, 0);\n tmp.set(data, aacOverFlow.byteLength);\n // logger.log(`AAC: append overflowing ${aacOverFlow.byteLength} bytes to beginning of new PES`);\n data = tmp;\n }\n // look for ADTS header (0xFFFx)\n for (offset = startOffset, len = data.length; offset < len - 1; offset++) {\n if (ADTS.isHeader(data, offset)) {\n break;\n }\n }\n // if ADTS header does not start straight from the beginning of the PES payload, raise an error\n if (offset) {\n let reason, fatal;\n if (offset < len - 1) {\n reason = `AAC PES did not start with ADTS header,offset:${offset}`;\n fatal = false;\n } else {\n reason = 'no ADTS header found in AAC PES';\n fatal = true;\n }\n logger.warn(`parsing error:${reason}`);\n this.observer.trigger(Event.ERROR, { type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: fatal, reason: reason });\n if (fatal) {\n return;\n }\n }\n\n ADTS.initTrackConfig(track, this.observer, data, offset, this.audioCodec);\n frameIndex = 0;\n frameDuration = ADTS.getFrameDuration(track.samplerate);\n\n // if last AAC frame is overflowing, we should ensure timestamps are contiguous:\n // first sample PTS should be equal to last sample PTS + frameDuration\n if (aacOverFlow && aacLastPTS) {\n let newPTS = aacLastPTS + frameDuration;\n if (Math.abs(newPTS - pts) > 1) {\n logger.log(`AAC: align PTS for overlapping frames by ${Math.round((newPTS - pts) / 90)}`);\n pts = newPTS;\n }\n }\n\n // scan for aac samples\n while (offset < len) {\n if (ADTS.isHeader(data, offset)) {\n if ((offset + 5) < len) {\n const frame = ADTS.appendFrame(track, data, offset, pts, frameIndex);\n if (frame) {\n offset += frame.length;\n stamp = frame.sample.pts;\n frameIndex++;\n continue;\n }\n }\n // We are at an ADTS header, but do not have enough data for a frame\n // Remaining data will be added to aacOverFlow\n break;\n } else {\n // nothing found, keep looking\n offset++;\n }\n }\n\n if (offset < len) {\n aacOverFlow = data.subarray(offset, len);\n // logger.log(`AAC: overflow detected:${len-offset}`);\n } else {\n aacOverFlow = null;\n }\n\n this.aacOverFlow = aacOverFlow;\n this.aacLastPTS = stamp;\n }\n\n _parseMPEGPES (pes) {\n let data = pes.data;\n let length = data.length;\n let frameIndex = 0;\n let offset = 0;\n let pts = pes.pts;\n\n while (offset < length) {\n if (MpegAudio.isHeader(data, offset)) {\n let frame = MpegAudio.appendFrame(this._audioTrack, data, offset, pts, frameIndex);\n if (frame) {\n offset += frame.length;\n frameIndex++;\n } else {\n // logger.log('Unable to parse Mpeg audio frame');\n break;\n }\n } else {\n // nothing found, keep looking\n offset++;\n }\n }\n }\n\n _parseID3PES (pes) {\n this._id3Track.samples.push(pes);\n }\n}\n\nexport default TSDemuxer;\n","/**\n * MP3 demuxer\n */\nimport ID3 from '../demux/id3';\nimport { logger } from '../utils/logger';\nimport MpegAudio from './mpegaudio';\n\nclass MP3Demuxer {\n constructor (observer, remuxer, config) {\n this.observer = observer;\n this.config = config;\n this.remuxer = remuxer;\n }\n\n resetInitSegment (initSegment, audioCodec, videoCodec, duration) {\n this._audioTrack = { container: 'audio/mpeg', type: 'audio', id: -1, sequenceNumber: 0, isAAC: false, samples: [], len: 0, manifestCodec: audioCodec, duration: duration, inputTimeScale: 90000 };\n }\n\n resetTimeStamp () {\n }\n\n static probe (data) {\n // check if data contains ID3 timestamp and MPEG sync word\n let offset, length;\n let id3Data = ID3.getID3Data(data, 0);\n if (id3Data && ID3.getTimeStamp(id3Data) !== undefined) {\n // Look for MPEG header | 1111 1111 | 111X XYZX | where X can be either 0 or 1 and Y or Z should be 1\n // Layer bits (position 14 and 15) in header should be always different from 0 (Layer I or Layer II or Layer III)\n // More info http://www.mp3-tech.org/programmer/frame_header.html\n for (offset = id3Data.length, length = Math.min(data.length - 1, offset + 100); offset < length; offset++) {\n if (MpegAudio.probe(data, offset)) {\n logger.log('MPEG Audio sync word found !');\n return true;\n }\n }\n }\n return false;\n }\n\n // feed incoming data to the front of the parsing pipeline\n append (data, timeOffset, contiguous, accurateTimeOffset) {\n let id3Data = ID3.getID3Data(data, 0) || [];\n let timestamp = ID3.getTimeStamp(id3Data);\n let pts = timestamp !== undefined ? 90 * timestamp : timeOffset * 90000;\n let offset = id3Data.length;\n let length = data.length;\n let frameIndex = 0, stamp = 0;\n let track = this._audioTrack;\n\n let id3Samples = [{ pts: pts, dts: pts, data: id3Data }];\n\n while (offset < length) {\n if (MpegAudio.isHeader(data, offset)) {\n let frame = MpegAudio.appendFrame(track, data, offset, pts, frameIndex);\n if (frame) {\n offset += frame.length;\n stamp = frame.sample.pts;\n frameIndex++;\n } else {\n // logger.log('Unable to parse Mpeg audio frame');\n break;\n }\n } else if (ID3.isHeader(data, offset)) {\n id3Data = ID3.getID3Data(data, offset);\n id3Samples.push({ pts: stamp, dts: stamp, data: id3Data });\n offset += id3Data.length;\n } else {\n // nothing found, keep looking\n offset++;\n }\n }\n\n this.remuxer.remux(track,\n { samples: [] },\n { samples: id3Samples, inputTimeScale: 90000 },\n { samples: [] },\n timeOffset,\n contiguous,\n accurateTimeOffset);\n }\n\n destroy () {\n }\n}\n\nexport default MP3Demuxer;\n","/**\n * AAC helper\n */\n\nclass AAC {\n static getSilentFrame (codec, channelCount) {\n switch (codec) {\n case 'mp4a.40.2':\n if (channelCount === 1) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80]);\n } else if (channelCount === 2) {\n return new Uint8Array([0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80]);\n } else if (channelCount === 3) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x8e]);\n } else if (channelCount === 4) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38]);\n } else if (channelCount === 5) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38]);\n } else if (channelCount === 6) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2, 0x00, 0x20, 0x08, 0xe0]);\n }\n\n break;\n // handle HE-AAC below (mp4a.40.5 / mp4a.40.29)\n default:\n if (channelCount === 1) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0:d=0.05\" -c:a libfdk_aac -profile:a aac_he -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x4e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x1c, 0x6, 0xf1, 0xc1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n } else if (channelCount === 2) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n } else if (channelCount === 3) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0|0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n }\n break;\n }\n return null;\n }\n}\n\nexport default AAC;\n","/**\n * Generate MP4 Box\n*/\n\nconst UINT32_MAX = Math.pow(2, 32) - 1;\n\nclass MP4 {\n static init () {\n MP4.types = {\n avc1: [], // codingname\n avcC: [],\n btrt: [],\n dinf: [],\n dref: [],\n esds: [],\n ftyp: [],\n hdlr: [],\n mdat: [],\n mdhd: [],\n mdia: [],\n mfhd: [],\n minf: [],\n moof: [],\n moov: [],\n mp4a: [],\n '.mp3': [],\n mvex: [],\n mvhd: [],\n pasp: [],\n sdtp: [],\n stbl: [],\n stco: [],\n stsc: [],\n stsd: [],\n stsz: [],\n stts: [],\n tfdt: [],\n tfhd: [],\n traf: [],\n trak: [],\n trun: [],\n trex: [],\n tkhd: [],\n vmhd: [],\n smhd: []\n };\n\n let i;\n for (i in MP4.types) {\n if (MP4.types.hasOwnProperty(i)) {\n MP4.types[i] = [\n i.charCodeAt(0),\n i.charCodeAt(1),\n i.charCodeAt(2),\n i.charCodeAt(3)\n ];\n }\n }\n\n let videoHdlr = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65,\n 0x6f, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]);\n\n let audioHdlr = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x73, 0x6f, 0x75, 0x6e, // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x53, 0x6f, 0x75, 0x6e,\n 0x64, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n ]);\n\n MP4.HDLR_TYPES = {\n 'video': videoHdlr,\n 'audio': audioHdlr\n };\n\n let dref = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0c, // entry_size\n 0x75, 0x72, 0x6c, 0x20, // 'url' type\n 0x00, // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]);\n\n let stco = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n\n MP4.STTS = MP4.STSC = MP4.STCO = stco;\n\n MP4.STSZ = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ]);\n MP4.VMHD = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphicsmode\n 0x00, 0x00,\n 0x00, 0x00,\n 0x00, 0x00 // opcolor\n ]);\n MP4.SMHD = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]);\n\n MP4.STSD = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01]);// entry_count\n\n let majorBrand = new Uint8Array([105, 115, 111, 109]); // isom\n let avc1Brand = new Uint8Array([97, 118, 99, 49]); // avc1\n let minorVersion = new Uint8Array([0, 0, 0, 1]);\n\n MP4.FTYP = MP4.box(MP4.types.ftyp, majorBrand, minorVersion, majorBrand, avc1Brand);\n MP4.DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, dref));\n }\n\n static box (type) {\n let\n payload = Array.prototype.slice.call(arguments, 1),\n size = 8,\n i = payload.length,\n len = i,\n result;\n // calculate the total size we need to allocate\n while (i--) {\n size += payload[i].byteLength;\n }\n\n result = new Uint8Array(size);\n result[0] = (size >> 24) & 0xff;\n result[1] = (size >> 16) & 0xff;\n result[2] = (size >> 8) & 0xff;\n result[3] = size & 0xff;\n result.set(type, 4);\n // copy the payload into the result\n for (i = 0, size = 8; i < len; i++) {\n // copy payload[i] array @ offset size\n result.set(payload[i], size);\n size += payload[i].byteLength;\n }\n return result;\n }\n\n static hdlr (type) {\n return MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type]);\n }\n\n static mdat (data) {\n return MP4.box(MP4.types.mdat, data);\n }\n\n static mdhd (timescale, duration) {\n duration *= timescale;\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n return MP4.box(MP4.types.mdhd, new Uint8Array([\n 0x01, // version 1\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // modification_time\n (timescale >> 24) & 0xFF,\n (timescale >> 16) & 0xFF,\n (timescale >> 8) & 0xFF,\n timescale & 0xFF, // timescale\n (upperWordDuration >> 24),\n (upperWordDuration >> 16) & 0xFF,\n (upperWordDuration >> 8) & 0xFF,\n upperWordDuration & 0xFF,\n (lowerWordDuration >> 24),\n (lowerWordDuration >> 16) & 0xFF,\n (lowerWordDuration >> 8) & 0xFF,\n lowerWordDuration & 0xFF,\n 0x55, 0xc4, // 'und' language (undetermined)\n 0x00, 0x00\n ]));\n }\n\n static mdia (track) {\n return MP4.box(MP4.types.mdia, MP4.mdhd(track.timescale, track.duration), MP4.hdlr(track.type), MP4.minf(track));\n }\n\n static mfhd (sequenceNumber) {\n return MP4.box(MP4.types.mfhd, new Uint8Array([\n 0x00,\n 0x00, 0x00, 0x00, // flags\n (sequenceNumber >> 24),\n (sequenceNumber >> 16) & 0xFF,\n (sequenceNumber >> 8) & 0xFF,\n sequenceNumber & 0xFF // sequence_number\n ]));\n }\n\n static minf (track) {\n if (track.type === 'audio') {\n return MP4.box(MP4.types.minf, MP4.box(MP4.types.smhd, MP4.SMHD), MP4.DINF, MP4.stbl(track));\n } else {\n return MP4.box(MP4.types.minf, MP4.box(MP4.types.vmhd, MP4.VMHD), MP4.DINF, MP4.stbl(track));\n }\n }\n\n static moof (sn, baseMediaDecodeTime, track) {\n return MP4.box(MP4.types.moof, MP4.mfhd(sn), MP4.traf(track, baseMediaDecodeTime));\n }\n /**\n * @param tracks... (optional) {array} the tracks associated with this movie\n */\n static moov (tracks) {\n let\n i = tracks.length,\n boxes = [];\n\n while (i--) {\n boxes[i] = MP4.trak(tracks[i]);\n }\n\n return MP4.box.apply(null, [MP4.types.moov, MP4.mvhd(tracks[0].timescale, tracks[0].duration)].concat(boxes).concat(MP4.mvex(tracks)));\n }\n\n static mvex (tracks) {\n let\n i = tracks.length,\n boxes = [];\n\n while (i--) {\n boxes[i] = MP4.trex(tracks[i]);\n }\n\n return MP4.box.apply(null, [MP4.types.mvex].concat(boxes));\n }\n\n static mvhd (timescale, duration) {\n duration *= timescale;\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n let\n bytes = new Uint8Array([\n 0x01, // version 1\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // modification_time\n (timescale >> 24) & 0xFF,\n (timescale >> 16) & 0xFF,\n (timescale >> 8) & 0xFF,\n timescale & 0xFF, // timescale\n (upperWordDuration >> 24),\n (upperWordDuration >> 16) & 0xFF,\n (upperWordDuration >> 8) & 0xFF,\n upperWordDuration & 0xFF,\n (lowerWordDuration >> 24),\n (lowerWordDuration >> 16) & 0xFF,\n (lowerWordDuration >> 8) & 0xFF,\n lowerWordDuration & 0xFF,\n 0x00, 0x01, 0x00, 0x00, // 1.0 rate\n 0x01, 0x00, // 1.0 volume\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0xff, 0xff, 0xff, 0xff // next_track_ID\n ]);\n return MP4.box(MP4.types.mvhd, bytes);\n }\n\n static sdtp (track) {\n let\n samples = track.samples || [],\n bytes = new Uint8Array(4 + samples.length),\n flags,\n i;\n // leave the full box header (4 bytes) all zero\n // write the sample table\n for (i = 0; i < samples.length; i++) {\n flags = samples[i].flags;\n bytes[i + 4] = (flags.dependsOn << 4) |\n (flags.isDependedOn << 2) |\n (flags.hasRedundancy);\n }\n\n return MP4.box(MP4.types.sdtp, bytes);\n }\n\n static stbl (track) {\n return MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.box(MP4.types.stts, MP4.STTS), MP4.box(MP4.types.stsc, MP4.STSC), MP4.box(MP4.types.stsz, MP4.STSZ), MP4.box(MP4.types.stco, MP4.STCO));\n }\n\n static avc1 (track) {\n let sps = [], pps = [], i, data, len;\n // assemble the SPSs\n\n for (i = 0; i < track.sps.length; i++) {\n data = track.sps[i];\n len = data.byteLength;\n sps.push((len >>> 8) & 0xFF);\n sps.push((len & 0xFF));\n\n // SPS\n sps = sps.concat(Array.prototype.slice.call(data));\n }\n\n // assemble the PPSs\n for (i = 0; i < track.pps.length; i++) {\n data = track.pps[i];\n len = data.byteLength;\n pps.push((len >>> 8) & 0xFF);\n pps.push((len & 0xFF));\n\n pps = pps.concat(Array.prototype.slice.call(data));\n }\n\n let avcc = MP4.box(MP4.types.avcC, new Uint8Array([\n 0x01, // version\n sps[3], // profile\n sps[4], // profile compat\n sps[5], // level\n 0xfc | 3, // lengthSizeMinusOne, hard-coded to 4 bytes\n 0xE0 | track.sps.length // 3bit reserved (111) + numOfSequenceParameterSets\n ].concat(sps).concat([\n track.pps.length // numOfPictureParameterSets\n ]).concat(pps))), // \"PPS\"\n width = track.width,\n height = track.height,\n hSpacing = track.pixelRatio[0],\n vSpacing = track.pixelRatio[1];\n\n return MP4.box(MP4.types.avc1, new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (width >> 8) & 0xFF,\n width & 0xff, // width\n (height >> 8) & 0xFF,\n height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x12,\n 0x64, 0x61, 0x69, 0x6C, // dailymotion/hls.js\n 0x79, 0x6D, 0x6F, 0x74,\n 0x69, 0x6F, 0x6E, 0x2F,\n 0x68, 0x6C, 0x73, 0x2E,\n 0x6A, 0x73, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11]), // pre_defined = -1\n avcc,\n MP4.box(MP4.types.btrt, new Uint8Array([\n 0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0])), // avgBitrate\n MP4.box(MP4.types.pasp, new Uint8Array([\n (hSpacing >> 24), // hSpacing\n (hSpacing >> 16) & 0xFF,\n (hSpacing >> 8) & 0xFF,\n hSpacing & 0xFF,\n (vSpacing >> 24), // vSpacing\n (vSpacing >> 16) & 0xFF,\n (vSpacing >> 8) & 0xFF,\n vSpacing & 0xFF]))\n );\n }\n\n static esds (track) {\n let configlen = track.config.length;\n return new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n\n 0x03, // descriptor_type\n 0x17 + configlen, // length\n 0x00, 0x01, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0f + configlen, // length\n 0x40, // codec : mpeg4_audio\n 0x15, // stream_type\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([configlen]).concat(track.config).concat([0x06, 0x01, 0x02])); // GASpecificConfig)); // length + audio config descriptor\n }\n\n static mp4a (track) {\n let samplerate = track.samplerate;\n return MP4.box(MP4.types.mp4a, new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, track.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (samplerate >> 8) & 0xFF,\n samplerate & 0xff, //\n 0x00, 0x00]),\n MP4.box(MP4.types.esds, MP4.esds(track)));\n }\n\n static mp3 (track) {\n let samplerate = track.samplerate;\n return MP4.box(MP4.types['.mp3'], new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, track.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (samplerate >> 8) & 0xFF,\n samplerate & 0xff, //\n 0x00, 0x00]));\n }\n\n static stsd (track) {\n if (track.type === 'audio') {\n if (!track.isAAC && track.codec === 'mp3') {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp3(track));\n }\n\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp4a(track));\n } else {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.avc1(track));\n }\n }\n\n static tkhd (track) {\n let id = track.id,\n duration = track.duration * track.timescale,\n width = track.width,\n height = track.height,\n upperWordDuration = Math.floor(duration / (UINT32_MAX + 1)),\n lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n return MP4.box(MP4.types.tkhd, new Uint8Array([\n 0x01, // version 1\n 0x00, 0x00, 0x07, // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // modification_time\n (id >> 24) & 0xFF,\n (id >> 16) & 0xFF,\n (id >> 8) & 0xFF,\n id & 0xFF, // track_ID\n 0x00, 0x00, 0x00, 0x00, // reserved\n (upperWordDuration >> 24),\n (upperWordDuration >> 16) & 0xFF,\n (upperWordDuration >> 8) & 0xFF,\n upperWordDuration & 0xFF,\n (lowerWordDuration >> 24),\n (lowerWordDuration >> 16) & 0xFF,\n (lowerWordDuration >> 8) & 0xFF,\n lowerWordDuration & 0xFF,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, 0x00, // alternate_group\n 0x00, 0x00, // non-audio track volume\n 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n (width >> 8) & 0xFF,\n width & 0xFF,\n 0x00, 0x00, // width\n (height >> 8) & 0xFF,\n height & 0xFF,\n 0x00, 0x00 // height\n ]));\n }\n\n static traf (track, baseMediaDecodeTime) {\n let sampleDependencyTable = MP4.sdtp(track),\n id = track.id,\n upperWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1)),\n lowerWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1));\n return MP4.box(MP4.types.traf,\n MP4.box(MP4.types.tfhd, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0XFF,\n (id >> 8) & 0XFF,\n (id & 0xFF) // track_ID\n ])),\n MP4.box(MP4.types.tfdt, new Uint8Array([\n 0x01, // version 1\n 0x00, 0x00, 0x00, // flags\n (upperWordBaseMediaDecodeTime >> 24),\n (upperWordBaseMediaDecodeTime >> 16) & 0XFF,\n (upperWordBaseMediaDecodeTime >> 8) & 0XFF,\n (upperWordBaseMediaDecodeTime & 0xFF),\n (lowerWordBaseMediaDecodeTime >> 24),\n (lowerWordBaseMediaDecodeTime >> 16) & 0XFF,\n (lowerWordBaseMediaDecodeTime >> 8) & 0XFF,\n (lowerWordBaseMediaDecodeTime & 0xFF)\n ])),\n MP4.trun(track,\n sampleDependencyTable.length +\n 16 + // tfhd\n 20 + // tfdt\n 8 + // traf header\n 16 + // mfhd\n 8 + // moof header\n 8), // mdat header\n sampleDependencyTable);\n }\n\n /**\n * Generate a track box.\n * @param track {object} a track definition\n * @return {Uint8Array} the track box\n */\n static trak (track) {\n track.duration = track.duration || 0xffffffff;\n return MP4.box(MP4.types.trak, MP4.tkhd(track), MP4.mdia(track));\n }\n\n static trex (track) {\n let id = track.id;\n return MP4.box(MP4.types.trex, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0XFF,\n (id >> 8) & 0XFF,\n (id & 0xFF), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]));\n }\n\n static trun (track, offset) {\n let samples = track.samples || [],\n len = samples.length,\n arraylen = 12 + (16 * len),\n array = new Uint8Array(arraylen),\n i, sample, duration, size, flags, cts;\n offset += 8 + arraylen;\n array.set([\n 0x00, // version 0\n 0x00, 0x0f, 0x01, // flags\n (len >>> 24) & 0xFF,\n (len >>> 16) & 0xFF,\n (len >>> 8) & 0xFF,\n len & 0xFF, // sample_count\n (offset >>> 24) & 0xFF,\n (offset >>> 16) & 0xFF,\n (offset >>> 8) & 0xFF,\n offset & 0xFF // data_offset\n ], 0);\n for (i = 0; i < len; i++) {\n sample = samples[i];\n duration = sample.duration;\n size = sample.size;\n flags = sample.flags;\n cts = sample.cts;\n array.set([\n (duration >>> 24) & 0xFF,\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n duration & 0xFF, // sample_duration\n (size >>> 24) & 0xFF,\n (size >>> 16) & 0xFF,\n (size >>> 8) & 0xFF,\n size & 0xFF, // sample_size\n (flags.isLeading << 2) | flags.dependsOn,\n (flags.isDependedOn << 6) |\n (flags.hasRedundancy << 4) |\n (flags.paddingValue << 1) |\n flags.isNonSync,\n flags.degradPrio & 0xF0 << 8,\n flags.degradPrio & 0x0F, // sample_flags\n (cts >>> 24) & 0xFF,\n (cts >>> 16) & 0xFF,\n (cts >>> 8) & 0xFF,\n cts & 0xFF // sample_composition_time_offset\n ], 12 + 16 * i);\n }\n return MP4.box(MP4.types.trun, array);\n }\n\n static initSegment (tracks) {\n if (!MP4.types) {\n MP4.init();\n }\n\n let movie = MP4.moov(tracks), result;\n result = new Uint8Array(MP4.FTYP.byteLength + movie.byteLength);\n result.set(MP4.FTYP);\n result.set(movie, MP4.FTYP.byteLength);\n return result;\n }\n}\n\nexport default MP4;\n","const MPEG_TS_CLOCK_FREQ_HZ = 90000;\n\nexport function toTimescaleFromScale (value, destScale: number, srcScale: number = 1, round: boolean = false): number {\n return toTimescaleFromBase(value, destScale, 1 / srcScale);\n}\n\nexport function toTimescaleFromBase (value, destScale: number, srcBase: number = 1, round: boolean = false): number {\n const result = value * destScale * srcBase; // equivalent to `(value * scale) / (1 / base)`\n return round ? Math.round(result) : result;\n}\n\nexport function toMsFromMpegTsClock (value: number, round: boolean = false): number {\n return toTimescaleFromBase(value, 1000, 1 / MPEG_TS_CLOCK_FREQ_HZ, round);\n}\n\nexport function toMpegTsClockFromTimescale (value: number, srcScale: number = 1): number {\n return toTimescaleFromBase(value, MPEG_TS_CLOCK_FREQ_HZ, 1 / srcScale);\n}\n","/**\n * fMP4 remuxer\n*/\n\nimport AAC from './aac-helper';\nimport MP4 from './mp4-generator';\n\nimport Event from '../events';\nimport { ErrorTypes, ErrorDetails } from '../errors';\n\nimport { toMsFromMpegTsClock, toMpegTsClockFromTimescale } from '../utils/timescale-conversion';\n\nimport { logger } from '../utils/logger';\n\nconst MAX_SILENT_FRAME_DURATION_90KHZ = toMpegTsClockFromTimescale(10);\nconst PTS_DTS_SHIFT_TOLERANCE_90KHZ = toMpegTsClockFromTimescale(0.2);\n\nlet chromeVersion = null;\n\nclass MP4Remuxer {\n constructor (observer, config, typeSupported, vendor) {\n this.observer = observer;\n this.config = config;\n this.typeSupported = typeSupported;\n this.ISGenerated = false;\n if (chromeVersion === null) {\n const result = navigator.userAgent.match(/Chrome\\/(\\d+)/i);\n chromeVersion = result ? parseInt(result[1]) : 0;\n }\n }\n\n destroy () {\n }\n\n resetTimeStamp (defaultTimeStamp) {\n this._initPTS = this._initDTS = defaultTimeStamp;\n }\n\n resetInitSegment () {\n this.ISGenerated = false;\n }\n\n getVideoStartPts (videoSamples) {\n let rolloverDetected = false;\n const startPTS = videoSamples.reduce((minPTS, sample) => {\n const delta = sample.pts - minPTS;\n if (delta < -4294967296) { // 2^32, see PTSNormalize for reasoning, but we're hitting a rollover here, and we don't want that to impact the timeOffset calculation\n rolloverDetected = true;\n return PTSNormalize(minPTS, sample.pts);\n } else if (delta > 0) {\n return minPTS;\n } else {\n return sample.pts;\n }\n }, videoSamples[0].pts);\n if (rolloverDetected) {\n logger.debug('PTS rollover detected');\n }\n return startPTS;\n }\n\n remux (audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset) {\n // generate Init Segment if needed\n if (!this.ISGenerated) {\n this.generateIS(audioTrack, videoTrack, timeOffset);\n }\n\n if (this.ISGenerated) {\n const nbAudioSamples = audioTrack.samples.length;\n const nbVideoSamples = videoTrack.samples.length;\n let audioTimeOffset = timeOffset;\n let videoTimeOffset = timeOffset;\n if (nbAudioSamples && nbVideoSamples) {\n // timeOffset is expected to be the offset of the first timestamp of this fragment (first DTS)\n // if first audio DTS is not aligned with first video DTS then we need to take that into account\n // when providing timeOffset to remuxAudio / remuxVideo. if we don't do that, there might be a permanent / small\n // drift between audio and video streams\n const startPTS = this.getVideoStartPts(videoTrack.samples);\n const tsDelta = PTSNormalize(audioTrack.samples[0].pts, startPTS) - startPTS;\n const audiovideoTimestampDelta = tsDelta / videoTrack.inputTimeScale;\n audioTimeOffset += Math.max(0, audiovideoTimestampDelta);\n videoTimeOffset += Math.max(0, -audiovideoTimestampDelta);\n }\n // Purposefully remuxing audio before video, so that remuxVideo can use nextAudioPts, which is\n // calculated in remuxAudio.\n // logger.log('nb AAC samples:' + audioTrack.samples.length);\n if (nbAudioSamples) {\n // if initSegment was generated without video samples, regenerate it again\n if (!audioTrack.timescale) {\n logger.warn('regenerate InitSegment as audio detected');\n this.generateIS(audioTrack, videoTrack, timeOffset);\n }\n let audioData = this.remuxAudio(audioTrack, audioTimeOffset, contiguous, accurateTimeOffset);\n // logger.log('nb AVC samples:' + videoTrack.samples.length);\n if (nbVideoSamples) {\n let audioTrackLength;\n if (audioData) {\n audioTrackLength = audioData.endPTS - audioData.startPTS;\n }\n\n // if initSegment was generated without video samples, regenerate it again\n if (!videoTrack.timescale) {\n logger.warn('regenerate InitSegment as video detected');\n this.generateIS(audioTrack, videoTrack, timeOffset);\n }\n this.remuxVideo(videoTrack, videoTimeOffset, contiguous, audioTrackLength);\n }\n } else {\n // logger.log('nb AVC samples:' + videoTrack.samples.length);\n if (nbVideoSamples) {\n let videoData = this.remuxVideo(videoTrack, videoTimeOffset, contiguous, 0, accurateTimeOffset);\n if (videoData && audioTrack.codec) {\n this.remuxEmptyAudio(audioTrack, audioTimeOffset, contiguous, videoData);\n }\n }\n }\n }\n // logger.log('nb ID3 samples:' + audioTrack.samples.length);\n if (id3Track.samples.length) {\n this.remuxID3(id3Track, timeOffset);\n }\n\n // logger.log('nb ID3 samples:' + audioTrack.samples.length);\n if (textTrack.samples.length) {\n this.remuxText(textTrack, timeOffset);\n }\n\n // notify end of parsing\n this.observer.trigger(Event.FRAG_PARSED);\n }\n\n generateIS (audioTrack, videoTrack, timeOffset) {\n let observer = this.observer,\n audioSamples = audioTrack.samples,\n videoSamples = videoTrack.samples,\n typeSupported = this.typeSupported,\n container = 'audio/mp4',\n tracks = {},\n data = { tracks },\n computePTSDTS = (this._initPTS === undefined),\n initPTS, initDTS;\n\n if (computePTSDTS) {\n initPTS = initDTS = Infinity;\n }\n\n if (audioTrack.config && audioSamples.length) {\n // let's use audio sampling rate as MP4 time scale.\n // rationale is that there is a integer nb of audio frames per audio sample (1024 for AAC)\n // using audio sampling rate here helps having an integer MP4 frame duration\n // this avoids potential rounding issue and AV sync issue\n audioTrack.timescale = audioTrack.samplerate;\n logger.log(`audio sampling rate : ${audioTrack.samplerate}`);\n if (!audioTrack.isAAC) {\n if (typeSupported.mpeg) { // Chrome and Safari\n container = 'audio/mpeg';\n audioTrack.codec = '';\n } else if (typeSupported.mp3) { // Firefox\n audioTrack.codec = 'mp3';\n }\n }\n tracks.audio = {\n container: container,\n codec: audioTrack.codec,\n initSegment: !audioTrack.isAAC && typeSupported.mpeg ? new Uint8Array() : MP4.initSegment([audioTrack]),\n metadata: {\n channelCount: audioTrack.channelCount\n }\n };\n if (computePTSDTS) {\n // remember first PTS of this demuxing context. for audio, PTS = DTS\n initPTS = initDTS = audioSamples[0].pts - Math.round(audioTrack.inputTimeScale * timeOffset);\n }\n }\n\n if (videoTrack.sps && videoTrack.pps && videoSamples.length) {\n // let's use input time scale as MP4 video timescale\n // we use input time scale straight away to avoid rounding issues on frame duration / cts computation\n const inputTimeScale = videoTrack.inputTimeScale;\n videoTrack.timescale = inputTimeScale;\n tracks.video = {\n container: 'video/mp4',\n codec: videoTrack.codec,\n initSegment: MP4.initSegment([videoTrack]),\n metadata: {\n width: videoTrack.width,\n height: videoTrack.height\n }\n };\n if (computePTSDTS) {\n const startPTS = this.getVideoStartPts(videoSamples);\n const startOffset = Math.round(inputTimeScale * timeOffset);\n initDTS = Math.min(initDTS, PTSNormalize(videoSamples[0].dts, startPTS) - startOffset);\n initPTS = Math.min(initPTS, startPTS - startOffset);\n this.observer.trigger(Event.INIT_PTS_FOUND, { initPTS });\n }\n } else if (computePTSDTS && tracks.audio) {\n // initPTS found for audio-only stream with main and alt audio\n this.observer.trigger(Event.INIT_PTS_FOUND, { initPTS });\n }\n\n if (Object.keys(tracks).length) {\n observer.trigger(Event.FRAG_PARSING_INIT_SEGMENT, data);\n this.ISGenerated = true;\n if (computePTSDTS) {\n this._initPTS = initPTS;\n this._initDTS = initDTS;\n }\n } else {\n observer.trigger(Event.ERROR, { type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: false, reason: 'no audio/video samples found' });\n }\n }\n\n remuxVideo (track, timeOffset, contiguous, audioTrackLength) {\n const timeScale = track.timescale;\n const inputSamples = track.samples;\n const outputSamples = [];\n const nbSamples = inputSamples.length;\n const initPTS = this._initPTS;\n\n let offset = 8;\n let mp4SampleDuration;\n let mdat;\n let moof;\n let firstDTS;\n let lastDTS;\n let minPTS = Number.POSITIVE_INFINITY;\n let maxPTS = Number.NEGATIVE_INFINITY;\n let ptsDtsShift = 0;\n let sortSamples = false;\n\n // if parsed fragment is contiguous with last one, let's use last DTS value as reference\n let nextAvcDts = this.nextAvcDts;\n\n if (nbSamples === 0) {\n return;\n }\n\n if (!contiguous) {\n const pts = timeOffset * timeScale;\n const cts = inputSamples[0].pts - PTSNormalize(inputSamples[0].dts, inputSamples[0].pts);\n // if not contiguous, let's use target timeOffset\n nextAvcDts = pts - cts;\n }\n\n // PTS is coded on 33bits, and can loop from -2^32 to 2^32\n // PTSNormalize will make PTS/DTS value monotonic, we use last known DTS value as reference value\n for (let i = 0; i < nbSamples; i++) {\n const sample = inputSamples[i];\n sample.pts = PTSNormalize(sample.pts - initPTS, nextAvcDts);\n sample.dts = PTSNormalize(sample.dts - initPTS, nextAvcDts);\n if (sample.dts > sample.pts) {\n ptsDtsShift = Math.max(Math.min(ptsDtsShift, sample.pts - sample.dts), -1 * PTS_DTS_SHIFT_TOLERANCE_90KHZ);\n }\n if (sample.dts < inputSamples[i > 0 ? i - 1 : i].dts) {\n sortSamples = true;\n }\n }\n\n // sort video samples by DTS then PTS then demux id order\n if (sortSamples) {\n inputSamples.sort(function (a, b) {\n const deltadts = a.dts - b.dts;\n const deltapts = a.pts - b.pts;\n return deltadts || (deltapts || (a.id - b.id));\n });\n }\n\n // Get first/last DTS\n firstDTS = inputSamples[0].dts;\n lastDTS = inputSamples[nbSamples - 1].dts;\n\n // on Safari let's signal the same sample duration for all samples\n // sample duration (as expected by trun MP4 boxes), should be the delta between sample DTS\n // set this constant duration as being the avg delta between consecutive DTS.\n const averageSampleDuration = Math.round((lastDTS - firstDTS) / (nbSamples - 1));\n\n // handle broken streams with PTS < DTS, tolerance up 0.2 seconds\n if (ptsDtsShift < 0) {\n if (ptsDtsShift < averageSampleDuration * -2) {\n // Fix for \"CNN special report, with CC\" in test-streams (including Safari browser)\n // With large PTS < DTS errors such as this, we want to correct CTS while maintaining increasing DTS values\n logger.warn(`PTS < DTS detected in video samples, offsetting DTS from PTS by ${toMsFromMpegTsClock(-averageSampleDuration, true)} ms`);\n let lastDts = ptsDtsShift;\n for (let i = 0; i < nbSamples; i++) {\n inputSamples[i].dts = lastDts = Math.max(lastDts, inputSamples[i].pts - averageSampleDuration);\n inputSamples[i].pts = Math.max(lastDts, inputSamples[i].pts);\n }\n } else {\n // Fix for \"Custom IV with bad PTS DTS\" in test-streams\n // With smaller PTS < DTS errors we can simply move all DTS back. This increases CTS without causing buffer gaps or decode errors in Safari\n logger.warn(`PTS < DTS detected in video samples, shifting DTS by ${toMsFromMpegTsClock(ptsDtsShift, true)} ms to overcome this issue`);\n for (let i = 0; i < nbSamples; i++) {\n inputSamples[i].dts = inputSamples[i].dts + ptsDtsShift;\n }\n }\n firstDTS = inputSamples[0].dts;\n lastDTS = inputSamples[nbSamples - 1].dts;\n }\n\n // if fragment are contiguous, detect hole/overlapping between fragments\n if (contiguous) {\n // check timestamp continuity across consecutive fragments (this is to remove inter-fragment gap/hole)\n const delta = firstDTS - nextAvcDts;\n const foundHole = delta > averageSampleDuration;\n const foundOverlap = delta < -1;\n if (foundHole || foundOverlap) {\n if (foundHole) {\n logger.warn(`AVC: ${toMsFromMpegTsClock(delta, true)} ms (${delta}dts) hole between fragments detected, filling it`);\n } else {\n logger.warn(`AVC: ${toMsFromMpegTsClock(-delta, true)} ms (${delta}dts) overlapping between fragments detected`);\n }\n firstDTS = nextAvcDts;\n const firstPTS = inputSamples[0].pts - delta;\n inputSamples[0].dts = firstDTS;\n inputSamples[0].pts = firstPTS;\n logger.log(`Video: First PTS/DTS adjusted: ${toMsFromMpegTsClock(firstPTS, true)}/${toMsFromMpegTsClock(firstDTS, true)}, delta: ${toMsFromMpegTsClock(delta, true)} ms`);\n }\n }\n\n if (chromeVersion && chromeVersion < 75) {\n firstDTS = Math.max(0, firstDTS);\n }\n let nbNalu = 0;\n let naluLen = 0;\n for (let i = 0; i < nbSamples; i++) {\n // compute total/avc sample length and nb of NAL units\n const sample = inputSamples[i];\n const units = sample.units;\n const nbUnits = units.length;\n let sampleLen = 0;\n for (let j = 0; j < nbUnits; j++) {\n sampleLen += units[j].data.length;\n }\n\n naluLen += sampleLen;\n nbNalu += nbUnits;\n sample.length = sampleLen;\n\n // normalize PTS/DTS\n // ensure sample monotonic DTS\n sample.dts = Math.max(sample.dts, firstDTS);\n // ensure that computed value is greater or equal than sample DTS\n sample.pts = Math.max(sample.pts, sample.dts, 0);\n minPTS = Math.min(sample.pts, minPTS);\n maxPTS = Math.max(sample.pts, maxPTS);\n }\n lastDTS = inputSamples[nbSamples - 1].dts;\n\n /* concatenate the video data and construct the mdat in place\n (need 8 more bytes to fill length and mpdat type) */\n let mdatSize = naluLen + (4 * nbNalu) + 8;\n try {\n mdat = new Uint8Array(mdatSize);\n } catch (err) {\n this.observer.trigger(Event.ERROR, { type: ErrorTypes.MUX_ERROR, details: ErrorDetails.REMUX_ALLOC_ERROR, fatal: false, bytes: mdatSize, reason: `fail allocating video mdat ${mdatSize}` });\n return;\n }\n let view = new DataView(mdat.buffer);\n view.setUint32(0, mdatSize);\n mdat.set(MP4.types.mdat, 4);\n\n for (let i = 0; i < nbSamples; i++) {\n const avcSample = inputSamples[i];\n const avcSampleUnits = avcSample.units;\n let mp4SampleLength = 0;\n let compositionTimeOffset;\n // convert NALU bitstream to MP4 format (prepend NALU with size field)\n for (let j = 0, nbUnits = avcSampleUnits.length; j < nbUnits; j++) {\n const unit = avcSampleUnits[j];\n const unitData = unit.data;\n const unitDataLen = unit.data.byteLength;\n view.setUint32(offset, unitDataLen);\n offset += 4;\n mdat.set(unitData, offset);\n offset += unitDataLen;\n mp4SampleLength += 4 + unitDataLen;\n }\n\n // expected sample duration is the Decoding Timestamp diff of consecutive samples\n if (i < nbSamples - 1) {\n mp4SampleDuration = inputSamples[i + 1].dts - avcSample.dts;\n } else {\n const config = this.config;\n const lastFrameDuration = avcSample.dts - inputSamples[i > 0 ? i - 1 : i].dts;\n if (config.stretchShortVideoTrack) {\n // In some cases, a segment's audio track duration may exceed the video track duration.\n // Since we've already remuxed audio, and we know how long the audio track is, we look to\n // see if the delta to the next segment is longer than maxBufferHole.\n // If so, playback would potentially get stuck, so we artificially inflate\n // the duration of the last frame to minimize any potential gap between segments.\n const maxBufferHole = config.maxBufferHole;\n const gapTolerance = Math.floor(maxBufferHole * timeScale);\n const deltaToFrameEnd = (audioTrackLength ? minPTS + audioTrackLength * timeScale : this.nextAudioPts) - avcSample.pts;\n if (deltaToFrameEnd > gapTolerance) {\n // We subtract lastFrameDuration from deltaToFrameEnd to try to prevent any video\n // frame overlap. maxBufferHole should be >> lastFrameDuration anyway.\n mp4SampleDuration = deltaToFrameEnd - lastFrameDuration;\n if (mp4SampleDuration < 0) {\n mp4SampleDuration = lastFrameDuration;\n }\n\n logger.log(`It is approximately ${toMsFromMpegTsClock(deltaToFrameEnd, false)} ms to the next segment; using duration ${toMsFromMpegTsClock(mp4SampleDuration, false)} ms for the last video frame.`);\n } else {\n mp4SampleDuration = lastFrameDuration;\n }\n } else {\n mp4SampleDuration = lastFrameDuration;\n }\n }\n compositionTimeOffset = Math.round(avcSample.pts - avcSample.dts);\n\n // console.log('PTS/DTS/initDTS/normPTS/normDTS/relative PTS : ${avcSample.pts}/${avcSample.dts}/${initDTS}/${ptsnorm}/${dtsnorm}/${(avcSample.pts/4294967296).toFixed(3)}');\n outputSamples.push({\n size: mp4SampleLength,\n // constant duration\n duration: mp4SampleDuration,\n cts: compositionTimeOffset,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0,\n dependsOn: avcSample.key ? 2 : 1,\n isNonSync: avcSample.key ? 0 : 1\n }\n });\n }\n // next AVC sample DTS should be equal to last sample DTS + last sample duration (in PES timescale)\n this.nextAvcDts = lastDTS + mp4SampleDuration;\n const dropped = track.dropped;\n track.nbNalu = 0;\n track.dropped = 0;\n if (outputSamples.length && navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {\n const flags = outputSamples[0].flags;\n // chrome workaround, mark first sample as being a Random Access Point to avoid sourcebuffer append issue\n // https://code.google.com/p/chromium/issues/detail?id=229412\n flags.dependsOn = 2;\n flags.isNonSync = 0;\n }\n track.samples = outputSamples;\n moof = MP4.moof(track.sequenceNumber++, firstDTS, track);\n track.samples = [];\n\n const data = {\n data1: moof,\n data2: mdat,\n startPTS: minPTS / timeScale,\n endPTS: (maxPTS + mp4SampleDuration) / timeScale,\n startDTS: firstDTS / timeScale,\n endDTS: this.nextAvcDts / timeScale,\n type: 'video',\n hasAudio: false,\n hasVideo: true,\n nb: outputSamples.length,\n dropped: dropped\n };\n this.observer.trigger(Event.FRAG_PARSING_DATA, data);\n return data;\n }\n\n remuxAudio (track, timeOffset, contiguous, accurateTimeOffset) {\n const inputTimeScale = track.inputTimeScale;\n const mp4timeScale = track.timescale;\n const scaleFactor = inputTimeScale / mp4timeScale;\n const mp4SampleDuration = track.isAAC ? 1024 : 1152;\n const inputSampleDuration = mp4SampleDuration * scaleFactor;\n const initPTS = this._initPTS;\n const rawMPEG = !track.isAAC && this.typeSupported.mpeg;\n\n let mp4Sample;\n let fillFrame;\n let mdat;\n let moof;\n let firstPTS;\n let lastPTS;\n let offset = (rawMPEG ? 0 : 8);\n let inputSamples = track.samples;\n let outputSamples = [];\n let nextAudioPts = this.nextAudioPts;\n\n // for audio samples, also consider consecutive fragments as being contiguous (even if a level switch occurs),\n // for sake of clarity:\n // consecutive fragments are frags with\n // - less than 100ms gaps between new time offset (if accurate) and next expected PTS OR\n // - less than 20 audio frames distance\n // contiguous fragments are consecutive fragments from same quality level (same level, new SN = old SN + 1)\n // this helps ensuring audio continuity\n // and this also avoids audio glitches/cut when switching quality, or reporting wrong duration on first audio frame\n contiguous |= (inputSamples.length && nextAudioPts &&\n ((accurateTimeOffset && Math.abs(timeOffset - nextAudioPts / inputTimeScale) < 0.1) ||\n Math.abs((inputSamples[0].pts - nextAudioPts - initPTS)) < 20 * inputSampleDuration)\n );\n\n // compute normalized PTS\n inputSamples.forEach(function (sample) {\n sample.pts = sample.dts = PTSNormalize(sample.pts - initPTS, timeOffset * inputTimeScale);\n });\n\n // filter out sample with negative PTS that are not playable anyway\n // if we don't remove these negative samples, they will shift all audio samples forward.\n // leading to audio overlap between current / next fragment\n inputSamples = inputSamples.filter((sample) => sample.pts >= 0);\n\n // in case all samples have negative PTS, and have been filtered out, return now\n if (inputSamples.length === 0) {\n return;\n }\n\n if (!contiguous) {\n if (!accurateTimeOffset) {\n // if frag are mot contiguous and if we cant trust time offset, let's use first sample PTS as next audio PTS\n nextAudioPts = inputSamples[0].pts;\n } else {\n // if timeOffset is accurate, let's use it as predicted next audio PTS\n nextAudioPts = Math.max(0, timeOffset * inputTimeScale);\n }\n }\n\n // If the audio track is missing samples, the frames seem to get \"left-shifted\" within the\n // resulting mp4 segment, causing sync issues and leaving gaps at the end of the audio segment.\n // In an effort to prevent this from happening, we inject frames here where there are gaps.\n // When possible, we inject a silent frame; when that's not possible, we duplicate the last\n // frame.\n\n if (track.isAAC) {\n const maxAudioFramesDrift = this.config.maxAudioFramesDrift;\n for (let i = 0, nextPts = nextAudioPts; i < inputSamples.length;) {\n // First, let's see how far off this frame is from where we expect it to be\n const sample = inputSamples[i];\n let pts = sample.pts;\n let delta = pts - nextPts;\n\n // If we're overlapping by more than a duration, drop this sample\n if (delta <= -maxAudioFramesDrift * inputSampleDuration) {\n if (contiguous || i > 0) {\n logger.warn(`Dropping 1 audio frame @ ${toMsFromMpegTsClock(nextPts, true) / 1000}s due to ${toMsFromMpegTsClock(delta, true)} ms overlap.`);\n inputSamples.splice(i, 1);\n // Don't touch nextPtsNorm or i\n } else {\n // When changing qualities we can't trust that audio has been appended up to nextAudioPts\n // Warn about the overlap but do not drop samples as that can introduce buffer gaps\n logger.warn(`Audio frame @ ${toMsFromMpegTsClock(pts, true) / 1000}s overlaps nextAudioPts by ${toMsFromMpegTsClock(delta, true)} ms.`);\n nextPts = pts + inputSampleDuration;\n i++;\n }\n } // eslint-disable-line brace-style\n\n // Insert missing frames if:\n // 1: We're more than maxAudioFramesDrift frame away\n // 2: Not more than MAX_SILENT_FRAME_DURATION away\n // 3: currentTime (aka nextPtsNorm) is not 0\n else if (delta >= maxAudioFramesDrift * inputSampleDuration && delta < MAX_SILENT_FRAME_DURATION_90KHZ && nextPts) {\n let missing = Math.round(delta / inputSampleDuration);\n logger.warn(`Injecting ${missing} audio frames @ ${toMsFromMpegTsClock(nextPts, true) / 1000}s due to ${toMsFromMpegTsClock(delta, true)} ms gap.`);\n for (let j = 0; j < missing; j++) {\n let newStamp = Math.max(nextPts, 0);\n fillFrame = AAC.getSilentFrame(track.manifestCodec || track.codec, track.channelCount);\n if (!fillFrame) {\n logger.log('Unable to get silent frame for given audio codec; duplicating last frame instead.');\n fillFrame = sample.unit.subarray();\n }\n inputSamples.splice(i, 0, { unit: fillFrame, pts: newStamp, dts: newStamp });\n nextPts += inputSampleDuration;\n i++;\n }\n\n // Adjust sample to next expected pts\n sample.pts = sample.dts = nextPts;\n nextPts += inputSampleDuration;\n i++;\n } else {\n // Otherwise, just adjust pts\n if (Math.abs(delta) > (0.1 * inputSampleDuration)) {\n // logger.log(`Invalid frame delta ${Math.round(delta + inputSampleDuration)} at PTS ${Math.round(pts / 90)} (should be ${Math.round(inputSampleDuration)}).`);\n }\n sample.pts = sample.dts = nextPts;\n nextPts += inputSampleDuration;\n i++;\n }\n }\n }\n\n // compute mdat size, as we eventually filtered/added some samples\n let nbSamples = inputSamples.length;\n let mdatSize = 0;\n while (nbSamples--) {\n mdatSize += inputSamples[nbSamples].unit.byteLength;\n }\n\n for (let j = 0, nbSamples = inputSamples.length; j < nbSamples; j++) {\n let audioSample = inputSamples[j];\n let unit = audioSample.unit;\n let pts = audioSample.pts;\n\n // logger.log(`Audio/PTS:${toMsFromMpegTsClock(pts, true)}`);\n // if not first sample\n\n if (lastPTS !== undefined && mp4Sample) {\n mp4Sample.duration = Math.round((pts - lastPTS) / scaleFactor);\n } else {\n let delta = pts - nextAudioPts;\n let numMissingFrames = 0;\n\n // if fragment are contiguous, detect hole/overlapping between fragments\n // contiguous fragments are consecutive fragments from same quality level (same level, new SN = old SN + 1)\n if (contiguous && track.isAAC) {\n // log delta\n if (delta) {\n if (delta > 0 && delta < MAX_SILENT_FRAME_DURATION_90KHZ) {\n // Q: why do we have to round here, shouldn't this always result in an integer if timestamps are correct,\n // and if not, shouldn't we actually Math.ceil() instead?\n numMissingFrames = Math.round((pts - nextAudioPts) / inputSampleDuration);\n\n logger.log(`${toMsFromMpegTsClock(delta, true)} ms hole between AAC samples detected,filling it`);\n if (numMissingFrames > 0) {\n fillFrame = AAC.getSilentFrame(track.manifestCodec || track.codec, track.channelCount);\n if (!fillFrame) {\n fillFrame = unit.subarray();\n }\n\n mdatSize += numMissingFrames * fillFrame.length;\n }\n // if we have frame overlap, overlapping for more than half a frame duraion\n } else if (delta < -12) {\n // drop overlapping audio frames... browser will deal with it\n logger.log(`drop overlapping AAC sample, expected/parsed/delta: ${toMsFromMpegTsClock(nextAudioPts, true)} ms / ${toMsFromMpegTsClock(pts, true)} ms / ${toMsFromMpegTsClock(-delta, true)} ms`);\n mdatSize -= unit.byteLength;\n continue;\n }\n // set PTS/DTS to expected PTS/DTS\n pts = nextAudioPts;\n }\n }\n // remember first PTS of our audioSamples\n firstPTS = pts;\n if (mdatSize > 0) {\n mdatSize += offset;\n try {\n mdat = new Uint8Array(mdatSize);\n } catch (err) {\n this.observer.trigger(Event.ERROR, { type: ErrorTypes.MUX_ERROR, details: ErrorDetails.REMUX_ALLOC_ERROR, fatal: false, bytes: mdatSize, reason: `fail allocating audio mdat ${mdatSize}` });\n return;\n }\n if (!rawMPEG) {\n const view = new DataView(mdat.buffer);\n view.setUint32(0, mdatSize);\n mdat.set(MP4.types.mdat, 4);\n }\n } else {\n // no audio samples\n return;\n }\n for (let i = 0; i < numMissingFrames; i++) {\n fillFrame = AAC.getSilentFrame(track.manifestCodec || track.codec, track.channelCount);\n if (!fillFrame) {\n logger.log('Unable to get silent frame for given audio codec; duplicating this frame instead.');\n fillFrame = unit.subarray();\n }\n mdat.set(fillFrame, offset);\n offset += fillFrame.byteLength;\n mp4Sample = {\n size: fillFrame.byteLength,\n cts: 0,\n duration: 1024,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0,\n dependsOn: 1\n }\n };\n outputSamples.push(mp4Sample);\n }\n }\n mdat.set(unit, offset);\n let unitLen = unit.byteLength;\n offset += unitLen;\n // console.log('PTS/DTS/initDTS/normPTS/normDTS/relative PTS : ${audioSample.pts}/${audioSample.dts}/${initDTS}/${ptsnorm}/${dtsnorm}/${(audioSample.pts/4294967296).toFixed(3)}');\n mp4Sample = {\n size: unitLen,\n cts: 0,\n duration: 0,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0,\n dependsOn: 1\n }\n };\n outputSamples.push(mp4Sample);\n lastPTS = pts;\n }\n let lastSampleDuration = 0;\n nbSamples = outputSamples.length;\n // set last sample duration as being identical to previous sample\n if (nbSamples >= 2) {\n lastSampleDuration = outputSamples[nbSamples - 2].duration;\n mp4Sample.duration = lastSampleDuration;\n }\n if (nbSamples) {\n // next audio sample PTS should be equal to last sample PTS + duration\n this.nextAudioPts = nextAudioPts = lastPTS + scaleFactor * lastSampleDuration;\n // logger.log('Audio/PTS/PTSend:' + audioSample.pts.toFixed(0) + '/' + this.nextAacDts.toFixed(0));\n track.samples = outputSamples;\n if (rawMPEG) {\n moof = new Uint8Array();\n } else {\n moof = MP4.moof(track.sequenceNumber++, firstPTS / scaleFactor, track);\n }\n\n track.samples = [];\n const start = firstPTS / inputTimeScale;\n const end = nextAudioPts / inputTimeScale;\n const audioData = {\n data1: moof,\n data2: mdat,\n startPTS: start,\n endPTS: end,\n startDTS: start,\n endDTS: end,\n type: 'audio',\n hasAudio: true,\n hasVideo: false,\n nb: nbSamples\n };\n this.observer.trigger(Event.FRAG_PARSING_DATA, audioData);\n return audioData;\n }\n return null;\n }\n\n remuxEmptyAudio (track, timeOffset, contiguous, videoData) {\n let inputTimeScale = track.inputTimeScale;\n let mp4timeScale = track.samplerate ? track.samplerate : inputTimeScale;\n let scaleFactor = inputTimeScale / mp4timeScale;\n let nextAudioPts = this.nextAudioPts;\n\n // sync with video's timestamp\n let startDTS = (nextAudioPts !== undefined ? nextAudioPts : videoData.startDTS * inputTimeScale) + this._initDTS;\n let endDTS = videoData.endDTS * inputTimeScale + this._initDTS;\n // one sample's duration value\n let sampleDuration = 1024;\n let frameDuration = scaleFactor * sampleDuration;\n\n // samples count of this segment's duration\n let nbSamples = Math.ceil((endDTS - startDTS) / frameDuration);\n\n // silent frame\n let silentFrame = AAC.getSilentFrame(track.manifestCodec || track.codec, track.channelCount);\n\n logger.warn('remux empty Audio');\n // Can't remux if we can't generate a silent frame...\n if (!silentFrame) {\n logger.trace('Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!');\n return;\n }\n\n let samples = [];\n for (let i = 0; i < nbSamples; i++) {\n let stamp = startDTS + i * frameDuration;\n samples.push({ unit: silentFrame, pts: stamp, dts: stamp });\n }\n track.samples = samples;\n\n this.remuxAudio(track, timeOffset, contiguous);\n }\n\n remuxID3 (track, timeOffset) {\n const length = track.samples.length;\n if (!length) {\n return;\n }\n const inputTimeScale = track.inputTimeScale;\n const initPTS = this._initPTS;\n const initDTS = this._initDTS;\n // consume samples\n for (let index = 0; index < length; index++) {\n const sample = track.samples[index];\n // setting id3 pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = PTSNormalize(sample.pts - initPTS, timeOffset * inputTimeScale) / inputTimeScale;\n sample.dts = PTSNormalize(sample.dts - initDTS, timeOffset * inputTimeScale) / inputTimeScale;\n }\n this.observer.trigger(Event.FRAG_PARSING_METADATA, {\n samples: track.samples\n });\n\n track.samples = [];\n }\n\n remuxText (track, timeOffset) {\n const length = track.samples.length;\n const inputTimeScale = track.inputTimeScale;\n const initPTS = this._initPTS;\n // consume samples\n if (length) {\n for (let index = 0; index < length; index++) {\n const sample = track.samples[index];\n // setting text pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = PTSNormalize(sample.pts - initPTS, timeOffset * inputTimeScale) / inputTimeScale;\n }\n track.samples.sort(function (a, b) {\n return (a.pts - b.pts);\n });\n this.observer.trigger(Event.FRAG_PARSING_USERDATA, {\n samples: track.samples\n });\n }\n\n track.samples = [];\n }\n}\n\nfunction PTSNormalize (value, reference) {\n let offset;\n if (reference === undefined) {\n return value;\n }\n\n if (reference < value) {\n // - 2^33\n offset = -8589934592;\n } else {\n // + 2^33\n offset = 8589934592;\n }\n /* PTS is 33bit (from 0 to 2^33 -1)\n if diff between value and reference is bigger than half of the amplitude (2^32) then it means that\n PTS looping occured. fill the gap */\n while (Math.abs(value - reference) > 4294967296) {\n value += offset;\n }\n\n return value;\n}\n\nexport default MP4Remuxer;\n","/**\n *\n * inline demuxer: probe fragments and instantiate\n * appropriate demuxer depending on content type (TSDemuxer, AACDemuxer, ...)\n *\n */\n\nimport Event from '../events';\nimport { ErrorTypes, ErrorDetails } from '../errors';\nimport Decrypter from '../crypt/decrypter';\nimport AACDemuxer from '../demux/aacdemuxer';\nimport MP4Demuxer from '../demux/mp4demuxer';\nimport TSDemuxer from '../demux/tsdemuxer';\nimport MP3Demuxer from '../demux/mp3demuxer';\nimport MP4Remuxer from '../remux/mp4-remuxer';\nimport PassThroughRemuxer from '../remux/passthrough-remuxer';\n\nimport { getSelfScope } from '../utils/get-self-scope';\nimport { logger } from '../utils/logger';\n\n// see https://stackoverflow.com/a/11237259/589493\nconst global = getSelfScope(); // safeguard for code that might run both on worker and main thread\n\nlet now;\n// performance.now() not available on WebWorker, at least on Safari Desktop\ntry {\n now = global.performance.now.bind(global.performance);\n} catch (err) {\n logger.debug('Unable to use Performance API on this environment');\n now = global.Date.now;\n}\n\nclass DemuxerInline {\n constructor (observer, typeSupported, config, vendor) {\n this.observer = observer;\n this.typeSupported = typeSupported;\n this.config = config;\n this.vendor = vendor;\n }\n\n destroy () {\n let demuxer = this.demuxer;\n if (demuxer) {\n demuxer.destroy();\n }\n }\n\n push (data, decryptdata, initSegment, audioCodec, videoCodec, timeOffset, discontinuity, trackSwitch, contiguous, duration, accurateTimeOffset, defaultInitPTS) {\n if ((data.byteLength > 0) && (decryptdata != null) && (decryptdata.key != null) && (decryptdata.method === 'AES-128')) {\n let decrypter = this.decrypter;\n if (decrypter == null) {\n decrypter = this.decrypter = new Decrypter(this.observer, this.config);\n }\n\n const startTime = now();\n decrypter.decrypt(data, decryptdata.key.buffer, decryptdata.iv.buffer, (decryptedData) => {\n const endTime = now();\n this.observer.trigger(Event.FRAG_DECRYPTED, { stats: { tstart: startTime, tdecrypt: endTime } });\n this.pushDecrypted(new Uint8Array(decryptedData), decryptdata, new Uint8Array(initSegment), audioCodec, videoCodec, timeOffset, discontinuity, trackSwitch, contiguous, duration, accurateTimeOffset, defaultInitPTS);\n });\n } else {\n this.pushDecrypted(new Uint8Array(data), decryptdata, new Uint8Array(initSegment), audioCodec, videoCodec, timeOffset, discontinuity, trackSwitch, contiguous, duration, accurateTimeOffset, defaultInitPTS);\n }\n }\n\n pushDecrypted (data, decryptdata, initSegment, audioCodec, videoCodec, timeOffset, discontinuity, trackSwitch, contiguous, duration, accurateTimeOffset, defaultInitPTS) {\n let demuxer = this.demuxer;\n let remuxer = this.remuxer;\n if (!demuxer ||\n // in case of continuity change, or track switch\n // we might switch from content type (AAC container to TS container, or TS to fmp4 for example)\n (discontinuity || trackSwitch)) {\n const observer = this.observer;\n const typeSupported = this.typeSupported;\n const config = this.config;\n // probing order is TS/MP4/AAC/MP3\n const muxConfig = [\n { demux: TSDemuxer, remux: MP4Remuxer },\n { demux: MP4Demuxer, remux: PassThroughRemuxer },\n { demux: AACDemuxer, remux: MP4Remuxer },\n { demux: MP3Demuxer, remux: MP4Remuxer }\n ];\n\n // probe for content type\n let mux;\n for (let i = 0, len = muxConfig.length; i < len; i++) {\n mux = muxConfig[i];\n if (mux.demux.probe(data)) {\n break;\n }\n }\n if (!mux) {\n observer.trigger(Event.ERROR, { type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: true, reason: 'no demux matching with content found' });\n return;\n }\n // so let's check that current remuxer and demuxer are still valid\n if (!remuxer || !(remuxer instanceof mux.remux)) {\n remuxer = new mux.remux(observer, config, typeSupported, this.vendor);\n }\n if (!demuxer || !(demuxer instanceof mux.demux)) {\n demuxer = new mux.demux(observer, remuxer, config, typeSupported);\n this.probe = mux.demux.probe;\n }\n this.demuxer = demuxer;\n this.remuxer = remuxer;\n }\n\n if (discontinuity || trackSwitch) {\n demuxer.resetInitSegment(initSegment, audioCodec, videoCodec, duration);\n remuxer.resetInitSegment();\n }\n if (discontinuity) {\n demuxer.resetTimeStamp(defaultInitPTS);\n remuxer.resetTimeStamp(defaultInitPTS);\n }\n if (typeof demuxer.setDecryptData === 'function') {\n demuxer.setDecryptData(decryptdata);\n }\n\n demuxer.append(data, timeOffset, contiguous, accurateTimeOffset);\n }\n}\n\nexport default DemuxerInline;\n","/**\n * passthrough remuxer\n*/\nimport Event from '../events';\n\nclass PassThroughRemuxer {\n constructor (observer) {\n this.observer = observer;\n }\n\n destroy () {\n }\n\n resetTimeStamp () {\n }\n\n resetInitSegment () {\n }\n\n remux (audioTrack, videoTrack, id3Track, textTrack, timeOffset, contiguous, accurateTimeOffset, rawData) {\n let observer = this.observer;\n let streamType = '';\n if (audioTrack) {\n streamType += 'audio';\n }\n\n if (videoTrack) {\n streamType += 'video';\n }\n\n observer.trigger(Event.FRAG_PARSING_DATA, {\n data1: rawData,\n startPTS: timeOffset,\n startDTS: timeOffset,\n type: streamType,\n hasAudio: !!audioTrack,\n hasVideo: !!videoTrack,\n nb: 1,\n dropped: 0\n });\n // notify end of parsing\n observer.trigger(Event.FRAG_PARSED);\n }\n}\n\nexport default PassThroughRemuxer;\n","/**\n * MP4 demuxer\n */\nimport { logger } from '../utils/logger';\nimport Event from '../events';\n\nconst UINT32_MAX = Math.pow(2, 32) - 1;\n\nclass MP4Demuxer {\n constructor (observer, remuxer) {\n this.observer = observer;\n this.remuxer = remuxer;\n }\n\n resetTimeStamp (initPTS) {\n this.initPTS = initPTS;\n }\n\n resetInitSegment (initSegment, audioCodec, videoCodec, duration) {\n // jshint unused:false\n if (initSegment && initSegment.byteLength) {\n const initData = this.initData = MP4Demuxer.parseInitSegment(initSegment);\n\n // default audio codec if nothing specified\n // TODO : extract that from initsegment\n if (audioCodec == null) {\n audioCodec = 'mp4a.40.5';\n }\n\n if (videoCodec == null) {\n videoCodec = 'avc1.42e01e';\n }\n\n const tracks = {};\n if (initData.audio && initData.video) {\n tracks.audiovideo = { container: 'video/mp4', codec: audioCodec + ',' + videoCodec, initSegment: duration ? initSegment : null };\n } else {\n if (initData.audio) {\n tracks.audio = { container: 'audio/mp4', codec: audioCodec, initSegment: duration ? initSegment : null };\n }\n\n if (initData.video) {\n tracks.video = { container: 'video/mp4', codec: videoCodec, initSegment: duration ? initSegment : null };\n }\n }\n this.observer.trigger(Event.FRAG_PARSING_INIT_SEGMENT, { tracks });\n } else {\n if (audioCodec) {\n this.audioCodec = audioCodec;\n }\n\n if (videoCodec) {\n this.videoCodec = videoCodec;\n }\n }\n }\n\n static probe (data) {\n // ensure we find a moof box in the first 16 kB\n return MP4Demuxer.findBox({ data: data, start: 0, end: Math.min(data.length, 16384) }, ['moof']).length > 0;\n }\n\n static bin2str (buffer) {\n return String.fromCharCode.apply(null, buffer);\n }\n\n static readUint16 (buffer, offset) {\n if (buffer.data) {\n offset += buffer.start;\n buffer = buffer.data;\n }\n\n const val = buffer[offset] << 8 |\n buffer[offset + 1];\n\n return val < 0 ? 65536 + val : val;\n }\n\n static readUint32 (buffer, offset) {\n if (buffer.data) {\n offset += buffer.start;\n buffer = buffer.data;\n }\n\n const val = buffer[offset] << 24 |\n buffer[offset + 1] << 16 |\n buffer[offset + 2] << 8 |\n buffer[offset + 3];\n return val < 0 ? 4294967296 + val : val;\n }\n\n static writeUint32 (buffer, offset, value) {\n if (buffer.data) {\n offset += buffer.start;\n buffer = buffer.data;\n }\n buffer[offset] = value >> 24;\n buffer[offset + 1] = (value >> 16) & 0xff;\n buffer[offset + 2] = (value >> 8) & 0xff;\n buffer[offset + 3] = value & 0xff;\n }\n\n // Find the data for a box specified by its path\n static findBox (data, path) {\n let results = [],\n i, size, type, end, subresults, start, endbox;\n\n if (data.data) {\n start = data.start;\n end = data.end;\n data = data.data;\n } else {\n start = 0;\n end = data.byteLength;\n }\n\n if (!path.length) {\n // short-circuit the search for empty paths\n return null;\n }\n\n for (i = start; i < end;) {\n size = MP4Demuxer.readUint32(data, i);\n type = MP4Demuxer.bin2str(data.subarray(i + 4, i + 8));\n endbox = size > 1 ? i + size : end;\n\n if (type === path[0]) {\n if (path.length === 1) {\n // this is the end of the path and we've found the box we were\n // looking for\n results.push({ data: data, start: i + 8, end: endbox });\n } else {\n // recursively search for the next box along the path\n subresults = MP4Demuxer.findBox({ data: data, start: i + 8, end: endbox }, path.slice(1));\n if (subresults.length) {\n results = results.concat(subresults);\n }\n }\n }\n i = endbox;\n }\n\n // we've finished searching all of data\n return results;\n }\n\n static parseSegmentIndex (initSegment) {\n const moov = MP4Demuxer.findBox(initSegment, ['moov'])[0];\n const moovEndOffset = moov ? moov.end : null; // we need this in case we need to chop of garbage of the end of current data\n\n let index = 0;\n let sidx = MP4Demuxer.findBox(initSegment, ['sidx']);\n let references;\n\n if (!sidx || !sidx[0]) {\n return null;\n }\n\n references = [];\n sidx = sidx[0];\n\n const version = sidx.data[0];\n\n // set initial offset, we skip the reference ID (not needed)\n index = version === 0 ? 8 : 16;\n\n const timescale = MP4Demuxer.readUint32(sidx, index);\n index += 4;\n\n // TODO: parse earliestPresentationTime and firstOffset\n // usually zero in our case\n let earliestPresentationTime = 0;\n let firstOffset = 0;\n\n if (version === 0) {\n index += 8;\n } else {\n index += 16;\n }\n\n // skip reserved\n index += 2;\n\n let startByte = sidx.end + firstOffset;\n\n const referencesCount = MP4Demuxer.readUint16(sidx, index);\n index += 2;\n\n for (let i = 0; i < referencesCount; i++) {\n let referenceIndex = index;\n\n const referenceInfo = MP4Demuxer.readUint32(sidx, referenceIndex);\n referenceIndex += 4;\n\n const referenceSize = referenceInfo & 0x7FFFFFFF;\n const referenceType = (referenceInfo & 0x80000000) >>> 31;\n\n if (referenceType === 1) {\n console.warn('SIDX has hierarchical references (not supported)');\n return;\n }\n\n const subsegmentDuration = MP4Demuxer.readUint32(sidx, referenceIndex);\n referenceIndex += 4;\n\n references.push({\n referenceSize,\n subsegmentDuration, // unscaled\n info: {\n duration: subsegmentDuration / timescale,\n start: startByte,\n end: startByte + referenceSize - 1\n }\n });\n\n startByte += referenceSize;\n\n // Skipping 1 bit for |startsWithSap|, 3 bits for |sapType|, and 28 bits\n // for |sapDelta|.\n referenceIndex += 4;\n\n // skip to next ref\n index = referenceIndex;\n }\n\n return {\n earliestPresentationTime,\n timescale,\n version,\n referencesCount,\n references,\n moovEndOffset\n };\n }\n\n /**\n * Parses an MP4 initialization segment and extracts stream type and\n * timescale values for any declared tracks. Timescale values indicate the\n * number of clock ticks per second to assume for time-based values\n * elsewhere in the MP4.\n *\n * To determine the start time of an MP4, you need two pieces of\n * information: the timescale unit and the earliest base media decode\n * time. Multiple timescales can be specified within an MP4 but the\n * base media decode time is always expressed in the timescale from\n * the media header box for the track:\n * ```\n * moov > trak > mdia > mdhd.timescale\n * moov > trak > mdia > hdlr\n * ```\n * @param init {Uint8Array} the bytes of the init segment\n * @return {object} a hash of track type to timescale values or null if\n * the init segment is malformed.\n */\n static parseInitSegment (initSegment) {\n let result = [];\n let traks = MP4Demuxer.findBox(initSegment, ['moov', 'trak']);\n\n traks.forEach(trak => {\n const tkhd = MP4Demuxer.findBox(trak, ['tkhd'])[0];\n if (tkhd) {\n let version = tkhd.data[tkhd.start];\n let index = version === 0 ? 12 : 20;\n let trackId = MP4Demuxer.readUint32(tkhd, index);\n\n const mdhd = MP4Demuxer.findBox(trak, ['mdia', 'mdhd'])[0];\n if (mdhd) {\n version = mdhd.data[mdhd.start];\n index = version === 0 ? 12 : 20;\n const timescale = MP4Demuxer.readUint32(mdhd, index);\n\n const hdlr = MP4Demuxer.findBox(trak, ['mdia', 'hdlr'])[0];\n if (hdlr) {\n const hdlrType = MP4Demuxer.bin2str(hdlr.data.subarray(hdlr.start + 8, hdlr.start + 12));\n let type = { 'soun': 'audio', 'vide': 'video' }[hdlrType];\n if (type) {\n // extract codec info. TODO : parse codec details to be able to build MIME type\n let codecBox = MP4Demuxer.findBox(trak, ['mdia', 'minf', 'stbl', 'stsd']);\n if (codecBox.length) {\n codecBox = codecBox[0];\n let codecType = MP4Demuxer.bin2str(codecBox.data.subarray(codecBox.start + 12, codecBox.start + 16));\n logger.log(`MP4Demuxer:${type}:${codecType} found`);\n }\n result[trackId] = { timescale: timescale, type: type };\n result[type] = { timescale: timescale, id: trackId };\n }\n }\n }\n }\n });\n return result;\n }\n\n /**\n * Determine the base media decode start time, in seconds, for an MP4\n * fragment. If multiple fragments are specified, the earliest time is\n * returned.\n *\n * The base media decode time can be parsed from track fragment\n * metadata:\n * ```\n * moof > traf > tfdt.baseMediaDecodeTime\n * ```\n * It requires the timescale value from the mdhd to interpret.\n *\n * @param timescale {object} a hash of track ids to timescale values.\n * @return {number} the earliest base media decode start time for the\n * fragment, in seconds\n */\n static getStartDTS (initData, fragment) {\n let trafs, baseTimes, result;\n\n // we need info from two childrend of each track fragment box\n trafs = MP4Demuxer.findBox(fragment, ['moof', 'traf']);\n\n // determine the start times for each track\n baseTimes = [].concat.apply([], trafs.map(function (traf) {\n return MP4Demuxer.findBox(traf, ['tfhd']).map(function (tfhd) {\n let id, scale, baseTime;\n\n // get the track id from the tfhd\n id = MP4Demuxer.readUint32(tfhd, 4);\n // assume a 90kHz clock if no timescale was specified\n scale = initData[id].timescale || 90e3;\n\n // get the base media decode time from the tfdt\n baseTime = MP4Demuxer.findBox(traf, ['tfdt']).map(function (tfdt) {\n let version, result;\n\n version = tfdt.data[tfdt.start];\n result = MP4Demuxer.readUint32(tfdt, 4);\n if (version === 1) {\n result *= Math.pow(2, 32);\n\n result += MP4Demuxer.readUint32(tfdt, 8);\n }\n return result;\n })[0];\n // convert base time to seconds\n return baseTime / scale;\n });\n }));\n\n // return the minimum\n result = Math.min.apply(null, baseTimes);\n return isFinite(result) ? result : 0;\n }\n\n static offsetStartDTS (initData, fragment, timeOffset) {\n MP4Demuxer.findBox(fragment, ['moof', 'traf']).map(function (traf) {\n return MP4Demuxer.findBox(traf, ['tfhd']).map(function (tfhd) {\n // get the track id from the tfhd\n let id = MP4Demuxer.readUint32(tfhd, 4);\n // assume a 90kHz clock if no timescale was specified\n let timescale = initData[id].timescale || 90e3;\n\n // get the base media decode time from the tfdt\n MP4Demuxer.findBox(traf, ['tfdt']).map(function (tfdt) {\n let version = tfdt.data[tfdt.start];\n let baseMediaDecodeTime = MP4Demuxer.readUint32(tfdt, 4);\n if (version === 0) {\n MP4Demuxer.writeUint32(tfdt, 4, baseMediaDecodeTime - timeOffset * timescale);\n } else {\n baseMediaDecodeTime *= Math.pow(2, 32);\n baseMediaDecodeTime += MP4Demuxer.readUint32(tfdt, 8);\n baseMediaDecodeTime -= timeOffset * timescale;\n baseMediaDecodeTime = Math.max(baseMediaDecodeTime, 0);\n const upper = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1));\n const lower = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1));\n MP4Demuxer.writeUint32(tfdt, 4, upper);\n MP4Demuxer.writeUint32(tfdt, 8, lower);\n }\n });\n });\n });\n }\n\n // feed incoming data to the front of the parsing pipeline\n append (data, timeOffset, contiguous, accurateTimeOffset) {\n let initData = this.initData;\n if (!initData) {\n this.resetInitSegment(data, this.audioCodec, this.videoCodec, false);\n initData = this.initData;\n }\n let startDTS, initPTS = this.initPTS;\n if (initPTS === undefined) {\n let startDTS = MP4Demuxer.getStartDTS(initData, data);\n this.initPTS = initPTS = startDTS - timeOffset;\n this.observer.trigger(Event.INIT_PTS_FOUND, { initPTS: initPTS });\n }\n MP4Demuxer.offsetStartDTS(initData, data, initPTS);\n startDTS = MP4Demuxer.getStartDTS(initData, data);\n this.remuxer.remux(initData.audio, initData.video, null, null, startDTS, contiguous, accurateTimeOffset, data);\n }\n\n destroy () {}\n}\n\nexport default MP4Demuxer;\n","function webpackBootstrapFunc (modules) {\n/******/ // The module cache\n/******/ var installedModules = {};\n\n/******/ // The require function\n/******/ function __webpack_require__(moduleId) {\n\n/******/ // Check if module is in cache\n/******/ if(installedModules[moduleId])\n/******/ return installedModules[moduleId].exports;\n\n/******/ // Create a new module (and put it into the cache)\n/******/ var module = installedModules[moduleId] = {\n/******/ i: moduleId,\n/******/ l: false,\n/******/ exports: {}\n/******/ };\n\n/******/ // Execute the module function\n/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ // Flag the module as loaded\n/******/ module.l = true;\n\n/******/ // Return the exports of the module\n/******/ return module.exports;\n/******/ }\n\n/******/ // expose the modules object (__webpack_modules__)\n/******/ __webpack_require__.m = modules;\n\n/******/ // expose the module cache\n/******/ __webpack_require__.c = installedModules;\n\n/******/ // identity function for calling harmony imports with the correct context\n/******/ __webpack_require__.i = function(value) { return value; };\n\n/******/ // define getter function for harmony exports\n/******/ __webpack_require__.d = function(exports, name, getter) {\n/******/ if(!__webpack_require__.o(exports, name)) {\n/******/ Object.defineProperty(exports, name, {\n/******/ configurable: false,\n/******/ enumerable: true,\n/******/ get: getter\n/******/ });\n/******/ }\n/******/ };\n\n/******/ // define __esModule on exports\n/******/ __webpack_require__.r = function(exports) {\n/******/ Object.defineProperty(exports, '__esModule', { value: true });\n/******/ };\n\n/******/ // getDefaultExport function for compatibility with non-harmony modules\n/******/ __webpack_require__.n = function(module) {\n/******/ var getter = module && module.__esModule ?\n/******/ function getDefault() { return module['default']; } :\n/******/ function getModuleExports() { return module; };\n/******/ __webpack_require__.d(getter, 'a', getter);\n/******/ return getter;\n/******/ };\n\n/******/ // Object.prototype.hasOwnProperty.call\n/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n/******/ // __webpack_public_path__\n/******/ __webpack_require__.p = \"/\";\n\n/******/ // on error function for async loading\n/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n var f = __webpack_require__(__webpack_require__.s = ENTRY_MODULE)\n return f.default || f // try to call default if defined to also support babel esmodule exports\n}\n\nvar moduleNameReqExp = '[\\\\.|\\\\-|\\\\+|\\\\w|\\/|@]+'\nvar dependencyRegExp = '\\\\(\\\\s*(\\/\\\\*.*?\\\\*\\/)?\\\\s*.*?(' + moduleNameReqExp + ').*?\\\\)' // additional chars when output.pathinfo is true\n\n// http://stackoverflow.com/a/2593661/130442\nfunction quoteRegExp (str) {\n return (str + '').replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&')\n}\n\nfunction isNumeric(n) {\n return !isNaN(1 * n); // 1 * n converts integers, integers as string (\"123\"), 1e3 and \"1e3\" to integers and strings to NaN\n}\n\nfunction getModuleDependencies (sources, module, queueName) {\n var retval = {}\n retval[queueName] = []\n\n var fnString = module.toString()\n var wrapperSignature = fnString.match(/^function\\s?\\w*\\(\\w+,\\s*\\w+,\\s*(\\w+)\\)/)\n if (!wrapperSignature) return retval\n var webpackRequireName = wrapperSignature[1]\n\n // main bundle deps\n var re = new RegExp('(\\\\\\\\n|\\\\W)' + quoteRegExp(webpackRequireName) + dependencyRegExp, 'g')\n var match\n while ((match = re.exec(fnString))) {\n if (match[3] === 'dll-reference') continue\n retval[queueName].push(match[3])\n }\n\n // dll deps\n re = new RegExp('\\\\(' + quoteRegExp(webpackRequireName) + '\\\\(\"(dll-reference\\\\s(' + moduleNameReqExp + '))\"\\\\)\\\\)' + dependencyRegExp, 'g')\n while ((match = re.exec(fnString))) {\n if (!sources[match[2]]) {\n retval[queueName].push(match[1])\n sources[match[2]] = __webpack_require__(match[1]).m\n }\n retval[match[2]] = retval[match[2]] || []\n retval[match[2]].push(match[4])\n }\n\n // convert 1e3 back to 1000 - this can be important after uglify-js converted 1000 to 1e3\n var keys = Object.keys(retval);\n for (var i = 0; i < keys.length; i++) {\n for (var j = 0; j < retval[keys[i]].length; j++) {\n if (isNumeric(retval[keys[i]][j])) {\n retval[keys[i]][j] = 1 * retval[keys[i]][j];\n }\n }\n }\n\n return retval\n}\n\nfunction hasValuesInQueues (queues) {\n var keys = Object.keys(queues)\n return keys.reduce(function (hasValues, key) {\n return hasValues || queues[key].length > 0\n }, false)\n}\n\nfunction getRequiredModules (sources, moduleId) {\n var modulesQueue = {\n main: [moduleId]\n }\n var requiredModules = {\n main: []\n }\n var seenModules = {\n main: {}\n }\n\n while (hasValuesInQueues(modulesQueue)) {\n var queues = Object.keys(modulesQueue)\n for (var i = 0; i < queues.length; i++) {\n var queueName = queues[i]\n var queue = modulesQueue[queueName]\n var moduleToCheck = queue.pop()\n seenModules[queueName] = seenModules[queueName] || {}\n if (seenModules[queueName][moduleToCheck] || !sources[queueName][moduleToCheck]) continue\n seenModules[queueName][moduleToCheck] = true\n requiredModules[queueName] = requiredModules[queueName] || []\n requiredModules[queueName].push(moduleToCheck)\n var newModules = getModuleDependencies(sources, sources[queueName][moduleToCheck], queueName)\n var newModulesKeys = Object.keys(newModules)\n for (var j = 0; j < newModulesKeys.length; j++) {\n modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]] || []\n modulesQueue[newModulesKeys[j]] = modulesQueue[newModulesKeys[j]].concat(newModules[newModulesKeys[j]])\n }\n }\n }\n\n return requiredModules\n}\n\nmodule.exports = function (moduleId, options) {\n options = options || {}\n var sources = {\n main: __webpack_modules__\n }\n\n var requiredModules = options.all ? { main: Object.keys(sources.main) } : getRequiredModules(sources, moduleId)\n\n var src = ''\n\n Object.keys(requiredModules).filter(function (m) { return m !== 'main' }).forEach(function (module) {\n var entryModule = 0\n while (requiredModules[module][entryModule]) {\n entryModule++\n }\n requiredModules[module].push(entryModule)\n sources[module][entryModule] = '(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })'\n src = src + 'var ' + module + ' = (' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(entryModule)) + ')({' + requiredModules[module].map(function (id) { return '' + JSON.stringify(id) + ': ' + sources[module][id].toString() }).join(',') + '});\\n'\n })\n\n src = src + 'new ((' + webpackBootstrapFunc.toString().replace('ENTRY_MODULE', JSON.stringify(moduleId)) + ')({' + requiredModules.main.map(function (id) { return '' + JSON.stringify(id) + ': ' + sources.main[id].toString() }).join(',') + '}))(self);'\n\n var blob = new window.Blob([src], { type: 'text/javascript' })\n if (options.bare) { return blob }\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL\n\n var workerUrl = URL.createObjectURL(blob)\n var worker = new window.Worker(workerUrl)\n worker.objectURL = workerUrl\n\n return worker\n}\n","/* demuxer web worker.\n * - listen to worker message, and trigger DemuxerInline upon reception of Fragments.\n * - provides MP4 Boxes back to main thread using [transferable objects](https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast) in order to minimize message passing overhead.\n */\n\nimport DemuxerInline from '../demux/demuxer-inline';\nimport Event from '../events';\nimport { enableLogs } from '../utils/logger';\n\nimport { EventEmitter } from 'eventemitter3';\n\nlet DemuxerWorker = function (self) {\n // observer setup\n let observer = new EventEmitter();\n observer.trigger = function trigger (event, ...data) {\n observer.emit(event, event, ...data);\n };\n\n observer.off = function off (event, ...data) {\n observer.removeListener(event, ...data);\n };\n\n let forwardMessage = function (ev, data) {\n self.postMessage({ event: ev, data: data });\n };\n\n self.addEventListener('message', function (ev) {\n let data = ev.data;\n // console.log('demuxer cmd:' + data.cmd);\n switch (data.cmd) {\n case 'init':\n const config = JSON.parse(data.config);\n self.demuxer = new DemuxerInline(observer, data.typeSupported, config, data.vendor);\n\n enableLogs(config.debug);\n\n // signal end of worker init\n forwardMessage('init', null);\n break;\n case 'demux':\n self.demuxer.push(data.data, data.decryptdata, data.initSegment, data.audioCodec, data.videoCodec, data.timeOffset, data.discontinuity, data.trackSwitch, data.contiguous, data.duration, data.accurateTimeOffset, data.defaultInitPTS);\n break;\n default:\n break;\n }\n });\n\n // forward events to main thread\n observer.on(Event.FRAG_DECRYPTED, forwardMessage);\n observer.on(Event.FRAG_PARSING_INIT_SEGMENT, forwardMessage);\n observer.on(Event.FRAG_PARSED, forwardMessage);\n observer.on(Event.ERROR, forwardMessage);\n observer.on(Event.FRAG_PARSING_METADATA, forwardMessage);\n observer.on(Event.FRAG_PARSING_USERDATA, forwardMessage);\n observer.on(Event.INIT_PTS_FOUND, forwardMessage);\n\n // special case for FRAG_PARSING_DATA: pass data1/data2 as transferable object (no copy)\n observer.on(Event.FRAG_PARSING_DATA, function (ev, data) {\n let transferable = [];\n let message = { event: ev, data: data };\n if (data.data1) {\n message.data1 = data.data1.buffer;\n transferable.push(data.data1.buffer);\n delete data.data1;\n }\n if (data.data2) {\n message.data2 = data.data2.buffer;\n transferable.push(data.data2.buffer);\n delete data.data2;\n }\n self.postMessage(message, transferable);\n });\n};\n\nexport default DemuxerWorker;\n","import Level from '../loader/level';\n\nexport interface LoaderContext {\n // target URL\n url: string\n // loader response type (arraybuffer or default response type for playlist)\n responseType: string\n // start byte range offset\n rangeStart?: number\n // end byte range offset\n rangeEnd?: number\n // true if onProgress should report partial chunk of loaded content\n progressData?: boolean\n}\n\nexport interface LoaderConfiguration {\n // Max number of load retries\n maxRetry: number\n // Timeout after which `onTimeOut` callback will be triggered\n // (if loading is still not finished after that delay)\n timeout: number\n // Delay between an I/O error and following connection retry (ms).\n // This to avoid spamming the server\n retryDelay: number\n // max connection retry delay (ms)\n maxRetryDelay: number\n}\n\nexport interface LoaderResponse {\n url: string,\n // TODO(jstackhouse): SharedArrayBuffer, es2017 extension to TS\n data: string | ArrayBuffer\n}\n\nexport interface LoaderStats {\n // performance.now() just after load() has been called\n trequest: number\n // performance.now() of first received byte\n tfirst: number\n // performance.now() on load complete\n tload: number\n // performance.now() on parse completion\n tparsed: number\n // number of loaded bytes\n loaded: number\n // total number of bytes\n total: number\n}\n\ntype LoaderOnSuccess < T extends LoaderContext > = (\n response: LoaderResponse,\n stats: LoaderStats,\n context: T,\n networkDetails: any\n) => void;\n\ntype LoaderOnProgress < T extends LoaderContext > = (\n stats: LoaderStats,\n context: T,\n data: string | ArrayBuffer,\n networkDetails: any,\n) => void;\n\ntype LoaderOnError < T extends LoaderContext > = (\n error: {\n // error status code\n code: number,\n // error description\n text: string,\n },\n context: T,\n networkDetails: any,\n) => void;\n\ntype LoaderOnTimeout < T extends LoaderContext > = (\n stats: LoaderStats,\n context: T,\n) => void;\n\nexport interface LoaderCallbacks{\n onSuccess: LoaderOnSuccess,\n onError: LoaderOnError,\n onTimeout: LoaderOnTimeout,\n onProgress?: LoaderOnProgress,\n}\n\nexport interface Loader {\n destroy(): void\n abort(): void\n load(\n context: LoaderContext,\n config: LoaderConfiguration,\n callbacks: LoaderCallbacks,\n ): void\n\n context: T\n}\n\n/**\n * `type` property values for this loaders' context object\n * @enum\n *\n */\nexport enum PlaylistContextType {\n MANIFEST = 'manifest',\n LEVEL = 'level',\n AUDIO_TRACK = 'audioTrack',\n SUBTITLE_TRACK= 'subtitleTrack'\n}\n\n/**\n * @enum {string}\n */\nexport enum PlaylistLevelType {\n MAIN = 'main',\n AUDIO = 'audio',\n SUBTITLE = 'subtitle'\n}\n\nexport interface PlaylistLoaderContext extends LoaderContext {\n loader?: Loader\n\n type: PlaylistContextType\n // the level index to load\n level: number | null\n // TODO: what is id?\n id: number | null\n // defines if the loader is handling a sidx request for the playlist\n isSidxRequest?: boolean\n // internal reprsentation of a parsed m3u8 level playlist\n levelDetails?: Level\n}\n","/*\n*\n* All objects in the event handling chain should inherit from this class\n*\n*/\n\nimport { logger } from './utils/logger';\nimport { ErrorTypes, ErrorDetails } from './errors';\nimport Event from './events';\nimport Hls from './hls';\n\nconst FORBIDDEN_EVENT_NAMES = {\n 'hlsEventGeneric': true,\n 'hlsHandlerDestroying': true,\n 'hlsHandlerDestroyed': true\n};\n\nclass EventHandler {\n hls: Hls;\n handledEvents: any[];\n useGenericHandler: boolean;\n\n constructor (hls: Hls, ...events: any[]) {\n this.hls = hls;\n this.onEvent = this.onEvent.bind(this);\n this.handledEvents = events;\n this.useGenericHandler = true;\n\n this.registerListeners();\n }\n\n destroy () {\n this.onHandlerDestroying();\n this.unregisterListeners();\n this.onHandlerDestroyed();\n }\n\n protected onHandlerDestroying () {}\n protected onHandlerDestroyed () {}\n\n isEventHandler () {\n return typeof this.handledEvents === 'object' && this.handledEvents.length && typeof this.onEvent === 'function';\n }\n\n registerListeners () {\n if (this.isEventHandler()) {\n this.handledEvents.forEach(function (event) {\n if (FORBIDDEN_EVENT_NAMES[event]) {\n throw new Error('Forbidden event-name: ' + event);\n }\n\n this.hls.on(event, this.onEvent);\n }, this);\n }\n }\n\n unregisterListeners () {\n if (this.isEventHandler()) {\n this.handledEvents.forEach(function (event) {\n this.hls.off(event, this.onEvent);\n }, this);\n }\n }\n\n /**\n * arguments: event (string), data (any)\n */\n onEvent (event: string, data: any) {\n this.onEventGeneric(event, data);\n }\n\n onEventGeneric (event: string, data: any) {\n let eventToFunction = function (event: string, data: any) {\n let funcName = 'on' + event.replace('hls', '');\n if (typeof this[funcName] !== 'function') {\n throw new Error(`Event ${event} has no generic handler in this ${this.constructor.name} class (tried ${funcName})`);\n }\n\n return this[funcName].bind(this, data);\n };\n try {\n eventToFunction.call(this, event, data).call();\n } catch (err) {\n logger.error(`An internal error happened while handling event ${event}. Error message: \"${err.message}\". Here is a stacktrace:`, err);\n this.hls.trigger(Event.ERROR, { type: ErrorTypes.OTHER_ERROR, details: ErrorDetails.INTERNAL_EXCEPTION, fatal: false, event: event, err: err });\n }\n }\n}\n\nexport default EventHandler;\n","\nimport { buildAbsoluteURL } from 'url-toolkit';\nimport { logger } from '../utils/logger';\nimport LevelKey from './level-key';\nimport { PlaylistLevelType } from '../types/loader';\n\nexport enum ElementaryStreamTypes {\n AUDIO = 'audio',\n VIDEO = 'video',\n}\n\nexport default class Fragment {\n private _url: string | null = null;\n private _byteRange: number[] | null = null;\n private _decryptdata: LevelKey | null = null;\n\n // Holds the types of data this fragment supports\n private _elementaryStreams: Record = {\n [ElementaryStreamTypes.AUDIO]: false,\n [ElementaryStreamTypes.VIDEO]: false\n };\n\n // deltaPTS tracks the change in presentation timestamp between fragments\n public deltaPTS: number = 0;\n\n public rawProgramDateTime: string | null = null;\n public programDateTime: number | null = null;\n public title: string | null = null;\n public tagList: Array = [];\n\n // TODO: Move at least baseurl to constructor.\n // Currently we do a two-pass construction as use the Fragment class almost like a object for holding parsing state.\n // It may make more sense to just use a POJO to keep state during the parsing phase.\n // Have Fragment be the representation once we have a known state?\n // Something to think on.\n\n // Discontinuity Counter\n public cc!: number;\n\n public type!: PlaylistLevelType;\n // relurl is the portion of the URL that comes from inside the playlist.\n public relurl!: string;\n // baseurl is the URL to the playlist\n public baseurl!: string;\n // EXTINF has to be present for a m3u8 to be considered valid\n public duration!: number;\n // When this segment starts in the timeline\n public start!: number;\n // sn notates the sequence number for a segment, and if set to a string can be 'initSegment'\n public sn: number | 'initSegment' = 0;\n\n public urlId: number = 0;\n // level matches this fragment to a index playlist\n public level: number = 0;\n // levelkey is the EXT-X-KEY that applies to this segment for decryption\n // core difference from the private field _decryptdata is the lack of the initialized IV\n // _decryptdata will set the IV for this segment based on the segment number in the fragment\n public levelkey?: LevelKey;\n\n // TODO(typescript-xhrloader)\n public loader: any;\n\n // setByteRange converts a EXT-X-BYTERANGE attribute into a two element array\n setByteRange (value: string, previousFrag?: Fragment) {\n const params = value.split('@', 2);\n const byteRange: number[] = [];\n if (params.length === 1) {\n byteRange[0] = previousFrag ? previousFrag.byteRangeEndOffset : 0;\n } else {\n byteRange[0] = parseInt(params[1]);\n }\n byteRange[1] = parseInt(params[0]) + byteRange[0];\n this._byteRange = byteRange;\n }\n\n get url () {\n if (!this._url && this.relurl) {\n this._url = buildAbsoluteURL(this.baseurl, this.relurl, { alwaysNormalize: true });\n }\n\n return this._url;\n }\n\n set url (value) {\n this._url = value;\n }\n\n get byteRange (): number[] {\n if (!this._byteRange) {\n return [];\n }\n\n return this._byteRange;\n }\n\n /**\n * @type {number}\n */\n get byteRangeStartOffset () {\n return this.byteRange[0];\n }\n\n get byteRangeEndOffset () {\n return this.byteRange[1];\n }\n\n get decryptdata (): LevelKey | null {\n if (!this.levelkey && !this._decryptdata) {\n return null;\n }\n\n if (!this._decryptdata && this.levelkey) {\n let sn = this.sn;\n if (typeof sn !== 'number') {\n // We are fetching decryption data for a initialization segment\n // If the segment was encrypted with AES-128\n // It must have an IV defined. We cannot substitute the Segment Number in.\n if (this.levelkey && this.levelkey.method === 'AES-128' && !this.levelkey.iv) {\n logger.warn(`missing IV for initialization segment with method=\"${this.levelkey.method}\" - compliance issue`);\n }\n\n /*\n Be converted to a Number.\n 'initSegment' will become NaN.\n NaN, which when converted through ToInt32() -> +0.\n ---\n Explicitly set sn to resulting value from implicit conversions 'initSegment' values for IV generation.\n */\n sn = 0;\n }\n this._decryptdata = this.setDecryptDataFromLevelKey(this.levelkey, sn);\n }\n\n return this._decryptdata;\n }\n\n get endProgramDateTime () {\n if (this.programDateTime === null) {\n return null;\n }\n\n if (!Number.isFinite(this.programDateTime)) {\n return null;\n }\n\n let duration = !Number.isFinite(this.duration) ? 0 : this.duration;\n\n return this.programDateTime + (duration * 1000);\n }\n\n get encrypted () {\n return !!((this.decryptdata && this.decryptdata.uri !== null) && (this.decryptdata.key === null));\n }\n\n /**\n * @param {ElementaryStreamTypes} type\n */\n addElementaryStream (type: ElementaryStreamTypes) {\n this._elementaryStreams[type] = true;\n }\n\n /**\n * @param {ElementaryStreamTypes} type\n */\n hasElementaryStream (type: ElementaryStreamTypes) {\n return this._elementaryStreams[type] === true;\n }\n\n /**\n * Utility method for parseLevelPlaylist to create an initialization vector for a given segment\n * @param {number} segmentNumber - segment number to generate IV with\n * @returns {Uint8Array}\n */\n createInitializationVector (segmentNumber: number): Uint8Array {\n let uint8View = new Uint8Array(16);\n\n for (let i = 12; i < 16; i++) {\n uint8View[i] = (segmentNumber >> 8 * (15 - i)) & 0xff;\n }\n\n return uint8View;\n }\n\n /**\n * Utility method for parseLevelPlaylist to get a fragment's decryption data from the currently parsed encryption key data\n * @param levelkey - a playlist's encryption info\n * @param segmentNumber - the fragment's segment number\n * @returns {LevelKey} - an object to be applied as a fragment's decryptdata\n */\n setDecryptDataFromLevelKey (levelkey: LevelKey, segmentNumber: number): LevelKey {\n let decryptdata = levelkey;\n\n if (levelkey?.method && levelkey.uri && !levelkey.iv) {\n decryptdata = new LevelKey(levelkey.baseuri, levelkey.reluri);\n decryptdata.method = levelkey.method;\n decryptdata.iv = this.createInitializationVector(segmentNumber);\n }\n\n return decryptdata;\n }\n}\n","import { buildAbsoluteURL } from 'url-toolkit';\n\nexport default class LevelKey {\n private _uri: string | null = null;\n\n public baseuri: string;\n public reluri: string;\n public method: string | null = null;\n public key: Uint8Array | null = null;\n public iv: Uint8Array | null = null;\n\n constructor (baseURI: string, relativeURI: string) {\n this.baseuri = baseURI;\n this.reluri = relativeURI;\n }\n\n get uri () {\n if (!this._uri && this.reluri) {\n this._uri = buildAbsoluteURL(this.baseuri, this.reluri, { alwaysNormalize: true });\n }\n\n return this._uri;\n }\n}\n","export default class Level {\n constructor (baseUrl) {\n // Please keep properties in alphabetical order\n this.endCC = 0;\n this.endSN = 0;\n this.fragments = [];\n this.initSegment = null;\n this.live = true;\n this.needSidxRanges = false;\n this.startCC = 0;\n this.startSN = 0;\n this.startTimeOffset = null;\n this.targetduration = 0;\n this.totalduration = 0;\n this.type = null;\n this.url = baseUrl;\n this.version = null;\n }\n\n get hasProgramDateTime () {\n return !!(this.fragments[0] && Number.isFinite(this.fragments[0].programDateTime));\n }\n}\n","const DECIMAL_RESOLUTION_REGEX = /^(\\d+)x(\\d+)$/; // eslint-disable-line no-useless-escape\nconst ATTR_LIST_REGEX = /\\s*(.+?)\\s*=((?:\\\".*?\\\")|.*?)(?:,|$)/g; // eslint-disable-line no-useless-escape\n\n// adapted from https://github.com/kanongil/node-m3u8parse/blob/master/attrlist.js\nclass AttrList {\n constructor (attrs) {\n if (typeof attrs === 'string') {\n attrs = AttrList.parseAttrList(attrs);\n }\n\n for (let attr in attrs) {\n if (attrs.hasOwnProperty(attr)) {\n this[attr] = attrs[attr];\n }\n }\n }\n\n decimalInteger (attrName) {\n const intValue = parseInt(this[attrName], 10);\n if (intValue > Number.MAX_SAFE_INTEGER) {\n return Infinity;\n }\n\n return intValue;\n }\n\n hexadecimalInteger (attrName) {\n if (this[attrName]) {\n let stringValue = (this[attrName] || '0x').slice(2);\n stringValue = ((stringValue.length & 1) ? '0' : '') + stringValue;\n\n const value = new Uint8Array(stringValue.length / 2);\n for (let i = 0; i < stringValue.length / 2; i++) {\n value[i] = parseInt(stringValue.slice(i * 2, i * 2 + 2), 16);\n }\n\n return value;\n } else {\n return null;\n }\n }\n\n hexadecimalIntegerAsNumber (attrName) {\n const intValue = parseInt(this[attrName], 16);\n if (intValue > Number.MAX_SAFE_INTEGER) {\n return Infinity;\n }\n\n return intValue;\n }\n\n decimalFloatingPoint (attrName) {\n return parseFloat(this[attrName]);\n }\n\n enumeratedString (attrName) {\n return this[attrName];\n }\n\n decimalResolution (attrName) {\n const res = DECIMAL_RESOLUTION_REGEX.exec(this[attrName]);\n if (res === null) {\n return undefined;\n }\n\n return {\n width: parseInt(res[1], 10),\n height: parseInt(res[2], 10)\n };\n }\n\n static parseAttrList (input) {\n let match, attrs = {};\n ATTR_LIST_REGEX.lastIndex = 0;\n while ((match = ATTR_LIST_REGEX.exec(input)) !== null) {\n let value = match[2], quote = '\"';\n\n if (value.indexOf(quote) === 0 &&\n value.lastIndexOf(quote) === (value.length - 1)) {\n value = value.slice(1, -1);\n }\n\n attrs[match[1]] = value;\n }\n return attrs;\n }\n}\n\nexport default AttrList;\n","// from http://mp4ra.org/codecs.html\nconst sampleEntryCodesISO = {\n audio: {\n 'a3ds': true,\n 'ac-3': true,\n 'ac-4': true,\n 'alac': true,\n 'alaw': true,\n 'dra1': true,\n 'dts+': true,\n 'dts-': true,\n 'dtsc': true,\n 'dtse': true,\n 'dtsh': true,\n 'ec-3': true,\n 'enca': true,\n 'g719': true,\n 'g726': true,\n 'm4ae': true,\n 'mha1': true,\n 'mha2': true,\n 'mhm1': true,\n 'mhm2': true,\n 'mlpa': true,\n 'mp4a': true,\n 'raw ': true,\n 'Opus': true,\n 'samr': true,\n 'sawb': true,\n 'sawp': true,\n 'sevc': true,\n 'sqcp': true,\n 'ssmv': true,\n 'twos': true,\n 'ulaw': true\n },\n video: {\n 'avc1': true,\n 'avc2': true,\n 'avc3': true,\n 'avc4': true,\n 'avcp': true,\n 'drac': true,\n 'dvav': true,\n 'dvhe': true,\n 'encv': true,\n 'hev1': true,\n 'hvc1': true,\n 'mjp2': true,\n 'mp4v': true,\n 'mvc1': true,\n 'mvc2': true,\n 'mvc3': true,\n 'mvc4': true,\n 'resv': true,\n 'rv60': true,\n 's263': true,\n 'svc1': true,\n 'svc2': true,\n 'vc-1': true,\n 'vp08': true,\n 'vp09': true\n }\n};\n\nexport type CodecType = 'audio' | 'video';\n\nfunction isCodecType (codec: string, type: CodecType): boolean {\n const typeCodes = sampleEntryCodesISO[type];\n return !!typeCodes && typeCodes[codec.slice(0, 4)] === true;\n}\n\nfunction isCodecSupportedInMp4 (codec: string, type: CodecType): boolean {\n return MediaSource.isTypeSupported(`${type || 'video'}/mp4;codecs=\"${codec}\"`);\n}\n\nexport { isCodecType, isCodecSupportedInMp4 };\n","import * as URLToolkit from 'url-toolkit';\n\nimport Fragment from './fragment';\nimport Level from './level';\nimport LevelKey from './level-key';\n\nimport AttrList from '../utils/attr-list';\nimport { logger } from '../utils/logger';\nimport { isCodecType, CodecType } from '../utils/codecs';\nimport { MediaPlaylist, AudioGroup, MediaPlaylistType } from '../types/media-playlist';\nimport { PlaylistLevelType } from '../types/loader';\n\n/**\n * M3U8 parser\n * @module\n */\n\n// https://regex101.com is your friend\nconst MASTER_PLAYLIST_REGEX = /(?:#EXT-X-STREAM-INF:([^\\n\\r]*)[\\r\\n]+([^\\r\\n]+)|#EXT-X-SESSION-DATA:([^\\n\\r]*)[\\r\\n]+)/g;\nconst MASTER_PLAYLIST_MEDIA_REGEX = /#EXT-X-MEDIA:(.*)/g;\n\nconst LEVEL_PLAYLIST_REGEX_FAST = new RegExp([\n /#EXTINF:\\s*(\\d*(?:\\.\\d+)?)(?:,(.*)\\s+)?/.source, // duration (#EXTINF:,), group 1 => duration, group 2 => title\n /|(?!#)([\\S+ ?]+)/.source, // segment URI, group 3 => the URI (note newline is not eaten)\n /|#EXT-X-BYTERANGE:*(.+)/.source, // next segment's byterange, group 4 => range spec (x@y)\n /|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source, // next segment's program date/time group 5 => the datetime spec\n /|#.*/.source // All other non-segment oriented tags will match with all groups empty\n].join(''), 'g');\n\nconst LEVEL_PLAYLIST_REGEX_SLOW = /(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\\d+))|(?:#EXT-X-(TARGETDURATION): *(\\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)([^:]*):(.*))|(?:(#)(.*))(?:.*)\\r?\\n?/;\n\nconst MP4_REGEX_SUFFIX = /\\.(mp4|m4s|m4v|m4a)$/i;\n\nexport default class M3U8Parser {\n static findGroup (groups: Array, mediaGroupId: string): AudioGroup | undefined {\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i];\n if (group.id === mediaGroupId) {\n return group;\n }\n }\n }\n\n static convertAVC1ToAVCOTI (codec) {\n let avcdata = codec.split('.');\n let result;\n if (avcdata.length > 2) {\n result = avcdata.shift() + '.';\n result += parseInt(avcdata.shift()).toString(16);\n result += ('000' + parseInt(avcdata.shift()).toString(16)).substr(-4);\n } else {\n result = codec;\n }\n return result;\n }\n\n static resolve (url, baseUrl) {\n return URLToolkit.buildAbsoluteURL(baseUrl, url, { alwaysNormalize: true });\n }\n\n static parseMasterPlaylist (string: string, baseurl: string) {\n // TODO(typescript-level)\n let levels: Array = [];\n let sessionData: Record = {};\n let hasSessionData = false;\n MASTER_PLAYLIST_REGEX.lastIndex = 0;\n\n // TODO(typescript-level)\n function setCodecs (codecs: Array, level: any) {\n ['video', 'audio'].forEach((type: CodecType) => {\n const filtered = codecs.filter((codec) => isCodecType(codec, type));\n if (filtered.length) {\n const preferred = filtered.filter((codec) => {\n return codec.lastIndexOf('avc1', 0) === 0 || codec.lastIndexOf('mp4a', 0) === 0;\n });\n level[`${type}Codec`] = preferred.length > 0 ? preferred[0] : filtered[0];\n\n // remove from list\n codecs = codecs.filter((codec) => filtered.indexOf(codec) === -1);\n }\n });\n\n level.unknownCodecs = codecs;\n }\n\n let result: RegExpExecArray | null;\n while ((result = MASTER_PLAYLIST_REGEX.exec(string)) != null) {\n if (result[1]) {\n // '#EXT-X-STREAM-INF' is found, parse level tag in group 1\n\n // TODO(typescript-level)\n const level: any = {};\n\n const attrs = level.attrs = new AttrList(result[1]);\n level.url = M3U8Parser.resolve(result[2], baseurl);\n\n const resolution = attrs.decimalResolution('RESOLUTION');\n if (resolution) {\n level.width = resolution.width;\n level.height = resolution.height;\n }\n level.bitrate = attrs.decimalInteger('AVERAGE-BANDWIDTH') || attrs.decimalInteger('BANDWIDTH');\n level.name = attrs.NAME;\n\n setCodecs([].concat((attrs.CODECS || '').split(/[ ,]+/)), level);\n\n if (level.videoCodec && level.videoCodec.indexOf('avc1') !== -1) {\n level.videoCodec = M3U8Parser.convertAVC1ToAVCOTI(level.videoCodec);\n }\n\n levels.push(level);\n } else if (result[3]) {\n // '#EXT-X-SESSION-DATA' is found, parse session data in group 3\n let sessionAttrs = new AttrList(result[3]);\n if (sessionAttrs['DATA-ID']) {\n hasSessionData = true;\n sessionData[sessionAttrs['DATA-ID']] = sessionAttrs;\n }\n }\n }\n return {\n levels,\n sessionData: hasSessionData ? sessionData : null\n };\n }\n\n static parseMasterPlaylistMedia (string: string, baseurl: string, type: MediaPlaylistType, audioGroups: Array = []): Array {\n let result: RegExpExecArray | null;\n let medias: Array = [];\n let id = 0;\n MASTER_PLAYLIST_MEDIA_REGEX.lastIndex = 0;\n while ((result = MASTER_PLAYLIST_MEDIA_REGEX.exec(string)) !== null) {\n const attrs = new AttrList(result[1]);\n if (attrs.TYPE === type) {\n const media: MediaPlaylist = {\n attrs,\n id: id++,\n groupId: attrs['GROUP-ID'],\n instreamId: attrs['INSTREAM-ID'],\n name: attrs.NAME || attrs.LANGUAGE,\n type,\n default: (attrs.DEFAULT === 'YES'),\n autoselect: (attrs.AUTOSELECT === 'YES'),\n forced: (attrs.FORCED === 'YES'),\n lang: attrs.LANGUAGE\n };\n\n if (attrs.URI) {\n media.url = M3U8Parser.resolve(attrs.URI, baseurl);\n }\n\n if (audioGroups.length) {\n // If there are audio groups signalled in the manifest, let's look for a matching codec string for this track\n const groupCodec = M3U8Parser.findGroup(audioGroups, media.groupId as string);\n\n // If we don't find the track signalled, lets use the first audio groups codec we have\n // Acting as a best guess\n media.audioCodec = groupCodec ? groupCodec.codec : audioGroups[0].codec;\n }\n\n medias.push(media);\n }\n }\n return medias;\n }\n\n static parseLevelPlaylist (string: string, baseurl: string, id: number, type: PlaylistLevelType, levelUrlId: number) {\n let currentSN = 0;\n let totalduration = 0;\n let level = new Level(baseurl);\n let discontinuityCounter = 0;\n let prevFrag: Fragment | null = null;\n let frag: Fragment | null = new Fragment();\n let result: RegExpExecArray | RegExpMatchArray | null;\n let i: number;\n let levelkey: LevelKey | undefined;\n\n let firstPdtIndex = null;\n\n LEVEL_PLAYLIST_REGEX_FAST.lastIndex = 0;\n\n while ((result = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) !== null) {\n const duration = result[1];\n if (duration) { // INF\n frag.duration = parseFloat(duration);\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n const title = (' ' + result[2]).slice(1);\n frag.title = title || null;\n frag.tagList.push(title ? [ 'INF', duration, title ] : [ 'INF', duration ]);\n } else if (result[3]) { // url\n if (Number.isFinite(frag.duration)) {\n const sn = currentSN++;\n frag.type = type;\n frag.start = totalduration;\n if (levelkey) {\n frag.levelkey = levelkey;\n }\n frag.sn = sn;\n frag.level = id;\n frag.cc = discontinuityCounter;\n frag.urlId = levelUrlId;\n frag.baseurl = baseurl;\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n frag.relurl = (' ' + result[3]).slice(1);\n assignProgramDateTime(frag, prevFrag);\n\n level.fragments.push(frag);\n prevFrag = frag;\n totalduration += frag.duration;\n\n frag = new Fragment();\n }\n } else if (result[4]) { // X-BYTERANGE\n const data = (' ' + result[4]).slice(1);\n if (prevFrag) {\n frag.setByteRange(data, prevFrag);\n } else {\n frag.setByteRange(data);\n }\n } else if (result[5]) { // PROGRAM-DATE-TIME\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n frag.rawProgramDateTime = (' ' + result[5]).slice(1);\n frag.tagList.push(['PROGRAM-DATE-TIME', frag.rawProgramDateTime]);\n if (firstPdtIndex === null) {\n firstPdtIndex = level.fragments.length;\n }\n } else {\n result = result[0].match(LEVEL_PLAYLIST_REGEX_SLOW);\n if (!result) {\n logger.warn('No matches on slow regex match for level playlist!');\n continue;\n }\n for (i = 1; i < result.length; i++) {\n if (typeof result[i] !== 'undefined') {\n break;\n }\n }\n\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n const value1 = (' ' + result[i + 1]).slice(1);\n const value2 = (' ' + result[i + 2]).slice(1);\n\n switch (result[i]) {\n case '#':\n frag.tagList.push(value2 ? [ value1, value2 ] : [ value1 ]);\n break;\n case 'PLAYLIST-TYPE':\n level.type = value1.toUpperCase();\n break;\n case 'MEDIA-SEQUENCE':\n currentSN = level.startSN = parseInt(value1);\n break;\n case 'TARGETDURATION':\n level.targetduration = parseFloat(value1);\n break;\n case 'VERSION':\n level.version = parseInt(value1);\n break;\n case 'EXTM3U':\n break;\n case 'ENDLIST':\n level.live = false;\n break;\n case 'DIS':\n discontinuityCounter++;\n frag.tagList.push(['DIS']);\n break;\n case 'DISCONTINUITY-SEQ':\n discontinuityCounter = parseInt(value1);\n break;\n case 'KEY': {\n // https://tools.ietf.org/html/rfc8216#section-4.3.2.4\n const decryptparams = value1;\n const keyAttrs = new AttrList(decryptparams);\n const decryptmethod = keyAttrs.enumeratedString('METHOD');\n const decrypturi = keyAttrs.URI;\n const decryptiv = keyAttrs.hexadecimalInteger('IV');\n // From RFC: This attribute is OPTIONAL; its absence indicates an implicit value of \"identity\".\n const decryptkeyformat = keyAttrs.KEYFORMAT || 'identity';\n\n if (decryptkeyformat === 'com.apple.streamingkeydelivery') {\n logger.warn('Keyformat com.apple.streamingkeydelivery is not supported');\n continue;\n }\n\n if (decryptmethod) {\n levelkey = new LevelKey(baseurl, decrypturi);\n if ((decrypturi) && (['AES-128', 'SAMPLE-AES', 'SAMPLE-AES-CENC'].indexOf(decryptmethod) >= 0)) {\n levelkey.method = decryptmethod;\n levelkey.key = null;\n // Initialization Vector (IV)\n levelkey.iv = decryptiv;\n }\n }\n break;\n }\n case 'START': {\n const startAttrs = new AttrList(value1);\n const startTimeOffset = startAttrs.decimalFloatingPoint('TIME-OFFSET');\n // TIME-OFFSET can be 0\n if (Number.isFinite(startTimeOffset)) {\n level.startTimeOffset = startTimeOffset;\n }\n break;\n }\n case 'MAP': {\n const mapAttrs = new AttrList(value1);\n frag.relurl = mapAttrs.URI;\n if (mapAttrs.BYTERANGE) {\n frag.setByteRange(mapAttrs.BYTERANGE);\n }\n frag.baseurl = baseurl;\n frag.level = id;\n frag.type = type;\n frag.sn = 'initSegment';\n level.initSegment = frag;\n frag = new Fragment();\n frag.rawProgramDateTime = level.initSegment.rawProgramDateTime;\n break;\n }\n default:\n logger.warn(`line parsed but not handled: ${result}`);\n break;\n }\n }\n }\n frag = prevFrag;\n // logger.log('found ' + level.fragments.length + ' fragments');\n if (frag && !frag.relurl) {\n level.fragments.pop();\n totalduration -= frag.duration;\n }\n level.totalduration = totalduration;\n level.averagetargetduration = totalduration / level.fragments.length;\n level.endSN = currentSN - 1;\n level.startCC = level.fragments[0] ? level.fragments[0].cc : 0;\n level.endCC = discontinuityCounter;\n\n if (!level.initSegment && level.fragments.length) {\n // this is a bit lurky but HLS really has no other way to tell us\n // if the fragments are TS or MP4, except if we download them :/\n // but this is to be able to handle SIDX.\n if (level.fragments.every((frag) => MP4_REGEX_SUFFIX.test(frag.relurl))) {\n logger.warn('MP4 fragments found but no init segment (probably no MAP, incomplete M3U8), trying to fetch SIDX');\n\n frag = new Fragment();\n frag.relurl = level.fragments[0].relurl;\n frag.baseurl = baseurl;\n frag.level = id;\n frag.type = type;\n frag.sn = 'initSegment';\n\n level.initSegment = frag;\n level.needSidxRanges = true;\n }\n }\n\n /**\n * Backfill any missing PDT values\n \"If the first EXT-X-PROGRAM-DATE-TIME tag in a Playlist appears after\n one or more Media Segment URIs, the client SHOULD extrapolate\n backward from that tag (using EXTINF durations and/or media\n timestamps) to associate dates with those segments.\"\n * We have already extrapolated forward, but all fragments up to the first instance of PDT do not have their PDTs\n * computed.\n */\n if (firstPdtIndex) {\n backfillProgramDateTimes(level.fragments, firstPdtIndex);\n }\n\n return level;\n }\n}\n\nfunction backfillProgramDateTimes (fragments, startIndex) {\n let fragPrev = fragments[startIndex];\n for (let i = startIndex - 1; i >= 0; i--) {\n const frag = fragments[i];\n frag.programDateTime = fragPrev.programDateTime - (frag.duration * 1000);\n fragPrev = frag;\n }\n}\n\nfunction assignProgramDateTime (frag, prevFrag) {\n if (frag.rawProgramDateTime) {\n frag.programDateTime = Date.parse(frag.rawProgramDateTime);\n } else if (prevFrag?.programDateTime) {\n frag.programDateTime = prevFrag.endProgramDateTime;\n }\n\n if (!Number.isFinite(frag.programDateTime)) {\n frag.programDateTime = null;\n frag.rawProgramDateTime = null;\n }\n}\n","/**\n * PlaylistLoader - delegate for media manifest/playlist loading tasks. Takes care of parsing media to internal data-models.\n *\n * Once loaded, dispatches events with parsed data-models of manifest/levels/audio/subtitle tracks.\n *\n * Uses loader(s) set in config to do actual internal loading of resource tasks.\n *\n * @module\n *\n */\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport { ErrorTypes, ErrorDetails } from '../errors';\nimport { logger } from '../utils/logger';\nimport { Loader, PlaylistContextType, PlaylistLoaderContext, PlaylistLevelType, LoaderCallbacks, LoaderResponse, LoaderStats, LoaderConfiguration } from '../types/loader';\nimport MP4Demuxer from '../demux/mp4demuxer';\nimport M3U8Parser from './m3u8-parser';\nimport { AudioGroup } from '../types/media-playlist';\n\nconst { performance } = window;\n\n/**\n * @constructor\n */\nclass PlaylistLoader extends EventHandler {\n private loaders: Partial>> = {};\n\n /**\n * @constructs\n * @param {Hls} hls\n */\n constructor (hls) {\n super(hls,\n Event.MANIFEST_LOADING,\n Event.LEVEL_LOADING,\n Event.AUDIO_TRACK_LOADING,\n Event.SUBTITLE_TRACK_LOADING);\n }\n\n /**\n * @param {PlaylistContextType} type\n * @returns {boolean}\n */\n static canHaveQualityLevels (type: PlaylistContextType): boolean {\n return (type !== PlaylistContextType.AUDIO_TRACK &&\n type !== PlaylistContextType.SUBTITLE_TRACK);\n }\n\n /**\n * Map context.type to LevelType\n * @param {PlaylistLoaderContext} context\n * @returns {LevelType}\n */\n static mapContextToLevelType (context: PlaylistLoaderContext): PlaylistLevelType {\n const { type } = context;\n\n switch (type) {\n case PlaylistContextType.AUDIO_TRACK:\n return PlaylistLevelType.AUDIO;\n case PlaylistContextType.SUBTITLE_TRACK:\n return PlaylistLevelType.SUBTITLE;\n default:\n return PlaylistLevelType.MAIN;\n }\n }\n\n static getResponseUrl (response: LoaderResponse, context: PlaylistLoaderContext): string {\n let url = response.url;\n // responseURL not supported on some browsers (it is used to detect URL redirection)\n // data-uri mode also not supported (but no need to detect redirection)\n if (url === undefined || url.indexOf('data:') === 0) {\n // fallback to initial URL\n url = context.url;\n }\n return url;\n }\n\n /**\n * Returns defaults or configured loader-type overloads (pLoader and loader config params)\n * Default loader is XHRLoader (see utils)\n * @param {PlaylistLoaderContext} context\n * @returns {Loader} or other compatible configured overload\n */\n createInternalLoader (context: PlaylistLoaderContext): Loader {\n const config = this.hls.config;\n const PLoader = config.pLoader;\n const Loader = config.loader;\n // TODO(typescript-config): Verify once config is typed that InternalLoader always returns a Loader\n const InternalLoader = PLoader || Loader;\n\n const loader = new InternalLoader(config);\n\n // TODO - Do we really need to assign the instance or if the dep has been lost\n context.loader = loader;\n this.loaders[context.type] = loader;\n\n return loader;\n }\n\n getInternalLoader (context: PlaylistLoaderContext): Loader | undefined {\n return this.loaders[context.type];\n }\n\n resetInternalLoader (contextType: PlaylistContextType) {\n if (this.loaders[contextType]) {\n delete this.loaders[contextType];\n }\n }\n\n /**\n * Call `destroy` on all internal loader instances mapped (one per context type)\n */\n destroyInternalLoaders () {\n for (let contextType in this.loaders) {\n let loader = this.loaders[contextType];\n if (loader) {\n loader.destroy();\n }\n\n this.resetInternalLoader(contextType as PlaylistContextType);\n }\n }\n\n destroy () {\n this.destroyInternalLoaders();\n\n super.destroy();\n }\n\n onManifestLoading (data: { url: string; }) {\n this.load({\n url: data.url,\n type: PlaylistContextType.MANIFEST,\n level: 0,\n id: null,\n responseType: 'text'\n });\n }\n\n onLevelLoading (data: { url: string; level: number | null; id: number | null; }) {\n this.load({\n url: data.url,\n type: PlaylistContextType.LEVEL,\n level: data.level,\n id: data.id,\n responseType: 'text'\n });\n }\n\n onAudioTrackLoading (data: { url: string; id: number | null; }) {\n this.load({\n url: data.url,\n type: PlaylistContextType.AUDIO_TRACK,\n level: null,\n id: data.id,\n responseType: 'text'\n });\n }\n\n onSubtitleTrackLoading (data: { url: string; id: number | null; }) {\n this.load({\n url: data.url,\n type: PlaylistContextType.SUBTITLE_TRACK,\n level: null,\n id: data.id,\n responseType: 'text'\n });\n }\n\n load (context: PlaylistLoaderContext): boolean {\n const config = this.hls.config;\n\n logger.debug(`Loading playlist of type ${context.type}, level: ${context.level}, id: ${context.id}`);\n\n // Check if a loader for this context already exists\n let loader = this.getInternalLoader(context);\n if (loader) {\n const loaderContext = loader.context;\n if (loaderContext && loaderContext.url === context.url) { // same URL can't overlap\n logger.trace('playlist request ongoing');\n return false;\n } else {\n logger.warn(`aborting previous loader for type: ${context.type}`);\n loader.abort();\n }\n }\n\n let maxRetry: number;\n let timeout: number;\n let retryDelay: number;\n let maxRetryDelay: number;\n\n // apply different configs for retries depending on\n // context (manifest, level, audio/subs playlist)\n switch (context.type) {\n case PlaylistContextType.MANIFEST:\n maxRetry = config.manifestLoadingMaxRetry;\n timeout = config.manifestLoadingTimeOut;\n retryDelay = config.manifestLoadingRetryDelay;\n maxRetryDelay = config.manifestLoadingMaxRetryTimeout;\n break;\n case PlaylistContextType.LEVEL:\n // Disable internal loader retry logic, since we are managing retries in Level Controller\n maxRetry = 0;\n maxRetryDelay = 0;\n retryDelay = 0;\n timeout = config.levelLoadingTimeOut;\n // TODO Introduce retry settings for audio-track and subtitle-track, it should not use level retry config\n break;\n default:\n maxRetry = config.levelLoadingMaxRetry;\n timeout = config.levelLoadingTimeOut;\n retryDelay = config.levelLoadingRetryDelay;\n maxRetryDelay = config.levelLoadingMaxRetryTimeout;\n break;\n }\n\n loader = this.createInternalLoader(context);\n\n const loaderConfig: LoaderConfiguration = {\n timeout,\n maxRetry,\n retryDelay,\n maxRetryDelay\n };\n\n const loaderCallbacks: LoaderCallbacks