{"version":3,"sources":["webpack:///./src/components/mixins/BarcodeKeyValueInfoMixin.vue","webpack:///./src/components/mixins/BarcodeKeyValueInfoMixin.vue?629b","webpack:///./src/components/mixins/MultipleBarcodeScanMixin.vue","webpack:///./src/components/mixins/MultipleBarcodeScanMixin.vue?75f0","webpack:///./node_modules/howler/dist/howler.js","webpack:///./src/components/BarcodeLabelList.vue","webpack:///./src/components/BarcodeLabelList.vue?71c3","webpack:///./src/components/BarcodeLabelList.vue?92d1","webpack:///./src/components/svg/ScanArea.vue","webpack:///./src/components/svg/ScanArea.vue?b0af","webpack:///./src/components/svg/ScanArea.vue?bf8d","webpack:///./src/components/BarcodeLabelList.vue?5ded"],"names":["value","toFixed","product","rawDimensionData","dimension","this","barcode","activationData","localeNumber","width","toLocaleString","height","weight","depth","obj","fields","Object","keys","reduce","acc","cur","match","currentBarcodeTypeInfo","barcodeTypeInfo","activationFields","trackingNumber","label","$t","id","products","$store","state","project","find","e","productName","name","entries","activationDataDimension","key","packageInfo","isTrackingNumberAvailable","getDisplayValue","trackingNumberLabel","isExternalIdAvailable","externalId","externalIdLabel","isDimensionAvailable","customFieldValues","productInfo","console","log","err","error","isAvailable","imageData","parsedCustomFields","customFieldsDefinition","customFields","BarcodeTypesMixin","components","methods","toSnakeCase","scannedBarcodeList","isAllowToLeave","scannedBarcode","video","barcodes","valueCode","multipleScan","isHandleMultipleScan","isLoadingHandleGotScanBarcode","showMultipleScan","delimiterValue","successScanSound","src","onplayerror","soundId","errMessage","once","play","failScanSound","codeReader","undefined","timeBetweenScansMillis","pictureWidth","pictureHeight","result","temp","isShowMultipleScan","isMultipleScan","handleMultipleScan","text","handleGotScanBarcode","symbology","data","plainText","$confirm","item","confirmButtonText","confirmButtonClass","cancelButtonText","closeOnClickModal","showCancelButton","then","processValueCode","finally","document","getElementById","videoSettings","facingMode","aspectRatio","navigator","mediaDevices","getUserMedia","stream","srcObject","streamSetting","getVideoTracks","getSettings","catch","errorHandler","isReadyToScan","isScanditReaderProject","initScanditReader","initZxingReader","message","resultScanned","Error","regexBarcodeId","barcodeId","urlParts","split","pop","currentBarcodeId","val","detectedText","projectCode","$route","params","length","bulkUpdateOperationLimitCount","maxValue","count","validateBarcode","addBarcode","bc","push","onNewScannedBarcode","handleScanError","hasOwnProperty","modelObject","errorVariableTemplate","JSON","stringify","trim","openErrorToast","barcodeType","barcodeName","fTP1","currentTrackPointName","tTP2","nextSelectTrackingPointName","found","to","from","next","forward","delimiter","details","cameraFeatures","bulkCameraScanResultSetting","isEnable","barcodeTypes","trackPoints","currentTrackPointKey","localStorage","setItem","toString","storedValue","getItem","toLowerCase","BarcodeReaderMixin","HowlerGlobal","init","prototype","self","Howler","_counter","_html5AudioPool","html5PoolSize","_codecs","_howls","_muted","_volume","_canPlayEvent","_navigator","window","masterGain","noAudio","usingWebAudio","autoSuspend","ctx","autoUnlock","_setup","volume","vol","parseFloat","setupAudioContext","gain","setValueAtTime","currentTime","i","_webAudio","ids","_getSoundIds","j","sound","_soundById","_node","mute","muted","stop","unload","close","codecs","ext","replace","_autoSuspend","Audio","test","oncanplaythrough","_setupCodecs","audioTest","canPlayType","mpegTest","ua","userAgent","checkOpera","isOldOpera","parseInt","checkSafari","indexOf","safariVersion","isOldSafari","mp3","mpeg","opus","ogg","oga","wav","aac","caf","m4a","m4b","mp4","weba","webm","dolby","flac","_unlockAudio","_audioUnlocked","_mobileUnloaded","sampleRate","_scratchBuffer","createBuffer","unlock","audioNode","_unlocked","_releaseHtml5Audio","load","_autoResume","source","createBufferSource","buffer","connect","destination","start","noteOn","resume","onended","disconnect","removeEventListener","_emit","addEventListener","_obtainHtml5Audio","testPlay","Promise","warn","audio","suspend","_sounds","_paused","_suspendTimer","clearTimeout","setTimeout","handleSuspension","_resumeAfterSuspend","Howl","o","_autoplay","autoplay","_format","format","_html5","html5","_loop","loop","_pool","pool","_preload","preload","_rate","rate","_sprite","sprite","_src","_xhr","method","xhr","headers","withCredentials","_duration","_state","_endTimers","_queue","_playLock","_onend","onend","fn","_onfade","onfade","_onload","onload","_onloaderror","onloaderror","_onplayerror","_onpause","onpause","_onplay","onplay","_onstop","onstop","_onmute","onmute","_onvolume","onvolume","_onrate","onrate","_onseek","onseek","_onunlock","onunlock","_onresume","event","action","url","str","exec","location","protocol","slice","Sound","loadBuffer","internal","num","_ended","_id","_inactiveSound","_loadQueue","seek","Math","max","_seek","duration","timeout","abs","setParams","_start","_stop","node","playWebAudio","_refreshBuffer","_playStart","bufferSource","noteGrainOn","Infinity","bind","_clearTimer","playHtml5","playbackRate","paused","loadedNoReadyState","ejecta","readyState","isCocoonJS","listener","pause","_rateSeek","_stopFade","noteOff","_cleanBuffer","isNaN","arguments","_clearSound","_interval","args","index","apply","fade","len","min","end","linearRampToValueAtTime","_startFadeInterval","isGroup","diff","steps","stepLen","lastTick","Date","now","_fadeTo","setInterval","tick","round","clearInterval","cancelScheduledValues","loopStart","loopEnd","playing","realTime","rateSeek","seekAndEmit","emitSeek","sounds","_errorFn","_loadFn","_endFn","splice","remCache","cache","on","events","off","isId","Array","isArray","msg","call","task","shift","ended","_drain","reset","limit","cnt","_panner","isIOS","vendor","checkIE","howl","_parent","parent","create","createGain","createGainNode","_errorListener","_loadListener","_endListener","code","ceil","__default","loadSound","atob","dataView","Uint8Array","charCodeAt","decodeAudioData","XMLHttpRequest","open","responseType","forEach","setRequestHeader","status","response","onerror","safeXhrSend","send","arraybuffer","success","AudioContext","webkitAudioContext","iOS","platform","appVersion","version","safari","exports","global","_pos","_orientation","stereo","pan","pos","x","y","z","positionX","setTargetAtTime","positionY","positionZ","setPosition","orientation","xUp","yUp","zUp","or","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","_super","_stereo","_pannerAttr","coneInnerAngle","coneOuterAngle","coneOuterGain","distanceModel","maxDistance","panningModel","refDistance","rolloffFactor","_onstereo","onstereo","_onpos","onpos","_onorientation","onorientation","pannerType","createStereoPanner","setupPanner","orientationX","orientationY","orientationZ","pannerAttr","_coneInnerAngle","_coneOuterAngle","_coneOuterGain","_distanceModel","_maxDistance","_refDistance","_rolloffFactor","_panningModel","pa","panner","type","createPanner","subLabel","labelOnly","BarcodeKeyValueInfoMixin","BarcodeLabel","render","__scopeId","class","viewBox","fill","xmlns","fill-rule","clip-rule","d","script"],"mappings":"0WAmBqB,EAArB,0LACkBA,GACd,MAAqB,kBAAVA,EACFA,EAAMC,QAAQ,GAEhBD,IALX,8CA2E0BE,GAAiB,gBACjCC,EAAgB,wCACjBD,QADiB,IACjBA,OADiB,EACjBA,EAASE,WADQ,UAEjBC,KAAKC,eAFY,iBAEjB,EAAcC,sBAFG,aAEjB,EAA8BH,WAE7BI,EAAe,CACnBC,MAAK,OAAEN,QAAF,IAAEA,GAAF,UAAEA,EAAkBM,aAApB,aAAE,EAAyBC,iBAChCC,OAAM,OAAER,QAAF,IAAEA,GAAF,UAAEA,EAAkBQ,cAApB,aAAE,EAA0BD,iBAClCE,OAAM,OAAET,QAAF,IAAEA,GAAF,UAAEA,EAAkBS,cAApB,aAAE,EAA0BF,iBAClCG,MAAK,OAAEV,QAAF,IAAEA,GAAF,UAAEA,EAAkBU,aAApB,aAAE,EAAyBH,kBAElC,OAAOF,IAtFX,oCAuHgBM,GACZ,IAAMC,EAAM,kBAEHD,GACT,OAAOE,OAAOC,KAAKF,GAAQG,QAAO,SAACC,EAAKC,GACtC,OAAIA,EAAIC,MAAM,oBACZ,iCAAYF,GAASJ,EAAOK,IAE9B,kBAAYD,KACX,MAhIP,sCASI,OAAOd,KAAKiB,uBAAuBjB,KAAKC,WAT5C,0CAYyB,UACrB,OAAO,UAAAD,KAAKkB,uBAAL,mBAAsBC,wBAAtB,mBAAwCC,sBAAxC,eAAwDC,QAASrB,KAAKsB,GAAG,qBAbpF,8BAgBa,QACLzB,EADK,OAET,aAAIG,KAAKC,eAAT,iBAAI,EAAcJ,eAAlB,OAAI,EAAuB0B,GAAI,CAC7B,IAAMC,EAAWxB,KAAKyB,OAAOC,MAAMC,QAAQH,SAC3C3B,EAAU2B,EAASI,MAAK,SAACC,GAAD,eAAiBA,EAAEN,MAAF,UAAS,EAAKtB,eAAd,iBAAS,EAAcJ,eAAvB,aAAS,EAAuB0B,OAG3E,yBACM1B,GAAW,CAAEiC,YAAajC,EAAQkC,SAxB5C,gCA4Be,WACX,IAAI,QACElC,EACJ,aAAIG,KAAKC,eAAT,iBAAI,EAAcJ,eAAlB,OAAI,EAAuB0B,GAAI,OACvBC,EAAWxB,KAAKyB,OAAOC,MAAMC,QAAQH,SAC3C3B,EAAU2B,EAASI,MAAK,SAACC,GAAD,eAAiBA,EAAEN,MAAF,UAAS,EAAKtB,eAAd,iBAAS,EAAcJ,eAAvB,aAAS,EAAuB0B,SAA/D,UAAsEvB,KAAKC,eAA3E,aAAsE,EAAcJ,SAEhG,IAAME,EAAYY,OAAOqB,QAAQhC,KAAKiC,wBAAwBpC,IAAUgB,QACtE,SAACC,EAAD,6BAAOoB,EAAP,KAAYvC,EAAZ,2BAAC,kBACImB,GADL,qBAEGoB,EAAM,CACLb,MAAOa,EACPvC,MAAOA,OAGX,IAEIwC,EAAc,8EACdtC,GAAW,CAAEiC,YAAa,CAAEnC,MAAOE,EAAQkC,KAAMV,MAAO,iBACxDrB,KAAKoC,4BACN,IAAQpC,KAAKoB,iBAAmB,CAC/BA,eAAgB,CACdzB,MAAOK,KAAKoB,eACZC,MAAOrB,KAAKqC,gBAAgBrC,KAAKsC,wBAGnCtC,KAAKuC,wBACN,IAAQvC,KAAKwC,aAAe,CAC3BA,WAAY,CACV7C,MAAOK,KAAKwC,WACZnB,MAAOrB,KAAKyC,mBAGdzC,KAAK0C,sBAAL,kBACC3C,IAEFC,KAAK2C,mBAEJC,EAAc5C,KAAKH,QAEzB,OADAgD,QAAQC,IAAR,iCAAiBX,GAAgBS,IACjC,iCAAYT,GAAgBS,GAC5B,MAAOG,GAEP,OADAF,QAAQG,MAAMD,GACP,MAvEb,gDAyF+B,YAC3B,2BAAO/C,KAAKkB,uBAAZ,iBAAO,EAAsBC,wBAA7B,iBAAO,EAAwCC,sBAA/C,aAAO,EAAwD6B,mBAA/D,WA1FJ,4CA6F2B,YACvB,2BAAOjD,KAAKkB,uBAAZ,iBAAO,EAAsBC,wBAA7B,iBAAO,EAAwCqB,kBAA/C,aAAO,EAAoDS,mBAA3D,WA9FJ,2CAiG0B,YACtB,2BAAOjD,KAAKkB,uBAAZ,iBAAO,EAAsBC,wBAA7B,iBAAO,EAAwC+B,iBAA/C,aAAO,EAAmDD,mBAA1D,WAlGJ,2CAqG0B,YACtB,2BAAOjD,KAAKkB,uBAAZ,iBAAO,EAAsBC,wBAA7B,iBAAO,EAAwCpB,iBAA/C,aAAO,EAAmDkD,mBAA1D,WAtGJ,qCA2GoB,QAChB,iBAAOjD,KAAKC,eAAZ,iBAAO,EAAcC,sBAArB,aAAO,EAA8BkB,iBA5GzC,sCAgHI,OAAOpB,KAAKsB,GAAG,gBAhHnB,iCAmHgB,QACZ,iBAAOtB,KAAKC,eAAZ,iBAAO,EAAcC,sBAArB,aAAO,EAA8BsC,aApHzC,wCAmIuB,QACbW,EAAqB,GAC3B,IAAKnD,KAAKkB,gBAAiB,OAAOiC,EAClC,IAAMC,GAAyB,UAAApD,KAAKkB,uBAAL,mBAAsBC,wBAAtB,eAAwCkC,eAAgB,GAGvF,OAFA,eAAuBF,EAAoBC,EAAwBpD,KAAKC,SAEjEkD,MAzIX,GAAsDG,EAAA,MAAjC,EAAwB,gBAL5C,eAAQ,CACPC,WAAY,GACZxB,KAAM,2BACNyB,QAAS,CAAEC,YAAA,WAEQ,WChBN,U,sWCuBM,EAArB,yG,0BACE,EAAAC,mBAAiC,GACjC,EAAAC,gBAAiB,EACjB,EAAAC,eAAiB,GACjB,EAAAC,MAAiC,KAEjC,EAAAC,SAAW,GACX,EAAAC,UAAY,GACZ,EAAAC,cAAe,EACf,EAAAC,sBAAuB,EACvB,EAAAC,+BAAgC,EAEhC,EAAAC,kBAAmB,EACnB,EAAAC,eAAiB,OAAqB,GAetC,EAAAC,iBAA+B,IAAI,UAAK,CACtCC,IAAK,CAAC,QACNC,YAAa,SAACC,EAAiBC,GAC7B,EAAKJ,iBAAiBK,KAAK,UAAU,kBAAM,EAAKL,iBAAiBM,aAIrE,EAAAC,cAA4B,IAAI,UAAK,CACnCN,IAAK,CAAC,QACNC,YAAa,SAACC,EAAiBC,GAC7B,EAAKJ,iBAAiBK,KAAK,UAAU,kBAAM,EAAKL,iBAAiBM,aAIrE,EAAAE,WAA8C,IAAI,mCAChDC,EACA,OAAaC,wBAGf,EAAAC,aAAe,IACf,EAAAC,cAAgB,IAhDlB,mEAkDoBC,EAAgBL,GAEhC,GADA7E,KAAK6E,WAAaA,EACbK,EAAL,CAEA,IAAMC,EAAI,kBAAoCD,GAC1ClF,KAAKoF,oBAAsBpF,KAAKqF,eAClCrF,KAAKsF,mBAAoBH,EAAKI,MAAmB,IAGnDvF,KAAKwF,qBAAsBL,EAAKI,MAAmB,OA3DvD,wCA8DoBE,GAIZzF,KAAKoF,oBAAsBpF,KAAKqF,eAClCrF,KAAKsF,oBAA6B,OAATG,QAAS,IAATA,OAAA,EAAAA,EAAWC,OAAmB,IAGzD1F,KAAKwF,sBAA+B,OAATC,QAAS,IAATA,OAAA,EAAAA,EAAWC,OAAmB,MAtE7D,oGAyE2BC,GAzE3B,gGA0EQ3F,KAAKiE,qBA1Eb,iDA6EIjE,KAAKiE,sBAAuB,EAC5BjE,KAAK4F,SAAS5F,KAAKsB,GAAG,wBAAyB,CAAEuE,KAAMF,IAAc3F,KAAKsB,GAAG,QAAS,CACpFwE,kBAAmB9F,KAAKsB,GAAG,WAC3ByE,mBAAoB,SACpBC,iBAAkBhG,KAAKsB,GAAG,UAC1B2E,mBAAmB,EACnBC,kBAAkB,IAEjBC,MAAK,WACJ,EAAKpC,UAAY,EAAKqC,iBAAiBT,MAExCU,SAAQ,WACP,EAAKpC,sBAAuB,KAzFpC,6SA8FSjE,KAAK6D,QACR7D,KAAK6D,MAAQyC,SAASC,eAAe,UAEjCC,EAAgB,CACpB3C,MAAO,CACL4C,WAAY,cACZC,YAAa,IApGrB,SAwGUC,UAAUC,aACbC,aAAaL,GACbL,MAAK,SAACW,GAEL,GAAI,EAAKjD,MAAO,CACd,EAAKA,MAAMkD,UAAYD,EACvB,IAAME,EAAgBF,EAAOG,iBAAiB,GAAGC,cAEjD,EAAKlC,aAAegC,EAAc5G,OAAS,EAAK4E,aAChD,EAAKC,cAAgB+B,EAAc1G,QAAU,EAAK2E,kBAGrDkC,OAAM,SAACtF,GACN,OAAAuF,EAAA,MAAwB,oBAAXvF,EAAEE,KAA6B,0BAA4BF,MArHhF,iSA2HM7B,KAAKqH,eAAgB,GACjBrH,KAAKsH,uBA5Hf,gCA6HctH,KAAKuH,oBA7HnB,8CA+Hc,iBA/Hd,wBAgIcvH,KAAKwH,kBAhInB,6DAmIM,OAAAJ,EAAA,MAAa,EAAD,IAnIlB,yBAqIMpH,KAAKqH,eAAgB,EArI3B,2KAyIiBI,GACb,eAAYA,EAAS,QAAS,KA1IlC,sCAiJkBC,GACd,MAAMC,MAAM,gDAAkDD,KAlJlE,sGAqJ6B/B,GArJ7B,mHAuJYiC,EAAiB,OACnBC,EAAY,IAEZlC,EAAU3E,MAAM4G,GA1J1B,oBA2JcE,EAAWnC,EAAUoC,MAAM,KACjCF,EAAYC,EAASE,OAAS,GAE1BH,IAAc7H,KAAKiI,iBA9J/B,uBA+JU,eAAY,0BAA2B,QA/JjD,8BAoKYjI,KAAK0D,mBAAmB9B,MAAK,SAACsG,GAAD,OAASA,EAAI3G,KAAOsG,KApK7D,wBAqKU,eAAY7H,KAAKsB,GAAG,0BAA2B,CAAEC,GAAIsG,IAAc,QArK7E,mDAyKcM,EAAexC,GAAa,GAC5ByC,EA1Kd,UA0K4BpI,KAAKqI,cA1KjC,iBA0K4B,EAAaC,cA1KzC,aA0K4B,EAAqB3G,QAAQoG,MAAM,KACnDK,EAAYG,OAAS,GAAGH,EAAYJ,MAExCH,EAAY,eAAH,OAAkBO,EAAY,IACvC5F,EAAa2F,EA9KrB,eAgLMnI,KAAKkE,+BAAgC,EAhL3C,UAiL4C,eAAW2D,EAAWrF,GAjLlE,WAiLYkF,EAjLZ,OAkLWA,EAlLX,uBAkLgC1H,KAAKsB,GAAG,0BAlLxC,aAoLQtB,KAAKwI,+BACLxI,KAAK0D,mBAAmB6E,QAAUvI,KAAKwI,8BAA8BC,UArL7E,uBAuLczI,KAAKsB,GAAG,6CAA8C,CAC1DoH,MAAO1I,KAAKwI,8BAA8BC,WAxLpD,yBA4LYzI,KAAK2I,gBAAgBjB,GA5LjC,yBA+LY,eAAmBA,GA/L/B,QAiMM1H,KAAK4D,eAAiB8D,EAAcnG,GACL,oBAApBvB,KAAK4I,YACd5I,KAAK4I,WAAWlB,EAAcnG,IAE3BvB,KAAK0D,mBAAmB9B,MAAK,SAACiH,GAAD,OAAQA,EAAGtH,MAAH,OAAUmG,QAAV,IAAUA,OAAV,EAAUA,EAAenG,SACjEvB,KAAK0D,mBAAmBoF,KAAKpB,GAC7B1H,KAAK+I,oBAAoBrB,GAEzB,eAAY1H,KAAKsB,GAAG,oBAAqB,WAEzCtB,KAAK+D,UAAY,IA3MzB,qDA8MM/D,KAAKgJ,gBAAL,MA9MN,yBAgNMhJ,KAAKkE,+BAAgC,EACrClE,KAAK+D,UAAY,GAjNvB,6KAqNkBf,GAEd,GADAhD,KAAK4E,cAAcD,OACL,WAAV3B,EAAJ,CACA,IAAIyE,EAGJ,GAAqB,WAAjB,eAAOzE,IAAP,OAA6BA,QAA7B,IAA6BA,KAAOiG,eAAe,MAAO,OAC5DxB,EAAUzH,KAAKsB,GAAL,wBAAmB0B,QAAnB,IAAmBA,GAAnB,UAAmBA,EAAyBzB,UAA5C,aAAmB,EAA6ByG,YACrD,IAAqB,kBAAVhF,EAAoB,CACpC,IAAMkG,EAAclJ,KAAKmJ,wBAEzB,YADA,OAAA/B,EAAA,MAAapE,EAAiBkG,GAEpB,eAAQlG,KAClByE,EAAU2B,KAAKC,UAAUrG,IAEvByE,GAA8B,KAAnBA,EAAQ6B,QACrBtJ,KAAKuJ,eAAe9B,MArO1B,8CA2OI,MAAO,CACL+B,YAAaxJ,KAAKyJ,YAClBC,KAAM1J,KAAK2J,sBACXC,KAAM5J,KAAK6J,+BA9OjB,0CAsQsBhB,GAAY,MACxBiB,EAAQ9J,KAAK8D,SAASlC,MAAK,SAAC3B,GAAD,OAAaA,EAAQsB,KAAOsH,EAAGtH,MAEhEvB,KAAKqE,iBAAiBM,OAEjBmF,IAAW,OAAFjB,QAAE,IAAFA,OAAA,EAAAA,EAAItH,OAAJ,UAAWvB,KAAKC,eAAhB,aAAW,EAAcsB,KAAIvB,KAAK8D,SAASgF,KAAKD,KA3QlE,8FA8QqBkB,EAA6BC,EAA+BC,GA9QjF,qFA+QQjK,KAAK2D,eA/Qb,uBAgRMsG,IAhRN,0CAmRUjK,KAAK4F,SAAS5F,KAAKsB,GAAG,oBAAqB,GAAI,CACnDwE,kBAAmB9F,KAAKsB,GAAG,MAC3ByE,mBAAoB,SACpBC,iBAAkBhG,KAAKsB,GAAG,YAEzB6E,KALG,wCAKE,8FACJ8D,IADI,4CAGL9C,OAAM,SAACtF,GACI,WAANA,GACFoI,OA7RV,OAgSIA,GAAK,GAhST,6IAoSIjK,KAAK2D,gBAAiB,EACtB3D,KAAKkK,YArST,4CA6TwBvK,GACpBK,KAAK+D,UAAYpE,IA9TrB,uCAiUmBA,GACf,IAAIuF,EAAS,GAMb,OAJEA,EAD4B,KAA1BlF,KAAK+D,UAAUuF,OACRtJ,KAAK+D,UAAY/D,KAAKmK,UAAYxK,EAElCA,EAEJuF,EAAOoE,SAxUlB,iDA4U0B,YACM,IAAxBtJ,KAAKqF,gBAA+C,KAAnBrF,KAAK+D,WACxC/D,KAAK4F,SAAS5F,KAAKsB,GAAG,8BAA+BtB,KAAKsB,GAAG,WAAY,CACvEwE,kBAAmB9F,KAAKsB,GAAG,WAC3ByE,mBAAoB,SACpBC,iBAAkBhG,KAAKsB,GAAG,UAE1B2E,mBAAmB,EACnBC,kBAAkB,IAEjBC,MAAK,WACJ,EAAKpC,UAAY,MAElBoD,OAAM,WACL,EAAK9B,gBAAiB,OA1VhC,yCAewB,cAGpB,OAFArF,KAAKmE,iBAAL,oBACEnE,KAAKyB,OAAOC,MAAMC,eADpB,iBACE,EAA2ByI,eAD7B,iBACE,EAAoCC,sBADtC,iBACE,EAAoDC,mCADtD,aACE,EAAiFC,gBADnF,SAEOvK,KAAKmE,mBAlBhB,gCAqBe,cAIX,OAHAnE,KAAKoE,eAAL,oBACEpE,KAAKyB,OAAOC,MAAMC,eADpB,iBACE,EAA2ByI,eAD7B,iBACE,EAAoCC,sBADtC,iBACE,EAAoDC,mCADtD,aACE,EAAiFH,iBADnF,QAEE,OAAqB,GAChBnK,KAAKoE,iBAzBhB,uCA6IsB,QAClB,iBAAOpE,KAAKyB,OAAOC,MAAMzB,eAAzB,iBAAO,EAA2BA,eAAlC,aAAO,EAAoCsB,KA9I/C,8BAmPI,OAAOvB,KAAKyB,OAAOC,MAAMC,QAAQyI,UAnPrC,kCAsPiB,UACb,iBAAOpK,KAAK2B,eAAZ,iBAAO,EAAc6I,oBAArB,aAAO,YAA6BxK,KAAKC,eAAlC,aAA6B,EAAcuJ,eAvPtD,kCA0PiB,MACb,OAAO,UAAAxJ,KAAKwJ,mBAAL,eAAkBzH,OAAQ,KA3PrC,4CA8P2B,QACvB,iBAAO/B,KAAK2B,eAAZ,iBAAO,EAAc8I,YAAYzK,KAAK0K,6BAAtC,aAAO,EAAsD3I,OA/PjE,2CAkQ0B,MACtB,iBAAO/B,KAAKC,eAAZ,aAAO,EAAcyK,uBAnQzB,mCAwSqB/K,GACjBgL,aAAaC,QAAQ,mCAAoCjL,EAAMkL,YAC/D7K,KAAKgE,aAAerE,GA1SxB,eA8SI,IAAMmL,EAAcH,aAAaI,QAAQ,oCACzC,OAAK/K,KAAKoF,mBAKL0F,GAKL9K,KAAKgE,aAA6C,SAA9B8G,EAAYE,cACzBhL,KAAKgE,eALV2G,aAAaC,QAAQ,mCAAoC5K,KAAKgE,aAAa6G,YACpE7K,KAAKgE,eANZ2G,aAAaC,QAAQ,mCAAoC,UAClD,OAjTb,GAAsD,eAAOK,EAAA,OA4U3D,gBADC,eAAM,mB,uCAkBN,MA7VkB,EAAwB,gBAJ5C,eAAQ,CACP1H,WAAY,GACZxB,KAAM,8BAEa,WCvBN,U,wBCHf;;;;;;;;;IAUA,WAEE,aASA,IAAImJ,EAAe,WACjBlL,KAAKmL,QAEPD,EAAaE,UAAY,CAKvBD,KAAM,WACJ,IAAIE,EAAOrL,MAAQsL,EA8BnB,OA3BAD,EAAKE,SAAW,IAGhBF,EAAKG,gBAAkB,GACvBH,EAAKI,cAAgB,GAGrBJ,EAAKK,QAAU,GACfL,EAAKM,OAAS,GACdN,EAAKO,QAAS,EACdP,EAAKQ,QAAU,EACfR,EAAKS,cAAgB,iBACrBT,EAAKU,WAAgC,qBAAXC,QAA0BA,OAAOrF,UAAaqF,OAAOrF,UAAY,KAG3F0E,EAAKY,WAAa,KAClBZ,EAAKa,SAAU,EACfb,EAAKc,eAAgB,EACrBd,EAAKe,aAAc,EACnBf,EAAKgB,IAAM,KAGXhB,EAAKiB,YAAa,EAGlBjB,EAAKkB,SAEElB,GAQTmB,OAAQ,SAASC,GACf,IAAIpB,EAAOrL,MAAQsL,EAQnB,GAPAmB,EAAMC,WAAWD,GAGZpB,EAAKgB,KACRM,IAGiB,qBAARF,GAAuBA,GAAO,GAAKA,GAAO,EAAG,CAItD,GAHApB,EAAKQ,QAAUY,EAGXpB,EAAKO,OACP,OAAOP,EAILA,EAAKc,eACPd,EAAKY,WAAWW,KAAKC,eAAeJ,EAAKnB,EAAOe,IAAIS,aAItD,IAAK,IAAIC,EAAE,EAAGA,EAAE1B,EAAKM,OAAOpD,OAAQwE,IAClC,IAAK1B,EAAKM,OAAOoB,GAAGC,UAKlB,IAHA,IAAIC,EAAM5B,EAAKM,OAAOoB,GAAGG,eAGhBC,EAAE,EAAGA,EAAEF,EAAI1E,OAAQ4E,IAAK,CAC/B,IAAIC,EAAQ/B,EAAKM,OAAOoB,GAAGM,WAAWJ,EAAIE,IAEtCC,GAASA,EAAME,QACjBF,EAAME,MAAMd,OAASY,EAAMvB,QAAUY,GAM7C,OAAOpB,EAGT,OAAOA,EAAKQ,SAOd0B,KAAM,SAASC,GACb,IAAInC,EAAOrL,MAAQsL,EAGdD,EAAKgB,KACRM,IAGFtB,EAAKO,OAAS4B,EAGVnC,EAAKc,eACPd,EAAKY,WAAWW,KAAKC,eAAeW,EAAQ,EAAInC,EAAKQ,QAASP,EAAOe,IAAIS,aAI3E,IAAK,IAAIC,EAAE,EAAGA,EAAE1B,EAAKM,OAAOpD,OAAQwE,IAClC,IAAK1B,EAAKM,OAAOoB,GAAGC,UAKlB,IAHA,IAAIC,EAAM5B,EAAKM,OAAOoB,GAAGG,eAGhBC,EAAE,EAAGA,EAAEF,EAAI1E,OAAQ4E,IAAK,CAC/B,IAAIC,EAAQ/B,EAAKM,OAAOoB,GAAGM,WAAWJ,EAAIE,IAEtCC,GAASA,EAAME,QACjBF,EAAME,MAAME,QAAQ,GAAiBJ,EAAMxB,QAMnD,OAAOP,GAMToC,KAAM,WAIJ,IAHA,IAAIpC,EAAOrL,MAAQsL,EAGVyB,EAAE,EAAGA,EAAE1B,EAAKM,OAAOpD,OAAQwE,IAClC1B,EAAKM,OAAOoB,GAAGU,OAGjB,OAAOpC,GAOTqC,OAAQ,WAGN,IAFA,IAAIrC,EAAOrL,MAAQsL,EAEVyB,EAAE1B,EAAKM,OAAOpD,OAAO,EAAGwE,GAAG,EAAGA,IACrC1B,EAAKM,OAAOoB,GAAGW,SAUjB,OANIrC,EAAKc,eAAiBd,EAAKgB,KAAiC,qBAAnBhB,EAAKgB,IAAIsB,QACpDtC,EAAKgB,IAAIsB,QACTtC,EAAKgB,IAAM,KACXM,KAGKtB,GAQTuC,OAAQ,SAASC,GACf,OAAQ7N,MAAQsL,GAAQI,QAAQmC,EAAIC,QAAQ,MAAO,MAOrDvB,OAAQ,WACN,IAAIlB,EAAOrL,MAAQsL,EASnB,GANAD,EAAK3J,MAAQ2J,EAAKgB,KAAMhB,EAAKgB,IAAI3K,OAAuB,YAGxD2J,EAAK0C,gBAGA1C,EAAKc,cAER,GAAqB,qBAAV6B,MACT,IACE,IAAIC,EAAO,IAAID,MAGsB,qBAA1BC,EAAKC,mBACd7C,EAAKS,cAAgB,WAEvB,MAAMjK,GACNwJ,EAAKa,SAAU,OAGjBb,EAAKa,SAAU,EAKnB,IACM+B,EAAO,IAAID,MACXC,EAAKT,QACPnC,EAAKa,SAAU,GAEjB,MAAOrK,IAOT,OAJKwJ,EAAKa,SACRb,EAAK8C,eAGA9C,GAOT8C,aAAc,WACZ,IAAI9C,EAAOrL,MAAQsL,EACf8C,EAAY,KAGhB,IACEA,EAA8B,qBAAVJ,MAAyB,IAAIA,MAAU,KAC3D,MAAOjL,GACP,OAAOsI,EAGT,IAAK+C,GAA8C,oBAA1BA,EAAUC,YACjC,OAAOhD,EAGT,IAAIiD,EAAWF,EAAUC,YAAY,eAAeP,QAAQ,OAAQ,IAGhES,EAAKlD,EAAKU,WAAaV,EAAKU,WAAWyC,UAAY,GACnDC,EAAaF,EAAGvN,MAAM,kBACtB0N,EAAcD,GAAcE,SAASF,EAAW,GAAG1G,MAAM,KAAK,GAAI,IAAM,GACxE6G,GAAwC,IAA1BL,EAAGM,QAAQ,YAA8C,IAA1BN,EAAGM,QAAQ,UACxDC,EAAgBP,EAAGvN,MAAM,mBACzB+N,EAAeH,GAAeE,GAAiBH,SAASG,EAAc,GAAI,IAAM,GAoBpF,OAlBAzD,EAAKK,QAAU,CACbsD,MAASN,IAAeJ,IAAYF,EAAUC,YAAY,cAAcP,QAAQ,OAAQ,KACxFmB,OAAQX,EACRY,OAAQd,EAAUC,YAAY,4BAA4BP,QAAQ,OAAQ,IAC1EqB,MAAOf,EAAUC,YAAY,8BAA8BP,QAAQ,OAAQ,IAC3EsB,MAAOhB,EAAUC,YAAY,8BAA8BP,QAAQ,OAAQ,IAC3EuB,OAAQjB,EAAUC,YAAY,0BAA4BD,EAAUC,YAAY,cAAcP,QAAQ,OAAQ,IAC9GwB,MAAOlB,EAAUC,YAAY,cAAcP,QAAQ,OAAQ,IAC3DyB,MAAOnB,EAAUC,YAAY,gBAAgBP,QAAQ,OAAQ,IAC7D0B,OAAQpB,EAAUC,YAAY,iBAAmBD,EAAUC,YAAY,eAAiBD,EAAUC,YAAY,eAAeP,QAAQ,OAAQ,IAC7I2B,OAAQrB,EAAUC,YAAY,iBAAmBD,EAAUC,YAAY,eAAiBD,EAAUC,YAAY,eAAeP,QAAQ,OAAQ,IAC7I4B,OAAQtB,EAAUC,YAAY,iBAAmBD,EAAUC,YAAY,eAAiBD,EAAUC,YAAY,eAAeP,QAAQ,OAAQ,IAC7I6B,OAAUZ,IAAeX,EAAUC,YAAY,+BAA+BP,QAAQ,OAAQ,KAC9F8B,OAAUb,IAAeX,EAAUC,YAAY,+BAA+BP,QAAQ,OAAQ,KAC9F+B,QAASzB,EAAUC,YAAY,4BAA4BP,QAAQ,OAAQ,IAC3EgC,QAAS1B,EAAUC,YAAY,kBAAoBD,EAAUC,YAAY,gBAAgBP,QAAQ,OAAQ,KAGpGzC,GAST0E,aAAc,WACZ,IAAI1E,EAAOrL,MAAQsL,EAGnB,IAAID,EAAK2E,gBAAmB3E,EAAKgB,IAAjC,CAIAhB,EAAK2E,gBAAiB,EACtB3E,EAAKiB,YAAa,EAKbjB,EAAK4E,iBAA2C,QAAxB5E,EAAKgB,IAAI6D,aACpC7E,EAAK4E,iBAAkB,EACvB5E,EAAKqC,UAKPrC,EAAK8E,eAAiB9E,EAAKgB,IAAI+D,aAAa,EAAG,EAAG,OAKlD,IAAIC,EAAS,SAASxO,GAOpB,MAAOwJ,EAAKG,gBAAgBjD,OAAS8C,EAAKI,cACxC,IACE,IAAI6E,EAAY,IAAItC,MAIpBsC,EAAUC,WAAY,EAGtBlF,EAAKmF,mBAAmBF,GACxB,MAAOzO,GACPwJ,EAAKa,SAAU,EACf,MAKJ,IAAK,IAAIa,EAAE,EAAGA,EAAE1B,EAAKM,OAAOpD,OAAQwE,IAClC,IAAK1B,EAAKM,OAAOoB,GAAGC,UAKlB,IAHA,IAAIC,EAAM5B,EAAKM,OAAOoB,GAAGG,eAGhBC,EAAE,EAAGA,EAAEF,EAAI1E,OAAQ4E,IAAK,CAC/B,IAAIC,EAAQ/B,EAAKM,OAAOoB,GAAGM,WAAWJ,EAAIE,IAEtCC,GAASA,EAAME,QAAUF,EAAME,MAAMiD,YACvCnD,EAAME,MAAMiD,WAAY,EACxBnD,EAAME,MAAMmD,QAOpBpF,EAAKqF,cAGL,IAAIC,EAAStF,EAAKgB,IAAIuE,qBACtBD,EAAOE,OAASxF,EAAK8E,eACrBQ,EAAOG,QAAQzF,EAAKgB,IAAI0E,aAGI,qBAAjBJ,EAAOK,MAChBL,EAAOM,OAAO,GAEdN,EAAOK,MAAM,GAIgB,oBAApB3F,EAAKgB,IAAI6E,QAClB7F,EAAKgB,IAAI6E,SAIXP,EAAOQ,QAAU,WACfR,EAAOS,WAAW,GAGlB/F,EAAK2E,gBAAiB,EAGtB1J,SAAS+K,oBAAoB,aAAchB,GAAQ,GACnD/J,SAAS+K,oBAAoB,WAAYhB,GAAQ,GACjD/J,SAAS+K,oBAAoB,QAAShB,GAAQ,GAC9C/J,SAAS+K,oBAAoB,UAAWhB,GAAQ,GAGhD,IAAK,IAAItD,EAAE,EAAGA,EAAE1B,EAAKM,OAAOpD,OAAQwE,IAClC1B,EAAKM,OAAOoB,GAAGuE,MAAM,YAW3B,OALAhL,SAASiL,iBAAiB,aAAclB,GAAQ,GAChD/J,SAASiL,iBAAiB,WAAYlB,GAAQ,GAC9C/J,SAASiL,iBAAiB,QAASlB,GAAQ,GAC3C/J,SAASiL,iBAAiB,UAAWlB,GAAQ,GAEtChF,IAQTmG,kBAAmB,WACjB,IAAInG,EAAOrL,MAAQsL,EAGnB,GAAID,EAAKG,gBAAgBjD,OACvB,OAAO8C,EAAKG,gBAAgBxD,MAI9B,IAAIyJ,GAAW,IAAIzD,OAAQrJ,OAO3B,OANI8M,GAA+B,qBAAZC,UAA4BD,aAAoBC,SAAoC,oBAAlBD,EAAStL,OAChGsL,EAAStK,OAAM,WACbtE,QAAQ8O,KAAK,6EAIV,IAAI3D,OAObwC,mBAAoB,SAASoB,GAC3B,IAAIvG,EAAOrL,MAAQsL,EAOnB,OAJIsG,EAAMrB,WACRlF,EAAKG,gBAAgB1C,KAAK8I,GAGrBvG,GAQT0C,aAAc,WACZ,IAAI1C,EAAOrL,KAEX,GAAKqL,EAAKe,aAAgBf,EAAKgB,KAAmC,qBAArBhB,EAAKgB,IAAIwF,SAA4BvG,EAAOa,cAAzF,CAKA,IAAK,IAAIY,EAAE,EAAGA,EAAE1B,EAAKM,OAAOpD,OAAQwE,IAClC,GAAI1B,EAAKM,OAAOoB,GAAGC,UACjB,IAAK,IAAIG,EAAE,EAAGA,EAAE9B,EAAKM,OAAOoB,GAAG+E,QAAQvJ,OAAQ4E,IAC7C,IAAK9B,EAAKM,OAAOoB,GAAG+E,QAAQ3E,GAAG4E,QAC7B,OAAO1G,EAkCf,OA5BIA,EAAK2G,eACPC,aAAa5G,EAAK2G,eAIpB3G,EAAK2G,cAAgBE,YAAW,WAC9B,GAAK7G,EAAKe,YAAV,CAIAf,EAAK2G,cAAgB,KACrB3G,EAAK3J,MAAQ,aAGb,IAAIyQ,EAAmB,WACrB9G,EAAK3J,MAAQ,YAET2J,EAAK+G,6BACA/G,EAAK+G,oBACZ/G,EAAKqF,gBAMTrF,EAAKgB,IAAIwF,UAAU1L,KAAKgM,EAAkBA,MACzC,KAEI9G,IAOTqF,YAAa,WACX,IAAIrF,EAAOrL,KAEX,GAAKqL,EAAKgB,KAAkC,qBAApBhB,EAAKgB,IAAI6E,QAA2B5F,EAAOa,cAyBnE,MArBmB,YAAfd,EAAK3J,OAA0C,gBAAnB2J,EAAKgB,IAAI3K,OAA2B2J,EAAK2G,eACvEC,aAAa5G,EAAK2G,eAClB3G,EAAK2G,cAAgB,MACG,cAAf3G,EAAK3J,OAAwC,YAAf2J,EAAK3J,OAA0C,gBAAnB2J,EAAKgB,IAAI3K,OAC5E2J,EAAKgB,IAAI6E,SAAS/K,MAAK,WACrBkF,EAAK3J,MAAQ,UAGb,IAAK,IAAIqL,EAAE,EAAGA,EAAE1B,EAAKM,OAAOpD,OAAQwE,IAClC1B,EAAKM,OAAOoB,GAAGuE,MAAM,aAIrBjG,EAAK2G,gBACPC,aAAa5G,EAAK2G,eAClB3G,EAAK2G,cAAgB,OAEC,eAAf3G,EAAK3J,QACd2J,EAAK+G,qBAAsB,GAGtB/G,IAKX,IAAIC,EAAS,IAAIJ,EASbmH,EAAO,SAASC,GAClB,IAAIjH,EAAOrL,KAGNsS,EAAEhO,KAAwB,IAAjBgO,EAAEhO,IAAIiE,OAKpB8C,EAAKF,KAAKmH,GAJRzP,QAAQG,MAAM,+DAMlBqP,EAAKjH,UAAY,CAMfD,KAAM,SAASmH,GACb,IAAIjH,EAAOrL,KA2EX,OAxEKsL,EAAOe,KACVM,IAIFtB,EAAKkH,UAAYD,EAAEE,WAAY,EAC/BnH,EAAKoH,QAA+B,kBAAbH,EAAEI,OAAuBJ,EAAEI,OAAS,CAACJ,EAAEI,QAC9DrH,EAAKsH,OAASL,EAAEM,QAAS,EACzBvH,EAAKO,OAAS0G,EAAE/E,OAAQ,EACxBlC,EAAKwH,MAAQP,EAAEQ,OAAQ,EACvBzH,EAAK0H,MAAQT,EAAEU,MAAQ,EACvB3H,EAAK4H,SAAiC,mBAAdX,EAAEY,SAAuC,aAAdZ,EAAEY,SAA0BZ,EAAEY,QACjF7H,EAAK8H,MAAQb,EAAEc,MAAQ,EACvB/H,EAAKgI,QAAUf,EAAEgB,QAAU,GAC3BjI,EAAKkI,KAAyB,kBAAVjB,EAAEhO,IAAoBgO,EAAEhO,IAAM,CAACgO,EAAEhO,KACrD+G,EAAKQ,aAAuB/G,IAAbwN,EAAE9F,OAAuB8F,EAAE9F,OAAS,EACnDnB,EAAKmI,KAAO,CACVC,OAAQnB,EAAEoB,KAAOpB,EAAEoB,IAAID,OAASnB,EAAEoB,IAAID,OAAS,MAC/CE,QAASrB,EAAEoB,KAAOpB,EAAEoB,IAAIC,QAAUrB,EAAEoB,IAAIC,QAAU,KAClDC,mBAAiBtB,EAAEoB,MAAOpB,EAAEoB,IAAIE,kBAAkBtB,EAAEoB,IAAIE,iBAI1DvI,EAAKwI,UAAY,EACjBxI,EAAKyI,OAAS,WACdzI,EAAKyG,QAAU,GACfzG,EAAK0I,WAAa,GAClB1I,EAAK2I,OAAS,GACd3I,EAAK4I,WAAY,EAGjB5I,EAAK6I,OAAS5B,EAAE6B,MAAQ,CAAC,CAACC,GAAI9B,EAAE6B,QAAU,GAC1C9I,EAAKgJ,QAAU/B,EAAEgC,OAAS,CAAC,CAACF,GAAI9B,EAAEgC,SAAW,GAC7CjJ,EAAKkJ,QAAUjC,EAAEkC,OAAS,CAAC,CAACJ,GAAI9B,EAAEkC,SAAW,GAC7CnJ,EAAKoJ,aAAenC,EAAEoC,YAAc,CAAC,CAACN,GAAI9B,EAAEoC,cAAgB,GAC5DrJ,EAAKsJ,aAAerC,EAAE/N,YAAc,CAAC,CAAC6P,GAAI9B,EAAE/N,cAAgB,GAC5D8G,EAAKuJ,SAAWtC,EAAEuC,QAAU,CAAC,CAACT,GAAI9B,EAAEuC,UAAY,GAChDxJ,EAAKyJ,QAAUxC,EAAEyC,OAAS,CAAC,CAACX,GAAI9B,EAAEyC,SAAW,GAC7C1J,EAAK2J,QAAU1C,EAAE2C,OAAS,CAAC,CAACb,GAAI9B,EAAE2C,SAAW,GAC7C5J,EAAK6J,QAAU5C,EAAE6C,OAAS,CAAC,CAACf,GAAI9B,EAAE6C,SAAW,GAC7C9J,EAAK+J,UAAY9C,EAAE+C,SAAW,CAAC,CAACjB,GAAI9B,EAAE+C,WAAa,GACnDhK,EAAKiK,QAAUhD,EAAEiD,OAAS,CAAC,CAACnB,GAAI9B,EAAEiD,SAAW,GAC7ClK,EAAKmK,QAAUlD,EAAEmD,OAAS,CAAC,CAACrB,GAAI9B,EAAEmD,SAAW,GAC7CpK,EAAKqK,UAAYpD,EAAEqD,SAAW,CAAC,CAACvB,GAAI9B,EAAEqD,WAAa,GACnDtK,EAAKuK,UAAY,GAGjBvK,EAAK2B,UAAY1B,EAAOa,gBAAkBd,EAAKsH,OAGrB,qBAAfrH,EAAOe,KAAuBf,EAAOe,KAAOf,EAAOgB,YAC5DhB,EAAOyE,eAITzE,EAAOK,OAAO7C,KAAKuC,GAGfA,EAAKkH,WACPlH,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,OACPC,OAAQ,WACNzK,EAAK1G,UAMP0G,EAAK4H,UAA8B,SAAlB5H,EAAK4H,UACxB5H,EAAKoF,OAGApF,GAOToF,KAAM,WACJ,IAAIpF,EAAOrL,KACP+V,EAAM,KAGV,GAAIzK,EAAOY,QACTb,EAAKiG,MAAM,YAAa,KAAM,yBADhC,CAMyB,kBAAdjG,EAAKkI,OACdlI,EAAKkI,KAAO,CAAClI,EAAKkI,OAIpB,IAAK,IAAIxG,EAAE,EAAGA,EAAE1B,EAAKkI,KAAKhL,OAAQwE,IAAK,CACrC,IAAIc,EAAKmI,EAET,GAAI3K,EAAKoH,SAAWpH,EAAKoH,QAAQ1F,GAE/Bc,EAAMxC,EAAKoH,QAAQ1F,OACd,CAGL,GADAiJ,EAAM3K,EAAKkI,KAAKxG,GACG,kBAARiJ,EAAkB,CAC3B3K,EAAKiG,MAAM,YAAa,KAAM,0DAC9B,SAIFzD,EAAM,0BAA0BoI,KAAKD,GAChCnI,IACHA,EAAM,aAAaoI,KAAKD,EAAIjO,MAAM,IAAK,GAAG,KAGxC8F,IACFA,EAAMA,EAAI,GAAG7C,eAUjB,GALK6C,GACHhL,QAAQ8O,KAAK,8FAIX9D,GAAOvC,EAAOsC,OAAOC,GAAM,CAC7BkI,EAAM1K,EAAKkI,KAAKxG,GAChB,OAIJ,GAAKgJ,EAuBL,OAlBA1K,EAAKkI,KAAOwC,EACZ1K,EAAKyI,OAAS,UAImB,WAA7B9H,OAAOkK,SAASC,UAA6C,UAApBJ,EAAIK,MAAM,EAAG,KACxD/K,EAAKsH,QAAS,EACdtH,EAAK2B,WAAY,GAInB,IAAIqJ,EAAMhL,GAGNA,EAAK2B,WACPsJ,EAAWjL,GAGNA,EAtBLA,EAAKiG,MAAM,YAAa,KAAM,kDA+BlC3M,KAAM,SAAS2O,EAAQiD,GACrB,IAAIlL,EAAOrL,KACPuB,EAAK,KAGT,GAAsB,kBAAX+R,EACT/R,EAAK+R,EACLA,EAAS,SACJ,IAAsB,kBAAXA,GAAuC,WAAhBjI,EAAKyI,SAAwBzI,EAAKgI,QAAQC,GAEjF,OAAO,KACF,GAAsB,qBAAXA,IAEhBA,EAAS,aAIJjI,EAAK4I,WAAW,CAEnB,IADA,IAAIuC,EAAM,EACDzJ,EAAE,EAAGA,EAAE1B,EAAKyG,QAAQvJ,OAAQwE,IAC/B1B,EAAKyG,QAAQ/E,GAAGgF,UAAY1G,EAAKyG,QAAQ/E,GAAG0J,SAC9CD,IACAjV,EAAK8J,EAAKyG,QAAQ/E,GAAG2J,KAIb,IAARF,EACFlD,EAAS,KAET/R,EAAK,MAMX,IAAI6L,EAAQ7L,EAAK8J,EAAKgC,WAAW9L,GAAM8J,EAAKsL,iBAG5C,IAAKvJ,EACH,OAAO,KAWT,GAPI7L,IAAO+R,IACTA,EAASlG,EAAMiG,SAAW,aAMR,WAAhBhI,EAAKyI,OAAqB,CAE5B1G,EAAMiG,QAAUC,EAGhBlG,EAAMqJ,QAAS,EAGf,IAAIjS,EAAU4I,EAAMsJ,IAQpB,OAPArL,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,OACPC,OAAQ,WACNzK,EAAK1G,KAAKH,MAIPA,EAIT,GAAIjD,IAAO6L,EAAM2E,QAMf,OAJKwE,GACHlL,EAAKuL,WAAW,QAGXxJ,EAAMsJ,IAIXrL,EAAK2B,WACP1B,EAAOoF,cAIT,IAAImG,EAAOC,KAAKC,IAAI,EAAG3J,EAAM4J,MAAQ,EAAI5J,EAAM4J,MAAQ3L,EAAKgI,QAAQC,GAAQ,GAAK,KAC7E2D,EAAWH,KAAKC,IAAI,GAAK1L,EAAKgI,QAAQC,GAAQ,GAAKjI,EAAKgI,QAAQC,GAAQ,IAAM,IAAQuD,GACtFK,EAAsB,IAAXD,EAAmBH,KAAKK,IAAI/J,EAAM+F,OAC7CnC,EAAQ3F,EAAKgI,QAAQC,GAAQ,GAAK,IAClC7F,GAAQpC,EAAKgI,QAAQC,GAAQ,GAAKjI,EAAKgI,QAAQC,GAAQ,IAAM,IACjElG,EAAMiG,QAAUC,EAIhBlG,EAAMqJ,QAAS,EAGf,IAAIW,EAAY,WACdhK,EAAM2E,SAAU,EAChB3E,EAAM4J,MAAQH,EACdzJ,EAAMiK,OAASrG,EACf5D,EAAMkK,MAAQ7J,EACdL,EAAMyF,SAAWzF,EAAMyF,QAASxH,EAAKgI,QAAQC,GAAQ,KAIvD,KAAIuD,GAAQpJ,GAAZ,CAMA,IAAI8J,EAAOnK,EAAME,MACjB,GAAIjC,EAAK2B,UAAW,CAElB,IAAIwK,EAAe,WACjBnM,EAAK4I,WAAY,EACjBmD,IACA/L,EAAKoM,eAAerK,GAGpB,IAAIX,EAAOW,EAAMxB,QAAUP,EAAKO,OAAU,EAAIwB,EAAMvB,QACpD0L,EAAK3K,KAAKC,eAAeJ,EAAKnB,EAAOe,IAAIS,aACzCM,EAAMsK,WAAapM,EAAOe,IAAIS,YAGS,qBAA5ByK,EAAKI,aAAa3G,MAC3B5D,EAAMyF,MAAQ0E,EAAKI,aAAaC,YAAY,EAAGf,EAAM,OAASU,EAAKI,aAAaC,YAAY,EAAGf,EAAMI,GAErG7J,EAAMyF,MAAQ0E,EAAKI,aAAa3G,MAAM,EAAG6F,EAAM,OAASU,EAAKI,aAAa3G,MAAM,EAAG6F,EAAMI,GAIvFC,IAAYW,MACdxM,EAAK0I,WAAW3G,EAAMsJ,KAAOxE,WAAW7G,EAAKoL,OAAOqB,KAAKzM,EAAM+B,GAAQ8J,IAGpEX,GACHrE,YAAW,WACT7G,EAAKiG,MAAM,OAAQlE,EAAMsJ,KACzBrL,EAAKuL,eACJ,IAIc,YAAjBtL,EAAO5J,OAA4C,gBAArB4J,EAAOe,IAAI3K,MAC3C8V,KAEAnM,EAAK4I,WAAY,EAGjB5I,EAAK3G,KAAK,SAAU8S,GAGpBnM,EAAK0M,YAAY3K,EAAMsJ,UAEpB,CAEL,IAAIsB,EAAY,WACdT,EAAKzK,YAAc+J,EACnBU,EAAK/J,MAAQJ,EAAMxB,QAAUP,EAAKO,QAAUN,EAAOM,QAAU2L,EAAK/J,MAClE+J,EAAK/K,OAASY,EAAMvB,QAAUP,EAAOkB,SACrC+K,EAAKU,aAAe7K,EAAM+F,MAG1B,IACE,IAAIxO,EAAO4S,EAAK5S,OAwChB,GArCIA,GAA2B,qBAAZ+M,UAA4B/M,aAAgB+M,SAAgC,oBAAd/M,EAAKwB,OAEpFkF,EAAK4I,WAAY,EAGjBmD,IAGAzS,EACGwB,MAAK,WACJkF,EAAK4I,WAAY,EACjBsD,EAAKhH,WAAY,EACZgG,EAGHlL,EAAKuL,aAFLvL,EAAKiG,MAAM,OAAQlE,EAAMsJ,QAK5BvP,OAAM,WACLkE,EAAK4I,WAAY,EACjB5I,EAAKiG,MAAM,YAAalE,EAAMsJ,IAAK,+IAInCtJ,EAAMqJ,QAAS,EACfrJ,EAAM2E,SAAU,MAEVwE,IACVlL,EAAK4I,WAAY,EACjBmD,IACA/L,EAAKiG,MAAM,OAAQlE,EAAMsJ,MAI3Ba,EAAKU,aAAe7K,EAAM+F,MAGtBoE,EAAKW,OAGP,YAFA7M,EAAKiG,MAAM,YAAalE,EAAMsJ,IAAK,+IAMtB,cAAXpD,GAA0BlG,EAAMyF,MAClCxH,EAAK0I,WAAW3G,EAAMsJ,KAAOxE,WAAW7G,EAAKoL,OAAOqB,KAAKzM,EAAM+B,GAAQ8J,IAEvE7L,EAAK0I,WAAW3G,EAAMsJ,KAAO,WAE3BrL,EAAKoL,OAAOrJ,GAGZmK,EAAKlG,oBAAoB,QAAShG,EAAK0I,WAAW3G,EAAMsJ,MAAM,IAEhEa,EAAKhG,iBAAiB,QAASlG,EAAK0I,WAAW3G,EAAMsJ,MAAM,IAE7D,MAAO3T,GACPsI,EAAKiG,MAAM,YAAalE,EAAMsJ,IAAK3T,KAKtB,2FAAbwU,EAAKjT,MACPiT,EAAKjT,IAAM+G,EAAKkI,KAChBgE,EAAK9G,QAIP,IAAI0H,EAAsBnM,QAAUA,OAAOoM,SAAab,EAAKc,YAAc/M,EAAOS,WAAWuM,WAC7F,GAAIf,EAAKc,YAAc,GAAKF,EAC1BH,QACK,CACL3M,EAAK4I,WAAY,EACjB5I,EAAKyI,OAAS,UAEd,IAAIyE,EAAW,WACblN,EAAKyI,OAAS,SAGdkE,IAGAT,EAAKlG,oBAAoB/F,EAAOQ,cAAeyM,GAAU,IAE3DhB,EAAKhG,iBAAiBjG,EAAOQ,cAAeyM,GAAU,GAGtDlN,EAAK0M,YAAY3K,EAAMsJ,MAI3B,OAAOtJ,EAAMsJ,IAzJXrL,EAAKoL,OAAOrJ,IAiKhBoL,MAAO,SAASjX,GACd,IAAI8J,EAAOrL,KAGX,GAAoB,WAAhBqL,EAAKyI,QAAuBzI,EAAK4I,UAQnC,OAPA5I,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,QACPC,OAAQ,WACNzK,EAAKmN,MAAMjX,MAIR8J,EAMT,IAFA,IAAI4B,EAAM5B,EAAK6B,aAAa3L,GAEnBwL,EAAE,EAAGA,EAAEE,EAAI1E,OAAQwE,IAAK,CAE/B1B,EAAK0M,YAAY9K,EAAIF,IAGrB,IAAIK,EAAQ/B,EAAKgC,WAAWJ,EAAIF,IAEhC,GAAIK,IAAUA,EAAM2E,UAElB3E,EAAM4J,MAAQ3L,EAAKwL,KAAK5J,EAAIF,IAC5BK,EAAMqL,UAAY,EAClBrL,EAAM2E,SAAU,EAGhB1G,EAAKqN,UAAUzL,EAAIF,IAEfK,EAAME,OACR,GAAIjC,EAAK2B,UAAW,CAElB,IAAKI,EAAME,MAAMqK,aACf,SAG2C,qBAAlCvK,EAAME,MAAMqK,aAAalK,KAClCL,EAAME,MAAMqK,aAAagB,QAAQ,GAEjCvL,EAAME,MAAMqK,aAAalK,KAAK,GAIhCpC,EAAKuN,aAAaxL,EAAME,YACduL,MAAMzL,EAAME,MAAM2J,WAAa7J,EAAME,MAAM2J,WAAaY,KAClEzK,EAAME,MAAMkL,QAMbM,UAAU,IACbzN,EAAKiG,MAAM,QAASlE,EAAQA,EAAMsJ,IAAM,MAI5C,OAAOrL,GASToC,KAAM,SAASlM,EAAIgV,GACjB,IAAIlL,EAAOrL,KAGX,GAAoB,WAAhBqL,EAAKyI,QAAuBzI,EAAK4I,UAQnC,OAPA5I,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,OACPC,OAAQ,WACNzK,EAAKoC,KAAKlM,MAIP8J,EAMT,IAFA,IAAI4B,EAAM5B,EAAK6B,aAAa3L,GAEnBwL,EAAE,EAAGA,EAAEE,EAAI1E,OAAQwE,IAAK,CAE/B1B,EAAK0M,YAAY9K,EAAIF,IAGrB,IAAIK,EAAQ/B,EAAKgC,WAAWJ,EAAIF,IAE5BK,IAEFA,EAAM4J,MAAQ5J,EAAMiK,QAAU,EAC9BjK,EAAMqL,UAAY,EAClBrL,EAAM2E,SAAU,EAChB3E,EAAMqJ,QAAS,EAGfpL,EAAKqN,UAAUzL,EAAIF,IAEfK,EAAME,QACJjC,EAAK2B,UAEHI,EAAME,MAAMqK,eAC+B,qBAAlCvK,EAAME,MAAMqK,aAAalK,KAClCL,EAAME,MAAMqK,aAAagB,QAAQ,GAEjCvL,EAAME,MAAMqK,aAAalK,KAAK,GAIhCpC,EAAKuN,aAAaxL,EAAME,QAEhBuL,MAAMzL,EAAME,MAAM2J,WAAa7J,EAAME,MAAM2J,WAAaY,MAClEzK,EAAME,MAAMR,YAAcM,EAAMiK,QAAU,EAC1CjK,EAAME,MAAMkL,QAGRpL,EAAME,MAAM2J,WAAaY,KAC3BxM,EAAK0N,YAAY3L,EAAME,SAKxBiJ,GACHlL,EAAKiG,MAAM,OAAQlE,EAAMsJ,MAK/B,OAAOrL,GASTkC,KAAM,SAASC,EAAOjM,GACpB,IAAI8J,EAAOrL,KAGX,GAAoB,WAAhBqL,EAAKyI,QAAsBzI,EAAK4I,UAQlC,OAPA5I,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,OACPC,OAAQ,WACNzK,EAAKkC,KAAKC,EAAOjM,MAId8J,EAIT,GAAkB,qBAAP9J,EAAoB,CAC7B,GAAqB,mBAAViM,EAGT,OAAOnC,EAAKO,OAFZP,EAAKO,OAAS4B,EASlB,IAFA,IAAIP,EAAM5B,EAAK6B,aAAa3L,GAEnBwL,EAAE,EAAGA,EAAEE,EAAI1E,OAAQwE,IAAK,CAE/B,IAAIK,EAAQ/B,EAAKgC,WAAWJ,EAAIF,IAE5BK,IACFA,EAAMxB,OAAS4B,EAGXJ,EAAM4L,WACR3N,EAAKqN,UAAUtL,EAAMsJ,KAGnBrL,EAAK2B,WAAaI,EAAME,MAC1BF,EAAME,MAAMV,KAAKC,eAAeW,EAAQ,EAAIJ,EAAMvB,QAASP,EAAOe,IAAIS,aAC7DM,EAAME,QACfF,EAAME,MAAME,QAAQlC,EAAOM,QAAgB4B,GAG7CnC,EAAKiG,MAAM,OAAQlE,EAAMsJ,MAI7B,OAAOrL,GAWTmB,OAAQ,WACN,IAEIC,EAAKlL,EAqBL6L,EAvBA/B,EAAOrL,KACPiZ,EAAOH,UAIX,GAAoB,IAAhBG,EAAK1Q,OAEP,OAAO8C,EAAKQ,QACP,GAAoB,IAAhBoN,EAAK1Q,QAAgC,IAAhB0Q,EAAK1Q,QAAmC,qBAAZ0Q,EAAK,GAAoB,CAEnF,IAAIhM,EAAM5B,EAAK6B,eACXgM,EAAQjM,EAAI4B,QAAQoK,EAAK,IACzBC,GAAS,EACX3X,EAAKoN,SAASsK,EAAK,GAAI,IAEvBxM,EAAMC,WAAWuM,EAAK,SAEfA,EAAK1Q,QAAU,IACxBkE,EAAMC,WAAWuM,EAAK,IACtB1X,EAAKoN,SAASsK,EAAK,GAAI,KAKzB,KAAmB,qBAARxM,GAAuBA,GAAO,GAAKA,GAAO,GA2CnD,OADAW,EAAQ7L,EAAK8J,EAAKgC,WAAW9L,GAAM8J,EAAKyG,QAAQ,GACzC1E,EAAQA,EAAMvB,QAAU,EAzC/B,GAAoB,WAAhBR,EAAKyI,QAAsBzI,EAAK4I,UAQlC,OAPA5I,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,SACPC,OAAQ,WACNzK,EAAKmB,OAAO2M,MAAM9N,EAAM4N,MAIrB5N,EAIS,qBAAP9J,IACT8J,EAAKQ,QAAUY,GAIjBlL,EAAK8J,EAAK6B,aAAa3L,GACvB,IAAK,IAAIwL,EAAE,EAAGA,EAAExL,EAAGgH,OAAQwE,IAEzBK,EAAQ/B,EAAKgC,WAAW9L,EAAGwL,IAEvBK,IACFA,EAAMvB,QAAUY,EAGXwM,EAAK,IACR5N,EAAKqN,UAAUnX,EAAGwL,IAGhB1B,EAAK2B,WAAaI,EAAME,QAAUF,EAAMxB,OAC1CwB,EAAME,MAAMV,KAAKC,eAAeJ,EAAKnB,EAAOe,IAAIS,aACvCM,EAAME,QAAUF,EAAMxB,SAC/BwB,EAAME,MAAMd,OAASC,EAAMnB,EAAOkB,UAGpCnB,EAAKiG,MAAM,SAAUlE,EAAMsJ,MAQjC,OAAOrL,GAWT+N,KAAM,SAASpP,EAAMD,EAAIsP,EAAK9X,GAC5B,IAAI8J,EAAOrL,KAGX,GAAoB,WAAhBqL,EAAKyI,QAAuBzI,EAAK4I,UAQnC,OAPA5I,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,OACPC,OAAQ,WACNzK,EAAK+N,KAAKpP,EAAMD,EAAIsP,EAAK9X,MAItB8J,EAITrB,EAAO8M,KAAKwC,IAAIxC,KAAKC,IAAI,EAAGrK,WAAW1C,IAAQ,GAC/CD,EAAK+M,KAAKwC,IAAIxC,KAAKC,IAAI,EAAGrK,WAAW3C,IAAM,GAC3CsP,EAAM3M,WAAW2M,GAGjBhO,EAAKmB,OAAOxC,EAAMzI,GAIlB,IADA,IAAI0L,EAAM5B,EAAK6B,aAAa3L,GACnBwL,EAAE,EAAGA,EAAEE,EAAI1E,OAAQwE,IAAK,CAE/B,IAAIK,EAAQ/B,EAAKgC,WAAWJ,EAAIF,IAGhC,GAAIK,EAAO,CAOT,GALK7L,GACH8J,EAAKqN,UAAUzL,EAAIF,IAIjB1B,EAAK2B,YAAcI,EAAMxB,OAAQ,CACnC,IAAIkB,EAAcxB,EAAOe,IAAIS,YACzByM,EAAMzM,EAAeuM,EAAM,IAC/BjM,EAAMvB,QAAU7B,EAChBoD,EAAME,MAAMV,KAAKC,eAAe7C,EAAM8C,GACtCM,EAAME,MAAMV,KAAK4M,wBAAwBzP,EAAIwP,GAG/ClO,EAAKoO,mBAAmBrM,EAAOpD,EAAMD,EAAIsP,EAAKpM,EAAIF,GAAkB,qBAAPxL,IAIjE,OAAO8J,GAYToO,mBAAoB,SAASrM,EAAOpD,EAAMD,EAAIsP,EAAK9X,EAAImY,GACrD,IAAIrO,EAAOrL,KACPyM,EAAMzC,EACN2P,EAAO5P,EAAKC,EACZ4P,EAAQ9C,KAAKK,IAAIwC,EAAO,KACxBE,EAAU/C,KAAKC,IAAI,EAAI6C,EAAQ,EAAKP,EAAMO,EAAQP,GAClDS,EAAWC,KAAKC,MAGpB5M,EAAM6M,QAAUlQ,EAGhBqD,EAAM4L,UAAYkB,aAAY,WAE5B,IAAIC,GAAQJ,KAAKC,MAAQF,GAAYT,EACrCS,EAAWC,KAAKC,MAChBvN,GAAOkN,EAAOQ,EAGd1N,EAAMqK,KAAKsD,MAAY,IAAN3N,GAAa,IAI5BA,EADEkN,EAAO,EACH7C,KAAKC,IAAIhN,EAAI0C,GAEbqK,KAAKwC,IAAIvP,EAAI0C,GAIjBpB,EAAK2B,UACPI,EAAMvB,QAAUY,EAEhBpB,EAAKmB,OAAOC,EAAKW,EAAMsJ,KAAK,GAI1BgD,IACFrO,EAAKQ,QAAUY,IAIZ1C,EAAKC,GAAQyC,GAAO1C,GAAQA,EAAKC,GAAQyC,GAAO1C,KACnDsQ,cAAcjN,EAAM4L,WACpB5L,EAAM4L,UAAY,KAClB5L,EAAM6M,QAAU,KAChB5O,EAAKmB,OAAOzC,EAAIqD,EAAMsJ,KACtBrL,EAAKiG,MAAM,OAAQlE,EAAMsJ,QAE1BmD,IASLnB,UAAW,SAASnX,GAClB,IAAI8J,EAAOrL,KACPoN,EAAQ/B,EAAKgC,WAAW9L,GAc5B,OAZI6L,GAASA,EAAM4L,YACb3N,EAAK2B,WACPI,EAAME,MAAMV,KAAK0N,sBAAsBhP,EAAOe,IAAIS,aAGpDuN,cAAcjN,EAAM4L,WACpB5L,EAAM4L,UAAY,KAClB3N,EAAKmB,OAAOY,EAAM6M,QAAS1Y,GAC3B6L,EAAM6M,QAAU,KAChB5O,EAAKiG,MAAM,OAAQ/P,IAGd8J,GAWTyH,KAAM,WACJ,IAEIA,EAAMvR,EAAI6L,EAFV/B,EAAOrL,KACPiZ,EAAOH,UAIX,GAAoB,IAAhBG,EAAK1Q,OAEP,OAAO8C,EAAKwH,MACP,GAAoB,IAAhBoG,EAAK1Q,OAAc,CAC5B,GAAuB,mBAAZ0Q,EAAK,GAMd,OADA7L,EAAQ/B,EAAKgC,WAAWsB,SAASsK,EAAK,GAAI,OACnC7L,GAAQA,EAAMyF,MALrBC,EAAOmG,EAAK,GACZ5N,EAAKwH,MAAQC,OAMU,IAAhBmG,EAAK1Q,SACduK,EAAOmG,EAAK,GACZ1X,EAAKoN,SAASsK,EAAK,GAAI,KAKzB,IADA,IAAIhM,EAAM5B,EAAK6B,aAAa3L,GACnBwL,EAAE,EAAGA,EAAEE,EAAI1E,OAAQwE,IAC1BK,EAAQ/B,EAAKgC,WAAWJ,EAAIF,IAExBK,IACFA,EAAMyF,MAAQC,EACVzH,EAAK2B,WAAaI,EAAME,OAASF,EAAME,MAAMqK,eAC/CvK,EAAME,MAAMqK,aAAa7E,KAAOA,EAC5BA,IACF1F,EAAME,MAAMqK,aAAa4C,UAAYnN,EAAMiK,QAAU,EACrDjK,EAAME,MAAMqK,aAAa6C,QAAUpN,EAAMkK,MAGrCjM,EAAKoP,QAAQxN,EAAIF,MACnB1B,EAAKmN,MAAMvL,EAAIF,IAAI,GACnB1B,EAAK1G,KAAKsI,EAAIF,IAAI,OAO5B,OAAO1B,GAWT+H,KAAM,WACJ,IAEIA,EAAM7R,EAqBN6L,EAvBA/B,EAAOrL,KACPiZ,EAAOH,UAIX,GAAoB,IAAhBG,EAAK1Q,OAEPhH,EAAK8J,EAAKyG,QAAQ,GAAG4E,SAChB,GAAoB,IAAhBuC,EAAK1Q,OAAc,CAE5B,IAAI0E,EAAM5B,EAAK6B,eACXgM,EAAQjM,EAAI4B,QAAQoK,EAAK,IACzBC,GAAS,EACX3X,EAAKoN,SAASsK,EAAK,GAAI,IAEvB7F,EAAO1G,WAAWuM,EAAK,SAEA,IAAhBA,EAAK1Q,SACd6K,EAAO1G,WAAWuM,EAAK,IACvB1X,EAAKoN,SAASsK,EAAK,GAAI,KAKzB,GAAoB,kBAAT7F,EAwDT,OADAhG,EAAQ/B,EAAKgC,WAAW9L,GACjB6L,EAAQA,EAAM+F,MAAQ9H,EAAK8H,MAtDlC,GAAoB,WAAhB9H,EAAKyI,QAAuBzI,EAAK4I,UAQnC,OAPA5I,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,OACPC,OAAQ,WACNzK,EAAK+H,KAAK+F,MAAM9N,EAAM4N,MAInB5N,EAIS,qBAAP9J,IACT8J,EAAK8H,MAAQC,GAIf7R,EAAK8J,EAAK6B,aAAa3L,GACvB,IAAK,IAAIwL,EAAE,EAAGA,EAAExL,EAAGgH,OAAQwE,IAIzB,GAFAK,EAAQ/B,EAAKgC,WAAW9L,EAAGwL,IAEvBK,EAAO,CAGL/B,EAAKoP,QAAQlZ,EAAGwL,MAClBK,EAAMqL,UAAYpN,EAAKwL,KAAKtV,EAAGwL,IAC/BK,EAAMsK,WAAarM,EAAK2B,UAAY1B,EAAOe,IAAIS,YAAcM,EAAMsK,YAErEtK,EAAM+F,MAAQC,EAGV/H,EAAK2B,WAAaI,EAAME,OAASF,EAAME,MAAMqK,aAC/CvK,EAAME,MAAMqK,aAAaM,aAAapL,eAAeuG,EAAM9H,EAAOe,IAAIS,aAC7DM,EAAME,QACfF,EAAME,MAAM2K,aAAe7E,GAI7B,IAAIyD,EAAOxL,EAAKwL,KAAKtV,EAAGwL,IACpBkK,GAAa5L,EAAKgI,QAAQjG,EAAMiG,SAAS,GAAKhI,EAAKgI,QAAQjG,EAAMiG,SAAS,IAAM,IAAQwD,EACxFK,EAAsB,IAAXD,EAAmBH,KAAKK,IAAI/J,EAAM+F,QAG7C9H,EAAK0I,WAAWxS,EAAGwL,KAAQK,EAAM2E,UACnC1G,EAAK0M,YAAYxW,EAAGwL,IACpB1B,EAAK0I,WAAWxS,EAAGwL,IAAMmF,WAAW7G,EAAKoL,OAAOqB,KAAKzM,EAAM+B,GAAQ8J,IAGrE7L,EAAKiG,MAAM,OAAQlE,EAAMsJ,KAQ/B,OAAOrL,GAWTwL,KAAM,WACJ,IAEIA,EAAMtV,EAFN8J,EAAOrL,KACPiZ,EAAOH,UAIX,GAAoB,IAAhBG,EAAK1Q,OAEH8C,EAAKyG,QAAQvJ,SACfhH,EAAK8J,EAAKyG,QAAQ,GAAG4E,UAElB,GAAoB,IAAhBuC,EAAK1Q,OAAc,CAE5B,IAAI0E,EAAM5B,EAAK6B,eACXgM,EAAQjM,EAAI4B,QAAQoK,EAAK,IACzBC,GAAS,EACX3X,EAAKoN,SAASsK,EAAK,GAAI,IACd5N,EAAKyG,QAAQvJ,SACtBhH,EAAK8J,EAAKyG,QAAQ,GAAG4E,IACrBG,EAAOnK,WAAWuM,EAAK,UAEA,IAAhBA,EAAK1Q,SACdsO,EAAOnK,WAAWuM,EAAK,IACvB1X,EAAKoN,SAASsK,EAAK,GAAI,KAIzB,GAAkB,qBAAP1X,EACT,OAAO,EAIT,GAAoB,kBAATsV,IAAsC,WAAhBxL,EAAKyI,QAAuBzI,EAAK4I,WAQhE,OAPA5I,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,OACPC,OAAQ,WACNzK,EAAKwL,KAAKsC,MAAM9N,EAAM4N,MAInB5N,EAIT,IAAI+B,EAAQ/B,EAAKgC,WAAW9L,GAE5B,GAAI6L,EAAO,CACT,KAAoB,kBAATyJ,GAAqBA,GAAQ,GAwCjC,CACL,GAAIxL,EAAK2B,UAAW,CAClB,IAAI0N,EAAWrP,EAAKoP,QAAQlZ,GAAM+J,EAAOe,IAAIS,YAAcM,EAAMsK,WAAa,EAC1EiD,EAAWvN,EAAMqL,UAAYrL,EAAMqL,UAAYrL,EAAM4J,MAAQ,EACjE,OAAO5J,EAAM4J,OAAS2D,EAAWD,EAAW5D,KAAKK,IAAI/J,EAAM+F,QAE3D,OAAO/F,EAAME,MAAMR,YA5CrB,IAAI2N,EAAUpP,EAAKoP,QAAQlZ,GACvBkZ,GACFpP,EAAKmN,MAAMjX,GAAI,GAIjB6L,EAAM4J,MAAQH,EACdzJ,EAAMqJ,QAAS,EACfpL,EAAK0M,YAAYxW,GAGZ8J,EAAK2B,YAAaI,EAAME,OAAUuL,MAAMzL,EAAME,MAAM2J,YACvD7J,EAAME,MAAMR,YAAc+J,GAI5B,IAAI+D,EAAc,WAEZH,GACFpP,EAAK1G,KAAKpD,GAAI,GAGhB8J,EAAKiG,MAAM,OAAQ/P,IAIrB,GAAIkZ,IAAYpP,EAAK2B,UAAW,CAC9B,IAAI6N,EAAW,WACRxP,EAAK4I,UAGR/B,WAAW2I,EAAU,GAFrBD,KAKJ1I,WAAW2I,EAAU,QAErBD,IAaN,OAAOvP,GAQToP,QAAS,SAASlZ,GAChB,IAAI8J,EAAOrL,KAGX,GAAkB,kBAAPuB,EAAiB,CAC1B,IAAI6L,EAAQ/B,EAAKgC,WAAW9L,GAC5B,QAAO6L,IAASA,EAAM2E,QAIxB,IAAK,IAAIhF,EAAE,EAAGA,EAAE1B,EAAKyG,QAAQvJ,OAAQwE,IACnC,IAAK1B,EAAKyG,QAAQ/E,GAAGgF,QACnB,OAAO,EAIX,OAAO,GAQTkF,SAAU,SAAS1V,GACjB,IAAI8J,EAAOrL,KACPiX,EAAW5L,EAAKwI,UAGhBzG,EAAQ/B,EAAKgC,WAAW9L,GAK5B,OAJI6L,IACF6J,EAAW5L,EAAKgI,QAAQjG,EAAMiG,SAAS,GAAK,KAGvC4D,GAOTvV,MAAO,WACL,OAAO1B,KAAK8T,QAOdpG,OAAQ,WAKN,IAJA,IAAIrC,EAAOrL,KAGP8a,EAASzP,EAAKyG,QACT/E,EAAE,EAAGA,EAAE+N,EAAOvS,OAAQwE,IAExB+N,EAAO/N,GAAGgF,SACb1G,EAAKoC,KAAKqN,EAAO/N,GAAG2J,KAIjBrL,EAAK2B,YAER3B,EAAK0N,YAAY+B,EAAO/N,GAAGO,OAG3BwN,EAAO/N,GAAGO,MAAM+D,oBAAoB,QAASyJ,EAAO/N,GAAGgO,UAAU,GACjED,EAAO/N,GAAGO,MAAM+D,oBAAoB/F,EAAOQ,cAAegP,EAAO/N,GAAGiO,SAAS,GAC7EF,EAAO/N,GAAGO,MAAM+D,oBAAoB,QAASyJ,EAAO/N,GAAGkO,QAAQ,GAG/D3P,EAAOkF,mBAAmBsK,EAAO/N,GAAGO,eAI/BwN,EAAO/N,GAAGO,MAGjBjC,EAAK0M,YAAY+C,EAAO/N,GAAG2J,KAI7B,IAAIwC,EAAQ5N,EAAOK,OAAOkD,QAAQxD,GAC9B6N,GAAS,GACX5N,EAAOK,OAAOuP,OAAOhC,EAAO,GAI9B,IAAIiC,GAAW,EACf,IAAKpO,EAAE,EAAGA,EAAEzB,EAAOK,OAAOpD,OAAQwE,IAChC,GAAIzB,EAAOK,OAAOoB,GAAGwG,OAASlI,EAAKkI,MAAQlI,EAAKkI,KAAK1E,QAAQvD,EAAOK,OAAOoB,GAAGwG,OAAS,EAAG,CACxF4H,GAAW,EACX,MAgBJ,OAZIC,GAASD,UACJC,EAAM/P,EAAKkI,MAIpBjI,EAAOY,SAAU,EAGjBb,EAAKyI,OAAS,WACdzI,EAAKyG,QAAU,GACfzG,EAAO,KAEA,MAWTgQ,GAAI,SAASxF,EAAOzB,EAAI7S,EAAImD,GAC1B,IAAI2G,EAAOrL,KACPsb,EAASjQ,EAAK,MAAQwK,GAM1B,MAJkB,oBAAPzB,GACTkH,EAAOxS,KAAKpE,EAAO,CAACnD,GAAIA,EAAI6S,GAAIA,EAAI1P,KAAMA,GAAQ,CAACnD,GAAIA,EAAI6S,GAAIA,IAG1D/I,GAUTkQ,IAAK,SAAS1F,EAAOzB,EAAI7S,GACvB,IAAI8J,EAAOrL,KACPsb,EAASjQ,EAAK,MAAQwK,GACtB9I,EAAI,EAQR,GALkB,kBAAPqH,IACT7S,EAAK6S,EACLA,EAAK,MAGHA,GAAM7S,EAER,IAAKwL,EAAE,EAAGA,EAAEuO,EAAO/S,OAAQwE,IAAK,CAC9B,IAAIyO,EAAQja,IAAO+Z,EAAOvO,GAAGxL,GAC7B,GAAI6S,IAAOkH,EAAOvO,GAAGqH,IAAMoH,IAASpH,GAAMoH,EAAM,CAC9CF,EAAOJ,OAAOnO,EAAG,GACjB,YAGC,GAAI8I,EAETxK,EAAK,MAAQwK,GAAS,OACjB,CAEL,IAAIjV,EAAOD,OAAOC,KAAKyK,GACvB,IAAK0B,EAAE,EAAGA,EAAEnM,EAAK2H,OAAQwE,IACS,IAA3BnM,EAAKmM,GAAG8B,QAAQ,QAAiB4M,MAAMC,QAAQrQ,EAAKzK,EAAKmM,OAC5D1B,EAAKzK,EAAKmM,IAAM,IAKtB,OAAO1B,GAUT3G,KAAM,SAASmR,EAAOzB,EAAI7S,GACxB,IAAI8J,EAAOrL,KAKX,OAFAqL,EAAKgQ,GAAGxF,EAAOzB,EAAI7S,EAAI,GAEhB8J,GAUTiG,MAAO,SAASuE,EAAOtU,EAAIoa,GAKzB,IAJA,IAAItQ,EAAOrL,KACPsb,EAASjQ,EAAK,MAAQwK,GAGjB9I,EAAEuO,EAAO/S,OAAO,EAAGwE,GAAG,EAAGA,IAE3BuO,EAAOvO,GAAGxL,IAAM+Z,EAAOvO,GAAGxL,KAAOA,GAAgB,SAAVsU,IAC1C3D,WAAW,SAASkC,GAClBA,EAAGwH,KAAK5b,KAAMuB,EAAIoa,IAClB7D,KAAKzM,EAAMiQ,EAAOvO,GAAGqH,IAAK,GAGxBkH,EAAOvO,GAAGrI,MACZ2G,EAAKkQ,IAAI1F,EAAOyF,EAAOvO,GAAGqH,GAAIkH,EAAOvO,GAAGxL,KAQ9C,OAFA8J,EAAKuL,WAAWf,GAETxK,GASTuL,WAAY,SAASf,GACnB,IAAIxK,EAAOrL,KAEX,GAAIqL,EAAK2I,OAAOzL,OAAS,EAAG,CAC1B,IAAIsT,EAAOxQ,EAAK2I,OAAO,GAGnB6H,EAAKhG,QAAUA,IACjBxK,EAAK2I,OAAO8H,QACZzQ,EAAKuL,cAIFf,GACHgG,EAAK/F,SAIT,OAAOzK,GAQToL,OAAQ,SAASrJ,GACf,IAAI/B,EAAOrL,KACPsT,EAASlG,EAAMiG,QAKnB,IAAKhI,EAAK2B,WAAaI,EAAME,QAAUF,EAAME,MAAM4K,SAAW9K,EAAME,MAAMyO,OAAS3O,EAAME,MAAMR,YAAcM,EAAMkK,MAEjH,OADApF,WAAW7G,EAAKoL,OAAOqB,KAAKzM,EAAM+B,GAAQ,KACnC/B,EAIT,IAAIyH,KAAU1F,EAAMyF,QAASxH,EAAKgI,QAAQC,GAAQ,IAWlD,GARAjI,EAAKiG,MAAM,MAAOlE,EAAMsJ,MAGnBrL,EAAK2B,WAAa8F,GACrBzH,EAAKoC,KAAKL,EAAMsJ,KAAK,GAAM/R,KAAKyI,EAAMsJ,KAIpCrL,EAAK2B,WAAa8F,EAAM,CAC1BzH,EAAKiG,MAAM,OAAQlE,EAAMsJ,KACzBtJ,EAAM4J,MAAQ5J,EAAMiK,QAAU,EAC9BjK,EAAMqL,UAAY,EAClBrL,EAAMsK,WAAapM,EAAOe,IAAIS,YAE9B,IAAIoK,EAA0C,KAA9B9J,EAAMkK,MAAQlK,EAAMiK,QAAkBP,KAAKK,IAAI/J,EAAM+F,OACrE9H,EAAK0I,WAAW3G,EAAMsJ,KAAOxE,WAAW7G,EAAKoL,OAAOqB,KAAKzM,EAAM+B,GAAQ8J,GAuBzE,OAnBI7L,EAAK2B,YAAc8F,IACrB1F,EAAM2E,SAAU,EAChB3E,EAAMqJ,QAAS,EACfrJ,EAAM4J,MAAQ5J,EAAMiK,QAAU,EAC9BjK,EAAMqL,UAAY,EAClBpN,EAAK0M,YAAY3K,EAAMsJ,KAGvBrL,EAAKuN,aAAaxL,EAAME,OAGxBhC,EAAOyC,gBAIJ1C,EAAK2B,WAAc8F,GACtBzH,EAAKoC,KAAKL,EAAMsJ,KAAK,GAGhBrL,GAQT0M,YAAa,SAASxW,GACpB,IAAI8J,EAAOrL,KAEX,GAAIqL,EAAK0I,WAAWxS,GAAK,CAEvB,GAAmC,oBAAxB8J,EAAK0I,WAAWxS,GACzB0Q,aAAa5G,EAAK0I,WAAWxS,QACxB,CACL,IAAI6L,EAAQ/B,EAAKgC,WAAW9L,GACxB6L,GAASA,EAAME,OACjBF,EAAME,MAAM+D,oBAAoB,QAAShG,EAAK0I,WAAWxS,IAAK,UAI3D8J,EAAK0I,WAAWxS,GAGzB,OAAO8J,GAQTgC,WAAY,SAAS9L,GAInB,IAHA,IAAI8J,EAAOrL,KAGF+M,EAAE,EAAGA,EAAE1B,EAAKyG,QAAQvJ,OAAQwE,IACnC,GAAIxL,IAAO8J,EAAKyG,QAAQ/E,GAAG2J,IACzB,OAAOrL,EAAKyG,QAAQ/E,GAIxB,OAAO,MAOT4J,eAAgB,WACd,IAAItL,EAAOrL,KAEXqL,EAAK2Q,SAGL,IAAK,IAAIjP,EAAE,EAAGA,EAAE1B,EAAKyG,QAAQvJ,OAAQwE,IACnC,GAAI1B,EAAKyG,QAAQ/E,GAAG0J,OAClB,OAAOpL,EAAKyG,QAAQ/E,GAAGkP,QAK3B,OAAO,IAAI5F,EAAMhL,IAMnB2Q,OAAQ,WACN,IAAI3Q,EAAOrL,KACPkc,EAAQ7Q,EAAK0H,MACboJ,EAAM,EACNpP,EAAI,EAGR,KAAI1B,EAAKyG,QAAQvJ,OAAS2T,GAA1B,CAKA,IAAKnP,EAAE,EAAGA,EAAE1B,EAAKyG,QAAQvJ,OAAQwE,IAC3B1B,EAAKyG,QAAQ/E,GAAG0J,QAClB0F,IAKJ,IAAKpP,EAAE1B,EAAKyG,QAAQvJ,OAAS,EAAGwE,GAAG,EAAGA,IAAK,CACzC,GAAIoP,GAAOD,EACT,OAGE7Q,EAAKyG,QAAQ/E,GAAG0J,SAEdpL,EAAK2B,WAAa3B,EAAKyG,QAAQ/E,GAAGO,OACpCjC,EAAKyG,QAAQ/E,GAAGO,MAAM8D,WAAW,GAInC/F,EAAKyG,QAAQoJ,OAAOnO,EAAG,GACvBoP,QAUNjP,aAAc,SAAS3L,GACrB,IAAI8J,EAAOrL,KAEX,GAAkB,qBAAPuB,EAAoB,CAE7B,IADA,IAAI0L,EAAM,GACDF,EAAE,EAAGA,EAAE1B,EAAKyG,QAAQvJ,OAAQwE,IACnCE,EAAInE,KAAKuC,EAAKyG,QAAQ/E,GAAG2J,KAG3B,OAAOzJ,EAEP,MAAO,CAAC1L,IASZkW,eAAgB,SAASrK,GACvB,IAAI/B,EAAOrL,KAqBX,OAlBAoN,EAAME,MAAMqK,aAAerM,EAAOe,IAAIuE,qBACtCxD,EAAME,MAAMqK,aAAa9G,OAASuK,EAAM/P,EAAKkI,MAGzCnG,EAAMgP,QACRhP,EAAME,MAAMqK,aAAa7G,QAAQ1D,EAAMgP,SAEvChP,EAAME,MAAMqK,aAAa7G,QAAQ1D,EAAME,OAIzCF,EAAME,MAAMqK,aAAa7E,KAAO1F,EAAMyF,MAClCzF,EAAMyF,QACRzF,EAAME,MAAMqK,aAAa4C,UAAYnN,EAAMiK,QAAU,EACrDjK,EAAME,MAAMqK,aAAa6C,QAAUpN,EAAMkK,OAAS,GAEpDlK,EAAME,MAAMqK,aAAaM,aAAapL,eAAeO,EAAM+F,MAAO7H,EAAOe,IAAIS,aAEtEzB,GAQTuN,aAAc,SAASrB,GACrB,IAAIlM,EAAOrL,KACPqc,EAAQ/Q,EAAOS,YAAcT,EAAOS,WAAWuQ,OAAOzN,QAAQ,UAAY,EAE9E,GAAIvD,EAAO6E,gBAAkBoH,EAAKI,eAChCJ,EAAKI,aAAaxG,QAAU,KAC5BoG,EAAKI,aAAavG,WAAW,GACzBiL,GACF,IAAM9E,EAAKI,aAAa9G,OAASvF,EAAO6E,eAAkB,MAAMtO,IAKpE,OAFA0V,EAAKI,aAAe,KAEbtM,GAOT0N,YAAa,SAASxB,GACpB,IAAIgF,EAAU,kBAAkBtO,KAAK3C,EAAOS,YAAcT,EAAOS,WAAWyC,WACvE+N,IACHhF,EAAKjT,IAAM,4FAYjB,IAAI+R,EAAQ,SAASmG,GACnBxc,KAAKyc,QAAUD,EACfxc,KAAKmL,QAEPkL,EAAMjL,UAAY,CAKhBD,KAAM,WACJ,IAAIE,EAAOrL,KACP0c,EAASrR,EAAKoR,QAqBlB,OAlBApR,EAAKO,OAAS8Q,EAAO9Q,OACrBP,EAAKwH,MAAQ6J,EAAO7J,MACpBxH,EAAKQ,QAAU6Q,EAAO7Q,QACtBR,EAAK8H,MAAQuJ,EAAOvJ,MACpB9H,EAAK2L,MAAQ,EACb3L,EAAK0G,SAAU,EACf1G,EAAKoL,QAAS,EACdpL,EAAKgI,QAAU,YAGfhI,EAAKqL,MAAQpL,EAAOC,SAGpBmR,EAAO5K,QAAQhJ,KAAKuC,GAGpBA,EAAKsR,SAEEtR,GAOTsR,OAAQ,WACN,IAAItR,EAAOrL,KACP0c,EAASrR,EAAKoR,QACdjQ,EAAUlB,EAAOM,QAAUP,EAAKO,QAAUP,EAAKoR,QAAQ7Q,OAAU,EAAIP,EAAKQ,QAkC9E,OAhCI6Q,EAAO1P,WAET3B,EAAKiC,MAA0C,qBAA1BhC,EAAOe,IAAIuQ,WAA8BtR,EAAOe,IAAIwQ,iBAAmBvR,EAAOe,IAAIuQ,aACvGvR,EAAKiC,MAAMV,KAAKC,eAAeL,EAAQlB,EAAOe,IAAIS,aAClDzB,EAAKiC,MAAM4K,QAAS,EACpB7M,EAAKiC,MAAMwD,QAAQxF,EAAOW,aAChBX,EAAOY,UAEjBb,EAAKiC,MAAQhC,EAAOkG,oBAGpBnG,EAAK0P,SAAW1P,EAAKyR,eAAehF,KAAKzM,GACzCA,EAAKiC,MAAMiE,iBAAiB,QAASlG,EAAK0P,UAAU,GAGpD1P,EAAK2P,QAAU3P,EAAK0R,cAAcjF,KAAKzM,GACvCA,EAAKiC,MAAMiE,iBAAiBjG,EAAOQ,cAAeT,EAAK2P,SAAS,GAIhE3P,EAAK4P,OAAS5P,EAAK2R,aAAalF,KAAKzM,GACrCA,EAAKiC,MAAMiE,iBAAiB,QAASlG,EAAK4P,QAAQ,GAGlD5P,EAAKiC,MAAMhJ,IAAMoY,EAAOnJ,KACxBlI,EAAKiC,MAAM4F,SAA8B,IAApBwJ,EAAOzJ,SAAoB,OAASyJ,EAAOzJ,SAChE5H,EAAKiC,MAAMd,OAASA,EAASlB,EAAOkB,SAGpCnB,EAAKiC,MAAMmD,QAGNpF,GAOT4Q,MAAO,WACL,IAAI5Q,EAAOrL,KACP0c,EAASrR,EAAKoR,QAgBlB,OAbApR,EAAKO,OAAS8Q,EAAO9Q,OACrBP,EAAKwH,MAAQ6J,EAAO7J,MACpBxH,EAAKQ,QAAU6Q,EAAO7Q,QACtBR,EAAK8H,MAAQuJ,EAAOvJ,MACpB9H,EAAK2L,MAAQ,EACb3L,EAAKoN,UAAY,EACjBpN,EAAK0G,SAAU,EACf1G,EAAKoL,QAAS,EACdpL,EAAKgI,QAAU,YAGfhI,EAAKqL,MAAQpL,EAAOC,SAEbF,GAMTyR,eAAgB,WACd,IAAIzR,EAAOrL,KAGXqL,EAAKoR,QAAQnL,MAAM,YAAajG,EAAKqL,IAAKrL,EAAKiC,MAAMtK,MAAQqI,EAAKiC,MAAMtK,MAAMia,KAAO,GAGrF5R,EAAKiC,MAAM+D,oBAAoB,QAAShG,EAAK0P,UAAU,IAMzDgC,cAAe,WACb,IAAI1R,EAAOrL,KACP0c,EAASrR,EAAKoR,QAGlBC,EAAO7I,UAAYiD,KAAKoG,KAA2B,GAAtB7R,EAAKiC,MAAM2J,UAAiB,GAGd,IAAvCtW,OAAOC,KAAK8b,EAAOrJ,SAAS9K,SAC9BmU,EAAOrJ,QAAU,CAAC8J,UAAW,CAAC,EAAsB,IAAnBT,EAAO7I,aAGpB,WAAlB6I,EAAO5I,SACT4I,EAAO5I,OAAS,SAChB4I,EAAOpL,MAAM,QACboL,EAAO9F,cAITvL,EAAKiC,MAAM+D,oBAAoB/F,EAAOQ,cAAeT,EAAK2P,SAAS,IAMrEgC,aAAc,WACZ,IAAI3R,EAAOrL,KACP0c,EAASrR,EAAKoR,QAGdC,EAAO7I,YAAcgE,MAGvB6E,EAAO7I,UAAYiD,KAAKoG,KAA2B,GAAtB7R,EAAKiC,MAAM2J,UAAiB,GAGrDyF,EAAOrJ,QAAQ8J,UAAU,KAAOtF,MAClC6E,EAAOrJ,QAAQ8J,UAAU,GAAwB,IAAnBT,EAAO7I,WAIvC6I,EAAOjG,OAAOpL,IAIhBA,EAAKiC,MAAM+D,oBAAoB,QAAShG,EAAK4P,QAAQ,KAOzD,IAAIG,EAAQ,GAMR9E,EAAa,SAASjL,GACxB,IAAI0K,EAAM1K,EAAKkI,KAGf,GAAI6H,EAAMrF,GAOR,OALA1K,EAAKwI,UAAYuH,EAAMrF,GAAKkB,cAG5BmG,EAAU/R,GAKZ,GAAI,sBAAsB4C,KAAK8H,GAAM,CAInC,IAFA,IAAIrQ,EAAO2X,KAAKtH,EAAIhO,MAAM,KAAK,IAC3BuV,EAAW,IAAIC,WAAW7X,EAAK6C,QAC1BwE,EAAE,EAAGA,EAAErH,EAAK6C,SAAUwE,EAC7BuQ,EAASvQ,GAAKrH,EAAK8X,WAAWzQ,GAGhC0Q,EAAgBH,EAASzM,OAAQxF,OAC5B,CAEL,IAAIqI,EAAM,IAAIgK,eACdhK,EAAIiK,KAAKtS,EAAKmI,KAAKC,OAAQsC,GAAK,GAChCrC,EAAIE,gBAAkBvI,EAAKmI,KAAKI,gBAChCF,EAAIkK,aAAe,cAGfvS,EAAKmI,KAAKG,SACZhT,OAAOC,KAAKyK,EAAKmI,KAAKG,SAASkK,SAAQ,SAAS3b,GAC9CwR,EAAIoK,iBAAiB5b,EAAKmJ,EAAKmI,KAAKG,QAAQzR,OAIhDwR,EAAIc,OAAS,WAEX,IAAIyI,GAAQvJ,EAAIqK,OAAS,IAAI,GAChB,MAATd,GAAyB,MAATA,GAAyB,MAATA,EAKpCQ,EAAgB/J,EAAIsK,SAAU3S,GAJ5BA,EAAKiG,MAAM,YAAa,KAAM,0CAA4CoC,EAAIqK,OAAS,MAM3FrK,EAAIuK,QAAU,WAER5S,EAAK2B,YACP3B,EAAKsH,QAAS,EACdtH,EAAK2B,WAAY,EACjB3B,EAAKyG,QAAU,UACRsJ,EAAMrF,GACb1K,EAAKoF,SAGTyN,EAAYxK,KAQZwK,EAAc,SAASxK,GACzB,IACEA,EAAIyK,OACJ,MAAOtc,GACP6R,EAAIuK,YASJR,EAAkB,SAASW,EAAa/S,GAE1C,IAAIrI,EAAQ,WACVqI,EAAKiG,MAAM,YAAa,KAAM,gCAI5B+M,EAAU,SAASxN,GACjBA,GAAUxF,EAAKyG,QAAQvJ,OAAS,GAClC6S,EAAM/P,EAAKkI,MAAQ1C,EACnBuM,EAAU/R,EAAMwF,IAEhB7N,KAKmB,qBAAZ0O,SAAiE,IAAtCpG,EAAOe,IAAIoR,gBAAgBlV,OAC/D+C,EAAOe,IAAIoR,gBAAgBW,GAAajY,KAAKkY,GAASlX,MAAMnE,GAE5DsI,EAAOe,IAAIoR,gBAAgBW,EAAaC,EAASrb,IASjDoa,EAAY,SAAS/R,EAAMwF,GAEzBA,IAAWxF,EAAKwI,YAClBxI,EAAKwI,UAAYhD,EAAOoG,UAIe,IAArCtW,OAAOC,KAAKyK,EAAKgI,SAAS9K,SAC5B8C,EAAKgI,QAAU,CAAC8J,UAAW,CAAC,EAAoB,IAAjB9R,EAAKwI,aAIlB,WAAhBxI,EAAKyI,SACPzI,EAAKyI,OAAS,SACdzI,EAAKiG,MAAM,QACXjG,EAAKuL,eAOLjK,EAAoB,WAEtB,GAAKrB,EAAOa,cAAZ,CAKA,IAC8B,qBAAjBmS,aACThT,EAAOe,IAAM,IAAIiS,aACsB,qBAAvBC,mBAChBjT,EAAOe,IAAM,IAAIkS,mBAEjBjT,EAAOa,eAAgB,EAEzB,MAAMtK,GACNyJ,EAAOa,eAAgB,EAIpBb,EAAOe,MACVf,EAAOa,eAAgB,GAKzB,IAAIqS,EAAO,iBAAiBvQ,KAAK3C,EAAOS,YAAcT,EAAOS,WAAW0S,UACpEC,EAAapT,EAAOS,YAAcT,EAAOS,WAAW2S,WAAW1d,MAAM,0BACrE2d,EAAUD,EAAa/P,SAAS+P,EAAW,GAAI,IAAM,KACzD,GAAIF,GAAOG,GAAWA,EAAU,EAAG,CACjC,IAAIC,EAAS,SAAS3Q,KAAK3C,EAAOS,YAAcT,EAAOS,WAAWyC,UAAUxD,eACxEM,EAAOS,aAAe6S,IACxBtT,EAAOa,eAAgB,GAKvBb,EAAOa,gBACTb,EAAOW,WAA+C,qBAA1BX,EAAOe,IAAIuQ,WAA8BtR,EAAOe,IAAIwQ,iBAAmBvR,EAAOe,IAAIuQ,aAC9GtR,EAAOW,WAAWW,KAAKC,eAAevB,EAAOM,OAAS,EAAIN,EAAOO,QAASP,EAAOe,IAAIS,aACrFxB,EAAOW,WAAW6E,QAAQxF,EAAOe,IAAI0E,cAIvCzF,EAAOiB,WAKP,EAAO,GAAI,EAAF,WACP,MAAO,CACLjB,OAAQA,EACR+G,KAAMA,IAET,qCAKDwM,EAAQvT,OAASA,EACjBuT,EAAQxM,KAAOA,EAIK,qBAAXyM,GACTA,EAAO5T,aAAeA,EACtB4T,EAAOxT,OAASA,EAChBwT,EAAOzM,KAAOA,EACdyM,EAAOzI,MAAQA,GACY,qBAAXrK,SAChBA,OAAOd,aAAeA,EACtBc,OAAOV,OAASA,EAChBU,OAAOqG,KAAOA,EACdrG,OAAOqK,MAAQA,IA1gFnB;;;;;;;;;;;;AA2hFA,WAEE,aAGAnL,aAAaE,UAAU2T,KAAO,CAAC,EAAG,EAAG,GACrC7T,aAAaE,UAAU4T,aAAe,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,GAWvD9T,aAAaE,UAAU6T,OAAS,SAASC,GACvC,IAAI7T,EAAOrL,KAGX,IAAKqL,EAAKgB,MAAQhB,EAAKgB,IAAIkM,SACzB,OAAOlN,EAIT,IAAK,IAAI0B,EAAE1B,EAAKM,OAAOpD,OAAO,EAAGwE,GAAG,EAAGA,IACrC1B,EAAKM,OAAOoB,GAAGkS,OAAOC,GAGxB,OAAO7T,GAWTH,aAAaE,UAAU+T,IAAM,SAASC,EAAGC,EAAGC,GAC1C,IAAIjU,EAAOrL,KAGX,OAAKqL,EAAKgB,KAAQhB,EAAKgB,IAAIkM,UAK3B8G,EAAkB,kBAANA,EAAkBhU,EAAK0T,KAAK,GAAKM,EAC7CC,EAAkB,kBAANA,EAAkBjU,EAAK0T,KAAK,GAAKO,EAE5B,kBAANF,EAWF/T,EAAK0T,MAVZ1T,EAAK0T,KAAO,CAACK,EAAGC,EAAGC,GAEwB,qBAAhCjU,EAAKgB,IAAIkM,SAASgH,WAC3BlU,EAAKgB,IAAIkM,SAASgH,UAAUC,gBAAgBnU,EAAK0T,KAAK,GAAIzT,OAAOe,IAAIS,YAAa,IAClFzB,EAAKgB,IAAIkM,SAASkH,UAAUD,gBAAgBnU,EAAK0T,KAAK,GAAIzT,OAAOe,IAAIS,YAAa,IAClFzB,EAAKgB,IAAIkM,SAASmH,UAAUF,gBAAgBnU,EAAK0T,KAAK,GAAIzT,OAAOe,IAAIS,YAAa,KAElFzB,EAAKgB,IAAIkM,SAASoH,YAAYtU,EAAK0T,KAAK,GAAI1T,EAAK0T,KAAK,GAAI1T,EAAK0T,KAAK,IAMjE1T,IArBEA,GAsCXH,aAAaE,UAAUwU,YAAc,SAASR,EAAGC,EAAGC,EAAGO,EAAKC,EAAKC,GAC/D,IAAI1U,EAAOrL,KAGX,IAAKqL,EAAKgB,MAAQhB,EAAKgB,IAAIkM,SACzB,OAAOlN,EAIT,IAAI2U,EAAK3U,EAAK2T,aAOd,OANAK,EAAkB,kBAANA,EAAkBW,EAAG,GAAKX,EACtCC,EAAkB,kBAANA,EAAkBU,EAAG,GAAKV,EACtCO,EAAsB,kBAARA,EAAoBG,EAAG,GAAKH,EAC1CC,EAAsB,kBAARA,EAAoBE,EAAG,GAAKF,EAC1CC,EAAsB,kBAARA,EAAoBC,EAAG,GAAKD,EAEzB,kBAANX,EAcFY,GAbP3U,EAAK2T,aAAe,CAACI,EAAGC,EAAGC,EAAGO,EAAKC,EAAKC,GAEE,qBAA/B1U,EAAKgB,IAAIkM,SAAS0H,UAC3B5U,EAAKgB,IAAIkM,SAAS0H,SAAST,gBAAgBJ,EAAG9T,OAAOe,IAAIS,YAAa,IACtEzB,EAAKgB,IAAIkM,SAAS2H,SAASV,gBAAgBH,EAAG/T,OAAOe,IAAIS,YAAa,IACtEzB,EAAKgB,IAAIkM,SAAS4H,SAASX,gBAAgBF,EAAGhU,OAAOe,IAAIS,YAAa,IACtEzB,EAAKgB,IAAIkM,SAAS6H,IAAIZ,gBAAgBK,EAAKvU,OAAOe,IAAIS,YAAa,IACnEzB,EAAKgB,IAAIkM,SAAS8H,IAAIb,gBAAgBM,EAAKxU,OAAOe,IAAIS,YAAa,IACnEzB,EAAKgB,IAAIkM,SAAS+H,IAAId,gBAAgBO,EAAKzU,OAAOe,IAAIS,YAAa,KAEnEzB,EAAKgB,IAAIkM,SAASgI,eAAenB,EAAGC,EAAGC,EAAGO,EAAKC,EAAKC,GAMjD1U,IAWTgH,KAAKjH,UAAUD,KAAO,SAAUqV,GAC9B,OAAO,SAASlO,GACd,IAAIjH,EAAOrL,KAuBX,OApBAqL,EAAK2T,aAAe1M,EAAEsN,aAAe,CAAC,EAAG,EAAG,GAC5CvU,EAAKoV,QAAUnO,EAAE2M,QAAU,KAC3B5T,EAAK0T,KAAOzM,EAAE6M,KAAO,KACrB9T,EAAKqV,YAAc,CACjBC,eAA4C,qBAArBrO,EAAEqO,eAAiCrO,EAAEqO,eAAiB,IAC7EC,eAA4C,qBAArBtO,EAAEsO,eAAiCtO,EAAEsO,eAAiB,IAC7EC,cAA0C,qBAApBvO,EAAEuO,cAAgCvO,EAAEuO,cAAgB,EAC1EC,cAA0C,qBAApBxO,EAAEwO,cAAgCxO,EAAEwO,cAAgB,UAC1EC,YAAsC,qBAAlBzO,EAAEyO,YAA8BzO,EAAEyO,YAAc,IACpEC,aAAwC,qBAAnB1O,EAAE0O,aAA+B1O,EAAE0O,aAAe,OACvEC,YAAsC,qBAAlB3O,EAAE2O,YAA8B3O,EAAE2O,YAAc,EACpEC,cAA0C,qBAApB5O,EAAE4O,cAAgC5O,EAAE4O,cAAgB,GAI5E7V,EAAK8V,UAAY7O,EAAE8O,SAAW,CAAC,CAAChN,GAAI9B,EAAE8O,WAAa,GACnD/V,EAAKgW,OAAS/O,EAAEgP,MAAQ,CAAC,CAAClN,GAAI9B,EAAEgP,QAAU,GAC1CjW,EAAKkW,eAAiBjP,EAAEkP,cAAgB,CAAC,CAACpN,GAAI9B,EAAEkP,gBAAkB,GAG3DhB,EAAO5E,KAAK5b,KAAMsS,IAzBP,CA2BnBD,KAAKjH,UAAUD,MAQlBkH,KAAKjH,UAAU6T,OAAS,SAASC,EAAK3d,GACpC,IAAI8J,EAAOrL,KAGX,IAAKqL,EAAK2B,UACR,OAAO3B,EAIT,GAAoB,WAAhBA,EAAKyI,OAQP,OAPAzI,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,SACPC,OAAQ,WACNzK,EAAK4T,OAAOC,EAAK3d,MAId8J,EAIT,IAAIoW,EAAuD,qBAAlCnW,OAAOe,IAAIqV,mBAAsC,UAAY,SAGtF,GAAkB,qBAAPngB,EAAoB,CAE7B,GAAmB,kBAAR2d,EAIT,OAAO7T,EAAKoV,QAHZpV,EAAKoV,QAAUvB,EACf7T,EAAK0T,KAAO,CAACG,EAAK,EAAG,GAQzB,IADA,IAAIjS,EAAM5B,EAAK6B,aAAa3L,GACnBwL,EAAE,EAAGA,EAAEE,EAAI1E,OAAQwE,IAAK,CAE/B,IAAIK,EAAQ/B,EAAKgC,WAAWJ,EAAIF,IAEhC,GAAIK,EAAO,CACT,GAAmB,kBAAR8R,EA4BT,OAAO9R,EAAMqT,QA3BbrT,EAAMqT,QAAUvB,EAChB9R,EAAM2R,KAAO,CAACG,EAAK,EAAG,GAElB9R,EAAME,QAERF,EAAMsT,YAAYM,aAAe,aAG5B5T,EAAMgP,SAAYhP,EAAMgP,QAAQ8C,KACnCyC,EAAYvU,EAAOqU,GAGF,YAAfA,EACqC,qBAA5BrU,EAAMgP,QAAQmD,WACvBnS,EAAMgP,QAAQmD,UAAU1S,eAAeqS,EAAK5T,OAAOe,IAAIS,aACvDM,EAAMgP,QAAQqD,UAAU5S,eAAe,EAAGvB,OAAOe,IAAIS,aACrDM,EAAMgP,QAAQsD,UAAU7S,eAAe,EAAGvB,OAAOe,IAAIS,cAErDM,EAAMgP,QAAQuD,YAAYT,EAAK,EAAG,GAGpC9R,EAAMgP,QAAQ8C,IAAIrS,eAAeqS,EAAK5T,OAAOe,IAAIS,cAIrDzB,EAAKiG,MAAM,SAAUlE,EAAMsJ,MAOjC,OAAOrL,GAWTgH,KAAKjH,UAAU+T,IAAM,SAASC,EAAGC,EAAGC,EAAG/d,GACrC,IAAI8J,EAAOrL,KAGX,IAAKqL,EAAK2B,UACR,OAAO3B,EAIT,GAAoB,WAAhBA,EAAKyI,OAQP,OAPAzI,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,MACPC,OAAQ,WACNzK,EAAK8T,IAAIC,EAAGC,EAAGC,EAAG/d,MAIf8J,EAQT,GAJAgU,EAAkB,kBAANA,EAAkB,EAAIA,EAClCC,EAAkB,kBAANA,GAAmB,GAAMA,EAGnB,qBAAP/d,EAAoB,CAE7B,GAAiB,kBAAN6d,EAGT,OAAO/T,EAAK0T,KAFZ1T,EAAK0T,KAAO,CAACK,EAAGC,EAAGC,GAQvB,IADA,IAAIrS,EAAM5B,EAAK6B,aAAa3L,GACnBwL,EAAE,EAAGA,EAAEE,EAAI1E,OAAQwE,IAAK,CAE/B,IAAIK,EAAQ/B,EAAKgC,WAAWJ,EAAIF,IAEhC,GAAIK,EAAO,CACT,GAAiB,kBAANgS,EAoBT,OAAOhS,EAAM2R,KAnBb3R,EAAM2R,KAAO,CAACK,EAAGC,EAAGC,GAEhBlS,EAAME,QAEHF,EAAMgP,UAAWhP,EAAMgP,QAAQ8C,KAClCyC,EAAYvU,EAAO,WAGkB,qBAA5BA,EAAMgP,QAAQmD,WACvBnS,EAAMgP,QAAQmD,UAAU1S,eAAeuS,EAAG9T,OAAOe,IAAIS,aACrDM,EAAMgP,QAAQqD,UAAU5S,eAAewS,EAAG/T,OAAOe,IAAIS,aACrDM,EAAMgP,QAAQsD,UAAU7S,eAAeyS,EAAGhU,OAAOe,IAAIS,cAErDM,EAAMgP,QAAQuD,YAAYP,EAAGC,EAAGC,IAIpCjU,EAAKiG,MAAM,MAAOlE,EAAMsJ,MAO9B,OAAOrL,GAaTgH,KAAKjH,UAAUwU,YAAc,SAASR,EAAGC,EAAGC,EAAG/d,GAC7C,IAAI8J,EAAOrL,KAGX,IAAKqL,EAAK2B,UACR,OAAO3B,EAIT,GAAoB,WAAhBA,EAAKyI,OAQP,OAPAzI,EAAK2I,OAAOlL,KAAK,CACf+M,MAAO,cACPC,OAAQ,WACNzK,EAAKuU,YAAYR,EAAGC,EAAGC,EAAG/d,MAIvB8J,EAQT,GAJAgU,EAAkB,kBAANA,EAAkBhU,EAAK2T,aAAa,GAAKK,EACrDC,EAAkB,kBAANA,EAAkBjU,EAAK2T,aAAa,GAAKM,EAGnC,qBAAP/d,EAAoB,CAE7B,GAAiB,kBAAN6d,EAGT,OAAO/T,EAAK2T,aAFZ3T,EAAK2T,aAAe,CAACI,EAAGC,EAAGC,GAQ/B,IADA,IAAIrS,EAAM5B,EAAK6B,aAAa3L,GACnBwL,EAAE,EAAGA,EAAEE,EAAI1E,OAAQwE,IAAK,CAE/B,IAAIK,EAAQ/B,EAAKgC,WAAWJ,EAAIF,IAEhC,GAAIK,EAAO,CACT,GAAiB,kBAANgS,EAyBT,OAAOhS,EAAM4R,aAxBb5R,EAAM4R,aAAe,CAACI,EAAGC,EAAGC,GAExBlS,EAAME,QAEHF,EAAMgP,UAEJhP,EAAM2R,OACT3R,EAAM2R,KAAO1T,EAAK0T,MAAQ,CAAC,EAAG,GAAI,KAGpC4C,EAAYvU,EAAO,YAGqB,qBAA/BA,EAAMgP,QAAQwF,cACvBxU,EAAMgP,QAAQwF,aAAa/U,eAAeuS,EAAG9T,OAAOe,IAAIS,aACxDM,EAAMgP,QAAQyF,aAAahV,eAAewS,EAAG/T,OAAOe,IAAIS,aACxDM,EAAMgP,QAAQ0F,aAAajV,eAAeyS,EAAGhU,OAAOe,IAAIS,cAExDM,EAAMgP,QAAQmE,eAAenB,EAAGC,EAAGC,IAIvCjU,EAAKiG,MAAM,cAAelE,EAAMsJ,MAOtC,OAAOrL,GAiCTgH,KAAKjH,UAAU2W,WAAa,WAC1B,IAEIzP,EAAG/Q,EAAI6L,EAFP/B,EAAOrL,KACPiZ,EAAOH,UAIX,IAAKzN,EAAK2B,UACR,OAAO3B,EAIT,GAAoB,IAAhB4N,EAAK1Q,OAEP,OAAO8C,EAAKqV,YACP,GAAoB,IAAhBzH,EAAK1Q,OAAc,CAC5B,GAAuB,kBAAZ0Q,EAAK,GAgCd,OADA7L,EAAQ/B,EAAKgC,WAAWsB,SAASsK,EAAK,GAAI,KACnC7L,EAAQA,EAAMsT,YAAcrV,EAAKqV,YA/BxCpO,EAAI2G,EAAK,GAGS,qBAAP1X,IACJ+Q,EAAEyP,aACLzP,EAAEyP,WAAa,CACbpB,eAAgBrO,EAAEqO,eAClBC,eAAgBtO,EAAEsO,eAClBC,cAAevO,EAAEuO,cACjBC,cAAexO,EAAEwO,cACjBC,YAAazO,EAAEyO,YACfE,YAAa3O,EAAE2O,YACfC,cAAe5O,EAAE4O,cACjBF,aAAc1O,EAAE0O,eAIpB3V,EAAKqV,YAAc,CACjBC,eAAuD,qBAAhCrO,EAAEyP,WAAWpB,eAAiCrO,EAAEyP,WAAWpB,eAAiBtV,EAAK2W,gBACxGpB,eAAuD,qBAAhCtO,EAAEyP,WAAWnB,eAAiCtO,EAAEyP,WAAWnB,eAAiBvV,EAAK4W,gBACxGpB,cAAqD,qBAA/BvO,EAAEyP,WAAWlB,cAAgCvO,EAAEyP,WAAWlB,cAAgBxV,EAAK6W,eACrGpB,cAAqD,qBAA/BxO,EAAEyP,WAAWjB,cAAgCxO,EAAEyP,WAAWjB,cAAgBzV,EAAK8W,eACrGpB,YAAiD,qBAA7BzO,EAAEyP,WAAWhB,YAA8BzO,EAAEyP,WAAWhB,YAAc1V,EAAK+W,aAC/FnB,YAAiD,qBAA7B3O,EAAEyP,WAAWd,YAA8B3O,EAAEyP,WAAWd,YAAc5V,EAAKgX,aAC/FnB,cAAqD,qBAA/B5O,EAAEyP,WAAWb,cAAgC5O,EAAEyP,WAAWb,cAAgB7V,EAAKiX,eACrGtB,aAAmD,qBAA9B1O,EAAEyP,WAAWf,aAA+B1O,EAAEyP,WAAWf,aAAe3V,EAAKkX,qBAQ/E,IAAhBtJ,EAAK1Q,SACd+J,EAAI2G,EAAK,GACT1X,EAAKoN,SAASsK,EAAK,GAAI,KAKzB,IADA,IAAIhM,EAAM5B,EAAK6B,aAAa3L,GACnBwL,EAAE,EAAGA,EAAEE,EAAI1E,OAAQwE,IAG1B,GAFAK,EAAQ/B,EAAKgC,WAAWJ,EAAIF,IAExBK,EAAO,CAET,IAAIoV,EAAKpV,EAAMsT,YACf8B,EAAK,CACH7B,eAA4C,qBAArBrO,EAAEqO,eAAiCrO,EAAEqO,eAAiB6B,EAAG7B,eAChFC,eAA4C,qBAArBtO,EAAEsO,eAAiCtO,EAAEsO,eAAiB4B,EAAG5B,eAChFC,cAA0C,qBAApBvO,EAAEuO,cAAgCvO,EAAEuO,cAAgB2B,EAAG3B,cAC7EC,cAA0C,qBAApBxO,EAAEwO,cAAgCxO,EAAEwO,cAAgB0B,EAAG1B,cAC7EC,YAAsC,qBAAlBzO,EAAEyO,YAA8BzO,EAAEyO,YAAcyB,EAAGzB,YACvEE,YAAsC,qBAAlB3O,EAAE2O,YAA8B3O,EAAE2O,YAAcuB,EAAGvB,YACvEC,cAA0C,qBAApB5O,EAAE4O,cAAgC5O,EAAE4O,cAAgBsB,EAAGtB,cAC7EF,aAAwC,qBAAnB1O,EAAE0O,aAA+B1O,EAAE0O,aAAewB,EAAGxB,cAI5E,IAAIyB,EAASrV,EAAMgP,QACfqG,GACFA,EAAO9B,eAAiB6B,EAAG7B,eAC3B8B,EAAO7B,eAAiB4B,EAAG5B,eAC3B6B,EAAO5B,cAAgB2B,EAAG3B,cAC1B4B,EAAO3B,cAAgB0B,EAAG1B,cAC1B2B,EAAO1B,YAAcyB,EAAGzB,YACxB0B,EAAOxB,YAAcuB,EAAGvB,YACxBwB,EAAOvB,cAAgBsB,EAAGtB,cAC1BuB,EAAOzB,aAAewB,EAAGxB,eAGpB5T,EAAM2R,OACT3R,EAAM2R,KAAO1T,EAAK0T,MAAQ,CAAC,EAAG,GAAI,KAIpC4C,EAAYvU,EAAO,YAKzB,OAAO/B,GAWTgL,MAAMjL,UAAUD,KAAO,SAAUqV,GAC/B,OAAO,WACL,IAAInV,EAAOrL,KACP0c,EAASrR,EAAKoR,QAGlBpR,EAAK2T,aAAetC,EAAOsC,aAC3B3T,EAAKoV,QAAU/D,EAAO+D,QACtBpV,EAAK0T,KAAOrC,EAAOqC,KACnB1T,EAAKqV,YAAchE,EAAOgE,YAG1BF,EAAO5E,KAAK5b,MAGRqL,EAAKoV,QACP/D,EAAOuC,OAAO5T,EAAKoV,SACVpV,EAAK0T,MACdrC,EAAOyC,IAAI9T,EAAK0T,KAAK,GAAI1T,EAAK0T,KAAK,GAAI1T,EAAK0T,KAAK,GAAI1T,EAAKqL,MAlBzC,CAqBpBL,MAAMjL,UAAUD,MAOnBkL,MAAMjL,UAAU6Q,MAAQ,SAAUuE,GAChC,OAAO,WACL,IAAInV,EAAOrL,KACP0c,EAASrR,EAAKoR,QAqBlB,OAlBApR,EAAK2T,aAAetC,EAAOsC,aAC3B3T,EAAKoV,QAAU/D,EAAO+D,QACtBpV,EAAK0T,KAAOrC,EAAOqC,KACnB1T,EAAKqV,YAAchE,EAAOgE,YAGtBrV,EAAKoV,QACP/D,EAAOuC,OAAO5T,EAAKoV,SACVpV,EAAK0T,KACdrC,EAAOyC,IAAI9T,EAAK0T,KAAK,GAAI1T,EAAK0T,KAAK,GAAI1T,EAAK0T,KAAK,GAAI1T,EAAKqL,KACjDrL,EAAK+Q,UAEd/Q,EAAK+Q,QAAQhL,WAAW,GACxB/F,EAAK+Q,aAAUtX,EACf4X,EAAOjF,eAAepM,IAIjBmV,EAAO5E,KAAK5b,OAxBC,CA0BrBqW,MAAMjL,UAAU6Q,OAUnB,IAAI0F,EAAc,SAASvU,EAAOsV,GAChCA,EAAOA,GAAQ,UAGF,YAATA,GACFtV,EAAMgP,QAAU9Q,OAAOe,IAAIsW,eAC3BvV,EAAMgP,QAAQuE,eAAiBvT,EAAMsT,YAAYC,eACjDvT,EAAMgP,QAAQwE,eAAiBxT,EAAMsT,YAAYE,eACjDxT,EAAMgP,QAAQyE,cAAgBzT,EAAMsT,YAAYG,cAChDzT,EAAMgP,QAAQ0E,cAAgB1T,EAAMsT,YAAYI,cAChD1T,EAAMgP,QAAQ2E,YAAc3T,EAAMsT,YAAYK,YAC9C3T,EAAMgP,QAAQ6E,YAAc7T,EAAMsT,YAAYO,YAC9C7T,EAAMgP,QAAQ8E,cAAgB9T,EAAMsT,YAAYQ,cAChD9T,EAAMgP,QAAQ4E,aAAe5T,EAAMsT,YAAYM,aAER,qBAA5B5T,EAAMgP,QAAQmD,WACvBnS,EAAMgP,QAAQmD,UAAU1S,eAAeO,EAAM2R,KAAK,GAAIzT,OAAOe,IAAIS,aACjEM,EAAMgP,QAAQqD,UAAU5S,eAAeO,EAAM2R,KAAK,GAAIzT,OAAOe,IAAIS,aACjEM,EAAMgP,QAAQsD,UAAU7S,eAAeO,EAAM2R,KAAK,GAAIzT,OAAOe,IAAIS,cAEjEM,EAAMgP,QAAQuD,YAAYvS,EAAM2R,KAAK,GAAI3R,EAAM2R,KAAK,GAAI3R,EAAM2R,KAAK,IAG3B,qBAA/B3R,EAAMgP,QAAQwF,cACvBxU,EAAMgP,QAAQwF,aAAa/U,eAAeO,EAAM4R,aAAa,GAAI1T,OAAOe,IAAIS,aAC5EM,EAAMgP,QAAQyF,aAAahV,eAAeO,EAAM4R,aAAa,GAAI1T,OAAOe,IAAIS,aAC5EM,EAAMgP,QAAQ0F,aAAajV,eAAeO,EAAM4R,aAAa,GAAI1T,OAAOe,IAAIS,cAE5EM,EAAMgP,QAAQmE,eAAenT,EAAM4R,aAAa,GAAI5R,EAAM4R,aAAa,GAAI5R,EAAM4R,aAAa,MAGhG5R,EAAMgP,QAAU9Q,OAAOe,IAAIqV,qBAC3BtU,EAAMgP,QAAQ8C,IAAIrS,eAAeO,EAAMqT,QAASnV,OAAOe,IAAIS,cAG7DM,EAAMgP,QAAQtL,QAAQ1D,EAAME,OAGvBF,EAAM2E,SACT3E,EAAMqP,QAAQjE,MAAMpL,EAAMsJ,KAAK,GAAM/R,KAAKyI,EAAMsJ,KAAK,IAjoB3D,K,yOCpiFE,yBACsD,2CADb,EAAA5S,UAAQ,SAA3B7D,EAASiZ,G,gCAA/B,yBACsD,GADFhX,IAAKgX,EAAQwJ,KAAMziB,EAAQuJ,YAAcnI,MAAK,OAAEpB,QAAF,IAAEA,OAAF,EAAEA,EAASoB,MAC1GuhB,SAAQ,OAAE3iB,QAAF,IAAEA,OAAF,EAAEA,EAASsB,GAAKshB,YAAS,OAAG5iB,QAAH,IAAGA,KAASsB,K,mLCY7B,EAArB,oLAII,eAAkBvB,KAAK8D,SAAU9D,KAAK2B,WAJ1C,8BAQI,OAAO3B,KAAKyB,OAAOC,MAAMC,QAAQyI,YARrC,GAA8C,eAAO0Y,EAAA,OAC3B,gBAAvB,eAAK,CAAEJ,KAAM/hB,U,+BADK,EAAgB,gBANpC,eAAQ,CACPoB,KAAM,mBACNwB,WAAY,CACVwf,eAAA,SAGiB,W,UCTrB,EAAOC,OAASA,EAChB,EAAOC,UAAY,kBAEJ,U,qJCPRC,MAAM,e,EACT,yBAIM,OAJD9iB,MAAM,MAAME,OAAO,MAAM6iB,QAAQ,cAAcC,KAAK,OAAOC,MAAM,8B,CACpE,yBAEiB,QAFXC,YAAU,UAAUC,YAAU,UAClCC,EAAE,qVACFJ,KAAK,Y,oFAJX,yBAMM,MANN,EAMM,CALJ,O,UCDJ,MAAMK,EAAS,GAGfA,EAAOT,OAASA,EAChBS,EAAOR,UAAY,kBAEJ,U,kCCPf,W,kFCAA","file":"js/children~scan.5f2e76be.js","sourcesContent":["\nimport BarcodeTypesMixin from '@/components/mixins/BarcodeTypesMixin.vue'\nimport { toSnakeCase } from '@/utils/helpers'\nimport isEmpty from 'lodash/isEmpty'\nimport { parseCustomFieldsValue } from 'smartbarcode-web-core/src/utils/barcodeHelper'\nimport {\n IActivationData,\n IBarcodeDefinitionType,\n IDimension,\n IProduct,\n ILabelDisplay,\n} from 'smartbarcode-web-core/src/utils/types/index'\nimport { Options } from 'vue-class-component'\n\n@Options({\n components: {},\n name: 'BarcodeKeyValueInfoMixin',\n methods: { toSnakeCase },\n})\nexport default class BarcodeKeyValueInfoMixin extends BarcodeTypesMixin {\n getDisplayValue(value: string | number) {\n if (typeof value === 'number') {\n return value.toFixed(1)\n }\n return value\n }\n\n get barcodeTypeInfo(): IBarcodeDefinitionType | undefined {\n return this.currentBarcodeTypeInfo(this.barcode)\n }\n\n get trackingNumberLabel(): string {\n return this.barcodeTypeInfo?.activationFields?.trackingNumber?.label || this.$t('Tracking Number')\n }\n\n get product() {\n let product\n if (this.barcode?.product?.id) {\n const products = this.$store.state.project.products\n product = products.find((e: IProduct) => e.id === this.barcode?.product?.id)\n }\n\n return {\n ...(product && { productName: product.name }),\n }\n }\n\n get dimension() {\n try {\n let product\n if (this.barcode?.product?.id) {\n const products = this.$store.state.project.products\n product = products.find((e: IProduct) => e.id === this.barcode?.product?.id) || this.barcode?.product\n }\n const dimension = Object.entries(this.activationDataDimension(product)).reduce(\n (acc, [key, value]) => ({\n ...acc,\n [key]: {\n label: key,\n value: value,\n },\n }),\n {}\n )\n const packageInfo = {\n ...(product && { productName: { value: product.name, label: 'productName' } }),\n ...(this.isTrackingNumberAvailable &&\n !isEmpty(this.trackingNumber) && {\n trackingNumber: {\n value: this.trackingNumber,\n label: this.getDisplayValue(this.trackingNumberLabel),\n },\n }),\n ...(this.isExternalIdAvailable &&\n !isEmpty(this.externalId) && {\n externalId: {\n value: this.externalId,\n label: this.externalIdLabel,\n },\n }),\n ...(this.isDimensionAvailable && {\n ...dimension,\n }),\n ...this.customFieldValues,\n }\n const productInfo = this.product\n console.log({ ...packageInfo, ...productInfo })\n return { ...packageInfo, ...productInfo }\n } catch (err) {\n console.error(err)\n return {}\n }\n }\n\n activationDataDimension(product: IProduct) {\n const rawDimensionData: IDimension = {\n ...product?.dimension,\n ...this.barcode?.activationData?.dimension,\n }\n const localeNumber = {\n width: rawDimensionData?.width?.toLocaleString(),\n height: rawDimensionData?.height?.toLocaleString(),\n weight: rawDimensionData?.weight?.toLocaleString(),\n depth: rawDimensionData?.depth?.toLocaleString(),\n }\n return localeNumber\n }\n\n get isTrackingNumberAvailable() {\n return this.barcodeTypeInfo?.activationFields?.trackingNumber?.isAvailable ?? false\n }\n\n get isExternalIdAvailable() {\n return this.barcodeTypeInfo?.activationFields?.externalId?.isAvailable ?? false\n }\n\n get isImageDataAvailable() {\n return this.barcodeTypeInfo?.activationFields?.imageData?.isAvailable ?? false\n }\n\n get isDimensionAvailable() {\n return this.barcodeTypeInfo?.activationFields?.dimension?.isAvailable ?? false\n }\n\n // --------------------------------------------------------------------------------\n\n get trackingNumber(): string {\n return this.barcode?.activationData?.trackingNumber\n }\n\n get externalIdLabel(): string {\n return this.$t('externalId')\n }\n\n get externalId(): string {\n return this.barcode?.activationData?.externalId\n }\n\n flattenFields(obj: IActivationData): Record {\n const fields: {\n [key: string]: unknown\n } = { ...obj }\n return Object.keys(fields).reduce((acc, cur) => {\n if (cur.match(/^custom[a-zA-Z]/g)) {\n return { ...acc, ...(fields[cur] as object) }\n }\n return { ...acc }\n }, {})\n }\n\n get customFieldValues() {\n const parsedCustomFields = {} as Record\n if (!this.barcodeTypeInfo) return parsedCustomFields\n const customFieldsDefinition = this.barcodeTypeInfo?.activationFields?.customFields || {}\n parseCustomFieldsValue(parsedCustomFields, customFieldsDefinition, this.barcode)\n\n return parsedCustomFields\n }\n}\n","import script from \"./BarcodeKeyValueInfoMixin.vue?vue&type=script&lang=ts\"\nexport * from \"./BarcodeKeyValueInfoMixin.vue?vue&type=script&lang=ts\"\n\nexport default script","\nimport barcode from '@/store/barcode'\nimport { getBarcode } from '@/utils/api'\nimport { BARCODE_SCAN, FAIL_SOUND, QRCODE_BARCODE_TYPE_REGEX, SUCCESS_SOUND } from '@/utils/constants'\nimport errorHandler from '@/utils/errorHandler'\nimport { displayTargetAlert, openMessage, promptVideoPermission } from '@/utils/helpers'\nimport { BrowserMultiFormatReader, Result } from '@zxing/library'\nimport { Howl } from 'howler'\nimport { Barcode, BarcodeCapture } from 'scandit-web-datacapture-barcode'\nimport { isEmpty } from 'smartbarcode-web-core/src/utils/typeChecker'\nimport { IAPIErrorCode, IBarcode, IBarcodeDefinitionType, TError } from 'smartbarcode-web-core/src/utils/types/index'\nimport { mixins, Options } from 'vue-class-component'\nimport { RouteLocationNormalized, NavigationGuardNext } from 'vue-router'\nimport BarcodeReaderMixin from './BarcodeReaderMixin.vue'\nimport { Watch } from 'vue-property-decorator'\nimport { AVAILABLE_DELIMITERS } from 'smartbarcode-web-core/src/utils/enums'\n\ninterface IScanSound {\n play: Function\n once: Function\n}\n\n@Options({\n components: {},\n name: 'MultipleBarcodeScanMixin',\n})\nexport default class MultipleBarcodeScanMixin extends mixins(BarcodeReaderMixin) {\n scannedBarcodeList: IBarcode[] = []\n isAllowToLeave = false\n scannedBarcode = ''\n video: HTMLVideoElement | null = null\n _barcodeDataCapture: BarcodeCapture | undefined\n barcodes = [] as IBarcode[]\n valueCode = ''\n multipleScan = false\n isHandleMultipleScan = false\n isLoadingHandleGotScanBarcode = false\n\n showMultipleScan = false\n delimiterValue = AVAILABLE_DELIMITERS[0]\n\n get isShowMultipleScan() {\n this.showMultipleScan =\n this.$store.state.project?.details?.cameraFeatures?.bulkCameraScanResultSetting?.isEnable ?? false\n return this.showMultipleScan\n }\n\n get delimiter() {\n this.delimiterValue =\n this.$store.state.project?.details?.cameraFeatures?.bulkCameraScanResultSetting?.delimiter ??\n AVAILABLE_DELIMITERS[0]\n return this.delimiterValue\n }\n\n successScanSound: IScanSound = new Howl({\n src: [SUCCESS_SOUND],\n onplayerror: (soundId: string, errMessage: string) => {\n this.successScanSound.once('unlock', () => this.successScanSound.play())\n },\n })\n\n failScanSound: IScanSound = new Howl({\n src: [FAIL_SOUND],\n onplayerror: (soundId: string, errMessage: string) => {\n this.successScanSound.once('unlock', () => this.successScanSound.play())\n },\n })\n\n codeReader: BrowserMultiFormatReader | null = new BrowserMultiFormatReader(\n undefined,\n BARCODE_SCAN.timeBetweenScansMillis as number\n )\n\n pictureWidth = 320\n pictureHeight = 320\n\n defaultScanReader(result: Result, codeReader: BrowserMultiFormatReader) {\n this.codeReader = codeReader\n if (!result) return\n\n const temp: { [key: string]: unknown } = { ...result }\n if (this.isShowMultipleScan && this.isMultipleScan) {\n this.handleMultipleScan((temp.text as string) || '')\n return\n }\n this.handleGotScanBarcode((temp.text as string) || '')\n }\n\n scanditDataResult(symbology: Barcode) {\n if (!symbology) {\n // TODO: Do something when scanResult unavailable\n }\n if (this.isShowMultipleScan && this.isMultipleScan) {\n this.handleMultipleScan((symbology?.data as string) || '')\n return\n }\n this.handleGotScanBarcode((symbology?.data as string) || '')\n }\n\n async handleMultipleScan(plainText: string) {\n if (this.isHandleMultipleScan) {\n return\n }\n this.isHandleMultipleScan = true\n this.$confirm(this.$t('confirm_scanned_value', { item: plainText }), this.$t('info'), {\n confirmButtonText: this.$t('confirm'),\n confirmButtonClass: 'danger',\n cancelButtonText: this.$t('cancel'),\n closeOnClickModal: true,\n showCancelButton: true,\n })\n .then(() => {\n this.valueCode = this.processValueCode(plainText)\n })\n .finally(() => {\n this.isHandleMultipleScan = false\n })\n }\n\n async setupVideo() {\n if (!this.video) {\n this.video = document.getElementById('video') as HTMLVideoElement\n }\n const videoSettings = {\n video: {\n facingMode: 'environment',\n aspectRatio: 1,\n },\n }\n\n await navigator.mediaDevices\n .getUserMedia(videoSettings)\n .then((stream) => {\n // Setup the video stream\n if (this.video) {\n this.video.srcObject = stream\n const streamSetting = stream.getVideoTracks()[0].getSettings()\n // actual width & height of the camera video\n this.pictureWidth = streamSetting.width || this.pictureWidth\n this.pictureHeight = streamSetting.height || this.pictureHeight\n }\n })\n .catch((e) => {\n errorHandler(e.name === 'NotAllowedError' ? 'camera_access_not_allow' : e)\n })\n }\n\n async mounted() {\n try {\n this.isReadyToScan = false\n if (this.isScanditReaderProject) {\n await this.initScanditReader()\n } else {\n await promptVideoPermission()\n await this.initZxingReader()\n }\n } catch (error) {\n errorHandler(error as TError)\n } finally {\n this.isReadyToScan = true\n }\n }\n\n openErrorToast(message: string) {\n openMessage(message, 'error', 0)\n }\n\n get currentBarcodeId(): string {\n return this.$store.state.barcode?.barcode?.id\n }\n\n validateBarcode(resultScanned: IBarcode) {\n throw Error('This function need to implement on component ' + resultScanned)\n }\n\n async handleGotScanBarcode(plainText: string) {\n try {\n const regexBarcodeId = QRCODE_BARCODE_TYPE_REGEX\n let barcodeId = ''\n let externalId\n if (plainText.match(regexBarcodeId)) {\n const urlParts = plainText.split('/')\n barcodeId = urlParts.pop() || ''\n // Scanned barcode is current barcode, skip it\n if (barcodeId === this.currentBarcodeId) {\n openMessage('barcode_already_scanned', 'info')\n return\n }\n\n // Skip barcode which one already added in list\n if (this.scannedBarcodeList.find((val) => val.id === barcodeId)) {\n openMessage(this.$t('barcode_already_scanned', { id: barcodeId }), 'info')\n return\n }\n } else {\n const detectedText = plainText || ''\n const projectCode = this.$route?.params?.project.split('@')\n if (projectCode.length > 1) projectCode.pop()\n\n barcodeId = `projectCode=${projectCode[0]}`\n externalId = detectedText\n }\n this.isLoadingHandleGotScanBarcode = true\n const resultScanned: IBarcode = await getBarcode(barcodeId, externalId)\n if (!resultScanned) throw this.$t('barcode does not exist')\n if (\n this.bulkUpdateOperationLimitCount &&\n this.scannedBarcodeList.length >= this.bulkUpdateOperationLimitCount.maxValue\n ) {\n throw this.$t('bulk_tracking_over_barcodes_is_not_allowed', {\n count: this.bulkUpdateOperationLimitCount.maxValue,\n })\n }\n\n await this.validateBarcode(resultScanned)\n\n // Display target barcode notifications if any.\n await displayTargetAlert(resultScanned)\n\n this.scannedBarcode = resultScanned.id\n if (typeof this.addBarcode === 'function') {\n this.addBarcode(resultScanned.id)\n }\n if (!this.scannedBarcodeList.find((bc) => bc.id === resultScanned?.id)) {\n this.scannedBarcodeList.push(resultScanned)\n this.onNewScannedBarcode(resultScanned)\n\n openMessage(this.$t('barcode detected'), 'success')\n\n this.valueCode = ''\n }\n } catch (error) {\n this.handleScanError(error)\n } finally {\n this.isLoadingHandleGotScanBarcode = false\n this.valueCode = ''\n }\n }\n\n handleScanError(error: unknown) {\n this.failScanSound.play()\n if (error === 'cancel') return\n let message\n\n // const error = err as TError\n if (typeof error === 'object' && error?.hasOwnProperty('id')) {\n message = this.$t(`errors.${(error as IAPIErrorCode)?.id?.pop()}`)\n } else if (typeof error === 'string') {\n const modelObject = this.errorVariableTemplate()\n errorHandler(error as TError, modelObject)\n return\n } else if (!isEmpty(error)) {\n message = JSON.stringify(error)\n }\n if (message && message.trim() !== '') {\n this.openErrorToast(message)\n }\n }\n\n // We will implement error variable template according action here\n errorVariableTemplate() {\n return {\n barcodeType: this.barcodeName,\n fTP1: this.currentTrackPointName,\n tTP2: this.nextSelectTrackingPointName,\n }\n }\n\n get project() {\n return this.$store.state.project.details\n }\n\n get barcodeType(): IBarcodeDefinitionType {\n return this.project?.barcodeTypes?.[this.barcode?.barcodeType]\n }\n\n get barcodeName(): string {\n return this.barcodeType?.name || ''\n }\n\n get currentTrackPointName() {\n return this.project?.trackPoints[this.currentTrackPointKey]?.name\n }\n\n get currentTrackPointKey() {\n return this.barcode?.currentTrackPointKey\n }\n\n onNewScannedBarcode(bc: IBarcode) {\n const found = this.barcodes.find((barcode) => barcode.id === bc.id)\n\n this.successScanSound.play()\n\n if (!found && bc?.id !== this.barcode?.id) this.barcodes.push(bc)\n }\n\n async onLeaveGuard(to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) {\n if (this.isAllowToLeave) {\n next()\n return\n }\n await this.$confirm(this.$t('not_save_confirm'), '', {\n confirmButtonText: this.$t('ok'),\n confirmButtonClass: 'danger',\n cancelButtonText: this.$t('cancel'),\n })\n .then(async () => {\n next()\n })\n .catch((e: TError) => {\n if (e !== 'cancel') {\n next()\n }\n })\n next(false)\n }\n\n submit() {\n this.isAllowToLeave = true\n this.forward()\n }\n\n set isMultipleScan(value: boolean) {\n localStorage.setItem('[multiple-scan]_is_multiple_scan', value.toString())\n this.multipleScan = value\n }\n\n get isMultipleScan() {\n const storedValue = localStorage.getItem('[multiple-scan]_is_multiple_scan')\n if (!this.isShowMultipleScan) {\n localStorage.setItem('[multiple-scan]_is_multiple_scan', 'false')\n return false\n }\n\n if (!storedValue) {\n localStorage.setItem('[multiple-scan]_is_multiple_scan', this.multipleScan.toString())\n return this.multipleScan\n }\n\n this.multipleScan = storedValue.toLowerCase() === 'true'\n return this.multipleScan\n }\n\n handleUpdateValueCode(value: string) {\n this.valueCode = value\n }\n\n processValueCode(value: string) {\n let result = ''\n if (this.valueCode.trim() !== '') {\n result = this.valueCode + this.delimiter + value\n } else {\n result = value\n }\n return result.trim()\n }\n\n @Watch('isMultipleScan')\n onMultipleScanModeChange() {\n if (this.isMultipleScan === false && this.valueCode !== '') {\n this.$confirm(this.$t('change_camera_mode_confirm'), this.$t('Warning'), {\n confirmButtonText: this.$t('confirm'),\n confirmButtonClass: 'danger',\n cancelButtonText: this.$t('cancel'),\n // showClose: !isForce,\n closeOnClickModal: true,\n showCancelButton: true,\n })\n .then(() => {\n this.valueCode = ''\n })\n .catch(() => {\n this.isMultipleScan = true\n })\n }\n }\n}\n","import script from \"./MultipleBarcodeScanMixin.vue?vue&type=script&lang=ts\"\nexport * from \"./MultipleBarcodeScanMixin.vue?vue&type=script&lang=ts\"\n\nexport default script","/*!\n * howler.js v2.2.3\n * howlerjs.com\n *\n * (c) 2013-2020, James Simpson of GoldFire Studios\n * goldfirestudios.com\n *\n * MIT License\n */\n\n(function() {\n\n 'use strict';\n\n /** Global Methods **/\n /***************************************************************************/\n\n /**\n * Create the global controller. All contained methods and properties apply\n * to all sounds that are currently playing or will be in the future.\n */\n var HowlerGlobal = function() {\n this.init();\n };\n HowlerGlobal.prototype = {\n /**\n * Initialize the global Howler object.\n * @return {Howler}\n */\n init: function() {\n var self = this || Howler;\n\n // Create a global ID counter.\n self._counter = 1000;\n\n // Pool of unlocked HTML5 Audio objects.\n self._html5AudioPool = [];\n self.html5PoolSize = 10;\n\n // Internal properties.\n self._codecs = {};\n self._howls = [];\n self._muted = false;\n self._volume = 1;\n self._canPlayEvent = 'canplaythrough';\n self._navigator = (typeof window !== 'undefined' && window.navigator) ? window.navigator : null;\n\n // Public properties.\n self.masterGain = null;\n self.noAudio = false;\n self.usingWebAudio = true;\n self.autoSuspend = true;\n self.ctx = null;\n\n // Set to false to disable the auto audio unlocker.\n self.autoUnlock = true;\n\n // Setup the various state values for global tracking.\n self._setup();\n\n return self;\n },\n\n /**\n * Get/set the global volume for all sounds.\n * @param {Float} vol Volume from 0.0 to 1.0.\n * @return {Howler/Float} Returns self or current volume.\n */\n volume: function(vol) {\n var self = this || Howler;\n vol = parseFloat(vol);\n\n // If we don't have an AudioContext created yet, run the setup.\n if (!self.ctx) {\n setupAudioContext();\n }\n\n if (typeof vol !== 'undefined' && vol >= 0 && vol <= 1) {\n self._volume = vol;\n\n // Don't update any of the nodes if we are muted.\n if (self._muted) {\n return self;\n }\n\n // When using Web Audio, we just need to adjust the master gain.\n if (self.usingWebAudio) {\n self.masterGain.gain.setValueAtTime(vol, Howler.ctx.currentTime);\n }\n\n // Loop through and change volume for all HTML5 audio nodes.\n for (var i=0; i=0; i--) {\n self._howls[i].unload();\n }\n\n // Create a new AudioContext to make sure it is fully reset.\n if (self.usingWebAudio && self.ctx && typeof self.ctx.close !== 'undefined') {\n self.ctx.close();\n self.ctx = null;\n setupAudioContext();\n }\n\n return self;\n },\n\n /**\n * Check for codec support of specific extension.\n * @param {String} ext Audio file extention.\n * @return {Boolean}\n */\n codecs: function(ext) {\n return (this || Howler)._codecs[ext.replace(/^x-/, '')];\n },\n\n /**\n * Setup various state values for global tracking.\n * @return {Howler}\n */\n _setup: function() {\n var self = this || Howler;\n\n // Keeps track of the suspend/resume state of the AudioContext.\n self.state = self.ctx ? self.ctx.state || 'suspended' : 'suspended';\n\n // Automatically begin the 30-second suspend process\n self._autoSuspend();\n\n // Check if audio is available.\n if (!self.usingWebAudio) {\n // No audio is available on this system if noAudio is set to true.\n if (typeof Audio !== 'undefined') {\n try {\n var test = new Audio();\n\n // Check if the canplaythrough event is available.\n if (typeof test.oncanplaythrough === 'undefined') {\n self._canPlayEvent = 'canplay';\n }\n } catch(e) {\n self.noAudio = true;\n }\n } else {\n self.noAudio = true;\n }\n }\n\n // Test to make sure audio isn't disabled in Internet Explorer.\n try {\n var test = new Audio();\n if (test.muted) {\n self.noAudio = true;\n }\n } catch (e) {}\n\n // Check for supported codecs.\n if (!self.noAudio) {\n self._setupCodecs();\n }\n\n return self;\n },\n\n /**\n * Check for browser support for various codecs and cache the results.\n * @return {Howler}\n */\n _setupCodecs: function() {\n var self = this || Howler;\n var audioTest = null;\n\n // Must wrap in a try/catch because IE11 in server mode throws an error.\n try {\n audioTest = (typeof Audio !== 'undefined') ? new Audio() : null;\n } catch (err) {\n return self;\n }\n\n if (!audioTest || typeof audioTest.canPlayType !== 'function') {\n return self;\n }\n\n var mpegTest = audioTest.canPlayType('audio/mpeg;').replace(/^no$/, '');\n\n // Opera version <33 has mixed MP3 support, so we need to check for and block it.\n var ua = self._navigator ? self._navigator.userAgent : '';\n var checkOpera = ua.match(/OPR\\/([0-6].)/g);\n var isOldOpera = (checkOpera && parseInt(checkOpera[0].split('/')[1], 10) < 33);\n var checkSafari = ua.indexOf('Safari') !== -1 && ua.indexOf('Chrome') === -1;\n var safariVersion = ua.match(/Version\\/(.*?) /);\n var isOldSafari = (checkSafari && safariVersion && parseInt(safariVersion[1], 10) < 15);\n\n self._codecs = {\n mp3: !!(!isOldOpera && (mpegTest || audioTest.canPlayType('audio/mp3;').replace(/^no$/, ''))),\n mpeg: !!mpegTest,\n opus: !!audioTest.canPlayType('audio/ogg; codecs=\"opus\"').replace(/^no$/, ''),\n ogg: !!audioTest.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/, ''),\n oga: !!audioTest.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/, ''),\n wav: !!(audioTest.canPlayType('audio/wav; codecs=\"1\"') || audioTest.canPlayType('audio/wav')).replace(/^no$/, ''),\n aac: !!audioTest.canPlayType('audio/aac;').replace(/^no$/, ''),\n caf: !!audioTest.canPlayType('audio/x-caf;').replace(/^no$/, ''),\n m4a: !!(audioTest.canPlayType('audio/x-m4a;') || audioTest.canPlayType('audio/m4a;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n m4b: !!(audioTest.canPlayType('audio/x-m4b;') || audioTest.canPlayType('audio/m4b;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n mp4: !!(audioTest.canPlayType('audio/x-mp4;') || audioTest.canPlayType('audio/mp4;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n weba: !!(!isOldSafari && audioTest.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, '')),\n webm: !!(!isOldSafari && audioTest.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, '')),\n dolby: !!audioTest.canPlayType('audio/mp4; codecs=\"ec-3\"').replace(/^no$/, ''),\n flac: !!(audioTest.canPlayType('audio/x-flac;') || audioTest.canPlayType('audio/flac;')).replace(/^no$/, '')\n };\n\n return self;\n },\n\n /**\n * Some browsers/devices will only allow audio to be played after a user interaction.\n * Attempt to automatically unlock audio on the first user interaction.\n * Concept from: http://paulbakaus.com/tutorials/html5/web-audio-on-ios/\n * @return {Howler}\n */\n _unlockAudio: function() {\n var self = this || Howler;\n\n // Only run this if Web Audio is supported and it hasn't already been unlocked.\n if (self._audioUnlocked || !self.ctx) {\n return;\n }\n\n self._audioUnlocked = false;\n self.autoUnlock = false;\n\n // Some mobile devices/platforms have distortion issues when opening/closing tabs and/or web views.\n // Bugs in the browser (especially Mobile Safari) can cause the sampleRate to change from 44100 to 48000.\n // By calling Howler.unload(), we create a new AudioContext with the correct sampleRate.\n if (!self._mobileUnloaded && self.ctx.sampleRate !== 44100) {\n self._mobileUnloaded = true;\n self.unload();\n }\n\n // Scratch buffer for enabling iOS to dispose of web audio buffers correctly, as per:\n // http://stackoverflow.com/questions/24119684\n self._scratchBuffer = self.ctx.createBuffer(1, 1, 22050);\n\n // Call this method on touch start to create and play a buffer,\n // then check if the audio actually played to determine if\n // audio has now been unlocked on iOS, Android, etc.\n var unlock = function(e) {\n // Create a pool of unlocked HTML5 Audio objects that can\n // be used for playing sounds without user interaction. HTML5\n // Audio objects must be individually unlocked, as opposed\n // to the WebAudio API which only needs a single activation.\n // This must occur before WebAudio setup or the source.onended\n // event will not fire.\n while (self._html5AudioPool.length < self.html5PoolSize) {\n try {\n var audioNode = new Audio();\n\n // Mark this Audio object as unlocked to ensure it can get returned\n // to the unlocked pool when released.\n audioNode._unlocked = true;\n\n // Add the audio node to the pool.\n self._releaseHtml5Audio(audioNode);\n } catch (e) {\n self.noAudio = true;\n break;\n }\n }\n\n // Loop through any assigned audio nodes and unlock them.\n for (var i=0; i= 55.\n if (typeof self.ctx.resume === 'function') {\n self.ctx.resume();\n }\n\n // Setup a timeout to check that we are unlocked on the next event loop.\n source.onended = function() {\n source.disconnect(0);\n\n // Update the unlocked state and prevent this check from happening again.\n self._audioUnlocked = true;\n\n // Remove the touch start listener.\n document.removeEventListener('touchstart', unlock, true);\n document.removeEventListener('touchend', unlock, true);\n document.removeEventListener('click', unlock, true);\n document.removeEventListener('keydown', unlock, true);\n\n // Let all sounds know that audio has been unlocked.\n for (var i=0; i 0 ? sound._seek : self._sprite[sprite][0] / 1000);\n var duration = Math.max(0, ((self._sprite[sprite][0] + self._sprite[sprite][1]) / 1000) - seek);\n var timeout = (duration * 1000) / Math.abs(sound._rate);\n var start = self._sprite[sprite][0] / 1000;\n var stop = (self._sprite[sprite][0] + self._sprite[sprite][1]) / 1000;\n sound._sprite = sprite;\n\n // Mark the sound as ended instantly so that this async playback\n // doesn't get grabbed by another call to play while this one waits to start.\n sound._ended = false;\n\n // Update the parameters of the sound.\n var setParams = function() {\n sound._paused = false;\n sound._seek = seek;\n sound._start = start;\n sound._stop = stop;\n sound._loop = !!(sound._loop || self._sprite[sprite][2]);\n };\n\n // End the sound instantly if seek is at the end.\n if (seek >= stop) {\n self._ended(sound);\n return;\n }\n\n // Begin the actual playback.\n var node = sound._node;\n if (self._webAudio) {\n // Fire this when the sound is ready to play to begin Web Audio playback.\n var playWebAudio = function() {\n self._playLock = false;\n setParams();\n self._refreshBuffer(sound);\n\n // Setup the playback params.\n var vol = (sound._muted || self._muted) ? 0 : sound._volume;\n node.gain.setValueAtTime(vol, Howler.ctx.currentTime);\n sound._playStart = Howler.ctx.currentTime;\n\n // Play the sound using the supported method.\n if (typeof node.bufferSource.start === 'undefined') {\n sound._loop ? node.bufferSource.noteGrainOn(0, seek, 86400) : node.bufferSource.noteGrainOn(0, seek, duration);\n } else {\n sound._loop ? node.bufferSource.start(0, seek, 86400) : node.bufferSource.start(0, seek, duration);\n }\n\n // Start a new timer if none is present.\n if (timeout !== Infinity) {\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n }\n\n if (!internal) {\n setTimeout(function() {\n self._emit('play', sound._id);\n self._loadQueue();\n }, 0);\n }\n };\n\n if (Howler.state === 'running' && Howler.ctx.state !== 'interrupted') {\n playWebAudio();\n } else {\n self._playLock = true;\n\n // Wait for the audio context to resume before playing.\n self.once('resume', playWebAudio);\n\n // Cancel the end timer.\n self._clearTimer(sound._id);\n }\n } else {\n // Fire this when the sound is ready to play to begin HTML5 Audio playback.\n var playHtml5 = function() {\n node.currentTime = seek;\n node.muted = sound._muted || self._muted || Howler._muted || node.muted;\n node.volume = sound._volume * Howler.volume();\n node.playbackRate = sound._rate;\n\n // Some browsers will throw an error if this is called without user interaction.\n try {\n var play = node.play();\n\n // Support older browsers that don't support promises, and thus don't have this issue.\n if (play && typeof Promise !== 'undefined' && (play instanceof Promise || typeof play.then === 'function')) {\n // Implements a lock to prevent DOMException: The play() request was interrupted by a call to pause().\n self._playLock = true;\n\n // Set param values immediately.\n setParams();\n\n // Releases the lock and executes queued actions.\n play\n .then(function() {\n self._playLock = false;\n node._unlocked = true;\n if (!internal) {\n self._emit('play', sound._id);\n } else {\n self._loadQueue();\n }\n })\n .catch(function() {\n self._playLock = false;\n self._emit('playerror', sound._id, 'Playback was unable to start. This is most commonly an issue ' +\n 'on mobile devices and Chrome where playback was not within a user interaction.');\n\n // Reset the ended and paused values.\n sound._ended = true;\n sound._paused = true;\n });\n } else if (!internal) {\n self._playLock = false;\n setParams();\n self._emit('play', sound._id);\n }\n\n // Setting rate before playing won't work in IE, so we set it again here.\n node.playbackRate = sound._rate;\n\n // If the node is still paused, then we can assume there was a playback issue.\n if (node.paused) {\n self._emit('playerror', sound._id, 'Playback was unable to start. This is most commonly an issue ' +\n 'on mobile devices and Chrome where playback was not within a user interaction.');\n return;\n }\n\n // Setup the end timer on sprites or listen for the ended event.\n if (sprite !== '__default' || sound._loop) {\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n } else {\n self._endTimers[sound._id] = function() {\n // Fire ended on this audio node.\n self._ended(sound);\n\n // Clear this listener.\n node.removeEventListener('ended', self._endTimers[sound._id], false);\n };\n node.addEventListener('ended', self._endTimers[sound._id], false);\n }\n } catch (err) {\n self._emit('playerror', sound._id, err);\n }\n };\n\n // If this is streaming audio, make sure the src is set and load again.\n if (node.src === 'data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA') {\n node.src = self._src;\n node.load();\n }\n\n // Play immediately if ready, or wait for the 'canplaythrough'e vent.\n var loadedNoReadyState = (window && window.ejecta) || (!node.readyState && Howler._navigator.isCocoonJS);\n if (node.readyState >= 3 || loadedNoReadyState) {\n playHtml5();\n } else {\n self._playLock = true;\n self._state = 'loading';\n\n var listener = function() {\n self._state = 'loaded';\n \n // Begin playback.\n playHtml5();\n\n // Clear this listener.\n node.removeEventListener(Howler._canPlayEvent, listener, false);\n };\n node.addEventListener(Howler._canPlayEvent, listener, false);\n\n // Cancel the end timer.\n self._clearTimer(sound._id);\n }\n }\n\n return sound._id;\n },\n\n /**\n * Pause playback and save current position.\n * @param {Number} id The sound ID (empty to pause all in group).\n * @return {Howl}\n */\n pause: function(id) {\n var self = this;\n\n // If the sound hasn't loaded or a play() promise is pending, add it to the load queue to pause when capable.\n if (self._state !== 'loaded' || self._playLock) {\n self._queue.push({\n event: 'pause',\n action: function() {\n self.pause(id);\n }\n });\n\n return self;\n }\n\n // If no id is passed, get all ID's to be paused.\n var ids = self._getSoundIds(id);\n\n for (var i=0; i Returns the group's volume value.\n * volume(id) -> Returns the sound id's current volume.\n * volume(vol) -> Sets the volume of all sounds in this Howl group.\n * volume(vol, id) -> Sets the volume of passed sound id.\n * @return {Howl/Number} Returns self or current volume.\n */\n volume: function() {\n var self = this;\n var args = arguments;\n var vol, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // Return the value of the groups' volume.\n return self._volume;\n } else if (args.length === 1 || args.length === 2 && typeof args[1] === 'undefined') {\n // First check if this is an ID, and if not, assume it is a new volume.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else {\n vol = parseFloat(args[0]);\n }\n } else if (args.length >= 2) {\n vol = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // Update the volume or return the current volume.\n var sound;\n if (typeof vol !== 'undefined' && vol >= 0 && vol <= 1) {\n // If the sound hasn't loaded, add it to the load queue to change volume when capable.\n if (self._state !== 'loaded'|| self._playLock) {\n self._queue.push({\n event: 'volume',\n action: function() {\n self.volume.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Set the group volume.\n if (typeof id === 'undefined') {\n self._volume = vol;\n }\n\n // Update one or all volumes.\n id = self._getSoundIds(id);\n for (var i=0; i 0) ? len / steps : len);\n var lastTick = Date.now();\n\n // Store the value being faded to.\n sound._fadeTo = to;\n\n // Update the volume value on each interval tick.\n sound._interval = setInterval(function() {\n // Update the volume based on the time since the last tick.\n var tick = (Date.now() - lastTick) / len;\n lastTick = Date.now();\n vol += diff * tick;\n\n // Round to within 2 decimal points.\n vol = Math.round(vol * 100) / 100;\n\n // Make sure the volume is in the right bounds.\n if (diff < 0) {\n vol = Math.max(to, vol);\n } else {\n vol = Math.min(to, vol);\n }\n\n // Change the volume.\n if (self._webAudio) {\n sound._volume = vol;\n } else {\n self.volume(vol, sound._id, true);\n }\n\n // Set the group's volume.\n if (isGroup) {\n self._volume = vol;\n }\n\n // When the fade is complete, stop it and fire event.\n if ((to < from && vol <= to) || (to > from && vol >= to)) {\n clearInterval(sound._interval);\n sound._interval = null;\n sound._fadeTo = null;\n self.volume(to, sound._id);\n self._emit('fade', sound._id);\n }\n }, stepLen);\n },\n\n /**\n * Internal method that stops the currently playing fade when\n * a new fade starts, volume is changed or the sound is stopped.\n * @param {Number} id The sound id.\n * @return {Howl}\n */\n _stopFade: function(id) {\n var self = this;\n var sound = self._soundById(id);\n\n if (sound && sound._interval) {\n if (self._webAudio) {\n sound._node.gain.cancelScheduledValues(Howler.ctx.currentTime);\n }\n\n clearInterval(sound._interval);\n sound._interval = null;\n self.volume(sound._fadeTo, id);\n sound._fadeTo = null;\n self._emit('fade', id);\n }\n\n return self;\n },\n\n /**\n * Get/set the loop parameter on a sound. This method can optionally take 0, 1 or 2 arguments.\n * loop() -> Returns the group's loop value.\n * loop(id) -> Returns the sound id's loop value.\n * loop(loop) -> Sets the loop value for all sounds in this Howl group.\n * loop(loop, id) -> Sets the loop value of passed sound id.\n * @return {Howl/Boolean} Returns self or current loop value.\n */\n loop: function() {\n var self = this;\n var args = arguments;\n var loop, id, sound;\n\n // Determine the values for loop and id.\n if (args.length === 0) {\n // Return the grou's loop value.\n return self._loop;\n } else if (args.length === 1) {\n if (typeof args[0] === 'boolean') {\n loop = args[0];\n self._loop = loop;\n } else {\n // Return this sound's loop value.\n sound = self._soundById(parseInt(args[0], 10));\n return sound ? sound._loop : false;\n }\n } else if (args.length === 2) {\n loop = args[0];\n id = parseInt(args[1], 10);\n }\n\n // If no id is passed, get all ID's to be looped.\n var ids = self._getSoundIds(id);\n for (var i=0; i Returns the first sound node's current playback rate.\n * rate(id) -> Returns the sound id's current playback rate.\n * rate(rate) -> Sets the playback rate of all sounds in this Howl group.\n * rate(rate, id) -> Sets the playback rate of passed sound id.\n * @return {Howl/Number} Returns self or the current playback rate.\n */\n rate: function() {\n var self = this;\n var args = arguments;\n var rate, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // We will simply return the current rate of the first node.\n id = self._sounds[0]._id;\n } else if (args.length === 1) {\n // First check if this is an ID, and if not, assume it is a new rate value.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else {\n rate = parseFloat(args[0]);\n }\n } else if (args.length === 2) {\n rate = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // Update the playback rate or return the current value.\n var sound;\n if (typeof rate === 'number') {\n // If the sound hasn't loaded, add it to the load queue to change playback rate when capable.\n if (self._state !== 'loaded' || self._playLock) {\n self._queue.push({\n event: 'rate',\n action: function() {\n self.rate.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Set the group rate.\n if (typeof id === 'undefined') {\n self._rate = rate;\n }\n\n // Update one or all volumes.\n id = self._getSoundIds(id);\n for (var i=0; i Returns the first sound node's current seek position.\n * seek(id) -> Returns the sound id's current seek position.\n * seek(seek) -> Sets the seek position of the first sound node.\n * seek(seek, id) -> Sets the seek position of passed sound id.\n * @return {Howl/Number} Returns self or the current seek position.\n */\n seek: function() {\n var self = this;\n var args = arguments;\n var seek, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // We will simply return the current position of the first node.\n if (self._sounds.length) {\n id = self._sounds[0]._id;\n }\n } else if (args.length === 1) {\n // First check if this is an ID, and if not, assume it is a new seek position.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else if (self._sounds.length) {\n id = self._sounds[0]._id;\n seek = parseFloat(args[0]);\n }\n } else if (args.length === 2) {\n seek = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // If there is no ID, bail out.\n if (typeof id === 'undefined') {\n return 0;\n }\n\n // If the sound hasn't loaded, add it to the load queue to seek when capable.\n if (typeof seek === 'number' && (self._state !== 'loaded' || self._playLock)) {\n self._queue.push({\n event: 'seek',\n action: function() {\n self.seek.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Get the sound.\n var sound = self._soundById(id);\n\n if (sound) {\n if (typeof seek === 'number' && seek >= 0) {\n // Pause the sound and update position for restarting playback.\n var playing = self.playing(id);\n if (playing) {\n self.pause(id, true);\n }\n\n // Move the position of the track and cancel timer.\n sound._seek = seek;\n sound._ended = false;\n self._clearTimer(id);\n\n // Update the seek position for HTML5 Audio.\n if (!self._webAudio && sound._node && !isNaN(sound._node.duration)) {\n sound._node.currentTime = seek;\n }\n\n // Seek and emit when ready.\n var seekAndEmit = function() {\n // Restart the playback if the sound was playing.\n if (playing) {\n self.play(id, true);\n }\n\n self._emit('seek', id);\n };\n\n // Wait for the play lock to be unset before emitting (HTML5 Audio).\n if (playing && !self._webAudio) {\n var emitSeek = function() {\n if (!self._playLock) {\n seekAndEmit();\n } else {\n setTimeout(emitSeek, 0);\n }\n };\n setTimeout(emitSeek, 0);\n } else {\n seekAndEmit();\n }\n } else {\n if (self._webAudio) {\n var realTime = self.playing(id) ? Howler.ctx.currentTime - sound._playStart : 0;\n var rateSeek = sound._rateSeek ? sound._rateSeek - sound._seek : 0;\n return sound._seek + (rateSeek + realTime * Math.abs(sound._rate));\n } else {\n return sound._node.currentTime;\n }\n }\n }\n\n return self;\n },\n\n /**\n * Check if a specific sound is currently playing or not (if id is provided), or check if at least one of the sounds in the group is playing or not.\n * @param {Number} id The sound id to check. If none is passed, the whole sound group is checked.\n * @return {Boolean} True if playing and false if not.\n */\n playing: function(id) {\n var self = this;\n\n // Check the passed sound ID (if any).\n if (typeof id === 'number') {\n var sound = self._soundById(id);\n return sound ? !sound._paused : false;\n }\n\n // Otherwise, loop through all sounds and check if any are playing.\n for (var i=0; i= 0) {\n Howler._howls.splice(index, 1);\n }\n\n // Delete this sound from the cache (if no other Howl is using it).\n var remCache = true;\n for (i=0; i= 0) {\n remCache = false;\n break;\n }\n }\n\n if (cache && remCache) {\n delete cache[self._src];\n }\n\n // Clear global errors.\n Howler.noAudio = false;\n\n // Clear out `self`.\n self._state = 'unloaded';\n self._sounds = [];\n self = null;\n\n return null;\n },\n\n /**\n * Listen to a custom event.\n * @param {String} event Event name.\n * @param {Function} fn Listener to call.\n * @param {Number} id (optional) Only listen to events for this sound.\n * @param {Number} once (INTERNAL) Marks event to fire only once.\n * @return {Howl}\n */\n on: function(event, fn, id, once) {\n var self = this;\n var events = self['_on' + event];\n\n if (typeof fn === 'function') {\n events.push(once ? {id: id, fn: fn, once: once} : {id: id, fn: fn});\n }\n\n return self;\n },\n\n /**\n * Remove a custom event. Call without parameters to remove all events.\n * @param {String} event Event name.\n * @param {Function} fn Listener to remove. Leave empty to remove all.\n * @param {Number} id (optional) Only remove events for this sound.\n * @return {Howl}\n */\n off: function(event, fn, id) {\n var self = this;\n var events = self['_on' + event];\n var i = 0;\n\n // Allow passing just an event and ID.\n if (typeof fn === 'number') {\n id = fn;\n fn = null;\n }\n\n if (fn || id) {\n // Loop through event store and remove the passed function.\n for (i=0; i=0; i--) {\n // Only fire the listener if the correct ID is used.\n if (!events[i].id || events[i].id === id || event === 'load') {\n setTimeout(function(fn) {\n fn.call(this, id, msg);\n }.bind(self, events[i].fn), 0);\n\n // If this event was setup with `once`, remove it.\n if (events[i].once) {\n self.off(event, events[i].fn, events[i].id);\n }\n }\n }\n\n // Pass the event type into load queue so that it can continue stepping.\n self._loadQueue(event);\n\n return self;\n },\n\n /**\n * Queue of actions initiated before the sound has loaded.\n * These will be called in sequence, with the next only firing\n * after the previous has finished executing (even if async like play).\n * @return {Howl}\n */\n _loadQueue: function(event) {\n var self = this;\n\n if (self._queue.length > 0) {\n var task = self._queue[0];\n\n // Remove this task if a matching event was passed.\n if (task.event === event) {\n self._queue.shift();\n self._loadQueue();\n }\n\n // Run the task if no event type is passed.\n if (!event) {\n task.action();\n }\n }\n\n return self;\n },\n\n /**\n * Fired when playback ends at the end of the duration.\n * @param {Sound} sound The sound object to work with.\n * @return {Howl}\n */\n _ended: function(sound) {\n var self = this;\n var sprite = sound._sprite;\n\n // If we are using IE and there was network latency we may be clipping\n // audio before it completes playing. Lets check the node to make sure it\n // believes it has completed, before ending the playback.\n if (!self._webAudio && sound._node && !sound._node.paused && !sound._node.ended && sound._node.currentTime < sound._stop) {\n setTimeout(self._ended.bind(self, sound), 100);\n return self;\n }\n\n // Should this sound loop?\n var loop = !!(sound._loop || self._sprite[sprite][2]);\n\n // Fire the ended event.\n self._emit('end', sound._id);\n\n // Restart the playback for HTML5 Audio loop.\n if (!self._webAudio && loop) {\n self.stop(sound._id, true).play(sound._id);\n }\n\n // Restart this timer if on a Web Audio loop.\n if (self._webAudio && loop) {\n self._emit('play', sound._id);\n sound._seek = sound._start || 0;\n sound._rateSeek = 0;\n sound._playStart = Howler.ctx.currentTime;\n\n var timeout = ((sound._stop - sound._start) * 1000) / Math.abs(sound._rate);\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n }\n\n // Mark the node as paused.\n if (self._webAudio && !loop) {\n sound._paused = true;\n sound._ended = true;\n sound._seek = sound._start || 0;\n sound._rateSeek = 0;\n self._clearTimer(sound._id);\n\n // Clean up the buffer source.\n self._cleanBuffer(sound._node);\n\n // Attempt to auto-suspend AudioContext if no sounds are still playing.\n Howler._autoSuspend();\n }\n\n // When using a sprite, end the track.\n if (!self._webAudio && !loop) {\n self.stop(sound._id, true);\n }\n\n return self;\n },\n\n /**\n * Clear the end timer for a sound playback.\n * @param {Number} id The sound ID.\n * @return {Howl}\n */\n _clearTimer: function(id) {\n var self = this;\n\n if (self._endTimers[id]) {\n // Clear the timeout or remove the ended listener.\n if (typeof self._endTimers[id] !== 'function') {\n clearTimeout(self._endTimers[id]);\n } else {\n var sound = self._soundById(id);\n if (sound && sound._node) {\n sound._node.removeEventListener('ended', self._endTimers[id], false);\n }\n }\n\n delete self._endTimers[id];\n }\n\n return self;\n },\n\n /**\n * Return the sound identified by this ID, or return null.\n * @param {Number} id Sound ID\n * @return {Object} Sound object or null.\n */\n _soundById: function(id) {\n var self = this;\n\n // Loop through all sounds and find the one with this ID.\n for (var i=0; i=0; i--) {\n if (cnt <= limit) {\n return;\n }\n\n if (self._sounds[i]._ended) {\n // Disconnect the audio source when using Web Audio.\n if (self._webAudio && self._sounds[i]._node) {\n self._sounds[i]._node.disconnect(0);\n }\n\n // Remove sounds until we have the pool size.\n self._sounds.splice(i, 1);\n cnt--;\n }\n }\n },\n\n /**\n * Get all ID's from the sounds pool.\n * @param {Number} id Only return one ID if one is passed.\n * @return {Array} Array of IDs.\n */\n _getSoundIds: function(id) {\n var self = this;\n\n if (typeof id === 'undefined') {\n var ids = [];\n for (var i=0; i= 0;\n\n if (Howler._scratchBuffer && node.bufferSource) {\n node.bufferSource.onended = null;\n node.bufferSource.disconnect(0);\n if (isIOS) {\n try { node.bufferSource.buffer = Howler._scratchBuffer; } catch(e) {}\n }\n }\n node.bufferSource = null;\n\n return self;\n },\n\n /**\n * Set the source to a 0-second silence to stop any downloading (except in IE).\n * @param {Object} node Audio node to clear.\n */\n _clearSound: function(node) {\n var checkIE = /MSIE |Trident\\//.test(Howler._navigator && Howler._navigator.userAgent);\n if (!checkIE) {\n node.src = 'data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA';\n }\n }\n };\n\n /** Single Sound Methods **/\n /***************************************************************************/\n\n /**\n * Setup the sound object, which each node attached to a Howl group is contained in.\n * @param {Object} howl The Howl parent group.\n */\n var Sound = function(howl) {\n this._parent = howl;\n this.init();\n };\n Sound.prototype = {\n /**\n * Initialize a new Sound object.\n * @return {Sound}\n */\n init: function() {\n var self = this;\n var parent = self._parent;\n\n // Setup the default parameters.\n self._muted = parent._muted;\n self._loop = parent._loop;\n self._volume = parent._volume;\n self._rate = parent._rate;\n self._seek = 0;\n self._paused = true;\n self._ended = true;\n self._sprite = '__default';\n\n // Generate a unique ID for this sound.\n self._id = ++Howler._counter;\n\n // Add itself to the parent's pool.\n parent._sounds.push(self);\n\n // Create the new node.\n self.create();\n\n return self;\n },\n\n /**\n * Create and setup a new sound object, whether HTML5 Audio or Web Audio.\n * @return {Sound}\n */\n create: function() {\n var self = this;\n var parent = self._parent;\n var volume = (Howler._muted || self._muted || self._parent._muted) ? 0 : self._volume;\n\n if (parent._webAudio) {\n // Create the gain node for controlling volume (the source will connect to this).\n self._node = (typeof Howler.ctx.createGain === 'undefined') ? Howler.ctx.createGainNode() : Howler.ctx.createGain();\n self._node.gain.setValueAtTime(volume, Howler.ctx.currentTime);\n self._node.paused = true;\n self._node.connect(Howler.masterGain);\n } else if (!Howler.noAudio) {\n // Get an unlocked Audio object from the pool.\n self._node = Howler._obtainHtml5Audio();\n\n // Listen for errors (http://dev.w3.org/html5/spec-author-view/spec.html#mediaerror).\n self._errorFn = self._errorListener.bind(self);\n self._node.addEventListener('error', self._errorFn, false);\n\n // Listen for 'canplaythrough' event to let us know the sound is ready.\n self._loadFn = self._loadListener.bind(self);\n self._node.addEventListener(Howler._canPlayEvent, self._loadFn, false);\n\n // Listen for the 'ended' event on the sound to account for edge-case where\n // a finite sound has a duration of Infinity.\n self._endFn = self._endListener.bind(self);\n self._node.addEventListener('ended', self._endFn, false);\n\n // Setup the new audio node.\n self._node.src = parent._src;\n self._node.preload = parent._preload === true ? 'auto' : parent._preload;\n self._node.volume = volume * Howler.volume();\n\n // Begin loading the source.\n self._node.load();\n }\n\n return self;\n },\n\n /**\n * Reset the parameters of this sound to the original state (for recycle).\n * @return {Sound}\n */\n reset: function() {\n var self = this;\n var parent = self._parent;\n\n // Reset all of the parameters of this sound.\n self._muted = parent._muted;\n self._loop = parent._loop;\n self._volume = parent._volume;\n self._rate = parent._rate;\n self._seek = 0;\n self._rateSeek = 0;\n self._paused = true;\n self._ended = true;\n self._sprite = '__default';\n\n // Generate a new ID so that it isn't confused with the previous sound.\n self._id = ++Howler._counter;\n\n return self;\n },\n\n /**\n * HTML5 Audio error listener callback.\n */\n _errorListener: function() {\n var self = this;\n\n // Fire an error event and pass back the code.\n self._parent._emit('loaderror', self._id, self._node.error ? self._node.error.code : 0);\n\n // Clear the event listener.\n self._node.removeEventListener('error', self._errorFn, false);\n },\n\n /**\n * HTML5 Audio canplaythrough listener callback.\n */\n _loadListener: function() {\n var self = this;\n var parent = self._parent;\n\n // Round up the duration to account for the lower precision in HTML5 Audio.\n parent._duration = Math.ceil(self._node.duration * 10) / 10;\n\n // Setup a sprite if none is defined.\n if (Object.keys(parent._sprite).length === 0) {\n parent._sprite = {__default: [0, parent._duration * 1000]};\n }\n\n if (parent._state !== 'loaded') {\n parent._state = 'loaded';\n parent._emit('load');\n parent._loadQueue();\n }\n\n // Clear the event listener.\n self._node.removeEventListener(Howler._canPlayEvent, self._loadFn, false);\n },\n\n /**\n * HTML5 Audio ended listener callback.\n */\n _endListener: function() {\n var self = this;\n var parent = self._parent;\n\n // Only handle the `ended`` event if the duration is Infinity.\n if (parent._duration === Infinity) {\n // Update the parent duration to match the real audio duration.\n // Round up the duration to account for the lower precision in HTML5 Audio.\n parent._duration = Math.ceil(self._node.duration * 10) / 10;\n\n // Update the sprite that corresponds to the real duration.\n if (parent._sprite.__default[1] === Infinity) {\n parent._sprite.__default[1] = parent._duration * 1000;\n }\n\n // Run the regular ended method.\n parent._ended(self);\n }\n\n // Clear the event listener since the duration is now correct.\n self._node.removeEventListener('ended', self._endFn, false);\n }\n };\n\n /** Helper Methods **/\n /***************************************************************************/\n\n var cache = {};\n\n /**\n * Buffer a sound from URL, Data URI or cache and decode to audio source (Web Audio API).\n * @param {Howl} self\n */\n var loadBuffer = function(self) {\n var url = self._src;\n\n // Check if the buffer has already been cached and use it instead.\n if (cache[url]) {\n // Set the duration from the cache.\n self._duration = cache[url].duration;\n\n // Load the sound into this Howl.\n loadSound(self);\n\n return;\n }\n\n if (/^data:[^;]+;base64,/.test(url)) {\n // Decode the base64 data URI without XHR, since some browsers don't support it.\n var data = atob(url.split(',')[1]);\n var dataView = new Uint8Array(data.length);\n for (var i=0; i 0) {\n cache[self._src] = buffer;\n loadSound(self, buffer);\n } else {\n error();\n }\n };\n\n // Decode the buffer into an audio source.\n if (typeof Promise !== 'undefined' && Howler.ctx.decodeAudioData.length === 1) {\n Howler.ctx.decodeAudioData(arraybuffer).then(success).catch(error);\n } else {\n Howler.ctx.decodeAudioData(arraybuffer, success, error);\n }\n }\n\n /**\n * Sound is now loaded, so finish setting everything up and fire the loaded event.\n * @param {Howl} self\n * @param {Object} buffer The decoded buffer sound source.\n */\n var loadSound = function(self, buffer) {\n // Set the duration.\n if (buffer && !self._duration) {\n self._duration = buffer.duration;\n }\n\n // Setup a sprite if none is defined.\n if (Object.keys(self._sprite).length === 0) {\n self._sprite = {__default: [0, self._duration * 1000]};\n }\n\n // Fire the loaded event.\n if (self._state !== 'loaded') {\n self._state = 'loaded';\n self._emit('load');\n self._loadQueue();\n }\n };\n\n /**\n * Setup the audio context when available, or switch to HTML5 Audio mode.\n */\n var setupAudioContext = function() {\n // If we have already detected that Web Audio isn't supported, don't run this step again.\n if (!Howler.usingWebAudio) {\n return;\n }\n\n // Check if we are using Web Audio and setup the AudioContext if we are.\n try {\n if (typeof AudioContext !== 'undefined') {\n Howler.ctx = new AudioContext();\n } else if (typeof webkitAudioContext !== 'undefined') {\n Howler.ctx = new webkitAudioContext();\n } else {\n Howler.usingWebAudio = false;\n }\n } catch(e) {\n Howler.usingWebAudio = false;\n }\n\n // If the audio context creation still failed, set using web audio to false.\n if (!Howler.ctx) {\n Howler.usingWebAudio = false;\n }\n\n // Check if a webview is being used on iOS8 or earlier (rather than the browser).\n // If it is, disable Web Audio as it causes crashing.\n var iOS = (/iP(hone|od|ad)/.test(Howler._navigator && Howler._navigator.platform));\n var appVersion = Howler._navigator && Howler._navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n var version = appVersion ? parseInt(appVersion[1], 10) : null;\n if (iOS && version && version < 9) {\n var safari = /safari/.test(Howler._navigator && Howler._navigator.userAgent.toLowerCase());\n if (Howler._navigator && !safari) {\n Howler.usingWebAudio = false;\n }\n }\n\n // Create and expose the master GainNode when using Web Audio (useful for plugins or advanced usage).\n if (Howler.usingWebAudio) {\n Howler.masterGain = (typeof Howler.ctx.createGain === 'undefined') ? Howler.ctx.createGainNode() : Howler.ctx.createGain();\n Howler.masterGain.gain.setValueAtTime(Howler._muted ? 0 : Howler._volume, Howler.ctx.currentTime);\n Howler.masterGain.connect(Howler.ctx.destination);\n }\n\n // Re-run the setup on Howler.\n Howler._setup();\n };\n\n // Add support for AMD (Asynchronous Module Definition) libraries such as require.js.\n if (typeof define === 'function' && define.amd) {\n define([], function() {\n return {\n Howler: Howler,\n Howl: Howl\n };\n });\n }\n\n // Add support for CommonJS libraries such as browserify.\n if (typeof exports !== 'undefined') {\n exports.Howler = Howler;\n exports.Howl = Howl;\n }\n\n // Add to global in Node.js (for testing, etc).\n if (typeof global !== 'undefined') {\n global.HowlerGlobal = HowlerGlobal;\n global.Howler = Howler;\n global.Howl = Howl;\n global.Sound = Sound;\n } else if (typeof window !== 'undefined') { // Define globally in case AMD is not available or unused.\n window.HowlerGlobal = HowlerGlobal;\n window.Howler = Howler;\n window.Howl = Howl;\n window.Sound = Sound;\n }\n})();\n\n\n/*!\n * Spatial Plugin - Adds support for stereo and 3D audio where Web Audio is supported.\n * \n * howler.js v2.2.3\n * howlerjs.com\n *\n * (c) 2013-2020, James Simpson of GoldFire Studios\n * goldfirestudios.com\n *\n * MIT License\n */\n\n(function() {\n\n 'use strict';\n\n // Setup default properties.\n HowlerGlobal.prototype._pos = [0, 0, 0];\n HowlerGlobal.prototype._orientation = [0, 0, -1, 0, 1, 0];\n\n /** Global Methods **/\n /***************************************************************************/\n\n /**\n * Helper method to update the stereo panning position of all current Howls.\n * Future Howls will not use this value unless explicitly set.\n * @param {Number} pan A value of -1.0 is all the way left and 1.0 is all the way right.\n * @return {Howler/Number} Self or current stereo panning value.\n */\n HowlerGlobal.prototype.stereo = function(pan) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Loop through all Howls and update their stereo panning.\n for (var i=self._howls.length-1; i>=0; i--) {\n self._howls[i].stereo(pan);\n }\n\n return self;\n };\n\n /**\n * Get/set the position of the listener in 3D cartesian space. Sounds using\n * 3D position will be relative to the listener's position.\n * @param {Number} x The x-position of the listener.\n * @param {Number} y The y-position of the listener.\n * @param {Number} z The z-position of the listener.\n * @return {Howler/Array} Self or current listener position.\n */\n HowlerGlobal.prototype.pos = function(x, y, z) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Set the defaults for optional 'y' & 'z'.\n y = (typeof y !== 'number') ? self._pos[1] : y;\n z = (typeof z !== 'number') ? self._pos[2] : z;\n\n if (typeof x === 'number') {\n self._pos = [x, y, z];\n\n if (typeof self.ctx.listener.positionX !== 'undefined') {\n self.ctx.listener.positionX.setTargetAtTime(self._pos[0], Howler.ctx.currentTime, 0.1);\n self.ctx.listener.positionY.setTargetAtTime(self._pos[1], Howler.ctx.currentTime, 0.1);\n self.ctx.listener.positionZ.setTargetAtTime(self._pos[2], Howler.ctx.currentTime, 0.1);\n } else {\n self.ctx.listener.setPosition(self._pos[0], self._pos[1], self._pos[2]);\n }\n } else {\n return self._pos;\n }\n\n return self;\n };\n\n /**\n * Get/set the direction the listener is pointing in the 3D cartesian space.\n * A front and up vector must be provided. The front is the direction the\n * face of the listener is pointing, and up is the direction the top of the\n * listener is pointing. Thus, these values are expected to be at right angles\n * from each other.\n * @param {Number} x The x-orientation of the listener.\n * @param {Number} y The y-orientation of the listener.\n * @param {Number} z The z-orientation of the listener.\n * @param {Number} xUp The x-orientation of the top of the listener.\n * @param {Number} yUp The y-orientation of the top of the listener.\n * @param {Number} zUp The z-orientation of the top of the listener.\n * @return {Howler/Array} Returns self or the current orientation vectors.\n */\n HowlerGlobal.prototype.orientation = function(x, y, z, xUp, yUp, zUp) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Set the defaults for optional 'y' & 'z'.\n var or = self._orientation;\n y = (typeof y !== 'number') ? or[1] : y;\n z = (typeof z !== 'number') ? or[2] : z;\n xUp = (typeof xUp !== 'number') ? or[3] : xUp;\n yUp = (typeof yUp !== 'number') ? or[4] : yUp;\n zUp = (typeof zUp !== 'number') ? or[5] : zUp;\n\n if (typeof x === 'number') {\n self._orientation = [x, y, z, xUp, yUp, zUp];\n\n if (typeof self.ctx.listener.forwardX !== 'undefined') {\n self.ctx.listener.forwardX.setTargetAtTime(x, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.forwardY.setTargetAtTime(y, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.forwardZ.setTargetAtTime(z, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upX.setTargetAtTime(xUp, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upY.setTargetAtTime(yUp, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upZ.setTargetAtTime(zUp, Howler.ctx.currentTime, 0.1);\n } else {\n self.ctx.listener.setOrientation(x, y, z, xUp, yUp, zUp);\n }\n } else {\n return or;\n }\n\n return self;\n };\n\n /** Group Methods **/\n /***************************************************************************/\n\n /**\n * Add new properties to the core init.\n * @param {Function} _super Core init method.\n * @return {Howl}\n */\n Howl.prototype.init = (function(_super) {\n return function(o) {\n var self = this;\n\n // Setup user-defined default properties.\n self._orientation = o.orientation || [1, 0, 0];\n self._stereo = o.stereo || null;\n self._pos = o.pos || null;\n self._pannerAttr = {\n coneInnerAngle: typeof o.coneInnerAngle !== 'undefined' ? o.coneInnerAngle : 360,\n coneOuterAngle: typeof o.coneOuterAngle !== 'undefined' ? o.coneOuterAngle : 360,\n coneOuterGain: typeof o.coneOuterGain !== 'undefined' ? o.coneOuterGain : 0,\n distanceModel: typeof o.distanceModel !== 'undefined' ? o.distanceModel : 'inverse',\n maxDistance: typeof o.maxDistance !== 'undefined' ? o.maxDistance : 10000,\n panningModel: typeof o.panningModel !== 'undefined' ? o.panningModel : 'HRTF',\n refDistance: typeof o.refDistance !== 'undefined' ? o.refDistance : 1,\n rolloffFactor: typeof o.rolloffFactor !== 'undefined' ? o.rolloffFactor : 1\n };\n\n // Setup event listeners.\n self._onstereo = o.onstereo ? [{fn: o.onstereo}] : [];\n self._onpos = o.onpos ? [{fn: o.onpos}] : [];\n self._onorientation = o.onorientation ? [{fn: o.onorientation}] : [];\n\n // Complete initilization with howler.js core's init function.\n return _super.call(this, o);\n };\n })(Howl.prototype.init);\n\n /**\n * Get/set the stereo panning of the audio source for this sound or all in the group.\n * @param {Number} pan A value of -1.0 is all the way left and 1.0 is all the way right.\n * @param {Number} id (optional) The sound ID. If none is passed, all in group will be updated.\n * @return {Howl/Number} Returns self or the current stereo panning value.\n */\n Howl.prototype.stereo = function(pan, id) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self._webAudio) {\n return self;\n }\n\n // If the sound hasn't loaded, add it to the load queue to change stereo pan when capable.\n if (self._state !== 'loaded') {\n self._queue.push({\n event: 'stereo',\n action: function() {\n self.stereo(pan, id);\n }\n });\n\n return self;\n }\n\n // Check for PannerStereoNode support and fallback to PannerNode if it doesn't exist.\n var pannerType = (typeof Howler.ctx.createStereoPanner === 'undefined') ? 'spatial' : 'stereo';\n\n // Setup the group's stereo panning if no ID is passed.\n if (typeof id === 'undefined') {\n // Return the group's stereo panning if no parameters are passed.\n if (typeof pan === 'number') {\n self._stereo = pan;\n self._pos = [pan, 0, 0];\n } else {\n return self._stereo;\n }\n }\n\n // Change the streo panning of one or all sounds in group.\n var ids = self._getSoundIds(id);\n for (var i=0; i Returns the group's values.\n * pannerAttr(id) -> Returns the sound id's values.\n * pannerAttr(o) -> Set's the values of all sounds in this Howl group.\n * pannerAttr(o, id) -> Set's the values of passed sound id.\n *\n * Attributes:\n * coneInnerAngle - (360 by default) A parameter for directional audio sources, this is an angle, in degrees,\n * inside of which there will be no volume reduction.\n * coneOuterAngle - (360 by default) A parameter for directional audio sources, this is an angle, in degrees,\n * outside of which the volume will be reduced to a constant value of `coneOuterGain`.\n * coneOuterGain - (0 by default) A parameter for directional audio sources, this is the gain outside of the\n * `coneOuterAngle`. It is a linear value in the range `[0, 1]`.\n * distanceModel - ('inverse' by default) Determines algorithm used to reduce volume as audio moves away from\n * listener. Can be `linear`, `inverse` or `exponential.\n * maxDistance - (10000 by default) The maximum distance between source and listener, after which the volume\n * will not be reduced any further.\n * refDistance - (1 by default) A reference distance for reducing volume as source moves further from the listener.\n * This is simply a variable of the distance model and has a different effect depending on which model\n * is used and the scale of your coordinates. Generally, volume will be equal to 1 at this distance.\n * rolloffFactor - (1 by default) How quickly the volume reduces as source moves from listener. This is simply a\n * variable of the distance model and can be in the range of `[0, 1]` with `linear` and `[0, ∞]`\n * with `inverse` and `exponential`.\n * panningModel - ('HRTF' by default) Determines which spatialization algorithm is used to position audio.\n * Can be `HRTF` or `equalpower`.\n *\n * @return {Howl/Object} Returns self or current panner attributes.\n */\n Howl.prototype.pannerAttr = function() {\n var self = this;\n var args = arguments;\n var o, id, sound;\n\n // Stop right here if not using Web Audio.\n if (!self._webAudio) {\n return self;\n }\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // Return the group's panner attribute values.\n return self._pannerAttr;\n } else if (args.length === 1) {\n if (typeof args[0] === 'object') {\n o = args[0];\n\n // Set the grou's panner attribute values.\n if (typeof id === 'undefined') {\n if (!o.pannerAttr) {\n o.pannerAttr = {\n coneInnerAngle: o.coneInnerAngle,\n coneOuterAngle: o.coneOuterAngle,\n coneOuterGain: o.coneOuterGain,\n distanceModel: o.distanceModel,\n maxDistance: o.maxDistance,\n refDistance: o.refDistance,\n rolloffFactor: o.rolloffFactor,\n panningModel: o.panningModel\n };\n }\n\n self._pannerAttr = {\n coneInnerAngle: typeof o.pannerAttr.coneInnerAngle !== 'undefined' ? o.pannerAttr.coneInnerAngle : self._coneInnerAngle,\n coneOuterAngle: typeof o.pannerAttr.coneOuterAngle !== 'undefined' ? o.pannerAttr.coneOuterAngle : self._coneOuterAngle,\n coneOuterGain: typeof o.pannerAttr.coneOuterGain !== 'undefined' ? o.pannerAttr.coneOuterGain : self._coneOuterGain,\n distanceModel: typeof o.pannerAttr.distanceModel !== 'undefined' ? o.pannerAttr.distanceModel : self._distanceModel,\n maxDistance: typeof o.pannerAttr.maxDistance !== 'undefined' ? o.pannerAttr.maxDistance : self._maxDistance,\n refDistance: typeof o.pannerAttr.refDistance !== 'undefined' ? o.pannerAttr.refDistance : self._refDistance,\n rolloffFactor: typeof o.pannerAttr.rolloffFactor !== 'undefined' ? o.pannerAttr.rolloffFactor : self._rolloffFactor,\n panningModel: typeof o.pannerAttr.panningModel !== 'undefined' ? o.pannerAttr.panningModel : self._panningModel\n };\n }\n } else {\n // Return this sound's panner attribute values.\n sound = self._soundById(parseInt(args[0], 10));\n return sound ? sound._pannerAttr : self._pannerAttr;\n }\n } else if (args.length === 2) {\n o = args[0];\n id = parseInt(args[1], 10);\n }\n\n // Update the values of the specified sounds.\n var ids = self._getSoundIds(id);\n for (var i=0; i\n \n\n\n\n\n\n","\nimport { IDisplayBarcodes, IProject } from 'smartbarcode-web-core/src/utils/types/index'\nimport { mixins, Options } from 'vue-class-component'\nimport { Prop } from 'vue-property-decorator'\nimport BarcodeKeyValueInfoMixin from './mixins/BarcodeKeyValueInfoMixin.vue'\nimport BarcodeLabel from '@/components/BarcodeLabel.vue'\nimport { addLabelToBarcode } from '@/utils/helpers'\n\n@Options({\n name: 'BarcodeLabelList',\n components: {\n BarcodeLabel,\n },\n})\nexport default class BarcodeLabelList extends mixins(BarcodeKeyValueInfoMixin) {\n @Prop({ type: Object }) readonly barcodes!: IDisplayBarcodes[]\n\n mounted() {\n addLabelToBarcode(this.barcodes, this.project)\n }\n\n get project(): IProject {\n return this.$store.state.project.details\n }\n}\n","import { render } from \"./BarcodeLabelList.vue?vue&type=template&id=0987fb0c&scoped=true\"\nimport script from \"./BarcodeLabelList.vue?vue&type=script&lang=ts\"\nexport * from \"./BarcodeLabelList.vue?vue&type=script&lang=ts\"\n\nimport \"./BarcodeLabelList.vue?vue&type=style&index=0&id=0987fb0c&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-0987fb0c\"\n\nexport default script","\n\n\n","import { render } from \"./ScanArea.vue?vue&type=template&id=2270e290&scoped=true\"\nconst script = {}\n\nimport \"./ScanArea.vue?vue&type=style&index=0&id=2270e290&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-2270e290\"\n\nexport default script","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ScanArea.vue?vue&type=style&index=0&id=2270e290&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./BarcodeLabelList.vue?vue&type=style&index=0&id=0987fb0c&lang=scss&scoped=true\""],"sourceRoot":""}