@brandbrigade/ott-bb-player 1.0.42 → 1.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENCE +29 -0
- package/README.md +266 -215
- package/dist/OTTPlayer.js +272 -0
- package/package.json +21 -7
- package/src/Ads.js +82 -0
- package/src/Augmentor.js +1288 -0
- package/src/Composer3DBase.js +754 -0
- package/src/Composer3DForMainThread.js +131 -0
- package/src/Composer3DForWorker.js +80 -0
- package/src/Composer3DWorker.js +60 -0
- package/src/MetaDataDecoder.js +143 -0
- package/src/MetaDataFetcher.js +88 -0
- package/src/OTTPlayer.js +254 -0
- package/src/Socket.js +44 -0
- package/src/composer_worker.js +30 -0
- package/src/configs/OTT_Dev_Config_Debug.json +8 -0
- package/src/configs/OTT_Dev_Config_Debug_14fps.json +8 -0
- package/src/configs/OTT_Dev_Config_Debug_29fps.json +8 -0
- package/src/configs/OTT_Dev_Config_Debug_General.json +7 -0
- package/src/enums/RenderingMode.js +5 -0
- package/src/enums/SyncMethod.js +5 -0
- package/src/index.js +239 -0
- package/src/meta_worker.js +144 -0
- package/src/shaders/v1.js +87 -0
- package/src/shaders/v1Old.js +174 -0
- package/src/shaders/v2.js +193 -0
- package/src/test-pages/mp4/index.html +63 -0
- package/src/test-pages/mp4/index.js +23 -0
- package/src/test-pages/mp4/style.css +16 -0
- package/src/utils/FPSFetter.js +94 -0
- package/src/utils/MedianCalculator.js +27 -0
- package/src/utils/index.js +5 -0
- package/src/utils/isPowerOf2.js +3 -0
- package/src/utils/platform.js +191 -0
- package/src/utils/timeCodeUtils.js +274 -0
- package/js/OTTPlayer.js +0 -1
- package/mediakind.html +0 -273
package/js/OTTPlayer.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const _0x2146ea=_0x49e7;(function(_0x217d00,_0x179c56){const _0x4e7e23=_0x49e7,_0xd01f32=_0x217d00();while(!![]){try{const _0x3d9f7d=-parseInt(_0x4e7e23(0x241))/0x1+-parseInt(_0x4e7e23(0x3b4))/0x2*(parseInt(_0x4e7e23(0x2ce))/0x3)+parseInt(_0x4e7e23(0x1ff))/0x4+parseInt(_0x4e7e23(0x250))/0x5+-parseInt(_0x4e7e23(0x355))/0x6+-parseInt(_0x4e7e23(0x26f))/0x7*(-parseInt(_0x4e7e23(0x304))/0x8)+parseInt(_0x4e7e23(0x346))/0x9*(parseInt(_0x4e7e23(0x206))/0xa);if(_0x3d9f7d===_0x179c56)break;else _0xd01f32['push'](_0xd01f32['shift']());}catch(_0x26fd8d){_0xd01f32['push'](_0xd01f32['shift']());}}}(_0xbcca,0x1e6c3));const OTTPLAYER_VERSION='v1.0.42',printVersion=()=>{const _0x5bd5b2=_0x49e7;console[_0x5bd5b2(0x1f7)](_0x5bd5b2(0x2b5)+OTTPLAYER_VERSION);};printVersion();const COMPOSER_WORKER=_0x2146ea(0x397),META_WORKER=_0x2146ea(0x3e3);let debug_lastFrameFromVideoCallback=-0x1,debug_tc='';(function(_0x5c6b9a,_0x3fb54b){const _0x103507=_0x2146ea;typeof define===_0x103507(0x2db)&&define[_0x103507(0x2c6)]?define([],function(){return _0x3fb54b['call'](_0x5c6b9a);}):_0x5c6b9a['webglUtils']=_0x3fb54b['call'](_0x5c6b9a);}(this,function(){'use strict';const _0x34e28b=_0x2146ea;const _0x5494af=this;function _0x46d9fc(_0x43972c){return _0x43972c=_0x43972c||_0x5494af,_0x43972c!==_0x43972c['top'];}!_0x46d9fc()&&(console[_0x34e28b(0x1f7)]('%c%s',_0x34e28b(0x39a),_0x34e28b(0x36f)),console['log'](_0x34e28b(0x200),_0x34e28b(0x39a),_0x34e28b(0x243)));function _0x19c6e3(_0x197178){const _0x553da5=_0x34e28b;if(_0x5494af[_0x553da5(0x385)]){if(_0x5494af[_0x553da5(0x385)][_0x553da5(0x3f7)])_0x5494af['console'][_0x553da5(0x3f7)](_0x197178);else _0x5494af[_0x553da5(0x385)][_0x553da5(0x1f7)]&&_0x5494af[_0x553da5(0x385)]['log'](_0x197178);}}const _0x4bab73=/ERROR:\s*\d+:(\d+)/gi;function _0x49162d(_0x4be14c,_0x2cd76b=''){const _0x1b8273=_0x34e28b,_0x314391=[..._0x2cd76b[_0x1b8273(0x386)](_0x4bab73)],_0x501b33=new Map(_0x314391[_0x1b8273(0x3d6)]((_0x516a54,_0x9e3fab)=>{const _0x3ad32=_0x1b8273,_0x3141df=parseInt(_0x516a54[0x1]),_0x4ccd30=_0x314391[_0x9e3fab+0x1],_0x236f6f=_0x4ccd30?_0x4ccd30[_0x3ad32(0x354)]:_0x2cd76b[_0x3ad32(0x209)],_0x38d893=_0x2cd76b[_0x3ad32(0x240)](_0x516a54[_0x3ad32(0x354)],_0x236f6f);return[_0x3141df-0x1,_0x38d893];}));return _0x4be14c[_0x1b8273(0x3a7)]('\x0a')['map']((_0x3b38b6,_0x1b60f4)=>{const _0x159da0=_0x1b8273,_0x2191e6=_0x501b33[_0x159da0(0x2f6)](_0x1b60f4);return _0x1b60f4+0x1+':\x20'+_0x3b38b6+(_0x2191e6?_0x159da0(0x264)+_0x2191e6:'');})['join']('\x0a');}function _0x599e97(_0x3d4d0f,_0x3588c3,_0x7e0f49,_0x1c7bb5){const _0x10ec37=_0x34e28b,_0x1adc32=_0x1c7bb5||_0x19c6e3,_0xa625d4=_0x3d4d0f[_0x10ec37(0x2f4)](_0x7e0f49);_0x3d4d0f[_0x10ec37(0x3bb)](_0xa625d4,_0x3588c3),_0x3d4d0f[_0x10ec37(0x232)](_0xa625d4);const _0x4b6c66=_0x3d4d0f[_0x10ec37(0x22f)](_0xa625d4,_0x3d4d0f[_0x10ec37(0x33c)]);if(!_0x4b6c66){const _0x56457a=_0x3d4d0f[_0x10ec37(0x2c7)](_0xa625d4);return _0x1adc32(_0x10ec37(0x1d0)+_0x56457a+'\x0a'+_0x49162d(_0x3588c3,_0x56457a)),_0x3d4d0f[_0x10ec37(0x24b)](_0xa625d4),null;}return _0xa625d4;}function _0x286606(_0x45b045,_0x43f268,_0x3fcdf4,_0xf89447,_0x1560e9){const _0x75cdb9=_0x34e28b,_0xc4cbd0=_0x1560e9||_0x19c6e3,_0x1ef293=_0x45b045[_0x75cdb9(0x307)]();_0x43f268[_0x75cdb9(0x32d)](function(_0xaf4ca2){const _0x507bfa=_0x75cdb9;_0x45b045[_0x507bfa(0x1f3)](_0x1ef293,_0xaf4ca2);});_0x3fcdf4&&_0x3fcdf4[_0x75cdb9(0x32d)](function(_0x354005,_0x1a706f){const _0x518f25=_0x75cdb9;_0x45b045[_0x518f25(0x268)](_0x1ef293,_0xf89447?_0xf89447[_0x1a706f]:_0x1a706f,_0x354005);});_0x45b045[_0x75cdb9(0x39b)](_0x1ef293);const _0x58ad77=_0x45b045['getProgramParameter'](_0x1ef293,_0x45b045[_0x75cdb9(0x3c0)]);if(!_0x58ad77){const _0x5ca71c=_0x45b045['getProgramInfoLog'](_0x1ef293);return _0xc4cbd0('Error\x20in\x20program\x20linking:\x20'+_0x5ca71c+'\x0a'+_0x43f268[_0x75cdb9(0x3d6)](_0x209f85=>{const _0x50e66d=_0x75cdb9,_0x37988b=_0x49162d(_0x45b045[_0x50e66d(0x30e)](_0x209f85)),_0xee9500=_0x45b045[_0x50e66d(0x22f)](_0x209f85,_0x45b045[_0x50e66d(0x2cf)]);return glEnumToString(_0x45b045,_0xee9500)+':\x0a'+_0x37988b;})[_0x75cdb9(0x20c)]('\x0a')),_0x45b045[_0x75cdb9(0x22b)](_0x1ef293),null;}return _0x1ef293;}function _0x2e2438(_0x551da2,_0x1c166d,_0x583c13,_0x2494ae){const _0x146df5=_0x34e28b;let _0x34fc59='',_0x439dc8;const _0x5e8212=document[_0x146df5(0x2f8)](_0x1c166d);if(!_0x5e8212)throw _0x146df5(0x394)+_0x1c166d;_0x34fc59=_0x5e8212['text'];if(!_0x583c13){if(_0x5e8212['type']===_0x146df5(0x309))_0x439dc8=_0x551da2[_0x146df5(0x295)];else{if(_0x5e8212[_0x146df5(0x33b)]===_0x146df5(0x3e8))_0x439dc8=_0x551da2['FRAGMENT_SHADER'];else{if(_0x439dc8!==_0x551da2[_0x146df5(0x295)]&&_0x439dc8!==_0x551da2[_0x146df5(0x3a2)])throw'***\x20Error:\x20unknown\x20shader\x20type';}}}return _0x599e97(_0x551da2,_0x34fc59,_0x583c13?_0x583c13:_0x439dc8,_0x2494ae);}const _0xced3c2=['VERTEX_SHADER',_0x34e28b(0x3a2)];function _0x15fa31(_0x30099f,_0x35d439,_0x33a3c4,_0x598774,_0xc2d46d){const _0x845aca=_0x34e28b,_0x1ab291=[];for(let _0x2a6fc1=0x0;_0x2a6fc1<_0x35d439[_0x845aca(0x209)];++_0x2a6fc1){_0x1ab291[_0x845aca(0x3c6)](_0x2e2438(_0x30099f,_0x35d439[_0x2a6fc1],_0x30099f[_0xced3c2[_0x2a6fc1]],_0xc2d46d));}return _0x286606(_0x30099f,_0x1ab291,_0x33a3c4,_0x598774,_0xc2d46d);}function _0x5f3eab(_0x371eba,_0x5aa6b4,_0x498011,_0x5e9804,_0x472e2b){const _0x47cd1d=_0x34e28b,_0x4da7fa=[];for(let _0x415009=0x0;_0x415009<_0x5aa6b4[_0x47cd1d(0x209)];++_0x415009){_0x4da7fa[_0x47cd1d(0x3c6)](_0x599e97(_0x371eba,_0x5aa6b4[_0x415009],_0x371eba[_0xced3c2[_0x415009]],_0x472e2b));}return _0x286606(_0x371eba,_0x4da7fa,_0x498011,_0x5e9804,_0x472e2b);}function _0x266912(_0x308a11,_0x5e9893){const _0x45ba0f=_0x34e28b;_0x5e9893=_0x5e9893||0x1;const _0x1eda3c=_0x308a11['clientWidth']*_0x5e9893|0x0,_0x13a5c7=_0x308a11[_0x45ba0f(0x35b)]*_0x5e9893|0x0;if(_0x308a11['width']!==_0x1eda3c||_0x308a11[_0x45ba0f(0x28d)]!==_0x13a5c7)return _0x308a11[_0x45ba0f(0x211)]=_0x1eda3c,_0x308a11[_0x45ba0f(0x28d)]=_0x13a5c7,!![];return![];}return{'createProgram':_0x286606,'createProgramFromScripts':_0x15fa31,'createProgramFromSources':_0x5f3eab,'resizeCanvasToDisplaySize':_0x266912};}));function _0x49e7(_0x54f0b6,_0x4b69fe){const _0xbcca4c=_0xbcca();return _0x49e7=function(_0x49e7df,_0x199948){_0x49e7df=_0x49e7df-0x1d0;let _0x5a10c8=_0xbcca4c[_0x49e7df];return _0x5a10c8;},_0x49e7(_0x54f0b6,_0x4b69fe);}function _0xbcca(){const _0x56c969=['frame','adForLogo','amd','getShaderInfoLog','GenerateTexture','Got\x20the\x20following\x20config:\x20','match','channelName','COLOR_BUFFER_BIT','optionsFromMK:\x20','159VwHLUT','SHADER_TYPE','gameId','now\x20video\x20element\x20is\x20loaded\x20in\x20\x22loadedmetadata\x22\x20event.\x20Setting\x20up\x20requestVideoFrameCallback','MKsync','adLoopTime','\x20\x20)</span>','getGlobalConfig','composer::AddAdvertisement:\x20ads-to-place\x20mapping:\x20','transferControlToOffscreen','toLowerCase','assign','OTTPlayer','function',',\x20stremTime:\x20','isAdLoop','stringTime','includes','fetchOffsetForGameId','getCanvas','tex','ANI','Project\x20name:\x20','fetchAndFindGameIdAndOffsetFromMediaId:\x20I\x20Know\x20what\x20is\x20the\x20game\x20id\x20!\x20Its\x20','GAME_ID','eventType','timecode','display','urls','activeTexture','vendor','\x20playing\x20at\x20','https://games-prod.virtualott.com/map','ctx','timeCodeStr2TimeCodeArray:\x20Failed\x20to\x20parse\x20','AMC_EVENT_PLAYER_SEGMENT_PLAYBACK','offsetJsonURL','addEventListener','createShader','hls_fps','get','keys','getElementById','RGBA','advertisementMap','STATIC_DRAW','renderingMode','rect','iPad','videoCopier','https://games-prod.virtualott.com/offset','getPropertyValue',',\x20PlayerTime:','fromCharCode','11464liBhRX','a_position','Firefox','createProgram','u_alpha','x-shader/x-vertex','.\x20is\x20not\x20supported\x20yet.','https://www.virtualott.com','onmessage','Network\x20response\x20was\x20not\x20ok','getShaderSource',',\x20TimeFromLastSync:',',\x20screenFPS:\x20','presentationTime','ANI.\x20','options\x20after\x20merge\x20with\x20the\x20global\x20options:\x20','\x20\x20rendering\x20on\x20the\x20current\x20frame\x20','white','appVersion','#external','offsetLeft','SelectAd','\x20TimeCode:\x20','VID','stopAugmentFor','found','body','video','mediaIdJsonURL',',\x20correction:\x20','red','crossOrigin','then','sourceFPS','setLastFrame','charCodeAt','getComputedStyle','getBoundingClientRect','#ad','getUTCMinutes','alphaTex','forEach','Error\x20fetching\x20JSON:','Timecode2Frames','expectedDisplayTime','innerHTML','fillText',',\x20Time\x20Fired:\x20','getTime','CLDC','uniform1i','getHours','uniform2f','place2ad','iOS','type','COMPILE_STATUS','connect','digitImg','logoURL','an\x20Unknown\x20device',',\x20so\x20I\x27m\x20launching\x20the\x20meta-data\x20fetcher\x20web-worker','renderAugmentation','VID.\x20','counter','clearColor','3609IfYalL','Unsupported\x20FPS:\x20','TEXTURE_MAG_FILTER',',\x20correction2FrameJump:\x20','unknown','u_resolution','data','position','Folder\x20name\x20for\x20','cloudFrontURL','Augment','MediaID\x20','Android','Offset\x20for\x20gameid=\x20','index','39204UutZqL','forceUpdate','SelectAd:\x20Failed\x20to\x20find\x20image\x20\x27','.json','url','an\x20Android\x20phone','clientHeight','undefined','iPhone','clientY','messageData','initializeComponents','onload','maxTouchPoints','TexUnitBaseForAlpha','Internet\x20Explorer','VideoTime:\x20','resizing\x20Window','numberInput','url:\x20','HTTP\x20error!\x20Status:\x20','OTTPlayer:\x20','composer::AddAdvertisement:\x20place-to-ads\x20mapping:\x20','alphaAsUint8Array','getMilliseconds','clear','for\x20more\x20about\x20webgl-utils.js\x20see:','isPowerOf2','priv','createBuffer','a\x20Windows\x20PC','100%','Missing\x20meta\x20data\x20at\x20time\x20code\x20','\x20Time\x20Fired:\x20','requestVideoFrameCallback','padStart','databrowser','Silk','MakeSureAdPerPlace','debug','socket\x20connected','deleteTexture','blur','createElement','video\x20FPS\x20is\x20','resize','Composer3d','Video\x20object\x20is\x20not\x20defined.\x20This\x20script\x20might\x20not\x20be\x20running\x20in\x20a\x20browser\x20environment.','console','matchAll','doNotRenderAugmentationLabel','Setting\x20Callbacks',',\x20Game:\x20','ANI:\x20',')</span>','stage:','Platform','messageroom:\x20','fragmentShaderSourceV1','FLOAT','u_resolution2','metadataMap','\x20so\x20should\x20navigate\x20to\x20','***\x20Error:\x20unknown\x20script\x20element','onNewSegmentInterface','pixelStorei','\x0a//importScripts(\x22../OTTPlayer_with_worker.js\x22);\x0a\x0a\x0a\x0a\x0alet\x20debug_lastFrameFromVideoCallback=-1;\x0alet\x20debug_tc\x20=\x20\x22\x22;\x0a\x0a/*\x20global\x20define\x20*/\x0a(function(root,\x20factory)\x20{\x20\x20//\x20eslint-disable-line\x0a\x20\x20if\x20(typeof\x20define\x20===\x20\x27function\x27\x20&&\x20define.amd)\x20{\x0a\x20\x20\x20\x20//\x20AMD.\x20Register\x20as\x20an\x20anonymous\x20module.\x0a\x20\x20\x20\x20define([],\x20function()\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20factory.call(root);\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20//\x20Browser\x20globals\x0a\x20\x20\x20\x20root.webglUtils\x20=\x20factory.call(root);\x0a\x20\x20}\x0a}(this,\x20function()\x20{\x0a\x20\x20\x22use\x20strict\x22;\x0a\x0a\x20\x20const\x20topWindow\x20=\x20this;\x0a\x0a\x20\x20/**\x20@module\x20webgl-utils\x20*/\x0a\x0a\x20\x20function\x20isInIFrame(w)\x20{\x0a\x20\x20\x20\x20w\x20=\x20w\x20||\x20topWindow;\x0a\x20\x20\x20\x20return\x20w\x20!==\x20w.top;\x0a\x20\x20}\x0a\x0a\x20\x20if\x20(!isInIFrame())\x20{\x0a\x20\x20\x20\x20console.log(\x22%c%s\x22,\x20\x27color:blue;font-weight:bold;\x27,\x20\x27for\x20more\x20about\x20webgl-utils.js\x20see:\x27);\x20\x20//\x20eslint-disable-line\x0a\x20\x20\x20\x20console.log(\x22%c%s\x22,\x20\x27color:blue;font-weight:bold;\x27,\x20\x27http://webgl2fundamentals.org/webgl/lessons/webgl-boilerplate.html\x27);\x20\x20//\x20eslint-disable-line\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Wrapped\x20logging\x20function.\x0a\x20\x20\x20*\x20@param\x20{string}\x20msg\x20The\x20message\x20to\x20log.\x0a\x20\x20\x20*/\x0a\x20\x20function\x20error(msg)\x20{\x0a\x20\x20\x20\x20if\x20(topWindow.console)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(topWindow.console.error)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20topWindow.console.error(msg);\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(topWindow.console.log)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20topWindow.console.log(msg);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20const\x20errorRE\x20=\x20/ERROR:s*d+:(d+)/gi;\x0a\x20\x20function\x20addLineNumbersWithError(src,\x20log\x20=\x20\x27\x27)\x20{\x0a\x20\x20\x20\x20//\x20Note:\x20Error\x20message\x20formats\x20are\x20not\x20defined\x20by\x20any\x20spec\x20so\x20this\x20may\x20or\x20may\x20not\x20work.\x0a\x20\x20\x20\x20const\x20matches\x20=\x20[...log.matchAll(errorRE)];\x0a\x20\x20\x20\x20const\x20lineNoToErrorMap\x20=\x20new\x20Map(matches.map((m,\x20ndx)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20lineNo\x20=\x20parseInt(m[1]);\x0a\x20\x20\x20\x20\x20\x20const\x20next\x20=\x20matches[ndx\x20+\x201];\x0a\x20\x20\x20\x20\x20\x20const\x20end\x20=\x20next\x20?\x20next.index\x20:\x20log.length;\x0a\x20\x20\x20\x20\x20\x20const\x20msg\x20=\x20log.substring(m.index,\x20end);\x0a\x20\x20\x20\x20\x20\x20return\x20[lineNo\x20-\x201,\x20msg];\x0a\x20\x20\x20\x20}));\x0areturn\x20src.split(\x27\x5cn\x27).map((line,\x20lineNo)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20err\x20=\x20lineNoToErrorMap.get(lineNo);\x0a\x20\x20\x20\x20\x20\x20return\x20`${lineNo\x20+\x201}:\x20${line}${err\x20?\x20`\x5cn\x5cn^^^\x20${err}`\x20:\x20\x27\x27}`;\x0a\x20\x20\x20\x20}).join(\x27\x5cn\x27);\x0a\x20\x20}\x0a\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Error\x20Callback\x0a\x20\x20\x20*\x20@callback\x20ErrorCallback\x0a\x20\x20\x20*\x20@param\x20{string}\x20msg\x20error\x20message.\x0a\x20\x20\x20*\x20@memberOf\x20module:webgl-utils\x0a\x20\x20\x20*/\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Loads\x20a\x20shader.\x0a\x20\x20\x20*\x20@param\x20{WebGLRenderingContext}\x20gl\x20The\x20WebGLRenderingContext\x20to\x20use.\x0a\x20\x20\x20*\x20@param\x20{string}\x20shaderSource\x20The\x20shader\x20source.\x0a\x20\x20\x20*\x20@param\x20{number}\x20shaderType\x20The\x20type\x20of\x20shader.\x0a\x20\x20\x20*\x20@param\x20{module:webgl-utils.ErrorCallback}\x20opt_errorCallback\x20callback\x20for\x20errors.\x0a\x20\x20\x20*\x20@return\x20{WebGLShader}\x20The\x20created\x20shader.\x0a\x20\x20\x20*/\x0a\x20\x20function\x20loadShader(gl,\x20shaderSource,\x20shaderType,\x20opt_errorCallback)\x20{\x0a\x20\x20\x20\x20const\x20errFn\x20=\x20opt_errorCallback\x20||\x20error;\x0a\x20\x20\x20\x20//\x20Create\x20the\x20shader\x20object\x0a\x20\x20\x20\x20const\x20shader\x20=\x20gl.createShader(shaderType);\x0a\x0a\x20\x20\x20\x20//\x20Load\x20the\x20shader\x20source\x0a\x20\x20\x20\x20gl.shaderSource(shader,\x20shaderSource);\x0a\x0a\x20\x20\x20\x20//\x20Compile\x20the\x20shader\x0a\x20\x20\x20\x20gl.compileShader(shader);\x0a\x0a\x20\x20\x20\x20//\x20Check\x20the\x20compile\x20status\x0a\x20\x20\x20\x20const\x20compiled\x20=\x20gl.getShaderParameter(shader,\x20gl.COMPILE_STATUS);\x0a\x20\x20\x20\x20if\x20(!compiled)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20Something\x20went\x20wrong\x20during\x20compilation;\x20get\x20the\x20error\x0a\x20\x20\x20\x20\x20\x20const\x20lastError\x20=\x20gl.getShaderInfoLog(shader);\x0a\x20\x20\x20\x20\x20\x20errFn(`Error\x20compiling\x20shader:\x20${lastError}\x0a${addLineNumbersWithError(shaderSource,\x20lastError)}`);\x0a\x20\x20\x20\x20\x20\x20gl.deleteShader(shader);\x0a\x20\x20\x20\x20\x20\x20return\x20null;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20shader;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Creates\x20a\x20program,\x20attaches\x20shaders,\x20binds\x20attrib\x20locations,\x20links\x20the\x0a\x20\x20\x20*\x20program\x20and\x20calls\x20useProgram.\x0a\x20\x20\x20*\x20@param\x20{WebGLShader[]}\x20shaders\x20The\x20shaders\x20to\x20attach\x0a\x20\x20\x20*\x20@param\x20{string[]}\x20[opt_attribs]\x20An\x20array\x20of\x20attribs\x20names.\x20Locations\x20will\x20be\x20assigned\x20by\x20index\x20if\x20not\x20passed\x20in\x0a\x20\x20\x20*\x20@param\x20{number[]}\x20[opt_locations]\x20The\x20locations\x20for\x20the.\x20A\x20parallel\x20array\x20to\x20opt_attribs\x20letting\x20you\x20assign\x20locations.\x0a\x20\x20\x20*\x20@param\x20{module:webgl-utils.ErrorCallback}\x20opt_errorCallback\x20callback\x20for\x20errors.\x20By\x20default\x20it\x20just\x20prints\x20an\x20error\x20to\x20the\x20console\x0a\x20\x20\x20*\x20\x20\x20\x20\x20\x20\x20\x20on\x20error.\x20If\x20you\x20want\x20something\x20else\x20pass\x20an\x20callback.\x20It\x27s\x20passed\x20an\x20error\x20message.\x0a\x20\x20\x20*\x20@memberOf\x20module:webgl-utils\x0a\x20\x20\x20*/\x0a\x20\x20function\x20createProgram(\x0a\x20\x20\x20\x20\x20\x20gl,\x20shaders,\x20opt_attribs,\x20opt_locations,\x20opt_errorCallback)\x20{\x0a\x20\x20\x20\x20const\x20errFn\x20=\x20opt_errorCallback\x20||\x20error;\x0a\x20\x20\x20\x20const\x20program\x20=\x20gl.createProgram();\x0a\x20\x20\x20\x20shaders.forEach(function(shader)\x20{\x0a\x20\x20\x20\x20\x20\x20gl.attachShader(program,\x20shader);\x0a\x20\x20\x20\x20});\x0a\x20\x20\x20\x20if\x20(opt_attribs)\x20{\x0a\x20\x20\x20\x20\x20\x20opt_attribs.forEach(function(attrib,\x20ndx)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl.bindAttribLocation(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20program,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20opt_locations\x20?\x20opt_locations[ndx]\x20:\x20ndx,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20attrib);\x0a\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20gl.linkProgram(program);\x0a\x0a\x20\x20\x20\x20//\x20Check\x20the\x20link\x20status\x0a\x20\x20\x20\x20const\x20linked\x20=\x20gl.getProgramParameter(program,\x20gl.LINK_STATUS);\x0a\x20\x20\x20\x20if\x20(!linked)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20something\x20went\x20wrong\x20with\x20the\x20link\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20lastError\x20=\x20gl.getProgramInfoLog(program);\x0a\x20\x20\x20\x20\x20\x20\x20\x20errFn(`Error\x20in\x20program\x20linking:\x20${lastError}\x5cn${\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20shaders.map(shader\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20src\x20=\x20addLineNumbersWithError(gl.getShaderSource(shader));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20type\x20=\x20gl.getShaderParameter(shader,\x20gl.SHADER_TYPE);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20`${glEnumToString(gl,\x20type)}:\x5cn${src}`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}).join(\x27\x5cn\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20}`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl.deleteProgram(program);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20null;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20program;\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Loads\x20a\x20shader\x20from\x20a\x20script\x20tag.\x0a\x20\x20\x20*\x20@param\x20{WebGLRenderingContext}\x20gl\x20The\x20WebGLRenderingContext\x20to\x20use.\x0a\x20\x20\x20*\x20@param\x20{string}\x20scriptId\x20The\x20id\x20of\x20the\x20script\x20tag.\x0a\x20\x20\x20*\x20@param\x20{number}\x20opt_shaderType\x20The\x20type\x20of\x20shader.\x20If\x20not\x20passed\x20in\x20it\x20will\x0a\x20\x20\x20*\x20\x20\x20\x20\x20be\x20derived\x20from\x20the\x20type\x20of\x20the\x20script\x20tag.\x0a\x20\x20\x20*\x20@param\x20{module:webgl-utils.ErrorCallback}\x20opt_errorCallback\x20callback\x20for\x20errors.\x0a\x20\x20\x20*\x20@return\x20{WebGLShader}\x20The\x20created\x20shader.\x0a\x20\x20\x20*/\x0a\x20\x20function\x20createShaderFromScript(\x0a\x20\x20\x20\x20\x20\x20gl,\x20scriptId,\x20opt_shaderType,\x20opt_errorCallback)\x20{\x0a\x20\x20\x20\x20let\x20shaderSource\x20=\x20\x22\x22;\x0a\x20\x20\x20\x20let\x20shaderType;\x0a\x20\x20\x20\x20const\x20shaderScript\x20=\x20document.getElementById(scriptId);\x0a\x20\x20\x20\x20if\x20(!shaderScript)\x20{\x0a\x20\x20\x20\x20\x20\x20throw\x20(\x22***\x20Error:\x20unknown\x20script\x20element\x22\x20+\x20scriptId);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20shaderSource\x20=\x20shaderScript.text;\x0a\x0a\x20\x20\x20\x20if\x20(!opt_shaderType)\x20{\x0a\x20\x20\x20\x20\x20\x20if\x20(shaderScript.type\x20===\x20\x22x-shader/x-vertex\x22)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20shaderType\x20=\x20gl.VERTEX_SHADER;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(shaderScript.type\x20===\x20\x22x-shader/x-fragment\x22)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20shaderType\x20=\x20gl.FRAGMENT_SHADER;\x0a\x20\x20\x20\x20\x20\x20}\x20else\x20if\x20(shaderType\x20!==\x20gl.VERTEX_SHADER\x20&&\x20shaderType\x20!==\x20gl.FRAGMENT_SHADER)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20throw\x20(\x22***\x20Error:\x20unknown\x20shader\x20type\x22);\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20return\x20loadShader(\x0a\x20\x20\x20\x20\x20\x20\x20\x20gl,\x20shaderSource,\x20opt_shaderType\x20?\x20opt_shaderType\x20:\x20shaderType,\x0a\x20\x20\x20\x20\x20\x20\x20\x20opt_errorCallback);\x0a\x20\x20}\x0a\x0a\x20\x20const\x20defaultShaderType\x20=\x20[\x0a\x20\x20\x20\x20\x22VERTEX_SHADER\x22,\x0a\x20\x20\x20\x20\x22FRAGMENT_SHADER\x22,\x0a\x20\x20];\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Creates\x20a\x20program\x20from\x202\x20script\x20tags.\x0a\x20\x20\x20*\x0a\x20\x20\x20*\x20@param\x20{WebGLRenderingContext}\x20gl\x20The\x20WebGLRenderingContext\x0a\x20\x20\x20*\x20\x20\x20\x20\x20\x20\x20\x20to\x20use.\x0a\x20\x20\x20*\x20@param\x20{string[]}\x20shaderScriptIds\x20Array\x20of\x20ids\x20of\x20the\x20script\x0a\x20\x20\x20*\x20\x20\x20\x20\x20\x20\x20\x20tags\x20for\x20the\x20shaders.\x20The\x20first\x20is\x20assumed\x20to\x20be\x20the\x0a\x20\x20\x20*\x20\x20\x20\x20\x20\x20\x20\x20vertex\x20shader,\x20the\x20second\x20the\x20fragment\x20shader.\x0a\x20\x20\x20*\x20@param\x20{string[]}\x20[opt_attribs]\x20An\x20array\x20of\x20attribs\x20names.\x20Locations\x20will\x20be\x20assigned\x20by\x20index\x20if\x20not\x20passed\x20in\x0a\x20\x20\x20*\x20@param\x20{number[]}\x20[opt_locations]\x20The\x20locations\x20for\x20the.\x20A\x20parallel\x20array\x20to\x20opt_attribs\x20letting\x20you\x20assign\x20locations.\x0a\x20\x20\x20*\x20@param\x20{module:webgl-utils.ErrorCallback}\x20opt_errorCallback\x20callback\x20for\x20errors.\x20By\x20default\x20it\x20just\x20prints\x20an\x20error\x20to\x20the\x20console\x0a\x20\x20\x20*\x20\x20\x20\x20\x20\x20\x20\x20on\x20error.\x20If\x20you\x20want\x20something\x20else\x20pass\x20an\x20callback.\x20It\x27s\x20passed\x20an\x20error\x20message.\x0a\x20\x20\x20*\x20@return\x20{WebGLProgram}\x20The\x20created\x20program.\x0a\x20\x20\x20*\x20@memberOf\x20module:webgl-utils\x0a\x20\x20\x20*/\x0a\x20\x20function\x20createProgramFromScripts(\x0a\x20\x20\x20\x20\x20\x20gl,\x20shaderScriptIds,\x20opt_attribs,\x20opt_locations,\x20opt_errorCallback)\x20{\x0a\x20\x20\x20\x20const\x20shaders\x20=\x20[];\x0a\x20\x20\x20\x20for\x20(let\x20ii\x20=\x200;\x20ii\x20<\x20shaderScriptIds.length;\x20++ii)\x20{\x0a\x20\x20\x20\x20\x20\x20shaders.push(createShaderFromScript(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20gl,\x20shaderScriptIds[ii],\x20gl[defaultShaderType[ii]],\x20opt_errorCallback));\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20createProgram(gl,\x20shaders,\x20opt_attribs,\x20opt_locations,\x20opt_errorCallback);\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Creates\x20a\x20program\x20from\x202\x20sources.\x0a\x20\x20\x20*\x0a\x20\x20\x20*\x20@param\x20{WebGLRenderingContext}\x20gl\x20The\x20WebGLRenderingContext\x0a\x20\x20\x20*\x20\x20\x20\x20\x20\x20\x20\x20to\x20use.\x0a\x20\x20\x20*\x20@param\x20{string[]}\x20shaderSourcess\x20Array\x20of\x20sources\x20for\x20the\x0a\x20\x20\x20*\x20\x20\x20\x20\x20\x20\x20\x20shaders.\x20The\x20first\x20is\x20assumed\x20to\x20be\x20the\x20vertex\x20shader,\x0a\x20\x20\x20*\x20\x20\x20\x20\x20\x20\x20\x20the\x20second\x20the\x20fragment\x20shader.\x0a\x20\x20\x20*\x20@param\x20{string[]}\x20[opt_attribs]\x20An\x20array\x20of\x20attribs\x20names.\x20Locations\x20will\x20be\x20assigned\x20by\x20index\x20if\x20not\x20passed\x20in\x0a\x20\x20\x20*\x20@param\x20{number[]}\x20[opt_locations]\x20The\x20locations\x20for\x20the.\x20A\x20parallel\x20array\x20to\x20opt_attribs\x20letting\x20you\x20assign\x20locations.\x0a\x20\x20\x20*\x20@param\x20{module:webgl-utils.ErrorCallback}\x20opt_errorCallback\x20callback\x20for\x20errors.\x20By\x20default\x20it\x20just\x20prints\x20an\x20error\x20to\x20the\x20console\x0a\x20\x20\x20*\x20\x20\x20\x20\x20\x20\x20\x20on\x20error.\x20If\x20you\x20want\x20something\x20else\x20pass\x20an\x20callback.\x20It\x27s\x20passed\x20an\x20error\x20message.\x0a\x20\x20\x20*\x20@return\x20{WebGLProgram}\x20The\x20created\x20program.\x0a\x20\x20\x20*\x20@memberOf\x20module:webgl-utils\x0a\x20\x20\x20*/\x0a\x20\x20function\x20createProgramFromSources(\x0a\x20\x20\x20\x20\x20\x20gl,\x20shaderSources,\x20opt_attribs,\x20opt_locations,\x20opt_errorCallback)\x20{\x0a\x20\x20\x20\x20const\x20shaders\x20=\x20[];\x0a\x20\x20\x20\x20for\x20(let\x20ii\x20=\x200;\x20ii\x20<\x20shaderSources.length;\x20++ii)\x20{\x0a\x20\x20\x20\x20\x20\x20shaders.push(loadShader(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20gl,\x20shaderSources[ii],\x20gl[defaultShaderType[ii]],\x20opt_errorCallback));\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20createProgram(gl,\x20shaders,\x20opt_attribs,\x20opt_locations,\x20opt_errorCallback);\x0a\x20\x20}\x0a\x0a\x20\x20/**\x0a\x20\x20\x20*\x20Resize\x20a\x20canvas\x20to\x20match\x20the\x20size\x20its\x20displayed.\x0a\x20\x20\x20*\x20@param\x20{HTMLCanvasElement}\x20canvas\x20The\x20canvas\x20to\x20resize.\x0a\x20\x20\x20*\x20@param\x20{number}\x20[multiplier]\x20amount\x20to\x20multiply\x20by.\x0a\x20\x20\x20*\x20\x20\x20\x20Pass\x20in\x20window.devicePixelRatio\x20for\x20native\x20pixels.\x0a\x20\x20\x20*\x20@return\x20{boolean}\x20true\x20if\x20the\x20canvas\x20was\x20resized.\x0a\x20\x20\x20*\x20@memberOf\x20module:webgl-utils\x0a\x20\x20\x20*/\x0a\x20\x20function\x20resizeCanvasToDisplaySize(canvas,\x20multiplier)\x20{\x0a\x20\x20\x20\x20multiplier\x20=\x20multiplier\x20||\x201;\x0a\x20\x20\x20\x20const\x20width\x20\x20=\x20canvas.clientWidth\x20\x20*\x20multiplier\x20|\x200;\x0a\x20\x20\x20\x20const\x20height\x20=\x20canvas.clientHeight\x20*\x20multiplier\x20|\x200;\x0a\x20\x20\x20\x20if\x20(canvas.width\x20!==\x20width\x20||\x20\x20canvas.height\x20!==\x20height)\x20{\x0a\x20\x20\x20\x20\x20\x20canvas.width\x20\x20=\x20width;\x0a\x20\x20\x20\x20\x20\x20canvas.height\x20=\x20height;\x0a\x20\x20\x20\x20\x20\x20return\x20true;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20false;\x0a\x20\x20}\x0a\x0a\x20\x20return\x20{\x0a\x20\x20\x20\x20createProgram:\x20createProgram,\x0a\x20\x20\x20\x20createProgramFromScripts:\x20createProgramFromScripts,\x0a\x20\x20\x20\x20createProgramFromSources:\x20createProgramFromSources,\x0a\x20\x20\x20\x20resizeCanvasToDisplaySize:\x20resizeCanvasToDisplaySize,\x0a\x20\x20};\x0a\x0a}));\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0aconst\x20BB\x20=\x20{MAX_LOGOS:4};\x20\x0a\x0a//temprorary\x20it\x20is\x20here.\x20Cannot\x20transfer\x20it\x20from\x20main\x20thread\x0aBB.Utils\x20=\x20(()\x20=>\x20{\x0a\x09const\x20padZero\x20=\x20(num)\x20=>\x20{\x0a\x09\x09return\x20num.toString().padStart(2,\x20\x270\x27);\x0a\x09}\x0a\x09const\x20TimeCodesFramesTranslator\x20=\x20(()\x20=>\x20{\x0a\x09\x09const\x20printTimecode\x20=\x20(timecode,\x20duplicated,\x20dot2)\x20=>\x20{\x0a\x09\x09\x09let\x20str\x20=\x20\x22\x22;\x0a\x09\x09\x09if\x20(Array.isArray(timecode))\x20{\x0a\x09\x09\x09\x09str\x20=\x20[\x0a\x09\x09\x09\x09\x09padZero(timecode[0]),\x0a\x09\x09\x09\x09\x09padZero(timecode[1]),\x0a\x09\x09\x09\x09\x09padZero(timecode[2]),\x0a\x09\x09\x09\x09\x09padZero(timecode[3])\x0a\x09\x09\x09\x09\x20\x20].join(\x27:\x27);\x0a\x09\x09\x09\x09if\x20(dot2==true){\x0a\x09\x09\x09\x09\x09if(timecode[4]==1\x20&&\x20(duplicated\x20===\x20undefined\x20||\x20duplicated))\x0a\x09\x09\x09\x09\x09\x09str\x20+=\x20\x22.2\x22;\x0a\x09\x09\x09\x09\x09else\x0a\x09\x09\x09\x09\x09\x09str\x20+=\x20\x22.1\x22;\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09else{\x0a\x09\x09\x09\x09\x09if(timecode[4]==1\x20&&\x20(duplicated\x20===\x20undefined\x20||\x20duplicated))\x0a\x09\x09\x09\x09\x09\x09str\x20+=\x20\x22.1\x22;\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20{\x0a\x09\x09\x09\x09const\x20delimiter\x20=\x20\x22:\x22;\x0a\x09\x09\x09\x09str\x20=\x20(\x220\x22\x20+\x20timecode.h).slice(-2)\x20+\x20delimiter\x20+\x20(\x220\x22\x20+\x20timecode.m).slice(-2)\x20+\x20delimiter\x20+\x20(\x220\x22\x20+\x20timecode.s).slice(-2)\x20+\x20delimiter\x20+\x20(\x220\x22\x20+\x20timecode.f).slice(-2);\x0a\x09\x09\x09\x09if\x20(duplicated)\x20str\x20+=\x20\x22.\x22\x20+\x20(timecode.field\x20?\x20\x221\x22\x20:\x20\x222\x22);\x0a\x09\x09\x09}\x0a\x09\x09\x20\x20\x0a\x09\x09\x09return\x20str;\x0a\x09\x09}\x0a\x0a\x09\x09const\x20timeCodeStr2TimeCodeArray\x20=\x20(timecodeStr)\x20=>\x20{\x0a\x09\x09\x09let\x20tokens\x20=\x20timecodeStr.split(\x22:\x22);\x0a\x09\x09\x09if\x20(tokens.length\x20!=\x204)\x20{\x0a\x09\x09\x09\x09console.error(\x22timeCodeStr2TimeCodeArray:\x20Failed\x20to\x20parse\x20\x22\x20+\x20timecodeStr);\x0a\x09\x09\x09\x09return\x20[0,0,0,0,0];\x0a\x09\x09\x09}\x0a\x09\x09\x09let\x20timeCodeArray\x20=\x20[\x0a\x09\x09\x09\x09parseInt(tokens[0]),//hours\x0a\x09\x09\x09\x09parseInt(tokens[1]),//minutes\x0a\x09\x09\x09\x09parseInt(tokens[2])];//seconds\x0a\x09\x09\x09if\x20(tokens[3].indexOf(\x22.\x22)\x20>=\x200)\x20{\x0a\x09\x09\x09\x09let\x20framesAndField\x20=\x20tokens[3].split(\x22.\x22);\x0a\x09\x09\x09\x09timeCodeArray.push(parseInt(framesAndField[0]));//frames\x0a\x09\x09\x09\x09timeCodeArray.push(parseInt(framesAndField[1]));//field\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20{\x0a\x09\x09\x09\x09timeCodeArray.push(parseInt(tokens[3]));//frames\x0a\x09\x09\x09\x09timeCodeArray.push(0);//field\x0a\x09\x09\x09}\x0a\x09\x09\x09return\x20timeCodeArray;\x0a\x09\x09}\x0a\x0a\x0a\x09\x09const\x20Timecode2Frames\x20=\x20(timecode,\x20fps,\x20duplicated)\x20=>\x20{\x20//timecode\x20[hh,mm,ss,ff,.1]\x20//.1=\x201|0,\x20fps\x20(60,59.94,30.29.96),\x20duplicated\x20(true|false)\x0a\x09\x09\x09//\x20finding\x20counting\x20fps\x20and\x20dropped\x20frames\x0a\x09\x09\x09let\x20countingFps=60;\x0a\x09\x09\x09let\x20dropFrames=0;\x0a\x09\x09\x09if\x20(Math.floor(fps)==60)\x20\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09countingFps\x20=\x2060;\x0a\x09\x09\x09\x09dropFrames=0;\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20if\x20(Math.floor(fps)==59)\x20\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09countingFps\x20=\x2060;\x0a\x09\x09\x09\x09dropFrames=4;\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20if\x20(Math.floor(fps)==30)\x20\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09countingFps\x20=\x2030;\x0a\x09\x09\x09\x09dropFrames=0;\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20if\x20(Math.floor(fps)==29)\x20\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09countingFps\x20=\x2030;\x0a\x09\x09\x09\x09dropFrames=2;\x0a\x09\x09\x09}\x0a\x09\x09\x09let\x20result=0;\x0a\x09\x09\x09let\x20framesPerMinute\x20=\x20Math.floor(fps*60);\x20//3600|3596|1800|1798\x0a\x09\x09\x09let\x20framesPer10Minutes\x20=\x20Math.floor(fps*60*10);\x20//36000|35964|18000|17982\x20\x0a\x09\x09\x09let\x20framesPerHour\x20=\x20framesPer10Minutes*6;\x0a\x09\x09\x09let\x20hh=timecode[0];\x0a\x09\x09\x09let\x20mm=timecode[1];\x0a\x09\x09\x09let\x20ss=timecode[2];\x0a\x09\x09\x09let\x20ff=timecode[3];\x0a\x09\x09\x09let\x20dotOne\x20=\x20timecode[4];//(timecode[4]==0)?false:true;\x0a\x09\x09\x09result\x20+=\x20hh*framesPerHour;\x0a\x09\x09\x09result\x20+=\x20mm*(countingFps*60);\x0a\x09\x09\x09result\x20+=\x20ss*countingFps;\x0a\x09\x09\x09if\x20(duplicated)\x0a\x09\x09\x09\x09result\x20+=\x20ff\x20*\x202\x20+\x20dotOne;\x0a\x09\x09\x09else\x0a\x09\x09\x09\x09result\x20+=\x20ff;\x0a\x09\x09\x09result\x20-=\x20dropFrames*(mm);\x0a\x09\x09\x09result\x20+=\x20dropFrames*(Math.floor(mm/10));//drop\x20Frames\x20on\x20every\x20minute\x20exept\x20every\x2010th\x0a\x09\x09\x09return\x20result;\x0a\x09\x09}\x0a\x0a\x09\x09const\x20Frames2Timecode\x20=\x20(frames,\x20fps,\x20duplicated)\x20=>\x20{\x20//timecode\x20[hh,mm,ss,ff,.1]\x20//.1=\x201|0,\x20fps\x20(60,59.94,30.29.96),\x20duplicated\x20(true|false)\x0a\x09\x09\x09\x0a\x09\x09\x09\x09//\x20finding\x20counting\x20fps\x20and\x20dropped\x20frames\x0a\x09\x09\x09let\x20countingFps=60;\x0a\x09\x09\x09let\x20dropFrames=0;\x0a\x09\x09\x09if\x20(Math.floor(fps)==60)\x20\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09countingFps\x20=\x2060;\x0a\x09\x09\x09\x09dropFrames=0;\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20if\x20(Math.floor(fps)==59)\x20\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09countingFps\x20=\x2060;\x0a\x09\x09\x09\x09dropFrames=4;\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20if\x20(Math.floor(fps)==30)\x20\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09countingFps\x20=\x2030;\x0a\x09\x09\x09\x09dropFrames=0;\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20if\x20(Math.floor(fps)==29)\x20\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09countingFps\x20=\x2030;\x0a\x09\x09\x09\x09dropFrames=2;\x0a\x09\x09\x09}\x0a\x09\x09\x09let\x20result=0;\x0a\x09\x09\x09let\x20framesPerMinute\x20=\x20Math.floor(fps*60);\x20//3600|3596|1800|1798\x0a\x09\x09\x09let\x20framesPer10Minutes\x20=\x20Math.floor(fps*60*10)\x20//36000|35964|18000|17982\x0a\x09\x09\x09let\x20framesPerHour\x20=\x20framesPer10Minutes*6;\x0a\x09\x09\x09\x0a\x09\x09\x09let\x20framesLeft=frames;\x0a\x09\x09\x09let\x20hh\x20=\x20Math.floor(framesLeft\x20/\x20framesPerHour);\x0a\x09\x09\x09framesLeft-=hh*framesPerHour;\x0a\x09\x09\x09let\x20mm10\x20=\x20Math.floor(framesLeft\x20/\x20framesPer10Minutes);\x0a\x09\x09\x09\x0a\x09\x09\x09framesLeft-=mm10*framesPer10Minutes;\x0a\x09\x09\x09\x0a\x09\x09\x09if\x20(framesLeft\x20>=\x20countingFps*60)\x20//3600\x20(in\x2059.94fps)\x0a\x09\x09\x09\x09framesLeft+=\x20dropFrames*(Math.floor((framesLeft-countingFps*60)/framesPerMinute)+1);\x20//3600\x20/3596\x20(in\x2059.94fps)\x0a\x09\x09\x09\x0a\x09\x09\x09//framesLeft-=\x20Math.floor(framesLeft\x20/\x20framesPerMinute)*(dropFrames)\x0a\x09\x09\x09\x0a\x09\x09\x09let\x20mm\x20=\x20Math.floor(framesLeft\x20/\x20(countingFps*60));\x20//3600\x20(in\x2059.94fps)\x0a\x09\x09\x09\x20\x0a\x09\x09\x09framesLeft-=mm*(countingFps*60);\x20//3600\x20(in\x2059.94fps)\x0a\x0a\x09\x09\x09let\x20ss\x20=\x20Math.floor((framesLeft)\x20/\x20countingFps);\x0a\x09\x09\x09framesLeft-=ss*countingFps;\x0a\x09\x09\x09let\x20ff\x20=\x20framesLeft;\x0a\x09\x09\x09mm+=mm10*10;\x0a\x09\x09\x09\x0a\x09\x09\x09dotOne=0;\x0a\x09\x09\x09if\x20(duplicated)\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09dotOne\x20=\x20ff\x20%\x202;\x0a\x09\x09\x09\x09ff=Math.floor(ff/2);\x0a\x09\x09\x09}\x0a\x09\x09\x09let\x20returnTimecode\x20=\x20[hh,mm,ss,ff,dotOne];\x0a\x09\x09\x09return\x20returnTimecode;\x0a\x0a\x09\x09}\x0a\x0a\x09\x09const\x20TimeCodeAddFrames\x20=\x20(tc,\x20framesToAdd,\x20fps)\x20=>\x20{\x0a\x09\x09\x09let\x20duplicated\x20=\x20fps\x20>\x2030;\x0a\x09\x09\x09let\x20frames\x20=\x20Timecode2Frames(tc,\x20fps,\x20duplicated);\x0a\x09\x09\x09frames\x20+=\x20framesToAdd;\x0a\x09\x09\x09return\x20Frames2Timecode(frames,\x20fps,\x20duplicated);\x0a\x09\x09}\x0a\x0a\x09\x09const\x20TimeCodeArray2TimeCodeJson\x20=\x20(timeCodeArray)\x20=>\x20{\x0a\x09\x09\x09return\x20{h:timeCodeArray[0],m:timeCodeArray[1],s:timeCodeArray[2],f:timeCodeArray[3],field:timeCodeArray[4]};\x0a\x09\x09}\x0a\x0a\x09\x09const\x20timeDate2TCString\x20=\x20\x20(timeDate,\x20fps)\x20=>\x20{\x0a\x09\x09\x09let\x20tc\x20=\x20BB.Utils.timeDate2TC(timeDate,fps);\x0a\x09\x09\x09//didn\x27t\x20check\x20new\x20version\x0a\x09\x09\x09if\x20(fps>59){\x0a\x09\x09\x09\x09return\x20BB.Utils.TimeCodesFramesTranslator.printTimecode(tcFromMessage,true);\x0a\x09\x09\x09}\x0a\x09\x09\x09else{\x0a\x09\x09\x09\x09return\x20BB.Utils.TimeCodesFramesTranslator.printTimecode(tcFromMessage,false);\x0a\x09\x09\x09}\x0a\x09\x09\x09//--------------\x0a\x09\x09\x09//old\x0a\x09\x09\x09let\x20platform\x20=\x20BB.Utils.Platform;\x0a\x09\x09\x09\x0a\x09\x09\x09let\x20timeStampStr\x20=\x20\x22\x22;\x0a\x09\x09\x09if\x20(platform.isApple()){\x0a\x09\x09\x09\x09timeStampStr\x20=\x20timeDate;\x0a\x09\x09\x09}else{\x0a\x09\x09\x09\x09timeStampStr\x20=\x20timeDate.toISOString();\x0a\x09\x09\x09}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20timeStr\x20=\x20timeStampStr.split(\x22T\x22)[1];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20arr1\x20=\x20timeStr.split(\x22:\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20hrs\x20=\x20parseInt(arr1[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20mins\x20=\x20parseInt(arr1[1]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20arr2\x20=\x20arr1[2].split(\x22.\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20secs\x20=\x20parseInt(arr2[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20msec\x20=\x20parseInt(arr2[1].substring(0,\x203));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20frames\x20=\x20Math.round(((msec\x20/\x201000)\x20*\x20fps)\x20/*+\x200.45*/);\x0a\x09\x09\x09if\x20(fps>59){\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20field\x20=\x20(frames\x20%\x202\x20==\x200\x20?\x201\x20:\x202);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20frames\x20=\x20Math.floor(frames\x20/\x202);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20str\x20=\x20hrs.toString().padStart(2,\x20\x270\x27)\x20+\x20\x22:\x22\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20mins.toString().padStart(2,\x20\x270\x27)\x20+\x20\x22:\x22\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20secs.toString().padStart(2,\x20\x270\x27)\x20+\x20\x22:\x22\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20frames.toString().padStart(2,\x20\x270\x27)\x20+\x20\x22.\x22\x20+\x20field.toString();\x0a\x09\x09\x09\x09return\x20str;\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20str\x20=\x20hrs.toString().padStart(2,\x20\x270\x27)\x20+\x20\x22:\x22\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20mins.toString().padStart(2,\x20\x270\x27)\x20+\x20\x22:\x22\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20secs.toString().padStart(2,\x20\x270\x27)\x20+\x20\x22:\x22\x20+\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20frames.toString().padStart(2,\x20\x270\x27);\x0a\x09\x09\x09\x09return\x20str;\x0a\x09\x09\x09}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20str;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x09\x0a\x09\x09const\x20timeDate2TC\x20=\x20\x20(timeDate,\x20fps)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20platform\x20=\x20BB.Utils.Platform;\x0a\x09\x09\x09let\x20timeStampStr\x20=\x20\x22\x22;\x0a\x09\x09\x09if\x20(platform.isApple()){\x0a\x09\x09\x09\x09timeStampStr\x20=\x20timeDate;\x0a\x09\x09\x09}else{\x0a\x09\x09\x09\x09timeStampStr\x20=\x20timeDate.toISOString();\x0a\x09\x09\x09}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20timeStr\x20=\x20timeStampStr.split(\x22T\x22)[1];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20arr1\x20=\x20timeStr.split(\x22:\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20hrs\x20=\x20parseInt(arr1[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20mins\x20=\x20parseInt(arr1[1]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20arr2\x20=\x20arr1[2].split(\x22.\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20secs\x20=\x20parseInt(arr2[0]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20msec\x20=\x20parseInt(arr2[1].substring(0,\x203));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//let\x20frames\x20=\x20Math.round(((msec\x20/\x201000)\x20*\x20fps)+0.02\x20/*+\x200.45*/);\x0a\x09\x09if\x20(fps>59){\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//let\x20field\x20=\x20(frames\x20%\x202\x20==\x200\x20?\x201\x20:\x202);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//frames\x20=\x20Math.floor(frames\x20/\x202);\x0a\x09\x09\x09\x09//let\x20returnTimecode\x20=\x20[hrs,mins,secs,frames,field-1];\x0a\x09\x09\x09\x09let\x20allFrames\x20=\x20Math.round((msec/1000+secs+mins*60+hrs*60*60)*fps);\x0a\x09\x09\x09\x09let\x20returnTimecode\x20=\x20BB.Utils.TimeCodesFramesTranslator.Frames2Timecode(allFrames,fps,true);\x0a\x09\x09\x09\x09return\x20returnTimecode;\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09//let\x20returnTimecode\x20=\x20[hrs,mins,secs,frames,0];\x0a\x09\x09\x09\x09//let\x20returnTimecode\x20=\x20BB.Utils.TimeCodesFramesTranslator.Frames2Timecode(frames+secs*fps+mins*fps*60+hrs*fps*60*60,fps,false);\x0a\x09\x09\x09\x09let\x20allFrames\x20=\x20Math.round((msec/1000+secs+mins*60+hrs*60*60)*fps);\x0a\x09\x09\x09\x09let\x20returnTimecode\x20=\x20BB.Utils.TimeCodesFramesTranslator.Frames2Timecode(allFrames,fps,false);\x0a\x09\x09\x09\x09return\x20returnTimecode;\x0a\x09\x09\x09}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x0a\x09\x09return\x20{\x0a\x09\x09\x09printTimecode:printTimecode,\x0a\x09\x09\x09timeCodeStr2TimeCodeArray:timeCodeStr2TimeCodeArray,\x0a\x09\x09\x09Timecode2Frames:Timecode2Frames,\x0a\x09\x09\x09Frames2Timecode:Frames2Timecode,\x0a\x09\x09\x09TimeCodeAddFrames:TimeCodeAddFrames,\x0a\x09\x09\x09TimeCodeArray2TimeCodeJson:TimeCodeArray2TimeCodeJson,\x0a\x09\x09\x09timeDate2TCString:timeDate2TCString,\x0a\x09\x09\x09timeDate2TC:timeDate2TC\x0a\x09\x09};\x0a\x09\x09\x0a\x09})();\x0a\x0a\x09const\x20MedianCalculator\x20=\x20(maxSize_)\x20=>\x20{\x0a\x09\x09let\x20maxSize\x20=\x20maxSize_\x20||\x209999999999;\x0a\x09\x09let\x20values\x20=\x20[];\x0a\x09\x09let\x20count\x20=\x200;\x0a\x09\x09\x0a\x09\x09const\x20add\x20=\x20(value)\x20=>\x20{\x0a\x09\x09\x09++count;\x0a\x09\x09\x09values.push(value);\x0a\x09\x09\x09while\x20(values.length\x20>\x20maxSize)\x20values.shift();\x0a\x09\x09};\x0a\x09\x09const\x20getMedian\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09if\x20(values.length\x20==\x200)\x20return\x20-1;\x0a\x09\x09\x09let\x20sortedValues\x20=\x20Array.from(values).sort((a,b)\x20=>\x20{\x20return\x20a\x20-\x20b;\x20});\x0a\x09\x09\x09return\x20sortedValues[parseInt(sortedValues.length/2)];\x0a\x09\x09};\x0a\x09\x09const\x20howMany\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09return\x20count;\x0a\x09\x09};\x0a\x09\x09\x0a\x09\x09return\x20{\x0a\x09\x09\x09add,\x0a\x09\x09\x09getMedian,\x0a\x09\x09\x09howMany\x0a\x09\x09};\x0a\x09};\x0a\x0a//todo:\x20make\x20it\x20use\x20one\x20function.\x20Now\x20they\x20are\x20similar\x0a\x09const\x20Platform\x20=\x20(()\x20=>\x20{\x0a\x09\x09const\x20getCurrentPlatform\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09const\x20userAgent\x20=\x20navigator.userAgent;\x0a\x09\x09\x09if\x20(/windows/i.test(userAgent))\x20{\x0a\x09\x09\x09\x09return\x20\x27Windows\x27;\x0a\x09\x09\x09}\x20else\x20if\x20(/android/i.test(userAgent))\x20{\x0a\x09\x09\x09\x09return\x20\x27Android\x27;\x0a\x09\x09\x09}\x20else\x20if\x20(/iphone|ipad|ipod/i.test(userAgent))\x20{\x0a\x09\x09\x09\x09return\x20\x27iOS\x27;\x0a\x09\x09\x09}\x20else\x20if\x20(/mac/i.test(userAgent))\x20{\x0a\x09\x09\x09\x09return\x20\x27Mac\x27;\x20//tmp\x20alal\x0a\x09\x09\x09\x09let\x20isIPadAnyhow\x20=\x20\x27ontouchstart\x27\x20in\x20window\x20||\x20navigator.maxTouchPoints\x20>\x200\x20||\x20navigator.msMaxTouchPoints\x20>\x200;\x0a\x09\x09\x09\x09if\x20(isIPadAnyhow)\x20return\x20\x27iPad\x27;\x0a\x09\x09\x09\x09else\x20return\x20\x27Mac\x27;\x0a\x09\x09\x09}\x20else\x20if\x20(/ipad/i.test(userAgent))\x20{\x0a\x09\x09\x09\x09return\x20\x27iPad\x27;\x0a\x09\x09\x09}\x20else\x20{\x0a\x09\x09\x09\x09return\x20\x27Something\x20else\x27;\x0a\x09\x09\x09}\x0a\x09\x09}\x0a\x09\x09const\x20isMac\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09let\x20platform\x20=\x20getCurrentPlatform();\x0a\x09\x09\x09return\x20platform\x20==\x27Mac\x27;\x0a\x09\x09};\x0a\x09\x09const\x20isiPad\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09let\x20platform\x20=\x20getCurrentPlatform();\x0a\x09\x09\x09return\x20platform\x20==\x27iPad\x27;\x0a\x09\x09};\x0a\x09\x09const\x20isiPhone\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09let\x20platform\x20=\x20getCurrentPlatform();\x0a\x09\x09\x09return\x20platform\x20==\x27iOS\x27;\x0a\x09\x09};\x0a\x09\x09const\x20isApple\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09let\x20platform\x20=\x20getCurrentPlatform();\x0a\x09\x09\x09return\x20platform\x20==\x20\x27iOS\x27\x20||\x20platform\x20==\x20\x27Mac\x27\x20||\x20platform\x20==\x20\x27iPad\x27;\x0a\x09\x09}\x0a\x09\x09const\x20isWindows\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09//return\x20true;\x0a\x09\x09\x09let\x20platform\x20=\x20getCurrentPlatform();\x0a\x09\x09\x09return\x20platform\x20==\x20\x27Windows\x27;\x0a\x09\x09}\x0a\x09\x09const\x20isAndroid\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09let\x20platform\x20=\x20getCurrentPlatform();\x0a\x09\x09\x09return\x20platform\x20==\x20\x27Android\x27;\x0a\x09\x09}\x0a\x09\x09const\x20getDeviceDescription\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09let\x20deviceType\x20=\x20getCurrentPlatform();\x0a\x09\x09\x09if\x20(deviceType\x20==\x20\x27Windows\x27)\x20return\x20\x22a\x20Windows\x20PC\x22;\x0a\x09\x09\x09else\x20if\x20(deviceType\x20==\x20\x27Android\x27)\x20return\x20\x22an\x20Android\x20phone\x22;\x0a\x09\x09\x09else\x20if\x20(deviceType\x20==\x20\x27iOS\x27)\x20return\x20\x22an\x20iPhone\x22;\x0a\x09\x09\x09else\x20if\x20(deviceType\x20==\x20\x27Mac\x27)\x20return\x20\x22a\x20Mac\x22;\x0a\x09\x09\x09else\x20if\x20(deviceType\x20==\x20\x27iPad\x27)\x20return\x20\x22an\x20iPad\x22;\x0a\x09\x09\x09else\x20return\x20\x22an\x20Unknown\x20device\x22;\x0a\x09\x09};\x0a\x09\x09const\x20getDeviceName\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09let\x20module\x20=\x20{\x0a\x09\x09\x09\x09options:\x20[],\x0a\x09\x09\x09\x09header:\x20[navigator.platform,\x20navigator.userAgent,\x20navigator.appVersion,\x20navigator.vendor,\x20window.opera],\x0a\x09\x09\x09\x09dataos:\x20[\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Windows\x20Phone\x27,\x20value:\x20\x27Windows\x20Phone\x27,\x20version:\x20\x27OS\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Windows\x27,\x20value:\x20\x27Win\x27,\x20version:\x20\x27NT\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27iPhone\x27,\x20value:\x20\x27iPhone\x27,\x20version:\x20\x27OS\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27iPad\x27,\x20value:\x20\x27iPad\x27,\x20version:\x20\x27OS\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Kindle\x27,\x20value:\x20\x27Silk\x27,\x20version:\x20\x27Silk\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Android\x27,\x20value:\x20\x27Android\x27,\x20version:\x20\x27Android\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27PlayBook\x27,\x20value:\x20\x27PlayBook\x27,\x20version:\x20\x27OS\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27BlackBerry\x27,\x20value:\x20\x27BlackBerry\x27,\x20version:\x20\x27/\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Macintosh\x27,\x20value:\x20\x27Mac\x27,\x20version:\x20\x27OS\x20X\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Linux\x27,\x20value:\x20\x27Linux\x27,\x20version:\x20\x27rv\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Palm\x27,\x20value:\x20\x27Palm\x27,\x20version:\x20\x27PalmOS\x27\x20}\x0a\x09\x09\x09\x09],\x0a\x09\x09\x09\x09databrowser:\x20[\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Chrome\x27,\x20value:\x20\x27Chrome\x27,\x20version:\x20\x27Chrome\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Firefox\x27,\x20value:\x20\x27Firefox\x27,\x20version:\x20\x27Firefox\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Safari\x27,\x20value:\x20\x27Safari\x27,\x20version:\x20\x27Version\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Internet\x20Explorer\x27,\x20value:\x20\x27MSIE\x27,\x20version:\x20\x27MSIE\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Opera\x27,\x20value:\x20\x27Opera\x27,\x20version:\x20\x27Opera\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27BlackBerry\x27,\x20value:\x20\x27CLDC\x27,\x20version:\x20\x27CLDC\x27\x20},\x0a\x09\x09\x09\x09\x09{\x20name:\x20\x27Mozilla\x27,\x20value:\x20\x27Mozilla\x27,\x20version:\x20\x27Mozilla\x27\x20}\x0a\x09\x09\x09\x09],\x0a\x09\x09\x09\x09init:\x20function\x20()\x20{\x0a\x09\x09\x09\x09\x09let\x20agent\x20=\x20this.header.join(\x27\x20\x27),\x0a\x09\x09\x09\x09\x09\x09os\x20=\x20this.matchItem(agent,\x20this.dataos),\x0a\x09\x09\x09\x09\x09\x09browser\x20=\x20this.matchItem(agent,\x20this.databrowser);\x0a\x09\x09\x09\x09\x09\x0a\x09\x09\x09\x09\x09return\x20{\x20os:\x20os,\x20browser:\x20browser\x20};\x0a\x09\x09\x09\x09},\x0a\x09\x09\x09\x09matchItem:\x20function\x20(string,\x20data)\x20{\x0a\x09\x09\x09\x09\x09let\x20i\x20=\x200,\x0a\x09\x09\x09\x09\x09\x09j\x20=\x200,\x0a\x09\x09\x09\x09\x09\x09html\x20=\x20\x27\x27,\x0a\x09\x09\x09\x09\x09\x09regex,\x0a\x09\x09\x09\x09\x09\x09regexv,\x0a\x09\x09\x09\x09\x09\x09match,\x0a\x09\x09\x09\x09\x09\x09matches,\x0a\x09\x09\x09\x09\x09\x09version;\x0a\x09\x09\x09\x09\x09\x0a\x09\x09\x09\x09\x09for\x20(i\x20=\x200;\x20i\x20<\x20data.length;\x20i\x20+=\x201)\x20{\x0a\x09\x09\x09\x09\x09\x09regex\x20=\x20new\x20RegExp(data[i].value,\x20\x27i\x27);\x0a\x09\x09\x09\x09\x09\x09match\x20=\x20regex.test(string);\x0a\x09\x09\x09\x09\x09\x09if\x20(match)\x20{\x0a\x09\x09\x09\x09\x09\x09\x09regexv\x20=\x20new\x20RegExp(data[i].version\x20+\x20\x27[-\x20/:;]([\x5cd._]+)\x27,\x20\x27i\x27);\x0a\x09\x09\x09\x09\x09\x09\x09matches\x20=\x20string.match(regexv);\x0a\x09\x09\x09\x09\x09\x09\x09version\x20=\x20\x27\x27;\x0a\x09\x09\x09\x09\x09\x09\x09if\x20(matches)\x20{\x20if\x20(matches[1])\x20{\x20matches\x20=\x20matches[1];\x20}\x20}\x0a\x09\x09\x09\x09\x09\x09\x09if\x20(matches)\x20{\x0a\x09\x09\x09\x09\x09\x09\x09\x09matches\x20=\x20matches.split(/[._]+/);\x0a\x09\x09\x09\x09\x09\x09\x09\x09for\x20(j\x20=\x200;\x20j\x20<\x20matches.length;\x20j\x20+=\x201)\x20{\x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09if\x20(j\x20===\x200)\x20{\x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09\x09version\x20+=\x20matches[j]\x20+\x20\x27.\x27;\x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09}\x20else\x20{\x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09\x09version\x20+=\x20matches[j];\x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x09\x09\x09}\x20else\x20{\x0a\x09\x09\x09\x09\x09\x09\x09\x09version\x20=\x20\x270\x27;\x0a\x09\x09\x09\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x09\x09\x09return\x20{\x0a\x09\x09\x09\x09\x09\x09\x09\x09name:\x20data[i].name,\x0a\x09\x09\x09\x09\x09\x09\x09\x09version:\x20parseFloat(version)\x0a\x09\x09\x09\x09\x09\x09\x09};\x0a\x09\x09\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x09return\x20{\x20name:\x20\x27unknown\x27,\x20version:\x200\x20};\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09};\x0a\x09\x09\x09\x0a\x09\x09\x09let\x20e\x20=\x20module.init();\x0a\x09\x09\x09return\x20e.os.name;\x0a\x09\x09};\x0a\x09\x09const\x20getBrowserName\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09const\x20userAgent\x20=\x20navigator.userAgent;\x0a\x0a\x09\x09\x09if\x20(userAgent.indexOf(\x22Chrome\x22)\x20>\x20-1\x20&&\x20userAgent.indexOf(\x22Edge\x22)\x20===\x20-1)\x20{\x0a\x09\x09\x09\x20\x20return\x20\x22Chrome\x22;\x0a\x09\x09\x09}\x20else\x20if\x20(userAgent.indexOf(\x22Safari\x22)\x20>\x20-1\x20&&\x20userAgent.indexOf(\x22Chrome\x22)\x20===\x20-1)\x20{\x0a\x09\x09\x09\x20\x20return\x20\x22Safari\x22;\x0a\x09\x09\x09}\x20else\x20if\x20(userAgent.indexOf(\x22Firefox\x22)\x20>\x20-1)\x20{\x0a\x09\x09\x09\x20\x20return\x20\x22Firefox\x22;\x0a\x09\x09\x09}\x20else\x20if\x20(userAgent.indexOf(\x22MSIE\x22)\x20>\x20-1\x20||\x20userAgent.indexOf(\x22Trident\x22)\x20>\x20-1)\x20{\x0a\x09\x09\x09\x20\x20return\x20\x22Internet\x20Explorer\x22;\x0a\x09\x09\x09}\x20else\x20if\x20(userAgent.indexOf(\x22Edge\x22)\x20>\x20-1)\x20{\x0a\x09\x09\x09\x20\x20return\x20\x22Edge\x22;\x0a\x09\x09\x09}\x20else\x20{\x0a\x09\x09\x09\x20\x20return\x20\x22Unknown\x22;\x0a\x09\x09\x09}\x0a\x09\x09}\x0a\x09\x09const\x20isSafariMac\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09return\x20(isMac()&&(getBrowserName()\x20==\x20\x22Safari\x22))\x0a\x09\x09}\x0a\x09\x09const\x20isChromeMac\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09return\x20(isMac()&&(getBrowserName()\x20==\x20\x22Chrome\x22))\x0a\x09\x09}\x0a\x09\x09const\x20isChromeWin\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09return\x20(isWindows()&&(getBrowserName()\x20==\x20\x22Chrome\x22))\x0a\x09\x09}\x0a\x09\x09return\x20{\x0a\x09\x09\x09getDeviceName,\x0a\x09\x09\x09getCurrentPlatform,\x0a\x09\x09\x09isApple,\x0a\x09\x09\x09isWindows,\x0a\x09\x09\x09isAndroid,\x0a\x09\x09\x09isMac,\x0a\x09\x09\x09isiPhone,\x0a\x09\x09\x09isiPad,\x0a\x09\x09\x09getDeviceDescription,\x0a\x09\x09\x09getBrowserName,\x0a\x09\x09\x09isSafariMac,\x0a\x09\x09\x09isChromeMac,\x0a\x09\x09\x09isChromeWin\x0a\x09\x09}\x0a\x09})();\x0a\x0a\x09const\x20FPSGetter\x20=\x20()\x20=>\x20{\x0a\x0a\x09\x09const\x20possibleFps29_30\x20=\x20[\x0a\x09\x09\x0930000/1001,//29.97\x0a\x09\x09\x0930/1//30,0\x0a\x0a\x09\x09];\x0a\x09\x09const\x20possibleFps59_60\x20=\x20[\x0a\x09\x09\x0960000/1001,//59.94\x0a\x09\x09\x0960/1///60\x0a\x09\x09];\x0a\x09\x09let\x20bestFPSMatches\x20=\x20[];\x0a\x09\x09let\x20deltaStorage\x20=\x20[];\x0a\x09\x09let\x20deltaCount\x20=0;\x0a\x09\x09let\x20lastMediaTimeForFPSGetting\x20=\x20-1;\x0a\x09\x09//let\x20fps\x20=\x2060;\x0a\x09\x09let\x20count\x20=\x200;\x0a\x09\x09const\x20addTime\x20=\x20(mediaTime)\x20=>\x20{\x0a\x09\x09\x09count++;\x0a\x09\x09\x09//let\x20fraction2PossibleFPS\x20=\x20new\x20Map();\x0a\x09\x09\x09let\x20minFraction=999;\x0a\x09\x09\x09let\x20minCandidateFps=0;\x0a\x09\x09\x09if\x20(lastMediaTimeForFPSGetting\x20==\x20-1){\x0a\x09\x09\x09\x09lastMediaTimeForFPSGetting\x20=\x20mediaTime;\x0a\x09\x09\x09\x09return;\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09let\x20delta\x20=\x20mediaTime\x20-\x20lastMediaTimeForFPSGetting;\x0a\x09\x09\x09\x09if\x20(deltaCount<100){\x0a\x09\x09\x09\x09\x09deltaStorage.push(delta);\x0a\x09\x09\x09\x09\x09deltaCount++;\x0a\x09\x09\x09\x09\x09return;\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09else{\x0a\x09\x09\x09\x09\x09deltaStorage.push(delta);\x0a\x09\x09\x09\x09\x09deltaStorage.shift();\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09let\x20total\x20=\x200;\x0a\x09\x09\x09\x09for(let\x20i\x20=\x200;\x20i\x20<\x20deltaStorage.length;\x20i++)\x20{\x0a\x09\x09\x09\x09\x09total\x20+=\x20deltaStorage[i];\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09delta\x20=\x20total\x20/\x20deltaStorage.length;\x0a\x09\x09\x09\x09//console.log(\x22delta=\x20\x22\x20+\x20\x20delta.toFixed(5)\x20+\x20\x22\x20fps=\x20\x22\x20+\x20(1/delta).toFixed(2));\x0a\x09\x09\x09\x09if\x20((1/delta)\x20<\x2040)\x0a\x09\x09\x09\x09\x09possibleFps\x20=\x20possibleFps29_30;\x20\x0a\x09\x09\x09\x09else\x20\x0a\x09\x09\x09\x09\x09possibleFps\x20=\x20possibleFps59_60;\x0a\x09\x09\x09}\x0a\x09\x09\x09//possibleFps\x20=\x20possibleFps59_60;\x0a\x09\x09\x09lastMediaTimeForFPSGetting\x20=\x20mediaTime;\x0a\x09\x09\x09\x0a\x09\x09\x09for\x20(let\x20i\x20=\x200;\x20i\x20<\x20possibleFps.length;\x20++i)\x20{\x0a\x09\x09\x09\x09let\x20candidateFps\x20=\x20possibleFps[i];\x0a\x09\x09\x09\x09let\x20dblFrame\x20=\x20mediaTime*candidateFps;\x0a\x09\x09\x09\x09let\x20intFrame\x20=\x20Math.round(dblFrame);\x0a\x09\x09\x09\x09let\x20fraction\x20=\x20Math.abs(dblFrame\x20-\x20intFrame);\x0a\x09\x09\x09\x09if\x20(fraction\x20<\x20minFraction)\x0a\x09\x09\x09\x09{\x0a\x09\x09\x09\x09\x09minFraction\x20=\x20fraction;\x0a\x09\x09\x09\x09\x09minCandidateFps\x20=\x20candidateFps;\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x09\x0a\x09\x09\x09\x09//fraction2PossibleFPS.set(fraction,\x20candidateFps);\x0a\x09\x09\x09}\x0a\x09\x09\x09let\x20bestFPSMatch\x20=\x20minCandidateFps;//fraction2PossibleFPS.entries().next().value[1];\x0a\x09\x09\x09bestFPSMatches.push(bestFPSMatch);\x0a\x09\x09\x09//console.log(\x22bestFPSMatch\x20=\x20\x22\x20+\x20bestFPSMatch);\x0a\x09\x09\x09if(count>1000)\x0a\x09\x09\x09\x09bestFPSMatches.shift();\x20//deleting\x20the\x20first\x20el\x0a\x09\x09}\x0a\x09\x09const\x20getProbableFPS\x20=\x20()\x20=>\x20{\x0a\x09\x09\x20\x20let\x20count\x20=\x20{};\x0a\x09\x09\x20\x20let\x20mostOccurringValue;\x0a\x09\x09\x20\x20let\x20maxCount\x20=\x200;\x0a\x09\x09\x20\x20\x0a\x09\x09\x20\x20//\x20Count\x20the\x20occurrences\x20of\x20each\x20value\x20in\x20the\x20array\x0a\x09\x09\x20\x20for\x20(let\x20i\x20=\x200;\x20i\x20<\x20bestFPSMatches.length;\x20i++)\x20{\x0a\x09\x09\x09let\x20value\x20=\x20bestFPSMatches[i];\x0a\x09\x09\x09count[value]\x20=\x20(count[value]\x20||\x200)\x20+\x201;\x0a\x09\x09\x09\x0a\x09\x09\x09//\x20Update\x20the\x20most\x20occurring\x20value\x20and\x20its\x20count\x20if\x20necessary\x0a\x09\x09\x09if\x20(count[value]\x20>\x20maxCount)\x20{\x0a\x09\x09\x09\x20\x20mostOccurringValue\x20=\x20value;\x0a\x09\x09\x09\x20\x20maxCount\x20=\x20count[value];\x0a\x09\x09\x09}\x0a\x09\x09\x20\x20}\x0a\x09\x09\x20\x20\x0a\x09\x09\x20\x20return\x20mostOccurringValue;\x0a\x09\x09}\x0a\x0a\x09\x09const\x20howMany\x20=\x20()\x20=>\x20{\x0a\x09\x09\x09\x09return\x20count;\x0a\x09\x09\x09};\x0a\x09\x09\x09\x0a\x09\x09\x09return\x20{\x0a\x09\x09\x09\x09addTime:addTime,\x0a\x09\x09\x09\x09getProbableFPS:getProbableFPS,\x0a\x09\x09\x09\x09howMany:howMany\x0a\x09\x09\x09};\x0a\x09\x09\x09\x0a\x09\x09\x09\x0a\x09\x09};\x0a\x09\x0a\x09return\x20\x20{\x0a\x09\x09TimeCodesFramesTranslator,\x0a\x09\x09MedianCalculator,\x0a\x09\x09Platform,\x0a\x09\x09FPSGetter\x0a\x09}\x0a})();\x0a////////^temp\x20code.\x20Need\x20to\x20transfer\x20from\x20main\x20thread\x0a\x0aBB.Composer3d\x20=\x20class\x20{\x0a\x20\x20\x20\x20constructor(GL,\x20canvas,\x20sourceFPS,renderTimecode/*,\x20videoContainer,video,options*/)\x20{\x0a\x09\x09//BB.Utils\x20=\x20new\x20Function(\x27return\x20\x27\x20+\x20BBUtilsString)();\x0a\x09\x09BB.GL\x20=\x20GL;\x0a\x09\x09this.canvas\x20=\x20canvas;\x0a\x09\x09//let\x20renderTimecode\x20=\x20true;\x20//alal\x0a\x09\x09//this.digitImg\x20=\x20digitImg;\x09\x0a\x09\x09//\x20if\x20(options.augmentation.renderTimecode)\x20{\x0a\x09\x09\x09//\x20this.digitImg\x20=\x20{};\x0a\x09\x09\x09//\x20for\x20(let\x20i\x20=\x200;\x20i\x20<\x2010;\x20++i)\x20{\x0a\x09\x09\x09//\x20\x09let\x20str1\x20=\x20i\x20+\x20\x22.1\x22;\x0a\x09\x09\x09//\x20\x09let\x20str2\x20=\x20i\x20+\x20\x22.2\x22;\x0a\x09\x09\x09//\x20\x09this.digitImg[str1]\x20=\x20this.CreateDigitImg(str1);\x0a\x09\x09\x09//\x20\x09this.digitImg[str2]\x20=\x20this.CreateDigitImg(str2);\x0a\x09\x09\x09//\x20}\x0a\x0a\x09\x09\x09//\x20Function\x20to\x20create\x20ImageBitmap\x20instead\x20of\x20Blob\x0a\x09\x09async\x20function\x20CreateDigitImg2(str)\x20{\x0a\x09\x09\x09let\x20canvas\x20=\x20new\x20OffscreenCanvas(50,\x2050);\x0a\x09\x09\x09let\x20ctx\x20=\x20canvas.getContext(\x272d\x27);\x0a\x0a\x09\x09\x09//\x20Fill\x20the\x20canvas\x20background\x20with\x20black\x0a\x09\x09\x09ctx.fillStyle\x20=\x20\x27black\x27;\x0a\x09\x09\x09ctx.fillRect(0,\x200,\x20canvas.width,\x20canvas.height);\x0a\x0a\x09\x09\x09//\x20Set\x20the\x20font\x20properties\x20and\x20fill\x20with\x20white\x20text\x0a\x09\x09\x09ctx.font\x20=\x20\x2730px\x20Arial\x27;\x0a\x09\x09\x09ctx.fillStyle\x20=\x20\x27white\x27;\x0a\x09\x09\x09ctx.fillText(str,\x2010,\x2035);\x0a\x0a\x09\x09\x09//\x20Convert\x20canvas\x20to\x20ImageBitmap\x20(instead\x20of\x20Blob)\x0a\x09\x09\x09return\x20await\x20canvas.transferToImageBitmap();\x0a\x09\x09}\x0a\x09\x09\x09this.digitImg\x20=\x20{};\x0a\x09\x09\x09for\x20(let\x20i\x20=\x200;\x20i\x20<\x2010;\x20++i)\x20{\x0a\x09\x09\x09\x09let\x20str1\x20=\x20i\x20+\x20\x22.1\x22;\x0a\x09\x09\x09\x09let\x20str2\x20=\x20i\x20+\x20\x22.2\x22;\x0a\x09\x09\x09\x09//\x20Call\x20the\x20async\x20CreateDigitImg\x20and\x20handle\x20the\x20result\x20with\x20.then()\x0a\x09\x09\x09\x09CreateDigitImg2(str1).then(imageBitmap\x20=>\x20{\x0a\x09\x09\x09\x09\x09this.digitImg[str1]\x20=\x20imageBitmap;\x0a\x09\x09\x09\x09});\x0a\x09\x09\x09\x0a\x09\x09\x09\x09CreateDigitImg2(str2).then(imageBitmap\x20=>\x20{\x0a\x09\x09\x09\x09\x09this.digitImg[str2]\x20=\x20imageBitmap;\x0a\x09\x09\x09\x09});\x0a\x09\x09\x09}\x09\x09\x09\x0a\x09\x09//}\x0a\x20\x20\x20\x20\x20\x20\x20\x20//this.options\x20=\x20Object.assign({adLoopTime:5000,isAdLoop:\x20false},options\x20||\x20{});\x0a\x09\x09this.options\x20=\x20{adLoopTime:5000,isAdLoop:\x20false,\x20sourceFPS:\x20sourceFPS,\x20renderTimecode:\x20renderTimecode};\x0a\x09\x09this.sourceFPS\x20=\x2060000/1001;\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.metadataArr\x20=\x20[];\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.metadataMap\x20=\x20{};\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.videoStarted\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.advertisementMap\x20=\x20{};\x0a\x09\x09this.ad2Url\x20=\x20{};//map\x20an\x20ad\x20to\x20its\x20url\x0a\x09\x09this.videoCopier\x20=\x20null;\x0a\x09\x09//create\x20a\x20webgl\x20canvas:\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20//this.canvas\x20=\x20document.createElement(\x27canvas\x27);\x0a\x09\x09this.ctx\x20=\x20this.canvas.getContext(\x27webgl\x27,\x20{premultipliedAlpha:\x20false});\x0a\x09\x09this.webGLVersion\x20=\x201;\x0a\x09\x09//\x20this.ctx\x20=\x20this.canvas.getContext(\x27webgl2\x27,\x20{premultipliedAlpha:\x20false});\x0a\x09\x09//\x20if\x20(this.ctx\x20==\x20null)\x0a\x09\x09//\x20{\x0a\x09\x09\x09//\x20this.ctx\x20=\x20this.canvas.getContext(\x27webgl\x27,\x20{premultipliedAlpha:\x20false,\x20antialias:\x20true});\x0a\x09\x09\x09//\x20this.webGLVersion\x20=\x201;\x0a\x09\x09//\x20}\x0a\x09\x09//\x20else\x0a\x09\x09//\x20{\x0a\x09\x09\x09//\x20this.webGLVersion\x20=\x202;\x0a\x09\x09//\x20}\x0a\x09\x09console.log(\x22Created\x20webgl\x20context:\x20\x22\x20+\x20this.ctx\x20+\x20\x22\x20version\x20\x22\x20+\x20this.webGLVersion);//@oror\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x09\x09//place\x20it\x20on\x20top\x20of\x20the\x20video\x20player:\x0a\x09\x09//\x20let\x20oTop\x20=\x20videoContainer.offsetTop;\x0a\x09\x09//\x20let\x20oLeft\x20=\x20videoContainer.offsetLeft;\x0a\x09\x09//\x20let\x20videoTag\x20=\x20videoContainer.getElementsByTagName(\x22video\x22)[0];\x0a\x09\x09//\x20this.canvas.style.top\x20=\x200;\x0a\x09\x09//\x20this.canvas.style.left\x20=\x200;\x09\x0a\x09\x09\x0a\x0a\x09\x09//\x20Create\x20a\x20<style>\x20element\x20for\x20fullscreen\x20styles\x0a//\x20let\x20style\x20=\x20document.createElement(\x27style\x27);\x0a//\x20style.textContent\x20=\x20`\x0a//\x20\x20\x20\x20\x20canvas:fullscreen\x20{\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20position:\x20absolute;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20width:\x20100%;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20height:\x20100%;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20top:\x200;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20left:\x200;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20z-index:\x2010;\x20/*\x20Adjust\x20as\x20needed\x20*/\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20/*\x20Additional\x20styles\x20*/\x0a//\x20\x20\x20\x20\x20}\x0a//\x20\x20\x20\x20\x20/*\x20For\x20vendor-prefixed\x20fullscreen\x20pseudo-classes\x20(older\x20browsers)\x20*/\x0a//\x20\x20\x20\x20\x20canvas:-webkit-full-screen\x20{\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20position:\x20absolute;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20width:\x20100%;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20height:\x20100%;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20top:\x200;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20left:\x200;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20z-index:\x2010;\x0a//\x20\x20\x20\x20\x20}\x0a//\x20\x20\x20\x20\x20canvas:-moz-full-screen\x20{\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20position:\x20absolute;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20width:\x20100%;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20height:\x20100%;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20top:\x200;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20left:\x200;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20z-index:\x2010;\x0a//\x20\x20\x20\x20\x20}\x0a//\x20\x20\x20\x20\x20canvas:-ms-fullscreen\x20{\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20position:\x20absolute;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20width:\x20100%;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20height:\x20100%;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20top:\x200;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20left:\x200;\x0a//\x20\x20\x20\x20\x20\x20\x20\x20\x20z-index:\x2010;\x0a//\x20\x20\x20\x20\x20}\x0a//\x20`;\x0a//\x20document.head.appendChild(style);\x0a\x0a//\x20Request\x20fullscreen\x20mode\x20for\x20the\x20canvas\x0a//\x20this.canvas.requestFullscreen().catch(err\x20=>\x20{\x0a//\x20\x20\x20\x20\x20console.log(`Error\x20attempting\x20to\x20enable\x20fullscreen\x20mode:\x20${err.message}\x20(${err.name})`);\x0a//\x20});\x0a\x0a\x0a\x0a\x0a\x09\x09//\x20if\x20(typeof\x20wmcPlayer\x20!=\x27undefined\x27)\x0a\x09\x09//\x20{\x0a\x09\x09//\x20\x09this.canvas.style.top\x20=\x200;\x0a\x09\x09//\x20\x09this.canvas.style.left\x20=\x200;\x09\x0a\x09\x09//\x20}\x0a\x09\x09//\x20else\x0a\x09\x09//\x20{\x0a\x09\x09//\x20\x09this.canvas.style.top\x20=\x20oTop\x20+\x20\x22px\x22;\x0a\x09\x09//\x20\x09this.canvas.style.left\x20=\x20oLeft\x20+\x20\x22px\x22;\x09\x0a\x09\x09//\x20}\x0a\x09\x09\x0a\x09\x09//\x20if\x20(videoTag.readyState\x20>=\x202)\x20\x0a\x09\x09//\x20{\x0a\x09\x09\x09//\x20this.canvas.style.top\x20=\x20videoTag.style.top;\x0a\x09\x09\x09//\x20this.canvas.style.left\x20=\x20videoTag.style.left;\x09\x0a\x09\x09//\x20}\x0a\x09\x09//\x20else\x0a\x09\x09//\x20{\x0a\x09\x09\x09//\x20videoTag.addEventListener(\x27loadedmetadata\x27,\x20()\x20=>\x20{\x0a\x09\x09\x09\x09//\x20this.canvas.style.top\x20=\x20videoTag.offsetTop\x20+\x20\x22px\x22;\x0a\x09\x09\x09\x09//\x20this.canvas.style.left\x20=\x20videoTag.offsetLeft\x20+\x20\x22px\x22;\x09\x0a\x09\x09\x09//\x20});\x0a\x09\x09//\x20}\x0a\x09\x09//\x20this.canvas.style.width\x20=\x20\x22100%\x22;\x0a\x09\x09//\x20this.canvas.style.zIndex\x20=\x20100000;\x0a\x09\x09//\x20this.canvas.width\x20=\x20videoContainer.clientWidth;\x0a\x09\x09//\x20this.canvas.height\x20=\x20videoContainer.clientHeight;\x0a\x09\x09//\x20this.canvas.style.position\x20=\x20\x22absolute\x22;\x0a\x09\x09\x0a\x09\x09//\x20let\x20nextElement\x20=\x20videoTag.nextSibling;\x0a\x09\x09\x0a\x09\x09//\x20if(nextElement)\x20\x0a\x09\x09//\x20\x09videoContainer.insertBefore(\x20this.canvas,nextElement);\x0a\x09\x09//\x20else\x20\x0a\x09\x09//\x20\x09videoContainer.appendChild(this.canvas);\x0a\x09\x09//\x20this.canvas.style[\x22pointer-events\x22]\x20=\x20\x22none\x22;\x0a\x09\x09//\x20videoTag.addEventListener(\x22click\x22,\x20(e)\x20=>\x20{\x0a\x09\x09//\x20\x09this.OnUserClickOnCanvas(e);\x0a\x09\x09//\x20});\x0a\x09\x09//\x20this.canvas.addEventListener(\x22dblclick\x22,\x20this.ToggleFullscreen);\x0a\x09\x09//let\x20that\x20=\x20this;\x0a\x09\x09//this.canvas.addEventListener(\x22mousedown\x22,\x20function(e)\x20{\x0a\x09\x09\x09//that.OnUserClickOnCanvas(e);\x0a\x09\x09//});\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.InitGL();\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.adTexture\x20=\x20null;//general\x20ad\x20texture\x0a\x09\x09this.place2AdTexture\x20=\x20{};//mapping\x20specific\x20places\x20to\x20their\x20texture\x0a\x09\x09this.place2ad\x20=\x20{};//mapping\x20which\x20ads\x20belong\x20to\x20whcih\x20place\x0a\x09\x09this.ad2place\x20=\x20{};//other\x20way\x20around\x0a\x09\x09this.currentAds2BoundingRect\x20=\x20[];//array\x20of\x20current-frame\x20ads\x20to\x20their\x20bounding\x20rect\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.lastTimeReportedIncomingTC\x20=\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.autoAddIndex\x20=\x20null;\x0a\x20\x20\x20\x20}\x0a\x09\x0a\x09isPowerOf2(value)\x20{\x0a\x09\x20\x20return\x20(value\x20&\x20(value\x20-\x201))\x20==\x200;\x0a\x09}\x0a\x09CreateDigitImg(str)\x20{\x0a\x09\x09//\x20Create\x20an\x20OffscreenCanvas\x20instead\x20of\x20a\x20regular\x20canvas\x0a\x09\x09let\x20canvas\x20=\x20new\x20OffscreenCanvas(50,\x2050);\x20//\x20Width\x20and\x20height\x20are\x20set\x20to\x2050x50\x0a\x09\x09let\x20ctx\x20=\x20canvas.getContext(\x272d\x27);\x20//\x20Get\x20the\x202D\x20rendering\x20context\x0a\x09\x0a\x09\x09//\x20Set\x20the\x20background\x20color\x20to\x20black\x0a\x09\x09ctx.fillStyle\x20=\x20\x27black\x27;\x0a\x09\x09ctx.fillRect(0,\x200,\x20canvas.width,\x20canvas.height);\x0a\x09\x0a\x09\x09//\x20Set\x20the\x20font\x20properties\x0a\x09\x09ctx.font\x20=\x20\x2730px\x20Arial\x27;\x0a\x09\x09ctx.fillStyle\x20=\x20\x27white\x27;\x0a\x09\x0a\x09\x09//\x20Draw\x20the\x20string\x20(digit)\x20on\x20the\x20canvas\x0a\x09\x09ctx.fillText(str,\x2010,\x2035);\x20//\x20Adjust\x20the\x20position\x20as\x20needed\x0a\x09\x0a\x09\x09//\x20Convert\x20canvas\x20to\x20ImageBitmap\x20(instead\x20of\x20Blob)\x0a\x09\x09return\x20canvas.transferToImageBitmap();\x0a\x09\x09//\x20Convert\x20the\x20canvas\x20to\x20a\x20Blob\x0a\x09\x09//return\x20canvas.convertToBlob();\x20//\x20Returns\x20a\x20promise\x20for\x20a\x20Blob\x0a\x09}\x0a\x0a\x09CreateDigitImg_old(str)\x20{\x0a\x09\x09//\x20Create\x20a\x20canvas\x20element\x0a\x09\x09let\x20canvas\x20=\x20document.createElement(\x27canvas\x27);\x0a\x09\x09canvas.width\x20=\x2050;\x20//\x20Set\x20the\x20width\x20of\x20the\x20canvas\x0a\x09\x09canvas.height\x20=\x2050;\x20//\x20Set\x20the\x20height\x20of\x20the\x20canvas\x0a\x0a\x09\x09//\x20Get\x20the\x202D\x20rendering\x20context\x0a\x09\x09let\x20ctx\x20=\x20canvas.getContext(\x272d\x27);\x0a\x09\x09//\x20Set\x20the\x20fill\x20style\x20to\x20black\x0a\x09\x09ctx.fillStyle\x20=\x20\x27black\x27;\x0a\x0a\x09\x09//\x20Fill\x20the\x20entire\x20canvas\x20with\x20black\x0a\x09\x09ctx.fillRect(0,\x200,\x20canvas.width,\x20canvas.height);\x0a\x0a\x09\x09//\x20Set\x20the\x20font\x20properties\x0a\x09\x09ctx.font\x20=\x20\x2730px\x20Arial\x27;\x0a\x09\x09ctx.fillStyle\x20=\x20\x27white\x27;\x0a\x0a\x09\x09//\x20Draw\x20the\x20number\x20on\x20the\x20canvas\x0a\x09\x09ctx.fillText(str,\x2010,\x2035);\x20//\x20Adjust\x20the\x20position\x20as\x20needed\x0a\x09\x09\x0a\x0a\x09\x09//\x20Convert\x20the\x20canvas\x20to\x20a\x20data\x20URL\x0a\x09\x09let\x20dataURL\x20=\x20canvas.toDataURL();\x0a\x0a\x09\x09//\x20Create\x20an\x20image\x20element\x20and\x20set\x20its\x20source\x20to\x20the\x20data\x20URL\x0a\x09\x09let\x20img\x20=\x20document.createElement(\x27img\x27);\x0a\x09\x09img.src\x20=\x20dataURL;\x0a\x09\x09\x0a\x09\x09return\x20img;\x0a\x09}\x0a\x09OnUserClickOnCanvas(event)\x20{\x0a\x09\x09const\x20rect\x20=\x20event.rect;//this.canvas.getBoundingClientRect();\x0a\x09\x09let\x20x\x20=\x20event.clientX\x20-\x20rect.left;\x0a\x09\x09let\x20y\x20=\x20event.clientY\x20-\x20rect.top;\x0a\x09\x09x\x20=\x20x/(rect.right\x20-\x20rect.left);\x0a\x09\x09y\x20=\x20y/(rect.bottom\x20-\x20rect.top);\x0a\x09\x09//console.log(\x22CANVAS\x20CLICKED\x20!\x20x:\x20\x22\x20+\x20x\x20+\x20\x22\x20y:\x20\x22\x20+\x20y);\x0a\x09\x09for\x20(let\x20currentAd\x20of\x20this.currentAds2BoundingRect)\x20{\x0a\x09\x09\x09if\x20(currentAd.rect.l\x20<=\x20x\x20&&\x20currentAd.rect.r\x20>=\x20x\x20&&\x20\x0a\x09\x09\x09currentAd.rect.t\x20<=\x20y\x20&&\x20currentAd.rect.b\x20>=\x20y)\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09let\x20adNameWithoutThatStupidHashSign\x20=\x20currentAd.name.substring(1);\x0a\x09\x09\x09\x09if\x20(this.ad2Url[adNameWithoutThatStupidHashSign])\x20{\x0a\x09\x09\x09\x09\x09let\x20urlToGo\x20=\x20this.ad2Url[adNameWithoutThatStupidHashSign];\x0a\x09\x09\x09\x09\x09console.log(\x22Clicked\x20on\x20ad:\x20\x22\x20+\x20adNameWithoutThatStupidHashSign\x20+\x20\x22\x20so\x20should\x20navigate\x20to\x20\x22\x20+\x20urlToGo\x20+\x20\x22\x20!!!!!!!!!!!!!!!!!!!!!!\x22);\x09\x0a\x09\x09\x09\x09\x09postMessage({\x20action:\x20\x27open-uri\x27,\x20url:\x20urlToGo\x20});\x0a\x09\x09\x09\x09\x09//window.open(urlToGo,\x20\x27_blank\x27);\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09return;\x0a\x09\x09\x09}\x0a\x09\x09}\x0a\x09\x09\x0a\x09}\x0a\x09/*TexUnitForInjectoLogo(){\x0a\x09\x09return\x200;\x0a\x09}*/\x0a\x09TexUnitForGenericAd(){\x0a\x09\x09return\x200;\x0a\x09}\x0a\x09TexUnitForAdInPlace(place){\x0a\x09\x09let\x20placesArr\x20=\x20Object.keys(this.place2ad);\x0a\x09\x09for\x20(let\x20i\x20=\x200;\x20i\x20<\x20placesArr.length;\x20++i)\x0a\x09\x09{\x0a\x09\x09\x09if\x20(place\x20==\x20placesArr[i])\x20return\x20i\x20+\x201;\x0a\x09\x09}\x0a\x09\x09return\x200;\x0a\x09}\x0a\x09/*TexUnitForVideo()\x20{\x0a\x09\x09let\x20placesArr\x20=\x20Object.keys(this.place2ad);\x0a\x09\x09return\x201\x20+\x20placesArr.length;\x0a\x09}*/\x0a\x09TexUnitForPlaceHolder(placeHolder)\x20{\x0a\x09\x09let\x20placesArr\x20=\x20Object.keys(this.place2ad);\x0a\x09\x09for\x20(let\x20i\x20=\x200;\x20i\x20<\x20placesArr.length;\x20++i)\x0a\x09\x09{\x0a\x09\x09\x09let\x20place\x20=\x20placesArr[i];//wall\x0a\x09\x09\x09if\x20(placeHolder.name.indexOf(place)\x20>=\x200)\x20return\x20i;//\x20+\x201;\x0a\x09\x09}\x0a\x09\x09return\x200;\x0a\x09\x09\x0a\x09}\x0a\x09AdNameForPlaceHolder(placeHolder)\x20{\x0a\x09\x09let\x20placesArr\x20=\x20Object.keys(this.place2ad);\x0a\x09\x09for\x20(let\x20i\x20=\x200;\x20i\x20<\x20placesArr.length;\x20++i)\x0a\x09\x09{\x0a\x09\x09\x09let\x20place\x20=\x20placesArr[i];//wall\x0a\x09\x09\x09if\x20(placeHolder.name.indexOf(place)\x20>=\x200\x20&&\x20this.place2AdTexture\x20&&\x20this.place2AdTexture[place]\x20&&\x20this.place2AdTexture[place].name)\x20\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09return\x20this.place2AdTexture[place].name;\x0a\x09\x09\x09}\x0a\x09\x09}\x0a\x09\x09return\x20this.lastAdName;\x0a\x09}\x0a\x09TexUnitBaseForAlpha()\x20{\x0a\x09\x09return\x201\x20+\x20Object.keys(this.place2ad).length;//\x20+\x201;\x0a\x09}\x0a\x20\x20\x20\x20InitGL()\x20{\x0a\x09\x09//\x20setup\x20GLSL\x20this.program\x0a\x09\x09let\x20newFragmentShaderSource\x20=\x20BB.GL.fragmentShaderSource;\x0a\x09\x09//FIX\x20for\x20MAC\x20(it\x20has\x20bugs\x20with\x20transparensy\x20with\x20light\x20and\x20bright\x20colors\x20so\x20didabling\x20transparensy\x20if\x20alpha\x20in\x20shader\x20is\x20less\x20then\x200.8)\x0a\x09\x09if\x20(BB.Utils.Platform.isSafariMac())\x0a\x09\x09\x09newFragmentShaderSource\x20=\x20BB.GL.fragmentShaderSource.replace(\x22if\x20(alpha\x20==\x200.0)\x22,\x20\x22if\x20(alpha\x20<\x200.8)\x22);\x0a\x09\x09this.program\x20=\x20webglUtils.createProgramFromSources(this.ctx,\x0a\x09\x09this.webGLVersion\x20==\x202\x20?\x20[BB.GL.vertexShaderSource,\x20newFragmentShaderSource]\x20:\x0a\x09\x09\x09\x09\x09\x09\x09\x09\x20[BB.GL.vertexShaderSourceV1,\x20BB.GL.fragmentShaderSourceV1]);\x0a\x09\x09this.ctx.clearColor(0.0,\x200.0,\x200.0,\x200.0);//Set\x20clear\x20color\x20to\x20black,\x20fully\x20opaque\x0a\x09\x09this.ctx.clear(this.ctx.COLOR_BUFFER_BIT);//\x20Clear\x20the\x20color\x20buffer\x20with\x20specified\x20clear\x20color\x0a\x09\x09this.ctx.useProgram(this.program);//\x20Tell\x20it\x20to\x20use\x20our\x20this.program\x20(pair\x20of\x20shaders)\x0a\x09\x09this.counter\x20=\x200;\x0a\x09\x09this.CleanGL();\x0a\x20\x20\x20\x20}\x0a\x09CleanGL()\x20{\x0a\x09\x09//this.canvas.style.display=\x22none\x22;\x0a\x09\x09this.ctx.clearColor(0.0,\x200.0,\x200.0,\x200.0);//Set\x20clear\x20color\x20to\x20black,\x20fully\x20opaque\x0a\x09\x09this.ctx.clear(this.ctx.COLOR_BUFFER_BIT);//\x20Clear\x20the\x20color\x20buffer\x20with\x20specified\x20clear\x20color\x0a\x09\x09this.alphaFound\x20=\x200;\x0a\x09}\x0a\x20\x20\x20\x20GenerateTexture(\x0a\x20\x20\x20\x20\x20\x20\x20\x20imageData,\x0a\x20\x20\x20\x20\x20\x20\x20\x20textureUnit,\x0a\x20\x20\x20\x20\x20\x20\x20\x20uniformName,\x0a\x20\x20\x20\x20\x20\x20\x20\x20internalFormat,\x0a\x20\x20\x20\x20\x20\x20\x20\x20width,\x0a\x20\x20\x20\x20\x20\x20\x20\x20height,\x0a\x20\x20\x20\x20\x20\x20\x20\x20oneByteAlignment)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//void\x20this.ctx.texImage2D(target,\x20level,\x20internalformat,\x20width,\x20height,\x20border,\x20format,\x20type,\x20ImageData\x20source);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(oneByteAlignment)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.pixelStorei(this.ctx.UNPACK_ALIGNMENT,\x201);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.pixelStorei(this.ctx.UNPACK_ALIGNMENT,\x204);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x09\x09this.ctx.pixelStorei(this.ctx.UNPACK_FLIP_Y_WEBGL,\x20false);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20texture\x20=\x20this.ctx.createTexture();\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.activeTexture(this.ctx.TEXTURE0\x20+\x20textureUnit);\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.bindTexture(this.ctx.TEXTURE_2D,\x20texture);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(width\x20&&\x20height)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.texImage2D(this.ctx.TEXTURE_2D,\x200,\x20(internalFormat\x20==\x20null\x20?\x20this.ctx.RGBA\x20:\x20internalFormat),\x20width,\x20height,\x200,\x20(internalFormat\x20==\x20null\x20?\x20this.ctx.RGBA\x20:\x20internalFormat),\x20this.ctx.UNSIGNED_BYTE,\x20imageData);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.texImage2D(this.ctx.TEXTURE_2D,\x200,\x20(internalFormat\x20==\x20null\x20?\x20this.ctx.RGBA\x20:\x20internalFormat),\x20this.ctx.RGBA,\x20this.ctx.UNSIGNED_BYTE,\x20imageData);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20catch\x20(ex)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(ex);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return\x20null;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x09\x09if\x20(this.webGLVersion\x20==\x201)\x0a\x09\x09{\x0a\x09\x09\x09let\x20widthToInspect\x20=\x20width\x20||\x20imageData.width;\x0a\x09\x09\x09let\x20heightToInspect\x20=\x20height\x20||\x20imageData.height;\x0a\x09\x09\x09if\x20(widthToInspect\x20&&\x20this.isPowerOf2(widthToInspect)\x20&&\x20heightToInspect\x20&&\x20this.isPowerOf2(heightToInspect))\x20{\x0a\x09\x09\x09\x09//\x20Yes,\x20it\x27s\x20a\x20power\x20of\x202.\x20Generate\x20mips.\x0a\x09\x09\x09\x20\x20\x20this.ctx.generateMipmap(this.ctx.TEXTURE_2D);\x0a\x09\x09\x09}\x20else\x20{\x0a\x09\x09\x09\x20\x20\x20//\x20No,\x20it\x27s\x20not\x20a\x20power\x20of\x202.\x20Turn\x20off\x20mips\x20and\x20set\x0a\x09\x09\x09\x20\x20\x20//\x20wrapping\x20to\x20clamp\x20to\x20edge\x0a\x09\x09\x09\x20\x20\x20this.ctx.texParameteri(this.ctx.TEXTURE_2D,\x20this.ctx.TEXTURE_WRAP_S,\x20this.ctx.CLAMP_TO_EDGE);\x0a\x09\x09\x09\x20\x20\x20this.ctx.texParameteri(this.ctx.TEXTURE_2D,\x20this.ctx.TEXTURE_WRAP_T,\x20this.ctx.CLAMP_TO_EDGE);\x0a\x09\x09\x09\x20\x20\x20this.ctx.texParameteri(this.ctx.TEXTURE_2D,\x20this.ctx.TEXTURE_MIN_FILTER,\x20this.ctx.LINEAR);\x0a\x09\x09\x09}\x0a\x09\x09}\x0a\x09\x09else\x0a\x09\x09{\x0a\x09\x09\x09//\x20Set\x20the\x20parameters\x20so\x20we\x20can\x20render\x20any\x20size\x20image.\x0a\x09\x09\x09this.ctx.texParameteri(this.ctx.TEXTURE_2D,\x20this.ctx.TEXTURE_WRAP_S,\x20this.ctx.CLAMP_TO_EDGE);\x0a\x09\x09\x09this.ctx.texParameteri(this.ctx.TEXTURE_2D,\x20this.ctx.TEXTURE_WRAP_T,\x20this.ctx.CLAMP_TO_EDGE);\x0a\x09\x09\x09this.ctx.texParameteri(this.ctx.TEXTURE_2D,\x20this.ctx.TEXTURE_MIN_FILTER,\x20this.ctx.LINEAR);\x0a\x09\x09\x09this.ctx.texParameteri(this.ctx.TEXTURE_2D,\x20this.ctx.TEXTURE_MAG_FILTER,\x20this.ctx.LINEAR);\x0a\x09\x09}\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20location\x20=\x20this.ctx.getUniformLocation(this.program,\x20uniformName);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(location)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.uniform1i(location,\x20textureUnit);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20texture;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20_nextAdvertisement()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.autoAddIndex\x20=\x20setTimeout(()=>{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20ads\x20=\x20Object.keys(this.advertisementMap);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(ads.length){\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.SelectAd(ads[Math.floor(Math.random()\x20*\x20ads.length)]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this._nextAdvertisement();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20},this.options.adLoopTime);\x0a\x20\x20\x20\x20}\x0a\x09async\x20AddAdvertisement(params)\x20{\x0a\x09\x09let\x20{\x20name,\x20path,\x20isSelected}\x20=\x20params;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(name.indexOf(\x22.json\x22)\x20>\x20-1)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fetch(path).then(async\x20res\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20this.place2ad\x20=\x20await\x20res.json();\x0a\x09\x09\x09\x09this.ad2place\x20=\x20{}\x0a\x09\x09\x09\x09//create\x20also\x20the\x20reverse\x20mapping\x0a\x09\x09\x09\x09let\x20placesArr\x20=\x20Object.keys(this.place2ad);\x0a\x09\x09\x09\x09for\x20(let\x20i\x20=\x200;\x20i\x20<\x20placesArr.length;\x20++i)\x20{\x0a\x09\x09\x09\x09\x09let\x20place\x20=\x20placesArr[i];\x0a\x09\x09\x09\x09\x09if\x20(place\x20==\x20\x22urls\x22)\x0a\x09\x09\x09\x09\x09{\x0a\x09\x09\x09\x09\x09\x09this.ad2Url\x20=\x20this.place2ad[place];\x0a\x09\x09\x09\x09\x09\x09delete\x20this.place2ad[place];\x0a\x09\x09\x09\x09\x09\x09continue;\x0a\x09\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x09let\x20adsForThisPlace\x20=\x20this.place2ad[place];\x0a\x09\x09\x09\x09\x09for\x20(let\x20j\x20=\x200;\x20j\x20<\x20adsForThisPlace.length;\x20++j)\x20{\x0a\x09\x09\x09\x09\x09\x09let\x20ad\x20=\x20adsForThisPlace[j];\x0a\x09\x09\x09\x09\x09\x09this.ad2place[\x22#\x22\x20+\x20ad]\x20=\x20place;\x0a\x09\x09\x09\x09\x09}\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09if\x20(Object.keys(this.place2ad).length\x20>\x200)\x20{\x0a\x09\x09\x09\x09\x09console.log(\x22composer::AddAdvertisement:\x20place-to-ads\x20mapping:\x20\x22,\x20this.place2ad);\x0a\x09\x09\x09\x09\x09console.log(\x22composer::AddAdvertisement:\x20ads-to-place\x20mapping:\x20\x22,\x20this.ad2place);\x0a\x09\x09\x09\x09\x09setTimeout(()=>{this.MakeSureAdPerPlace();},\x203000);//make\x20sure\x20its\x20ad\x20is\x20in\x20the\x20right\x20place\x20once\x20all\x20ads\x20are\x20loaded\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(isSelected)\x20this.SelectAd(name);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x09\x09//\x20Fetch\x20the\x20image\x20data\x20from\x20the\x20path\x0a\x09\x09const\x20response\x20=\x20await\x20fetch(path);\x0a\x09\x09const\x20blob\x20=\x20await\x20response.blob();\x0a\x0a\x09\x09//\x20Create\x20an\x20ImageBitmap\x20from\x20the\x20Blob\x0a\x09\x09const\x20imageBitmap\x20=\x20await\x20createImageBitmap(blob);\x0a\x0a\x09\x09let\x20isFirst\x20=\x20Object.keys(this.advertisementMap).length\x20===\x200;\x0a\x09\x09this.advertisementMap[name]\x20=\x20imageBitmap;\x0a\x09\x09if\x20(isFirst)\x20{\x0a\x09\x09\x09this.SelectAd(name);\x0a\x09\x09\x09if(this.options.isAdLoop)\x20{\x0a\x09\x09\x09\x09clearTimeout(this.autoAddIndex);\x0a\x09\x09\x09\x09this._nextAdvertisement();\x0a\x09\x09\x09}\x0a\x09\x20}\x0a\x20\x20\x20\x20}\x0a\x09MakeSureAdPerPlace()\x20{\x0a\x09\x09//in\x20case\x20we\x20have\x20places,\x20make\x20sure\x20each\x20place\x20has\x20its\x20initial\x20ad\x0a\x09\x09if\x20(this.place2ad)\x20{\x0a\x09\x09\x09let\x20placesArr\x20=\x20Object.keys(this.place2ad);\x0a\x09\x09\x09for\x20(let\x20i\x20=\x200;\x20i\x20<\x20placesArr.length;\x20++i)\x20{\x0a\x09\x09\x09\x09let\x20place\x20=\x20placesArr[i];\x0a\x09\x09\x09\x09//do\x20we\x20have\x20a\x20texture\x20for\x20that\x20place\x20?\x0a\x09\x09\x09\x09if\x20(!this.place2AdTexture[place]\x20&&\x20this.place2ad[place].length\x20>\x200)\x20{//no\x20we\x20don\x27t,\x20add\x20one\x0a\x09\x09\x09\x09\x09console.log(\x22MakeSureAdPerPlace:\x20Set\x20default\x20image\x20\x22\x20+\x20this.place2ad[place][0]\x20+\x20\x22\x20for\x20place\x20\x22\x20+\x20place);\x0a\x09\x09\x09\x09\x09this.SelectAd(\x22#\x22\x20+\x20this.place2ad[place][0]);\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09}\x0a\x09\x09}\x0a\x09}\x0a\x20\x20\x20\x20SelectAd(name)\x20{\x0a\x09\x09console.log(\x22composer::SelectAd:\x20selected\x20ad\x20is\x20\x22\x20+\x20name);\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20adImage\x20=\x20this.advertisementMap[name];\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(!adImage)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x22SelectAd:\x20Failed\x20to\x20find\x20image\x20\x27\x22\x20+\x20name\x20+\x20\x22\x27\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20else\x20{\x0a\x09\x09\x09//is\x20it\x20for\x20specific\x20place\x20?\x0a\x09\x09\x09if\x20(this.ad2place\x20&&\x20this.ad2place[name])\x20{//ad\x20for\x20a\x20particular\x20place\x0a\x09\x09\x09\x09let\x20place\x20=\x20this.ad2place[name];\x0a\x09\x09\x09\x09console.log(\x22composer::SelectAd:\x20The\x20selected\x20ad\x20should\x20be\x20in\x20place\x20\x22\x20+\x20place);\x0a\x09\x09\x09\x09let\x20texUnitId\x20=\x20this.TexUnitForAdInPlace(place);\x0a\x09\x09\x09\x09let\x20texName\x20=\x20\x22ad\x22\x20+\x20(texUnitId-1);\x0a\x09\x09\x09\x09if\x20(this.place2AdTexture[place])\x20this.ctx.deleteTexture(this.place2AdTexture[place].tex);\x0a\x09\x09\x09\x09this.place2AdTexture[place]\x20=\x20\x0a\x09\x09\x09\x09{\x09\x0a\x09\x09\x09\x09\x09tex:this.GenerateTexture(adImage,\x20texUnitId,\x20texName),\x0a\x09\x09\x09\x09\x09texUnitId:texUnitId,\x0a\x09\x09\x09\x09\x09texName:texName,\x0a\x09\x09\x09\x09\x09name:name\x0a\x09\x09\x09\x09};\x0a\x09\x09\x09\x09\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20{//general\x20ad\x0a\x09\x09\x09\x09if\x20(this.adTexture\x20!=\x20null)\x20{\x0a\x09\x09\x09\x09\x09this.ctx.deleteTexture(this.adTexture)\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09this.adTexture\x20=\x20this.GenerateTexture(adImage,\x20this.TexUnitForGenericAd(),\x20\x22ad0\x22);\x0a\x09\x09\x09\x09this.lastAd\x20=\x20adImage;\x0a\x09\x09\x09\x09this.lastAdName\x20=\x20name;\x0a\x09\x09\x09}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20};\x0a\x0a\x20\x20\x20\x20OnMetaData(frameMetaData)\x20{\x0a\x09\x09//console.BBlog(\x22OnMetaData\x20\x22\x20+\x20frameMetaData.timecode);\x0a\x09\x09this.metadataMap[frameMetaData.timecode]\x20=\x20frameMetaData;\x0a\x09\x09this.metadataArr.push(frameMetaData.timecode);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20ToggleFullscreen\x20()\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20(this.requestFullscreen\x20||\x20this.webkitRequestFullscreen).call(this).catch((err)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(err)\x0a\x20\x20\x20\x20\x20\x20\x20\x20});\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20RenderFrame()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20look\x20up\x20where\x20the\x20vertex\x20data\x20needs\x20to\x20go.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//let\x20texCoordAttributeLocation\x20=\x20this.ctx.getAttribLocation(this.program,\x20\x22a_texCoord\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20positionAttributeLocation\x20=\x20this.ctx.getAttribLocation(this.program,\x20\x22a_position\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20set\x20the\x20resolution\x20for\x20both\x20vertex\x20and\x20fragment\x20shaders\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20resolutionLocation\x20=\x20this.ctx.getUniformLocation(this.program,\x20\x22u_resolution\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20resolutionLocation2\x20=\x20this.ctx.getUniformLocation(this.program,\x20\x22u_resolution2\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.uniform2f(resolutionLocation,\x20this.ctx.canvas.width,\x20this.ctx.canvas.height);\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.uniform2f(resolutionLocation2,\x20this.ctx.canvas.width,\x20this.ctx.canvas.height);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//shader\x20matrix\x20(unity):\x0a\x09\x09if\x20(this.webGLVersion\x20==\x202)\x0a\x09\x09{\x0a\x09\x09\x09let\x20matrixLocation\x20=\x20this.ctx.getUniformLocation(this.program,\x20\x22u_matrix\x22);\x0a\x09\x09\x09let\x20matrix\x20=\x20[\x0a\x09\x09\x09\x091,\x200,\x200,\x0a\x09\x09\x09\x090,\x201,\x200,\x0a\x09\x09\x09\x090,\x200,\x201\x0a\x09\x09\x09];\x0a\x09\x09\x09this.ctx.uniformMatrix3fv(matrixLocation,\x20false,\x20matrix);\x0a\x09\x09}\x0a\x09\x09\x0a\x09\x09let\x20vao\x20=\x20null;\x0a\x09\x09if\x20(this.webGLVersion\x20==\x202)\x0a\x09\x09{\x0a\x09\x09\x09//\x20Create\x20a\x20vertex\x20array\x20object\x20(attribute\x20state)\x0a\x09\x09\x09vao\x20=\x20this.ctx.createVertexArray();\x0a\x0a\x09\x09\x09//\x20and\x20make\x20it\x20the\x20one\x20we\x27re\x20currently\x20working\x20with\x0a\x09\x09\x09this.ctx.bindVertexArray(vao);\x0a\x09\x09}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Create\x20a\x20buffer\x20and\x20put\x20a\x20single\x20pixel\x20space\x20rectangle\x20in\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20it\x20(2\x20triangles)\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20positionBuffer\x20=\x20this.ctx.createBuffer();\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Turn\x20on\x20the\x20attribute\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.enableVertexAttribArray(positionAttributeLocation);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Bind\x20it\x20to\x20ARRAY_BUFFER\x20(think\x20of\x20it\x20as\x20ARRAY_BUFFER\x20=\x20positionBuffer)\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,\x20positionBuffer);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Tell\x20the\x20attribute\x20how\x20to\x20get\x20data\x20out\x20of\x20positionBuffer\x20(ARRAY_BUFFER)\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20size\x20=\x202;\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x202\x20components\x20per\x20iteration\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20type\x20=\x20this.ctx.FLOAT;\x20\x20\x20//\x20the\x20data\x20is\x2032bit\x20floats\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20normalize\x20=\x20false;\x20//\x20don\x27t\x20normalize\x20the\x20data\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20stride\x20=\x200;\x20\x20\x20\x20\x20\x20\x20\x20//\x200\x20=\x20move\x20forward\x20size\x20*\x20sizeof(type)\x20each\x20iteration\x20to\x20get\x20the\x20next\x20position\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20offset\x20=\x200;\x20\x20\x20\x20\x20\x20\x20\x20//\x20start\x20at\x20the\x20beginning\x20of\x20the\x20buffer\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.vertexAttribPointer(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20positionAttributeLocation,\x20size,\x20type,\x20normalize,\x20stride,\x20offset);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20provide\x20texture\x20coordinates\x20for\x20the\x20rectangle.\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20texCoordBuffer\x20=\x20this.ctx.createBuffer();\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,\x20texCoordBuffer);\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.bufferData(this.ctx.ARRAY_BUFFER,\x20new\x20Float32Array([\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x200.0,\x200.0,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x201.0,\x200.0,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x200.0,\x201.0,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x200.0,\x201.0,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x201.0,\x200.0,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x201.0,\x201.0,\x0a\x20\x20\x20\x20\x20\x20\x20\x20]),\x20this.ctx.STATIC_DRAW);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x09\x09/*\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Turn\x20on\x20the\x20attribute\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.enableVertexAttribArray(texCoordAttributeLocation);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Tell\x20the\x20attribute\x20how\x20to\x20get\x20data\x20out\x20of\x20texCoordBuffer\x20(ARRAY_BUFFER)\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20size\x20=\x202;\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//\x202\x20components\x20per\x20iteration\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20type\x20=\x20this.ctx.FLOAT;\x20\x20\x20//\x20the\x20data\x20is\x2032bit\x20floats\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20normalize\x20=\x20false;\x20//\x20don\x27t\x20normalize\x20the\x20data\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20stride\x20=\x200;\x20\x20\x20\x20\x20\x20\x20\x20//\x200\x20=\x20move\x20forward\x20size\x20*\x20sizeof(type)\x20each\x20iteration\x20to\x20get\x20the\x20next\x20position\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20offset\x20=\x200;\x20\x20\x20\x20\x20\x20\x20\x20//\x20start\x20at\x20the\x20beginning\x20of\x20the\x20buffer\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.vertexAttribPointer(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20texCoordAttributeLocation,\x20size,\x20type,\x20normalize,\x20stride,\x20offset);\x0a\x09\x09*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20//webglUtils.resizeCanvasToDisplaySize(this.ctx.canvas);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Tell\x20WebGL\x20how\x20to\x20convert\x20from\x20clip\x20space\x20to\x20pixels\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.viewport(0,\x200,\x20this.ctx.canvas.width,\x20this.ctx.canvas.height);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Clear\x20the\x20canvas\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.clearColor(0,\x200,\x200,\x200);\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.clear(this.ctx.COLOR_BUFFER_BIT\x20|\x20this.ctx.DEPTH_BUFFER_BIT);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Bind\x20the\x20attribute/buffer\x20set\x20we\x20want.\x0a\x20\x20\x20\x20\x20\x20\x20\x20//this.ctx.bindVertexArray(vao);\x0a\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Bind\x20the\x20position\x20buffer\x20so\x20this.ctx.bufferData\x20that\x20will\x20be\x20called\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20in\x20setRectangle\x20puts\x20data\x20in\x20the\x20position\x20buffer\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.bindBuffer(this.ctx.ARRAY_BUFFER,\x20positionBuffer);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Set\x20a\x20rectangle\x20the\x20same\x20size\x20as\x20the\x20image.\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.SetRectangle(this.ctx,\x200,\x200,\x20this.canvas.width,\x20this.canvas.height);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20Draw\x20the\x20rectangle.\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20primitiveType\x20=\x20this.ctx.TRIANGLES;\x0a\x20\x20\x20\x20\x20\x20\x20\x20//let\x20offset\x20=\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20count\x20=\x206;\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.drawArrays(primitiveType,\x20offset,\x20count);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20SetRectangle(gl,\x20x,\x20y,\x20width,\x20height)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20x1\x20=\x20x;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20x2\x20=\x20x\x20+\x20width;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20y1\x20=\x20y;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20y2\x20=\x20y\x20+\x20height;\x0a\x20\x20\x20\x20\x20\x20\x20\x20this.ctx.bufferData(this.ctx.ARRAY_BUFFER,\x20new\x20Float32Array([\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20x1,\x20y1,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20x2,\x20y1,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20x1,\x20y2,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20x1,\x20y2,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20x2,\x20y1,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20x2,\x20y2,\x0a\x20\x20\x20\x20\x20\x20\x20\x20]),\x20this.ctx.STATIC_DRAW);\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20renderAugmentation(nextTimeCode)\x20{\x0a\x09\x09let\x20tcTranslator\x20=\x20BB.Utils.TimeCodesFramesTranslator;\x0a\x09\x09//console.log(\x22nextTimeCode:\x20\x22\x20+\x20nextTimeCode);//@oror\x20\x20\x2200:00:14:02.1\x22\x0a\x09\x09let\x20tc\x20=\x20tcTranslator.timeCodeStr2TimeCodeArray(nextTimeCode);\x0a\x09\x09let\x20tcPlus1\x20=\x20tcTranslator.TimeCodeAddFrames(tc,\x201,\x20this.sourceFPS);\x0a\x09\x09let\x20tcPlus2\x20=\x20tcTranslator.TimeCodeAddFrames(tc,\x202,\x20this.sourceFPS);\x0a\x09\x09let\x20tcPlus1Str\x20=\x20tcTranslator.printTimecode(tcPlus1);\x0a\x09\x09let\x20tcPlus2Str\x20=\x20tcTranslator.printTimecode(tcPlus2);\x0a\x09\x09\x0a\x09\x09\x0a\x09\x09this.videoStarted\x20=\x20true;\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20t1\x20=\x20performance.now();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x09\x09//clean\x20all\x20the\x20earliest\x20meta:\x0a\x09\x09/*\x0a\x09\x09while\x20(this.metadataArr.length\x20>\x200\x20&&\x0a\x09\x09\x09this.metadataArr[0]\x20<\x20nextTimeCode)\x20{\x0a\x09\x09\x09let\x20toDeleteFrameMetaData\x20=\x20this.metadataMap[this.metadataArr[0]];\x0a\x09\x09\x09for\x20(const\x20key\x20in\x20toDeleteFrameMetaData.placeholders)\x20{\x0a\x09\x09\x09\x09let\x20holderToDelete\x20=\x20toDeleteFrameMetaData.placeholders[key];\x0a\x09\x09\x09\x09if\x20(holderToDelete.alphaAsUint8Array)\x20{\x0a\x09\x09\x09\x09\x09holderToDelete.alphaAsUint8Array\x20=\x20null;\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09}\x0a\x09\x09\x09delete\x20this.metadataArr[this.metadataArr[0]];\x0a\x09\x09\x09this.metadataArr.shift();\x0a\x09\x09}\x0a\x09\x09*/\x0a\x0a\x09\x09//get\x20the\x20next\x20meta\x20frame\x0a\x09\x09let\x20frameMetaData\x20=\x20null;\x0a\x09\x09let\x20next\x20=\x20[];\x0a\x09\x09if\x20(this.metadataMap[nextTimeCode])\x20{\x0a\x09\x09\x09frameMetaData\x20=\x20this.metadataMap[nextTimeCode];\x0a\x09\x09\x09/*delete\x20this.metadataMap[nextTimeCode];\x0a\x09\x09\x09if\x20(this.sourceFPS\x20<\x2040)\x20{\x0a\x09\x09\x09\x09delete\x20this.metadataMap[nextTimeCode\x20+\x20\x22.1\x22];\x0a\x09\x09\x09}*/\x0a\x09\x09\x09\x09\x0a\x09\x09\x09if\x20(this.metadataMap[tcPlus1Str])\x20{\x0a\x09\x09\x09\x09next.push({nextVideo:this.metadataMap[tcPlus1Str],nextTimeCode:tcPlus1Str});\x0a\x09\x09\x09}\x0a\x09\x09\x09if\x20(this.metadataMap[tcPlus2Str])\x20{\x0a\x09\x09\x09\x09next.push({nextVideo:this.metadataMap[tcPlus2Str],nextTimeCode:tcPlus2Str});\x0a\x09\x09\x09}\x0a\x09\x09\x09const\x20metaArrIndex\x20=\x20this.metadataArr.indexOf(nextTimeCode);\x0a\x09\x09\x09\x0a\x09\x09\x09//if\x20(metaArrIndex\x20>\x20-1)\x20this.metadataArr.splice(metaArrIndex,\x201);\x20//was\x0a\x09\x09\x09if\x20(metaArrIndex\x20>\x20-5)\x20this.metadataArr.splice(0,\x20metaArrIndex-4).forEach(item\x20=>\x20{\x0a\x09\x09\x09\x09delete\x20this.metadataMap[item];\x0a\x09\x09\x09});\x0a\x09\x09\x09this.alphaFound++;\x0a\x09\x09}\x0a\x09\x09else\x20{\x0a\x09\x09\x09this.counter++;\x0a\x09\x09\x09if(this.counter\x20>\x2060)\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09this.counter\x20=\x200;\x0a\x09\x09\x09\x09console.error(\x22Missing\x20meta\x20data\x20at\x20time\x20code\x20\x22\x20+\x20nextTimeCode);\x0a\x09\x09\x09}\x0a\x09\x09\x09this.alphaFound++;\x20//test\x20for\x20drawing\x20number\x20always\x0a\x09\x09\x09//this.alphaFound\x20=\x200;\x0a\x09\x09\x09////nextImageData.buffer\x20=\x20null;\x0a\x09\x09\x09//return;\x0a\x09\x09}\x0a\x09\x09//alal\x20comment\x20for\x20test\x0a\x09\x09//\x20if\x20(this.alphaFound\x20>\x2030\x20&&\x20this.canvas.style.display\x20==\x20\x22none\x22)\x20{\x0a\x09\x09//\x20\x09this.canvas.style.display\x20=\x20\x22\x22;\x0a\x09\x09//\x20}\x0a\x09\x09\x0a\x09\x09let\x20texturesForThisFrame\x20=\x20[];\x0a\x09\x09this.canvas.width\x20=\x201280;\x0a\x09\x09this.canvas.height\x20=\x20720;\x0a\x09\x09\x09\x09\x0a\x09\x09let\x20placeHolderIndex\x20=\x200;\x0a\x09\x09this.currentAds2BoundingRect\x20=\x20[];//reset\x20the\x20coordinates\x0a\x09\x09if\x20(frameMetaData)\x20{\x0a\x09\x09\x09//set\x20the\x20canvas\x20size\x20according\x20the\x20engine\x27s\x20canvas\x20size\x0a\x09\x09\x09//\x20if\x20(frameMetaData.canvasSize\x20&&\x20(\x0a\x09\x09\x09//\x20\x20\x20\x20\x20frameMetaData.canvasSize.width\x20!=\x20this.ctx.canvas.width\x20||\x0a\x09\x09\x09//\x20\x20\x20\x20\x20frameMetaData.canvasSize.height\x20!=\x20this.ctx.canvas.height))\x20{\x0a\x09\x09\x09//\x20\x20\x20\x20\x20this.ctx.canvas.width\x20=\x20frameMetaData.canvasSize.width;\x0a\x09\x09\x09//\x20\x20\x20\x20\x20this.ctx.canvas.height\x20=\x20frameMetaData.canvasSize.height;\x0a\x09\x09\x09//\x20}\x0a\x0a\x09\x09\x09//for\x20each\x20place-holder,\x20create\x20an\x20alpha\x20texture\x20and\x20inform\x20the\x20shader\x20of\x20the\x20alpha\x20mate\x27s\x20position\x20and\x20size\x0a\x09\x09\x09//if\x20(false)\x0a\x09\x09\x09let\x20doNotRenderAugmentation\x20=\x20false;\x0a\x09\x09\x09if\x20(this.options.debug)\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09var\x20checkbox_doNotRenderAugmentation\x20=\x20document.getElementById(\x27doNotRenderAugmentationCheckbox\x27);\x0a\x09\x09\x09\x09doNotRenderAugmentation\x20=\x20checkbox_doNotRenderAugmentation.checked;\x0a\x09\x09\x09}\x0a\x09\x09\x09if(!doNotRenderAugmentation)\x0a\x09\x09\x09for\x20(const\x20key\x20in\x20frameMetaData.placeholders)\x20{\x0a\x09\x09\x09\x09const\x20holder\x20=\x20frameMetaData.placeholders[key];\x0a\x09\x09\x09\x09if\x20(!holder.alphaAsUint8Array)\x20continue;\x0a\x09\x09\x09\x09//create\x20the\x20alpha\x20texture\x0a\x09\x09\x09\x09let\x20alphaUnfiromName\x20=\x20\x22alpha\x22\x20+\x20placeHolderIndex;\x0a\x09\x09\x09\x09let\x20alphaTextureNum\x20=\x20this.TexUnitBaseForAlpha()\x20+\x20placeHolderIndex;\x0a\x09\x09\x09\x09holder.alphaTex\x20=\x20this.GenerateTexture(holder.alphaAsUint8Array,\x0a\x09\x09\x09\x09\x09alphaTextureNum,\x0a\x09\x09\x09\x09\x09alphaUnfiromName,\x0a\x09\x09\x09\x09\x09this.ctx.ALPHA,\x0a\x09\x09\x09\x09\x09holder.width,\x0a\x09\x09\x09\x09\x09holder.height,\x0a\x09\x09\x09\x09\x09true);\x0a\x09\x09\x09\x09holder.alphaAsUint8Array\x20=\x20null;\x0a\x09\x09\x09\x09if\x20(!holder.alphaTex)\x20{\x0a\x09\x09\x09\x09\x09console.error(\x22Failed\x20to\x20create\x20alpha\x20texture\x22);\x0a\x09\x09\x09\x09\x09continue;\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09texturesForThisFrame.push(holder.alphaTex);\x0a\x09\x09\x09\x09//notify\x20the\x20shader\x20that\x20this\x20place-holder\x20exist\x0a\x09\x09\x09\x09let\x20hasLogoUniformName\x20=\x20\x22hasLogo\x22\x20+\x20placeHolderIndex;\x0a\x09\x09\x09\x09let\x20hasLogoLoc\x20=\x20this.ctx.getUniformLocation(this.program,\x20hasLogoUniformName);\x0a\x09\x09\x09\x09this.ctx.uniform1i(hasLogoLoc,\x201);\x0a\x09\x09\x09\x09//tell\x20the\x20shader\x20whcih\x20add\x20to\x20use\x20for\x20this\x20placeholder\x0a\x09\x09\x09\x09let\x20adForLogoUniformName\x20=\x20\x22adForLogo\x22\x20+\x20placeHolderIndex;\x0a\x09\x09\x09\x09let\x20adForLogoUniform\x20=\x20this.ctx.getUniformLocation(this.program,\x20adForLogoUniformName);\x0a\x09\x09\x09\x09let\x20isBlur\x20=\x20false;\x0a\x09\x09\x09\x09if\x20(holder.name.indexOf(\x22blur\x22)\x20>=\x200)\x0a\x09\x09\x09\x09{\x0a\x09\x09\x09\x09\x09this.ctx.uniform1i(adForLogoUniform,\x2099);\x0a\x09\x09\x09\x09\x09\x20isBlur\x20=\x20true;\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09else\x0a\x09\x09\x09\x09{\x0a\x09\x09\x09\x09\x09this.ctx.uniform1i(adForLogoUniform,\x20this.TexUnitForPlaceHolder(holder));\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x0a\x09\x09\x09\x09//set\x20that\x20alpha\x20top-left\x20and\x20size\x0a\x09\x09\x09\x09let\x20alphaTopLeftUniformName\x20=\x20\x22u_alpha\x22\x20+\x20placeHolderIndex\x20+\x20\x22TopLeft\x22;\x0a\x09\x09\x09\x09let\x20alphaTopLeftLoc\x20=\x20this.ctx.getUniformLocation(this.program,\x20alphaTopLeftUniformName);\x0a\x09\x09\x09\x09this.ctx.uniform2fv(alphaTopLeftLoc,\x20[holder.maskX,\x20holder.maskY]);\x0a\x09\x09\x09\x09let\x20alphaSizeUniformName\x20=\x20\x22u_alpha\x22\x20+\x20placeHolderIndex\x20+\x20\x22Size\x22;\x0a\x09\x09\x09\x09let\x20alphaSizeLoc\x20=\x20this.ctx.getUniformLocation(this.program,\x20alphaSizeUniformName);\x0a\x09\x09\x09\x09this.ctx.uniform2fv(alphaSizeLoc,\x20[holder.width,\x20holder.height]);\x0a\x09\x09\x09\x09//homography:\x0a\x09\x09\x09\x09let\x20homographyMatrixUniformName\x20=\x20\x22u_matrix\x22\x20+\x20placeHolderIndex;\x0a\x09\x09\x09\x09let\x20placeHolderHomographyLocation\x20=\x20this.ctx.getUniformLocation(this.program,\x20homographyMatrixUniformName);\x0a\x09\x09\x09\x09this.ctx.uniformMatrix3fv(placeHolderHomographyLocation,\x20false,\x20holder.tranform);\x0a\x09\x09\x09\x09//bounding\x20rect:\x0a\x09\x09\x09\x09if\x20(!isBlur)\x0a\x09\x09\x09\x09{\x0a\x09\x09\x09\x09\x09let\x20boundingRect\x20=\x20{l:-1,t:-1,r:-1,b:-1};\x0a\x09\x09\x09\x09\x09for\x20(let\x20corner\x20of\x20holder.corners)\x20{\x0a\x09\x09\x09\x09\x09\x09if\x20(corner.x\x20<\x20boundingRect.l\x20||boundingRect.l\x20==\x20-1)\x20boundingRect.l\x20=\x20corner.x;\x0a\x09\x09\x09\x09\x09\x09if\x20(corner.x\x20>\x20boundingRect.r\x20||boundingRect.r\x20==\x20-1)\x20boundingRect.r\x20=\x20corner.x;\x0a\x09\x09\x09\x09\x09\x09if\x20(corner.y\x20<\x20boundingRect.t\x20||boundingRect.t\x20==\x20-1)\x20boundingRect.t\x20=\x20corner.y;\x0a\x09\x09\x09\x09\x09\x09if\x20(corner.y\x20>\x20boundingRect.b\x20||boundingRect.b\x20==\x20-1)\x20boundingRect.b\x20=\x20corner.y;\x0a\x09\x09\x09\x09\x09}\x0a\x09\x09\x09\x09\x09boundingRect.l\x20/=\x20frameMetaData.canvasSize.width;\x0a\x09\x09\x09\x09\x09boundingRect.r\x20/=\x20frameMetaData.canvasSize.width;\x0a\x09\x09\x09\x09\x09boundingRect.t\x20/=\x20frameMetaData.canvasSize.height;\x0a\x09\x09\x09\x09\x09boundingRect.b\x20/=\x20frameMetaData.canvasSize.height;\x0a\x09\x09\x09\x09\x09this.currentAds2BoundingRect.push({\x0a\x09\x09\x09\x09\x09\x09name:this.AdNameForPlaceHolder(holder),\x0a\x09\x09\x09\x09\x09\x09rect:boundingRect\x0a\x09\x09\x09\x09\x09});\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x09/*\x0a\x09\x09\x09\x09//This\x20code\x20create\x20the\x20perspective\x20transform\x20in\x20JS\x0a\x09\x09\x09\x09//Currently\x20we\x20use\x20the\x20transformation\x20supplied\x20with\x20the\x20frameMetaData\x20instead\x0a\x09\x09\x09\x09let\x20srcCorners\x20=\x20[\x0a\x09\x09\x09\x09\x090,\x200,\x0a\x09\x09\x09\x09\x09this.canvas.width,\x200,\x0a\x09\x09\x09\x09\x09this.canvas.width,\x20this.canvas.height,\x0a\x09\x09\x09\x09\x090,\x20this.canvas.height];\x0a\x09\x09\x09\x20\x20\x20\x0a\x09\x09\x09\x09let\x20dstCorners\x20=\x20[];\x0a\x09\x09\x09\x09let\x20ratioX\x20=\x20this.canvas.width\x20/\x20frameMetaData.processingWidth;\x0a\x09\x09\x09\x09let\x20ratioY\x20=\x20this.canvas.height\x20/\x20frameMetaData.processingHeight;\x0a\x09\x09\x09\x09for\x20(let\x20corner\x20of\x20holder.corners)\x20{\x0a\x09\x09\x09\x09\x09corner.x\x20*=\x20ratioX;\x0a\x09\x09\x09\x09\x09corner.y\x20*=\x20ratioY;\x0a\x09\x09\x09\x09\x09dstCorners[dstCorners.length]\x20=\x20corner.x;\x0a\x09\x09\x09\x09\x09dstCorners[dstCorners.length]\x20=\x20corner.y;\x0a\x09\x09\x09\x09}\x0a\x09\x09\x09\x20\x20\x20\x0a\x09\x09\x09\x09let\x20perspT\x20=\x20PerspT(srcCorners,\x20dstCorners);\x0a\x09\x09\x09\x09this.ctx.uniformMatrix3fv(placeHolderHomographyLocation,\x20false,\x20perspT.coeffsInv);\x0a\x09\x09\x09\x09*/\x0a\x09\x09\x09\x09placeHolderIndex++;\x0a\x09\x09\x09}\x0a\x09\x09}\x20else\x20{\x0a\x09\x09\x09//\x20\x20\x20\x20console.log(`No\x20data\x20at\x20${tc}`);\x0a\x09\x09}\x0a\x0a\x09\x09//mark\x20the\x20other\x20logo\x20as\x20\x22not\x20exist\x22\x0a\x09\x09for\x20(;\x20placeHolderIndex\x20<\x20BB.MAX_LOGOS;\x20++placeHolderIndex)\x20{\x0a\x09\x09\x09let\x20hasLogoUniformName\x20=\x20\x22hasLogo\x22\x20+\x20placeHolderIndex;\x0a\x09\x09\x09let\x20hasLogoLoc\x20=\x20this.ctx.getUniformLocation(this.program,\x20hasLogoUniformName);\x0a\x09\x09\x09this.ctx.uniform1i(hasLogoLoc,\x200);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//unbind\x20the\x20textures\x20that\x20are\x20not\x20required\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20alphaUnfiromName\x20=\x20\x22alpha\x22\x20+\x20placeHolderIndex;\x0a\x09\x09\x09let\x20location\x20=\x20this.ctx.getUniformLocation(this.program,\x20alphaUnfiromName);\x0a\x09\x09\x09this.ctx.uniform1i(location,\x200);\x0a\x09\x09}\x0a\x09\x09//render\x20the\x20timecode\x20on\x20the\x20canvas\x20(for\x20debug)\x0a\x09\x09if\x20(this.options.renderTimecode)\x20\x0a\x09\x09{{\x0a\x09\x09\x09let\x20framesAndField\x20=\x20nextTimeCode.split(\x22:\x22)[3];\x0a\x09\x09\x09let\x20field\x20=\x20(framesAndField.indexOf(\x22.\x22)\x20>=\x200)\x20?\x202\x20:\x201;\x0a\x09\x09\x09let\x20frameLastDigit\x20=\x20parseInt(framesAndField.split(\x22.\x22)[0])%10;\x0a\x09\x09\x09let\x20debugImgStr\x20=\x20frameLastDigit\x20+\x20\x22.\x22\x20+\x20field;//\x221.1\x22;\x0a\x09\x09\x09//console.log(\x22render\x20\x22\x20+\x20debugImgStr\x20+\x20\x22\x20tc\x20=\x20\x22\x20+\x20nextTimeCode\x20+\x20\x22\x20scedueled\x20on\x20frame\x20\x22\x20+\x20debug_lastFrameFromVideoCallback\x20+\x20\x22(\x22\x20+\x20debug_tc\x20+\x20\x22)\x22);\x0a\x09\x09\x09let\x20digitTextureNum\x20=\x20this.TexUnitBaseForAlpha()\x20+\x205;\x0a\x09\x09\x09let\x20digitTex\x20=\x20this.GenerateTexture(\x0a\x09\x09\x09\x09this.digitImg[debugImgStr],\x0a\x09\x09\x09\x09digitTextureNum,\x0a\x09\x09\x09\x09\x22digitTex\x22);\x0a\x09\x09\x09texturesForThisFrame.push(digitTex);\x0a\x09\x09\x09let\x20hasDigitUniformName\x20=\x20\x22hasDigit\x22;\x0a\x09\x09\x09let\x20hasDigitLoc\x20=\x20this.ctx.getUniformLocation(this.program,\x20hasDigitUniformName);\x0a\x09\x09\x09this.ctx.uniform1i(hasDigitLoc,\x201);\x0a\x09\x09\x09//set\x20that\x20digit\x27s\x20top-left\x20and\x20size\x0a\x09\x09\x09let\x20digitTopLeftUniformName\x20=\x20\x22u_digitTopLeft\x22;\x0a\x09\x09\x09let\x20digitTopLeftLoc\x20=\x20this.ctx.getUniformLocation(this.program,\x20digitTopLeftUniformName);\x0a\x09\x09\x09this.ctx.uniform2fv(digitTopLeftLoc,\x20[0,\x200]);\x0a\x09\x09\x09\x0a\x09\x09\x09let\x20digitSizeUniformName\x20=\x20\x22u_digitSize\x22;\x0a\x09\x09\x09let\x20digitSizeLoc\x20=\x20this.ctx.getUniformLocation(this.program,\x20digitSizeUniformName);\x0a\x09\x09\x09this.ctx.uniform2fv(digitSizeLoc,\x20[200,\x20200]);\x0a\x09\x09\x09\x0a\x09\x09\x09//let\x20digitTopLeftUniformName2\x20=\x20\x22u_digitTopLeft2\x22;\x0a\x09\x09\x09//let\x20digitTopLeftLoc2\x20=\x20this.ctx.getUniformLocation(this.program,\x20digitTopLeftUniformName2);\x0a\x09\x09\x09//this.ctx.uniform2fv(digitTopLeftLoc2,\x20[1000,\x200]);\x0a\x09\x09\x09\x0a\x09\x09\x09\x0a\x09\x09}\x0a\x09\x09/*{\x0a\x09\x09\x09let\x20framesAndField\x20=\x20nextTimeCode.split(\x22:\x22)[3];\x0a\x09\x09\x09let\x20field\x20=\x20(framesAndField.indexOf(\x22.\x22)\x20>=\x200)\x20?\x202\x20:\x201;\x0a\x09\x09\x09let\x20frameLastDigit\x20=\x20parseInt(framesAndField.split(\x22.\x22)[0])%10;\x0a\x09\x09\x09let\x20debugImgStr\x20=\x20frameLastDigit\x20+\x20\x22.\x22\x20+\x20field;//\x221.1\x22;\x0a\x09\x09\x09//console.log(\x22render\x20\x22\x20+\x20debugImgStr\x20+\x20\x22\x20tc\x20=\x20\x22\x20+\x20nextTimeCode\x20+\x20\x22\x20scedueled\x20on\x20frame\x20\x22\x20+\x20debug_lastFrameFromVideoCallback\x20+\x20\x22(\x22\x20+\x20debug_tc\x20+\x20\x22)\x22);\x0a\x09\x09\x09let\x20digitTextureNum\x20=\x20this.TexUnitBaseForAlpha()\x20+\x205;\x0a\x09\x09\x09let\x20digitTex\x20=\x20this.GenerateTexture(\x0a\x09\x09\x09\x09this.digitImg[debugImgStr],\x0a\x09\x09\x09\x09digitTextureNum,\x0a\x09\x09\x09\x09\x22digitTex\x22);\x0a\x09\x09\x09texturesForThisFrame.push(digitTex);\x0a\x09\x09\x09let\x20hasDigitUniformName\x20=\x20\x22hasDigit\x22;\x0a\x09\x09\x09let\x20hasDigitLoc\x20=\x20this.ctx.getUniformLocation(this.program,\x20hasDigitUniformName);\x0a\x09\x09\x09this.ctx.uniform1i(hasDigitLoc,\x201);\x0a\x09\x09\x09//set\x20that\x20digit\x27s\x20top-left\x20and\x20size\x0a\x09\x09\x09let\x20digitTopLeftUniformName\x20=\x20\x22u_digitTopLeft2\x22;\x0a\x09\x09\x09let\x20digitTopLeftLoc2\x20=\x20this.ctx.getUniformLocation(this.program,\x20digitTopLeftUniformName);\x0a\x09\x09\x09this.ctx.uniform2fv(digitTopLeftLoc2,\x20[1000,\x200]);\x0a\x09\x09\x09let\x20digitSizeUniformName\x20=\x20\x22u_digitSize\x22;\x0a\x09\x09\x09let\x20digitSizeLoc\x20=\x20this.ctx.getUniformLocation(this.program,\x20digitSizeUniformName);\x0a\x09\x09\x09this.ctx.uniform2fv(digitSizeLoc,\x20[200,\x20200]);\x0a\x09\x09}*/\x0a\x09\x09\x09/*\x0a\x09\x09\x09let\x20adForLogoUniformName\x20=\x20\x22adForLogo\x22\x20+\x20placeHolderIndex;\x0a\x09\x09\x09let\x20adForLogoUniform\x20=\x20this.ctx.getUniformLocation(this.program,\x20adForLogoUniformName);\x0a\x09\x09\x09let\x20isBlur\x20=\x20false;\x0a\x09\x09\x09if\x20(holder.name.indexOf(\x22blur\x22)\x20>=\x200)\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09this.ctx.uniform1i(adForLogoUniform,\x2099);\x0a\x09\x09\x09\x09\x20isBlur\x20=\x20true;\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x0a\x09\x09\x09{\x0a\x09\x09\x09\x09this.ctx.uniform1i(adForLogoUniform,\x20this.TexUnitForPlaceHolder(holder));\x0a\x09\x09\x09}\x0a\x09\x09\x09*/\x0a\x09\x09}\x09\x0a\x09\x09else\x20//no\x20digit\x0a\x09\x09{\x0a\x09\x09\x09let\x20hasDigitUniformName\x20=\x20\x22hasDigit\x22;\x0a\x09\x09\x09let\x20hasDigitLoc\x20=\x20this.ctx.getUniformLocation(this.program,\x20hasDigitUniformName);\x0a\x09\x09\x09this.ctx.uniform1i(hasDigitLoc,\x200);\x0a\x09\x09}\x0a\x0a\x09\x09//render\x20the\x20frame\x0a\x09\x09this.RenderFrame();\x0a\x0a\x09\x09//cleanup:\x0a\x09\x09//delete\x20the\x20texture\x20created\x20for\x20this\x20frame\x0a\x09\x09for\x20(const\x20texture\x20of\x20texturesForThisFrame)\x20{\x0a\x09\x09\x09this.ctx.deleteTexture(texture);\x0a\x09\x09}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20}\x0a\x09getCanvas()\x20{\x0a\x09\x09return\x20this.canvas;\x0a\x09}\x0a}\x0a\x0alet\x20composer\x20=\x20null;\x0aonmessage\x20=\x20(evt)\x20=>\x20{\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20switch\x20(evt.data.method){\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x22OnUserClickOnCanvas\x22:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(composer)\x20composer.OnUserClickOnCanvas(evt.data.data);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x22CleanGL\x22:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(composer)\x20composer.CleanGL();\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x22AddAdvertisement\x22:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(composer)\x20composer.AddAdvertisement(evt.data.data);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x22SelectAd\x22:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(composer)\x20composer.SelectAd(evt.data.data);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x22OnMetaData\x22:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(composer)\x20composer.OnMetaData(evt.data.data);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x22renderAugmentation\x22:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(composer)\x20composer.renderAugmentation(evt.data.data);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20\x20\x20case\x20\x22constructor\x22:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20composer\x20=\x20new\x20BB.Composer3d(evt.data.GL,evt.data.canvas,evt.data.sourceFPS,\x20evt.data.renderTimecodes,\x20evt.data.digitImg);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20break;\x0a\x20\x20\x20\x20\x20\x20\x20\x20default:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20console.error(\x22Wrong\x20Thread\x20Message\x22);\x0a\x20\x20\x20\x20}\x0a}\x0a','requestVideoFrameCallback\x20is\x20supported','offs','color:blue;font-weight:bold;','linkProgram','qualitySelect','max','reduce','webGLVersion','loadedmetadata','vertexAttribPointer','FRAGMENT_SHADER','TopLeft','requestAnimationFrame\x20is\x20supported','TEXTURE_WRAP_S','Experience\x20difficulties\x20with\x20overloading:\x20(not\x20consistant\x20Calls\x20of\x20requestAnimatedFrame).\x20Stopping\x20augmentation.','split','fetchAndFindGameIdAndOffsetFromMediaId','clientX','UNSIGNED_BYTE','enableVertexAttribArray','bottom',',\x20offset:\x20<span\x20style=\x27color:','toDataURL','if\x20(alpha\x20==\x200.0)','toISOString','Linux','bindBuffer','program','8966lZFFbU','round','We\x20have\x20no\x20MetaDataDownloaderThread\x20yet.\x20Creating\x20it','Windows\x20Phone','time','toFixed','globalConfig','shaderSource','insertBefore','SetRectangle','webgl','TimeCodeAddFrames','LINK_STATUS','requestFullscreen','www.mediakind.com/NTC','random','hasLogo','RenderFrame','push','augmentation','plus05CorrectionCheckbox','debugText','tc__','videoStarted',',\x20dblFrame:\x20','Error\x20from\x20worker\x20(via\x20addEventListener):','indexOf','disconnect\x20from\x20signaling::','TexUnitForGenericAd','ANI3','requestAnimationFrame\x20is\x20not\x20supported','\x20\x20)','BBlog','sort','map','Utils','metadata','allGamesURL','alphaFound','video\x20element\x20is\x20already\x20loaded.\x20Setting\x20up\x20requestVideoFrameCallback','Clicked\x20on\x20ad:\x20',',\x20expectedDisplayTime:\x20','_nextAdvertisement','getElementsByTagName','init','setSyncPoint','getContext','try\x20{\x0a\x0alet\x20UZIP\x20=\x20{};\x0aif(typeof\x20module\x20==\x20\x22object\x22)\x20module.exports\x20=\x20UZIP;\x0aUZIP[\x22parse\x22]\x20=\x20function(buf,\x20onlyNames)\x09//\x20ArrayBuffer\x0a{\x0a\x20\x20\x20\x20let\x20rUs\x20=\x20UZIP.bin.readUshort,\x20rUi\x20=\x20UZIP.bin.readUint,\x20o\x20=\x200,\x20out\x20=\x20{};\x0a\x20\x20\x20\x20let\x20data\x20=\x20new\x20Uint8Array(buf);\x0a\x20\x20\x20\x20let\x20eocd\x20=\x20data.length-4;\x0a\x0a\x20\x20\x20\x20while(rUi(data,\x20eocd)!=0x06054b50)\x20eocd--;\x0a\x0a\x20\x20\x20\x20o\x20=\x20eocd;\x0a\x20\x20\x20\x20o+=4;\x09//\x20sign\x20\x20=\x200x06054b50\x0a\x20\x20\x20\x20o+=4;\x20\x20//\x20disks\x20=\x200;\x0a\x20\x20\x20\x20let\x20cnu\x20=\x20rUs(data,\x20o);\x20\x20o+=2;\x0a\x20\x20\x20\x20let\x20cnt\x20=\x20rUs(data,\x20o);\x20\x20o+=2;\x0a\x0a\x20\x20\x20\x20let\x20csize\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x20\x20\x20\x20let\x20coffs\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x0a\x20\x20\x20\x20o\x20=\x20coffs;\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<cnu;\x20i++)\x0a\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20sign\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x20\x20\x20\x20\x20\x20\x20\x20o\x20+=\x204;\x20\x20//\x20versions;\x0a\x20\x20\x20\x20\x20\x20\x20\x20o\x20+=\x204;\x20\x20//\x20flag\x20+\x20compr\x0a\x20\x20\x20\x20\x20\x20\x20\x20o\x20+=\x204;\x20\x20//\x20time\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20crc32\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20csize\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20usize\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20nl\x20=\x20rUs(data,\x20o),\x20el\x20=\x20rUs(data,\x20o+2),\x20cl\x20=\x20rUs(data,\x20o+4);\x20\x20o\x20+=\x206;\x20\x20//\x20name,\x20extra,\x20comment\x0a\x20\x20\x20\x20\x20\x20\x20\x20o\x20+=\x208;\x20\x20//\x20disk,\x20attribs\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20roff\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x20\x20\x20\x20\x20\x20\x20\x20o\x20+=\x20nl\x20+\x20el\x20+\x20cl;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20UZIP._readLocal(data,\x20roff,\x20out,\x20csize,\x20usize,\x20onlyNames);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20//console.log(out);\x0a\x20\x20\x20\x20return\x20out;\x0a}\x0a\x0aUZIP._readLocal\x20=\x20function(data,\x20o,\x20out,\x20csize,\x20usize,\x20onlyNames)\x0a{\x0a\x20\x20\x20\x20let\x20rUs\x20=\x20UZIP.bin.readUshort,\x20rUi\x20=\x20UZIP.bin.readUint;\x0a\x20\x20\x20\x20let\x20sign\x20\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x20\x20\x20\x20let\x20ver\x20\x20\x20=\x20rUs(data,\x20o);\x20\x20o+=2;\x0a\x20\x20\x20\x20let\x20gpflg\x20=\x20rUs(data,\x20o);\x20\x20o+=2;\x0a\x20\x20\x20\x20//if((gpflg&8)!=0)\x20throw\x20\x22unknown\x20sizes\x22;\x0a\x20\x20\x20\x20let\x20cmpr\x20\x20=\x20rUs(data,\x20o);\x20\x20o+=2;\x0a\x0a\x20\x20\x20\x20let\x20time\x20\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x0a\x20\x20\x20\x20let\x20crc32\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x20\x20\x20\x20//let\x20csize\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x20\x20\x20\x20//let\x20usize\x20=\x20rUi(data,\x20o);\x20\x20o+=4;\x0a\x20\x20\x20\x20o+=8;\x0a\x0a\x20\x20\x20\x20let\x20nlen\x20\x20=\x20rUs(data,\x20o);\x20\x20o+=2;\x0a\x20\x20\x20\x20let\x20elen\x20\x20=\x20rUs(data,\x20o);\x20\x20o+=2;\x0a\x0a\x20\x20\x20\x20let\x20name\x20=\x20\x20UZIP.bin.readUTF8(data,\x20o,\x20nlen);\x20\x20o+=nlen;\x20\x20//console.log(name);\x0a\x20\x20\x20\x20o\x20+=\x20elen;\x0a\x0a\x20\x20\x20\x20//console.log(sign.toString(16),\x20ver,\x20gpflg,\x20cmpr,\x20crc32.toString(16),\x20\x22csize,\x20usize\x22,\x20csize,\x20usize,\x20nlen,\x20elen,\x20name,\x20o);\x0a\x20\x20\x20\x20if(onlyNames)\x20{\x20\x20out[name]={size:usize,\x20csize:csize};\x20\x20return;\x20\x20}\x0a\x20\x20\x20\x20let\x20file\x20=\x20new\x20Uint8Array(data.buffer,\x20o);\x0a\x20\x20\x20\x20if(false)\x20{}\x0a\x20\x20\x20\x20else\x20if(cmpr==0)\x20out[name]\x20=\x20new\x20Uint8Array(file.buffer.slice(o,\x20o+csize));\x0a\x20\x20\x20\x20else\x20if(cmpr==8)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20buf\x20=\x20new\x20Uint8Array(usize);\x20\x20UZIP.inflateRaw(file,\x20buf);\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*let\x20nbuf\x20=\x20pako[\x22inflateRaw\x22](file);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(usize>8514000)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//console.log(PUtils.readASCII(buf\x20,\x208514500,\x20500));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//console.log(PUtils.readASCII(nbuf,\x208514500,\x20500));\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20for(let\x20i=0;\x20i<buf.length;\x20i++)\x20if(buf[i]!=nbuf[i])\x20{\x20\x20console.log(buf.length,\x20nbuf.length,\x20usize,\x20i);\x20\x20throw\x20\x22e\x22;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20out[name]\x20=\x20buf;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20else\x20throw\x20\x22unknown\x20compression\x20method:\x20\x22+cmpr;\x0a}\x0a\x0aUZIP.inflateRaw\x20=\x20function(file,\x20buf)\x20{\x20\x20return\x20UZIP.F.inflate(file,\x20buf);\x20\x20}\x0aUZIP.inflate\x20\x20\x20\x20=\x20function(file,\x20buf)\x20{\x0a\x20\x20\x20\x20let\x20CMF\x20=\x20file[0],\x20FLG\x20=\x20file[1];\x0a\x20\x20\x20\x20let\x20CM\x20=\x20(CMF&15),\x20CINFO\x20=\x20(CMF>>>4);\x0a\x20\x20\x20\x20//console.log(CM,\x20CINFO,CMF,FLG);\x0a\x20\x20\x20\x20return\x20UZIP.inflateRaw(new\x20Uint8Array(file.buffer,\x20file.byteOffset+2,\x20file.length-6),\x20buf);\x0a}\x0aUZIP.deflate\x20\x20\x20\x20=\x20function(data,\x20opts/*,\x20buf,\x20off*/)\x20{\x0a\x20\x20\x20\x20if(opts==null)\x20opts={level:6};\x0a\x20\x20\x20\x20let\x20off=0,\x20buf=new\x20Uint8Array(50+Math.floor(data.length*1.1));\x0a\x20\x20\x20\x20buf[off]=120;\x20\x20buf[off+1]=156;\x20\x20off+=2;\x0a\x20\x20\x20\x20off\x20=\x20UZIP.F.deflateRaw(data,\x20buf,\x20off,\x20opts.level);\x0a\x20\x20\x20\x20let\x20crc\x20=\x20UZIP.adler(data,\x200,\x20data.length);\x0a\x20\x20\x20\x20buf[off+0]=((crc>>>24)&255);\x0a\x20\x20\x20\x20buf[off+1]=((crc>>>16)&255);\x0a\x20\x20\x20\x20buf[off+2]=((crc>>>\x208)&255);\x0a\x20\x20\x20\x20buf[off+3]=((crc>>>\x200)&255);\x0a\x20\x20\x20\x20return\x20new\x20Uint8Array(buf.buffer,\x200,\x20off+4);\x0a}\x0aUZIP.deflateRaw\x20=\x20function(data,\x20opts)\x20{\x0a\x20\x20\x20\x20if(opts==null)\x20opts={level:6};\x0a\x20\x20\x20\x20let\x20buf=new\x20Uint8Array(50+Math.floor(data.length*1.1));\x0a\x20\x20\x20\x20let\x20off\x20=\x20UZIP.F.deflateRaw(data,\x20buf,\x20off,\x20opts.level);\x0a\x20\x20\x20\x20return\x20new\x20Uint8Array(buf.buffer,\x200,\x20off);\x0a}\x0a\x0a\x0aUZIP.encode\x20=\x20function(obj,\x20noCmpr)\x20{\x0a\x20\x20\x20\x20if(noCmpr==null)\x20noCmpr=false;\x0a\x20\x20\x20\x20let\x20tot\x20=\x200,\x20wUi\x20=\x20UZIP.bin.writeUint,\x20wUs\x20=\x20UZIP.bin.writeUshort;\x0a\x20\x20\x20\x20let\x20zpd\x20=\x20{};\x0a\x20\x20\x20\x20for(let\x20p\x20in\x20obj)\x20{\x20\x20let\x20cpr\x20=\x20!UZIP._noNeed(p)\x20&&\x20!noCmpr,\x20buf\x20=\x20obj[p],\x20crc\x20=\x20UZIP.crc.crc(buf,0,buf.length);\x0a\x20\x20\x20\x20\x20\x20\x20\x20zpd[p]\x20=\x20{\x20\x20cpr:cpr,\x20usize:buf.length,\x20crc:crc,\x20file:\x20(cpr\x20?\x20UZIP.deflateRaw(buf)\x20:\x20buf)\x20\x20};\x20\x20}\x0a\x0a\x20\x20\x20\x20for(let\x20p\x20in\x20zpd)\x20tot\x20+=\x20zpd[p].file.length\x20+\x2030\x20+\x2046\x20+\x202*UZIP.bin.sizeUTF8(p);\x0a\x20\x20\x20\x20tot\x20+=\x20\x2022;\x0a\x0a\x20\x20\x20\x20let\x20data\x20=\x20new\x20Uint8Array(tot),\x20o\x20=\x200;\x0a\x20\x20\x20\x20let\x20fof\x20=\x20[]\x0a\x0a\x20\x20\x20\x20for(let\x20p\x20in\x20zpd)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20file\x20=\x20zpd[p];\x20\x20fof.push(o);\x0a\x20\x20\x20\x20\x20\x20\x20\x20o\x20=\x20UZIP._writeHeader(data,\x20o,\x20p,\x20file,\x200);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20let\x20i=0,\x20ioff\x20=\x20o;\x0a\x20\x20\x20\x20for(let\x20p\x20in\x20zpd)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20file\x20=\x20zpd[p];\x20\x20fof.push(o);\x0a\x20\x20\x20\x20\x20\x20\x20\x20o\x20=\x20UZIP._writeHeader(data,\x20o,\x20p,\x20file,\x201,\x20fof[i++]);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20let\x20csize\x20=\x20o-ioff;\x0a\x0a\x20\x20\x20\x20wUi(data,\x20o,\x200x06054b50);\x20\x20o+=4;\x0a\x20\x20\x20\x20o\x20+=\x204;\x20\x20//\x20disks\x0a\x20\x20\x20\x20wUs(data,\x20o,\x20i);\x20\x20o\x20+=\x202;\x0a\x20\x20\x20\x20wUs(data,\x20o,\x20i);\x20\x20o\x20+=\x202;\x09//\x20number\x20of\x20c\x20d\x20records\x0a\x20\x20\x20\x20wUi(data,\x20o,\x20csize);\x20\x20o\x20+=\x204;\x0a\x20\x20\x20\x20wUi(data,\x20o,\x20ioff\x20);\x20\x20o\x20+=\x204;\x0a\x20\x20\x20\x20o\x20+=\x202;\x0a\x20\x20\x20\x20return\x20data.buffer;\x0a}\x0a//\x20no\x20need\x20to\x20compress\x20.PNG,\x20.ZIP,\x20.JPEG\x20....\x0aUZIP._noNeed\x20=\x20function(fn)\x20{\x20\x20let\x20ext\x20=\x20fn.split(\x22.\x22).pop().toLowerCase();\x20\x20return\x20\x22png,jpg,jpeg,zip\x22.indexOf(ext)!=-1;\x20\x20}\x0a\x0aUZIP._writeHeader\x20=\x20function(data,\x20o,\x20p,\x20obj,\x20t,\x20roff)\x0a{\x0a\x20\x20\x20\x20let\x20wUi\x20=\x20UZIP.bin.writeUint,\x20wUs\x20=\x20UZIP.bin.writeUshort;\x0a\x20\x20\x20\x20let\x20file\x20=\x20obj.file;\x0a\x0a\x20\x20\x20\x20wUi(data,\x20o,\x20t==0\x20?\x200x04034b50\x20:\x200x02014b50);\x20\x20o+=4;\x20//\x20sign\x0a\x20\x20\x20\x20if(t==1)\x20o+=2;\x20\x20//\x20ver\x20made\x20by\x0a\x20\x20\x20\x20wUs(data,\x20o,\x2020);\x20\x20o+=2;\x09//\x20ver\x0a\x20\x20\x20\x20wUs(data,\x20o,\x20\x200);\x20\x20o+=2;\x20\x20\x20\x20//\x20gflip\x0a\x20\x20\x20\x20wUs(data,\x20o,\x20\x20obj.cpr?8:0);\x20\x20o+=2;\x09//\x20cmpr\x0a\x0a\x20\x20\x20\x20wUi(data,\x20o,\x20\x200);\x20\x20o+=4;\x09//\x20time\x0a\x20\x20\x20\x20wUi(data,\x20o,\x20obj.crc);\x20\x20o+=4;\x09//\x20crc32\x0a\x20\x20\x20\x20wUi(data,\x20o,\x20file.length);\x20\x20o+=4;\x09//\x20csize\x0a\x20\x20\x20\x20wUi(data,\x20o,\x20obj.usize);\x20\x20o+=4;\x09//\x20usize\x0a\x0a\x20\x20\x20\x20wUs(data,\x20o,\x20UZIP.bin.sizeUTF8(p));\x20\x20o+=2;\x09//\x20nlen\x0a\x20\x20\x20\x20wUs(data,\x20o,\x200);\x20\x20o+=2;\x09//\x20elen\x0a\x0a\x20\x20\x20\x20if(t==1)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20o\x20+=\x202;\x20\x20//\x20comment\x20length\x0a\x20\x20\x20\x20\x20\x20\x20\x20o\x20+=\x202;\x20\x20//\x20disk\x20number\x0a\x20\x20\x20\x20\x20\x20\x20\x20o\x20+=\x206;\x20\x20//\x20attributes\x0a\x20\x20\x20\x20\x20\x20\x20\x20wUi(data,\x20o,\x20roff);\x20\x20o+=4;\x09//\x20usize\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20let\x20nlen\x20=\x20UZIP.bin.writeUTF8(data,\x20o,\x20p);\x20\x20o+=\x20nlen;\x0a\x20\x20\x20\x20if(t==0)\x20{\x20\x20data.set(file,\x20o);\x20\x20o\x20+=\x20file.length;\x20\x20}\x0a\x20\x20\x20\x20return\x20o;\x0a}\x0aUZIP.crc\x20=\x20{\x0a\x20\x20\x20\x20table\x20:\x20(\x20function()\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20tab\x20=\x20new\x20Uint32Array(256);\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(let\x20n=0;\x20n<256;\x20n++)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20c\x20=\x20n;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for\x20(let\x20k=0;\x20k<8;\x20k++)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(c\x20&\x201)\x20\x20c\x20=\x200xedb88320\x20^\x20(c\x20>>>\x201);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20\x20\x20\x20\x20\x20\x20\x20c\x20=\x20c\x20>>>\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tab[n]\x20=\x20c;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20tab;\x20\x20})(),\x0a\x20\x20\x20\x20update\x20:\x20function(c,\x20buf,\x20off,\x20len)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20for\x20(let\x20i=0;\x20i<len;\x20i++)\x20\x20c\x20=\x20UZIP.crc.table[(c\x20^\x20buf[off+i])\x20&\x200xff]\x20^\x20(c\x20>>>\x208);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20c;\x0a\x20\x20\x20\x20},\x0a\x20\x20\x20\x20crc\x20:\x20function(b,o,l)\x20\x20{\x20\x20return\x20UZIP.crc.update(0xffffffff,b,o,l)\x20^\x200xffffffff;\x20\x20}\x0a}\x0aUZIP.adler\x20=\x20function(data,o,len)\x20{\x0a\x20\x20\x20\x20let\x20a\x20=\x201,\x20b\x20=\x200;\x0a\x20\x20\x20\x20let\x20off\x20=\x20o,\x20end=o+len;\x0a\x20\x20\x20\x20while(off<end)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20eend\x20=\x20Math.min(off+5552,\x20end);\x0a\x20\x20\x20\x20\x20\x20\x20\x20while(off<eend)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20a\x20+=\x20data[off++];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20b\x20+=\x20a;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20a=a%65521;\x0a\x20\x20\x20\x20\x20\x20\x20\x20b=b%65521;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20(b\x20<<\x2016)\x20|\x20a;\x0a}\x0a\x0aUZIP.bin\x20=\x20{\x0a\x20\x20\x20\x20readUshort\x20:\x20function(buff,p)\x20\x20{\x20\x20return\x20(buff[p])\x20|\x20(buff[p+1]<<8);\x20\x20},\x0a\x20\x20\x20\x20writeUshort:\x20function(buff,p,n){\x20\x20buff[p]\x20=\x20(n)&255;\x20\x20buff[p+1]\x20=\x20(n>>8)&255;\x20\x20},\x0a\x20\x20\x20\x20readUint\x20\x20\x20:\x20function(buff,p)\x20\x20{\x20\x20return\x20(buff[p+3]*(256*256*256))\x20+\x20((buff[p+2]<<16)\x20|\x20(buff[p+1]<<\x208)\x20|\x20buff[p]);\x20\x20},\x0a\x20\x20\x20\x20writeUint\x20\x20:\x20function(buff,p,n){\x20\x20buff[p]=n&255;\x20\x20buff[p+1]=(n>>8)&255;\x20\x20buff[p+2]=(n>>16)&255;\x20\x20buff[p+3]=(n>>24)&255;\x20\x20},\x0a\x20\x20\x20\x20readASCII\x20\x20:\x20function(buff,p,l){\x20\x20let\x20s\x20=\x20\x22\x22;\x20\x20for(let\x20i=0;\x20i<l;\x20i++)\x20s\x20+=\x20String.fromCharCode(buff[p+i]);\x20\x20return\x20s;\x20\x20\x20\x20},\x0a\x20\x20\x20\x20writeASCII\x20:\x20function(data,p,s){\x20\x20for(let\x20i=0;\x20i<s.length;\x20i++)\x20data[p+i]\x20=\x20s.charCodeAt(i);\x20\x20},\x0a\x20\x20\x20\x20pad\x20:\x20function(n)\x20{\x20return\x20n.length\x20<\x202\x20?\x20\x220\x22\x20+\x20n\x20:\x20n;\x20},\x0a\x20\x20\x20\x20readUTF8\x20:\x20function(buff,\x20p,\x20l)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20s\x20=\x20\x22\x22,\x20ns;\x0a\x20\x20\x20\x20\x20\x20\x20\x20for(let\x20i=0;\x20i<l;\x20i++)\x20s\x20+=\x20\x22%\x22\x20+\x20UZIP.bin.pad(buff[p+i].toString(16));\x0a\x20\x20\x20\x20\x20\x20\x20\x20try\x20{\x20\x20ns\x20=\x20decodeURIComponent(s);\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20catch(e)\x20{\x20\x20return\x20UZIP.bin.readASCII(buff,\x20p,\x20l);\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20\x20ns;\x0a\x20\x20\x20\x20},\x0a\x20\x20\x20\x20writeUTF8\x20:\x20function(buff,\x20p,\x20str)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20strl\x20=\x20str.length,\x20i=0;\x0a\x20\x20\x20\x20\x20\x20\x20\x20for(let\x20ci=0;\x20ci<strl;\x20ci++)\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20code\x20=\x20str.charCodeAt(ci);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20\x20\x20\x20\x20((code&(0xffffffff-(1<<\x207)+1))==0)\x20{\x20\x20buff[p+i]\x20=\x20(\x20\x20\x20\x20\x20code\x20\x20\x20\x20\x20);\x20\x20i++;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if((code&(0xffffffff-(1<<11)+1))==0)\x20{\x20\x20buff[p+i]\x20=\x20(192|(code>>\x206));\x20\x20buff[p+i+1]\x20=\x20(128|((code>>\x200)&63));\x20\x20i+=2;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if((code&(0xffffffff-(1<<16)+1))==0)\x20{\x20\x20buff[p+i]\x20=\x20(224|(code>>12));\x20\x20buff[p+i+1]\x20=\x20(128|((code>>\x206)&63));\x20\x20buff[p+i+2]\x20=\x20(128|((code>>0)&63));\x20\x20i+=3;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if((code&(0xffffffff-(1<<21)+1))==0)\x20{\x20\x20buff[p+i]\x20=\x20(240|(code>>18));\x20\x20buff[p+i+1]\x20=\x20(128|((code>>12)&63));\x20\x20buff[p+i+2]\x20=\x20(128|((code>>6)&63));\x20\x20buff[p+i+3]\x20=\x20(128|((code>>0)&63));\x20i+=4;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20throw\x20\x22e\x22;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20i;\x0a\x20\x20\x20\x20},\x0a\x20\x20\x20\x20sizeUTF8\x20:\x20function(str)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20strl\x20=\x20str.length,\x20i=0;\x0a\x20\x20\x20\x20\x20\x20\x20\x20for(let\x20ci=0;\x20ci<strl;\x20ci++)\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20code\x20=\x20str.charCodeAt(ci);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20\x20\x20\x20\x20((code&(0xffffffff-(1<<\x207)+1))==0)\x20{\x20\x20i++\x20;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if((code&(0xffffffff-(1<<11)+1))==0)\x20{\x20\x20i+=2;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if((code&(0xffffffff-(1<<16)+1))==0)\x20{\x20\x20i+=3;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if((code&(0xffffffff-(1<<21)+1))==0)\x20{\x20\x20i+=4;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20throw\x20\x22e\x22;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20i;\x0a\x20\x20\x20\x20}\x0a}\x0aUZIP.F\x20=\x20{};\x0a\x0aUZIP.F.deflateRaw\x20=\x20function(data,\x20out,\x20opos,\x20lvl)\x20{\x0a\x20\x20\x20\x20let\x20opts\x20=\x20[\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ush\x20good_length;\x20/*\x20reduce\x20lazy\x20search\x20above\x20this\x20match\x20length\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ush\x20max_lazy;\x20\x20\x20\x20/*\x20do\x20not\x20perform\x20lazy\x20search\x20above\x20this\x20match\x20length\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ush\x20nice_length;\x20/*\x20quit\x20search\x20above\x20this\x20match\x20length\x0a\x20\x20\x20\x20\x20\x20\x20\x20*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x20\x20\x20\x20\x20\x20good\x20lazy\x20nice\x20chain\x20*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x200\x20*/\x20[\x200,\x20\x20\x200,\x20\x20\x200,\x20\x20\x20\x200,0],\x20\x20/*\x20store\x20only\x20*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x201\x20*/\x20[\x204,\x20\x20\x204,\x20\x20\x208,\x20\x20\x20\x204,0],\x20/*\x20max\x20speed,\x20no\x20lazy\x20matches\x20*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x202\x20*/\x20[\x204,\x20\x20\x205,\x20\x2016,\x20\x20\x20\x208,0],\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x203\x20*/\x20[\x204,\x20\x20\x206,\x20\x2016,\x20\x20\x2016,0],\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x204\x20*/\x20[\x204,\x20\x2010,\x20\x2016,\x20\x20\x2032,0],\x20\x20/*\x20lazy\x20matches\x20*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x205\x20*/\x20[\x208,\x20\x2016,\x20\x2032,\x20\x20\x2032,0],\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x206\x20*/\x20[\x208,\x20\x2016,\x20128,\x20\x20128,0],\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x207\x20*/\x20[\x208,\x20\x2032,\x20128,\x20\x20256,0],\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x208\x20*/\x20[32,\x20128,\x20258,\x201024,1],\x0a\x20\x20\x20\x20\x20\x20\x20\x20/*\x209\x20*/\x20[32,\x20258,\x20258,\x204096,1]];\x20/*\x20max\x20compression\x20*/\x0a\x0a\x20\x20\x20\x20let\x20opt\x20=\x20opts[lvl];\x0a\x0a\x0a\x20\x20\x20\x20let\x20U\x20=\x20UZIP.F.U,\x20goodIndex\x20=\x20UZIP.F._goodIndex,\x20hash\x20=\x20UZIP.F._hash,\x20putsE\x20=\x20UZIP.F._putsE;\x0a\x20\x20\x20\x20let\x20i\x20=\x200,\x20pos\x20=\x20opos<<3,\x20cvrd\x20=\x200,\x20dlen\x20=\x20data.length;\x0a\x0a\x20\x20\x20\x20if(lvl==0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20while(i<dlen)\x20{\x20\x20\x20let\x20len\x20=\x20Math.min(0xffff,\x20dlen-i);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20putsE(out,\x20pos,\x20(i+len==dlen\x20?\x201\x20:\x200));\x20\x20pos\x20=\x20UZIP.F._copyExact(data,\x20i,\x20len,\x20out,\x20pos+8);\x20\x20i\x20+=\x20len;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20pos>>>3;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20let\x20lits\x20=\x20U.lits,\x20strt=U.strt,\x20prev=U.prev,\x20li=0,\x20lc=0,\x20bs=0,\x20ebits=0,\x20c=0,\x20nc=0;\x20\x20//\x20last_item,\x20literal_count,\x20block_start\x0a\x20\x20\x20\x20if(dlen>2)\x20{\x20\x20nc=UZIP.F._hash(data,0);\x20\x20strt[nc]=0;\x20\x20}\x0a\x20\x20\x20\x20let\x20nmch=0,nmci=0;\x0a\x0a\x20\x20\x20\x20for(i=0;\x20i<dlen;\x20i++)\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20c\x20=\x20nc;\x0a\x20\x20\x20\x20\x20\x20\x20\x20//*\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(i+1<dlen-2)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nc\x20=\x20UZIP.F._hash(data,\x20i+1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20ii\x20=\x20((i+1)&0x7fff);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20prev[ii]=strt[nc];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20strt[nc]=ii;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x20//*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(cvrd<=i)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if((li>14000\x20||\x20lc>26697)\x20&&\x20(dlen-i)>100)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(cvrd<i)\x20{\x20\x20lits[li]=i-cvrd;\x20\x20li+=2;\x20\x20cvrd=i;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20UZIP.F._writeBlock(((i==dlen-1)\x20||\x20(cvrd==dlen))?1:0,\x20lits,\x20li,\x20ebits,\x20data,bs,i-bs,\x20out,\x20pos);\x20\x20li=lc=ebits=0;\x20\x20bs=i;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20mch\x20=\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//if(nmci==i)\x20mch=\x20nmch;\x20\x20else\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(i<dlen-2)\x20mch\x20=\x20UZIP.F._bestMatch(data,\x20i,\x20prev,\x20c,\x20Math.min(opt[2],dlen-i),\x20opt[3]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20/*\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(mch!=0\x20&&\x20opt[4]==1\x20&&\x20(mch>>>16)<opt[1]\x20&&\x20i+1<dlen-2)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20nmch\x20=\x20UZIP.F._bestMatch(data,\x20i+1,\x20prev,\x20nc,\x20opt[2],\x20opt[3]);\x20\x20nmci=i+1;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//let\x20mch2\x20=\x20UZIP.F._bestMatch(data,\x20i+2,\x20prev,\x20nnc);\x20\x20//nmci=i+1;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if((nmch>>>16)>(mch>>>16))\x20mch=0;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}//*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20len\x20=\x20mch>>>16,\x20dst\x20=\x20mch&0xffff;\x20\x20//if(i-dst<0)\x20throw\x20\x22e\x22;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(mch!=0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20len\x20=\x20mch>>>16,\x20dst\x20=\x20mch&0xffff;\x20\x20//if(i-dst<0)\x20throw\x20\x22e\x22;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20lgi\x20=\x20goodIndex(len,\x20U.of0);\x20\x20U.lhst[257+lgi]++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20dgi\x20=\x20goodIndex(dst,\x20U.df0);\x20\x20U.dhst[\x20\x20\x20\x20dgi]++;\x20\x20ebits\x20+=\x20U.exb[lgi]\x20+\x20U.dxb[dgi];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20lits[li]\x20=\x20(len<<23)|(i-cvrd);\x20\x20lits[li+1]\x20=\x20(dst<<16)|(lgi<<8)|dgi;\x20\x20li+=2;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20cvrd\x20=\x20i\x20+\x20len;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20{\x09U.lhst[data[i]]++;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20lc++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20if(bs!=i\x20||\x20data.length==0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(cvrd<i)\x20{\x20\x20lits[li]=i-cvrd;\x20\x20li+=2;\x20\x20cvrd=i;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20UZIP.F._writeBlock(1,\x20lits,\x20li,\x20ebits,\x20data,bs,i-bs,\x20out,\x20pos);\x20\x20li=0;\x20\x20lc=0;\x20\x20li=lc=ebits=0;\x20\x20bs=i;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20while((pos&7)!=0)\x20pos++;\x0a\x20\x20\x20\x20return\x20pos>>>3;\x0a}\x0aUZIP.F._bestMatch\x20=\x20function(data,\x20i,\x20prev,\x20c,\x20nice,\x20chain)\x20{\x0a\x20\x20\x20\x20let\x20ci\x20=\x20(i&0x7fff),\x20pi=prev[ci];\x0a\x20\x20\x20\x20//console.log(\x22----\x22,\x20i);\x0a\x20\x20\x20\x20let\x20dif\x20=\x20((ci-pi\x20+\x20(1<<15))\x20&\x200x7fff);\x20\x20if(pi==ci\x20||\x20c!=UZIP.F._hash(data,i-dif))\x20return\x200;\x0a\x20\x20\x20\x20let\x20tl=0,\x20td=0;\x20\x20//\x20top\x20length,\x20top\x20distance\x0a\x20\x20\x20\x20let\x20dlim\x20=\x20Math.min(0x7fff,\x20i);\x0a\x20\x20\x20\x20while(dif<=dlim\x20&&\x20--chain!=0\x20&&\x20pi!=ci\x20/*&&\x20c==UZIP.F._hash(data,i-dif)*/)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(tl==0\x20||\x20(data[i+tl]==data[i+tl-dif]))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20cl\x20=\x20UZIP.F._howLong(data,\x20i,\x20dif);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(cl>tl)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tl=cl;\x20\x20td=dif;\x20\x20if(tl>=nice)\x20break;\x20\x20\x20\x20//*\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(dif+2<cl)\x20cl\x20=\x20dif+2;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20maxd\x20=\x200;\x20//\x20pi\x20does\x20not\x20point\x20to\x20the\x20start\x20of\x20the\x20word\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for(let\x20j=0;\x20j<cl-2;\x20j++)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20ei\x20=\x20\x20(i-dif+j+\x20(1<<15))\x20&\x200x7fff;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20li\x20=\x20prev[ei];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20curd\x20=\x20(ei-li\x20+\x20(1<<15))\x20&\x200x7fff;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(curd>maxd)\x20{\x20\x20maxd=curd;\x20\x20pi\x20=\x20ei;\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x20\x20//*/\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20ci=pi;\x20\x20pi\x20=\x20prev[ci];\x0a\x20\x20\x20\x20\x20\x20\x20\x20dif\x20+=\x20((ci-pi\x20+\x20(1<<15))\x20&\x200x7fff);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20(tl<<16)|td;\x0a}\x0aUZIP.F._howLong\x20=\x20function(data,\x20i,\x20dif)\x20{\x0a\x20\x20\x20\x20if(data[i]!=data[i-dif]\x20||\x20data[i+1]!=data[i+1-dif]\x20||\x20data[i+2]!=data[i+2-dif])\x20return\x200;\x0a\x20\x20\x20\x20let\x20oi=i,\x20l\x20=\x20Math.min(data.length,\x20i+258);\x20\x20i+=3;\x0a\x20\x20\x20\x20//while(i+4<l\x20&&\x20data[i]==data[i-dif]\x20&&\x20data[i+1]==data[i+1-dif]\x20&&\x20data[i+2]==data[i+2-dif]\x20&&\x20data[i+3]==data[i+3-dif])\x20i+=4;\x0a\x20\x20\x20\x20while(i<l\x20&&\x20data[i]==data[i-dif])\x20i++;\x0a\x20\x20\x20\x20return\x20i-oi;\x0a}\x0aUZIP.F._hash\x20=\x20function(data,\x20i)\x20{\x0a\x20\x20\x20\x20return\x20(((data[i]<<8)\x20|\x20data[i+1])+(data[i+2]<<4))&0xffff;\x0a\x20\x20\x20\x20//let\x20hash_shift\x20=\x200,\x20hash_mask\x20=\x20255;\x0a\x20\x20\x20\x20//let\x20h\x20=\x20data[i+1]\x20%\x20251;\x0a\x20\x20\x20\x20//h\x20=\x20(((h\x20<<\x208)\x20+\x20data[i+2])\x20%\x20251);\x0a\x20\x20\x20\x20//h\x20=\x20(((h\x20<<\x208)\x20+\x20data[i+2])\x20%\x20251);\x0a\x20\x20\x20\x20//h\x20=\x20((h<<hash_shift)\x20^\x20(c)\x20)\x20&\x20hash_mask;\x0a\x20\x20\x20\x20//return\x20h\x20|\x20(data[i]<<8);\x0a\x20\x20\x20\x20//return\x20(data[i]\x20|\x20(data[i+1]<<8));\x0a}\x0a//UZIP.___toth\x20=\x200;\x0aUZIP.saved\x20=\x200;\x0aUZIP.F._writeBlock\x20=\x20function(BFINAL,\x20lits,\x20li,\x20ebits,\x20data,o0,l0,\x20out,\x20pos)\x20{\x0a\x20\x20\x20\x20let\x20U\x20=\x20UZIP.F.U,\x20putsF\x20=\x20UZIP.F._putsF,\x20putsE\x20=\x20UZIP.F._putsE;\x0a\x0a\x20\x20\x20\x20//*\x0a\x20\x20\x20\x20let\x20T,\x20ML,\x20MD,\x20MH,\x20numl,\x20numd,\x20numh,\x20lset,\x20dset;\x20\x20U.lhst[256]++;\x0a\x20\x20\x20\x20T\x20=\x20UZIP.F.getTrees();\x20ML=T[0];\x20MD=T[1];\x20MH=T[2];\x20numl=T[3];\x20numd=T[4];\x20numh=T[5];\x20lset=T[6];\x20dset=T[7];\x0a\x0a\x20\x20\x20\x20let\x20cstSize\x20=\x20(((pos+3)&7)==0\x20?\x200\x20:\x208-((pos+3)&7))\x20+\x2032\x20+\x20(l0<<3);\x0a\x20\x20\x20\x20let\x20fxdSize\x20=\x20ebits\x20+\x20UZIP.F.contSize(U.fltree,\x20U.lhst)\x20+\x20UZIP.F.contSize(U.fdtree,\x20U.dhst);\x0a\x20\x20\x20\x20let\x20dynSize\x20=\x20ebits\x20+\x20UZIP.F.contSize(U.ltree\x20,\x20U.lhst)\x20+\x20UZIP.F.contSize(U.dtree\x20,\x20U.dhst);\x0a\x20\x20\x20\x20dynSize\x20\x20\x20\x20+=\x2014\x20+\x203*numh\x20+\x20UZIP.F.contSize(U.itree,\x20U.ihst)\x20+\x20(U.ihst[16]*2\x20+\x20U.ihst[17]*3\x20+\x20U.ihst[18]*7);\x0a\x0a\x20\x20\x20\x20for(let\x20j=0;\x20j<286;\x20j++)\x20U.lhst[j]=0;\x20\x20\x20for(let\x20j=0;\x20j<30;\x20j++)\x20U.dhst[j]=0;\x20\x20\x20for(let\x20j=0;\x20j<19;\x20j++)\x20U.ihst[j]=0;\x0a\x20\x20\x20\x20//*/\x0a\x20\x20\x20\x20let\x20BTYPE\x20=\x20(cstSize<fxdSize\x20&&\x20cstSize<dynSize)\x20?\x200\x20:\x20(\x20fxdSize<dynSize\x20?\x201\x20:\x202\x20);\x0a\x20\x20\x20\x20putsF(out,\x20pos,\x20BFINAL);\x20\x20putsF(out,\x20pos+1,\x20BTYPE);\x20\x20pos+=3;\x0a\x0a\x20\x20\x20\x20let\x20opos\x20=\x20pos;\x0a\x20\x20\x20\x20if(BTYPE==0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20while((pos&7)!=0)\x20pos++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20UZIP.F._copyExact(data,\x20o0,\x20l0,\x20out,\x20pos);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20ltree,\x20dtree;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(BTYPE==1)\x20{\x20\x20ltree=U.fltree;\x20\x20dtree=U.fdtree;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(BTYPE==2)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UZIP.F.makeCodes(U.ltree,\x20ML);\x20\x20UZIP.F.revCodes(U.ltree,\x20ML);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UZIP.F.makeCodes(U.dtree,\x20MD);\x20\x20UZIP.F.revCodes(U.dtree,\x20MD);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20UZIP.F.makeCodes(U.itree,\x20MH);\x20\x20UZIP.F.revCodes(U.itree,\x20MH);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ltree\x20=\x20U.ltree;\x20\x20dtree\x20=\x20U.dtree;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20putsE(out,\x20pos,numl-257);\x20\x20pos+=5;\x20\x20//\x20286\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20putsE(out,\x20pos,numd-\x20\x201);\x20\x20pos+=5;\x20\x20//\x2030\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20putsE(out,\x20pos,numh-\x20\x204);\x20\x20pos+=4;\x20\x20//\x2019\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for(let\x20i=0;\x20i<numh;\x20i++)\x20putsE(out,\x20pos+i*3,\x20U.itree[(U.ordr[i]<<1)+1]);\x20\x20\x20pos+=3*\x20numh;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20UZIP.F._codeTiny(lset,\x20U.itree,\x20out,\x20pos);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20UZIP.F._codeTiny(dset,\x20U.itree,\x20out,\x20pos);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20off=o0;\x0a\x20\x20\x20\x20\x20\x20\x20\x20for(let\x20si=0;\x20si<li;\x20si+=2)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20qb=lits[si],\x20len=(qb>>>23),\x20end\x20=\x20off+(qb&((1<<23)-1));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20while(off<end)\x20pos\x20=\x20UZIP.F._writeLit(data[off++],\x20ltree,\x20out,\x20pos);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(len!=0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20qc\x20=\x20lits[si+1],\x20dst=(qc>>16),\x20lgi=(qc>>8)&255,\x20dgi=(qc&255);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20UZIP.F._writeLit(257+lgi,\x20ltree,\x20out,\x20pos);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20putsE(out,\x20pos,\x20len-U.of0[lgi]);\x20\x20pos+=U.exb[lgi];\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20UZIP.F._writeLit(dgi,\x20dtree,\x20out,\x20pos);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20putsF(out,\x20pos,\x20dst-U.df0[dgi]);\x20\x20pos+=U.dxb[dgi];\x20\x20off+=len;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20UZIP.F._writeLit(256,\x20ltree,\x20out,\x20pos);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20//console.log(pos-opos,\x20fxdSize,\x20dynSize,\x20cstSize);\x0a\x20\x20\x20\x20return\x20pos;\x0a}\x0aUZIP.F._copyExact\x20=\x20function(data,off,len,out,pos)\x20{\x0a\x20\x20\x20\x20let\x20p8\x20=\x20(pos>>>3);\x0a\x20\x20\x20\x20out[p8]=(len);\x20\x20out[p8+1]=(len>>>8);\x20\x20out[p8+2]=255-out[p8];\x20\x20out[p8+3]=255-out[p8+1];\x20\x20p8+=4;\x0a\x20\x20\x20\x20out.set(new\x20Uint8Array(data.buffer,\x20off,\x20len),\x20p8);\x0a\x20\x20\x20\x20//for(let\x20i=0;\x20i<len;\x20i++)\x20out[p8+i]=data[off+i];\x0a\x20\x20\x20\x20return\x20pos\x20+\x20((len+4)<<3);\x0a}\x0a/*\x0a\x09Interesting\x20facts:\x0a\x09-\x20decompressed\x20block\x20can\x20have\x20bytes,\x20which\x20do\x20not\x20occur\x20in\x20a\x20Huffman\x20tree\x20(copied\x20from\x20the\x20previous\x20block\x20by\x20reference)\x0a*/\x0a\x0aUZIP.F.getTrees\x20=\x20function()\x20{\x0a\x20\x20\x20\x20let\x20U\x20=\x20UZIP.F.U;\x0a\x20\x20\x20\x20let\x20ML\x20=\x20UZIP.F._hufTree(U.lhst,\x20U.ltree,\x2015);\x0a\x20\x20\x20\x20let\x20MD\x20=\x20UZIP.F._hufTree(U.dhst,\x20U.dtree,\x2015);\x0a\x20\x20\x20\x20let\x20lset\x20=\x20[],\x20numl\x20=\x20UZIP.F._lenCodes(U.ltree,\x20lset);\x0a\x20\x20\x20\x20let\x20dset\x20=\x20[],\x20numd\x20=\x20UZIP.F._lenCodes(U.dtree,\x20dset);\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<lset.length;\x20i+=2)\x20U.ihst[lset[i]]++;\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<dset.length;\x20i+=2)\x20U.ihst[dset[i]]++;\x0a\x20\x20\x20\x20let\x20MH\x20=\x20UZIP.F._hufTree(U.ihst,\x20U.itree,\x20\x207);\x0a\x20\x20\x20\x20let\x20numh\x20=\x2019;\x20\x20while(numh>4\x20&&\x20U.itree[(U.ordr[numh-1]<<1)+1]==0)\x20numh--;\x0a\x20\x20\x20\x20return\x20[ML,\x20MD,\x20MH,\x20numl,\x20numd,\x20numh,\x20lset,\x20dset];\x0a}\x0aUZIP.F.getSecond=\x20function(a)\x20{\x20\x20let\x20b=[];\x20\x20for(let\x20i=0;\x20i<a.length;\x20i+=2)\x20b.push\x20\x20(a[i+1]);\x20\x20return\x20b;\x20\x20}\x0aUZIP.F.nonZero\x20\x20=\x20function(a)\x20{\x20\x20let\x20b=\x20\x22\x22;\x20\x20for(let\x20i=0;\x20i<a.length;\x20i+=2)\x20if(a[i+1]!=0)b+=(i>>1)+\x22,\x22;\x20\x20return\x20b;\x20\x20}\x0aUZIP.F.contSize\x20=\x20function(tree,\x20hst)\x20{\x20\x20let\x20s=0;\x20\x20for(let\x20i=0;\x20i<hst.length;\x20i++)\x20s+=\x20hst[i]*tree[(i<<1)+1];\x20\x20return\x20s;\x20\x20}\x0aUZIP.F._codeTiny\x20=\x20function(set,\x20tree,\x20out,\x20pos)\x20{\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<set.length;\x20i+=2)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20l\x20=\x20set[i],\x20rst\x20=\x20set[i+1];\x20\x20//console.log(l,\x20pos,\x20tree[(l<<1)+1]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20UZIP.F._writeLit(l,\x20tree,\x20out,\x20pos);\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20rsl\x20=\x20l==16\x20?\x202\x20:\x20(l==17\x20?\x203\x20:\x207);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(l>15)\x20{\x20\x20UZIP.F._putsE(out,\x20pos,\x20rst,\x20rsl);\x20\x20pos+=rsl;\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20pos;\x0a}\x0aUZIP.F._lenCodes\x20=\x20function(tree,\x20set)\x20{\x0a\x20\x20\x20\x20let\x20len=tree.length;\x20\x20while(len!=2\x20&&\x20tree[len-1]==0)\x20len-=2;\x20\x20//\x20when\x20no\x20distances,\x20keep\x20one\x20code\x20with\x20length\x200\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<len;\x20i+=2)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20l\x20=\x20tree[i+1],\x20nxt\x20=\x20(i+3<len\x20?\x20tree[i+3]:-1),\x20\x20nnxt\x20=\x20(i+5<len\x20?\x20tree[i+5]:-1),\x20\x20prv\x20=\x20(i==0\x20?\x20-1\x20:\x20tree[i-1]);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(l==0\x20&&\x20nxt==l\x20&&\x20nnxt==l)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20lz\x20=\x20i+5;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20while(lz+2<len\x20&&\x20tree[lz+2]==l)\x20lz+=2;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20zc\x20=\x20Math.min((lz+1-i)>>>1,\x20138);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(zc<11)\x20set.push(17,\x20zc-3);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20set.push(18,\x20zc-11);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20i\x20+=\x20zc*2-2;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20else\x20if(l==prv\x20&&\x20nxt==l\x20&&\x20nnxt==l)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20lz\x20=\x20i+5;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20while(lz+2<len\x20&&\x20tree[lz+2]==l)\x20lz+=2;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20zc\x20=\x20Math.min((lz+1-i)>>>1,\x206);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20set.push(16,\x20zc-3);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20i\x20+=\x20zc*2-2;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20else\x20set.push(l,\x200);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20len>>>1;\x0a}\x0aUZIP.F._hufTree\x20\x20\x20=\x20function(hst,\x20tree,\x20MAXL)\x20{\x0a\x20\x20\x20\x20let\x20list=[],\x20hl\x20=\x20hst.length,\x20tl=tree.length,\x20i=0;\x0a\x20\x20\x20\x20for(i=0;\x20i<tl;\x20i+=2)\x20{\x20\x20tree[i]=0;\x20\x20tree[i+1]=0;\x20\x20}\x0a\x20\x20\x20\x20for(i=0;\x20i<hl;\x20i++)\x20if(hst[i]!=0)\x20list.push({lit:i,\x20f:hst[i]});\x0a\x20\x20\x20\x20let\x20end\x20=\x20list.length,\x20l2=list.slice(0);\x0a\x20\x20\x20\x20if(end==0)\x20return\x200;\x20\x20//\x20empty\x20histogram\x20(usually\x20for\x20dist)\x0a\x20\x20\x20\x20if(end==1)\x20{\x20\x20let\x20lit=list[0].lit,\x20l2=lit==0?1:0;\x20\x20tree[(lit<<1)+1]=1;\x20\x20tree[(l2<<1)+1]=1;\x20\x20return\x201;\x20\x20}\x0a\x20\x20\x20\x20list.sort(function(a,b){return\x20a.f-b.f;});\x0a\x20\x20\x20\x20let\x20a=list[0],\x20b=list[1],\x20i0=0,\x20i1=1,\x20i2=2;\x20\x20list[0]={lit:-1,f:a.f+b.f,l:a,r:b,d:0};\x0a\x20\x20\x20\x20while(i1!=end-1)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(i0!=i1\x20&&\x20(i2==end\x20||\x20list[i0].f<list[i2].f))\x20{\x20\x20a=list[i0++];\x20\x20}\x20\x20else\x20{\x20\x20a=list[i2++];\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(i0!=i1\x20&&\x20(i2==end\x20||\x20list[i0].f<list[i2].f))\x20{\x20\x20b=list[i0++];\x20\x20}\x20\x20else\x20{\x20\x20b=list[i2++];\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20list[i1++]={lit:-1,f:a.f+b.f,\x20l:a,r:b};\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20let\x20maxl\x20=\x20UZIP.F.setDepth(list[i1-1],\x200);\x0a\x20\x20\x20\x20if(maxl>MAXL)\x20{\x20\x20UZIP.F.restrictDepth(l2,\x20MAXL,\x20maxl);\x20\x20maxl\x20=\x20MAXL;\x20\x20}\x0a\x20\x20\x20\x20for(i=0;\x20i<end;\x20i++)\x20tree[(l2[i].lit<<1)+1]=l2[i].d;\x0a\x20\x20\x20\x20return\x20maxl;\x0a}\x0a\x0aUZIP.F.setDepth\x20\x20=\x20function(t,\x20d)\x20{\x0a\x20\x20\x20\x20if(t.lit!=-1)\x20{\x20\x20t.d=d;\x20\x20return\x20d;\x20\x20}\x0a\x20\x20\x20\x20return\x20Math.max(\x20UZIP.F.setDepth(t.l,\x20d+1),\x20\x20UZIP.F.setDepth(t.r,\x20d+1)\x20);\x0a}\x0a\x0aUZIP.F.restrictDepth\x20=\x20function(dps,\x20MD,\x20maxl)\x20{\x0a\x20\x20\x20\x20let\x20i=0,\x20bCost=1<<(maxl-MD),\x20dbt=0;\x0a\x20\x20\x20\x20dps.sort(function(a,b){return\x20b.d==a.d\x20?\x20a.f-b.f\x20:\x20b.d-a.d;});\x0a\x0a\x20\x20\x20\x20for(i=0;\x20i<dps.length;\x20i++)\x20if(dps[i].d>MD)\x20{\x20\x20let\x20od=dps[i].d;\x20\x20dps[i].d=MD;\x20\x20dbt+=bCost-(1<<(maxl-od));\x20\x20}\x20\x20else\x20break;\x0a\x20\x20\x20\x20dbt\x20=\x20dbt>>>(maxl-MD);\x0a\x20\x20\x20\x20while(dbt>0)\x20{\x20\x20let\x20od=dps[i].d;\x20\x20if(od<MD)\x20{\x20\x20dps[i].d++;\x20\x20dbt-=(1<<(MD-od-1));\x20\x20}\x20\x20else\x20\x20i++;\x20\x20}\x0a\x20\x20\x20\x20for(;\x20i>=0;\x20i--)\x20if(dps[i].d==MD\x20&&\x20dbt<0)\x20{\x20\x20dps[i].d--;\x20\x20dbt++;\x20\x20}\x20\x20if(dbt!=0)\x20console.log(\x22debt\x20left\x22);\x0a}\x0a\x0aUZIP.F._goodIndex\x20=\x20function(v,\x20arr)\x20{\x0a\x20\x20\x20\x20let\x20i=0;\x20\x20if(arr[i|16]<=v)\x20i|=16;\x20\x20if(arr[i|8]<=v)\x20i|=8;\x20\x20if(arr[i|4]<=v)\x20i|=4;\x20\x20if(arr[i|2]<=v)\x20i|=2;\x20\x20if(arr[i|1]<=v)\x20i|=1;\x20\x20return\x20i;\x0a}\x0aUZIP.F._writeLit\x20=\x20function(ch,\x20ltree,\x20out,\x20pos)\x20{\x0a\x20\x20\x20\x20UZIP.F._putsF(out,\x20pos,\x20ltree[ch<<1]);\x0a\x20\x20\x20\x20return\x20pos+ltree[(ch<<1)+1];\x0a}\x0aUZIP.F.inflate\x20=\x20function(data,\x20buf)\x20{\x0a\x20\x20\x20\x20let\x20u8=Uint8Array;\x0a\x20\x20\x20\x20if(data[0]==3\x20&&\x20data[1]==0)\x20return\x20(buf\x20?\x20buf\x20:\x20new\x20u8(0));\x0a\x20\x20\x20\x20let\x20F=UZIP.F,\x20bitsF\x20=\x20F._bitsF,\x20bitsE\x20=\x20F._bitsE,\x20decodeTiny\x20=\x20F._decodeTiny,\x20makeCodes\x20=\x20F.makeCodes,\x20codes2map=F.codes2map,\x20get17\x20=\x20F._get17;\x0a\x20\x20\x20\x20let\x20U\x20=\x20F.U;\x0a\x0a\x20\x20\x20\x20let\x20noBuf\x20=\x20(buf==null);\x0a\x20\x20\x20\x20if(noBuf)\x20buf\x20=\x20new\x20u8((data.length>>>2)<<3);\x0a\x0a\x20\x20\x20\x20let\x20BFINAL=0,\x20BTYPE=0,\x20HLIT=0,\x20HDIST=0,\x20HCLEN=0,\x20ML=0,\x20MD=0;\x0a\x20\x20\x20\x20let\x20off\x20=\x200,\x20pos\x20=\x200;\x0a\x20\x20\x20\x20let\x20lmap,\x20dmap;\x0a\x0a\x20\x20\x20\x20while(BFINAL==0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20BFINAL\x20=\x20bitsF(data,\x20pos\x20\x20,\x201);\x0a\x20\x20\x20\x20\x20\x20\x20\x20BTYPE\x20\x20=\x20bitsF(data,\x20pos+1,\x202);\x20\x20pos+=3;\x0a\x20\x20\x20\x20\x20\x20\x20\x20//console.log(BFINAL,\x20BTYPE);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(BTYPE==0)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if((pos&7)!=0)\x20pos+=8-(pos&7);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20p8\x20=\x20(pos>>>3)+4,\x20len\x20=\x20data[p8-4]|(data[p8-3]<<8);\x20\x20//console.log(len);//bitsF(data,\x20pos,\x2016),\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(noBuf)\x20buf=UZIP.F._check(buf,\x20off+len);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20buf.set(new\x20u8(data.buffer,\x20data.byteOffset+p8,\x20len),\x20off);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//for(let\x20i=0;\x20i<len;\x20i++)\x20buf[off+i]\x20=\x20data[p8+i];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//for(let\x20i=0;\x20i<len;\x20i++)\x20if(buf[off+i]\x20!=\x20data[p8+i])\x20throw\x20\x22e\x22;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20((p8+len)<<3);\x20\x20off+=len;\x20\x20continue;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(noBuf)\x20buf=UZIP.F._check(buf,\x20off+(1<<17));\x20\x20//\x20really\x20not\x20enough\x20in\x20many\x20cases\x20(but\x20PNG\x20and\x20ZIP\x20provide\x20buffer\x20in\x20advance)\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(BTYPE==1)\x20{\x20\x20lmap\x20=\x20U.flmap;\x20\x20dmap\x20=\x20U.fdmap;\x20\x20ML\x20=\x20(1<<9)-1;\x20\x20MD\x20=\x20(1<<5)-1;\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(BTYPE==2)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20HLIT\x20\x20=\x20bitsE(data,\x20pos\x20\x20\x20,\x205)+257;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20HDIST\x20=\x20bitsE(data,\x20pos+\x205,\x205)+\x20\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20HCLEN\x20=\x20bitsE(data,\x20pos+10,\x204)+\x20\x204;\x20\x20pos+=14;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20ppos\x20=\x20pos;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for(let\x20i=0;\x20i<38;\x20i+=2)\x20{\x20\x20U.itree[i]=0;\x20\x20U.itree[i+1]=0;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20tl\x20=\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for(let\x20i=0;\x20i<HCLEN;\x20i++)\x20{\x20\x20let\x20l=bitsE(data,\x20pos+i*3,\x203);\x20\x20U.itree[(U.ordr[i]<<1)+1]\x20=\x20l;\x20\x20if(l>tl)tl=l;\x20\x20}\x20\x20\x20\x20\x20pos+=3*HCLEN;\x20\x20//console.log(itree);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20makeCodes(U.itree,\x20tl);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20codes2map(U.itree,\x20tl,\x20U.imap);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20lmap\x20=\x20U.lmap;\x20\x20dmap\x20=\x20U.dmap;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20pos\x20=\x20decodeTiny(U.imap,\x20(1<<tl)-1,\x20HLIT+HDIST,\x20data,\x20pos,\x20U.ttree);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20mx0\x20=\x20F._copyOut(U.ttree,\x20\x20\x20\x200,\x20HLIT\x20,\x20U.ltree);\x20\x20ML\x20=\x20(1<<mx0)-1;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20mx1\x20=\x20F._copyOut(U.ttree,\x20HLIT,\x20HDIST,\x20U.dtree);\x20\x20MD\x20=\x20(1<<mx1)-1;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//let\x20ml\x20=\x20decodeTiny(U.imap,\x20(1<<tl)-1,\x20HLIT\x20,\x20data,\x20pos,\x20U.ltree);\x20ML\x20=\x20(1<<(ml>>>24))-1;\x20\x20pos+=(ml&0xffffff);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20makeCodes(U.ltree,\x20mx0);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20codes2map(U.ltree,\x20mx0,\x20lmap);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//let\x20md\x20=\x20decodeTiny(U.imap,\x20(1<<tl)-1,\x20HDIST,\x20data,\x20pos,\x20U.dtree);\x20MD\x20=\x20(1<<(md>>>24))-1;\x20\x20pos+=(md&0xffffff);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20makeCodes(U.dtree,\x20mx1);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20codes2map(U.dtree,\x20mx1,\x20dmap);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20//let\x20ooff=off,\x20opos=pos;\x0a\x20\x20\x20\x20\x20\x20\x20\x20while(true)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20code\x20=\x20lmap[get17(data,\x20pos)\x20&\x20ML];\x20\x20pos\x20+=\x20code&15;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20lit\x20=\x20code>>>4;\x20\x20//U.lhst[lit]++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if((lit>>>8)==0)\x20{\x20\x20buf[off++]\x20=\x20lit;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if(lit==256)\x20{\x20\x20break;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20end\x20=\x20off+lit-254;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(lit>264)\x20{\x20let\x20ebs\x20=\x20U.ldef[lit-257];\x20\x20end\x20=\x20off\x20+\x20(ebs>>>3)\x20+\x20bitsE(data,\x20pos,\x20ebs&7);\x20\x20pos\x20+=\x20ebs&7;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//UZIP.F.dst[end-off]++;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20dcode\x20=\x20dmap[get17(data,\x20pos)\x20&\x20MD];\x20\x20pos\x20+=\x20dcode&15;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20dlit\x20=\x20dcode>>>4;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20dbs\x20=\x20U.ddef[dlit],\x20dst\x20=\x20(dbs>>>4)\x20+\x20bitsF(data,\x20pos,\x20dbs&15);\x20\x20pos\x20+=\x20dbs&15;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//let\x20o0\x20=\x20off-dst,\x20stp\x20=\x20Math.min(end-off,\x20dst);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//if(stp>20)\x20while(off<end)\x20{\x20\x20buf.copyWithin(off,\x20o0,\x20o0+stp);\x20\x20off+=stp;\x20\x20}\x20\x20else\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//if(end-dst<=off)\x20buf.copyWithin(off,\x20off-dst,\x20end-dst);\x20\x20else\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//if(dst==1)\x20buf.fill(buf[off-1],\x20off,\x20end);\x20\x20else\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(noBuf)\x20buf=UZIP.F._check(buf,\x20off+(1<<17));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20while(off<end)\x20{\x20\x20buf[off]=buf[off++-dst];\x20\x20\x20\x20buf[off]=buf[off++-dst];\x20\x20buf[off]=buf[off++-dst];\x20\x20buf[off]=buf[off++-dst];\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20off=end;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//while(off!=end)\x20{\x20\x20buf[off]=buf[off++-dst];\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20//console.log(off-ooff,\x20(pos-opos)>>>3);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20//console.log(UZIP.F.dst);\x0a\x20\x20\x20\x20//console.log(tlen,\x20dlen,\x20off-tlen+tcnt);\x0a\x20\x20\x20\x20return\x20buf.length==off\x20?\x20buf\x20:\x20buf.slice(0,off);\x0a}\x0aUZIP.F._check=function(buf,\x20len)\x20{\x0a\x20\x20\x20\x20let\x20bl=buf.length;\x20\x20if(len<=bl)\x20return\x20buf;\x0a\x20\x20\x20\x20let\x20nbuf\x20=\x20new\x20Uint8Array(Math.max(bl<<1,len));\x20\x20nbuf.set(buf,0);\x0a\x20\x20\x20\x20//for(let\x20i=0;\x20i<bl;\x20i+=4)\x20{\x20\x20nbuf[i]=buf[i];\x20\x20nbuf[i+1]=buf[i+1];\x20\x20nbuf[i+2]=buf[i+2];\x20\x20nbuf[i+3]=buf[i+3];\x20\x20}\x0a\x20\x20\x20\x20return\x20nbuf;\x0a}\x0a\x0aUZIP.F._decodeTiny\x20=\x20function(lmap,\x20LL,\x20len,\x20data,\x20pos,\x20tree)\x20{\x0a\x20\x20\x20\x20let\x20bitsE\x20=\x20UZIP.F._bitsE,\x20get17\x20=\x20UZIP.F._get17;\x0a\x20\x20\x20\x20let\x20i\x20=\x200;\x0a\x20\x20\x20\x20while(i<len)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20code\x20=\x20lmap[get17(data,\x20pos)&LL];\x20\x20pos+=code&15;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20lit\x20=\x20code>>>4;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if(lit<=15)\x20{\x20\x20tree[i]=lit;\x20\x20i++;\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20ll\x20=\x200,\x20n\x20=\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if(lit==16)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20n\x20=\x20(3\x20\x20+\x20bitsE(data,\x20pos,\x202));\x20\x20pos\x20+=\x202;\x20\x20ll\x20=\x20tree[i-1];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if(lit==17)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20n\x20=\x20(3\x20\x20+\x20bitsE(data,\x20pos,\x203));\x20\x20pos\x20+=\x203;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20else\x20if(lit==18)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20n\x20=\x20(11\x20+\x20bitsE(data,\x20pos,\x207));\x20\x20pos\x20+=\x207;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20ni\x20=\x20i+n;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20while(i<ni)\x20{\x20\x20tree[i]=ll;\x20\x20i++;\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20pos;\x0a}\x0aUZIP.F._copyOut\x20=\x20function(src,\x20off,\x20len,\x20tree)\x20{\x0a\x20\x20\x20\x20let\x20mx=0,\x20i=0,\x20tl=tree.length>>>1;\x0a\x20\x20\x20\x20while(i<len)\x20{\x20\x20let\x20v=src[i+off];\x20\x20tree[(i<<1)]=0;\x20\x20tree[(i<<1)+1]=v;\x20\x20if(v>mx)mx=v;\x20\x20i++;\x20\x20}\x0a\x20\x20\x20\x20while(i<tl\x20)\x20{\x20\x20tree[(i<<1)]=0;\x20\x20tree[(i<<1)+1]=0;\x20\x20i++;\x20\x20}\x0a\x20\x20\x20\x20return\x20mx;\x0a}\x0a\x0aUZIP.F.makeCodes\x20=\x20function(tree,\x20MAX_BITS)\x20{\x20\x20//\x20code,\x20length\x0a\x20\x20\x20\x20let\x20U\x20=\x20UZIP.F.U;\x0a\x20\x20\x20\x20let\x20max_code\x20=\x20tree.length;\x0a\x20\x20\x20\x20let\x20code,\x20bits,\x20n,\x20i,\x20len;\x0a\x0a\x20\x20\x20\x20let\x20bl_count\x20=\x20U.bl_count;\x20\x20for(let\x20i=0;\x20i<=MAX_BITS;\x20i++)\x20bl_count[i]=0;\x0a\x20\x20\x20\x20for(i=1;\x20i<max_code;\x20i+=2)\x20bl_count[tree[i]]++;\x0a\x0a\x20\x20\x20\x20let\x20next_code\x20=\x20U.next_code;\x09//\x20smallest\x20code\x20for\x20each\x20length\x0a\x0a\x20\x20\x20\x20code\x20=\x200;\x0a\x20\x20\x20\x20bl_count[0]\x20=\x200;\x0a\x20\x20\x20\x20for\x20(bits\x20=\x201;\x20bits\x20<=\x20MAX_BITS;\x20bits++)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20code\x20=\x20(code\x20+\x20bl_count[bits-1])\x20<<\x201;\x0a\x20\x20\x20\x20\x20\x20\x20\x20next_code[bits]\x20=\x20code;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20for\x20(n\x20=\x200;\x20n\x20<\x20max_code;\x20n+=2)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20len\x20=\x20tree[n+1];\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(len\x20!=\x200)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20tree[n]\x20=\x20next_code[len];\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20next_code[len]++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a}\x0aUZIP.F.codes2map\x20=\x20function(tree,\x20MAX_BITS,\x20map)\x20{\x0a\x20\x20\x20\x20let\x20max_code\x20=\x20tree.length;\x0a\x20\x20\x20\x20let\x20U=UZIP.F.U,\x20r15\x20=\x20U.rev15;\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<max_code;\x20i+=2)\x20if(tree[i+1]!=0)\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20lit\x20=\x20i>>1;\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20cl\x20=\x20tree[i+1],\x20val\x20=\x20(lit<<4)|cl;\x20//\x20:\x20\x20(0x8000\x20|\x20(U.of0[lit-257]<<7)\x20|\x20(U.exb[lit-257]<<4)\x20|\x20cl);\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20rest\x20=\x20(MAX_BITS-cl),\x20i0\x20=\x20tree[i]<<rest,\x20i1\x20=\x20i0\x20+\x20(1<<rest);\x0a\x20\x20\x20\x20\x20\x20\x20\x20//tree[i]=r15[i0]>>>(15-MAX_BITS);\x0a\x20\x20\x20\x20\x20\x20\x20\x20while(i0!=i1)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20p0\x20=\x20r15[i0]>>>(15-MAX_BITS);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20map[p0]=val;\x20\x20i0++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a}\x0aUZIP.F.revCodes\x20=\x20function(tree,\x20MAX_BITS)\x20{\x0a\x20\x20\x20\x20let\x20r15\x20=\x20UZIP.F.U.rev15,\x20imb\x20=\x2015-MAX_BITS;\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<tree.length;\x20i+=2)\x20{\x20\x20let\x20i0\x20=\x20(tree[i]<<(MAX_BITS-tree[i+1]));\x20\x20tree[i]\x20=\x20r15[i0]>>>imb;\x20\x20}\x0a}\x0a\x0a//\x20used\x20only\x20in\x20deflate\x0aUZIP.F._putsE=\x20function(dt,\x20pos,\x20val\x20\x20\x20)\x20{\x20\x20val\x20=\x20val<<(pos&7);\x20\x20let\x20o=(pos>>>3);\x20\x20dt[o]|=val;\x20\x20dt[o+1]|=(val>>>8);\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0aUZIP.F._putsF=\x20function(dt,\x20pos,\x20val\x20\x20\x20)\x20{\x20\x20val\x20=\x20val<<(pos&7);\x20\x20let\x20o=(pos>>>3);\x20\x20dt[o]|=val;\x20\x20dt[o+1]|=(val>>>8);\x20\x20dt[o+2]|=(val>>>16);\x20\x20}\x0a\x0aUZIP.F._bitsE=\x20function(dt,\x20pos,\x20length)\x20{\x20\x20return\x20((dt[pos>>>3]\x20|\x20(dt[(pos>>>3)+1]<<8)\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)>>>(pos&7))&((1<<length)-1);\x20\x20}\x0aUZIP.F._bitsF=\x20function(dt,\x20pos,\x20length)\x20{\x20\x20return\x20((dt[pos>>>3]\x20|\x20(dt[(pos>>>3)+1]<<8)\x20|\x20(dt[(pos>>>3)+2]<<16))>>>(pos&7))&((1<<length)-1);\x20\x20}\x0a/*\x0aUZIP.F._get9\x20=\x20function(dt,\x20pos)\x20{\x0a\x09return\x20((dt[pos>>>3]\x20|\x20(dt[(pos>>>3)+1]<<8))>>>(pos&7))&511;\x0a}\x20*/\x0aUZIP.F._get17=\x20function(dt,\x20pos)\x20{\x09//\x20return\x20at\x20least\x2017\x20meaningful\x20bytes\x0a\x20\x20\x20\x20return\x20(dt[pos>>>3]\x20|\x20(dt[(pos>>>3)+1]<<8)\x20|\x20(dt[(pos>>>3)+2]<<16)\x20)>>>(pos&7);\x0a}\x0aUZIP.F._get25=\x20function(dt,\x20pos)\x20{\x09//\x20return\x20at\x20least\x2017\x20meaningful\x20bytes\x0a\x20\x20\x20\x20return\x20(dt[pos>>>3]\x20|\x20(dt[(pos>>>3)+1]<<8)\x20|\x20(dt[(pos>>>3)+2]<<16)\x20|\x20(dt[(pos>>>3)+3]<<24)\x20)>>>(pos&7);\x0a}\x0aUZIP.F.U\x20=\x20function(){\x0a\x20\x20\x20\x20let\x20u16=Uint16Array,\x20u32=Uint32Array;\x0a\x20\x20\x20\x20return\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20next_code\x20:\x20new\x20u16(16),\x0a\x20\x20\x20\x20\x20\x20\x20\x20bl_count\x20\x20:\x20new\x20u16(16),\x0a\x20\x20\x20\x20\x20\x20\x20\x20ordr\x20:\x20[\x2016,\x2017,\x2018,\x200,\x208,\x207,\x209,\x206,\x2010,\x205,\x2011,\x204,\x2012,\x203,\x2013,\x202,\x2014,\x201,\x2015\x20],\x0a\x20\x20\x20\x20\x20\x20\x20\x20of0\x20\x20:\x20[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],\x0a\x20\x20\x20\x20\x20\x20\x20\x20exb\x20\x20:\x20[0,0,0,0,0,0,0,\x200,\x201,\x201,\x201,\x201,\x202,\x202,\x202,\x202,\x203,\x203,\x203,\x203,\x204,\x204,\x204,\x20\x204,\x20\x205,\x20\x205,\x20\x205,\x20\x205,\x20\x200,\x20\x200,\x20\x200,\x20\x200],\x0a\x20\x20\x20\x20\x20\x20\x20\x20ldef\x20:\x20new\x20u16(32),\x0a\x20\x20\x20\x20\x20\x20\x20\x20df0\x20\x20:\x20[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,\x2065535,\x2065535],\x0a\x20\x20\x20\x20\x20\x20\x20\x20dxb\x20\x20:\x20[0,0,0,0,1,1,2,\x202,\x203,\x203,\x204,\x204,\x205,\x205,\x20\x206,\x20\x206,\x20\x207,\x20\x207,\x20\x208,\x20\x208,\x20\x20\x209,\x20\x20\x209,\x20\x2010,\x20\x2010,\x20\x2011,\x20\x2011,\x20\x2012,\x20\x20\x2012,\x20\x20\x2013,\x20\x20\x2013,\x20\x20\x20\x20\x200,\x20\x20\x20\x20\x200],\x0a\x20\x20\x20\x20\x20\x20\x20\x20ddef\x20:\x20new\x20u32(32),\x0a\x20\x20\x20\x20\x20\x20\x20\x20flmap:\x20new\x20u16(\x20\x20512),\x20\x20fltree:\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20fdmap:\x20new\x20u16(\x20\x20\x2032),\x20\x20fdtree:\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20lmap\x20:\x20new\x20u16(32768),\x20\x20ltree\x20:\x20[],\x20\x20ttree:[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20dmap\x20:\x20new\x20u16(32768),\x20\x20dtree\x20:\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20imap\x20:\x20new\x20u16(\x20\x20512),\x20\x20itree\x20:\x20[],\x0a\x20\x20\x20\x20\x20\x20\x20\x20//rev9\x20:\x20new\x20u16(\x20\x20512)\x0a\x20\x20\x20\x20\x20\x20\x20\x20rev15:\x20new\x20u16(1<<15),\x0a\x20\x20\x20\x20\x20\x20\x20\x20lhst\x20:\x20new\x20u32(286),\x20dhst\x20:\x20new\x20u32(\x2030),\x20ihst\x20:\x20new\x20u32(19),\x0a\x20\x20\x20\x20\x20\x20\x20\x20lits\x20:\x20new\x20u32(15000),\x0a\x20\x20\x20\x20\x20\x20\x20\x20strt\x20:\x20new\x20u16(1<<16),\x0a\x20\x20\x20\x20\x20\x20\x20\x20prev\x20:\x20new\x20u16(1<<15)\x0a\x20\x20\x20\x20};\x0a}\x20();\x0a\x0a(function(){\x0a\x20\x20\x20\x20let\x20U\x20=\x20UZIP.F.U;\x0a\x20\x20\x20\x20let\x20len\x20=\x201<<15;\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<len;\x20i++)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20x\x20=\x20i;\x0a\x20\x20\x20\x20\x20\x20\x20\x20x\x20=\x20(((x\x20&\x200xaaaaaaaa)\x20>>>\x201)\x20|\x20((x\x20&\x200x55555555)\x20<<\x201));\x0a\x20\x20\x20\x20\x20\x20\x20\x20x\x20=\x20(((x\x20&\x200xcccccccc)\x20>>>\x202)\x20|\x20((x\x20&\x200x33333333)\x20<<\x202));\x0a\x20\x20\x20\x20\x20\x20\x20\x20x\x20=\x20(((x\x20&\x200xf0f0f0f0)\x20>>>\x204)\x20|\x20((x\x20&\x200x0f0f0f0f)\x20<<\x204));\x0a\x20\x20\x20\x20\x20\x20\x20\x20x\x20=\x20(((x\x20&\x200xff00ff00)\x20>>>\x208)\x20|\x20((x\x20&\x200x00ff00ff)\x20<<\x208));\x0a\x20\x20\x20\x20\x20\x20\x20\x20U.rev15[i]\x20=\x20(((x\x20>>>\x2016)\x20|\x20(x\x20<<\x2016)))>>>17;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20function\x20pushV(tgt,\x20n,\x20sv)\x20{\x20\x20while(n--!=0)\x20tgt.push(0,sv);\x20\x20}\x0a\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<32;\x20i++)\x20{\x20\x20U.ldef[i]=(U.of0[i]<<3)|U.exb[i];\x20\x20U.ddef[i]=(U.df0[i]<<4)|U.dxb[i];\x20\x20}\x0a\x0a\x20\x20\x20\x20pushV(U.fltree,\x20144,\x208);\x20\x20pushV(U.fltree,\x20255-143,\x209);\x20\x20pushV(U.fltree,\x20279-255,\x207);\x20\x20pushV(U.fltree,287-279,8);\x0a\x20\x20\x20\x20/*\x0a\x20\x20\x20\x20let\x20i\x20=\x200;\x0a\x20\x20\x20\x20for(;\x20i<=143;\x20i++)\x20U.fltree.push(0,8);\x0a\x20\x20\x20\x20for(;\x20i<=255;\x20i++)\x20U.fltree.push(0,9);\x0a\x20\x20\x20\x20for(;\x20i<=279;\x20i++)\x20U.fltree.push(0,7);\x0a\x20\x20\x20\x20for(;\x20i<=287;\x20i++)\x20U.fltree.push(0,8);\x0a\x20\x20\x20\x20*/\x0a\x20\x20\x20\x20UZIP.F.makeCodes(U.fltree,\x209);\x0a\x20\x20\x20\x20UZIP.F.codes2map(U.fltree,\x209,\x20U.flmap);\x0a\x20\x20\x20\x20UZIP.F.revCodes\x20(U.fltree,\x209)\x0a\x0a\x20\x20\x20\x20pushV(U.fdtree,32,5);\x0a\x20\x20\x20\x20//for(i=0;i<32;\x20i++)\x20U.fdtree.push(0,5);\x0a\x20\x20\x20\x20UZIP.F.makeCodes(U.fdtree,\x205);\x0a\x20\x20\x20\x20UZIP.F.codes2map(U.fdtree,\x205,\x20U.fdmap);\x0a\x20\x20\x20\x20UZIP.F.revCodes\x20(U.fdtree,\x205)\x0a\x0a\x20\x20\x20\x20pushV(U.itree,19,0);\x20\x20pushV(U.ltree,286,0);\x20\x20pushV(U.dtree,30,0);\x20\x20pushV(U.ttree,320,0);\x0a\x20\x20\x20\x20/*\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<\x2019;\x20i++)\x20U.itree.push(0,0);\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<286;\x20i++)\x20U.ltree.push(0,0);\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<\x2030;\x20i++)\x20U.dtree.push(0,0);\x0a\x20\x20\x20\x20for(let\x20i=0;\x20i<320;\x20i++)\x20U.ttree.push(0,0);\x0a\x20\x20\x20\x20*/\x0a})();\x0a\x0a\x0a\x0alet\x20started\x20=\x20false;\x0alet\x20cloudFrontURL\x20=\x20\x22\x22;\x0alet\x20folderName\x20=\x20\x22\x22;\x0alet\x20lastRequest\x20=\x20{};//{tc:\x2200_00_00_00\x22,\x20path:\x22...\x22}\x0alet\x20lastTimeCodeFound\x20=\x20null;//for\x20statistics\x0alet\x20msecAvg\x20=\x20[];//for\x20statistics\x0aconst\x20delimiter\x20=\x20\x22_\x22;\x0alet\x20maxTimeCode\x20=\x20{};//don\x27t\x20pass\x20this\x20timecode\x0alet\x20enabled\x20=\x20true;\x0alet\x20isWorking\x20=\x20false;\x0a\x0aconst\x20HandleData\x20=\x20async\x20(data)\x20=>\x20{\x0a\x20\x20\x20\x20const\x20result\x20=\x20UZIP.parse(data);\x0a\x20\x20\x20\x20let\x20sortedKeys\x20=\x20Object.keys(result).sort();\x0a\x09\x0a\x20\x20\x20\x20for\x20(const\x20key\x20of\x20sortedKeys)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(key.endsWith(\x22.json\x22))\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20transferableArray\x20=\x20[];\x0a\x09\x09\x09const\x20metadata\x20=\x20JSON.parse(new\x20TextDecoder().decode(result[key]));\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20const\x20tc\x20=\x20metadata.timecode.replace(/:/g,\x22_\x22);//replaceAll(\x22:\x22,\x20\x22_\x22);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(metadata.placeholders)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20for\x20(const\x20groupId\x20in\x20metadata.placeholders)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20let\x20alphaKey\x20=\x20`${tc}_${groupId}.alpha`;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20if\x20(result[alphaKey])\x20{\x0a\x09\x09\x09\x09\x09\x09metadata.placeholders[groupId].alphaAsUint8Array\x20=\x20result[alphaKey];//new\x20Uint8Array(result[alphaKey].buffer);\x0a\x09\x09\x09\x09\x09\x09transferableArray.push(result[alphaKey].buffer);\x0a\x09\x09\x09\x09\x09}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20postMessage(metadata,transferableArray);\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a}\x0a\x0aconst\x20Str2TimeCode\x20=\x20(str)\x20=>\x20{\x0a\x20\x20\x20\x20const\x20list\x20=\x20str.split(delimiter);\x0a\x20\x20\x20\x20const\x20timecode\x20=\x20{h:\x20parseInt(list[0]),\x20m:\x20parseInt(list[1]),\x20s:\x20parseInt(list[2]),\x20f:\x20parseInt(list[3])};\x0a\x20\x20\x20\x20return\x20timecode;\x0a}\x0aconst\x20TimeCode2Str\x20=\x20(timecode)\x20=>\x20{\x0a\x20\x20\x20\x20return\x20(\x220\x22\x20+\x20timecode.h).slice(-2)\x20+\x20delimiter\x20+\x20(\x220\x22\x20+\x20timecode.m).slice(-2)\x20+\x20delimiter\x20+\x20(\x220\x22\x20+\x20timecode.s).slice(-2)\x20+\x20delimiter\x20+\x20(\x220\x22\x20+\x20timecode.f).slice(-2);\x0a}\x0aconst\x20AddSecondsToTimeCode\x20=\x20(timecode,\x20seconds)\x20=>\x20{\x0a\x20\x20\x20\x20let\x20ret\x20=\x20{...timecode};//cloning\x20araay\x0a\x09ret.s\x20+=\x20seconds;\x0a\x20\x20\x20\x20if\x20(ret.s\x20>=\x2060)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20ret.s\x20=\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20ret.m++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(ret.m\x20>=\x2060)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ret.m\x20=\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ret.h++;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20ret;\x0a}\x0aconst\x20GetNextTimeCode_TC\x20=\x20(tc,\x20seconds\x20=\x200)\x20=>\x20{\x0a\x20\x20\x20\x20let\x20timecode\x20=\x20Str2TimeCode(tc);\x0a\x20\x20\x20\x20if\x20(seconds)\x20timecode\x20=\x20AddSecondsToTimeCode(timecode,\x20seconds);\x0a\x09return\x20timecode;\x0a}\x0aconst\x20GetNextTimeCode\x20=\x20(tc,\x20seconds\x20=\x200)\x20=>\x20{\x0a\x20\x20\x20\x20let\x20timecode\x20=\x20GetNextTimeCode_TC(tc,seconds);\x0a\x20\x20\x20\x20return\x20TimeCode2Str(timecode);\x0a}\x0a\x0a\x0aconst\x20IsTCBigger\x20=\x20(tc1,\x20tc2)\x20=>\x20{\x0a\x09//return\x20true\x20iif\x20tc1\x20>\x20tc2\x0a\x09if\x20(tc1.h\x20>\x20tc2.h)\x20return\x20true;\x0a\x09else\x20if\x20(tc1.h\x20<\x20tc2.h)\x20return\x20false;\x0a\x09else\x20if\x20(tc1.m\x20>\x20tc2.m)\x20return\x20true;\x0a\x09else\x20if\x20(tc1.m\x20<\x20tc2.m)\x20return\x20false;\x0a\x09else\x20if\x20(tc1.s\x20>\x20tc2.s)\x20return\x20true;\x0a\x09else\x20if\x20(tc1.s\x20<\x20tc2.s)\x20return\x20false;\x0a\x09else\x20if\x20(tc1.f\x20>\x20tc2.f)\x20return\x20true;\x0a\x09else\x20return\x20false;\x0a}\x0aconst\x20TryNextFrame\x20=\x20(seconds)\x20=>\x20{\x0a\x09if(!enabled)\x20return;\x0a\x09//if\x20the\x20required\x20time\x20code\x20exceed\x20the\x20max\x20time\x20code,\x20wait\x20a\x20bit\x0a\x09if\x20(seconds\x20>\x200\x20&&\x20IsTCBigger(GetNextTimeCode_TC(lastRequest.tc,\x20seconds),\x20maxTimeCode))\x20{\x0a\x09\x09//console.log(\x22the\x20current\x20TC\x20\x22,\x20GetNextTimeCode_TC(lastRequest.tc,\x20seconds),\x20\x22\x20is\x20bigger\x20than\x20the\x20max\x20time\x20code:\x20\x22,\x20maxTimeCode);//@oror\x0a\x09\x09setTimeout(()\x20=>\x20{\x0a\x09\x09\x09TryNextFrame(seconds);\x0a\x09\x09},\x20100);\x0a\x09}\x0a\x20\x20\x20\x20else\x20\x0a\x09{\x0a\x09\x09//console.log(\x22We\x27re\x20good\x20to\x20take\x20the\x20next\x20timecode\x22);//@oror\x0a\x09\x09setTimeout(()\x20=>\x20{\x0a\x09\x09\x09lastRequest.tc\x20=\x20GetNextTimeCode(lastRequest.tc,\x20seconds);\x0a\x09\x09\x09//console.log(\x22next\x20time\x20code:\x20\x22,\x20lastRequest.tc);//@oror\x0a\x09\x09\x09GetMetaData();\x0a\x09\x09\x09},\x200);\x0a\x09}\x0a}\x0a\x0aconst\x20AvgMetaDataMsec\x20=\x20()\x20=>\x20{\x0a\x20\x20\x20\x20let\x20sum\x20=\x200;\x0a\x20\x20\x20\x20for\x20(let\x20i\x20=\x200;\x20i\x20<\x20msecAvg.length;\x20i++)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20sum\x20+=\x20msecAvg[i];\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20return\x20sum\x20/\x20msecAvg.length;\x0a};\x0aconst\x20GetMetaData\x20=\x20async\x20()\x20=>\x20{\x0a\x20\x20\x20\x20isWorking\x20=\x20true;\x0a\x09const\x20item\x20=\x20lastRequest;\x0a\x20\x20\x20\x20const\x20url\x20=\x20`${item.path}/${item.tc}.zip`;\x0a\x20\x20\x20\x20try\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20t1\x20=\x20performance.now();\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20res\x20=\x20await\x20fetch(url);\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(res.status\x20>=\x20400)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//console.log(`${item.tc}\x20time\x20code\x20not\x20found,\x20url\x20is\x20${url}`);\x0a\x09\x09\x09let\x20now\x20=\x20performance.now();\x0a\x09\x09\x09let\x20msecSinceLastTimeDate\x20=\x20now\x20-\x20lastTimeCodeFound;\x0a\x09\x09\x09let\x20secSinceLastTimeDate\x20=\x20(msecSinceLastTimeDate/1000);\x0a\x09\x09\x09if\x20(secSinceLastTimeDate\x20>\x204)\x20{\x0a\x09\x09\x09\x09console.error(\x22Didn\x27t\x20find\x20timecode\x20\x22,\x20item.tc,\x20\x22,\x20now\x20for\x20\x22\x20+\x20secSinceLastTimeDate.toFixed(2)\x20+\x20\x22\x20seconds\x20-\x20give\x20up\x20!\x22);\x0a\x09\x09\x09\x09TryNextFrame(2);//try\x20the\x20same\x20time\x20\x20code\x20again\x0a\x09\x09\x09}\x0a\x09\x09\x09else\x20{\x0a\x09\x09\x09\x09console.error(\x22Didn\x27t\x20find\x20timecode\x20\x22,\x20item.tc,\x20\x22,\x20now\x20for\x20\x22\x20+\x20secSinceLastTimeDate.toFixed(2)\x20+\x20\x22\x20seconds\x22);\x0a\x09\x09\x09\x09TryNextFrame(0);//try\x20the\x20same\x20time\x20\x20code\x20again\x0a\x09\x09\x09}\x0a\x09\x09\x09isWorking\x20=\x20false;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20return;\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20now\x20=\x20performance.now();\x0a\x20\x20\x20\x20\x20\x20\x20\x20let\x20msecSinceLastTimeDate\x20=\x200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(lastTimeCodeFound)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20msecSinceLastTimeDate\x20=\x20now\x20-\x20lastTimeCodeFound;\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20msecAvg.push(msecSinceLastTimeDate);\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20while\x20(msecAvg.length\x20>\x201000)\x20msecAvg.shift();\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20\x20\x20lastTimeCodeFound\x20=\x20now;\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20//console.log(`${item.tc}\x20time\x20code\x20found,\x20(${msecSinceLastTimeDate}\x20msec\x20from\x20last\x20time,\x20avg:\x20${AvgMetaDataMsec()})`);\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20data\x20=\x20await\x20res.arrayBuffer();\x0a\x20\x20\x20\x20\x20\x20\x20\x20await\x20HandleData(data);\x0a\x20\x20\x20\x20\x20\x20\x20\x20const\x20t2\x20=\x20performance.now();\x0a\x20\x20\x20\x20\x20\x20\x20\x20//postMessage({time:\x20`Fetch\x20and\x20Decompress:\x20${t2\x20-\x20t1}\x20msec`});\x0a\x20\x20\x20\x20}\x20catch\x20(err)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20console.error(`Error\x20on\x20url\x20${url}`,\x20err);\x0a\x20\x20\x20\x20}\x0a\x09isWorking\x20=\x20false;\x0a\x20\x20\x20\x20TryNextFrame(2);\x0a}\x0a\x0aaddEventListener(\x22message\x22,\x20(request)\x20=>\x20{\x0a\x09if\x20(!started\x20&&\x20request.data.cloudFrontURL)\x20{\x0a\x09\x09started\x20=\x20true;\x0a\x09\x09cloudFrontURL\x20=\x20request.data.cloudFrontURL;\x0a\x09\x09folderName\x20=\x20request.data.folderName;\x0a\x09\x09let\x20tcReplaced\x20=\x20request.data.tc.replace(/:/g,\x22_\x22);//replaceAll(\x22:\x22,\x20\x22_\x22)\x0a\x09\x09lastRequest\x20=\x20{tc:\x20tcReplaced,\x20path:\x20`${cloudFrontURL}/${folderName}`};//from\x20the\x20lastReqest\x20object\x0a\x09\x09let\x20timeCode\x20=\x20Str2TimeCode(lastRequest.tc);//parse\x20the\x20time\x20code\x20string\x20into\x20a\x20real\x20time-code\x0a\x09\x09maxTimeCode\x20=\x20AddSecondsToTimeCode(Object.assign({},\x20timeCode),\x204);//set\x20the\x20max\x20limit\x20(on\x20a\x20clone)\x0a\x09\x09//set\x20the\x20timecode\x20needed\x20\x0a\x09\x09timeCode.f\x20=\x200;\x0a\x09\x09timeCode.s\x20=\x20timeCode.s\x20%\x202\x20===\x200\x20?\x20timeCode.s\x20:\x20timeCode.s\x20-\x201;\x0a\x09\x09lastRequest.tc\x20=\x20TimeCode2Str(timeCode);\x0a\x09\x09console.log(\x22Meta-data\x20worker\x20starting\x20from\x20this\x20time-code:\x20\x22,\x20lastRequest.tc);//@oror\x0a\x09\x09GetMetaData();\x0a\x09}\x0a\x09else\x20{\x0a\x09\x09let\x20tcReplaced\x20=\x20request.data.tc.replace(/:/g,\x22_\x22);\x0a\x09\x09//console.log(\x22metaDataDownloader\x20new\x20timecode\x20=\x20\x22\x20+\x20tcReplaced);\x0a\x09\x09let\x20timeCode\x20=\x20Str2TimeCode(tcReplaced);\x0a\x09\x09timeCode.f\x20=\x200;\x0a\x09\x09timeCode.s\x20=\x20timeCode.s\x20%\x202\x20===\x200\x20?\x20timeCode.s\x20:\x20timeCode.s\x20-\x201;\x0a\x09\x09if\x20(IsTCBigger(timeCode,\x20maxTimeCode))\x0a\x09\x09{\x0a\x09\x09\x09lastRequest.tc\x20=\x20TimeCode2Str(timeCode);\x0a\x09\x09\x09console.log(\x22Meta-data\x20worker\x20jumps\x20forward\x20to\x20this\x20time-code:\x20\x22,\x20lastRequest.tc);\x0a\x09\x09}\x0a\x09\x09if\x20(IsTCBigger(Str2TimeCode(lastRequest.tc),\x20AddSecondsToTimeCode(timeCode,4)))\x0a\x09\x09{\x0a\x09\x09\x09lastRequest.tc\x20=\x20TimeCode2Str(timeCode);\x0a\x09\x09\x09console.log(\x22Meta-data\x20worker\x20jumps\x20back\x20to\x20this\x20time-code:\x20\x22,\x20lastRequest.tc);\x0a\x09\x09}\x0a\x09\x09maxTimeCode\x20=\x20AddSecondsToTimeCode(timeCode,\x204);\x0a\x09\x09if(!enabled\x20&&\x20request.data.enabled)\x0a\x09\x09{\x0a\x09\x09\x09enabled\x20=\x20request.data.enabled;\x09\x0a\x09\x09\x09if(!isWorking)\x20GetMetaData();\x0a\x09\x09}\x0a\x09\x09else\x20{\x0a\x09\x09\x09enabled\x20=\x20request.data.enabled;\x09\x0a\x09\x09}\x0a\x09\x09//console.log(\x22max\x20time\x20code:\x20\x22,\x20maxTimeCode);\x0a\x09}\x0a});\x0a\x0a}\x20catch\x20(e){\x0a\x09console.error(e);\x0a}','mediaTime','BB.Augmenter\x20Start','if\x20(alpha\x20<\x200.8)','CLAMP_TO_EDGE','x-shader/x-fragment','composer::SelectAd:\x20The\x20selected\x20ad\x20should\x20be\x20in\x20place\x20','Created\x20webgl\x20context:\x20','transferToImageBitmap',',\x20LastSyncPointTime:','value','AddAdvertisement','TEXTURE_MIN_FILTER','onNewSegment','catch','Frames2Timecode','\x20!!!!!!!!!!!!!!!!!!!!!!','Something\x20else','Ads','header','error','TimeCodesFramesTranslator','u_digitSize',',\x20LastSyncPointFrame:','lastAd','frames','bindVertexArray','TimeCodeArray2TimeCodeJson','filter','bindTexture','Failed\x20to\x20create\x20alpha\x20texture',',\x20presentationTime:\x20','offset','Error\x20compiling\x20shader:\x20','isConnected','style','Unknown','nextSibling','createObjectURL','OnMetaData','RenderingMode','checked','corners','setFps','error::','timeCodeStr2TimeCodeArray',',\x20stage:\x20','none','Macintosh','useProgram','msMaxTouchPoints','open','Palm','fillRect','Composer3dWorker','ARRAY_BUFFER','canvasSize','nba','zIndex','fragmentShaderSource','timeDate2TCString','currentAds2BoundingRect','top','left','worker','ad2place','readyState','TEXTURE_2D','attachShader','Safari','fillStyle','DEPTH_BUFFER_BIT','log','Socket','LINEAR','video\x20element\x20is\x20not\x20yet\x20loaded.\x20Setting\x20up\x20loadedmetadata\x20event\x20to\x20wait\x20until\x20it\x27s\x20loaded.\x20video.readyState=','videoWidth','UNPACK_ALIGNMENT','Unsupported\x20screen\x20FPS:\x20','currentTime','983640VLJXsK','%c%s','metadataArr','textContent','name','postMessage','\x20</br>','2050SNqCzQ','MSIE','OnMetadata','length','join\x20\x20','vertexShaderSource','join','\x20rendering\x20now','dblclick','forDoNotRender','toggle','width','<span\x20style=\x27font-size:\x2030px;\x27>,\x20Brain\x20Time-Code:\x20','src','player','\x20_TimeCode:\x20',',\x20expectedDisplayTime-now:\x20','ANI2','application/javascript','a\x20Mac','shift','Win','\x20countAppleANI:\x20','uniform2fv','getUniformLocation','CallBacks\x20are\x20set','getAttribLocation','\x20version\x20','fps','debugText2','New\x20segment\x20(','lastAdName','replace','SynchMethod','Mozilla','Chrome','floor','deleteProgram','playerTime','#version\x20300\x20es\x0a\x0a//High\x20precision\x20mode\x0aprecision\x20highp\x20float;\x0a\x0a//The\x20textures\x0a//uniform\x20sampler2D\x20u_image;//video\x20frame\x27s\x20texture\x0auniform\x20sampler2D\x20ad0;//the\x20ad\x20texture\x0auniform\x20sampler2D\x20ad1;//the\x20ad\x20texture\x0auniform\x20sampler2D\x20ad2;//the\x20ad\x20texture\x0auniform\x20sampler2D\x20ad3;//the\x20ad\x20texture\x0a\x0auniform\x20vec2\x20u_resolution2;//resolution\x20of\x20the\x20canvas\x0a\x0a//v_texCoord\x20from\x20the\x20vertex\x20shader\x0a//in\x20vec2\x20v_texCoord;\x0a\x0a//Logos\x27\x20staff\x0auniform\x20int\x20hasLogo0;//has\x20logo\x20?\x0auniform\x20int\x20adForLogo0;\x0auniform\x20sampler2D\x20alpha0;//the\x20alpha\x27s\x20mate\x0auniform\x20mat3\x20u_matrix0;//the\x20reverse\x20homography\x0auniform\x20vec2\x20u_alpha0TopLeft;//the\x20alpha\x20mate\x27s\x20top-left\x0auniform\x20vec2\x20u_alpha0Size;//the\x20alpha\x20mate\x27s\x20size\x0a\x0auniform\x20int\x20hasLogo1;//has\x20logo\x20?\x0auniform\x20int\x20adForLogo1;\x0auniform\x20sampler2D\x20alpha1;//the\x20alpha\x27s\x20mate\x0auniform\x20mat3\x20u_matrix1;//the\x20reverse\x20homography\x0auniform\x20vec2\x20u_alpha1TopLeft;//the\x20alpha\x20mate\x27s\x20top-left\x0auniform\x20vec2\x20u_alpha1Size;//the\x20alpha\x20mate\x27s\x20size\x0a\x0auniform\x20int\x20hasLogo2;//has\x20logo\x20?\x0auniform\x20int\x20adForLogo2;\x0auniform\x20sampler2D\x20alpha2;//the\x20alpha\x27s\x20mate\x0auniform\x20mat3\x20u_matrix2;//the\x20reverse\x20homography\x0auniform\x20vec2\x20u_alpha2TopLeft;//the\x20alpha\x20mate\x27s\x20top-left\x0auniform\x20vec2\x20u_alpha2Size;//the\x20alpha\x20mate\x27s\x20size\x0a\x0auniform\x20int\x20hasLogo3;//has\x20logo\x20?\x0auniform\x20int\x20adForLogo3;\x0auniform\x20sampler2D\x20alpha3;//the\x20alpha\x27s\x20mate\x0auniform\x20mat3\x20u_matrix3;//the\x20reverse\x20homography\x0auniform\x20vec2\x20u_alpha3TopLeft;//the\x20alpha\x20mate\x27s\x20top-left\x0auniform\x20vec2\x20u_alpha3Size;//the\x20alpha\x20mate\x27s\x20size\x0a\x0auniform\x20int\x20hasDigit;//has\x20debug\x20digit\x20texture\x0auniform\x20sampler2D\x20digitTex;//the\x20digits\x27s\x20mate\x0auniform\x20vec2\x20u_digitTopLeft;//the\x20digit\x20mate\x27s\x20top-left\x0auniform\x20vec2\x20u_digitTopLeft2;//the\x20digit\x20mate\x27s\x20top-left\x0auniform\x20vec2\x20u_digitSize;//the\x20digit\x20mate\x27s\x20size\x0a\x0a//Output\x0aout\x20vec4\x20outColor;\x0abool\x20BlendDigit(in\x20vec2\x20curCoord)\x20{\x0a\x09//vec2\x20texCoord\x20=\x20curCoord;\x0a\x09//texCoord\x20/=\x20u_resolution2;\x0a\x09vec2\x20digitCoord\x20=\x20(curCoord\x20-\x20u_digitTopLeft)/u_digitSize;//get\x20the\x20coordinate\x20on\x20the\x20digit\x20size\x0a\x09if\x20(digitCoord.x\x20>=\x200.0\x20&&\x20digitCoord.y\x20>=\x200.0\x20&&\x20digitCoord.x\x20<=\x201.0\x20&&\x20digitCoord.y\x20<=\x201.0)\x0a\x09{\x0a\x09\x09outColor\x20=\x20texture(digitTex,\x20digitCoord);\x0a\x09\x09return\x20true;\x0a\x09}\x0a\x09return\x20false;\x0a}\x0abool\x20BlendDigit2(in\x20vec2\x20curCoord)\x20{\x0a\x09//vec2\x20texCoord\x20=\x20curCoord;\x0a\x09//texCoord\x20/=\x20u_resolution2;\x0a\x09vec2\x20digitCoord\x20=\x20(curCoord\x20-\x20u_digitTopLeft2)/u_digitSize;//get\x20the\x20coordinate\x20on\x20the\x20digit\x20size\x0a\x09if\x20(digitCoord.x\x20>=\x200.0\x20&&\x20digitCoord.y\x20>=\x200.0\x20&&\x20digitCoord.x\x20<=\x201.0\x20&&\x20digitCoord.y\x20<=\x201.0)\x0a\x09{\x0a\x09\x09outColor\x20=\x20texture(digitTex,\x20digitCoord);\x0a\x09\x09return\x20true;\x0a\x09}\x0a\x09return\x20false;\x0a}\x0abool\x20BlendWithLogo(\x0a\x09in\x20int\x20adUnit,\x0a\x20\x20\x20\x20in\x20sampler2D\x20alphaTexture,\x0a\x20\x20\x20\x20in\x20mat3\x20matrix,\x0a\x20\x20\x20\x20in\x20vec2\x20curCoord,\x0a\x20\x20\x20\x20in\x20vec2\x20alphaTopLeft,\x0a\x20\x20\x20\x20in\x20vec2\x20alphaSize)\x20\x0a{\x0a\x09\x0a\x09\x0a\x09\x0a\x20\x20\x20\x20vec2\x20texCoord;\x0a\x20\x20\x20\x20texCoord.x\x20=\x20(matrix[0][0]*curCoord.x\x20+\x20matrix[0][1]*curCoord.y\x20+\x20matrix[0][2])\x20/\x20(matrix[2][0]*curCoord.x\x20+\x20matrix[2][1]*curCoord.y\x20+\x201.0);\x0a\x20\x20\x20\x20texCoord.y\x20=\x20(matrix[1][0]*curCoord.x\x20+\x20matrix[1][1]*curCoord.y\x20+\x20matrix[1][2])\x20/\x20(matrix[2][0]*curCoord.x\x20+\x20matrix[2][1]*curCoord.y\x20+\x201.0);\x0a\x20\x20\x20\x20texCoord\x20/=\x20u_resolution2;\x0a\x0a\x20\x20\x20\x20//if\x20we\x27re\x20in\x20the\x20bounding\x20rect\x20of\x20the\x20logo\x0a\x20\x20\x20\x20if\x20(texCoord.x\x20>=\x200.0\x20&&\x20texCoord.y\x20>=\x200.0\x20&&\x20texCoord.x\x20<=\x201.0\x20&&\x20texCoord.y\x20<=\x201.0)\x0a\x20\x20\x20\x20{\x0a\x09\x09\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20float\x20alpha\x20=\x201.0;\x0a\x20\x20\x20\x20\x20\x20\x20\x20vec2\x20alphaCoord\x20=\x20(curCoord\x20-\x20alphaTopLeft)/alphaSize;//get\x20the\x20coordinate\x20on\x20the\x20alpha\x20mate\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(\x0a\x09\x09alphaCoord.x\x20>=\x200.0\x20&&\x20\x0a\x09\x09alphaCoord.y\x20>=\x200.0\x20&&\x20\x0a\x09\x09alphaCoord.x\x20<=\x201.0\x20&&\x20\x0a\x09\x09alphaCoord.y\x20<=\x201.0\x0a\x09\x09)\x0a\x20\x20\x20\x20\x20\x20\x20\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20//get\x20the\x20alpha\x20texel:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20alpha\x20*=\x20texture(alphaTexture,\x20alphaCoord).a;//without\x20blur\x0a\x20\x20\x20\x20\x20\x20\x20\x20}\x09\x09\x0a\x09\x09vec4\x20ad0Pix\x20=\x20\x0a\x09\x09\x09adUnit\x20==\x200\x20?\x20texture(ad0,\x20texCoord)\x20:\x0a\x09\x09\x09adUnit\x20==\x201\x20?\x20texture(ad1,\x20texCoord)\x20:\x0a\x09\x09\x09adUnit\x20==\x202\x20?\x20texture(ad2,\x20texCoord)\x20:\x0a\x09\x09\x09\x09\x09\x09\x20\x20texture(ad3,\x20texCoord);//get\x20the\x20logo\x27s\x20texel\x0a\x09\x09alpha\x20*=\x20ad0Pix.a;//consider\x20the\x20alpha\x20of\x20the\x20logo\x0a\x20\x20\x20\x20\x20\x20\x20\x20vec3\x20resultRGB\x20=\x20ad0Pix.rgb;//\x20+\x20videoImagePix.rgb*(1.0-alpha);//blend\x0a\x20\x20\x20\x20\x20\x20\x20\x20if\x20(alpha\x20==\x200.0)\x20resultRGB\x20=\x20vec3(0,0,0);\x0a\x09\x09outColor\x20=\x20vec4(resultRGB,\x20alpha);\x0a\x20\x20\x20\x20\x20\x20\x20\x20return\x20true;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20else\x20return\x20false;\x0a\x20\x20\x0a}\x0avoid\x20main()\x0a{\x0a\x20\x20//calculate\x20cur-coord\x20(with\x20pixels\x20units)\x0a\x20\x20vec2\x20curCoord\x20=\x20gl_FragCoord.xy;\x0a\x20\x20curCoord.y\x20=\x20u_resolution2[1]\x20-\x20curCoord.y;\x0a\x20\x20//if\x20(hasDigit\x20==\x201\x20&&\x20(BlendDigit(curCoord)\x20||\x20BlendDigit2(curCoord)))\x20return;\x0a\x20\x20if\x20(hasDigit\x20==\x201\x20&&\x20(BlendDigit(curCoord)))\x20return;\x0a\x20\x20else\x20if\x20(hasLogo0\x20==\x201\x20&&\x20\x0a\x20\x20\x20\x20\x20BlendWithLogo(adForLogo0,\x0a\x09\x20alpha0,\x20u_matrix0,\x20curCoord,u_alpha0TopLeft,\x20u_alpha0Size))\x0a\x20\x20{\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x0a\x20\x20else\x20if\x20(hasLogo1\x20==\x201\x20&&\x0a\x20\x20\x20\x20\x20BlendWithLogo(adForLogo1,\x0a\x09\x20alpha1,\x20u_matrix1,\x20curCoord,u_alpha1TopLeft,\x20u_alpha1Size))\x0a\x20\x20{\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x0a\x20\x20else\x20if\x20(hasLogo2\x20==\x201\x20&&\x0a\x20\x20\x20\x20\x20BlendWithLogo(adForLogo2,\x0a\x09\x20alpha2,\x20u_matrix2,\x20curCoord,u_alpha2TopLeft,\x20u_alpha2Size))\x0a\x20\x20{\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x0a\x20\x20else\x20if\x20(hasLogo3\x20==\x201\x20&&\x0a\x20\x20\x20\x20\x20BlendWithLogo(adForLogo3,\x0a\x09\x20alpha3,\x20u_matrix3,\x20curCoord,u_alpha3TopLeft,\x20u_alpha3Size))\x0a\x20\x20{\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x0a\x20\x20else\x20{//no\x20logo\x0a\x20\x20\x20\x20outColor\x20=\x20vec4(0,0,0,0);\x0a\x20\x20}\x0a}\x0a','BBerror','getShaderParameter','\x20Game:\x20','parentElement','compileShader','MetaDataDownloaderThread\x20created','qualityButton','30px\x20Arial',',\x20LastSyncPoint:','stopAugment','https://db8igqxlbvayn.cloudfront.net/prod','texParameteri','Anonymous','[-\x20/:;]([\x5cd._]+)','Error\x20fetching\x20and\x20processing\x20GameId\x20JSON:','utc_','backend-modules','getUTCSeconds','substring','27448QhjetK','frameDrawer','http://webgl2fundamentals.org/webgl/lessons/webgl-boilerplate.html','playbackTime','Error\x20in\x20creating\x20MetaDataDownloaderThread','CreateDigitImg','PlayBook','viewport','messageroom','version','deleteShader','OnUserClickOnCanvas','bufferData','uniformMatrix3fv','key','118270onyAlj','MetaDataFetcher','toString','value1','canvas','message','This\x20videoCallback\x20can\x20be\x20incorrect.\x20This\x20time\x20doing\x20stuff\x20in\x20requestAnimation\x20frame','weHaveTheGameID','Augmenter','Mac','TEXTURE_WRAP_T','ads:','Trident','texImage2D','absolute','_blank','Video\x20object\x20is\x20defined.\x20This\x20script\x20is\x20running\x20in\x20a\x20browser\x20environment.','Windows','isSafariMac','alpha','\x0a\x0a^^^\x20','from','test','getSeconds','bindAttribLocation','options','TEXTURE0','ads','status','Connect','isChromeWin','217hHaDPI','OS\x20X','hasDigit','clientWidth','\x20\x20extra\x20call.\x20Correcting\x20','Checking\x20window\x20and\x20methods','ontouchstart','syncPoint','composer::SelectAd:\x20selected\x20ad\x20is\x20','timeDate2TC','pointer-events','CleanGL','img','click','Edge','br1','hasOwnProperty','autoAddIndex','appendChild',',\x20ANI-VID:\x20','\x20not\x20found\x20in\x20JSON.','RenderTimecode','isArray','UNPACK_FLIP_Y_WEBGL','\x20Stage:\x20','slice','OnNewSegment','getMinutes','black','BlackBerry','height','InitGL','matchItem','\x20for\x20place\x20','RenderDigits','now','platform',',\x20presentationTime-expectedDisplayTime:\x20','VERTEX_SHADER','lastTimeReportedIncomingTC','isApple','requestAnimationFrame','doNotRenderAugmentationCheckbox','TexUnitForPlaceHolder','abs','onNewMetadata','srcFrameRate','\x20extra\x20call','ToggleFullscreen','#version\x20300\x20es\x0a\x0a//\x20an\x20attribute\x20is\x20an\x20input\x20(in)\x20to\x20a\x20vertex\x20shader.\x0a//\x20It\x20will\x20receive\x20vertex\x20data\x20from\x20the\x20buffer\x0ain\x20vec2\x20a_position;\x0a\x0a//Identity\x20matrix\x20for\x20now\x0auniform\x20mat3\x20u_matrix;\x0a\x0a//The\x20canvas\x20resolution,\x20to\x20covert\x20to\x20ZeTor\x0auniform\x20vec2\x20u_resolution;\x0a\x0a//a_texCoord->v_texCoord\x20interpolation\x0a//in\x20vec2\x20a_texCoord;\x0a//out\x20vec2\x20v_texCoord;\x0a\x0a//\x20Main\x20vertex\x20shader\x0avoid\x20main()\x20{\x0a\x20\x20//Translate,\x20rotate,\x20scale\x20by\x20u_matrix:\x0a\x20\x20vec2\x20position\x20=\x20(u_matrix\x20*\x20vec3(a_position,\x201)).xy;\x0a\x0a\x20\x20//Convert\x20the\x20position\x20from\x20pixels\x20to\x20ZeTor\x20[0.0,1.0]\x0a\x20\x20vec2\x20zeroToOne\x20=\x20position\x20/\x20u_resolution;\x0a\x0a\x20\x20//Convert\x20from\x20[0,1]\x20to\x20[0,2]\x0a\x20\x20vec2\x20zeroToTwo\x20=\x20zeroToOne\x20*\x202.0;\x0a\x0a\x20\x20//Convert\x20from\x20[0,2]\x20to\x20[-1,+1]\x20(clipspace)\x0a\x20\x20vec2\x20clipSpace\x20=\x20zeroToTwo\x20-\x201.0;\x0a\x0a\x20\x20gl_Position\x20=\x20vec4(clipSpace\x20*\x20vec2(1,\x20-1),\x200,\x201);\x0a\x0a\x20\x20//Pass\x20the\x20texCoord\x20to\x20the\x20fragment\x20shader\x0a\x20\x20//The\x20GPU\x20will\x20interpolate\x20this\x20value\x20between\x20points.\x0a\x20\x20//v_texCoord\x20=\x20a_texCoord;\x0a}\x0a','isChromeMac','):\x20','renderTimecode','right','info',',\x20Stream\x20Time-Code:\x20','getUTCMilliseconds','printTimecode','Rendering\x20now\x20','forplus','Opera','\x20room','json','callback','place2AdTexture','enabled','adTexture','ad2Url','placeholders','\x0a\x0a//High\x20precision\x20mode\x0aprecision\x20highp\x20float;\x0a\x0a//The\x20textures\x0auniform\x20sampler2D\x20u_image;//video\x20frame\x27s\x20texture2D\x0auniform\x20sampler2D\x20ad0;//the\x20ad\x20texture2D\x0auniform\x20sampler2D\x20ad1;//the\x20ad\x20texture2D\x0auniform\x20sampler2D\x20ad2;//the\x20ad\x20texture2D\x0auniform\x20sampler2D\x20ad3;//the\x20ad\x20texture2D\x0a\x0auniform\x20vec2\x20u_resolution2;//resolution\x20of\x20the\x20canvas\x0a\x0a//v_texCoord\x20from\x20the\x20vertex\x20shader\x0avarying\x20vec2\x20v_texCoord;\x0a\x0a//Logos\x27\x20staff\x0auniform\x20int\x20hasLogo0;//has\x20logo\x20?\x0auniform\x20int\x20adForLogo0;\x0auniform\x20sampler2D\x20alpha0;//the\x20alpha\x27s\x20mate\x0auniform\x20mat3\x20u_matrix0;//the\x20reverse\x20homography\x0auniform\x20vec2\x20u_alpha0TopLeft;//the\x20alpha\x20mate\x27s\x20top-left\x0auniform\x20vec2\x20u_alpha0Size;//the\x20alpha\x20mate\x27s\x20size\x0a\x0auniform\x20int\x20hasLogo1;//has\x20logo\x20?\x0auniform\x20int\x20adForLogo1;\x0auniform\x20sampler2D\x20alpha1;//the\x20alpha\x27s\x20mate\x0auniform\x20mat3\x20u_matrix1;//the\x20reverse\x20homography\x0auniform\x20vec2\x20u_alpha1TopLeft;//the\x20alpha\x20mate\x27s\x20top-left\x0auniform\x20vec2\x20u_alpha1Size;//the\x20alpha\x20mate\x27s\x20size\x0a\x0auniform\x20int\x20hasLogo2;//has\x20logo\x20?\x0auniform\x20int\x20adForLogo2;\x0auniform\x20sampler2D\x20alpha2;//the\x20alpha\x27s\x20mate\x0auniform\x20mat3\x20u_matrix2;//the\x20reverse\x20homography\x0auniform\x20vec2\x20u_alpha2TopLeft;//the\x20alpha\x20mate\x27s\x20top-left\x0auniform\x20vec2\x20u_alpha2Size;//the\x20alpha\x20mate\x27s\x20size\x0a\x0auniform\x20int\x20hasLogo3;//has\x20logo\x20?\x0auniform\x20int\x20adForLogo3;\x0auniform\x20sampler2D\x20alpha3;//the\x20alpha\x27s\x20mate\x0auniform\x20mat3\x20u_matrix3;//the\x20reverse\x20homography\x0auniform\x20vec2\x20u_alpha3TopLeft;//the\x20alpha\x20mate\x27s\x20top-left\x0auniform\x20vec2\x20u_alpha3Size;//the\x20alpha\x20mate\x27s\x20size\x0a\x0auniform\x20sampler2D\x20injectoLogo;//the\x20injecto\x20logo\x20to\x20cover\x20the\x20timecode\x20watermark\x0a\x0aconst\x20float\x20Directions\x20=\x2016.0;\x20//\x20BLUR\x20DIRECTIONS\x20(Default\x2016.0\x20-\x20More\x20is\x20better\x20but\x20slower)\x0aconst\x20float\x20QualityAd\x20=\x203.0;\x20//\x20BLUR\x20QUALITY\x20(Default\x203.0\x20-\x20More\x20is\x20better\x20but\x20slower)\x0aconst\x20float\x20QualityAlpha\x20=\x205.0;\x20//\x20BLUR\x20QUALITY\x20(Default\x203.0\x20-\x20More\x20is\x20better\x20but\x20slower)\x0aconst\x20float\x20BlurRadiusAd\x20=\x2010.0;\x0aconst\x20float\x20BlurRadiusAlpha\x20=\x2010.0;\x0aconst\x20float\x20Pi\x20=\x206.28318530718;\x20//\x20Pi*2\x0a\x0afloat\x20BlurAlpha(sampler2D\x20alphaTexture,\x20vec2\x20alphaCoord)\x20{\x0a\x09float\x20res\x20=\x20texture2D(alphaTexture,\x20alphaCoord).a;\x0a\x20\x20vec2\x20Radius\x20=\x20BlurRadiusAlpha/u_resolution2.xy;\x0a\x20\x20\x20\x0a\x20\x20for(\x20float\x20d=0.0;\x20d<Pi;\x20d+=Pi/Directions)\x20{\x0a\x09\x09for(float\x20i=1.0/QualityAlpha;\x20i<=1.0;\x20i+=1.0/QualityAlpha)\x20{\x0a\x09\x09\x09res\x20+=\x20texture2D(alphaTexture,\x20alphaCoord+vec2(cos(d),sin(d))*Radius*i).a;\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20res\x20/=\x20QualityAlpha\x20*\x20Directions\x20-\x2015.0;\x0a\x0a\x20\x20return\x20res;\x0a}\x0a\x0avec4\x20BlurAd(sampler2D\x20adTexture,\x20vec2\x20adTexCoord)\x20{\x0a\x20\x20vec2\x20Radius\x20=\x20BlurRadiusAd/u_resolution2.xy;\x0a\x20\x20vec4\x20res\x20=\x20texture2D(adTexture,\x20adTexCoord);\x0a\x20\x20\x20\x0a\x20\x20for(\x20float\x20d=0.0;\x20d<Pi;\x20d+=Pi/Directions)\x20{\x0a\x09\x09for(float\x20i=1.0/QualityAd;\x20i<=1.0;\x20i+=1.0/QualityAd)\x20{\x0a\x09\x09\x09res\x20+=\x20texture2D(adTexture,\x20adTexCoord+vec2(cos(d),sin(d))*Radius*i);\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x0a\x20\x20res\x20/=\x20QualityAd\x20*\x20Directions\x20-\x205.0;\x0a\x0a\x20\x20return\x20res;\x0a}\x0a\x0abool\x20BlendWithLogo(int\x20adUnit,\x20sampler2D\x20alphaTexture,\x20mat3\x20matrix,\x20vec2\x20curCoord,\x20vec2\x20alphaTopLeft,\x20vec2\x20alphaSize,\x20vec4\x20videoImagePix)\x20{\x0a\x0a\x20\x20vec2\x20texCoord;\x0a\x20\x20texCoord.x\x20=\x20(matrix[0][0]*curCoord.x\x20+\x20matrix[0][1]*curCoord.y\x20+\x20matrix[0][2])\x20/\x20(matrix[2][0]*curCoord.x\x20+\x20matrix[2][1]*curCoord.y\x20+\x201.0);\x0a\x20\x20texCoord.y\x20=\x20(matrix[1][0]*curCoord.x\x20+\x20matrix[1][1]*curCoord.y\x20+\x20matrix[1][2])\x20/\x20(matrix[2][0]*curCoord.x\x20+\x20matrix[2][1]*curCoord.y\x20+\x201.0);\x0a\x20\x20texCoord\x20/=\x20u_resolution2;\x0a\x0a\x20\x20//if\x20we\x27re\x20in\x20the\x20bounding\x20rect\x20of\x20the\x20logo\x0a\x20\x20if\x20(texCoord.x\x20>=\x200.0\x20&&\x20texCoord.y\x20>=\x200.0\x20&&\x20texCoord.x\x20<=\x201.0\x20&&\x20texCoord.y\x20<=\x201.0)\x20{\x0a\x09\x09float\x20maskAlpha\x20=\x201.0;\x0a\x20\x20\x20\x20vec2\x20alphaCoord\x20=\x20(curCoord\x20-\x20alphaTopLeft)/alphaSize;//get\x20the\x20coordinate\x20on\x20the\x20alpha\x20mate\x0a\x20\x20\x20\x20if\x20(alphaCoord.x\x20>=\x200.0\x20&&\x20alphaCoord.y\x20>=\x200.0\x20&&\x20alphaCoord.x\x20<=\x201.0\x20&&\x20alphaCoord.y\x20<=\x201.0)\x20{\x0a\x20\x20\x20\x20\x20\x20//\x20maskAlpha\x20=\x20BlurAlpha(alphaTexture,\x20alphaCoord);\x0a\x20\x20\x20\x20\x20\x20maskAlpha\x20=\x20texture2D(alphaTexture,\x20alphaCoord).a;\x0a\x20\x20\x20\x20}\x0a\x0a\x20\x20\x20\x20vec4\x20adColor\x20=\x20\x0a\x20\x20\x20\x20\x20\x20adUnit\x20==\x200\x20?\x20BlurAd(ad0,\x20texCoord)\x20:\x0a\x20\x20\x20\x20\x20\x20adUnit\x20==\x201\x20?\x20BlurAd(ad1,\x20texCoord)\x20:\x0a\x20\x20\x20\x20\x20\x20adUnit\x20==\x202\x20?\x20BlurAd(ad2,\x20texCoord)\x20:\x0a\x09\x09\x09\x09\x09\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20BlurAd(ad3,\x20texCoord);\x20//get\x20the\x20logo\x27s\x20texel\x0a\x0a\x20\x20\x20\x20float\x20adAlpha\x20=\x20\x0a\x20\x20\x20\x20\x20\x20adUnit\x20==\x200\x20?\x20texture2D(ad0,\x20texCoord).a\x20:\x0a\x20\x20\x20\x20\x20\x20adUnit\x20==\x201\x20?\x20texture2D(ad1,\x20texCoord).a\x20:\x0a\x20\x20\x20\x20\x20\x20adUnit\x20==\x202\x20?\x20texture2D(ad2,\x20texCoord).a\x20:\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20texture2D(ad3,\x20texCoord).a;\x20//get\x20the\x20logo\x27s\x20texel\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x0a\x0a\x20\x20\x20\x20float\x20finalAlpha\x20=\x20maskAlpha\x20*\x20adColor.a;\x0a\x20\x20\x20\x20gl_FragColor\x20=\x20vec4(adColor.rgb,\x20finalAlpha);\x0a\x20\x20\x20\x20gl_FragColor.rgb\x20*=\x20finalAlpha;\x0a\x20\x20\x20\x20return\x20true;\x0a\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20return\x20false;\x0a\x20\x20}\x0a}\x0avoid\x20main()\x0a{\x0a\x20\x20//calculate\x20cur-coord\x20(with\x20pixels\x20units)\x0a\x20\x20vec2\x20curCoord\x20=\x20gl_FragCoord.xy;\x0a\x20\x20curCoord.y\x20=\x20u_resolution2[1]\x20-\x20curCoord.y;\x0a\x0a\x20\x20//cover\x20the\x20timecode\x20with\x20some\x20watermark\x0a\x20\x20if\x20(v_texCoord[0]\x20<=\x200.125\x20&&\x20(1.0-v_texCoord[1])\x20<=\x200.125)\x0a\x20\x20{\x20\x0a\x20\x20\x20\x20gl_FragColor\x20=\x20texture2D(injectoLogo,\x20vec2(v_texCoord[0]*8.0,\x201.0-(1.0-v_texCoord[1])*8.0));\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x0a\x0a\x20\x20vec4\x20videoImagePix\x20=\x20texture2D(u_image,\x20v_texCoord);\x0a\x0a\x20\x20if\x20(hasLogo0\x20==\x201)\x20{\x0a\x20\x20\x20\x20BlendWithLogo(adForLogo0,alpha0,\x20u_matrix0,\x20curCoord,u_alpha0TopLeft,\x20u_alpha0Size,\x20videoImagePix);\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x20else\x20if\x20(hasLogo1\x20==\x201)\x20{\x0a\x20\x20\x20\x20BlendWithLogo(adForLogo1,\x20alpha1,\x20u_matrix1,\x20curCoord,u_alpha1TopLeft,\x20u_alpha1Size,\x20videoImagePix);\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x20else\x20if\x20(hasLogo2\x20==\x201)\x20{\x0a\x20\x20\x20\x20BlendWithLogo(adForLogo2,\x20alpha2,\x20u_matrix2,\x20curCoord,u_alpha2TopLeft,\x20u_alpha2Size,\x20videoImagePix);\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x20else\x20if\x20(hasLogo3\x20==\x201)\x20{\x0a\x20\x20\x20\x20BlendWithLogo(adForLogo3,\x20alpha3,\x20u_matrix3,\x20curCoord,u_alpha3TopLeft,\x20u_alpha3Size,\x20videoImagePix);\x0a\x20\x20\x20\x20return;\x0a\x20\x20}\x0a}\x0a','OTTPlayer:\x20version:\x20','Probable\x20videoFrameCallback\x20was\x20not\x20fired.\x20Apllying\x20correction\x20mechanism\x20(','Unsupported\x20FPS:\x20options.hls_fps\x20=\x20','dateTime','(\x20\x20','<span\x20style=\x27font-size:\x2030px;\x27>,\x20resultTime:\x20','getDeviceName','Size','AdNameForPlaceHolder','call','emit','None','font','RENDER_IN_WORKER','Platform\x20not\x20supported\x20yet'];_0xbcca=function(){return _0x56c969;};return _0xbcca();}const BB={'MAX_LOGOS':0x4};BB[_0x2146ea(0x2c2)]=!![],BB['GL']={'vertexShaderSource':_0x2146ea(0x2a0),'fragmentShaderSource':_0x2146ea(0x22d),'vertexShaderSourceV1':'\x0a\x0a//High\x20precision\x20mode\x0aprecision\x20highp\x20float;\x0a\x0a//\x20an\x20attribute\x20is\x20an\x20input\x20(in)\x20to\x20a\x20vertex\x20shader.\x0a//\x20It\x20will\x20receive\x20vertex\x20data\x20from\x20the\x20buffer\x0aattribute\x20vec2\x20a_position;\x0aattribute\x20vec2\x20a_texCoord;\x0auniform\x20vec2\x20u_resolution;\x0avarying\x20vec2\x20v_texCoord;\x0a\x0a\x0a//\x20Main\x20vertex\x20shader\x0avoid\x20main()\x20{\x0a\x20\x20//\x20convert\x20the\x20rectangle\x20from\x20pixels\x20to\x200.0\x20to\x201.0\x0a\x20\x20\x20vec2\x20zeroToOne\x20=\x20a_position\x20/\x20u_resolution;\x0a\x0a\x20\x20\x20//\x20convert\x20from\x200->1\x20to\x200->2\x0a\x20\x20\x20vec2\x20zeroToTwo\x20=\x20zeroToOne\x20*\x202.0;\x0a\x0a\x20\x20\x20//\x20convert\x20from\x200->2\x20to\x20-1->+1\x20(clipspace)\x0a\x20\x20\x20vec2\x20clipSpace\x20=\x20zeroToTwo\x20-\x201.0;\x0a\x0a\x20\x20\x20gl_Position\x20=\x20vec4(clipSpace\x20*\x20vec2(1,\x20-1),\x200,\x201);\x0a\x0a\x20\x20\x20//\x20pass\x20the\x20texCoord\x20to\x20the\x20fragment\x20shader\x0a\x20\x20\x20//\x20The\x20GPU\x20will\x20interpolate\x20this\x20value\x20between\x20points.\x0a\x20\x20\x20v_texCoord\x20=\x20a_texCoord;\x0a}\x0a','fragmentShaderSourceV1':_0x2146ea(0x2b4)},BB['RenderingMode']={'RenderDigits':Symbol(_0x2146ea(0x291)),'RenderTimecode':Symbol(_0x2146ea(0x284)),'Augment':Symbol(_0x2146ea(0x350))},BB[_0x2146ea(0x227)]={'OnNewSegment':Symbol(_0x2146ea(0x289)),'OnMetadata':Symbol(_0x2146ea(0x208)),'None':Symbol(_0x2146ea(0x2c0))},BB[_0x2146ea(0x3d7)]=((()=>{const _0x235f1e=_0x171783=>{const _0x459156=_0x49e7;return _0x171783[_0x459156(0x252)]()[_0x459156(0x378)](0x2,'0');},_0x25113c=((()=>{const _0x1480ef=(_0x394115,_0x3e55bc,_0x3c085d)=>{const _0x3bffef=_0x49e7;let _0x532eb7='';if(Array[_0x3bffef(0x285)](_0x394115)){_0x532eb7=[_0x235f1e(_0x394115[0x0]),_0x235f1e(_0x394115[0x1]),_0x235f1e(_0x394115[0x2]),_0x235f1e(_0x394115[0x3])][_0x3bffef(0x20c)](':');if(_0x3c085d==!![]){if(_0x394115[0x4]==0x1&&(_0x3e55bc===undefined||_0x3e55bc))_0x532eb7+='.2';else _0x532eb7+='.1';}else{if(_0x394115[0x4]==0x1&&(_0x3e55bc===undefined||_0x3e55bc))_0x532eb7+='.1';}}else{const _0x9e058d=':';_0x532eb7=('0'+_0x394115['h'])[_0x3bffef(0x288)](-0x2)+_0x9e058d+('0'+_0x394115['m'])['slice'](-0x2)+_0x9e058d+('0'+_0x394115['s'])[_0x3bffef(0x288)](-0x2)+_0x9e058d+('0'+_0x394115['f'])[_0x3bffef(0x288)](-0x2);if(_0x3e55bc)_0x532eb7+='.'+(_0x394115['field']?'1':'2');}return _0x532eb7;},_0x10a289=_0x5aab2f=>{const _0x42b0b8=_0x49e7;let _0x25a5c4=_0x5aab2f[_0x42b0b8(0x3a7)](':');if(_0x25a5c4[_0x42b0b8(0x209)]!=0x4)return console[_0x42b0b8(0x3f7)](_0x42b0b8(0x2f0)+_0x5aab2f),[0x0,0x0,0x0,0x0,0x0];let _0x2a0ce9=[parseInt(_0x25a5c4[0x0]),parseInt(_0x25a5c4[0x1]),parseInt(_0x25a5c4[0x2])];if(_0x25a5c4[0x3][_0x42b0b8(0x3ce)]('.')>=0x0){let _0x5dc003=_0x25a5c4[0x3][_0x42b0b8(0x3a7)]('.');_0x2a0ce9['push'](parseInt(_0x5dc003[0x0])),_0x2a0ce9[_0x42b0b8(0x3c6)](parseInt(_0x5dc003[0x1]));}else _0x2a0ce9[_0x42b0b8(0x3c6)](parseInt(_0x25a5c4[0x3])),_0x2a0ce9[_0x42b0b8(0x3c6)](0x0);return _0x2a0ce9;},_0x394597=(_0x2d64d0,_0xe6a5a0,_0x3020b9)=>{const _0x23fb6d=_0x49e7;let _0x1c02dc=0x3c,_0x332229=0x0;if(Math['floor'](_0xe6a5a0)==0x3c)_0x1c02dc=0x3c,_0x332229=0x0;else{if(Math[_0x23fb6d(0x22a)](_0xe6a5a0)==0x3b)_0x1c02dc=0x3c,_0x332229=0x4;else{if(Math[_0x23fb6d(0x22a)](_0xe6a5a0)==0x1e)_0x1c02dc=0x1e,_0x332229=0x0;else Math[_0x23fb6d(0x22a)](_0xe6a5a0)==0x1d&&(_0x1c02dc=0x1e,_0x332229=0x2);}}let _0x207d90=0x0,_0x25e030=Math['floor'](_0xe6a5a0*0x3c),_0x488d07=Math[_0x23fb6d(0x22a)](_0xe6a5a0*0x3c*0xa),_0x2e8965=_0x488d07*0x6,_0x23a466=_0x2d64d0[0x0],_0x37050e=_0x2d64d0[0x1],_0x657585=_0x2d64d0[0x2],_0x24b601=_0x2d64d0[0x3],_0x300b33=_0x2d64d0[0x4];_0x207d90+=_0x23a466*_0x2e8965,_0x207d90+=_0x37050e*(_0x1c02dc*0x3c),_0x207d90+=_0x657585*_0x1c02dc;if(_0x3020b9)_0x207d90+=_0x24b601*0x2+_0x300b33;else _0x207d90+=_0x24b601;return _0x207d90-=_0x332229*_0x37050e,_0x207d90+=_0x332229*Math['floor'](_0x37050e/0xa),_0x207d90;},_0x9a4d4b=(_0x168b93,_0x1b0ead,_0x2061db)=>{const _0x8ca282=_0x49e7;let _0x55e3b7=0x3c,_0x405160=0x0;if(Math[_0x8ca282(0x22a)](_0x1b0ead)==0x3c)_0x55e3b7=0x3c,_0x405160=0x0;else{if(Math['floor'](_0x1b0ead)==0x3b)_0x55e3b7=0x3c,_0x405160=0x4;else{if(Math[_0x8ca282(0x22a)](_0x1b0ead)==0x1e)_0x55e3b7=0x1e,_0x405160=0x0;else Math[_0x8ca282(0x22a)](_0x1b0ead)==0x1d&&(_0x55e3b7=0x1e,_0x405160=0x2);}}let _0x3b37ec=0x0,_0x207ff5=Math['floor'](_0x1b0ead*0x3c),_0x366ede=Math[_0x8ca282(0x22a)](_0x1b0ead*0x3c*0xa),_0x4fac10=_0x366ede*0x6,_0x283c47=_0x168b93,_0xfaae65=Math[_0x8ca282(0x22a)](_0x283c47/_0x4fac10);_0x283c47-=_0xfaae65*_0x4fac10;let _0x3c218e=Math['floor'](_0x283c47/_0x366ede);_0x283c47-=_0x3c218e*_0x366ede;if(_0x283c47>=_0x55e3b7*0x3c)_0x283c47+=_0x405160*(Math[_0x8ca282(0x22a)]((_0x283c47-_0x55e3b7*0x3c)/_0x207ff5)+0x1);let _0x4b8c05=Math[_0x8ca282(0x22a)](_0x283c47/(_0x55e3b7*0x3c));_0x283c47-=_0x4b8c05*(_0x55e3b7*0x3c);let _0x22863a=Math[_0x8ca282(0x22a)](_0x283c47/_0x55e3b7);_0x283c47-=_0x22863a*_0x55e3b7;let _0x122217=_0x283c47;_0x4b8c05+=_0x3c218e*0xa,dotOne=0x0;_0x2061db&&(dotOne=_0x122217%0x2,_0x122217=Math['floor'](_0x122217/0x2));let _0x4e0a70=[_0xfaae65,_0x4b8c05,_0x22863a,_0x122217,dotOne];return _0x4e0a70;},_0xc6039d=(_0x365241,_0x1ebebd,_0x204a38)=>{let _0x1e6aae=_0x204a38>0x1e,_0x28d8d7=_0x394597(_0x365241,_0x204a38,_0x1e6aae);return _0x28d8d7+=_0x1ebebd,_0x9a4d4b(_0x28d8d7,_0x204a38,_0x1e6aae);},_0x21165f=_0x206272=>{return{'h':_0x206272[0x0],'m':_0x206272[0x1],'s':_0x206272[0x2],'f':_0x206272[0x3],'field':_0x206272[0x4]};},_0x473ffb=(_0x2546ba,_0x31f2d5)=>{const _0x5ed251=_0x49e7;let _0x186870=BB[_0x5ed251(0x3d7)][_0x5ed251(0x278)](_0x2546ba,_0x31f2d5);return _0x31f2d5>0x3b?BB[_0x5ed251(0x3d7)][_0x5ed251(0x3f8)][_0x5ed251(0x2a8)](tcFromMessage,!![]):BB[_0x5ed251(0x3d7)][_0x5ed251(0x3f8)][_0x5ed251(0x2a8)](tcFromMessage,![]);let _0x3f1ea7=BB[_0x5ed251(0x3d7)][_0x5ed251(0x38d)],_0x2fcb61='';_0x3f1ea7[_0x5ed251(0x297)]()?_0x2fcb61=_0x2546ba:_0x2fcb61=_0x2546ba[_0x5ed251(0x3b0)]();let _0x3e486f=_0x2fcb61[_0x5ed251(0x3a7)]('T')[0x1],_0x5a498e=_0x3e486f[_0x5ed251(0x3a7)](':'),_0x1b508c=parseInt(_0x5a498e[0x0]),_0x55efd5=parseInt(_0x5a498e[0x1]),_0x3a6f39=_0x5a498e[0x2][_0x5ed251(0x3a7)]('.'),_0x4f7a9c=parseInt(_0x3a6f39[0x0]),_0x332813=parseInt(_0x3a6f39[0x1]['substring'](0x0,0x3)),_0x43aad7=Math['round'](_0x332813/0x3e8*_0x31f2d5);if(_0x31f2d5>0x3b){let _0x5a3078=_0x43aad7%0x2==0x0?0x1:0x2;_0x43aad7=Math[_0x5ed251(0x22a)](_0x43aad7/0x2);let _0x7a6996=_0x1b508c['toString']()[_0x5ed251(0x378)](0x2,'0')+':'+_0x55efd5[_0x5ed251(0x252)]()['padStart'](0x2,'0')+':'+_0x4f7a9c[_0x5ed251(0x252)]()['padStart'](0x2,'0')+':'+_0x43aad7[_0x5ed251(0x252)]()[_0x5ed251(0x378)](0x2,'0')+'.'+_0x5a3078[_0x5ed251(0x252)]();return _0x7a6996;}else{let _0x1ce7e5=_0x1b508c['toString']()[_0x5ed251(0x378)](0x2,'0')+':'+_0x55efd5[_0x5ed251(0x252)]()[_0x5ed251(0x378)](0x2,'0')+':'+_0x4f7a9c['toString']()[_0x5ed251(0x378)](0x2,'0')+':'+_0x43aad7[_0x5ed251(0x252)]()['padStart'](0x2,'0');return _0x1ce7e5;}return str;},_0x489ec6=(_0x34ee2e,_0xfd60a2)=>{const _0x3c9b85=_0x49e7;let _0x1035e9=BB[_0x3c9b85(0x3d7)][_0x3c9b85(0x38d)],_0x42a5f4='';_0x1035e9[_0x3c9b85(0x297)]()?_0x42a5f4=_0x34ee2e:_0x42a5f4=_0x34ee2e['toISOString']();let _0x2b842e=_0x42a5f4['split']('T')[0x1],_0x47412c=_0x2b842e[_0x3c9b85(0x3a7)](':'),_0x9c9a1a=parseInt(_0x47412c[0x0]),_0x435db1=parseInt(_0x47412c[0x1]),_0x3dd433=_0x47412c[0x2][_0x3c9b85(0x3a7)]('.'),_0x280e69=parseInt(_0x3dd433[0x0]),_0x20eaf5=parseInt(_0x3dd433[0x1][_0x3c9b85(0x240)](0x0,0x3));if(_0xfd60a2>0x3b){let _0x15b006=Math[_0x3c9b85(0x3b5)]((_0x20eaf5/0x3e8+_0x280e69+_0x435db1*0x3c+_0x9c9a1a*0x3c*0x3c)*_0xfd60a2),_0x30649c=BB[_0x3c9b85(0x3d7)]['TimeCodesFramesTranslator'][_0x3c9b85(0x3f2)](_0x15b006,_0xfd60a2,!![]);return _0x30649c;}else{let _0x47358b=Math[_0x3c9b85(0x3b5)]((_0x20eaf5/0x3e8+_0x280e69+_0x435db1*0x3c+_0x9c9a1a*0x3c*0x3c)*_0xfd60a2),_0x3fed86=BB[_0x3c9b85(0x3d7)]['TimeCodesFramesTranslator'][_0x3c9b85(0x3f2)](_0x47358b,_0xfd60a2,![]);return _0x3fed86;}};return{'printTimecode':_0x1480ef,'timeCodeStr2TimeCodeArray':_0x10a289,'Timecode2Frames':_0x394597,'Frames2Timecode':_0x9a4d4b,'TimeCodeAddFrames':_0xc6039d,'TimeCodeArray2TimeCodeJson':_0x21165f,'timeDate2TCString':_0x473ffb,'timeDate2TC':_0x489ec6};})()),_0x1e2abc=_0x284b4e=>{let _0x6ad32f=_0x284b4e||0x2540be3ff,_0x3f492b=[],_0x4284d1=0x0;const _0x192407=_0x315bbe=>{const _0x33e327=_0x49e7;++_0x4284d1,_0x3f492b[_0x33e327(0x3c6)](_0x315bbe);while(_0x3f492b[_0x33e327(0x209)]>_0x6ad32f)_0x3f492b[_0x33e327(0x21a)]();},_0x5cf319=()=>{const _0x454ff3=_0x49e7;if(_0x3f492b['length']==0x0)return-0x1;let _0xc102b1=Array[_0x454ff3(0x265)](_0x3f492b)[_0x454ff3(0x3d5)]((_0x376abd,_0x4d2030)=>{return _0x376abd-_0x4d2030;});return _0xc102b1[parseInt(_0xc102b1[_0x454ff3(0x209)]/0x2)];},_0xd46564=()=>{return _0x4284d1;};return{'add':_0x192407,'getMedian':_0x5cf319,'howMany':_0xd46564};},_0x41f587=((()=>{const _0x448f9b=()=>{const _0x525e73=_0x49e7,_0x2743ef=navigator['userAgent'];if(/windows/i['test'](_0x2743ef))return _0x525e73(0x261);else{if(/android/i[_0x525e73(0x266)](_0x2743ef))return _0x525e73(0x352);else{if(/iphone|ipad|ipod/i['test'](_0x2743ef))return _0x525e73(0x33a);else{if(/mac/i[_0x525e73(0x266)](_0x2743ef)){return _0x525e73(0x259);let _0x181337=_0x525e73(0x275)in window||navigator[_0x525e73(0x362)]>0x0||navigator[_0x525e73(0x1e1)]>0x0;if(_0x181337)return _0x525e73(0x2fe);else return _0x525e73(0x259);}else return/ipad/i[_0x525e73(0x266)](_0x2743ef)?_0x525e73(0x2fe):_0x525e73(0x3f4);}}}},_0x448e85=()=>{const _0x122b75=_0x49e7;let _0x393ea8=_0x448f9b();return _0x393ea8==_0x122b75(0x259);},_0x296013=()=>{const _0x4cc069=_0x49e7;let _0x391905=_0x448f9b();return _0x391905==_0x4cc069(0x2fe);},_0x88eb2b=()=>{const _0x8bad20=_0x49e7;let _0x36180c=_0x448f9b();return _0x36180c==_0x8bad20(0x33a);},_0x666575=()=>{const _0x532293=_0x49e7;let _0x476699=_0x448f9b();return _0x476699==_0x532293(0x33a)||_0x476699=='Mac'||_0x476699==_0x532293(0x2fe);},_0x1c458e=()=>{const _0x1b1a5c=_0x49e7;let _0xc38781=_0x448f9b();return _0xc38781==_0x1b1a5c(0x261);},_0x562d8e=()=>{const _0x2ae1c2=_0x49e7;let _0x313aae=_0x448f9b();return _0x313aae==_0x2ae1c2(0x352);},_0x451cec=()=>{const _0x514ba1=_0x49e7;let _0x467bde=_0x448f9b();if(_0x467bde=='Windows')return _0x514ba1(0x373);else{if(_0x467bde==_0x514ba1(0x352))return _0x514ba1(0x35a);else{if(_0x467bde==_0x514ba1(0x33a))return'an\x20iPhone';else{if(_0x467bde==_0x514ba1(0x259))return _0x514ba1(0x219);else{if(_0x467bde==_0x514ba1(0x2fe))return'an\x20iPad';else return _0x514ba1(0x340);}}}}},_0x2a5c41=()=>{const _0xc13883=_0x49e7;let _0x298a1b={'options':[],'header':[navigator[_0xc13883(0x293)],navigator['userAgent'],navigator[_0xc13883(0x316)],navigator[_0xc13883(0x2ec)],window['opera']],'dataos':[{'name':_0xc13883(0x3b7),'value':_0xc13883(0x3b7),'version':'OS'},{'name':_0xc13883(0x261),'value':_0xc13883(0x21b),'version':'NT'},{'name':_0xc13883(0x35d),'value':_0xc13883(0x35d),'version':'OS'},{'name':'iPad','value':_0xc13883(0x2fe),'version':'OS'},{'name':'Kindle','value':_0xc13883(0x37a),'version':'Silk'},{'name':_0xc13883(0x352),'value':_0xc13883(0x352),'version':_0xc13883(0x352)},{'name':_0xc13883(0x247),'value':_0xc13883(0x247),'version':'OS'},{'name':_0xc13883(0x28c),'value':'BlackBerry','version':'/'},{'name':_0xc13883(0x1df),'value':_0xc13883(0x259),'version':_0xc13883(0x270)},{'name':'Linux','value':_0xc13883(0x3b1),'version':'rv'},{'name':_0xc13883(0x1e3),'value':_0xc13883(0x1e3),'version':'PalmOS'}],'databrowser':[{'name':_0xc13883(0x229),'value':_0xc13883(0x229),'version':_0xc13883(0x229)},{'name':_0xc13883(0x306),'value':'Firefox','version':'Firefox'},{'name':'Safari','value':_0xc13883(0x1f4),'version':'Version'},{'name':_0xc13883(0x364),'value':_0xc13883(0x207),'version':_0xc13883(0x207)},{'name':'Opera','value':_0xc13883(0x2ab),'version':_0xc13883(0x2ab)},{'name':'BlackBerry','value':_0xc13883(0x335),'version':_0xc13883(0x335)},{'name':_0xc13883(0x228),'value':_0xc13883(0x228),'version':'Mozilla'}],'init':function(){const _0x505484=_0xc13883;let _0x595dc9=this[_0x505484(0x3f6)][_0x505484(0x20c)]('\x20'),_0x543fd2=this['matchItem'](_0x595dc9,this['dataos']),_0x15ef71=this[_0x505484(0x28f)](_0x595dc9,this[_0x505484(0x379)]);return{'os':_0x543fd2,'browser':_0x15ef71};},'matchItem':function(_0x35b9df,_0x28c9d9){const _0x4d48d7=_0xc13883;let _0x56cafb=0x0,_0x33efcd=0x0,_0x303535='',_0x452037,_0x4a1b7b,_0x3a34db,_0x4abcee,_0x2e8805;for(_0x56cafb=0x0;_0x56cafb<_0x28c9d9['length'];_0x56cafb+=0x1){_0x452037=new RegExp(_0x28c9d9[_0x56cafb][_0x4d48d7(0x3ed)],'i'),_0x3a34db=_0x452037[_0x4d48d7(0x266)](_0x35b9df);if(_0x3a34db){_0x4a1b7b=new RegExp(_0x28c9d9[_0x56cafb][_0x4d48d7(0x24a)]+_0x4d48d7(0x23b),'i'),_0x4abcee=_0x35b9df[_0x4d48d7(0x2ca)](_0x4a1b7b),_0x2e8805='';_0x4abcee&&(_0x4abcee[0x1]&&(_0x4abcee=_0x4abcee[0x1]));if(_0x4abcee){_0x4abcee=_0x4abcee[_0x4d48d7(0x3a7)](/[._]+/);for(_0x33efcd=0x0;_0x33efcd<_0x4abcee[_0x4d48d7(0x209)];_0x33efcd+=0x1){_0x33efcd===0x0?_0x2e8805+=_0x4abcee[_0x33efcd]+'.':_0x2e8805+=_0x4abcee[_0x33efcd];}}else _0x2e8805='0';return{'name':_0x28c9d9[_0x56cafb][_0x4d48d7(0x203)],'version':parseFloat(_0x2e8805)};}}return{'name':_0x4d48d7(0x34a),'version':0x0};}},_0x5b1981=_0x298a1b[_0xc13883(0x3e0)]();return _0x5b1981['os'][_0xc13883(0x203)];},_0x13ebd5=()=>{const _0x15f849=_0x49e7,_0x21b24a=navigator['userAgent'];if(_0x21b24a['indexOf'](_0x15f849(0x229))>-0x1&&_0x21b24a[_0x15f849(0x3ce)](_0x15f849(0x27d))===-0x1)return _0x15f849(0x229);else{if(_0x21b24a['indexOf']('Safari')>-0x1&&_0x21b24a[_0x15f849(0x3ce)](_0x15f849(0x229))===-0x1)return _0x15f849(0x1f4);else{if(_0x21b24a[_0x15f849(0x3ce)]('Firefox')>-0x1)return _0x15f849(0x306);else{if(_0x21b24a[_0x15f849(0x3ce)](_0x15f849(0x207))>-0x1||_0x21b24a['indexOf'](_0x15f849(0x25c))>-0x1)return'Internet\x20Explorer';else return _0x21b24a[_0x15f849(0x3ce)](_0x15f849(0x27d))>-0x1?_0x15f849(0x27d):_0x15f849(0x1d3);}}}},_0x867556=()=>{return _0x448e85()&&_0x13ebd5()=='Safari';},_0x50a3c=()=>{const _0x53d71d=_0x49e7;return _0x448e85()&&_0x13ebd5()==_0x53d71d(0x229);},_0x3e58f3=()=>{return _0x1c458e()&&_0x13ebd5()=='Chrome';};return{'getDeviceName':_0x2a5c41,'getCurrentPlatform':_0x448f9b,'isApple':_0x666575,'isWindows':_0x1c458e,'isAndroid':_0x562d8e,'isMac':_0x448e85,'isiPhone':_0x88eb2b,'isiPad':_0x296013,'getDeviceDescription':_0x451cec,'getBrowserName':_0x13ebd5,'isSafariMac':_0x867556,'isChromeMac':_0x50a3c,'isChromeWin':_0x3e58f3};})()),_0x10c24a=()=>{const _0x27691a=[0x7530/0x3e9,0x1e/0x1],_0x407eca=[0xea60/0x3e9,0x3c/0x1];let _0x6f0f85=[],_0x14f335=[],_0x5ba3e3=0x0,_0x4f1e22=-0x1,_0x157353=0x0;const _0x3b992b=_0x201468=>{const _0x51cdf6=_0x49e7;_0x157353++;let _0x342bcb=0x3e7,_0x3de5de=0x0;if(_0x4f1e22==-0x1){_0x4f1e22=_0x201468;return;}else{let _0x5bdf52=_0x201468-_0x4f1e22;if(_0x5ba3e3<0x64){_0x14f335['push'](_0x5bdf52),_0x5ba3e3++;return;}else _0x14f335[_0x51cdf6(0x3c6)](_0x5bdf52),_0x14f335[_0x51cdf6(0x21a)]();let _0x1ada63=0x0;for(let _0x1d95be=0x0;_0x1d95be<_0x14f335['length'];_0x1d95be++){_0x1ada63+=_0x14f335[_0x1d95be];}_0x5bdf52=_0x1ada63/_0x14f335[_0x51cdf6(0x209)];if(0x1/_0x5bdf52<0x28)possibleFps=_0x27691a;else possibleFps=_0x407eca;}_0x4f1e22=_0x201468;for(let _0x19cc40=0x0;_0x19cc40<possibleFps[_0x51cdf6(0x209)];++_0x19cc40){let _0x3c062a=possibleFps[_0x19cc40],_0x5128f2=_0x201468*_0x3c062a,_0x448d6b=Math[_0x51cdf6(0x3b5)](_0x5128f2),_0x2826bb=Math[_0x51cdf6(0x29b)](_0x5128f2-_0x448d6b);_0x2826bb<_0x342bcb&&(_0x342bcb=_0x2826bb,_0x3de5de=_0x3c062a);}let _0x2681c5=_0x3de5de;_0x6f0f85[_0x51cdf6(0x3c6)](_0x2681c5);if(_0x157353>0x3e8)_0x6f0f85[_0x51cdf6(0x21a)]();},_0x10517c=()=>{let _0x548ae8={},_0x2355ac,_0x376b92=0x0;for(let _0x3b392c=0x0;_0x3b392c<_0x6f0f85['length'];_0x3b392c++){let _0x57506e=_0x6f0f85[_0x3b392c];_0x548ae8[_0x57506e]=(_0x548ae8[_0x57506e]||0x0)+0x1,_0x548ae8[_0x57506e]>_0x376b92&&(_0x2355ac=_0x57506e,_0x376b92=_0x548ae8[_0x57506e]);}return _0x2355ac;},_0x17904e=()=>{return _0x157353;};return{'addTime':_0x3b992b,'getProbableFPS':_0x10517c,'howMany':_0x17904e};};return{'TimeCodesFramesTranslator':_0x25113c,'MedianCalculator':_0x1e2abc,'Platform':_0x41f587,'FPSGetter':_0x10c24a};})()),BB[_0x2146ea(0x1f8)]=class{constructor(_0x2717c2){const _0x285108=_0x2146ea;this[_0x285108(0x1d1)]=![],this['folderName']='',this['callback']=_0x2717c2,this[_0x285108(0x203)]='';}[_0x2146ea(0x26d)](_0x3cf882){const _0x8a8e42=_0x2146ea;if(typeof io==_0x8a8e42(0x35c)||this[_0x8a8e42(0x1d1)])return;this[_0x8a8e42(0x1d1)]=!![];const _0x2acc7b=io(_0x8a8e42(0x30b));_0x2acc7b['on'](_0x8a8e42(0x33d),()=>{const _0xff2497=_0x8a8e42;console[_0xff2497(0x1f7)](_0xff2497(0x37d));let _0x24ba9b=BB['Utils'][_0xff2497(0x38d)];_0x2acc7b[_0xff2497(0x2bf)]('setinfo',{'device':_0x24ba9b[_0xff2497(0x2bb)]()},_0x2a2f9c=>{const _0x317438=_0xff2497;this['name']=_0x2a2f9c[_0x317438(0x203)],_0x2acc7b['emit']('join',_0x3cf882,_0x4a42a9=>{const _0x4568f3=_0x317438;console[_0x4568f3(0x1f7)](_0x4568f3(0x20a)+_0x3cf882+_0x4568f3(0x2ac)),this[_0x4568f3(0x2ae)](_0x4568f3(0x20c),_0x4a42a9);});});}),_0x2acc7b['on']('error',_0x4bd886=>{const _0x36cfcb=_0x8a8e42;console[_0x36cfcb(0x3f7)](_0x36cfcb(0x1db)+_0x4bd886);}),_0x2acc7b['on']('disconnect',_0x377040=>{const _0x4d2220=_0x8a8e42;console[_0x4d2220(0x3f7)](_0x4d2220(0x3cf)+_0x377040);}),_0x2acc7b['on'](_0x8a8e42(0x249),_0x265c09=>{const _0x24e83a=_0x8a8e42;this[_0x24e83a(0x2ae)](_0x24e83a(0x249),_0x265c09),console[_0x24e83a(0x1f7)](_0x24e83a(0x38e),_0x265c09);}),_0x2acc7b['on'](_0x8a8e42(0x26b),_0x40826e=>{const _0x2943ee=_0x8a8e42;this[_0x2943ee(0x2ae)](_0x2943ee(0x26b),_0x40826e),console[_0x2943ee(0x1f7)](_0x2943ee(0x25b),_0x40826e);});}},BB[_0x2146ea(0x258)]=(_0x16373d,_0x425b68,_0x540eae)=>{const _0xbc03c9=_0x2146ea;console['log'](_0xbc03c9(0x3e5)),CreateDigitImg=_0x5b7d96=>{const _0x37e1c7=_0xbc03c9;let _0xb0e65e=document[_0x37e1c7(0x380)](_0x37e1c7(0x254));_0xb0e65e[_0x37e1c7(0x211)]=0x32,_0xb0e65e[_0x37e1c7(0x28d)]=0x32;let _0x5be336=_0xb0e65e[_0x37e1c7(0x3e2)]('2d');_0x5be336[_0x37e1c7(0x1f5)]=_0x37e1c7(0x28b),_0x5be336[_0x37e1c7(0x1e4)](0x0,0x0,_0xb0e65e['width'],_0xb0e65e[_0x37e1c7(0x28d)]),_0x5be336[_0x37e1c7(0x2c1)]='30px\x20Arial',_0x5be336[_0x37e1c7(0x1f5)]=_0x37e1c7(0x315),_0x5be336['fillText'](_0x5b7d96,0xa,0x23);return _0xb0e65e[_0x37e1c7(0x3ae)]();return _0xb0e65e[_0x37e1c7(0x3eb)]();return createImageBitmap(_0xb0e65e);let _0x2c98bf=_0xb0e65e[_0x37e1c7(0x3ae)](),_0x374aef=document['createElement'](_0x37e1c7(0x27b));return _0x374aef['src']=_0x2c98bf,_0x374aef;};function _0x2abfed(_0x48dc66,_0x7cec63){const _0x3ceada=_0xbc03c9;let _0x51adfc='';if(_0x48dc66&&_0x48dc66['includes'](_0x3ceada(0x3c2))){const _0x300cce=_0x48dc66[_0x3ceada(0x226)](/.*NTC./,'');let _0x344947=0x0;while(_0x344947+0x8<=_0x300cce[_0x3ceada(0x209)]){const _0x1fab7a=_0x300cce['substring'](_0x344947,_0x344947+0x4),_0x3fc029=((_0x300cce['charCodeAt'](_0x344947+0x4)*0x100+_0x300cce['charCodeAt'](_0x344947+0x5))*0x100+_0x300cce['charCodeAt'](_0x344947+0x6))*0x100+_0x300cce[_0x3ceada(0x327)](_0x344947+0x7);if(_0x344947+0x8+_0x3fc029>_0x300cce[_0x3ceada(0x209)])break;const _0xd1d692=_0x300cce['substring'](_0x344947+0x8,_0x344947+0x8+_0x3fc029);_0x1fab7a==_0x3ceada(0x23d)&&(timecodeDateTime=new Date(parseInt(_0xd1d692))[_0x3ceada(0x334)]()/0x3e8,timecodeDelta=timecodeDateTime-_0x7cec63);_0x1fab7a==_0x3ceada(0x3ca)&&(tcTimeStamp=new Date(parseInt(_0xd1d692))['getTime']());if(_0x1fab7a===_0x3ceada(0x399)){timecode_offset=parseInt(_0xd1d692)/0x5a;if(_0x540eae[_0x3ceada(0x37c)])console['log']('We\x20are\x20HERE:TimeCode',timecode_offset);}_0x344947+=0x8+_0x3fc029;}}return _0x51adfc;}let _0x53003d=[0x0,0x0,0x0,0x0,0x0];function _0x2b29d2(_0x463df7){const _0x5ad5a5=_0xbc03c9;if(_0x463df7&&_0x463df7[_0x5ad5a5(0x3d8)]&&_0x463df7['metadata']['id']==0x0||_0x9fcf35['isSafariMac']()){if(_0x463df7[_0x5ad5a5(0x3d8)][_0x5ad5a5(0x35f)])_0x463df7[_0x5ad5a5(0x3d8)][_0x5ad5a5(0x35f)]=_0x2abfed(_0x463df7[_0x5ad5a5(0x3d8)][_0x5ad5a5(0x35f)],_0x463df7[_0x5ad5a5(0x3d8)][_0x5ad5a5(0x311)]);else{if(_0x463df7[_0x5ad5a5(0x3d8)][_0x5ad5a5(0x3fc)]&&_0x463df7[_0x5ad5a5(0x3d8)]['frames'][_0x5ad5a5(0x209)]&&_0x463df7['metadata'][_0x5ad5a5(0x3fc)][0x0][_0x5ad5a5(0x24f)]&&_0x463df7['metadata'][_0x5ad5a5(0x3fc)][0x0][_0x5ad5a5(0x24f)][_0x5ad5a5(0x2d8)]()===_0x5ad5a5(0x371)){const _0x1707a6=_0x463df7['metadata'][_0x5ad5a5(0x3fc)][_0x5ad5a5(0x3ff)](_0x37b3aa=>{const _0x397753=_0x5ad5a5;return _0x37b3aa[_0x397753(0x2a5)]&&_0x37b3aa['info'][_0x397753(0x2d8)]()['includes']('ntc');});_0x1707a6['length']&&(messageData=_0x1707a6[_0x1707a6[_0x5ad5a5(0x209)]-0x1][_0x5ad5a5(0x2a5)]+'\x00'+String[_0x5ad5a5(0x303)](..._0x1707a6[_0x1707a6['length']-0x1][_0x5ad5a5(0x34c)]),_0x463df7[_0x5ad5a5(0x3d8)]['messageData']=_0x2abfed(messageData,_0x463df7[_0x5ad5a5(0x3d8)][_0x5ad5a5(0x311)]));}}(_0x463df7[_0x5ad5a5(0x3d8)]['id']==0x0||_0x9fcf35[_0x5ad5a5(0x262)]()&&timecode_offset==0x0)&&(presentationTime=_0x463df7[_0x5ad5a5(0x3d8)][_0x5ad5a5(0x311)]*0x3e8,offsetTimeCode=new Date(tcTimeStamp-timecode_offset),offsetTimeCodeframeNumber=Math[_0x5ad5a5(0x3b5)](offsetTimeCode[_0x5ad5a5(0x2a7)]()*0x1e*0x2/0x3e9)/0x2,decimalPartOff=offsetTimeCodeframeNumber%0x1,partoff=0x1,decimalPartOff==0.5&&(offsetTimeCodeframeNumber=Math[_0x5ad5a5(0x22a)](offsetTimeCodeframeNumber),partoff=0x2),_0x53003d=[offsetTimeCode['getUTCHours'](),offsetTimeCode[_0x5ad5a5(0x32b)](),offsetTimeCode[_0x5ad5a5(0x23f)](),parseInt(offsetTimeCodeframeNumber),partoff==0x1?0x0:0x1]);}}function _0x1f6afc(_0x2a21c5){const _0x283ec9=_0xbc03c9;if(typeof globalConfig!==_0x283ec9(0x35c)){if(typeof globalConfig[_0x283ec9(0x2d2)]!==_0x283ec9(0x35c)){if(globalConfig[_0x283ec9(0x2d2)]=='no')return;}}let _0x2070a5={'frame':0x0,'playerTime':0x0};_0x2070a5['frame']=BB['Utils']['TimeCodesFramesTranslator']['Timecode2Frames'](_0x53003d,0xea60/0x3e9,!![]),_0x2070a5[_0x283ec9(0x2de)]=BB[_0x283ec9(0x3d7)][_0x283ec9(0x3f8)][_0x283ec9(0x2a8)](_0x53003d,!![],!![]),console['log'](_0x283ec9(0x224)+_0x2a21c5[_0x283ec9(0x359)]+'):\x20'+_0x2070a5['stringTime']+'\x20('+_0x2070a5[_0x283ec9(0x2c4)]+')'+_0x283ec9(0x2ed)+_0x2a21c5[_0x283ec9(0x244)]),_0x2070a5['playerTime']=_0x2a21c5[_0x283ec9(0x244)],_0x540eae[_0x283ec9(0x276)]=_0x2070a5,_0x2a21c5['mimeType'][_0x283ec9(0x2df)](_0x283ec9(0x31f))&&console[_0x283ec9(0x1f7)](_0x283ec9(0x368)+_0x2a21c5[_0x283ec9(0x359)]);}function _0x1a9c04(_0x5c1d3c){const _0x3a500f=_0xbc03c9;switch(_0x5c1d3c[_0x3a500f(0x2e7)]){case wmcEvents[_0x3a500f(0x2f1)]:let _0x2d1454={'frame':0x0,'playerTime':0x0};console[_0x3a500f(0x1f7)](_0x3a500f(0x224)+_0x5c1d3c['url']+_0x3a500f(0x2a2)+BB[_0x3a500f(0x3d7)][_0x3a500f(0x3f8)][_0x3a500f(0x1eb)](_0x5c1d3c[_0x3a500f(0x2b8)],0xea60/0x3e9)+_0x3a500f(0x2ed)+_0x5c1d3c[_0x3a500f(0x244)]),_0x2d1454[_0x3a500f(0x2c4)]=BB[_0x3a500f(0x3d7)][_0x3a500f(0x3f8)][_0x3a500f(0x32f)](BB['Utils'][_0x3a500f(0x3f8)][_0x3a500f(0x278)](_0x5c1d3c[_0x3a500f(0x2b8)]),fps,!![]),_0x2d1454[_0x3a500f(0x2de)]=BB[_0x3a500f(0x3d7)]['TimeCodesFramesTranslator'][_0x3a500f(0x1eb)](_0x5c1d3c['dateTime'],0xea60/0x3e9),_0x2d1454['playerTime']=_0x5c1d3c[_0x3a500f(0x244)],_0x540eae['syncPoint']=_0x2d1454;break;default:}}let _0x2e6489=BB[_0xbc03c9(0x3d7)]['TimeCodesFramesTranslator'];refreshRate=_0x540eae['refreshRate'];let _0x5d0b9f=null,_0x482e92=null,_0x4c1242=null;if(_0x540eae['renderingMode']==BB['RenderingMode'][_0xbc03c9(0x350)])BB['RENDER_IN_WORKER']&&(this['canvas']=document[_0xbc03c9(0x380)](_0xbc03c9(0x254)));else{let _0x27a4fc=document[_0xbc03c9(0x380)]('canvas');_0x27a4fc['width']=0x1f4,_0x27a4fc['height']=0x1f4,document[_0xbc03c9(0x31e)][_0xbc03c9(0x281)](_0x27a4fc),_0x4c1242=_0x27a4fc[_0xbc03c9(0x3e2)](_0xbc03c9(0x3be));}let _0x9fcf35=BB[_0xbc03c9(0x3d7)][_0xbc03c9(0x38d)],_0x8981a2=-0x1,_0xd51fc6=![],_0x30b1ea=0xea60/0x3e9;const _0x414fd5=(_0x3f3de5,_0x309460)=>{const _0x1a60a6=_0xbc03c9;let _0xcd29f5=![];if(_0x540eae[_0x1a60a6(0x37c)]){var _0x269bbc=document[_0x1a60a6(0x2f8)](_0x1a60a6(0x299));_0xcd29f5=_0x269bbc[_0x1a60a6(0x1d8)];}if(_0xcd29f5)return 0x0;const _0x4f8e1a=performance[_0x1a60a6(0x292)]();if(_0x8981a2==_0x3f3de5&&_0x309460==_0xd51fc6){if(_0x540eae['debug'])console[_0x1a60a6(0x3d4)]('render():\x20lastVideoFrameRenderedInGL==currentFrame:\x20'+_0x3f3de5);return 0x0;}if(!_0x540eae[_0x1a60a6(0x2b0)]||_0x540eae[_0x1a60a6(0x237)])return _0x482e92[_0x1a60a6(0x27a)](),0x0;if(_0x540eae['stopAugmentFor']>0x0)return _0x482e92[_0x1a60a6(0x27a)](),_0x540eae[_0x1a60a6(0x31c)]-=0x1/_0x540eae[_0x1a60a6(0x2f5)],0x0;if(_0x540eae[_0x1a60a6(0x2fc)]==BB[_0x1a60a6(0x1d7)][_0x1a60a6(0x291)])renderDigit(_0x4c1242,_0x3f3de5);else{if(_0x540eae[_0x1a60a6(0x2fc)]==BB['RenderingMode'][_0x1a60a6(0x284)]){if(_0x30b1ea==0xea60/0x3e9||_0x30b1ea==0x3c)renderTimecode(_0x4c1242,_0x2e6489[_0x1a60a6(0x3f2)](_0x3f3de5,_0x30b1ea,!![]),!![]);else{if(_0x30b1ea==0x7530/0x3e9||_0x30b1ea==0x1e)renderTimecode(_0x4c1242,_0x2e6489[_0x1a60a6(0x3f2)](_0x3f3de5,_0x30b1ea,![]),![]);}}else{if(_0x540eae[_0x1a60a6(0x2fc)]==BB[_0x1a60a6(0x1d7)]['Augment']){if(_0x30b1ea==0xea60/0x3e9||_0x30b1ea==0x3c)_0x482e92[_0x1a60a6(0x342)](_0x2e6489[_0x1a60a6(0x2a8)](_0x2e6489['Frames2Timecode'](_0x3f3de5,_0x30b1ea,!![])));else(_0x30b1ea==0x7530/0x3e9||_0x30b1ea==0x1e)&&(_0x309460?_0x482e92[_0x1a60a6(0x342)](_0x2e6489['printTimecode'](_0x2e6489['Frames2Timecode'](_0x3f3de5*0x2+0x1,_0x30b1ea*0x2,!![]),!![])):_0x482e92['renderAugmentation'](_0x2e6489[_0x1a60a6(0x2a8)](_0x2e6489[_0x1a60a6(0x3f2)](_0x3f3de5,_0x30b1ea,![]),![])));}}}_0x8981a2=_0x3f3de5,_0xd51fc6=_0x309460;const _0x65fe75=performance['now']();return _0x65fe75-_0x4f8e1a;};let _0x49a245=0x0,_0x5d01d0=0x0,_0x4f7e2e='',_0x46e886=0x0,_0x4405c8=0x0,_0x43d0e6,_0xd4268d=0x0,_0x287ed5=[],_0x4d22a9=0x14;function _0x2ba067(_0x4c7117){const _0x3e9208=_0xbc03c9;_0x287ed5[_0x3e9208(0x3c6)](_0x4c7117);_0x287ed5['length']>_0x4d22a9&&_0x287ed5[_0x3e9208(0x21a)]();const _0x88266a=_0x287ed5[_0x3e9208(0x39e)]((_0x1fc0ff,_0x3ade7d)=>_0x1fc0ff+_0x3ade7d,0x0),_0x2a80f0=_0x88266a/_0x287ed5[_0x3e9208(0x209)],_0x1ac302=_0x287ed5['filter'](_0x170f2b=>Math[_0x3e9208(0x29b)](_0x170f2b-_0x2a80f0)<=_0x2a80f0*0.2),_0x17cbe7=_0x1ac302['reduce']((_0x5445b5,_0x129708)=>_0x5445b5+_0x129708,0x0),_0x2a1045=_0x17cbe7/_0x1ac302[_0x3e9208(0x209)];return _0x2a1045;}function _0x2d1dc6(_0x28c85f){const _0x5a3700=_0xbc03c9;_0x287ed5['push'](_0x28c85f);_0x287ed5[_0x5a3700(0x209)]>_0x4d22a9&&_0x287ed5[_0x5a3700(0x21a)]();const _0x131e4a=_0x287ed5['reduce']((_0x5ebdef,_0x19df6f)=>_0x5ebdef+_0x19df6f,0x0),_0x3f638b=_0x131e4a/_0x287ed5[_0x5a3700(0x209)];return _0x3f638b;}let _0x50c879=function(_0x4d352c,_0x331fcc){const _0x38e6b2=_0xbc03c9;_0x4f7e2e=_0x38e6b2(0x31b);if(_0x540eae[_0x38e6b2(0x2f5)]!=0xea60/0x3e9&&_0x540eae[_0x38e6b2(0x2f5)]!=0x7530/0x3e9){console[_0x38e6b2(0x3d4)]('Unsupported\x20FPS:\x20options.hls_fps\x20=\x20'+_0x540eae[_0x38e6b2(0x2f5)]),_0x425b68[_0x38e6b2(0x377)](_0x50c879);return;}var _0x4cc0ad=(_0x331fcc['mediaTime']-_0x540eae[_0x38e6b2(0x276)]['playerTime'])%(0x3c*0x3c*0x18)*(0xea60/0x3e9),_0x115cc0=_0x331fcc['mediaTime']-_0x540eae[_0x38e6b2(0x276)][_0x38e6b2(0x22c)];lastFrameFromVideoCallback=Math[_0x38e6b2(0x22a)](_0x4cc0ad+0.1)+_0x540eae[_0x38e6b2(0x276)][_0x38e6b2(0x2c4)];let _0x5c5107=Date[_0x38e6b2(0x292)]()-_0x5d01d0;var _0x3cbbc4=0x3e8/_0x2ba067(_0x5c5107);if(_0x540eae[_0x38e6b2(0x37c)]){var _0x763b5a=document[_0x38e6b2(0x2f8)](_0x38e6b2(0x367))[_0x38e6b2(0x3ed)],_0x101ac7=parseInt(_0x763b5a);lastFrameFromVideoCallback+=_0x101ac7;}else{if(_0x3cbbc4>0x19&&_0x3cbbc4<0x23)lastFrameFromVideoCallback+=0x2;else lastFrameFromVideoCallback+=0x1;}let _0x5334a7=document[_0x38e6b2(0x2f8)]('debugText2');var _0x3f1277='';_0x3f1277=_0x2e6489[_0x38e6b2(0x2a8)](_0x2e6489[_0x38e6b2(0x3f2)](lastFrameFromVideoCallback,_0x30b1ea,!![]),!![],!![]);var _0xb24668='';_0xb24668=_0x2e6489[_0x38e6b2(0x2a8)](_0x2e6489['Frames2Timecode'](_0x540eae[_0x38e6b2(0x3c7)][_0x38e6b2(0x403)],_0x30b1ea,!![]),!![],!![]);let _0x4d62a0=lastFrameFromVideoCallback-_0x540eae[_0x38e6b2(0x3c7)][_0x38e6b2(0x403)];if(_0x5d0b9f)_0x5d0b9f[_0x38e6b2(0x326)](_0x4d62a0);var _0x1b2102='';_0x1b2102=_0x2e6489['printTimecode'](_0x2e6489[_0x38e6b2(0x3f2)](_0x4d62a0,_0x30b1ea,!![]),!![],!![]);let _0x9819b6=new Date(),_0x14f158=String(_0x9819b6['getHours']())[_0x38e6b2(0x378)](0x2,'0'),_0x581b9e=String(_0x9819b6['getMinutes']())[_0x38e6b2(0x378)](0x2,'0'),_0xa3017a=String(_0x9819b6[_0x38e6b2(0x267)]())['padStart'](0x2,'0'),_0x1429fd=String(_0x9819b6[_0x38e6b2(0x36d)]())[_0x38e6b2(0x378)](0x3,'0'),_0x23e74c=_0x14f158+':'+_0x581b9e+':'+_0xa3017a+'.'+_0x1429fd;if(_0x540eae[_0x38e6b2(0x37c)]){var _0x6e012d=_0x38e6b2(0x28b);if(_0x540eae[_0x38e6b2(0x3c7)]['offset']!=_0x4405c8||_0x43d0e6<0xa*0x3c)var _0x6e012d='red';_0x5334a7[_0x38e6b2(0x331)]=_0x38e6b2(0x343)+_0x49a245+_0x38e6b2(0x230)+_0x540eae[_0x38e6b2(0x2d0)]+_0x38e6b2(0x333)+_0x23e74c+_0x38e6b2(0x302)+_0x331fcc[_0x38e6b2(0x3e4)]['toFixed'](0x4)+_0x38e6b2(0x3cc)+_0x4cc0ad[_0x38e6b2(0x3b9)](0x4)+',\x20Stream\x20Time-Code:\x20'+_0x3f1277+_0x38e6b2(0x3ad)+_0x6e012d+'\x27>'+_0x540eae[_0x38e6b2(0x3c7)][_0x38e6b2(0x403)]+'('+_0xb24668+_0x38e6b2(0x38b)+_0x38e6b2(0x205)+_0x38e6b2(0x205)+_0x38e6b2(0x212)+_0x1b2102+'(\x20\x20'+_0x4d62a0+_0x38e6b2(0x2d4)+_0x38e6b2(0x205)+_0x38e6b2(0x205)+_0x38e6b2(0x3dd)+_0x331fcc['expectedDisplayTime'][_0x38e6b2(0x3b9)](0x4)+_0x38e6b2(0x402)+_0x331fcc[_0x38e6b2(0x311)][_0x38e6b2(0x3b9)](0x4)+_0x38e6b2(0x294)+(_0x331fcc[_0x38e6b2(0x311)]-_0x331fcc[_0x38e6b2(0x330)])[_0x38e6b2(0x3b9)](0x4)+_0x38e6b2(0x216)+(_0x331fcc['expectedDisplayTime']-_0x4d352c)[_0x38e6b2(0x3b9)](0x4)+',\x20TimeFromLastSync:'+_0x115cc0[_0x38e6b2(0x3b9)](0x4)+_0x38e6b2(0x3ec)+_0x540eae[_0x38e6b2(0x276)][_0x38e6b2(0x22c)][_0x38e6b2(0x3b9)](0x4)+_0x38e6b2(0x3fa)+_0x540eae[_0x38e6b2(0x276)][_0x38e6b2(0x2c4)]+',\x20LastSyncPoint:'+_0x540eae['syncPoint'][_0x38e6b2(0x2de)]+_0x38e6b2(0x205),_0x540eae[_0x38e6b2(0x3c7)][_0x38e6b2(0x403)]!=_0x4405c8&&(_0x43d0e6=0x0),_0x4405c8=_0x540eae[_0x38e6b2(0x3c7)][_0x38e6b2(0x403)],_0x43d0e6++;}_0x49a245++,_0x5d01d0=Date[_0x38e6b2(0x292)]();if(_0x3cbbc4>0x32&&_0x3cbbc4<0x46)_0x414fd5(_0x4d62a0,![]);else{if(_0x3cbbc4>0x19&&_0x3cbbc4<0x23){function _0x4352d1(_0x21682e){const _0x451594=_0x38e6b2;let _0xbb1fa0=document[_0x451594(0x2f8)]('debugText');if(_0xbb1fa0!=null)_0xbb1fa0[_0x451594(0x331)]=_0x451594(0x2a9)+_0x21682e;let _0x2776f7=document[_0x451594(0x2f8)](_0x451594(0x23e));if(_0x2776f7!=null)_0x2776f7[_0x451594(0x331)]=_0x451594(0x2a9)+_0x21682e;_0x414fd5(_0x21682e,![]);}setTimeout(_0x4352d1,0x14,_0x4d62a0);}else{if(_0x49a245%0x3c==0x0)console[_0x38e6b2(0x22e)](_0x38e6b2(0x381)+_0x3cbbc4[_0x38e6b2(0x3b9)](0x4)+_0x38e6b2(0x30a));_0x482e92[_0x38e6b2(0x27a)]();}}_0x425b68['requestVideoFrameCallback'](_0x50c879);return;},_0x3cb929=function(_0x4469e8,_0x3f67b2){const _0x4b7eee=_0xbc03c9;if(_0x540eae[_0x4b7eee(0x2f5)]!=0xea60/0x3e9&&_0x540eae[_0x4b7eee(0x2f5)]!=0x7530/0x3e9){_0x540eae[_0x4b7eee(0x31c)]=0x3,console[_0x4b7eee(0x3d4)](_0x4b7eee(0x2b7)+_0x540eae[_0x4b7eee(0x2f5)]),_0x425b68[_0x4b7eee(0x377)](_0x3cb929);return;}let _0x402912=Date[_0x4b7eee(0x292)]()-_0x5d01d0;_0x5d01d0=Date[_0x4b7eee(0x292)]();if(_0x4f7e2e==_0x4b7eee(0x217)&&_0x540eae[_0x4b7eee(0x2f5)]==0xea60/0x3e9){if(_0x540eae[_0x4b7eee(0x37c)])console[_0x4b7eee(0x3d4)](_0x4b7eee(0x256));_0x425b68[_0x4b7eee(0x377)](_0x3cb929);return;}_0x540eae[_0x4b7eee(0x2f5)]==0x7530/0x3e9?_0x4f7e2e==_0x4b7eee(0x3d1)&&_0xd4268d<=0x0?(_0x4f7e2e=_0x4b7eee(0x2e3),_0xd4268d++):(_0x4f7e2e=_0x4b7eee(0x31b),_0xd4268d=0x0):_0x4f7e2e=_0x4b7eee(0x31b);var _0x1d098b=(_0x3f67b2[_0x4b7eee(0x3e4)]-_0x540eae[_0x4b7eee(0x276)]['playerTime'])%(0x3c*0x3c*0x18)*(0xea60/0x3e9),_0x462562=_0x3f67b2[_0x4b7eee(0x3e4)]-_0x540eae['syncPoint'][_0x4b7eee(0x22c)];lastFrameFromVideoCallback=Math[_0x4b7eee(0x22a)](_0x1d098b+0.1)+_0x540eae[_0x4b7eee(0x276)][_0x4b7eee(0x2c4)];if(_0x540eae[_0x4b7eee(0x37c)]){var _0x1f9489=document[_0x4b7eee(0x2f8)]('numberInput')[_0x4b7eee(0x3ed)],_0x453473=parseInt(_0x1f9489);lastFrameFromVideoCallback+=_0x453473;}else lastFrameFromVideoCallback+=0x1;lastMediaTime=_0x3f67b2[_0x4b7eee(0x3e4)];let _0x2e13aa=document[_0x4b7eee(0x2f8)](_0x4b7eee(0x223));var _0x5c25ae='';_0x5c25ae=_0x2e6489[_0x4b7eee(0x2a8)](_0x2e6489[_0x4b7eee(0x3f2)](lastFrameFromVideoCallback,_0x30b1ea,!![]),!![],!![]);var _0x19ad4a='';_0x19ad4a=_0x2e6489[_0x4b7eee(0x2a8)](_0x2e6489[_0x4b7eee(0x3f2)](_0x540eae[_0x4b7eee(0x3c7)][_0x4b7eee(0x403)],_0x30b1ea,!![]),!![],!![]);let _0x125864=lastFrameFromVideoCallback-_0x540eae['augmentation'][_0x4b7eee(0x403)];if(_0x5d0b9f)_0x5d0b9f[_0x4b7eee(0x326)](_0x125864);var _0x1c9ef2='';_0x1c9ef2=_0x2e6489[_0x4b7eee(0x2a8)](_0x2e6489['Frames2Timecode'](_0x125864,_0x30b1ea,!![]),!![],!![]);let _0x186789=new Date(),_0x65d868=String(_0x186789[_0x4b7eee(0x337)]())[_0x4b7eee(0x378)](0x2,'0'),_0x1d2a80=String(_0x186789[_0x4b7eee(0x28a)]())['padStart'](0x2,'0'),_0x51a129=String(_0x186789[_0x4b7eee(0x267)]())[_0x4b7eee(0x378)](0x2,'0'),_0x4e785f=String(_0x186789[_0x4b7eee(0x36d)]())[_0x4b7eee(0x378)](0x3,'0'),_0x126da2=_0x65d868+':'+_0x1d2a80+':'+_0x51a129+'.'+_0x4e785f;if(_0x540eae[_0x4b7eee(0x37c)]){var _0xfe9802='black';if(_0x540eae[_0x4b7eee(0x3c7)][_0x4b7eee(0x403)]!=_0x4405c8||_0x43d0e6<0xa*0x3c)var _0xfe9802=_0x4b7eee(0x322);_0x2e13aa[_0x4b7eee(0x331)]=_0x4b7eee(0x343)+_0x49a245+_0x4b7eee(0x230)+_0x540eae[_0x4b7eee(0x2d0)]+_0x4b7eee(0x333)+_0x126da2+_0x4b7eee(0x302)+_0x3f67b2[_0x4b7eee(0x3e4)][_0x4b7eee(0x3b9)](0x4)+',\x20dblFrame:\x20'+_0x1d098b['toFixed'](0x4)+_0x4b7eee(0x2a6)+_0x5c25ae+',\x20offset:\x20<span\x20style=\x27color:'+_0xfe9802+'\x27>'+_0x540eae[_0x4b7eee(0x3c7)]['offset']+'('+_0x19ad4a+_0x4b7eee(0x38b)+_0x4b7eee(0x205)+'\x20</br>'+'<span\x20style=\x27font-size:\x2030px;\x27>,\x20Brain\x20Time-Code:\x20'+_0x1c9ef2+_0x4b7eee(0x2b9)+_0x125864+_0x4b7eee(0x2d4)+_0x4b7eee(0x205)+_0x4b7eee(0x205)+',\x20expectedDisplayTime:\x20'+_0x3f67b2['expectedDisplayTime'][_0x4b7eee(0x3b9)](0x4)+_0x4b7eee(0x402)+_0x3f67b2['presentationTime'][_0x4b7eee(0x3b9)](0x4)+_0x4b7eee(0x294)+(_0x3f67b2['presentationTime']-_0x3f67b2[_0x4b7eee(0x330)])[_0x4b7eee(0x3b9)](0x4)+',\x20expectedDisplayTime-now:\x20'+(_0x3f67b2[_0x4b7eee(0x330)]-_0x4469e8)[_0x4b7eee(0x3b9)](0x4)+_0x4b7eee(0x30f)+_0x462562[_0x4b7eee(0x3b9)](0x4)+_0x4b7eee(0x3ec)+_0x540eae[_0x4b7eee(0x276)][_0x4b7eee(0x22c)][_0x4b7eee(0x3b9)](0x4)+_0x4b7eee(0x3fa)+_0x540eae['syncPoint'][_0x4b7eee(0x2c4)]+',\x20LastSyncPoint:'+_0x540eae['syncPoint'][_0x4b7eee(0x2de)]+'\x20</br>',_0x540eae['augmentation']['offset']!=_0x4405c8&&(_0x43d0e6=0x0),_0x4405c8=_0x540eae[_0x4b7eee(0x3c7)][_0x4b7eee(0x403)],_0x43d0e6++;}_0x49a245++;let _0x50a3c2=![];if(_0x540eae[_0x4b7eee(0x37c)]){var _0xd495e4=document[_0x4b7eee(0x2f8)](_0x4b7eee(0x3c8));_0x50a3c2=_0xd495e4['checked'];}_0x540eae[_0x4b7eee(0x2f5)]==0x7530/0x3e9?_0x4d3dff=_0x125864:renderingDuration=_0x414fd5(_0x125864,![]);_0x425b68[_0x4b7eee(0x377)](_0x3cb929);return;},_0x3544f8=0x0,_0x3d7676=[],_0x1d0535=0x3c,_0x75f336=0x0;function _0xcf172e(_0x5e51b5){const _0x3b0009=_0xbc03c9;_0x3d7676[_0x3b0009(0x3c6)](_0x5e51b5);_0x3d7676[_0x3b0009(0x209)]>_0x1d0535&&_0x3d7676['shift']();const _0x1ca486=_0x3d7676['reduce']((_0x4604d7,_0x5c5751)=>_0x4604d7+_0x5c5751,0x0),_0x16a7d4=_0x1ca486/_0x3d7676[_0x3b0009(0x209)],_0x40e5d8=_0x3d7676[_0x3b0009(0x3ff)](_0x3478ab=>Math[_0x3b0009(0x29b)](_0x3478ab-_0x16a7d4)<=_0x16a7d4*0.2);if(_0x40e5d8[_0x3b0009(0x209)]<_0x1d0535*0x55/0x64)return-0x1;const _0x4c4380=_0x40e5d8['reduce']((_0x6b7681,_0x1ae409)=>_0x6b7681+_0x1ae409,0x0),_0x19d9be=_0x4c4380/_0x40e5d8[_0x3b0009(0x209)];return _0x19d9be;}const _0x33e430=_0x497b65=>{const _0x1ca404=_0xbc03c9;_0x3544f8++;let _0x234000=performance[_0x1ca404(0x292)]();var _0x8ec898=_0x234000-_0x75f336;_0x75f336=_0x234000;var _0x1b7b54=0x3e8/_0xcf172e(_0x8ec898);if(_0x1b7b54==-0x3e8)_0x540eae[_0x1ca404(0x31c)]=0x3,console[_0x1ca404(0x22e)](_0x1ca404(0x3a6)),console[_0x1ca404(0x1f7)](_0x3d7676);else Math['abs'](_0x1b7b54-0x3c)>0x5&&(_0x540eae[_0x1ca404(0x31c)]=0x3,console[_0x1ca404(0x22e)](_0x1ca404(0x347)+_0x1b7b54));if(!_0x540eae[_0x1ca404(0x37c)]){let _0x1886f3=document[_0x1ca404(0x2f8)](_0x1ca404(0x356));if(_0x1886f3!=null)_0x1886f3['innerHTML']=_0x3544f8;window[_0x1ca404(0x298)](_0x33e430);return;}let _0x10a6ac=String(_0x234000[_0x1ca404(0x337)]())['padStart'](0x2,'0'),_0x3dae23=String(_0x234000[_0x1ca404(0x28a)]())['padStart'](0x2,'0'),_0x4b1176=String(_0x234000[_0x1ca404(0x267)]())[_0x1ca404(0x378)](0x2,'0'),_0x4a695e=String(_0x234000[_0x1ca404(0x36d)]())[_0x1ca404(0x378)](0x3,'0'),_0x5aa475=_0x10a6ac+':'+_0x3dae23+':'+_0x4b1176+'.'+_0x4a695e;if(_0x425b68['paused']){window[_0x1ca404(0x298)](_0x33e430);return;}let _0x3b56a9=document[_0x1ca404(0x2f8)](_0x1ca404(0x3c9));if(_0x540eae[_0x1ca404(0x37c)])_0x3b56a9[_0x1ca404(0x331)]=_0x1ca404(0x312)+_0x3544f8+_0x1ca404(0x376)+_0x5aa475;if(_0x540eae['hls_fps']==0x7530/0x3e9){_0x3b56a9[_0x1ca404(0x331)]+=_0x1ca404(0x365)+_0x425b68['currentTime'][_0x1ca404(0x3b9)](0x4);if(_0x4f7e2e==_0x1ca404(0x31b))_0x3b56a9[_0x1ca404(0x331)]+=_0x1ca404(0x314),_0x414fd5(_0x4d3dff,![]),_0x4f7e2e=_0x1ca404(0x2e3);else{if(_0x4f7e2e==_0x1ca404(0x2e3))_0x4f7e2e='ANI2';else _0x4f7e2e=='ANI2'&&(_0x3b56a9[_0x1ca404(0x331)]+=_0x1ca404(0x273),_0x414fd5(_0x4d3dff+0x2,![]),_0x4f7e2e=_0x1ca404(0x3d1));}_0x3b56a9[_0x1ca404(0x331)]+=_0x1ca404(0x38c)+_0x4f7e2e,window[_0x1ca404(0x298)](_0x33e430);return;}else{if(_0x540eae[_0x1ca404(0x2f5)]==0xea60/0x3e9){if(_0x4f7e2e==_0x1ca404(0x2e3)||_0x4f7e2e==_0x1ca404(0x217)){var _0x53efd7='';_0x53efd7=_0x2e6489[_0x1ca404(0x2a8)](_0x2e6489[_0x1ca404(0x3f2)](_0x8981a2+0x1,_0x30b1ea,!![]),!![],!![]);var _0x52e06c='';_0x52e06c=_0x2e6489['printTimecode'](_0x2e6489[_0x1ca404(0x3f2)](_0x540eae[_0x1ca404(0x3c7)][_0x1ca404(0x403)],_0x30b1ea,!![]),!![],!![]);let _0x2ae674=_0x8981a2-_0x540eae[_0x1ca404(0x3c7)][_0x1ca404(0x403)];var _0x1345d4='';_0x1345d4=_0x2e6489[_0x1ca404(0x2a8)](_0x2e6489['Frames2Timecode'](_0x2ae674,_0x30b1ea,!![]),!![],!![]);_0x540eae[_0x1ca404(0x37c)]&&(console[_0x1ca404(0x3d4)](_0x1ca404(0x2b6)+_0x53efd7+')'+_0x1ca404(0x1dd)+_0x4f7e2e),_0x3b56a9[_0x1ca404(0x331)]+='\x20\x20correction');let _0x5bbcf7=_0x414fd5(_0x8981a2+0x1,![]);if(_0x4f7e2e=='ANI')_0x4f7e2e=_0x1ca404(0x217);else{if(_0x4f7e2e=='ANI2')_0x4f7e2e='ANI';}}else _0x4f7e2e=_0x1ca404(0x2e3);}else console[_0x1ca404(0x3d4)](_0x1ca404(0x2b7)+_0x540eae['hls_fps']);}window[_0x1ca404(0x298)](_0x33e430);},_0x512e88=_0x4cc1ca=>{const _0x32fc07=_0xbc03c9;_0x3ba1d9++;let _0x618c12;var _0x48abef='';_0x48abef=_0x2e6489[_0x32fc07(0x2a8)](_0x2e6489[_0x32fc07(0x3f2)](_0x46e886,_0x30b1ea,!![]),!![],!![]);_0x540eae[_0x32fc07(0x37c)]&&(_0x618c12=document[_0x32fc07(0x2f8)](_0x32fc07(0x3c9)));window[_0x32fc07(0x298)](_0x512e88);return;if(_0x4f7e2e==_0x32fc07(0x31b))_0x4f7e2e='ANI',_0x618c12[_0x32fc07(0x331)]=_0x32fc07(0x38a)+_0x3ba1d9+_0x32fc07(0x287)+_0x4f7e2e+_0x32fc07(0x215)+_0x48abef+_0x32fc07(0x20d),_0x414fd5(_0x46e886,!![]);else{if(_0x4f7e2e==_0x32fc07(0x2e3))_0x4f7e2e=_0x32fc07(0x217),_0x618c12[_0x32fc07(0x331)]=_0x32fc07(0x38a)+_0x3ba1d9+_0x32fc07(0x287)+_0x4f7e2e+_0x32fc07(0x31a)+_0x48abef;else{if(_0x4f7e2e==_0x32fc07(0x217))_0x4f7e2e=_0x32fc07(0x3d1),_0x618c12[_0x32fc07(0x331)]='ANI:\x20'+_0x3ba1d9+_0x32fc07(0x287)+_0x4f7e2e+_0x32fc07(0x31a)+_0x48abef+_0x32fc07(0x29e);else{}}}window[_0x32fc07(0x298)](_0x512e88);};let _0x48a8ee=0x0,_0x2b222d=![],_0x1e3c64=0.99,_0x1f74b0=0x0,_0x8e511e=0x0,_0x7f52e5=0x0;const _0x5041f8=_0x1bf672=>{const _0x4658f5=_0xbc03c9;_0x3544f8++;let _0x1a9608=new Date();var _0x5c194a=performance[_0x4658f5(0x292)](),_0x1dfd69=_0x5c194a-_0x7f52e5;_0x7f52e5=_0x5c194a;var _0x2b9456=0x3e8/_0xcf172e(_0x1dfd69);if(_0x2b9456==-0x3e8)_0x540eae[_0x4658f5(0x31c)]=0x3,_0x3544f8%0x3c==0x0&&(console[_0x4658f5(0x22e)]('Experience\x20difficulties\x20with\x20overloading:\x20(not\x20consistant\x20Calls\x20of\x20requestAnimatedFrame).\x20Stopping\x20augmentation.'),console[_0x4658f5(0x1f7)](_0x3d7676));else Math[_0x4658f5(0x29b)](_0x2b9456-0x3c)>0x5&&(_0x540eae[_0x4658f5(0x31c)]=0x3,console[_0x4658f5(0x22e)](_0x4658f5(0x1fd)+_0x2b9456));let _0x1950c7=String(_0x1a9608[_0x4658f5(0x337)]())[_0x4658f5(0x378)](0x2,'0'),_0x392761=String(_0x1a9608[_0x4658f5(0x28a)]())[_0x4658f5(0x378)](0x2,'0'),_0x340c36=String(_0x1a9608[_0x4658f5(0x267)]())[_0x4658f5(0x378)](0x2,'0'),_0x33633f=String(_0x1a9608[_0x4658f5(0x36d)]())[_0x4658f5(0x378)](0x3,'0'),_0x243d8f=_0x1950c7+':'+_0x392761+':'+_0x340c36+'.'+_0x33633f;var _0x5bc8aa=0x2;let _0x5ad0b1;if(_0x540eae[_0x4658f5(0x37c)]){_0x5ad0b1=document['getElementById'](_0x4658f5(0x3c9));var _0x4e500b=document[_0x4658f5(0x2f8)]('numberInput')[_0x4658f5(0x3ed)];_0x5bc8aa=parseInt(_0x4e500b);}var _0x4e5f73=0x0,_0x3d4033=(_0x425b68[_0x4658f5(0x1fe)]-_0x540eae[_0x4658f5(0x276)][_0x4658f5(0x22c)])%(0x3c*0x3c*0x18)*0xea60/0x3e9;_0x4e5f73=Math[_0x4658f5(0x22a)](_0x3d4033)+_0x540eae[_0x4658f5(0x276)][_0x4658f5(0x2c4)];var _0x18c8b9=![];_0x4e5f73-_0x8e511e==0x2&&_0x3d4033-_0x1f74b0<1.5&&(_0x8e511e=_0x4e5f73,_0x4e5f73--,_0x18c8b9=!![]);_0x18c8b9?_0x8e511e=_0x4e5f73+0x1:_0x8e511e=_0x4e5f73;_0x1f74b0=_0x3d4033,_0x4e5f73+=_0x5bc8aa;var _0x7b9d08=_0x3d4033-Math[_0x4658f5(0x22a)](_0x3d4033);if(_0x2b222d||_0x7b9d08<0.226&&_0x1e3c64<0.226)_0x2b222d=!![];if(_0x7b9d08>0.8)_0x2b222d=![];_0x1e3c64=_0x7b9d08;if(_0x2b222d)_0x4e5f73--;var _0x39f2a9='';_0x39f2a9=_0x2e6489[_0x4658f5(0x2a8)](_0x2e6489[_0x4658f5(0x3f2)](_0x4e5f73,_0x30b1ea,!![]),!![],!![]);var _0xeb5d91='';_0xeb5d91=_0x2e6489[_0x4658f5(0x2a8)](_0x2e6489[_0x4658f5(0x3f2)](_0x540eae[_0x4658f5(0x3c7)][_0x4658f5(0x403)],_0x30b1ea,!![]),!![],!![]);let _0x15d179=_0x4e5f73-_0x540eae[_0x4658f5(0x3c7)][_0x4658f5(0x403)];var _0x5d2c25='';_0x5d2c25=_0x2e6489[_0x4658f5(0x2a8)](_0x2e6489['Frames2Timecode'](_0x15d179,_0x30b1ea,!![]),!![],!![]);if(_0x540eae[_0x4658f5(0x37c)]){var _0x3ddd71=_0x4658f5(0x28b);if(_0x540eae[_0x4658f5(0x3c7)][_0x4658f5(0x403)]!=_0x4405c8||_0x43d0e6<0xa*0x3c)var _0x3ddd71=_0x4658f5(0x322);_0x5ad0b1[_0x4658f5(0x331)]=_0x4658f5(0x21c)+_0x3ba1d9+_0x4658f5(0x333)+_0x243d8f+',\x20delta:\x20'+_0x1dfd69[_0x4658f5(0x3b9)](0x0)+_0x4658f5(0x310)+_0x2b9456['toFixed'](0x4)+_0x4658f5(0x3cc)+_0x3d4033['toFixed'](0x4)+_0x4658f5(0x282)+(_0x1a9608-_0x48a8ee)+_0x4658f5(0x389)+_0x540eae[_0x4658f5(0x2d0)]+_0x4658f5(0x2dc)+_0x39f2a9+'(\x20\x20'+_0x4e5f73+_0x4658f5(0x3d3)+_0x4658f5(0x3ad)+_0x3ddd71+'\x27>'+_0x540eae[_0x4658f5(0x3c7)][_0x4658f5(0x403)]+'('+_0xeb5d91+_0x4658f5(0x38b)+_0x4658f5(0x205)+_0x4658f5(0x205)+_0x4658f5(0x2ba)+_0x5d2c25+'('+_0x15d179+_0x4658f5(0x38b)+_0x4658f5(0x205)+_0x4658f5(0x205)+',\x20LastSyncPointTime:'+_0x540eae[_0x4658f5(0x276)][_0x4658f5(0x22c)][_0x4658f5(0x3b9)](0x4)+_0x4658f5(0x3fa)+_0x540eae[_0x4658f5(0x276)][_0x4658f5(0x2c4)]+_0x4658f5(0x236)+_0x540eae[_0x4658f5(0x276)][_0x4658f5(0x2de)]+_0x4658f5(0x321)+_0x2b222d+_0x4658f5(0x349)+_0x18c8b9;}if(_0x5d0b9f)_0x5d0b9f[_0x4658f5(0x326)](_0x15d179);_0x414fd5(_0x15d179),_0x3ba1d9++,window[_0x4658f5(0x298)](_0x5041f8);return;};let _0x4d3dff=-0x1,_0x3ba1d9=0x0;function _0x503640(_0x4e85a7){const _0xfb3213=_0xbc03c9;var _0xb5b4=parseInt(window[_0xfb3213(0x328)](_0x4e85a7)[_0xfb3213(0x301)](_0xfb3213(0x211)),0xa),_0x6f3661=parseInt(window[_0xfb3213(0x328)](_0x4e85a7)[_0xfb3213(0x301)](_0xfb3213(0x28d)),0xa),_0x27f7e4=_0x4e85a7[_0xfb3213(0x1fb)],_0x1b0e7a=_0x4e85a7['videoHeight'],_0x6bb43b=_0xb5b4/_0x6f3661,_0x4e740f=_0x27f7e4/_0x1b0e7a,_0x4ca998={'top':0x0,'bottom':0x0,'left':0x0,'right':0x0};if(_0x6bb43b>_0x4e740f){var _0x5dfe83=_0x6f3661*_0x4e740f;_0x4ca998[_0xfb3213(0x1ee)]=(_0xb5b4-_0x5dfe83)/0x2,_0x4ca998[_0xfb3213(0x2a4)]=_0x4ca998[_0xfb3213(0x1ee)];}else{if(_0x6bb43b<_0x4e740f){var _0x4f3fed=_0xb5b4/_0x4e740f;_0x4ca998[_0xfb3213(0x1ed)]=(_0x6f3661-_0x4f3fed)/0x2,_0x4ca998['bottom']=_0x4ca998[_0xfb3213(0x1ed)];}}return _0x4ca998;}function _0x4555bd(_0x4d0c38){const _0x385a7f=_0xbc03c9;console['BBlog'](_0x385a7f(0x366));var _0x134b18=_0x503640(_0x4d0c38);return _0x482e92[_0x385a7f(0x2e1)]()[_0x385a7f(0x1d2)][_0x385a7f(0x1ed)]=Math[_0x385a7f(0x3b5)](_0x134b18[_0x385a7f(0x1ed)])+'px',_0x482e92[_0x385a7f(0x2e1)]()[_0x385a7f(0x1d2)][_0x385a7f(0x1ee)]=Math[_0x385a7f(0x3b5)](_0x134b18[_0x385a7f(0x1ee)])+'px',_0x134b18;}console[_0xbc03c9(0x3d4)](_0xbc03c9(0x388)),console[_0xbc03c9(0x3d4)](_0xbc03c9(0x274));typeof window!==_0xbc03c9(0x35c)?console[_0xbc03c9(0x3d4)]('The\x20window\x20object\x20is\x20defined.\x20This\x20script\x20is\x20running\x20in\x20a\x20browser\x20environment.'):console['BBlog']('The\x20window\x20object\x20is\x20not\x20defined.\x20This\x20script\x20might\x20not\x20be\x20running\x20in\x20a\x20browser\x20environment.');_0xbc03c9(0x298)in window?console[_0xbc03c9(0x3d4)](_0xbc03c9(0x3a4)):console[_0xbc03c9(0x3d4)](_0xbc03c9(0x3d2));typeof _0x425b68!==_0xbc03c9(0x35c)?console[_0xbc03c9(0x3d4)](_0xbc03c9(0x260)):console['BBlog'](_0xbc03c9(0x384));_0xbc03c9(0x377)in _0x425b68?console['BBlog'](_0xbc03c9(0x398)):console['BBlog']('requestVideoFrameCallback\x20is\x20not\x20supported');window[_0xbc03c9(0x2f3)](_0xbc03c9(0x382),function(){_0x4555bd(_0x425b68);});if(_0x9fcf35['isSafariMac']())BB[_0xbc03c9(0x2c2)]=![],window[_0xbc03c9(0x298)](_0x5041f8);else{if(_0x9fcf35[_0xbc03c9(0x2a1)]())BB[_0xbc03c9(0x2c2)]=!![],window[_0xbc03c9(0x298)](_0x512e88),_0x425b68[_0xbc03c9(0x1f1)]>=0x1?(console[_0xbc03c9(0x3d4)](_0xbc03c9(0x3db)),_0x425b68[_0xbc03c9(0x377)](_0x50c879)):(console['BBlog'](_0xbc03c9(0x1fa)+_0x425b68[_0xbc03c9(0x1f1)]),_0x425b68['addEventListener']('loadedmetadata',()=>{const _0x2a76e2=_0xbc03c9;console[_0x2a76e2(0x3d4)](_0x2a76e2(0x2d1)),_0x425b68[_0x2a76e2(0x377)](_0x50c879);}));else _0x9fcf35[_0xbc03c9(0x26e)]()&&![]?(BB[_0xbc03c9(0x2c2)]=!![],window[_0xbc03c9(0x298)](_0x33e430),_0x425b68[_0xbc03c9(0x1f1)]>=0x1?(console[_0xbc03c9(0x3d4)](_0xbc03c9(0x3db)),_0x425b68[_0xbc03c9(0x377)](_0x3cb929)):(console['BBlog'](_0xbc03c9(0x1fa)+_0x425b68[_0xbc03c9(0x1f1)]),_0x425b68[_0xbc03c9(0x2f3)]('loadedmetadata',()=>{const _0x1dbf7c=_0xbc03c9;console[_0x1dbf7c(0x3d4)](_0x1dbf7c(0x2d1)),_0x425b68[_0x1dbf7c(0x377)](_0x3cb929);}))):console[_0xbc03c9(0x22e)](_0xbc03c9(0x2c3));}console['BBlog'](_0xbc03c9(0x21f));const _0x4573e6=()=>{const _0x16aec6=_0xbc03c9;BB[_0x16aec6(0x2c2)]?_0x48c94a():_0x2f9008();},_0x2f9008=()=>{const _0x3e768c=_0xbc03c9;let _0x5521ef=_0x425b68[_0x3e768c(0x231)];_0x482e92=new BB['Composer3d'](_0x5521ef,_0x425b68,_0x540eae),ads=BB[_0x3e768c(0x3f5)](_0x482e92,_0x540eae),_0x5d0b9f=BB[_0x3e768c(0x251)](_0x540eae,_0x482e92);},_0x48c94a=()=>{const _0x2c362c=_0xbc03c9;let _0x31b9fd=_0x425b68[_0x2c362c(0x231)],_0x24964e=_0x31b9fd['offsetTop'],_0x387762=_0x31b9fd['offsetLeft'];this['canvas'][_0x2c362c(0x1d2)][_0x2c362c(0x1ed)]=0x0,this[_0x2c362c(0x254)][_0x2c362c(0x1d2)][_0x2c362c(0x1ee)]=0x0;var _0x947a9c=_0x503640(_0x425b68);if(_0x425b68['readyState']>=0x1){var _0x947a9c=_0x503640(_0x425b68);this['canvas'][_0x2c362c(0x1d2)]['top']=Math[_0x2c362c(0x3b5)](_0x947a9c[_0x2c362c(0x1ed)])+'px',this[_0x2c362c(0x254)][_0x2c362c(0x1d2)][_0x2c362c(0x1ee)]=Math['round'](_0x947a9c[_0x2c362c(0x1ee)])+'px';}else console[_0x2c362c(0x3d4)](_0x2c362c(0x1fa)+_0x425b68[_0x2c362c(0x1f1)]),_0x425b68[_0x2c362c(0x2f3)](_0x2c362c(0x3a0),()=>{const _0x1a30d4=_0x2c362c;var _0x4f37f3=_0x503640(_0x425b68);this['canvas'][_0x1a30d4(0x1d2)][_0x1a30d4(0x1ed)]=Math[_0x1a30d4(0x3b5)](_0x4f37f3[_0x1a30d4(0x1ed)])+'px',this[_0x1a30d4(0x254)]['style'][_0x1a30d4(0x1ee)]=Math[_0x1a30d4(0x3b5)](_0x4f37f3[_0x1a30d4(0x1ee)])+'px';});this[_0x2c362c(0x254)]['style'][_0x2c362c(0x211)]=_0x2c362c(0x374),this[_0x2c362c(0x254)]['style'][_0x2c362c(0x1e9)]=0x186a0,this[_0x2c362c(0x254)][_0x2c362c(0x211)]=_0x31b9fd[_0x2c362c(0x272)],this[_0x2c362c(0x254)]['height']=_0x31b9fd[_0x2c362c(0x35b)],this[_0x2c362c(0x254)]['style'][_0x2c362c(0x34d)]=_0x2c362c(0x25e);let _0xdc8cde=_0x31b9fd[_0x2c362c(0x3df)]('video')[0x0],_0x4b1411=_0xdc8cde[_0x2c362c(0x1d4)];if(_0x4b1411)_0x31b9fd[_0x2c362c(0x3bc)](this[_0x2c362c(0x254)],_0x4b1411);else _0x31b9fd['appendChild'](this['canvas']);this['canvas'][_0x2c362c(0x1d2)][_0x2c362c(0x279)]=_0x2c362c(0x1de);let _0x4e68ee={};if(!![])for(let _0x38ebc4=0x0;_0x38ebc4<0xa;++_0x38ebc4){let _0x4c734a=_0x38ebc4+'.1',_0xdfa21f=_0x38ebc4+'.2';_0x4e68ee[_0x4c734a]=this[_0x2c362c(0x246)](_0x4c734a),_0x4e68ee[_0xdfa21f]=this[_0x2c362c(0x246)](_0xdfa21f);}_0x482e92=new BB[(_0x2c362c(0x1e5))](this['canvas'],_0x540eae,_0x4e68ee),canvas=this[_0x2c362c(0x254)],_0xdc8cde[_0x2c362c(0x2f3)](_0x2c362c(0x27c),_0x4e78c6=>{const _0x2691db=_0x2c362c;var _0x3970c9=canvas[_0x2691db(0x329)]();_0x482e92['OnUserClickOnCanvas'](_0x4e78c6['clientX'],_0x4e78c6[_0x2691db(0x35e)],_0x3970c9);}),ads=BB[_0x2c362c(0x3f5)](_0x482e92,_0x540eae),_0x5d0b9f=BB[_0x2c362c(0x251)](_0x540eae,_0x482e92);},_0x4461e2=()=>{const _0x39196d=_0xbc03c9;return _0x482e92[_0x39196d(0x2e1)]();},_0x4d0eee=_0x236f38=>{_0x1f6afc(_0x236f38);},_0x721b1f=_0x220711=>{_0x2b29d2(_0x220711);};return{'getCanvas':_0x4461e2,'onNewSegmentInterface':_0x4d0eee,'onNewMetadataInterface':_0x721b1f,'initializeComponents':_0x4573e6};},BB[_0x2146ea(0x383)]=class{constructor(_0xe7490a,_0x5836ba,_0x2aafff){const _0xd44a2c=_0x2146ea;if(_0x2aafff['augmentation'][_0xd44a2c(0x2a3)]){this[_0xd44a2c(0x33e)]={};for(let _0x57f6ba=0x0;_0x57f6ba<0xa;++_0x57f6ba){let _0x58cad7=_0x57f6ba+'.1',_0x429bbb=_0x57f6ba+'.2';this[_0xd44a2c(0x33e)][_0x58cad7]=this[_0xd44a2c(0x246)](_0x58cad7),this[_0xd44a2c(0x33e)][_0x429bbb]=this[_0xd44a2c(0x246)](_0x429bbb);}}this[_0xd44a2c(0x269)]=Object['assign']({'adLoopTime':0x1388,'isAdLoop':![]},_0x2aafff||{}),this[_0xd44a2c(0x325)]=0xea60/0x3e9,this[_0xd44a2c(0x201)]=[],this[_0xd44a2c(0x392)]={},this[_0xd44a2c(0x3cb)]=![],this[_0xd44a2c(0x2fa)]={},this[_0xd44a2c(0x2b2)]={},this[_0xd44a2c(0x2ff)]=null,this[_0xd44a2c(0x254)]=document[_0xd44a2c(0x380)](_0xd44a2c(0x254)),this['ctx']=this[_0xd44a2c(0x254)][_0xd44a2c(0x3e2)](_0xd44a2c(0x3be),{'premultipliedAlpha':![]}),this[_0xd44a2c(0x39f)]=0x1,console[_0xd44a2c(0x1f7)](_0xd44a2c(0x3ea)+this[_0xd44a2c(0x2ef)]+_0xd44a2c(0x221)+this[_0xd44a2c(0x39f)]);let _0x53cea1=_0xe7490a['offsetTop'],_0x5e004a=_0xe7490a[_0xd44a2c(0x318)],_0x42f7ef=_0xe7490a['getElementsByTagName'](_0xd44a2c(0x31f))[0x0];this[_0xd44a2c(0x254)][_0xd44a2c(0x1d2)][_0xd44a2c(0x1ed)]=0x0,this[_0xd44a2c(0x254)][_0xd44a2c(0x1d2)][_0xd44a2c(0x1ee)]=0x0,this[_0xd44a2c(0x254)][_0xd44a2c(0x1d2)][_0xd44a2c(0x211)]=_0xd44a2c(0x374),this[_0xd44a2c(0x254)][_0xd44a2c(0x1d2)]['zIndex']=0x186a0,this['canvas']['width']=_0xe7490a[_0xd44a2c(0x272)],this[_0xd44a2c(0x254)][_0xd44a2c(0x28d)]=_0xe7490a[_0xd44a2c(0x35b)],this[_0xd44a2c(0x254)][_0xd44a2c(0x1d2)][_0xd44a2c(0x34d)]=_0xd44a2c(0x25e);let _0x32b375=_0x42f7ef[_0xd44a2c(0x1d4)];if(_0x32b375)_0xe7490a[_0xd44a2c(0x3bc)](this['canvas'],_0x32b375);else _0xe7490a[_0xd44a2c(0x281)](this[_0xd44a2c(0x254)]);this[_0xd44a2c(0x254)]['style'][_0xd44a2c(0x279)]=_0xd44a2c(0x1de),_0x42f7ef['addEventListener'](_0xd44a2c(0x27c),_0x5993f8=>{const _0x40e265=_0xd44a2c;this[_0x40e265(0x24c)](_0x5993f8);}),this['canvas'][_0xd44a2c(0x2f3)](_0xd44a2c(0x20e),this[_0xd44a2c(0x29f)]),this[_0xd44a2c(0x28e)](),this[_0xd44a2c(0x2b1)]=null,this['place2AdTexture']={},this[_0xd44a2c(0x339)]={},this[_0xd44a2c(0x1f0)]={},this['currentAds2BoundingRect']=[],this[_0xd44a2c(0x296)]=0x0,this[_0xd44a2c(0x280)]=null;}[_0x2146ea(0x370)](_0x692e8){return(_0x692e8&_0x692e8-0x1)==0x0;}[_0x2146ea(0x246)](_0x1ff5a6){const _0xbde4f9=_0x2146ea;let _0x44b1=document[_0xbde4f9(0x380)](_0xbde4f9(0x254));_0x44b1[_0xbde4f9(0x211)]=0x32,_0x44b1['height']=0x32;let _0x44c078=_0x44b1['getContext']('2d');_0x44c078[_0xbde4f9(0x1f5)]=_0xbde4f9(0x28b),_0x44c078[_0xbde4f9(0x1e4)](0x0,0x0,_0x44b1['width'],_0x44b1['height']),_0x44c078[_0xbde4f9(0x2c1)]=_0xbde4f9(0x235),_0x44c078['fillStyle']='white',_0x44c078[_0xbde4f9(0x332)](_0x1ff5a6,0xa,0x23);let _0x200d5d=_0x44b1[_0xbde4f9(0x3ae)](),_0x38ec10=document[_0xbde4f9(0x380)](_0xbde4f9(0x27b));return _0x38ec10[_0xbde4f9(0x213)]=_0x200d5d,_0x38ec10;}[_0x2146ea(0x24c)](_0x2f6945){const _0x161872=_0x2146ea,_0x2119d0=this[_0x161872(0x254)]['getBoundingClientRect']();let _0x57ed53=event[_0x161872(0x3a9)]-_0x2119d0[_0x161872(0x1ee)],_0xd425ac=event['clientY']-_0x2119d0[_0x161872(0x1ed)];_0x57ed53=_0x57ed53/(_0x2119d0[_0x161872(0x2a4)]-_0x2119d0[_0x161872(0x1ee)]),_0xd425ac=_0xd425ac/(_0x2119d0[_0x161872(0x3ac)]-_0x2119d0[_0x161872(0x1ed)]);for(let _0x11b674 of this[_0x161872(0x1ec)]){if(_0x11b674['rect']['l']<=_0x57ed53&&_0x11b674[_0x161872(0x2fd)]['r']>=_0x57ed53&&_0x11b674['rect']['t']<=_0xd425ac&&_0x11b674['rect']['b']>=_0xd425ac){let _0x18e5ab=_0x11b674[_0x161872(0x203)][_0x161872(0x240)](0x1);if(this[_0x161872(0x2b2)][_0x18e5ab]){let _0x5985e9=this[_0x161872(0x2b2)][_0x18e5ab];console[_0x161872(0x1f7)](_0x161872(0x3dc)+_0x18e5ab+_0x161872(0x393)+_0x5985e9+_0x161872(0x3f3)),window[_0x161872(0x1e2)](_0x5985e9,_0x161872(0x25f));}return;}}}[_0x2146ea(0x3d0)](){return 0x0;}['TexUnitForAdInPlace'](_0x555b80){const _0x5f5ba7=_0x2146ea;let _0x3b4328=Object[_0x5f5ba7(0x2f7)](this[_0x5f5ba7(0x339)]);for(let _0x319fb3=0x0;_0x319fb3<_0x3b4328[_0x5f5ba7(0x209)];++_0x319fb3){if(_0x555b80==_0x3b4328[_0x319fb3])return _0x319fb3+0x1;}return 0x0;}[_0x2146ea(0x29a)](_0x57e552){const _0x444b88=_0x2146ea;let _0x42713a=Object[_0x444b88(0x2f7)](this['place2ad']);for(let _0x41276b=0x0;_0x41276b<_0x42713a[_0x444b88(0x209)];++_0x41276b){let _0x3def54=_0x42713a[_0x41276b];if(_0x57e552[_0x444b88(0x203)]['indexOf'](_0x3def54)>=0x0)return _0x41276b;}return 0x0;}[_0x2146ea(0x2bd)](_0x534f82){const _0x5343f4=_0x2146ea;let _0x2f32fe=Object[_0x5343f4(0x2f7)](this[_0x5343f4(0x339)]);for(let _0x4e1594=0x0;_0x4e1594<_0x2f32fe[_0x5343f4(0x209)];++_0x4e1594){let _0x50bea9=_0x2f32fe[_0x4e1594];if(_0x534f82[_0x5343f4(0x203)][_0x5343f4(0x3ce)](_0x50bea9)>=0x0&&this[_0x5343f4(0x2af)]&&this[_0x5343f4(0x2af)][_0x50bea9]&&this['place2AdTexture'][_0x50bea9][_0x5343f4(0x203)])return this[_0x5343f4(0x2af)][_0x50bea9][_0x5343f4(0x203)];}return this['lastAdName'];}['TexUnitBaseForAlpha'](){const _0x3c87bc=_0x2146ea;return 0x1+Object['keys'](this['place2ad'])[_0x3c87bc(0x209)];}[_0x2146ea(0x28e)](){const _0x1f69b1=_0x2146ea;let _0x2cf487=BB['GL'][_0x1f69b1(0x1ea)];if(BB['Utils']['Platform']['isSafariMac']())_0x2cf487=BB['GL']['fragmentShaderSource'][_0x1f69b1(0x226)](_0x1f69b1(0x3af),_0x1f69b1(0x3e6));this[_0x1f69b1(0x3b3)]=webglUtils['createProgramFromSources'](this[_0x1f69b1(0x2ef)],this[_0x1f69b1(0x39f)]==0x2?[BB['GL'][_0x1f69b1(0x20b)],_0x2cf487]:[BB['GL']['vertexShaderSourceV1'],BB['GL'][_0x1f69b1(0x38f)]]),this[_0x1f69b1(0x2ef)][_0x1f69b1(0x345)](0x0,0x0,0x0,0x0),this['ctx'][_0x1f69b1(0x36e)](this['ctx']['COLOR_BUFFER_BIT']),this[_0x1f69b1(0x2ef)][_0x1f69b1(0x1e0)](this[_0x1f69b1(0x3b3)]),this['counter']=0x0,this[_0x1f69b1(0x27a)]();}[_0x2146ea(0x27a)](){const _0x116a4e=_0x2146ea;this[_0x116a4e(0x254)][_0x116a4e(0x1d2)]['display']=_0x116a4e(0x1de),this[_0x116a4e(0x3da)]=0x0;}[_0x2146ea(0x2c8)](_0x203008,_0x6ea55c,_0x5d5b73,_0x16ebc2,_0x1c95a6,_0x1811f7,_0x12acfe){const _0x50e1e5=_0x2146ea;_0x12acfe?this[_0x50e1e5(0x2ef)][_0x50e1e5(0x396)](this[_0x50e1e5(0x2ef)]['UNPACK_ALIGNMENT'],0x1):this['ctx'][_0x50e1e5(0x396)](this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1fc)],0x4);this[_0x50e1e5(0x2ef)][_0x50e1e5(0x396)](this[_0x50e1e5(0x2ef)][_0x50e1e5(0x286)],![]);const _0x171de6=this[_0x50e1e5(0x2ef)]['createTexture']();this['ctx'][_0x50e1e5(0x2eb)](this[_0x50e1e5(0x2ef)][_0x50e1e5(0x26a)]+_0x6ea55c),this[_0x50e1e5(0x2ef)][_0x50e1e5(0x400)](this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1f2)],_0x171de6);try{_0x1c95a6&&_0x1811f7?this[_0x50e1e5(0x2ef)][_0x50e1e5(0x25d)](this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1f2)],0x0,_0x16ebc2==null?this['ctx'][_0x50e1e5(0x2f9)]:_0x16ebc2,_0x1c95a6,_0x1811f7,0x0,_0x16ebc2==null?this[_0x50e1e5(0x2ef)][_0x50e1e5(0x2f9)]:_0x16ebc2,this[_0x50e1e5(0x2ef)][_0x50e1e5(0x3aa)],_0x203008):this['ctx'][_0x50e1e5(0x25d)](this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1f2)],0x0,_0x16ebc2==null?this[_0x50e1e5(0x2ef)][_0x50e1e5(0x2f9)]:_0x16ebc2,this[_0x50e1e5(0x2ef)]['RGBA'],this['ctx']['UNSIGNED_BYTE'],_0x203008);}catch(_0x355e73){return console['error'](_0x355e73),null;}if(this['webGLVersion']==0x1){let _0x33f07f=_0x1c95a6||_0x203008[_0x50e1e5(0x211)],_0x10255f=_0x1811f7||_0x203008[_0x50e1e5(0x28d)];_0x33f07f&&this[_0x50e1e5(0x370)](_0x33f07f)&&_0x10255f&&this[_0x50e1e5(0x370)](_0x10255f)?this['ctx']['generateMipmap'](this['ctx'][_0x50e1e5(0x1f2)]):(this[_0x50e1e5(0x2ef)][_0x50e1e5(0x239)](this['ctx']['TEXTURE_2D'],this['ctx'][_0x50e1e5(0x3a5)],this[_0x50e1e5(0x2ef)][_0x50e1e5(0x3e7)]),this[_0x50e1e5(0x2ef)][_0x50e1e5(0x239)](this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1f2)],this[_0x50e1e5(0x2ef)]['TEXTURE_WRAP_T'],this['ctx']['CLAMP_TO_EDGE']),this[_0x50e1e5(0x2ef)][_0x50e1e5(0x239)](this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1f2)],this[_0x50e1e5(0x2ef)][_0x50e1e5(0x3ef)],this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1f9)]));}else this[_0x50e1e5(0x2ef)][_0x50e1e5(0x239)](this['ctx']['TEXTURE_2D'],this[_0x50e1e5(0x2ef)]['TEXTURE_WRAP_S'],this[_0x50e1e5(0x2ef)][_0x50e1e5(0x3e7)]),this[_0x50e1e5(0x2ef)]['texParameteri'](this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1f2)],this['ctx'][_0x50e1e5(0x25a)],this[_0x50e1e5(0x2ef)][_0x50e1e5(0x3e7)]),this[_0x50e1e5(0x2ef)][_0x50e1e5(0x239)](this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1f2)],this[_0x50e1e5(0x2ef)]['TEXTURE_MIN_FILTER'],this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1f9)]),this[_0x50e1e5(0x2ef)][_0x50e1e5(0x239)](this['ctx'][_0x50e1e5(0x1f2)],this[_0x50e1e5(0x2ef)][_0x50e1e5(0x348)],this[_0x50e1e5(0x2ef)][_0x50e1e5(0x1f9)]);let _0x23f3b6=this['ctx'][_0x50e1e5(0x21e)](this['program'],_0x5d5b73);return _0x23f3b6&&this['ctx'][_0x50e1e5(0x336)](_0x23f3b6,_0x6ea55c),_0x171de6;}[_0x2146ea(0x3de)](){const _0x11ca32=_0x2146ea;this[_0x11ca32(0x280)]=setTimeout(()=>{const _0x10fb41=_0x11ca32,_0x4046f0=Object[_0x10fb41(0x2f7)](this['advertisementMap']);_0x4046f0[_0x10fb41(0x209)]&&(this[_0x10fb41(0x319)](_0x4046f0[Math[_0x10fb41(0x22a)](Math[_0x10fb41(0x3c3)]()*_0x4046f0[_0x10fb41(0x209)])]),this[_0x10fb41(0x3de)]());},this[_0x11ca32(0x269)][_0x11ca32(0x2d3)]);}[_0x2146ea(0x3ee)](_0x13e01c,_0x511685,_0x556b95=null){const _0x1eb8c9=_0x2146ea;if(_0x13e01c['indexOf'](_0x1eb8c9(0x358))>-0x1){fetch(_0x511685)['then'](async _0x225c97=>{const _0x142dcb=_0x1eb8c9;this[_0x142dcb(0x339)]=await _0x225c97['json'](),this[_0x142dcb(0x1f0)]={};let _0x163f18=Object[_0x142dcb(0x2f7)](this[_0x142dcb(0x339)]);for(let _0x179349=0x0;_0x179349<_0x163f18['length'];++_0x179349){let _0x2c3120=_0x163f18[_0x179349];if(_0x2c3120==_0x142dcb(0x2ea)){this[_0x142dcb(0x2b2)]=this[_0x142dcb(0x339)][_0x2c3120],delete this[_0x142dcb(0x339)][_0x2c3120];continue;}let _0x444a60=this[_0x142dcb(0x339)][_0x2c3120];for(let _0x487d3d=0x0;_0x487d3d<_0x444a60['length'];++_0x487d3d){let _0x2641e7=_0x444a60[_0x487d3d];this[_0x142dcb(0x1f0)]['#'+_0x2641e7]=_0x2c3120;}}Object[_0x142dcb(0x2f7)](this[_0x142dcb(0x339)])[_0x142dcb(0x209)]>0x0&&(console[_0x142dcb(0x1f7)](_0x142dcb(0x36b),this['place2ad']),console[_0x142dcb(0x1f7)](_0x142dcb(0x2d6),this[_0x142dcb(0x1f0)]),setTimeout(()=>{const _0x1466e8=_0x142dcb;this[_0x1466e8(0x37b)]();},0xbb8));});if(_0x556b95)_0x556b95();return;}const _0x305d4a=new Image();return _0x305d4a[_0x1eb8c9(0x323)]=_0x1eb8c9(0x23a),_0x305d4a['onload']=()=>{const _0x5dadf5=_0x1eb8c9;let _0x3a51e0=Object[_0x5dadf5(0x2f7)](this['advertisementMap'])[_0x5dadf5(0x209)]===0x0;this[_0x5dadf5(0x2fa)][_0x13e01c]=_0x305d4a;_0x3a51e0&&(this['SelectAd'](_0x13e01c),this[_0x5dadf5(0x269)][_0x5dadf5(0x2dd)]&&(clearTimeout(this['autoAddIndex']),this[_0x5dadf5(0x3de)]()));if(_0x556b95)_0x556b95();},_0x305d4a['onerror']=()=>{alert('(\x20Security\x20)\x20We\x20cant\x20reach\x20'+_0x511685+'\x20.');},_0x305d4a[_0x1eb8c9(0x213)]=_0x511685,_0x305d4a;}['MakeSureAdPerPlace'](){const _0x1ac2ea=_0x2146ea;if(this['place2ad']){let _0x9198ce=Object[_0x1ac2ea(0x2f7)](this[_0x1ac2ea(0x339)]);for(let _0x5c3fab=0x0;_0x5c3fab<_0x9198ce['length'];++_0x5c3fab){let _0x116945=_0x9198ce[_0x5c3fab];!this[_0x1ac2ea(0x2af)][_0x116945]&&this[_0x1ac2ea(0x339)][_0x116945][_0x1ac2ea(0x209)]>0x0&&(console[_0x1ac2ea(0x1f7)]('MakeSureAdPerPlace:\x20Set\x20default\x20image\x20'+this[_0x1ac2ea(0x339)][_0x116945][0x0]+_0x1ac2ea(0x290)+_0x116945),this[_0x1ac2ea(0x319)]('#'+this[_0x1ac2ea(0x339)][_0x116945][0x0]));}}}[_0x2146ea(0x319)](_0x4a4dfc){const _0x5581fe=_0x2146ea;console[_0x5581fe(0x1f7)](_0x5581fe(0x277)+_0x4a4dfc);let _0x314b43=this[_0x5581fe(0x2fa)][_0x4a4dfc];if(!_0x314b43)console[_0x5581fe(0x3f7)](_0x5581fe(0x357)+_0x4a4dfc+'\x27');else{if(this[_0x5581fe(0x1f0)]&&this['ad2place'][_0x4a4dfc]){let _0xcad59f=this['ad2place'][_0x4a4dfc];console[_0x5581fe(0x1f7)](_0x5581fe(0x3e9)+_0xcad59f);let _0x237f71=this['TexUnitForAdInPlace'](_0xcad59f),_0x27efd4='ad'+(_0x237f71-0x1);if(this[_0x5581fe(0x2af)][_0xcad59f])this[_0x5581fe(0x2ef)][_0x5581fe(0x37e)](this[_0x5581fe(0x2af)][_0xcad59f][_0x5581fe(0x2e2)]);this[_0x5581fe(0x2af)][_0xcad59f]={'tex':this[_0x5581fe(0x2c8)](_0x314b43,_0x237f71,_0x27efd4),'texUnitId':_0x237f71,'texName':_0x27efd4,'name':_0x4a4dfc};}else this[_0x5581fe(0x2b1)]!=null&&this[_0x5581fe(0x2ef)][_0x5581fe(0x37e)](this[_0x5581fe(0x2b1)]),this['adTexture']=this[_0x5581fe(0x2c8)](_0x314b43,this[_0x5581fe(0x3d0)](),'ad0'),this[_0x5581fe(0x3fb)]=_0x314b43,this[_0x5581fe(0x225)]=_0x4a4dfc;}}[_0x2146ea(0x1d6)](_0x4aff1e){const _0x1e76ea=_0x2146ea;this[_0x1e76ea(0x392)][_0x4aff1e[_0x1e76ea(0x2e8)]]=_0x4aff1e,this['metadataArr'][_0x1e76ea(0x3c6)](_0x4aff1e[_0x1e76ea(0x2e8)]);}[_0x2146ea(0x29f)](){const _0x35fbe7=_0x2146ea;(this[_0x35fbe7(0x3c1)]||this['webkitRequestFullscreen'])[_0x35fbe7(0x2be)](this)[_0x35fbe7(0x3f1)](_0x549439=>{const _0x42b22b=_0x35fbe7;console[_0x42b22b(0x3f7)](_0x549439);});}[_0x2146ea(0x3c5)](){const _0x2bb71f=_0x2146ea;let _0x999fed=this[_0x2bb71f(0x2ef)][_0x2bb71f(0x220)](this['program'],_0x2bb71f(0x305)),_0x28e5a3=this['ctx'][_0x2bb71f(0x21e)](this[_0x2bb71f(0x3b3)],_0x2bb71f(0x34b)),_0x2c3a42=this[_0x2bb71f(0x2ef)]['getUniformLocation'](this[_0x2bb71f(0x3b3)],_0x2bb71f(0x391));this[_0x2bb71f(0x2ef)]['uniform2f'](_0x28e5a3,this[_0x2bb71f(0x2ef)][_0x2bb71f(0x254)][_0x2bb71f(0x211)],this['ctx'][_0x2bb71f(0x254)][_0x2bb71f(0x28d)]),this[_0x2bb71f(0x2ef)][_0x2bb71f(0x338)](_0x2c3a42,this[_0x2bb71f(0x2ef)]['canvas'][_0x2bb71f(0x211)],this[_0x2bb71f(0x2ef)][_0x2bb71f(0x254)][_0x2bb71f(0x28d)]);if(this['webGLVersion']==0x2){let _0x17f218=this[_0x2bb71f(0x2ef)][_0x2bb71f(0x21e)](this[_0x2bb71f(0x3b3)],'u_matrix'),_0x21f257=[0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1];this[_0x2bb71f(0x2ef)][_0x2bb71f(0x24e)](_0x17f218,![],_0x21f257);}let _0x2ab90c=null;this[_0x2bb71f(0x39f)]==0x2&&(_0x2ab90c=this[_0x2bb71f(0x2ef)]['createVertexArray'](),this[_0x2bb71f(0x2ef)][_0x2bb71f(0x3fd)](_0x2ab90c));let _0x486899=this[_0x2bb71f(0x2ef)][_0x2bb71f(0x372)]();this[_0x2bb71f(0x2ef)][_0x2bb71f(0x3ab)](_0x999fed),this[_0x2bb71f(0x2ef)][_0x2bb71f(0x3b2)](this['ctx'][_0x2bb71f(0x1e6)],_0x486899);let _0xc0d750=0x2,_0x5e4a33=this['ctx'][_0x2bb71f(0x390)],_0xfffa71=![],_0x26209a=0x0,_0xb6adb6=0x0;this['ctx'][_0x2bb71f(0x3a1)](_0x999fed,_0xc0d750,_0x5e4a33,_0xfffa71,_0x26209a,_0xb6adb6);let _0x41ff4e=this[_0x2bb71f(0x2ef)][_0x2bb71f(0x372)]();this[_0x2bb71f(0x2ef)][_0x2bb71f(0x3b2)](this['ctx'][_0x2bb71f(0x1e6)],_0x41ff4e),this[_0x2bb71f(0x2ef)][_0x2bb71f(0x24d)](this[_0x2bb71f(0x2ef)][_0x2bb71f(0x1e6)],new Float32Array([0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x1,0x1,0x0,0x1,0x1]),this[_0x2bb71f(0x2ef)][_0x2bb71f(0x2fb)]),this['ctx'][_0x2bb71f(0x248)](0x0,0x0,this[_0x2bb71f(0x2ef)][_0x2bb71f(0x254)][_0x2bb71f(0x211)],this[_0x2bb71f(0x2ef)][_0x2bb71f(0x254)][_0x2bb71f(0x28d)]),this[_0x2bb71f(0x2ef)][_0x2bb71f(0x345)](0x0,0x0,0x0,0x0),this[_0x2bb71f(0x2ef)]['clear'](this[_0x2bb71f(0x2ef)][_0x2bb71f(0x2cc)]|this[_0x2bb71f(0x2ef)][_0x2bb71f(0x1f6)]),this['ctx'][_0x2bb71f(0x3b2)](this['ctx'][_0x2bb71f(0x1e6)],_0x486899),this[_0x2bb71f(0x3bd)](this['ctx'],0x0,0x0,this[_0x2bb71f(0x254)][_0x2bb71f(0x211)],this[_0x2bb71f(0x254)][_0x2bb71f(0x28d)]);let _0xd00c30=this['ctx']['TRIANGLES'],_0x491f41=0x6;this['ctx']['drawArrays'](_0xd00c30,_0xb6adb6,_0x491f41);}[_0x2146ea(0x3bd)](_0x3ba305,_0x3fa596,_0x4609cb,_0x36e053,_0x59685c){const _0xecb84a=_0x2146ea;let _0x24f4af=_0x3fa596,_0xa736d7=_0x3fa596+_0x36e053,_0x3a8a24=_0x4609cb,_0x17ea88=_0x4609cb+_0x59685c;this[_0xecb84a(0x2ef)]['bufferData'](this[_0xecb84a(0x2ef)][_0xecb84a(0x1e6)],new Float32Array([_0x24f4af,_0x3a8a24,_0xa736d7,_0x3a8a24,_0x24f4af,_0x17ea88,_0x24f4af,_0x17ea88,_0xa736d7,_0x3a8a24,_0xa736d7,_0x17ea88]),this['ctx']['STATIC_DRAW']);}[_0x2146ea(0x342)](_0x47acbf){const _0x478dbf=_0x2146ea;let _0x4f9ca3=BB['Utils'][_0x478dbf(0x3f8)],_0x10cab5=_0x4f9ca3[_0x478dbf(0x1dc)](_0x47acbf),_0x5a997a=_0x4f9ca3[_0x478dbf(0x3bf)](_0x10cab5,0x1,this[_0x478dbf(0x325)]),_0x3c08c5=_0x4f9ca3['TimeCodeAddFrames'](_0x10cab5,0x2,this['sourceFPS']),_0x2317d9=_0x4f9ca3[_0x478dbf(0x2a8)](_0x5a997a),_0x5554c2=_0x4f9ca3['printTimecode'](_0x3c08c5);this['videoStarted']=!![];const _0x3cf392=performance[_0x478dbf(0x292)]();let _0x503d60=null,_0x5cdec0=[];if(this[_0x478dbf(0x392)][_0x47acbf]){_0x503d60=this[_0x478dbf(0x392)][_0x47acbf];this['metadataMap'][_0x2317d9]&&_0x5cdec0['push']({'nextVideo':this[_0x478dbf(0x392)][_0x2317d9],'nextTimeCode':_0x2317d9});this[_0x478dbf(0x392)][_0x5554c2]&&_0x5cdec0['push']({'nextVideo':this[_0x478dbf(0x392)][_0x5554c2],'nextTimeCode':_0x5554c2});const _0x48e477=this[_0x478dbf(0x201)][_0x478dbf(0x3ce)](_0x47acbf);if(_0x48e477>-0x5)this[_0x478dbf(0x201)]['splice'](0x0,_0x48e477-0x4)[_0x478dbf(0x32d)](_0xc234a=>{delete this['metadataMap'][_0xc234a];});this['alphaFound']++;}else this['counter']++,this[_0x478dbf(0x344)]>0x3c&&(this[_0x478dbf(0x344)]=0x0,console['error'](_0x478dbf(0x375)+_0x47acbf)),this[_0x478dbf(0x3da)]++;this[_0x478dbf(0x3da)]>0x1e&&this[_0x478dbf(0x254)][_0x478dbf(0x1d2)][_0x478dbf(0x2e9)]==_0x478dbf(0x1de)&&(this['canvas'][_0x478dbf(0x1d2)][_0x478dbf(0x2e9)]='');let _0x3d3508=[];this[_0x478dbf(0x254)][_0x478dbf(0x211)]=0x500,this[_0x478dbf(0x254)][_0x478dbf(0x28d)]=0x2d0;let _0x44841a=0x0;this[_0x478dbf(0x1ec)]=[];if(_0x503d60){let _0x13bec4=![];if(this[_0x478dbf(0x269)][_0x478dbf(0x37c)]){var _0x14fd19=document[_0x478dbf(0x2f8)](_0x478dbf(0x299));_0x13bec4=_0x14fd19['checked'];}if(!_0x13bec4)for(const _0x2c5e7d in _0x503d60[_0x478dbf(0x2b3)]){const _0x39fbb7=_0x503d60[_0x478dbf(0x2b3)][_0x2c5e7d];if(!_0x39fbb7[_0x478dbf(0x36c)])continue;let _0x578b6c='alpha'+_0x44841a,_0x5bac4f=this[_0x478dbf(0x363)]()+_0x44841a;_0x39fbb7[_0x478dbf(0x32c)]=this[_0x478dbf(0x2c8)](_0x39fbb7[_0x478dbf(0x36c)],_0x5bac4f,_0x578b6c,this[_0x478dbf(0x2ef)]['ALPHA'],_0x39fbb7[_0x478dbf(0x211)],_0x39fbb7[_0x478dbf(0x28d)],!![]),_0x39fbb7[_0x478dbf(0x36c)]=null;if(!_0x39fbb7[_0x478dbf(0x32c)]){console[_0x478dbf(0x3f7)](_0x478dbf(0x401));continue;}_0x3d3508['push'](_0x39fbb7['alphaTex']);let _0x3f3a4e='hasLogo'+_0x44841a,_0x174072=this[_0x478dbf(0x2ef)][_0x478dbf(0x21e)](this[_0x478dbf(0x3b3)],_0x3f3a4e);this['ctx'][_0x478dbf(0x336)](_0x174072,0x1);let _0x2fd487=_0x478dbf(0x2c5)+_0x44841a,_0x5d5fc4=this[_0x478dbf(0x2ef)][_0x478dbf(0x21e)](this[_0x478dbf(0x3b3)],_0x2fd487),_0x42a620=![];_0x39fbb7[_0x478dbf(0x203)]['indexOf'](_0x478dbf(0x37f))>=0x0?(this[_0x478dbf(0x2ef)]['uniform1i'](_0x5d5fc4,0x63),_0x42a620=!![]):this[_0x478dbf(0x2ef)][_0x478dbf(0x336)](_0x5d5fc4,this['TexUnitForPlaceHolder'](_0x39fbb7));let _0xd5c119=_0x478dbf(0x308)+_0x44841a+_0x478dbf(0x3a3),_0x27e1cc=this['ctx'][_0x478dbf(0x21e)](this[_0x478dbf(0x3b3)],_0xd5c119);this['ctx'][_0x478dbf(0x21d)](_0x27e1cc,[_0x39fbb7['maskX'],_0x39fbb7['maskY']]);let _0x1679f7=_0x478dbf(0x308)+_0x44841a+_0x478dbf(0x2bc),_0x114d3b=this[_0x478dbf(0x2ef)]['getUniformLocation'](this[_0x478dbf(0x3b3)],_0x1679f7);this['ctx']['uniform2fv'](_0x114d3b,[_0x39fbb7['width'],_0x39fbb7[_0x478dbf(0x28d)]]);let _0x2f6571='u_matrix'+_0x44841a,_0x3122e2=this[_0x478dbf(0x2ef)]['getUniformLocation'](this['program'],_0x2f6571);this['ctx'][_0x478dbf(0x24e)](_0x3122e2,![],_0x39fbb7['tranform']);if(!_0x42a620){let _0x31d1fb={'l':-0x1,'t':-0x1,'r':-0x1,'b':-0x1};for(let _0x2b794b of _0x39fbb7[_0x478dbf(0x1d9)]){if(_0x2b794b['x']<_0x31d1fb['l']||_0x31d1fb['l']==-0x1)_0x31d1fb['l']=_0x2b794b['x'];if(_0x2b794b['x']>_0x31d1fb['r']||_0x31d1fb['r']==-0x1)_0x31d1fb['r']=_0x2b794b['x'];if(_0x2b794b['y']<_0x31d1fb['t']||_0x31d1fb['t']==-0x1)_0x31d1fb['t']=_0x2b794b['y'];if(_0x2b794b['y']>_0x31d1fb['b']||_0x31d1fb['b']==-0x1)_0x31d1fb['b']=_0x2b794b['y'];}_0x31d1fb['l']/=_0x503d60[_0x478dbf(0x1e7)][_0x478dbf(0x211)],_0x31d1fb['r']/=_0x503d60[_0x478dbf(0x1e7)]['width'],_0x31d1fb['t']/=_0x503d60[_0x478dbf(0x1e7)][_0x478dbf(0x28d)],_0x31d1fb['b']/=_0x503d60[_0x478dbf(0x1e7)][_0x478dbf(0x28d)],this[_0x478dbf(0x1ec)][_0x478dbf(0x3c6)]({'name':this[_0x478dbf(0x2bd)](_0x39fbb7),'rect':_0x31d1fb});}_0x44841a++;}}else{}for(;_0x44841a<BB['MAX_LOGOS'];++_0x44841a){let _0x169ee4=_0x478dbf(0x3c4)+_0x44841a,_0x41755a=this['ctx'][_0x478dbf(0x21e)](this['program'],_0x169ee4);this['ctx'][_0x478dbf(0x336)](_0x41755a,0x0);let _0x3d3c16=_0x478dbf(0x263)+_0x44841a,_0x26db74=this[_0x478dbf(0x2ef)]['getUniformLocation'](this[_0x478dbf(0x3b3)],_0x3d3c16);this[_0x478dbf(0x2ef)]['uniform1i'](_0x26db74,0x0);}if(this[_0x478dbf(0x269)][_0x478dbf(0x3c7)]['renderTimecode']){let _0x5ce833=_0x47acbf['split'](':')[0x3],_0x25d575=_0x5ce833[_0x478dbf(0x3ce)]('.')>=0x0?0x2:0x1,_0x2b11d5=parseInt(_0x5ce833[_0x478dbf(0x3a7)]('.')[0x0])%0xa,_0x425bdc=_0x2b11d5+'.'+_0x25d575,_0x2eb9e7=this[_0x478dbf(0x363)]()+0x5,_0xdeaedd=this[_0x478dbf(0x2c8)](this[_0x478dbf(0x33e)][_0x425bdc],_0x2eb9e7,'digitTex');_0x3d3508[_0x478dbf(0x3c6)](_0xdeaedd);let _0x6a47fc=_0x478dbf(0x271),_0x27f7cb=this[_0x478dbf(0x2ef)][_0x478dbf(0x21e)](this['program'],_0x6a47fc);this[_0x478dbf(0x2ef)]['uniform1i'](_0x27f7cb,0x1);let _0x12a297='u_digitTopLeft',_0x2c892b=this['ctx'][_0x478dbf(0x21e)](this[_0x478dbf(0x3b3)],_0x12a297);this[_0x478dbf(0x2ef)][_0x478dbf(0x21d)](_0x2c892b,[0x0,0x0]);let _0xb28ad7=_0x478dbf(0x3f9),_0x30735d=this[_0x478dbf(0x2ef)][_0x478dbf(0x21e)](this[_0x478dbf(0x3b3)],_0xb28ad7);this['ctx'][_0x478dbf(0x21d)](_0x30735d,[0xc8,0xc8]);}else{let _0x46dbbf='hasDigit',_0x1a1d2e=this[_0x478dbf(0x2ef)][_0x478dbf(0x21e)](this[_0x478dbf(0x3b3)],_0x46dbbf);this[_0x478dbf(0x2ef)]['uniform1i'](_0x1a1d2e,0x0);}this[_0x478dbf(0x3c5)]();for(const _0x43492d of _0x3d3508){this[_0x478dbf(0x2ef)][_0x478dbf(0x37e)](_0x43492d);}}[_0x2146ea(0x2e1)](){const _0x449a4c=_0x2146ea;return this[_0x449a4c(0x254)];}},BB[_0x2146ea(0x1e5)]=class{constructor(_0x9d9fb8,_0x428884,_0x5ee9b3){const _0x33b704=_0x2146ea;this['canvas']=_0x9d9fb8;let _0x416b6e=new Blob([COMPOSER_WORKER],{'type':_0x33b704(0x218)});this[_0x33b704(0x1ef)]=new Worker(URL[_0x33b704(0x1d5)](_0x416b6e)),this[_0x33b704(0x1ef)][_0x33b704(0x30c)]=function(_0x1b7056){const _0x51f685=_0x33b704,{action:_0x2abf39,url:_0x394896}=_0x1b7056[_0x51f685(0x34c)];_0x2abf39==='open-uri'&&_0x394896&&window['open'](_0x394896,'_blank');};const _0x32c304=_0x9d9fb8[_0x33b704(0x2d7)]();let _0x3ea876=0xea60/0x3e9,_0x5c0269=_0x428884[_0x33b704(0x3c7)]['renderTimecode'];this['worker'][_0x33b704(0x204)]({'method':'constructor','GL':BB['GL'],'canvas':_0x32c304,'sourceFPS':_0x3ea876,'renderTimecodes':_0x5c0269,'digitImg':_0x5ee9b3},[_0x32c304]);}[_0x2146ea(0x24c)](_0x4c0bb5,_0x130009,_0x2aa37f){const _0xec2e93=_0x2146ea;this[_0xec2e93(0x1ef)]['postMessage']({'method':'OnUserClickOnCanvas','data':{'clientX':_0x4c0bb5,'clientY':_0x130009,'rect':_0x2aa37f}});}[_0x2146ea(0x27a)](){const _0x27555a=_0x2146ea;this[_0x27555a(0x1ef)][_0x27555a(0x204)]({'method':'CleanGL','data':''});}[_0x2146ea(0x342)](_0x48124f){const _0x47b6fa=_0x2146ea;this[_0x47b6fa(0x1ef)][_0x47b6fa(0x204)]({'method':_0x47b6fa(0x342),'data':_0x48124f});}['AddAdvertisement'](_0x5c1c0a){const _0x1c500c=_0x2146ea;this[_0x1c500c(0x1ef)]['postMessage']({'method':'AddAdvertisement','data':_0x5c1c0a});}['getCanvas'](){const _0x432236=_0x2146ea;return this[_0x432236(0x254)];}[_0x2146ea(0x319)](_0x56e8eb){this['worker']['postMessage']({'method':'SelectAd','data':_0x56e8eb});}[_0x2146ea(0x1d6)](_0xb35e1b){const _0xdea5b4=_0x2146ea;this[_0xdea5b4(0x1ef)][_0xdea5b4(0x204)]({'method':_0xdea5b4(0x1d6),'data':_0xb35e1b});}},BB[_0x2146ea(0x3f5)]=(_0x9306aa,_0x3c33ab)=>{const _0x29ac3f=_0x2146ea;let _0x2269ac=[];const _0x432315=new BB[(_0x29ac3f(0x1f8))]((_0x2bde57,_0x457d75)=>{const _0x4306ba=_0x29ac3f;switch(_0x2bde57){case'roommembers':console[_0x4306ba(0x1f7)]('roommembers\x20message:\x20',_0x457d75);break;case _0x4306ba(0x20c):const _0x3f00a0=document[_0x4306ba(0x2f8)](_0x4306ba(0x203));_0x3f00a0&&(_0x3f00a0[_0x4306ba(0x202)]=_0x432315[_0x4306ba(0x203)]);break;case _0x4306ba(0x249):if(_0x457d75[_0x4306ba(0x214)]===_0x432315[_0x4306ba(0x203)]){if(_0x457d75['url']){const _0x58cad9=_0x4306ba(0x317);BB[_0x4306ba(0x2c2)]?_0x9306aa[_0x4306ba(0x3ee)]({'name':_0x58cad9,'path':_0x457d75[_0x4306ba(0x359)],'isSelected':!![]}):_0x9306aa[_0x4306ba(0x3ee)](_0x58cad9,_0x457d75[_0x4306ba(0x359)],()=>{const _0x328c3a=_0x4306ba;_0x9306aa[_0x328c3a(0x319)](_0x58cad9);});}else _0x2269ac=_0x457d75[_0x4306ba(0x26b)],_0x2269ac[_0x4306ba(0x209)]&&_0x9306aa[_0x4306ba(0x319)](_0x2269ac[0x0]);}break;case _0x4306ba(0x26b):_0x2269ac=_0x457d75;_0x2269ac[_0x4306ba(0x209)]&&_0x9306aa[_0x4306ba(0x319)](_0x2269ac[0x0]);break;}});var _0x51503e=document['createElement']('script');_0x51503e[_0x29ac3f(0x213)]='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js',document[_0x29ac3f(0x3df)]('head')[0x0][_0x29ac3f(0x281)](_0x51503e),_0x51503e[_0x29ac3f(0x361)]=function(){const _0x216c48=_0x29ac3f;_0x432315['Connect'](_0x3c33ab[_0x216c48(0x3c7)][_0x216c48(0x2cb)]);},_0x3c33ab['augmentation'][_0x29ac3f(0x33f)]?BB[_0x29ac3f(0x2c2)]?_0x9306aa['AddAdvertisement']({'name':_0x29ac3f(0x32a),'path':_0x3c33ab[_0x29ac3f(0x3c7)][_0x29ac3f(0x33f)],'isSelected':![]}):_0x9306aa[_0x29ac3f(0x3ee)]('#ad',_0x3c33ab[_0x29ac3f(0x3c7)]['logoURL']):fetch('https://www.virtualott.com/ads/'+_0x3c33ab[_0x29ac3f(0x3c7)][_0x29ac3f(0x2cb)])[_0x29ac3f(0x324)](async _0x2c46ab=>{const _0x200fca=_0x29ac3f,_0x1ce738=await _0x2c46ab[_0x200fca(0x2ad)]();_0x1ce738[_0x200fca(0x32d)](_0x59b90c=>{const _0x5bd5f1=_0x200fca;BB[_0x5bd5f1(0x2c2)]?_0x9306aa[_0x5bd5f1(0x3ee)]({'name':'#'+_0x59b90c[_0x5bd5f1(0x203)],'path':_0x59b90c['url'],'isSelected':!![]}):_0x9306aa[_0x5bd5f1(0x3ee)]('#'+_0x59b90c[_0x5bd5f1(0x203)],_0x59b90c[_0x5bd5f1(0x359)]);});});},BB[_0x2146ea(0x251)]=(_0x11c518,_0x2306d5)=>{const _0x45d64b=_0x2146ea;let _0x3b4afe=BB['Utils'][_0x45d64b(0x3f8)],_0xc13ee6=0xea60/0x3e9,_0x5e6eff,_0x5da710,_0x568d23=null,_0x48a6ab=null;console[_0x45d64b(0x1f7)](_0x45d64b(0x2e4)+_0x11c518[_0x45d64b(0x2d0)]);const _0x52356a=_0x77b216=>{const _0x1638a5=_0x45d64b;_0x5e6eff=_0x77b216,console[_0x1638a5(0x1f7)](_0x1638a5(0x34e)+_0x11c518['gameId']+':\x20'+_0x5e6eff),_0x5da710&&_0x335ed9(_0x5da710);};async function _0x179d86(){const _0x2ae891=_0x45d64b,_0x4f4dfd=await fetch(_0x11c518[_0x2ae891(0x3d9)]),_0x434b97=await _0x4f4dfd[_0x2ae891(0x2ad)]();_0x52356a(_0x11c518[_0x2ae891(0x2d0)]);}_0x179d86();const _0x4b4c2d=_0x1a6c57=>{_0x5da710=_0x1a6c57,_0x5e6eff&&_0x335ed9(_0x5da710);},_0x335ed9=_0x42857f=>{const _0x31c510=_0x45d64b;if(_0x568d23==null){console[_0x31c510(0x3d4)](_0x31c510(0x3b6));let _0x5112ea=new Blob([META_WORKER],{'type':_0x31c510(0x218)});_0x568d23=new Worker(URL['createObjectURL'](_0x5112ea)),_0x568d23['onerror']=function(_0x22a8cf){const _0x4576e4=_0x31c510;console[_0x4576e4(0x3f7)]('Error\x20from\x20worker:',_0x22a8cf);},_0x568d23[_0x31c510(0x2f3)](_0x31c510(0x3f7),function(_0x20297f){const _0x3c34ad=_0x31c510;console[_0x3c34ad(0x3f7)](_0x3c34ad(0x3cd),_0x20297f[_0x3c34ad(0x255)]);});if(_0x568d23)console[_0x31c510(0x3d4)](_0x31c510(0x233));else console[_0x31c510(0x3d4)](_0x31c510(0x245));_0x568d23['addEventListener']('message',_0x5aa972=>{const _0x35b6a2=_0x31c510;if(_0x5aa972['data'][_0x35b6a2(0x3b8)]){}else _0x2306d5[_0x35b6a2(0x1d6)](_0x5aa972[_0x35b6a2(0x34c)]);});let _0x1f1c00=_0x3b4afe['TimeCodeArray2TimeCodeJson'](_0x3b4afe[_0x31c510(0x3f2)](_0x42857f,_0xc13ee6,!![]));_0x568d23[_0x31c510(0x204)]({'cloudFrontURL':_0x11c518[_0x31c510(0x34f)],'folderName':_0x5e6eff,'tc':_0x3b4afe[_0x31c510(0x2a8)](_0x1f1c00,![])});}else{let _0x5032fb=_0x3b4afe[_0x31c510(0x3fe)](_0x3b4afe[_0x31c510(0x3f2)](_0x42857f,_0xc13ee6,!![]));_0x568d23[_0x31c510(0x204)]({'tc':_0x3b4afe[_0x31c510(0x2a8)](_0x5032fb,![]),'enabled':_0x11c518['enabled']});}};return{'setLastFrame':_0x4b4c2d};},BB[_0x2146ea(0x2da)]=class{constructor(_0x28f6a0,_0x470f32,_0x16633d){const _0x491c70=_0x2146ea;this[_0x491c70(0x31f)]=_0x28f6a0,this[_0x491c70(0x29d)]=_0x470f32,console['log'](_0x491c70(0x2cd),_0x16633d),this[_0x491c70(0x269)]=Object['assign']({'enabled':!![],'stopAugment':![],'stopAugmentFor':-0x1,'gameId':_0x491c70(0x1d3),'medialook':![],'allGamesURL':'https://www.virtualott.com/games/','cloudFrontURL':_0x491c70(0x238),'mediaIdJsonURL':_0x491c70(0x2ee),'offsetJsonURL':_0x491c70(0x300),'renderingMode':BB[_0x491c70(0x1d7)]['Augment'],'SynchMethod':BB[_0x491c70(0x227)][_0x491c70(0x2c0)],'debug':![],'hls_fps':0xea60/0x3e9,'augmentation':{'renderTimecode':!![],'offset':0x0},'syncPoint':{'frame':0x0,'playerTime':0x0,'mediaTimeMS':0x0}},_0x16633d||{}),console[_0x491c70(0x1f7)]('options\x20after\x20merge\x20with\x20MK\x27s\x20options:\x20',this[_0x491c70(0x269)]),this['options'][_0x491c70(0x3c7)][_0x491c70(0x2cb)]=_0x491c70(0x1e8),console['BBlog']=function(_0x2ec4f0){const _0x34bafa=_0x491c70;console[_0x34bafa(0x1f7)](_0x34bafa(0x36a)+_0x2ec4f0);},console[_0x491c70(0x22e)]=function(_0x3428c4){const _0x1077d9=_0x491c70;console[_0x1077d9(0x3f7)](_0x1077d9(0x36a)+_0x3428c4);};function _0x387f1d(_0x35d544,_0xf4836e){const _0x4c4d8f=_0x491c70,_0x158ea3=_0x35d544[_0x4c4d8f(0x3a7)]('.')[_0x4c4d8f(0x3d6)](Number),_0x55c174=_0xf4836e['split']('.')['map'](Number);for(let _0x50f155=0x0;_0x50f155<Math[_0x4c4d8f(0x39d)](_0x158ea3[_0x4c4d8f(0x209)],_0x55c174[_0x4c4d8f(0x209)]);_0x50f155++){const _0x392029=_0x158ea3[_0x50f155]||0x0,_0x3fc73f=_0x55c174[_0x50f155]||0x0;if(_0x392029<_0x3fc73f)return-0x1;else{if(_0x392029>_0x3fc73f)return 0x1;}}return 0x0;}this[_0x491c70(0x2d5)]();}[_0x2146ea(0x3e0)](){const _0x1c4592=_0x2146ea;if(typeof globalConfig===_0x1c4592(0x35c))this[_0x1c4592(0x269)]=Object[_0x1c4592(0x2d9)](this[_0x1c4592(0x269)],{});else this[_0x1c4592(0x269)]=Object[_0x1c4592(0x2d9)](this[_0x1c4592(0x269)],globalConfig);this['options'][_0x1c4592(0x3c7)][_0x1c4592(0x403)]=0x0;var _0x2b3288={};_0x2b3288[_0x1c4592(0x253)]=this[_0x1c4592(0x269)][_0x1c4592(0x2f5)],this[_0x1c4592(0x1da)](_0x2b3288),console['log'](_0x1c4592(0x313),this[_0x1c4592(0x269)]);if(!this[_0x1c4592(0x269)][_0x1c4592(0x37c)]){let _0x2062d1=[_0x1c4592(0x3c9),_0x1c4592(0x2aa),_0x1c4592(0x20f),_0x1c4592(0x223),'toggleBtn',_0x1c4592(0x367),_0x1c4592(0x3c8),'doNotRenderAugmentationCheckbox','plus05CorrectionLabel',_0x1c4592(0x387),_0x1c4592(0x27e),'br2',_0x1c4592(0x234),_0x1c4592(0x39c)];for(let _0x5318c6=0x0;_0x5318c6<_0x2062d1['length'];_0x5318c6++){const _0x4dd35c=document[_0x1c4592(0x2f8)](_0x2062d1[_0x5318c6]);_0x4dd35c&&(_0x4dd35c['style'][_0x1c4592(0x2e9)]=_0x1c4592(0x1de));}}let _0x5446a=BB['Utils'][_0x1c4592(0x38d)],_0x310990=BB[_0x1c4592(0x3d7)][_0x1c4592(0x3f8)];this[_0x1c4592(0x3a8)](this[_0x1c4592(0x269)]['gameId']);}[_0x2146ea(0x257)](){const _0x69e7c6=_0x2146ea;let _0x98989c={};this[_0x69e7c6(0x242)]=BB[_0x69e7c6(0x258)](_0x98989c,this[_0x69e7c6(0x31f)],this['options']),this[_0x69e7c6(0x269)][_0x69e7c6(0x2fc)]==BB['RenderingMode'][_0x69e7c6(0x350)]&&this['frameDrawer'][_0x69e7c6(0x360)]();}async[_0x2146ea(0x2d5)](){const _0x22db28=_0x2146ea,_0x10b1d0=new URL(document['location']),_0x3a6190=_0x10b1d0['searchParams'][_0x22db28(0x2f6)]('config')||'';if(_0x3a6190!=='')try{const _0x367082=await fetch(_0x3a6190);if(!_0x367082['ok'])throw new Error(_0x22db28(0x30d));const _0x2866fc=await _0x367082[_0x22db28(0x2ad)]();console[_0x22db28(0x1f7)](_0x22db28(0x2c9),_0x2866fc);if(typeof globalConfig==_0x22db28(0x35c))window[_0x22db28(0x3ba)]={};globalConfig=Object[_0x22db28(0x2d9)]({},globalConfig,_0x2866fc);}catch(_0x57167c){console['BBerror'](_0x22db28(0x32e),_0x57167c);}this[_0x22db28(0x3e0)]();}async[_0x2146ea(0x3a8)](_0x461631){const _0x42f486=_0x2146ea;if(this['options'][_0x42f486(0x320)]=='test'){this[_0x42f486(0x257)]();return;}try{const _0x3b8a2d=await fetch(this['options'][_0x42f486(0x320)]+'/'+_0x461631);if(!_0x3b8a2d['ok'])throw new Error(_0x42f486(0x369)+_0x3b8a2d['status']);const _0x214e00=await _0x3b8a2d[_0x42f486(0x2ad)]();if(_0x214e00[_0x42f486(0x27f)](_0x42f486(0x2e6))){const _0x41c4ce=_0x214e00[_0x42f486(0x2e6)];console['BBlog']('GameId\x20for\x20mediaid=\x20'+_0x461631+':\x20'+_0x41c4ce),this['options'][_0x42f486(0x2d0)]=_0x41c4ce,console[_0x42f486(0x1f7)](_0x42f486(0x2e5)+this[_0x42f486(0x269)]['gameId']+_0x42f486(0x341)),this['weHaveTheGameID'](),this[_0x42f486(0x2e0)](this[_0x42f486(0x269)][_0x42f486(0x2d0)]);}else console['BBerror'](_0x42f486(0x351)+_0x461631+_0x42f486(0x283)),this[_0x42f486(0x269)][_0x42f486(0x237)]=!![];}catch(_0x3bd839){console['BBerror'](_0x42f486(0x23c),_0x3bd839);}}async[_0x2146ea(0x2e0)](_0x219259){const _0x2f034c=_0x2146ea;if(this[_0x2f034c(0x269)][_0x2f034c(0x2f2)]==_0x2f034c(0x266))return 0x0;try{const _0x3d7403=await fetch(this[_0x2f034c(0x269)][_0x2f034c(0x2f2)]+'/'+this[_0x2f034c(0x269)][_0x2f034c(0x2d0)]);!_0x3d7403['ok']&&(console['BBlog'](_0x2f034c(0x369)+_0x3d7403[_0x2f034c(0x26c)]),setTimeout(()=>{const _0x116faf=_0x2f034c;this[_0x116faf(0x2e0)](_0x219259);},0x1388));const _0x41410d=await _0x3d7403['json']();if(_0x41410d[_0x2f034c(0x27f)](_0x2f034c(0x403))&&_0x41410d[_0x2f034c(0x27f)](_0x2f034c(0x31d))){const _0x52daa8=_0x41410d[_0x2f034c(0x403)],_0x3fc3ff=_0x41410d['found'];_0x3fc3ff==!![]&&(console['BBlog'](_0x2f034c(0x353)+_0x219259+':\x20'+_0x52daa8),this[_0x2f034c(0x269)][_0x2f034c(0x3c7)][_0x2f034c(0x403)]=_0x52daa8,setTimeout(()=>{const _0x3a3921=_0x2f034c;this[_0x3a3921(0x2e0)](_0x219259);},0xea60));}else console['BBlog']('offset\x20for\x20'+_0x219259+_0x2f034c(0x283)),setTimeout(()=>{const _0x429ac0=_0x2f034c;this[_0x429ac0(0x2e0)](_0x219259);},0x1388);}catch(_0x178ebe){console[_0x2f034c(0x22e)]('Error\x20fetching\x20and\x20processing\x20JSON:',_0x178ebe),setTimeout(()=>{const _0x121998=_0x2f034c;this[_0x121998(0x2e0)](_0x219259);},0x1388);}}[_0x2146ea(0x210)](_0x3fdca5){const _0x2df109=_0x2146ea;this[_0x2df109(0x269)][_0x2df109(0x2b0)]=_0x3fdca5;}[_0x2146ea(0x2e1)](){const _0x420fd9=_0x2146ea;return this[_0x420fd9(0x242)][_0x420fd9(0x2e1)]();}['setFps'](_0x5149d1){const _0x45f61e=_0x2146ea;var _0x20e145=_0x5149d1[_0x45f61e(0x253)];switch(_0x20e145){case 59.94:case 0xea60/0x3e9:this[_0x45f61e(0x269)][_0x45f61e(0x2f5)]=0xea60/0x3e9;break;case 29.97:case 0x7530/0x3e9:this[_0x45f61e(0x269)][_0x45f61e(0x2f5)]=0x7530/0x3e9;break;default:console['error']('Unsupported\x20hls-src\x20frame-rate:\x20'+_0x20e145+_0x45f61e(0x222)),this[_0x45f61e(0x269)][_0x45f61e(0x2f5)]=_0x20e145;break;}}[_0x2146ea(0x3e1)](_0x3c5100){const _0x56e8d6=_0x2146ea;this['options'][_0x56e8d6(0x276)]=_0x3c5100;}[_0x2146ea(0x3f0)](_0x386da9){const _0x25f67e=_0x2146ea;this[_0x25f67e(0x242)][_0x25f67e(0x395)](_0x386da9);}[_0x2146ea(0x29c)](_0x2553e1){const _0x2d5e82=_0x2146ea;this[_0x2d5e82(0x242)]['onNewMetadataInterface'](_0x2553e1);}};
|