async function Hp(A={}){var g,e=A,I="./this.program",i=import.meta.url,t="",s,o;{try{t=new URL(".",i).href}catch{}s=async l=>{var f=await fetch(l,{credentials:"same-origin"});if(f.ok)return f.arrayBuffer();throw new Error(f.status+" : "+f.url)}}var C=console.log.bind(console),r=console.error.bind(console),Q,B=!1,a,d,c,p,L,w,u,_,y,M=!1;function F(){var l=c.buffer;p=new Int8Array(l),w=new Int16Array(l),e.HEAPU8=L=new Uint8Array(l),e.HEAP32=u=new Int32Array(l),_=new Uint32Array(l),e.HEAPF32=new Float32Array(l),y=new BigInt64Array(l),new BigUint64Array(l)}function m(){if(e.preRun)for(typeof e.preRun=="function"&&(e.preRun=[e.preRun]);e.preRun.length;)RA(e.preRun.shift());$(xA)}function G(){M=!0,!e.noFSInit&&!U.initialized&&U.init(),Tg.s(),U.ignorePermissions=!1}function T(){if(e.postRun)for(typeof e.postRun=="function"&&(e.postRun=[e.postRun]);e.postRun.length;)nA(e.postRun.shift());$(W)}var J=0,Z=null;function z(l){J++,e.monitorRunDependencies?.(J)}function P(l){if(J--,e.monitorRunDependencies?.(J),J==0&&Z){var f=Z;Z=null,f()}}function tA(l){e.onAbort?.(l),l="Aborted("+l+")",r(l),B=!0,l+=". Build with -sASSERTIONS for more info.";var f=new WebAssembly.RuntimeError(l);throw d?.(f),f}var AA;function iA(){return vA("AGFzbQEAAAABvARIYAF/AX9gAX8AYAJ/fwBgAn9/AX9gA39/fwF/YAN/f38AYAR/f39/AGAFf39/f38Bf2AGf39/f39/AX9gBX9/f39/AGAEf39/fwF/YAN/f38BfWAIf39/f39/f38Bf2AGf39/f39/AGAAAGAHf39/f39/fwF/YAABf2AFf35+fn4AYAN/fn8BfmAHf39/f39/fwBgBX9/fX9/AX9gBX9/fn9/AGAFf39/f34Bf2ADf35/AX9gBH9+fn8AYAh/f39/f39/fwBgBX9/f398AX9gAXwBfGACf38BfWABfwF+YAJ8fwF8YAp/f39/f39/f39/AX9gAnx8AXxgAX0BfWAMf39/f39/f39/f39/AX9gC39/f39/f39/f39/AX9gBH9/f38BfmAPf39/f39/f39/f39/f39/AGAKf39/f39/f39/fwBgB39/f39/fn4Bf2AGf39/f35+AX9gA39/fAF/YAJ+fwBgBH9+f38Bf2AKf39/f39/fH9/fwBgBn9/f39/fABgB39/f39/f3wAYAJ/fgBgAn98AGAEfn5+fgF/YAR/f39+AX5gAn5/AX9gC39/f39/f39/f3x/AGADfHx/AXxgBnx/f39/fAF8YAJ/fQF/YAF/AX1gAn5+AXxgBX9/f399AGADf39/AXxgBn98f39/fwF/YAN/f34AYAJ+fgF9YAJ/fwF+YAR/fn5+AGADfn5+AX9gAAF+YAJ9fQF9YAF+AX9gAnx/AX9gBX9/f31/AGAGf39/fX9/AAJnEQFhAWEABgFhAWIABQFhAWMABAFhAWQAAAFhAWUACgFhAWYABAFhAWcACgFhAWgADgFhAWkAFwFhAWoAAAFhAWsAKgFhAWwABgFhAW0AEAFhAW4AAwFhAW8AAwFhAXAACgFhAXEAKwOeBpwGAQAADgADAAECBAYBBQACAgMDDg4RAAUQBgMsAgAAAgQABREGCRgCDi0DBREEAgQFAAACAB0CBi4CCgIFAy8AAQEHBwAwAQUMDAIDAgYAAQACAAQCAAADBQMCMRgAHgQFBgICBQcfHw4yATMCAwICAQADACADNAUGABkCBwIICAUDBQQKAAICAAAFNSA2BQYJAAkBCQEJEAICAgAABgAAAgYPCQ8DCgIDAwAAAAAFADcDAAMAAAMCBAADGyEBOAIGCQIGBgAFBggNBgUDAwMC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B3YEQCAAKAIADAELIAALIQMCQCACRQ0AIAJBAnQiBEUNACADIAEgBPwKAAALIwBBEGsiASQAAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0ACwsaAkAgAC0AC0EHdgRAIAAgAjYCBAwBCyAAIAJB/wBxOgALCyABQQA2AgwgAyACQQJ0aiABKAIMNgIAIAFBEGokAAwBCyAAIAMgAiADayAEQQAgBCACIAEQqAILC6YBAQN/AkAgARBEIQIgAC0AC0EHdgR/IAAoAghB/////wdxQQFrBUEKCyEDAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELIQQgAiADTQRAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAshAwJAIAJFIgQNACAEDQAgAyABIAL8CgAACyAAIAMgAhC1AgwBCyAAIAMgAiADayAEQQAgBCACIAEQigELCxAAIAAQoAMgARCgA3NBAXMLEAAgABChAyABEKEDc0EBcwsGABDqBQALLgEBf0EEEBUiAEH43wI2AgAgAEHQ3wI2AgAgAEHk3wI2AgAgAEG44AJBAhABAAvNCgIFfwl+IwBB4ABrIgUkACAEQv///////z+DIQogAiAEhUKAgICAgICAgIB/gyELIAJC////////P4MiDEIgiCEPIARCMIinQf//AXEhBwJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAdB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiDUKAgICAgIDA//8AVCANQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQsMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhCyADIQEMAgsgASANQoCAgICAgMD//wCFhFAEQCACIAOEUARAQoCAgICAgOD//wAhC0IAIQEMAwsgC0KAgICAgIDA//8AhCELQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAIAEgDYRCACEBUARAQoCAgICAgOD//wAhCwwDCyALQoCAgICAgMD//wCEIQsMAgsgASANhFAEQEIAIQEMAgsgAiADhFAEQEIAIQEMAgsgDUL///////8/WARAIAVB0ABqIAEgDCABIAwgDFAiBht5QsAAQgAgBht8pyIG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IAwgDSAFQQNqbEEDdGoiACALIAArAwCgOQMAIAVBBGoiBSASRw0ACwsgD0EBaiIPIB5HDQALCyAdQRBqJAALgwIBB38gASAAKAIIIgMgACgCBCICa0ECdU0EQCAAIAEEfyABQQJ0IgAEQCACQQAgAPwLAAsgACACagUgAgs2AgQPCwJAIAIgACgCACICayIGQQJ1IgUgAWoiBEGAgICABEkEQEH/////AyADIAJrIgNBAXUiCCAEIAQgCEkbIANB/P///wdPGyIEBEAgBEGAgICABE8NAiAEQQJ0EBIhBwsgBiAHaiEDIAFBAnQiAQRAIANBACAB/AsACyADIAVBAnRrIQUgBgRAIAUgAiAG/AoAAAsgACAHIARBAnRqNgIIIAAgASADajYCBCAAIAU2AgAgAgRAIAIQEQsPCxAUAAsQJAALDQAgACgCABClAxogAAsNACAAKAIAEKwDGiAAC7gBAQF/IAEoAgQhAgJAAkACQAJAIAEoAgAiASAAKAIERgRAIAAoAgggAkYNAQsgASACckEASA0BAkAgAUUNACACRQ0AIAFB/////wcgAm1KDQMLIAAgASACbCABIAIQGyAAKAIEIAFHDQMgACgCCCACRw0DCw8LQf3AAEGnIEGVAkGAJBAAAAtBBBAVIgBB+N8CNgIAIABB0N8CNgIAIABBnOACQQIQAQALQaAPQYAcQf0FQZQlEAAAC/EBAQV/IwBBEGsiBSQAAkAgAiAALQALQQd2BH8gACgCCEH/////B3FBAWsFQQoLIgMCfyAALQALQQd2BEAgACgCBAwBCyAALQALQf8AcQsiBGtNBEAgAkUiAw0BAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAsiBiAEaiEHAkAgAw0AIAMNACAHIAEgAvwKAAALIAIgBGohAQJAIAAtAAtBB3YEQCAAIAE2AgQMAQsgACABQf8AcToACwsgBUEAOgAPIAEgBmogBS0ADzoAAAwBCyAAIAMgAiADayAEaiAEIARBACACIAEQigELIAVBEGokACAACwQAQQALGAAgAC0AAEEgcUUEQCABIAIgABDIARoLC3UBAX4gACABIAR+IAIgA358IANCIIgiAiABQiCIIgR+fCADQv////8PgyIDIAFC/////w+DIgF+IgVCIIggAyAEfnwiA0IgiHwgASACfiADQv////8Pg3wi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CGogABBbGiADLQAIIQQCQCACRQ0AIARFDQAgACAAKAIAQQxrKAIAaigCGCIEIAEgAiAEKAIAKAIwEQQAIAJGDQAgACAAKAIAQQxrKAIAakEBEFwLIANBCGoQViADQRBqJAALzgkCBH8EfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgCUKAgICAgIDA//8AVCAJQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAKQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiBRshBEIAIAEgBRshAwwCCyADIAlCgICAgICAwP//AIWEUA0BIAEgCoRQBEAgAyAJhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAJhEIAUg0AIAEhAyACIQQMAQsgAyABIAEgA1QgCSAKViAJIApRGyIIGyEKIAQgAiAIGyIMQv///////z+DIQkgAiAEIAgbIgtCMIinQf//AXEhByAMQjCIp0H//wFxIgVFBEAgBkHgAGogCiAJIAogCSAJUCIFG3lCwABCACAFG3ynIgVBD2sQNiAGKQNoIQkgBikDYCEKQRAgBWshBQsgASADIAgbIQMgC0L///////8/gyEBIAcEfiABBSAGQdAAaiADIAEgAyABIAFQIgcbeULAAEIAIAcbfKciB0EPaxA2QRAgB2shByAGKQNQIQMgBikDWAtCA4YgA0I9iIRCgICAgICAgASEIQEgCUIDhiAKQj2IhCACIASFIQQCfiADQgOGIgIgBSAHRg0AGiAFIAdrIgdB/wBLBEBCACEBQgEMAQsgBkFAayACIAFBgAEgB2sQNiAGQTBqIAIgASAHEGwgBikDOCEBIAYpAzAgBikDQCAGKQNIhEIAUq2ECyEJQoCAgICAgIAEhCELIApCA4YhCgJAIARCAFMEQEIAIQNCACEEIAkgCoUgASALhYRQDQIgCiAJfSECIAsgAX0gCSAKVq19IgRC/////////wNWDQEgBkEgaiACIAQgAiAEIARQIgcbeULAAEIAIAcbfKdBDGsiBxA2IAUgB2shBSAGKQMoIQQgBikDICECDAELIAkgCnwiAiAJVK0gASALfHwiBEKAgICAgICACINQDQAgCUIBgyAEQj+GIAJCAYiEhCECIAVBAWohBSAEQgGIIQQLIAxCgICAgICAgICAf4MhAyAFQf//AU4EQCADQoCAgICAgMD//wCEIQRCACEDDAELQQAhBwJAIAVBAEoEQCAFIQcMAQsgBkEQaiACIAQgBUH/AGoQNiAGIAIgBEEBIAVrEGwgBikDACAGKQMQIAYpAxiEQgBSrYQhAiAGKQMIIQQLIARCPYYgAkIDiIQhASAEQgOIQv///////z+DIAetQjCGhCADhCEEAkACQCACp0EHcSIFQQRHBEAgBCABIAEgBUEES618IgNWrXwhBAwBCyAEIAEgASABQgGDfCIDVq18IQQMAQsgBUUNAQsLIAAgAzcDACAAIAQ3AwggBkHwAGokAAstACACRQRAIAAoAgQgASgCBEYPCyAAIAFGBEBBAQ8LIAAoAgQgASgCBBC1AUULXQEFfyMAQSBrIgIkACACQQxqAkAgAkEVaiIGIgMgAkEgaiIERg0AIAFBAE4NACADQS06AAAgA0EBaiEDQQAgAWshAQsgAyAEIAEQpwIgACAGIAIoAgwQvgEgBCQAC60CAQZ/IwBBEGsiBSQAAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELIQQCQCACIAAtAAtBB3YEfyAAKAIIQf////8HcUEBawVBCgsiAyAEa00EQCACRQ0BAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAshAyAEBEAgAyADIARqIAEQ4QEhBiACIANqIQcCQCAERSIIDQAgCA0AIAcgAyAE/AoAAAsgASACQQAgBhtqIQELAkAgAkUiBg0AIAYNACADIAEgAvwKAAALIAIgBGohAQJAIAAtAAtBB3YEQCAAIAE2AgQMAQsgACABQf8AcToACwsgBUEAOgAPIAEgA2ogBS0ADzoAAAwBCyAAIAMgAiAEaiADayAEQQBBACACIAEQigELIAVBEGokACAAC5QDAgZ/An0CQAJAAkAgACgCBCIDIAAoAggiBEkEQCADIAEqAgA4AgAgAyACKAIANgIEIANBCGohAgwBCyADIAAoAgAiA2siBUEDdSIIQQFqIgZBgICAgAJPDQEgBUH/////ASAEIANrIgRBAnUiByAGIAYgB0kbIARB+P///wdPGyIGBH8gBkGAgICAAk8NAyAGQQN0EBIFQQALIgdqIgQgASoCADgCACAEIAIoAgA2AgQgBCAIQQN0ayEBIAUEQCABIAMgBfwKAAALIAAgByAGQQN0ajYCCCAAIARBCGoiAjYCBCAAIAE2AgAgA0UNACADEBELIAAgAjYCBAJAIAIgACgCACIFa0EDdSIAQQJIDQAgBSAAQQJrQQF2IgNBA3RqIgEqAgAiCSACQQhrIgAqAgAiCl1FDQAgAkEEaygCACECA0ACQCAAIAk4AgAgACABIgAoAgQ2AgQgA0UNACAFIANBAWtBAXYiA0EDdGoiASoCACIJIApdDQELCyAAIAI2AgQgACAKOAIACw8LEBQACxAkAAs5AQF/An8gAC0AC0EHdgRAIAAoAgAMAQsgAAshASMAQRBrIgAkACAAIAE2AgwgACgCDCAAQRBqJAALBAAgAAuEAQICfwF+IwBBEGsiAyQAIAACfiABRQRAQgAMAQsgAyABIAFBH3UiAnMgAmsiAq1CACACZyICQdEAahA2IAMpAwhCgICAgICAwACFQZ6AASACa61CMIZ8QoCAgICAgICAgH9CACABQQBIG4QhBCADKQMACzcDACAAIAQ3AwggA0EQaiQAC30BA38CQAJAIAAiAUEDcUUNACABLQAARQRAQQAPCwNAIAFBAWoiAUEDcUUNASABLQAADQALDAELA0AgASICQQRqIQFBgIKECCACKAIAIgNrIANyQYCBgoR4cUGAgYKEeEYNAAsDQCACIgFBAWohAiABLQAADQALCyABIABrC1ABBX4gACAAKQMAIgEgACkDEIUiAyAAKQMIIgKFNwMIIAAgAiAAKQMYIgSFIgVCLYk3AxggACADIAJCEYaFNwMQIAAgASAFhTcDACABIAR8C7gBAQF/IAEoAgghAgJAAkACQAJAIAEoAgQiASAAKAIERgRAIAAoAgggAkYNAQsgASACckEASA0BAkAgAUUNACACRQ0AIAFB/////wcgAm1KDQMLIAAgASACbCABIAIQGyAAKAIEIAFHDQMgACgCCCACRw0D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IAIgACACKAIUIABrajYCCCADIAIoAgw2AgggAyACKAIINgIMIAJBIGokACADKAIMIANBEGokAAt2AQF/IwBBEGsiAiQAIAIgADYCDAJAIAAgAUYNAANAIAIgAUEBayIBNgIIIAAgAU8NASACKAIMIgAtAAAhASAAIAIoAggiAC0AADoAACAAIAE6AAAgAiACKAIMQQFqIgA2AgwgAigCCCEBDAALAAsgAkEQaiQAC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQCAAIAJUIAEgA1MgASADURsEQEF/DwsgACAChSABIAOFhEIAUg8LIAAgAlYgASADVSABIANRGwRAQX8PCyAAIAKFIAEgA4WEQgBSIQQLIAQLUAEBfgJAIANBwABxBEAgAiADQUBqrYghAUIAIQIMAQsgA0UNACACQcAAIANrrYYgASADrSIEiIQhASACIASIIQILIAAgATcDACAAIAI3AwgLBwAgACgCCAuoAQACQCABQYAITgRAIABEAAAAAAAA4H+iIQAgAUH/D0kEQCABQf8HayEBDAILIABEAAAAAAAA4H+iIQBB/RcgASABQf0XTxtB/g9rIQEMAQsgAUGBeEoNACAARAAAAAAAAGADoiEAIAFBuHBLBEAgAUHJB2ohAQwBCyAARAAAAAAAAGADoiEAQfBoIAEgAUHwaE0bQZIPaiEBCyAAIAFB/wdqrUI0hr+iC4EBAQJ/AkACQCACQQRPBEAgACABckEDcQ0BA0AgACgCACABKAIARw0CIAFBBGohASAAQQRqIQAgAkEEayICQQNLDQALCyACRQ0BCwNAIAAtAAAiAyABLQAAIgRGBEAgAUEBaiEBIABBAWohACACQQFrIgINAQwCCwsgAyAEaw8LQQAL9QMBCn8Cf0H85gItAABBAXEEQEH45gIoAgAhCUH05gIoAgAhCkHw5gIoAgAMAQtBgIAgIQlB+OYCQYCAIDYCAEHw5gJCgICBgICAgAQ3AgBB/OYCQQE6AABBgIAgIQpBgIABCyEHAkAgACgCACIFIAEo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NgI4IAQgASkCEDcDMCAB/QACACERIAQgBCgCmAEiADYCSCAEIBH9CwMgIAQgDzkDGCAEIAM2AhAgBCAEKQKQATcDQCANIAQoAiRHDQEgACAORw0BIARB3ABqIARBCGogBEFAaxCSAgsgBEGwAWokAA8LQZY4QcsbQbABQcsVEAAAC0GWOEGAHEHyBUGUJRAAAAtBnTFBnx1BygBBnRUQAAALQb40QasfQfoAQf0YEAAAC0GUM0GNIUGyAUHKJBAAAAvdBAEGfyAAKAIAIgYEQCMAQRBrIgMkACAGQQxqIgQoAgAhASMAQRBrIgIkACACIAE2AgwgAigCDCEBIAJBEGokACADIAE2AgwgBigCECEBIwBBEGsiAiQAIAIgATYCDCACKAIMIQEgAkEQaiQAIAMgATYCCANAIAMoAgwgAygCCEYEQAJAIAYoAgAhASMAQRBrIgIkACACIAE2AgwgAigCDCEBIAJBEGokACADIAE2AgwgBigCBCEBIwBBEGsiAiQAIAIgATYCDCACKAIMIQEgAkEQaiQAIAMgATYCCANAIAMoAgwiASADKAIIRg0BIAEoAgAhASMAQRBrIgIkACACQQE6AAwgAiABQQxqNgIIIAEgASgCVEEEcjYCVCACLQAMQQFGBEAgAigCCBoLIAJBEGokACADKAIMKAIAIgIgAigCBEEBayIBNgIEIAFBf0YEQCACIAIoAgAoAggRAQALIAMgAygCDEEEajYCDAwACwALBSADKAIMIgEoAgAaIAEoAgQaIAMgAUEIajYCDAwBCwsjAEEQayIFJAAgBSAENgIMIAUoAgwiAigCAARAIAIoAgAhASACKAIEIQQDQCABIARHBEAgBEEIayEEDAELCyACIAE2AgQgBSgCDCIBKAIIGiABKAIAEBELIAVBEGokACMAQRBrIgUkACAFIAY2AgwgBSgCDCICKAIABEAgAigCACEBIAIoAgQhBANAIAEgBEcEQCAEQQRrIQQMAQsLIAIgATYCBCAFKAIMIgEoAggaIAEoAgAQEQsgBUEQaiQAIANBEGokAAsgBhARIAALzAMBBX8jAEEgayIIJABB9////wciCSABQX9zaiACTwRAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAshCiABQfP///8DSQRAIAggAUEBdDYCHCAIIAEgAmo2AhAjAEEQayICJAAgCEEQaiIJKAIAIAhBHGoiCygCAEkhDCACQRBqJAAgCyAJIAwbKAIAIgJBC08EfyACQQhqQXhxIgIgAkEBayICIAJBC0YbBUEKC0EBaiEJCyAIIAA2AhggCCAIKAIYNgIcIAhBEGogCRB+IAgoAhAhAiAIKAIUGiAEBEACQCAERSIJDQAgCQ0AIAIgCiAE/AoAAAsLIAYEQCACIARqIQkCQCAGRSILDQAgCw0AIAkgByAG/AoAAAsLIAMgBCAFaiIJayEHIAMgCUcEQCACIARqIAZqIQMgBCAKaiAFaiEFAkAgB0UiCQ0AIAkNACADIAUgB/wKAAALCyABQQpHBEAgChARCyAAIAI2AgAgACAIKAIUQYCAgIB4cjYCCCAAIAQgBmogB2oiADYCBCAIQQA6AA8gACACaiAILQAPOgAAAn8gCCgCHCIALQALQQd2BEAgACgCBAwBCyAALQALCxogCEEgaiQADwsQOAAL6wEBBn8gACgCBCICIAAoAggiA0kEQCACIAEqAgA4AgAgACACQQRqNgIEDwsCQCACIAAoAgAiAmsiBUECdSIHQQFqIgRBgICAgARJBEAgBUH/////AyADIAJrIgNBAXUiBiAEIAQgBkkbIANB/P///wdPGyIEBH8gBEGAgICABE8NAiAEQQJ0EBIFQQALIgZqIgMgASoCADgCACADIAdBAnRrIQEgBQRAIAEgAiAF/AoAAAsgACAGIARBAnRqNgIIIAAgA0EEaiIFNgIEIAAgATYCACACBEAgAhARCyAAIAU2AgQPCxAUAAsQJAALCwAgBCACNgIAQQMLogEBAn8jAEEQayICJAAgAC0AC0EHdgRAIAAoAggaIAAoAgAQEQsCfyABLQALQQd2BEAgASgCBAwBCyABLQALCxogAS0AC0EHdiEDIAAgASgCCDYCCCAAIAEpAgA3AgAgAUEAOgALIAJBADYCDCABIAIoAgw2AgACQCAAIAFGIgENACADDQALIAAtAAtBB3YhAAJAIAENACAADQALIAJBEGokAAvXAQEEfyMAQRBrIgckAAJAIABFDQAgBCgCDCEGIAIgAWtBAnUiCEEASgRAIAAgASAIIAAoAgAoAjARBAAgCEcNAQsgAyABa0ECdSIBIAZIBEAgAAJ/IAdBBGogBiABayIBIAUQ5gIiBS0AC0EHdgRAIAUoAgAMAQsgBQsgASAAKAIAKAIwEQQAIQYgBRATGiABIAZHDQELIAMgAmtBAnUiAUEASgRAIAAgAiABIAAoAgAoAjARBAAgAUcNAQsgBCgCDBogBEEANgIMIAAhCQsgB0EQaiQAIAkLzgEBBH8jAEEQayIHJAACQCAARQ0AIAQoAgwhBiACIAFrIghBAEoEQCAAIAEgCCAAKAIAKAIwEQQAIAhHDQELIAMgAWsiASAGSARAIAACfyAHQQRqIAYgAWsiASAFEOgCIgUtAAtBB3YEQCAFKAIADAELIAULIAEgACgCACgCMBEEACEGIAUQExogASAGRw0BCyADIAJrIgFBAEoEQCAAIAIgASAAKAIAKAIwEQQAIAFHDQELIAQoAgwaIARBADYCDCAAIQkLIAdBEGokACAJC2kBAn8jAEEQayIDJAAgA0EMaiIEIAEoAhwiATYCACABQdyNA0cEQCABIAEoAgRBAWo2AgQLIAIgBEHUjwMQFiIBIAEoAgAoAhARAAA2AgAgACABIAEoAgAoAhQRAgAgBBAYIANBEGokAAtiAQJ/IwBBEGsiAiQAIAJBDGoiAyAAKAIcIgA2AgAgAEHcjQNHBEAgACAAKAIEQQFqNgIECyADQYyPAxAWIgBBkKACQaqgAiABIAAoAgAoAjARCgAaIAMQGCACQRBqJAAgAQtpAQJ/IwBBEGsiAyQAIANBDGoiBCABKAIcIgE2AgAgAUHcjQNHBEAgASABKAIEQQFqNgIECyACIARBzI8DEBYiASABKAIAKAIQEQAAOgAAIAAgASABKAIAKAIUEQIAIAQQGCADQRBqJAALJwEBfyMAQRBrIgMkACADIAI2AgwgAEHkACABIAIQtgEgA0EQaiQAC7sCAQR/IANB9IIDIAMbIgUoAgAhAwJAAn8CQCABRQRAIAMNAUEADwtBfiACRQ0BGgJAIAMEQCACIQQMAQsgAS0AACIDwCIEQQBOBEAgAARAIAAgAzYCAAsgBEEARw8LQdCCAygCACgCAEUEQEEBIABFDQMaIAAgBEH/vwNxNgIAQQEPCyADQcIBayIDQTJLDQEgA0ECdCgC4PgBIQMgAkEBayIERQ0DIAFBAWohAQsgAS0AACIGQQN2IgdBEGsgA0EadSAHanJBB0sNAANAIARBAWshBCAGQf8BcUGAAWsgA0EGdHIiA0EATgRAIAVBADYCACAABEAgACADNgIACyACIARrDwsgBEUNAyABQQFqIgEsAAAiBkFASA0ACwsgBUEANgIAQZTtAkEZNgIAQX8LDwsgBSADNgIAQX4LogEBAX8CfwJAIAAoAkwiAUEATgRAIAFFDQFBiIIDKAIAIAFB/////wNxRw0BCyAAKAIEIgEgACgCCEcEQCAAIAFBAWo2AgQgAS0AAAwCCyAAELoBDAELIAAgACgCTCIBQf////8DIAEbNgJMAn8gACgCBCIBIAAoAghHBEAgACABQQFqNgIEIAEtAAAMAQsgABC6AQsgACgCTBogAEEANgJMCwsgACAAIAEgACgCGEVyIgE2AhAgACgCFCABcQRAECMACwvMAQEDfwJAIAEQRCECIwBBEGsiAyQAIAJB9////wdNBEACQCACQQtJBEAgACACQf8AcToACyAAIQQMAQsgA0EIaiACQQtPBH8gAkEIakF4cSIEIARBAWsiBCAEQQtGGwVBCgtBAWoQfiADKAIMGiAAIAMoAggiBDYCACAAIAMoAgxBgICAgHhyNgIIIAAgAjYCBAsCQCACRSIADQAgAA0AIAQgASAC/AoAAAsgA0EAOgAHIAIgBGogAy0ABzoAACADQRBqJAAMAQsQOAALCxQAIABB6OgBNgIAIABBBGoQGCAAC3wBAn8gACAAKAJIIgFBAWsgAXI2AkggACgCFCAAKAIcRwRAIABBAEEAIAAoAiQRBAAaCyAAQQA2AhwgAEIANwMQIAAoAgAiAUEEcQRAIAAgAUEgcjYCAEF/DwsgACAAKAIsIAAoAjBqIgI2AgggACACNgIEIAFBG3RBH3UL8AICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgA2AgAgAyACIARrQXxxIgJqIgFBBGsgADYCACACQQlJDQAgAyAANgIIIAMgADYCBCABQQhrIAA2AgAgAUEMayAANgIAIAJBGUkNACADIAA2AhggAyAANgIUIAMgADYCECADIAA2AgwgAUEQayAANgIAIAFBFGsgADYCACABQRhrIAA2AgAgAUEcayAANgIAIAIgA0EEcUEYciIBayICQSBJDQAgAK1CgYCAgBB+IQUgASADaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLC5kBAQN8IAAgAKIiAyADIAOioiADRHzVz1o62eU9okTrnCuK5uVavqCiIAMgA0R9/rFX4x3HPqJE1WHBGaABKr+gokSm+BARERGBP6CgIQUgACADoiEEIAJFBEAgBCADIAWiRElVVVVVVcW/oKIgAKAPCyAAIAMgAUQAAAAAAADgP6IgBCAFoqGiIAGhIARESVVVVVVVxT+ioKELkgEBA3xEAAAAAAAA8D8gACAAoiICRAAAAAAAAOA/oiIDoSIERAAAAAAAAPA/IAShIAOhIAIgAiACIAJEkBXLGaAB+j6iRHdRwRZswVa/oKJETFVVVVVVpT+goiACIAKiIgMgA6IgAiACRNQ4iL7p+qi9okTEsbS9nu4hPqCiRK1SnIBPfpK+oKKgoiAAIAGioaCgC+wBAgJ8Bn8CQAJAIAMoAggiCEEATARARAAAAAAAAPA/IQYMAQsgAigCACEJIAQoAgAhCiACKAIEIQIgBCgCBCELIAEoAgAhDCABKAIEIQ0gAygCACEDRAAAAAAAAPA/IQZBACEEAkADQAJAIAMgBEECdGooAgAiAUEASA0AIAEgDU4NACABIAtODQQgASACTg0CIAwgAUEDdCIBaisDACIHIAEgCmorAwAgAKGjIAcgACAFIAEgCWorAwCgoKOiIAagIQYgCCAEQQFqIgRHDQEMAwsLDAILDAELIAYPC0HHOUHaIEG1AUGAORAAAAuKAQEBfwJAIAAoAgQgAUcEQCAAKAIAIgMEQCADQQRrKAIAEBELIAAgAUEATAR/QQAFIAFBgICAgARPDQIgAUECdEEQahAXIgFFDQIgAUFwcSIDIAE2AgwgA0EQags2AgALIAAgAjYCBA8LQQQQFSIAQfjfAjYCACAAQdDfAjYCACAAQZzgAkECEAEAC8wJAgt/AnwjAEHgAGsiBCQAAkACQAJAAkAgACgCBCIHIAJyIgZBAEhBACAAKAIAIgUbRQRAIAZBAEgNAyAAKAIIIAJIDQMgBCAHNgIYIARCADcCECAEIAA2AgwgBCACNgIIIAQgBzYCBCAEIAU2AgAgBCABNgIcIAcgASgCBEcNASADKAIEIQcgBCADKAIAIgY2AjggBCACNgI8IAJBAEgiBUEAIAYbDQQgBCAHNgJQIAQgAzYCRCAEQQA2AkggBQ0DIAIgB0oNAwJAIAJFDQAgAkEDdCIHRQ0AIAZBACAH/AsACyAEQoCAgICAgID4PzcDWCAEQThqIQwjAEEgayIHJAACQAJAAkACQCAEKAIIQQFGBEAgBCsDWCEQIAQoAgAiBkEAIAQoAgQiBUEASBsNCSABKAIAIghBACABKAIEIglBAEgbDQkgBSAJRw0CAkAgBUUNACAFQQBMDQQgBisDACAIKwMAoiEPQQEhCSAFQQFGDQAgBUEBayIKQQNxIQ0gBUECa0EDTwRAIApBfHEhDkEAIQoDQCAPIAYgCUEDdCIFaisDACAFIAhqKwMAoqAgBiAFQQhqIgtqKwMAIAggC2orAwCioCAGIAVBEGoiC2orAwAgCCALaisDAKKgIAYgBUEYaiIFaisDACAFIAhqKwMAoqAhDyAJQQRqIQkgCkEEaiIKIA5HDQALCyANRQ0AQQAhBQNAIA8gBiAJQQN0IgpqKwMAIAggCmorAwCioCEPIAlBAWohCSAFQQFqIgUgDUcNAAsLIAwoAgAiBiAQIA+iIAYrAwCgOQMADAELIAcgBCgCGDYCGCAHIAQpAhA3AxAgByAE/QACAP0LAwAjAEEQayIGJAACQCABKAIEIghBgICAgAJJBEACQCAEKwNYIQ8gBygCDCEJIAcoAgggBygCBCAHKAIAIQ4Cf0EBIAEoAgAiBQ0AGiAIQQN0IQUgCEGAgAFNBEAgBiAFQR5qQXBxayIFJABBAAwBCyAFQRBqEBciBUUNASAFQXBxIgsgBTYCDCALQRBqIQUgASgCAEEARwshCyAGIAkoAgQ2AgwgBiAONgIIIAZBATYCBCAGIAU2AgAgDCgCACIJBEAgDCgCBEEASA0MCyAGQQhqIAYgCUEBIA8QSCAIQYGAAUkgC3JBAXFFBEAgBUEEaygCABARCyAGQRBqJAAMAgsLQQQQFSIAQfjfAjYCACAAQdDfAjYCACAAQZzgAkECEAEACwsgB0EgaiQADAILQbA5QfkaQdIAQewLEAAAC0HmOUHbGUGbA0GGCRAAAAsgACgCBCIHIAJyIgZBAEhBACAAKAIAIgUbDQQgBkEASA0DIAAoAgggAkgNAyADKAIEIgYgAkgNAyADKAIAIQggBCAGNgI0IARBADYCLCAEIAM2AiggBCACNgIgIAQgCDYCHCAEIAc2AhggBEIANwIQIAQgADYCDCAEIAI2AgggBCAHNgIEIAQgBTYCACABKAIEIAdHDQIgBEKAgICAgICA+L9/NwM4IAEgBCAEQRxqIAwQjQIgBEHgAGokAA8LDAMLQao6QaAbQeIAQeoMEAAAC0GWOEHLG0GwAUHLFRAAAAtBzw9Bqx9BkwFB/RgQAAALQZQzQY0hQbIBQcokEAAAC8wEAgZ/An0jAEEQayIHJAAgACgCBCIFQQBMBH1DAAAAAAUgBUEDcSEJIAAoAhAgACgCDCABbEECdGohBgJAIAVBBEkEQCACIQUMAQsgBUH8////B3EhCiACIQUDQCAGKgIMIAUqAgyTIgwgDJQgBioCCCAFKgIIkyIMIAyUIAYqAgQgBSoCBJMiDCAMlCAGKgIAIAUqAgCTIgwgDJQgC5KSkpIhCyAFQRBqIQUgBkEQaiEGIAhBBGoiCCAKRw0ACwsgCQRAQQAhCANAIAYqAgAgBSoCAJMiDCAMlCALkiELIAZBBGohBiAFQQRqIQUgCEEBaiIIIAlHDQALCyALkQshCyAAKAIcIAFBBHRqIQECQCALIAMqAgBfRQ0AIAcgASgCBDYCDCAHIAs4AgggBC0ABCEFIARBCGogB0EIaiAHQQxqEPEDAkAgBUUEQCAEKAIAIAQoAgwgBCgCCGtBA3VHDQEgBEEBOgAEDAELIAQoAgggBCgCDBBLIAQgBCgCDEEIazYCDAsgBC0ABEEBRw0AIAMgBCgCCCoCADgCAAsCQAJAIAEqAgAiDCALXgRAAkAgASgCCCIFRQ0AIAsgAyoCAJMgDF9FDQAgACAFIAIgAyAEEKABCyABKAIMIgVFDQIgASoCACALIAMqAgCSXw0BDAILAkAgASgCDCIFRQ0AIAsgAyoCAJIgDGBFDQAgACAFIAIgAyAEEKABCyABKAIIIgVFDQEgASoCACALIAMqAgCTYEUNAQsgACAFIAIgAyAEEKABCyAHQRBqJAALBABBAQvRBAIGfwJ9IwBBEGsiByQAIAAoAgQiBUEATAR9QwAAAAAFIAVBA3EhCSAAKAIQIAAoAgwgAWxBAnRqIQYCQCAFQQRJBEAgAiEFDAELIAVB/P///wdxIQogAiEFA0AgBioCDCAFKgIMkyIMIAyUIAYqAgggBSoCCJMiDCAMlCAGKgIEIAUqAgSTIgwgDJQgBioCACAFKgIAkyIMIAyUIAuSkpKSIQsgBUEQaiEFIAZBEGohBiAIQQRqIgggCkcNAAsLIAkEQEEAIQgDQCAGKgIAIAUqAgCTIgwgDJQgC5IhCyAGQQRqIQYgBUEEaiEFIAhBAWoiCCAJRw0ACwsgC0MAAAA/lAshCyAAKAIcIAFBBHRqIQECQCALIAMqAgBfRQ0AIAcgASgCBDYCDCAHIAs4AgggBC0ABCEFIARBCGogB0EIaiAHQQxqEPEDAkAgBUUEQCAEKAIAIAQoAgwgBCgCCGtBA3VHDQEgBEEBOgAEDAELIAQoAgggBCgCDBBLIAQgBCgCDEEIazYCDAsgBC0ABEEBRw0AIAMgBCgCCCoCADgCAAsCQAJAIAEqAgAiDCALXgRAAkAgASgCCCIFRQ0AIAsgAyoCAJMgDF9FDQAgACAFIAIgAyAEEKIBCyABKAIMIgVFDQIgASoCACALIAMqAgCSXw0BDAILAkAgASgCDCIFRQ0AIAsgAyoCAJIgDGBFDQAgACAFIAIgAyAEEKIBCyABKAIIIgVFDQEgASoCACALIAMqAgCTYEUNAQsgACAFIAIgAyAEEKIBCyAHQRBqJAALgAoBDH8jAEGgAWsiASQAAkAgAC0AEEEBRw0AIAAgACgCBEEBaiICNgIEIAAoAgAgAkcEQCACIAAoAgxvDQELIAFBADYCaCABQcTzATYCTCABQbDzATYCFCABQdTzASgCACIENgIMIAFBDGoiAyICIARBDGsoAgBqQdjzASgCADYCACABQQA2AhAgAiABKAIMQQxrKAIAaiIEIAFBGGoiAhD7ASAEQQA6AFAgBEKAgICAcDcCSCABQdzzASgCACIENgIUIAFBFGoiCiAEQQxrKAIAakHg8wEoAgA2AgAgAUHQ8wEoAgAiBDYCDCADIARBDGsoAgBqQeTzASgCADYCACABQcTzATYCTCABQZzzATYCDCABQejoATYCGCABQbDzATYCFCABQRxqEKwBIAH9DAAAAAAAAAAAAAAAAAAAAAD9CwIwIAFBQGtCADcCACAB/QwAAAAAAAAAAAAAAAAAAAAA/QsCICABQYDsATYCGCABQRg2AkggAiIDQQA2AiwgAygCICIEIANBIGoiAiADLAArIgtBAEgiCBshBiADKAIkIAsgCBshByADKAIwIglBCHEEQCADIAY2AgwgAyAGNgIIIAMgBiAHaiIINgIQIAMgCDYCLAsCQCAJQRBxRQ0AIAMgBiAHajYCLAJAIAdBCiADKAIoQf////8HcUEBayIIIAtBAE4bIglJBEAgAiAJIAdrEKkCDAELAkAgC0EASARAIAMgCDYCJAwBCyADQQo6ACsgAiEECyAEIAlqQQA6AAALIAMgBjYCGCADIAY2AhQgAyAGIAMoAiQgAywAKyICIAJBAEgbajYCHCADLQAwQQNxRQ0AAkAgB0EASARAIAZBAmsgBkH/////B2ogB0H/////B2siBEEASCICGyEGQQEgBCACGyEHDAELIAdFDQELIAMgBiAHajYCGAsgCiAAKAIUIABBFGogACwAHyIEQQBIIgIbIAAoAhggBCACGxAaQYMpQQEQGhogACgCCCICIAAoAgRsIAAoAgBtIQQgAkEASgRAA0AgCkG6LEG1KkHmygAgBCAFRhsgBCAFShtBARAaGiAFQQFqIgUgACgCCEgNAAsLIApB2MoAQQIQGiAAKAIEQeQAbCAAKAIAbRBnQejKAEEDEBoaAkACfyABKAJIIgJBEHEEQCABKAJEIgUgASgCMCICSQRAIAEgAjYCRCACIQULIAFBLGoMAQsgAkEIcUUEQEEAIQUgAUEAOgALIAEhAgwCCyABKAIoIQUgAUEgagshAgJAIAUgAigCACIDayIFQfj///8HSQRAIAVBC08EQCAFQQdyIgRBAWoQEiECIAEgBEH/////B2s2AgggASACNgIAIAEgBTYCBAwCCyABIAU6AAsgASECIAUNAUEAIQUMAgsQeAALIAVFDQAgAiADIAX8CgAACyACIAVqQQA6AABBsIQDIAEoAgAgASABLAALIgRBAEgiAhsgASgCBCAEIAIbEBoQgAEgASwAC0EASARAIAEoAggaIAEoAgAQEQsgACgCBCAAKAIARgRAQbCEA0HwygBBARAaGgsgAUHM8wEoAgAiADYCDCAAQQxrKAIAIAFBDGpqQezzASgCADYCACABQYDsATYCGCABQfDzASgCADYCFCABLABDQQBIBEAgASgCQBogASgCOBARCyABQejoATYCGBAYIAFBzABqEE8aCyABQaABaiQAC7/yAwVRfw98BHsDfgV9IwBBsAFrIh4kACAEKAJo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BkH/////ByAEbUoNDQsgIyAEIAZsIAYgBBAbIAEoAgghBCAjQgA3AgwgBEEASA0CIARBgICAgARPDQwgBEEBdCIGICMoAhBBAXRHBEAgIygCDCIIBEAgCEEEaygCABARCyAjIAZBAEwEf0EABSAGQYCAgIACTw0OIAZBA3RBEGoQFyIGRQ0OIAZBcHEiCCAGNgIMIAhBEGoLNgIMCyAjIAQ2AhAgI0EAOgAcICMgBDYCFCABKAIEIAEoAghIDQEgASgCACEGICMgARBGAkAgIygCCCAjKAIEbCILQQBMDQAgIygCACEIQQAhBAJAIAtBBEkNACAIIAZrQRBJDQAgC0H+////B3EhBEEAIQEDQCAIIAFBA3QiCmogBiAKav0AAwD9CwMAIAFBAmoiASAERw0ACyAEIAtGDQELIAsgBCIBa0EDcSIKBEADQCAIIAFBA3QiDGogBiAMaisDADkDACABQQFqIQEgBUEBaiIFIApHDQALCyAEIAtrQXxLDQADQCAIIAFBA3QiBGogBCAGaisDADkDACAIIARBCGoiBWogBSAGaisDADkDACAIIARBEGoiBWogBSAGaisDADkDACAIIARBGGoiBGogBCAGaisDADkDACABQQRqIgEgC0cNAAsLIwBB4ABrIhEkACAjKAIIISYgIygCBCExIBFBADYCXCARQgA3AlQCQCAxQSByQQBOBEAgMUEARyAxQf///x9KcQ0OIBFB1ABqIDFBBXQgMUEgEBsgEUEANgJQIBFCADcCSCAmQSByQQBIDQQgJkEARyAmQf///x9KcQ0OIBFByABqICZBBXQgJkEgEBsCQCAmIDEgJiAxSBsiN0EATA0AQSAgNyA3QSBOGyE9A0AgIygCBCEGICMoAgAhBSARICYgB2siBDYCNCARIDEgB2siATYCMCARIAUgB0EDdCIKaiAGIAdsQQN0ajYCLCABIARyQQBIQQAgBRsNLyARIAY2AkQgESAHNgJAIBEgBzYCPCARICM2AjggASAHckEASA0pIAQgB3JBAEgNKSAHIAYgAWtKDSkgByAjKAIIIARrSg0pICMoAgwiBiAjKAIQIghBA3RqIQwgCCAjKAIUIgUgBSAIShsiE0EATiIJIAZFciEOAkACQAJAIARBME4EQCA9IDcgB2siCyALID1KGyILIAdqICZHDQELIA5FDTIgE0EA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BEADQCATIAFBA3QiBGogBCAOav0AAwD9CwMAIAFBAmoiASAGRw0ACyAGIgQgC0YNAQtBACEFIAsgBCIBa0EDcSIdBEADQCATIAFBA3QiFWogDiAVaisDADkDACABQQFqIQEgBUEBaiIFIB1HDQALCyAEIAtrQXxLDQADQCATIAFBA3QiBGogBCAOaisDADkDACATIARBCGoiBWogBSAOaisDADkDACATIARBEGoiBWogBSAOaisDADkDACATIARBGGoiBGogBCAOaisDADkDACABQQRqIgEgC0cNAAsLIAdBAWoiByALRw0ACwsgCkIANwIAICMgEiAKEOIDIAooAgAiAUUNACABQQRrKAIAEBELIApBEGokAAwBCyAILQAcRQ0DIAgoAggiAUEASA0GIAgoAgQiBEEASA0GIBZBADYCNCAWQQA6ACwgFiAINgIkIBYgCDYCICAWIAEgBCABIARJGzYCMCABRQ0GIBZBATYCHCAWQQA6ABQgFiAINgIMIBYgCDYCCCAWIAFBAWs2AhggFkEgaiESIBZBCGohIyMAQRBrIgokAAJAIBctAChBAXEiBCAXLQAnckUNACASKAIAIgYoAgQhASAKIBdBPGogBkEEaiAEGygCACIENgIEIAogATYCACABIARyQQBIDScgFyAKEC8gFygCBCEMIBcoAgAhCQJAIBcoAggiB0EATA0AIAxBAEwNACAMQf7///8HcSEEQQAhBiAMQQJJIQsDQCAJIAYgDGxBA3RqIQVBACEBAkAgC0UEQCAG/REhZv0MAAAAAAEAAAAAAAAAAAAAACFlA0AgBSABQQN0aiBlIGb9N/3HAf0MAAAAAAAA8D8AAAAAAADwP/1O/QsDACBl/QwCAAAAAgAAAAIAAAACAAAA/a4BIWUgAUECaiIBIARHDQALIAQiASAMRg0BCwNAIAUgAUEDdGpEAAAAAAAA8D9EAAAAAAAAAAAgASAGRhs5AwAgAUEBaiIBIAxHDQALCyAGQQFqIgYgB0cNAAsLIBcoAlghESAXKAI8IgtBAEhBACAXKAJUIg0bDSUgC0EASA0fIAsgEUoNHyAXKAJcIAtIDR8gCyAMSg0fIAcgC0gNHyALBEAgC0H+////B3EhBkEAIQcgCSANIBEgC0EBayIBbCALakEDdGpJBH8gDSAJIAEgDGwgC2pBA3RqSQVBAAsg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EgAgAEUEQEEADwsgACABELkBC4kCAAJAIAAEfyABQf8ATQ0BAkBB0IIDKAIAKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMPCyABQYCABGtB//8/TQRAIAAgAUE/cUGAAXI6AAMgACABQRJ2QfABcjoAACAAIAFBBnZBP3FBgAFyOgACIAAgAUEMdkE/cUGAAXI6AAFBBA8LC0GU7QJBGTYCAEF/BUEBCw8LIAAgAToAAEEBC0EBAn8jAEEQayIBJABBfyECAkAgABCZAQ0AIAAgAUEPakEBIAAoAiARBABBAUcNACABLQAPIQILIAFBEGokACACC0YBAX8gAEHM8wEoAgAiATYCACAAIAFBDGsoAgBqQezzASgCADYCACAAQfDzASgCADYCCCAAQQxqEP4BGiAAQUBrEE8aIAALvwMBA38gAEGo0wA2AgAgACIBKAKMARARIAFBADYCjAEgASgCCARAA0AgAkECdCIAIAEoApQBaigCAEEASgRAIAEoApABIABqKAIAEBELIAJBAWoiAiABKAIISQ0ACwsgASgCkAEQESABQQA2AgggAUEANgKQASABKAJEIQAgAUEANgJEIAAEQCAAEIcCEBELIAEoAowCIgAEQANAIAAoAgAgABARIgANAAsLIAEoAoQCIQAgAUEANgKEAiAABEAgASgCiAIaIAAQEQsgASgCzAEiAARAA0AgACgCACAAEBEiAA0ACwsgASgCxAEhACABQQA2AsQBIAAEQCABKALIARogABARCyABKAKUASIABEAgASAANgKYASABKAKcARogABARCyABKAJsIgMEQCADIgIgASgCcCIARwRAA0AgAyAAQRhrIgBHDQALIAEoAmwhAgsgASADNgJwIAEoAnQaIAIQEQsgASgCSCIDBEAgAyICIAEoAkwiAEcEQANAIAMgAEEYayIARw0ACyABKAJIIQILIAEgAzYCTCABKAJQGiACEBELIAEoAkQhACABQQA2AkQgAARAIAAQhwIQEQsgAQtOAQF/IABBwOwBNgIAIAAQowMaAkAgAC0AYEEB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IgMgAUYEQCAAIAFBASABIAEQ0gICfyAALQALQQd2BEAgACgCAAwBC0EACxoMAQsCfyAALQALQQd2BEAgACgCAAwBC0EACxogBA0AIAAiASADQQFqQf8AcToACwwBCyAAKAIAIQEgACADQQFqNgIECyABIANBAnRqIgAgAigCDDYCACACQQA2AgggACACKAIINgIEIAJBEGokAAsgACAAQfjfAjYCACAAQejgAjYCACAAQQRqIAEQrQIgAAtPAQF/IwBBEGsiAyQAIAMgATYCCCADIAA2AgwgAyACNgIEQQAhASADQQRqIgAoAgAgAygCDE8EQCAAKAIAIAMoAghJIQELIANBEGokACABCzYBAX8jAEEQayIDJAAgAyABNgIMIAMgAjYCCCAAIAMoAgw2AgAgACADKAIINgIEIANBEGokAAsXACAAKAIIEChHBEAgACgCCBCAAwsgAAtaAQF/IwBBEGsiAyQAIAMgAjYCDCADQQhqIANBDGoQTSAAIAEQuQEhASgCACIABEBB0IIDKAIAGiAABEBB0IIDQajxAiAAIABBf0YbNgIACwsgA0EQaiQAIAELkgsDDH8CfQF+IwBBIGsiByQAAkACQAJAIAEoAgQiAyABKAIAIgZrQQN1IAJJDQAgB0EANgIYIAdCADcCEAJAIAMgBkYNAANAIAcgBioCAIw4AggCQAJAAkACQCAHKAIUIgQgBygCGCIDSQRAIAQgByoCCDgCACAEIAYoAgQ2AgQgBEEIaiEDDAELIAQgBygCECIKayILQQN1IgVBAWoiCEGAgICAAk8NASALQf////8BIAMgCmsiBEECdSIDIAggAyAISxsgBEH4////B08bIgkEfyAJQYCAgIACTw0DIAlBA3QQEgVBAAsiA2oiCCAHKgIIOAIAIAggBigCBDYCBCAIIAVBA3RrIQQgCwRAIAQgCiAL/AoAAAsgByADIAlBA3RqNgIYIAcgCEEIaiIDNgIUIAcgBDYCECAKRQ0AIAoQEQsgByADNgIUAkAgAyAHKAIQIgtrQQN1IgRBAkgNACALIARBAmtBAXYiBkEDdGoiBSoCACIQIANBCGsiBCoCACIPXSAFKAIEIgkgA0EEaygCACIISSAPIBBcG0EBRw0AA0ACQCAFIQMgBCAJNgIEIAQgEDgCACAGRQ0AIAMhBCALIAZBAWtBAXYiBkED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A3FFDQAgAkUNACABQf8BcSEEA0AgAC0AACAERg0CIAJBAWsiAkEARyEDIABBAWoiAEEDcUUNASACDQALCyADRQ0BAkAgAUH/AXEiAyAALQAARg0AIAJBBEkNACADQYGChAhsIQMDQEGAgoQIIAAoAgAgA3MiBGsgBHJBgIGChHhxQYCBgoR4Rw0CIABBBGohACACQQRrIgJBA0sNAAsLIAJFDQELIAFB/wFxIQEDQCABIAAtAABGBEAgAA8LIABBAWohACACQQFrIgINAAsLQQAL/wMCAn4FfyMAQSBrIgUkACABQv///////z+DIQICfiABQjCIQv//AYMiA6ciBEGB+ABrQf0PTQRAIAJCBIYgAEI8iIQhAiAEQYD4AGutIQMCQCAAQv//////////D4MiAEKBgICAgICAgAhaBEAgAkIBfCECDAELIABCgICAgICAgIAIUg0AIAJCAYMgAnwhAgtCACACIAJC/////////wdWIgQbIQAgBK0gA3wMAQsCQCAAIAKEUA0AIANC//8BUg0AIAJCBIYgAEI8iIRCgICAgICAgASEIQBC/w8MAQsgBEH+hwFLBEBCACEAQv8PDAELQYD4AEGB+AAgA1AiBhsiCCAEayIHQfAASgRAQgAhAEIADAELIAIgAkKAgICAgIDAAIQgBhshAkEAIQYgBCAIRwRAIAVBEGogACACQYABIAdrEDYgBSkDECAFKQMYhEIAUiEGCyAFIAAgAiAHEGwgBSkDCEIEhiAFKQMAIgJCPIiEIQACQCAGrSACQv//////////D4OEIgJCgYCAgICAgIAIWgRAIABCAXwhAAwBCyACQoCAgICAgICACFINACAAQgGDIAB8IQALIABCgICAgICAgAiFIAAgAEL/////////B1YiBBshACAErQshAiAFQSBqJAAgAUKAgICAgICAgIB/gyACQjSGhCAAhL8LRAEBfyMAQRBrIgUkACAFIAEgAiADIARCgICAgICAgICAf4UQPCAFKQMAIQEgACAFKQMINwMIIAAgATcDACAFQRBqJAALQwEBfyAAQQRqIgJBADYCHCACQbT3ATYCACACQbTwATYCACAAQdTrATYCACACQejrATYCACAAQcjrASgCAGogARC3AQtDAQF/IABBBGoiAkEANgIcIAJBtPcBNgIAIAJBgO0BNgIAIABB3OkB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IgBNDQAgCiABQQN0aisDACEPIABBAWohAyAGKAIYIQggBigCDCEJIAcgAGtBAXEEQCAFIAggAEECdGooAgBBA3RqIgwgCSAAQQN0aisDACAPoiAMKwMAoDkDACADIQALIAMgB0YNAANAIAUgCCAAQQJ0aigCAEEDdGoiAyAJIABBA3RqKwMAIA+iIAMrAwCgOQMAIAUgCCAAQQFqIgNBAnRqKAIAQQN0aiIMIAkgA0EDdGorAwAgD6IgDCsDAKA5AwAgAEECaiIAIAdHDQALCyABQQFqIgEgC0cNAAsMAQsCQCAAQYCAgIAESQRAIAIgAEECdCIBEBIiADYCCCACIAA2AgQgAiAAIAFqNgIMIAJBADYCACACKAIMIABLBEBBBBASEF4hAUEYEBIiACABNgIAIAAgBP0AAgD9CwIEIAAgAigCADYCFAwCCwJAAkAgAigCCCACKAIEIgFrQQJ1QQFqIgBBgICAgARJBEBB/////wMgAigCDCABayIBQQF1IgMgACAAIANJGyABQfz///8HTxsiAAR/IABBgICAgARPDQIgAEECdBASBUEACxpBBBASEF4hAUEYEBIiACABNgIAIAAgBP0AAgD9CwIEIAAgAigCADYCFAwCCxAUAAsQJAALECMACxAUAAsQIwALIAJBEGokAAsgBEEgaiQAC7wBAQF/IAAoAqgCIgEEQCABQQRrKAIAEBELIAAoAqACIgEEQCABQQRrKAIAEBELIABByAFqENUBGiAAKAK8ASIBBEAgAUEEaygCABARCyAAKAKwASIBBEAgAUEEaygCABARCyAAQdgAahDVARogACgCSCIBBEAgAUEEaygCABARCyAAKAIYIgEEQCABQQRrKAIAEBELIAAoAgwiAQRAIAFBBGsoAgAQEQsgACgCACIABEAgAEEEaygCABARCwuWIwIOfwN9IwBBEGsiDiQAA0AgAUEUayERIAFBGGshDyABQQxrIRIgAUEQayEQIAFBBGshDSABQQhrIQoCQANAAkACQAJAAkACQCABIABrQQN1IgYOBgYGAAECAwQLIAFBBGsiAyoCACITIAAqAgQiFF0gAUEIayIEKAIAIgEgACgCACICSCABIAJGG0EBRw0FIAAgATYCACAEIAI2AgAgACATOAIEIAMgFDgCAAwFCyABQQRrIgMqAgAiFSAAKgIMIhRdIAFB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QYCAgIAETw0RIAZBAnQQEgVBAAsiEWoiCCAQNgIAIAggGUECdGshACATBEAgACABIBP8CgAACyAIQQRqIQggESAGQQJ0aiERIAEEQCABEBELIAAhAQsgCSASSQRAIAkgKjgCACAJQQRqIQkMAQsgCSACayIGQQJ1IhRBAWoiAEGAgICABE8NDiAGQf////8DIBIgAmsiCUEBdSIQIAAgACAQSRsgCUH8////B08bIhAEfyAQQYCAgIAETw0QIBBBAnQQEgVBAAsiEmoiCSAqOAIAIAkgFEECdGshACAGBEAgACACIAb8CgAACyAJQQRqIQkgEiAQQQJ0aiESIAIEQCACEBELIAAhAgsgF0EBaiIXIAUoAgQiBkkNAQwCCwsMCwsgCCEACyAGBEAgACABa0ECdSERIAUoAjQgBSgCJCAObEECdGohFyAFKAIcIAUoAgwgDmxBAnRqIQlBACEAA0AgFyAAQQJ0IghqAn0gACARSQRAIAggCWogASAIaigCADYCACACIAhqKgIADAELIAkgAEECdGpBfzYCAEP//39/CzgCACAAQQFqIgAgBkcNAAsLIAIEQCACEBELIAEEQCABEBELIA5BAWoiDiAFKAIASQ0ACwsLAkAgBy0AqAJBAUcNAAJAIAUoAgwgBSgCCGwiAkUNACAFKAIcIgEhACACQQJ0IghBBGsiBkEMTwRAIAEgBkECdkEBaiIJQfz///8HcSIGQQJ0aiEAA0AgMCABIANBAnRq/QACAP0M//////////////////////04/bEBITAgA0EEaiIDIAZHDQALIDAgMCAw/Q0ICQoLDA0ODwABAgMAAQID/a4BIjAgMCAw/Q0EBQYHAAECAwABAgMAAQID/a4B/RsAIQMgBiAJRg0BCyABIAhqIQEDQCADIAAoAgBBf0dqIQMgAEEEaiIAIAFHDQALCyALQRRqIgAgAhCoASALIABBlcoAQSkQPyIAKAIINgIoIAsgACkCADcDICAAQgA3AgAgAEEANgIIIAsgC0EgakHcyQBBBBAwIgAoAgg2AjggCyAAKQIANwMwIABCADcCACAAQQA2AgggC0EIaiIAIAMQqAEgCyALQTBqIAsoAgggACALLAATIgBBAEgiARsgCygCDCAAIAEbEDAiACgCCDYCSCALIAApAgA3A0AgAEIANwIAIABBADYCCCAL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BCAEXg0BCwsgASAEOAIEIAEgAjYCAAsgMachCyApIAm+Xg0ACwsgCigCACIABEAgCiAANgIEIAooAggaIAAQEQsgCigCDCIABEAgCigCFBogABARCyAGBEAgBhARCyAOQQFqIg4gCigCGEkNAQwDCwsMBwsMBwsgCkEYahBQIApBmANrIAdHBEAgB0HAA2ogCigCKCIAIAooAiwiASABIABrQQJ1ECkgByAKKAI0IAcoAsADIgAgACAHKALEA0YbNgLMAyAHIAooAiA2ArgDIAcgCigCJDYCvAMLAkAgCkGYA2sgB0YEQCAHKALYAyEAIAcoAtwDIQMgBygC1AMhASAHKALQAyECDAELIAdB2ANqIAooAkAiACAKKAJEIgEgASAAa0ECdRApIAcgCigCTCAHKALYAyIAIAAgBygC3AMiA0YbNgLkAyAHIAooAjgiAjYC0AMgByAKKAI8IgE2AtQDCwJAIAEgAmwiASADIABrQQJ1IgJLBEAgB0HYA2ogASACaxAsIAcoAtgDIQAMAQsgASACTw0AIAcgACABQQJ0ajYC3AMLIAcgADYC5AMgCigCWCIABEAgCiAANgJcIAooAmAaIAAQEQsgCigCQCIABEAgCiAANgJEIAooAkgaIAAQEQsgCigCKCIARQ0AIAogADYCLCAKKAIwGiAAEBELIAooAnAiAARAIAogADYCdCAKKAJ4GiAAEBELIApBgAFqJAAMAwsgBigCACAGIAsbIgYpAABC5eqN45aN2bLhAIUgBjEACELuAIWEQgBSDQAgABDNAyEGIAEEQCADIQ1BACEDIwBBgAFrIgokACAKIAIoAgAiDDYCaCACKAIEIQUgCkEANgJ4IApCADcCcCAKIAU2AmwgAigCDCIJIAIoAggiCEYiB0UEQCAJIAhrIgFBAEgNBSAKIAEQEiIDNgJwIAogASADaiILNgJ4IAEEQCADIAggAfwKAAALIAogCzYCdAsgBiELIAogAigCFCIBIAMgBxs2AnwCQCAAIgcoAvABIAAsAPcBIgAgAEEASCIAG0EDRw0AIAcoAuwBIAdB7AFqIAAbIgAvAABB5N4BcyAALQACQfQAc3INACAIIAlGBEAgCkHwAGogASABIAUgDGwiAEECdGogABApIAooAmghDCAKKAJwIQMLIAogAzYCfCAMRQRAQQAhDAwBCyAKKAJs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QQBODQAgBSgCKBogBSgCIBARCyAMKAJAIgAEQCAMIAA2AkQgDCgCSBogABARCyAMKAIoIgAEQCAMIAA2AiwgDCgCMBogABARCyAMKAIQIgAEQCAMIAA2AhQgDCgCGBogABARCyAFQaABaiQAIAooAmghDAtBACECIApBADYCMCAKQgA3AiggCiANNgIkIAogDDYCICAKIA02AhwgCiAMNgIYAkAgDCANbCIARQRAIApBADYCSCAKQgA3AkAgCiANNgI8IAogDDYCOCAKQQA2AjQMAQsgAEGAgICABE8NBiAKIABBAnQiARASIgA2AiggCiAAIAFqIgI2AjAgAQRAIABB/wEgAfwLAAsgCiANNgI8IAogDDYCOCAKIAA2AjQgCiACNgIsIAogARASIgI2AkAgCiABIAJqIgM2AkggAiEAAkAgAUEEayIBQQxPBEAgACABQQJ2QQFqIghB/P///wdxIgZBAnRqIQBBACEBA0AgAiABQQJ0av0M//9/f///f3///39///9/f/0LAgAgAUEEaiIBIAZHDQALIAYgCEYNAQsDQCAAQf////sHNgIAIABBBGoiACADRw0ACwsgCiADNgJECyAK/QwAAAAAAAAAAAAAAAAAAAAA/QsCWCAKQgA3AlAgCiACNgJMAkAgDEUNACAEQwAAgD+SISggB0HYAGohFyAHQYQBaiEWAkADQAJAIAcoAkwhACAKQQA2AhQgCkIANwIMAn8gAARAIABBAEgNCyAAQQFrQQV2QQFqIgFBAnQQEiECIAogATYCFCAKQQA2AhAgCiACNgIMIApBDGogABCfAgsgCiAWIApB6ABqIBEgFxDJA0EAIQ4gCigCACIFIQBBACEIQQAhCUEAIQNBACEMQQAgBSAKKAIEIhpGDQAaA0BDAAAAACEmAkAgCygCBCICIAUoAgAiCGwiACACIAhBAWpsIg9GDQAgCygCFCIQIABBAnRqIQAgCigCfCAKKAJsIBFsQQJ0aiEBQQAhBiACQQNxIhIEQANAIAAqAgAgASoCAJMiBCAElCAmkiEmIAFBBGohASAAQQRqIQAgBkEBaiIGIBJHDQALCyACQQFrQf////8DcUEDSQ0AIBAgD0ECdGohAgNAIAAqAgwgASoCDJMiBCAElCAAKgIIIAEqAgiTIgQgBJQgACoCBCABKgIEkyIEIASUIAAqAgAg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NwIAIABBADYCCCAFQbABaiIAIBQQPiAFIAVBEGogBSgCsAEgACAFLAC7ASIAQQBIIgEbIAUoArQBIAAgARsQMCIAKAIINgJoIAUgACkCADcDYCAAQgA3AgAgAEEANgIIIAVB4ABqIBIQNyAFLABrQQBIBEAgBSgCaBogBSgCYBARCyAFLAC7AUEASARAIAUoArgBGiAFKAKwARARCyAFLAAbQQBIBEAgBSgCGBogBSgCEBARCyAFLADbAUEASARAIAUoAtgBGiAFKALQARARCyAFLADLAUEASARAIAUoAsgBGiAFKALAARARCyAGKAIAIQMgBUEANgJ4IAVCADcCcCAFIA42AmwgBSADNgJoIAUgDjYCZCAFIAM2AmACQCADIA5sIghFBEBBACECIAVBADYCkAEgBUIANwKIASAFIA42AoQBIAUgAzYCgAEgBUEANgJ8DAELIAhBgICAgARPDQkgBSAIQQJ0IgEQEiIANgJwIAUgACABaiICNgJ4IAEEQCAAQf8BIAH8CwALIAUgDjYChAEgBSADNgKAASAFIAA2AnwgBSACNgJ0IAUgARASIgI2AogBIAUgASACaiILNgKQASACIQACQCABQQRrIgFBDE8EQCAAIAFBAnZBAWoiCUH8////B3EiB0ECdGohAEEAIQEDQCACIAFBAnRq/Qz///9/////f////3////9//QsCACABQQRqIgEgB0cNAAsgByAJRg0BCwNAIABB/////wc2AgAgAEEEaiIAIAtHDQALCyAFIAs2AowBCyAFIAI2ApQBIAVCADcCqAEgBf0MAAAAAAAAAAAAAAAAAAAAAP0LApgBIAVBADYCKCAFQgA3AiAgBSAONgIcIAUgAzYCGCAFIA42AhQgBSADNgIQAkAgCEUEQEEAIQIgBUEANgJAIAVCADcCOCAFIA42AjQgBSADNgIwIAVBADYCLAwBCyAFIAhBAnQiARASIgA2AiAgBSAAIAFqIgI2AiggAQRAIABB/wEgAfwLAAsgBSAONgI0IAUgAzYCMCAFIAA2AiwgBSACNgIkIAUgARASIgI2AjggBSABIAJqIgM2AkAgAiEAAkAgAUEEayIBQQxPBEAgACABQQJ2QQFqIgtB/P///wdxIghBAnRqIQBBACEBA0AgAiABQQJ0av0M////f////3////9/////f/0LAgAgAUEE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ASAFIAApAgA3A8ABIABCADcCACAAQQA2AgggBUHAAWogEhA3IAUsAMsBQQBIBEAgBSgCyAEaIAUoAsABEBELIAUsALsBQQBIBEAgBSgCuAEaIAUoArABEBELIAUsAA9BAEgEQCAFKAIMGiAFKAIEEBELIAGyICcgBigCALOUICaUXQRAIAVBBGoiACAZED4gBSAAQbPJAEEoED8iACgCCDYCuAEgBSAAKQIANwOwASAAQgA3AgAgAEEANgIIIAUgBUGwAWpBlA9BCxAwIgAoAgg2AsgBIAUgACkCADcDwAEgAEIANwIAIABBADYCCCAFQcABaiASEDcgBSwAywFBAEgEQCAFKALIARogBSgCwAEQEQsgBSwAuwFBAEgEQCAFKAK4ARogBSgCsAEQEQsgBSwAD0EASARAIAUoAgwaIAUoAgQQEQsgBSgC0AEiAgRAIAIiASAFKALUASIARwRAA0AgAEEMayIBKAIAIgMEQCAAQQhrIAM2AgAgAEEEaygCABogAxARCyABIgAgAkcNAAsgBSgC0AEhAQsgBSACNgLUASAFKALYARogARARCyAFKAJQIgAEQCAFIAA2AlQgBSgCWBogABARCyAFKAI4IgAEQCAFIAA2AjwgBSgCQBogABARCyAFKAIgIgAEQCAFIAA2AiQgBSgCKBogABARCyAFKAKgASIABEAgBSAANgKkASAFKAKoARogABARCyAFKAKIASIABEAgBSAANgKMASAFKAKQARogABARCyAFKAJwIgBFDQIgBSAANgJ0IAUoAngaIAAQEQwCCyAFKALQASICBEAgAiIBIAUoAtQBIgBHBEADQCAAQQxrIgEoAgAiAwRAIABBCGsgAzYCACAAQQRrKAIAGiADEBELIAEiACACRw0ACyAFKALQASEBCyAFIAI2AtQBIAUoAtgBGiABEBELIAUoAlAiAARAIAUgADYCVCAFKAJYGiAAEBELIAUoAjgiAARAIAUgADYCPCAFKAJAGiAAEBELIAUoAiAiAARAIAUgADYCJCAFKAIoGiAAEBELIAUoAqABIgAEQCAFIAA2AqQBIAUoAqgBGiAAEBELIAUoAogBIgAEQCAFIAA2AowBIAUoApABGiAAEBELIAUoAnAiAARAIAUgADYCdCAFKAJ4GiAAEBELIBQgGUcNAAsLIAVBGBASIgA2AmAgBUKQgICA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SARAIAooAhAaIAooAggQEQsgCiwAO0EASARAIAooAjgaIAooAjAQEQsgCiwAL0EASARAIAooAiwaIAooAiQQEQsgCkEIaiANIAYoAoACIAYoAoQCIAZB2ABqENEBIAZB+ABqIQEgBigCeCIABEAgACIDIAYoAnwiAkcEQANAIAogAkEMazYCMCAKQTBqEFEgACACQRRrIgJHDQALIAEoAgAhAwsgBiAANgJ8IAYoAoABGiADEBELIAYgCigCCDYCeCAGIAooAgw2AnwgBiAKKAIQNgKAASAKQSAQEiIANgIIIApCmoCAgICEgICAfzcCDCAAQekLLwAAOwAYIABB4QspAAA3ABAgAEHRC/0AAAD9CwAAIABBADoAGiAKQQhqIAYtAKgCEDcgCiwAE0EASARAIAooAhAaIAooAggQEQsgCkEIaiABEMoDQQAhACAKKAIIIhYgBigCpAIiDm0hEgJAIA5B1qrVqgFJBEAgCigCDCEJIA5BDGwiARASIQcgAUEMayIBIAFBDHBrQQxqIhQEQCAHQQAgFPwLAAsgCUEASgRAIA5BAWshGgNAAkAgACASbCILIBYgAEEBaiICIBJsIAAgGkYbIhlODQAgByAAQQxsaiEFAkADQEEAIQECQANAIAooAhwgCigCDCALbEECdGogAUECdGooAgAiDEF/RwRAAkAgAUEBaiIBIAlODQAgDEEBaiEVIAEhCANAIAooAhwgCigCDCALbEECdGogCEECdGooAgAiD0F/Rg0BQwAAAAAhJ0MAAAAAIShDAAAAACEEQwAAAAAhJgJAIA0oAgQiESAMbCIAIBEgFWwiGEYNACANKAIUIhMgAEECdGohACATIA8gEWxBAnRqIRACfyARQQFxRQRAIAAhAyAQDAELIABBBGohAyAQKgIAIiggKJRDAAAAAJIhJiAAKgIAIikgKZRDAAAAAJIhBCApICiUQwAAAACSISggEEEEagshACARQf////8DcUEBRg0AIBMgGEECdGohEQNAIAMqAgQiKSAAKgIEIiqUIAMqAgAiKyAAKgIAIiyUICiSkiEoIABBCGohACAqICqUICwgLJQgJpKSISYgKSAplCArICuUIASSkiEEIANBCGoiAyARRw0ACwsCQCAEQwAAAABbIgAgJkMAAAAAWyIDcQ0AQwAAgD8hJyAADQAgAw0AQwAAgD8g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AhQgAygCBCACbEECdGohAkEAIQADQCABIAIgAEECdCIDaigCAEcEQCAGKAIAIAdBAnRqIAMgBGoqAgA4AgAgB0EBaiEHCyAHIAhIIAogAEEBaiIASnENAAsgByAGKAIEIAYoAgAiAWtBAnUiAE0NACAGIAcgAGsQLA8LIAAgB00NACAGIAEgB0ECdGo2AgQLCxUAIABB/OACNgIAIABBBGoQowIgAAspAQF/AkAgACgCAEEMayIAIAAoAghBAWsiATYCCCABQQBODQAgABARCwsVACAAQejgAjYCACAAQQRqEKMCIAALuQIBA38jAEEQayIDJAACQCAAIAFGDQAgASgCECECIAAgACgCECIERgRAIAEgAkYEQCAEIAMgBCgCACgCDBECACAAKAIQIgIgAigCACgCEBEBACAAQQA2AhAgASgCECICIAAgAigCACgCDBECACABKAIQIgIgAigCACgCEBEBACABQQA2AhAgACAANgIQIAMgASADKAIAKAIMEQIAIAMgAygCACgCEBEBACABIAE2AhAMAgsgBCABIAQoAgAoAgwRAgAgACgCECICIAIoAgAoAhARAQAgACABKAIQNgIQIAEgATYCEAwBCyABIAJGBEAgAiAAIAIoAgAoAgwRAgAgASgCECICIAIoAgAoAhARAQAgASAAKAIQNgIQIAAgADYCEAwBCyAAIAI2AhAgASAENgIQCyADQRBqJAALggEBA38gACgCBCIEQQFxIQUCfyABLQA3QQFGBEAgBEEIdSIGIAVFDQEaIAYgAigCAGooAgAMAQsgBEEIdSAFRQ0AGiABIAAoAgAoAgQ2AjggACgCBCEEQQAhAkEACyEFIAAoAgAiACABIAIgBWogA0ECIARBAnEbIAAoAgAoAhwRBgALjwMBAn8gAAJ/IAIgAWsiBEEJTARAQT0gBEEgIANBAXJna0HRCWxBDHUiBSADIAVBAnRBkNcCaigCAE9qSA0BGgsCfyADQb+EPU0EQCADQY/OAE0EQCADQeMATQRAIANBCU0EQCABIANBMGo6AAAgAUEBagwECyABIAMQaQwDCyADQecHTQRAIAEgA0HkAG4iAkEwajoAACABQQFqIAMgAkHkAGxrEGkMAwsgASADEN4BDAILIANBn40GTQRAIAEgA0GQzgBuIgJBMGo6AAAgAUEBaiADIAJBkM4AbGsQ3gEMAgsgASADEN0BDAELIANB/8HXL00EQCADQf+s4gRNBEAgASADQcCEPW4iAkEwajoAACABQQFqIAMgAkHAhD1saxDdAQwCCyABIAMQ3AEMAQsgA0H/k+vcA00EQCABIANBgMLXL24iAkEwajoAACABQQFqIAMgAkGAwtcvbGsQ3AEMAQsgASADQYDC1y9uIgEQaSADIAFBgMLXL2xrENwBCyECQQALNgIEIAAgAjYCAAvpAwEFfyMAQSBrIggkAEH3////AyIJIAFBf3NqIAJPBEACfyAALQALQQd2BEAgACgCAAwBCyAACyEKIAFB8////wFJBEAgCCABQQF0NgIcIAggASACajYCECMAQRBrIgIkACAIQRBqIgkoAgAgCEEcaiILKAIASSEMIAJBEGokACALIAkgDBsoAgAiAkECTwR/IAJBAmpBfnEiAiACQQFrIgIgAkECRhsFQQELQQFqIQkLIAggADYCGCAIIAgoAhg2AhwgCEEQaiAJEHIgCCgCECECIAgoAhQaIAQEQAJAIARFDQAgBEECdCIJRQ0AIAIgCiAJ/AoAAAsLIAYEQCAEQQJ0IAJqIQkCQCAGRQ0AIAZBAnQiC0UNACAJIAcgC/wKAAALCyADIAQgBWoiCWshByADIAlHBEAgBEECdCIDIAJqIAZBAnRqIQkgAyAKaiAFQQJ0aiEDAkAgB0UNACAHQQJ0IgVFDQAgCSADIAX8CgAACwsgAUEBRwRAIAoQEQsgACACNgIAIAAgCCgCFEGAgICAeHI2AgggACAEIAZqIAdqIgA2AgQgCEEANgIMIAIgAEECdGogCCgCDDYCAAJ/IAgoAhwiAC0AC0EHdgRAIAAoAgQMAQsgAC0ACwsaIAhBIGokAA8LEDgAC9IBAQN/IwBBEGsiBCQAIAEEQCABIAAtAAtBB3YEfyAAKAIIQf////8HcUEBawVBCgsiAwJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxCyICa0sEQCAAIAMgASADayACaiACIAIQ6AELIAICfyAALQALQQd2BEAgACgCAAwBCyAACyIDaiABQQAQrAIgASACaiEBAkAgAC0AC0EHdgRAIAAgATYCBAwBCyAAIAFB/wBxOgALCyAEQQA6AA8gASADaiAELQAPOgAACyAEQRBqJAALeQECfyMAQRBrIgQkACAALQALQf8AcSEDAkAgAkEKTQRAIAAgAkH/AHE6AAsCQCACRSIDDQAgAw0AIAAgASAC/AoAAAsgBEEAOgAPIAAgAmogBC0ADzoAAAwBCyAAQQogAkEKayADQQAgAyACIAEQigELIARBEGokAAuKAQEDfyMAQRBrIgQkACAAKAIEIQMCQCAAKAIIQf////8HcSIFIAJLBEAgACgCACEDIAAgAjYCBAJAIAJFIgANACAADQAgAyABIAL8CgAACyAEQQA6AA8gAiADaiAELQAPOgAADAELIAAgBUEBayACIAVrQQFqIANBACADIAIgARCKAQsgBEEQaiQACz0BAX8jAEEQayIDJAAgAyACOgAPA0AgAQRAIAAgAy0ADzoAACABQQFrIQEgAEEBaiEADAELCyADQRBqJAALRgECfyABEEQiA0ENahASIgJBADYCCCACIAM2AgQgAiADNgIAIAJBDGohAiADQQFqIgMEQCACIAEgA/wKAAALIAAgAjYCAAsjAQJ/IAAhAQNAIAEiAkEEaiEBIAIoAgANAAsgAiAAa0ECdQsqACMAQRBrIgIkAAJAIAAgAUYEQCAAQQA6AHgMAQsgARARCyACQRBqJAALSQEBfyMAQRBrIgMkAAJAAkAgAkEeSw0AIAEtAHhBAXENACABQQE6AHgMAQsgAhC2AiEBCyADQRBqJAAgACACNgIEIAAgATYCAAtbAQV/IwBBEGsiACQAIABB/////wM2AgwgAEH/////BzYCCCMAQRBrIgEkACAAQQhqIgIoAgAgAEEMaiIDKAIASSEEIAFBEGokACACIAMgBBsoAgAgAEEQaiQAC1YBAn8jAEEQayIEJAAgBCACNgIMAkAgAiABayICRSIFDQAgBQ0AIAMgASAC/AoAAAsgBCACIANqNgIIIAAgBCgCDDYCACAAIAQoAgg2AgQgBEEQaiQACzoBAX8jAEEQayIDJAAgAyABEGA2AgwgAyACEGA2AgggACADKAIMNgIAIAAgAygCCDYCBCADQRBqJAALAwAAC2UBAX8jAEEQayIDJAACfyAALQALQQd2BEAgACgCBAwBCyAALQALCxoCQCAALQALQQd2BEAgACACNgIEDAELIAAgAkH/AHE6AAsLIANBADoADyABIAJqIAMtAA86AAAgA0EQaiQACxgAIABB/////wNLBEAQIwALIABBAnQQEgsJ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GEEAIQUgCiEBA0AgBUEBdCIGQQFyIQcgASIJIAVBA3RqIhBBCGohAQJAIA8gBkECaiIGTARAIAchBQwBCyAHIQUgECoCCCAQQRBqIgcqAgBdRQ0AIAchASAGIQULIAkgASoCADgCACAJIAEoAgQ2AgQgBSALTA0ACyAMQQhrIgcgAUYEQCABIA02AgQgASAYOAIADAELIAEgByoCADgCACABIAxBBGsiBSgCADYCBCAHIBg4AgAgBSANNgIAIAEgCmtBCGpBA3UiBUECSA0AIAogBUECa0EBdiIFQQN0aiIHKgIAIhkgASoCACIYXUUNACABKAIEIQYDQAJAIAEgGTgCACABIAciASgCBDYCBCAFRQ0AIAogBUEBa0EBdiIFQQN0aiIHKgIAIhkgGF0NAQsLIAEgBjYCBCABIBg4AgALIAggDEEIayIMNgIMIAJBAWohAiAKIAxHDQALCyAWIAI7AQAgCkUNACAIIAo2AgwgCCgCEBogChARCyAXQQFqIhcgFUcNAAsMAQsQJAALIA4EQCAOEBELIAhBIGokACARDwtBCBAVQbAYECpBxOICQQQQAQALkhYBCX8jAEGQBGsiCyQAIAsgCjYCiAQgCyABNgKMBAJAIAAgC0GMBGoQIQRAIAUgBSgCAEEEcjYCAEEAIQAMAQsgC0H4ATYCSCALQegAaiIOIAtB8ABqNgIAIA4gC0HIAGoiESgCADYCBCALIA4oAgAiATYCZCALIAFBkANqNgJgIBFCADcCACARQQA2AgggC0E8aiIPQgA3AgAgD0EANgIIIAtBMGoiDUIANwIAIA1BADYCCCALQSRqIgxCADcCACAMQQA2AgggC0EYaiIQQgA3AgAgEEEANgIIIwBBEGsiASQAAkAgAgRAIAFBBGoiCiADQZyNAxAWIgIgAigCACgCLBECAAwBCyABQQRqIgogA0GUjQMQFiICIAIoAgAoAiwRAgALIAsgASgCBDYAXCAKIAIgAigCACgCIBECACAMIAoQjQEgChATGiAKIAIgAigCACgCHBECACANIAoQjQEgChATGiALIAIgAigCACgCDBEAADYCWCALIAIgAigCACgCEBEAADYCVCAKIAIgAigCACgCFBECACARIAoQWiAKEBMaIAogAiACKAIAKAIYEQIAIA8gChCNASAKEBMaIAsgAiACKAIAKAIkEQAA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BEIwiKdB//8BcSIHQf//AUcEQEEEIAcNARpBAkEDIAMgCoRQGwwCCyADIAqEUAsLRQ0AIAJCMIinIghB//8BcSIGQf//AUcNAQsgBUEQaiABIAIgAyAEECUgBSAFKQMQIgIgBSkDGCIBIAIgARCPAyAFKQMIIQIgBSkDACEEDAELIAEgAkL///////////8AgyIKIAMgBEL///////////8AgyIJEGtBAEwEQCABIAogAyAJEGsEQCABIQQMAgsgBUHwAGogASACQgBCABAlIAUpA3ghAiAFKQNwIQQMAQsgBEIwiKdB//8BcSEHIAYEfiABBSAFQeAAaiABIApCAEKAgICAgIDAu8AAECUgBSkDaCIKQjCIp0H4AGshBiAFKQNgCyEEIAdFBEAgBUHQAGogAyAJQgBCgICAgICAwLvAABAlIAUpA1giCUIwiKdB+ABrIQcgBSkDUCEDCyAJQv///////z+DQoCAgICAgMAAhCELIApC////////P4NCgICAgICAwACEIQogBiAHSgRAA0ACfiAKIAt9IAMgBFatfSIJQgBZBEAgCSAEIAN9IgSEUARAIAVBIGogASACQgBCABAlIAUpAyghAiAFKQMgIQQMBQsgCUIBhiAEQj+IhAwBCyAKQgGGIARCP4iECyEKIARCAYYhBCAGQQFrIgYgB0oNAAsgByEGCwJAIAogC30gAyAEVq19IglCAFMEQCAKIQkMAQsgCSAEIAN9IgSEQgBSDQAgBUEwaiABIAJCAEIAECUgBSkDOCECIAUpAzAhBAwBCyAJQv///////z9YBEADQCAEQj+IIAZBAWshBiAEQgGGIQQgCUIBhoQiCUKAgICAgIDAAFQNAAsLIAhBgIACcSEHIAZBAEwEQCAFQUBrIAQgCUL///////8/gyAGQfgAaiAHcq1CMIaEQgBCgICAgICAwMM/ECUgBSkDSCECIAUpA0AhBAwBCyAJQv///////z+DIAYgB3KtQjCGhCECCyAAIAQ3AwAgACACNwMIIAVBgAFqJAALhxACBX8PfiMAQdACayIFJAAgBEL///////8/gyELIAJC////////P4MhCiACIASFQoCAgICAgICAgH+DIQwgBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIghB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyIOQoCAgICAgMD//wBUIA5CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhDAwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEMIAMhAQwCCyABIA5CgICAgICAwP//AIWEUARAIAMgAkKAgICAgIDA//8AhYRQBEBCACEBQoCAgICAgOD//wAhDAwDCyAMQoCAgICAgMD//wCEIQxCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEBCACEBDAILIAEgDoRQBEBCgICAgICA4P//ACAMIAIgA4RQGyEMQgAhAQwCCyACIAOEUARAIAxCgICAgICAwP//AIQhDEIAIQEMAgsgDkL///////8/WARAIAVBwAJqIAEgCiABIAogClAiBht5QsAAQgAgBht8pyIGQQ9rEDZBECAGayEGIAUpA8gCIQogBSkDwAIhAQsgAkL///////8/Vg0AIAVBsAJqIAMgCyADIAsgC1AiCRt5QsAAQgAgCRt8pyIJQQ9rEDYgBiAJakEQayEGIAUpA7gCIQsgBSkDsAIhAwsgBUGgAmogC0KAgICAgIDAAIQiEkIPhiADQjGIhCICQgBCgICAgLDmvIL1ACACfSIEQgAQMyAFQZACakIAIAUpA6gCfUIAIARCABAzIAVBgAJqIAUpA5gCQgGGIAUpA5ACQj+IhCIEQgAgAkIAEDMgBUHwAWogBEIAQgAgBSkDiAJ9QgAQMyAFQeABaiAFKQP4AUIBhiAFKQPwAUI/iIQiBEIAIAJCABAzIAVB0AFqIARCAEIAIAUpA+gBfUIAEDMgBUHAAWogBSkD2AFCAYYgBSkD0AFCP4iEIgRCACACQgAQMyAFQbABaiAEQgBCACAFKQPIAX1CABAzIAVBoAFqIAJCACAFKQO4AUIBhiAFKQOwAUI/iIRCAX0iAkIAEDMgBUGQAWogA0IPhkIAIAJCABAzIAVB8ABqIAJCAEIAIAUpA6gBIAUpA6ABIg4gBSkDmAF8IgQgDlStfCAEQgFWrXx9QgAQMyAFQYABakIBIAR9QgAgAkIAEDMgBiAIIAdraiIIQf//AGohBgJ+IAUpA3AiE0IBhiINIAUpA4gBIg9CAYYgBSkDgAFCP4iEfCIQQufsAH0iFEIgiCICIApCgICAgICAwACEIhVCAYYiFkIgiCIEfiIRIAFCAYYiDkIgiCILIBAgFFatIA0gEFatIAUpA3hCAYYgE0I/iIQgD0I/iHx8fEIBfSITQiCIIhB+fCINIBFUrSANIA0gE0L/////D4MiEyABQj+IIhcgCkIBhoRC/////w+DIgp+fCINVq18IAQgEH58IAQgE34iESAKIBB+fCIPIBFUrUIghiAPQiCIhHwgDSAPQiCGfCIPIA1UrXwgDyAPIBRC/////w+DIhQgCn4iDSACIAt+fCIRIA1UrSARIBEgEyAOQv7///8PgyINfnwiEVatfHwiD1atfCAPIAQgFH4iGCANIBB+fCIEIAIgCn58IgogCyATfnwiEEIgiCAKIBBWrSAEIBhUrSAEIApWrXx8QiCGhHwiBCAPVK18IAQgBCARIAIgDX4iCiALIBR+fCICQiCIIAIgClStQiCGhHwiCiARVK0gCiAKIBBCIIZ8IgpWrXx8IgRWrXwgBCAEIAogAkIghiICIA0gFH58IAJUrUJ/hSICViACIApSca18IgRWrXwiAkL/////////AFgEQCAWIBeEIRUgBUHQAGogBCACQoCAgICAgMAAVCIHrSILhiIKIAIgC4YgBEIBiCAHQT9zrYiEIgQgAyASEDMgCEH+/wBqIAYgBxtBAWshBiABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQtCACABfQwBCyAFQeAAaiACQj+GIARCAYiEIgogAkIBiCIEIAMgEhAzIAFCMIYgBSkDaH0gBSkDYCICQgBSrX0hCyABIQ5CACACfQshAiAGQf//AU4EQCAMQoCAgICAgMD//wCEIQxCACEBDAELAn4gBkEASgRAIAtCAYYgAkI/iIQhASAEQv///////z+DIAatQjCGhCELIAJCAYYMAQsgBkGPf0wEQEIAIQEMAgsgBUFAayAKIARBASAGaxBsIAVBMGogDiAVIAZB8ABqEDYgBUEgaiADIBIgBSkDQCIKIAUpA0giCxAzIAUpAzggBSkDKEIBhiAFKQMgIgFCP4iEfSAFKQMwIgIgAUIBhiIEVK19IQEgAiAEfQshAiAFQRBqIAMgEkIDQgAQMyAFIAMgEkIFQgAQMyALIAogAyAKQgGDIgMgAnwiAlQgASACIANUrXwiASASViABIBJRG618IgMgClStfCIEIAMgAyAEQoCAgICAgMD//wBUIAIgBSkDEFYgASAFKQMYIgRWIAEgBFEbca18IgNWrXwiBCADIARCgICAgICAwP//AFQgAiAFKQMAViABIAUpAwgiAlYgASACURtxrXwiASADVK18IAyEIQwLIAAgATcDACAAIAw3AwggBUHQAmokAAu/AgEBfyMAQdAAayIEJAACQCADQYCAAU4EQCAEQSBqIAEgAkIAQoCAgICAgID//wAQJSAEKQMoIQIgBCkDICEBIANB//8BSQRAIANB//8AayEDDAILIARBEGogASACQgBCgICAgICAgP//ABAlQf3/AiADIANB/f8CTxtB/v8BayEDIAQpAxghAiAEKQMQIQEMAQsgA0GBgH9KDQAgBEFAayABIAJCAEKAgICAgICAORAlIAQpA0ghAiAEKQNAIQEgA0H0gH5LBEAgA0GN/wBqIQMMAQsgBEEwaiABIAJCAEKAgICAgICAORAlQeiBfSADIANB6IF9TRtBmv4BaiEDIAQpAzghAiAEKQMwIQELIAQgASACQgAgA0H//wBqrUIwhhAlIAAgBCkDCDcDCCAAIAQpAwA3AwAgBEHQAGokAAs8ACAAIAE3AwAgACACQv///////z+DIAJCgICAgICAwP//AINCMIinIANCMIinQYCAAnFyrUIwhoQ3AwgLwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCABIAJSIAEgAlNxDQEgACABIAKFhEIAUg8LIABCAFIgASACVSABIAJRGw0AIAAgASAChYRCAFIhAwsgAwvmAQEFfyMAQRBrIgQkAEHQggMoAgAhBiABKAJMGiABKAJIQQBMBEAgARD6AQtB0IIDIAEoAogBNgIAIAEoAgRFBEAgARCZARogASgCBEUhAgtBfyEDAkAgAEF/Rg0AIAINACAEQQxqIAAQuQEiAkEASA0AIAEoAgQiBSABKAIsIAJqQQhrSQ0AAkAgAEH/AE0EQCABIAVBAWsiAzYCBCADIAA6AAAMAQsgASAFIAJrIgM2AgQgAyAEQQxqIAIQVwsgASABKAIAQW9xNgIAIAAhAwtB0IIDIAY2AgAgBEEQaiQAIANBf0cLhgQCBn8BfiMAQSBrIgMkAAJAIAAtADRBAUYEQCAAKAIwIQIgAUUNASAAQQA6ADQgAEF/NgIwDAELAkAgAC0ANUEBRgRAAn8gACgCICICKAJMQQBIBEAgAhCdAwwBCyACEJ0DCyICQX9HBEAgAyACNgIYCyACQX9GDQEgAygCGCECAkAgAUUEQCACIAAoAiAQkwNFDQMMAQsgACACNgIwCyADKAIYIQIMAgsgA0EBNgIYIwBBEGsiBCQAIANBGGoiBSgCACAAQSxqIgYoAgBIIQcgBEEQaiQAIAYgBSAHGygCACIEQQAgBEEAShshBQNAIAIgBUcEQCAAKAIgEJUBIgZBf0YNAiADQRhqIAJqIAY6AAAgAkEBaiECDAELCyADQRhqIQICQANAAkAgACgCKCIFKQIAIQgCQCAAKAIkIgYgBSADQRhqIgUgBCAFaiIFIANBEGogA0EUaiACIANBDGogBigCACgCEBEMAEEBaw4DAAQBAwsgACgCKCAINwIAIARBCEYNAyAAKAIgEJUBIgZBf0YNAyAFIAY6AAAgBEEBaiEEDAELCyADIAMsABg2AhQLAkAgAUUEQANAIARBAEwNAiAEQQFrIgQgA0EYamosAAAgACgCIBB9QX9HDQAMAwsACyAAIAMoAhQ2AjALIAMoAhQhAgwBC0F/IQILIANBIGokACACCwkAIAAQgQIQEQuEAQEFfyMAQRBrIgEkACABQRBqIQQCQANAIAAoAiQiAiAAKAIoIAFBCGoiAyAEIAFBBGogAigCACgCFBEHACEFQX8hAiADQQEgASgCBCADayIDIAAoAiAQSiADRw0BAkAgBUEBaw4CAQIACwtBf0EAIAAoAiAQgQEbIQILIAFBEGokACACCwsAIAAgARB9QX9HC/UDAgZ/AX4jAEEgayICJAACQCAALQA0QQFGBEAgACgCMCEDIAFFDQEgAEEAOgA0IABBfzYCMAwBCwJAIAAtADVBAUYEQCAAKAIgEJUBIgNBf0cEQCACIAM6ABgLIANBf0YNASACLQAYIQMCQCABRQRAIAIsABgaIAMgACgCIBCXA0UNAwwBCyAAIAM2AjALIAItABghAwwCCyACQQE2AhgjAEEQayIEJAAgAkEYaiIFKAIAIABBLGoiBigCAEghByAEQRBqJAAgBiAFIAcbKAIAIgRBACAEQQBKGyEFA0AgAyAFRwRAIAAoAiAQlQEiBkF/Rg0CIAJBGGogA2ogBjoAACADQQFqIQMMAQsLIAJBGGohAwJAA0ACQCAAKAIoIgUpAgAhCAJAIAAoAiQiBiAFIAJBGGoiBSAEIAVqIgUgAkEQaiACQRdqIAMgAkEMaiAGKAIAKAIQEQwAQQFrDgMABAEDCyAAKAIoIAg3AgAgBEEIRg0DIAAoAiAQlQEiBkF/Rg0DIAUgBjoAACAEQQFqIQQMAQsLIAIgAi0AGDoAFwsCQCABRQRAA0AgBEEATA0CIARBAWsiBCACQRhqai0AACAAKAIgEH1Bf0cNAAwDCwALIAAgAi0AFzYCMAsgAi0AFyEDDAELQX8hAwsgAkEgaiQAIAMLCQAgABCYARARC38BAn8jAEEQayIDJAAgABCmAyIAIAE2AiAgAEHk/AE2AgAgA0EMaiIEIAAoAgQiATYCACABQdyNA0cEQCABIAEoAgRBAWo2AgQLIARBpI8DEBYhASAEEBggACACNgIoIAAgATYCJCAAIAEgASgCACgCHBEAADoALCADQRBqJAALfwECfyMAQRBrIgMkACAAEIUCIgAgATYCICAAQZj7ATYCACADQQxqIgQgACgCBCIBNgIAIAFB3I0DRwRAIAEgASgCBEEBajYCBAsgBEGcjwMQFiEBIAQQGCAAIAI2AiggACABNgIkIAAgASABKAIAKAIcEQAAOgAsIANBEGokAAuDAwEFfyMAQRBrIgQkAEHQggMoAgAhBiABKAJIQQBMBEAgARD6AQtB0IIDIAEoAogBNgIAAkACQAJAIABB/wBNBEACQCAAIAEoAlBGDQAgASgCFCICIAEoAhBGDQAgASACQQFqNgIUIAIgADoAAAwECyMAQRBrIgIkACACIAA6AA8CQAJAIAEoAhAiAwR/IAMFIAEQhgIEQEF/IQMMAwsgASgCEAsgASgCFCIFRg0AIABB/wFxIgMgASgCUEYNACABIAVBAWo2AhQgBSAAOgAADAELIAEgAkEPakEBIAEoAiQRBABBAUcEQEF/IQMMAQsgAi0ADyEDCyACQRBqJAAgAyEADAELIAEoAhAgASgCFCICQQRqSwRAIAIgABC4ASICQQBIDQIgASABKAIUIAJqNgIUDAELIARBDGoiAyAAELgBIgJBAEgNASADIAIgARDIASACSQ0BCyAAQX9HDQELIAEgASgCAEEgcjYCAEF/IQALQdCCAyAGNgIAIARBEGokACAAC9ACAQV/QdCCAygCACEEIAAoAkhBAEwEQCAAEPoBC0HQggMgACgCiAE2AgAjAEEgayICJAACQAJAAkAgACgCBCIBIAAoAggiA0YNACACQRxqIAEgAyABaxCeAyIBQX9GDQAgACAAKAIEQQEgASABQQFNG2o2AgQMAQsgAkIANwMQQQAhAQNAIAEhAwJAIAAoAgQiASAAKAIIRwRAIAAgAUEBajYCBCACIAEtAAA6AA8MAQsgAiAAELoBIgE6AA8gAUEATg0AQX8hASADQQFxRQ0DIAAgACgCAEEgcjYCAEGU7QJBGTYCAAwDC0EBIQEgAkEcaiACQQ9qQQEgAkEQahCUASIFQX5GDQALQX8hASAFQX9HDQAgA0EBcUUNASAAIAAoAgBBIHI2AgAgAi0ADyAAEH0aDAELIAIoAhwhAQsgAkEgaiQAQdCCAyAENgIAIAELvAIBAn8gAUUEQEEADwsCfwJAIAJFDQAgAS0AACIDwCIEQQBOBEAgAARAIAAgAzYCAAsgBEEARw8LQdCCAygCACgCAEUEQEEBIABFDQIaIAAgBEH/vwNxNgIAQQEPCyADQcIBayIDQTJLDQAgA0ECdCgC4PgBIQMgAkEDTQRAIAMgAkEGbEEGa3RBAEgNAQsgAS0AASICQQN2IgRBEGsgBCADQRp1anJBB0sNACACQYABayADQQZ0ciICQQBOBEBBAiAARQ0CGiAAIAI2AgBBAg8LIAEtAAJBgAFrIgNBP0sNACADIAJBBnQiBHIhAiAEQQBOBEBBAyAARQ0CGiAAIAI2AgBBAw8LIAEtAANBgAFrIgFBP0sNAEEEIABFDQEaIAAgASACQQZ0cjYCAEEEDwtBlO0CQRk2AgBBfwsLHAEBf0EEEBUiAEGg5QE2AgAgAEGs5QFBBRABAAtLAQJ/IAAoAgAiAQRAAn8gASgCDCICIAEoAhBGBEAgASABKAIAKAIkEQAADAELIAIoAgALQX9HBEAgACgCAEUPCyAAQQA2AgALQQELSwECfyAAKAIAIgEEQAJ/IAEoAgwiAiABKAIQRgRAIAEgASgCACgCJBEAAAwBCyACLQAAC0F/RwRAIAAoAgBFDwsgAEEANgIAC0EBCwkAIAAQ/AEQEQugAQEFfyMAQRBrIgMkACAAKAJAIgEEfyADQYgBNgIEIANBCGoiAiABNgIAIAIgAygCBDYCBCAAIAAoAgAoAhgRAAAhBCACKAIAIAJBADYCABC7AyEFIABBADYCQCAAQQBBACAAKAIAKAIMEQQAGiACKAIAIQEgAkEANgIAIAEEQCABIAIoAgQRAAAaC0EAIAAgBCAFchsFQQALIANBEGokAAtUAQJ/AkAgACgCACICRQ0AAn8gAigCGCIDIAIoAhxGBEAgAiABIAIoAgAoAjQRAwAMAQsgAiADQQRqNgIYIAMgATYCACABC0F/Rw0AIABBADYCAAsLMQEBfyAAKAIMIgEgACgCEEYEQCAAIAAoAgAoAigRAAAPCyAAIAFBBGo2AgwgASgCAAsrACAAQeDqATYCACAAQQRqEKwBGiAAQgA3AhggAEIANwIQIABCADcCCCAAC2oBAn8jAEEQayICJAAgAkEIaiAAEFsaAkAgAi0ACEUNACACQQRqIgMgACAAKAIAQQxrKAIAaigCGDYCACADIAEQfyADKAIADQAgACAAKAIAQQxrKAIAakEBEFwLIAJBCGoQViACQRBqJAALEwAgACAAKAIAQQxrKAIAahCDAgsTACAAIAAoAgBBDGsoAgBqEMQBCz8BAX8gACgCGCICIAAoAhxGBEAgACABQf8BcSAAKAIAKAI0EQMADwsgACACQQFqNgIYIAIgAToAACABQf8BcQvdJQIWfwN9IwBBQGoiBSQAIAUgAjYCPCAAKAKgASIDBEAgACgCgAEgACgCjAEgACgCDCACbGpqIAEgA/wKAAALIAAoAkAhCwJAIAIgACgCeCIORgRAIAAoAghBAUYNASAFKAI8IQILIAEhEiAAIgQoApQBIAJBAnRqKAIAIgpBAE4EfwNAIAX9DAAAAAAAAAAAAAAAAAAAAAD9CwMoIAVBgICA/AM2AjggBf0MAAAAAAAAAAAAAAAAAAAAAP0LAxAgBUGAgID8AzYCICAEKAJsGiAFKAI8IQACfwJ/IAxFBEAgBCgChAEgBCgCjAEgBCgCDCAAbGpqDAELIAQoApABIABBAnRqKAIAIAQoAhAgDEEBa2xqCyIBLwEAIgBFBEBBACEPQQAhAkEADAELIABBAnQiAhASIQ8gAgRAIA9BACAC/AsACyACIA9qCyEAIAIEQCAPIAFBBGogAvwKAAALAkAgACAPRg0AIAxBAWshEyAFIAVBKGogBUE8aiIBIAEQrQEgDyEBA0AgBSAFQShqIAEgARCtASAEQf////8HQQAgBCgC3AEiAiACQcjbAm4iAkHI2wJsa0GP+QJsIgMgAkHHGmwiAkkbIAMgAmtqIgI2AtwBAkAgAkEBa7NDAAAAMJRDAACAP14NACAFIAVBEGogASABEK0BIAQoAmwaIAEoAgAhAgJ/An8gDEUEQCAEKAKEASAEKAKMASAEKAIMIAJsamoMAQsgBCgCkAEgAkECdGooAgAgBCgCECATbGoLIgcvAQAiAkUEQEEAIQZBACECQQAMAQsgAkECdCICEBIhBiACBEAgBkEAIAL8CwALIAIgBmoLIQMgAgRAIAYgB0EEaiAC/AoAAAsgBiICIANHBEADQCAFIAVBKGogAiACEK0BIAJBBGoiAiADRw0ACwsgBkUNACAGEBELIAFBBGoiASAARw0ACyAFKAIYIhBFDQAgBEEcQSAgDBtqIRcDQCAFQQA2AgggBUIANwIAAn8CQAJAIAUoAiwiAEUNACAFKAIoAn8gECgCCCIBIABBAWtxIABpQQFLIgNFDQAaIAEgACABSw0AGiABIABwCyIGQQJ0aigCACICRQ0AIAIoAgAiAkUNACADRQRAIABBAWshAANAAkAgASACKAIEIgNHBEAgACADcSAGRg0BDAQLIAIoAgggAUYNBAsgAigCACICDQALDAELA0ACQCABIAIoAgQiA0cEQCAAIANNBH8gAyAAcAUgAwsgBkYNAQwDCyACKAIIIAFGDQMLIAIoAgAiAg0ACwsgBSgCNAwBCyAFKAI0QQFrCyEAAkAgBSgCMCINRQ0AIAAgBCgCJCIBIAAgAUkbIRUCQANAAkACQCANKAIIIgAgECgCCCIBRg0AIAQoAoABIgIgBCgCjAEiAyABIAQoAgwiBmxqaiADIAAgBmxqIAJqIAQoAqgBIAQoAqQBEQsAIRkgFSAFKAIEIgggBSgCACIDayIBQQN1IglLBEACQCAFKAIIIgIgCEsEQCAIIBk4AgAgCCANKAIINgIEIAhBCGohBgwBCyAJQQFqIgBBgICAgAJPDQMgAUH/////ASACIANrIgJBAnUiBiAAIAAgBkkbIAJB+P///wdPGyICBH8gAkGAgICAAk8NBiACQQN0EBIFQQALIgdqIgYgGTgCACAGIA0oAgg2AgQgBiAJQQN0ayEAIAEEQCAAIAMgAfwKAAALIAUgByACQQN0ajYCCCAFIAZBCGoiBjYCBCAFIAA2AgAgA0UEQCAAIQMMAQsgAxARIAUoAgAhAwsgBSAGNgIEIAYgA2tBA3UiAEECSA0BIAMgAEECa0EBdiIAQQN0aiIBKgIAIhkgBkEIayICKgIAIhpdRQ0BIAZBBGsoAgAhBgNAAkAgAiAZOAIAIAIgASICKAIENgIEIABFDQAgAyAAQQFrQQF2IgBBA3RqIgEqAgAiGSAaXQ0BCwsgAiAGNgIEIAIgGjgCAAwBCyAZIAMqAgAiGl1FDQACQCAJQQJIDQAgCUECa0EBdiEWIAMoAgQhEUEAIQAgAyECA0AgAEEBdCIHQQFyIQEgAiIGIABBA3RqIhRBCGohAgJAIAkgB0ECaiIHTARAIAEhAAwBCyABIQAgFCoCCCAUQRBqIgEqAgBdRQ0AIAEhAiAHIQALIAYgAioCADgCACAGIAIoAgQ2AgQgACAWTA0ACyAIQQhrIgAgAkYEQCACIBE2AgQgAiAaOAIADAELIAIgACoCADgCACACIAhBBGsiASgCADYCBCAAIBo4AgAgASARNgIAIAIgA2tBCGpBA3UiAEECSA0AIAMgAEECa0EBdiIAQQN0aiIBKgIAIhogAioCACIbXUUNACACKAIEIQYDQAJAIAIgGjgCACACIAEiAigCBDYCBCAARQ0AIAMgAEEBa0EBdiIAQQN0aiIBKgIAIhogG10NAQsLIAIgBjYCBCACIBs4AgALIAUgCEEIayIANgIEAkAgBSgCCCICIABLBEAgACAZOAIAIAhBBGsgDSgCCDYCAAwBCyAAIANrIgBBA3UiBkEBaiIBQYCAgIACTw0CIABB/////wEgAiADayICQQJ1IgcgASABIAdJGyACQfj///8HTxsiAQR/IAFBgICAgAJPDQUgAUEDdBASBUEACyIHaiICIBk4AgAgAiANKAIINgIEIAIgBkEDdGshBiAABEAgBiADIAD8CgAACyAFIAcgAUEDdGo2AgggBSACQQhqIgg2AgQgBSAGNgIAIAMQESAIIAUoAgAiA2tBA3UhCQsgBSAINgIEIAlBAkgNACADIAlBAmtBAXYiAEEDdGoiASoCACIZIAhBCGsiAioCACIaXUUNACAIQQRrKAIAIQYDQAJAIAIgGTgCACACIAEiAigCBDYCBCAARQ0AIAMgAEEBa0EBdiIAQQN0aiIBKgIAIhkgGl0NAQsLIAIgBjYCBCACIBo4AgALIA0oAgAiDQ0BDAMLCxAUAAsQJAALIAQgBSAXKAIAEOUBIAQoAmwaIBAoAgghAAJ/IAxFBEAgBCgChAEgBCgCjAEgBCgCDCAAbGpqDAELIAQoApABIABBAnRqKAIAIAQoAhAgE2xqCyIAIAUoAgQiCSAFKAIAIgNrQQN1IhU7AQAgAyAJRwRAIABBBGohFkEAIQgDQCAWIAhBAnRqIAMoAgQiDTYCAAJAIAkgA2tBA3UiEUECSA0AIBFBAmtBAXYhGCADKgIAIRlBACEAIAMhAgNAIABBAXQiB0EBciEBIAIiBiAAQQN0aiIUQQhqIQICQCARIAdBAmoiB0wEQCABIQAMAQsgASEAIBQqAgggFEEQaiIBKgIAXUUNACABIQIgByEACyAGIAIqAgA4AgAgBiACKAIENgIEIAAgGEwNAAsgCUEIayIAIAJGBEAgAiANNgIEIAIgGTgCAAwBCyACIAAqAgA4AgAgAiAJQQRrIgEoAgA2AgQgACAZOAIAIAEgDTYCACACIANrQQhqQQN1IgBBAkgNACADIABBAmtBAXYiAEEDdGoiASoCACIZIAIqAgAiGl1FDQAgAigCBCEGA0ACQCACIBk4AgAgAiABIgIoAgQ2AgQgAEUNACADIABBAWtBAXYiAEEDdGoiASoCACIZIBpdDQELCyACIAY2AgQgAiAaOAIACyAFIAlBCGsiCTYCBCAIQQFqIgggFUcNAAsLIAUoAgAiAARAIAUgADYCBCAFKAIIGiAAEBELIBAoAgAiEA0ACwsgDwRAIA8QEQsgBSgCGCICBEADQCACKAIAIAIQESICDQALCyAFKAIQIQAgBUEANgIQIAAEQCAFKAIUGiAAEBELIAUoAjAiAgRAA0AgAigCACACEBEiAg0ACwsgBSgCKCEAIAVBADYCKCAABEAgBSgCLBogABARCyAKIAxGIAxBAWohDEUNAAsgBSgCPAUgAgshDyMAQTBrIgckACAHIA42AiwgCiIGIAsiA0gEQCASIAQoAoABIAQoAowBIAQoAgwgDmxqaiAEKAKoASAEKAKkARELACEZIAMhAQNAIAEiAEEBayEBAkAgAEUEQANAIAQoAmwaIAQoAoQBIAQoAowBIAQoAgwgDmxqaiIALwEAIgtFDQIgAEEEaiEIQQAhAEEAIQIDQCAIIABBAnRqKAIAIgogDiASIAQoAoABIAQoAowBIAogBCgCDGxqaiAEKAKoASAEKAKkARELACIaIBldIgobIQ4gGiAZIAobIRkgAiAKciECIABBAWoiACALRw0ACyACQQFxDQAMAgsACwNAIAQoAmwaIAQoApABIA5BAnRqKAIAIAQoAhAgAWxqIgAvAQAiC0UNASAAQQRqIQhBACEAQQAhAgNAIAggAEECdGooAgAiCiAOIBIgBCgCgAEgBCgCjAEgCiAEKAIMbGpqIAQoAqgBIAQoAqQBEQsAIhogGV0iChshDiAaIBkgChshGSACIApyIQIgAEEBaiIAIAtHDQALIAJBAXENAAsLIAEgBkoNAAsLAkAgAyAGTgRAAkACQCAGQQBOBEADQCAHQRxqIAQgDiASIAYQ2gJBACEIIAdBADYCFCAHQgA3AgxBACEJIAcoAhwiAyAHKAIgRwRAA0ACQCADKAIEIA9GDQACQCAHKAIUIgIgCUsEQCAJIAMpAgA3AgAgCUEIaiEJDAELIAkgCGsiAEEDdSIKQQFqIgFBgICAgAJPDQYgAEH/////ASACIAhrIgJBAnUiCyABIAEgC0kbIAJB+P///wdPGyIBBH8gAUGAgICAAk8NCCABQQN0EBIFQQALIgtqIgIgAykCADcCACACIApBA3RrIQMgAARAIAMgCCAA/AoAAAsgByALIAFBA3RqNgIUIAcgAkEIaiIJNgIQIAcgAzYCDCAIRQ0AIAgQEQsgByAJNgIQIAkgBygCDCIIa0EDdSIAQQJIDQAgCCAAQQJrQQF2IgFBA3RqIgIqAgAiGSAJQQhrIgAqAgAiGl1FDQAgCUEEaygCACEDA0ACQCAAIBk4AgAgACACIgAoAgQ2AgQgAUUNACAIIAFBAWtBAXYiAUEDdGoiAioCACIZIBpdDQELCyAAIAM2AgQgACAaOAIACwJAIAcoAiAiDCAHKAIcIgNrQQN1Ig1BAkgNACANQQJrQQF2IREgAygCBCEQIAMqAgAhGUEAIQEgAyEAA0AgAUEBdCILQQFyIQIgACIKIAFBA3RqIhNBCGohAAJAIA0gC0ECaiILTARAIAIhAQwBCyACIQEgEyoCCCATQRBqIgIqAgBdRQ0AIAIhACALIQELIAogACoCADgCACAKIAAoAgQ2AgQgASARTA0ACyAMQQhrIgEgAEYEQCAAIBA2AgQgACAZOAIADAELIAAgASoCADgCACAAIAxBBGsiAigCADYCBCABIBk4AgAgAiAQNgIAIAAgA2tBCGpBA3UiAUECSA0AIAMgAUECa0EBdiIBQQN0aiICKgIAIhkgACoCACIaXUUNACAAKAIEIQoDQAJAIAAgGTgCACAAIAIiACgCBDYCBCABRQ0AIAMgAUEBa0EBdiIBQQN0aiICKgIAIhkgGl0NAQsLIAAgCjYCBCAAIBo4AgALIAcgDEEIayIANgIgIAAgA0cNAAsgCCAJRwRAAkAgBCgCjAEgBCgCDCAHKAIsbGoiACAEKAKEAWotAAJBAXFFDQAgByASIAAgBCgCgAFqIAQoAqgBIAQoAqQBEQsAOAIIIAdBDGogB0EIaiAHQSxqEEAgBygCECIIIAcoAgwiA2tBA3UiCSAEKAIkTQ0AAkAgCUECSA0AIAlBAmtBAXYhDSADKAIEIQ4gAyoCACEZQQAhASADIQADQCABQQF0IgtBAXIhAiAAIgogAUEDdGoiDEEIaiEAAkAgCSALQQJqIgtMBEAgAiEBDAELIAIhASAMKgIIIAxBEGoiAioCAF1FDQAgAiEAIAshAQsgCiAAKgIAOAIAIAogACgCBDYCBCABIA1MDQALIAhBCGsiASAARgRAIAAgDjYCBCAAIBk4AgAMAQsgACABKgIAOAIAIAAgCEEEayICKAIANgIEIAEgGTgCACACIA42AgAgACADa0EIakEDdSIBQQJIDQAgAyABQQJrQQF2IgFBA3RqIgIqAgAiGSAAKgIAIhpdRQ0AIAAoAgQhCgNAAkAgACAZOAIAIAAgAiIAKAIENgIEIAFFDQAgAyABQQFrQQF2IgFBA3RqIgIqAgAiGSAaXQ0BCwsgACAKNgIEIAAgGjgCAAsgByAIQQhrNgIQCyAEIA8gB0EMaiAGQQEQ1AIhDiAHKAIMIQgLIAgEQCAHIAg2AhAgBygCFBogCBARCyAHKAIcIQMLIAMEQCAHIAM2AiAgBygCJBogAxARCyAGQQBKIAZBAWshBg0ACwsgB0EwaiQADAMLEBQACxAkAAtBCBAVQfQXECpBxOICQQQQAQALCyAFQUBrJAALMQEBfyAAKAIMIgEgACgCEEYEQCAAIAAoAgAoAigRAAAPCyAAIAFBAWo2AgwgAS0AAAsTACAAIAAoAgBBDGsoAgBqEIQCCxMAIAAgACgCAEEMaygCAGoQxQELoAEBAn8jAEEQayICJAAgAiABNgIMIAAoAgggAUsEQCAAKAKEASAAKAKMASAAKAIMIAIoAgxsamoiAS0AAiIDQQFxBEAgASADQf4BcToAAiAAIAAoAhRBAWs2AhQgAC0A6AFBAUYEQCAAQYQCaiACQQxqELkDCyACQRBqJAAPC0EIEBVB4SUQKkHE4gJBBBABAAtB8AtB1B9BlAdB3hgQAAALBABBfwsQACAAQn83AwggAEIANwMACxAAIABCfzcDCCAAQgA3AwALBAAgAAvUBQIFfwJ9IAIoAgAhBiAAAn8CQCABKAIEIgRFDQAgASgCAAJ/IARBAWsgBnEgBGkiB0EBTQ0AGiAGIAQgBksNABogBiAEcAsiBUECdGooAgAiAkUNACACKAIAIgJFDQAgB0EBTQRAIARBAWshBwNAAkAgBiACKAIEIghHBEAgByAIcSAFRw0EDAELIAIoAgggBkcNAEEADAQLIAIoAgAiAg0ACwwBCwNAAkAgBiACKAIEIgdHBEAgBCAHTQR/IAcgBHAFIAcLIAVHDQMMAQsgAigCCCAGRw0AQQAMAwsgAigCACICDQALC0EQEBIiAiAGNgIEIAJBADYCACADKAIAKAIAIQMgAkEANgIMIAIgAzYCCCABKgIQIQkgASgCDEEBarMhCgJAIAQEQCAJIASzlCAKXUUNAQtBAiEFAkAgBCAEQQFrcUEARyAEQQNJciAEQQF0ciIDIAogCZWN/AEiByADIAdLGyIDQQFGDQAgAyADQQFrcUUEQCADIQUMAQsgAxDJASEFIAEoAgQhBAsCQCAEIAVPBEAgBCAFTQ0BIAEoAgyzIAEqAhCVjfwBIQMgBQJ/AkAgBEEDSQ0AIARpQQFLDQAgA0EBQSAgA0EBa2drdCADQQJJGwwBCyADEMkBCyIDIAMgBUkbIgUgBE8NAQsgASAFEMQCCyABKAIEIgQgBEEBayIDcUUEQCADIAZxIQUMAQsgBCAGSwRAIAYhBQwBCyAGIARwIQULAkAgASgCACIGIAVBAnRqIgUoAgAiA0UEQCACIAEoAgg2AgAgASACNgIIIAUgAUEIajYCACACKAIAIgNFDQEgAygCBCEDAkAgBCAEQQFrIgVxRQRAIAMgBXEhAwwBCyADIARJDQAgAyAEcCEDCyAGIANBAnRqIAI2AgAMAQsgAiADKAIANgIAIAMgAjYCAAsgASABKAIMQQFqNgIMQQELOgAEIAAgAjYCAAsLACAAEE8aIAAQEQsGACAAEE8LbQICfwF+IAAoAighAkEBIQECQCAAQgAgAC0AAEGAAXEEf0EBQQIgACgCFCAAKAIcRhsFQQELIAIREgAiA0IAUw0AIAMgACgCCCIBBH9BBAUgACgCHCIBRQ0BQRQLIABqKAIAIAFrrHwhAwsgAwufAQECfyACKAJMGiACIAIoAkgiA0EBayADcjYCSCACKAIEIgMgAigCCCIERgR/IAEFIAAgAyAEIANrIgMgASABIANLGyIDEFcgAiACKAIEIANqNgIEIAAgA2ohACABIANrCyIDBEADQAJAIAIQmQFFBEAgAiAAIAMgAigCIBEEACIEDQELIAEgA2sPCyAAIARqIQAgAyAEayIDDQALCyABC5ACAQV/IwBBEGsiBSQAAkAgACgCBCICRQ0AIAAoAgACfyABKAIAIgMgAkEBa3EgAmkiBEEBTQ0AGiADIAIgA0sNABogAyACcAsiBkECdGooAgAiAUUNACABKAIAIgFFDQACQCAEQQFNBEAgAkEBayECA0ACQCADIAEoAgQiBEcEQCACIARxIAZGDQEMBQsgASgCCCADRg0DCyABKAIAIgENAAsMAgsDQAJAIAMgASgCBCIERwRAIAIgBE0EfyAEIAJwBSAECyAGRg0BDAQLIAEoAgggA0YNAgsgASgCACIBDQALDAELIAVBBGogACABEMYCIAUoAgQhACAFQQA2AgQgAARAIAAQEQsLIAVBEGokAAubAQEBfwJAIAJBA08EQEGU7QJBHDYCAAwBCwJAIAJBAUcNACAAKAIIIgNFDQAgASADIAAoAgRrrH0hAQsgACgCFCAAKAIcRwRAIABBAEEAIAAoAiQRBAAaIAAoAhRFDQELIABBADYCHCAAQgA3AxAgACABIAIgACgCKBESAEIAUw0AIABCADcCBCAAIAAoAgBBb3E2AgBBAA8LQX8LawEEfyAAKAJMGiAAEIEBIAAgACgCDBEAACAALQAAQQFxRQRAIAAoAjghASAAKAI0IgIEQCACIAE2AjgLIAEEQCABIAI2AjQLIABBxPECKAIARgRAQcTxAiABNgIACyAAKAJgEBEgABARC3IL6wEBA38CQAJAAkAgAUH/AXEiAiIDBEAgAEEDcQRAA0AgAC0AACIERQ0FIAIgBEYNBSAAQQFqIgBBA3ENAAsLQYCChAggACgCACICayACckGAgYKEeHFBgIGChHhHDQEgA0GBgoQIbCEEA0BBgIKECCACIARzIgNrIANyQYCBgoR4cUGAgYKEeEcNAiAAKAIEIQIgAEEEaiIDIQAgAkGAgoQIIAJrckGAgYKEeHFBgIGChHhGDQALDAILIAAQRCAAag8LIAAhAwsDQCADIgAtAAAiAkUNASAAQQFqIQMgAiABQf8BcUcNAAsLIAALBAAgAQuJAQEDfyMAQRBrIgUkACAFQQA6AA4gASAAa0ECdSEDIwBBEGsiASQAA0AgAwRAIAEgADYCDCABIAEoAgwgA0EBdiIEQQJ0ajYCDCADIARBf3NqIAQgASgCDCgCACACKAIASSIEGyEDIAEoAgxBBGogACAEGyEADAELCyABQRBqJAAgBUEQaiQAIAAL+gICBn8CfiMAQUBqIgEkACMAQSBrIgAkAEEAQgEgAEEYahAIIgIEf0GU7QIgAjYCAEF/BUEACwR/QX8FIAApAxghBiAAQQA2AhQgACAGQoCU69wDgCIHNwMIIAAgBiAHQoCU69wDfn0+AhAgASAAKQMQNwMwIAEgACkDCDcDKEEACyAAQSBqJAAEQEGU7QIoAgAaECMACyABQRhqIgQgASkDKDcDACABIAEoAjBB6AdtNgIMIAEgATQCDDcDECMAQSBrIgAkACMAQRBrIgMkACMAQRBrIgUkACMAQRBrIgIkACACIAQpAwBCwIQ9fjcDACACIAIpAwA3AwggAikDCCEGIAJBEGokACAFQRBqJAAgAyAGNwMIIAAgAykDCDcDCCADQRBqJAAgACkDCCEGIAAgASkDEDcDACAAIAYgACkDAHw3AxAgACAAKQMQNwMYIAApAxghBiAAQSBqJAAgASAGNwMgIAEgASkDIDcDOCABKQM4IAFBQGskAAusCwEHfyAAIAFqIQUCQAJAIAAoAgQiAkEBcQ0AIAJBAnFFDQEgACgCACICIAFqIQECQAJAAkAgACACayIAQaztAigCAEcEQCAAKAIMIQMgAkH/AU0EQCADIAAoAggiBEcNAkGY7QJBmO0CKAIAQX4gAkEDdndxNgIADAULIAAoAhghBiAAIANHBEAgACgCCCICIAM2AgwgAyACNgIIDAQLIAAoAhQiBAR/IABBFGoFIAAoAhAiBEUNAyAAQRBqCyECA0AgAiEHIAQiA0EUaiECIAMoAhQiBA0AIANBEGohAiADKAIQIgQNAAsgB0EANgIADAMLIAUoAgQiAkEDcUEDRw0DQaDtAiABNgIAIAUgAkF+cTYCBCAAIAFBAXI2AgQgBSABNgIADwsgBCADNgIMIAMgBDYCCAwCC0EAIQMLIAZFDQACQCAAKAIcIgJBAnQiBCgCyO8CIABGBEAgBEHI7wJqIAM2AgAgAw0BQZztAkGc7QIoAgBBfiACd3E2AgAMAgsCQCAAIAYoAhBGBEAgBiADNgIQDAELIAYgAzYCFAsgA0UNAQsgAyAGNgIYIAAoAhAiAgRAIAMgAjYCECACIAM2AhgLIAAoAhQiAkUNACADIAI2AhQgAiADNgIYCwJAAkACQAJAIAUoAgQiAkECcUUEQEGw7QIoAgAgBUYEQEGw7QIgADYCAEGk7QJBpO0CKAIAIAFqIgE2AgAgACABQQFyNgIEIABBrO0CKAIARw0GQaDtAkEANgIAQaztAkEANgIADwtBrO0CKAIAIgggBUYEQEGs7QIgADYCAEGg7QJBoO0CKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAA8LIAJBeHEgAWohASAFKAIMIQMgAkH/AU0EQCAFKAIIIgQgA0YEQEGY7QJBmO0CKAIAQX4gAkEDdndxNgIADAULIAQgAzYCDCADIAQ2AggMBAsgBSgCGCEGIAMgBUcEQCAFKAIIIgIgAzYCDCADIAI2AggMAwsgBSgCFCIEBH8gBUEUagUgBSgCECIERQ0CIAVBEGoLIQIDQCACIQcgBCIDQRRqIQIgAygCFCIEDQAgA0EQaiECIAMoAhAiBA0ACyAHQQA2AgAMAgsgBSACQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgAMAwtBACEDCyAGRQ0AAkAgBSgCHCICQQJ0IgQoAsjvAiAFRgRAIARByO8CaiADNgIAIAMNAUGc7QJBnO0CKAIAQX4gAndxNgIADAILAkAgBSAGKAIQRgRAIAYgAzYCEAwBCyAGIAM2AhQLIANFDQELIAMgBjYCGCAFKAIQIgIEQCADIAI2AhAgAiADNgIYCyAFKAIUIgJFDQAgAyACNgIUIAIgAzYCGAsgACABQQFyNgIEIAAgAWogATYCACAAIAhHDQBBoO0CIAE2AgAPCyABQf8BTQRAIAFBeHFBwO0CaiECAn9BmO0CKAIAIgNBASABQQN2dCIBcUUEQEGY7QIgASADcjYCACACDAELIAIoAggLIQEgAiAANgIIIAEgADYCDCAAIAI2AgwgACABNgIIDwtBHyEDIAFB////B00EQCABQSYgAUEIdmciAmt2QQFxIAJBAXRrQT5qIQMLIAAgAzYCHCAAQgA3AhAgA0ECdEHI7wJqIQICQAJAQZztAigCACIEQQEgA3QiB3FFBEBBnO0CIAQgB3I2AgAgAiAANgIAIAAgAjYCGAwBCyABQRkgA0EBdmtBACADQR9HG3QhAyACKAIAIQIDQCACIgQoAgRBeHEgAUYNAiADQR12IQIgA0EBdCEDIAQgAkEEcWoiBygCECICDQALIAcgADYCECAAIAQ2AhgLIAAgADYCDCAAIAA2AggPCyAEKAIIIgEgADYCDCAEIAA2AgggAEEANgIYIAAgBDYCDCAAIAE2AggLC4UBAgF9An8gALwiAkEXdkH/AXEiA0GVAU0EfSADQf0ATQRAIABDAAAAAJQPCwJ9IACLIgBDAAAAS5JDAAAAy5IgAJMiAUMAAAA/XgRAIAAgAZJDAACAv5IMAQsgACABkiIAIAFDAAAAv19FDQAaIABDAACAP5ILIgCMIAAgAkEASBsFIAALC6QBAwF8AX4BfyAAvSICQjSIp0H/D3EiA0GyCE0EfCADQf0HTQRAIABEAAAAAAAAAACiDwsCfCAAmSIARAAAAAAAADBDoEQAAAAAAAAww6AgAKEiAUQAAAAAAADgP2QEQCAAIAGgRAAAAAAAAPC/oAwBCyAAIAGgIgAgAUQAAAAAAADgv2VFDQAaIABEAAAAAAAA8D+gCyIAmiAAIAJCAFMbBSAACwtGAQF/An9BACAAQRd2Qf8BcSIBQf8ASQ0AGkECIAFBlgFLDQAaQQBBAUGWASABa3QiAUEBayAAcQ0AGkEBQQIgACABcRsLC8UFBAR/AnwBfQF+IAG8IgNBAXRBgICACGpBgYCACEkhBQJAAkACQAJAIAC8IgJBgICA/AdrQYCAgIh4TwRAIAUNAQwDCyAFRQ0BC0MAAIA/IQggAkGAgID8A0YNAiADQQF0IgRFDQIgBEGBgIB4SSACQQF0IgJBgICAeE1xRQRAIAAgAZIPCyACQYCAgPgHRg0CQwAAAAAgASABlCADQQBIIAJBgICA+AdJcxsPCyACQQF0QYCAgAhqQYGAgAhJBEAgACAAlCEIIAJBAEgEQCAIjCAIIAMQwwNBAUYbIQgLIANBAE4NAiMAQRBrIgJDAACAPyAIlTgCDCACKgIMDwsgAkEASARAIAMQwwMiAkUEQCAAIACTIgAgAJUPC0GAgARBACACQQFGGyEEIAC8Qf////8HcSECCyACQf///wNLDQAgAEMAAABLlLxB/////wdxQYCAgNwAayECCwJAQfDkASsDACACIAJBgIDM+QNrIgJBgICAfHFrvrsgAkEPdkHwAXEiAysD8OIBokQAAAAAAADwv6AiBqJB+OQBKwMAoCAGIAaiIgcgB6KiQYDlASsDACAGokGI5QErAwCgIAeiQZDlASsDACAGoiADKwP44gEgAkEXdbegoKCgIAG7oiIGvUKAgICAgIDg//8Ag0KBgICAgIDAr8AAVA0AIAZEcdXR////X0BkBEAjAEEQayICQwAAAPBDAAAAcCAEGzgCDCACKgIMQwAAAHCUDwsgBkQAAAAAAMBiwGVFDQAjAEEQayICQwAAAJBDAAAAECAEGzgCDCACKgIMQwAAABCUDwtByI8BKwMAIAYgBkHAjwErAwAiBqAiByAGoaEiBqJB0I8BKwMAoCAGIAaiokHYjwErAwAgBqJEAAAAAAAA8D+goCAHvSIJIAStfEIvhiAJp0EfcUEDdCkDwI0BfL+itiEICyAIC04CAX8BfgJ/QQAgAEI0iKdB/w9xIgFB/wdJDQAaQQIgAUGzCEsNABpBAEIBQbMIIAFrrYYiAkIBfSAAg0IAUg0AGkECQQEgACACg1AbCwtFAQF/QdjsAi0AAEEBcUUiAARAQazsAkGw7AJB4OwCQYDtAhALQbjsAkGA7QI2AgBBtOwCQeDsAjYCAEHY7AJBAToAAAsL7wQDAX8HfAJ+IAC9IglCMIinIQEgCUKAgICA8JWp9z99Qv////+flYQBWARAIAlCgICAgICAgPg/UQRARAAAAAAAAAAADwtBiJABKwMAIgMgAEQAAAAAAADwv6AiAL1CgICAgHCDvyIEoiIFIAAgAKIiAiAAQdCQASsDAKJByJABKwMAoKIiBqAiByACIAKiIgggCCACIABBkJEBKwMAokGIkQErAwCgoiAAQYCRASsDAKJB+JABKwMAoKCiIAIgAEHwkAErAwCiQeiQASsDAKCiIABB4JABKwMAokHYkAErAwCgoKCiIAAgBKEgA6IgAEGQkAErAwCioCAGIAUgB6GgoKCgDwsCQCABQfD/AWtBn4B+TQRAIABEAAAAAAAAAABhBEAjAEEQayIBRAAAAAAAAPC/OQMIIAErAwhEAAAAAAAAAACjDwsgCUKAgICAgICA+P8AUQ0BIAFB8P8BcUHw/wFHIAFB//8BTXFFBEAgACAAoSIAIACjDwsgAEQAAAAAAAAwQ6K9QoCAgICAgICgA30hCQsgCUKAgICAgICA8z99IgpCLoinQT9xQQR0IgErA6CRASAKQjSHuaAiA0GIkAErAwAiBCABKwOYkQEgCSAKQoCAgICAgIB4g32/IAErA5iZAaEgASsDoJkBoaIiAL1CgICAgHCDvyIFoiIGoCIHIAAgAKIiAiACIAKiIABBwJABKwMAokG4kAErAwCgoiACIABBsJABKwMAokGokAErAwCgoiAAQaCQASsDAKJBmJABKwMAoKCgoiAAIAWhIASiQZCQASsDACAAoqAgBiADIAehoKCgoCEACyAAC7YWAxN/BHwBfiMAQTBrIgkkAAJAAkACQCAAvSIZQiCIpyIDQf////8HcSIGQfrUvYAETQRAIANB//8/cUH7wyRGDQEgBkH8souABE0EQCAZQgBZBEAgASAARAAAQFT7Ifm/oCIARDFjYhphtNC9oCIVOQMAIAEgACAVoUQxY2IaYbTQvaA5AwhBASEDDAULIAEgAEQAAEBU+yH5P6AiAEQxY2IaYbTQPaAiFTkDACABIAAgFaFEMWNiGmG00D2gOQMIQX8hAwwECyAZQgBZBEAgASAARAAAQFT7IQnAoCIARDFjYhphtOC9oCIVOQMAIAEgACAVoUQxY2IaYbTgvaA5AwhBAiEDDAQLIAEgAEQAAEBU+yEJQKAiAEQxY2IaYbTgPaAiFTkDACABIAAgFaFEMWNiGmG04D2gOQMIQX4hAwwDCyAGQbuM8YAETQRAIAZBvPvXgARNBEAgBkH8ssuABEYNAiAZQgBZBEAgASAARAAAMH982RLAoCIARMqUk6eRDum9oCIVOQMAIAEgACAVoUTKlJOnkQ7pvaA5AwhBAyEDDAULIAEgAEQAADB/fNkSQKAiAETKlJOnkQ7pPaAiFTkDACABIAAgFaFEypSTp5EO6T2gOQMIQX0hAwwECyAGQfvD5IAERg0BIBlCAFkEQCABIABEAABAVPshGcCgIgBEMWNiGmG08L2gIhU5AwAgASAAIBWhRDFjYhphtPC9oDkDCEEEIQMMBAsgASAARAAAQFT7IRlAoCIARDFjYhphtPA9oCIVOQMAIAEgACAVoUQxY2IaYbTwPaA5AwhBfCEDDAMLIAZB+sPkiQRLDQELIABEg8jJbTBf5D+iRAAAAAAAADhDoEQAAAAAAAA4w6AiFvwCIQMCQCAAIBZEAABAVPsh+b+ioCIVIBZEMWNiGmG00D2iIhehIhhEGC1EVPsh6b9jBEAgA0EBayEDIBZEAAAAAAAA8L+gIhZEMWNiGmG00D2iIRcgACAWRAAAQFT7Ifm/oqAhFQwBCyAYRBgtRFT7Iek/ZEUNACADQQFqIQMgFkQAAAAAAADwP6AiFkQxY2IaYbTQPaIhFyAAIBZEAABAVPsh+b+ioCEVCyABIBUgF6EiADkDAAJAIAZBFHYiAiAAvUI0iKdB/w9xa0ERSA0AIAEgFSAWRAAAYBphtNA9oiIAoSIYIBZEc3ADLooZozuiIBUgGKEgAKGhIhehIgA5AwAgAiAAvUI0iKdB/w9xa0EySARAIBghFQwBCyABIBggFkQAAAAuihmjO6IiAKEiFSAWRMFJICWag3s5oiAYIBWhIAChoSIXoSIAOQMACyABIBUgAKEgF6E5AwgMAQsgBkGAgMD/B08EQCABIAAgAKEiADkDACABIAA5AwhBACEDDAELIAlBEGoiA0EIciEEIBlC/////////weDQoCAgICAgICwwQCEvyEAQQEhAgNAIAMgAPwCtyIVOQMAIAAgFaFEAAAAAAAAcEGiIQAgAkEAIQIgBCEDDQALIAkgADkDIEECIQMDQCADIgJBAWshAyAJQRBqIg4gAkEDdGorAwBEAAAAAAAAAABhDQALQQAhBCMAQbAEayIFJAAgBkEUdkGWCGsiA0EDa0EYbSIHQQAgB0EAShsiD0FobCADaiEKQbTmACgCACIHIAJBAWoiDUEBayIIakEATgRAIAcgDWohAyAPIAhrIQIDQCAFQcACaiAEQQN0aiACQQBIBHxEAAAAAAAAAAAFIAJBAnQoAsBmtws5AwAgAkEBaiECIARBAWoiBCADRw0ACwsgCkEYayEGQQAhAyAHQQAgB0EAShshBCANQQBMIQsDQAJAIAsEQEQAAAAAAAAAACEADAELIAMgCGohDEEAIQJEAAAAAAAAAAAhAANAIA4gAkEDdGorAwAgBUHAAmogDCACa0EDdGorAwCiIACgIQAgAkEBaiICIA1HDQALCyAFIANBA3RqIAA5AwAgAyAERiADQQFqIQNFDQALQS8gCmshEUEwIAprIRAgCkEZayESIAchAwJAA0AgBSADQQN0aisDACEAQQAhAiADIQQgA0EASgRAA0AgBUHgA2ogAkECdGogAEQAAAAAAABwPqL8ArciFUQAAAAAAABwwaIgAKD8AjYCACAFIARBAWsiBEEDdGorAwAgFaAhACACQQFqIgIgA0cNAAsLIAAgBhBuIgAgAEQAAAAAAADAP6KcRAAAAAAAACDAoqAiACAA/AIiC7ehIQACQAJAAkACfyAGQQBMIhNFBEAgA0ECdCAFaiICIAIoAtwDIgIgAiAQdSICIBB0ayIENgLcAyACIAtqIQsgBCARdQwBCyAGDQEgA0ECdCAFaigC3ANBF3ULIghBAEwNAgwBC0ECIQggAEQAAAAAAADgP2YNAEEAIQgMAQtBACECQQAhDEEBIQQgA0EASgRAA0AgBUHgA2ogAkECdGoiFCgCACEEAn8CQCAUIAwEf0H///8HBSAERQ0BQYCAgAgLIARrNgIAQQEhDEEADAELQQAhDEEBCyEEIAJBAWoiAiADRw0ACwsCQCATDQBB////AyECAkACQCASDgIBAAILQf///wEhAgsgA0ECdCAFaiIMIAwoAtwDIAJxNgLcAwsgC0EBaiELIAhBAkcNAEQAAAAAAADwPyAAoSEAQQIhCCAEDQAgAEQAAAAAAADwPyAGEG6hIQALIABEAAAAAAAAAABhBEBBACEEIAMhAgJAIAMgB0wNAANAIAVB4ANqIAJBAWsiAkECdGooAgAgBHIhBCACIAdKDQALIARFDQADQCAGQRhrIQYgBUHgA2ogA0EBayIDQQJ0aigCAEUNAAsMAwtBASECA0AgAiIEQQFqIQIgBUHgA2ogByAEa0ECdGooAgBFDQALIAMgBGohBANAIAVBwAJqIAMgDWoiCEEDdGogA0EBaiIDIA9qQQJ0QcDmAGooAgC3OQMAQQAhAkQAAAAAAAAAACEAIA1BAEoEQANAIA4gAkEDdGorAwAgBUHAAmogCCACa0EDdGorAwCiIACgIQAgAkEBaiICIA1HDQALCyAFIANBA3RqIAA5AwAgAyAESA0ACyAEIQMMAQsLAkAgAEEYIAprEG4iAEQAAAAAAABwQWYEQCAFQeADaiADQQJ0aiAARAAAAAAAAHA+ovwCIgK3RAAAAAAAAHDBoiAAoPwCNgIAIANBAWohAyAKIQYMAQsgAPwCIQILIAVB4ANqIANBAnRqIAI2AgALRAAAAAAAAPA/IAYQbiEAIANBAE4EQCADIQIDQCAFIAIiBEEDdGogACAFQeADaiACQQJ0aigCALeiOQMAIAJBAWshAiAARAAAAAAAAHA+oiEAIAQNAAsgAyEEA0BEAAAAAAAAAAAhAEEAIQIgByADIARrIgYgBiAHShsiCkEATgRAA0AgAkEDdCsDkHwgBSACIARqQQN0aisDAKIgAKAhACACIApHIAJBAWohAg0ACwsgBUGgAWogBkEDdGogADkDACAEQQBKIARBAWshBA0ACwtEAAAAAAAAAAAhACADQQBOBEAgAyECA0AgAiIEQQFrIQIgACAFQaABaiAEQQN0aisDAKAhACAEDQALCyAJIACaIAAgCBs5AwAgBSsDoAEgAKEhAEEBIQIgA0EASgRAA0AgACAFQaABaiACQQN0aisDAKAhACACIANHIAJBAWohAg0ACwsgCSAAmiAAIAgbOQMIIAVBsARqJAAgC0EHcSEDIAkrAwAhACAZQgBTBEAgASAAmjkDACABIAkrAwiaOQMIQQAgA2shAwwBCyABIAA5AwAgASAJKwMIOQMICyAJQTBqJAAgAwvSAgMFfwF9AX4CQCACKAIUIAIoAgQgA2xBAnRqIQMgASICKAIIIgYgASgCDCAGa0EwbUEBayIHQTBsaiIFKAIAQX9HBEADQCAFKgIIjCEKIAMhASAFKAIYIgggBSgCHCIJRwRAA0AgCCoCACABKgIAlCAKkiEKIAFBBGohASAIQQRqIgggCUcNAAsLAkAgCkN3zCuyXQ0AIApDd8wrMl4EQCAFQQRqIQUMAQsgBBBFIAIoAgghBqdBAXFFBEAgBiAHQTBsaiEFDAELIAYgB0EwbGpBBGohBQsgBiAFKAIAIgdBMGxqIgUoAgBBf0cNAAsLIABBADYCCCAAQgA3AgACQCAFKAIoIgEgBSgCJCICRwRAIAEgAmsiAUEASA0BIAAgARASIgM2AgAgACABIANqIgQ2AgggAQRAIAMgAiAB/AoAAAsgACAENgIECwwBCxAUAAsL0wUCDn8BeyABKAIAIgQoAgAhCSAEIAEoAgQiC0YiBUUEQCALIAQiAWtBFGsiA0HQAE8EQCABIANBFG5BAWoiAiACQQNxIgJBBCACG2siBkEUbGohAUEAIQIDQCAEIAJBFGxqIgNBQGsgA0EsaiADQRhqIAP9XAIE/VYCAAH9VgIAAv1WAgADIBD9rgEhECACQQRqIgIgBkcNAAsgECAQIBD9DQgJCgsMDQ4PAAECAwABAgP9rgEiECAQIBD9DQQFBgcAAQIDAAECAwABAgP9rgH9GwAhAgsDQCABKAIEIAJqIQIgAUEUaiIBIAtHDQALCyAAQQA2AhAgAEIANwIIIAAgCTYCBCAAIAI2AgACQCACIAlsIgEEQCABQYCAgIAETw0BIAAgAUECdCIBEBIiBzYCCCAAIAEgB2oiAjYCECABBEAgB0H/ASAB/AsACyAAIAI2AgwLIAAgBzYCFCAFRQRAIAlBAnQhDUEAIQYDQCAEKAIIIgogBCgCDCIORwRAA0AgCigCKCIBIAooAiQiAkcEQCAHIAYgCWxBAnRqIQNBACEIQQAhAAJAAkAgASACa0ECdSIFQQRJDQAgBiANbCAHaiACa0EQSQ0AIAVBfHEhAEEAIQEDQCADIAFBAnQiDGogAiAMav0AAgD9CwIAIAFBBGoiASAARw0ACyAAIAVGDQELIAAhASAFQQNxIgwEQANAIAMgAUECdCIPaiACIA9qKAIANgIAIAFBAWohASAIQQFqIgggDEcNAAsLIAAgBWtBfU8NAANAIAMgAUECdCIAaiAAIAJqKAIANgIAIAMgAEEEaiIIaiACIAhqKAIANgIAIAMgAEEIaiIIaiACIAhqKAIANgIAIAMgAEEMaiIAaiAAIAJqKAIANgIAIAFBBGoiASAFRw0ACwsgBkEBaiEGCyAKQTBqIgogDkcNAAsLIARBFGoiBCALRw0ACwsPCxAUAAvJAwEGfyAAIAEpAgA3AgAgACABKAIINgIIIAEoAgwhAiAAQQA2AhggAEIANwIQIAAgAjYCDEEAIQICQAJAAkAgASgCFCIEIAEoAhAiBUYiBkUEQCAEIAVrIgRBAEgNASAAIAQQEiICNgIUIAAgAjYCECAAIAIgBGoiBzYCGCAEBEAgAiAFIAT8CgAACyAAIAc2AhQLIAAgASgCHCACIAYbNgIcIAAgASgCIDYCICABKAIkIQIgAEEANgIwIABCADcCKCAAIAI2AiQgASgCLCICIAEoAigiBEYiBUUEQCACIARrIgJBAEgNAiAAIAIQEiIDNgIsIAAgAzYCKCAAIAIgA2oiBjYCMCACBEAgAyAEIAL8CgAACyAAIAY2AiwLIAAgASgCNCADIAUbNgI0IAAgASgCODYCOCABKAI8IQNBACECIABBADYCSCAAQgA3AkAgACADNgI8IAEoAkQiAyABKAJAIgRGIgVFBEAgAyAEayIDQQBIDQMgACADEBIiAjYCRCAAIAI2AkAgACACIANqIgY2AkggAwRAIAIgBCAD/AoAAAsgACAGNgJECyAAIAEoAkwgAiAFGzYCTCAADwsQFAALEBQACxAUAAumBQMMfwJ+AXsjAEHQAGsiBSQAIABBADYCCCAAQgA3AgAgAEEUEBIiCjYCACAAIApBFGoiBjYCCCAKIQQDQCAEQQA2AhAgBEIANwIIIARBFGohBCAHQQFqIgdBAUcNAAsgACAGNgIEIAVBEGohDANAIAUgEUIBfCIQIAMpAwB8NwMgIAUgAykDCCAQfDcDKCAFIAMpAxAgEHw3AzAgBSADKQMYIBB8NwM4IAVBIGohDUEAIQhBACEAIwBBIGsiBiQAIAVBCGoiCyACNgIAIAv9DAAAAAAAAAAAAAAAAAAAAAD9CwIEAkACQAJAAkAgASgCACIEBEAgBEGAgICABE8NAyAEQQJ0IgcQEiEAIAdFIg5FBEAgAEEAIAf8CwALIAAhBAJAIAdBBGsiCUEMTwRAIAAgCUECdkEBaiIPQfz///8HcSIIQQJ0aiEE/QwAAAAAAQAAAAIAAAADAAAAIRJBACEJA0AgACAJQQJ0aiAS/QsCACAS/QwEAAAABAAAAAQAAAAEAAAA/a4BIRIgCUEEaiIJIAhHDQALIAggD0YNAQsgACAHaiEJA0AgBCAINgIAIAhBAWohCCAEQQRqIgQgCUcNAAsLDAELIAZBADYCECAGQgA3AggMAQsgB0EASA0BIAYgBxASIgQ2AgggBiAEIAdqIgg2AhAgDkUEQCAEIAAgB/wKAAALIAYgCDYCDAsgCyABIAZBCGogAiANQeQAEIoCIAYoAggiBARAIAYgBDYCDCAGKAIQGiAEEBELIAAEQCAAEBELIAZBIGokAAwBCxAUAAsgCiARp0EUbGoiACAFKQMINwIAIABBCGogBSgCECIAIAUoAhQiBCAEIABrQTBtENABIAUgDDYCTCAFQcwAahBRIBAiEUIBUg0ACyAFQdAAaiQACyIAIAAtAOkBQQFGBEBBCBAVQdMvECpBxOICQQQQAQALIAALjQkCEH8DfSACQQBMBEBBAA8LIAEoAgAgASgCBEcEQANAIAEoAgAiECABKAIEIhFHBEADQAJAIBAoAgAiDSAQKAIEIhJGDQACQANAIA0oAgAiCEEATgRAIA0oAgQiCUEASA0CIA0qAgghFCAPIAggAnBGBEBBACEEAkAgFCAAKAI0IgsgACgCJCAIbCIMQQJ0aioCAGANACAAKAIcIQUgACgCDCIDIAhsIgcgAyAIQQFqbCIDRwRAIAUgA0ECdGohBiAFIAdBAnRqIQMDQCADKAIAIAlGDQIgA0EEaiIDIAZHDQALC0EBIQRBACEDQQIhBiAAKAIEIg5BAUsEQAJAA0AgAyEFIAAoAjQiCyAAKAIkIAhsIgxBAnRqIgcgBEECdGoqAgAhEwJAIAYgDk8EQCAEIQMgEyAUXg0BIAUhAwwDCyAHIAZBAnRqKgIAIhUgE18EQCAEIQMgEyAUXg0BIAUhAwwDCyAGIQMgFSITIBReDQAgBSEDDAILIAAoAhwgACgCDCAIbEECdGoiBCAFQQJ0IgZqIAQgA0ECdGooAgA2AgAgBiAHaiATOAIAIAAoAkwgACgCPCAIbGoiBCAFaiADIARqLQAAOgAAIANBAXQiBEECaiEGIARBAXIiBCAAKAIEIg5JDQALIAAoAiQgCGwhDCAAKAI0IQsLIAAoAgwgCGwhByAAKAIcIQULIANBAnQiBCAFIAdBAnRqaiAJNgIAIAsgDEECdGogBGogFDgCACAAKAJMIAAoAjwgCGxqIANqQTE6AABBASEECyAEIApqIQoLIA8gCSACcEYEQEEAIQQCQCAUIAAoAjQiCyAAKAIkIAlsIgxBAnRqKgIAYA0AIAAoAhwhBSAAKAIMIgMgCWwiByADIAlBAWpsIgNHBEAgBSADQQJ0aiEGIAUgB0ECdGohAwNAIAMoAgAgCEYNAiADQQRqIgMgBkcNAAsLQQEhBEEAIQNBAiEGIAAoAgQiDkEBSwRAAkADQCADIQUgACgCNCILIAAoAiQgCWwiDEECdGoiByAEQQJ0aioCACETAkAgBiAOTwRAIAQhAyATIBReDQEgBSEDDAMLIAcgBkECdGoqAgAiFSATXwRAIAQhAyATIBReDQEgBSEDDAMLIAYhAyAVIhMgFF4NACAFIQMMAgsgACgCHCAAKAIMIAlsQQJ0aiIEIAVBAnQiBmogBCADQQJ0aigCADYCACAGIAdqIBM4AgAgACgCTCAAKAI8IAlsaiIEIAVqIAMgBGotAAA6AAAgA0EBdCIEQQJqIQYgBEEBciIEIAAoAgQiDkkNAAsgACgCJCAJbCEMIAAoAjQhCwsgACgCDCAJbCEHIAAoAhwhBQsgA0ECdCIEIAUgB0ECdGpqIAg2AgAgCyAMQQJ0aiAEaiAUOAIAIAAoAkwgACgCPCAJbGogA2pBMToAAEEBIQQLIAQgCmohCgsgEiANQQxqIg1HDQEMAwsLQY8uQekUQf0CQYUREAAAC0GFLkHpFEH+AkGFERAAAAsgEEEMaiIQIBFHDQALCyAPQQFqIg8gAkcNAAsLIAoLpQ4CEH8EfiMAQSBrIhEkACAAKAIAIQ8gBEEASgRAIAStIRgDQCARIBUiFkIBfCIVIAMpAwB8NwMAIBEgFSADKQMIfDcDCCARIBUgAykDEHw3AxAgESAVIAMpAxh8NwMYAkAgD0EATA0AQQAhCiAAKAIEIgVBAEwNAANAIAVBAEoEQCAKQQJ0IhNBBGohFEEAIQ8DQAJAIAAoAhwgACgCDCAKbEECdGogD0ECdGooAgAiDUF/Rg0AIAAoAkwgACgCPCAKbGogD2otAAAgCiAEcK0hFyAREEWnIQtBMUYEQAJAIBYgF1INACABKAI0IAEoAiQgCmxBAnRqIggoAgAgC0wNACABKAIcIgUgEyABKAIMIgZsIgdqIQwgBiAUbCIGIAdHBEAgBSAGaiEGIAwhBQNAIAUoAgAgDUYNAiAFQQRqIgUgBkcNAAsLQQEhBkEAIQVBAiEJAkAgASgCBCIQQQFNDQADQCAFIQcgCCAGQQJ0aigCACEOAkAgCSAQTwRAIAYhBSALIA5IDQEgByEFDAMLIAggCUECdGooAgAiEiAOTARAIAYhBSALIA5IDQEgByEFDAMLIAkhBSALIBJIDQAgByEFDAILIAwgB0ECdCIGaiAMIAVBAnQiB2ooAgA2AgAgBiAIaiAHIAhqKAIANgIAIAVBAXQiBkECaiEJIAZBAXIiBiAQSQ0ACwsgDCAFQQJ0IgVqIA02AgAgBSAIaiALNgIACyAWIA0gBG+tUg0BIAEoAjQgASgCJCANbEECdGoiCCgCACALTA0BIAEoAhwiBSANQQJ0IgYgASgCDCIHbCIJaiEMIAZBBGogB2wiBiAJRwRAIAUgBmohBiAMIQUDQCAFKAIAIApGDQMgBUEEaiIFIAZHDQALC0EBIQdBACEFQQIhBgJAIAEoAgQiDkEBTQ0AA0AgBSEJIAggB0ECdGooAgAhDQJAIAYgDk8EQCAHIQUgCyANSA0BIAkhBQwDCyAIIAZBAnRqKAIAIhAgDUwEQCAHIQUgCyANSA0BIAkhBQwDCyAGIQUgCyAQSA0AIAkhBQwCCyAMIAlBAnQiBmogDCAFQQJ0IgdqKAIANgIAIAYgCGogByAIaigCADYCACAFQQF0IgdBAmohBiAHQQFyIgcgDkkNAAsLIAwgBUECdCIFaiAKNgIAIAUgCGogCzYCAAwBCwJAIBYgF1INACACKAI0IAIoAiQgCmxBAnRqIggoAgAgC0wNACACKAIcIgUgEyACKAIMIgZsIgdqIQwgBiAUbCIGIAdHBEAgBSAGaiEGIAwhBQNAIAUoAgAgDUYNAiAFQQRqIgUgBkcNAAsLQQEhBkEAIQVBAiEJAkAgAigCBCIQQQFNDQADQCAFIQcgCCAGQQJ0aigCACEOAkAgCSAQTwRAIAYhBSALIA5IDQEgByEFDAMLIAggCUECdGooAgAiEiAOTARAIAYhBSALIA5IDQEgByEFDAMLIAkhBSALIBJIDQAgByEFDAILIAwgB0ECdCIGaiAMIAVBAnQiB2ooAgA2AgAgBiAIaiAHIAhqKAIANgIAIAVBAXQiBkECaiEJIAZBAXIiBiAQSQ0ACwsgDCAFQQJ0IgVqIA02AgAgBSAIaiALNgIACyAWIA0gBG+tUg0AIAIoAjQgAigCJCANbEECdGoiCCgCACALTA0AIAIoAhwiBSANQQJ0IgYgAigCDCIHbCIJaiEMIAZBBGogB2wiBiAJRwRAIAUgBmohBiAMIQUDQCAFKAIAIApGDQIgBUEEaiIFIAZHDQALC0EBIQdBACEFQQIhBgJAIAIoAgQiDkEBTQ0AA0AgBSEJIAggB0ECdGooAgAhDQJAIAYgDk8EQCAHIQUgCyANSA0BIAkhBQwDCyAIIAZBAnRqKAIAIhAgDUwEQCAHIQUgCyANSA0BIAkhBQwDCyAGIQUgCyAQSA0AIAkhBQwCCyAMIAlBAnQiBmogDCAFQQJ0IgdqKAIANgIAIAYgCGogByAIaigCADYCACAFQQF0IgdBAmohBiAHQQFyIgcgDkkNAAsLIAwgBUECdCIFaiAKNgIAIAUgCGogCzYCAAsgD0EBaiIPIAAoAgQiBUgNAAsgACgCACEPCyAKQQFqIgogD0gNAAsLIBUgGFINAAsLAkAgD0UNACAAKAIEIgZFDQBBACEHIAYhCgNAAkAgCkUEQEEAIQoMAQtBACEFIAEoAgRFDQADQAJAIAEoAgQiAkUNACAAKAIcIAAoAgwgB2xBAnRqIAVBAnRqKAIAIQMgASgCHCABKAIMIAdsQQJ0aiEEQQAhCgNAIAMgBCAKQQJ0aigCAEcEQCACIApBAWoiCkcNAQwCCwsgACgCTCAAKAI8IAdsaiAFakEwOgAAIAAoAgQhBgsgBUEBaiIFIAZJDQALIAAoAgAhDyAGIQoLIAdBAWoiByAPSQ0ACwsgEUEgaiQAC/ADAgh/An0CQCAAKAI0IgggACgCJCABbCIGQQJ0aioCAEMAAAAAXw0AIAAoAhwhBCAAKAIMIgMgAWwiByADIAFBAWpsIgNHBEAgBCADQQJ0aiEFIAQgB0ECdGohAwNAIAMoAgAgAkYNAiADQQRqIgMgBUcNAAsLQQAhAyAAKAIEIgpBAk8EQEECIQZBASEEAkADQCADIQUgACgCNCIIIAAoAiQiByABbEECdGoiCSAEQQJ0aioCACELAkAgBiAKTwRAIAQhAyALQwAAAABeDQEgBSEDDAMLIAkgBkECdGoqAgAiDCALXwRAIAQhAyALQwAAAABeDQEgBSEDDAMLIAYhAyAMQwAAAABeDQAgBSEDDAILIAAoAhwgACgCDCABbEECdGoiBCAFQQJ0IgZqIAQgA0ECdCIHaigCADYCACAGIAlqIAcgCWoqAgA4AgAgBSAAKAJMIAAoAjwgAWxqIgRqIAMgBGotAAA6AAAgA0EBdCIFQQJqIQYgBUEBciIEIAAoAgQiCkkNAAsgACgCJCEHIAAoAjQhCAsgASAHbCEGIAAoAgwgAWwhByAAKAIcIQQLIANBAnQiBSAEIAdBAnRqaiACNgIAIAggBkECdGogBWpDAAAAADgCACAAKAJMIAAoAjwgAWxqIANqQTE6AAALCwcAIAAoAgwL8wMCBn8CfCMAQRBrIgUkACABKAIIIQQCQAJAAkACQCABKAIEIgdBAUYEQCADKwMAIQsgASgCACIDQQAgBEEASBsNBCACKAIEIQEgAigCACICQQAgAUEASBsNBCABIARHDQICQCAERQRADAELIARBAEwNBCADKwMAIAIrAwCiIQpBASEBIARBAUYNACAEQQFrIgZBA3EhByAEQQJrQQNPBEAgBkF8cSEJQQAhBgNAIAogAyABQQN0IgRqKwMAIAIgBGorAwCioCADIARBCGoiCGorAwAgAiAIaisDAKKgIAMgBEEQaiIIaisDACACIAhqKwMAoqAgAyAEQRhqIgRqKwMAIAIgBGorAwCioCEKIAFBBGohASAGQQRqIgYgCUcNAAsLIAdFDQBBACEEA0AgCiADIAFBA3QiBmorAwAgAiAGaisDAKKgIQogAUEBaiEBIARBAWoiBCAHRw0ACwsgACgCACIAIAsgCqIgACsDAKA5AwAMAQsgAysDACEKIAIoAgAhAiABKAIAIQEgBSAHNgIMIAUgATYCCCAFQQE2AgQgBSACNgIAIAcgBCAFQQhqIAUgACgCACAKEDkLIAVBEGokAA8LQbA5QfkaQdIAQewLEAAAC0HmOUHbGUGbA0GGCRAAAAtBlDNBjSFBsgFByiQQAAAL/gsDGH8BfAF7IwBBoAJrIgMkAAJAAkACQAJAAkACQAJAIAEoAggiDSAAKAIERw0AIAAoAgggDUcNACABKAIEIA1IDQAgDUEBayIRQQBOBEAgDUEDdCEZIBEhBQNAAkAgDSAFQX9zIgdqIgRBAEwNACAFIAIoAgRODQUgASgCDCIOKAIEIQYgAigCACACKAIMKAIEQQFqIAVsQQN0aisDACEbIAEoAgQiD0EASEEAIAEoAgAiCBsNBiADIAEpAgA3AgwgAyABKAIINgIUIAUgASgCCCILTg0HIAcgD2oiCUEATiIHQQEgCBtFDQYgCSAFQQFqIgxyQQBIDQggB0UNBCALIARrIgsgBHJBAEgNCCADIAEoAgg2AjAgAyABKQIANwMoIAMgASgCGDYCICADIAEpAhA3AxggA0FAayIUIAEoAhg2AgAgAyABKQIQNwM4IAAoAgAiEEEAIAAoAggiB0EASBsNBiAFIAAoAgRODQcgByAEayISIARyQQBIDQggCCAFIAZsQQN0aiIVIAxBA3QiFmohFyAQIAUgB2xBA3RqIhggEkEDdGohECAEQQN0IgoEQCAQQQAgCvwLAAsgA0KAgICAgICA+D83A0ggAyAHNgKcAiADIBI2ApgCIAMgBzYCkAIgA0EANgKMAiADIAU2AogCIAMgADYChAIgAyAHNgKAAiADIBg2AvgBIAMgBDYC9AEgAyAQNgLsASADIAQ2AsABIAMgCTYCvAEgAyAIIBZqIAYgC2xBA3RqNgK4ASADIAMoAjA2AswBIAMgAykDKDcCxAEgAyAONgLQASADIAMoAiA2AtwBIAMgAykDGDcC1AEgAyAGNgLoASADIAs2AuQBIAMgDDYC4AEgAyAPNgJ4IAMgFTYCdCADIAk2AmwgAyAXNgJoIAMgG5o5A2AgAyAJNgJcIAMgA/0AAgj9CwJ8IAMgDjYCjAEgAyAUKAIANgKYASADIAMpAzg3A5ABIAMgBjYCsAEgAyAMNgKoASADIAY2AqQBIAMgBTYCoAEgA0EANgKcASADQbgBaiADQdAAaiADQewBaiADQcgAahDYAyAFIBFODQAgBSAAKAIEIhRODQkgACgCACIMIAAoAggiCSAFbEEDdGohEiAMIAkgGWxqIRBBACEIQQAgCUEDdCIEayEVIARBeHMhFiAMIAkgDSATa0EDdGwiF2ohGCARIQcDQCAJIBFMDQogESAUTg0KIBIgB0EDdCIEaiIGIAYrAwAiGyAEIAwgByAJbEEDdGoiBGorAwCiOQMAAkAgDSAHQX9zaiILQQBMDQAgByAAKAIETg0JIAkgC2siBiALckEASA0KIAQgBkEDdCIGaiEOIAYgEmohD0EAIQQCQCAIQQJJDQAgECAIIBZsaiAYSQR/IAwgFyAIQQN0a2ogECAIIBVsakkFQQALDQAgCEF+cSEEIBv9FCEcQQAhBgNAIA8gBkEDdCIKaiIaIBwgCiAOav0AAwD98gEgGv0AAwD98AH9CwMAIAZBAmoiBiAERw0ACyAEIAhGDQELIARBAXIhBiAIQQFxBEAgDyAEQQN0IgRqIgogGyAEIA5qKwMAoiAKKwMAoDkDACAGIQQLIAYgCEYNAANAIA8gBEEDdCIGaiIKIBsgBiAOaisDAKIgCisDAKA5AwAgDyAGQQhqIgZqIgogGyAGIA5qKwMAoiAKKwMAoDkDACAEQQJqIgQgC0cNAAsLIAhBAWohCCAHQQFrIgcgBUoNAAsLIAUgAigCBE4NBCAFIAAoAgRODQggBSAAKAIIIgRODQggACgCACAEIAVsQQN0aiAFQQN0aiACKAIAIAIoAgwoAgRBAWogBWxBA3RqKwMAOQMAIBNBAWohEyAFQQBKIAVBAWshBQ0ACwsgA0GgAmokAA8LQckRQbMcQTZB/BIQAAALQZ0xQZ8dQcoAQZ0VEAAAC0HHOUHaIEG1AUGAORAAAAtBlDNBjSFBsgFByiQQAAALQb40QasfQfoAQf0YEAAAC0HPD0GrH0GTAUH9GBAAAAtByzhB2iBB7wJBgDkQAAAL4RgDGn8BfAF7IwBBoAJrIgQkAAJAAkACQAJAAkACQAJAIAEoAgQiFyAAKAIERw0AIAAoAgggF0cNACABKAIIIBdIDQAgF0EBayIZQQBOBEAgF0EDdCEbIBkhCwNAAkAgFyALQX9zIgdqIgZBAEwNACALIAIoAgRODQUgAigCACACKAIMKAIEQQFqIAtsQQN0aisDACEdIAEoAggiE0EASEEAIAEoAgAiChsNCSAEIAEpAgA3AgwgBCABKAIINgIUIAsgASgCBCIJTg0GIAEoAgwiFCgCBCEDIAcgE2oiCEEATiIHQQEgChtFDQkgCCALQQFqIhByQQBIDQcgB0UNBCAJIAZrIgkgBnJBAEgNByAEIAEoAgg2AjAgBCABKQIANwMoIAQgASgCGDYCICAEIAEpAhA3AxggBEFAayIRIAEoAhg2AgAgBCABKQIQNwM4IAAoAgAiDUEAIAAoAggiB0EASBsNCSALIAAoAgRODQYgByAGayIMIAZyQQBIDQcgCiALQQN0aiISIAMgEGxBA3QiDmohBSANIAcgC2xBA3RqIhggDEEDdGohDSAGQQN0IhUEQCANQQAgFfwLAAsgBEKAgICAgICA+D83A0ggBCAHNgKcAiAEIAw2ApgCIAQgBzYCkAIgBEEANgKMAiAEIAs2AogCIAQgADYChAIgBCAHNgKAAiAEIBg2AvgBIAQgBjYC9AEgBCANNgLsASAEIAY2AsABIAQgCDYCvAEgBCAKIAlBA3RqIA5qNgK4ASAEIAQoAjA2AswBIAQgBCkDKDcCxAEgBCAUNgLQASAEIAQoAiA2AtwBIAQgBCkDGDcC1AEgBCADNgLoASAEIAk2AuQBIAQgEDYC4AEgBCATNgJ4IAQgEjYCdCAEIAg2AmwgBCAFNgJoIAQgHZo5A2AgBCAINgJcIAQgBP0AAgj9CwJ8IAQgFDYCjAEgBCARKAIANgKYASAEIAQpAzg3A5ABIARBATYCsAEgBCAQNgKoASAEQQE2AqQBIAQgCzYCoAEgBEEANgKcASMAQRBrIgkkACAEKAKMASEIIAQoAmghByAEKALQASEKIAQoAsABIRQgBCgCvAEhECAEKAK4ASETIAkgBCsDYCAEKwNIojkDCAJAIAQoAvQBIhhBgICAgAJJBEACQAJ/QQEgBCgC7AEiBg0AGiAYQQN0IQYgGEGAgAFNBEAgCSAGQR5qQXBxayIGJABBAAwBCyAGQRBqEBciBkUNASAGQXBxIgMgBjYCDCADQRBqIQYgBCgC7AFBAEcLIRwgCigCBCESIAgoAgQhEUEAIQwjAEEQayINJAACQAJAIBNBACAQIBQgECAUSBsiCiAQckEASBtFBEAgEEEATgRAIBRBAEgNAiAKQQBKBEAgCiEIA0ACQCAKIAxrIhVBAEwNACAGIAxBA3QiDmoiAyAJKwMIIAcgDCARbEEDdGorAwCiIAMrAwCgOQMAIAhBAUwNACADIAkrAwggByAMQQFyIgUgEWxBA3RqIg8rAwCiIA4gE2oiDiAFIBJsQQN0aisDAKIgAysDAKA5AwAgBiAFQQN0aiIFIAkrAwggDysDAKIgBSsDAKA5AwAgCEECRg0AIAMgCSsDCCAHIAxBAnIiBSARbEEDdGoiDysDAKIiHSAOIAUgEmxBA3RqIhYrAwCiIAMrAwCgOQMAIAMgHSAWKwMIoiADKwMIoDkDCCAGIAVBA3RqIgUgCSsDCCAPKwMAoiAFKwMAoDkDACAIQQNGDQAgAyAJKwMIIAcgDEEDciIFIBFsQQN0aiIWKwMAoiIdIA4gBSASbEEDdGoiDysDAKIgAysDAKA5AwAgAyAdIA8rAwiiIAMrAwigOQMIIAMgHSAPKwMQoiADKwMQoDkDECAGIAVBA3RqIgUgCSsDCCAWKwMAoiAFKwMAoDkDACAIQQRGDQAgAyAJKwMIIAcgDEEEciIPIBFsQQN0aiIWKwMAoiIdIA4gDyASbEEDdGoiBSsDAKIgAysDAKA5AwAgAyAdIAUrAwiiIAMrAwigOQMIIAMgHSAFKwMQoiADKwMQoDkDECADIB0gBSsDGKIgAysDGKA5AxggBiAPQQN0aiIFIAkrAwggFisDAKIgBSsDAKA5AwAgCEEFRg0AIAMgCSsDCCAHIAxBBXIiDyARbEEDdGoiFisDAKIiHSAOIA8gEmxBA3RqIgUrAwCiIAMrAwCgOQMAIAMgHSAFKwMIoiADKwMIoDkDCCADIB0gBSsDEKIgAysDEKA5AxAgAyAdIAUrAxiiIAMrAxigOQMYIAMgHSAFKwMgoiADKwMgoDkDICAGIA9BA3RqIgUgCSsDCCAWKwMAoiAFKwMAoDkDACAIQQZGDQAgAyAJKwMIIAcgDEEGciIPIBFsQQN0aiIWKwMAoiIdIA4gDyASbEEDdGoiBSsDAKIgAysDAKA5AwAgAyAdIAUrAwiiIAMrAwigOQMIIAMgHSAFKwMQoiADKwMQoDkDECADIB0gBSsDGKIgAysDGKA5AxggAyAdIAUrAyCiIAMrAyCgOQMgIAMgHSAFKwMooiADKwMooDkDKCAGIA9BA3RqIgUgCSsDCCAWKwMAoiAFKwMAoDkDACAIQQdGDQAgAyAJKwMIIAcgDEEHciIFIBFsQQN0aiIPKwMAoiIdIA4gBSASbEEDdGoiDisDAKIgAysDAKA5AwAgAyAdIA4rAwiiIAMrAwigOQMIIAMgHSAOKwMQoiADKwMQoDkDECADIB0gDisDGKIgAysDGKA5AxggAyAdIA4rAyCiIAMrAyCgOQMgIAMgHSAOKwMooiADKwMooDkDKCADIB0gDisDMKIgAysDMKA5AzAgBiAFQQN0aiIDIAkrAwggDysDAKIgAysDAKA5AwALIAwEQCANIBI2AgwgDSATIAwgEmxBA3RqNgIIIA0gETYCBCANIAcgDCARbEEDdGo2AgAgDEEIIBUgFUEIThsgDUEIaiANIAYgCSsDCBA5CyAIQQhrIQggDEEIaiIMIApIDQALCyAQIBRKBEAgDSASNgIMIA0gEyAKIBJsQQN0ajYCCCANIBE2AgQgDSAHIAogEWxBA3RqNgIAIAogECAKayANQQhqIA0gBiAJKwMIEDkLIA1BEGokAAwDCwwBCwwOC0H4LUGNIUGmAUHKJBAAAAsCQCAYQYGAAUkNACAcDQAgBkEEaygCABARCyAJQRBqJAAMAgsLQQQQFSIAQfjfAjYCACAAQdDfAjYCACAAQZzgAkECEAEACyALIBlODQAgCyAAKAIEIhFODQggACgCACITIAAoAggiECALbEEDdGohDCATIBAgG2xqIQ1BACEKQQAgEEEDdCIGayESIAZBeHMhDiATIBAgFyAaa0EDdGwiBWohGCAZIQYDQCAQIBlMDQkgESAZTA0JIAwgBkEDdCIHaiIIIAgrAwAiHSAHIBMgBiAQbEEDdGoiCGorAwCiOQMAAkAgFyAGQX9zaiIJQQBMDQAgBiAAKAIETg0IIBAgCWsiByAJckEASA0JIAggB0EDdCIHaiEUIAcgDGohA0EAIQcCQCAKQQJJDQAgDSAKIA5saiAYSQR/IBMgBSAKQQN0a2ogDSAKIBJsakkFQQALDQAgCkF+cSEHIB39FCEeQQAhCANAIAMgCEEDdCIVaiIPIB4gFCAVav0AAwD98gEgD/0AAwD98AH9CwMAIAhBAmoiCCAHRw0ACyAHIApGDQELIAdBAXIhCCAKQQFxBEAgAyAHQQN0IgdqIhUgHSAHIBRqKwMAoiAVKwMAoDkDACAIIQcLIAggCkYNAANAIAMgB0EDdCIIaiIVIB0gCCAUaisDAKIgFSsDAKA5AwAgAyAIQQhqIghqIhUgHSAIIBRqKwMAoiAVKwMAoDkDACAHQQJqIgcgCUcNAAsLIApBAWohCiAGQQFrIgYgC0oNAAsLIAsgAigCBE4NBCALIAAoAgRODQcgCyAAKAIIIgZODQcgACgCACAGIAtsQQN0aiALQQN0aiACKAIAIAIoAgwoAgRBAWogC2xBA3RqKwMAOQMAIBpBAWohGiALQQBKIAtBAWshCw0ACwsgBEGgAmokAA8LQckRQbMcQTZB/BIQAAALQZ0xQZ8dQcoAQZ0VEAAAC0HHOUHaIEG1AUGAORAAAAtBvjRBqx9B+gBB/RgQAAALQc8PQasfQZMBQf0YEAAAC0HLOEHaIEHvAkGAORAAAAtBlDNBjSFBsgFByiQQAAALvhsDEn8CfAF+IwBBkAFrIgYkACAAKAIEIQMgACgCCCEEAkACQAJAAkACQAJAAkACQCACKAIEIgVBAEwNACADIAVqIARqQRNKDQAgASgCCCIFIAIpAgAiF0IgiKdHDQIgAigCCCEHIAEoAgAhCCABKAIEIQkgBiAFNgIoIAYgCTYCJCAGIAg2AiAgBiABKAIUNgI0IAYgASkCDDcCLCAGIAEoAiQ2AkQgBiABKQIcNwI8IAYgBzYCUCAGIBc3AkggBiACKAIUNgJcIAYgAikCDDcCVCAGIAIoAiQ2AmwgBiACKQIcNwJkIAYgCDYCcCAGIBc+AnwgBiAGKAIwNgJ4IAYgBTYCiAEgBiAGKAJYNgKEASADIAlHDQMgBCAHRw0DIAYgACgCADYCFCAGIAAoAhgoAgQ2AhwgBiAANgIQIAYgBkEDajYCDCAGIAZBIGo2AgggBiAGQRRqNgIEQQAhAgJAIAYoAhAiACgCCCIOQQBMDQAgACgCBCIKQQBMDQAgBigCCCIAKAIIIQMgBigCBCIBKAIIIQ8gASgCACEQAkAgACgCACINQQAgA0EASBsNACADQQFrIgtBfnEhESALQQFxIRICQAJAA0AgECACIA9sQQN0aiEMQQAhAQJAIAMEQEEAIQUgA0EASgRAA0AgBSAAKAIETg0GIAAoAhAhBCAAKAI4IQggACgCKCIJQQAgACgCLCIBQQBIGw0HIAIgACgCME4NBiABIANHDQUgDCAFQQN0IgdqQQEhASAHIA1qIgcrAwAgCSACIAhsQQN0aiIIKwMAoiEVQQAhCQJAAkACQCALDgICAQALA0AgFSAHIAEgBGxBA3RqKwMAIAggAUEDdGorAwCioCAHIAFBAWoiFCAEbEEDdGorAwAgCCAUQQN0aisDAKKgIRUgAUECaiEBIAlBAmoiCSARRw0ACwsgEkUNACAVIAcgASAEbEEDdGorAwAgCCABQQN0aisDAKKgIRULIBU5AwAgBUEBaiIFIApHDQAMAwsACyAAKAIEQQBMDQQgACgCKEEAIAAoAiwiAUEASBsNBSACIAAoAjBODQQgASADRw0DDAwLA0AgASAAKAIETg0EIAAoAihBACAAKAIsIgRBAEgbDQUgAiAAKAIwTg0EIAQNAyAMIAFBA3RqQgA3AwAgAUEBaiIBIApHDQALCyACQQFqIgIgDkcNAAsMAwtB3TdB7hxB9ABBjxUQAAALQb40QasfQfoAQf0YEAAACwwICwwBCyADIARyQQBIDQMCQCADQQBMDQAgBEEATA0AIAAoAgAhByADQQN0IQUgACgCGCgCBEEDdCEIQQAhAyAEQQRPBEAgBEH8////B3EhCwNAIAVFIgpFBEAgByADIAhsakEAIAX8CwALIApFBEAgByAIIANBAXJsakEAIAX8CwALIApFBEAgByAIIANBAnJsakEAIAX8CwALIApFBEAgByAIIANBA3JsakEAIAX8CwALIANBBGohAyAMQQRqIgwgC0cNAAsLIARBA3EiBEUNAANAIAUEQCAHIAMgCGxqQQAgBfwLAAsgA0EBaiEDIAlBAWoiCSAERw0ACwsgBkKAgICAgICA+D83AyAjAEGQAWsiAyQAAkACQCAAKAIEIgQgASgCBEcNACAAKAIIIgUgAigCCEcNAAJAIAVFDQAgBEUNACABKAIIIgdFDQAgBUEBRgRAIAMgACgCACIFNgJAIAMgBDYCRCAEQQBIQQAgBRsNCiADIAAoAjA2AnwgAyAA/QACIP0LAmwgAyAAKQIYIhc3AmQgAyAAKQIQNwJcIAMgAP0AAgD9CwJMIANCADcCgAEgAyAXpygCBDYCiAEgAigCACEAIAMgAigCBCIENgIEIAMgADYCACAAQQAgBEEASBsNCiADIAIoAgg2AhQgAyACKQIANwIMIAMgAigCFDYCICADIAIpAgw3AhggAyACKAIkNgIwIAIpAhwhFyADQgA3AjQgAyADKAIcNgI8IAMgFzcCKCADQUBrIQgjAEEQayIAJAACQCABKAIEIgJBAUYEQCAGKwMgIRYgASgCACIEQQAgASgCCCICQQBIGw0MIAEoAhAhByADKAIAIgVBACADKAIEIgFBAEgbDQwgASACRw0LAkAgAkUNACACQQBMDQsgBCsDACAFKwMAoiEVQQEhASACQQFGDQAgAkEBayIJQQFxIAJBAkcEQCAJQX5xIQlBACECA0AgFSAEIAEgB2xBA3RqKwMAIAUgAUEDdGorAwCioCAEIAFBAWoiCyAHbEEDdGorAwAgBSALQQN0aisDAKKgIRUgAUECaiEBIAJBAmoiAiAJRw0ACwtFDQAgFSAEIAEgB2xBA3RqKwMAIAUgAUEDdGorAwCioCEVCyAIKAIAIgEgFiAVoiABKwMAoDkDAAwBCyAGKwMgIRUgASgCCCEEIAMoAgAhBSABKAIAIQcgACABKAIQNgIMIAAgBzYCCCAAQQE2AgQgACAFNgIAIAIgBCAAQQhqIAAgCCgCACAVEDkLIABBEGokAAwBCyAEQQFGBEAgAyAAKAIAIgQ2AkAgAyAFNgJIIAVBAEhBACAEGw0KIAMgACgCMDYCfCADIAD9AAIg/QsCbCADIAD9AAIQ/QsCXCADIAD9AAIA/QsCTCADQQE2AogBIANCADcCgAEgAyABKAIAIgA2AgAgAyAHNgIIIAdBAEhBACAAGw0KIAMgASgCCDYCFCADIAEpAgA3AgwgAyABKAIUNgIgIAMgASkCDDcCGCADIAEoAiQ2AjAgASkCHCEXIANCADcCNCADQQE2AjwgAyAXNwIoIANBQGshCUEAIQpBACELIwBBwAFrIgQkAAJAIAIoAghBAUYEQCAGKwMgIRYgAygCACIFQQAgAygCCCIBQQBIGw0MIAMoAhwhCCACKAIAIgdBACACKAIEIgBBAEgbDQwgACABRw0LAkAgAUUNACABQQBMDQsgBSsDACAHKwMAoiEVQQEhACABQQFGDQAgAUEBayICQQFxIAFBAkcEQCACQX5xIQEDQCAVIAUgACAIbEEDdGorAwAgByAAQQN0aisDAKKgIAUgAEEBaiICIAhsQQN0aisDACAHIAJBA3RqKwMAoqAhFSAAQQJqIQAgCkECaiIKIAFHDQALC0UNACAVIAUgACAIbEEDdGorAwAgByAAQQN0aisDAKKgIRULIAkoAgAiACAWIBWiIAArAwCgOQMADAELIARB9ABqIAlBzAD8CgAAIAQgAigCCDYCUCAEIAIpAgA3A0ggBCACKAIUNgJcIAQgAikCDDcCVCAEIAIoAiQ2AmwgBCACKQIcNwJkIAQgAygCCDYCECAEIAMpAgA3AwggBCADKAIUNgIcIAQgAykCDDcCFCAEIAMoAiA2AiggBCADKQIYNwMgIAQgAygCMDYCOCAEIAMpAig3AzAgBCADKAI8NgJEIAQgAykCNDcCPCMAQRBrIgckAAJAAkACQAJAIAQoAhAiAkGAgICAAkkEQCAGKwMgIRUgBCgCJCEJIAQoAgghCCAEKAJYIQwgBCgCUCEOIAQoAkwhDyAEKAJIIRAgAkEDdCEAIAJBgYABTwRAIABBEGoQFyIARQ0EIABBcHEiASAANgIMIAFBEGohBQwCCyAHIABBHmpBcHFrIgUkACACDQEMAgsMAgsgAkGAgAFLIQtBACEBAkAgAkEGSQ0AIAlBAUcNACAFIAhrQRBJDQAgAkH+////AXEhAUEAIQADQCAFIABBA3QiDWogCCANav0AAwD9CwMAIABBAmoiACABRw0ACyABIAJGDQELIAIgASIAa0EDcSINBEADQCAFIABBA3RqIAggACAJbEEDdGorAwA5AwAgAEEBaiEAIApBAWoiCiANRw0ACwsgASACa0F8Sw0AA0AgBSAAQQN0aiAIIAAgCWxBA3RqKwMAOQMAIAUgAEEBaiIBQQN0aiAIIAEgCWxBA3RqKwMAOQMAIAUgAEECaiIBQQN0aiAIIAEgCWxBA3RqKwMAOQMAIAUgAEEDaiIBQQN0aiAIIAEgCWxBA3RqKwMAOQMAIABBBGoiACACRw0ACwsgByAMNgIMIAcgEDYCCCAHQQE2AgQgByAFNgIAAkAgBCgCdCIABEAgBCgCfEEASA0BCyAOIA8gB0EIaiAHIAAgBCgCmAEoAgQgFRBIIAsEQCAFQQRrKAIAEBELIAdBEGokAAwCCwwNC0EEEBUiAEH43wI2AgAgAEHQ3wI2AgAgAEGc4AJBAhABAAsLIARBwAFqJAAMAQsgBisDICEVIAMgBzYCUCADIAU2AkwgAyAENgJIIANCADcDQCADQdAAaiADQcgAaiADQcwAahBwIAMgAygCUCIEIAMoAkhsNgJUIAMgBCADKAJMbDYCWCABKAIEIAIoAgggASgCCCABKAIAIAEoAhAgAigCACACKAIQIAAoAgAgACgCGCgCBCAVIANBQGsQhgEgAygCQCIABEAgAEEEaygCABARCyADKAJEIgBFDQAgAEEEaygCABARCyADQZABaiQADAELQag3QYQaQdYDQb0VEAAACwsgBkGQAWokAA8LQao6QaAbQeIAQeoMEAAAC0HfxABBuCFBhgJBgCQQAAALQZ0xQZ8dQcoAQZ0VEAAAC0HmOUHbGUGbA0GGCRAAAAtBsDlB+RpB0gBB7AsQAAALQZQzQY0hQbIBQcokEAAAC4UFAw9/AXwBewJAIAAoAgQiAyAAKAIIIgFBAm0iCXIiBEEASEEAIAAoAgAiBRtFBEAgASAEckEASA0BIANBAEgNASABIAlrIgQgCXJBAEgNAQJAIAFBAkgNACADRQ0AIAUgACgCDCgCBCIGIARsIgBBA3RqIQ0gA0H+////B3EhBCAFIAUgAEEDdGogA0EDdGpJBH8gBSAGIAFBA3RBCGtsaiAFIAYgCUEBa2wgA2pBA3RqSQVBAAsgBkGAgICAAXFBHHZyQQAgBkEDdGtBAEhyIANBBElyQQFxIQ4DQCAFIAYgC2xBA3RqIQcgDSAJIAtBf3NqIAZsQQN0aiEIQQAhAEEAIQECQCAORQRAA0AgByAAQQN0IgFqIgL9AAMAIREgAiABIAhqIgH9AAMA/QsDACABIBH9CwMAIABBAmoiACAERw0ACyAEIgEgA0YNAQtBACECIAMgASIAa0EDcSIKBEADQCAHIABBA3QiDGoiDysDACEQIA8gCCAMaiIMKwMAOQMAIAwgEDkDACAAQQFqIQAgAkEBaiICIApHDQALCyABIANrQXxLDQADQCAHIABBA3QiAWoiAisDACEQIAIgASAIaiICKwMAOQMAIAIgEDkDACAHIAFBCGoiAmoiCisDACEQIAogAiAIaiICKwMAOQMAIAIgEDkDACAHIAFBEGoiAmoiCisDACEQIAogAiAIaiICKwMAOQMAIAIgEDkDACAHIAFBGGoiAWoiAisDACEQIAIgASAIaiIBKwMAOQMAIAEgEDkDACAAQQRqIgAgA0cNAAsLIAtBAWoiCyAJRw0ACwsPC0GUM0GNIUGyAUHKJBAAAAtBzw9Bqx9BkwFB/RgQAAALzgMCBn8CfCMAQRBrIgYkAAJAAkACQAJAIAEoAgQiBEEBRgRAIAMrAwAhCyABKAIAIgNBACABKAIIIgRBAEgbDQQgAigCBCEFIAEoAgwhByACKAIAIgJBACAFQQBIGw0EIAQgBUcNAgJAIARFBEAMAQsgBEEATA0EIAMrAwAgAisDAKIhCkEBIQEgBEEBRg0AIAcoAgwhBSAEQQFrIgdBAXEgBEECRwRAIAdBfnEhB0EAIQQDQCAKIAMgASAFbEEDdGorAwAgAiABQQN0aisDAKKgIAMgAUEBaiIJIAVsQQN0aisDACACIAlBA3RqKwMAoqAhCiABQQJqIQEgBEECaiIEIAdHDQALC0UNACAKIAMgASAFbEEDdGorAwAgAiABQQN0aisDAKKgIQoLIAAoAgAiACALIAqiIAArAwCgOQMADAELIAMrAwAhCiABKAIIIQMgASgCACEFIAYgASgCDCgCDDYCDCAGIAU2AgggAigCACEBIAZBATYCBCAGIAE2AgAgBCADIAZBCGogBiAAKAIAIAoQOQsgBkEQaiQADwtBsDlB+RpB0gBB7AsQAAALQeY5QdsZQZsDQYYJEAAAC0GUM0GNIUGyAUHKJBAAAAvSFQIdfwp8IwBBEGsiESQAIAEoAhghEiAAKAIYIRMgACgCCCENIAAoAgQhFCAAKAIAIRsgASgCHCEaIBEgASsDECADKwMAojkDCCAaQYCAgIACSQRAAkBBACEBIBJFBEAgGkEDdCEAAkAgGkGAgAFNBEAgESAAQR5qQXBxayIBJAAMAQsgAEEQahAXIgBFDQIgAEFwcSIBIAA2AgwgAUEQaiEBCyABIRILIBMoAgQhHCACKAIAIR0jAEEQayIDJAACQAJAAkAgG0EAIBQgDSANIBRKGyITIBRyQQBIG0UEQCAUQQBIDQIgDUEASA0CIBNBAEoEQCATIQ0DQEEIIBMgFWsiACAAQQhOGyEEIABBAEoEQEEIQQEgDSANQQFMGyIAIABBCE4bIQpBCCANIA1BCE4bIgBBA2shCyAAQQJrIQ5BACEFA0AgBSAVaiEAAkAgBCAFQX9zaiICQQBMBEAgACECDAELIAAgFCACa04NBiAAQQFqQQN0IgcgGyAAIBxsQQN0amoiCCsDACAHIBJqIgcrAwCiISECQCACQQFGDQAgDiAFayIGQQNxIQ9BASECIAsgBWtBA08EQCAGQXxxIRBBACEJA0AgISAIIAJBA3QiBmorAwAgBiAHaisDAKKgIAggBkEIaiIMaisDACAHIAxqKwMAoqAgCCAGQRBqIgxqKwMAIAcgDGorAwCioCAIIAZBGGoiBmorAwAgBiAHaisDAKKgISEgAkEEaiECIAlBBGoiCSAQRw0ACwtBACEGIA9FDQADQCAhIAggAkEDdCIJaisDACAHIAlqKwMAoqAhISACQQFqIQIgBkEBaiIGIA9HDQALCyAdIAAiAkEDdGoiCCARKwMIICGiIAgrAwCgOQMACyAdIAJBA3RqIgIgESsDCCASIABBA3RqKwMAoiACKwMAoDkDACAFQQFqIgUgCkcNAAsLIBQgBCAVaiICayIAQQBKBEAgAyAcNgIMIAMgGyACQQN0IgJqIBUgHGxBA3RqNgIIIANBATYCBCADIAIgEmo2AgAgHSAVQQN0aiEIIBErAwghI0EAIQUgBCICQQNrIQkgAygCCCEPAkAgAygCDCIHQQN0QYD6AUsNACAEQQhIDQAgBEEHayEKIAMoAgQhCyADKAIAIQ4gAEEATCEQA0ACQCAQBEBEAAAAAAAAAAAhIkQAAAAAAAAAACEhRAAAAAAAAAAAISREAAAAAAAAAAAhJUQAAAAAAAAAACEnRAAAAAAAAAAAIShEAAAAAAAAAAAhKUQAAAAAAAAAACEqDAELRAAAAAAAAAAAISJBACEGIAVBB3IgB2xBA3QhDCAFQQZyIAdsQQN0IRYgBUEFciAHbEEDdCEXIAVBBHIgB2xBA3QhGCAFQQNyIAdsQQN0IRkgBUECciAHbEEDdCEeIAVBAXIgB2xBA3QhHyAFIAdsQQN0ISBEAAAAAAAAAAAhIUQAAAAAAAAAACEkRAAAAAAAAAAAISVEAAAAAAAAAAAhJ0QAAAAAAAAAACEoRAAAAAAAAAAAISlEAAAAAAAAAAAhKgNAICogDiAGIAtsQQN0aisDACImIA8gBkEDdGoiBCAMaisDAKKgISogKSAmIAQgFmorAwCioCEpICggJiAEIBdqKwMAoqAhKCAnICYgBCAYaisDAKKgIScgJSAmIAQgGWorAwCioCElICQgJiAEIB5qKwMAoqAhJCAhICYgBCAfaisDAKKgISEgIiAmIAQgIGorAwCioCEiIAZBAWoiBiAARw0ACwsgCCAFQQN0aiIEICMgIqIgBCsDAKA5AwAgCCAFQQFyQQN0aiIEICMgIaIgBCsDAKA5AwAgCCAFQQJyQQN0aiIEICMgJKIgBCsDAKA5AwAgCCAFQQNyQQN0aiIEICMgJaIgBCsDAKA5AwAgCCAFQQRyQQN0aiIEICMgJ6IgBCsDAKA5AwAgCCAFQQVyQQN0aiIEICMgKKIgBCsDAKA5AwAgCCAFQQZyQQN0aiIEICMgKaIgBCsDAKA5AwAgCCAFQQdyQQN0aiIEICMgKqIgBCsDAKA5AwAgCiAFQQhqIgVKDQALCyAFIAlIBEAgAygCBCEKIAMoAgAhCyAAQQBMIQ4DQAJAIA4EQEQAAAAAAAAAACEiRAAAAAAAAAAAISFEAAAAAAAAAAAhJEQAAAAAAAAAACElDAELRAAAAAAAAAAAISJBACEEIAVBA2ogB2xBA3QhECAFQQJqIAdsQQN0IQwgBUEBaiAHbEEDdCEWIAUgB2xBA3QhF0QAAAAAAAAAACEhRAAAAAAAAAAAISREAAAAAAAAAAAhJQNAICUgCyAEIApsQQN0aisDACImIA8gBEEDdGoiBiAQaisDAKKgISUgJCAmIAYgDGorAwCioCEkICEgJiAGIBZqKwMAoqAhISAiICYgBiAXaisDAKKgISIgBEEBaiIEIABHDQALCyAIIAVBA3RqIgQgIyAioiAEKwMAoDkDACAIIAVBAWpBA3RqIgQgIyAhoiAEKwMAoDkDACAIIAVBAmpBA3RqIgQgIyAkoiAEKwMAoDkDACAIIAVBA2pBA3RqIgQgIyAloiAEKwMAoDkDACAFQQRqIgUgCUgNAAsLIAJBAWsiECAFSgRAIABB/v///wdxIQwgAEEBcSEWIAMoAgQhCSADKAIAIQoDQAJAIABBAEwEQEQAAAAAAAAAACEhRAAAAAAAAAAAISIMAQsgBSAHbCELIAVBAWogB2whDkQAAAAAAAAAACEhQQAhBEQAAAAAAAAAACEiQQAhBiAAQQFHBEADQCAhIAogBCAJbEEDdGorAwAiJCAPIARBA3RqIhcgDkEDdCIYaisDAKKgIAogCSAEQQFyIhlsQQN0aisDACIlIBggDyAZQQN0aiIZaisDAKKgISEgIiAkIBcgC0EDdCIYaisDAKKgICUgGCAZaisDAKKgISIgBEECaiEEIAZBAmoiBiAMRw0ACwsgFkUNACAhIAogBCAJbEEDdGorAwAiJCAPIARBA3RqIgQgDkEDdGorAwCioCEhICIgJCAEIAtBA3RqKwMAoqAhIgsgCCAFQQN0aiIEICMgIqIgBCsDAKA5AwAgCCAFQQFqQQN0aiIEICMgIaIgBCsDAKA5AwAgBUECaiIFIBBIDQALCyACIAVKBEAgAEH+////B3EhDiAAQQFxIRAgAygCBCEGIAMoAgAhCQNAAkAgAEEATARARAAAAAAAAAAAISEMAQsgDyAFIAdsQQN0aiEKRAAAAAAAAAAAISFBACEEQQAhCyAAQQFHBEADQCAhIAkgBCAGbEEDdGorAwAgCiAEQQN0aisDAKKgIAkgBiAEQQFyIgxsQQN0aisDACAKIAxBA3RqKwMAoqAhISAEQQJqIQQgC0ECaiILIA5HDQALCyAQRQ0AICEgCSAEIAZsQQN0aisDACAKIARBA3RqKwMAoqAhIQsgCCAFQQN0aiIEICMgIaIgBCsDAKA5AwAgBUEBaiIFIAJHDQALCwsgDUEIayENIBVBCGoiFSATSA0ACwsgA0EQaiQADAMLQZQzQY0hQbIBQcokEAAAC0HPD0GrH0GTAUH9GBAAAAtB+C1BjSFBpgFByiQQAAALAkAgGkGBgAFJDQAgAUUNACABQQRrKAIAEBELIBFBEGokAA8LC0EEEBUiAEH43wI2AgAgAEHQ3wI2AgAgAEGc4AJBAhABAAu0DAEofyMAQTBrIgUkACAFIAMrAwA5AyAgASgCCCEDIAEoAgQhByAFIAIoAggiDTYCDCAFIAc2AgggBUIANwMAIAUgByADIAMgB0obIgM2AhAgBSANNgIsIAVBEGogBUEIaiAFQSxqEIcBIAUgBSgCECIEIAUoAghsNgIUIAUgBCAFKAIMbDYCGCABKAIAIRUgASgCDCgCBCEQIAIoAgAhICACKAIEISEgACgCACEWIAAoAgwoAgQhFyMAQZAEayICIQQgAiQAAkACQCAFKAIIIgAgByAAIAdIGyIYIAUoAhAiCGwiGUGAgICAAk8NAAJ/QQEgBSgCACIJDQAaIBlBA3QhASAZQYCAAU0EQCACIAFBHmpBcHFrIgkiAiQAQQAMAQsgAUEQahAXIgFFDQEgAUFwcSIGIAE2AgwgBkEQaiEJIAUoAgBBAEcLISIgCCANbCIaQYCAgIACTw0AAn9BASAFKAIEIgoNABogGkEDdCEBIBpBgIABTQRAIAIgAUEeakFwcWsiCiQAQQAMAQsgAUEQahAXIgFFDQEgAUFwcSICIAE2AgwgAkEQaiEKIAUoAgRBAEcLISMgBEEYakEAQfAD/AsAIARCgICAgICAgPg/NwOIBCAEQoCAgICAgID4PzcDwAMgBEKAgICAgICA+D83A/gCIARCgICAgICAgPg/NwOwAiAEQoCAgICAgID4PzcD6AEgBEKAgICAgICA+D83A6ABIARCgICAgICAgPg/NwNYIARCgICAgICAgPg/NwMQIAMgByADIAdIGyICQQBKBEAgACAIIAAgCEgbIgAgByAAIAdIGyETQQAgCEEDdGshJCACQQN0QQhqISVBCCAYIAggCCAYShsiACAAQQhOGyIRIBBBA3QiJkEIaiIbbCEnIAhBAEwhKANAIAQgITYCCCAEICAgAiAIIAIgAiAIShsiA2siHEEDdGo2AgQgCiAEQQRqIAMgDRBxIChFBEAgFSAlIB8gJGxqIBwgJmxqIANBA3RraiEpQQAhDiADIQFBACELA0AgAyALayIAIBEgACAAIBFKGyIGayEdAkAgBkEATA0AQQggEyADIA4gEWxrIgAgACATShsiACAAQQhOG0EDdEEIayEMQQggEyABIAEgE0obIg8gD0EIThsiFEEBcSApIA4gJ2xqIRJBACEAIA9BAUcEQCAUQX5xIStBACEUA0ACQCAAQQFyIg8gBk4NACAMIABBA3RrIh5FDQAgAEHIAGwgBGpBGGogEiAAIBtsaiAe/AoAAAsCQCAAQQJqIgAgBk4NACAMIA9BA3RrIh5FDQAgD0HIAGwgBGpBGGogEiAPIBtsaiAe/AoAAAsgFEECaiIUICtHDQALC0UNACAAQQFqIAZODQAgDCAAQQN0ayIMRQ0AIABByABsIARqQRhqIBIgACAbbGogDPwKAAALIARBCDYCCCAEIARBEGo2AgQgCSAEQQRqIgAgBiAGEEcgBCAXNgIIIAQgFiALIBxqIgxBA3RqNgIEIAAgCSAKIAYgBiANIAUrAyAgBiADIAsQKyAdQQBKBEAgBCAQNgIIIAQgFSAGIAxqQQN0IhJqIAwgEGxBA3RqNgIEIAkgACAGIB0QRyAEIBc2AgggBCASIBZqNgIEIAAgCSAKIB0gBiANIAUrAyAgBiADIAsQKwsgASARayEBIA5BAWohDiALIBFqIgsgA0gNAAsLIAIgB0gEQCAVIBAgHGxBA3RqIQYgAiEAA0AgBCAQNgIIIAQgBiAAQQN0IgtqNgIEIAkgBEEEaiIOIAMgByAAIBhqIgEgASAHShsgAGsiABBHIAQgFzYCCCAEIAsgFmo2AgQgDiAJIAogACADIA0gBSsDIEF/QX9BABArIAEiACAHSA0ACwsgH0EBaiEfIAIgCGsiAkEASg0ACwsCQCAaQYGAAUkNACAKRSAjcg0AIApBBGsoAgAQEQsCQCAZQYGAAUkNACAJRSAicg0AIAlBBGsoAgAQEQsgBEGQBGokAAwBC0EEEBUiAEH43wI2AgAgAEHQ3wI2AgAgAEGc4AJBAhABAAsgBSgCACIABEAgAEEEaygCABARCyAFKAIEIgAEQCAAQQRrKAIAEBELIAVBMGokAAv/DwMpfwN7AXwjAEEgayIOJAAgASgCJCEFAkACQAJAAkAgASgCCCICIAAoAgRGBEAgACgCCCAFRg0BCyACIAVyQQBIDQECQCACRQ0AIAVFDQAgAkH/////ByAFbUoNAwsgACACIAVsIAIgBRAbIAAoAgghBSAAKAIEIQILIA5CADcDECAOIAI2AgggDiAFNgIMIAIgBXJBAEgNAiAAIA5BCGoQLwJAIAAoAgggACgCBGwiBkEATA0AIA4rAxAhLiAAKAIAIQICQCAGQQFGBEAgAiEHDAELIAIgBkH+////B3EiBEEDdGohByAu/RQhK0EAIQUDQCACIAVBA3RqICv9CwMAIAVBAmoiBSAERw0ACyAEIAZGDQELIAcgLjkDAAsgDkKAgICAgICA+D83AwgjAEEwayICJAAgASgCACEXIAEoAgwgASgCCCEFIAEoAgQhByACIA4rAwg5AyAgASgCJCERIAIgBzYCECACIBE2AgwgAiAHIAUgBSAHShsiBTYCCCACQgA3AwAgAiARNgIsIAJBEGogAkEIaiACQSxqEIcBIAIgAigCECIEIAIoAghsNgIUIAIgBCACKAIMbDYCGCgCBCEPIAEoAhwhHyABKAIoKAIEISAgACgCACEYIAAoAgQhGSMAQZAEayIEIQMgBCQAAkAgAigCCCIAIAcgBSAFIAdKGyISIAAgEkgbIhogAigCECINbCIbQYCAgIACSQRAAkACf0EBIAIoAgAiCw0AGiAbQQN0IQEgG0GAgAFNBEAgBCABQR5qQXBxayILIgQkAEEADAELIAFBEGoQFyIBRQ0BIAFBcHEiBiABNgIMIAZBEGohCyACKAIAQQBHCyEhIA0gEWwiHEGAgICAAkkEQAJ/QQEgAigCBCIQDQAaIBxBA3QhASAcQYCAAU0EQCAEIAFBHmpBcHFrIhAkAEEADAELIAFBEGoQFyIBRQ0CIAFBcHEiBiABNgIMIAZBEGohECACKAIEQQBHCyEiIANBGGpBAEHwA/wLACADQoCAgICAgID4PzcDiAQgA0KAgICAgICA+D83A8ADIANCgICAgICAgPg/NwP4AiADQoCAgICAgID4PzcDsAIgA0KAgICAgICA+D83A+gBIANCgICAgICAgPg/NwOgASADQoCAgICAgID4PzcDWCADQoCAgICAgID4PzcDECAHQQBKBEBBCCAaIA0gDSAaShsiASABQQhOGyEVIAAgDSAAIA1IGyIAIAcgACAHSBsiACAFIAAgBUgbIR0gEiANayEjA0AgAyAgNgIIIAMgHyAJQQN0Ih5qNgIEIBAgA0EEaiASIAlrIA0gByAJayIAIAAgDUobIgAgACAJaiASSiAFIAlKcSIkGyIBIBEQcQJAIAUgCUwNACABQQBMDQAgGCAeaiElIBcgCSAPbEEDdGohJkEAIQogASEGA0AgCSAKaiETIBUgASAKayIAIAAgFUobIgxBAEoEQEEIIB0gBiAGIB1KGyIAIABBCE4bIScgFyATQQN0IihqISlBACEIA0ACQCAIRQ0AICkgCEEDdCIAaiEWIANBEGogAGohFEEAIQACQCAIQQFGDQAgD0EBRw0AIAhB/v///wdxIQAgFiAoaiEq/QwAAAAAAQAAAAAAAAAAAAAAIStBACEEA0AgFCArQQb9qwEiLP0bAGogKiAEQQN0av0AAwAiLf0hADkDACAUICz9GwFqIC39IQE5AwAgK/0MAgAAAAIAAAACAAAAAgAAAP2uASErIARBAmoiBCAARw0ACyAAIAhGDQELIABBAXIhBCAIQQFxBEAgFCAAQQZ0aiAWIAAgE2ogD2xBA3RqKwMAOQMAIAQhAAsgBCAIRg0AA0AgFCAAQQZ0aiAWIAAgE2ogD2xBA3RqKwMAOQMAIBQgAEEBaiIEQQZ0aiAWIAQgE2ogD2xBA3RqKwMAOQMAIABBAmoiACAIRw0ACwsgCEEBaiIIICdHDQALCyADQQg2AgggAyADQRBqNgIEIAsgA0EEaiIAIAwgDBBdIAMgGTYCCCADIBggE0EDdCIEajYCBCAAIAsgECAMIAwgESACKwMgIAwgASAKECsgCkEASgRAIAMgDzYCCCADIAQgJmo2AgQgCyAAIAwgChBdIAMgGTYCCCADICU2AgQgACALIBAgCiAMIBEgAisDICAMIAEgChArCyAGIBVrIQYgCiAVaiIKIAFIDQALCyASIAkgCSASShsiBEEASgRAIBcgHmohCEEAIQADQCADIA82AgggAyAIIAAgD2xBA3RqNgIEIAsgA0EEaiIKIAEgBCAAIBpqIgYgBCAGSBsgAGsiDBBdIAMgGTYCCCADIBggAEEDdGo2AgQgCiALIBAgDCABIBEgAisDIEF/QX9BABArIAYiACAESA0ACwsgIyAJICQbIA1qIgkgB0gNAAsLAkAgHEGBgAFJDQAgEEUgInINACAQQQRrKAIAEBELAkAgG0GBgAFJDQAgC0UgIXINACALQQRrKAIAEBELIANBkARqJAAMAwsLC0EEEBUiAEH43wI2AgAgAEHQ3wI2AgAgAEGc4AJBAhABAAsgAigCACIABEAgAEEEaygCABARCyACKAIEIgAEQCAAQQRrKAIAEBELIAJBMGokACAOQSBqJAAPC0H9wABBpyBBlQJBgCQQAAALQQQQFSIAQfjfAjYCACAAQdDfAjYCACAAQZzgAkECEAEAC0GdMUGfHUHKAEGdFRAAAAvlCwMYfwF8AXsjAEGgAmsiAyQAAkACQAJAAkACQAJAAkAgASgCCCINIAAoAgRHDQAgACgCCCANRw0AIAEoAgQgDUgNACANQQFrIhFBAE4EQCANQQN0IRkgESEGA0ACQCANIAZBf3MiB2oiBEEATA0AIAYgAigCBE4NBSABKAIMIg4oAgQhBSACKAIAIAZBA3RqKwMAIRsgASgCBCIPQQBIQQAgASgCACIIGw0GIAMgASkCADcCDCADIAEoAgg2AhQgBiABKAIIIgtODQcgByAPaiIJQQBOIgdBASAIG0UNBiAJIAZBAWoiDHJBAEgNCCAHRQ0EIAsgBGsiCyAEckEASA0IIAMgASgCCDYCMCADIAEpAgA3AyggAyABKAIYNgIgIAMgASkCEDcDGCADQUBrIhQgASgCGDYCACADIAEpAhA3AzggACgCACIQQQAgACgCCCIHQQBIGw0GIAYgACgCBE4NByAHIARrIhIgBHJBAEgNCCAIIAUgBmxBA3RqIhUgDEEDdCIWaiEXIBAgBiAHbEEDdGoiGCASQQN0aiEQIARBA3QiCgRAIBBBACAK/AsACyADQoCAgICAgID4PzcDSCADIAc2ApwCIAMgEjYCmAIgAyAHNgKQAiADQQA2AowCIAMgBjYCiAIgAyAANgKEAiADIAc2AoACIAMgGDYC+AEgAyAENgL0ASADIBA2AuwBIAMgBDYCwAEgAyAJNgK8ASADIAggFmogBSALbEEDdGo2ArgBIAMgAygCMDYCzAEgAyADKQMoNwLEASADIA42AtABIAMgAygCIDYC3AEgAyADKQMYNwLUASADIAU2AugBIAMgCzYC5AEgAyAMNgLgASADIA82AnggAyAVNgJ0IAMgCTYCbCADIBc2AmggAyAbmjkDYCADIAk2AlwgAyAD/QACCP0LAnwgAyAONgKMASADIBQoAgA2ApgBIAMgAykDODcDkAEgAyAFNgKwASADIAw2AqgBIAMgBTYCpAEgAyAGNgKgASADQQA2ApwBIANBuAFqIANB0ABqIANB7AFqIANByABqENgDIAYgEU4NACAGIAAoAgQiFE4NCSAAKAIAIgwgACgCCCIJIAZsQQN0aiESIAwgCSAZbGohEEEAIQhBACAJQQN0IgRrIRUgBEF4cyEWIAwgCSANIBNrQQN0bCIXaiEYIBEhBwNAIAkgEUwNCiARIBRODQogEiAHQQN0IgRqIgUgBSsDACIbIAQgDCAHIAlsQQN0aiIEaisDAKI5AwACQCANIAdBf3NqIgtBAEwNACAHIAAoAgRODQkgCSALayIFIAtyQQBIDQogBCAFQQN0IgVqIQ4gBSASaiEPQQAhBAJAIAhBAkkNACAQIAggFmxqIBhJBH8gDCAXIAhBA3RraiAQIAggFWxqSQVBAAsNACAIQX5xIQQgG/0UIRxBACEFA0AgDyAFQQN0IgpqIhogHCAKIA5q/QADAP3yASAa/QADAP3wAf0LAwAgBUECaiIFIARHDQALIAQgCEYNAQsgBEEBciEFIAhBAXEEQCAPIARBA3QiBGoiCiAbIAQgDmorAwCiIAorAwCgOQMAIAUhBAsgBSAIRg0AA0AgDyAEQQN0IgVqIgogGyAFIA5qKwMAoiAKKwMAoDkDACAPIAVBCGoiBWoiCiAbIAUgDmorAwCiIAorAwCgOQMAIARBAmoiBCALRw0ACwsgCEEBaiEIIAdBAWsiByAGSg0ACwsgBiACKAIETg0EIAYgACgCBE4NCCAGIAAoAggiBE4NCCAGQQN0IgcgACgCACAEIAZsQQN0amogAigCACAHaisDADkDACATQQFqIRMgBkEASiAGQQFrIQYNAAsLIANBoAJqJAAPC0HJEUGzHEE2QfwSEAAAC0GdMUGfHUHKAEGdFRAAAAtBxzlB2iBBtQFBgDkQAAALQZQzQY0hQbIBQcokEAAAC0G+NEGrH0H6AEH9GBAAAAtBzw9Bqx9BkwFB/RgQAAALQcs4QdogQe8CQYA5EAAACx8AQQgQFSAAEOABIgBB5OECNgIAIABB8OECQQEQAQALswICBX8BfCMAQRBrIgQkAAJAAkAgASgCBCIFQYCAgIACSQRAIAMrAwAhCSAAKAIYIQMgACgCCCAAKAIEIAAoAgAhCEEAIQAgASgCACIBRQRAIAVBA3QhAAJAIAVBgIABTQRAIAQgAEEeakFwcWsiACQADAELIABBEGoQFyIARQ0EIABBcHEiASAANgIMIAFBEGohAAsgACEBCyAEIAMoAgQ2AgwgBCAINgIIIARBATYCBCAEIAE2AgAgAigCACIBBEAgAigCCEEASA0CCyAEQQhqIAQgAUEBIAkQSAJAIAVBgYABSQ0AIABFDQAgAEEEaygCABARCyAEQRBqJAAPCwwBC0GUM0GNIUGyAUHKJBAAAAtBBBAVIgBB+N8CNgIAIABB0N8CNgIAIABBnOACQQIQAQALkAIAIABBADYCCCAAQgA3AwACQAJAIAEgAnJBAE4EQAJAIAFFDQAgAkUNACABQf////8HIAJtSg0CCyAAIAEgAmwgASACEBsgAEIANwIMIAIgASABIAJKGyIBQQBIDQIgAEEMaiABIAEQHSAAQgA3AhQgAEEUaiACIAIQngEgAEIANwIcIABBHGogAiACEJ4BIABCADcCJCAAQSRqIAIgAhAdIABCADcCLCAAQSxqIAIgAhAdIABCADcCNCAAQTRqIAIgAhAdIABBADsBPA8LQf3AAEGnIEGVAkGAJBAAAAtBBBAVIgBB+N8CNgIAIABB0N8CNgIAIABBnOACQQIQAQALQdcsQacgQbACQYAkEAAAC4AFAwd/A3sBfCMAQSBrIgQkAAJAAkACQAJAAkAgASgCBCICIAAoAgRGBEAgACgCCCACRg0BCyACQQBIDQEgAgRAIAJB/////wcgAm5LDQMLIAAgAiACbCACIAIQGyABKAIEIgIgACgCBEcNAwsgACgCCCACRw0CIARCADcDECAEIAI2AgwgBCACNgIIIAJBAEgNAyAAIARBCGoQLwJAIAAoAgQiCCAAKAIIbCIFQQBMDQAgBCsDECEMIAAoAgAhAwJAIAVBAUYEQCADIQYMAQsgAyAFQf7///8HcSIHQQN0aiEGIAz9FCEJQQAhAgNAIAMgAkEDdGogCf0LAwAgAkECaiICIAdHDQALIAUgB0YNAQsgBiAMOQMACwJAIAEoAgQiA0EATA0AIAAoAgAhACABKAIAIQZBACECIANBAUcEQCADQf7///8HcSECIAj9ESEK/QwAAAAAAQAAAAAAAAAAAAAAIQlBACEBA0AgBiABQQJ0aiIFKAIEIQcgACAFKAIAQQN0aiAJIAr9tQEiC/0bAEEDdGpCgICAgICAgPg/NwMAIAAgB0EDdGogC/0bAUEDdGpCgICAgICAgPg/NwMAIAn9DAIAAAACAAAAAgAAAAIAAAD9rgEhCSABQQJqIgEgAkcNAAsgAiADRg0BCwNAIAAgBiACQQJ0aigCAEEDdGogAiAIbEEDdGpCgICAgICAgPg/NwMAIAJBAWoiAiADRw0ACwsgBEEgaiQADwtB/cAAQacgQZUCQYAkEAAAC0EEEBUiAEH43wI2AgAgAEHQ3wI2AgAgAEGc4AJBAhABAAtBljhBgBxBzQdByxUQAAALQZ0xQZ8dQcoAQZ0VEAAAC3QAAkACQCABKAIEIgEEQCABQf////8HIAFtSg0CIAFBAEgNASABQf////8HIAFuSw0CCyAAIAEgAWwgASABEBsPC0H9wABBpyBBlQJBgCQQAAALQQQQFSIAQfjfAjYCACAAQdDfAjYCACAAQZzgAkECEAEAC58rBBt/B3wCewF+IwBBkAFrIgQkAAJAAkACQAJAAkACQAJ/AkAgACgCCCIOIAAoAgQiFSAOIBVIGyIRQQBOBEAgAEEMaiARIBEQHSAAQSRqIA4gDhAdIAAoAggiAkEASA0EIABBHGogAiACEJ4BIABBLGogDiAOEB0gAEE0aiAOIA4QHQJAIA5BAEwNACAAKAIsIQUgACgCNCEGIAAoAgAiC0EAIAAoAgQiAkEASBsNCSACRQRAA0AgASAAKAIITg0JIAYgAUEDdCICakIANwMAIAIgBWpCADcDACABQQFqIgEgDkcNAAsMAQsgAkEATA0EIAJBAWsiAUF8cSEKIAFBA3EhDyACQQFGIQkgAkECa0EDSSEWA0AgCCAAKAIITg0IIAsgAiAIbEEDdGoiDSsDACIcIByiIRwCQCAJDQBBACEDQQEhASAWRQRAA0AgHCANIAFBA3RqIgcrAwAiHCAcoqAgBysDCCIcIByioCAHKwMQIhwgHKKgIAcrAxgiHCAcoqAhHCABQQRqIQEgA0EEaiIDIApHDQALC0EAIQMgD0UNAANAIBwgDSABQQN0aisDACIcIByioCEcIAFBAWohASADQQFqIgMgD0cNAAsLIAYgCEEDdCIBaiAcnyIcOQMAIAEgBWogHDkDACAIQQFqIgggDkcNAAsLIAAoAjAiAkEATA0HQQEhASAAKAIsIgcrAwAhHAJAIAJBAUYNACACQQFrIgNBA3EhCCACQQJrQQNPBEAgA0F8cSEFQQAhAwNAIAcgAUEDdGoiAisDGCIdIAIrAxAiHiACKwMIIh8gAisDACIgIBwgHCAgYxsiHCAcIB9jGyIcIBwgHmMbIhwgHCAdYxshHCABQQRqIQEgA0EEaiIDIAVHDQALCyAIRQ0AQQAhAwNAIAcgAUEDdGorAwAiHSAcIBwgHWMbIRwgAUEBaiEBIANBAWoiAyAIRw0ACwsgAEIANwNIIAAgETYCUEEBIBFFDQIaIBxEAAAAAAAAsDyiIhwgHKIgFbejISJBASARIBFBAUwbIRcgFUEDayEYIBVBAmshGSAOQQJrIRpBACEWQQAhCANAIAAoAjAgDiAIayILayIBIAtyQQBIDQYgACgCLCIKIAFBA3RqIgcrAwAhHUEAIQICQCALQQFGDQAgDiAIQX9zaiICQQNxIQNBASEBQQAhBQJAIBogCGtBA0kEQEEAIQIgHSEcDAELIAJBfHEhEkEAIQIgHSEcQQAhBgNAIAcgAUEDaiIMQQN0aisDACIeIAcgAUECaiITQQN0aisDACIfIAcgAUEBaiIUQQN0aisDACIgIAcgAUEDdGorAwAiISAcIBwgIWMiDxsiHCAcICBjIg0bIhwgHCAfYyIJGyIcIBwgHmMiEBshHCAeIB8gICAhIB0gDxsgDRsgCRsgEBshHSAMIBMgFCABIAIgDxsgDRsgCRsgEBshAiABQQRqIQEgBkEEaiIGIBJHDQALCyADRQ0AA0AgByABQQN0aisDACIeIBwgHCAeYyIGGyEcIB4gHSAGGyEdIAEgAiAGGyECIAFBAWohASAFQQFqIgUgA0cNAAsLIAIgCGohDQJAIAAoAlAgEUcNACAdIB2iICIgFSAIa7eiY0UNACAAIAg2AlALIAhBA3QhDyAAKAIcIAhBAnRqIA02AgAgAgRAIAAoAgAiAUEAIAAoAgQiB0EASBsNCiAIIAAoAggiAk4NCCANQQBIDQggAiANTA0IAkAgB0EATA0AIAEgByAIbEEDdGohBSABIAcgDWxBA3RqIQZBACEDQQAhAgJAIAdBBkkNACABIAcgDUEDdEEIamxqIAVLBEAgBiABIAcgD0EIamxqSQ0BCyAHQf7///8HcSECQQAhAQNAIAUgAUEDdCIJaiIQ/QADACEjIBAgBiAJaiIJ/QADAP0LAwAgCSAj/QsDACABQQJqIgEgAkcNAAsgAiAHRg0BCyAHIAIiAWtBA3EiCQRAA0AgBSABQQN0IhBqIhIrAwAhHCASIAYgEGoiECsDADkDACAQIBw5AwAgAUEBaiEBIANBAWoiAyAJRw0ACwsgAiAHa0F8Sw0AA0AgBSABQQN0IgJqIgMrAwAhHCADIAIgBmoiAysDADkDACADIBw5AwAgBSACQQhqIgNqIgkrAwAhHCAJIAMgBmoiAysDADkDACADIBw5AwAgBSACQRBqIgNqIgkrAwAhHCAJIAMgBmoiAysDADkDACADIBw5AwAgBSACQRhqIgJqIgMrAwAhHCADIAIgBmoiAisDADkDACACIBw5AwAgAUEEaiIBIAdHDQALCyAKIA9qIgErAwAhHCABIAogDUEDdCIBaiICKwMAOQMAIAIgHDkDACAAKAI0IgIgD2oiBysDACEcIAcgASACaiIBKwMAOQMAIAEgHDkDACAWQQFqIRYLIAAoAgAiA0EAIAAoAgQiAUEASBsNCSAIIAAoAghODQcgBCABNgI0IAQgATYCKCAEQQA2AiAgBCAANgIcIAQgATYCFCAEIAg2AiQgBCAVIAhrIgI2AgggBCABIAJrIgc2AiwgBCADIAEgCGxBA3RqIgE2AhAgBCABIAdBA3RqIgE2AgQgAiAHckEASA0GIAAoAgwhByAEIAJBAWsiDTYCSCAEIAFBCGo2AkQgBCAEKAI0NgKAASAEIAT9AAIk/QsCcCAEIAT9AAIU/QsCYCAEIAT9AAIE/QsCUCAEQQE2AoQBIAQgBCgCaCgCBDYCjAEgBEEEaiAEQcQAaiAHIA9qIARBOGoQkwIgACgCBCIBIAhsQQN0IgogACgCACIHIA9qaiAEKwM4Ihw5AwAgHJkiHCAAKwNIZARAIAAgHDkDSAsgACgCCCEDIAQgADYCECAEIAtBAWsiBTYCDCAEIAMgBWsiBjYCGCAEIAE2AhwgBCACNgIIIAQgASACayILNgIUIAQgByALQQN0aiABIAZsQQN0ajYCBCACIAtyQQBIDQYgBSAGckEASA0GIAFBAEgNCSADIAhMDQcgBCABNgJ0IAQgATYCaCAEIAg2AmQgBEEANgJgIAQgADYCXCAEIAE2AlQgBCANNgJIIAQgASANayIBNgJsIAQgByAKaiICNgJQIAQgAiABQQN0ajYCRCABIA1yQQBIDQYgACgCDCAPaiEQIAAoAiQgCEEBaiIHQQN0aiECQQAhCiMAQcABayIDJAAgECsDACEcAkACQAJAAkACQCAEKAIIIgFBAUYEQCAEKAIMIgVBAEgNBEQAAAAAAADwPyAcoSEcIAQoAgQhBiAEKAIQKAIEIQtBACECAkACQCAFDgIDAQALIAtBAUcNACAFQf7///8HcSECIBz9FCEjQQAhAQNAIAYgAUEDdGoiCSAjIAn9AAMA/fIB/QsDACABQQJqIgEgAkcNAAsgAiAFRg0CCyAFIAIiAWtBA3EiCQRAA0AgBiABIAtsQQN0aiIQIBwgECsDAKI5AwAgAUEBaiEBIApBAWoiCiAJRw0ACwsgAiAFa0F8Sw0BA0AgBiABIAtsQQN0aiICIBwgAisDAKI5AwAgBiABQQFqIAtsQQN0aiICIBwgAisDAKI5AwAgBiABQQJqIAtsQQN0aiICIBwgAisDAKI5AwAgBiABQQNqIAtsQQN0aiICIBwgAisDAKI5AwAgAUEEaiIBIAVHDQALDAELIBxEAAAAAAAAAABhDQAgAyAEKAIMIgs2AqgBIAMgAjYCoAECQAJAAkAgC0EATgRAIAQoAgQhBSADIAFBAWsiEjYCcCADIAVBCGo2AmwgAyALNgJ0IAsgEnJBAEhBACAFGw0SIAMgBCgCHDYCkAEgAyAEKQIUNwKIASADIAT9AAIE/QsCeCADQgE3ApQBIAMgAygChAEoAgQ2ApwBIAFBAEwNDyAE/QACXCEjIAQpAmwhJSAEKAJ0IQUgBCgCRCEGIAQoAkghASAE/QACTCEkIAMgAygCnAE2AmQgAyAD/QACjAH9CwJUIAMgA/0AAnz9CwJEIAMgBTYCMCADICU3AiggAyAj/QsCGCADICT9CwIIIAMgA/0AAmz9CwI0IAMgATYCBCADIAY2AgAgASASRw0BIAMoAjwgC0cNAiADQTRqIQECQCALRQ0AIAtBA3QiBUUNACACQQAgBfwLAAsgA0KAgICAgICA+D83A7ABIANBsAFqIQVEAAAAAAAAAAAhHCMAQYABayICJAACQAJAAkAgASgCCEEBRgRAIAUrAwAhHSADKAIAIgVBACADKAIEIgZBAEgbDRYgASgCACIKQQAgASgCBCIBQQBIGw0WIAEgBkcNAgJAIAZFDQAgBkEATA0WIAUrAwAgCisDAKIhHEEBIQEgBkEBRg0AIAZBAWsiDEEDcSEJIAZBAmtBA08EQCAMQXxxIRNBACEMA0AgHCAFIAFBA3QiBmorAwAgBiAKaisDAKKgIAUgBkEIaiIUaisDACAKIBRqKwMAoqAgBSAGQRBqIhRqKwMAIAogFGorAwCioCAFIAZBGGoiBmorAwAgBiAKaisDAKKgIRwgAUEEaiEBIAxBBGoiDCATRw0ACwsgCUUNAEEAIQYDQCAcIAUgAUEDdCIMaisDACAKIAxqKwMAoqAhHCABQQFqIQEgBkEBaiIGIAlHDQALCyADKAKgASIBIB0gHKIgASsDAKA5AwAMAQsgAiADKAIwNgIwIAIgA/0AAiD9CwMgIAIgA/0AAhD9CwMQIAIgA/0AAgD9CwMAIAIgASgCMDYCaCACIAH9AAIg/QsDWCACIAH9AAIQ/QsDSCACIAH9AAIA/QsDOCACIAMoAqgBNgJ4IAIgAykCoAE3A3AgAkE4aiACIAJB8ABqIAUQ3QMLIAJBgAFqJAAMAQtBsDlB+RpB0gBB7AsQAAALIAQoAgQiBkEAIAQoAgwiBUEASBsNEiAEKAIIQQBMDRAgAygCqAEgBUcNBgJAIAVBAEoEQCAEKAIQKAIEIQkgAygCoAEhCkEAIQECQAJAIAVBCEkNACAJQQFHDQAgBiAFQQN0IgJqIApLIAYgAiAKaklxDQAgBUH+////B3EhAUEAIQIDQCAKIAJBA3QiDGoiEyAGIAxq/QADACAT/QADAP3wAf0LAwAgAkECaiICIAFHDQALIAEgBUYNAQsgAUEBciECIAVBAXEEQCAKIAFBA3RqIgwgBiABIAlsQQN0aisDACAMKwMAoDkDACACIQELIAIgBUYNAANAIAogAUEDdGoiAiAGIAEgCWxBA3RqKwMAIAIrAwCgOQMAIAogAUEBaiICQQN0aiIMIAYgAiAJbEEDdGorAwAgDCsDAKA5AwAgAUECaiIBIAVHDQALCyAEKAIIQQBMDRIgBSADKAKoAUcNASAQKwMAIRwgAygCoAEhCiAEKAIQKAIEIQlBACEBAkAgBUEISQ0AIAlBAUcNACAKIAVBA3QiAmogBksgCiACIAZqSXENACAFQf7///8HcSEBIBz9FCEjQQAhAgNAIAYgAkEDdCIMaiITIBP9AAMAICMgCiAMav0AAwD98gH98QH9CwMAIAJBAmoiAiABRw0ACyABIAVGDQYLIAFBAXIhAiAFQQFxBEAgBiABIAlsQQN0aiIMIAwrAwAgHCAKIAFBA3RqKwMAoqE5AwAgAiEBCyACIAVGDQUDQCAGIAEgCWxBA3RqIgIgAisDACAcIAogAUEDdGorAwCioTkDACAGIAFBAWoiAiAJbEEDdGoiDCAMKwMAIBwgCiACQQN0aisDAKKhOQMAIAFBAmoiASAFRw0ACwwFCyAFQQBIDQggBSADKAKoAUYNBAsMBgtB+C1BjSFBpgFByiQQAAALQao6QaAbQeIAQeoMEAAAC0HfxABBuCFBhgJBgCQQAAALIAQoAkgiAUEASA0DIBArAwAhHCADIAQoAnQ2AkggAyAE/QACZP0LAzggAyAE/QACVP0LAyggBP0AAkQhIyADIAMoAqgBIgI2AlggAyAj/QsDGCADIBw5AxAgAyABNgIIIAMgAykCoAE3A1AgEiADKAIcRw0BIAIgC0cNASADQewAaiADIANB0ABqEJICCyADQcABaiQADAMLQZY4QcsbQbABQcsVEAAAC0GWOEGAHEHyBUGUJRAAAAtBnTFBnx1BygBBnRUQAAALIAcgDkgEQCAZIAhrIgFBfHEhCyABQQNxIQUgACgCACIBIA9qIQogASAAKAIEIgYgDWsiAkEDdGohCSAAKAI0IRAgACgCLCESIAIgDXJBAE4hDCAYIAhrQQNJIRMgByECA0AgEiACQQN0IgFqIhQrAwAiHEQAAAAAAAAAAGIEQAJAIBwgASAQaiIbKwMAoyIdIB2iRAAAAAAAAAAAIAogAiAGbEEDdCIBaisDAJkgHKMiHUQAAAAAAADwP6BEAAAAAAAA8D8gHaGiIh0gHUQAAAAAAAAAAGMbIh2iRAAAAAAAAFA+ZQRAIAZBAEgNDiACIAAoAghODQwgDEUNCwJAIA1FBEBEAAAAAAAAAAAhHAwBCyABIAlqIg8rAwAiHCAcoiEcIA1BAUYNAEEAIQNBASEBIBNFBEADQCAcIA8gAUEDdGoiCCsDACIcIByioCAIKwMIIhwgHKKgIAgrAxAiHCAcoqAgCCsDGCIcIByioCEcIAFBBGohASADQQRqIgMgC0cNAAsLQQAhAyAFRQ0AA0AgHCAPIAFBA3RqKwMAIhwgHKKgIRwgAUEBaiEBIANBAWoiAyAFRw0ACwsgGyAcnyIcOQMADAELIBwgHZ+iIRwLIBQgHDkDAAsgAkEBaiICIA5HDQALCyAHIgggF0cNAAsMAQsMAwtBf0EBIBZBAXEbCyEIIABBFGogDiAOEJ4BAkAgACgCGCICQQBMDQAgACgCFCEHQQAhASACQQRPBEAgAkH8////B3EhAf0MAAAAAAEAAAACAAAAAwAAACEjQQAhAwNAIAcgA0ECdGogI/0LAgAgI/0MBAAAAAQAAAAEAAAABAAAAP2uASEjIANBBGoiAyABRw0ACyABIAJGDQELA0AgByABQQJ0aiABNgIAIAFBAWoiASACRw0ACwsgEQRAQQEgESARQQFMGyEFIAAoAhQhByAAKAIcIQ5BACEBA0ACQAJAIA4gAUECdCIGaigCACIDQQBIDQAgASACTg0AIAIgA0oNAQtBizlBxBpBsAFBzQwQAAALIAYgB2oiBigCACERIAYgByADQQJ0aiIDKAIANgIAIAMgETYCACABQQFqIgEgBUcNAAsLIABBAToAPCAAIAg2AlQgBEGQAWokAA8LIAAoAghBAEwNAgwDC0HXLEGnIEGwAkGAJBAAAAtBzw9Bqx9BkwFB/RgQAAALQb40QasfQfoAQf0YEAAAC0HmOUHbGUGbA0GGCRAAAAtBlDNBjSFBsgFByiQQAAALvRICD38BeyMAQeAAayIFJAAgAC0ADBogASgCCCEDAkACQAJAAkACQAJAIAAoAhAiBEEwSA0AIANBAkgNAEEwIARBAWpBAXYgBEHgAE8bIQ4DQAJ/IAAtAAwiCUEBRgRAIAwgDmoiAiAEIAIgBEgbIQIgDAwBCyAEIAxrIgIgDmsiBEEAIARBAEobCyEEIAAoAhQhAyAAKAIAIgcoAgAhBiAHKAIEIQggBSACIARrIgI2AkwgBSAIIAMgBGoiC2siAzYCSCAFIAYgC0EDdGogBCAIbEEDdGo2AkQgBkEAIAIgA3IiBkEASBsNBSAFIAg2AlwgBSAHNgJQIAUgBDYCWCAFIAs2AlQgBCAGciALckEASA0GIAQgBygCCCACa0oNBiABKAIEIQcgASgCACEKIAEoAgghBiAFIAM2AiwgBSAGNgIwIAUgByALIAhraiIIQQN0IApqNgIoIApBACADIAZyQQBIGw0FIAUgBzYCQCAFQQA2AjwgBSABNgI0IAUgCDYCOCADIAhyQQBIDQYgCCAHIANrSg0GIAZBAEgNBiAFIAAoAgQiAygCACILIAMoAgQiCEEBaiAEbEEDdGo2AgggBSACNgIMIAJBAEhBACALGw0FIAVBADYCJCAFIAQ2AhwgBSADNgIUIAQgAygCCCIDIAggAyAISBsgAmtKDQYgBUEoaiELIAVBCGohCCAJQQFzIQcjAEHwAGsiAyQAIAVBxABqIgQoAgghAiADQQA2AmAgA0IANwJYAkACQAJAAkACQCACQQBOBEAgAgRAIAJB/////wcgAm5LDQQLIANB2ABqIgYgAiACbCACIAIQGwJAIAcEQCAGIAQgCBDTAwwBCyADQdgAaiAEIAgQ0wMLIAQoAgAhESAEKAIEIQ0gBCgCCCEIIAMgBP0AAgz9CwNIIAT9AAIMIRIgAyAINgIMIAMgDTYCCCADIBE2AgQgAyAS/QsCECADIAsoAhg2AjggAyAL/QACCP0LAiggAyALKQIANwIgIA0gCygCBEcNBCADQQA2AkQgA0IANwI8IAMoAighAgJAAkAgCEUNACACRQ0AIAhB/////wcgAm1KDQUgAiAIckEATg0BDAQLIAIgCHJBAEgNAwsgA0E8aiIGIAIgCGwgCCACEBsgA0HoAGohCiAGIANBBGoiAhDaAwJAIAcEQCADKAJAIAMoAmAgAyAGNgJsIAMgA0HYAGo2AmhHDQZBACEEIANBADYCDCADQgA3AgQgAiAKEJACIAMoAgQhByAGIAIQRgJAIAMoAkQgAygCQGwiCkEATA0AIAMoAjwhBgJAIApBBEkNACAGIAdrQRBJDQAgCkH+////B3EhBEEAIQIDQCAGIAJBA3QiCWogByAJav0AAwD9CwMAIAJBAmoiAiAERw0ACyAEIApGDQELIAogBCICa0EDcSIPBEBBACEJA0AgBiACQQN0IhBqIAcgEGorAwA5AwAgAkEBaiECIAlBAWoiCSAPRw0ACwsgBCAKa0F8Sw0AA0AgBiACQQN0IgRqIAQgB2orAwA5AwAgBiAEQQhqIglqIAcgCWorAwA5AwAgBiAEQRBqIglqIAcgCWorAwA5AwAgBiAEQRhqIgRqIAQgB2orAwA5AwAgAkEEaiICIApHDQALCyADKAIEIgJFDQEgAkEEaygCABARDAELIAMoAkAgAygCXCADIANBPGoiBjYCbCADIANB2ABqNgJoRw0FQQAhBCADQQA2AgwgA0IANwIEIANBBGoiAiADQegAahCPAiADKAIEIQcgBiACEEYCQCADKAJEIAMoAkBsIgpBAEwNACADKAI8IQYCQCAKQQRJDQAgBiAHa0EQSQ0AIApB/v///wdxIQRBACECA0AgBiACQQN0IglqIAcgCWr9AAMA/QsDACACQQJqIgIgBEcNAAsgBCAKRg0BCyAKIAQiAmtBA3EiDwRAQQAhCQNAIAYgAkEDdCIQaiAHIBBqKwMAOQMAIAJBAWohAiAJQQFqIgkgD0cNAAsLIAQgCmtBfEsNAANAIAYgAkEDdCIEaiAEIAdqKwMAOQMAIAYgBEEIaiIJaiAHIAlqKwMAOQMAIAYgBEEQaiIJaiAHIAlqKwMAOQMAIAYgBEEYaiIEaiAEIAdqKwMAOQMAIAJBBGoiAiAKRw0ACwsgAygCBCICRQ0AIAJBBGsoAgAQEQsgAyANNgIIIAMgETYCBCADIAP9AANI/QsCECADIAg2AgwgAygCQCADIANBPGoiBDYCICAIRw0EIAsoAgQgDUcNASALKAIIIAMoAkRHDQEgA0KAgICAgICA+L9/NwNoIAsgA0EEaiAEIANB6ABqENkDIAMoAjwiAgRAIAJBBGsoAgAQEQsgAygCWCICBEAgAkEEaygCABARCyADQfAAaiQADAULDAELQZY4QcsbQbABQcsVEAAAC0H9wABBpyBBlQJBgCQQAAALQQQQFSIAQfjfAjYCACAAQdDfAjYCACAAQZzgAkECEAEAC0GqOkGgG0HiAEHqDBAAAAsgDCAOaiIMIAAoAhAiBEgNAAsMAQsgA0EASA0BIAIgAyADEB0gACgCECIMQQBMDQADQCABKAIAIQYgASgCBCEKIAEoAgghCCAFIAAoAgAiAygCBCALIAwgC0F/c2ogAC0ADBsiBCAAKAIUaiINayIHNgIMIAUgCDYCECAFIAogB2siCUEDdCAGajYCCCAHIAhyQQBIQQAgBhsNBCAFIAo2AiAgBSABNgIUIAVBADYCHCAFIAk2AhggByAJckEASA0FIAhBAEgNBSAEQQBIDQMgBCAMTg0DIAMoAgAhDCAFIAMoAgQiByANQQFqIghrIgY2AkggBSAMIAhBA3RqIAQgB2xBA3RqNgJEIAZBAEhBACAMGw0EIAUgBzYCXCAFIAQ2AlggBSADNgJQIAUgCDYCVCAGIAhyQQBIDQUgBCADKAIITg0FIAUgACgCBCIDKAIAIARBA3RqIAMoAgQgBGxBA3RqKwMAOQMoIAVBCGogBUHEAGogBUEoaiACKAIAEIgBIAtBAWoiCyAAKAIQIgxIDQALCyAFQeAAaiQADwtB1yxBpyBBsAJBgCQQAAALQa8ZQY8iQecBQewSEAAAC0GUM0GNIUGyAUHKJBAAAAtBzw9Bqx9BkwFB/RgQAAAL40kENn8CfAN7An4jAEHgAGsiCyQAIAAtAAwaIAEoAgghBAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIQIgNBMEgNACAEQQJIDQBBMCADQQFqQQF2IANB4ABPGyEpA0AgACgCACIFKAIIAn8gAC0ADCIJQQFGBEAgFCApaiICIAMgAiADSBshAiAUDAELIAMgFGsiAiApayIDQQAgA0EAShsLIgMgACgCFGoiBGshBiAFKAIEIQcgBSgCACIOQQAgBiACIANrIgJyQQBIGw0LIAIgA3JBAEgNByAEIAZyQQBIDQcgAyAHIAJrSg0HIAsgBzYCXCALIAM2AlQgCyAGNgJMIAsgAjYCSCALIA4gA0EDdGogBCAHbEEDdGo2AkQgCyAENgJYIAsgBTYCUCABKAIEIQYgASgCACEOIAEoAgghByALIAUoAggiCCAEayIFNgIsIAsgBzYCMCALIAQgBmogCGsiBEEDdCAOajYCKCAOQQAgBSAHckEASBsNCyALIAY2AkAgC0EANgI8IAsgATYCNCALIAQ2AjggBCAFckEASA0HIAQgBiAFa0oNByAHQQBIDQcgCyAAKAIEIgQoAgAgBCgCBCIFQQN0aiIGIAVBAWogA2xBA3RqNgIIIAsgAjYCDCACQQBIQQAgBhsNCyALQQA2AiQgCyADNgIcIAsgBDYCFCADIAQoAghBAWsiBCAFIAQgBUgbIAJrSg0HIAtBCGohBCAJQQFzISYjAEHwAGsiCCQAIAtBxABqIgMoAgQhAiAIQQA2AmAgCEIANwJYAkAgAkEATgRAAkAgAgRAIAJB/////wcgAm5LDRMLIAhB2ABqIgUgAiACbCACIAIQGwJAICYEQCAFIAMgBBDUAwwBCyAIQdgAaiADIAQQ1AMLIAMoAgAhJyADKAIEIRMgAygCCCEbIAggA/0AAgz9CwNIIAggGzYCDCAIIBM2AgggCCAnNgIEIAggA/0AAgz9CwIQIAggCygCQDYCOCAIIAv9AAIw/QsCKCAIIAspAig3AiAgGyALKAIsRw0JIAhBADYCRCAIQgA3AjwgCCgCKCECAkACQCATRQ0AIAJFDQAgE0H/////ByACbUoNFCACIBNyQQBODQEMAgsgAiATckEASA0BCyAIQTxqIgwgAiATbCATIAIQGyAIQegAaiEqIwBBIGsiFiQAIAhBBGoiDygCJCEFAkAgDygCBCIDIAwoAgRGBEAgDCgCCCAFRg0BCyADIAVyQQBIDQwCQCADRQ0AIAVFDQAgA0H/////ByAFbUoNDgsgDCADIAVsIAMgBRAbIAwoAgghBSAMKAIEIQMLIBZCADcDECAWIAM2AgggFiAFNgIMIAMgBXJBAEgNDSAMIBZBCGoQLwJAIAwoAgggDCgCBGwiA0EATA0AIBYrAxAhOSAMKAIAIQICQCADQQFGBEAgAiEEDAELIAIgA0H+////B3EiBkEDdGohBCA5/RQhO0EAIQUDQCACIAVBA3RqIDv9CwMAIAVBAmoiBSAGRw0ACyADIAZGDQELIAQgOTkDAAsgFkKAgICAgICA+D83AwgjAEEwayICJAAgDygCACEOIA8oAgwgDygCBCEDIA8oAgghBCACIBYrAwg5AyAgDygCJCEFIAIgBDYCECACIAU2AgwgAiAEIAMgAyAEShsiBjYCCCACQgA3AwAgAiAFNgIsIAJBEGogAkEIaiACQSxqEIcBIAIgAigCECIDIAIoAghsNgIUIAIgAyACKAIMbDYCGCgCBCEaIA8oAhwhKyAPKAIoKAIEISwgDCgCACEfIAwoAgQhICMAQZAEayIDIQogAyQAAkAgAiIJKAIIIgIgBCAGIAQgBkgbIhkgAiAZSBsiISAJKAIQIhVsIiJBgICAgAJPDRMCf0EBIAkoAgAiEQ0AGiAiQQN0IQcgIkGAgAFNBEAgAyAHQR5qQXBxayIRIgMkAEEADAELIAdBEGoQFyIHRQ0UIAdBcHEiDSAHNgIMIA1BEGohESAJKAIAQQBHCyEtIAUgFWwiI0GAgICAAk8NEwJ/QQEgCSgCBCIQDQAaICNBA3QhByAjQYCAAU0EQCADIAdBHmpBcHFrIhAkAEEADAELIAdBEGoQFyIDRQ0UIANBcHEiByADNgIMIAdBEGohECAJKAIEQQBHCyEuIApBGGpBAEHwA/wLACAKQoCAgICAgID4PzcDiAQgCkKAgICAgICA+D83A8ADIApCgICAgICAgPg/NwP4AiAKQoCAgICAgID4PzcDsAIgCkKAgICAgICA+D83A+gBIApCgICAgICAgPg/NwOgASAKQoCAgICAgID4PzcDWCAKQoCAgICAgID4PzcDECAEQQBKBEAgAiAVIAIgFUgbIgIgBCACIARIGyICIAYgAiAGSBshKCAZIBVrIS9BCCAhIBUgFSAhShsiAiACQQhOGyIcIBpBA3QiJEEIaiIwbCExQQAhDQNAIAogLDYCCCAKICsgDUEDdCICajYCBCAQIApBBGogGSANayAVIAQgDWsiAyADIBVKGyIDIAMgDWogGUogBiANSnEiMhsiAyAFEHECQCAGIA1MDQAgA0EATA0AIA4gDSAwbGohMyACIB9qITQgAiAOaiE1QQAhHSADIQdBACESA0ACQCAcIAMgEmsiAiACIBxKGyIXQQBMDQAgKCAHIAcgKEobIhhBAUYNAEEBIQJBCCAYIBhBCE4bQQFrIh5BAXEgMyAdIDFsaiElIBhBAkcEQCAeQX5xITdBACEYA0AgAkEDdCIeBEAgCkEQaiACQQZ0aiAlIAIgJGxqIB78CgAACyACQQFqIh5BA3QiOARAIApBEGogHkEGdGogJSAeICRsaiA4/AoAAAsgAkECaiECIBhBAmoiGCA3Rw0ACwtFDQAgAkEDdCIYRQ0AIApBEGogAkEGdGogJSACICRsaiAY/AoAAAsgCkEINgIIIAogCkEQajYCBCARIApBBGoiAiAXIBcQRyAKICA2AgggCiAfIA0gEmoiGEEDdGo2AgQgAiARIBAgFyAXIAUgCSsDICAXIAMgEhArIBJBAEoEQCAKIBo2AgggCiA1IBggGmxBA3RqNgIEIBEgAiAXIBIQRyAKICA2AgggCiA0NgIEIAIgESAQIBIgFyAFIAkrAyAgFyADIBIQKwsgByAcayEHIB1BAWohHSASIBxqIhIgA0gNAAsLIBkgDSANIBlKGyISQQBKBEAgDiANIBpsQQN0aiEXQQAhAgNAIAogGjYCCCAKIBcgAkEDdCIdajYCBCARIApBBGoiGCADIBIgAiAhaiIHIAcgEkobIAJrIgIQRyAKICA2AgggCiAdIB9qNgIEIBggESAQIAIgAyAFIAkrAyBBf0F/QQAQKyAHIgIgEkgNAAsLIC8gDSAyGyAVaiINIARIDQALCwJAICNBgYABSQ0AIBBFIC5yDQAgEEEEaygCABARCwJAICJBgYABSQ0AIBFFIC1yDQAgEUEEaygCABARCyAKQZAEaiQADAALIAkoAgAiAgRAIAJBBGsoAgAQEQsgCSgCBCICBEAgAkEEaygCABARCyAJQTBqJAAgFkEgaiQAAkAgJgRAIAgoAkAgCCgCYCAIIAw2AmwgCCAIQdgAajYCaEcNC0EAIQMgCEEANgIMIAhCADcCBCAPICoQkAIgCCgCBCEEIAwgDxBGAkAgCCgCRCAIKAJAbCIGQQBMDQAgCCgCPCEFAkAgBkEESQ0AIAUgBGtBEEkNACAGQf7///8HcSEDQQAhAgNAIAUgAkEDdCIHaiAEIAdq/QADAP0LAwAgAkECaiICIANHDQALIAMgBkYNAQsgBiADIgJrQQNxIgcEQEEAIQ4DQCAFIAJBA3QiCWogBCAJaisDADkDACACQQFqIQIgDkEBaiIOIAdHDQALCyADIAZrQXxLDQADQCAFIAJBA3QiA2ogAyAEaisDADkDACAFIANBCGoiB2ogBCAHaisDADkDACAFIANBEGoiB2ogBCAHaisDADkDACAFIANBGGoiA2ogAyAEaisDADkDACACQQRqIgIgBkcNAAsLIAgoAgQiAkUNASACQQRrKAIAEBEMAQsgCCgCQCAIKAJcIAggCEE8aiIFNgJsIAggCEHYAGo2AmhHDQpBACEDIAhBADYCDCAIQgA3AgQgCEEEaiICIAhB6ABqEI8CIAgoAgQhBCAFIAIQRgJAIAgoAkQgCCgCQGwiBkEATA0AIAgoAjwhBQJAIAZBBEkNACAFIARrQRBJDQAgBkH+////B3EhA0EAIQIDQCAFIAJBA3QiB2ogBCAHav0AAwD9CwMAIAJBAmoiAiADRw0ACyADIAZGDQELIAYgAyICa0EDcSIHBEBBACEOA0AgBSACQQN0IglqIAQgCWorAwA5AwAgAkEBaiECIA5BAWoiDiAHRw0ACwsgAyAGa0F8Sw0AA0AgBSACQQN0IgNqIAMgBGorAwA5AwAgBSADQQhqIgdqIAQgB2orAwA5AwAgBSADQRBqIgdqIAQgB2orAwA5AwAgBSADQRhqIgNqIAMgBGorAwA5AwAgAkEEaiICIAZHDQALCyAIKAIEIgJFDQAgAkEEaygCABARCyAIIBs2AgwgCCAnNgIEIAggCP0AA0j9CwIQIAggEzYCCCAIKAJAIAggCEE8ajYCICATRw0JIAsoAiwgG0cNCCALKAIwIAgoAkRHDQggCEKAgICAgICA+L9/NwNoIwBBMGsiAiQAIAgoAgQhGyAIKAIQIAgoAgwhCiAIKAIIIQMgAiAIKwNoOQMgIAgoAkQhFSACIAogAyADIApKGyIDNgIQIAIgFTYCDCACIAo2AgggAkIANwMAIAIgFTYCLCACQRBqIAJBCGogAkEsahCHASACIAIoAhAiBSACKAIIbDYCFCACIAUgAigCDGw2AhgoAgQhESAIKAI8ISUgCCgCQCEmIAsoAighHCALKAI0KAIEIR8jAEGQBGsiBCEJIAQkAAJAIAIiBSgCCCICIAogAiAKSBsiICAFKAIQIg9sIiFBgICAgAJJBEACQAJ/QQEgBSgCACIMDQAaICFBA3QhBiAhQYCAAU0EQCAEIAZBHmpBcHFrIgwiBCQAQQAMAQsgBkEQahAXIgZFDQEgBkFwcSIHIAY2AgwgB0EQaiEMIAUoAgBBAEcLIScgDyAVbCIiQYCAgIACSQRAAn9BASAFKAIEIhMNABogIkEDdCEGICJBgIABTQRAIAQgBkEeakFwcWsiEyQAQQAMAQsgBkEQahAXIgRFDQIgBEFwcSIGIAQ2AgwgBkEQaiETIAUoAgRBAEcLISggCUEYakEAQfAD/AsAIAlCgICAgICAgPg/NwOIBCAJQoCAgICAgID4PzcDwAMgCUKAgICAgICA+D83A/gCIAlCgICAgICAgPg/NwOwAiAJQoCAgICAgID4PzcD6AEgCUKAgICAgICA+D83A6ABIAlCgICAgICAgPg/NwNYIAlCgICAgICAgPg/NwMQIAMgCiADIApIGyIEQQBKBEBBCCAgIA8gDyAgShsiAyADQQhOGyEZIAIgDyACIA9IGyICIAogAiAKSBshJANAIAkgJjYCCCAJICUgBCAPIAQgBCAPShsiBmsiHkEDdCIqajYCBCATIAlBBGogBiAVEHEgBiEHQQAhEiAPQQBKBEADQCAGIBJrIgIgGSACIAIgGUobIg1rISMgEiAeaiEWIA1BAEoEQEEIICQgByAHICRKGyICIAJBCE4bIRAgGyAWQQN0IitqISxBACEDA0ACQCADIg5BAWoiAyANTg0AICwgDkEDdCICaiEaIAlBEGogAmohFyADIQICQCAQIA5Bf3NqIh1BAkkNACARQQFHDQAgGiADQQN0aiAraiEtIAP9Ef0MAAAAAAEAAAAAAAAAAAAAAP2uASE7IAMgHUF+cSIYaiECQQAhDgNAIBcgO0EG/asBIjz9GwBqIC0gDkEDdGr9AAMAIj39IQA5AwAgFyA8/RsBaiA9/SEBOQMAIDv9DAIAAAACAAAAAgAAAAIAAAD9rgEhOyAOQQJqIg4gGEcNAAsgGCAdRg0BCyACQQFqIQ4gECACa0EBcQRAIBcgAkEGdGogGiACIBZqIBFsQQN0aisDADkDACAOIQILIA4gEEYNAANAIBcgAkEGdGogGiACIBZqIBFsQQN0aisDADkDACAXIAJBAWoiDkEGdGogGiAOIBZqIBFsQQN0aisDADkDACACQQJqIgIgEEcNAAsLIAMgEEcNAAsLIAlBCDYCCCAJIAlBEGo2AgQgDCAJQQRqIgIgDSANEF0gCSAfNgIIIAkgHCAWQQN0IgNqNgIEIAIgDCATIA0gDSAVIAUrAyAgDSAGIBIQKyAjQQBKBEAgCSARNgIIIAkgAyAbaiANIBZqIgMgEWxBA3RqNgIEIAwgAiANICMQXSAJIB82AgggCSAcIANBA3RqNgIEIAIgDCATICMgDSAVIAUrAyAgDSAGIBIQKwsgByAZayEHIBIgGWoiEiAGSA0ACwsgBCAKSARAIBsgKmohByAEIQIDQCAJIBE2AgggCSAHIAIgEWxBA3RqNgIEIAwgCUEEaiIOIAYgCiACICBqIgMgAyAKShsgAmsiDRBdIAkgHzYCCCAJIBwgAkEDdGo2AgQgDiAMIBMgDSAGIBUgBSsDIEF/QX9BABArIAMiAiAKSA0ACwsgBCAPayIEQQBKDQALCwJAICJBgYABSQ0AIBNFIChyDQAgE0EEaygCABARCwJAICFBgYABSQ0AIAxFICdyDQAgDEEEaygCABARCyAJQZAEaiQADAMLCwsMDQsgBSgCACICBEAgAkEEaygCABARCyAFKAIEIgIEQCACQQRrKAIAEBELIAVBMGokACAIKAI8IgIEQCACQQRrKAIAEBELIAgoAlgiAgRAIAJBBGsoAgAQEQsgCEHwAGokAAwCCwsMCQsgFCApaiIUIAAoAhAiA0gNAAsMAQsgBEEASA0BIAIgBCAEEB0gACgCECIUQQBMDQADQCABKAIAIQcgASgCBCEJIAEoAgghBSALIAAoAgAiBCgCCCAOIBQgDkF/c2ogAC0ADBsiAyAAKAIUIgpqayIGNgIMIAsgBTYCECALIAkgBmsiCEEDdCAHajYCCCAFIAZyQQBIQQAgBxsNCiALIAk2AiAgCyABNgIUIAtBADYCHCALIAg2AhggBiAIckEASA0GIAVBAEgNBiADQQBIDQMgAyAUTg0DIAQoAgQhBiAEKAIIIANBAWoiCSAKaiIFayIHQQBIQQAgBCgCACIIGw0KIAUgB3JBAEgNBiADIAZODQYgCyAENgJQIAsgBzYCTCALIAU2AlggCyADNgJUIAsgCCADQQN0IgNqIAUgBmxBA3RqNgJEIAtBATYCXCALIAMgACgCBCIEKAIAaiAEKAIEIAlsQQN0aisDADkDKCACKAIAIQNBACEIIwBBsAFrIgYkACALKwMoITkCQCALKAIMIgRBAUYEQCALKAIQIgVBAEgNC0QAAAAAAADwPyA5oSE5IAsoAgghByALKAIUKAIEIQlBACEEAkACQCAFDgIDAQALIAlBAUcNACAFQf7///8HcSEEIDn9FCE7QQAhAwNAIAcgA0EDdGoiCiA7IAr9AAMA/fIB/QsDACADQQJqIgMgBEcNAAsgBCAFRg0CCyAFIAQiA2tBA3EiCgRAA0AgByADIAlsQQN0aiIMIDkgDCsDAKI5AwAgA0EBaiEDIAhBAWoiCCAKRw0ACwsgBCAFa0F8Sw0BA0AgByADIAlsQQN0aiIEIDkgBCsDAKI5AwAgByADQQFqIAlsQQN0aiIEIDkgBCsDAKI5AwAgByADQQJqIAlsQQN0aiIEIDkgBCsDAKI5AwAgByADQQNqIAlsQQN0aiIEIDkgBCsDAKI5AwAgA0EEaiIDIAVHDQALDAELIDlEAAAAAAAAAABhDQAgBiALKAIQIgo2ApgBIAYgAzYCkAECQCAKQQBOBEAgCygCCCEFIAYgBEEBayIPNgJgIAYgBUEIajYCXCAGIAo2AmQgCiAPckEASEEAIAUbDQ0gBiALKAIgNgKAASAGIAspAhg3AnggBiAL/QACCP0LAmggBkIBNwKEASAGIAYoAnQoAgQ2AowBIARBAEwNCSALKQJEIT4gBiALKAJMIgQ2AhAgBiA+NwMIIAv9AAJQITsgBiAG/QACbP0LAjQgBiAG/QACfP0LAkQgBiAGKAKMATYCVCAGIAb9AAJc/QsCJCAGIDv9CwIUIAQgD0cNCCAGKAIsIApHDQ4CQCAKRQ0AIApBA3QiBEUNACADQQAgBPwLAAsgBkKAgICAgICA+D83A6ABRAAAAAAAAAAAITlBACEUQQAhESMAQfAAayIHJAACQAJAAkACQCAGKAIsQQFGBEAgBisDoAEhOiAGKAIIIglBACAGKAIQIgRBAEgbDRIgBigCFCEFIAYoAiQiCEEAIAYoAigiA0EASBsNEiADIARHDQICQCAERQ0AIARBAEwNBCAJKwMAIAgrAwCiITlBASEDIARBAUYNACAFKAIEIQwgBEEBayIFQQFxIARBAkcEQCAFQX5xIQRBACEFA0AgOSAJIAMgDGxBA3RqKwMAIAggA0EDdGorAwCioCAJIANBAWoiFCAMbEEDdGorAwAgCCAUQQN0aisDAKKgITkgA0ECaiEDIAVBAmoiBSAERw0ACwtFDQAgOSAJIAMgDGxBA3RqKwMAIAggA0EDdGorAwCioCE5CyAGKAKQASIDIDogOaIgAysDAKA5AwAMAQsgByAGKAIgNgIgIAcgBikCGDcDGCAHIAb9AAII/QsDCCAHIAYoAlQ2AlggByAG/QACRP0LA0ggByAG/QACNP0LAzggByAG/QACJP0LAyggByAGKAKYATYCaCAHIAYpApABNwNgIwBBEGsiCCQAAkACQCAHKAIQIglBgICAgAJJBEAgBisDoAEhOSAHKAIUIQQgBygCCCEMIAcoAkAhEyAHKAIwIRUgBygCLCESIAcoAighFiAJQQN0IQMgCUGBgAFPBEAgA0EQahAXIgNFDRMgA0FwcSIFIAM2AgwgBUEQaiEFDAILIAggA0EeakFwcWsiBSQAIAkNAQwCCwwRCyAJQYCAAUshFCAEKAIEIQ1BACEEAkAgCUEGSQ0AIA1BAUcNACAFIAxrQRBJDQAgCUH+////AXEhBEEAIQMDQCAFIANBA3QiEGogDCAQav0AAwD9CwMAIANBAmoiAyAERw0ACyAEIAlGDQELIAkgBCIDa0EDcSIQBEADQCAFIANBA3RqIAwgAyANbEEDdGorAwA5AwAgA0EBaiEDIBFBAWoiESAQRw0ACwsgBCAJa0F8Sw0AA0AgBSADQQN0aiAMIAMgDWxBA3RqKwMAOQMAIAUgA0EBaiIEQQN0aiAMIAQgDWxBA3RqKwMAOQMAIAUgA0ECaiIEQQN0aiAMIAQgDWxBA3RqKwMAOQMAIAUgA0EDaiIEQQN0aiAMIAQgDWxBA3RqKwMAOQMAIANBBGoiAyAJRw0ACwsgCCATKAIENgIMIAggFjYCCCAIQQE2AgQgCCAFNgIAAkAgBygCYCIDBEAgBygCaEEASA0TCyAVIBIgCEEIaiAIIANBASA5EEggFARAIAVBBGsoAgAQEQsgCEEQaiQADAALCyAHQfAAaiQADAILQbA5QfkaQdIAQewLEAAAC0HmOUHbGUGbA0GGCRAAAAsgCygCCCIHQQAgCygCECIFQQBIGw0NIAsoAgxBAEwNDyAGKAKYASAFRw0QAkAgBUEASgRAIAsoAhQoAgQhCCAGKAKQASEJQQAhAwJAAkAgBUEISQ0AIAhBAUcNACAHIAVBA3QiBGogCUsgByAEIAlqSXENACAFQf7///8HcSEDQQAhBANAIAkgBEEDdCIMaiINIAcgDGr9AAMAIA39AAMA/fAB/QsDACAEQQJqIgQgA0cNAAsgAyAFRg0BCyADQQFyIQQgBUEBcQRAIAkgA0EDdGoiDCAHIAMgCGxBA3RqKwMAIAwrAwCgOQMAIAQhAwsgBCAFRg0AA0AgCSADQQN0aiIEIAcgAyAIbEEDdGorAwAgBCsDAKA5AwAgCSADQQFqIgRBA3RqIgwgByAEIAhsQQN0aisDACAMKwMAoDkDACADQQJqIgMgBUcNAAsLIAsoAgxBAEwNESAFIAYoApgBRw0BIAsrAyghOSAGKAKQASEJIAsoAhQoAgQhCEEAIQMCQCAFQQhJDQAgCEEBRw0AIAkgBUEDdCIEaiAHSyAJIAQgB2pJcQ0AIAVB/v///wdxIQMgOf0UITtBACEEA0AgByAEQQN0IgxqIg0gDf0AAwAgOyAJIAxq/QADAP3yAf3xAf0LAwAgBEECaiIEIANHDQALIAMgBUYNBAsgA0EBciEEIAVBAXEEQCAHIAMgCGxBA3RqIgwgDCsDACA5IAkgA0EDdGorAwCioTkDACAEIQMLIAQgBUYNAwNAIAcgAyAIbEEDdGoiBCAEKwMAIDkgCSADQQN0aisDAKKhOQMAIAcgA0EBaiIEIAhsQQN0aiIMIAwrAwAgOSAJIARBA3RqKwMAoqE5AwAgA0ECaiIDIAVHDQALDAMLIAVBAEgNDSAFIAYoApgBRg0CCwwQC0H4LUGNIUGmAUHKJBAAAAsgCygCTCIDQQBIDQogCysDKCE5IAYgCygCXDYCOCAGIAspAlQ3AzAgBiALKQJMIj43AyggCykCRCE/IAYgBigCmAEiBDYCSCAGID83AyAgBiA5OQMYIAYgAzYCECAGIAYpApABNwNAIA8gPqdHDQUgBCAKRw0FQQAhA0EAIQxBACENIwBBEGsiCSQAIAYoAihBA3QiBEGAgAhNBEAgCSAEQR5qQXBxayIDJAALIAZBQGsoAgAhFQJ/IAYoAighBwJAAkAgAyIERQRAIAdBA3QiBUEQahAXIgRFDQEgBEFwcSIFIAQ2AgwgBUEQaiEECyAJIAc2AgQgCSAENgIAIAdBAE4NAQwOCyAFDQsgCSAHNgIEQQAhBCAJQQA2AgALAkAgB0H+////AXFFDQAgBEEPcUUNAEG2O0GNIUHHAUGJCBAAAAsgCSADRToADCAGKAIoIAdGBEACQCAHQQBMDQAgBigCICEIIAYrAxghOSAGKAIsKAIEIQpBACEFAkAgB0EESQ0AIApBAUcNACAEIAhrQRBJDQAgB0H+////B3EhBSA5/RQhO0EAIQMDQCAEIANBA3QiFGogOyAIIBRq/QADAP3yAf0LAwAgA0ECaiIDIAVHDQALIAUgB0YNAQsgByAFIgNrQQNxIhQEQANAIAQgA0EDdGogOSAIIAMgCmxBA3RqKwMAojkDACADQQFqIQMgDEEBaiIMIBRHDQALCyAFIAdrQXxLDQADQCAEIANBA3RqIDkgCCADIApsQQN0aisDAKI5AwAgBCADQQFqIgVBA3RqIDkgCCAFIApsQQN0aisDAKI5AwAgBCADQQJqIgVBA3RqIDkgCCAFIApsQQN0aisDAKI5AwAgBCADQQNqIgVBA3RqIDkgCCAFIApsQQN0aisDAKI5AwAgA0EEaiIDIAdHDQALCyAJDAELDA0LIg8oAgAhCAJAIAYoAmQiEUEASgRAIAYoAnQoAgQhDCAPKAIEIQcgBigCXCIUQQAgBigCYCITQQBIGw0NIAdBAEgNDCAHQQFxIRIgB0H+////B3EhBCAUIAggB0EDdGpJBH8gCCAUIAwgEUEBa2wgB2pBA3RqSQVBAAsgDEGAgICAAXFBHHZyIAdBAklyQQFxIRYDQCANIAYoAmRODRAgByATRw0RAkAgE0UNACAUIAwgDWxBA3RqIQogFSANQQN0aisDACE5QQAhAyAWRQRAIDn9FCE7A0AgCiADQQN0IgVqIhAgEP0AAwAgOyAFIAhq/QADAP3yAf3xAf0LAwAgA0ECaiIDIARHDQALIAQiAyAHRg0BCyADQQFyIQUgEgRAIAogA0EDdCIDaiIQIBArAwAgOSADIAhqKwMAoqE5AwAgBSEDCyAFIAdGDQADQCAKIANBA3QiBWoiECAQKwMAIDkgBSAIaisDAKKhOQMAIAogBUEIaiIFaiIQIBArAwAgOSAFIAhqKwMAoqE5AwAgA0ECaiIDIAdHDQALCyANQQFqIg0gEUcNAAsLAkAgDy0ADEEBRw0AIAhFDQAgCEEEaygCABARCyAJQRBqJAAMAAsLIAZBsAFqJAAgDkEBaiIOIAAoAhAiFEgNAAsLIAtB4ABqJAAPC0HXLEGnIEGwAkGAJBAAAAtBrxlBjyJB5wFB7BIQAAALQZY4QcsbQbABQcsVEAAAC0GqOkGgG0HiAEHqDBAAAAtBzw9Bqx9BkwFB/RgQAAALQf3AAEGnIEGVAkGAJBAAAAtBBBAVIgBB+N8CNgIAIABB0N8CNgIAIABBnOACQQIQAQALQZ0xQZ8dQcoAQZ0VEAAAC0GUM0GNIUGyAUHKJBAAAAtB38QAQbghQYYCQYAkEAAAC0G+NEGrH0H6AEH9GBAAAAtBljhBgBxB8gVBlCUQAAALQQQQFSIAQfjfAjYCACAAQdDfAjYCACAAQZzgAkECEAEAC9wtBCh/AnwEewF+IwBBkAFrIgUkAAJAAkACQAJAAkACQAJAAkACQCABKAIEIgZB5QBOBEAgAyAGckEASEEAIAAoAnAiCRsNCSAGIANrIgwgBnIiGkEASEEAIAkbDQkgAigCCCEWIAIoAgAhFCABKAIIIQAgASgCDCgCBCEbAkAgA0EASEEAIAEoAgAiFRtFBEAgCSADIAZsQQN0aiEXIBRFIBZBAE5yIRwgCSAGIAZsIgdBBHRqIRggCSAHQQN0aiEZIBVFIAxBAE5yISAgAEEAIABBAEobISEgBkH+////B3EhDSADIAZrISIgDEH+////B3EhCiADQX5xIQsgA0EDdCEdIAkgFWshIyAMQQN0ISRBACAbQQN0ayElIBQgBkEEdEEIayIAaiEeIAkgACAGbGohJiAJIAYgBkEYbEEIa2xqIScgAyAGQQN0QQhrbCAJaiAVayEoIAb9ESExIAMgDHJBAEghKSAMQQJJISoDQCASICFGDQsgAyAGSw0GIBIgJWwhHyAVIBIgG2xBA3RqIQ8CQCADRQ0AIB8gI2ohEEEAIQADQCAPIABBA3RqKwMARAAAAAAAAAAAYQRAIABBAWoiACADRw0BDAILCyAGIA5NDQwgCSADIA5sQQN0aiEEQQAhCEEAIQcCQAJAIANBAUYNACAQIA4gHWxqQRBJDQADQCAEIAdBA3QiAGogACAPav0AAwD9CwMAIAdBAmoiByALRw0ACyALIgcgA0YNAQsgAyAHIgBrQQNxIhAEQANAIAQgAEEDdCITaiAPIBNqKwMAOQMAIABBAWohACAIQQFqIgggEEcNAAsLIAcgA2tBfEsNAANAIAQgAEEDdCIHaiAHIA9qKwMAOQMAIAQgB0EIaiIIaiAIIA9qKwMAOQMAIAQgB0EQaiIIaiAIIA9qKwMAOQMAIAQgB0EYaiIHaiAHIA9qKwMAOQMAIABBBGoiACADRw0ACwsgHEUNDSASIAIoAgQiEE4NDCAGIBZHDQogFCASQQN0aiETIBkgDkEDdCIAaiEIQQAhB0EAIQQCQAJAIBBBAUcNAP0MAAAAAAEAAAAAAAAAAAAAACEuIB4gCCAAICZqIgAgACAISxtLBEAgFCAIIAAgACAISRtBCGpJDQELA0AgCCAuIDH9tQEiL/0bAEEDdGogEyAEQQN0av0AAwAiMP0hADkDACAIIC/9GwFBA3RqIDD9IQE5AwAgLv0MAgAAAAIAAAACAAAAAgAAAP2uASEuIARBAmoiBCANRw0ACyANIgQgBkYNAQsgBiAEIgBrQQNxIisEQANAIAggACAGbEEDdGogEyAAIBBsQQN0aisDADkDACAAQQFqIQAgB0EBaiIHICtHDQALCyAEIAZrQXxLDQADQCAIIAAgBmxBA3RqIBMgACAQbEEDdGorAwA5AwAgCCAAQQFqIgcgBmxBA3RqIBMgByAQbEEDdGorAwA5AwAgCCAAQQJqIgcgBmxBA3RqIBMgByAQbEEDdGorAwA5AwAgCCAAQQNqIgcgBmxBA3RqIBMgByAQbEEDdGorAwA5AwAgAEEEaiIAIAZHDQALCyAOQQFqIQ4LICBFDQwgKQ0GIAxBAEgNBwJAIAMgBkYNACAfIChqIRAgDyAdaiEEQQAhAANAIAQgAEEDdGorAwBEAAAAAAAAAABhBEAgAEEBaiIAIAxHDQEMAgsLIAYgEU0NDCAXIAwgEWxBA3RqIQ9BACEIQQAhBwJAAkAgKg0AIBAgESAkbGpBEEkNAANAIA8gB0EDdCIAaiAAIARq/QADAP0LAwAgB0ECaiIHIApHDQALIAoiByAMRg0BCyAGIAciACADamtBA3EiEARAA0AgDyAAQQN0IhNqIAQgE2orAwA5AwAgAEEBaiEAIAhBAWoiCCAQRw0ACwsgByAiakF8Sw0AA0AgDyAAQQN0IgdqIAQgB2orAwA5AwAgDyAHQQhqIghqIAQgCGorAwA5AwAgDyAHQRBqIghqIAQgCGorAwA5AwAgDyAHQRhqIgdqIAQgB2orAwA5AwAgAEEEaiIAIAxHDQALCyAcRQ0NIBIgAigCBCIPTg0MIAYgFkcNAyAUIBJBA3RqIRAgGCARQQN0IgBqIQRBACEIQQAhBwJAAkAgD0EBRw0A/QwAAAAAAQAAAAAAAAAAAAAAIS4gHiAEIAAgJ2oiACAAIARLG0sEQCAUIAQgACAAIARJG0EIakkNAQsDQCAEIC4gMf21ASIv/RsAQQN0aiAQIAdBA3Rq/QADACIw/SEAOQMAIAQgL/0bAUEDdGogMP0hATkDACAu/QwCAAAAAgAAAAIAAAACAAAA/a4BIS4gB0ECaiIHIA1HDQALIA0iByAGRg0BCyAGIAciAGtBA3EiEwRAA0AgBCAAIAZsQQN0aiAQIAAgD2xBA3RqKwMAOQMAIABBAWohACAIQQFqIgggE0cNAAsLIAcgBmtBfEsNAANAIAQgACAGbEEDdGogECAAIA9sQQN0aisDADkDACAEIABBAWoiByAGbEEDdGogECAHIA9sQQN0aisDADkDACAEIABBAmoiByAGbEEDdGogECAHIA9sQQN0aisDADkDACAEIABBA2oiByAGbEEDdGogECAHIA9sQQN0aisDADkDACAAQQRqIgAgBkcNAAsLIBFBAWohEQsgEkEBaiISIAZHDQALIAlBACADIA5yQQBIIgAbDQsgBiAOSA0FIAANBSAJQQAgBiAOckEASBsNCyAGIA5JDQUgBSAGNgKMASAFQgA3AoQBIAUgBjYCfCAFIAY2AnggBSAZNgJ0IAUgBjYCcCAFIA42AmwgBSAZNgJoIAUgAzYCZCAFQgA3AlwgBSAGNgJUIAUgAzYCUCAFIAk2AkwgBSAONgJIIAUgAzYCRCAFIAk2AkAgASgCACEAIAUgASgCCCICNgIUIAUgAzYCECAFIAA2AgwgAiADckEASEEAIAAbDQsgBSABKAIYNgIwIAUgASkCEDcCKCAFIAH9AAIA/QsCGCAFQgA3AjQgBSAFKAIkKAIENgI8IANBAEgNBSACQQBIDQUgAyAGSg0FIAIgBkcNCCAFQQxqIgIgBUFAayIHIAVB6ABqIgQQ1QMgCUEAIAwgEXIiDUEASBsNCyAGIBFIDQUgDUEASA0FIAlBACAGIBFyQQBIGw0LIBFBAEgNBSAFIAY2AowBIAVCADcChAEgBSAGNgJ8IAUgBjYCeCAFIBg2AnQgBSAGNgJwIAUgETYCbCAFIBg2AmggBSAMNgJkIAVCADcCXCAFIAY2AlQgBSAMNgJQIAUgFzYCTCAFIBE2AkggBSAMNgJEIAUgFzYCQCAFIAY2AhQgBSAMNgIQIAUgACADQQN0ajYCDCAaQQBIQQAgABsNCyAFIAEoAhg2AjAgBSABKQIQNwIoIAUgAf0AAgD9CwIYIAVBADYCOCAFIAM2AjQgBSAFKAIkKAIENgI8IAMgGnJBAEgNBSACIAcgBBDVAwwDCyAAQQBMDQkMCgsMBgsgACgCcCEAIAUgBjYCFCAFIAY2AhAgBSAANgIMIAZBAEhBACAAGw0IIABBD3FBACAGIAZsQfz///8BcRsNASAFIAEoAhg2AlggBSABKQIQNwNQIAUgAf0AAgD9CwNAIAUgAjYCXCABKAIIIhEgAigCBCIDRw0EIAYgBSgCREcNBSACKAIIIAZHDQUgBUFAayEAIwBB4ABrIg0kACAFQQxqIg4oAgQhBCAFKAIUIQsCQAJAIANBAEwNACADIARqIAtqQRNKDQAgACgCCCADRw0GIAAoAgAhCSAAKAIEIQwgDSADNgIwIA0gDDYCLCANIAk2AiggDSAAKQIUNwI8IA0gACkCDCIyNwI0IA0gCTYCSCANIAI2AkQgDSAypygCBDYCUCANIAIoAgA2AlQgDSADNgJYIA0gAzYCXCAEIAxHDQcgAigCCCALRw0HIAUoAgwhACANIAQ2AiQgDSAANgIcIA0gDjYCGCANIA1BC2o2AhQgDSANQShqNgIQIA0gDUEcajYCDAJAIA0oAhgiACgCCCIUQQBMDQAgACgCBCIIQQBMDQAgDSgCECICKAIIIQQgDSgCDCIAKAIIIRAgACgCACETAkAgAigCACIVQQAgBEEASBsNACAEQQFrIhJBfnEhFiASQQFxIRcCQAJAA0AgEyAKIBBsQQN0aiEPQQAhAAJAIAQEQEEAIQsgBEEASgRAA0AgCyACKAIETg0GIAIoAgwgAigCHCIAKAIEIQMgACgCACIMQQAgA0EASBsNByAKIAAoAghODQYgAyAERw0FIA8gC0EDdCIJaiEYQQEhACAJIBVqIgkrAwAgDCADIApsQQN0aiIMKwMAoiEsKAIEIQ5BACEDAkACQAJAIBIOAgIBAAsDQCAsIAkgACAObEEDdGorAwAgDCAAQQN0aisDAKKgIAkgAEEBaiIZIA5sQQN0aisDACAMIBlBA3RqKwMAoqAhLCAAQQJqIQAgA0ECaiIDIBZHDQALCyAXRQ0AICwgCSAAIA5sQQN0aisDACAMIABBA3RqKwMAoqAhLAsgGCAsOQMAIAtBAWoiCyAIRw0ADAMLAAsgAigCBEEATA0EIAIoAhwiACgCBCEBIAAoAgBBACABQQBIGw0FIAogACgCCE4NBCABIARHDQMMDwsDQCAAIAIoAgRODQQgAigCHCIDKAIEIQsgAygCAEEAIAtBAEgbDQUgCiADKAIITg0EIAsNAyAPIABBA3RqQgA3AwAgAEEBaiIAIAhHDQALCyAKQQFqIgogFEcNAAsMAwtB3TdB7hxB9ABBjxUQAAALDAsLDAsLDAELIAQgC3JBAEgNBAJAIAQgC2wiA0EATA0AIANBA3QiA0UNACAFKAIMQQAgA/wLAAsgDUKAgICAgICA+D83AyggDUEoaiELIwBB4ABrIgMkAAJAAkAgBSgCECIEIAAoAgRHDQAgBSgCFCIKIAIoAghHDQACQCAKRQ0AIARFDQAgACgCCCIJRQ0AIApBAUYEQCADIAUoAgwiCjYCACADIAQ2AgQgBEEASEEAIAobDQ0gAyAFKAIUNgIUIAMgBSkCDDcCDCADQgA3AhwgAyADKAIQNgIkIAIoAgAhBCADIAIoAgQiCjYCPCADIAQ2AjggBEEAIApBAEgbDQ0gAyAKNgJQIANCADcCSCADIAI2AkQgAyAAIANBOGogCxCNAgwBCyAEQQFGBEAgAyAFKAIMIgQ2AjggAyAKNgJAIApBAEhBACAEGw0NIAMgBSgCFDYCTCADIAUpAgw3AkQgA0EBNgJcIANCADcCVCADIAAoAgAiBDYCACADIAk2AgggCUEASEEAIAQbDQ0gAyAAKAIYNgIkIAMgACkCEDcCHCADIAD9AAIA/QsCDCADQQE2AjAgA0IANwIoIwBB4ABrIgokAAJAAkACQCACKAIIQQFGBEAgCysDACEtIAMoAgAiC0EAIAMoAggiAEEASBsNESADKAIYIQQgAigCACIJQQAgAigCBCICQQBIGw0RIAAgAkcNAgJAIABFDQAgAEEATA0QIAsrAwAgCSsDAKIhLEEBIQggAEEBRg0AIAQoAgQhAiAAQQFrIgRBAXEgAEECRwRAIARBfnEhAEEAIQQDQCAsIAsgAiAIbEEDdGorAwAgCSAIQQN0aisDAKKgIAsgCEEBaiIOIAJsQQN0aisDACAJIA5BA3RqKwMAoqAhLCAIQQJqIQggBEECaiIEIABHDQALC0UNACAsIAsgAiAIbEEDdGorAwAgCSAIQQN0aisDAKKgISwLIAMoAjgiACAtICyiIAArAwCgOQMADAELIAogAygCMDYCMCAKIAP9AAIg/QsDICAKIAP9AAIQ/QsDECAKIAP9AAIA/QsDACAKQUBrIAMoAkA2AgAgCiADKQI4NwM4IAogAygCTDYCTCAKIAMpAkQ3AkQgCiADKAJcNgJcIAogAykCVDcCVCAKIAI2AjQjAEEQayIJJAACQAJAAkACQCAKKAIIIgRBgICAgAJJBEAgCysDACEsIAooAhghAiAKKAIAIQwgCigCNCEIIARBA3QhACAEQYGAAU8EQCAAQRBqEBciAEUNBCAAQXBxIgsgADYCDCALQRBqIQsMAgsgCSAAQR5qQXBxayILJAAgBA0BDAILDAILIARBgIABSyESIAIoAgQhDkEAIQICQCAEQQZJDQAgDkEBRw0AIAsgDGtBEEkNACAEQf7///8BcSECQQAhAANAIAsgAEEDdCIUaiAMIBRq/QADAP0LAwAgAEECaiIAIAJHDQALIAIgBEYNAQsgBCACIgBrQQNxIhQEQANAIAsgAEEDdGogDCAAIA5sQQN0aisDADkDACAAQQFqIQAgD0EBaiIPIBRHDQALCyACIARrQXxLDQADQCALIABBA3RqIAwgACAObEEDdGorAwA5AwAgCyAAQQFqIgJBA3RqIAwgAiAObEEDdGorAwA5AwAgCyAAQQJqIgJBA3RqIAwgAiAObEEDdGorAwA5AwAgCyAAQQNqIgJBA3RqIAwgAiAObEEDdGorAwA5AwAgAEEEaiIAIARHDQALCyAIKAIIIQAgCCgCACECIAkgCCgCBCIENgIMIAkgAjYCCCAJQQE2AgQgCSALNgIAAkAgCigCOCICBEAgCigCQEEASA0BCyAAIAQgCUEIaiAJIAIgCigCSCAsEEggEgRAIAtBBGsoAgAQEQsgCUEQaiQADAILDBILQQQQFSIAQfjfAjYCACAAQdDfAjYCACAAQZzgAkECEAEACwsgCkHgAGokAAwBC0GwOUH5GkHSAEHsCxAAAAsMAQsgCysDACEsIAMgCTYCECADIAo2AgwgAyAENgIIIANCADcDACADQRBqIANBCGogA0EMahBwIAMgAygCECIEIAMoAghsNgIUIAMgBCADKAIMbDYCGCAAKAIEIAIoAgggACgCCCAAKAIAIAAoAgwoAgQgAigCACACKAIEIAUoAgwgBSgCECAsIAMQhgEgAygCACIABEAgAEEEaygCABARCyADKAIEIgBFDQAgAEEEaygCABARCyADQeAAaiQADAELQag3QYQaQdYDQb0VEAAACwsgDUHgAGokACAGIAUoAhBHDQUgBSgCFCARRw0FIAZBAEwNACARQQBMDQAgBkH+////B3EhAiABKAIAIg0gBSgCDCIKIAYgEWxBA3RqSSAKIA0gASgCDCgCBCILIBFBAWtsIAZqQQN0aklxIAYgC3JBgICAgAFxQRx2ciAGQQZJciEJA0AgCiAGIAdsQQN0aiEBIA0gByALbEEDdGohA0EAIQBBACEEAkAgCUUEQANAIAMgAEEDdCIEaiABIARq/QADAP0LAwAgAEECaiIAIAJHDQALIAIiBCAGRg0BC0EAIQggBiAEIgBrQQNxIgwEQANAIAMgAEEDdCIOaiABIA5qKwMAOQMAIABBAWohACAIQQFqIgggDEcNAAsLIAQgBmtBfEsNAANAIAMgAEEDdCIEaiABIARqKwMAOQMAIAMgBEEIaiIMaiABIAxqKwMAOQMAIAMgBEEQaiIMaiABIAxqKwMAOQMAIAMgBEEYaiIEaiABIARqKwMAOQMAIABBBGoiACAGRw0ACwsgB0EBaiIHIBFHDQALCyAFQZABaiQADwtBtjtBjSFBxwFBiQgQAAALQc8PQasfQZMBQf0YEAAAC0GdMUGfHUHKAEGdFRAAAAtBqjpBoBtB4gBB6gwQAAALQd/EAEG4IUGGAkGAJBAAAAtB5jlB2xlBmwNBhgkQAAALQb40QasfQfoAQf0YEAAAC0GUM0GNIUGyAUHKJBAAAAuyAQEFfyMAQRBrIgMkAEEBIQICQCAAKAIEIgRBAk4EQANAIAMgARDSASACIAAoAgQiBUoNAiAAKAIAIAJBA3RqIgZBCGsgAysDADkDACACIAVODQIgBiADKwMIOQMAIAJBAmoiAiAESA0ACwsgAiAERgRAIAMgARDSASAEIAAoAgRKDQEgACgCACAEQQN0akEIayADKwMAOQMACyADQRBqJAAPC0HHOUHaIEGaA0H4KBAAAAujAgEGfyABIAAoAggiAyAAKAIEIgJrQQxtTQRAIAAgAQR/IAFBDGxBDGsiACAAQQxwa0EMaiIABEAgAkEAIAD8CwALIAAgAmoFIAILNgIEDwsCQCACIAAoAgAiAmsiBUEMbSABaiIEQdaq1aoBSQRAQdWq1aoBIAMgAmtBDG0iA0EBdCIGIAQgBCAGSRsgA0Gq1arVAE8bIgQEQCAEQdaq1aoBTw0CIARBDGwQEiEHCyAFIAdqIQMgAUEMbEEMayIBIAFBDHBrQQxqIgEEQCADQQAgAfwLAAsgAyAFQXRtQQxsaiEGIAUEQCAGIAIgBfwKAAALIAAgByAEQQxsajYCCCAAIAEgA2o2AgQgACAGNgIAIAIEQCACEBELDwsQFAALECQAC/QKAwN/AXwBeyMAQSBrIgQkACAAIAEgAkg6AIQBAkACQAJ/AkACQAJAAkAgASACckEATgRAIAAtACUgASAAKAI0RnEgAiAAKAI4RnEgAyAAKAIsRnEiBUUEQCAAIAI2AjggACABNgI0IAAgAzYCLCAAQYACOwEkIABBADYCICAAIANBBXZBAXE6ACogACADQQR2QQFxOgApIAAgA0EDdkEBcToAKCAAIANBAnZBAXE6ACcgA0EMcUEMRg0CIANBMHFBMEYNAyAAIAIgASABIAJKGyIBNgI8IAFBAEgNCCAAQRhqIAEgARAdIAAoAjQiASAAKAI8QQAgAC0AKBsgAC0AJxsiAiABckEASA0EAkAgAUUNACACRQ0AIAFB/////wcgAm1KDQYLIAAgASACbCABIAIQGyAAKAI4IgEgACgCPEEAIAAtACobIAAtACkbIgIgAXJBAEgNBAJAIAFFDQAgAkUNACABQf////8HIAJtSg0GCyAAQQxqIAEgAmwgASACEBsLIAUMBQtB4S1B5SFB0wJBuyQQAAALQa8+QeUhQecCQbskEAAAC0H7PEHlIUHoAkG7JBAAAAtB/cAAQacgQZUCQYAkEAAAC0EEEBUiAEH43wI2AgAgAEHQ3wI2AgAgAEGc4AJBAhABAAtFBEAgACgCPCEBIARCADcDECAEIAE2AgwgBCABQQFqIgI2AggCQAJAIAEgAnJBAE4EQCAAQeAAaiAEQQhqEC8CQCAAKAJoIAAoAmRsIgVBAEwNACAEKwMQIQcgACgCYCEDAkAgBUEBRgRAIAMhAgwBCyADIAVB/v///wdxIgZBA3RqIQIgB/0UIQhBACEBA0AgAyABQQN0aiAI/QsDACABQQJqIgEgBkcNAAsgBSAGRg0BCyACIAc5AwALIAAgAC0AKSAALQAqckEBcSIBOgCFASAAIAAtACcgAC0AKHJBAXEiAjoAhgECQCAALQCEAUEBRgRAIAAgAToAhgEgACACOgCFASACDQEMAwsgAUUNAgsgACgCPCEBIARCADcDECAEIAFBAWoiAjYCDCAEIAI2AgggAUF+TA0EIABByABqIARBCGoQLyAAKAJQIAAoAkxsIgJBAEwNAiAEKwMQIQcgACgCSCEDIAJBAUYEQCADIAc5AwAMAwsgAyACQf7///8HcSIFQQN0aiAH/RQhCEEAIQEDQCADIAFBA3RqIAj9CwMAIAFBAmoiASAFRw0ACyACIAVGDQIgBzkDAAwCCwwDCyAAKAI8IQEgBEIANwMQIARBAjYCCCAEIAFBAWo2AgwgAUF+TA0CIABByABqIARBCGoQLyAAKAJQIAAoAkxsIgVBAEwNACAEKwMQIQcgACgCSCEDAkAgBUEBRgRAIAMhAgwBCyADIAVB/v///wdxIgZBA3RqIQIgB/0UIQhBACEBA0AgAyABQQN0aiAI/QsDACABQQJqIgEgBkcNAAsgBSAGRg0BCyACIAc5AwALAkAgAC0AhgFBAUcNACAAKAI8IQEgBEIANwMQIAQgATYCDCAEIAE2AgggAUEASA0CIABB1ABqIARBCGoQLyAAKAJcIAAoAlhsIgVBAEwNACAEKwMQIQcgACgCVCEDAkAgBUEBRgRAIAMhAgwBCyADIAVB/v///wdxIgZBA3RqIQIgB/0UIQhBACEBA0AgAyABQQN0aiAI/QsDACABQQJqIgEgBkcNAAsgBSAGRg0BCyACIAc5AwALIABB8ABqIAAoAjxBAWoiASABbEEDbCIBIAEQHSAAKAI8IgFBAEgNAiAAQfgAaiABQQNsIgAgABCeAQsgBEEgaiQADwtBnTFBnx1BygBBnRUQAAALQdcsQacgQbACQYAkEAAAC7gXBBV/AnwBfgF7IAEoAgwhAwJAAkACQAJAAkAgASgCACIFKAIEIgIgACgCACIEKAIERgRAIAQoAgggA0YNAQsgAiADckEASA0BAkAgAkUNACADRQ0AIAJB/////wcgA21KDQULIAQgAiADbCACIAMQGyABKAIAIQULIwBBgAFrIgckACAEKAIEIQIgBCgCCCEIAkACQAJAAkACQCABIgNBBGooAgQiAUEATA0AIAEgAmogCGpBE0oNACAHIAU2AhAgByADKAIcNgIsIAcgA/0AAgz9CwIcIAcgAykCBDcCFCAFKAIIIAFHDQIgByAFNgJIIAcgAygCHDYCZCAHIAP9AAIM/QsCVCAHIAMpAgQiGTcCTCAHIAUpAgA3AmggByAZPgJwIAcoAlgoAgQhAyAHIAE2AnwgByADNgJ4IAcoAhwhAQJAIAcoAhAoAgQiAyAEKAIERgRAIAQoAgggAUYNAQsgASADckEASA0GAkACQAJAIANFDQAgAUUNACADQf////8HIAFtSg0BCyAEIAEgA2wgAyABEBsgBCgCBCADRw0BIAQoAgggAUcNAQwCC0EEEBUiAEH43wI2AgAgAEHQ3wI2AgAgAEGc4AJBAhABAAtBoA9BgBxB/QVBlCUQAAALIAcgBCkCADcCQCAHIAQ2AjwgByAHQQ9qNgI4IAcgB0HIAGo2AjQgByAHQUBrNgIwAkAgBygCPCIBKAIIIhBBAEwNACABKAIEIgtBAEwNACAHKAIwIgEoAgQhESABKAIAIRIgBygCNCIDKAIAIgQoAgghAgJAIAQoAgAiDUEAIAJBAEgbDQAgAkEBayIOQX5xIRMgDkEBcSEUAkACQANAIBIgBiARbEEDdGohD0EAIQECQCACBEBBACEFIAJBAEoEQANAIAUgBCgCBCIITg0GIAMoAhAoAgQhCiADKAIEIgxBACADKAIIIgFBAEgbDQcgBiADKAIMTg0GIAEgAkcNBSAPIAVBA3QiCWpBASEBIAkgDWoiCSsDACAMIAYgCmxBA3RqIgorAwCiIRdBACEMAkACQAJAIA4OAgIBAAsDQCAXIAkgASAIbEEDdGorAwAgCiABQQN0aisDAKKgIAkgAUEBaiIWIAhsQQN0aisDACAKIBZBA3RqKwMAoqAhFyABQQJqIQEgDEECaiIMIBNHDQALCyAURQ0AIBcgCSABIAhsQQN0aisDACAKIAFBA3RqKwMAoqAhFwsgFzkDACAFQQFqIgUgC0cNAAwDCwALIAQoAgRBAEwNBCADKAIEQQAgAygCCCIAQQBIGw0FIAYgAygCDE4NBCAAIAJHDQMMDQsDQCABIAQoAgRODQQgAygCBEEAIAMoAggiBUEASBsNBSAGIAMoAgxODQQgBQ0DIA8gAUEDdGpCADcDACABQQFqIgEgC0cNAAsLIAZBAWoiBiAQRw0ACwwDC0HdN0HuHEH0AEGPFRAAAAtBvjRBqx9B+gBB/RgQAAALDAgLDAELIAdCADcDUCAHIAI2AkggByAINgJMIAIgCHJBAEgNAiAEIAdByABqEC8CQCAEKAIIIAQoAgRsIgZBAEwNACAHKwNQIRggBCgCACECAkAgBkEBRgRAIAIhAQwBCyACIAZB/v///wdxIghBA3RqIQEgGP0UIRoDQCACIAlBA3RqIBr9CwMAIAlBAmoiCSAIRw0ACyAGIAhGDQELIAEgGDkDAAsgB0KAgICAgICA+D83A0ggB0HIAGohCSMAQdAAayICJAACQAJAIAQoAgQiASAFKAIERw0AIAQoAggiBiADKAIMRw0AAkAgBkUNACABRQ0AIAUoAggiCEUNACAGQQFGBEAgAiAEKAIAIgY2AjQgAiABNgI4IAFBAEhBACAGGw0KIAIgATYCTCACQgA3AkQgAiAENgJAIAMoAgQhASACIAMoAggiBDYCBCACIAE2AgAgAUEAIARBAEgbDQogAiADKAIcNgIkIAIgAykCFDcCHCACIAP9AAIE/QsCDCACQgA3AiggAiACKAIYKAIENgIwIAJBNGogBSACIAkQ0gMMAQsgAUEBRgRAIAIgBCgCACIBNgIAIAIgBjYCCCAGQQBIQQAgARsNCiACQQE2AhggAkIANwIQIAIgBDYCDCACIAUoAgAiATYCNCACIAg2AjwgCEEASEEAIAEbDQogAkEBNgJMIAJCADcCRCACIAU2AkAjAEHgAGsiBCQAAkACQAJAIAMoAgxBAUYEQCAJKwMAIRggAigCNCIGQQAgAigCPCIFQQBIGw0OIAIoAkAhCSADKAIEIghBACADKAIIIgFBAEgbDQ4gASAFRw0CAkAgBUUNACAFQQBMDQ4gBisDACAIKwMAoiEXQQEhASAFQQFGDQAgCSgCBCEDIAVBAWsiCUEBcSAFQQJHBEAgCUF+cSEJQQAhBQNAIBcgBiABIANsQQN0aisDACAIIAFBA3RqKwMAoqAgBiABQQFqIgsgA2xBA3RqKwMAIAggC0EDdGorAwCioCEXIAFBAmohASAFQQJqIgUgCUcNAAsLRQ0AIBcgBiABIANsQQN0aisDACAIIAFBA3RqKwMAoqAhFwsgAigCACIBIBggF6IgASsDAKA5AwAMAQsgBCACKAJMNgIYIAQgAikCRDcDECAEIAL9AAI0/QsDACAEIAMoAhw2AjggBCADKQIUNwMwIAQgA/0AAgT9CwMgIAQgAigCGDYCWCAEIAIpAhA3A1AgBCAC/QACAP0LA0AgBEFAayELIwBBEGsiCCQAAkACQAJAIAQoAggiBUGAgICAAkkEQCAJKwMAIRcgBCgCDCEDIAQoAgAhCSAEKAIsIQwgBCgCKCEQIAQoAiQhESAEKAIgIRIgBUEDdCEBIAVBgYABTwRAIAFBEGoQFyIBRQ0TIAFBcHEiBiABNgIMIAZBEGohBgwCCyAIIAFBHmpBcHFrIgYkACAFDQEMAgsMEQsgBUGAgAFLIQ4gAygCBCEKQQAhAwJAIAVBBkkNACAKQQFHDQAgBiAJa0EQSQ0AIAVB/v///wFxIQNBACEBA0AgBiABQQN0Ig1qIAkgDWr9AAMA/QsDACABQQJqIgEgA0cNAAsgAyAFRg0BCyAFIAMiAWtBA3EiDQRAA0AgBiABQQN0aiAJIAEgCmxBA3RqKwMAOQMAIAFBAWohASAPQQFqIg8gDUcNAAsLIAMgBWtBfEsNAANAIAYgAUEDdGogCSABIApsQQN0aisDADkDACAGIAFBAWoiA0EDdGogCSADIApsQQN0aisDADkDACAGIAFBAmoiA0EDdGogCSADIApsQQN0aisDADkDACAGIAFBA2oiA0EDdGogCSADIApsQQN0aisDADkDACABQQRqIgEgBUcNAAsLIAggDCgCBDYCDCAIIBI2AgggCEEBNgIEIAggBjYCAAJAIAsoAgAiAQRAIAsoAghBAEgNAQsgECARIAhBCGogCCABIAsoAgwoAgQgFxBIIA4EQCAGQQRrKAIAEBELIAhBEGokAAwBCwwOCwsgBEHgAGokAAwBC0GwOUH5GkHSAEHsCxAAAAsMAQsgCSsDACEXIAIgCDYCECACIAY2AgwgAiABNgIIIAJCADcDACACQRBqIAJBCGogAkEMahBwIAIgAigCECIBIAIoAghsNgIUIAIgASACKAIMbDYCGCAFKAIEIgEgAygCDCAFKAIIIAUoAgAgASADKAIEIAMoAhAoAgQgBCgCACAEKAIEIBcgAhCGASACKAIAIgEEQCABQQRrKAIAEBELIAIoAgQiAUUNACABQQRrKAIAEBELIAJB0ABqJAAMAQtBqDdBhBpB1gNBvRUQAAALCyAHQYABaiQADAILQao6QaAbQeIAQeoMEAAAC0GdMUGfHUHKAEGdFRAAAAsgACgCABoPC0H9wABBpyBBlQJBgCQQAAALQeY5QdsZQZsDQYYJEAAAC0GUM0GNIUGyAUHKJBAAAAtBBBAVIgBB+N8CNgIAIABB0N8CNgIAIABBnOACQQIQAQALkBUDE38CfAJ+IwBB4ABrIgYkACAAKAIEIQMgACgCCCEEAkACQAJAAkACQAJAAkAgAigCBCIFQQBMDQAgAyAFaiAEakETSg0AIAEoAggiBSACKQIAIhhCIIinRw0CIAYgAigCCCIINgI0IAYgGDcCLCAGIAE2AiggBkFAayACKQIUNwIAIAYgAikCDCIZNwI4IAEoAgAhAiABKAIEIQEgBiAYPgJQIAYgATYCTCAGIAI2AkggGacoAgQhAiAGIAU2AlwgBiACNgJYIAEgA0cNAyAEIAhHDQMgBiAAKAIANgIcIAYgACgCDCgCBDYCJCAGIAA2AhggBiAGQQtqNgIUIAYgBkEoajYCECAGIAZBHGo2AgxBACECAkAgBigCGCIAKAIIIg9BAEwNACAAKAIEIgpBAEwNACAGKAIMIgAoAgghDCAAKAIAIRAgBigCECIBKAIAIgQoAgghAwJAIAQoAgAiEUEAIANBAEgbDQAgA0EBayINQX5xIRIgDUEBcSETAkACQANAIBAgAiAMbEEDdGohDkEAIQACQCADBEBBACEFIANBAEoEQANAIAUgBCgCBCIITg0GIAEoAhAoAgQhCSABKAIEIgtBACABKAIIIgBBAEgbDQcgAiABKAIMTg0GIAAgA0cNBSAOIAVBA3QiB2pBASEAIAcgEWoiBysDACALIAIgCWxBA3RqIgkrAwCiIRZBACELAkACQAJAIA0OAgIBAAsDQCAWIAcgACAIbEEDdGorAwAgCSAAQQN0aisDAKKgIAcgAEEBaiIVIAhsQQN0aisDACAJIBVBA3RqKwMAoqAhFiAAQQJqIQAgC0ECaiILIBJHDQALCyATRQ0AIBYgByAAIAhsQQN0aisDACAJIABBA3RqKwMAoqAhFgsgFjkDACAFQQFqIgUgCkcNAAwDCwALIAQoAgRBAEwNBCABKAIEQQAgASgCCCIAQQBIGw0FIAIgASgCDE4NBCAAIANHDQMMDAsDQCAAIAQoAgRODQQgASgCBEEAIAEoAggiBUEASBsNBSACIAEoAgxODQQgBQ0DIA4gAEEDdGpCADcDACAAQQFqIgAgCkcNAAsLIAJBAWoiAiAPRw0ACwwDC0HdN0HuHEH0AEGPFRAAAAtBvjRBqx9B+gBB/RgQAAALDAcLDAELIAMgBHJBAEgNAwJAIAMgBGwiA0EATA0AIANBA3QiA0UNACAAKAIAQQAgA/wLAAsgBkKAgICAgICA+D83AyggBkEoaiEHIwBB8ABrIgMkAAJAAkAgACgCBCIEIAEoAgRHDQAgACgCCCIFIAIoAghHDQACQCAFRQ0AIARFDQAgASgCCCIIRQ0AIAVBAUYEQCADIAAoAgAiBTYCOCADIAQ2AjwgBEEASEEAIAUbDQkgAyAAKAIYNgJcIAMgACkCEDcCVCADIAD9AAIA/QsCRCADQgA3AmAgAyADKAJQKAIENgJoIAIoAgAhACADIAIoAgQiBDYCCCADIAA2AgQgAEEAIARBAEgbDQkgAyACKAIYNgIoIAMgAikCEDcCICADIAL9AAIA/QsCECADQgA3AiwgAyADKAIcKAIENgI0IANBOGogASADQQRqIAcQ0gMMAQsgBEEBRgRAIAMgACgCACIENgI4IAMgBTYCQCAFQQBIQQAgBBsNCSADIAAoAhg2AlwgAyAAKQIQNwJUIAMgAP0AAgD9CwJEIANBATYCaCADQgA3AmAgAyABKAIAIgA2AgQgAyAINgIMIAhBAEhBACAAGw0JIANBATYCHCADQgA3AhQgAyABNgIQIwBBgAFrIgQkAAJAAkACQCACKAIIQQFGBEAgBysDACEXIAMoAgQiBUEAIAMoAgwiAUEASBsNDSADKAIQIQcgAigCACIIQQAgAigCBCIAQQBIGw0NIAAgAUcNAgJAIAFFDQAgAUEATA0NIAUrAwAgCCsDAKIhFkEBIQAgAUEBRg0AIAcoAgQhByABQQFrIgJBAXEgAUECRwRAIAJBfnEhAUEAIQIDQCAWIAUgACAHbEEDdGorAwAgCCAAQQN0aisDAKKgIAUgAEEBaiIKIAdsQQN0aisDACAIIApBA3RqKwMAoqAhFiAAQQJqIQAgAkECaiICIAFHDQALC0UNACAWIAUgACAHbEEDdGorAwAgCCAAQQN0aisDAKKgIRYLIAMoAjgiACAXIBaiIAArAwCgOQMADAELIAQgAygCHDYCICAEIAMpAhQ3AxggBCAD/QACBP0LAwggBEFAayACKAIYNgIAIAQgAikCEDcDOCAEIAL9AAIA/QsDKCAEIAMoAmg2AnggBCAD/QACWP0LA2ggBCAD/QACSP0LA1ggBCAD/QACOP0LA0gjAEEQayIIJAACQAJAAkACQCAEKAIQIgVBgICAgAJJBEAgBysDACEWIAQoAhQhASAEKAIIIQcgBCgCNCEKIAQoAjAhDSAEKAIsIQ4gBCgCKCELIAVBA3QhACAFQYGAAU8EQCAAQRBqEBciAEUNBCAAQXBxIgIgADYCDCACQRBqIQIMAgsgCCAAQR5qQXBxayICJAAgBQ0BDAILDAILIAVBgIABSyEPIAEoAgQhCUEAIQECQCAFQQZJDQAgCUEBRw0AIAIgB2tBEEkNACAFQf7///8BcSEBQQAhAANAIAIgAEEDdCIMaiAHIAxq/QADAP0LAwAgAEECaiIAIAFHDQALIAEgBUYNAQsgBSABIgBrQQNxIgwEQANAIAIgAEEDdGogByAAIAlsQQN0aisDADkDACAAQQFqIQAgEEEBaiIQIAxHDQALCyABIAVrQXxLDQADQCACIABBA3RqIAcgACAJbEEDdGorAwA5AwAgAiAAQQFqIgFBA3RqIAcgASAJbEEDdGorAwA5AwAgAiAAQQJqIgFBA3RqIAcgASAJbEEDdGorAwA5AwAgAiAAQQNqIgFBA3RqIAcgASAJbEEDdGorAwA5AwAgAEEEaiIAIAVHDQALCyAIIAooAgQ2AgwgCCALNgIIIAhBATYCBCAIIAI2AgACQCAEKAJIIgAEQCAEKAJQQQBIDQELIA0gDiAIQQhqIAggACAEKAJgKAIEIBYQSCAPBEAgAkEEaygCABARCyAIQRBqJAAMAgsMDgtBBBAVIgBB+N8CNgIAIABB0N8CNgIAIABBnOACQQIQAQALCyAEQYABaiQADAELQbA5QfkaQdIAQewLEAAACwwBCyAHKwMAIRYgAyAINgJIIAMgBTYCRCADIAQ2AkAgA0IANwM4IANByABqIANBQGsgA0HEAGoQcCADIAMoAkgiBCADKAJAbDYCTCADIAQgAygCRGw2AlAgASgCBCIEIAIoAgggASgCCCABKAIAIAQgAigCACACKAIMKAIEIAAoAgAgACgCDCgCBCAWIANBOGoQhgEgAygCOCIABEAgAEEEaygCABARCyADKAI8IgBFDQAgAEEEaygCABARCyADQfAAaiQADAELQag3QYQaQdYDQb0VEAAACwsgBkHgAGokAA8LQao6QaAbQeIAQeoMEAAAC0HfxABBuCFBhgJBgCQQAAALQZ0xQZ8dQcoAQZ0VEAAAC0HmOUHbGUGbA0GGCRAAAAtBlDNBjSFBsgFByiQQAAALmy4DE38EfAF7IwBBQGoiESQAIAcrAwAhGyABKAIIIRkCQAJAAkACQAJAAkACQAJAAkAgAigCACIMQQAgAigCBCIKQQBIIgcbRQRAIAZBAEgNAiAGIAIoAghODQIgCiAFKAIERwRAIAcNCSAFIAogChAdIAUoAgQgCkcNCgsCQCAKQQBMDQAgDCAGIApsIgdBA3RqIQkgBSgCACENAkAgCkEKSQ0AIA0gB0EDdCAMamtBEEkNACAKQf7///8HcSEIQQAhBwNAIA0gB0EDdCIMaiAJIAxq/QADAP0LAwAgB0ECaiIHIAhHDQALIAggCkYNAQsgCiAIIgdrQQNxIhIEQANAIA0gB0EDdCIMaiAJIAxqKwMAOQMAIAdBAWohByAQQQFqIhAgEkcNAAsLIAggCmtBfEsNAANAIA0gB0EDdCIMaiAJIAxqKwMAOQMAIA0gDEEIaiIIaiAIIAlqKwMAOQMAIA0gDEEQaiIIaiAIIAlqKwMAOQMAIA0gDEEYaiIIaiAIIAlqKwMAOQMAIAdBBGoiByAKRw0ACwsgBUEIaiETAkAgAC0AMEEBRgRAIAAgBSAFQSBqIBMQlwIMAQsgACgCCCIHQQFGBEAgACgCACINQQBMDQEgBSgCCCEJIAUoAgAhFiAAKAIYIQsgACgCDCEOIAAoAiQhEkEAIQwDQEQAAAAAAAAAACEcAkAgEiAMQQJ0aiIHKAIEIgogBygCACIHTQ0AIAdBAWohCCAKIAdrQQFxBEAgDiAHQQN0aisDACAWIAsgB0ECdGooAgBBA3RqKwMAokQAAAAAAAAAAKAhHCAIIQcLIAggCkYNAANAIA4gB0EBaiIIQQN0aisDACAWIAsgCEECdGooAgBBA3RqKwMAoiAOIAdBA3RqKwMAIBYgCyAHQQJ0aigCAEEDdGorAwCiIBygoCEcIAdBAmoiByAKRw0ACwsgCSAMQQN0aiAcOQMAIAxBAWoiDCANRw0ACwwBCyARIAU2AiggESAFNgIYIBEgEzYCJCARIAA2AiAgESARKQMgNwMQIAcgEUEQahCWAgsgBUEQaiEXIAYEQCABIBMgBiAXEJ8BC0RjU7lTtBxVPSAbIBtEAAAAAAAAAABjGyEeAkACQAJAIAUoAgwiCgRAIApBAEwNB0EBIQkgEygCACIHKwMAIhsgG6IhHAJAIApBAUYNACAKQQFrIghBA3EhDCAKQQJrQQNPBEAgCEF8cSEIQQAhEANAIBwgByAJQQN0aiISKwMAIhsgG6KgIBIrAwgiGyAboqAgEisDECIbIBuioCASKwMYIhsgG6KgIRwgCUEEaiEJIBBBBGoiECAIRw0ACwsgDEUNAEEAIQgDQCAcIAcgCUEDdGorAwAiGyAboqAhHCAJQQFqIQkgCEEBaiIIIAxHDQALCyAcnyIcIB5jDQJBACEJIApBAUcEQCAKQf7///8HcSEJIBz9FCEfQQAhCANAIAcgCEEDdGoiDCAM/QADACAf/fMB/QsDACAIQQJqIgggCUcNAAsgCSAKRg0CCwNAIAcgCUEDdGoiCCAIKwMAIByjOQMAIAlBAWoiCSAKRw0ACwwBC0QAAAAAAAAAACEcIB5EAAAAAAAAAABkDQEgEygCACEHCyABKAIEIQggASgCACISRQ0BIAhBAE4NAQwDC0EIEBVBjAkQKkHE4gJBBBABAAsgBiABKAIITg0CIAggCkcNBAJAIApFDQAgEiAGIAhsIgxBA3RqIQ1BACEQQQAhCAJAIApBCkkNACAMQQN0IBJqIAdrQRBJDQAgCkF+cSEIQQAhCQNAIA0gCUEDdCIMaiAHIAxq/QADAP0LAwAgCUECaiIJIAhHDQALIAggCkYNAQsgCiAIIglrQQNxIhIEQANAIA0gCUEDdCIMaiAHIAxqKwMAOQMAIAlBAWohCSAQQQFqIhAgEkcNAAsLIAggCmtBfEsNAANAIA0gCUEDdCIMaiAHIAxqKwMAOQMAIA0gDEEIaiIIaiAHIAhqKwMAOQMAIA0gDEEQaiIIaiAHIAhqKwMAOQMAIA0gDEEYaiIIaiAHIAhqKwMAOQMAIAlBBGoiCSAKRw0ACwsgBiAZSARAIAVBIGohFiAFQSxqIRIgBiEMA0AgASgCACEHIBEgASgCBCIINgIkIBEgByAIIAwiDWxBA3RqNgIgIAdBACAIQQBIGw0DIBEgCDYCOCARQQA2AjAgESAMNgI0IBEgATYCLCAMIAEoAghODQRBACEMQQAhCiMAQSBrIhQkACARKAIgIQsCQCARKAIkIg8gEigCBEcEQCAPQQBIDQwgEiAPIA8QHSASKAIEIA9HDQ0LAkAgD0EATA0AIBIoAgAhDgJAIA9BBEkNACAOIAtrQRBJDQAgD0H+////B3EhDEEAIQcDQCAOIAdBA3QiCGogCCALav0AAwD9CwMAIAdBAmoiByAMRw0ACyAMIA9GDQELIA8gDCIHa0EDcSIJBEADQCAOIAdBA3QiCGogCCALaisDADkDACAHQQFqIQcgCkEBaiIKIAlHDQALCyAMIA9rQXxLDQADQCAOIAdBA3QiDGogCyAMaisDADkDACAOIAxBCGoiCGogCCALaisDADkDACAOIAxBEGoiCGogCCALaisDADkDACAOIAxBGGoiCGogCCALaisDADkDACAHQQRqIgcgD0cNAAsLAkAgAC0AMEEBRgRAIAAoAggiB0EBRgRAIAAoAgAiDkEATA0CIAUoAgAhCiASKAIAIRUgACgCGCEQIAAoAgwhDyAAKAIkIQlBACEMA0BEAAAAAAAAAAAhGwJAIAkgDEECdGoiBygCBCILIAcoAgAiB00NACAHQQFqIQggCyAHa0EBcQRAIA8gB0EDdGorAwAgFSAQIAdBAnRqKAIAQQN0aisDAKJEAAAAAAAAAACgIRsgCCEHCyAIIAtGDQADQCAPIAdBAWoiCEEDdGorAwAgFSAQIAhBAnRqKAIAQQN0aisDAKIgDyAHQQN0aisDACAVIBAgB0ECdGooAgBBA3RqKwMAoiAboKAhGyAHQQJqIgcgC0cNAAsLIAogDEEDdGogGzkDACAMQQFqIgwgDkcNAAsMAgsgFCASNgIYIBQgEjYCCCAUIAU2AhQgFCAANgIQIBQgFCkDEDcDACAHIBQQlgIMAQsgACASIBJBCGogBRCXAgsgFEEgaiQADAALIAIoAgAiCEEAIAIoAgQiC0EASCIHGw0DIA0gAigCCE4NBCAHDQcgBSgCBCALRw0IIAYgGmpBA3RBCGohGAJAIAtFDQAgCCALIA1sQQN0aiEKIAUoAgAhDkEAIQcCQCALQQRJDQAgCiAOIAtBA3RqSSAIIAsgGGxqIA5LcQ0AIAtB/v///wdxIQcgHP0UIR9BACEJA0AgDiAJQQN0IgxqIgggCP0AAwAgHyAKIAxq/QADAP3yAf3xAf0LAwAgCUECaiIJIAdHDQALIAcgC0YNAQsgB0EBciEIIAtBAXEEQCAOIAdBA3QiDGoiByAHKwMAIBwgCiAMaisDAKKhOQMAIAghBwsgCCALRg0AA0AgDiAHQQN0IgxqIgggCCsDACAcIAogDGorAwCioTkDACAOIAxBCGoiDGoiCCAIKwMAIBwgCiAMaisDAKKhOQMAIAdBAmoiByALRw0ACwsgAiAFIA1BAWoiDCAXEJ8BAkAgDCAZSARAAkACQCAFKAIEIgkEQCAJQQBMDQogBSgCACIPKwMAIhsgG6IhHQJAIAlBAUYiCg0AIAlBAWsiCEEDcSEOQQEhByAJQQJrQQNPBEAgCEF8cSEIQQAhEANAIB0gDyAHQQN0aiILKwMAIhsgG6KgIAsrAwgiGyAboqAgCysDECIbIBuioCALKwMYIhsgG6KgIR0gB0EEaiEHIBBBBGoiECAIRw0ACwtBACEIIA5FDQADQCAdIA8gB0EDdGorAwAiGyAboqAhHSAHQQFqIQcgCEEBaiIIIA5HDQALCyAdnyIdIB5jDQFBACEHIApFBEAgCUH+////B3EhByAd/RQhH0EAIQgDQCAPIAhBA3RqIgogCv0AAwAgH/3zAf0LAwAgCEECaiIIIAdHDQALIAcgCUYNAwsDQCAPIAdBA3RqIgggCCsDACAdozkDACAHQQFqIgcgCUcNAAsMAgtEAAAAAAAAAAAhHSAeRAAAAAAAAAAAZA0AQQAhCQwBCyAFIAQQ5QMgAiAFIAwgFxCfAUQAAAAAAAAAACEdIAUoAgQiCUUEQEEAIQkMAQsgCUEATA0IIAUoAgAiDysDACIbIBuiIRsCQCAJQQFGIgoNACAJQQFrIghBA3EhDkEBIQcgCUECa0EDTwRAIAhBfHEhCEEAIRADQCAbIA8gB0EDdGoiCysDACIbIBuioCALKwMIIhsgG6KgIAsrAxAiGyAboqAgCysDGCIbIBuioCEbIAdBBGohByAQQQRqIhAgCEcNAAsLQQAhCCAORQ0AA0AgGyAPIAdBA3RqKwMAIhsgG6KgIRsgB0EBaiEHIAhBAWoiCCAORw0ACwsgG58hG0EAIQcgCkUEQCAJQf7///8HcSEHIBv9FCEfQQAhCANAIA8gCEEDdGoiCiAK/QADACAf/fMB/QsDACAIQQJqIgggB0cNAAsgByAJRg0BCwNAIA8gB0EDdGoiCCAIKwMAIBujOQMAIAdBAWoiByAJRw0ACwsgAigCACIHQQAgAigCBCIKQQBIGw0FIAwgAigCCE4NBiAJIApHDQgCQCAJRQ0AIAcgCiAMbEEDdGohCyAFKAIAIQ9BACEQQQAhCAJAIAlBBEkNACAKIBhsIAdqIA9rQRBJDQAgCUH+////B3EhCEEAIQcDQCALIAdBA3QiCmogCiAPav0AAwD9CwMAIAdBAmoiByAIRw0ACyAIIAlGDQELIAkgCCIHa0EDcSIOBEADQCALIAdBA3QiCmogCiAPaisDADkDACAHQQFqIQcgEEEBaiIQIA5HDQALCyAIIAlrQXxLDQADQCALIAdBA3QiCmogCiAPaisDADkDACALIApBCGoiCGogCCAPaisDADkDACALIApBEGoiCGogCCAPaisDADkDACALIApBGGoiCGogCCAPaisDADkDACAHQQRqIgcgCUcNAAsLIA0gAygCBCIJTg0LIA0gAygCCCIITg0LIAMoAgAgDUEDdGoiByAJIA1sQQN0aiAcOQMAIAggDE0NCyAHIAkgDGxBA3RqIB05AwACQCAALQAwQQFGBEAgACAFIBYgExCXAgwBCyAAKAIIIgdBAUYEQCAAKAIAIgtBAEwNASAFKAIIIQ4gBSgCACEUIAAoAhghFSAAKAIMIRAgACgCJCEKQQAhCANARAAAAAAAAAAAIRwCQCAKIAhBAnRqIgcoAgQiDyAHKAIAIgdNDQAgB0EBaiEJIA8gB2tBAXEEQCAQIAdBA3RqKwMAIBQgFSAHQQJ0aigCAEEDdGorAwCiRAAAAAAAAAAAoCEcIAkhBwsgCSAPRg0AA0AgECAHQQFqIglBA3RqKwMAIBQgFSAJQQJ0aigCAEEDdGorAwCiIBAgB0EDdGorAwAgFCAVIAdBAnRqKAIAQQN0aisDAKIgHKCgIRwgB0ECaiIHIA9HDQALCyAOIAhBA3RqIBw5AwAgCEEBaiIIIAtHDQALDAELIBEgBTYCKCARIAU2AgggESATNgIkIBEgADYCICARIBEpAyA3AwAgByAREJYCCyABKAIAIghBACABKAIEIgtBAEgiBxsNBSANIAEoAghODQYgBw0JIAUoAgwgC0cNCgJAIAtFDQAgCCALIA1sQQN0aiEKIBMoAgAhDkEAIQcCQCALQQRJDQAgCiAOIAtBA3RqSSAIIAsgGGxqIA5LcQ0AIAtB/v///wdxIQcgHf0UIR9BACEJA0AgDiAJQQN0Ig1qIgggCP0AAwAgHyAKIA1q/QADAP3yAf3xAf0LAwAgCUECaiIJIAdHDQALIAcgC0YNAQsgB0EBciEIIAtBAXEEQCAOIAdBA3QiCWoiByAHKwMAIB0gCSAKaisDAKKhOQMAIAghBwsgCCALRg0AA0AgDiAHQQN0IglqIgggCCsDACAdIAkgCmorAwCioTkDACAOIAlBCGoiCWoiCCAIKwMAIB0gCSAKaisDAKKhOQMAIAdBAmoiByALRw0ACwsgASATIAwgFxCfAQJAAkAgBSgCDCIJBEAgCUEATA0KIBMoAgAiCysDACIbIBuiIRwCQCAJQQFGIg0NACAJQQFrIghBA3EhCkEBIQcgCUECa0EDTwRAIAhBfHEhCEEAIRADQCAcIAsgB0EDdGoiDisDACIbIBuioCAOKwMIIhsgG6KgIA4rAxAiGyAboqAgDisDGCIbIBuioCEcIAdBBGohByAQQQRqIhAgCEcNAAsLQQAhCCAKRQ0AA0AgHCALIAdBA3RqKwMAIhsgG6KgIRwgB0EBaiEHIAhBAWoiCCAKRw0ACwsgHJ8iHCAeYw0BQQAhByANRQRAIAlB/v///wdxIQcgHP0UIR9BACEIA0AgCyAIQQN0aiINIA39AAMAIB/98wH9CwMAIAhBAmoiCCAHRw0ACyAHIAlGDQMLA0AgCyAHQQN0aiIIIAgrAwAgHKM5AwAgB0EBaiIHIAlHDQALDAILRAAAAAAAAAAAIRwgHkQAAAAAAAAAAGQNAEEAIQkMAQsgEyAEEOUDIAEgEyAMIBcQnwFEAAAAAAAAAAAhHCAFKAIMIglFBEBBACEJDAELIAlBAEwNCCATKAIAIgsrAwAiGyAboiEdAkAgCUEBRiINDQAgCUEBayIIQQNxIQpBASEHIAlBAmtBA08EQCAIQXxxIQhBACEQA0AgHSALIAdBA3RqIg4rAwAiGyAboqAgDisDCCIbIBuioCAOKwMQIhsgG6KgIA4rAxgiGyAboqAhHSAHQQRqIQcgEEEEaiIQIAhHDQALC0EAIQggCkUNAANAIB0gCyAHQQN0aisDACIbIBuioCEdIAdBAWohByAIQQFqIgggCkcNAAsLIB2fIRtBACEHIA1FBEAgCUH+////B3EhByAb/RQhH0EAIQgDQCALIAhBA3RqIg0gDf0AAwAgH/3zAf0LAwAgCEECaiIIIAdHDQALIAcgCUYNAQsDQCALIAdBA3RqIgggCCsDACAbozkDACAHQQFqIgcgCUcNAAsLIAEoAgAiB0EAIAEoAgQiDUEASBsNBSAMIAEoAghODQYgCSANRw0IIAlFDQEgByAMIA1sQQN0aiEOIBMoAgAhC0EAIRBBACEIAkAgCUEESQ0AIA0gGGwgB2ogC2tBEEkNACAJQf7///8HcSEIQQAhBwNAIA4gB0EDdCINaiALIA1q/QADAP0LAwAgB0ECaiIHIAhHDQALIAggCUYNAgsgCSAIIgdrQQNxIgoEQANAIA4gB0EDdCINaiALIA1qKwMAOQMAIAdBAWohByAQQQFqIhAgCkcNAAsLIAggCWtBfEsNAQNAIA4gB0EDdCINaiALIA1qKwMAOQMAIA4gDUEIaiIIaiAIIAtqKwMAOQMAIA4gDUEQaiIIaiAIIAtqKwMAOQMAIA4gDUEYaiIIaiAIIAtqKwMAOQMAIAdBBGoiByAJRw0ACwwBCyANIAMoAgQiB04NCiANIAMoAghODQogAygCACANQQN0aiAHIA1sQQN0aiAcOQMACyAaQQFqIRogDCAZRw0ACwsgEUFAayQADwsMAAtBlDNBjSFBsgFByiQQAAALQb40QasfQfoAQf0YEAAAC0HmOUHbGUGbA0GGCRAAAAtB38QAQbghQYYCQYAkEAAAC0GdMUGfHUHKAEGdFRAAAAtBljhBgBxB8gVBlCUQAAALQcs4QdogQe8CQYA5EAAAC0H9wABBpyBBlQJBgCQQAAALQaAPQYAcQf0FQZQlEAAAC8QCAwN/AXwBeyMAQSBrIgMkAAJAAkAgASACckEATgRAAkAgAUUNACACRQ0AIAFB/////wcgAm1KDQILIAAgASACbCABIAIQGyAAKAIEIQEgACgCCCECIANCADcDECADIAI2AgwgAyABNgIIIAEgAnJBAEgNAiAAIANBCGoQLwJAIAAoAgggACgCBGwiBEEATA0AIAMrAxAhBiAAKAIAIQACQCAEQQFGBEAgACECDAELIAAgBEH+////B3EiBUEDdGohAiAG/RQhB0EAIQEDQCAAIAFBA3RqIAf9CwMAIAFBAmoiASAFRw0ACyAEIAVGDQELIAIgBjkDAAsgA0EgaiQADwtB/cAAQacgQZUCQYAkEAAAC0EEEBUiAEH43wI2AgAgAEHQ3wI2AgAgAEGc4AJBAhABAAtBnTFBnx1BygBBnRUQAAALvAcBAn8CQAJAAkACQAJAIAEgAnJBAE4EQAJAAkAgAC0AJUEBRw0AIAEgACgCNEcNACACIAAoAjhHDQAgAyAAKAIsRg0BCyAAIAI2AjggACABNgI0IAAgAzYCLCAAQYACOwEkIABBADYCICAAIANBBXZBAXE6ACogACADQQR2QQFxOgApIAAgA0EDdkEBcToAKCAAIANBAnZBAXE6ACcgA0EMcUEMRg0CIANBMHFBMEYNAyAAIAIgASABIAJKGyIDNgI8IANBAEgNBiAAQRhqIAMgAxAdIAAoAjQiAyAAKAI8QQAgAC0AKBsgAC0AJxsiBCADckEASA0EAkAgA0UNACAERQ0AIANB/////wcgBG1KDQYLIAAgAyAEbCADIAQQGyAAKAI4IgMgACgCPEEAIAAtACobIAAtACkbIgQgA3JBAEgNBAJAIANFDQAgBEUNACADQf////8HIARtSg0GCyAAQQxqIAMgBGwgAyAEEBsgACgCPCIDQQBIDQQgAwRAIANB/////wcgA25LDQYLIABByABqIAMgA2wgAyADEBsgACgCOCIDIAAoAjQiBEoEQAJAIAMgAEHYAGoiBSgCBEYEQCAFKAIIIARGDQELIAUQ1QEgACgCOCAAKAI0EN4DCwJAIAAtAClBAUYEQCAAKAI4IgNBAEgNCSAFQeQAaiADIAMQHQwBCyAALQAqQQFHDQAgACgCNCIDQQBIDQggBUHkAGogAyADEB0LIAAoAjQiAyAAKAI4IgRyQQBIDQUCQAJAIARFDQAgA0UNACAEQf////8HIANtSg0ICyAFQdgAaiADIARsIAQgAxAbDAALIAAoAjQhBCAAKAI4IQMLIAMgBEgEfwJAIAAoAjQgAEHIAWoiAygCBEYEQCAAKAI4IAMoAghGDQELIAMQ1QEgACgCNCAAKAI4EN4DCwJAIAAtACdBAUYEQCAAKAI0IgRBAEgNCSADQdgAaiAEIAQQHQwBCyAALQAoQQFGBEAgACgCOCIEQQBIDQkgA0HYAGogBCAEEB0LCyAAKAI0IQQgACgCOAUgAwsgBEYNAAJAIAFFDQAgAkUNACABQf////8HIAJtSg0GCyAAQagCaiABIAJsIAEgAhAbCw8LQeEtQYIjQekEQbskEAAAC0GIP0GCI0H9BEG7JBAAAAtB1D1BgiNB/gRBuyQQAAALQf3AAEGnIEGVAkGAJBAAAAtBBBAVIgBB+N8CNgIAIABB0N8CNgIAIABBnOACQQIQAQALQdcsQacgQbACQYAkEAAAC50JAgZ/A30CQAJAAkACQAJAAkACQCABIABrQQN1DgYFBQABAgMECyABQQRrIgMqAgAiCCAAKgIEIgldIAFBCGsiBCgCACIBIAAoAgAiAkggASACRhtBAUcNBCAAIAE2AgAgBCACNgIAIAAgCDgCBCADIAk4AgBBAQ8LIAFBBGsiAyoCACIKIAAqAgwiCV0gAUEIayIEKAIAIgUgACgCCCICSCACIAVGGyEGIAkgACoCBCIIXSACIAAoAgAiAUggASACRhtFBEAgBkUNBCAAIAU2AgggBCACNgIAIAAgCjgCDCADIAk4AgAgACoCDCIIIAAqAgQiCV0gACgCCCIBIAAoAgAiBUggASAFRhtBAUcNBAwFCyAGBEAgACAFNgIAIAQgATYCACAAIAo4AgQgAyAIOAIAQQEPCyAAIAE2AgggACACNgIAIAAgCDgCDCAAIAk4AgQgAyoCACIJIAhdIAQoAgAiAiABSCABIAJGG0EBRw0DIAAgAjYCCCAEIAE2AgAgACAJOAIMIAMgCDgCAEEBDwsgACAAQQhqIABBEGogAUEIaxDXAUEBDwsgACAAQQhqIABBEGogAEEYahDXASABQQRrIgMqAgAiCCAAKgIcIgldIAFBCGsiBCgCACIBIAAoAhgiAkggASACRhtBAUcNASAAIAE2AhggBCACNgIAIAAgCDgCHCADIAk4AgAgACoCHCIIIAAqAhQiCV0gACgCGCIBIAAoAhAiAkggASACRhtBAUcNASAAIAI2AhggACABNgIQIAAgCTgCHCAAIAg4AhQgCCAAKgIMIgldIAEgACgCCCICSCABIAJGG0EBRw0BIAAgAjYCECAAIAE2AgggACAJOAIUIAAgCDgCDCAIIAAqAgQiCV0gASAAKAIAIgVIIAEgBUYbQQFHDQEMAgsgACoCFCIIIAAqAgwiCl0gACgCECICIAAoAggiBEggAiAERhshBQJAIAogACoCBCIJXSAEIAAoAgAiA0ggAyAERhtFBEAgBUUNASAAIAQ2AhAgACACNgIIIAAgCjgCFCAAIAg4AgwgCCAJXSACIANIIAIgA0YbQQFHDQEgACADNgIIIAAgAjYCACAAIAk4AgwgACAIOAIEDAELIAUEQCAAIAM2AhAgACACNgIAIAAgCTgCFCAAIAg4AgQMAQsgACADNgIIIAAgBDYCACAAIAk4AgwgACAKOAIEIAggCV0gAiADSCACIANGG0EBRw0AIAAgAzYCECAAIAI2AgggACAJOAIUIAAgCDgCDAsgAEEYaiIEIAFGDQAgAEEQaiEDA0ACQCAEIgIqAgQiCCADKgIEXSACKAIAIgYgAygCACIFSCAFIAZGG0EBRw0AA0ACQCACIAU2AgAgAiADIgIqAgQ4AgQgACACRgRAIAAhAgwBCyAIIAJBBGsqAgBdIAYgAkEIayIDKAIAIgVIIAUgBkYbDQELCyACIAg4AgQgAiAGNgIAIAdBAWoiB0EIRw0AIARBCGogAUYPCyAEIgNBCGoiAiEEIAEgAkcNAAsLQQEPCyAAIAU2AgggACABNgIAIAAgCTgCDCAAIAg4AgRBAQvrCwILfwx9AkAgASABIAJqIgtPDQADQAJAIAAoAgAoAgAgAUEMbGoiBygCBCIEIAcoAgAiBUYNACAEIAVrIgpBA3UhBkEAIQIgBSEDA0AgAyoCBEMAAAAAWwRAIAJBAWohAiADQQhqIgMgBEcNAQsLIAAoAgQoAgAgAmoiAyAGTgRAIAZBAEwNAUEAIQRBACEDIAZBCE8EQCAGQfj///8HcSEKQQAhBwNAIAUgA0EDdGoiAkGAgID8AzYCBCACQYCAgPwDNgIMIAJBgICA/AM2AhQgAkGAgID8AzYCHCACQYCAgPwDNgIkIAJBgICA/AM2AiwgAkGAgID8AzYCNCACQYCAgPwDNgI8IANBCGohAyAHQQhqIgcgCkcNAAsLIAZBB3EiAkUNAQNAIAUgA0EDdGpBgICA/AM2AgQgA0EBaiEDIARBAWoiBCACRw0ACwwBCyADQQBMBH1DAAAAAAUgBSADQQN0akEEayoCAAshDgJAIAIgBkgEQCAAKAIIKgIAIAUgA0EDdGoqAgQgDpOUIA6SIREgArMhFCAIIQMCQAJAA0ACQAJAIBEgBygCACACQQN0aioCBCIOXQRAIA4gEZMhDiADIAlJBEAgAyAOOAIAIANBBGohAwwCCyADIAhrIgNBAnUiDEEBaiIFQYCAgIAETw0CIANB/////wMgCSAIayIEQQF1IgkgBSAFIAlJGyAEQfz///8HTxsiBAR/IARBgICAgARPDQUgBEECdBASBUEACyINaiIJIA44AgAgCSAMQQJ0ayEFIAMEQCAFIAggA/wKAAALIAlBBGohAyANIARBAnRqIQkgCEUEQCAFIQgMAgsgCBARIAUhCAwBCyAUQwAAgD+SIRQLIAYgAkEBaiICRw0BDAMLCxAUAAsQJAALIAMgCEcNAQsgBkEATA0BIAcoAgAhBUEAIQRBACEDIAZBCE8EQCAGQfj///8HcSEKQQAhBwNAIAUgA0EDdGoiAkGAgID8AzYCBCACQYCAgPwDNgIMIAJBgICA/AM2AhQgAkGAgID8AzYCHCACQYCAgPwDNgIkIAJBgICA/AM2AiwgAkGAgID8AzYCNCACQYCAgPwDNgI8IANBCGohAyAHQQhqIgcgCkcNAAsLIAZBB3EiAkUNAQNAIAUgA0EDdGpBgICA/AM2AgQgA0EBaiEDIARBAWoiBCACRw0ACwwBCyADQQRrKgIAIQ4gACgCDCIFKgIEIQ8gBkEBarcQxwMgD7uitiEXQQAhBEP//39/IRJDAAAAACEPA0AgEiEVIA8hFkMAAIA/IA4iEJUiEiASlCETIBQhD0MAAAAAIQ4gCCECA0AgDyASIAIqAgAiGIyUEMwBIhmSIQ8gGCAZlCATlCAOkiEOIAJBBGoiAiADRw0ACwJAIA8gF5MiE4tDrMUnN10EQCAQIQ4MAQsgFiAQIBNDAAAAAF4iAhshDyAQIBUgAhshEgJAAkAgDkMAAAAAWw0AIBAgEyAOlZMiDiAPXkUNACAOIBJdDQELIAIEQCAQIBYgEJNDAAAAP5SSIQ4MAQsgFUP//39/WwRAIBAgEJIhDgwBCyAQIBUgEJNDAAAAP5SSIQ4LIARBAWoiBEHAAEcNAQsLQwAAAAAhDyAHKAIAIgMhAiAHKAIEIgQgA0cEQANAIA8gAioCBJIhDyACQQhqIgIgBEcNAAsLIAZBAEwNAEMAAIA/IA4gDyAGspUgBSoCCJQiDyAOIA9eG5UhEEEAIQIgCkEIRwRAIAZB/v///wdxIQZBACEEA0BDAACAPyEPIBEgAyACQQN0aiIFKgIEIg5dBEAgECAOIBGTjJQQzAEhDwsgBSAPOAIEIAUgESAFKgIMIg5dBH0gECAOIBGTjJQQzAEFQwAAgD8LOAIMIAJBAmohAiAEQQJqIgQgBkcNAAsLIApBCHFFDQBDAACAPyEOIBEgAyACQQN0aiICKgIEIg9dBEAgECAPIBGTjJQQzAEhDgsgAiAOOAIECyABQQFqIgEgC0cNAAsgCEUNACAIEBELC5gFAQ5/IwBBIGsiAyQAIAAoAgAiByAHKAIAKAIQEQAAIQcgA0EANgIcIANCADcCFCADQQA2AhAgA0IANwIIAkACQCACQQBMDQAgASACaiEOA0AgByABIAAoAgQoAgAgA0EUaiADQQhqIAcoAgAoAggRCQACQCADKAIYIAMoAhRrIgZBAnUiCyABQQxsIg8gACgCCCgCAGoiAigCCCACKAIAIgRrQQN1TQ0AIAtBgICAgAJPDQMgAigCBCAGQQF0EBIhBiAEayIFBEAgBiAEIAX8CgAACyACIAYgC0EDdGo2AgggAiAFIAZqNgIEIAIgBjYCACAERQ0AIAQQEQtBACEGAkAgC0EATA0AA0ACQCAGQQJ0IgIgAygCCGohCiADKAIUIAJqIQ0CQCAAKAIIKAIAIA9qIgIoAgQiBCACKAIIIghJBEAgBCANKAIANgIAIAQgCioCADgCBCAEQQhqIQUMAQsgBCACKAIAIgRrIgVBA3UiEEEBaiIJQYCAgIACTw0GQf////8BIAggBGsiCEECdSIMIAkgCSAMSRsgCEH4////B08bIgkEfyAJQYCAgIACTw0CIAlBA3QQEgVBAAsiDCAFaiIIIA0oAgA2AgAgCCAKKgIAOAIEIAggEEEDdGshCiAFBEAgCiAEIAX8CgAACyACIAwgCUEDdGo2AgggAiAIQQhqIgU2AgQgAiAKNgIAIARFDQAgBBARCyACIAU2AgQgCyAGQQFqIgZHDQEMAgsLECQACyABQQFqIgEgDkgNAAsgAygCCCIARQ0AIAMgADYCDCADKAIQGiAAEBELIAMoAhQiAARAIAMgADYCGCADKAIcGiAAEBELIAcEQCAHIAcoAgAoAgQRAQALIANBIGokAA8LEBQACykAIAEoAgAhAUEMEBIiACABNgIIIAAgAUECdDYCBCAAQZTiADYCACAAC7cDAgZ/An0CQAJAAkAgACgCBCIDIAAoAggiBEkEQCADIAEqAgA4AgAgAyACKAIANgIEIANBCGohAgwBCyADIAAoAgAiA2siBkEDdSIIQQFqIgVBgICAgAJPDQEgBkH/////ASAEIANrIgRBAnUiByAFIAUgB0kbIARB+P///wdPGyIFBH8gBUGAgICAAk8NAyAFQQN0EBIFQQALIgdqIgQgASoCADgCACAEIAIoAgA2AgQgBCAIQQN0ayEBIAYEQCABIAMgBvwKAAALIAAgByAFQQN0ajYCCCAAIARBCGoiAjYCBCAAIAE2AgAgA0UNACADEBELIAAgAjYCBAJAIAIgACgCACIFa0EDdSIAQQJIDQAgBSAAQQJrQQF2IgZBA3RqIgAqAgAiCSACQQhrIgMqAgAiCl0gACgCBCIBIAJBBGsoAgAiBEggCSAKXBtBAUcNAANAAkAgACECIAMgATYCBCADIAk4AgAgBkUNACAAIQMgBSAGQQFrQQF2IgZBA3RqIgAqAgAiCSAKXSAAKAIEIgEgBEggCSAKXBsNAQsLIAIgBDYCBCACIAo4AgALDwsQFAALECQAC9oCAQR/IAAoAgwiAyAAKAIIIgRrQQN1IQUCQAJAIAEEQCABIAEoAgA2AgQgAyAERg0BIAEgBRAsCyACRQ0BIAIgAigCADYCBCADIARGDQEgAiAFECwMAQsgAkUNACACIAIoAgA2AgQLAkAgACgCCCIDIAAoAgwiBEYNACABRQRAA0AgBUEBayEFIAIEQCACKAIAIAVBAnRqIAMqAgA4AgALIAMgBBBLIAAgACgCDEEIayIENgIMIAAoAggiAyAERw0ADAILAAsgAkUEQANAIAEoAgAgBUEBayIFQQJ0aiADKAIENgIAIAMgBBBLIAAgACgCDEEIayIENgIMIAAoAggiAyAERw0ADAILAAsDQCAFQQFrIgVBAnQiBiABKAIAaiADKAIENgIAIAIoAgAgBmogAyoCADgCACADIAQQSyAAIAAoAgxBCGsiBDYCDCAAKAIIIgMgBEcNAAsLC9kJAwh/AXsBfSAAKAIMIAAoAghrQQN1QQFrIQQCQAJAAkACQAJAAkAgAUUNACABIAEoAgAiBjYCBCAEIAEoAgggBmtBAnVNDQAgBEGAgICABE8NASABIARBAnQiBRASIgc2AgQgASAHNgIAIAEgBSAHajYCCCAGRQ0AIAYQEQsCQCACRQ0AIAIgAigCACIGNgIEIAQgAigCCCAGa0ECdU0NACAEQYCAgIAETw0CIAIgBEECdCIHEBIiBDYCBCACIAQ2AgAgAiAEIAdqNgIIIAZFDQAgBhARC0EAIQYCQCAAKAIIIgQgACgCDCIFRg0AIAFFBEADQAJAAkAgBkEBcUUEQCAEKAIEIANGIgcEQCAHIQYMAwsgAg0BIAchBgwCCyACDQBBASEGDAELIAIgBBCLASAAKAIMIQUgACgCCCEECyAEIAUQSyAAIAAoAgxBCGsiBTYCDCAAKAIIIgQgBUcNAAwCCwALIAJFBEADQAJAAkAgBkEBcQ0AIAQoAgQgA0cNAEEBIQYMAQsgASAEQQRqEKoBIAAoAgwhBSAAKAIIIQQLIAQgBRBLIAAgACgCDEEIayIFNgIMIAAoAggiBCAFRw0ADAILAAsDQAJAAkAgBkEBcQ0AIAQoAgQgA0cNAEEBIQYMAQsgASAEQQRqEKoBIAIgBBCLASAAKAIMIQUgACgCCCEECyAEIAUQSyAAIAAoAgxBCGsiBTYCDCAAKAIIIgQgBUcNAAsLIAFFDQQgASgCACIDIAEoAgQiAEYNBCADIABBBGsiB08NBCAAQQhrIgUgA0EEaiIEIAQgBUkbQQRrIgUgAyADIAVHIgVya0EDdiAFaiIFQRdJDQIgACADSwRAIAAgBUECdCIAa0EEayAAIARqSQ0DCyADIAVBAWoiCkH8////B3EiCUECdCIAaiEEIAcgAGshAEEAIQUDQCADIAVBAnQiCGoiC/0AAgAhDCALIAcgCGtBDGsiCP0AAgAgDP0NDA0ODwgJCgsEBQYHAAECA/0LAgAgCCAMIAz9DQwNDg8ICQoLBAUGBwABAgP9CwIAIAVBBGoiBSAJRw0ACyAJIApGDQQMAwsQFAALEBQACyAHIQAgAyEECwNAIAQoAgAhAyAEIAAoAgA2AgAgACADNgIAIARBBGoiBCAAQQRrIgBJDQALCwJAIAJFDQAgAigCACIDIAIoAgQiAEYNACADIABBBGsiB08NAAJAAkAgAEEIayIFIANBBGoiBCAEIAVJG0EEayIFIAMgAyAFRyIFcmtBA3YgBWoiBUEXSQ0AIAAgA0sEQCAAIAVBAnQiAGtBBGsgACAEakkNAQsgAyAFQQFqIgpB/P///wdxIglBAnQiAGohBCAHIABrIQBBACEFA0AgAyAFQQJ0IghqIgv9AAIAIQwgCyAHIAhrQQxrIgj9AAIAIAz9DQwNDg8ICQoLBAUGBwABAgP9CwIAIAggDCAM/Q0MDQ4PCAkKCwQFBgcAAQID/QsCACAFQQRqIgUgCUcNAAsgCSAKRg0CDAELIAchACADIQQLA0AgBCoCACENIAQgACoCADgCACAAIA04AgAgBEEEaiIEIABBBGsiAEkNAAsLAkAgBkEBcQ0AIAEEQCABIAEoAgRBBGs2AgQLIAJFDQAgAiACKAIEQQRrNgIECwtEAQF/QSwQEiIBQQA2AiggAUIANwIgIAFBADYCGCABQgA3AhAgAUEAOgAMIAFBATYCCCABIAA2AgQgAUH03AA2AgAgAQtiAQF/IABBjNwANgIAIAAoAigiAQRAIAAgATYCLCAAKAIwGiABEBELIAAoAhwiAQRAIAAgATYCICAAKAIkGiABEBELIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABEBELIAAQEQtgAQF/IABBjNwANgIAIAAoAigiAQRAIAAgATYCLCAAKAIwGiABEBELIAAoAhwiAQRAIAAgATYCICAAKAIkGiABEBELIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABEBELIAALjQEBAn8jAEEgayIFJAAgACgCCCEGIAUgATYCHCAFQQA2AhggBUIANwIQIAUgBjYCDCAFQQE2AgggACgCBEEBIAVBCGogAkPNzMw9EKACIAJBf0EAIAAoAgQiAEG4A2ogAEHQA2ogAyAEEKECIAUoAhAiAARAIAUgADYCFCAFKAIYGiAAEBELIAVBIGokAAsgACACIAEgASAAKAIEIgBBiANqIABBoANqIAMgBBChAgsRACAAQQAgASgCBEHh2QBGGwvWBAEEfyAAKAIMIgEEQCMAQRBrIgIkACABKALYAyIABEAgASAANgLcAyABKALgAxogABARCyABKALAAyIABEAgASAANgLEAyABKALIAxogABARCyABKAKoAyIABEAgASAANgKsAyABKAKwAxogABARCyABKAKQAyIABEAgASAANgKUAyABKAKYAxogABARCyABKAL4AiIABEAgASAANgL8AiABKAKAAxogABARCyABKALgAiIABEAgASAANgLkAiABKALoAhogABARCyABKALIAiIABEAgASAANgLMAiABKALQAhogABARCyABLAC3AkEASARAIAEoArQCGiABKAKsAhARCyABLAD3AUEASARAIAEoAvQBGiABKALsARARCyABKALYASIABEAgASAANgLcASABKALgARogABARCyABKALAASIABEAgASAANgLEASABKALIARogABARCyABKAKoASIABEAgASAANgKsASABKAKwARogABARCyACIAFBjAFqNgIIIAJBCGoQUSABKAJ4IgAEQCAAIQMgASgCfCIEIABHBEADQCACIARBDGs2AgwgAkEMahBRIAAgBEEUayIERw0ACyABKAJ4IQMLIAEgADYCfCABKAKAARogAxARCyABKAI4IgAEQCABIAA2AjwgASgCQBogABARCyABKAIsIgAEQCABIAA2AjAgASgCNBogABARCyABKAIgIgAEQCABIAA2AiQgASgCKBogABARCyABKAIIIgAEQCABIAA2AgwgASgCEBogABARCyACQRBqJAAgARARCwsRACAAQQAgASgCBEHh1wBGGwstAQF/IAAoAgwiAARAIAAoAggiAQRAIAAgATYCDCAAKAIQGiABEBELIAAQEQsLDAAgABCiAhogABARCysBAn8gACgCECECQQwQEiIBIAAoAgQ2AgggASACNgIEIAFBvNoANgIAIAELBQBBmhkLBQBB9icLBQBB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KAIEIQcCQCAFBEAgBigCDCEBIwBBQGoiAyQAIANBQGskAEEAIAcgARshAwwBCyADIQUjAEFAaiIDJAAgASAHTgRAIANCADcCHCADQgA3AiQgA0IANwIsIANCADcCFCADQQA2AhAgA0G43QI2AgwgAyAFNgIEIANBADYCPCADQoGAgICAgICAATcCNCADIAE2AgggBSADQQRqIAcgB0EBQQAgBSgCACgCFBENACABQQAgAygCHBshCAsgA0FAayQAIAgiAw0AIwBBQGoiAyQAIANBADYCECADQYjdAjYCDCADIAE2AgggA0G43QI2AgRBACEBIANBFGpBAEEn/AsAIANBADYCPCADQQE6ADsgBSADQQRqIAdBAUEAIAUoAgAoAhgRCQACQAJAAkAgAygCKA4CAAECCyADKAIYQQAgAygCJEEBRhtBACADKAIgQQFGG0EAIAMoAixBAUYbIQEMAQsgAygCHEEBRwRAIAMoAiwNASADKAIgQQFHDQEgAygCJEEBRw0BCyADKAIUIQELIANBQGskACABIQMLIAZBEGokAEEAIANFDQAaIAIoAgAiAUUNASAEQRhqQQBBOPwLACAEQQE6AEsgBEF/NgIgIAQgADYCHCAEIAM2AhQgBEEBNgJEIAMgBEEUaiABQQEgAygCACgCHBEGACAEKAIsIgBBAUYEQCACIAQoAiQ2AgALIABBAUYLIARB0ABqJAAPCyAEQZEqNgIIIARB5wM2AgQgBEGpFDYCABAjAAtxAQJ/IABB6NUANgIAAkAgACgCHCIBRQ0AIAEgASgCBCICQQFrNgIEIAINACABIAEoAgAoAggRAQAgARBfCwJAIAAoAhQiAUUNACABIAEoAgQiAkEBazYCBCACDQAgASABKAIAKAIIEQEAIAEQXwsgAAsRACAABEAgABCJARoLIAAQEQsQAEEgEBIgASAAQQRqEJ0CCz8AIABBnNUANgIAIAAsAE9BAEgEQCAAKAJMGiAAKAJEEBELIAAsAA9BAEgEQCAAKAIMGiAAKAIEEBELIAAQEQsDAAALCQBB3JADEBMaCyQAQeiQAy0AAEUEQEHckANBmK0CEHNB6JADQQE6AAALQdyQAwsJAEHMkAMQExoLJABB2JADLQAARQRAQcyQA0GsFRCXAUHYkANBAToAAAtBzJADCwkAQbyQAxATGgskAEHIkAMt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IgEkACAAQQhqIgIoAgAgAEEMaiIDKAIASSEEIAFBEGokACACIAMgBBsoAgAgAEEQaiQACzgAA0AgASACRwRAIAQgASwAAEGAAUkEfyABLQAABSADCzoAACAEQQFqIQQgAUEBaiEBDAELCyABCw0AIAEgAiABQYABSRsLRQEBfyAAQaDUADYCACAAKAIYIgEEQCAAIAE2AhwgACgCIBogARARCyAAKAIIIgEEQCAAIAE2AgwgACgCEBogARARCyAACyoAA0AgASACRkUEQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohAQwBCwsgAQtFAANAIAEgAkcEQCABAn8gASwAACIAQYABSQRAQeCQAigCACAAQQJ0aigCAAwBCyABLQAACzoAACABQQFqIQEMAQsLIAELHwAgAUGAAUkEf0HgkAIoAgAgAUECdGooAgAFIAELwAtFAANAIAEgAkcEQCABAn8gASwAACIAQYABSQRAQdiEAigCACAAQQJ0aigCAAwBCyABLQAACzoAACABQQFqIQEMAQsLIAELIwAgAUGAAUkEf0HYhAIoAgAgAUH/AXFBAnRqKAIABSABC8ALCQAgABDDAhARCzcAA0AgASACRwRAIAQgASgCACIAQYABSQR/IAAFIAMLOgAAIARBAWohBCABQQRqIQEMAQsLIAELDgAgASACIAFBgAFJG8ALKgADQCABIAJGRQRAIAMgASwAADYCACADQQRqIQMgAUEBaiEBDAELCyABC0AAA0AgASACRwRAIAEiACABKAIAIgFBgAFJBH9B4JACKAIAIAFBAnRqBSAACygCADYCACAAQQRqIQEMAQsLIAELHgAgAUGAAUkEf0HgkAIoAgAgAUECdGooAgAFIAELC0AAA0AgASACRwRAIAEiACABKAIAIgFBgAFJBH9B2IQCKAIAIAFBAnRqBSAACygCADYCACAAQQRqIQEMAQsLIAELHgAgAUGAAUkEf0HYhAIoAgAgAUECdGooAgAFIAELCzoAA0ACQCACIANGDQAgAigCACIAQYABTw0AIABBAnRB0KICaigCACABcUUNACACQQRqIQIMAQsLIAILOgADQAJAIAIgA0YNACACKAIAIgBBgAFJBEAgAEECdEHQogJqKAIAIAFxDQELIAJBBGohAgwBCwsgAgtCAANAIAEgAkcEQCADIAEoAgAiAEGA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aiIBEFggASQAC/AHAQR/IwBBIGsiAyQAAkAgARBEIgVB+P///wdPDQACQAJAIAVBC08EQCAFQQdyIgZBAWoQEiEEIAMgBkH/////B2s2AhwgAyAENgIUIAMgBTYCGAwBCyADIAU6AB8gA0EUaiEEIAVFDQELIAVFDQAgBCABIAX8CgAACyAEIAVqQQA6AAAgAhBEIgFB+P///wdPDQACQAJAIAFBC08EQCABQQdyIgVBAWoQEiEEIAMgBUH/////B2s2AhAgAyAENgIIIAMgATYCDAwBCyADIAE6ABMgA0EIaiEEIAFFDQELIAFFDQAgBCACIAH8CgAACyABIARqQQA6AAACQAJAAkACQAJAIAMoAhgiBSADLAAfIgEgAUEASCICG0EGaw4FAAICAgECCyADKAIUIANBFGogAhsiAigAAEHtytGTB3MgAi8ABEHpxgFzcg0BQX8hBAJAAkAgAygCDCADLAATIgIgAkEASCICG0EGaw4EAQUFAAULIAMoAgggA0EIaiACGyICKQAAQuXqjeOWjdmy4QCFIAIxAAhC7gCFhEIAUg0EQQAhBCAAQQA2AgQMBAsgAygCCCADQQhqIAIbIgIoAABB497NywZzIAIvAARB7soBc3INAyAAQQE2AgQMAgsgAygCFCADQRRqIAIbIgIpAABC69y5+9WtmbroAIUgAjMACELvyAGFhEIAUg0AQX8hBAJAAkACQCADKAIMIAMsABMiAiACQQBIIgIbQQRrDgYABQIFBQEFCyADKAIIIANBCGogAhsoAABB6NzNuwdHDQQgAEECNgIADAMLIAMoAgggA0EIaiACGyICKQAAQu7ckau27tiy7gCFIAIxAAhC9ACFhEIAUg0DIABBAzYCAAwCCyADKAIIIANBCGogAhsiAigAAEH24NGTB3MgAi8ABEHlygFzcg0CQQAhBCAAQQA2AgAMAgtBfyEEIAFBAE4NASAFQRFHDQEgAygCFCICKQAAQuncpaOXrZi26QCFIAIpAAhC+sr96taMnbTvAIWEIAIxABBC5ACFhEIAUg0BAkACQAJAIAMoAgwgAywAEyICIAJBAEgiAhtBBGsOBQIEAQQABAsgAygCCCADQQhqIAIbKQAAQvPglZvGztyw7ABSDQNBACEEIABBADoASAwDCyADKAIIIANBCGogAhsiAigAAEHywrmjBnMg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AsQCIABBxAFqIABBEGogAEEMaiAHEHYNACAIEC0aDAELCwJAAn8gAC0AzwFBB3YEQCAAKALIAQwBCyAALQDPAUH/AHELRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCtAEgBCAGEPkCNwMAIABBxAFqIABBEGogACgCDCAEEDQgAEHMAmogAEHIAmoQIQRAIAQgBCgCAEECcjYCAAsgACgCzAIgARATGiAAQcQBahATGiAAQdACaiQAC84BAQF/IwBBEGsiBSQAIABBADYCCCAAQgA3AgAgBSABIAIgAyAEIAEoAgAoAgQRCQAgBSgCBCIEIAUoAgAiAWtBA3UhAyABIARHBEAgACADEO8CIAUoAgQhBCAFKAIAIQELIAEgBEcEQANAIAAoAgAgA0EBayIDQQN0aiICIAEqAgA4AgAgAiABKAIENgIEIAEgBBBkIAUgBSgCBEEIayIENgIEIAUoAgAiASAERw0ACwsgAQRAIAUgATYCBCAFKAIIGiABEBELIAVBEGokAAuEBQEEfyMAQdACayIAJAAgACACNgLIAiAAIAE2AswCIAMQVCEGIAMgAEHQAWoQkQEhByAAQcQBaiADIABBxAJqEJABIABBuAFqIgFCADcCACABQQA2AgggASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEBkgAAJ/IAEtAAtBB3YEQCABKAIADAELIAELIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqECENACAAKAK0AQJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEDIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQGSABIAEtAAtBB3YEfyABKAIIQf////8HcUEBawVBCgsQGSAAIAMCfyABLQALQQd2BEAgASgCAAwBCyABCyICajYCtAELAn8gAEHMAmoiCCgCACIDKAIMIgkgAygCEEYEQCADIAMoAgAoAiQRAAAMAQsgCSgCAAsgBiACIABBtAFqIABBCGogACgCxAIgAEHEAWogAEEQaiAAQQxqIAcQdg0AIAgQLRoMAQsLAkACfyAALQDPAUEH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IAAoAkAgAkEYaiIBQgAgBX03AwggAUIANwMAIAIgASkDCDcDECACIAEpAwA3AwggAkEIakEBEP8BDQEEQCAAIAIpAyg3AkgLIAAgACgCICIBNgIoIAAgATYCJEEAIQEgAEEANgIQIABBADYCDCAAQQA2AgggAEEANgJcDAILECMAC0F/IQELIAJBMGokACABC6ABAQF/IwBBIGsiAyQAAkACQCABKAJABEAgASABKAIAKAIYEQAARQ0BCyAAQn83AwggAEIANwMADAELIAEoAkAgAyACKQMINwMQIAMgAikDADcDCCADQQhqQQAQ/wEEQCAAQn83AwggAEIANwMADAELIAMgAikDADcCGCABIAMpAxg3AkggACACKQMINwMIIAAgAikDADcDAAsgA0EgaiQAC58CAQJ/IwBBMGsiBCQAIAEoAkQiBQRAIAUgBSgCACgCGBEAACEFAkACQAJAIAEoAkBFDQAgBUEATCACQgBScQ0AIAEgASgCACgCGBEAAEUNAQsgAEJ/NwMIIABCADcDAAwBCyADQQNPBEAgAEJ/NwMIIABCADcDAAwBCyABKAJAIAQgAiAFrX5CACAFQQBKGzcDKCAEQgA3AyAgBCAEKQMoNwMQIAQgBCkDIDcDCCAEQQhqIAMQ/wEEQCAAQn83AwggAEIANwMADAELIAACfiABKAJAIgMoAkxBAEgEQCADELcDDAELIAMQtwMLNwMIIABCADcDACAEIAEpAkgiAjcDACAEIAI3AxggACAEKQIANwMACyAEQTBqJAAPCxAjAAuvAwEEfyMAQRBrIgQkACAEIAI2AgwgAEEANgIQIABBADYCDCAAQQA2AgggAEEANgIcIABBADYCFCAAQQA2AhgCQCACDQAgAQ0AIAAoAlxBIEcNACAAIAAoAkAiAwR/IANBfzYCUCADQQA2AjAgAyADKAIAQcAAcjYCAEEABUEiCzYCXAsCQCAALQBgQQFHDQAgACgCICIDRQ0AIAMQEQsCQCAALQBhQQFHDQAgACgCOCIDRQ0AIAMQEQsgACACNgI0IAACfwJAAkACQCACQQlPBEAgAC0AYiEDIAFFDQEgA0EBcUUNASAAQQA6AGAgACABNgIgDAILIABBADoAYCAAQQg2AjQgACAAQSxqNgIgIAAtAGINAQwCCyACEBIhAiAAQQE6AGAgACACNgIgIANB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CyABKAIMIgAEQCABIAA2AhAgASgCFBogABARCyAHQUBrJAAL+QIBAn8gACgCACICKAIAIgMEQCACIAM2AgQgAigCCBogAxARIAJBADYCCCACQgA3AgALIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAFBADYCCCABQgA3AgAgACgCBCICKAIAIgMEQCACIAM2AgQgAigCCBogAxARIAJBADYCCCACQgA3AgALIAIgASgCDDYCACACIAEoAhA2AgQgAiABKAIUNgIIIAFBADYCFCABQgA3AgwgACgCCCICKAIAIgMEQCACIAM2AgQgAigCCBogAxARIAJBADYCCCACQgA3AgALIAIgASgCGDYCACACIAEoAhw2AgQgAiABKAIgNgIIIAFBADYCICABQgA3AhggACgCDCICKAIAIgMEQCACIAM2AgQgAigCCBogAxARIAJBADYCCCACQgA3AgALIAIgASgCJDYCACACIAEoAig2AgQgAiABKAIsNgIIIAFBADYCLCABQgA3AiQgACgCECABKgIwOAIACwYAIAAQFwsxAQF/IABBxOUANgIAIAAoAgQhASAAQQA2AgQgAQRAIAEgASgCACgCDBEBAAsgABARCy8BAX8gAEHE5QA2AgAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIMEQEACyAAC8oEAQd/IwBBIGsiBiQAIAZBADYCHCAGQgA3AhQgBkEANgIQIAZCADcCCCAAKAIEIgAgACgCACgCEBEAACIKIAEgAiAGQRRqIAZBCGogCigCACgCDBEJAAJAIAJBAEwNACAGKAIYIgAgBigCFCIBRg0AIAAgAWtBAnUhCSAGKAIIIQAgA0UEQANAIAQEQCAEIAVBAnQiAWogACABaioCADgCAAsgBUEBaiIFIAJODQIgBSAJSQ0ACwwBCyACQQFrIgUgCUEBayIHIAUgB0kbIghBAWohByAEBEBBACEFAkAgCEEHSQ0AIAMgAWtBEEkNACAEIABrQRBJDQAgB0F8cSEFQQAhCANAIAMgCEECdCILaiABIAtq/QACAP0LAgAgBCALaiAAIAtq/QACAP0LAgAgCEEEaiIIIAVHDQALIAUgB0YNAgsDQCADIAVBAnQiB2ogASAHaigCADYCACAEIAdqIAAgB2oqAgA4AgAgBUEBaiIFIAJODQIgBSAJ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CCEBIARBADYCCCAEIAE2AlwgBCkDACERIARCADcDACAEQZzVADYCUCAEIBE3AlQgBCAE/QACHP0LAnAgBCAE/QACLP0LAoABIAQgBC0APDoAkAEgBCAE/QACDP0LAmAgBCAAKAIINgKcASAEIAApAgA3ApQBIABBADYCCCAAQgA3AgBBCBASIgVBIBASIARBsAJqIARB1ABqEJ0CNgIEIAVBxOUANgIAIARBnNUANgJQIAQsAJ8BQQBIBEAgBCgCnAEaIAQoApQBEBELIAQsAF9BAEgEQCAEKAJcGiAEKAJUEBELIAQsAOsBQQBIBEAgBCgC6AEaIAQoAuABEBELIAQsAKsBQQBODQEgBCgCqAEaIAQoAqABEBEMAQsgCEEBRgRAIARBmNsANgJQQQgQEiIFIARB0ABqIARBsAJqEJwCNgIEIAVBxOUANgIADAELIARB5N0ANgJQQQgQEiIFIARB0ABqIARBsAJqEJsCNgIEIAVBxOUANgIACyAEQcACaiQAIAUL7gUBBH8jAEEgayIDJAACQCABEEQiBUH4////B08NAAJAAkAgBUELTwRAIAVBB3IiBkEBahASIQQgAyAGQf////8HazYCHCADIAQ2AhQgAyAFNgIYDAELIAMgBToAHyADQRRqIQQgBUUNAQsgBUUNACAEIAEgBfwKAAALIAQgBWpBADoAACACEEQiAUH4////B08NAAJAAkAgAUELTwRAIAFBB3IiBUEBahASIQQgAyAFQf////8HazYCECADIAQ2AgggAyABNgIMDAELIAMgAToAEyADQQhqIQQgAUUNAQsgAUUNACAEIAIgAfwKAAALIAEgBGpBADoAAEF/IQQCQCADKAIYIAMsAB8iAiACQQBIIgEbQQZHDQACQCADKAIUIANBFGogARsiASgAAEHtytGTB3MgAS8ABEHpxgFzckUEQAJAAkAgAygCDCADLAATIgEgAUEASCIBG0EGaw4EAQQEAAQLIAMoAgggA0EIaiABGyIBKQAAQuXqjeOWjdmy4QCFIAExAAhC7gCFhEIAUg0DQQAhBCAAQQA2AgQMAwsgAygCCCADQQhqIAEbIgEoAABB497NywZzIAEvAARB7soBc3INAiAAQQE2AgQMAQsgAygCFCADQRRqIAJBAEgbIgEoAABB7crRwwZzIAEvAARB78gBc3INAQJAAkACQCADKAIMIAMsABMiASABQQBIG0EEaw4GAAQCBAQBBAsgAygCCCADQQhqIAFBAEgbKAAAQejczbsHRw0DIABBAjYCAAwCCyADKAIIIANBCGogAUEASBsiASkAAELu3JGrtu7Ysu4AhSABMQAIQvQAhYRCAFINAiAAQQM2AgAMAQsgAygCCCADQQhqIAFBAEgbIgEoAABB9uDRkwdzIAEvAARB5coBc3INASAAQQA2AgALQQAhBAsgAywAE0EASARAIAMoAhAaIAMoAggQEQsgAkEASARAIAMoAhwaIAMoAhQQEQsgA0EgaiQAIAQPCxB4AAujBQEEfyMAQRBrIgMkACABEEQiBEH4////B0kEQAJAAkAgBEELTwRAIARBB3IiBkEBahASIQUgAyAGQf////8HazYCDCADIAU2AgQgAyAENgIIDAELIAMgBDoADyADQQRqIQUgBEUNAQsgBEUNACAFIAEgBPwKAAALIAQgBWpBADoAACADKAIIIQECfwJAAkACQCADLAAPIgRBAE4iBQ0AIAFBDEcNACADKAIEIgEpAABC6NzNu/fL26/sAIUgATUACELp3K2bB4WEQgBSDQEgACAC/AI2AggMAgsCQCAFDQAgAUEURw0AIAMoAgQiASkAAELo3M2796uZs98AhSABKQAIQuPeuZvHzty64wCFhCABNQAQQvTSvfMGhYRCAFINASAAIAL8AjYCDAwCCwJAIARBAE4iBQ0AIAFBDkcNACADKAIEIgEpAABC6NzNu/ermbPfAIUgASkABkLmvs2rlszcsegAhYRCAFINASAAIAL8AjYCEAwCCwJAIAUNACABQRVHDQAgAygCBCIBKQAAQu7ckau27tiy7gCFIAEpAAhC9L65++Wt2bTnAIWEIAEpAA1C5dKdw6bsm7nzAIWEQgBSDQEgACAC/AI2AlgMAgsgBEEATg0AIAFBEUcNACADKAIEIgEpAABC7tyRq7bu2LLuAIUgASkACEL0vrn7xc7csuUAhYQgATEAEELzAIWEUARAIAAgAvwCNgJcDAILIAMoAgQiASkAAELu3JGrtu7Ysu4AhSABKQAIQvS+ufuVjd2y8gCFhCABMQAQQvMAhYRCAFINACAAIAL8AjYCeAwBC0F/IANBBGpB2icQOkUNARogACAC/AI2AnALQQALIAMsAA9BAEgEQCADKAIMGiAD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ACgCDCgCACAEQQN0aiEDCwJAIAQgB0YiDw0AIAVBA3QiAUUNACADQQAgAfwLAAsgCCgCACIQQQBKBEAgCCgCWCIBIApBDGxqKAIAIREgASAGQQxsaigCACEJIAAoAhAoAgAhCgNAAkAgESALQQJ0IgFqKAIAIgwgASAJaigCACICTQ0AIAogC0EDdGorAwAhEiACQQFqIQEgCCgCGCENIAgoAgwhDiAMIAJrQQFxBEAgAyANIAJBAnRqKAIAIARrQQN0aiIHIA4gAkEDdGorAwAgEqIgBysDAKA5AwAgASECCyABIAxGDQADQCADIA0gAkECdGooAgAgBGtBA3RqIgEgDiACQQN0aisDACASoiABKwMAoDkDACADIA0gAkEBaiIHQQJ0aigCACAEa0EDdGoiASAOIAdBA3RqKwMAIBKiIAErAwCgOQMAIAJBAmoiAiAMRw0ACwsgC0EBaiILIBBHDQALCwJAIAZFDQAgDw0AIAVBA3QiAUUNACAAKAIMKAIAIARBA3RqIAMgAfwKAAALIAAoAgAhASAAQQA2AgAgAQRAIAEQiQEQEQsgABARQQALcwEDfyAAQZDLADYCACAAQRhqIQICQCAAKAJAIgEgAEEwakYEf0EQBSABRQ0BQRQLIQMgASABKAIAIANqKAIAEQEACwJAIAIgACgCKCIBRgR/QRAFIAFFDQFBFAshAiABIAEoAgAgAmooAgARAQALIAAQEQupAQEDfyAABEAgACwAgwJBAEgEQCAAKAKAAhogACgC+AEQEQsgACwAwwFBAEgEQCAAKALAARogACgCuAEQEQsgAEGIAWohAgJAIAAoArABIgEgAEGgAWpGBH9BEAUgAUUNAUEUCyEDIAEgASgCACADaigCABEBAAsCQCACIAAoApgBIgFGBH9BEAUgAUUNAUEUCyECIAEgASgCACACaigCABEBAAsgABARCwvICgIJfwF7IwBB8ABrIgQkACABKAIIIQcgBEEANgJgIARCADcCWAJAAkACQAJAIAdBAE4EQCAHBEAgB0H/////ByAHbksNBAsgBEHYAGoiBSAHIAdsIAcgBxAbAkAgAwRAIAUgASACENsDDAELIARB2ABqIAEgAhDbAwsgASgCACEMIAEoAgQhCSABKAIIIQcgBCAB/QACDP0LA0ggAf0AAgwhDSAEIAc2AgwgBCAJNgII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KAIEQeTiAEYbCwsAIAFBoOAANgIACxEAQQgQEiIAQaDgADYCACAACwUBAX8ACwUBA38AC74BAQJ/IwBBEGsiBSQAAkAgAkUEQCADBEAgAyADKAIANgIEIARFDQIgBCAEKAIANgIEDAILIARFDQEgBCAEKAIANgIEDAELIABBADoADCAAIAI2AgggACgCECIGIAAoAhQiAkcEQANAIAYgAhBLIAAgACgCFEEIayICNgIUIAAoAhAiBiACRw0ACwsgBUH////7BzYCDCAAKAIEQQAgASAFQQxqIABBCGoiABCgASAAIAMgBBDyAwsgBUEQaiQAC3EBA38gAEGQywA2AgAgAEEYaiEDAkAgACgCQCIBIABBMGpGBH9BEAUgAUUNAUEUCyECIAEgASgCACACaigCABEBAAsCQCADIAAoAigiAUYEf0EQBSABRQ0BQRQLIQIgASABKAIAIAJqKAIAEQEACyAAC7IBAQR/IwBBEGsiBiQAIABBADoADCAAIAJBAWo2AgggACgCECIFIAAoAhQiAkcEQANAIAUgAhBLIAAgACgCFEEIayICNgIUIAAoAhAiBSACRw0ACwsgACgCBCICKAIoIAFBAnRqKAIAIQUgAigCECEHIAIoAgwhCCAGQf////sHNgIMIAJBACAHIAUgCGxBAnRqIAZBDGogAEEIaiIAEKABIAAgAyAEIAEQ8wMgBkEQaiQAC0cBAX8gAEG03wA2AgAgACgCICIBBEAgACABNgIkIAAoAigaIAEQEQsgACgCECIBBEAgACABNgIUIAAoAhgaIAEQEQsgABARC0UBAX8gAEG03wA2AgAgACgCICIBBEAgACABNgIkIAAoAigaIAEQEQsgACgCECIBBEAgACABNgIUIAAoAhgaIAEQEQsgAAtEAQF/QSwQEiIBQQA2AiggAUIANwIgIAFBADYCGCABQgA3AhAgAUEAOgAMIAFBATYCCCABIAA2AgQgAUG03wA2AgAgAQtiAQF/IABB0N4ANgIAIAAoAigiAQRAIAAgATYCLCAAKAIwGiABEBELIAAoAhwiAQRAIAAgATYCICAAKAIkGiABEBELIAAoAhAiAQRAIAAgATYCFCAAKAIYGiABEBELIAAQEQtgAQF/IABB0N4ANgIAIAAoAigiAQRAIAAgATYCLCAAKAIwGiABEBELIAAoAhwiAQRAIAAg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BGoQFyIANgIAIABFDQAgASgCCBAXIgQEQEGoiwMoAgAiACABKAIMQQJ0akEANgIAIAAgBBANRQ0BC0GoiwNBADYCAAsgAUEQaiQAQdCCA0Go8QI2AgBBqIIDQYCABDYCAEGkggNBsJsHNgIAQYiCA0EqNgIAQayCA0HE5gIoAgA2AgALC+fCArgBAEGACAugXmluZmluaXR5AGNoZWNrU2FuaXR5AE5vdCBlbm91Z2ggbWVtb3J5AEZlYnJ1YXJ5AEphbnVhcnkASnVseQBUaHVyc2RheQBUdWVzZGF5AFdlZG5lc2RheQBTYXR1cmRheQBTdW5kYXkATW9uZGF5AEZyaWRheQBNYXkAJW0vJWQvJXkAd3gAcmVkdXgAc3RhcnRpbmcgdmVjdG9yIG5lYXIgdGhlIG51bGwgc3BhY2Ugb2YgdGhlIGlucHV0IG1hdHJpeAB1bmlxdWVfbG9jazo6bG9jazogcmVmZXJlbmNlcyBudWxsIG11dGV4AHdieAB3K2J4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAdyt4AF9fbmV4dF9wcmltZSBvdmVyZmxvdwBOb3YAVGh1AHVuc3VwcG9ydGVkIGxvY2FsZSBmb3Igc3RhbmRhcmQgaW5wdXQAQXVndXN0AE5vdCBlbm91Z2ggbWVtb3J5OiBhZGRQb2ludCBmYWlsZWQgdG8gYWxsb2NhdGUgbGlua2xpc3QAVGhlIG5ld2x5IGluc2VydGVkIGVsZW1lbnQgc2hvdWxkIGhhdmUgYmxhbmsgbGluayBsaXN0AFVwZGF0ZSBHcmFwaCBieSAgUlAgZm9yZXN0AGRvdABpbnRlcm5hbElkIDwgY3VyX2VsZW1lbnRfY291bnQAbm5fZGVzY2VudABUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGV4Y2VlZHMgdGhlIHNwZWNpZmllZCBsaW1pdABhcHBseVRyYW5zcG9zaXRpb25PblRoZVJpZ2h0AFByb2R1Y3QAT2N0AFNhdABpbml0aWFsaXphdGlvbiB2ZWN0b3IgZG9lcyBub3QgaGF2ZSBleHBlY3RlZCBudW1iZXIgb2Ygcm93cwBOb3QgZW5vdWdoIG1lbW9yeTogSGllcmFyY2hpY2FsTlNXIGZhaWxlZCB0byBhbGxvY2F0ZSBsaW5rbGlzdHMAbm5kZXNjZW50X25fbmVpZ2hib3JzAG5uZGVzY2VudF9uX2l0ZXJzAF9jaGVja19jb21wdXRlX2Fzc2VydGlvbnMAcmVxdWVzdGVkIG51bWJlciBvZiBzaW5ndWxhciB2YWx1ZXMgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIHNtYWxsZXIgbWF0cml4IGRpbWVuc2lvbiBmb3IgSVJMQkEgaXRlcmF0aW9ucwBkc3Qucm93cygpID09IGRzdFJvd3MgJiYgZHN0LmNvbHMoKSA9PSBkc3RDb2xzAHN0YXJ0Um93ID49IDAgJiYgYmxvY2tSb3dzID49IDAgJiYgc3RhcnRSb3cgPD0geHByLnJvd3MoKSAtIGJsb2NrUm93cyAmJiBzdGFydENvbCA+PSAwICYmIGJsb2NrQ29scyA+PSAwICYmIHN0YXJ0Q29sIDw9IHhwci5jb2xzKCkgLSBibG9ja0NvbHMAaG5zd19uX2xpbmtzAG5fZXBvY2hzAHVwZGF0ZV9ieV9sZWF2ZXMAYXBwbHlfZ3JhcGhfdXBkYXRlcwBnZW5lcmF0ZV9ncmFwaF91cGRhdGVzAG5uZGVzY2VudF9uX3RyZWVzACB0cmVlcwB0cmlGYWN0b3Iucm93cygpID09IG5iVmVjcyAmJiB0cmlGYWN0b3IuY29scygpID09IG5iVmVjcyAmJiB2ZWN0b3JzLnJvd3MoKT49bmJWZWNzACVzOiVkOiAlcwBBcHIAUmVwbGFjZW1lbnQgb2YgZGVsZXRlZCBlbGVtZW50cyBpcyBkaXNhYmxlZCBpbiBjb25zdHJ1Y3RvcgB2ZWN0b3IAZXNzZW50aWFsVmVjdG9yAG1ha2VfYmxvY2tfaG91c2Vob2xkZXJfdHJpYW5ndWxhcl9mYWN0b3IAbW9uZXlfZ2V0IGVycm9yAGNhbmQgZXJyb3IAYmxhc19kYXRhX21hcHBlcgBCYWQgdmFsdWUgb2Ygc3pfbGlua19saXN0X290aGVyAE9jdG9iZXIATm92ZW1iZXIAU2VwdGVtYmVyAERlY2VtYmVyAGlvc19iYXNlOjpjbGVhcgBNYXIAL2Vtc2RrL2Vtc2NyaXB0ZW4vc3lzdGVtL2xpYi9saWJjeHhhYmkvc3JjL3ByaXZhdGVfdHlwZWluZm8uY3BwAHRoaXJkX3BhcnR5L25uZGVzY2VudC9zcmMvbm5kLmNwcABTZXAAQ3dpc2VCaW5hcnlPcABDd2lzZU51bGxhcnlPcAAlSTolTTolUyAlcABpbmZvAHNjYWxlQW5kQWRkVG8AcnVuAFN1bgBKdW4AUG9zc2libGUgbWVtb3J5IGNvcnJ1cHRpb24Ac3RkOjpleGNlcHRpb24AaG5zd19lZl9jb25zdHJ1Y3Rpb24AdW1hcHBwIHdhcyBub3QgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBwYXJhbGxlbCBvcHRpbWl6YXRpb24AY29sc1Blcm11dGF0aW9uAHJlcXVlc3RlZCBudW1iZXIgb2Ygc2luZ3VsYXIgdmFsdWVzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIHNtYWxsZXIgbWF0cml4IGRpbWVuc2lvbgBNb24AbmFuAGV1Y2xpZGVhbgBKYW4ASnVsAHN0ZDo6YmFkX2Z1bmN0aW9uX2NhbGwAQXByaWwATGV2ZWwgb2YgaXRlbSB0byBiZSB1cGRhdGVkIGNhbm5vdCBiZSBiaWdnZXIgdGhhbiBtYXggbGV2ZWwAVHJ5aW5nIHRvIG1ha2UgYSBsaW5rIG9uIGEgbm9uLWV4aXN0ZW50IGxldmVsAHVubWFya0RlbGV0ZWRJbnRlcm5hbABEaWFnb25hbABCbG9jawBGcmkAcmVwdWxzaW9uX3N0cmVuZ3RoAGJhZF9hcnJheV9uZXdfbGVuZ3RoAGsgPj0gMCAmJiBrIDwgbV9sZW5ndGgAaG5zd19lZl9zZWFyY2gATWFyY2gAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvUmVkdXguaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9wcm9kdWN0cy9HZW5lcmFsTWF0cml4TWF0cml4LmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvUGVybXV0YXRpb25NYXRyaXguaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9Eb3QuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9Qcm9kdWN0LmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvUHJvZHVjdEV2YWx1YXRvcnMuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9Bc3NpZ25FdmFsdWF0b3IuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvSG91c2Vob2xkZXIvQmxvY2tIb3VzZWhvbGRlci5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL0N3aXNlQmluYXJ5T3AuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9Dd2lzZU51bGxhcnlPcC5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9TVkQvVXBwZXJCaWRpYWdvbmFsaXphdGlvbi5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL3V0aWwvQmxhc1V0aWwuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9wcm9kdWN0cy9HZW5lcmFsQmxvY2tQYW5lbEtlcm5lbC5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL0RpYWdvbmFsLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL0NvcmUvQmxvY2suaAB0aGlyZF9wYXJ0eS9obnN3bGliL2huc3dsaWIvaG5zd2FsZy5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL1RyYW5zcG9zZS5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL1BsYWluT2JqZWN0QmFzZS5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL0RlbnNlQ29lZmZzQmFzZS5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9Db3JlL01hcEJhc2UuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvQ29yZS9EZW5zZUJhc2UuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvU1ZEL1NWREJhc2UuaAB0aGlyZF9wYXJ0eS9FaWdlbi9FaWdlbi9zcmMvSG91c2Vob2xkZXIvSG91c2Vob2xkZXJTZXF1ZW5jZS5oAHRoaXJkX3BhcnR5L0VpZ2VuL0VpZ2VuL3NyYy9RUi9Db2xQaXZIb3VzZWhvbGRlclFSLmgAdGhpcmRfcGFydHkvRWlnZW4vRWlnZW4vc3JjL1NWRC9KYWNvYmlTVkQuaABBdWcAdGVybWluYXRpbmcAYmFzaWNfc3RyaW5nAGluZgBUcnlpbmcgdG8gY29ubmVjdCBhbiBlbGVtZW50IHRvIGl0c2VsZgAlLjBMZgAlTGYAcmVzaXplAHRydWUAVHVlAGNvbXB1dGUAbGVhcm5pbmdfcmF0ZQBuZWdhdGl2ZV9zYW1wbGVfcmF0ZQBhbGxvY2F0ZQBmYWxzZQBNYXBCYXNlAEp1bmUAY29zaW5lAGphY2NhcmQATGFiZWwgbm90IGZvdW5kAG5uZAAlMCpsbGQAJSpsbGQAKyVsbGQAJSsuNGxkAHJlc2l6ZV9pZl9hbGxvd2VkAGRpc3RhbmNlLWJhc2VkIHNlYXJjaGVzIG5vdCBzdXBwb3J0ZWQAbG9jYWxlIG5vdCBzdXBwb3J0ZWQAVGhlIHJlcXVlc3RlZCB0byB1bmRlbGV0ZSBlbGVtZW50IGlzIG5vdCBkZWxldGVkAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZAB0aHJlYWQgY29uc3RydWN0b3IgZmFpbGVkAF9fdGhyZWFkX3NwZWNpZmljX3B0ciBjb25zdHJ1Y3Rpb24gZmFpbGVkAHRocmVhZDo6am9pbiBmYWlsZWQAbXV0ZXggbG9jayBmYWlsZWQAY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSkgZmFpbGVkACB1cGRhdGVzIGFwcGxpZWQAbm5kZXNjZW50X3NlZWQAV2VkACVZLSVtLSVkAHN0ZDo6YmFkX2FsbG9jAFNob3VsZCBiZSBub3QgYmUgbW9yZSB0aGFuIE1fIGNhbmRpZGF0ZXMgcmV0dXJuZWQgYnkgdGhlIGhldXJpc3RpYwBJbnZhbGlkIG1ldHJpYwBEZWMAd2IAcmIARmViAGFiAHcrYgByK2IAYStiAHJ3YQBvcGVyYXRvcltdAFsAJWEgJWIgJWQgJUg6JU06JVMgJVkAUE9TSVgAbWF0cml4VgBob3VzZWhvbGRlclYAbWF0cml4VQBob3VzZWhvbGRlclUAJUg6JU06JVMAbWF0cml4UVIAaG91c2Vob2xkZXJRAE5BTgBQTQBBTQAlSDolTQBMQ19BTEwAQVNDSUkATEFORwBJTkYAQwBjYXRjaGluZyBhIGNsYXNzIHdpdGhvdXQgYW4gb2JqZWN0PwA+AHRyZWVfaW5pdD0AY3NyX2RhdGE9Q1NSTWF0cml4PGZsb2F0PihuX3Jvd3M9AGRhdGE9TWF0cml4PGZsb2F0PihuX3Jvd3M9AG5fbmVpZ2hib3JzPQBuX2l0ZXJzPQAsIG5fY29scz0AbWF4X2NhbmRpZGF0ZXM9AGFuZ3VsYXJfdHJlZXM9AG5fdHJlZXM9AG5fdGhyZWFkcz0AcHJ1bmluZ19kZWdyZWVfbXVsdGlwbGllcj0AYWxnb3JpdGhtPQBsZWFmX3NpemU9AGlzX3NwYXJzZT0AdmVyYm9zZT0Ac2VlZD0AcF9tZXRyaWM9AHBydW5pbmdfcHJvYj0AZGVsdGE9ADAxMjM0NTY3ODkAQy5VVEYtOABpbmNyPT0xACgoU2l6ZUF0Q29tcGlsZVRpbWUgPT0gRHluYW1pYyAmJiAoTWF4U2l6ZUF0Q29tcGlsZVRpbWU9PUR5bmFtaWMgfHwgc2l6ZTw9TWF4U2l6ZUF0Q29tcGlsZVRpbWUpKSB8fCBTaXplQXRDb21waWxlVGltZSA9PSBzaXplKSAmJiBzaXplPj0wAHJvd3MgPj0gMCAmJiBjb2xzID49IDAAdmVjU2l6ZSA+PSAwAGlkeDEgPj0gMABpZHgwID49IDAAd2FybmluZzogTSBwYXJhbWV0ZXIgZXhjZWVkcyAxMDAwMCB3aGljaCBtYXkgbGVhZCB0byBhZHZlcnNlIGVmZmVjdHMuACBlZGdlcyBmb3IgdGhlIHNlYXJjaCBncmFwaC4AICAgICAgICAgQ2FwIHRvIDEwMDAwIHdpbGwgYmUgYXBwbGllZCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHByb2Nlc3NpbmcuAE5OIGRlc2NlbnQgZG9uZS4AVGhlIG1vZGVsIHdhcyB0cmFpbmVkIHVzaW5nIGEgc3BhcnNlIG1hdHJpeC4gQXBwbGljYXRpb25zIHVzaW5nIGEgZGVuc2UgbWF0cml4IGFyZSBub3Qgc3VwcG9ydGVkLgBDYW4ndCB1c2UgYWRkUG9pbnQgdG8gdXBkYXRlIGRlbGV0ZWQgZWxlbWVudHMgaWYgcmVwbGFjZW1lbnQgb2YgZGVsZXRlZCBlbGVtZW50cyBpcyBlbmFibGVkLgAtAHcrAHIrAGErAHJvd3MgPj0gMCAmJiAoUm93c0F0Q29tcGlsZVRpbWUgPT0gRHluYW1pYyB8fCBSb3dzQXRDb21waWxlVGltZSA9PSByb3dzKSAmJiBjb2xzID49IDAgJiYgKENvbHNBdENvbXBpbGVUaW1lID09IER5bmFtaWMgfHwgQ29sc0F0Q29tcGlsZVRpbWUgPT0gY29scykAKG51bGwpACgoIVBhbmVsTW9kZSkgJiYgc3RyaWRlPT0wICYmIG9mZnNldD09MCkgfHwgKFBhbmVsTW9kZSAmJiBzdHJpZGU+PWRlcHRoICYmIG9mZnNldDw9c3RyaWRlKQAoZGF0YVB0ciA9PSAwKSB8fCAoIHJvd3MgPj0gMCAmJiAoUm93c0F0Q29tcGlsZVRpbWUgPT0gRHluYW1pYyB8fCBSb3dzQXRDb21waWxlVGltZSA9PSByb3dzKSAmJiBjb2xzID49IDAgJiYgKENvbHNBdENvbXBpbGVUaW1lID09IER5bmFtaWMgfHwgQ29sc0F0Q29tcGlsZVRpbWUgPT0gY29scykpAChpPj0wKSAmJiAoICgoQmxvY2tSb3dzPT0xKSAmJiAoQmxvY2tDb2xzPT1YcHJUeXBlOjpDb2xzQXRDb21waWxlVGltZSkgJiYgaTx4cHIucm93cygpKSB8fCgoQmxvY2tSb3dzPT1YcHJUeXBlOjpSb3dzQXRDb21waWxlVGltZSkgJiYgKEJsb2NrQ29scz09MSkgJiYgaTx4cHIuY29scygpKSkAY3VycmVudF9ncmFwaC5uaGVhcHMoKSA9PSBkYXRhLm5yb3dzKCkAYV9pbmRleCA8PSBtX21hdHJpeC5jb2xzKCkgJiYgLWFfaW5kZXggPD0gbV9tYXRyaXgucm93cygpAGRhdGEubnJvd3MoKSA9PSBuZXdfY2FuZGlkYXRlX25laWdoYm9ycy5uaGVhcHMoKQBkYXRhLm5yb3dzKCkgPT0gb2xkX2NhbmRpZGF0ZV9uZWlnaGJvcnMubmhlYXBzKCkAZHN0LnJvd3MoKT09YV9saHMucm93cygpICYmIGRzdC5jb2xzKCk9PWFfcmhzLmNvbHMoKQBhTGhzLnJvd3MoKSA9PSBhUmhzLnJvd3MoKSAmJiBhTGhzLmNvbHMoKSA9PSBhUmhzLmNvbHMoKQBkc3Qucm93cygpID09IHNyYy5yb3dzKCkgJiYgZHN0LmNvbHMoKSA9PSBzcmMuY29scygpAHJvdyA+PSAwICYmIHJvdyA8IHJvd3MoKSAmJiBjb2wgPj0gMCAmJiBjb2wgPCBjb2xzKCkAb3BlcmF0b3IoKQBpPj0wICYmIGo+PTAgJiYgaTxzaXplKCkgJiYgajxzaXplKCkAc2l6ZSgpID09IG90aGVyLnNpemUoKQBpbmRleCA+PSAwICYmIGluZGV4IDwgc2l6ZSgpACUAdGhpcy0+cm93cygpPjAgJiYgdGhpcy0+Y29scygpPjAgJiYgInlvdSBhcmUgdXNpbmcgYW4gZW1wdHkgbWF0cml4IgBsaHMuY29scygpID09IHJocy5yb3dzKCkgJiYgImludmFsaWQgbWF0cml4IHByb2R1Y3QiICYmICJpZiB5b3Ugd2FudGVkIGEgY29lZmYtd2lzZSBvciBhIGRvdCBwcm9kdWN0IHVzZSB0aGUgcmVzcGVjdGl2ZSBleHBsaWNpdCBmdW5jdGlvbnMiACggKChpbnRlcm5hbDo6VUludFB0cihtX2RhdGEpICUgaW50ZXJuYWw6OnRyYWl0czxEZXJpdmVkPjo6QWxpZ25tZW50KSA9PSAwKSB8fCAoY29scygpICogcm93cygpICogbWluSW5uZXJTdHJpZGUgKiBzaXplb2YoU2NhbGFyKSkgPCBpbnRlcm5hbDo6dHJhaXRzPERlcml2ZWQ+OjpBbGlnbm1lbnQgKSAmJiAiZGF0YSBpcyBub3QgYWxpZ25lZCIAIShtX2NvbXB1dGVGdWxsViAmJiBtX2NvbXB1dGVUaGluVikgJiYgIlNWREJhc2U6IHlvdSBjYW4ndCBhc2sgZm9yIGJvdGggZnVsbCBhbmQgdGhpbiBWIgAhKG1fY29tcHV0ZUZ1bGxWICYmIG1fY29tcHV0ZVRoaW5WKSAmJiAiSmFjb2JpU1ZEOiB5b3UgY2FuJ3QgYXNrIGZvciBib3RoIGZ1bGwgYW5kIHRoaW4gViIAIShtX2NvbXB1dGVGdWxsVSAmJiBtX2NvbXB1dGVUaGluVSkgJiYgIlNWREJhc2U6IHlvdSBjYW4ndCBhc2sgZm9yIGJvdGggZnVsbCBhbmQgdGhpbiBVIgAhKG1fY29tcHV0ZUZ1bGxVICYmIG1fY29tcHV0ZVRoaW5VKSAmJiAiSmFjb2JpU1ZEOiB5b3UgY2FuJ3QgYXNrIGZvciBib3RoIGZ1bGwgYW5kIHRoaW4gVSIAY29tcHV0ZVYoKSAmJiAiVGhpcyBTVkQgZGVjb21wb3NpdGlvbiBkaWRuJ3QgY29tcHV0ZSBWLiBEaWQgeW91IGFzayBmb3IgaXQ/IgBjb21wdXRlVSgpICYmICJUaGlzIFNWRCBkZWNvbXBvc2l0aW9uIGRpZG4ndCBjb21wdXRlIFUuIERpZCB5b3UgYXNrIGZvciBpdD8iACghKFJvd3NBdENvbXBpbGVUaW1lIT1EeW5hbWljKSB8fCAocm93cz09Um93c0F0Q29tcGlsZVRpbWUpKSAmJiAoIShDb2xzQXRDb21waWxlVGltZSE9RHluYW1pYykgfHwgKGNvbHM9PUNvbHNBdENvbXBpbGVUaW1lKSkgJiYgKCEoUm93c0F0Q29tcGlsZVRpbWU9PUR5bmFtaWMgJiYgTWF4Um93c0F0Q29tcGlsZVRpbWUhPUR5bmFtaWMpIHx8IChyb3dzPD1NYXhSb3dzQXRDb21waWxlVGltZSkpICYmICghKENvbHNBdENvbXBpbGVUaW1lPT1EeW5hbWljICYmIE1heENvbHNBdENvbXBpbGVUaW1lIT1EeW5hbWljKSB8fCAoY29sczw9TWF4Q29sc0F0Q29tcGlsZVRpbWUpKSAmJiByb3dzPj0wICYmIGNvbHM+PTAgJiYgIkludmFsaWQgc2l6ZXMgd2hlbiByZXNpemluZyBhIG1hdHJpeCBvciBhcnJheS4iAHJvd3MgPj0gY29scyAmJiAiVXBwZXJCaWRpYWdvbmFsaXphdGlvbiBpcyBvbmx5IGZvciBBcmljZXMgc2F0aXNmeWluZyByb3dzPj1jb2xzLiIAcm93cyA9PSB0aGlzLT5yb3dzKCkgJiYgY29scyA9PSB0aGlzLT5jb2xzKCkgJiYgIkRlbnNlQmFzZTo6cmVzaXplKCkgZG9lcyBub3QgYWN0dWFsbHkgYWxsb3cgdG8gcmVzaXplLiIAbV9pc0luaXRpYWxpemVkICYmICJVcHBlckJpZGlhZ29uYWxpemF0aW9uIGlzIG5vdCBpbml0aWFsaXplZC4iAG1faXNJbml0aWFsaXplZCAmJiAiQ29sUGl2SG91c2Vob2xkZXJRUiBpcyBub3QgaW5pdGlhbGl6ZWQuIgBtX2lzSW5pdGlhbGl6ZWQgJiYgIlNWRCBpcyBub3QgaW5pdGlhbGl6ZWQuIgAoIWNoZWNrX3RyYW5zcG9zZV9hbGlhc2luZ19ydW5fdGltZV9zZWxlY3RvciA8dHlwZW5hbWUgRGVyaXZlZDo6U2NhbGFyLGJsYXNfdHJhaXRzPERlcml2ZWQ+OjpJc1RyYW5zcG9zZWQsT3RoZXJEZXJpdmVkPiA6OnJ1bihleHRyYWN0X2RhdGEoZHN0KSwgb3RoZXIpKSAmJiAiYWxpYXNpbmcgZGV0ZWN0ZWQgZHVyaW5nIHRyYW5zcG9zaXRpb24sIHVzZSB0cmFuc3Bvc2VJblBsYWNlKCkgIiAib3IgZXZhbHVhdGUgdGhlIHJocyBpbnRvIGEgdGVtcG9yYXJ5IHVzaW5nIC5ldmFsKCkiAFB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsZWQhAE5OIGRlc2NlbnQgZm9yIABTdG9wcGluZyB0aHJlc2hvbGQgbWV0IC0tIGV4aXRpbmcgYWZ0ZXIgACB0byAATWVyZ2luZyBwcnVuZWQgZ3JhcGggd2l0aCBpdHMgdHJhbnNwb3NlIHJlc3VsdHMgaW4gAEZvcndhcmQgZ3JhcGggcHJ1bmluZyByZWR1Y2VkIGVkZ2VzIGZyb20gAEJ1aWxkaW5nIFJQIGZvcmVzdCB3aXRoIABdIAAlRiAlVCAAICAvICAAICUNACwKACkKACksCgkATk5EZXNjZW50KAoJAAkJAAAAAAAAnCUAAAsAAAAMAAAADQAAABivAACoJQAA7CUAAE4xM2tubmNvbGxlX2huc3cxMUhuc3dCdWlsZGVySU44a25uY29sbGUxMlNpbXBsZU1hdHJpeElpaWZFRWZmRUUAAAAA8K4AAPQlAABOOGtubmNvbGxlN0J1aWxkZXJJTlNfMTJTaW1wbGVNYXRyaXhJaWlmRUVmRUUAAAAAAAAAQCYAAA4AAAAPAAAAEAAAABEAAAASAAAAGK8AAEwmAAB0JgAATjEza25uY29sbGVfaG5zdzEySG5zd1ByZWJ1aWx0SWlpZmZFRQAAAPCuAAB8JgAATjhrbm5jb2xsZThQcmVidWlsdElpaWZFRQAAAAAAAAC0JgAAEwAAABQAAAAVAAAAFgAAABcAAAAYrwAAwCYAANQmAABON2huc3dsaWI3TDJTcGFjZUUAAPCuAADcJgAATjdobnN3bGliMTRTcGFjZUludGVyZmFjZUlmRUUAAAAAAAAAGCcAABgAAAAZAAAAGgAAABsAAAAcAAAAGK8AACQnAABQqwAATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE43aG5zd2xpYjE0U3BhY2VJbnRlcmZhY2VJZkVFTlNfMTBzaGFyZWRfcHRySVMzX0UyN19fc2hhcmVkX3B0cl9kZWZhdWx0X2RlbGV0ZUlTM19TM19FRU5TXzlhbGxvY2F0b3JJUzNfRUVFRQBOU3QzX18yMTBzaGFyZWRfcHRySU43aG5zd2xpYjE0U3BhY2VJbnRlcmZhY2VJZkVFRTI3X19zaGFyZWRfcHRyX2RlZmF1bHRfZGVsZXRlSVMzX1MzX0VFAAAAAAAAAAA4KAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAGK8AAEQoAAD0KAAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWlpOMTNrbm5jb2xsZV9obnN3MTJIbnN3UHJlYnVpbHRJaWlmZkVDMUlOOGtubmNvbGxlMTJTaW1wbGVNYXRyaXhJaWlmRUVFRVJLVF9SS05TMl8xMUhuc3dPcHRpb25zSWlmRUVFTktVbHZFMF9jbEV2RVVsZkVfTlNfOWFsbG9jYXRvcklTSF9FRUZmZkVFRQAAAADwrgAA/CgAAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZmZkVFRQAAAPCuAAAoKQAAWlpOMTNrbm5jb2xsZV9obnN3MTJIbnN3UHJlYnVpbHRJaWlmZkVDMUlOOGtubmNvbGxlMTJTaW1wbGVNYXRyaXhJaWlmRUVFRVJLVF9SS05TXzExSG5zd09wdGlvbnNJaWZFRUVOS1VsdkUwX2NsRXZFVWxmRV8AAAAAAMApAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAYrwAAzCkAAOwpAABON2huc3dsaWIxNUhpZXJhcmNoaWNhbE5TV0lmRUUAAPCuAAD0KQAATjdobnN3bGliMThBbGdvcml0aG1JbnRlcmZhY2VJZkVFAAAAAAAAADwqAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAGK8AAEgqAABwKgAATjEza25uY29sbGVfaG5zdzEySG5zd1NlYXJjaGVySWlpZmZFRQAAAPCuAAB4KgAATjhrbm5jb2xsZThTZWFyY2hlcklpZkVFAAAAAAAAAACoKgAAMwAAADQAAAA1AAAAGK8AALQqAADsJQAATjE4a25uY29sbGVfbm5kZXNjZW50MTZOTkRlc2NlbnRCdWlsZGVyRQAAAAAAAAAA/CoAADYAAAA3AAAAOAAAADkAAAA6AAAAGK8AAAgrAAB0JgAATjE4a25uY29sbGVfbm5kZXNjZW50MTdOTkRlc2NlbnRQcmVidWlsdEUAAAAAAAAAUCsAABgAAAA7AAAAPAAAAD0AAAA+AAAAGK8AAFwrAABQqwAATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE45bm5kZXNjZW50Nk1hdHJpeElmRUVOU18xMHNoYXJlZF9wdHJJUzNfRTI3X19zaGFyZWRfcHRyX2RlZmF1bHRfZGVsZXRlSVMzX1MzX0VFTlNfOWFsbG9jYXRvcklTM19FRUVFAE5TdDNfXzIxMHNoYXJlZF9wdHJJTjlubmRlc2NlbnQ2TWF0cml4SWZFRUUyN19fc2hhcmVkX3B0cl9kZWZhdWx0X2RlbGV0ZUlTM19TM19FRQAAAAAAAFAsAAAYAAAAPwAAAEAAAABBAAAAQgAAABivAABcLAAAUKsAAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBOOW5uZGVzY2VudDlOTkRlc2NlbnRFTlNfMTBzaGFyZWRfcHRySVMyX0UyN19fc2hhcmVkX3B0cl9kZWZhdWx0X2RlbGV0ZUlTMl9TMl9FRU5TXzlhbGxvY2F0b3JJUzJfRUVFRQBOU3QzX18yMTBzaGFyZWRfcHRySU45bm5kZXNjZW50OU5ORGVzY2VudEVFMjdfX3NoYXJlZF9wdHJfZGVmYXVsdF9kZWxldGVJUzJfUzJfRUUAAAAAAABYLQAAQwAAAEQAAABFAAAARgAAADAAAAAxAAAAMgAAABivAABkLQAAcCoAAE4xOGtubmNvbGxlX25uZGVzY2VudDE3Tk5EZXNjZW50U2VhcmNoZXJFAAAAAAAAAKQtAABHAAAASAAAAEkAAAAYrwAAsC0AAOwlAABOOGtubmNvbGxlMTNWcHRyZWVCdWlsZGVySTI4SGFsZlNxdWFyZWRFdWNsaWRlYW5EaXN0YW5jZU5TXzEyU2ltcGxlTWF0cml4SWlpZkVFZkVFAAAAAAAAIC4AAEoAAABLAAAATAAAAE0AAABOAAAAGK8AACwuAAB0JgAATjhrbm5jb2xsZTE0VnB0cmVlUHJlYnVpbHRJMjhIYWxmU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlaWlmZkVFAAAAAACQLgAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQAAABivAACcLgAAcCoAAE44a25uY29sbGUxNFZwdHJlZVNlYXJjaGVySTI4SGFsZlNxdWFyZWRFdWNsaWRlYW5EaXN0YW5jZWlpZmZFRQAAAAAA8C4AAEcAAABWAAAAVwAAABivAAD8LgAA7CUAAE44a25uY29sbGUxM1ZwdHJlZUJ1aWxkZXJJTlNfMTdFdWNsaWRlYW5EaXN0YW5jZUVOU18xMlNpbXBsZU1hdHJpeElpaWZFRWZFRQAAAAAAZC8AAFgAAABZAAAAWgAAAFsAAABcAAAAGK8AAHAvAAB0JgAATjhrbm5jb2xsZTE0VnB0cmVlUHJlYnVpbHRJTlNfMTdFdWNsaWRlYW5EaXN0YW5jZUVpaWZmRUUAAAAAAAAAANAvAABdAAAAXgAAAF8AAABgAAAAYQAAAGIAAABjAAAAGK8AANwvAABwKgAATjhrbm5jb2xsZTE0VnB0cmVlU2VhcmNoZXJJTlNfMTdFdWNsaWRlYW5EaXN0YW5jZUVpaWZmRUUAAAAAAAAAAEQwAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAAAYrwAAUDAAAMQwAABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laMjN1bWFwX2NvbnRleHRfY3JlYXRlX2YzMkUzJF8wTlNfOWFsbG9jYXRvcklTMl9FRUZQTjdobnN3bGliMTRTcGFjZUludGVyZmFjZUlmRUVpRUVFAAAAAPCuAADMMAAATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRlBON2huc3dsaWIxNFNwYWNlSW50ZXJmYWNlSWZFRWlFRUUAAAAAAAAoMQAAbQAAAG4AAABvAAAAFgAA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A/T//05TdDNfXzIxM2Jhc2ljX2lzdHJlYW1Jd05TXzExY2hhcl90cmFpdHNJd0VFRUUAAHSvAAAQeQAAAAAAAAEAAAA8eAAAA/T//05TdDNfXzIxM2Jhc2ljX29zdHJlYW1Jd05TXzExY2hhcl90cmFpdHNJd0VFRUUAABivAABMeQAAwHYAAE5TdDNfXzIxNWJhc2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAAAAQAAAAAAAAACAegAA0AAAANEAAAA4AAAA+P///4B6AADSAAAA0wAAAMD////A////gHoAANQAAADVAAAAnHkAAAB6AAA8egAAUHoAAGR6AAB4egAAKHoAABR6AADEeQAAsHkAAEAAAAAAAAAA3HcAAJ8AAACgAAAAOAAAAPj////cdwAAoQAAAKIAAADA////wP///9x3AACjAAAApAAAAEAAAAAAAAAA/HYAAJcAAACYAAAAwP///8D////8dgAAmQAAAJoAAAA4AAAAAAAAAER3AACbAAAAnAAAAMj////I////RHcAAJ0AAACeAAAAGK8AAIx6AADcdwAATlN0M19fMjE4YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUAAAAAaAAAAAAAAAA0ewAA1gAAANcAAACY////mP///zR7AADYAAAA2QAAAOB6AAAYewAALHsAAPR6AABoAAAAAAAAAER3AACbAAAAnAAAAJj///+Y////RHcAAJ0AAACeAAAAGK8AAEB7AABEdwAATlN0M19fMjE0YmFzaWNfb2ZzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFRUUAGK8AAHx7AADAdgAATlN0M19fMjEzYmFzaWNfZmlsZWJ1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQAAAAAAALx7AADaAAAA2wAAAPCuAADEewAATlN0M19fMjhpb3NfYmFzZUUAAACIsQAAGLIAALCyAEHw9wELI94SBJUAAAAA////////////////8HsAABQAAABDLlVURi04AEHA+AELAgR8AEHg+AEL4AQCAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAAbH0AAIkAAADfAAAA4AAAAIwAAACNAAAAjgAAAI8AAACQAAAAkQAAAOEAAADiAAAA4wAAAJUAAACWAAAAGK8AAHh9AADAdgAATlN0M19fMjEwX19zdGRpbmJ1ZkljRUUAAAAAANB9AACJAAAA5AAAAOUAAACMAAAAjQAAAI4AAADmAAAAkAAAAJEAAACSAAAAkwAAAJQAAADnAAAA6AAAABivAADcfQAAwHYAAE5TdDNfXzIxMV9fc3Rkb3V0YnVmSWNFRQAAAAAAAAAAOH4AAKUAAADpAAAA6gAAAKgAAACpAAAAqgAAAKsAAACsAAAArQAAAOsAAADsAAAA7QAAALEAAACyAAAAGK8AAER+AAB0eAAATlN0M19fMjEwX19zdGRpbmJ1Zkl3RUUAAAAAAJx+AAClAAAA7gAAAO8AAACoAAAAqQAAAKoAAADwAAAArAAAAK0AAACuAAAArwAAALAAAADxAAAA8gAAABivAACofgAAdHgAAE5TdDNfXzIxMV9fc3Rkb3V0YnVmSXdFRQBB0P0BC6ED0XSeAFedvSqAcFIP//8+JwoAAABkAAAA6AMAABAnAACghgEAQEIPAICWmAAA4fUFGAAAADUAAABxAAAAa////877//+Sv///AAAAAAAAAAD/////////////////////////////////////////////////////////////////AAECAwQFBgcICf////////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////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UwAAAGUAAABwAAAAAAAAAE8AAABjAAAAdAAAAAAAAABOAAAAbwAAAHYAAAAAAAAARAAAAGUAAABjAAAAAAAAAEEAAABNAAAAAAAAAFAAAABNAEHU1QILsQHAnwAAoAEAAKEBAACiAQAAowEAAKQBAAClAQAApgEAAAAAAACwoAAAsAEAALEBAACyAQAAswEAALQBAAC1AQAAtgEAAAAAAAAsqwAAGAAAAPkBAAD6AQAA8K4AADSrAABOU3QzX18yMTRfX3NoYXJlZF9jb3VudEUAAAAAdK8AAGirAAAAAAAAAQAAACyrAAAAAAAATlN0M19fMjE5X19zaGFyZWRfd2Vha19jb3VudEUAQZTXAgvmAgoAAABkAAAA6AMAABAnAACghgEAQEIPAICWmAAA4fUFAMqaOwAAAAAAAAAAMDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTkAAAAAAAAAAAL/AARkACAAAAT//xAAAQABAAEA//8B/wH//////wH/Af8B/wH/Af8B/wH/Af//////Cv8gAP//A/8B/wT/HgAAAQX//////2MAAAhjAOgDAgAAAP//////AAAAAf8B//////////////8AQYnaAgsBBABBltoCC0QB/wH//////wABIAAEAIAAAAj//wH/Af////////8B/wb/B/8I/wn//////7wCvAIBAP//AQABAP//AAD//////////wBB6toCCwEUAEGK2wILHv//AQAK////////////Af8B/wAAAAAAAAH/Af8B/wBButsCC0gB/wAAAAAAAAH/Af8BAAAAAQAAAAH//////wAAAAAB////AAAAAP////////////8oAAr//////wEACv////8A//////////8AQebcAguSBgH/Af///wEA//////////////////8K//////8M/w3/AAAYrwAAlK4AAGSxAABOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQAAAAAYrwAAxK4AAIiuAABOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAAAAAAAAAuK4AAP0BAAD+AQAA/wEAAAACAAABAgAAAgIAAAMCAAAEAgAAAAAAADivAAD9AQAABQIAAP8BAAAAAgAAAQIAAAYCAAAHAgAACAIAABivAABErwAAuK4AAE4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRQAAAAAAAAAAlK8AAP0BAAAJAgAA/wEAAAACAAABAgAACgIAAAsCAAAMAgAAGK8AAKCvAAC4rgAATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQAAAAAAAAAcsAAAAgAAAA0CAAAOAgAAAAAAADiwAAACAAAADwIAABACAAAAAAAABLAAAAIAAAARAgAAEgIAAPCuAAAMsAAAU3Q5ZXhjZXB0aW9uAAAAABivAAAosAAABLAAAFN0OWJhZF9hbGxvYwAAAAAYrwAARLAAABywAABTdDIwYmFkX2FycmF5X25ld19sZW5ndGgAAAAAAAAAAIiwAAABAAAAEwIAABQCAAAAAAAARLEAAAQAAAAVAgAAFgIAABivAACUsAAABLAAAFN0MTFsb2dpY19lcnJvcgAAAAAAuLAAAAEAAAAXAgAAFAIAABivAADEsAAAiLAAAFN0MTZpbnZhbGlkX2FyZ3VtZW50AAAAAAAAAADwsAAAAQAAABgCAAAUAgAAGK8AAPywAACIsAAAU3QxMmxlbmd0aF9lcnJvcgAAAAAAAAAAJLEAAAEAAAAZAgAAFAIAABivAAAwsQAAiLAAAFN0MTJvdXRfb2ZfcmFuZ2UAAAAAGK8AAFCxAAAEsAAAU3QxM3J1bnRpbWVfZXJyb3IAAADwrgAAbLEAAFN0OXR5cGVfaW5mbwBBgOMCCwmwzQEAAAAAAAkAQZTjAgsBhwBBqOMCCxKGAAAAAAAAAIQAAADYuAAAAAQAQdTjAgsE/////wBBmOQCCwEFAEGk5AILAdwAQbzkAgsOhQAAAN0AAADovAAAAAQAQdTkAgsBAQBB5OQCCwX/////CgBBqOUCCwkYsgAAAAAAAAUAQbzlAgsBhwBB1OUCCwqFAAAAhAAAAPDAAEHs5QILAQIAQfzlAgsI//////////8AQcDmAgsisLIAAAAgAAAlbS8lZC8leQAAAAglSDolTTolUwAAAAj8AQ==")}function rA(l){if(ArrayBuffer.isView(l))return l;if(l==AA&&Q)return new Uint8Array(Q);throw"both async and sync fetching of the wasm failed"}async function CA(l){return rA(l)}async function cA(l,f){try{var k=await CA(l),b=await WebAssembly.instantiate(k,f);return b}catch(eA){r(`failed to asynchronously prepare wasm: ${eA}`),tA(eA)}}async function uA(l,f,k){return cA(f,k)}function v(){return{a:iI}}async function x(){function l(EA,DA){return Tg=EA.exports,c=Tg.r,F(),mg(Tg),P(),Tg}z();function f(EA){return l(EA.instance)}var k=v();if(e.instantiateWasm)return new Promise((EA,DA)=>{e.instantiateWasm(k,(MA,se)=>{EA(l(MA))})});AA??=iA();var b=await uA(Q,AA,k),eA=f(b);return eA}var $=l=>{for(;l.length>0;)l.shift()(e)},W=[],nA=l=>W.push(l),xA=[],RA=l=>xA.push(l),vA=l=>{for(var f,k,b=0,eA=0,EA=l.length,DA=new Uint8Array((EA*3>>2)-(l[EA-2]=="=")-(l[EA-1]=="="));b>4,DA[eA+1]=f<<4|k>>2,DA[eA+2]=k<<6|cg[l.charCodeAt(b+3)];return DA},ie=typeof TextDecoder<"u"?new TextDecoder:void 0,kA=(l,f,k,b)=>{for(var eA=f+k;l[f]&&!(f>=eA);)++f;return f},X=(l,f=0,k,b)=>{var eA=kA(l,f,k);if(eA-f>16&&l.buffer&&ie)return ie.decode(l.subarray(f,eA));for(var EA="";f>10,56320|me&1023)}}return EA},q=(l,f,k)=>l?X(L,l,f):"",wA=(l,f,k,b)=>tA(`Assertion failed: ${q(l)}, at: `+[f?q(f):"unknown filename",k,b?q(b):"unknown function"]);class LA{constructor(f){this.excPtr=f,this.ptr=f-24}set_type(f){_[this.ptr+4>>2]=f}get_type(){return _[this.ptr+4>>2]}set_destructor(f){_[this.ptr+8>>2]=f}get_destructor(){return _[this.ptr+8>>2]}set_caught(f){f=f?1:0,p[this.ptr+12]=f}get_caught(){return p[this.ptr+12]!=0}set_rethrown(f){f=f?1:0,p[this.ptr+13]=f}get_rethrown(){return p[this.ptr+13]!=0}init(f,k){this.set_adjusted_ptr(0),this.set_type(f),this.set_destructor(k)}set_adjusted_ptr(f){_[this.ptr+16>>2]=f}get_adjusted_ptr(){return _[this.ptr+16>>2]}}var JA=0,GA=(l,f,k)=>{var b=new LA(l);throw b.init(f,k),JA=l,JA},fA=()=>{var l=u[+wg.varargs>>2];return wg.varargs+=4,l},_A=fA,dA={isAbs:l=>l.charAt(0)==="/",splitPath:l=>{var f=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return f.exec(l).slice(1)},normalizeArray:(l,f)=>{for(var k=0,b=l.length-1;b>=0;b--){var eA=l[b];eA==="."?l.splice(b,1):eA===".."?(l.splice(b,1),k++):k&&(l.splice(b,1),k--)}if(f)for(;k;k--)l.unshift("..");return l},normalize:l=>{var f=dA.isAbs(l),k=l.slice(-1)==="/";return l=dA.normalizeArray(l.split("/").filter(b=>!!b),!f).join("/"),!l&&!f&&(l="."),l&&k&&(l+="/"),(f?"/":"")+l},dirname:l=>{var f=dA.splitPath(l),k=f[0],b=f[1];return!k&&!b?".":(b&&(b=b.slice(0,-1)),k+b)},basename:l=>l&&l.match(/([^\/]+|\/)\/*$/)[1],join:(...l)=>dA.normalize(l.join("/")),join2:(l,f)=>dA.normalize(l+"/"+f)},YA=()=>l=>crypto.getRandomValues(l),HA=l=>{(HA=YA())(l)},Ae={resolve:(...l)=>{for(var f="",k=!1,b=l.length-1;b>=-1&&!k;b--){var eA=b>=0?l[b]:U.cwd();if(typeof eA!="string")throw new TypeError("Arguments to path.resolve must be strings");if(!eA)return"";f=eA+"/"+f,k=dA.isAbs(eA)}return f=dA.normalizeArray(f.split("/").filter(EA=>!!EA),!k).join("/"),(k?"/":"")+f||"."},relative:(l,f)=>{l=Ae.resolve(l).slice(1),f=Ae.resolve(f).slice(1);function k(me){for(var ve=0;ve=0&&me[Ze]==="";Ze--);return ve>Ze?[]:me.slice(ve,Ze-ve+1)}for(var b=k(l.split("/")),eA=k(f.split("/")),EA=Math.min(b.length,eA.length),DA=EA,MA=0;MA{for(var f=0,k=0;k=55296&&b<=57343?(f+=4,++k):f+=3}return f},$A=(l,f,k,b)=>{if(!(b>0))return 0;for(var eA=k,EA=k+b-1,DA=0;DA=EA)break;f[k++]=MA}else if(MA<=2047){if(k+1>=EA)break;f[k++]=192|MA>>6,f[k++]=128|MA&63}else if(MA<=65535){if(k+2>=EA)break;f[k++]=224|MA>>12,f[k++]=128|MA>>6&63,f[k++]=128|MA&63}else{if(k+3>=EA)break;f[k++]=240|MA>>18,f[k++]=128|MA>>12&63,f[k++]=128|MA>>6&63,f[k++]=128|MA&63,DA++}}return f[k]=0,k-eA},WA=(l,f,k)=>{var b=re(l)+1,eA=new Array(b),EA=$A(l,eA,0,eA.length);return eA.length=EA,eA},Ce=()=>{if(!SA.length){var l=null;if(typeof window<"u"&&typeof window.prompt=="function"&&(l=window.prompt("Input: "),l!==null&&(l+=` `)),!l)return null;SA=WA(l)}return SA.shift()},ee={ttys:[],init(){},shutdown(){},register(l,f){ee.ttys[l]={input:[],output:[],ops:f},U.registerDevice(l,ee.stream_ops)},stream_ops:{open(l){var f=ee.ttys[l.node.rdev];if(!f)throw new U.ErrnoError(43);l.tty=f,l.seekable=!1},close(l){l.tty.ops.fsync(l.tty)},fsync(l){l.tty.ops.fsync(l.tty)},read(l,f,k,b,eA){if(!l.tty||!l.tty.ops.get_char)throw new U.ErrnoError(60);for(var EA=0,DA=0;DA0&&(C(X(l.output)),l.output=[])},ioctl_tcgets(l){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(l,f,k){return 0},ioctl_tiocgwinsz(l){return[24,80]}},default_tty1_ops:{put_char(l,f){f===null||f===10?(r(X(l.output)),l.output=[]):f!=0&&l.output.push(f)},fsync(l){l.output?.length>0&&(r(X(l.output)),l.output=[])}}},oe=l=>{tA()},TA={ops_table:null,mount(l){return TA.createNode(null,"/",16895,0)},createNode(l,f,k,b){if(U.isBlkdev(k)||U.isFIFO(k))throw new U.ErrnoError(63);TA.ops_table||={dir:{node:{getattr:TA.node_ops.getattr,setattr:TA.node_ops.setattr,lookup:TA.node_ops.lookup,mknod:TA.node_ops.mknod,rename:TA.node_ops.rename,unlink:TA.node_ops.unlink,rmdir:TA.node_ops.rmdir,readdir:TA.node_ops.readdir,symlink:TA.node_ops.symlink},stream:{llseek:TA.stream_ops.llseek}},file:{node:{getattr:TA.node_ops.getattr,setattr:TA.node_ops.setattr},stream:{llseek:TA.stream_ops.llseek,read:TA.stream_ops.read,write:TA.stream_ops.write,mmap:TA.stream_ops.mmap,msync:TA.stream_ops.msync}},link:{node:{getattr:TA.node_ops.getattr,setattr:TA.node_ops.setattr,readlink:TA.node_ops.readlink},stream:{}},chrdev:{node:{getattr:TA.node_ops.getattr,setattr:TA.node_ops.setattr},stream:U.chrdev_stream_ops}};var eA=U.createNode(l,f,k,b);return U.isDir(eA.mode)?(eA.node_ops=TA.ops_table.dir.node,eA.stream_ops=TA.ops_table.dir.stream,eA.contents={}):U.isFile(eA.mode)?(eA.node_ops=TA.ops_table.file.node,eA.stream_ops=TA.ops_table.file.stream,eA.usedBytes=0,eA.contents=null):U.isLink(eA.mode)?(eA.node_ops=TA.ops_table.link.node,eA.stream_ops=TA.ops_table.link.stream):U.isChrdev(eA.mode)&&(eA.node_ops=TA.ops_table.chrdev.node,eA.stream_ops=TA.ops_table.chrdev.stream),eA.atime=eA.mtime=eA.ctime=Date.now(),l&&(l.contents[f]=eA,l.atime=l.mtime=l.ctime=eA.atime),eA},getFileDataAsTypedArray(l){return l.contents?l.contents.subarray?l.contents.subarray(0,l.usedBytes):new Uint8Array(l.contents):new Uint8Array(0)},expandFileStorage(l,f){var k=l.contents?l.contents.length:0;if(!(k>=f)){var b=1024*1024;f=Math.max(f,k*(k>>0),k!=0&&(f=Math.max(f,256));var eA=l.contents;l.contents=new Uint8Array(f),l.usedBytes>0&&l.contents.set(eA.subarray(0,l.usedBytes),0)}},resizeFileStorage(l,f){if(l.usedBytes!=f)if(f==0)l.contents=null,l.usedBytes=0;else{var k=l.contents;l.contents=new Uint8Array(f),k&&l.contents.set(k.subarray(0,Math.min(f,l.usedBytes))),l.usedBytes=f}},node_ops:{getattr(l){var f={};return f.dev=U.isChrdev(l.mode)?l.id:1,f.ino=l.id,f.mode=l.mode,f.nlink=1,f.uid=0,f.gid=0,f.rdev=l.rdev,U.isDir(l.mode)?f.size=4096:U.isFile(l.mode)?f.size=l.usedBytes:U.isLink(l.mode)?f.size=l.link.length:f.size=0,f.atime=new Date(l.atime),f.mtime=new Date(l.mtime),f.ctime=new Date(l.ctime),f.blksize=4096,f.blocks=Math.ceil(f.size/f.blksize),f},setattr(l,f){for(const k of["mode","atime","mtime","ctime"])f[k]!=null&&(l[k]=f[k]);f.size!==void 0&&TA.resizeFileStorage(l,f.size)},lookup(l,f){throw TA.doesNotExistError||(TA.doesNotExistError=new U.ErrnoError(44),TA.doesNotExistError.stack=""),TA.doesNotExistError},mknod(l,f,k,b){return TA.createNode(l,f,k,b)},rename(l,f,k){var b;try{b=U.lookupNode(f,k)}catch{}if(b){if(U.isDir(l.mode))for(var eA in b.contents)throw new U.ErrnoError(55);U.hashRemoveNode(b)}delete l.parent.contents[l.name],f.contents[k]=l,l.name=k,f.ctime=f.mtime=l.parent.ctime=l.parent.mtime=Date.now()},unlink(l,f){delete l.contents[f],l.ctime=l.mtime=Date.now()},rmdir(l,f){var k=U.lookupNode(l,f);for(var b in k.contents)throw new U.ErrnoError(55);delete l.contents[f],l.ctime=l.mtime=Date.now()},readdir(l){return[".","..",...Object.keys(l.contents)]},symlink(l,f,k){var b=TA.createNode(l,f,41471,0);return b.link=k,b},readlink(l){if(!U.isLink(l.mode))throw new U.ErrnoError(28);return l.link}},stream_ops:{read(l,f,k,b,eA){var EA=l.node.contents;if(eA>=l.node.usedBytes)return 0;var DA=Math.min(l.node.usedBytes-eA,b);if(DA>8&&EA.subarray)f.set(EA.subarray(eA,eA+DA),k);else for(var MA=0;MA0||k+f{var f={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},k=f[l];if(typeof k>"u")throw new Error(`Unknown file open mode: ${l}`);return k},Je=(l,f)=>{var k=0;return l&&(k|=365),f&&(k|=146),k},pe=async l=>{var f=await s(l);return new Uint8Array(f)},fg=(...l)=>U.createDataFile(...l),zg=[],qg=async(l,f)=>{typeof Browser<"u"&&Browser.init();for(var k of zg)if(k.canHandle(f))return k.handle(l,f);return l},xg=async(l,f,k,b,eA,EA,DA,MA)=>{var se=f?Ae.resolve(dA.join2(l,f)):l;z();try{var me=k;typeof k=="string"&&(me=await pe(k)),me=await qg(me,se),MA?.(),EA||fg(l,f,me,b,eA,DA)}finally{P()}},rg=(l,f,k,b,eA,EA,DA,MA,se,me)=>{xg(l,f,k,b,eA,MA,se,me).then(EA).catch(DA)},U={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class{name="ErrnoError";constructor(l){this.errno=l}},FSStream:class{shared={};get object(){return this.node}set object(l){this.node=l}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(l){this.shared.flags=l}get position(){return this.shared.position}set position(l){this.shared.position=l}},FSNode:class{node_ops={};stream_ops={};readMode=365;writeMode=146;mounted=null;constructor(l,f,k,b){l||(l=this),this.parent=l,this.mount=l.mount,this.id=U.nextInode++,this.name=f,this.mode=k,this.rdev=b,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(l){l?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(l){l?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return U.isDir(this.mode)}get isDevice(){return U.isChrdev(this.mode)}},lookupPath(l,f={}){if(!l)throw new U.ErrnoError(44);f.follow_mount??=!0,dA.isAbs(l)||(l=U.cwd()+"/"+l);A:for(var k=0;k<40;k++){for(var b=l.split("/").filter(me=>!!me),eA=U.root,EA="/",DA=0;DA>>0)%U.nameTable.length},hashAddNode(l){var f=U.hashName(l.parent.id,l.name);l.name_next=U.nameTable[f],U.nameTable[f]=l},hashRemoveNode(l){var f=U.hashName(l.parent.id,l.name);if(U.nameTable[f]===l)U.nameTable[f]=l.name_next;else for(var k=U.nameTable[f];k;){if(k.name_next===l){k.name_next=l.name_next;break}k=k.name_next}},lookupNode(l,f){var k=U.mayLookup(l);if(k)throw new U.ErrnoError(k);for(var b=U.hashName(l.id,f),eA=U.nameTable[b];eA;eA=eA.name_next){var EA=eA.name;if(eA.parent.id===l.id&&EA===f)return eA}return U.lookup(l,f)},createNode(l,f,k,b){var eA=new U.FSNode(l,f,k,b);return U.hashAddNode(eA),eA},destroyNode(l){U.hashRemoveNode(l)},isRoot(l){return l===l.parent},isMountpoint(l){return!!l.mounted},isFile(l){return(l&61440)===32768},isDir(l){return(l&61440)===16384},isLink(l){return(l&61440)===40960},isChrdev(l){return(l&61440)===8192},isBlkdev(l){return(l&61440)===24576},isFIFO(l){return(l&61440)===4096},isSocket(l){return(l&49152)===49152},flagsToPermissionString(l){var f=["r","w","rw"][l&3];return l&512&&(f+="w"),f},nodePermissions(l,f){return U.ignorePermissions?0:f.includes("r")&&!(l.mode&292)||f.includes("w")&&!(l.mode&146)||f.includes("x")&&!(l.mode&73)?2:0},mayLookup(l){if(!U.isDir(l.mode))return 54;var f=U.nodePermissions(l,"x");return f||(l.node_ops.lookup?0:2)},mayCreate(l,f){if(!U.isDir(l.mode))return 54;try{var k=U.lookupNode(l,f);return 20}catch{}return U.nodePermissions(l,"wx")},mayDelete(l,f,k){var b;try{b=U.lookupNode(l,f)}catch(EA){return EA.errno}var eA=U.nodePermissions(l,"wx");if(eA)return eA;if(k){if(!U.isDir(b.mode))return 54;if(U.isRoot(b)||U.getPath(b)===U.cwd())return 10}else if(U.isDir(b.mode))return 31;return 0},mayOpen(l,f){return l?U.isLink(l.mode)?32:U.isDir(l.mode)&&(U.flagsToPermissionString(f)!=="r"||f&576)?31:U.nodePermissions(l,U.flagsToPermissionString(f)):44},checkOpExists(l,f){if(!l)throw new U.ErrnoError(f);return l},MAX_OPEN_FDS:4096,nextfd(){for(var l=0;l<=U.MAX_OPEN_FDS;l++)if(!U.streams[l])return l;throw new U.ErrnoError(33)},getStreamChecked(l){var f=U.getStream(l);if(!f)throw new U.ErrnoError(8);return f},getStream:l=>U.streams[l],createStream(l,f=-1){return l=Object.assign(new U.FSStream,l),f==-1&&(f=U.nextfd()),l.fd=f,U.streams[f]=l,l},closeStream(l){U.streams[l]=null},dupStream(l,f=-1){var k=U.createStream(l,f);return k.stream_ops?.dup?.(k),k},doSetAttr(l,f,k){var b=l?.stream_ops.setattr,eA=b?l:f;b??=f.node_ops.setattr,U.checkOpExists(b,63),b(eA,k)},chrdev_stream_ops:{open(l){var f=U.getDevice(l.node.rdev);l.stream_ops=f.stream_ops,l.stream_ops.open?.(l)},llseek(){throw new U.ErrnoError(70)}},major:l=>l>>8,minor:l=>l&255,makedev:(l,f)=>l<<8|f,registerDevice(l,f){U.devices[l]={stream_ops:f}},getDevice:l=>U.devices[l],getMounts(l){for(var f=[],k=[l];k.length;){var b=k.pop();f.push(b),k.push(...b.mounts)}return f},syncfs(l,f){typeof l=="function"&&(f=l,l=!1),U.syncFSRequests++,U.syncFSRequests>1&&r(`warning: ${U.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var k=U.getMounts(U.root.mount),b=0;function eA(DA){return U.syncFSRequests--,f(DA)}function EA(DA){if(DA)return EA.errored?void 0:(EA.errored=!0,eA(DA));++b>=k.length&&eA(null)}k.forEach(DA=>{if(!DA.type.syncfs)return EA(null);DA.type.syncfs(DA,l,EA)})},mount(l,f,k){var b=k==="/",eA=!k,EA;if(b&&U.root)throw new U.ErrnoError(10);if(!b&&!eA){var DA=U.lookupPath(k,{follow_mount:!1});if(k=DA.path,EA=DA.node,U.isMountpoint(EA))throw new U.ErrnoError(10);if(!U.isDir(EA.mode))throw new U.ErrnoError(54)}var MA={type:l,opts:f,mountpoint:k,mounts:[]},se=l.mount(MA);return se.mount=MA,MA.root=se,b?U.root=se:EA&&(EA.mounted=MA,EA.mount&&EA.mount.mounts.push(MA)),se},unmount(l){var f=U.lookupPath(l,{follow_mount:!1});if(!U.isMountpoint(f.node))throw new U.ErrnoError(28);var k=f.node,b=k.mounted,eA=U.getMounts(b);Object.keys(U.nameTable).forEach(DA=>{for(var MA=U.nameTable[DA];MA;){var se=MA.name_next;eA.includes(MA.mount)&&U.destroyNode(MA),MA=se}}),k.mounted=null;var EA=k.mount.mounts.indexOf(b);k.mount.mounts.splice(EA,1)},lookup(l,f){return l.node_ops.lookup(l,f)},mknod(l,f,k){var b=U.lookupPath(l,{parent:!0}),eA=b.node,EA=dA.basename(l);if(!EA)throw new U.ErrnoError(28);if(EA==="."||EA==="..")throw new U.ErrnoError(20);var DA=U.mayCreate(eA,EA);if(DA)throw new U.ErrnoError(DA);if(!eA.node_ops.mknod)throw new U.ErrnoError(63);return eA.node_ops.mknod(eA,EA,f,k)},statfs(l){return U.statfsNode(U.lookupPath(l,{follow:!0}).node)},statfsStream(l){return U.statfsNode(l.node)},statfsNode(l){var f={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:U.nextInode,ffree:U.nextInode-1,fsid:42,flags:2,namelen:255};return l.node_ops.statfs&&Object.assign(f,l.node_ops.statfs(l.mount.opts.root)),f},create(l,f=438){return f&=4095,f|=32768,U.mknod(l,f,0)},mkdir(l,f=511){return f&=1023,f|=16384,U.mknod(l,f,0)},mkdirTree(l,f){var k=l.split("/"),b="";for(var eA of k)if(eA){(b||dA.isAbs(l))&&(b+="/"),b+=eA;try{U.mkdir(b,f)}catch(EA){if(EA.errno!=20)throw EA}}},mkdev(l,f,k){return typeof k>"u"&&(k=f,f=438),f|=8192,U.mknod(l,f,k)},symlink(l,f){if(!Ae.resolve(l))throw new U.ErrnoError(44);var k=U.lookupPath(f,{parent:!0}),b=k.node;if(!b)throw new U.ErrnoError(44);var eA=dA.basename(f),EA=U.mayCreate(b,eA);if(EA)throw new U.ErrnoError(EA);if(!b.node_ops.symlink)throw new U.ErrnoError(63);return b.node_ops.symlink(b,eA,l)},rename(l,f){var k=dA.dirname(l),b=dA.dirname(f),eA=dA.basename(l),EA=dA.basename(f),DA,MA,se;if(DA=U.lookupPath(l,{parent:!0}),MA=DA.node,DA=U.lookupPath(f,{parent:!0}),se=DA.node,!MA||!se)throw new U.ErrnoError(44);if(MA.mount!==se.mount)throw new U.ErrnoError(75);var me=U.lookupNode(MA,eA),ve=Ae.relative(l,b);if(ve.charAt(0)!==".")throw new U.ErrnoError(28);if(ve=Ae.relative(f,k),ve.charAt(0)!==".")throw new U.ErrnoError(55);var Ze;try{Ze=U.lookupNode(se,EA)}catch{}if(me!==Ze){var BA=U.isDir(me.mode),N=U.mayDelete(MA,eA,BA);if(N)throw new U.ErrnoError(N);if(N=Ze?U.mayDelete(se,EA,BA):U.mayCreate(se,EA),N)throw new U.ErrnoError(N);if(!MA.node_ops.rename)throw new U.ErrnoError(63);if(U.isMountpoint(me)||Ze&&U.isMountpoint(Ze))throw new U.ErrnoError(10);if(se!==MA&&(N=U.nodePermissions(MA,"w"),N))throw new U.ErrnoError(N);U.hashRemoveNode(me);try{MA.node_ops.rename(me,se,EA),me.parent=se}catch(H){throw H}finally{U.hashAddNode(me)}}},rmdir(l){var f=U.lookupPath(l,{parent:!0}),k=f.node,b=dA.basename(l),eA=U.lookupNode(k,b),EA=U.mayDelete(k,b,!0);if(EA)throw new U.ErrnoError(EA);if(!k.node_ops.rmdir)throw new U.ErrnoError(63);if(U.isMountpoint(eA))throw new U.ErrnoError(10);k.node_ops.rmdir(k,b),U.destroyNode(eA)},readdir(l){var f=U.lookupPath(l,{follow:!0}),k=f.node,b=U.checkOpExists(k.node_ops.readdir,54);return b(k)},unlink(l){var f=U.lookupPath(l,{parent:!0}),k=f.node;if(!k)throw new U.ErrnoError(44);var b=dA.basename(l),eA=U.lookupNode(k,b),EA=U.mayDelete(k,b,!1);if(EA)throw new U.ErrnoError(EA);if(!k.node_ops.unlink)throw new U.ErrnoError(63);if(U.isMountpoint(eA))throw new U.ErrnoError(10);k.node_ops.unlink(k,b),U.destroyNode(eA)},readlink(l){var f=U.lookupPath(l),k=f.node;if(!k)throw new U.ErrnoError(44);if(!k.node_ops.readlink)throw new U.ErrnoError(28);return k.node_ops.readlink(k)},stat(l,f){var k=U.lookupPath(l,{follow:!f}),b=k.node,eA=U.checkOpExists(b.node_ops.getattr,63);return eA(b)},fstat(l){var f=U.getStreamChecked(l),k=f.node,b=f.stream_ops.getattr,eA=b?f:k;return b??=k.node_ops.getattr,U.checkOpExists(b,63),b(eA)},lstat(l){return U.stat(l,!0)},doChmod(l,f,k,b){U.doSetAttr(l,f,{mode:k&4095|f.mode&-4096,ctime:Date.now(),dontFollow:b})},chmod(l,f,k){var b;if(typeof l=="string"){var eA=U.lookupPath(l,{follow:!k});b=eA.node}else b=l;U.doChmod(null,b,f,k)},lchmod(l,f){U.chmod(l,f,!0)},fchmod(l,f){var k=U.getStreamChecked(l);U.doChmod(k,k.node,f,!1)},doChown(l,f,k){U.doSetAttr(l,f,{timestamp:Date.now(),dontFollow:k})},chown(l,f,k,b){var eA;if(typeof l=="string"){var EA=U.lookupPath(l,{follow:!b});eA=EA.node}else eA=l;U.doChown(null,eA,b)},lchown(l,f,k){U.chown(l,f,k,!0)},fchown(l,f,k){var b=U.getStreamChecked(l);U.doChown(b,b.node,!1)},doTruncate(l,f,k){if(U.isDir(f.mode))throw new U.ErrnoError(31);if(!U.isFile(f.mode))throw new U.ErrnoError(28);var b=U.nodePermissions(f,"w");if(b)throw new U.ErrnoError(b);U.doSetAttr(l,f,{size:k,timestamp:Date.now()})},truncate(l,f){if(f<0)throw new U.ErrnoError(28);var k;if(typeof l=="string"){var b=U.lookupPath(l,{follow:!0});k=b.node}else k=l;U.doTruncate(null,k,f)},ftruncate(l,f){var k=U.getStreamChecked(l);if(f<0||(k.flags&2097155)===0)throw new U.ErrnoError(28);U.doTruncate(k,k.node,f)},utime(l,f,k){var b=U.lookupPath(l,{follow:!0}),eA=b.node,EA=U.checkOpExists(eA.node_ops.setattr,63);EA(eA,{atime:f,mtime:k})},open(l,f,k=438){if(l==="")throw new U.ErrnoError(44);f=typeof f=="string"?ke(f):f,f&64?k=k&4095|32768:k=0;var b,eA;if(typeof l=="object")b=l;else{eA=l.endsWith("/");var EA=U.lookupPath(l,{follow:!(f&131072),noent_okay:!0});b=EA.node,l=EA.path}var DA=!1;if(f&64)if(b){if(f&128)throw new U.ErrnoError(20)}else{if(eA)throw new U.ErrnoError(31);b=U.mknod(l,k|511,0),DA=!0}if(!b)throw new U.ErrnoError(44);if(U.isChrdev(b.mode)&&(f&=-513),f&65536&&!U.isDir(b.mode))throw new U.ErrnoError(54);if(!DA){var MA=U.mayOpen(b,f);if(MA)throw new U.ErrnoError(MA)}f&512&&!DA&&U.truncate(b,0),f&=-131713;var se=U.createStream({node:b,path:U.getPath(b),flags:f,seekable:!0,position:0,stream_ops:b.stream_ops,ungotten:[],error:!1});return se.stream_ops.open&&se.stream_ops.open(se),DA&&U.chmod(b,k&511),e.logReadFiles&&!(f&1)&&(l in U.readFiles||(U.readFiles[l]=1)),se},close(l){if(U.isClosed(l))throw new U.ErrnoError(8);l.getdents&&(l.getdents=null);try{l.stream_ops.close&&l.stream_ops.close(l)}catch(f){throw f}finally{U.closeStream(l.fd)}l.fd=null},isClosed(l){return l.fd===null},llseek(l,f,k){if(U.isClosed(l))throw new U.ErrnoError(8);if(!l.seekable||!l.stream_ops.llseek)throw new U.ErrnoError(70);if(k!=0&&k!=1&&k!=2)throw new U.ErrnoError(28);return l.position=l.stream_ops.llseek(l,f,k),l.ungotten=[],l.position},read(l,f,k,b,eA){if(b<0||eA<0)throw new U.ErrnoError(28);if(U.isClosed(l))throw new U.ErrnoError(8);if((l.flags&2097155)===1)throw new U.ErrnoError(8);if(U.isDir(l.node.mode))throw new U.ErrnoError(31);if(!l.stream_ops.read)throw new U.ErrnoError(28);var EA=typeof eA<"u";if(!EA)eA=l.position;else if(!l.seekable)throw new U.ErrnoError(70);var DA=l.stream_ops.read(l,f,k,b,eA);return EA||(l.position+=DA),DA},write(l,f,k,b,eA,EA){if(b<0||eA<0)throw new U.ErrnoError(28);if(U.isClosed(l))throw new U.ErrnoError(8);if((l.flags&2097155)===0)throw new U.ErrnoError(8);if(U.isDir(l.node.mode))throw new U.ErrnoError(31);if(!l.stream_ops.write)throw new U.ErrnoError(28);l.seekable&&l.flags&1024&&U.llseek(l,0,2);var DA=typeof eA<"u";if(!DA)eA=l.position;else if(!l.seekable)throw new U.ErrnoError(70);var MA=l.stream_ops.write(l,f,k,b,eA,EA);return DA||(l.position+=MA),MA},mmap(l,f,k,b,eA){if((b&2)!==0&&(eA&2)===0&&(l.flags&2097155)!==2)throw new U.ErrnoError(2);if((l.flags&2097155)===1)throw new U.ErrnoError(2);if(!l.stream_ops.mmap)throw new U.ErrnoError(43);if(!f)throw new U.ErrnoError(28);return l.stream_ops.mmap(l,f,k,b,eA)},msync(l,f,k,b,eA){return l.stream_ops.msync?l.stream_ops.msync(l,f,k,b,eA):0},ioctl(l,f,k){if(!l.stream_ops.ioctl)throw new U.ErrnoError(59);return l.stream_ops.ioctl(l,f,k)},readFile(l,f={}){if(f.flags=f.flags||0,f.encoding=f.encoding||"binary",f.encoding!=="utf8"&&f.encoding!=="binary")throw new Error(`Invalid encoding type "${f.encoding}"`);var k=U.open(l,f.flags),b=U.stat(l),eA=b.size,EA=new Uint8Array(eA);return U.read(k,EA,0,eA,0),f.encoding==="utf8"&&(EA=X(EA)),U.close(k),EA},writeFile(l,f,k={}){k.flags=k.flags||577;var b=U.open(l,k.flags,k.mode);if(typeof f=="string"&&(f=new Uint8Array(WA(f))),ArrayBuffer.isView(f))U.write(b,f,0,f.byteLength,void 0,k.canOwn);else throw new Error("Unsupported data type");U.close(b)},cwd:()=>U.currentPath,chdir(l){var f=U.lookupPath(l,{follow:!0});if(f.node===null)throw new U.ErrnoError(44);if(!U.isDir(f.node.mode))throw new U.ErrnoError(54);var k=U.nodePermissions(f.node,"x");if(k)throw new U.ErrnoError(k);U.currentPath=f.path},createDefaultDirectories(){U.mkdir("/tmp"),U.mkdir("/home"),U.mkdir("/home/web_user")},createDefaultDevices(){U.mkdir("/dev"),U.registerDevice(U.makedev(1,3),{read:()=>0,write:(b,eA,EA,DA,MA)=>DA,llseek:()=>0}),U.mkdev("/dev/null",U.makedev(1,3)),ee.register(U.makedev(5,0),ee.default_tty_ops),ee.register(U.makedev(6,0),ee.default_tty1_ops),U.mkdev("/dev/tty",U.makedev(5,0)),U.mkdev("/dev/tty1",U.makedev(6,0));var l=new Uint8Array(1024),f=0,k=()=>(f===0&&(HA(l),f=l.byteLength),l[--f]);U.createDevice("/dev","random",k),U.createDevice("/dev","urandom",k),U.mkdir("/dev/shm"),U.mkdir("/dev/shm/tmp")},createSpecialDirectories(){U.mkdir("/proc");var l=U.mkdir("/proc/self");U.mkdir("/proc/self/fd"),U.mount({mount(){var f=U.createNode(l,"fd",16895,73);return f.stream_ops={llseek:TA.stream_ops.llseek},f.node_ops={lookup(k,b){var eA=+b,EA=U.getStreamChecked(eA),DA={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>EA.path},id:eA+1};return DA.parent=DA,DA},readdir(){return Array.from(U.streams.entries()).filter(([k,b])=>b).map(([k,b])=>k.toString())}},f}},{},"/proc/self/fd")},createStandardStreams(l,f,k){l?U.createDevice("/dev","stdin",l):U.symlink("/dev/tty","/dev/stdin"),f?U.createDevice("/dev","stdout",null,f):U.symlink("/dev/tty","/dev/stdout"),k?U.createDevice("/dev","stderr",null,k):U.symlink("/dev/tty1","/dev/stderr"),U.open("/dev/stdin",0),U.open("/dev/stdout",1),U.open("/dev/stderr",1)},staticInit(){U.nameTable=new Array(4096),U.mount(TA,{},"/"),U.createDefaultDirectories(),U.createDefaultDevices(),U.createSpecialDirectories(),U.filesystems={MEMFS:TA}},init(l,f,k){U.initialized=!0,l??=e.stdin,f??=e.stdout,k??=e.stderr,U.createStandardStreams(l,f,k)},quit(){U.initialized=!1;for(var l of U.streams)l&&U.close(l)},findObject(l,f){var k=U.analyzePath(l,f);return k.exists?k.object:null},analyzePath(l,f){try{var k=U.lookupPath(l,{follow:!f});l=k.path}catch{}var b={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var k=U.lookupPath(l,{parent:!0});b.parentExists=!0,b.parentPath=k.path,b.parentObject=k.node,b.name=dA.basename(l),k=U.lookupPath(l,{follow:!f}),b.exists=!0,b.path=k.path,b.object=k.node,b.name=k.node.name,b.isRoot=k.path==="/"}catch(eA){b.error=eA.errno}return b},createPath(l,f,k,b){l=typeof l=="string"?l:U.getPath(l);for(var eA=f.split("/").reverse();eA.length;){var EA=eA.pop();if(EA){var DA=dA.join2(l,EA);try{U.mkdir(DA)}catch(MA){if(MA.errno!=20)throw MA}l=DA}}return DA},createFile(l,f,k,b,eA){var EA=dA.join2(typeof l=="string"?l:U.getPath(l),f),DA=Je(b,eA);return U.create(EA,DA)},createDataFile(l,f,k,b,eA,EA){var DA=f;l&&(l=typeof l=="string"?l:U.getPath(l),DA=f?dA.join2(l,f):l);var MA=Je(b,eA),se=U.create(DA,MA);if(k){if(typeof k=="string"){for(var me=new Array(k.length),ve=0,Ze=k.length;vethis.length-1||N<0)){var H=N%this.chunkSize,oA=N/this.chunkSize|0;return this.getter(oA)[H]}}setDataGetter(N){this.getter=N}cacheLength(){var N=new XMLHttpRequest;if(N.open("HEAD",k,!1),N.send(null),!(N.status>=200&&N.status<300||N.status===304))throw new Error("Couldn't load "+k+". Status: "+N.status);var H=Number(N.getResponseHeader("Content-length")),oA,sA=(oA=N.getResponseHeader("Accept-Ranges"))&&oA==="bytes",hA=(oA=N.getResponseHeader("Content-Encoding"))&&oA==="gzip",NA=1024*1024;sA||(NA=H);var zA=(ZA,VA)=>{if(ZA>VA)throw new Error("invalid range ("+ZA+", "+VA+") or no bytes requested!");if(VA>H-1)throw new Error("only "+H+" bytes available! programmer error!");var ce=new XMLHttpRequest;if(ce.open("GET",k,!1),H!==NA&&ce.setRequestHeader("Range","bytes="+ZA+"-"+VA),ce.responseType="arraybuffer",ce.overrideMimeType&&ce.overrideMimeType("text/plain; charset=x-user-defined"),ce.send(null),!(ce.status>=200&&ce.status<300||ce.status===304))throw new Error("Couldn't load "+k+". Status: "+ce.status);return ce.response!==void 0?new Uint8Array(ce.response||[]):WA(ce.responseText||"")},ge=this;ge.setDataGetter(ZA=>{var VA=ZA*NA,ce=(ZA+1)*NA-1;if(ce=Math.min(ce,H-1),typeof ge.chunks[ZA]>"u"&&(ge.chunks[ZA]=zA(VA,ce)),typeof ge.chunks[ZA]>"u")throw new Error("doXHR failed!");return ge.chunks[ZA]}),(hA||!H)&&(NA=H=1,H=this.getter(0).length,NA=H,C("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=H,this._chunkSize=NA,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<"u"){throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var DA,MA}else var MA={isDevice:!1,url:k};var se=U.createFile(l,f,MA,b,eA);MA.contents?se.contents=MA.contents:MA.url&&(se.contents=null,se.url=MA.url),Object.defineProperties(se,{usedBytes:{get:function(){return this.contents.length}}});var me={},ve=Object.keys(se.stream_ops);ve.forEach(BA=>{var N=se.stream_ops[BA];me[BA]=(...H)=>(U.forceLoadFile(se),N(...H))});function Ze(BA,N,H,oA,sA){var hA=BA.node.contents;if(sA>=hA.length)return 0;var NA=Math.min(hA.length-sA,oA);if(hA.slice)for(var zA=0;zA(U.forceLoadFile(se),Ze(BA,N,H,oA,sA)),me.mmap=(BA,N,H,oA,sA)=>{U.forceLoadFile(se);var hA=oe();if(!hA)throw new U.ErrnoError(48);return Ze(BA,p,hA,N,H),{ptr:hA,allocated:!0}},se.stream_ops=me,se}},wg={DEFAULT_POLLMASK:5,calculateAt(l,f,k){if(dA.isAbs(f))return f;var b;if(l===-100)b=U.cwd();else{var eA=wg.getStreamFromFD(l);b=eA.path}if(f.length==0){if(!k)throw new U.ErrnoError(44);return b}return b+"/"+f},writeStat(l,f){_[l>>2]=f.dev,_[l+4>>2]=f.mode,_[l+8>>2]=f.nlink,_[l+12>>2]=f.uid,_[l+16>>2]=f.gid,_[l+20>>2]=f.rdev,y[l+24>>3]=BigInt(f.size),u[l+32>>2]=4096,u[l+36>>2]=f.blocks;var k=f.atime.getTime(),b=f.mtime.getTime(),eA=f.ctime.getTime();return y[l+40>>3]=BigInt(Math.floor(k/1e3)),_[l+48>>2]=k%1e3*1e3*1e3,y[l+56>>3]=BigInt(Math.floor(b/1e3)),_[l+64>>2]=b%1e3*1e3*1e3,y[l+72>>3]=BigInt(Math.floor(eA/1e3)),_[l+80>>2]=eA%1e3*1e3*1e3,y[l+88>>3]=BigInt(f.ino),0},writeStatFs(l,f){_[l+4>>2]=f.bsize,_[l+60>>2]=f.bsize,y[l+8>>3]=BigInt(f.blocks),y[l+16>>3]=BigInt(f.bfree),y[l+24>>3]=BigInt(f.bavail),y[l+32>>3]=BigInt(f.files),y[l+40>>3]=BigInt(f.ffree),_[l+48>>2]=f.fsid,_[l+64>>2]=f.flags,_[l+56>>2]=f.namelen},doMsync(l,f,k,b,eA){if(!U.isFile(f.node.mode))throw new U.ErrnoError(43);if(b&2)return 0;var EA=L.slice(l,l+k);U.msync(f,EA,eA,k,b)},getStreamFromFD(l){var f=U.getStreamChecked(l);return f},varargs:void 0,getStr(l){var f=q(l);return f}};function xI(l,f,k){wg.varargs=k;try{var b=wg.getStreamFromFD(l);switch(f){case 0:{var eA=fA();if(eA<0)return-28;for(;U.streams[eA];)eA++;var EA;return EA=U.dupStream(b,eA),EA.fd}case 1:case 2:return 0;case 3:return b.flags;case 4:{var eA=fA();return b.flags|=eA,0}case 12:{var eA=_A(),DA=0;return w[eA+DA>>1]=2,0}case 13:case 14:return 0}return-28}catch(MA){if(typeof U>"u"||MA.name!=="ErrnoError")throw MA;return-MA.errno}}function fI(l,f,k){wg.varargs=k;try{var b=wg.getStreamFromFD(l);switch(f){case 21509:return b.tty?0:-59;case 21505:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcgets){var eA=b.tty.ops.ioctl_tcgets(b),EA=_A();u[EA>>2]=eA.c_iflag||0,u[EA+4>>2]=eA.c_oflag||0,u[EA+8>>2]=eA.c_cflag||0,u[EA+12>>2]=eA.c_lflag||0;for(var DA=0;DA<32;DA++)p[EA+DA+17]=eA.c_cc[DA]||0;return 0}return 0}case 21510:case 21511:case 21512:return b.tty?0:-59;case 21506:case 21507:case 21508:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tcsets){for(var EA=_A(),MA=u[EA>>2],se=u[EA+4>>2],me=u[EA+8>>2],ve=u[EA+12>>2],Ze=[],DA=0;DA<32;DA++)Ze.push(p[EA+DA+17]);return b.tty.ops.ioctl_tcsets(b.tty,f,{c_iflag:MA,c_oflag:se,c_cflag:me,c_lflag:ve,c_cc:Ze})}return 0}case 21519:{if(!b.tty)return-59;var EA=_A();return u[EA>>2]=0,0}case 21520:return b.tty?-28:-59;case 21537:case 21531:{var EA=_A();return U.ioctl(b,f,EA)}case 21523:{if(!b.tty)return-59;if(b.tty.ops.ioctl_tiocgwinsz){var BA=b.tty.ops.ioctl_tiocgwinsz(b.tty),EA=_A();w[EA>>1]=BA[0],w[EA+2>>1]=BA[1]}return 0}case 21524:return b.tty?0:-59;case 21515:return b.tty?0:-59;default:return-28}}catch(N){if(typeof U>"u"||N.name!=="ErrnoError")throw N;return-N.errno}}function AI(l,f,k,b){wg.varargs=b;try{f=wg.getStr(f),f=wg.calculateAt(l,f);var eA=b?fA():0;return U.open(f,k,eA).fd}catch(EA){if(typeof U>"u"||EA.name!=="ErrnoError")throw EA;return-EA.errno}}var he=()=>tA(""),EI=l=>l%4===0&&(l%100!==0||l%400===0),ze=[0,31,60,91,121,152,182,213,244,274,305,335],Ne=[0,31,59,90,120,151,181,212,243,273,304,334],lI=l=>{var f=EI(l.getFullYear()),k=f?ze:Ne,b=k[l.getMonth()]+l.getDate()-1;return b},R=9007199254740992,gA=-9007199254740992,j=l=>lR?NaN:Number(l);function IA(l,f){l=j(l);var k=new Date(l*1e3);u[f>>2]=k.getSeconds(),u[f+4>>2]=k.getMinutes(),u[f+8>>2]=k.getHours(),u[f+12>>2]=k.getDate(),u[f+16>>2]=k.getMonth(),u[f+20>>2]=k.getFullYear()-1900,u[f+24>>2]=k.getDay();var b=lI(k)|0;u[f+28>>2]=b,u[f+36>>2]=-(k.getTimezoneOffset()*60);var eA=new Date(k.getFullYear(),0,1),EA=new Date(k.getFullYear(),6,1).getTimezoneOffset(),DA=eA.getTimezoneOffset(),MA=(EA!=DA&&k.getTimezoneOffset()==Math.min(DA,EA))|0;u[f+32>>2]=MA}var aA=(l,f,k)=>$A(l,L,f,k),yA=(l,f,k,b)=>{var eA=new Date().getFullYear(),EA=new Date(eA,0,1),DA=new Date(eA,6,1),MA=EA.getTimezoneOffset(),se=DA.getTimezoneOffset(),me=Math.max(MA,se);_[l>>2]=me*60,u[f>>2]=+(MA!=se);var ve=N=>{var H=N>=0?"-":"+",oA=Math.abs(N),sA=String(Math.floor(oA/60)).padStart(2,"0"),hA=String(oA%60).padStart(2,"0");return`UTC${H}${sA}${hA}`},Ze=ve(MA),BA=ve(se);seperformance.now(),ae=()=>Date.now(),Ee=l=>l>=0&&l<=3;function Ie(l,f,k){if(!Ee(l))return 28;var b;l===0?b=ae():b=bA();var eA=Math.round(b*1e3*1e3);return y[k>>3]=BigInt(eA),0}var _e=()=>2147483648,be=()=>_e(),tg=(l,f)=>Math.ceil(l/f)*f,Ag=l=>{var f=c.buffer.byteLength,k=(l-f+65535)/65536|0;try{return c.grow(k),F(),1}catch{}},lg=l=>{var f=L.length;l>>>=0;var k=_e();if(l>k)return!1;for(var b=1;b<=4;b*=2){var eA=f*(1+.2/b);eA=Math.min(eA,l+100663296);var EA=Math.min(k,tg(Math.max(l,eA),65536)),DA=Ag(EA);if(DA)return!0}return!1},Og={},gg=()=>I||"./this.program",og=()=>{if(!og.strings){var l=(typeof navigator=="object"&&navigator.language||"C").replace("-","_")+".UTF-8",f={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:l,_:gg()};for(var k in Og)Og[k]===void 0?delete f[k]:f[k]=Og[k];var b=[];for(var k in f)b.push(`${k}=${f[k]}`);og.strings=b}return og.strings},Wg=(l,f)=>{var k=0,b=0;for(var eA of og()){var EA=f+k;_[l+b>>2]=EA,k+=aA(eA,EA,1/0)+1,b+=4}return 0},Lg=(l,f)=>{var k=og();_[l>>2]=k.length;var b=0;for(var eA of k)b+=re(eA)+1;return _[f>>2]=b,0};function sI(l){try{var f=wg.getStreamFromFD(l);return U.close(f),0}catch(k){if(typeof U>"u"||k.name!=="ErrnoError")throw k;return k.errno}}var CI=(l,f,k,b)=>{for(var eA=0,EA=0;EA>2],MA=_[f+4>>2];f+=8;var se=U.read(l,p,DA,MA,b);if(se<0)return-1;if(eA+=se,se>2]=EA,0}catch(DA){if(typeof U>"u"||DA.name!=="ErrnoError")throw DA;return DA.errno}}function cI(l,f,k,b){f=j(f);try{if(isNaN(f))return 61;var eA=wg.getStreamFromFD(l);return U.llseek(eA,f,k),y[b>>3]=BigInt(eA.position),eA.getdents&&f===0&&k===0&&(eA.getdents=null),0}catch(EA){if(typeof U>"u"||EA.name!=="ErrnoError")throw EA;return EA.errno}}var $g=(l,f,k,b)=>{for(var eA=0,EA=0;EA>2],MA=_[f+4>>2];f+=8;var se=U.write(l,p,DA,MA,b);if(se<0)return-1;if(eA+=se,se>2]=EA,0}catch(DA){if(typeof U>"u"||DA.name!=="ErrnoError")throw DA;return DA.errno}}for(var cg=new Uint8Array(123),$e=25;$e>=0;--$e)cg[48+$e]=52+$e,cg[65+$e]=$e,cg[97+$e]=26+$e;cg[43]=62,cg[47]=63,U.createPreloadedFile=rg,U.preloadFile=xg,U.staticInit(),e.noExitRuntime&&e.noExitRuntime,e.preloadPlugins&&(zg=e.preloadPlugins),e.print&&(C=e.print),e.printErr&&(r=e.printErr),e.wasmBinary&&(Q=e.wasmBinary),e.arguments&&e.arguments,e.thisProgram&&(I=e.thisProgram);function mg(l){e._umap_options_create=l.t,e._umap_options_destroy=l.u,e._umap_options_number=l.v,e._umap_options_string=l.w,e._umap_context_create_f32=l.x,e._umap_context_run=l.y,e._umap_context_n_epochs=l.z,e._umap_context_epoch=l.A,e._umap_context_destroy=l.B,e._knn_options_create=l.C,e._knn_options_destroy=l.D,e._knn_options_number=l.E,e._knn_options_string=l.F,e._knn_context_create_f32=l.G,e._knn_context_query_by_index=l.H,e._knn_context_query_by_vector=l.I,e._knn_context_destroy=l.J,e._memory_allocate=l.K,e._memory_free=l.L}var iI={a:wA,b:GA,c:xI,f:fI,g:AI,h:he,k:IA,l:yA,i:Ie,m:be,j:lg,n:Wg,o:Lg,d:sI,p:jg,q:cI,e:yg},Tg=await x();function tI(){if(J>0){Z=tI;return}if(m(),J>0){Z=tI;return}function l(){e.calledRun=!0,!B&&(G(),a?.(e),e.onRuntimeInitialized?.(),T())}e.setStatus?(e.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>e.setStatus(""),1),l()},1)):l()}function yI(){if(e.preInit)for(typeof e.preInit=="function"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.shift()()}return yI(),tI(),M?g=e:g=new Promise((l,f)=>{a=l,d=f}),g}async function qp(){const A=await Hp(),g={memory_allocate:A._memory_allocate,memory_free:A._memory_free,memory_size:()=>A.HEAP32.length/4,u8_array:(e,I)=>A.HEAPU8.subarray(e,e+I),f32_array:(e,I)=>A.HEAPF32.subarray(e/4,e/4+I),i32_array:(e,I)=>A.HEAP32.subarray(e/4,e/4+I)};for(let e in A)e.startsWith("_")&&(g[e.substring(1)]=A[e]);return g}let Op=qp();function Wp(A,g,e,I){const t=A.memory_allocate(128),s=t,o=t+64;function C(r,Q){const B=new TextEncoder().encode(Q);if(B.length+1>64)throw new Error("invalid parameter "+Q);const a=A.u8_array(r,64);a.fill(0),a.set(B),a[a.length-1]=0}for(const r in I){let Q=r.replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase();C(s,Q);const B=I[r];if(typeof B=="number"){if(e.number(g,s,B)!=0)throw new Error("invalid parameter "+r)}else if(typeof B=="string"){if(C(o,B),e.string(g,s,o)!=0)throw new Error("invalid parameter "+r)}else throw new Error("invalid parameter "+r)}A.memory_free(s)}async function jp(A,g,e,I,i={}){const t=await Op,s=t.memory_allocate(A*g*4),o=t.memory_allocate(A*e*4),C=t.umap_options_create();Wp(t,C,{number:t.umap_options_number,string:t.umap_options_string},i),t.f32_array(s,A*g).set(I,0);let r=t.umap_context_create_f32(A,g,e,s,o,C);t.umap_options_destroy(C);function Q(){if(r==null)throw new Error("use after destroy")}return{get epoch(){return Q(),t.umap_context_epoch(r)},get nEpochs(){return Q(),t.umap_context_n_epochs(r)},get count(){return A},get outputDim(){return e},get inputDim(){return g},get embedding(){return Q(),t.f32_array(o,A*e)},run(B){Q(),t.umap_context_run(r,B??0)},destroy(){r!=null&&(t.umap_context_destroy(r),t.memory_free(s),t.memory_free(o),r=null)}}}const As=new Map,Di=[],Vp=(A,g,e)=>{if(g&&typeof g.init=="function"&&typeof g.createInferenceSessionHandler=="function"){const I=As.get(A);if(I===void 0)As.set(A,{backend:g,priority:e});else{if(I.priority>e)return;if(I.priority===e&&I.backend!==g)throw new Error(`cannot register backend "${A}" using priority ${e}`)}if(e>=0){const i=Di.indexOf(A);i!==-1&&Di.splice(i,1);for(let t=0;t{const g=As.get(A);if(!g)return"backend not found.";if(g.initialized)return g.backend;if(g.aborted)return g.error;{const e=!!g.initPromise;try{return e||(g.initPromise=g.backend.init(A)),await g.initPromise,g.initialized=!0,g.backend}catch(I){return e||(g.error=`${I}`,g.aborted=!0),g.error}finally{delete g.initPromise}}},$p=async A=>{const g=A.executionProviders||[],e=g.map(C=>typeof C=="string"?C:C.name),I=e.length===0?Di:e;let i;const t=[],s=new Set;for(const C of I){const r=await zp(C);typeof r=="string"?t.push({name:C,err:r}):(i||(i=r),i===r&&s.add(C))}if(!i)throw new Error(`no available backend found. ERR: ${t.map(C=>`[${C.name}] ${C.err}`).join(", ")}`);for(const{name:C,err:r}of t)e.includes(C)&&console.warn(`removing requested execution provider "${C}" from session options because it is not available: ${r}`);const o=g.filter(C=>s.has(typeof C=="string"?C:C.name));return[i,new Proxy(A,{get:(C,r)=>r==="executionProviders"?o:Reflect.get(C,r)})]},Zp="1.21.0";let fl="warning";const UI={wasm:{},webgl:{},webgpu:{},versions:{common:Zp},set logLevel(A){if(A!==void 0){if(typeof A!="string"||["verbose","info","warning","error","fatal"].indexOf(A)===-1)throw new Error(`Unsupported logging level: ${A}`);fl=A}},get logLevel(){return fl}};Object.defineProperty(UI,"logLevel",{enumerable:!0});const Xp=UI,Af=(A,g)=>{const e=typeof document<"u"?document.createElement("canvas"):new OffscreenCanvas(1,1);e.width=A.dims[3],e.height=A.dims[2];const I=e.getContext("2d");if(I!=null){let i,t;g?.tensorLayout!==void 0&&g.tensorLayout==="NHWC"?(i=A.dims[2],t=A.dims[3]):(i=A.dims[3],t=A.dims[2]);const s=g?.format!==void 0?g.format:"RGB",o=g?.norm;let C,r;o===void 0||o.mean===void 0?C=[255,255,255,255]:typeof o.mean=="number"?C=[o.mean,o.mean,o.mean,o.mean]:(C=[o.mean[0],o.mean[1],o.mean[2],0],o.mean[3]!==void 0&&(C[3]=o.mean[3])),o===void 0||o.bias===void 0?r=[0,0,0,0]:typeof o.bias=="number"?r=[o.bias,o.bias,o.bias,o.bias]:(r=[o.bias[0],o.bias[1],o.bias[2],0],o.bias[3]!==void 0&&(r[3]=o.bias[3]));const Q=t*i;let B=0,a=Q,d=Q*2,c=-1;s==="RGBA"?(B=0,a=Q,d=Q*2,c=Q*3):s==="RGB"?(B=0,a=Q,d=Q*2):s==="RBG"&&(B=0,d=Q,a=Q*2);for(let p=0;p{const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):new OffscreenCanvas(1,1).getContext("2d");let I;if(e!=null){let i,t,s;g?.tensorLayout!==void 0&&g.tensorLayout==="NHWC"?(i=A.dims[2],t=A.dims[1],s=A.dims[3]):(i=A.dims[3],t=A.dims[2],s=A.dims[1]);const o=g!==void 0&&g.format!==void 0?g.format:"RGB",C=g?.norm;let r,Q;C===void 0||C.mean===void 0?r=[255,255,255,255]:typeof C.mean=="number"?r=[C.mean,C.mean,C.mean,C.mean]:(r=[C.mean[0],C.mean[1],C.mean[2],255],C.mean[3]!==void 0&&(r[3]=C.mean[3])),C===void 0||C.bias===void 0?Q=[0,0,0,0]:typeof C.bias=="number"?Q=[C.bias,C.bias,C.bias,C.bias]:(Q=[C.bias[0],C.bias[1],C.bias[2],0],C.bias[3]!==void 0&&(Q[3]=C.bias[3]));const B=t*i;if(g!==void 0&&(g.format!==void 0&&s===4&&g.format!=="RGBA"||s===3&&g.format!=="RGB"&&g.format!=="BGR"))throw new Error("Tensor format doesn't match input tensor dims");const a=4;let d=0,c=1,p=2,L=3,w=0,u=B,_=B*2,y=-1;o==="RGBA"?(w=0,u=B,_=B*2,y=B*3):o==="RGB"?(w=0,u=B,_=B*2):o==="RBG"&&(w=0,_=B,u=B*2),I=e.createImageData(i,t);for(let M=0;M{if(A===void 0)throw new Error("Image buffer must be defined");if(g.height===void 0||g.width===void 0)throw new Error("Image height and width must be defined");if(g.tensorLayout==="NHWC")throw new Error("NHWC Tensor layout is not supported yet");const{height:e,width:I}=g,i=g.norm??{mean:255,bias:0};let t,s;typeof i.mean=="number"?t=[i.mean,i.mean,i.mean,i.mean]:t=[i.mean[0],i.mean[1],i.mean[2],i.mean[3]??255],typeof i.bias=="number"?s=[i.bias,i.bias,i.bias,i.bias]:s=[i.bias[0],i.bias[1],i.bias[2],i.bias[3]??0];const o=g.format!==void 0?g.format:"RGBA",C=g.tensorFormat!==void 0&&g.tensorFormat!==void 0?g.tensorFormat:"RGB",r=e*I,Q=C==="RGBA"?new Float32Array(r*4):new Float32Array(r*3);let B=4,a=0,d=1,c=2,p=3,L=0,w=r,u=r*2,_=-1;o==="RGB"&&(B=3,a=0,d=1,c=2,p=-1),C==="RGBA"?_=r*3:C==="RBG"?(L=0,u=r,w=r*2):C==="BGR"&&(u=0,w=r,L=r*2);for(let M=0;M{const e=typeof HTMLImageElement<"u"&&A instanceof HTMLImageElement,I=typeof ImageData<"u"&&A instanceof ImageData,i=typeof ImageBitmap<"u"&&A instanceof ImageBitmap,t=typeof A=="string";let s,o=g??{};const C=()=>{if(typeof document<"u")return document.createElement("canvas");if(typeof OffscreenCanvas<"u")return new OffscreenCanvas(1,1);throw new Error("Canvas is not supported")},r=Q=>typeof HTMLCanvasElement<"u"&&Q instanceof HTMLCanvasElement||Q instanceof OffscreenCanvas?Q.getContext("2d"):null;if(e){const Q=C();Q.width=A.width,Q.height=A.height;const B=r(Q);if(B!=null){let a=A.height,d=A.width;if(g!==void 0&&g.resizedHeight!==void 0&&g.resizedWidth!==void 0&&(a=g.resizedHeight,d=g.resizedWidth),g!==void 0){if(o=g,g.tensorFormat!==void 0)throw new Error("Image input config format must be RGBA for HTMLImageElement");o.tensorFormat="RGBA",o.height=a,o.width=d}else o.tensorFormat="RGBA",o.height=a,o.width=d;B.drawImage(A,0,0),s=B.getImageData(0,0,d,a).data}else throw new Error("Can not access image data")}else if(I){let Q,B;if(g!==void 0&&g.resizedWidth!==void 0&&g.resizedHeight!==void 0?(Q=g.resizedHeight,B=g.resizedWidth):(Q=A.height,B=A.width),g!==void 0&&(o=g),o.format="RGBA",o.height=Q,o.width=B,g!==void 0){const a=C();a.width=B,a.height=Q;const d=r(a);if(d!=null)d.putImageData(A,0,0),s=d.getImageData(0,0,B,Q).data;else throw new Error("Can not access image data")}else s=A.data}else if(i){if(g===void 0)throw new Error("Please provide image config with format for Imagebitmap");const Q=C();Q.width=A.width,Q.height=A.height;const B=r(Q);if(B!=null){const a=A.height,d=A.width;return B.drawImage(A,0,0,d,a),s=B.getImageData(0,0,d,a).data,o.height=a,o.width=d,kC(s,o)}else throw new Error("Can not access image data")}else{if(t)return new Promise((Q,B)=>{const a=C(),d=r(a);if(!A||!d)return B();const c=new Image;c.crossOrigin="Anonymous",c.src=A,c.onload=()=>{a.width=c.width,a.height=c.height,d.drawImage(c,0,0,a.width,a.height);const p=d.getImageData(0,0,a.width,a.height);o.height=a.height,o.width=a.width,Q(kC(p.data,o))}});throw new Error("Input data provided is not supported - aborted tensor creation")}if(s!==void 0)return kC(s,o);throw new Error("Input data provided is not supported - aborted tensor creation")},If=(A,g)=>{const{width:e,height:I,download:i,dispose:t}=g,s=[1,I,e,4];return new wI({location:"texture",type:"float32",texture:A,dims:s,download:i,dispose:t})},tf=(A,g)=>{const{dataType:e,dims:I,download:i,dispose:t}=g;return new wI({location:"gpu-buffer",type:e??"float32",gpuBuffer:A,dims:I,download:i,dispose:t})},of=(A,g)=>{const{dataType:e,dims:I,download:i,dispose:t}=g;return new wI({location:"ml-tensor",type:e??"float32",mlTensor:A,dims:I,download:i,dispose:t})},sf=(A,g,e)=>new wI({location:"cpu-pinned",type:A,data:g,dims:e??[g.length]}),Zi=new Map([["float32",Float32Array],["uint8",Uint8Array],["int8",Int8Array],["uint16",Uint16Array],["int16",Int16Array],["int32",Int32Array],["bool",Uint8Array],["float64",Float64Array],["uint32",Uint32Array],["int4",Uint8Array],["uint4",Uint8Array]]),es=new Map([[Float32Array,"float32"],[Uint8Array,"uint8"],[Int8Array,"int8"],[Uint16Array,"uint16"],[Int16Array,"int16"],[Int32Array,"int32"],[Float64Array,"float64"],[Uint32Array,"uint32"]]);let yl=!1;const Cf=()=>{if(!yl){yl=!0;const A=typeof BigInt64Array<"u"&&BigInt64Array.from,g=typeof BigUint64Array<"u"&&BigUint64Array.from,e=globalThis.Float16Array,I=typeof e<"u"&&e.from;A&&(Zi.set("int64",BigInt64Array),es.set(BigInt64Array,"int64")),g&&(Zi.set("uint64",BigUint64Array),es.set(BigUint64Array,"uint64")),I?(Zi.set("float16",e),es.set(e,"float16")):Zi.set("float16",Uint16Array)}},rf=A=>{let g=1;for(let e=0;e{switch(A.location){case"cpu":return new wI(A.type,A.data,g);case"cpu-pinned":return new wI({location:"cpu-pinned",data:A.data,type:A.type,dims:g});case"texture":return new wI({location:"texture",texture:A.texture,type:A.type,dims:g});case"gpu-buffer":return new wI({location:"gpu-buffer",gpuBuffer:A.gpuBuffer,type:A.type,dims:g});case"ml-tensor":return new wI({location:"ml-tensor",mlTensor:A.mlTensor,type:A.type,dims:g});default:throw new Error(`tensorReshape: tensor location ${A.location} is not supported`)}};let wI=class{constructor(g,e,I){Cf();let i,t;if(typeof g=="object"&&"location"in g)switch(this.dataLocation=g.location,i=g.type,t=g.dims,g.location){case"cpu-pinned":{const o=Zi.get(i);if(!o)throw new TypeError(`unsupported type "${i}" to create tensor from pinned buffer`);if(!(g.data instanceof o))throw new TypeError(`buffer should be of type ${o.name}`);this.cpuData=g.data;break}case"texture":{if(i!=="float32")throw new TypeError(`unsupported type "${i}" to create tensor from texture`);this.gpuTextureData=g.texture,this.downloader=g.download,this.disposer=g.dispose;break}case"gpu-buffer":{if(i!=="float32"&&i!=="float16"&&i!=="int32"&&i!=="int64"&&i!=="uint32"&&i!=="uint8"&&i!=="bool"&&i!=="uint4"&&i!=="int4")throw new TypeError(`unsupported type "${i}" to create tensor from gpu buffer`);this.gpuBufferData=g.gpuBuffer,this.downloader=g.download,this.disposer=g.dispose;break}case"ml-tensor":{if(i!=="float32"&&i!=="float16"&&i!=="int32"&&i!=="int64"&&i!=="uint32"&&i!=="uint64"&&i!=="int8"&&i!=="uint8"&&i!=="bool"&&i!=="uint4"&&i!=="int4")throw new TypeError(`unsupported type "${i}" to create tensor from MLTensor`);this.mlTensorData=g.mlTensor,this.downloader=g.download,this.disposer=g.dispose;break}default:throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let o,C;if(typeof g=="string")if(i=g,C=I,g==="string"){if(!Array.isArray(e))throw new TypeError("A string tensor's data must be a string array.");o=e}else{const r=Zi.get(g);if(r===void 0)throw new TypeError(`Unsupported tensor type: ${g}.`);if(Array.isArray(e)){if(g==="float16"&&r===Uint16Array||g==="uint4"||g==="int4")throw new TypeError(`Creating a ${g} tensor from number array is not supported. Please use ${r.name} as data.`);g==="uint64"||g==="int64"?o=r.from(e,BigInt):o=r.from(e)}else if(e instanceof r)o=e;else if(e instanceof Uint8ClampedArray)if(g==="uint8")o=Uint8Array.from(e);else throw new TypeError("A Uint8ClampedArray tensor's data must be type of uint8");else if(g==="float16"&&e instanceof Uint16Array&&r!==Uint16Array)o=new globalThis.Float16Array(e.buffer,e.byteOffset,e.length);else throw new TypeError(`A ${i} tensor's data must be type of ${r}`)}else if(C=e,Array.isArray(g)){if(g.length===0)throw new TypeError("Tensor type cannot be inferred from an empty array.");const r=typeof g[0];if(r==="string")i="string",o=g;else if(r==="boolean")i="bool",o=Uint8Array.from(g);else throw new TypeError(`Invalid element type of data array: ${r}.`)}else if(g instanceof Uint8ClampedArray)i="uint8",o=Uint8Array.from(g);else{const r=es.get(g.constructor);if(r===void 0)throw new TypeError(`Unsupported type for tensor data: ${g.constructor}.`);i=r,o=g}if(C===void 0)C=[o.length];else if(!Array.isArray(C))throw new TypeError("A tensor's dims must be a number array");t=C,this.cpuData=o,this.dataLocation="cpu"}const s=rf(t);if(this.cpuData&&s!==this.cpuData.length&&!((i==="uint4"||i==="int4")&&Math.ceil(s/2)===this.cpuData.length))throw new Error(`Tensor's size(${s}) does not match data length(${this.cpuData.length}).`);this.type=i,this.dims=t,this.size=s}static async fromImage(g,e){return gf(g,e)}static fromTexture(g,e){return If(g,e)}static fromGpuBuffer(g,e){return tf(g,e)}static fromMLTensor(g,e){return of(g,e)}static fromPinnedBuffer(g,e,I){return sf(g,e,I)}toDataURL(g){return Af(this,g)}toImageData(g){return ef(this,g)}get data(){if(this.ensureValid(),!this.cpuData)throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw new Error("The data is not stored as a WebGL texture.");return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw new Error("The data is not stored as a WebGPU buffer.");return this.gpuBufferData}get mlTensor(){if(this.ensureValid(),!this.mlTensorData)throw new Error("The data is not stored as a WebNN MLTensor.");return this.mlTensorData}async getData(g){switch(this.ensureValid(),this.dataLocation){case"cpu":case"cpu-pinned":return this.data;case"texture":case"gpu-buffer":case"ml-tensor":{if(!this.downloader)throw new Error("The current tensor is not created with a specified data downloader.");if(this.isDownloading)throw new Error("The current tensor is being downloaded.");try{this.isDownloading=!0;const e=await this.downloader();return this.downloader=void 0,this.dataLocation="cpu",this.cpuData=e,g&&this.disposer&&(this.disposer(),this.disposer=void 0),e}finally{this.isDownloading=!1}}default:throw new Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw new Error("The current tensor is being downloaded.");this.disposer&&(this.disposer(),this.disposer=void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.mlTensorData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation="none"}ensureValid(){if(this.dataLocation==="none")throw new Error("The tensor is disposed.")}reshape(g){if(this.ensureValid(),this.downloader||this.disposer)throw new Error("Cannot reshape a tensor that owns GPU resource.");return af(this,g)}};const zi=wI,sh=(A,g)=>{(typeof UI.trace>"u"?!UI.wasm.trace:!UI.trace)||console.timeStamp(`${A}::ORT::${g}`)},Ch=(A,g)=>{const e=new Error().stack?.split(/\r\n|\r|\n/g)||[];let I=!1;for(let i=0;i{(typeof UI.trace>"u"?!UI.wasm.trace:!UI.trace)||Ch("BEGIN",A)},Kr=A=>{(typeof UI.trace>"u"?!UI.wasm.trace:!UI.trace)||Ch("END",A)};let Bf=class rh{constructor(g){this.handler=g}async run(g,e,I){Lr();const i={};let t={};if(typeof g!="object"||g===null||g instanceof zi||Array.isArray(g))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let s=!0;if(typeof e=="object"){if(e===null)throw new TypeError("Unexpected argument[1]: cannot be null.");if(e instanceof zi)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(e)){if(e.length===0)throw new TypeError("'fetches' cannot be an empty array.");s=!1;for(const r of e){if(typeof r!="string")throw new TypeError("'fetches' must be a string array or an object.");if(this.outputNames.indexOf(r)===-1)throw new RangeError(`'fetches' contains invalid output name: ${r}.`);i[r]=null}if(typeof I=="object"&&I!==null)t=I;else if(typeof I<"u")throw new TypeError("'options' must be an object.")}else{let r=!1;const Q=Object.getOwnPropertyNames(e);for(const B of this.outputNames)if(Q.indexOf(B)!==-1){const a=e[B];(a===null||a instanceof zi)&&(r=!0,s=!1,i[B]=a)}if(r){if(typeof I=="object"&&I!==null)t=I;else if(typeof I<"u")throw new TypeError("'options' must be an object.")}else t=e}}else if(typeof e<"u")throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(const r of this.inputNames)if(typeof g[r]>"u")throw new Error(`input '${r}' is missing in 'feeds'.`);if(s)for(const r of this.outputNames)i[r]=null;const o=await this.handler.run(g,i,t),C={};for(const r in o)if(Object.hasOwnProperty.call(o,r)){const Q=o[r];Q instanceof zi?C[r]=Q:C[r]=new zi(Q.type,Q.data,Q.dims)}return Kr(),C}async release(){return this.handler.dispose()}static async create(g,e,I,i){Lr();let t,s={};if(typeof g=="string"){if(t=g,typeof e=="object"&&e!==null)s=e;else if(typeof e<"u")throw new TypeError("'options' must be an object.")}else if(g instanceof Uint8Array){if(t=g,typeof e=="object"&&e!==null)s=e;else if(typeof e<"u")throw new TypeError("'options' must be an object.")}else if(g instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&g instanceof SharedArrayBuffer){const Q=g;let B=0,a=g.byteLength;if(typeof e=="object"&&e!==null)s=e;else if(typeof e=="number"){if(B=e,!Number.isSafeInteger(B))throw new RangeError("'byteOffset' must be an integer.");if(B<0||B>=Q.byteLength)throw new RangeError(`'byteOffset' is out of range [0, ${Q.byteLength}).`);if(a=g.byteLength-B,typeof I=="number"){if(a=I,!Number.isSafeInteger(a))throw new RangeError("'byteLength' must be an integer.");if(a<=0||B+a>Q.byteLength)throw new RangeError(`'byteLength' is out of range (0, ${Q.byteLength-B}].`);if(typeof i=="object"&&i!==null)s=i;else if(typeof i<"u")throw new TypeError("'options' must be an object.")}else if(typeof I<"u")throw new TypeError("'byteLength' must be a number.")}else if(typeof e<"u")throw new TypeError("'options' must be an object.");t=new Uint8Array(Q,B,a)}else throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'.");const[o,C]=await $p(s),r=await o.createInferenceSessionHandler(t,C);return Kr(),new rh(r)}startProfiling(){this.handler.startProfiling()}endProfiling(){this.handler.endProfiling()}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}};const Qf=Bf;var nf=Object.freeze({__proto__:null,InferenceSession:Qf,TRACE:sh,TRACE_FUNC_BEGIN:Lr,TRACE_FUNC_END:Kr,Tensor:zi,env:Xp,registerBackend:Vp});/*! * ONNX Runtime Web v1.22.0-dev.20250409-89f8206ba4 * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */var Zr=Object.defineProperty,Ef=Object.getOwnPropertyDescriptor,lf=Object.getOwnPropertyNames,cf=Object.prototype.hasOwnProperty,df=(A=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(A,{get:(g,e)=>(typeof require<"u"?require:g)[e]}):A)(function(A){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+A+'" is not supported')}),jA=(A,g)=>()=>(A&&(g=A(A=0)),g),gt=(A,g)=>{for(var e in g)Zr(A,e,{get:g[e],enumerable:!0})},uf=(A,g,e,I)=>{if(g&&typeof g=="object"||typeof g=="function")for(let i of lf(g))!cf.call(A,i)&&i!==e&&Zr(A,i,{get:()=>g[i],enumerable:!(I=Ef(g,i))||I.enumerable});return A},Wt=A=>uf(Zr({},"__esModule",{value:!0}),A),Gt,gi,fi,ml,ah,Bh=jA(()=>{Gt=new Map,gi=[],fi=(A,g,e)=>{if(g&&typeof g.init=="function"&&typeof g.createInferenceSessionHandler=="function"){let I=Gt.get(A);if(I===void 0)Gt.set(A,{backend:g,priority:e});else{if(I.priority>e)return;if(I.priority===e&&I.backend!==g)throw new Error(`cannot register backend "${A}" using priority ${e}`)}if(e>=0){let i=gi.indexOf(A);i!==-1&&gi.splice(i,1);for(let t=0;t{let g=Gt.get(A);if(!g)return"backend not found.";if(g.initialized)return g.backend;if(g.aborted)return g.error;{let e=!!g.initPromise;try{return e||(g.initPromise=g.backend.init(A)),await g.initPromise,g.initialized=!0,g.backend}catch(I){return e||(g.error=`${I}`,g.aborted=!0),g.error}finally{delete g.initPromise}}},ah=async A=>{let g=A.executionProviders||[],e=g.map(C=>typeof C=="string"?C:C.name),I=e.length===0?gi:e,i,t=[],s=new Set;for(let C of I){let r=await ml(C);typeof r=="string"?t.push({name:C,err:r}):(i||(i=r),i===r&&s.add(C))}if(!i)throw new Error(`no available backend found. ERR: ${t.map(C=>`[${C.name}] ${C.err}`).join(", ")}`);for(let{name:C,err:r}of t)e.includes(C)&&console.warn(`removing requested execution provider "${C}" from session options because it is not available: ${r}`);let o=g.filter(C=>s.has(typeof C=="string"?C:C.name));return[i,new Proxy(A,{get:(C,r)=>r==="executionProviders"?o:Reflect.get(C,r)})]}}),hf=jA(()=>{Bh()}),Qh,Df=jA(()=>{Qh="1.22.0-dev.20250409-89f8206ba4"}),LC,DI,nh=jA(()=>{Df(),LC="warning",DI={wasm:{},webgl:{},webgpu:{},versions:{common:Qh},set logLevel(A){if(A!==void 0){if(typeof A!="string"||["verbose","info","warning","error","fatal"].indexOf(A)===-1)throw new Error(`Unsupported logging level: ${A}`);LC=A}},get logLevel(){return LC}},Object.defineProperty(DI,"logLevel",{enumerable:!0})}),Cg,wf=jA(()=>{nh(),Cg=DI}),Eh,lh,pf=jA(()=>{Eh=(A,g)=>{let e=typeof document<"u"?document.createElement("canvas"):new OffscreenCanvas(1,1);e.width=A.dims[3],e.height=A.dims[2];let I=e.getContext("2d");if(I!=null){let i,t;g?.tensorLayout!==void 0&&g.tensorLayout==="NHWC"?(i=A.dims[2],t=A.dims[3]):(i=A.dims[3],t=A.dims[2]);let s=g?.format!==void 0?g.format:"RGB",o=g?.norm,C,r;o===void 0||o.mean===void 0?C=[255,255,255,255]:typeof o.mean=="number"?C=[o.mean,o.mean,o.mean,o.mean]:(C=[o.mean[0],o.mean[1],o.mean[2],0],o.mean[3]!==void 0&&(C[3]=o.mean[3])),o===void 0||o.bias===void 0?r=[0,0,0,0]:typeof o.bias=="number"?r=[o.bias,o.bias,o.bias,o.bias]:(r=[o.bias[0],o.bias[1],o.bias[2],0],o.bias[3]!==void 0&&(r[3]=o.bias[3]));let Q=t*i,B=0,a=Q,d=Q*2,c=-1;s==="RGBA"?(B=0,a=Q,d=Q*2,c=Q*3):s==="RGB"?(B=0,a=Q,d=Q*2):s==="RBG"&&(B=0,d=Q,a=Q*2);for(let p=0;p{let e=typeof document<"u"?document.createElement("canvas").getContext("2d"):new OffscreenCanvas(1,1).getContext("2d"),I;if(e!=null){let i,t,s;g?.tensorLayout!==void 0&&g.tensorLayout==="NHWC"?(i=A.dims[2],t=A.dims[1],s=A.dims[3]):(i=A.dims[3],t=A.dims[2],s=A.dims[1]);let o=g!==void 0&&g.format!==void 0?g.format:"RGB",C=g?.norm,r,Q;C===void 0||C.mean===void 0?r=[255,255,255,255]:typeof C.mean=="number"?r=[C.mean,C.mean,C.mean,C.mean]:(r=[C.mean[0],C.mean[1],C.mean[2],255],C.mean[3]!==void 0&&(r[3]=C.mean[3])),C===void 0||C.bias===void 0?Q=[0,0,0,0]:typeof C.bias=="number"?Q=[C.bias,C.bias,C.bias,C.bias]:(Q=[C.bias[0],C.bias[1],C.bias[2],0],C.bias[3]!==void 0&&(Q[3]=C.bias[3]));let B=t*i;if(g!==void 0&&(g.format!==void 0&&s===4&&g.format!=="RGBA"||s===3&&g.format!=="RGB"&&g.format!=="BGR"))throw new Error("Tensor format doesn't match input tensor dims");let a=4,d=0,c=1,p=2,L=3,w=0,u=B,_=B*2,y=-1;o==="RGBA"?(w=0,u=B,_=B*2,y=B*3):o==="RGB"?(w=0,u=B,_=B*2):o==="RBG"&&(w=0,_=B,u=B*2),I=e.createImageData(i,t);for(let M=0;M{Xr(),To=(A,g)=>{if(A===void 0)throw new Error("Image buffer must be defined");if(g.height===void 0||g.width===void 0)throw new Error("Image height and width must be defined");if(g.tensorLayout==="NHWC")throw new Error("NHWC Tensor layout is not supported yet");let{height:e,width:I}=g,i=g.norm??{mean:255,bias:0},t,s;typeof i.mean=="number"?t=[i.mean,i.mean,i.mean,i.mean]:t=[i.mean[0],i.mean[1],i.mean[2],i.mean[3]??255],typeof i.bias=="number"?s=[i.bias,i.bias,i.bias,i.bias]:s=[i.bias[0],i.bias[1],i.bias[2],i.bias[3]??0];let o=g.format!==void 0?g.format:"RGBA",C=g.tensorFormat!==void 0&&g.tensorFormat!==void 0?g.tensorFormat:"RGB",r=e*I,Q=C==="RGBA"?new Float32Array(r*4):new Float32Array(r*3),B=4,a=0,d=1,c=2,p=3,L=0,w=r,u=r*2,_=-1;o==="RGB"&&(B=3,a=0,d=1,c=2,p=-1),C==="RGBA"?_=r*3:C==="RBG"?(L=0,u=r,w=r*2):C==="BGR"&&(u=0,w=r,L=r*2);for(let y=0;y{let e=typeof HTMLImageElement<"u"&&A instanceof HTMLImageElement,I=typeof ImageData<"u"&&A instanceof ImageData,i=typeof ImageBitmap<"u"&&A instanceof ImageBitmap,t=typeof A=="string",s,o=g??{},C=()=>{if(typeof document<"u")return document.createElement("canvas");if(typeof OffscreenCanvas<"u")return new OffscreenCanvas(1,1);throw new Error("Canvas is not supported")},r=Q=>typeof HTMLCanvasElement<"u"&&Q instanceof HTMLCanvasElement||Q instanceof OffscreenCanvas?Q.getContext("2d"):null;if(e){let Q=C();Q.width=A.width,Q.height=A.height;let B=r(Q);if(B!=null){let a=A.height,d=A.width;if(g!==void 0&&g.resizedHeight!==void 0&&g.resizedWidth!==void 0&&(a=g.resizedHeight,d=g.resizedWidth),g!==void 0){if(o=g,g.tensorFormat!==void 0)throw new Error("Image input config format must be RGBA for HTMLImageElement");o.tensorFormat="RGBA",o.height=a,o.width=d}else o.tensorFormat="RGBA",o.height=a,o.width=d;B.drawImage(A,0,0),s=B.getImageData(0,0,d,a).data}else throw new Error("Can not access image data")}else if(I){let Q,B;if(g!==void 0&&g.resizedWidth!==void 0&&g.resizedHeight!==void 0?(Q=g.resizedHeight,B=g.resizedWidth):(Q=A.height,B=A.width),g!==void 0&&(o=g),o.format="RGBA",o.height=Q,o.width=B,g!==void 0){let a=C();a.width=B,a.height=Q;let d=r(a);if(d!=null)d.putImageData(A,0,0),s=d.getImageData(0,0,B,Q).data;else throw new Error("Can not access image data")}else s=A.data}else if(i){if(g===void 0)throw new Error("Please provide image config with format for Imagebitmap");let Q=C();Q.width=A.width,Q.height=A.height;let B=r(Q);if(B!=null){let a=A.height,d=A.width;return B.drawImage(A,0,0,d,a),s=B.getImageData(0,0,d,a).data,o.height=a,o.width=d,To(s,o)}else throw new Error("Can not access image data")}else{if(t)return new Promise((Q,B)=>{let a=C(),d=r(a);if(!A||!d)return B();let c=new Image;c.crossOrigin="Anonymous",c.src=A,c.onload=()=>{a.width=c.width,a.height=c.height,d.drawImage(c,0,0,a.width,a.height);let p=d.getImageData(0,0,a.width,a.height);o.height=a.height,o.width=a.width,Q(To(p.data,o))}});throw new Error("Input data provided is not supported - aborted tensor creation")}if(s!==void 0)return To(s,o);throw new Error("Input data provided is not supported - aborted tensor creation")},dh=(A,g)=>{let{width:e,height:I,download:i,dispose:t}=g,s=[1,I,e,4];return new QI({location:"texture",type:"float32",texture:A,dims:s,download:i,dispose:t})},uh=(A,g)=>{let{dataType:e,dims:I,download:i,dispose:t}=g;return new QI({location:"gpu-buffer",type:e??"float32",gpuBuffer:A,dims:I,download:i,dispose:t})},hh=(A,g)=>{let{dataType:e,dims:I,download:i,dispose:t}=g;return new QI({location:"ml-tensor",type:e??"float32",mlTensor:A,dims:I,download:i,dispose:t})},Dh=(A,g,e)=>new QI({location:"cpu-pinned",type:A,data:g,dims:e??[g.length]})}),wi,Pt,KC,wh,yf=jA(()=>{wi=new Map([["float32",Float32Array],["uint8",Uint8Array],["int8",Int8Array],["uint16",Uint16Array],["int16",Int16Array],["int32",Int32Array],["bool",Uint8Array],["float64",Float64Array],["uint32",Uint32Array],["int4",Uint8Array],["uint4",Uint8Array]]),Pt=new Map([[Float32Array,"float32"],[Uint8Array,"uint8"],[Int8Array,"int8"],[Uint16Array,"uint16"],[Int16Array,"int16"],[Int32Array,"int32"],[Float64Array,"float64"],[Uint32Array,"uint32"]]),KC=!1,wh=()=>{if(!KC){KC=!0;let A=typeof BigInt64Array<"u"&&BigInt64Array.from,g=typeof BigUint64Array<"u"&&BigUint64Array.from,e=globalThis.Float16Array,I=typeof e<"u"&&e.from;A&&(wi.set("int64",BigInt64Array),Pt.set(BigInt64Array,"int64")),g&&(wi.set("uint64",BigUint64Array),Pt.set(BigUint64Array,"uint64")),I?(wi.set("float16",e),Pt.set(e,"float16")):wi.set("float16",Uint16Array)}}}),ph,fh,mf=jA(()=>{Xr(),ph=A=>{let g=1;for(let e=0;e{switch(A.location){case"cpu":return new QI(A.type,A.data,g);case"cpu-pinned":return new QI({location:"cpu-pinned",data:A.data,type:A.type,dims:g});case"texture":return new QI({location:"texture",texture:A.texture,type:A.type,dims:g});case"gpu-buffer":return new QI({location:"gpu-buffer",gpuBuffer:A.gpuBuffer,type:A.type,dims:g});case"ml-tensor":return new QI({location:"ml-tensor",mlTensor:A.mlTensor,type:A.type,dims:g});default:throw new Error(`tensorReshape: tensor location ${A.location} is not supported`)}}}),QI,Xr=jA(()=>{pf(),ff(),yf(),mf(),QI=class{constructor(A,g,e){wh();let I,i;if(typeof A=="object"&&"location"in A)switch(this.dataLocation=A.location,I=A.type,i=A.dims,A.location){case"cpu-pinned":{let s=wi.get(I);if(!s)throw new TypeError(`unsupported type "${I}" to create tensor from pinned buffer`);if(!(A.data instanceof s))throw new TypeError(`buffer should be of type ${s.name}`);this.cpuData=A.data;break}case"texture":{if(I!=="float32")throw new TypeError(`unsupported type "${I}" to create tensor from texture`);this.gpuTextureData=A.texture,this.downloader=A.download,this.disposer=A.dispose;break}case"gpu-buffer":{if(I!=="float32"&&I!=="float16"&&I!=="int32"&&I!=="int64"&&I!=="uint32"&&I!=="uint8"&&I!=="bool"&&I!=="uint4"&&I!=="int4")throw new TypeError(`unsupported type "${I}" to create tensor from gpu buffer`);this.gpuBufferData=A.gpuBuffer,this.downloader=A.download,this.disposer=A.dispose;break}case"ml-tensor":{if(I!=="float32"&&I!=="float16"&&I!=="int32"&&I!=="int64"&&I!=="uint32"&&I!=="uint64"&&I!=="int8"&&I!=="uint8"&&I!=="bool"&&I!=="uint4"&&I!=="int4")throw new TypeError(`unsupported type "${I}" to create tensor from MLTensor`);this.mlTensorData=A.mlTensor,this.downloader=A.download,this.disposer=A.dispose;break}default:throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let s,o;if(typeof A=="string")if(I=A,o=e,A==="string"){if(!Array.isArray(g))throw new TypeError("A string tensor's data must be a string array.");s=g}else{let C=wi.get(A);if(C===void 0)throw new TypeError(`Unsupported tensor type: ${A}.`);if(Array.isArray(g)){if(A==="float16"&&C===Uint16Array||A==="uint4"||A==="int4")throw new TypeError(`Creating a ${A} tensor from number array is not supported. Please use ${C.name} as data.`);A==="uint64"||A==="int64"?s=C.from(g,BigInt):s=C.from(g)}else if(g instanceof C)s=g;else if(g instanceof Uint8ClampedArray)if(A==="uint8")s=Uint8Array.from(g);else throw new TypeError("A Uint8ClampedArray tensor's data must be type of uint8");else if(A==="float16"&&g instanceof Uint16Array&&C!==Uint16Array)s=new globalThis.Float16Array(g.buffer,g.byteOffset,g.length);else throw new TypeError(`A ${I} tensor's data must be type of ${C}`)}else if(o=g,Array.isArray(A)){if(A.length===0)throw new TypeError("Tensor type cannot be inferred from an empty array.");let C=typeof A[0];if(C==="string")I="string",s=A;else if(C==="boolean")I="bool",s=Uint8Array.from(A);else throw new TypeError(`Invalid element type of data array: ${C}.`)}else if(A instanceof Uint8ClampedArray)I="uint8",s=Uint8Array.from(A);else{let C=Pt.get(A.constructor);if(C===void 0)throw new TypeError(`Unsupported type for tensor data: ${A.constructor}.`);I=C,s=A}if(o===void 0)o=[s.length];else if(!Array.isArray(o))throw new TypeError("A tensor's dims must be a number array");i=o,this.cpuData=s,this.dataLocation="cpu"}let t=ph(i);if(this.cpuData&&t!==this.cpuData.length&&!((I==="uint4"||I==="int4")&&Math.ceil(t/2)===this.cpuData.length))throw new Error(`Tensor's size(${t}) does not match data length(${this.cpuData.length}).`);this.type=I,this.dims=i,this.size=t}static async fromImage(A,g){return ch(A,g)}static fromTexture(A,g){return dh(A,g)}static fromGpuBuffer(A,g){return uh(A,g)}static fromMLTensor(A,g){return hh(A,g)}static fromPinnedBuffer(A,g,e){return Dh(A,g,e)}toDataURL(A){return Eh(this,A)}toImageData(A){return lh(this,A)}get data(){if(this.ensureValid(),!this.cpuData)throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw new Error("The data is not stored as a WebGL texture.");return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw new Error("The data is not stored as a WebGPU buffer.");return this.gpuBufferData}get mlTensor(){if(this.ensureValid(),!this.mlTensorData)throw new Error("The data is not stored as a WebNN MLTensor.");return this.mlTensorData}async getData(A){switch(this.ensureValid(),this.dataLocation){case"cpu":case"cpu-pinned":return this.data;case"texture":case"gpu-buffer":case"ml-tensor":{if(!this.downloader)throw new Error("The current tensor is not created with a specified data downloader.");if(this.isDownloading)throw new Error("The current tensor is being downloaded.");try{this.isDownloading=!0;let g=await this.downloader();return this.downloader=void 0,this.dataLocation="cpu",this.cpuData=g,A&&this.disposer&&(this.disposer(),this.disposer=void 0),g}finally{this.isDownloading=!1}}default:throw new Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw new Error("The current tensor is being downloaded.");this.disposer&&(this.disposer(),this.disposer=void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.mlTensorData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation="none"}ensureValid(){if(this.dataLocation==="none")throw new Error("The tensor is disposed.")}reshape(A){if(this.ensureValid(),this.downloader||this.disposer)throw new Error("Cannot reshape a tensor that owns GPU resource.");return fh(this,A)}}}),KI,yh=jA(()=>{Xr(),KI=QI}),jt,UC,bI,pI,mh=jA(()=>{nh(),jt=(A,g)=>{(typeof DI.trace>"u"?!DI.wasm.trace:!DI.trace)||console.timeStamp(`${A}::ORT::${g}`)},UC=(A,g)=>{let e=new Error().stack?.split(/\r\n|\r|\n/g)||[],I=!1;for(let i=0;i{(typeof DI.trace>"u"?!DI.wasm.trace:!DI.trace)||UC("BEGIN",A)},pI=A=>{(typeof DI.trace>"u"?!DI.wasm.trace:!DI.trace)||UC("END",A)}}),Mh,Mf=jA(()=>{Bh(),yh(),mh(),Mh=class Fh{constructor(g){this.handler=g}async run(g,e,I){bI();let i={},t={};if(typeof g!="object"||g===null||g instanceof KI||Array.isArray(g))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let s=!0;if(typeof e=="object"){if(e===null)throw new TypeError("Unexpected argument[1]: cannot be null.");if(e instanceof KI)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(e)){if(e.length===0)throw new TypeError("'fetches' cannot be an empty array.");s=!1;for(let r of e){if(typeof r!="string")throw new TypeError("'fetches' must be a string array or an object.");if(this.outputNames.indexOf(r)===-1)throw new RangeError(`'fetches' contains invalid output name: ${r}.`);i[r]=null}if(typeof I=="object"&&I!==null)t=I;else if(typeof I<"u")throw new TypeError("'options' must be an object.")}else{let r=!1,Q=Object.getOwnPropertyNames(e);for(let B of this.outputNames)if(Q.indexOf(B)!==-1){let a=e[B];(a===null||a instanceof KI)&&(r=!0,s=!1,i[B]=a)}if(r){if(typeof I=="object"&&I!==null)t=I;else if(typeof I<"u")throw new TypeError("'options' must be an object.")}else t=e}}else if(typeof e<"u")throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(let r of this.inputNames)if(typeof g[r]>"u")throw new Error(`input '${r}' is missing in 'feeds'.`);if(s)for(let r of this.outputNames)i[r]=null;let o=await this.handler.run(g,i,t),C={};for(let r in o)if(Object.hasOwnProperty.call(o,r)){let Q=o[r];Q instanceof KI?C[r]=Q:C[r]=new KI(Q.type,Q.data,Q.dims)}return pI(),C}async release(){return this.handler.dispose()}static async create(g,e,I,i){bI();let t,s={};if(typeof g=="string"){if(t=g,typeof e=="object"&&e!==null)s=e;else if(typeof e<"u")throw new TypeError("'options' must be an object.")}else if(g instanceof Uint8Array){if(t=g,typeof e=="object"&&e!==null)s=e;else if(typeof e<"u")throw new TypeError("'options' must be an object.")}else if(g instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&g instanceof SharedArrayBuffer){let Q=g,B=0,a=g.byteLength;if(typeof e=="object"&&e!==null)s=e;else if(typeof e=="number"){if(B=e,!Number.isSafeInteger(B))throw new RangeError("'byteOffset' must be an integer.");if(B<0||B>=Q.byteLength)throw new RangeError(`'byteOffset' is out of range [0, ${Q.byteLength}).`);if(a=g.byteLength-B,typeof I=="number"){if(a=I,!Number.isSafeInteger(a))throw new RangeError("'byteLength' must be an integer.");if(a<=0||B+a>Q.byteLength)throw new RangeError(`'byteLength' is out of range (0, ${Q.byteLength-B}].`);if(typeof i=="object"&&i!==null)s=i;else if(typeof i<"u")throw new TypeError("'options' must be an object.")}else if(typeof I<"u")throw new TypeError("'byteLength' must be a number.")}else if(typeof e<"u")throw new TypeError("'options' must be an object.");t=new Uint8Array(Q,B,a)}else throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'.");let[o,C]=await ah(s),r=await o.createInferenceSessionHandler(t,C);return pI(),new Fh(r)}startProfiling(){this.handler.startProfiling()}endProfiling(){this.handler.endProfiling()}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}get inputMetadata(){return this.handler.inputMetadata}get outputMetadata(){return this.handler.outputMetadata}}}),Aa,Ff=jA(()=>{Mf(),Aa=Mh}),Sf=jA(()=>{}),Nf=jA(()=>{}),_f=jA(()=>{}),Rf=jA(()=>{}),Sh={};gt(Sh,{InferenceSession:()=>Aa,TRACE:()=>jt,TRACE_FUNC_BEGIN:()=>bI,TRACE_FUNC_END:()=>pI,Tensor:()=>KI,env:()=>Cg,registerBackend:()=>fi});var JI=jA(()=>{hf(),wf(),Ff(),yh(),Sf(),Nf(),mh(),_f(),Rf()}),ea=jA(()=>{}),Nh={};gt(Nh,{default:()=>_h});var bC,JC,_h,Gf=jA(()=>{K0(),Fi(),ga(),bC="ort-wasm-proxy-worker",JC=globalThis.self?.name===bC,JC&&(self.onmessage=A=>{let{type:g,in:e}=A.data;try{switch(g){case"init-wasm":Ia(e.wasm).then(()=>{wa(e).then(()=>{postMessage({type:g})},I=>{postMessage({type:g,err:I})})},I=>{postMessage({type:g,err:I})});break;case"init-ep":{let{epName:I,env:i}=e;pa(i,I).then(()=>{postMessage({type:g})},t=>{postMessage({type:g,err:t})});break}case"copy-from":{let{buffer:I}=e,i=as(I);postMessage({type:g,out:i});break}case"create":{let{model:I,options:i}=e;fa(I,i).then(t=>{postMessage({type:g,out:t})},t=>{postMessage({type:g,err:t})});break}case"release":ya(e),postMessage({type:g});break;case"run":{let{sessionId:I,inputIndices:i,inputs:t,outputIndices:s,options:o}=e;ma(I,i,t,s,new Array(s.length).fill(null),o).then(C=>{C.some(r=>r[3]!=="cpu")?postMessage({type:g,err:"Proxy does not support non-cpu tensor location."}):postMessage({type:g,out:C},Fa([...t,...C]))},C=>{postMessage({type:g,err:C})});break}case"end-profiling":Ma(e),postMessage({type:g});break;default:}}catch(I){postMessage({type:g,err:I})}}),_h=JC?null:A=>new Worker(A??BI,{type:"module",name:bC})}),Rh={};gt(Rh,{default:()=>Gh});var xC,TC,Gh,Ml,kf=jA(()=>{TC=(xC=import.meta.url,async function(A={}){var g,e,I=A,i=new Promise((n,S)=>{g=n,e=S}),t=typeof window=="object",s=typeof WorkerGlobalScope<"u",o=s&&self.name?.startsWith("em-pthread");I.mountExternalData=(n,S)=>{n.startsWith("./")&&(n=n.substring(2)),(I.Eb||(I.Eb=new Map)).set(n,S)},I.unmountExternalData=()=>{delete I.Eb};var C=globalThis.SharedArrayBuffer??new WebAssembly.Memory({initial:0,maximum:0,pc:!0}).buffer.constructor;let r=n=>async(...S)=>{try{if(I.Fb)throw Error("Session already started");let K=I.Fb={dc:S[0],errors:[]},Y=await n(...S);if(I.Fb!==K)throw Error("Session mismatch");I.Jb?.flush();let V=K.errors;if(0KA),0{if(n==="webgpu"){[I.Jb,I.Ub,I.Yb,I.Kb,I.Xb,I.jb,I.Zb,I.ac,I.Vb,I.Wb,I.$b]=S;let K=I.Jb;I.jsepRegisterBuffer=(Y,V,lA,KA)=>K.registerBuffer(Y,V,lA,KA),I.jsepGetBuffer=Y=>K.getBuffer(Y),I.jsepCreateDownloader=(Y,V,lA)=>K.createDownloader(Y,V,lA),I.jsepOnCreateSession=Y=>{K.onCreateSession(Y)},I.jsepOnReleaseSession=Y=>{K.onReleaseSession(Y)},I.jsepOnRunStart=Y=>K.onRunStart(Y),I.bc=(Y,V)=>{K.upload(Y,V)}}else if(n==="webnn"){let K=S[0];[I.nc,I.Nb,I.webnnEnsureTensor,I.Ob,I.webnnDownloadTensor]=S.slice(1),I.webnnReleaseTensorId=I.Nb,I.webnnUploadTensor=I.Ob,I.webnnOnRunStart=Y=>K.onRunStart(Y),I.webnnOnRunEnd=K.onRunEnd.bind(K),I.webnnRegisterMLContext=(Y,V)=>{K.registerMLContext(Y,V)},I.webnnOnReleaseSession=Y=>{K.onReleaseSession(Y)},I.webnnCreateMLTensorDownloader=(Y,V)=>K.createMLTensorDownloader(Y,V),I.webnnRegisterMLTensor=(Y,V,lA,KA)=>K.registerMLTensor(Y,V,lA,KA),I.webnnCreateMLContext=Y=>K.createMLContext(Y),I.webnnRegisterMLConstant=(Y,V,lA,KA,qA,te)=>K.registerMLConstant(Y,V,lA,KA,qA,I.Eb,te),I.webnnRegisterGraphInput=K.registerGraphInput.bind(K),I.webnnIsGraphInput=K.isGraphInput.bind(K),I.webnnCreateTemporaryTensor=K.createTemporaryTensor.bind(K),I.webnnIsInt64Supported=K.isInt64Supported.bind(K)}};let Q=()=>{let n=(S,K,Y)=>(...V)=>{let lA=eg,KA=K?.();V=S(...V);let qA=K?.();return KA!==qA&&(S=qA,Y(KA),K=Y=null),eg!=lA?new Promise((te,Qe)=>{Mg={resolve:te,reject:Qe}}):V};(()=>{for(let S of["_OrtAppendExecutionProvider","_OrtCreateSession","_OrtRun","_OrtRunWithBinding","_OrtBindInput"])I[S]=n(I[S],()=>I[S],K=>I[S]=K)})(),r!==void 0&&(I._OrtRun=r(I._OrtRun),I._OrtRunWithBinding=r(I._OrtRunWithBinding)),Q=void 0};I.asyncInit=()=>{Q?.()};var B,a,d=Object.assign({},I),c=(n,S)=>{throw S},p="";(t||s)&&(s?p=self.location.href:typeof document<"u"&&document.currentScript&&(p=document.currentScript.src),xC&&(p=xC),p=p.startsWith("blob:")?"":p.slice(0,p.replace(/[?#].*/,"").lastIndexOf("/")+1),s&&(a=n=>{var S=new XMLHttpRequest;return S.open("GET",n,!1),S.responseType="arraybuffer",S.send(null),new Uint8Array(S.response)}),B=async n=>{if(cA(n))return new Promise((K,Y)=>{var V=new XMLHttpRequest;V.open("GET",n,!0),V.responseType="arraybuffer",V.onload=()=>{V.status==200||V.status==0&&V.response?K(V.response):Y(V.status)},V.onerror=Y,V.send(null)});var S=await fetch(n,{credentials:"same-origin"});if(S.ok)return S.arrayBuffer();throw Error(S.status+" : "+S.url)});var L=console.log.bind(console),w=console.error.bind(console),u=L,_=w;Object.assign(I,d),d=null;var y,M,F,m,G,T,J,Z,z,P,tA,AA,iA,rA=I.wasmBinary,CA=!1,cA=n=>n.startsWith("file://");function uA(){return y.buffer!=m.buffer&&kA(),m}function v(){return y.buffer!=m.buffer&&kA(),G}function x(){return y.buffer!=m.buffer&&kA(),T}function $(){return y.buffer!=m.buffer&&kA(),J}function W(){return y.buffer!=m.buffer&&kA(),Z}function nA(){return y.buffer!=m.buffer&&kA(),z}function xA(){return y.buffer!=m.buffer&&kA(),P}function RA(){return y.buffer!=m.buffer&&kA(),iA}if(o){let n=function(S){try{var K=S.data,Y=K.Bb;if(Y==="load"){let V=[];self.onmessage=lA=>V.push(lA),self.startWorker=()=>{postMessage({Bb:"loaded"});for(let lA of V)n(lA);self.onmessage=n};for(let lA of K.Rb)I[lA]&&!I[lA].proxy||(I[lA]=(...KA)=>{postMessage({Bb:"callHandler",Qb:lA,args:KA})},lA=="print"&&(u=I[lA]),lA=="printErr"&&(_=I[lA]));y=K.kc,kA(),vA(K.lc)}else if(Y==="run"){rg(K.Ab),Ki(K.Ab,0,0,1,0,0),zg(),oA(K.Ab),ie||(Dt(),ie=!0);try{U(K.fc,K.Hb)}catch(V){if(V!="unwind")throw V}}else K.target!=="setimmediate"&&(Y==="checkMailbox"?ie&&sA():Y&&(_(`worker: received unknown command ${Y}`),_(K)))}catch(V){throw wt(),V}};var vA,ie=!1;_=function(...S){S=S.join(" "),console.error(S)},self.alert=function(...S){postMessage({Bb:"alert",text:S.join(" "),ic:Bi()})},self.onunhandledrejection=S=>{throw S.reason||S},self.onmessage=n}function kA(){var n=y.buffer;I.HEAP8=m=new Int8Array(n),I.HEAP16=T=new Int16Array(n),I.HEAPU8=G=new Uint8Array(n),I.HEAPU16=J=new Uint16Array(n),I.HEAP32=Z=new Int32Array(n),I.HEAPU32=z=new Uint32Array(n),I.HEAPF32=P=new Float32Array(n),I.HEAPF64=iA=new Float64Array(n),I.HEAP64=tA=new BigInt64Array(n),I.HEAPU64=AA=new BigUint64Array(n)}function X(){o?startWorker(I):ue.Ca()}o||(y=new WebAssembly.Memory({initial:256,maximum:65536,shared:!0}),kA());var q,wA=0,LA=null;function JA(){if(--wA==0&&LA){var n=LA;LA=null,n()}}function GA(n){throw _(n="Aborted("+n+")"),CA=!0,n=new WebAssembly.RuntimeError(n+". Build with -sASSERTIONS for more info."),e(n),n}function fA(){return{a:{L:YA,Aa:dA,b:xI,$:AI,A:Ne,pa:lI,X:j,Z:IA,qa:aA,na:yA,ga:bA,ma:ae,J:Ee,Y:Ie,V:_e,oa:be,W:tg,va:Og,E:CI,Q:cI,O:tI,D:l,u:f,r:k,P:b,z:Ze,R:BA,ja:N,T:hA,aa:zA,M:ge,F:ZA,ia:oA,sa:VA,t:ng,Ba:Ng,w:MI,o:uI,l:Fg,c:cg,n:eI,j:$t,v:Zt,p:Xt,f:Ao,s:zI,m:eo,e:go,k:Io,i:io,g:to,d:$I,da:oo,ea:so,fa:st,ba:Ct,ca:rt,N:Ni,xa:ro,ua:Bs,h:Bt,C:Gi,G:ao,ta:at,x:Bo,ra:Qo,U:no,q:Co,y:Eo,K:lo,S:co,za:ki,ya:nt,ka:Et,la:uo,_:oe,B:lt,I:ho,ha:ct,H:ut,a:y,wa:Ce}}}var _A={829644:(n,S,K,Y,V)=>{if(I===void 0||!I.Eb)return 1;if((n=ze(Number(n>>>0))).startsWith("./")&&(n=n.substring(2)),!(n=I.Eb.get(n)))return 2;if(S=Number(S>>>0),K=Number(K>>>0),Y=Number(Y>>>0),S+K>n.byteLength)return 3;try{let lA=n.subarray(S,S+K);switch(V){case 0:v().set(lA,Y>>>0);break;case 1:I.mc?I.mc(Y,lA):I.bc(Y,lA);break;default:return 4}return 0}catch{return 4}},830468:(n,S,K)=>{I.Ob(n,v().subarray(S>>>0,S+K>>>0))},830532:()=>I.nc(),830574:n=>{I.Nb(n)},830611:()=>{I.Vb()},830642:()=>{I.Wb()},830671:()=>{I.$b()},830696:n=>I.Ub(n),830729:n=>I.Yb(n),830761:(n,S,K)=>{I.Kb(Number(n),Number(S),Number(K),!0)},830824:(n,S,K)=>{I.Kb(Number(n),Number(S),Number(K))},830881:()=>typeof wasmOffsetConverter<"u",830938:n=>{I.jb("Abs",n,void 0)},830989:n=>{I.jb("Neg",n,void 0)},831040:n=>{I.jb("Floor",n,void 0)},831093:n=>{I.jb("Ceil",n,void 0)},831145:n=>{I.jb("Reciprocal",n,void 0)},831203:n=>{I.jb("Sqrt",n,void 0)},831255:n=>{I.jb("Exp",n,void 0)},831306:n=>{I.jb("Erf",n,void 0)},831357:n=>{I.jb("Sigmoid",n,void 0)},831412:(n,S,K)=>{I.jb("HardSigmoid",n,{alpha:S,beta:K})},831491:n=>{I.jb("Log",n,void 0)},831542:n=>{I.jb("Sin",n,void 0)},831593:n=>{I.jb("Cos",n,void 0)},831644:n=>{I.jb("Tan",n,void 0)},831695:n=>{I.jb("Asin",n,void 0)},831747:n=>{I.jb("Acos",n,void 0)},831799:n=>{I.jb("Atan",n,void 0)},831851:n=>{I.jb("Sinh",n,void 0)},831903:n=>{I.jb("Cosh",n,void 0)},831955:n=>{I.jb("Asinh",n,void 0)},832008:n=>{I.jb("Acosh",n,void 0)},832061:n=>{I.jb("Atanh",n,void 0)},832114:n=>{I.jb("Tanh",n,void 0)},832166:n=>{I.jb("Not",n,void 0)},832217:(n,S,K)=>{I.jb("Clip",n,{min:S,max:K})},832286:n=>{I.jb("Clip",n,void 0)},832338:(n,S)=>{I.jb("Elu",n,{alpha:S})},832396:n=>{I.jb("Gelu",n,void 0)},832448:n=>{I.jb("Relu",n,void 0)},832500:(n,S)=>{I.jb("LeakyRelu",n,{alpha:S})},832564:(n,S)=>{I.jb("ThresholdedRelu",n,{alpha:S})},832634:(n,S)=>{I.jb("Cast",n,{to:S})},832692:n=>{I.jb("Add",n,void 0)},832743:n=>{I.jb("Sub",n,void 0)},832794:n=>{I.jb("Mul",n,void 0)},832845:n=>{I.jb("Div",n,void 0)},832896:n=>{I.jb("Pow",n,void 0)},832947:n=>{I.jb("Equal",n,void 0)},833e3:n=>{I.jb("Greater",n,void 0)},833055:n=>{I.jb("GreaterOrEqual",n,void 0)},833117:n=>{I.jb("Less",n,void 0)},833169:n=>{I.jb("LessOrEqual",n,void 0)},833228:(n,S,K,Y,V)=>{I.jb("ReduceMean",n,{keepDims:!!S,noopWithEmptyAxes:!!K,axes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},833403:(n,S,K,Y,V)=>{I.jb("ReduceMax",n,{keepDims:!!S,noopWithEmptyAxes:!!K,axes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},833577:(n,S,K,Y,V)=>{I.jb("ReduceMin",n,{keepDims:!!S,noopWithEmptyAxes:!!K,axes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},833751:(n,S,K,Y,V)=>{I.jb("ReduceProd",n,{keepDims:!!S,noopWithEmptyAxes:!!K,axes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},833926:(n,S,K,Y,V)=>{I.jb("ReduceSum",n,{keepDims:!!S,noopWithEmptyAxes:!!K,axes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834100:(n,S,K,Y,V)=>{I.jb("ReduceL1",n,{keepDims:!!S,noopWithEmptyAxes:!!K,axes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834273:(n,S,K,Y,V)=>{I.jb("ReduceL2",n,{keepDims:!!S,noopWithEmptyAxes:!!K,axes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834446:(n,S,K,Y,V)=>{I.jb("ReduceLogSum",n,{keepDims:!!S,noopWithEmptyAxes:!!K,axes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834623:(n,S,K,Y,V)=>{I.jb("ReduceSumSquare",n,{keepDims:!!S,noopWithEmptyAxes:!!K,axes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834803:(n,S,K,Y,V)=>{I.jb("ReduceLogSumExp",n,{keepDims:!!S,noopWithEmptyAxes:!!K,axes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},834983:n=>{I.jb("Where",n,void 0)},835036:(n,S,K)=>{I.jb("Transpose",n,{perm:S?Array.from(W().subarray(Number(S)>>>0,Number(K)>>>0)):[]})},835160:(n,S,K,Y)=>{I.jb("DepthToSpace",n,{blocksize:S,mode:ze(K),format:Y?"NHWC":"NCHW"})},835293:(n,S,K,Y)=>{I.jb("DepthToSpace",n,{blocksize:S,mode:ze(K),format:Y?"NHWC":"NCHW"})},835426:(n,S,K,Y,V,lA,KA,qA,te,Qe,Me,Te,qe,Ug,qI)=>{I.jb("ConvTranspose",n,{format:te?"NHWC":"NCHW",autoPad:S,dilations:[K],group:Y,kernelShape:[V],pads:[lA,KA],strides:[qA],wIsConst:()=>!!uA()[Qe>>>0],outputPadding:Me?Array.from(W().subarray(Number(Me)>>>0,Number(Te)>>>0)):[],outputShape:qe?Array.from(W().subarray(Number(qe)>>>0,Number(Ug)>>>0)):[],activation:ze(qI)})},835859:(n,S,K,Y,V,lA,KA,qA,te,Qe,Me,Te,qe,Ug)=>{I.jb("ConvTranspose",n,{format:qA?"NHWC":"NCHW",autoPad:S,dilations:Array.from(W().subarray(Number(K)>>>0,2+(Number(K)>>>0)>>>0)),group:Y,kernelShape:Array.from(W().subarray(Number(V)>>>0,2+(Number(V)>>>0)>>>0)),pads:Array.from(W().subarray(Number(lA)>>>0,4+(Number(lA)>>>0)>>>0)),strides:Array.from(W().subarray(Number(KA)>>>0,2+(Number(KA)>>>0)>>>0)),wIsConst:()=>!!uA()[te>>>0],outputPadding:Qe?Array.from(W().subarray(Number(Qe)>>>0,Number(Me)>>>0)):[],outputShape:Te?Array.from(W().subarray(Number(Te)>>>0,Number(qe)>>>0)):[],activation:ze(Ug)})},836520:(n,S,K,Y,V,lA,KA,qA,te,Qe,Me,Te,qe,Ug,qI)=>{I.jb("ConvTranspose",n,{format:te?"NHWC":"NCHW",autoPad:S,dilations:[K],group:Y,kernelShape:[V],pads:[lA,KA],strides:[qA],wIsConst:()=>!!uA()[Qe>>>0],outputPadding:Me?Array.from(W().subarray(Number(Me)>>>0,Number(Te)>>>0)):[],outputShape:qe?Array.from(W().subarray(Number(qe)>>>0,Number(Ug)>>>0)):[],activation:ze(qI)})},836953:(n,S,K,Y,V,lA,KA,qA,te,Qe,Me,Te,qe,Ug)=>{I.jb("ConvTranspose",n,{format:qA?"NHWC":"NCHW",autoPad:S,dilations:Array.from(W().subarray(Number(K)>>>0,2+(Number(K)>>>0)>>>0)),group:Y,kernelShape:Array.from(W().subarray(Number(V)>>>0,2+(Number(V)>>>0)>>>0)),pads:Array.from(W().subarray(Number(lA)>>>0,4+(Number(lA)>>>0)>>>0)),strides:Array.from(W().subarray(Number(KA)>>>0,2+(Number(KA)>>>0)>>>0)),wIsConst:()=>!!uA()[te>>>0],outputPadding:Qe?Array.from(W().subarray(Number(Qe)>>>0,Number(Me)>>>0)):[],outputShape:Te?Array.from(W().subarray(Number(Te)>>>0,Number(qe)>>>0)):[],activation:ze(Ug)})},837614:(n,S)=>{I.jb("GlobalAveragePool",n,{format:S?"NHWC":"NCHW"})},837705:(n,S,K,Y,V,lA,KA,qA,te,Qe,Me,Te,qe,Ug)=>{I.jb("AveragePool",n,{format:Ug?"NHWC":"NCHW",auto_pad:S,ceil_mode:K,count_include_pad:Y,storage_order:V,dilations:lA?Array.from(W().subarray(Number(lA)>>>0,Number(KA)>>>0)):[],kernel_shape:qA?Array.from(W().subarray(Number(qA)>>>0,Number(te)>>>0)):[],pads:Qe?Array.from(W().subarray(Number(Qe)>>>0,Number(Me)>>>0)):[],strides:Te?Array.from(W().subarray(Number(Te)>>>0,Number(qe)>>>0)):[]})},838184:(n,S)=>{I.jb("GlobalAveragePool",n,{format:S?"NHWC":"NCHW"})},838275:(n,S,K,Y,V,lA,KA,qA,te,Qe,Me,Te,qe,Ug)=>{I.jb("AveragePool",n,{format:Ug?"NHWC":"NCHW",auto_pad:S,ceil_mode:K,count_include_pad:Y,storage_order:V,dilations:lA?Array.from(W().subarray(Number(lA)>>>0,Number(KA)>>>0)):[],kernel_shape:qA?Array.from(W().subarray(Number(qA)>>>0,Number(te)>>>0)):[],pads:Qe?Array.from(W().subarray(Number(Qe)>>>0,Number(Me)>>>0)):[],strides:Te?Array.from(W().subarray(Number(Te)>>>0,Number(qe)>>>0)):[]})},838754:(n,S)=>{I.jb("GlobalMaxPool",n,{format:S?"NHWC":"NCHW"})},838841:(n,S,K,Y,V,lA,KA,qA,te,Qe,Me,Te,qe,Ug)=>{I.jb("MaxPool",n,{format:Ug?"NHWC":"NCHW",auto_pad:S,ceil_mode:K,count_include_pad:Y,storage_order:V,dilations:lA?Array.from(W().subarray(Number(lA)>>>0,Number(KA)>>>0)):[],kernel_shape:qA?Array.from(W().subarray(Number(qA)>>>0,Number(te)>>>0)):[],pads:Qe?Array.from(W().subarray(Number(Qe)>>>0,Number(Me)>>>0)):[],strides:Te?Array.from(W().subarray(Number(Te)>>>0,Number(qe)>>>0)):[]})},839316:(n,S)=>{I.jb("GlobalMaxPool",n,{format:S?"NHWC":"NCHW"})},839403:(n,S,K,Y,V,lA,KA,qA,te,Qe,Me,Te,qe,Ug)=>{I.jb("MaxPool",n,{format:Ug?"NHWC":"NCHW",auto_pad:S,ceil_mode:K,count_include_pad:Y,storage_order:V,dilations:lA?Array.from(W().subarray(Number(lA)>>>0,Number(KA)>>>0)):[],kernel_shape:qA?Array.from(W().subarray(Number(qA)>>>0,Number(te)>>>0)):[],pads:Qe?Array.from(W().subarray(Number(Qe)>>>0,Number(Me)>>>0)):[],strides:Te?Array.from(W().subarray(Number(Te)>>>0,Number(qe)>>>0)):[]})},839878:(n,S,K,Y,V)=>{I.jb("Gemm",n,{alpha:S,beta:K,transA:Y,transB:V})},839982:n=>{I.jb("MatMul",n,void 0)},840036:(n,S,K,Y)=>{I.jb("ArgMax",n,{keepDims:!!S,selectLastIndex:!!K,axis:Y})},840144:(n,S,K,Y)=>{I.jb("ArgMin",n,{keepDims:!!S,selectLastIndex:!!K,axis:Y})},840252:(n,S)=>{I.jb("Softmax",n,{axis:S})},840315:(n,S)=>{I.jb("Concat",n,{axis:S})},840375:(n,S,K,Y,V)=>{I.jb("Split",n,{axis:S,numOutputs:K,splitSizes:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},840531:n=>{I.jb("Expand",n,void 0)},840585:(n,S)=>{I.jb("Gather",n,{axis:Number(S)})},840656:(n,S)=>{I.jb("GatherElements",n,{axis:Number(S)})},840735:(n,S)=>{I.jb("GatherND",n,{batch_dims:Number(S)})},840814:(n,S,K,Y,V,lA,KA,qA,te,Qe,Me)=>{I.jb("Resize",n,{antialias:S,axes:K?Array.from(W().subarray(Number(K)>>>0,Number(Y)>>>0)):[],coordinateTransformMode:ze(V),cubicCoeffA:lA,excludeOutside:KA,extrapolationValue:qA,keepAspectRatioPolicy:ze(te),mode:ze(Qe),nearestMode:ze(Me)})},841176:(n,S,K,Y,V,lA,KA)=>{I.jb("Slice",n,{starts:S?Array.from(W().subarray(Number(S)>>>0,Number(K)>>>0)):[],ends:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[],axes:lA?Array.from(W().subarray(Number(lA)>>>0,Number(KA)>>>0)):[]})},841440:n=>{I.jb("Tile",n,void 0)},841492:(n,S,K)=>{I.jb("InstanceNormalization",n,{epsilon:S,format:K?"NHWC":"NCHW"})},841606:(n,S,K)=>{I.jb("InstanceNormalization",n,{epsilon:S,format:K?"NHWC":"NCHW"})},841720:n=>{I.jb("Range",n,void 0)},841773:(n,S)=>{I.jb("Einsum",n,{equation:ze(S)})},841854:(n,S,K,Y,V)=>{I.jb("Pad",n,{mode:S,value:K,pads:Y?Array.from(W().subarray(Number(Y)>>>0,Number(V)>>>0)):[]})},841997:(n,S,K,Y,V,lA)=>{I.jb("BatchNormalization",n,{epsilon:S,momentum:K,spatial:!!V,trainingMode:!!Y,format:lA?"NHWC":"NCHW"})},842166:(n,S,K,Y,V,lA)=>{I.jb("BatchNormalization",n,{epsilon:S,momentum:K,spatial:!!V,trainingMode:!!Y,format:lA?"NHWC":"NCHW"})},842335:(n,S,K)=>{I.jb("CumSum",n,{exclusive:Number(S),reverse:Number(K)})},842432:(n,S,K)=>{I.jb("DequantizeLinear",n,{axis:S,blockSize:K})},842522:(n,S,K,Y,V)=>{I.jb("GridSample",n,{align_corners:S,mode:ze(K),padding_mode:ze(Y),format:V?"NHWC":"NCHW"})},842692:(n,S,K,Y,V)=>{I.jb("GridSample",n,{align_corners:S,mode:ze(K),padding_mode:ze(Y),format:V?"NHWC":"NCHW"})},842862:(n,S)=>{I.jb("ScatterND",n,{reduction:ze(S)})},842947:(n,S,K,Y,V,lA,KA,qA,te)=>{I.jb("Attention",n,{numHeads:S,isUnidirectional:K,maskFilterValue:Y,scale:V,doRotary:lA,qkvHiddenSizes:KA?Array.from(W().subarray(Number(qA)>>>0,Number(qA)+KA>>>0)):[],pastPresentShareBuffer:!!te})},843219:n=>{I.jb("BiasAdd",n,void 0)},843274:n=>{I.jb("BiasSplitGelu",n,void 0)},843335:n=>{I.jb("FastGelu",n,void 0)},843391:(n,S,K,Y,V,lA,KA,qA,te,Qe,Me,Te,qe,Ug,qI,St)=>{I.jb("Conv",n,{format:Te?"NHWC":"NCHW",auto_pad:S,dilations:K?Array.from(W().subarray(Number(K)>>>0,Number(Y)>>>0)):[],group:V,kernel_shape:lA?Array.from(W().subarray(Number(lA)>>>0,Number(KA)>>>0)):[],pads:qA?Array.from(W().subarray(Number(qA)>>>0,Number(te)>>>0)):[],strides:Qe?Array.from(W().subarray(Number(Qe)>>>0,Number(Me)>>>0)):[],w_is_const:()=>!!uA()[Number(qe)>>>0],activation:ze(Ug),activation_params:qI?Array.from(xA().subarray(Number(qI)>>>0,Number(St)>>>0)):[]})},843975:n=>{I.jb("Gelu",n,void 0)},844027:(n,S,K,Y,V,lA,KA,qA,te)=>{I.jb("GroupQueryAttention",n,{numHeads:S,kvNumHeads:K,scale:Y,softcap:V,doRotary:lA,rotaryInterleaved:KA,smoothSoftmax:qA,localWindowSize:te})},844244:(n,S,K,Y)=>{I.jb("LayerNormalization",n,{axis:S,epsilon:K,simplified:!!Y})},844355:(n,S,K,Y)=>{I.jb("LayerNormalization",n,{axis:S,epsilon:K,simplified:!!Y})},844466:(n,S,K,Y,V,lA)=>{I.jb("MatMulNBits",n,{k:S,n:K,accuracyLevel:Y,bits:V,blockSize:lA})},844593:(n,S,K,Y,V,lA)=>{I.jb("MultiHeadAttention",n,{numHeads:S,isUnidirectional:K,maskFilterValue:Y,scale:V,doRotary:lA})},844752:(n,S)=>{I.jb("QuickGelu",n,{alpha:S})},844816:(n,S,K,Y,V)=>{I.jb("RotaryEmbedding",n,{interleaved:!!S,numHeads:K,rotaryEmbeddingDim:Y,scale:V})},844955:(n,S,K)=>{I.jb("SkipLayerNormalization",n,{epsilon:S,simplified:!!K})},845057:(n,S,K)=>{I.jb("SkipLayerNormalization",n,{epsilon:S,simplified:!!K})},845159:(n,S,K,Y)=>{I.jb("GatherBlockQuantized",n,{gatherAxis:S,quantizeAxis:K,blockSize:Y})},845280:n=>{I.Zb(n)},845314:(n,S)=>I.ac(Number(n),Number(S),I.Fb.dc,I.Fb.errors)};function dA(n,S,K){return rI(async()=>{await I.Xb(Number(n),Number(S),Number(K))})}function YA(){return typeof wasmOffsetConverter<"u"}class HA{name="ExitStatus";constructor(S){this.message=`Program terminated with exit(${S})`,this.status=S}}var Ae=n=>{n.terminate(),n.onmessage=()=>{}},SA=[],re=n=>{TA.length==0&&(xg(),qg(TA[0]));var S=TA.pop();if(!S)return 6;ke.push(S),pe[n.Ab]=S,S.Ab=n.Ab;var K={Bb:"run",fc:n.ec,Hb:n.Hb,Ab:n.Ab};return S.postMessage(K,n.Mb),0},$A=0,WA=(n,S,...K)=>{for(var Y=2*K.length,V=Ti(),lA=xi(8*Y),KA=lA>>>3,qA=0;qA>>0]=te)}return n=Ui(n,0,Y,lA,S),XI(V),n};function Ce(n){if(o)return WA(0,1,n);if(F=n,!(0<$A)){for(var S of ke)Ae(S);for(S of TA)Ae(S);TA=[],ke=[],pe={},CA=!0}c(0,new HA(n))}function ee(n){if(o)return WA(1,0,n);oe(n)}var oe=n=>{if(F=n,o)throw ee(n),"unwind";Ce(n)},TA=[],ke=[],Je=[],pe={},fg=n=>{var S=n.Ab;delete pe[S],TA.push(n),ke.splice(ke.indexOf(n),1),n.Ab=0,pt(S)};function zg(){Je.forEach(n=>n())}var qg=n=>new Promise(S=>{n.onmessage=V=>{var lA=(V=V.data).Bb;if(V.Gb&&V.Gb!=Bi()){var KA=pe[V.Gb];KA?KA.postMessage(V,V.Mb):_(`Internal error! Worker sent a message "${lA}" to target pthread ${V.Gb}, but that thread no longer exists!`)}else lA==="checkMailbox"?sA():lA==="spawnThread"?re(V):lA==="cleanupThread"?fg(pe[V.hc]):lA==="loaded"?(n.loaded=!0,S(n)):lA==="alert"?alert(`Thread ${V.ic}: ${V.text}`):V.target==="setimmediate"?n.postMessage(V):lA==="callHandler"?I[V.Qb](...V.args):lA&&_(`worker sent an unknown command ${lA}`)},n.onerror=V=>{throw _(`worker sent an error! ${V.filename}:${V.lineno}: ${V.message}`),V};var K,Y=[];for(K of[])I.propertyIsEnumerable(K)&&Y.push(K);n.postMessage({Bb:"load",Rb:Y,kc:y,lc:M})});function xg(){var n=new Worker((()=>{let S=URL;return import.meta.url>"file:"&&import.meta.url<"file;"?new S("ort.bundle.min.mjs",import.meta.url):new URL(import.meta.url)})(),{type:"module",workerData:"em-pthread",name:"em-pthread"});TA.push(n)}var rg=n=>{kA();var S=nA()[n+52>>>2>>>0];n=nA()[n+56>>>2>>>0],yt(S,S-n),XI(S)},U=(n,S)=>{$A=0,n=Yi(n,S),0<$A?F=n:bi(n)};class wg{constructor(S){this.Ib=S-24}}function xI(n,S,K){var Y=new wg(n>>>=0);throw S>>>=0,K>>>=0,nA()[Y.Ib+16>>>2>>>0]=0,nA()[Y.Ib+4>>>2>>>0]=S,nA()[Y.Ib+8>>>2>>>0]=K,n}function fI(n,S,K,Y){return o?WA(2,1,n,S,K,Y):AI(n,S,K,Y)}function AI(n,S,K,Y){if(n>>>=0,K>>>=0,Y>>>=0,C===void 0)return 6;var V=[];return o&&V.length===0?fI(n,S>>>=0,K,Y):(n={ec:K,Ab:n,Hb:Y,Mb:V},o?(n.Bb="spawnThread",postMessage(n,V),0):re(n))}var he=typeof TextDecoder<"u"?new TextDecoder:void 0,EI=(n,S=0,K=NaN)=>{var Y=(S>>>=0)+K;for(K=S;n[K]&&!(K>=Y);)++K;if(16(V=(240&V)==224?(15&V)<<12|lA<<6|KA:(7&V)<<18|lA<<12|KA<<6|63&n[S++])?Y+=String.fromCharCode(V):(V-=65536,Y+=String.fromCharCode(55296|V>>10,56320|1023&V))}}else Y+=String.fromCharCode(V)}return Y},ze=(n,S)=>(n>>>=0)?EI(v(),n,S):"";function Ne(n,S,K){return o?WA(3,1,n,S,K):0}function lI(n,S){if(o)return WA(4,1,n,S)}var R=n=>{for(var S=0,K=0;K=Y?S++:2047>=Y?S+=2:55296<=Y&&57343>=Y?(S+=4,++K):S+=3}return S},gA=(n,S,K)=>{var Y=v();if(S>>>=0,0=KA&&(KA=65536+((1023&KA)<<10)|1023&n.charCodeAt(++lA)),127>=KA){if(S>=K)break;Y[S++>>>0]=KA}else{if(2047>=KA){if(S+1>=K)break;Y[S++>>>0]=192|KA>>6}else{if(65535>=KA){if(S+2>=K)break;Y[S++>>>0]=224|KA>>12}else{if(S+3>=K)break;Y[S++>>>0]=240|KA>>18,Y[S++>>>0]=128|KA>>12&63}Y[S++>>>0]=128|KA>>6&63}Y[S++>>>0]=128|63&KA}}Y[S>>>0]=0,n=S-V}else n=0;return n};function j(n,S){if(o)return WA(5,1,n,S)}function IA(n,S,K){if(o)return WA(6,1,n,S,K)}function aA(n,S,K){return o?WA(7,1,n,S,K):0}function yA(n,S){if(o)return WA(8,1,n,S)}function bA(n,S,K){if(o)return WA(9,1,n,S,K)}function ae(n,S,K,Y){if(o)return WA(10,1,n,S,K,Y)}function Ee(n,S,K,Y){if(o)return WA(11,1,n,S,K,Y)}function Ie(n,S,K,Y){if(o)return WA(12,1,n,S,K,Y)}function _e(n){if(o)return WA(13,1,n)}function be(n,S){if(o)return WA(14,1,n,S)}function tg(n,S,K){if(o)return WA(15,1,n,S,K)}var Ag,lg,Og=()=>GA(""),gg=n=>{for(var S="";v()[n>>>0];)S+=Ag[v()[n++>>>0]];return S},og={},Wg={};function Lg(n,S,K={}){return(function(Y,V,lA={}){var KA=V.name;if(!Y)throw new lg(`type "${KA}" must have a positive integer typeid pointer`);if(Wg.hasOwnProperty(Y)){if(lA.Sb)return;throw new lg(`Cannot register type '${KA}' twice`)}Wg[Y]=V,og.hasOwnProperty(Y)&&(V=og[Y],delete og[Y],V.forEach(qA=>qA()))})(n,S,K)}var sI=(n,S,K)=>{switch(S){case 1:return K?Y=>uA()[Y>>>0]:Y=>v()[Y>>>0];case 2:return K?Y=>x()[Y>>>1>>>0]:Y=>$()[Y>>>1>>>0];case 4:return K?Y=>W()[Y>>>2>>>0]:Y=>nA()[Y>>>2>>>0];case 8:return K?Y=>tA[Y>>>3]:Y=>AA[Y>>>3];default:throw new TypeError(`invalid integer width (${S}): ${n}`)}};function CI(n,S,K){K>>>=0,Lg(n>>>=0,{name:S=gg(S>>>0),fromWireType:Y=>Y,toWireType:function(Y,V){if(typeof V!="bigint"&&typeof V!="number")throw V=V===null?"null":(Y=typeof V)=="object"||Y==="array"||Y==="function"?V.toString():""+V,new TypeError(`Cannot convert "${V}" to ${this.name}`);return typeof V=="number"&&(V=BigInt(V)),V},Cb:jg,readValueFromPointer:sI(S,K,S.indexOf("u")==-1),Db:null})}var jg=8;function cI(n,S,K,Y){Lg(n>>>=0,{name:S=gg(S>>>0),fromWireType:function(V){return!!V},toWireType:function(V,lA){return lA?K:Y},Cb:jg,readValueFromPointer:function(V){return this.fromWireType(v()[V>>>0])},Db:null})}var $g=[],yg=[];function cg(n){9<(n>>>=0)&&--yg[n+1]==0&&(yg[n]=void 0,$g.push(n))}var $e=n=>{if(!n)throw new lg("Cannot use deleted val. handle = "+n);return yg[n]},mg=n=>{switch(n){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:let S=$g.pop()||yg.length;return yg[S]=n,yg[S+1]=1,S}};function iI(n){return this.fromWireType(nA()[n>>>2>>>0])}var Tg={name:"emscripten::val",fromWireType:n=>{var S=$e(n);return cg(n),S},toWireType:(n,S)=>mg(S),Cb:jg,readValueFromPointer:iI,Db:null};function tI(n){return Lg(n>>>0,Tg)}var yI=(n,S)=>{switch(S){case 4:return function(K){return this.fromWireType(xA()[K>>>2>>>0])};case 8:return function(K){return this.fromWireType(RA()[K>>>3>>>0])};default:throw new TypeError(`invalid float width (${S}): ${n}`)}};function l(n,S,K){K>>>=0,Lg(n>>>=0,{name:S=gg(S>>>0),fromWireType:Y=>Y,toWireType:(Y,V)=>V,Cb:jg,readValueFromPointer:yI(S,K),Db:null})}function f(n,S,K,Y,V){if(n>>>=0,K>>>=0,S=gg(S>>>0),V===-1&&(V=4294967295),V=qA=>qA,Y===0){var lA=32-8*K;V=qA=>qA<>>lA}var KA=S.includes("unsigned")?function(qA,te){return te>>>0}:function(qA,te){return te};Lg(n,{name:S,fromWireType:V,toWireType:KA,Cb:jg,readValueFromPointer:sI(S,K,Y!==0),Db:null})}function k(n,S,K){function Y(lA){var KA=nA()[lA>>>2>>>0];return lA=nA()[lA+4>>>2>>>0],new V(uA().buffer,lA,KA)}var V=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array][S];Lg(n>>>=0,{name:K=gg(K>>>0),fromWireType:Y,Cb:jg,readValueFromPointer:Y},{Sb:!0})}function b(n,S){Lg(n>>>=0,{name:S=gg(S>>>0),fromWireType:function(K){for(var Y,V=nA()[K>>>2>>>0],lA=K+4,KA=lA,qA=0;qA<=V;++qA){var te=lA+qA;qA!=V&&v()[te>>>0]!=0||(KA=ze(KA,te-KA),Y===void 0?Y=KA:(Y+="\0",Y+=KA),KA=te+1)}return aI(K),Y},toWireType:function(K,Y){Y instanceof ArrayBuffer&&(Y=new Uint8Array(Y));var V=typeof Y=="string";if(!(V||Y instanceof Uint8Array||Y instanceof Uint8ClampedArray||Y instanceof Int8Array))throw new lg("Cannot pass non-string to std::string");var lA=V?R(Y):Y.length,KA=ZI(4+lA+1),qA=KA+4;if(nA()[KA>>>2>>>0]=lA,V)gA(Y,qA,lA+1);else if(V)for(V=0;V>>0]=te}else for(V=0;V>>0]=Y[V];return K!==null&&K.push(aI,KA),KA},Cb:jg,readValueFromPointer:iI,Db(K){aI(K)}})}var eA=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0,EA=(n,S)=>{for(var K=n>>1,Y=K+S/2;!(K>=Y)&&$()[K>>>0];)++K;if(32<(K<<=1)-n&&eA)return eA.decode(v().slice(n,K));for(K="",Y=0;!(Y>=S/2);++Y){var V=x()[n+2*Y>>>1>>>0];if(V==0)break;K+=String.fromCharCode(V)}return K},DA=(n,S,K)=>{if(K??=2147483647,2>K)return 0;var Y=S;K=(K-=2)<2*n.length?K/2:n.length;for(var V=0;V>>1>>>0]=lA,S+=2}return x()[S>>>1>>>0]=0,S-Y},MA=n=>2*n.length,se=(n,S)=>{for(var K=0,Y="";!(K>=S/4);){var V=W()[n+4*K>>>2>>>0];if(V==0)break;++K,65536<=V?(V-=65536,Y+=String.fromCharCode(55296|V>>10,56320|1023&V)):Y+=String.fromCharCode(V)}return Y},me=(n,S,K)=>{if(S>>>=0,K??=2147483647,4>K)return 0;var Y=S;K=Y+K-4;for(var V=0;V=lA&&(lA=65536+((1023&lA)<<10)|1023&n.charCodeAt(++V)),W()[S>>>2>>>0]=lA,(S+=4)+4>K)break}return W()[S>>>2>>>0]=0,S-Y},ve=n=>{for(var S=0,K=0;K=Y&&++K,S+=4}return S};function Ze(n,S,K){if(n>>>=0,S>>>=0,K=gg(K>>>=0),S===2)var Y=EA,V=DA,lA=MA,KA=qA=>$()[qA>>>1>>>0];else S===4&&(Y=se,V=me,lA=ve,KA=qA=>nA()[qA>>>2>>>0]);Lg(n,{name:K,fromWireType:qA=>{for(var te,Qe=nA()[qA>>>2>>>0],Me=qA+4,Te=0;Te<=Qe;++Te){var qe=qA+4+Te*S;Te!=Qe&&KA(qe)!=0||(Me=Y(Me,qe-Me),te===void 0?te=Me:(te+="\0",te+=Me),Me=qe+S)}return aI(qA),te},toWireType:(qA,te)=>{if(typeof te!="string")throw new lg(`Cannot pass non-string to C++ string type ${K}`);var Qe=lA(te),Me=ZI(4+Qe+S);return nA()[Me>>>2>>>0]=Qe/S,V(te,Me+4,Qe+S),qA!==null&&qA.push(aI,Me),Me},Cb:jg,readValueFromPointer:iI,Db(qA){aI(qA)}})}function BA(n,S){Lg(n>>>=0,{Tb:!0,name:S=gg(S>>>0),Cb:0,fromWireType:()=>{},toWireType:()=>{}})}function N(n){Ki(n>>>0,!s,1,!t,131072,!1),zg()}var H=n=>{if(!CA)try{if(n(),!(0<$A))try{o?bi(F):oe(F)}catch(S){S instanceof HA||S=="unwind"||c(0,S)}}catch(S){S instanceof HA||S=="unwind"||c(0,S)}};function oA(n){n>>>=0,typeof Atomics.jc=="function"&&(Atomics.jc(W(),n>>>2,n).value.then(sA),n+=128,Atomics.store(W(),n>>>2,1))}var sA=()=>{var n=Bi();n&&(oA(n),H(ft))};function hA(n,S){(n>>>=0)==S>>>0?setTimeout(sA):o?postMessage({Gb:n,Bb:"checkMailbox"}):(n=pe[n])&&n.postMessage({Bb:"checkMailbox"})}var NA=[];function zA(n,S,K,Y,V){for(S>>>=0,Y/=2,NA.length=Y,K=V>>>0>>>3,V=0;V>>0];return(S?_A[S]:Do[n])(...NA)}var ge=()=>{$A=0};function ZA(n){n>>>=0,o?postMessage({Bb:"cleanupThread",hc:n}):fg(pe[n])}function VA(n){}var ce=(n,S)=>{var K=Wg[n];if(K===void 0)throw n=ai(n),K=gg(n),aI(n),new lg(`${S} has unknown type ${K}`);return K},Re=(n,S,K)=>{var Y=[];return n=n.toWireType(Y,K),Y.length&&(nA()[S>>>2>>>0]=mg(Y)),n};function ng(n,S,K){return S>>>=0,K>>>=0,n=$e(n>>>0),S=ce(S,"emval::as"),Re(S,K,n)}function Ng(n,S){return S>>>=0,n=$e(n>>>0),(S=ce(S,"emval::as")).toWireType(null,n)}var sg=n=>{try{n()}catch(S){GA(S)}},Eg=0,eg=null,oI=0,dI=[],Kg={},mI={},ag=0,Mg=null,Yg=[];function rI(n){return(function(S){if(!CA){if(Eg===0){var K=!1,Y=!1;S((V=0)=>{if(!CA&&(oI=V,K=!0,Y)){Eg=2,sg(()=>Pi(eg)),typeof MainLoop<"u"&&MainLoop.Pb&&MainLoop.resume(),V=!1;try{var lA=(function(){var te=W()[eg+8>>>2>>>0];return te=ue[mI[te]],--$A,te()})()}catch(te){lA=te,V=!0}var KA=!1;if(!eg){var qA=Mg;qA&&(Mg=null,(V?qA.reject:qA.resolve)(lA),KA=!0)}if(V&&!KA)throw lA}}),Y=!0,K||(Eg=1,eg=(function(){var V=ZI(65548),lA=V+12;nA()[V>>>2>>>0]=lA,nA()[V+4>>>2>>>0]=lA+65536,lA=dI[0];var KA=Kg[lA];return KA===void 0&&(KA=ag++,Kg[lA]=KA,mI[KA]=lA),lA=KA,W()[V+8>>>2>>>0]=lA,V})(),typeof MainLoop<"u"&&MainLoop.Pb&&MainLoop.pause(),sg(()=>mt(eg)))}else Eg===2?(Eg=0,sg(Ft),aI(eg),eg=null,Yg.forEach(H)):GA(`invalid state: ${Eg}`);return oI}})(S=>{n().then(S)})}function MI(n){return n>>>=0,rI(async()=>{var S=await $e(n);return mg(S)})}var _g=[];function uI(n,S,K,Y){return K>>>=0,Y>>>=0,(n=_g[n>>>0])(null,S=$e(S>>>0),K,Y)}var Rg={},Bg=n=>{var S=Rg[n];return S===void 0?gg(n):S};function Fg(n,S,K,Y,V){return K>>>=0,Y>>>=0,V>>>=0,(n=_g[n>>>0])(S=$e(S>>>0),S[K=Bg(K)],Y,V)}var dg=()=>typeof globalThis=="object"?globalThis:Function("return this")();function eI(n){return(n>>>=0)==0?mg(dg()):(n=Bg(n),mg(dg()[n]))}var VI=n=>{var S=_g.length;return _g.push(n),S},TI=(n,S)=>{for(var K=Array(n),Y=0;Y>>2>>>0],"parameter "+Y);return K},It=(n,S)=>Object.defineProperty(S,"name",{value:n});function $t(n,S,K){var Y=(S=TI(n,S>>>0)).shift();n--;var V=`return function (obj, func, destructorsRef, args) { `,lA=0,KA=[];K===0&&KA.push("obj");for(var qA=["retType"],te=[Y],Qe=0;QeMe.name).join(", ")}) => ${Y.name}>`,VI(It(K,n))}function Zt(n){return n=Bg(n>>>0),mg(I[n])}function Xt(n,S){return S>>>=0,n=$e(n>>>0),S=$e(S),mg(n[S])}function Ao(n){9<(n>>>=0)&&(yg[n+1]+=1)}function zI(){return mg([])}function eo(n){n=$e(n>>>0);for(var S=Array(n.length),K=0;K>>0))}function Io(){return mg({})}function io(n){for(var S=$e(n>>>=0);S.length;){var K=S.pop();S.pop()(K)}cg(n)}function to(n,S,K){S>>>=0,K>>>=0,n=$e(n>>>0),S=$e(S),K=$e(K),n[S]=K}function $I(n,S){return S>>>=0,n=(n=ce(n>>>0,"_emval_take_value")).readValueFromPointer(S),mg(n)}function oo(n,S){n=-9007199254740992>n||9007199254740992>>=0,n=new Date(1e3*n),W()[S>>>2>>>0]=n.getUTCSeconds(),W()[S+4>>>2>>>0]=n.getUTCMinutes(),W()[S+8>>>2>>>0]=n.getUTCHours(),W()[S+12>>>2>>>0]=n.getUTCDate(),W()[S+16>>>2>>>0]=n.getUTCMonth(),W()[S+20>>>2>>>0]=n.getUTCFullYear()-1900,W()[S+24>>>2>>>0]=n.getUTCDay(),n=(n.getTime()-Date.UTC(n.getUTCFullYear(),0,1,0,0,0,0))/864e5|0,W()[S+28>>>2>>>0]=n}var it=n=>n%4==0&&(n%100!=0||n%400==0),tt=[0,31,60,91,121,152,182,213,244,274,305,335],ot=[0,31,59,90,120,151,181,212,243,273,304,334];function so(n,S){n=-9007199254740992>n||9007199254740992>>=0,n=new Date(1e3*n),W()[S>>>2>>>0]=n.getSeconds(),W()[S+4>>>2>>>0]=n.getMinutes(),W()[S+8>>>2>>>0]=n.getHours(),W()[S+12>>>2>>>0]=n.getDate(),W()[S+16>>>2>>>0]=n.getMonth(),W()[S+20>>>2>>>0]=n.getFullYear()-1900,W()[S+24>>>2>>>0]=n.getDay();var K=(it(n.getFullYear())?tt:ot)[n.getMonth()]+n.getDate()-1|0;W()[S+28>>>2>>>0]=K,W()[S+36>>>2>>>0]=-60*n.getTimezoneOffset(),K=new Date(n.getFullYear(),6,1).getTimezoneOffset();var Y=new Date(n.getFullYear(),0,1).getTimezoneOffset();n=0|(K!=Y&&n.getTimezoneOffset()==Math.min(Y,K)),W()[S+32>>>2>>>0]=n}function st(n){n>>>=0;var S=new Date(W()[n+20>>>2>>>0]+1900,W()[n+16>>>2>>>0],W()[n+12>>>2>>>0],W()[n+8>>>2>>>0],W()[n+4>>>2>>>0],W()[n>>>2>>>0],0),K=W()[n+32>>>2>>>0],Y=S.getTimezoneOffset(),V=new Date(S.getFullYear(),6,1).getTimezoneOffset(),lA=new Date(S.getFullYear(),0,1).getTimezoneOffset(),KA=Math.min(lA,V);return 0>K?W()[n+32>>>2>>>0]=+(V!=lA&&KA==Y):0>>2>>>0]=S.getDay(),K=(it(S.getFullYear())?tt:ot)[S.getMonth()]+S.getDate()-1|0,W()[n+28>>>2>>>0]=K,W()[n>>>2>>>0]=S.getSeconds(),W()[n+4>>>2>>>0]=S.getMinutes(),W()[n+8>>>2>>>0]=S.getHours(),W()[n+12>>>2>>>0]=S.getDate(),W()[n+16>>>2>>>0]=S.getMonth(),W()[n+20>>>2>>>0]=S.getYear(),n=S.getTime(),BigInt(isNaN(n)?-1:n/1e3)}function Ct(n,S,K,Y,V,lA,KA){return o?WA(16,1,n,S,K,Y,V,lA,KA):-52}function rt(n,S,K,Y,V,lA){if(o)return WA(17,1,n,S,K,Y,V,lA)}var vI={},Co=()=>performance.timeOrigin+performance.now();function Ni(n,S){if(o)return WA(18,1,n,S);if(vI[n]&&(clearTimeout(vI[n].id),delete vI[n]),!S)return 0;var K=setTimeout(()=>{delete vI[n],H(()=>Ji(n,performance.timeOrigin+performance.now()))},S);return vI[n]={id:K,qc:S},0}function ro(n,S,K,Y){n>>>=0,S>>>=0,K>>>=0,Y>>>=0;var V=new Date().getFullYear(),lA=new Date(V,0,1).getTimezoneOffset();V=new Date(V,6,1).getTimezoneOffset();var KA=Math.max(lA,V);nA()[n>>>2>>>0]=60*KA,W()[S>>>2>>>0]=+(lA!=V),n=(S=qA=>{var te=Math.abs(qA);return`UTC${0<=qA?"-":"+"}${String(Math.floor(te/60)).padStart(2,"0")}${String(te%60).padStart(2,"0")}`})(lA),S=S(V),VDate.now();function Bs(n,S,K){return 0<=n&&3>=n?(n===0?n=Date.now():n=performance.timeOrigin+performance.now(),tA[K>>>0>>>3]=BigInt(Math.round(1e6*n)),0):28}var _i=[],Ri=(n,S)=>{_i.length=0;for(var K;K=v()[n++>>>0];){var Y=K!=105;S+=(Y&=K!=112)&&S%8?4:0,_i.push(K==112?nA()[S>>>2>>>0]:K==106?tA[S>>>3]:K==105?W()[S>>>2>>>0]:RA()[S>>>3>>>0]),S+=Y?8:4}return _i};function Bt(n,S,K){return n>>>=0,S=Ri(S>>>0,K>>>0),_A[n](...S)}function Gi(n,S,K){return n>>>=0,S=Ri(S>>>0,K>>>0),_A[n](...S)}var ao=()=>{};function Bo(n,S){return _(ze(n>>>0,S>>>0))}var Qo=()=>{throw $A+=1,"unwind"};function no(){return 4294901760}var Eo=()=>navigator.hardwareConcurrency;function lo(){return GA("Cannot use emscripten_pc_get_function without -sUSE_OFFSET_CONVERTER"),0}function co(n){n>>>=0;var S=v().length;if(n<=S||4294901760=K;K*=2){var Y=S*(1+.2/K);Y=Math.min(Y,n+100663296);A:{Y=(Math.min(4294901760,65536*Math.ceil(Math.max(n,Y)/65536))-y.buffer.byteLength+65535)/65536|0;try{y.grow(Y),kA();var V=1;break A}catch{}V=void 0}if(V)return!0}return!1}var si=()=>(GA("Cannot use convertFrameToPC (needed by __builtin_return_address) without -sUSE_OFFSET_CONVERTER"),0),HI={},Qt=n=>{n.forEach(S=>{si()})};function ki(){var n=Error().stack.toString().split(` `);return n[0]=="Error"&&n.shift(),Qt(n),HI.Lb=si(),HI.cc=n,HI.Lb}function nt(n,S,K){if(n>>>=0,S>>>=0,HI.Lb==n)var Y=HI.cc;else(Y=Error().stack.toString().split(` `))[0]=="Error"&&Y.shift(),Qt(Y);for(var V=3;Y[V]&&si()!=n;)++V;for(n=0;n>>2>>>0]=si();return n}var Li,Ci={},YI=()=>{if(!Li){var n,S={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:"./this.program"};for(n in Ci)Ci[n]===void 0?delete S[n]:S[n]=Ci[n];var K=[];for(n in S)K.push(`${n}=${S[n]}`);Li=K}return Li};function Et(n,S){if(o)return WA(19,1,n,S);n>>>=0,S>>>=0;var K=0;return YI().forEach((Y,V)=>{var lA=S+K;for(V=nA()[n+4*V>>>2>>>0]=lA,lA=0;lA>>0]=Y.charCodeAt(lA);uA()[V>>>0]=0,K+=Y.length+1}),0}function uo(n,S){if(o)return WA(20,1,n,S);n>>>=0,S>>>=0;var K=YI();nA()[n>>>2>>>0]=K.length;var Y=0;return K.forEach(V=>Y+=V.length+1),nA()[S>>>2>>>0]=Y,0}function lt(n){return o?WA(21,1,n):52}function ho(n,S,K,Y){return o?WA(22,1,n,S,K,Y):52}function ct(n,S,K,Y){return o?WA(23,1,n,S,K,Y):70}var dt=[null,[],[]];function ut(n,S,K,Y){if(o)return WA(24,1,n,S,K,Y);S>>>=0,K>>>=0,Y>>>=0;for(var V=0,lA=0;lA>>2>>>0],qA=nA()[S+4>>>2>>>0];S+=8;for(var te=0;te>>0],Me=dt[n];Qe===0||Qe===10?((n===1?u:_)(EI(Me)),Me.length=0):Me.push(Qe)}V+=qA}return nA()[Y>>>2>>>0]=V,0}o||(function(){for(var n=I.numThreads-1;n--;)xg();SA.unshift(()=>{wA++,(function(S){o?S():Promise.all(TA.map(qg)).then(S)})(()=>JA())})})();for(var ht=Array(256),ri=0;256>ri;++ri)ht[ri]=String.fromCharCode(ri);Ag=ht,lg=I.BindingError=class extends Error{constructor(n){super(n),this.name="BindingError"}},I.InternalError=class extends Error{constructor(n){super(n),this.name="InternalError"}},yg.push(0,1,void 0,1,null,1,!0,1,!1,1),I.count_emval_handles=()=>yg.length/2-5-$g.length;var ue,Do=[Ce,ee,fI,Ne,lI,j,IA,aA,yA,bA,ae,Ee,Ie,_e,be,tg,Ct,rt,Ni,Et,uo,lt,ho,ct,ut];(async function(){function n(Y,V){return ue=Y.exports,ue=(function(){var lA=ue,KA={};for(let[qA,te]of Object.entries(lA))KA[qA]=typeof te=="function"?(...Qe)=>{dI.push(qA);try{return te(...Qe)}finally{CA||(dI.pop(),eg&&Eg===1&&dI.length===0&&(Eg=0,$A+=1,sg(Mt),typeof Fibers<"u"&&Fibers.rc()))}}:te;return KA})(),ue=(function(){var lA=ue,KA=te=>Qe=>te(Qe)>>>0,qA=te=>()=>te()>>>0;return(lA=Object.assign({},lA)).Da=KA(lA.Da),lA.fb=qA(lA.fb),lA.hb=KA(lA.hb),lA.tb=KA(lA.tb),lA.ub=qA(lA.ub),lA.__cxa_get_exception_ptr=KA(lA.__cxa_get_exception_ptr),lA})(),Je.push(ue.ib),M=V,JA(),ue}wA++;var S=fA();if(I.instantiateWasm)return new Promise(Y=>{I.instantiateWasm(S,(V,lA)=>{n(V,lA),Y(V.exports)})});if(o)return new Promise(Y=>{vA=V=>{var lA=new WebAssembly.Instance(V,fA());Y(n(lA,V))}});q??=I.locateFile?I.locateFile?I.locateFile("ort-wasm-simd-threaded.jsep.wasm",p):p+"ort-wasm-simd-threaded.jsep.wasm":new URL(""+new URL("ort-wasm-simd-threaded.jsep-B0T3yYHD.wasm",import.meta.url).href,import.meta.url).href;try{var K=await(async function(Y){var V=q;if(!rA&&typeof WebAssembly.instantiateStreaming=="function"&&!cA(V))try{var lA=fetch(V,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(lA,Y)}catch(KA){_(`wasm streaming compile failed: ${KA}`),_("falling back to ArrayBuffer instantiation")}return(async function(KA,qA){try{var te=await(async function(Qe){if(!rA)try{var Me=await B(Qe);return new Uint8Array(Me)}catch{}if(Qe==q&&rA)Qe=new Uint8Array(rA);else{if(!a)throw"both async and sync fetching of the wasm failed";Qe=a(Qe)}return Qe})(KA);return await WebAssembly.instantiate(te,qA)}catch(Qe){_(`failed to asynchronously prepare wasm: ${Qe}`),GA(Qe)}})(V,Y)})(S);return n(K.instance,K.module)}catch(Y){return e(Y),Promise.reject(Y)}})();var ai=n=>(ai=ue.Da)(n),Dt=()=>(Dt=ue.Ea)();I._OrtInit=(n,S)=>(I._OrtInit=ue.Fa)(n,S),I._OrtGetLastError=(n,S)=>(I._OrtGetLastError=ue.Ga)(n,S),I._OrtCreateSessionOptions=(n,S,K,Y,V,lA,KA,qA,te,Qe)=>(I._OrtCreateSessionOptions=ue.Ha)(n,S,K,Y,V,lA,KA,qA,te,Qe),I._OrtAppendExecutionProvider=(n,S,K,Y,V)=>(I._OrtAppendExecutionProvider=ue.Ia)(n,S,K,Y,V),I._OrtAddFreeDimensionOverride=(n,S,K)=>(I._OrtAddFreeDimensionOverride=ue.Ja)(n,S,K),I._OrtAddSessionConfigEntry=(n,S,K)=>(I._OrtAddSessionConfigEntry=ue.Ka)(n,S,K),I._OrtReleaseSessionOptions=n=>(I._OrtReleaseSessionOptions=ue.La)(n),I._OrtCreateSession=(n,S,K)=>(I._OrtCreateSession=ue.Ma)(n,S,K),I._OrtReleaseSession=n=>(I._OrtReleaseSession=ue.Na)(n),I._OrtGetInputOutputCount=(n,S,K)=>(I._OrtGetInputOutputCount=ue.Oa)(n,S,K),I._OrtGetInputOutputMetadata=(n,S,K,Y)=>(I._OrtGetInputOutputMetadata=ue.Pa)(n,S,K,Y),I._OrtFree=n=>(I._OrtFree=ue.Qa)(n),I._OrtCreateTensor=(n,S,K,Y,V,lA)=>(I._OrtCreateTensor=ue.Ra)(n,S,K,Y,V,lA),I._OrtGetTensorData=(n,S,K,Y,V)=>(I._OrtGetTensorData=ue.Sa)(n,S,K,Y,V),I._OrtReleaseTensor=n=>(I._OrtReleaseTensor=ue.Ta)(n),I._OrtCreateRunOptions=(n,S,K,Y)=>(I._OrtCreateRunOptions=ue.Ua)(n,S,K,Y),I._OrtAddRunConfigEntry=(n,S,K)=>(I._OrtAddRunConfigEntry=ue.Va)(n,S,K),I._OrtReleaseRunOptions=n=>(I._OrtReleaseRunOptions=ue.Wa)(n),I._OrtCreateBinding=n=>(I._OrtCreateBinding=ue.Xa)(n),I._OrtBindInput=(n,S,K)=>(I._OrtBindInput=ue.Ya)(n,S,K),I._OrtBindOutput=(n,S,K,Y)=>(I._OrtBindOutput=ue.Za)(n,S,K,Y),I._OrtClearBoundOutputs=n=>(I._OrtClearBoundOutputs=ue._a)(n),I._OrtReleaseBinding=n=>(I._OrtReleaseBinding=ue.$a)(n),I._OrtRunWithBinding=(n,S,K,Y,V)=>(I._OrtRunWithBinding=ue.ab)(n,S,K,Y,V),I._OrtRun=(n,S,K,Y,V,lA,KA,qA)=>(I._OrtRun=ue.bb)(n,S,K,Y,V,lA,KA,qA),I._OrtEndProfiling=n=>(I._OrtEndProfiling=ue.cb)(n),I._JsepOutput=(n,S,K)=>(I._JsepOutput=ue.db)(n,S,K),I._JsepGetNodeName=n=>(I._JsepGetNodeName=ue.eb)(n);var Bi=()=>(Bi=ue.fb)(),aI=I._free=n=>(aI=I._free=ue.gb)(n),ZI=I._malloc=n=>(ZI=I._malloc=ue.hb)(n),Ki=(n,S,K,Y,V,lA)=>(Ki=ue.kb)(n,S,K,Y,V,lA),wt=()=>(wt=ue.lb)(),Ui=(n,S,K,Y,V)=>(Ui=ue.mb)(n,S,K,Y,V),pt=n=>(pt=ue.nb)(n),bi=n=>(bi=ue.ob)(n),Ji=(n,S)=>(Ji=ue.pb)(n,S),ft=()=>(ft=ue.qb)(),yt=(n,S)=>(yt=ue.rb)(n,S),XI=n=>(XI=ue.sb)(n),xi=n=>(xi=ue.tb)(n),Ti=()=>(Ti=ue.ub)(),Yi=I.dynCall_ii=(n,S)=>(Yi=I.dynCall_ii=ue.vb)(n,S),mt=n=>(mt=ue.wb)(n),Mt=()=>(Mt=ue.xb)(),Pi=n=>(Pi=ue.yb)(n),Ft=()=>(Ft=ue.zb)();return I.stackSave=()=>Ti(),I.stackRestore=n=>XI(n),I.stackAlloc=n=>xi(n),I.setValue=function(n,S,K="i8"){switch(K.endsWith("*")&&(K="*"),K){case"i1":case"i8":uA()[n>>>0]=S;break;case"i16":x()[n>>>1>>>0]=S;break;case"i32":W()[n>>>2>>>0]=S;break;case"i64":tA[n>>>3]=BigInt(S);break;case"float":xA()[n>>>2>>>0]=S;break;case"double":RA()[n>>>3>>>0]=S;break;case"*":nA()[n>>>2>>>0]=S;break;default:GA(`invalid type for setValue: ${K}`)}},I.getValue=function(n,S="i8"){switch(S.endsWith("*")&&(S="*"),S){case"i1":case"i8":return uA()[n>>>0];case"i16":return x()[n>>>1>>>0];case"i32":return W()[n>>>2>>>0];case"i64":return tA[n>>>3];case"float":return xA()[n>>>2>>>0];case"double":return RA()[n>>>3>>>0];case"*":return nA()[n>>>2>>>0];default:GA(`invalid type for getValue: ${S}`)}},I.UTF8ToString=ze,I.stringToUTF8=gA,I.lengthBytesUTF8=R,(function n(){if(0{ea(),YC=typeof location>"u"?void 0:location.origin,Ur=import.meta.url>"file:"&&import.meta.url<"file;",Fl=()=>{{if(Ur){let A=URL;return new URL(new A("ort.bundle.min.mjs",import.meta.url).href,YC).href}return import.meta.url}},BI=Fl(),kh=()=>{if(BI&&!BI.startsWith("blob:"))return BI.substring(0,BI.lastIndexOf("/")+1)},Yo=(A,g)=>{try{let e=g??BI;return(e?new URL(A,e):new URL(A)).origin===YC}catch{return!1}},Sl=(A,g)=>{let e=g??BI;try{return(e?new URL(A,e):new URL(A)).href}catch{return}},Nl=(A,g)=>`${g??"./"}${A}`,PC=async A=>{let g=await(await fetch(A,{credentials:"same-origin"})).blob();return URL.createObjectURL(g)},_l=async A=>(await import(A)).default,vC=(Gf(),Wt(Nh)).default,Lh=async()=>{if(!BI)throw new Error("Failed to load proxy worker: cannot determine the script source URL.");if(Yo(BI))return[void 0,vC()];let A=await PC(BI);return[A,vC(A)]},HC=(kf(),Wt(Rh)).default,Kh=async(A,g,e)=>{if(!A&&!g&&HC&&BI&&Yo(BI))return[void 0,HC];{let I="ort-wasm-simd-threaded.jsep.mjs",i=A??Sl(I,g),t=e&&i&&!Yo(i,g),s=t?await PC(i):i??Nl(I,g);return[t?s:void 0,await _l(s)]}}}),qC,Po,kt,OC,Rl,Gl,kl,Ia,ig,Fi=jA(()=>{ga(),Po=!1,kt=!1,OC=!1,Rl=()=>{if(typeof SharedArrayBuffer>"u")return!1;try{return typeof MessageChannel<"u"&&new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch{return!1}},Gl=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch{return!1}},kl=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,19,1,17,0,65,1,253,15,65,2,253,15,65,3,253,15,253,147,2,11]))}catch{return!1}},Ia=async A=>{if(Po)return Promise.resolve();if(kt)throw new Error("multiple calls to 'initializeWebAssembly()' detected.");if(OC)throw new Error("previous call to 'initializeWebAssembly()' failed.");kt=!0;let g=A.initTimeout,e=A.numThreads;if(A.simd!==!1){if(A.simd==="relaxed"){if(!kl())throw new Error("Relaxed WebAssembly SIMD is not supported in the current environment.")}else if(!Gl())throw new Error("WebAssembly SIMD is not supported in the current environment.")}let I=Rl();e>1&&!I&&(typeof self<"u"&&!self.crossOriginIsolated&&console.warn("env.wasm.numThreads is set to "+e+", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."),console.warn("WebAssembly multi-threading is not supported in the current environment. Falling back to single-threading."),A.numThreads=e=1);let i=A.wasmPaths,t=typeof i=="string"?i:void 0,s=i?.mjs,o=s?.href??s,C=i?.wasm,r=C?.href??C,Q=A.wasmBinary,[B,a]=await Kh(o,t,e>1),d=!1,c=[];if(g>0&&c.push(new Promise(p=>{setTimeout(()=>{d=!0,p()},g)})),c.push(new Promise((p,L)=>{let w={numThreads:e};if(Q)w.wasmBinary=Q;else if(r||t)w.locateFile=u=>r??t+u;else if(o&&o.indexOf("blob:")!==0)w.locateFile=u=>new URL(u,o).href;else if(B){let u=kh();u&&(w.locateFile=_=>u+_)}a(w).then(u=>{kt=!1,Po=!0,qC=u,p(),B&&URL.revokeObjectURL(B)},u=>{kt=!1,OC=!0,L(u)})})),await Promise.race(c),d)throw new Error(`WebAssembly backend initializing failed due to timeout: ${g}ms`)},ig=()=>{if(Po&&qC)return qC;throw new Error("WebAssembly is not initialized yet.")}}),LI,is,Xe,ia=jA(()=>{Fi(),LI=(A,g)=>{let e=ig(),I=e.lengthBytesUTF8(A)+1,i=e._malloc(I);return e.stringToUTF8(A,i,I),g.push(i),i},is=(A,g,e,I)=>{if(typeof A=="object"&&A!==null){if(e.has(A))throw new Error("Circular reference in options");e.add(A)}Object.entries(A).forEach(([i,t])=>{let s=g?g+i:i;if(typeof t=="object")is(t,s+".",e,I);else if(typeof t=="string"||typeof t=="number")I(s,t.toString());else if(typeof t=="boolean")I(s,t?"1":"0");else throw new Error(`Can't handle extra config type: ${typeof t}`)})},Xe=A=>{let g=ig(),e=g.stackSave();try{let I=g.PTR_SIZE,i=g.stackAlloc(2*I);g._OrtGetLastError(i,i+I);let t=Number(g.getValue(i,I===4?"i32":"i64")),s=g.getValue(i+I,"*"),o=s?g.UTF8ToString(s):"";throw new Error(`${A} ERROR_CODE: ${t}, ERROR_MESSAGE: ${o}`)}finally{g.stackRestore(e)}}}),Uh,Lf=jA(()=>{Fi(),ia(),Uh=A=>{let g=ig(),e=0,I=[],i=A||{};try{if(A?.logSeverityLevel===void 0)i.logSeverityLevel=2;else if(typeof A.logSeverityLevel!="number"||!Number.isInteger(A.logSeverityLevel)||A.logSeverityLevel<0||A.logSeverityLevel>4)throw new Error(`log serverity level is not valid: ${A.logSeverityLevel}`);if(A?.logVerbosityLevel===void 0)i.logVerbosityLevel=0;else if(typeof A.logVerbosityLevel!="number"||!Number.isInteger(A.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${A.logVerbosityLevel}`);A?.terminate===void 0&&(i.terminate=!1);let t=0;return A?.tag!==void 0&&(t=LI(A.tag,I)),e=g._OrtCreateRunOptions(i.logSeverityLevel,i.logVerbosityLevel,!!i.terminate,t),e===0&&Xe("Can't create run options."),A?.extra!==void 0&&is(A.extra,"",new WeakSet,(s,o)=>{let C=LI(s,I),r=LI(o,I);g._OrtAddRunConfigEntry(e,C,r)!==0&&Xe(`Can't set a run config entry: ${s} - ${o}.`)}),[e,I]}catch(t){throw e!==0&&g._OrtReleaseRunOptions(e),I.forEach(s=>g._free(s)),t}}}),Ll,Kl,Ul,Lt,bl,bh,Kf=jA(()=>{Fi(),ia(),Ll=A=>{switch(A){case"disabled":return 0;case"basic":return 1;case"extended":return 2;case"all":return 99;default:throw new Error(`unsupported graph optimization level: ${A}`)}},Kl=A=>{switch(A){case"sequential":return 0;case"parallel":return 1;default:throw new Error(`unsupported execution mode: ${A}`)}},Ul=A=>{A.extra||(A.extra={}),A.extra.session||(A.extra.session={});let g=A.extra.session;g.use_ort_model_bytes_directly||(g.use_ort_model_bytes_directly="1"),A.executionProviders&&A.executionProviders.some(e=>(typeof e=="string"?e:e.name)==="webgpu")&&(A.enableMemPattern=!1)},Lt=(A,g,e,I)=>{let i=LI(g,I),t=LI(e,I);ig()._OrtAddSessionConfigEntry(A,i,t)!==0&&Xe(`Can't set a session config entry: ${g} - ${e}.`)},bl=async(A,g,e)=>{for(let I of g){let i=typeof I=="string"?I:I.name,t=[];switch(i){case"webnn":if(i="WEBNN",typeof I!="string"){let Q=I?.deviceType;Q&&Lt(A,"deviceType",Q,e)}break;case"webgpu":if(i="JS",typeof I!="string"){let Q=I;if(Q?.preferredLayout){if(Q.preferredLayout!=="NCHW"&&Q.preferredLayout!=="NHWC")throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${Q.preferredLayout}`);Lt(A,"preferredLayout",Q.preferredLayout,e)}}break;case"wasm":case"cpu":continue;default:throw new Error(`not supported execution provider: ${i}`)}let s=LI(i,e),o=t.length,C=0,r=0;if(o>0){C=ig()._malloc(o*ig().PTR_SIZE),e.push(C),r=ig()._malloc(o*ig().PTR_SIZE),e.push(r);for(let Q=0;Q{let g=ig(),e=0,I=[],i=A||{};Ul(i);try{let t=Ll(i.graphOptimizationLevel??"all"),s=Kl(i.executionMode??"sequential"),o=typeof i.logId=="string"?LI(i.logId,I):0,C=i.logSeverityLevel??2;if(!Number.isInteger(C)||C<0||C>4)throw new Error(`log serverity level is not valid: ${C}`);let r=i.logVerbosityLevel??0;if(!Number.isInteger(r)||r<0||r>4)throw new Error(`log verbosity level is not valid: ${r}`);let Q=typeof i.optimizedModelFilePath=="string"?LI(i.optimizedModelFilePath,I):0;if(e=g._OrtCreateSessionOptions(t,!!i.enableCpuMemArena,!!i.enableMemPattern,s,!!i.enableProfiling,0,o,C,r,Q),e===0&&Xe("Can't create session options."),i.executionProviders&&await bl(e,i.executionProviders,I),i.enableGraphCapture!==void 0){if(typeof i.enableGraphCapture!="boolean")throw new Error(`enableGraphCapture must be a boolean value: ${i.enableGraphCapture}`);Lt(e,"enableGraphCapture",i.enableGraphCapture.toString(),I)}if(i.freeDimensionOverrides)for(let[B,a]of Object.entries(i.freeDimensionOverrides)){if(typeof B!="string")throw new Error(`free dimension override name must be a string: ${B}`);if(typeof a!="number"||!Number.isInteger(a)||a<0)throw new Error(`free dimension override value must be a non-negative integer: ${a}`);let d=LI(B,I);g._OrtAddFreeDimensionOverride(e,d,a)!==0&&Xe(`Can't set a free dimension override: ${B} - ${a}.`)}return i.extra!==void 0&&is(i.extra,"",new WeakSet,(B,a)=>{Lt(e,B,a,I)}),[e,I]}catch(t){throw e!==0&&g._OrtReleaseSessionOptions(e)!==0&&Xe("Can't release session options."),I.forEach(s=>g._free(s)),t}}}),$i,WI,pi,ta,ts,oa,sa,br,ye=jA(()=>{$i=A=>{switch(A){case"int8":return 3;case"uint8":return 2;case"bool":return 9;case"int16":return 5;case"uint16":return 4;case"int32":return 6;case"uint32":return 12;case"float16":return 10;case"float32":return 1;case"float64":return 11;case"string":return 8;case"int64":return 7;case"uint64":return 13;case"int4":return 22;case"uint4":return 21;default:throw new Error(`unsupported data type: ${A}`)}},WI=A=>{switch(A){case 3:return"int8";case 2:return"uint8";case 9:return"bool";case 5:return"int16";case 4:return"uint16";case 6:return"int32";case 12:return"uint32";case 10:return"float16";case 1:return"float32";case 11:return"float64";case 8:return"string";case 7:return"int64";case 13:return"uint64";case 22:return"int4";case 21:return"uint4";default:throw new Error(`unsupported data type: ${A}`)}},pi=(A,g)=>{let e=[-1,4,1,1,2,2,4,8,-1,1,2,8,4,8,-1,-1,-1,-1,-1,-1,-1,.5,.5][A],I=typeof g=="number"?g:g.reduce((i,t)=>i*t,1);return e>0?Math.ceil(I*e):void 0},ta=A=>{switch(A){case"float16":return typeof Float16Array<"u"&&Float16Array.from?Float16Array:Uint16Array;case"float32":return Float32Array;case"uint8":return Uint8Array;case"int8":return Int8Array;case"uint16":return Uint16Array;case"int16":return Int16Array;case"int32":return Int32Array;case"bool":return Uint8Array;case"float64":return Float64Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"uint64":return BigUint64Array;default:throw new Error(`unsupported type: ${A}`)}},ts=A=>{switch(A){case"verbose":return 0;case"info":return 1;case"warning":return 2;case"error":return 3;case"fatal":return 4;default:throw new Error(`unsupported logging level: ${A}`)}},oa=A=>A==="float32"||A==="float16"||A==="int32"||A==="int64"||A==="uint32"||A==="uint8"||A==="bool"||A==="uint4"||A==="int4",sa=A=>A==="float32"||A==="float16"||A==="int32"||A==="int64"||A==="uint32"||A==="uint64"||A==="int8"||A==="uint8"||A==="bool"||A==="uint4"||A==="int4",br=A=>{switch(A){case"none":return 0;case"cpu":return 1;case"cpu-pinned":return 2;case"texture":return 3;case"gpu-buffer":return 4;case"ml-tensor":return 5;default:throw new Error(`unsupported data location: ${A}`)}}}),Ca,Jh=jA(()=>{ea(),Ca=async A=>{if(typeof A=="string"){let g=await fetch(A);if(!g.ok)throw new Error(`failed to load external data file: ${A}`);let e=g.headers.get("Content-Length"),I=e?parseInt(e,10):0;if(I<1073741824)return new Uint8Array(await g.arrayBuffer());{if(!g.body)throw new Error(`failed to load external data file: ${A}, no response body.`);let i=g.body.getReader(),t;try{t=new ArrayBuffer(I)}catch(o){if(o instanceof RangeError){let C=Math.ceil(I/65536);t=new WebAssembly.Memory({initial:C,maximum:C}).buffer}else throw o}let s=0;for(;;){let{done:o,value:C}=await i.read();if(o)break;let r=C.byteLength;new Uint8Array(t,s,r).set(C),s+=r}return new Uint8Array(t,0,I)}}else return A instanceof Blob?new Uint8Array(await A.arrayBuffer()):A instanceof Uint8Array?A:new Uint8Array(A)}}),Jl,xl,Tl,Yl,ra,Pl,Ye,jI=jA(()=>{ye(),Jl=["V","I","W","E","F"],xl=(A,g)=>{console.log(`[${Jl[A]},${new Date().toISOString()}]${g}`)},ra=(A,g)=>{Tl=A,Yl=g},Pl=(A,g)=>{let e=ts(A),I=ts(Tl);e>=I&&xl(e,typeof g=="function"?g():g)},Ye=(...A)=>{Yl&&Pl(...A)}}),vl,At,FA,os,xh,Th,Yh,Ge=jA(()=>{vl=class{static calcMatMulShape(A,g){return A[1]!==g[0]?void 0:[A[0],g[1]]}},At=class{static calcShape(A,g,e=!1){let I=A.length,i=g.length;if(I===0)return g;if(i===0)return A;let t=Math.max(A.length,g.length),s=new Array(t);if(e){if(I<2||i<2)return;let o=vl.calcMatMulShape([A[I-2],A[I-1]],[g[i-2],g[i-1]]);if(o===void 0)return;[s[t-2],s[t-1]]=o}for(let o=e?3:1;o<=t;o++){let C=I-o<0?1:A[I-o],r=i-o<0?1:g[i-o];if(C!==r&&C>1&&r>1)return;let Q=Math.max(C,r);if(C&&r)s[t-o]=Math.max(C,r);else{if(Q>1)return;s[t-o]=0}}return s}static isValidBroadcast(A,g){let e=A.length,I=g.length;if(e>I)return!1;for(let i=1;i<=e;i++)if(A[e-i]!==1&&A[e-i]!==g[I-i])return!1;return!0}},FA=class gs{static size(g){return gs.getSizeFromDimensionRange(g,0,g.length)}static convertShape(g,e=4){let I=g.length;if(I===0)return[];let i=new Array(I),t=I-1;for(;t>=0;){if(g[t]%e===0){i[t]=g[t]/e;break}if(e%g[t]!==0)throw new Error("cannot convert shape");i[t]=1,e/=g[t],t--}for(t--;t>=0;t--)i[t]=g[t];return i}static sizeFromDimension(g,e){if(e<0||e>g.length)throw new Error(`invalid dimension of ${e} for sizeFromDimension as Tensor has ${g.length} dimensions.`);return gs.getSizeFromDimensionRange(g,e,g.length)}static sizeToDimension(g,e){if(e<0||e>g.length)throw new Error(`invalid dimension of ${e} for sizeToDimension as Tensor has ${g.length} dimensions.`);return gs.getSizeFromDimensionRange(g,0,e)}static getSizeFromDimensionRange(g,e,I){let i=1;for(let t=e;t=0;--i)I[i]=I[i+1]*g[i+1];return I}static normalizeAxis(g,e){if(g<-e&&g>=e)throw new Error("unsupported axis for this operation.");return g<0?g+e:g}static normalizeAxes(g,e){return g.map(I=>this.normalizeAxis(I,e??g.length))}static sortBasedOnPerm(g,e){return e?e.map(I=>g[I]):g.slice().reverse()}static padShape(g,e){let I=g.length;return g.map((i,t)=>i+e[t]+e[t+I])}static areEqual(g,e){return g.length!==e.length?!1:g.every((I,i)=>I===e[i])}},os=class vt{static adjustPoolAttributes(g,e,I,i,t,s){if(!g&&I.length!==e.length-2)throw new Error("length of specified kernel shapes should be 2 less than length of input dimensions");if(g)for(let o=0;o=I.length?I.push(e[o+2]):I[o]=e[o+2];for(let o=0;o=I[o]||s[o+I.length]>=I[o])throw new Error("pads should be smaller than kernel")}}static adjustPadsBasedOnAutoPad(g,e,I,i,t,s,o){if(o){if(t.length!==2*(g.length-2))throw new Error("length of pads should be twice the length of data dimensions");if(e.length!==g.length-2)throw new Error("length of strides should be the length of data dimensions");if(i.length!==g.length-2)throw new Error("length of kernel shapes should be the length of data dimensions");for(let C=0;C{ye(),aa=(A,g)=>new(ta(g))(A)}),Jr,WC,Hl,jC,ql,VC,zC,$C,Ol,vh,Uf=jA(()=>{jI(),Jr=(A,g=!0)=>{if(A.byteLength%8!==0)throw new Error("Invalid Uint8Array length - must be a multiple of 8 (BigInt).");let e=A.byteLength/8,I=new BigInt64Array(A.buffer,A.byteOffset,e),i=new Int32Array(e);for(let t=0;t2147483647n||s<-2147483648n)throw new Error(`Overflow occurred when converting BigInt to Int32 at index ${t}: ${s}`);i[t]=Number(s)}return g?new Uint8Array(i.buffer):i},WC=(A,g=!0)=>{if(A.byteLength%4!==0)throw new Error("Invalid Uint8Array length - must be a multiple of 4 (Int32).");let e=A.byteLength/4,I=new Int32Array(A.buffer,A.byteOffset,e),i=BigInt64Array.from(I,BigInt);return g?new Uint8Array(i.buffer):i},Hl=1,jC=()=>Hl++,ql=new Map([["float32",32],["float16",16],["int32",32],["uint32",32],["int64",64],["uint64",64],["int8",8],["uint8",8],["int4",4],["uint4",4]]),VC=(A,g)=>{let e=ql.get(A);if(!e)throw new Error("Unsupported data type.");return g.length>0?Math.ceil(g.reduce((I,i)=>I*i)*e/8):0},zC=class{constructor(A){this.shouldConvertInt64toInt32=!1,this.isInt64ToInt32Converted=!1;let{sessionId:g,context:e,tensor:I,dataType:i,shape:t,shouldConvertInt64toInt32:s=!1}=A;this.sessionId=g,this.mlContext=e,this.mlTensor=I,this.dataType=i,this.tensorShape=t,this.shouldConvertInt64toInt32=s}get tensor(){return this.mlTensor}get type(){return this.dataType}get shape(){return this.tensorShape}get byteLength(){return VC(this.dataType,this.tensorShape)}destroy(){Ye("verbose",()=>"[WebNN] TensorWrapper.destroy"),this.mlTensor.destroy()}write(A){this.mlContext.writeTensor(this.mlTensor,A)}async read(A,g){if(A){let e=await this.mlContext.readTensor(this.mlTensor),I=WC(new Uint8Array(e));if(g){(g instanceof ArrayBuffer?new Uint8Array(g):new Uint8Array(g.buffer,g.byteOffset,g.byteLength)).set(I);return}else return I.buffer}else return g?this.mlContext.readTensor(this.mlTensor,g):this.mlContext.readTensor(this.mlTensor)}canReuseTensor(A,g,e){return this.mlContext===A&&this.dataType===g&&this.tensorShape.length===e.length&&this.tensorShape.every((I,i)=>I===e[i])}setIsInt64ToInt32Converted(A){this.isInt64ToInt32Converted=A}},$C=class{constructor(A,g){this.tensorManager=A,this.wrapper=g}get tensorWrapper(){return this.wrapper}releaseTensor(){this.tensorWrapper&&(this.tensorManager.releaseTensor(this.tensorWrapper),this.wrapper=void 0)}async ensureTensor(A,g,e,I){let i=g,t=this.tensorManager.getMLContext(A),s=i==="int64"&&!t.opSupportLimits().input.dataTypes.includes("int64");if(s&&(i="int32",Ye("verbose",()=>"[WebNN] TensorIdTracker.ensureTensor: convert dataType from int64 to int32")),this.wrapper){if(this.wrapper.canReuseTensor(t,i,e))return this.wrapper.tensor;if(I){if(this.wrapper.byteLength!==VC(i,e))throw new Error("Unable to copy data to tensor with different size.");this.activeUpload=new Uint8Array(await this.wrapper.read())}this.tensorManager.releaseTensor(this.wrapper)}let o=typeof MLTensorUsage>"u"?void 0:MLTensorUsage.READ|MLTensorUsage.WRITE;return this.wrapper=await this.tensorManager.getCachedTensor(A,i,e,o,!0,!0,s),I&&this.activeUpload&&(this.wrapper.write(this.activeUpload),this.activeUpload=void 0),this.wrapper.tensor}upload(A){let g=A;if(this.wrapper)if(this.wrapper.shouldConvertInt64toInt32&&(g=Jr(A,!0),this.wrapper.setIsInt64ToInt32Converted(!0)),g.byteLength===this.wrapper.byteLength){this.wrapper.write(g);return}else Ye("verbose",()=>"Data size does not match tensor size. Releasing tensor."),this.releaseTensor();this.activeUpload?this.activeUpload.set(g):this.activeUpload=new Uint8Array(g)}async download(A){if(this.activeUpload){let g=this.wrapper?.isInt64ToInt32Converted?WC(this.activeUpload):this.activeUpload;if(A){A instanceof ArrayBuffer?new Uint8Array(A).set(g):new Uint8Array(A.buffer,A.byteOffset,A.byteLength).set(g);return}else return g.buffer}if(!this.wrapper)throw new Error("Tensor has not been created.");return A?this.wrapper.read(this.wrapper?.shouldConvertInt64toInt32,A):this.wrapper.read(this.wrapper?.shouldConvertInt64toInt32)}},Ol=class{constructor(A){this.backend=A,this.tensorTrackersById=new Map,this.freeTensors=[],this.externalTensors=new Set}getMLContext(A){let g=this.backend.getMLContext(A);if(!g)throw new Error("MLContext not found for session.");return g}reserveTensorId(){let A=jC();return this.tensorTrackersById.set(A,new $C(this)),A}releaseTensorId(A){let g=this.tensorTrackersById.get(A);g&&(this.tensorTrackersById.delete(A),g.tensorWrapper&&this.releaseTensor(g.tensorWrapper))}async ensureTensor(A,g,e,I,i){Ye("verbose",()=>`[WebNN] TensorManager.ensureTensor {tensorId: ${g}, dataType: ${e}, shape: ${I}, copyOld: ${i}}`);let t=this.tensorTrackersById.get(g);if(!t)throw new Error("Tensor not found.");return t.ensureTensor(A,e,I,i)}upload(A,g){let e=this.tensorTrackersById.get(A);if(!e)throw new Error("Tensor not found.");e.upload(g)}async download(A,g){Ye("verbose",()=>`[WebNN] TensorManager.download {tensorId: ${A}, dstBuffer: ${g?.byteLength}}`);let e=this.tensorTrackersById.get(A);if(!e)throw new Error("Tensor not found.");return e.download(g)}releaseTensorsForSession(A){for(let g of this.freeTensors)g.sessionId===A&&g.destroy();this.freeTensors=this.freeTensors.filter(g=>g.sessionId!==A)}registerTensor(A,g,e,I){let i=this.getMLContext(A),t=jC(),s=new zC({sessionId:A,context:i,tensor:g,dataType:e,shape:I});return this.tensorTrackersById.set(t,new $C(this,s)),this.externalTensors.add(s),t}async getCachedTensor(A,g,e,I,i,t,s=!1){let o=this.getMLContext(A);for(let[r,Q]of this.freeTensors.entries())if(Q.canReuseTensor(o,g,e)){Ye("verbose",()=>`[WebNN] Reusing tensor {dataType: ${g}, shape: ${e}}`);let B=this.freeTensors.splice(r,1)[0];return B.sessionId=A,B}Ye("verbose",()=>`[WebNN] MLContext.createTensor {dataType: ${g}, shape: ${e}}`);let C=await o.createTensor({dataType:g,shape:e,dimensions:e,usage:I,writable:i,readable:t});return new zC({sessionId:A,context:o,tensor:C,dataType:g,shape:e,shouldConvertInt64toInt32:s})}releaseTensor(A){this.externalTensors.has(A)&&this.externalTensors.delete(A),this.freeTensors.push(A)}},vh=(...A)=>new Ol(...A)}),vo,Wl,Hh,bf=jA(()=>{ye(),Fi(),Ph(),Uf(),jI(),vo=new Map([[1,"float32"],[10,"float16"],[6,"int32"],[12,"uint32"],[7,"int64"],[13,"uint64"],[22,"int4"],[21,"uint4"],[3,"int8"],[2,"uint8"],[9,"uint8"]]),Wl=(A,g)=>{if(A===g)return!0;if(A===void 0||g===void 0)return!1;let e=Object.keys(A).sort(),I=Object.keys(g).sort();return e.length===I.length&&e.every((i,t)=>i===I[t]&&A[i]===g[i])},Hh=class{constructor(A){this.tensorManager=vh(this),this.mlContextBySessionId=new Map,this.sessionIdsByMLContext=new Map,this.mlContextCache=[],this.sessionGraphInputs=new Map,this.temporaryGraphInputs=[],this.temporarySessionTensorIds=new Map,ra(A.logLevel,!!A.debug)}get currentSessionId(){if(this.activeSessionId===void 0)throw new Error("No active session");return this.activeSessionId}onRunStart(A){Ye("verbose",()=>`[WebNN] onRunStart {sessionId: ${A}}`),this.activeSessionId=A}onRunEnd(A){Ye("verbose",()=>`[WebNN] onRunEnd {sessionId: ${A}}`);let g=this.temporarySessionTensorIds.get(A);if(g){for(let e of g)Ye("verbose",()=>`[WebNN] releasing temporary tensor {tensorId: ${e}}`),this.tensorManager.releaseTensorId(e);this.temporarySessionTensorIds.delete(A),this.activeSessionId=void 0}}async createMLContext(A){if(A instanceof GPUDevice){let e=this.mlContextCache.findIndex(I=>I.gpuDevice===A);if(e!==-1)return this.mlContextCache[e].mlContext;{let I=await navigator.ml.createContext(A);return this.mlContextCache.push({gpuDevice:A,mlContext:I}),I}}else if(A===void 0){let e=this.mlContextCache.findIndex(I=>I.options===void 0&&I.gpuDevice===void 0);if(e!==-1)return this.mlContextCache[e].mlContext;{let I=await navigator.ml.createContext();return this.mlContextCache.push({mlContext:I}),I}}let g=this.mlContextCache.findIndex(e=>Wl(e.options,A));if(g!==-1)return this.mlContextCache[g].mlContext;{let e=await navigator.ml.createContext(A);return this.mlContextCache.push({options:A,mlContext:e}),e}}registerMLContext(A,g){this.mlContextBySessionId.set(A,g);let e=this.sessionIdsByMLContext.get(g);e||(e=new Set,this.sessionIdsByMLContext.set(g,e)),e.add(A),this.temporaryGraphInputs.length>0&&(this.sessionGraphInputs.set(A,this.temporaryGraphInputs),this.temporaryGraphInputs=[])}onReleaseSession(A){this.sessionGraphInputs.delete(A);let g=this.mlContextBySessionId.get(A);if(!g)return;this.tensorManager.releaseTensorsForSession(A),this.mlContextBySessionId.delete(A);let e=this.sessionIdsByMLContext.get(g);if(e.delete(A),e.size===0){this.sessionIdsByMLContext.delete(g);let I=this.mlContextCache.findIndex(i=>i.mlContext===g);I!==-1&&this.mlContextCache.splice(I,1)}}getMLContext(A){return this.mlContextBySessionId.get(A)}reserveTensorId(){return this.tensorManager.reserveTensorId()}releaseTensorId(A){Ye("verbose",()=>`[WebNN] releaseTensorId {tensorId: ${A}}`),this.tensorManager.releaseTensorId(A)}async ensureTensor(A,g,e,I,i){let t=vo.get(e);if(!t)throw new Error(`Unsupported ONNX data type: ${e}`);return this.tensorManager.ensureTensor(A??this.currentSessionId,g,t,I,i)}async createTemporaryTensor(A,g,e){Ye("verbose",()=>`[WebNN] createTemporaryTensor {onnxDataType: ${g}, shape: ${e}}`);let I=vo.get(g);if(!I)throw new Error(`Unsupported ONNX data type: ${g}`);let i=this.tensorManager.reserveTensorId();await this.tensorManager.ensureTensor(A,i,I,e,!1);let t=this.temporarySessionTensorIds.get(A);return t?t.push(i):this.temporarySessionTensorIds.set(A,[i]),i}uploadTensor(A,g){if(!ig().shouldTransferToMLTensor)throw new Error("Trying to upload to a MLTensor while shouldTransferToMLTensor is false");Ye("verbose",()=>`[WebNN] uploadTensor {tensorId: ${A}, data: ${g.byteLength}}`),this.tensorManager.upload(A,g)}async downloadTensor(A,g){return this.tensorManager.download(A,g)}createMLTensorDownloader(A,g){return async()=>{let e=await this.tensorManager.download(A);return aa(e,g)}}registerMLTensor(A,g,e,I){let i=vo.get(e);if(!i)throw new Error(`Unsupported ONNX data type: ${e}`);let t=this.tensorManager.registerTensor(A,g,i,I);return Ye("verbose",()=>`[WebNN] registerMLTensor {tensor: ${g}, dataType: ${i}, dimensions: ${I}} -> {tensorId: ${t}}`),t}registerMLConstant(A,g,e,I,i,t,s=!1){if(!t)throw new Error("External mounted files are not available.");let o=A;A.startsWith("./")&&(o=A.substring(2));let C=t.get(o);if(!C)throw new Error(`File with name ${o} not found in preloaded files.`);if(g+e>C.byteLength)throw new Error("Out of bounds: data offset and length exceed the external file data size.");let r=C.slice(g,g+e).buffer,Q;switch(i.dataType){case"float32":Q=new Float32Array(r);break;case"float16":Q=typeof Float16Array<"u"&&Float16Array.from?new Float16Array(r):new Uint16Array(r);break;case"int32":Q=new Int32Array(r);break;case"uint32":Q=new Uint32Array(r);break;case"int64":s?(Q=Jr(new Uint8Array(r),!1),i.dataType="int32"):Q=new BigInt64Array(r);break;case"uint64":Q=new BigUint64Array(r);break;case"int8":Q=new Int8Array(r);break;case"int4":case"uint4":case"uint8":Q=new Uint8Array(r);break;default:throw new Error(`Unsupported data type: ${i.dataType} in creating WebNN Constant from external data.`)}return Ye("verbose",()=>`[WebNN] registerMLConstant {dataType: ${i.dataType}, shape: ${i.shape}}} ${s?"(Note: it was int64 data type and registered to int32 as workaround)":""}`),I.constant(i,Q)}registerGraphInput(A){this.temporaryGraphInputs.push(A)}isGraphInput(A,g){let e=this.sessionGraphInputs.get(A);return e?e.includes(g):!1}isInt64Supported(A){return!!this.mlContextBySessionId.get(A)?.opSupportLimits().input.dataTypes.includes("int64")}flush(){}}}),Ba=jA(()=>{}),ZC,Ho,qo,jl,Vl,XC,xr,zl,qh,Jf=jA(()=>{jI(),Ba(),ZC=new Map([[64,250],[128,200],[256,200],[512,200],[2048,230],[4096,200],[8192,50],[16384,50],[32768,50],[65536,50],[131072,50],[262144,50],[524288,50],[1048576,50],[2097152,30],[4194304,20],[8388608,10],[12582912,10],[16777216,10],[26214400,15],[33554432,22],[44236800,2],[58982400,6],[67108864,6],[134217728,6],[167772160,6]]),Ho=[],qo=A=>Math.ceil(Number(A)/16)*16,jl=A=>{for(let g=0;gVl++,xr=async(A,g,e,I)=>{let i=qo(e),t=A.device.createBuffer({size:i,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});try{let s=A.getCommandEncoder();A.endComputePass(),s.copyBufferToBuffer(g,0,t,0,i),A.flush(),await t.mapAsync(GPUMapMode.READ);let o=t.getMappedRange();if(I){let C=I();return C.set(new Uint8Array(o,0,e)),C}else return new Uint8Array(o.slice(0,e))}finally{t.destroy()}},zl=class{constructor(A){this.backend=A,this.storageCache=new Map,this.freeBuffers=new Map,this.freeUniformBuffers=new Map,this.buffersPending=[],this.capturedPendingBuffers=new Map;for(let[g]of ZC)Ho.push(g),this.freeBuffers.set(g,[]),this.freeUniformBuffers.set(g,[]);this.sessionCount=0}upload(A,g){let e=g.buffer,I=g.byteOffset,i=g.byteLength,t=qo(i),s=this.storageCache.get(A);if(!s)throw new Error("gpu data for uploading does not exist");if(Number(s.originalSize)!==i)throw new Error(`inconsistent data size. gpu data size=${s.originalSize}, data size=${i}`);let o=this.backend.device.createBuffer({mappedAtCreation:!0,size:t,usage:GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC}),C=o.getMappedRange();new Uint8Array(C).set(new Uint8Array(e,I,i)),o.unmap();let r=this.backend.device.createCommandEncoder();r.copyBufferToBuffer(o,0,s.gpuData.buffer,0,t),this.backend.device.queue.submit([r.finish()]),o.destroy(),Ye("verbose",()=>`[WebGPU] GpuDataManager.upload(id=${A})`)}memcpy(A,g){let e=this.storageCache.get(A);if(!e)throw new Error("source gpu data for memcpy does not exist");let I=this.storageCache.get(g);if(!I)throw new Error("destination gpu data for memcpy does not exist");if(e.originalSize!==I.originalSize)throw new Error("inconsistent source and destination gpu data size");let i=qo(e.originalSize),t=this.backend.getCommandEncoder();this.backend.endComputePass(),t.copyBufferToBuffer(e.gpuData.buffer,0,I.gpuData.buffer,0,i)}registerExternalBuffer(A,g,e){let I;if(e){if(I=e[0],A===e[1])return Ye("verbose",()=>`[WebGPU] GpuDataManager.registerExternalBuffer(size=${g}) => id=${I}, buffer is the same, skip.`),I;if(this.backend.capturedCommandList.has(this.backend.currentSessionId))throw new Error(`Registering a different external buffer under graph capture mode is not supported yet. Please use the previous external buffer!`)}else I=XC();return this.storageCache.set(I,{gpuData:{id:I,type:0,buffer:A},originalSize:g}),Ye("verbose",()=>`[WebGPU] GpuDataManager.registerExternalBuffer(size=${g}) => id=${I}, registered.`),I}unregisterExternalBuffer(A){A!==void 0&&(this.storageCache.delete(A),Ye("verbose",()=>`[WebGPU] GpuDataManager.unregisterExternalBuffer() => id=${A}`))}create(A,g=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST){let e=jl(A),I,i=(g&GPUBufferUsage.STORAGE)===GPUBufferUsage.STORAGE,t=(g&GPUBufferUsage.UNIFORM)===GPUBufferUsage.UNIFORM;if(i||t){let o=(i?this.freeBuffers:this.freeUniformBuffers).get(e);o?o.length>0?I=o.pop():I=this.backend.device.createBuffer({size:e,usage:g}):I=this.backend.device.createBuffer({size:e,usage:g})}else I=this.backend.device.createBuffer({size:e,usage:g});let s={id:XC(),type:0,buffer:I};return this.storageCache.set(s.id,{gpuData:s,originalSize:Number(A)}),Ye("verbose",()=>`[WebGPU] GpuDataManager.create(size=${A}) => id=${s.id}`),s}get(A){return this.storageCache.get(A)?.gpuData}release(A){let g=typeof A=="bigint"?Number(A):A,e=this.storageCache.get(g);if(!e){if(this.storageCache.size===0)return 0;throw new Error("releasing data does not exist")}return Ye("verbose",()=>`[WebGPU] GpuDataManager.release(id=${g}), gpuDataId=${e.gpuData.id}`),this.storageCache.delete(g),this.buffersPending.push(e.gpuData.buffer),e.originalSize}async download(A,g){let e=this.storageCache.get(Number(A));if(!e)throw new Error("data does not exist");await xr(this.backend,e.gpuData.buffer,e.originalSize,g)}refreshPendingBuffers(){if(this.buffersPending.length!==0)if(this.backend.sessionStatus==="default"){for(let A of this.buffersPending){let g=ZC.get(A.size);if((A.usage&GPUBufferUsage.STORAGE)===GPUBufferUsage.STORAGE){let e=this.freeBuffers.get(A.size)||[];g===void 0||e.length>=g?A.destroy():e.push(A)}else if((A.usage&GPUBufferUsage.UNIFORM)===GPUBufferUsage.UNIFORM){let e=this.freeUniformBuffers.get(A.size)||[];g===void 0||e.length>=g?A.destroy():e.push(A)}else A.destroy()}this.buffersPending=[]}else{let A=this.capturedPendingBuffers.get(this.backend.currentSessionId);A||(A=[],this.capturedPendingBuffers.set(this.backend.currentSessionId,A));for(let g of this.buffersPending)A.push(g);this.buffersPending=[]}}dispose(){this.freeBuffers.forEach(A=>{A.forEach(g=>{g.destroy()})}),this.freeUniformBuffers.forEach(A=>{A.forEach(g=>{g.destroy()})}),this.storageCache.forEach(A=>{A.gpuData.buffer.destroy()}),this.capturedPendingBuffers.forEach(A=>{A.forEach(g=>{g.destroy()})}),this.storageCache=new Map,this.freeBuffers=new Map,this.freeUniformBuffers=new Map,this.capturedPendingBuffers=new Map}onCreateSession(){this.sessionCount+=1}onReleaseSession(A){let g=this.capturedPendingBuffers.get(A);g&&(g.forEach(e=>{e.destroy()}),this.capturedPendingBuffers.delete(A)),this.sessionCount-=1,this.sessionCount===0&&(Ye("warning",()=>"[WebGPU] Clearing webgpu buffer cache"),this.storageCache.forEach(e=>{e.gpuData.buffer.destroy()}),this.storageCache=new Map)}},qh=(...A)=>new zl(...A)}),$l,We,pg=jA(()=>{$l=class{constructor(A){Object.assign(this,A)}get cacheKey(){return this.key||(this.key=Object.getOwnPropertyNames(this).sort().map(A=>`${this[A]}`).join(";")),this.key}},We=A=>new $l(A)}),et,Oo,Hg,Xg,de,Dg,Tr,Xi,ti,le,Kt,UA,ne,Oh,Qa,Zl,Wh,Ke=jA(()=>{ye(),Ge(),et=64,Oo=(A,g)=>{if(g===3)throw new Error("vec3 has same alignment as vec4, use vec4 instead");switch(Number(A)){case 10:return g>1?`vec${g}`:"f16";case 1:return g>1?`vec${g}`:"f32";case 6:return g>1?`vec${g}`:"i32";case 12:return g>1?`vec${g}`:"u32";case 7:if(g>1)throw new Error("currently not supported vecX of uint64 yet");return["vec2","i32"];case 13:if(g>1)throw new Error("currently not supported vecX of uint64 yet");return["vec2","u32"];case 9:if(g!==4)throw new Error("bool must be vec4");return["u32","vec4"];case 22:return"i32";case 21:return"u32";default:throw new Error(`Unknown data type: ${A}`)}},Hg=(A,g=1)=>{let e=Oo(A,g);return typeof e=="string"?e:e[0]},Xg=(A,g=1)=>{let e=Oo(A,g);return typeof e=="string"?e:e[1]},de=(...A)=>{let g=[];return A.forEach(e=>{e.length!==0&&g.push({type:12,data:e},{type:12,data:FA.computeStrides(e)})}),g},Dg=A=>A%4===0?4:A%2===0?2:1,Tr=(A="f32",g,e="0")=>!g||g===1?`${A}(${e})`:`vec${g}<${A}>(${e})`,Xi=(A,g,e)=>A==="f32"?e:g===1?`f32(${e})`:`vec${g}(${e})`,ti=(A,g)=>g===4?`(${A}.x + ${A}.y + ${A}.z + ${A}.w)`:g===2?`(${A}.x + ${A}.y)`:g===3?`(${A}.x + ${A}.y + ${A}.z)`:A,le=(A,g,e,I)=>A.startsWith("uniforms.")&&e>4?typeof g=="string"?I==="f16"?`${A}[(${g}) / 8][(${g}) % 8 / 4][(${g}) % 8 % 4]`:`${A}[(${g}) / 4][(${g}) % 4]`:I==="f16"?`${A}[${Math.floor(g/8)}][${Math.floor(g%8/4)}][${g%8%4}]`:`${A}[${Math.floor(g/4)}][${g%4}]`:e>1?`${A}[${g}]`:A,Kt=(A,g,e,I,i)=>{let t=typeof e=="number",s=t?e:e.length,o=[...new Array(s).keys()],C=s<2?"u32":s<=4?`vec${s}`:`array`,r=Oo(g,i),Q=typeof r=="string"?r:r[1],B=typeof r=="string"?r:r[0],a={indices:C,value:Q,storage:B,tensor:g},d=v=>typeof v=="string"?v:`${v}u`,c={offsetToIndices:!1,indicesToOffset:!1,broadcastedIndicesToOffset:!1,set:!1,setByIndices:!1,get:!1,getByIndices:!1},p=t?"uniforms.":"",L=`${p}${A}_shape`,w=`${p}${A}_strides`,u="";for(let v=0;v ${a.indices} { var indices: ${a.indices}; var current = offset; ${u} return indices; }`,y=v=>(c.offsetToIndices=!0,s<2?v:`o2i_${A}(${v})`),M=[];if(s>=2)for(let v=s-1;v>=0;v--)M.push(`${le(w,v,s)} * (indices[${v}])`);let F=s<2?"":` fn i2o_${A}(indices: ${a.indices}) -> u32 { return ${M.join("+")}; }`,m=v=>(c.indicesToOffset=!0,s<2?v:`i2o_${A}(${v})`),G=(...v)=>s===0?"0u":`${a.indices}(${v.map(d).join(",")})`,T=(v,x)=>s<2?`${v}`:`${le(v,x,s)}`,J=(v,x,$)=>s<2?`${v}=${$};`:`${le(v,x,s)}=${$};`,Z={},z=(v,x)=>{c.broadcastedIndicesToOffset=!0;let $=`${x.name}broadcastedIndicesTo${A}Offset`;if($ in Z)return`${$}(${v})`;let W=[];for(let nA=s-1;nA>=0;nA--){let xA=x.indicesGet("outputIndices",nA+x.rank-s);W.push(`${T(w,nA)} * (${xA} % ${T(L,nA)})`)}return Z[$]=`fn ${$}(outputIndices: ${x.type.indices}) -> u32 { return ${W.length>0?W.join("+"):"0u"}; }`,`${$}(${v})`},P=(v,x)=>(()=>{if(a.storage===a.value)return`${A}[${v}]=${x};`;if(a.storage==="vec2"&&a.value==="i32")return`${A}[${v}]=vec2(u32(${x}), select(0u, 0xFFFFFFFFu, ${x} < 0));`;if(a.storage==="vec2"&&a.value==="u32")return`${A}[${v}]=vec2(u32(${x}), 0u);`;if(a.storage==="u32"&&a.value==="vec4")return`${A}[${v}]=dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(${x}));`;throw new Error(`not supported combination of storage type ${a.storage} and value type ${a.value} yet`)})(),tA=v=>(()=>{if(a.storage===a.value)return`${A}[${v}]`;if(a.storage==="vec2"&&a.value==="i32")return`i32(${A}[${v}].x)`;if(a.storage==="vec2"&&a.value==="u32")return`u32(${A}[${v}].x)`;if(a.storage==="u32"&&a.value==="vec4")return`vec4(bool(${A}[${v}] & 0xFFu), bool(${A}[${v}] & 0xFF00u), bool(${A}[${v}] & 0xFF0000u), bool(${A}[${v}] & 0xFF000000u))`;throw new Error(`not supported combination of storage type ${a.storage} and value type ${a.value} yet`)})(),AA=s<2?"":` fn get_${A}ByIndices(indices: ${a.indices}) -> ${Q} { return ${tA(`i2o_${A}(indices)`)}; }`,iA=s<2?"":(()=>{let v=o.map($=>`d${$}: u32`).join(", "),x=o.map($=>`d${$}`).join(", ");return` fn get_${A}(${v}) -> ${Q} { return get_${A}ByIndices(${G(x)}); }`})(),rA=(...v)=>{if(v.length!==s)throw new Error(`indices length must be ${s}`);let x=v.map(d).join(",");return s===0?tA("0u"):s===1?tA(x[0]):(c.get=!0,c.getByIndices=!0,c.indicesToOffset=!0,`get_${A}(${x})`)},CA=v=>s<2?tA(v):(c.getByIndices=!0,c.indicesToOffset=!0,`get_${A}ByIndices(${v})`),cA=s<2?"":` fn set_${A}ByIndices(indices: ${a.indices}, value: ${Q}) { ${P(`i2o_${A}(indices)`,"value")} }`,uA=s<2?"":(()=>{let v=o.map($=>`d${$}: u32`).join(", "),x=o.map($=>`d${$}`).join(", ");return` fn set_${A}(${v}, value: ${Q}) { set_${A}ByIndices(${G(x)}, value); }`})();return{impl:()=>{let v=[],x=!1;return c.offsetToIndices&&(v.push(_),x=!0),c.indicesToOffset&&(v.push(F),x=!0),c.broadcastedIndicesToOffset&&(Object.values(Z).forEach($=>v.push($)),x=!0),c.set&&(v.push(uA),x=!0),c.setByIndices&&(v.push(cA),x=!0),c.get&&(v.push(iA),x=!0),c.getByIndices&&(v.push(AA),x=!0),!t&&x&&v.unshift(`const ${L} = ${a.indices}(${e.join(",")});`,`const ${w} = ${a.indices}(${FA.computeStrides(e).join(",")});`),v.join(` `)},type:a,offsetToIndices:y,indicesToOffset:m,broadcastedIndicesToOffset:z,indices:G,indicesGet:T,indicesSet:J,set:(...v)=>{if(v.length!==s+1)throw new Error(`indices length must be ${s}`);let x=v[s];if(typeof x!="string")throw new Error("value must be string");let $=v.slice(0,s).map(d).join(",");return s===0?P("0u",x):s===1?P($[0],x):(c.set=!0,c.setByIndices=!0,c.indicesToOffset=!0,`set_${A}(${$}, ${x})`)},setByOffset:P,setByIndices:(v,x)=>s<2?P(v,x):(c.setByIndices=!0,c.indicesToOffset=!0,`set_${A}ByIndices(${v}, ${x});`),get:rA,getByOffset:tA,getByIndices:CA,usage:I,name:A,strides:w,shape:L,rank:s}},UA=(A,g,e,I=1)=>Kt(A,g,e,"input",I),ne=(A,g,e,I=1)=>Kt(A,g,e,"output",I),Oh=(A,g,e)=>Kt(A,g,e,"atomicOutput",1),Qa=(A,g,e,I=1)=>Kt(A,g,e,"internal",I),Zl=class{constructor(A,g){this.normalizedDispatchGroup=A,this.limits=g,this.internalVariables=[],this.variables=[],this.uniforms=[],this.variableIndex=0}guardAgainstOutOfBoundsWorkgroupSizes(A){return`if (global_idx >= ${typeof A=="number"?`${A}u`:A}) { return; }`}mainStart(A=et){let g=typeof A=="number"?A:A[0],e=typeof A=="number"?1:A[1],I=typeof A=="number"?1:A[2];if(g>this.limits.maxComputeWorkgroupSizeX||e>this.limits.maxComputeWorkgroupSizeY||I>this.limits.maxComputeWorkgroupSizeZ)throw new Error(`workgroup size [${g}, ${e}, ${I}] exceeds the maximum workgroup size [${this.limits.maxComputeWorkgroupSizeX}, ${this.limits.maxComputeWorkgroupSizeY}, ${this.limits.maxComputeWorkgroupSizeZ}].`);if(g*e*I>this.limits.maxComputeInvocationsPerWorkgroup)throw new Error(`workgroup size [${g}, ${e}, ${I}] exceeds the maximum workgroup invocations ${this.limits.maxComputeInvocationsPerWorkgroup}.`);let i=this.normalizedDispatchGroup[1]===1&&this.normalizedDispatchGroup[2]===1,t=i?`@builtin(global_invocation_id) global_id : vec3, @builtin(workgroup_id) workgroup_id : vec3, @builtin(local_invocation_index) local_idx : u32, @builtin(local_invocation_id) local_id : vec3`:`@builtin(global_invocation_id) global_id : vec3, @builtin(local_invocation_id) local_id : vec3, @builtin(local_invocation_index) local_idx : u32, @builtin(workgroup_id) workgroup_id : vec3, @builtin(num_workgroups) num_workgroups : vec3`,s=i?`let global_idx = global_id.x; let workgroup_index = workgroup_id.x;`:`let workgroup_index = workgroup_id.z * num_workgroups[0] * num_workgroups[1] + workgroup_id.y * num_workgroups[0] + workgroup_id.x; let global_idx = workgroup_index * ${g*e*I}u + local_idx;`;return`@compute @workgroup_size(${g}, ${e}, ${I}) fn main(${t}) { ${s} `}appendVariableUniforms(A){A.rank!==0&&(A.shape.startsWith("uniforms.")&&this.uniforms.push({name:A.shape.replace("uniforms.",""),type:"u32",length:A.rank}),A.strides.startsWith("uniforms.")&&this.uniforms.push({name:A.strides.replace("uniforms.",""),type:"u32",length:A.rank}))}declareVariable(A,g){if(A.usage==="internal")throw new Error("cannot use internal variable with declareVariable(). use registerInternalVariables() instead.");this.variables.push(A),this.appendVariableUniforms(A);let e=A.usage==="input"?"read":"read_write",I=A.usage==="atomicOutput"?"atomic":A.type.storage;return`@group(0) @binding(${g}) var ${A.name}: array<${I}>;`}declareVariables(...A){return A.map(g=>this.declareVariable(g,this.variableIndex++)).join(` `)}registerInternalVariable(A){if(A.usage!=="internal")throw new Error("cannot use input or output variable with registerInternalVariable(). use declareVariables() instead.");this.internalVariables.push(A),this.appendVariableUniforms(A)}registerInternalVariables(...A){return A.forEach(g=>this.registerInternalVariable(g)),this}registerUniform(A,g,e=1){return this.uniforms.push({name:A,type:g,length:e}),this}registerUniforms(A){return this.uniforms=this.uniforms.concat(A),this}uniformDeclaration(){if(this.uniforms.length===0)return"";let A=[];for(let{name:g,type:e,length:I}of this.uniforms)if(I&&I>4)e==="f16"?A.push(`@align(16) ${g}:array, ${Math.ceil(I/8)}>`):A.push(`${g}:array, ${Math.ceil(I/4)}>`);else{let i=I==null||I===1?e:`vec${I}<${e}>`;A.push(`${g}:${i}`)}return` struct Uniforms { ${A.join(", ")} }; @group(0) @binding(${this.variableIndex}) var uniforms: Uniforms;`}get additionalImplementations(){return this.uniformDeclaration()+this.variables.map(A=>A.impl()).join(` `)+this.internalVariables.map(A=>A.impl()).join(` `)}get variablesInfo(){if(this.uniforms.length===0)return;let A=g=>[12,10,1,6][["u32","f16","f32","i32"].indexOf(g)];return this.uniforms.map(g=>[A(g.type),g.length??1])}},Wh=(A,g)=>new Zl(A,g)}),Xl,Ar,Ac,ec,gc,Ic,nI,jh,Vh,oi=jA(()=>{ye(),Ge(),pg(),Ke(),Xl=(A,g)=>{if(!A||A.length!==1)throw new Error("Transpose requires 1 input.");if(g.length!==0&&g.length!==A[0].dims.length)throw new Error(`perm size ${g.length} does not match input rank ${A[0].dims.length}`)},Ar=(A,g)=>g.length!==0?g:[...new Array(A).keys()].reverse(),Ac=(A,g)=>FA.sortBasedOnPerm(A,Ar(A.length,g)),ec=(A,g,e,I)=>{let i=`fn perm(i: ${I.type.indices}) -> ${e.type.indices} { var a: ${e.type.indices};`;for(let t=0;t{let e=[],I=[];for(let i=0;i{let e=0;for(let I=0;I{let e=A.dataType,I=A.dims.length,i=Ar(I,g),t=Ac(A.dims,i),s=A.dims,o=t,C=I<2||Ic(i,A.dims),r;if(C)return r=c=>{let p=UA("input",e,s,4),L=ne("output",e,o,4);return` ${c.registerUniform("output_size","u32").declareVariables(p,L)} ${c.mainStart()} ${c.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} output[global_idx] = input[global_idx]; }`},{name:"TransposeCopy",shaderCache:{inputDependencies:["type"]},getRunData:()=>{let c=FA.size(t);return{outputs:[{dims:t,dataType:A.dataType}],dispatchGroup:{x:Math.ceil(c/64/4)},programUniforms:[{type:12,data:Math.ceil(c/4)}]}},getShaderSource:r};let{newShape:Q,newPerm:B}=gc(A.dims,i),a=FA.areEqual(B,[2,3,1]),d=FA.areEqual(B,[3,1,2]);if(Q.length===2||a||d){s=a?[Q[0],Q[1]*Q[2]]:d?[Q[0]*Q[1],Q[2]]:Q,o=[s[1],s[0]];let c=16;return r=p=>{let L=UA("a",e,s.length),w=ne("output",e,o.length);return` ${p.registerUniform("output_size","u32").declareVariables(L,w)} var tile : array, ${c}>; ${p.mainStart([c,c,1])} let stride = (uniforms.output_shape[1] - 1) / ${c} + 1; let workgroup_id_x = workgroup_index % stride; let workgroup_id_y = workgroup_index / stride; let input_col = workgroup_id_y * ${c}u + local_id.x; let input_row = workgroup_id_x * ${c}u + local_id.y; if (input_row < uniforms.a_shape[0] && input_col < uniforms.a_shape[1]) { tile[local_id.y][local_id.x] = ${L.getByIndices(`${L.type.indices}(input_row, input_col)`)}; } workgroupBarrier(); let output_col = workgroup_id_x * ${c}u + local_id.x; let output_row = workgroup_id_y * ${c}u + local_id.y; if (output_row < uniforms.output_shape[0] && output_col < uniforms.output_shape[1]) { ${w.setByIndices(`${w.type.indices}(output_row, output_col)`,"tile[local_id.x][local_id.y]")} } }`},{name:"TransposeShared",shaderCache:{inputDependencies:["type"]},getRunData:()=>{let p=FA.size(t);return{outputs:[{dims:t,dataType:A.dataType}],dispatchGroup:{x:Math.ceil(o[1]/c),y:Math.ceil(o[0]/c)},programUniforms:[{type:12,data:p},...de(s,o)]}},getShaderSource:r}}return r=c=>{let p=UA("a",e,s.length),L=ne("output",e,o.length);return` ${c.registerUniform("output_size","u32").declareVariables(p,L)} ${ec(i,I,p,L)} ${c.mainStart()} ${c.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let indices = ${L.offsetToIndices("global_idx")}; let aIndices = perm(indices); ${L.setByOffset("global_idx",p.getByIndices("aIndices"))} }`},{name:"Transpose",shaderCache:{hint:`${g}`,inputDependencies:["rank"]},getRunData:()=>{let c=FA.size(t);return{outputs:[{dims:t,dataType:A.dataType}],dispatchGroup:{x:Math.ceil(c/64)},programUniforms:[{type:12,data:c},...de(s,o)]}},getShaderSource:r}},jh=(A,g)=>{Xl(A.inputs,g.perm),A.compute(nI(A.inputs[0],g.perm))},Vh=A=>We({perm:A.perm})}),ic,tc,oc,sc,Cc,rc,ac,Bc,Qc,nc,NI,zh,$h,Zh,Xh,AD,eD,gD,ID,iD,tD,xf=jA(()=>{ye(),Ge(),Ke(),na(),oi(),ic={max:"select(bestValue, candidate, candidate > bestValue)",min:"select(bestValue, candidate, candidate < bestValue)",mean:"bestValue + candidate",sum:"bestValue + candidate",prod:"bestValue * candidate",sumSquare:"bestValue + candidate * candidate",logSumExp:"bestValue + exp(candidate)",l1:"bestValue + abs(candidate)",l2:"bestValue + candidate * candidate",logSum:"bestValue + candidate"},tc={max:"select(bestValue, candidate, candidate > bestValue)",min:"select(bestValue, candidate, candidate < bestValue)",mean:"bestValue + candidate",sum:"bestValue + candidate",prod:"bestValue * candidate",sumSquare:"bestValue + candidate",logSumExp:"bestValue + candidate",l1:"bestValue + candidate",l2:"bestValue + candidate",logSum:"bestValue + candidate"},oc={max:"_A[offset]",min:"_A[offset]",mean:"0",sum:"0",prod:"1",sumSquare:"0",logSumExp:"0",l1:"0",l2:"0",logSum:"0"},sc={max:"bestValue",min:"bestValue",sum:"bestValue",prod:"bestValue",sumSquare:"bestValue",logSumExp:"log(bestValue)",l1:"bestValue",l2:"sqrt(bestValue)",logSum:"log(bestValue)"},Cc=(A,g)=>{let e=[];for(let I=g-A;I{let e=[],I=A.length;for(let t=0;tA[t]);return[e,i]},ac=(A,g)=>{let e=A.length+g.length,I=[],i=0;for(let t=0;t{for(let e=0;e{let e=[];if(!Bc(A,g)){for(let I=0;Ie.push(I))}return e},nc=(A,g,e,I,i,t,s)=>{let o=e[0].dims,C=FA.size(t),r=FA.size(s),Q=UA("_A",e[0].dataType,o),B=ne("output",i,t),a=64;C===1&&(a=256);let d=` var aBestValues : array; `,c=p=>` ${p.registerUniform("reduceSize","u32").declareVariables(Q,B)} ${d} fn DIV_CEIL(a : u32, b : u32) -> u32 { return ((a - 1u) / b + 1u); } ${p.mainStart(a)} let outputIndex = global_idx / ${a}; let offset = outputIndex * uniforms.reduceSize; var bestValue = f32(${oc[I]}); let Length = uniforms.reduceSize; for (var k = local_idx; k < Length; k = k + ${a}) { let candidate = f32(${Q.getByOffset("offset + k")}); bestValue = ${ic[I]}; } aBestValues[local_idx] = bestValue; workgroupBarrier(); var reduceSize = min(Length, ${a}u); for (var currentSize = reduceSize / 2u; reduceSize > 1u; currentSize = reduceSize / 2u) { let interval = DIV_CEIL(reduceSize, 2u); if (local_idx < currentSize) { let candidate = aBestValues[local_idx + interval]; bestValue = ${tc[I]}; aBestValues[local_idx] = bestValue; } reduceSize = interval; workgroupBarrier(); } if (local_idx == 0u) { ${B.setByOffset("outputIndex",`${I==="mean"?`${B.type.storage}(bestValue / f32(uniforms.reduceSize))`:`${B.type.storage}(${sc[I]})`}`)}; } }`;return{name:A,shaderCache:{hint:`${g};${a}`,inputDependencies:["type"]},getShaderSource:c,getRunData:()=>({outputs:[{dims:t,dataType:i}],dispatchGroup:{x:C},programUniforms:[{type:12,data:r}]})}},NI=(A,g,e,I)=>{let i=A.inputs.length===1?e:Yr(A.inputs,e),t=i.axes;t.length===0&&!i.noopWithEmptyAxes&&(t=A.inputs[0].dims.map((d,c)=>c));let s=FA.normalizeAxes(t,A.inputs[0].dims.length),o=s,C=A.inputs[0],r=Qc(o,A.inputs[0].dims.length);r.length>0&&(C=A.compute(nI(A.inputs[0],r),{inputs:[0],outputs:[-1]})[0],o=Cc(o.length,C.dims.length));let[Q,B]=rc(C.dims,o),a=Q;i.keepDims&&(a=ac(Q,s)),A.compute(nc(g,i.cacheKey,[C],I,A.inputs[0].dataType,a,B),{inputs:[C]})},zh=(A,g)=>{NI(A,"ReduceMeanShared",g,"mean")},$h=(A,g)=>{NI(A,"ReduceL1Shared",g,"l1")},Zh=(A,g)=>{NI(A,"ReduceL2Shared",g,"l2")},Xh=(A,g)=>{NI(A,"ReduceLogSumExpShared",g,"logSumExp")},AD=(A,g)=>{NI(A,"ReduceMaxShared",g,"max")},eD=(A,g)=>{NI(A,"ReduceMinShared",g,"min")},gD=(A,g)=>{NI(A,"ReduceProdShared",g,"prod")},ID=(A,g)=>{NI(A,"ReduceSumShared",g,"sum")},iD=(A,g)=>{NI(A,"ReduceSumSquareShared",g,"sumSquare")},tD=(A,g)=>{NI(A,"ReduceLogSumShared",g,"logSum")}}),_I,Ec,ss,Yr,RI,lc,cc,dc,uc,hc,Dc,wc,pc,fc,yc,GI,oD,sD,CD,rD,aD,BD,QD,nD,ED,lD,na=jA(()=>{ye(),Ge(),pg(),Ke(),xf(),_I=A=>{if(!A||A.length===0||A.length>2)throw new Error("Reduce op requires 1 or 2 inputs.");if(A.length===2&&A[1].dims.length!==1)throw new Error("Invalid axes input dims.")},Ec=A=>["","",`var value = ${A.getByIndices("input_indices")};`,""],ss=(A,g,e,I,i,t,s=!1,o=!1)=>{let C=[],r=e[0].dims,Q=r.length,B=FA.normalizeAxes(i,Q),a=!o&&B.length===0;r.forEach((p,L)=>{a||B.indexOf(L)>=0?s&&C.push(1):C.push(p)});let d=C.length,c=FA.size(C);return{name:A,shaderCache:g,getShaderSource:p=>{let L=[],w=UA("_A",e[0].dataType,Q),u=ne("output",t,d),_=I(w,u,B),y=_[2];for(let M=0,F=0;M=0?(s&&F++,y=`for(var j${M}: u32 = 0; j${M} < ${r[M]}; j${M}++) { ${_[2].includes("last_index")?`let last_index = j${M};`:""} ${w.indicesSet("input_indices",M,`j${M}`)} ${y} }`):(L.push(`${w.indicesSet("input_indices",M,u.indicesGet("output_indices",F))};`),F++);return` ${p.registerUniform("output_size","u32").declareVariables(w,u)} ${p.mainStart()} ${p.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} var input_indices: ${w.type.indices}; let output_indices = ${u.offsetToIndices("global_idx")}; ${L.join(` `)} ${_[0]} // init ops for reduce max/min ${_[1]} ${y} ${_[3]} ${_.length===4?u.setByOffset("global_idx","value"):_.slice(4).join(` `)} }`},getRunData:()=>({outputs:[{dims:C,dataType:t}],dispatchGroup:{x:Math.ceil(c/64)},programUniforms:[{type:12,data:c},...de(r,C)]})}},Yr=(A,g)=>{let e=[];return A[1].dims[0]>0&&A[1].getBigInt64Array().forEach(I=>e.push(Number(I))),We({axes:e,keepDims:g.keepDims,noopWithEmptyAxes:g.noopWithEmptyAxes})},RI=(A,g,e,I)=>{let i=A.inputs,t=i.length===1?e:Yr(i,e);A.compute(ss(g,{hint:t.cacheKey,inputDependencies:["rank"]},[i[0]],t.noopWithEmptyAxes&&t.axes.length===0?Ec:I,t.axes,i[0].dataType,t.keepDims,t.noopWithEmptyAxes),{inputs:[0]})},lc=(A,g)=>{_I(A.inputs),RI(A,"ReduceLogSum",g,(e,I)=>[`var value = ${I.type.storage}(0);`,"",`value += ${e.getByIndices("input_indices")};`,"value = log(value);"])},cc=(A,g)=>{_I(A.inputs),RI(A,"ReduceL1",g,(e,I)=>[`var value = ${I.type.storage}(0);`,"",`value += abs(${e.getByIndices("input_indices")});`,""])},dc=(A,g)=>{_I(A.inputs),RI(A,"ReduceL2",g,(e,I)=>[`var t = ${I.type.value}(0); var value = ${I.type.value}(0);`,"",`t = ${e.getByIndices("input_indices")}; value += (t * t);`,"value = sqrt(value);"])},uc=(A,g)=>{_I(A.inputs),RI(A,"ReduceLogSumExp",g,(e,I)=>[`var value = ${I.type.storage}(0);`,"",`value += exp(${e.getByIndices("input_indices")});`,"value = log(value);"])},hc=(A,g)=>{_I(A.inputs),RI(A,"ReduceMax",g,(e,I,i)=>{let t=[];for(let s=0;s=0||i.length===0)&&t.push(e.indicesSet("input_indices",s,0));return[`${t.join(` `)}`,`var value = ${e.getByIndices("input_indices")};`,`value = max(value, ${e.getByIndices("input_indices")});`,""]})},Dc=(A,g)=>{_I(A.inputs),RI(A,"ReduceMean",g,(e,I,i)=>{let t=1;for(let s=0;s=0||i.length===0)&&(t*=A.inputs[0].dims[s]);return["var sum = f32(0);","",`sum += f32(${e.getByIndices("input_indices")});`,`let value = ${I.type.value}(sum / ${t});`]})},wc=(A,g)=>{_I(A.inputs),RI(A,"ReduceMin",g,(e,I,i)=>{let t=[];for(let s=0;s=0||i.length===0)&&t.push(`input_indices[${s}] = 0;`);return[`${t.join(` `)}`,`var value = ${e.getByIndices("input_indices")};`,`value = min(value, ${e.getByIndices("input_indices")});`,""]})},pc=(A,g)=>{_I(A.inputs),RI(A,"ReduceProd",g,(e,I)=>[`var value = ${I.type.storage}(1);`,"",`value *= ${e.getByIndices("input_indices")};`,""])},fc=(A,g)=>{_I(A.inputs),RI(A,"ReduceSum",g,(e,I)=>[`var value = ${I.type.storage}(0);`,"",`value += ${e.getByIndices("input_indices")};`,""])},yc=(A,g)=>{_I(A.inputs),RI(A,"ReduceSumSquare",g,(e,I)=>[`var t = ${I.type.value}(0); var value = ${I.type.value}(0);`,"",`t = ${e.getByIndices("input_indices")}; value += t * t;`,""])},GI=(A,g,e)=>{if(g.length===0)return e;let I=1,i=1;for(let t=0;t1024},oD=(A,g)=>{GI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?Dc(A,g):zh(A,g)},sD=(A,g)=>{GI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?cc(A,g):$h(A,g)},CD=(A,g)=>{GI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?dc(A,g):Zh(A,g)},rD=(A,g)=>{GI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?uc(A,g):Xh(A,g)},aD=(A,g)=>{GI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?hc(A,g):AD(A,g)},BD=(A,g)=>{GI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?wc(A,g):eD(A,g)},QD=(A,g)=>{GI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?pc(A,g):gD(A,g)},nD=(A,g)=>{GI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?fc(A,g):ID(A,g)},ED=(A,g)=>{GI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?yc(A,g):iD(A,g)},lD=(A,g)=>{GI(A.inputs[0].dims,g.axes,g.noopWithEmptyAxes)?lc(A,g):tD(A,g)}}),er,cD,dD,Pr,Tf=jA(()=>{ye(),pg(),na(),er=A=>{if(!A||A.length===0||A.length>2)throw new Error("ArgMinMaxOp op requires 1 or 2 inputs.");if(A[0].dataType!==1)throw new Error("Invalid input type.")},cD=(A,g)=>{er(A.inputs);let e=(I,i,t)=>{let s=[];for(let o=0;o=0||t.length===0)&&s.push(`input_indices[${o}] = 0;`);return[`${s.join(` `)}`,`var value = ${I.getByIndices("input_indices")}; var best_index : i32 = 0;`,`if (${I.getByIndices("input_indices")} ${g.selectLastIndex>0?"<=":"<"} value) { value = ${I.getByIndices("input_indices")}; best_index = i32(last_index); }`,"",i.setByOffset("global_idx","best_index")]};A.compute(ss("ArgMin",{hint:g.cacheKey,inputDependencies:["rank"]},[A.inputs[0]],e,[g.axis],7,g.keepDims),{inputs:[0]})},dD=(A,g)=>{er(A.inputs);let e=(I,i,t)=>{let s=[];for(let o=0;o=0||t.length===0)&&s.push(`input_indices[${o}] = 0;`);return[`${s.join(` `)}`,`var value = ${I.getByIndices("input_indices")}; var best_index : i32 = 0;`,`if (${I.getByIndices("input_indices")} ${g.selectLastIndex>0?">=":">"} value) { value = ${I.getByIndices("input_indices")}; best_index = i32(last_index); }`,"",i.setByOffset("global_idx","best_index")]};A.compute(ss("argMax",{hint:g.cacheKey,inputDependencies:["rank"]},[A.inputs[0]],e,[g.axis],7,g.keepDims),{inputs:[0]})},Pr=A=>We(A)}),mc,Wo,Mc,Fc,Sc,Vt,Nc,uD,Ea=jA(()=>{ye(),Ge(),Ba(),Ke(),mc=(A,g)=>{let e=A[0],I=A[1],i=A[2],t=A[3],s=A[4],o=A[5];if(s&&o)throw new Error("Attention cannot have both past and attention_bias");if(e.dims.length!==3)throw new Error('Input "input" must have 3 dimensions');let C=e.dims[0],r=e.dims[1],Q=e.dims[2];if(i.dims.length!==1)throw new Error('Input "bias" is expected to have 1 dimensions');if(I.dims.length!==2)throw new Error('Input "weights" is expected to have 2 dimensions');if(I.dims[0]!==Q)throw new Error("Input 1 dimension 0 should have same length as dimension 2 of input 0");if(i.dims[0]!==I.dims[1])throw new Error('Input "bias" dimension 0 should have same length as dimension 1 of input "weights"');let B=i.dims[0]/3,a=B,d=a;if(g.qkvHiddenSizes.length>0){if(g.qkvHiddenSizes.length!==3)throw new Error("qkv_hidden_sizes attribute should have 3 elements");for(let _ of g.qkvHiddenSizes)if(_%g.numHeads!==0)throw new Error("qkv_hidden_sizes should be divisible by num_heads");B=g.qkvHiddenSizes[0],a=g.qkvHiddenSizes[1],d=g.qkvHiddenSizes[2]}let c=r;if(B!==a)throw new Error("qkv_hidden_sizes first element should be same as the second");if(i.dims[0]!==B+a+d)throw new Error('Input "bias" dimension 0 should have same length as sum of Q/K/V hidden sizes');let p=0;if(s){if(a!==d)throw new Error('Input "past" expect k_hidden_size == v_hidden_size');if(s.dims.length!==5)throw new Error('Input "past" must have 5 dimensions');if(s.dims[0]!==2)throw new Error('Input "past" first dimension must be 2');if(s.dims[1]!==C)throw new Error('Input "past" second dimension must be batch_size');if(s.dims[2]!==g.numHeads)throw new Error('Input "past" third dimension must be num_heads');if(s.dims[4]!==a/g.numHeads)throw new Error('Input "past" fifth dimension must be k_hidden_size / num_heads');g.pastPresentShareBuffer||(p=s.dims[3])}let L=c+p,w=-1,u=0;if(t)throw new Error("Mask not supported");if(s)throw new Error("past is not supported");if(o){if(o.dims.length!==4)throw new Error('Input "attention_bias" must have 4 dimensions');if(o.dims[0]!==C||o.dims[1]!==g.numHeads||o.dims[2]!==r||o.dims[3]!==L)throw new Error('Expect "attention_bias" shape (batch_size, num_heads, sequence_length, total_sequence_length)')}return{batchSize:C,sequenceLength:r,pastSequenceLength:p,kvSequenceLength:c,totalSequenceLength:L,maxSequenceLength:w,inputHiddenSize:Q,hiddenSize:B,vHiddenSize:d,headSize:Math.floor(B/g.numHeads),vHeadSize:Math.floor(d/g.numHeads),numHeads:g.numHeads,isUnidirectional:!1,pastPresentShareBuffer:!1,maskFilterValue:g.maskFilterValue,maskType:u,scale:g.scale,broadcastResPosBias:!1,passPastInKv:!1,qkvFormat:1}},Wo=(A,g,e)=>g&&A?` let total_sequence_length_input = u32(${g.getByOffset("0")}); let present_sequence_length = max(total_sequence_length_input, uniforms.past_sequence_length); let is_subsequent_prompt: bool = sequence_length > 1 && sequence_length != total_sequence_length_input; let is_first_prompt: bool = is_subsequent_prompt == false && sequence_length == total_sequence_length_input; total_sequence_length = u32(${A?.getByOffset("batchIdx")}) + 1; var past_sequence_length: u32 = 0; if (is_first_prompt == false) { past_sequence_length = total_sequence_length - sequence_length; } `:` ${e?"let past_sequence_length = uniforms.past_sequence_length":""}; let present_sequence_length = total_sequence_length; `,Mc=(A,g,e,I,i,t,s,o)=>{let C=Dg(s?1:t),r=64,Q=t/C;Q{let u=ne("x",A.dataType,A.dims,C),_=[u],y=s?UA("seq_lens",s.dataType,s.dims):void 0;y&&_.push(y);let M=o?UA("total_sequence_length_input",o.dataType,o.dims):void 0;M&&_.push(M);let F=Xg(A.dataType),m=[{name:"batch_size",type:"u32"},{name:"num_heads",type:"u32"},{name:"past_sequence_length",type:"u32"},{name:"sequence_length",type:"u32"},{name:"total_sequence_length",type:"u32"},{name:"elements_per_thread",type:"u32"}];return` var thread_max: array; var thread_sum: array; ${w.registerUniforms(m).declareVariables(..._)} ${w.mainStart([r,1,1])} let batchIdx = workgroup_id.z / uniforms.num_heads; let headIdx = workgroup_id.z % uniforms.num_heads; let sequence_length = uniforms.sequence_length; var total_sequence_length = uniforms.total_sequence_length; ${Wo(y,M,!1)} let local_offset = local_idx * uniforms.elements_per_thread; let offset = (global_idx / ${r}) * uniforms.total_sequence_length + local_offset; let seq_causal_length = ${s?"u32(past_sequence_length + workgroup_id.y + 1)":"total_sequence_length"}; var thread_max_vector = ${c}(-3.402823e+38f); for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) { thread_max_vector = max(${c}(x[offset + i]), thread_max_vector); } thread_max[local_idx] = ${(()=>{switch(C){case 1:return"thread_max_vector";case 2:return"max(thread_max_vector.x, thread_max_vector.y)";case 4:return"max(max(thread_max_vector.x, thread_max_vector.y), max(thread_max_vector.z, thread_max_vector.w))";default:throw new Error(`Unsupported components: ${C}`)}})()}; workgroupBarrier(); var max_value = f32(-3.402823e+38f); for (var i = 0u; i < ${r}; i++) { max_value = max(thread_max[i], max_value); } var sum_vector = ${c}(0); for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) { sum_vector += exp(${c}(x[offset + i]) - max_value); } thread_sum[local_idx] = ${(()=>{switch(C){case 1:return"sum_vector";case 2:return"sum_vector.x + sum_vector.y";case 4:return"sum_vector.x + sum_vector.y + sum_vector.z + sum_vector.w";default:throw new Error(`Unsupported components: ${C}`)}})()}; workgroupBarrier(); var sum: f32 = 0; for (var i = 0u; i < ${r}; i++) { sum += thread_sum[i]; } if (sum == 0) { for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) { x[offset + i] = ${u.type.value}(${F}(1.0) / ${F}(seq_causal_length)); } } else { for (var i: u32 = 0; i < uniforms.elements_per_thread && i + local_offset < seq_causal_length; i++) { var f32input = ${c}(x[offset + i]); x[offset + i] = ${u.type.value}(exp(f32input - max_value) / sum); } } ${s?` for (var total_seq_id: u32 = seq_causal_length; total_seq_id + local_offset < uniforms.total_sequence_length; total_seq_id++) { x[offset + total_seq_id] = ${u.type.value}(${F}(0)); }`:""}; }`};return{name:"AttentionProbsSoftmax",shaderCache:{hint:`${r};${d};${C}`,inputDependencies:p},getShaderSource:L,getRunData:()=>({outputs:[],dispatchGroup:{x:1,y:i,z:g*e},programUniforms:a})}},Fc=(A,g,e,I,i,t,s,o,C)=>{let r=s+t.kvSequenceLength,Q=[t.batchSize,t.numHeads,t.sequenceLength,r],B=A>1&&I,a=t.kvNumHeads?t.kvNumHeads:t.numHeads,d=B?[t.batchSize,a,r,t.headSize]:void 0,c=t.nReps?t.nReps:1,p=t.scale===0?1/Math.sqrt(t.headSize):t.scale,L=Dg(t.headSize),w=t.headSize/L,u=12,_={x:Math.ceil(r/u),y:Math.ceil(t.sequenceLength/u),z:t.batchSize*t.numHeads},y=[{type:12,data:t.sequenceLength},{type:12,data:w},{type:12,data:r},{type:12,data:t.numHeads},{type:12,data:t.headSize},{type:1,data:p},{type:12,data:s},{type:12,data:t.kvSequenceLength},{type:12,data:c}],M=B&&I&&FA.size(I.dims)>0,F=["type","type"];M&&F.push("type"),i&&F.push("type"),o&&F.push("type"),C&&F.push("type");let m=[{dims:Q,dataType:g.dataType,gpuDataType:0}];B&&m.push({dims:d,dataType:g.dataType,gpuDataType:0});let G=T=>{let J=UA("q",g.dataType,g.dims,L),Z=UA("key",e.dataType,e.dims,L),z=[J,Z];if(M){let cA=UA("past_key",I.dataType,I.dims,L);z.push(cA)}i&&z.push(UA("attention_bias",i.dataType,i.dims));let P=o?UA("seq_lens",o.dataType,o.dims):void 0;P&&z.push(P);let tA=C?UA("total_sequence_length_input",C.dataType,C.dims):void 0;tA&&z.push(tA);let AA=ne("output",g.dataType,Q),iA=[AA];B&&iA.push(ne("present_key",g.dataType,d,L));let rA=Xg(1,L),CA=[{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"alpha",type:"f32"},{name:"past_sequence_length",type:"u32"},{name:"kv_sequence_length",type:"u32"},{name:"n_reps",type:"u32"}];return` const TILE_SIZE = ${u}u; var tileQ: array<${J.type.storage}, ${u*u}>; var tileK: array<${J.type.storage}, ${u*u}>; ${T.registerUniforms(CA).declareVariables(...z,...iA)} ${T.mainStart([u,u,1])} // x holds the N and y holds the M let headIdx = workgroup_id.z % uniforms.num_heads; let kvHeadIdx = ${c===1?"headIdx":"headIdx / uniforms.n_reps"}; let kv_num_heads = ${c===1?"uniforms.num_heads":"uniforms.num_heads / uniforms.n_reps"}; let batchIdx = workgroup_id.z / uniforms.num_heads; let m = workgroup_id.y * TILE_SIZE; let n = workgroup_id.x * TILE_SIZE; let sequence_length = uniforms.M; var total_sequence_length = uniforms.N; ${Wo(P,tA,!0)} let absKvHeadIdx = batchIdx * kv_num_heads + kvHeadIdx; let qOffset = workgroup_id.z * uniforms.M * uniforms.K + m * uniforms.K; ${M&&B?"let pastKeyOffset = absKvHeadIdx * uniforms.past_sequence_length * uniforms.K;":""}; let kOffset = absKvHeadIdx * uniforms.kv_sequence_length * uniforms.K; ${B?"let presentKeyOffset = absKvHeadIdx * uniforms.N * uniforms.K;":""} var value = ${rA}(0); for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) { if (global_id.y < uniforms.M && w + local_id.x < uniforms.K) { tileQ[TILE_SIZE * local_id.y + local_id.x] = q[qOffset + local_id.y * uniforms.K + w + local_id.x]; } if (n + local_id.y < uniforms.N && w + local_id.x < uniforms.K) { var idx = TILE_SIZE * local_id.y + local_id.x; ${M&&B?` if (n + local_id.y < past_sequence_length) { tileK[idx] = past_key[pastKeyOffset + (n + local_id.y) * uniforms.K + w + local_id.x]; } else if (n + local_id.y - past_sequence_length < uniforms.kv_sequence_length) { tileK[idx] = key[kOffset + (n + local_id.y - past_sequence_length) * uniforms.K + w + local_id.x]; }`:` if (n + local_id.y < uniforms.kv_sequence_length) { tileK[idx] = key[kOffset + (n + local_id.y) * uniforms.K + w + local_id.x]; }`} ${B?`if (n + local_id.y < present_sequence_length) { present_key[presentKeyOffset + (n + local_id.y) * uniforms.K + w + local_id.x] = tileK[idx]; }`:""} } workgroupBarrier(); for (var k: u32 = 0u; k < TILE_SIZE && w+k < uniforms.K; k++) { value += ${rA}(tileQ[TILE_SIZE * local_id.y + k] * tileK[TILE_SIZE * local_id.x + k]); } workgroupBarrier(); } if (global_id.y < uniforms.M && global_id.x < total_sequence_length) { let headOffset = workgroup_id.z * uniforms.M * uniforms.N; let outputIdx = headOffset + global_id.y * uniforms.N + global_id.x; var sum: f32 = ${(()=>{switch(L){case 1:return"value";case 2:return"value.x + value.y";case 4:return"value.x + value.y + value.z + value.w";default:throw new Error(`Unsupported components: ${L}`)}})()}; output[outputIdx] = ${AA.type.value} (sum * uniforms.alpha) + ${i?"attention_bias[outputIdx]":"0.0"}; } }`};return{name:"AttentionProbs",shaderCache:{hint:`${L};${i!==void 0};${I!==void 0};${A}`,inputDependencies:F},getRunData:()=>({outputs:m,dispatchGroup:_,programUniforms:y}),getShaderSource:G}},Sc=(A,g,e,I,i,t,s=void 0,o=void 0)=>{let C=t+i.kvSequenceLength,r=i.nReps?i.nReps:1,Q=i.vHiddenSize*r,B=A>1&&I,a=i.kvNumHeads?i.kvNumHeads:i.numHeads,d=B?[i.batchSize,a,C,i.headSize]:void 0,c=[i.batchSize,i.sequenceLength,Q],p=12,L={x:Math.ceil(i.vHeadSize/p),y:Math.ceil(i.sequenceLength/p),z:i.batchSize*i.numHeads},w=[{type:12,data:i.sequenceLength},{type:12,data:C},{type:12,data:i.vHeadSize},{type:12,data:i.numHeads},{type:12,data:i.headSize},{type:12,data:Q},{type:12,data:t},{type:12,data:i.kvSequenceLength},{type:12,data:r}],u=B&&I&&FA.size(I.dims)>0,_=["type","type"];u&&_.push("type"),s&&_.push("type"),o&&_.push("type");let y=[{dims:c,dataType:g.dataType,gpuDataType:0}];B&&y.push({dims:d,dataType:g.dataType,gpuDataType:0});let M=F=>{let m=UA("probs",g.dataType,g.dims),G=UA("v",e.dataType,e.dims),T=[m,G];u&&T.push(UA("past_value",I.dataType,I.dims));let J=s?UA("seq_lens",s.dataType,s.dims):void 0;s&&T.push(J);let Z=o?UA("total_sequence_length_input",o.dataType,o.dims):void 0;o&&T.push(Z);let z=[ne("output",g.dataType,c)];B&&z.push(ne("present_value",g.dataType,d));let P=[{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"v_hidden_size",type:"u32"},{name:"past_sequence_length",type:"u32"},{name:"kv_sequence_length",type:"u32"},{name:"n_reps",type:"u32"}];return` const TILE_SIZE = ${p}u; var tileQ: array<${m.type.value}, ${p*p}>; var tileV: array<${m.type.value}, ${p*p}>; ${F.registerUniforms(P).declareVariables(...T,...z)} ${F.mainStart([p,p,1])} let headIdx = workgroup_id.z % uniforms.num_heads; let batchIdx = workgroup_id.z / uniforms.num_heads; let kvHeadIdx = ${r===1?"headIdx":"headIdx / uniforms.n_reps"}; let kv_num_heads = ${r===1?"uniforms.num_heads":"uniforms.num_heads / uniforms.n_reps"}; let m = global_id.y; let n = global_id.x; let sequence_length = uniforms.M; var total_sequence_length = uniforms.K; ${Wo(J,Z,!0)} let offsetA = workgroup_id.z * uniforms.M * uniforms.K + m * uniforms.K; let absKvHeadIdx = batchIdx * kv_num_heads + kvHeadIdx; // kvHeadIdx is relative to the batch ${u&&B?"let pastValueOffset = absKvHeadIdx * uniforms.N * uniforms.past_sequence_length + n;":""}; let vOffset = absKvHeadIdx * uniforms.N * uniforms.kv_sequence_length + n; ${B?"let presentValueOffset = absKvHeadIdx * uniforms.N * uniforms.K + n;":""} var value = ${m.type.storage}(0); for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) { if (m < uniforms.M && w + local_id.x < uniforms.K) { tileQ[TILE_SIZE * local_id.y + local_id.x] = probs[offsetA + w + local_id.x]; } if (n < uniforms.N && w + local_id.y < uniforms.K) { var idx = TILE_SIZE * local_id.y + local_id.x; ${u&&B?` if (w + local_id.y < past_sequence_length) { tileV[idx] = past_value[pastValueOffset + (w + local_id.y) * uniforms.N]; } else if (w + local_id.y - past_sequence_length < uniforms.kv_sequence_length) { tileV[idx] = v[vOffset + (w + local_id.y - past_sequence_length) * uniforms.N]; } `:` if (w + local_id.y < uniforms.kv_sequence_length) { tileV[idx] = v[vOffset + (w + local_id.y) * uniforms.N]; }`} ${B?` if (w + local_id.y < present_sequence_length) { present_value[presentValueOffset + (w + local_id.y) * uniforms.N] = tileV[idx]; }`:""} } workgroupBarrier(); for (var k: u32 = 0u; k < TILE_SIZE && w+k < total_sequence_length; k++) { value += tileQ[TILE_SIZE * local_id.y + k] * tileV[TILE_SIZE * k + local_id.x]; } workgroupBarrier(); } // we need to transpose output from BNSH_v to BSND_v if (m < uniforms.M && n < uniforms.N) { let outputIdx = batchIdx * uniforms.M * uniforms.v_hidden_size + m * uniforms.v_hidden_size + headIdx * uniforms.N + n; output[outputIdx] = value; } }`};return{name:"AttentionScore",shaderCache:{hint:`${I!==void 0};${A}`,inputDependencies:_},getRunData:()=>({outputs:y,dispatchGroup:L,programUniforms:w}),getShaderSource:M}},Vt=(A,g,e,I,i,t,s,o,C,r,Q=void 0,B=void 0)=>{let a=Math.min(A.outputCount,1+(s?1:0)+(o?1:0)),d=a>1?r.pastSequenceLength:0,c=d+r.kvSequenceLength,p=C&&FA.size(C.dims)>0?C:void 0,L=[g,e];a>1&&s&&FA.size(s.dims)>0&&L.push(s),p&&L.push(p),Q&&L.push(Q),B&&L.push(B);let w=A.compute(Fc(a,g,e,s,p,r,d,Q,B),{inputs:L,outputs:a>1?[-1,1]:[-1]})[0];A.compute(Mc(w,r.batchSize,r.numHeads,d,r.sequenceLength,c,Q,B),{inputs:Q&&B?[w,Q,B]:[w],outputs:[]});let u=[w,I];a>1&&o&&FA.size(o.dims)>0&&u.push(o),Q&&u.push(Q),B&&u.push(B),A.compute(Sc(a,w,I,o,r,d,Q,B),{inputs:u,outputs:a>1?[0,2]:[0]})},Nc=(A,g)=>{let e=[g.batchSize,g.numHeads,g.sequenceLength,g.headSize],I=g.sequenceLength,i=g.inputHiddenSize,t=g.headSize,s=12,o={x:Math.ceil(g.headSize/s),y:Math.ceil(g.sequenceLength/s),z:g.batchSize*g.numHeads},C=[A.inputs[0],A.inputs[1],A.inputs[2]],r=[{type:12,data:I},{type:12,data:i},{type:12,data:t},{type:12,data:g.numHeads},{type:12,data:g.headSize},{type:12,data:g.hiddenSize},{type:12,data:g.hiddenSize+g.hiddenSize+g.vHiddenSize}],Q=B=>{let a=ne("output_q",C[0].dataType,e),d=ne("output_k",C[0].dataType,e),c=ne("output_v",C[0].dataType,e),p=UA("input",C[0].dataType,C[0].dims),L=UA("weight",C[1].dataType,C[1].dims),w=UA("bias",C[2].dataType,C[2].dims),u=p.type.storage,_=[{name:"M",type:"u32"},{name:"K",type:"u32"},{name:"N",type:"u32"},{name:"num_heads",type:"u32"},{name:"head_size",type:"u32"},{name:"hidden_size",type:"u32"},{name:"ldb",type:"u32"}];return` const TILE_SIZE = ${s}u; var tileInput: array<${u}, ${s*s}>; var tileWeightQ: array<${u}, ${s*s}>; var tileWeightK: array<${u}, ${s*s}>; var tileWeightV: array<${u}, ${s*s}>; ${B.registerUniforms(_).declareVariables(p,L,w,a,d,c)} ${B.mainStart([s,s,1])} let batchIndex = workgroup_id.z / uniforms.num_heads; let headNumber = workgroup_id.z % uniforms.num_heads; let m = global_id.y; let n = global_id.x; let inputOffset = batchIndex * (uniforms.M * uniforms.K) + m * uniforms.K; let biasOffsetQ = headNumber * uniforms.head_size; let biasOffsetK = uniforms.hidden_size + biasOffsetQ; let biasOffsetV = uniforms.hidden_size + biasOffsetK; var valueQ = ${u}(0); var valueK = ${u}(0); var valueV = ${u}(0); for (var w: u32 = 0u; w < uniforms.K; w += TILE_SIZE) { if (m < uniforms.M && w + local_id.x < uniforms.K) { tileInput[TILE_SIZE * local_id.y + local_id.x] = input[inputOffset + w + local_id.x]; } if (n < uniforms.N && w + local_id.y < uniforms.K) { let offset = n + (w + local_id.y) * uniforms.ldb; tileWeightQ[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetQ + offset]; tileWeightK[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetK + offset]; tileWeightV[TILE_SIZE * local_id.y + local_id.x] = weight[biasOffsetV + offset]; } workgroupBarrier(); for (var k: u32 = 0u; k({outputs:[{dims:e,dataType:A.inputs[0].dataType,gpuDataType:0},{dims:e,dataType:A.inputs[0].dataType,gpuDataType:0},{dims:e,dataType:A.inputs[0].dataType,gpuDataType:0}],dispatchGroup:o,programUniforms:r}),getShaderSource:Q},{inputs:C,outputs:[-1,-1,-1]})},uD=(A,g)=>{let e=mc(A.inputs,g),[I,i,t]=Nc(A,e);return Vt(A,I,i,t,A.inputs[4],void 0,void 0,void 0,A.inputs[5],e)}}),_c,Rc,Gc,hD,Yf=jA(()=>{JI(),ye(),Ge(),pg(),Ke(),_c=(A,g)=>{if(!A||A.length!==5)throw new Error("BatchNormalization requires 5 inputs");let e=(I,i,t)=>{let s=i.length;if(s!==I.length)throw new Error(`${t}: num dimensions != ${s}`);i.forEach((o,C)=>{if(o!==I[C])throw new Error(`${t}: dim[${C}] do not match`)})};if(A[0].dims.length>1){let I=g.format==="NHWC"?g.spatial?A[0].dims.slice(-1):A[0].dims.slice(-1).concat(A[0].dims.slice(1,A[0].dims.length-1)):A[0].dims.slice(1,g.spatial?2:void 0);e(A[1].dims,I,"Invalid input scale"),e(A[2].dims,I,"Invalid input B"),e(A[3].dims,I,"Invalid input mean"),e(A[4].dims,I,"Invalid input var")}else e(A[1].dims,[1],"Invalid input scale"),e(A[2].dims,[1],"Invalid input B"),e(A[3].dims,[1],"Invalid input mean"),e(A[4].dims,[1],"Invalid input var")},Rc=(A,g)=>{let{epsilon:e,spatial:I,format:i}=g,t=A[0].dims,s=I?Dg(t[t.length-1]):1,o=i==="NHWC"&&t.length>1?s:1,C=FA.size(t)/s,r=I,Q=r?t.length:t,B=UA("x",A[0].dataType,A[0].dims,s),a=UA("scale",A[1].dataType,A[1].dims,o),d=UA("bias",A[2].dataType,A[2].dims,o),c=UA("inputMean",A[3].dataType,A[3].dims,o),p=UA("inputVar",A[4].dataType,A[4].dims,o),L=ne("y",A[0].dataType,Q,s),w=()=>{let _="";if(I)_=`let cOffset = ${t.length===1?"0u":i==="NHWC"?`outputIndices[${t.length-1}] / ${s}`:"outputIndices[1]"};`;else if(i==="NCHW")_=` ${L.indicesSet("outputIndices","0","0")} let cOffset = ${L.indicesToOffset("outputIndices")};`;else{_=`var cIndices = ${a.type.indices}(0); cIndices[0] = outputIndices[${t.length-1}];`;for(let y=1;y` const epsilon = ${e}; ${_.registerUniform("outputSize","u32").declareVariables(B,a,d,c,p,L)} ${_.mainStart()} ${_.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} var outputIndices = ${L.offsetToIndices(`global_idx * ${s}`)}; ${w()} let scale = ${a.getByOffset("cOffset")}; let bias = ${d.getByOffset("cOffset")}; let inputMean = ${c.getByOffset("cOffset")}; let inputVar = ${p.getByOffset("cOffset")}; let x = ${B.getByOffset("global_idx")}; let value = (x - inputMean) * inverseSqrt(inputVar + epsilon) * scale + bias; ${L.setByOffset("global_idx","value")} }`;return{name:"BatchNormalization",shaderCache:{hint:`${g.epsilon}_${g.format}_${I}_${s}`,inputDependencies:r?["rank","type","type","type","type"]:void 0},getShaderSource:u,getRunData:()=>({outputs:[{dims:A[0].dims,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(C/64)},programUniforms:r?[{type:12,data:C},...de(t)]:[{type:12,data:C}]})}},Gc=A=>We(A),hD=(A,g)=>{let{inputs:e,outputCount:I}=A,i=Gc({...g,outputCount:I});if(Cg.webgpu.validateInputContent&&_c(e,i),g.trainingMode)throw new Error("BatchNormalization trainingMode is not supported yet.");A.compute(Rc(e,i))}}),kc,Lc,DD,Pf=jA(()=>{Ge(),Ke(),kc=A=>{if(A[0].dims.length!==3)throw new Error("input should have 3 dimensions");if(![320,640,1280].includes(A[0].dims[2]))throw new Error("number of channels should be 320, 640 or 1280");if(A[1].dims.length!==1)throw new Error("bias is expected to have 1 dimensions");if(A[0].dims[2]!==A[1].dims[0])throw new Error("last dimension of input and bias are not the same")},Lc=A=>{let g=A[0].dims,e=A[0].dims[2],I=FA.size(g)/4,i=A[0].dataType,t=UA("input",i,g,4),s=UA("bias",i,[e],4),o=UA("residual",i,g,4),C=ne("output",i,g,4);return{name:"BiasAdd",getRunData:()=>({outputs:[{dims:g,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(I/64)}}),getShaderSource:r=>` const channels = ${e}u / 4; ${r.declareVariables(t,s,o,C)} ${r.mainStart()} ${r.guardAgainstOutOfBoundsWorkgroupSizes(I)} let value = ${t.getByOffset("global_idx")} + ${s.getByOffset("global_idx % channels")} + ${o.getByOffset("global_idx")}; ${C.setByOffset("global_idx","value")} }`}},DD=A=>{kc(A.inputs),A.compute(Lc(A.inputs))}}),Kc,He,wD,pD,fD,yD,mD,MD,FD,SD,ND,Uc,_D,RD,GD,kD,Ht,LD,Is,KD,UD,bD,JD,xD,TD,YD,PD,vD,HD,qD,OD,WD,jD,VD,zD,gr,$D,vr,Hr,ZD,XD,Aw,bc,Jc,ew,la=jA(()=>{ye(),Ge(),pg(),Ke(),Kc=(A,g,e,I,i,t,s)=>{let o=Math.ceil(g/4),C="";typeof i=="string"?C=`${i}(a)`:C=i("a");let r=UA("inputData",e,[o],4),Q=ne("outputData",I,[o],4),B=[{name:"vec_size",type:"u32"}];return s&&B.push(...s),` ${A.registerUniforms(B).declareVariables(r,Q)} ${t??""} ${A.mainStart()} ${A.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} let a = ${r.getByOffset("global_idx")}; ${Q.setByOffset("global_idx",C)} }`},He=(A,g,e,I,i,t=A.dataType,s,o)=>{let C=[{type:12,data:Math.ceil(FA.size(A.dims)/4)}];return s&&C.push(...s),{name:g,shaderCache:{hint:i,inputDependencies:["type"]},getShaderSource:r=>Kc(r,FA.size(A.dims),A.dataType,t,e,I,o),getRunData:r=>({outputs:[{dims:A.dims,dataType:t}],dispatchGroup:{x:Math.ceil(FA.size(r[0].dims)/64/4)},programUniforms:C})}},wD=A=>{A.compute(He(A.inputs[0],"Abs","abs"))},pD=A=>{A.compute(He(A.inputs[0],"Acos","acos"))},fD=A=>{A.compute(He(A.inputs[0],"Acosh","acosh"))},yD=A=>{A.compute(He(A.inputs[0],"Asin","asin"))},mD=A=>{A.compute(He(A.inputs[0],"Asinh","asinh"))},MD=A=>{A.compute(He(A.inputs[0],"Atan","atan"))},FD=A=>{A.compute(He(A.inputs[0],"Atanh","atanh"))},SD=A=>We(A),ND=(A,g)=>{let e;switch(g.to){case 10:e="vec4";break;case 1:e="vec4";break;case 12:e="vec4";break;case 6:e="vec4";break;case 9:e="vec4";break;default:throw new RangeError(`not supported type (specified in attribute 'to' from 'Cast' operator): ${g.to}`)}A.compute(He(A.inputs[0],"Cast",e,void 0,g.cacheKey,g.to))},Uc=A=>{let g,e,I=A.length>=2&&A[1].data!==0,i=A.length>=3&&A[2].data!==0;switch(A[0].dataType){case 1:g=I?A[1].getFloat32Array()[0]:-34028234663852886e22,e=i?A[2].getFloat32Array()[0]:34028234663852886e22;break;case 10:g=I?A[1].getUint16Array()[0]:64511,e=i?A[2].getUint16Array()[0]:31743;break;default:throw new Error("Unsupport data type")}return We({min:g,max:e})},_D=(A,g)=>{let e=g||Uc(A.inputs),I=Xg(A.inputs[0].dataType);A.compute(He(A.inputs[0],"Clip",i=>`clamp(${i}, vec4<${I}>(uniforms.min), vec4<${I}>(uniforms.max))`,void 0,e.cacheKey,void 0,[{type:A.inputs[0].dataType,data:e.min},{type:A.inputs[0].dataType,data:e.max}],[{name:"min",type:I},{name:"max",type:I}]),{inputs:[0]})},RD=A=>{A.compute(He(A.inputs[0],"Ceil","ceil"))},GD=A=>{A.compute(He(A.inputs[0],"Cos","cos"))},kD=A=>{A.compute(He(A.inputs[0],"Cosh","cosh"))},Ht=A=>We(A),LD=(A,g)=>{let e=Xg(A.inputs[0].dataType);A.compute(He(A.inputs[0],"Elu",I=>`elu_vf32(${I})`,` const elu_alpha_ = ${e}(${g.alpha}); fn elu_f32(a: ${e}) -> ${e} { return select((exp(a) - 1.0) * elu_alpha_, a, a >= 0.0); } fn elu_vf32(v: vec4<${e}>) -> vec4<${e}> { return vec4(elu_f32(v.x), elu_f32(v.y), elu_f32(v.z), elu_f32(v.w)); }`,g.cacheKey))},Is=(A="f32")=>` const r0: ${A} = 0.3275911; const r1: ${A} = 0.254829592; const r2: ${A} = -0.284496736; const r3: ${A} = 1.421413741; const r4: ${A} = -1.453152027; const r5: ${A} = 1.061405429; fn erf_vf32(v: vec4<${A}>) -> vec4<${A}> { let absv = abs(v); let x = 1.0 / (1.0 + r0 * absv); return sign(v) * (1.0 - ((((r5 * x + r4) * x + r3) * x + r2) * x + r1) * x * exp(-absv * absv)); }`,KD=A=>{let g=Xg(A.inputs[0].dataType);A.compute(He(A.inputs[0],"Erf",e=>`erf_vf32(${e})`,Is(g)))},UD=A=>{A.compute(He(A.inputs[0],"Exp","exp"))},bD=A=>{A.compute(He(A.inputs[0],"Floor","floor"))},JD=A=>{let g=Xg(A.inputs[0].dataType);A.compute(He(A.inputs[0],"Gelu",e=>`0.5 * ${e} * (1.0 + erf_vf32(${e} * 0.7071067811865475))`,Is(g)))},xD=(A,g)=>{let e=Xg(A.inputs[0].dataType);A.compute(He(A.inputs[0],"LeakyRelu",I=>`select(leaky_relu_alpha_ * ${I}, ${I}, ${I} >= vec4<${e}>(0.0))`,`const leaky_relu_alpha_ = ${e}(${g.alpha});`,g.cacheKey))},TD=A=>{A.compute(He(A.inputs[0],"Not",g=>`!${g}`))},YD=A=>{A.compute(He(A.inputs[0],"Neg",g=>`-${g}`))},PD=A=>{A.compute(He(A.inputs[0],"Reciprocal",g=>`1.0/${g}`))},vD=A=>{let g=Xg(A.inputs[0].dataType);A.compute(He(A.inputs[0],"Relu",e=>`select(vec4<${g}>(0.0), ${e}, ${e} > vec4<${g}>(0.0))`))},HD=A=>{A.compute(He(A.inputs[0],"Sigmoid",g=>`(1.0 / (1.0 + exp(-${g})))`))},qD=A=>We(A),OD=(A,g)=>{let e=Xg(A.inputs[0].dataType);A.compute(He(A.inputs[0],"HardSigmoid",I=>`max(vec4<${e}>(0.0), min(vec4<${e}>(1.0), ${g.alpha} * ${I} + vec4<${e}>(${g.beta})))`,void 0,g.cacheKey))},WD=A=>{A.compute(He(A.inputs[0],"Sin","sin"))},jD=A=>{A.compute(He(A.inputs[0],"Sinh","sinh"))},VD=A=>{A.compute(He(A.inputs[0],"Sqrt","sqrt"))},zD=A=>{A.compute(He(A.inputs[0],"Tan","tan"))},gr=A=>`sign(${A}) * (1 - exp(-2 * abs(${A}))) / (1 + exp(-2 * abs(${A})))`,$D=A=>{A.compute(He(A.inputs[0],"Tanh",gr))},vr=(A="f32")=>` const fast_gelu_a: ${A} = 0.5; const fast_gelu_b: ${A} = 0.7978845608028654; const fast_gelu_c: ${A} = 0.035677408136300125; fn tanh_v(v: vec4<${A}>) -> vec4<${A}> { return ${gr("v")}; } `,Hr=A=>`(fast_gelu_a + fast_gelu_a * tanh_v(${A} * (fast_gelu_c * ${A} * ${A} + fast_gelu_b))) * ${A}`,ZD=A=>{let g=Xg(A.inputs[0].dataType);A.compute(He(A.inputs[0],"FastGelu",Hr,vr(g),void 0,A.inputs[0].dataType))},XD=(A,g)=>{let e=Xg(A.inputs[0].dataType);return A.compute(He(A.inputs[0],"ThresholdedRelu",I=>`select(vec4<${e}>(0.0), ${I}, ${I} > thresholded_relu_alpha_)`,`const thresholded_relu_alpha_ = vec4<${e}>(${g.alpha});`,g.cacheKey)),0},Aw=A=>{A.compute(He(A.inputs[0],"Log","log"))},bc=(A,g)=>` const alpha = vec4<${A}>(${g}); const one = ${A}(1.0); const zero = ${A}(0.0); fn quick_gelu_impl(x: vec4<${A}>) -> vec4<${A}> { let v = x *alpha; var x1 : vec4<${A}>; for (var i = 0; i < 4; i = i + 1) { if (v[i] >= zero) { x1[i] = one / (one + exp(-v[i])); } else { x1[i] = one - one / (one + exp(v[i])); } } return x * x1; } `,Jc=A=>`quick_gelu_impl(${A})`,ew=(A,g)=>{let e=Xg(A.inputs[0].dataType);A.compute(He(A.inputs[0],"QuickGelu",Jc,bc(e,g.alpha),g.cacheKey,A.inputs[0].dataType))}}),xc,Tc,gw,vf=jA(()=>{Ge(),Ke(),la(),xc=A=>{if(A[0].dims.length!==3)throw new Error("input should have 3 dimensions");if(![2560,5120,10240].includes(A[0].dims[2]))throw new Error("hidden state should be 2560, 5120 or 10240");if(A[1].dims.length!==1)throw new Error("bias is expected to have 1 dimensions");if(A[0].dims[2]!==A[1].dims[0])throw new Error("last dimension of input and bias are not the same")},Tc=A=>{let g=A[0].dims.slice();g[2]=g[2]/2;let e=UA("input",A[0].dataType,A[0].dims,4),I=UA("bias",A[0].dataType,[A[0].dims[2]],4),i=ne("output",A[0].dataType,g,4),t=FA.size(g)/4,s=Hg(A[0].dataType);return{name:"BiasSplitGelu",getRunData:()=>({outputs:[{dims:g,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(t/64)}}),getShaderSource:o=>` const M_SQRT2 = sqrt(2.0); const halfChannels = ${A[0].dims[2]/4/2}u; ${o.declareVariables(e,I,i)} ${Is(s)} ${o.mainStart()} ${o.guardAgainstOutOfBoundsWorkgroupSizes(t)} let biasIdx = global_idx % halfChannels; let batchIndex = global_idx / halfChannels; let inputOffset = biasIdx + batchIndex * halfChannels * 2; let valueLeft = input[inputOffset] + bias[biasIdx]; let valueRight = input[inputOffset + halfChannels] + bias[biasIdx + halfChannels]; let geluRight = valueRight * 0.5 * (erf_vf32(valueRight / M_SQRT2) + 1); ${i.setByOffset("global_idx","valueLeft * geluRight")} }`}},gw=A=>{xc(A.inputs),A.compute(Tc(A.inputs))}}),Yc,Pc,kI,Iw,iw,tw,ow,sw,Cw,rw,aw,Bw,Qw,Hf=jA(()=>{ye(),Ge(),Ke(),Yc=(A,g,e,I,i,t,s,o,C,r,Q,B)=>{let a,d;typeof o=="string"?a=d=(u,_)=>`${o}((${u}),(${_}))`:typeof o=="function"?a=d=o:(a=o.scalar,d=o.vector);let c=ne("outputData",Q,I.length,4),p=UA("aData",C,g.length,4),L=UA("bData",r,e.length,4),w;if(i)if(t){let u=FA.size(g)===1,_=FA.size(e)===1,y=g.length>0&&g[g.length-1]%4===0,M=e.length>0&&e[e.length-1]%4===0;u||_?w=c.setByOffset("global_idx",d(u?`${p.type.value}(${p.getByOffset("0")}.x)`:p.getByOffset("global_idx"),_?`${L.type.value}(${L.getByOffset("0")}.x)`:L.getByOffset("global_idx"))):w=` let outputIndices = ${c.offsetToIndices("global_idx * 4u")}; let offsetA = ${p.broadcastedIndicesToOffset("outputIndices",c)}; let offsetB = ${L.broadcastedIndicesToOffset("outputIndices",c)}; ${c.setByOffset("global_idx",d(s||y?p.getByOffset("offsetA / 4u"):`${p.type.value}(${p.getByOffset("offsetA / 4u")}[offsetA % 4u])`,s||M?L.getByOffset("offsetB / 4u"):`${L.type.value}(${L.getByOffset("offsetB / 4u")}[offsetB % 4u])`))} `}else w=c.setByOffset("global_idx",d(p.getByOffset("global_idx"),L.getByOffset("global_idx")));else{if(!t)throw new Error("no necessary to use scalar implementation for element-wise binary op implementation.");let u=(_,y,M="")=>{let F=`aData[indexA${y}][componentA${y}]`,m=`bData[indexB${y}][componentB${y}]`;return` let outputIndices${y} = ${c.offsetToIndices(`global_idx * 4u + ${y}u`)}; let offsetA${y} = ${p.broadcastedIndicesToOffset(`outputIndices${y}`,c)}; let offsetB${y} = ${L.broadcastedIndicesToOffset(`outputIndices${y}`,c)}; let indexA${y} = offsetA${y} / 4u; let indexB${y} = offsetB${y} / 4u; let componentA${y} = offsetA${y} % 4u; let componentB${y} = offsetB${y} % 4u; ${_}[${y}] = ${M}(${a(F,m)}); `};Q===9?w=` var data = vec4(0); ${u("data",0,"u32")} ${u("data",1,"u32")} ${u("data",2,"u32")} ${u("data",3,"u32")} outputData[global_idx] = dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(data));`:w=` ${u("outputData[global_idx]",0)} ${u("outputData[global_idx]",1)} ${u("outputData[global_idx]",2)} ${u("outputData[global_idx]",3)} `}return` ${A.registerUniform("vec_size","u32").declareVariables(p,L,c)} ${B??""} ${A.mainStart()} ${A.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} ${w} }`},Pc=(A,g,e,I,i,t,s=e.dataType)=>{let o=e.dims.map(p=>Number(p)??1),C=I.dims.map(p=>Number(p)??1),r=!FA.areEqual(o,C),Q=o,B=FA.size(o),a=!1,d=!1,c=[r];if(r){let p=At.calcShape(o,C,!1);if(!p)throw new Error("Can't perform binary op on the given tensors");Q=p.slice(),B=FA.size(Q);let L=FA.size(o)===1,w=FA.size(C)===1,u=o.length>0&&o[o.length-1]%4===0,_=C.length>0&&C[C.length-1]%4===0;c.push(L),c.push(w),c.push(u),c.push(_);let y=1;for(let M=1;Mp.toString()).join("_"),inputDependencies:["rank","rank"]},getShaderSource:p=>Yc(p,o,C,Q,a,r,d,i,e.dataType,I.dataType,s,t),getRunData:()=>({outputs:[{dims:Q,dataType:s}],dispatchGroup:{x:Math.ceil(B/64/4)},programUniforms:[{type:12,data:Math.ceil(FA.size(Q)/4)},...de(o,C,Q)]})}},kI=(A,g,e,I,i,t)=>{A.compute(Pc(g,i??"",A.inputs[0],A.inputs[1],e,I,t))},Iw=A=>{kI(A,"Add",(g,e)=>`${g}+${e}`)},iw=A=>{kI(A,"Div",(g,e)=>`${g}/${e}`)},tw=A=>{kI(A,"Equal",{scalar:(g,e)=>`u32(${g}==${e})`,vector:(g,e)=>`vec4(${g}==${e})`},void 0,void 0,9)},ow=A=>{kI(A,"Mul",(g,e)=>`${g}*${e}`)},sw=A=>{let g=UA("input",A.inputs[0].dataType,A.inputs[0].dims).type.value;kI(A,"Pow",{scalar:(e,I)=>`pow_custom(${e},${I})`,vector:(e,I)=>`pow_vector_custom(${e},${I})`},` fn pow_custom(a : ${g}, b : ${g}) -> ${g} { if (b == ${g}(0.0)) { return ${g}(1.0); } else if (a < ${g}(0.0) && f32(b) != floor(f32(b))) { return ${g}(pow(f32(a), f32(b))); // NaN } return select(sign(a), ${g}(1.0), round(f32(abs(b) % ${g}(2.0))) != 1.0) * ${g}(${g==="i32"?"round":""}(pow(f32(abs(a)), f32(b)))); } fn pow_vector_custom(a : vec4<${g}>, b : vec4<${g}>) -> vec4<${g}> { // TODO: implement vectorized pow return vec4<${g}>(pow_custom(a.x, b.x), pow_custom(a.y, b.y), pow_custom(a.z, b.z), pow_custom(a.w, b.w)); } `)},Cw=A=>{kI(A,"Sub",(g,e)=>`${g}-${e}`)},rw=A=>{kI(A,"Greater",{scalar:(g,e)=>`u32(${g}>${e})`,vector:(g,e)=>`vec4(${g}>${e})`},void 0,void 0,9)},aw=A=>{kI(A,"Less",{scalar:(g,e)=>`u32(${g}<${e})`,vector:(g,e)=>`vec4(${g}<${e})`},void 0,void 0,9)},Bw=A=>{kI(A,"GreaterOrEqual",{scalar:(g,e)=>`u32(${g}>=${e})`,vector:(g,e)=>`vec4(${g}>=${e})`},void 0,void 0,9)},Qw=A=>{kI(A,"LessOrEqual",{scalar:(g,e)=>`u32(${g}<=${e})`,vector:(g,e)=>`vec4(${g}<=${e})`},void 0,void 0,9)}}),vc,Hc,qc,Oc,nw,Ew,qf=jA(()=>{ye(),Ge(),pg(),Ke(),vc=(A,g)=>{if(!A||A.length<1)throw new Error("too few inputs");let e=0,I=A[e],i=I.dataType,t=I.dims.length;A.forEach((s,o)=>{if(o!==e){if(s.dataType!==i)throw new Error("input tensors should be one type");if(s.dims.length!==t)throw new Error("input tensors should have the same shape");s.dims.forEach((C,r)=>{if(r!==g&&C!==I.dims[r])throw new Error("non concat dimensions must match")})}})},Hc=(A,g)=>` fn calculateInputIndex(index: u32) -> u32 { let sizeInConcatAxis = array(${g}); for (var i: u32 = 0u; i < ${A}; i += 1u ) { if (index < sizeInConcatAxis[i]) { return i; } } return ${A}u; }`,qc=(A,g)=>{let e=A.length,I=[];for(let i=0;i{let i=FA.size(e),t=new Array(A.length),s=new Array(A.length),o=0,C=[],r=[],Q=[{type:12,data:i}];for(let p=0;p`uniforms.sizeInConcatAxis${p}`).join(","),c=p=>` ${(()=>{p.registerUniform("outputSize","u32");for(let L=0;L(${d}); ${a} -= sizeInConcatAxis[inputIndex - 1u]; } ${qc(s,B)} }`;return{name:"Concat",shaderCache:{hint:`${g}`,inputDependencies:C},getRunData:()=>({outputs:[{dims:e,dataType:I}],dispatchGroup:{x:Math.ceil(i/64)},programUniforms:Q}),getShaderSource:c}},nw=(A,g)=>{let e=A.inputs,I=e[0].dims,i=FA.normalizeAxis(g.axis,I.length);vc(e,i);let t=I.slice();t[i]=e.reduce((o,C)=>o+(C.dims.length>i?C.dims[i]:0),0);let s=e.filter(o=>FA.size(o.dims)>0);A.compute(Oc(s,i,t,e[0].dataType),{inputs:s})},Ew=A=>We({axis:A.axis})}),yi,mi,Mi,ca,Si=jA(()=>{ye(),Ge(),yi=(A,g,e="f32")=>{switch(A.activation){case"Relu":return`value = max(value, ${g}(0.0));`;case"Sigmoid":return`value = (${g}(1.0) / (${g}(1.0) + exp(-value)));`;case"Clip":return`value = clamp(value, ${g}(${e}(uniforms.clip_min)), ${g}(${e}(uniforms.clip_max)));`;case"HardSigmoid":return`value = max(${g}(0.0), min(${g}(1.0), ${e}(uniforms.alpha) * value + ${e}(uniforms.beta)));`;case"LeakyRelu":return`value = select(${e}(uniforms.alpha) * value, value, value >= ${g}(0.0));`;case"Tanh":return`let e2x = exp(-2.0 * abs(value)); value = sign(value) * (1.0 - e2x) / (1.0 + e2x); `;case"":return"";default:throw new Error(`Unsupported activation ${A.activation}`)}},mi=(A,g)=>{A.activation==="Clip"?g.push({type:1,data:A.clipMax},{type:1,data:A.clipMin}):A.activation==="HardSigmoid"?g.push({type:1,data:A.alpha},{type:1,data:A.beta}):A.activation==="LeakyRelu"&&g.push({type:1,data:A.alpha})},Mi=(A,g)=>{A.activation==="Clip"?g.push({name:"clip_max",type:"f32"},{name:"clip_min",type:"f32"}):A.activation==="HardSigmoid"?g.push({name:"alpha",type:"f32"},{name:"beta",type:"f32"}):A.activation==="LeakyRelu"&&g.push({name:"alpha",type:"f32"})},ca=A=>{let g=A?.activation||"";if(g==="HardSigmoid"){let[e,I]=A?.activation_params||[.2,.5];return{activation:g,alpha:e,beta:I}}else if(g==="Clip"){let[e,I]=A?.activation_params||[Th,Yh];return{activation:g,clipMax:I,clipMin:e}}else if(g==="LeakyRelu"){let[e]=A?.activation_params||[.01];return{activation:g,alpha:e}}return{activation:g}}}),Vg,lw,da=jA(()=>{Vg=(A,g)=>{switch(A){case 1:return g;case 2:return`vec2<${g}>`;case 3:return`vec3<${g}>`;case 4:return`vec4<${g}>`;default:throw new Error(`${A}-component is not supported.`)}},lw=A=>` ${A?"value = value + getBiasByOutputCoords(coords);":""} `}),cw,Of=jA(()=>{cw=A=>` fn getIndexFromCoords4D(coords : vec4, shape : vec4) -> i32 { return dot(coords, vec4( shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1)); } fn getOutputIndexFromCoords(coords : vec4) -> i32 { return dot(coords, vec4( i32(${A}.x), i32(${A}.y), i32(${A}.z), 1)); } `}),Ot,ua,ha=jA(()=>{ye(),Ge(),Ke(),Si(),Ot=(A,g,e,I,i)=>{let t=I-e;return` ${Array.from({length:e}).map((s,o)=>` if (${le(g.shape,o,g.rank)} != 1) { ${g.indicesSet(A,o,le(i,o+t,I))} } else { ${g.indicesSet(A,o,0)} }`).join("")} `},ua=(A,g,e,I,i=!1,t)=>{let s=A[0].dims,o=A[1].dims,C=s[s.length-2],r=o[o.length-1],Q=s[s.length-1],B=Dg(r),a=Dg(Q),d=Dg(C),c=FA.size(e)/B/d,p=A.length>2,L=I?I.slice(0,-2):e.slice(0,-2),w=[FA.size(L),C,r],u=[{type:12,data:c},{type:12,data:C},{type:12,data:r},{type:12,data:Q}];mi(g,u),u.push(...de(L,s,o)),p&&u.push(...de(A[2].dims)),u.push(...de(w));let _=y=>{let M=Qa("batch_dims",A[0].dataType,L.length),F=UA("a",A[0].dataType,s.length,a),m=UA("b",A[1].dataType,o.length,B),G=ne("output",A[0].dataType,w.length,B),T=Hg(G.type.tensor),J=yi(g,G.type.value,T),Z=[F,m],z="";if(p){let AA=i?B:1;Z.push(UA("bias",A[2].dataType,A[2].dims.length,AA)),z=`${i?`value += bias[col / ${AA}];`:`value += ${G.type.value}(bias[row + i]);`}`}let P=[{name:"output_size",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"}];Mi(g,P);let tA=()=>{let AA=`var a_data: ${F.type.value};`;for(let iA=0;iA; for (var k: u32 = 0u; k < uniforms.K; k = k + ${a}) { ${tA()} } for (var i = 0u; i < ${d}u; i++) { var value = values[i]; ${z} ${J} let cur_indices = ${G.type.indices}(batch, row + i, col); let offset = ${G.indicesToOffset("cur_indices")}; ${G.setByOffset(`offset / ${B}`,"value")}; } } `};return{name:"MatMulNaive",shaderCache:{hint:`${g.activation};${B};${a};${d};${i}`,inputDependencies:p?["rank","rank","rank"]:["rank","rank"]},getRunData:()=>({outputs:[{dims:t?t(e):e,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(c/64)},programUniforms:u}),getShaderSource:_}}}),Wc,jc,qr,Ir,Vc,Or,zc,Cs,Da=jA(()=>{ye(),Ge(),Ke(),Si(),ha(),da(),Wc=(A,g)=>A?` mm_Asub[inputRow][inputCol] = mm_readA(batch, kStart + inputRow, globalRowStart / innerElementSize + inputCol${g?", batchIndices":""}); `:` mm_Asub[inputRow][inputCol] = mm_readA(batch, globalRow + innerRow, kStart / innerElementSize + inputCol${g?", batchIndices":""}); `,jc=(A,g)=>A?` let ACached0 = mm_Asub[k * innerElementSize][localRow]; let ACached1 = mm_Asub[k * innerElementSize + 1][localRow]; let ACached2 = mm_Asub[k * innerElementSize + 2][localRow]; ${g===3?"":"let ACached3 = mm_Asub[k * innerElementSize + 3][localRow];"} for (var i = 0; i < rowPerThread; i = i + 1) { acc[i] = BCached0 * ACached0[i] + acc[i]; acc[i] = BCached1 * ACached1[i] + acc[i]; acc[i] = BCached2 * ACached2[i] + acc[i]; ${g===3?"":"acc[i] = BCached3 * ACached3[i] + acc[i];"} }`:` for (var i = 0; i < rowPerThread; i = i + 1) { let ACached = mm_Asub[tileRow + i][k]; acc[i] = BCached0 * ACached.x + acc[i]; acc[i] = BCached1 * ACached.y + acc[i]; acc[i] = BCached2 * ACached.z + acc[i]; ${g===3?"":"acc[i] = BCached3 * ACached.w + acc[i];"} }`,qr=(A,g,e="f32",I,i=!1,t=32,s=!1,o=32)=>{let C=g[1]*A[1],r=g[0]*A[0],Q=i?C:t,B=i?t:C,a=Q/g[0],d=t/g[1];if(!((i&&a===4&&A[1]===4||!i&&(a===3||a===4))&&Q%g[0]===0&&t%g[1]===0&&A[0]===4))throw new Error(`If transposeA ${i} is true, innerElementSize ${a} and workPerThread[1] ${A[1]} must be 4. Otherwise, innerElementSize ${a} must be 3 or 4. tileAWidth ${Q} must be divisible by workgroupSize[0]${g[0]}. tileInner ${t} must be divisible by workgroupSize[1] ${g[1]}. colPerThread ${A[0]} must be 4.`);return` var mm_Asub: array, ${Q/a}>, ${B}>; var mm_Bsub: array, ${r/A[0]}>, ${t}>; const rowPerThread = ${A[1]}; const colPerThread = ${A[0]}; const innerElementSize = ${a}; const tileInner = ${t}; @compute @workgroup_size(${g[0]}, ${g[1]}, ${g[2]}) fn main(@builtin(local_invocation_id) localId : vec3, @builtin(global_invocation_id) globalId : vec3, @builtin(workgroup_id) workgroupId : vec3) { let localRow = i32(localId.y); let tileRow = localRow * rowPerThread; let tileCol = i32(localId.x); let globalRow =i32(globalId.y) * rowPerThread; let globalCol = i32(globalId.x); let batch = ${s?"0":"i32(globalId.z)"}; ${I?`let batchIndices = ${I.offsetToIndices("u32(batch)")};`:""} let globalRowStart = i32(workgroupId.y) * ${C}; let num_tiles = ${s?`${Math.ceil(o/t)}`:"(uniforms.dim_inner - 1) / tileInner + 1"}; var kStart = ${s?`i32(globalId.z) * ${o}`:"0"}; var acc: array, rowPerThread>; // Loop over shared dimension. let tileRowB = localRow * ${d}; for (var t = 0; t < num_tiles; t = t + 1) { // Load one tile of A into local memory. for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let inputRow = tileRow + innerRow; let inputCol = tileCol; ${Wc(i,I)} } // Load one tile of B into local memory. for (var innerRow = 0; innerRow < ${d}; innerRow = innerRow + 1) { let inputRow = tileRowB + innerRow; let inputCol = tileCol; mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol${I?", batchIndices":""}); } kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. for (var k = 0; k < tileInner / innerElementSize; k = k + 1) { let BCached0 = mm_Bsub[k * innerElementSize][tileCol]; let BCached1 = mm_Bsub[k * innerElementSize + 1][tileCol]; let BCached2 = mm_Bsub[k * innerElementSize + 2][tileCol]; ${a===3?"":"let BCached3 = mm_Bsub[k * innerElementSize + 3][tileCol];"} ${jc(i,a)} } workgroupBarrier(); } for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); } }`},Ir=(A,g)=>A?` mm_Asub[inputRow][inputCol] = mm_readA(batch, kStart + inputRow, globalRowStart + inputCol${g?", batchIndices":""}); `:` mm_Asub[inputRow][inputCol] = mm_readA(batch, globalRowStart + inputRow, kStart + inputCol${g?", batchIndices":""}); `,Vc=A=>A?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];",Or=(A,g,e="f32",I,i=!1,t=32,s=!1,o=32,C=!1)=>{let r=A[1]*g[1],Q=A[0]*g[0],B=i?r:t,a=i?t:r;if(!(a%g[1]===0&&B%g[0]===0&&t%g[1]===0))throw new Error(`tileAHight ${a} must be divisible by workgroupSize[1]${g[1]}, tileAWidth ${B} must be divisible by workgroupSize[0]${g[0]}, tileInner ${t} must be divisible by workgroupSize[1]${g[1]}`);let d=a/g[1],c=B/g[0],p=t/g[1],L=C?` let localRow = i32(localId.y); let localCol = i32(localId.x); let globalRowStart = i32(workgroupId.y) * ${r}; let globalColStart = i32(workgroupId.x) * ${Q}; // Loop over shared dimension. for (var t = 0; t < num_tiles; t = t + 1) { // Load one tile of A into local memory. for (var inputRow = localRow; inputRow < ${a}; inputRow = inputRow + ${g[1]}) { for (var inputCol = localCol; inputCol < ${B}; inputCol = inputCol + ${g[0]}) { ${Ir(i,I)} } } // Load one tile of B into local memory. for (var inputRow = localRow; inputRow < ${t}; inputRow = inputRow + ${g[1]}) { for (var inputCol = localCol; inputCol < ${Q}; inputCol = inputCol + ${g[0]}) { mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalColStart + inputCol${I?", batchIndices":""}); } } kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. var BCached : array<${e}, colPerThread>; for (var k = 0; k < tileInner; k = k + 1) { for (var inner = 0; inner < colPerThread; inner = inner + 1) { BCached[inner] = mm_Bsub[k][localCol + inner * ${g[0]}]; } for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let ACached = ${i?`mm_Asub[k][localRow + innerRow * ${g[1]}];`:`mm_Asub[localRow + innerRow * ${g[1]}][k];`} for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol]; } } } workgroupBarrier(); } for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { let gRow = globalRowStart + localRow + innerRow * ${g[1]}; for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { let gCol = globalColStart + localCol + innerCol * ${g[0]}; mm_write(batch, gRow, gCol, acc[innerRow][innerCol]); } } `:` let tileRow = i32(localId.y) * rowPerThread; let tileCol = i32(localId.x) * colPerThread; let globalRow = i32(globalId.y) * rowPerThread; let globalCol = i32(globalId.x) * colPerThread; let globalRowStart = i32(workgroupId.y) * ${r}; let tileRowA = i32(localId.y) * ${d}; let tileColA = i32(localId.x) * ${c}; let tileRowB = i32(localId.y) * ${p}; // Loop over shared dimension. for (var t = 0; t < num_tiles; t = t + 1) { // Load one tile of A into local memory. for (var innerRow = 0; innerRow < ${d}; innerRow = innerRow + 1) { for (var innerCol = 0; innerCol < ${c}; innerCol = innerCol + 1) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; ${Ir(i,I)} } } // Load one tile of B into local memory. for (var innerRow = 0; innerRow < ${p}; innerRow = innerRow + 1) { for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { let inputRow = tileRowB + innerRow; let inputCol = tileCol + innerCol; mm_Bsub[inputRow][inputCol] = mm_readB(batch, kStart + inputRow, globalCol + innerCol${I?", batchIndices":""}); } } kStart = kStart + tileInner; workgroupBarrier(); // Compute acc values for a single thread. var BCached : array<${e}, colPerThread>; for (var k = 0; k < tileInner; k = k + 1) { for (var inner = 0; inner < colPerThread; inner = inner + 1) { BCached[inner] = mm_Bsub[k][tileCol + inner]; } for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { ${Vc(i)} for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { acc[innerRow][innerCol] = acc[innerRow][innerCol] + ACached * BCached[innerCol]; } } } workgroupBarrier(); } for (var innerRow = 0; innerRow < rowPerThread; innerRow = innerRow + 1) { for (var innerCol = 0; innerCol < colPerThread; innerCol = innerCol + 1) { mm_write(batch, globalRow + innerRow, globalCol + innerCol, acc[innerRow][innerCol]); } } `;return` var mm_Asub : array, ${a}>; var mm_Bsub : array, ${t}>; const rowPerThread = ${A[1]}; const colPerThread = ${A[0]}; const tileInner = ${t}; @compute @workgroup_size(${g[0]}, ${g[1]}, ${g[2]}) fn main(@builtin(local_invocation_id) localId : vec3, @builtin(global_invocation_id) globalId : vec3, @builtin(workgroup_id) workgroupId : vec3) { let batch = ${s?"0":"i32(globalId.z)"}; ${I?`let batchIndices = ${I.offsetToIndices("u32(batch)")};`:""} let num_tiles = ${s?`${Math.ceil(o/t)}`:"(uniforms.dim_inner - 1) / tileInner + 1"}; var kStart = ${s?`i32(globalId.z) * ${o}`:"0"}; var acc : array, rowPerThread>; ${L} } `},zc=(A,g,e,I,i=!1)=>{let[t,s,o,C]=I,r=Hg(I[0].type.tensor);return` fn mm_readA(batch: i32, row: i32, colIn: i32, batchIndices: ${t.type.indices}) -> ${Vg(A,r)} { var value = ${Vg(A,r)}(0.0); let col = colIn * ${A}; if(row < uniforms.dim_a_outer && col < uniforms.dim_inner) { var aIndices: ${s.type.indices}; ${Ot("aIndices",s,s.rank-2,t.rank,"batchIndices")} ${s.indicesSet("aIndices",s.rank-2,"u32(row)")} ${s.indicesSet("aIndices",s.rank-1,"u32(colIn)")} value = ${s.getByIndices("aIndices")}; } return value; } fn mm_readB(batch: i32, row: i32, colIn: i32, batchIndices: ${t.type.indices}) -> ${Vg(A,r)} { var value = ${Vg(A,r)}(0.0); let col = colIn * ${A}; if(row < uniforms.dim_inner && col < uniforms.dim_b_outer) { var bIndices: ${o.type.indices}; ${Ot("bIndices",o,o.rank-2,t.rank,"batchIndices")} ${o.indicesSet("bIndices",o.rank-2,"u32(row)")} ${o.indicesSet("bIndices",o.rank-1,"u32(colIn)")} value = ${o.getByIndices("bIndices")}; } return value; } fn mm_write(batch: i32, row: i32, colIn: i32, valueIn: ${Vg(A,r)}) { let col = colIn * ${A}; if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) { var value = valueIn; let coords = vec3(batch, row, colIn); ${g?`value = value + ${i?"bias[colIn]":`${Vg(A,r)}(bias[row])`};`:""} ${e} ${C.setByIndices("vec3(coords)","value")} } } `},Cs=(A,g,e,I,i=!1,t)=>{let s=A[0].dims,o=A[1].dims,C=s.slice(0,-2),r=o.slice(0,-2),Q=I?I.slice(0,-2):e.slice(0,-2),B=FA.size(Q),a=s[s.length-2],d=s[s.length-1],c=o[o.length-1],p=d%4===0&&c%4===0,L=a<=8?[4,1,1]:[4,4,1],w=[8,8,1],u=[Math.ceil(c/w[0]/L[0]),Math.ceil(a/w[1]/L[1]),Math.ceil(B/w[2]/L[2])],_=p?4:1,y=[...C,a,d/_],M=y.length,F=[...r,d,c/_],m=F.length,G=[B,a,c/_],T=[{type:6,data:a},{type:6,data:c},{type:6,data:d}];mi(g,T),T.push(...de(Q,y,F));let J=["rank","rank"],Z=A.length>2;Z&&(T.push(...de(A[2].dims)),J.push("rank")),T.push(...de(G));let z=P=>{let tA=Q.length,AA=Qa("batchDims",A[0].dataType,tA,1),iA=Hg(A[0].dataType),rA=UA("a",A[0].dataType,M,_),CA=UA("b",A[1].dataType,m,_),cA=ne("result",A[0].dataType,G.length,_),uA=[rA,CA];if(Z){let nA=i?_:1;uA.push(UA("bias",A[2].dataType,A[2].dims.length,nA))}let v=[{name:"dim_a_outer",type:"i32"},{name:"dim_b_outer",type:"i32"},{name:"dim_inner",type:"i32"}];Mi(g,v);let x=Hg(cA.type.tensor),$=yi(g,cA.type.value,x),W=zc(_,Z,$,[AA,rA,CA,cA],i);return` ${P.registerUniforms(v).registerInternalVariables(AA).declareVariables(...uA,cA)} ${W} ${p?qr(L,w,iA,AA):Or(L,w,iA,AA)} `};return{name:"MatMul",shaderCache:{hint:`${L};${g.activation};${p};${i}`,inputDependencies:J},getRunData:()=>({outputs:[{dims:t?t(e):e,dataType:A[0].dataType}],dispatchGroup:{x:u[0],y:u[1],z:u[2]},programUniforms:T}),getShaderSource:z}}}),$c,dw,Wf=jA(()=>{ye(),jI(),Ke(),Si(),da(),Of(),Da(),$c=(A,g,e,I,i=!1,t,s=4,o=4,C=4,r="f32")=>{let Q=T=>{switch(T){case 1:return"resData = x[xIndex];";case 3:return`resData = vec3<${r}>(x[xIndex], x[xIndex + 1], x[xIndex + 2]);`;case 4:return"resData = x[xIndex / 4];";default:throw new Error(`innerElementSize ${T} is not supported.`)}},B=T=>{switch(T){case 1:return"return w[row * i32(uniforms.w_shape[3]) + colIn];";case 4:return"return w[row * i32(uniforms.w_shape[3]) / 4 + colIn];";default:throw new Error(`innerElementSize ${T} is not supported.`)}},a=A?` let coord = vec4(batch, xRow, xCol, xCh); `:` let coord = vec4(batch, xCh, xRow, xCol); `,d=A?` let coords = vec4( batch, row / outWidth, row % outWidth, col); `:` let coords = vec4( batch, row, col / outWidth, col % outWidth); `,c=A?"i32(uniforms.x_shape[1])":"i32(uniforms.x_shape[2])",p=A?"i32(uniforms.x_shape[2])":"i32(uniforms.x_shape[3])",L=A?"row":"col",w=A?"col":"row",u=` let inChannels = i32(uniforms.w_shape[2]); let outWidth = ${A?"i32(uniforms.result_shape[2])":"i32(uniforms.result_shape[3])"}; let outRow = ${L} / outWidth; let outCol = ${L} % outWidth; let WRow = ${w} / (i32(uniforms.w_shape[1]) * inChannels); let WCol = ${w} / inChannels % i32(uniforms.w_shape[1]); let xRow = outRow * uniforms.stride[0] + uniforms.dilation[0] * WRow - uniforms.pad[0]; let xCol = outCol * uniforms.stride[1] + uniforms.dilation[1] * WCol - uniforms.pad[1]; let xCh = ${w} % inChannels; var resData = ${Vg(s,r)}(0.0); // The bounds checking is always needed since we use it to pad zero for // the 'same' padding type. if (xRow >= 0 && xRow < ${c} && xCol >= 0 && xCol < ${p}) { ${a} let xIndex = getIndexFromCoords4D(coord, vec4(uniforms.x_shape)); ${Q(s)} } return resData;`,_=A?g&&I?` let col = colIn * ${s}; ${u}`:` let col = colIn * ${s}; if (row < uniforms.dim_a_outer && col < uniforms.dim_inner) { ${u} } return ${Vg(s,r)}(0.0);`:I&&e?` let col = colIn * ${s}; ${u}`:` let col = colIn * ${s}; if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) { ${u} } return ${Vg(s,r)}(0.0);`,y=A?I&&e?B(o):` let col = colIn * ${o}; if (row < uniforms.dim_inner && col < uniforms.dim_b_outer) { ${B(o)} } return ${Vg(o,r)}(0.0);`:` let col = colIn * ${o}; if (row < uniforms.dim_inner && col < uniforms.dim_a_outer) { ${B(o)} } return ${Vg(o,r)}(0.0);`,M=Vg(C,r),F=Vg(A?s:o,r),m=Vg(A?o:s,r),G=yi(t,M,r);return` fn mm_readA(batch: i32, row : i32, colIn : i32) -> ${F} { ${A?_:y} } fn mm_readB(batch: i32, row : i32, colIn : i32) -> ${m} { ${A?y:_} } fn mm_write(batch: i32, row : i32, colIn : i32, valueIn : ${M}) { let col = colIn * ${C}; if (row < uniforms.dim_a_outer && col < uniforms.dim_b_outer) { var value = valueIn; let outWidth = ${A?"i32(uniforms.result_shape[2])":"i32(uniforms.result_shape[3])"}; ${d} ${lw(i)} ${G} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } }`},dw=(A,g,e,I,i,t,s,o,C)=>{let r=g.format==="NHWC",Q=r?A[0].dims[3]:A[0].dims[1],B=e[0],a=r?e[2]:e[3],d=r?e[1]:e[2],c=r?e[3]:e[1],p=r&&(Q%4===0||Q%3===0)&&c%4===0,L=r?c:a*d,w=r?a*d:c,u=[8,8,1],_=I<=8?[4,1,1]:[4,4,1],y=[Math.ceil(L/u[0]/_[0]),Math.ceil(w/u[1]/_[1]),Math.ceil(B/u[2]/_[2])];Ye("verbose",()=>`[conv2d_mm_webgpu] dispatch = ${y}`);let M=p?r&&Q%4!==0?3:4:1,F=u[1]*_[1],m=u[0]*_[0],G=Math.max(u[0]*M,u[1]),T=I%F===0,J=i%m===0,Z=t%G===0,z=p?[M,4,4]:[1,1,1],P=[{type:6,data:I},{type:6,data:i},{type:6,data:t},{type:6,data:[g.pads[0],g.pads[1]]},{type:6,data:g.strides},{type:6,data:g.dilations}];mi(g,P),P.push(...de(A[0].dims,A[1].dims));let tA=["rank","rank"];s&&(P.push(...de(A[2].dims)),tA.push("rank")),P.push(...de(e));let AA=iA=>{let rA=[{name:"dim_a_outer",type:"i32"},{name:"dim_b_outer",type:"i32"},{name:"dim_inner",type:"i32"},{name:"pad",type:"i32",length:2},{name:"stride",type:"i32",length:2},{name:"dilation",type:"i32",length:2}];Mi(g,rA);let CA=p?4:1,cA=Hg(A[0].dataType),uA=` fn setOutputAtIndex(flatIndex : i32, value : ${p?`vec4<${cA}>`:cA}) { result[flatIndex] = ${p?`vec4<${cA}>`:cA}(value); } fn setOutputAtCoords(d0 : i32, d1 : i32, d2 : i32, d3 : i32, value : ${p?`vec4<${cA}>`:cA}) { let flatIndex = getOutputIndexFromCoords(vec4(d0, d1, d2, d3)); setOutputAtIndex(flatIndex ${p?"/ 4":""}, value); }`,v=UA("x",A[0].dataType,A[0].dims.length,M===3?1:M),x=UA("w",A[1].dataType,A[1].dims.length,CA),$=[v,x],W=ne("result",A[0].dataType,e.length,CA);if(s){let nA=UA("bias",A[2].dataType,A[2].dims.length,CA);$.push(nA),uA+=` fn getBiasByOutputCoords(coords : vec4) -> ${p?`vec4<${cA}>`:cA} { return bias[coords.${r?"w":"y"}${p?"/ 4":""}]; }`}return` ${cw("uniforms.result_strides")} //struct Uniforms { xShape : vec4, wShape : vec4, outShape : vec4, // outShapeStrides: vec3, filterDims : vec2, pad : vec2, stride : vec2, // dilation : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32 }; ${iA.registerUniforms(rA).declareVariables(...$,W)} ${uA} ${$c(r,T,J,Z,s,g,z[0],z[1],z[2],cA)} ${p?qr(_,u,cA,void 0,!r,G):Or(_,u,cA,void 0,!r,G,!1,void 0,o)}`};return{name:"Conv2DMatMul",shaderCache:{hint:`${g.cacheKey};${M};${p};${T};${J};${Z};${F};${m};${G}`,inputDependencies:tA},getRunData:()=>({outputs:[{dims:C?C(e):e,dataType:A[0].dataType}],dispatchGroup:{x:y[0],y:y[1],z:y[2]},programUniforms:P}),getShaderSource:AA}}}),Zc,ir,Ut,Xc,tr,Ad,uw,hw,jf=jA(()=>{ye(),jI(),Ge(),Ke(),Si(),da(),Zc=A=>{let g=1;for(let e=0;etypeof A=="number"?[A,A,A]:A,Ut=(A,g)=>g<=1?A:A+(A-1)*(g-1),Xc=(A,g,e,I=1)=>{let i=Ut(g,I);return Math.floor((A[0]*(e-1)-e+i)/2)},tr=(A,g,e,I,i)=>{i==null&&(i=Xc(A,g[0],I[0]));let t=[0,0,0,e];for(let s=0;s<3;s++)A[s]+2*i>=g[s]&&(t[s]=Math.trunc((A[s]-g[s]+2*i)/I[s]+1));return t},Ad=(A,g,e,I,i,t,s,o,C,r)=>{let Q,B,a,d;if(A==="VALID"&&(A=0),typeof A=="number"){Q={top:A,bottom:A,left:A,right:A,front:A,back:A};let c=tr([g,e,I,1],[o,C,r],1,[i,t,s],A);B=c[0],a=c[1],d=c[2]}else if(Array.isArray(A)){if(!A.every((p,L,w)=>p===w[0]))throw Error(`Unsupported padding parameter: ${A}`);Q={top:A[0],bottom:A[1],left:A[2],right:A[3],front:A[4],back:A[5]};let c=tr([g,e,I,1],[o,C,r],1,[i,t,s],A[0]);B=c[0],a=c[1],d=c[2]}else if(A==="SAME_UPPER"){B=Math.ceil(g/i),a=Math.ceil(e/t),d=Math.ceil(I/s);let c=(B-1)*i+o-g,p=(a-1)*t+C-e,L=(d-1)*s+r-I,w=Math.floor(c/2),u=c-w,_=Math.floor(p/2),y=p-_,M=Math.floor(L/2),F=L-M;Q={top:_,bottom:y,left:M,right:F,front:w,back:u}}else throw Error(`Unknown padding parameter: ${A}`);return{padInfo:Q,outDepth:B,outHeight:a,outWidth:d}},uw=(A,g,e,I,i,t=!1,s="channelsLast")=>{let o,C,r,Q,B;if(s==="channelsLast")[o,C,r,Q,B]=A;else if(s==="channelsFirst")[o,B,C,r,Q]=A;else throw new Error(`Unknown dataFormat ${s}`);let[a,,d,c,p]=g,[L,w,u]=ir(e),[_,y,M]=ir(I),F=Ut(d,_),m=Ut(c,y),G=Ut(p,M),{padInfo:T,outDepth:J,outHeight:Z,outWidth:z}=Ad(i,C,r,Q,L,w,u,F,m,G),P=t?a*B:a,tA=[0,0,0,0,0];return s==="channelsFirst"?tA=[o,P,J,Z,z]:s==="channelsLast"&&(tA=[o,J,Z,z,P]),{batchSize:o,dataFormat:s,inDepth:C,inHeight:r,inWidth:Q,inChannels:B,outDepth:J,outHeight:Z,outWidth:z,outChannels:P,padInfo:T,strideDepth:L,strideHeight:w,strideWidth:u,filterDepth:d,filterHeight:c,filterWidth:p,effectiveFilterDepth:F,effectiveFilterHeight:m,effectiveFilterWidth:G,dilationDepth:_,dilationHeight:y,dilationWidth:M,inShape:A,outShape:tA,filterShape:g}},hw=(A,g,e,I,i,t)=>{let s=t==="channelsLast";s?A[0].dims[3]:A[0].dims[1];let o=[64,1,1],C={x:e.map((L,w)=>w)},r=[Math.ceil(Zc(C.x.map(L=>e[L]))/o[0]),1,1];Ye("verbose",()=>`[conv3d_naive_webgpu] dispatch = ${r}`);let Q=1,B=FA.size(e),a=[{type:12,data:B},{type:12,data:I},{type:12,data:i},{type:12,data:g.strides},{type:12,data:g.dilations}];mi(g,a),a.push(...de(A[0].dims,A[1].dims));let d=["rank","rank"],c=A.length===3;c&&(a.push(...de(A[2].dims)),d.push("rank")),a.push(...de(e));let p=L=>{let w=[{name:"output_size",type:"u32"},{name:"filter_dims",type:"u32",length:I.length},{name:"pads",type:"u32",length:i.length},{name:"strides",type:"u32",length:g.strides.length},{name:"dilations",type:"u32",length:g.dilations.length}];Mi(g,w);let u=1,_=Hg(A[0].dataType),y=UA("x",A[0].dataType,A[0].dims.length,Q),M=UA("W",A[1].dataType,A[1].dims.length,u),F=[y,M],m=ne("result",A[0].dataType,e.length,u),G="";if(c){let Z=UA("bias",A[2].dataType,A[2].dims.length,u);F.push(Z),G+=` fn getBiasByOutputCoords(coords : array) -> ${_} { return bias[${s?le("coords",4,5):le("coords",1,5)}]; }`}let T=Vg(Q,_),J=yi(g,T,_);return` ${G} fn getX(d0 : u32, d1 : u32, d2 : u32, d3 : u32, d4 : u32) -> f32 { let aIndices = array(d0, d1, d2, d3, d4); return ${y.getByIndices("aIndices")}; } fn getW(d0 : u32, d1 : u32, d2 : u32, d3 : u32, d4 : u32) -> f32 { let aIndices = array(d0, d1, d2, d3, d4); return ${M.getByIndices("aIndices")}; } ${L.registerUniforms(w).declareVariables(...F,m)} ${L.mainStart()} ${L.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let coords = ${m.offsetToIndices("global_idx")}; let batch = ${le("coords",0,y.rank)}; let d2 = ${s?le("coords",y.rank-1,y.rank):le("coords",1,y.rank)}; let xFRCCorner = vec3(${s?le("coords",1,y.rank):le("coords",2,y.rank)}, ${s?le("coords",2,y.rank):le("coords",3,y.rank)}, ${s?le("coords",3,y.rank):le("coords",4,y.rank)}) * uniforms.strides - uniforms.pads; let xFCorner = xFRCCorner.x; let xRCorner = xFRCCorner.y; let xCCorner = xFRCCorner.z; let xShapeY = ${s?le("uniforms.x_shape",1,y.rank):le("uniforms.x_shape",2,y.rank)}; let xShapeZ = ${s?le("uniforms.x_shape",2,y.rank):le("uniforms.x_shape",3,y.rank)}; let xShapeW = ${s?le("uniforms.x_shape",3,y.rank):le("uniforms.x_shape",4,y.rank)}; let xShapeU = ${s?le("uniforms.x_shape",4,y.rank):le("uniforms.x_shape",1,y.rank)}; let inputDepthNearestVec4 = (xShapeU / 4) * 4; let inputDepthVec4Remainder = xShapeU % 4; var value = 0.0; for (var wF = 0u; wF < uniforms.filter_dims[0]; wF++) { let xF = xFCorner + wF * uniforms.dilations[0]; if (xF < 0 || xF >= xShapeY) { continue; } for (var wR = 0u; wR < uniforms.filter_dims[1]; wR++) { let xR = xRCorner + wR * uniforms.dilations[1]; if (xR < 0 || xR >= xShapeZ) { continue; } for (var wC = 0u; wC < uniforms.filter_dims[2]; wC++) { let xC = xCCorner + wC * uniforms.dilations[2]; if (xC < 0 || xC >= xShapeW) { continue; } for (var d1 = 0u; d1 < inputDepthNearestVec4; d1 += 4) { ${s?`let xValues = vec4( getX(batch, xF, xR, xC, d1), getX(batch, xF, xR, xC, d1 + 1), getX(batch, xF, xR, xC, d1 + 2), getX(batch, xF, xR, xC, d1 + 3)); `:`let xValues = vec4( getX(batch, d1, xF, xR, xC), getX(batch, d1 + 1, xF, xR, xC), getX(batch, d1 + 2, xF, xR, xC), getX(batch, d1 + 3, xF, xR, xC)); `} let wValues = vec4( getW(d2, d1, wF, wR, wC), getW(d2, d1 + 1, wF, wR, wC), getW(d2, d1 + 2, wF, wR, wC), getW(d2, d1 + 3, wF, wR, wC)); value += dot(xValues, wValues); } if (inputDepthVec4Remainder == 1) { ${s?`value += getX(batch, xF, xR, xC, inputDepthNearestVec4) * getW(d2, inputDepthNearestVec4, wF, wR, wC);`:`value += getX(batch, inputDepthNearestVec4, xF, xR, xC) * getW(d2, inputDepthNearestVec4, wF, wR, wC);`} } else if (inputDepthVec4Remainder == 2) { ${s?`let xValues = vec2( getX(batch, xF, xR, xC, inputDepthNearestVec4), getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1)); `:`let xValues = vec2( getX(batch, inputDepthNearestVec4, xF, xR, xC), getX(batch, inputDepthNearestVec4 + 1, xF, xR, xC)); `} let wValues = vec2( getW(d2, inputDepthNearestVec4, wF, wR, wC), getW(d2, inputDepthNearestVec4 + 1, wF, wR, wC)); value += dot(xValues, wValues); } else if (inputDepthVec4Remainder == 3) { ${s?`let xValues = vec3( getX(batch, xF, xR, xC, inputDepthNearestVec4), getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1), getX(batch, xF, xR, xC, inputDepthNearestVec4 + 2)); `:`let xValues = vec3( getX(batch, inputDepthNearestVec4, xF, xR, xC), getX(batch, inputDepthNearestVec4 + 1, xF, xR, xC), getX(batch, inputDepthNearestVec4 + 2, xF, xR, xC)); `} let wValues = vec3( getW(d2, inputDepthNearestVec4, wF, wR, wC), getW(d2, inputDepthNearestVec4 + 1, wF, wR, wC), getW(d2, inputDepthNearestVec4 + 2, wF, wR, wC)); value += dot(xValues, wValues); } } } } ${c?"value = value + getBiasByOutputCoords(coords)":""}; ${J} result[global_idx] = f32(value); }`};return{name:"Conv3DNaive",shaderCache:{hint:`${g.cacheKey};${s};${Q};${c}`,inputDependencies:d},getRunData:()=>({outputs:[{dims:e,dataType:A[0].dataType}],dispatchGroup:{x:r[0],y:r[1],z:r[2]},programUniforms:a}),getShaderSource:p}}}),Dw,ww,Vf=jA(()=>{ye(),Ge(),Ke(),Si(),Dw=(A,g,e,I)=>{let i=A.length>2,t=i?"value += b[output_channel];":"",s=A[0].dims,o=A[1].dims,C=g.format==="NHWC",r=C?e[3]:e[1],Q=r/g.group,B=C&&Q>=4?Dg(r):1,a=FA.size(e)/B,d=[{type:12,data:a},{type:12,data:g.dilations},{type:12,data:[g.strides[0],g.strides[1]]},{type:12,data:[g.pads[0],g.pads[1]]},{type:12,data:Q}];mi(g,d),d.push(...de(s,[o[0],o[1],o[2],o[3]/B]));let c=i?["rank","rank","rank"]:["rank","rank"];d.push(...de([e[0],e[1],e[2],e[3]/B]));let p=L=>{let w=ne("output",A[0].dataType,e.length,B),u=Hg(w.type.tensor),_=yi(g,w.type.value,u),y=UA("x",A[0].dataType,s.length),M=UA("w",A[1].dataType,o.length,B),F=[y,M];i&&F.push(UA("b",A[2].dataType,A[2].dims,B));let m=[{name:"output_size",type:"u32"},{name:"dilations",type:"u32",length:g.dilations.length},{name:"strides",type:"u32",length:2},{name:"pads",type:"u32",length:2},{name:"output_channels_per_group",type:"u32"}];Mi(g,m);let G=C?` for (var wHeight: u32 = 0u; wHeight < uniforms.w_shape[0]; wHeight++) { let xHeight = xRCCorner.x + wHeight * uniforms.dilations[0]; if (xHeight < 0u || xHeight >= uniforms.x_shape[1]) { continue; } for (var wWidth: u32 = 0u; wWidth < uniforms.w_shape[1]; wWidth++) { let xWidth = xRCCorner.y + wWidth * uniforms.dilations[1]; if (xWidth < 0u || xWidth >= uniforms.x_shape[2]) { continue; } for (var wInChannel: u32 = 0u; wInChannel < uniforms.w_shape[2]; wInChannel++) { let input_channel = in_channel_offset + wInChannel; let xVal = ${y.get("batch","xHeight","xWidth","input_channel")}; let wVal = ${M.get("wHeight","wWidth","wInChannel","output_channel")}; value += xVal * wVal; } } } `:` for (var wInChannel: u32 = 0u; wInChannel < uniforms.w_shape[1]; wInChannel++) { let input_channel = in_channel_offset + wInChannel; for (var wHeight: u32 = 0u; wHeight < uniforms.w_shape[2]; wHeight++) { let xHeight = xRCCorner.x + wHeight * uniforms.dilations[0]; if (xHeight < 0u || xHeight >= uniforms.x_shape[2]) { continue; } for (var wWidth: u32 = 0u; wWidth < uniforms.w_shape[3]; wWidth++) { let xWidth = xRCCorner.y + wWidth * uniforms.dilations[1]; if (xWidth < 0u || xWidth >= uniforms.x_shape[3]) { continue; } let xVal = ${y.get("batch","input_channel","xHeight","xWidth")}; let wVal = ${M.get("output_channel","wInChannel","wHeight","wWidth")}; value += xVal * wVal; } } } `;return` ${L.registerUniforms(m).declareVariables(...F,w)} ${L.mainStart()} ${L.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let outputIndices = ${w.offsetToIndices("global_idx")}; let batch: u32 = outputIndices[0]; let output_channel: u32 = outputIndices[${C?3:1}]; let xRCCorner: vec2 = vec2(outputIndices[${C?1:2}], outputIndices[${C?2:3}]) * uniforms.strides - uniforms.pads; let group_id: u32 = output_channel * ${B} / uniforms.output_channels_per_group; var in_channel_offset = group_id * uniforms.w_shape[${C?2:1}]; var value: ${w.type.value} = ${w.type.value}(0); ${G} ${t} ${_} ${w.setByOffset("global_idx","value")} }`};return{name:"GroupedConv",shaderCache:{hint:`${g.cacheKey}_${B}`,inputDependencies:c},getRunData:()=>({outputs:[{dims:I?I(e):e,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(a/64)},programUniforms:d}),getShaderSource:p}},ww=(A,g,e,I)=>{let i=A.length>2,t=Dg(e[3]),s=Dg(e[2]),o=FA.size(e)/t/s,C=[A[0].dims[0],A[0].dims[1],A[0].dims[2],A[0].dims[3]/t],r=[A[1].dims[0],A[1].dims[1],A[1].dims[2],A[1].dims[3]/t],Q=[e[0],e[1],e[2],e[3]/t],B=[{type:12,data:o},{type:6,data:[g.strides[0],g.strides[1]]},{type:6,data:[g.pads[0],g.pads[1]]}];mi(g,B),B.push(...de(C,r,Q));let a=(s-1)*g.strides[1]+r[1],d=c=>{let p=ne("output",A[0].dataType,Q.length,t),L=Hg(p.type.tensor),w=yi(g,p.type.value,L),u=UA("x",A[0].dataType,C.length,t),_=UA("w",A[1].dataType,r.length,t),y=[u,_];i&&y.push(UA("b",A[2].dataType,A[2].dims,t));let M=i?"value += b[output_channel];":"",F=[{name:"output_size",type:"u32"},{name:"strides",type:"i32",length:2},{name:"pads",type:"i32",length:2}];return Mi(g,F),` ${c.registerUniforms(F).declareVariables(...y,p)} ${c.mainStart()} ${c.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let width0 = uniforms.output_shape[3]; let output_channel = global_idx % width0; var index1 = global_idx / width0; let width1 = uniforms.output_shape[2] / ${s}u; let col = (index1 % width1) * ${s}u; index1 = index1 / width1; let row = index1 % uniforms.output_shape[1]; let batch = index1 / uniforms.output_shape[1]; let x_corner = vec2(i32(row), i32(col)) * uniforms.strides - uniforms.pads; var x_vals: array<${u.type.value}, ${a}>; var values: array<${p.type.value}, ${s}>; let input_channel = output_channel; // Use constant instead of uniform can give better performance for w's height/width. for (var w_height: u32 = 0u; w_height < ${r[0]}; w_height++) { let x_height = x_corner.x + i32(w_height); if (x_height >= 0 && u32(x_height) < uniforms.x_shape[1]) { for (var i = 0; i < ${a}; i++) { let x_width = x_corner.y + i; if (x_width >= 0 && u32(x_width) < uniforms.x_shape[2]) { x_vals[i] = ${u.get("batch","u32(x_height)","u32(x_width)","input_channel")}; } else { x_vals[i] = ${u.type.value}(0); } } for (var w_width: u32 = 0u; w_width < ${r[1]}; w_width++) { let w_val = ${_.get("w_height","w_width","0","output_channel")}; for (var i = 0u; i < ${s}u; i++) { values[i] = fma(x_vals[i * u32(uniforms.strides[1]) + w_width], w_val, values[i]); } } } } for (var i = 0u; i < ${s}u; i++) { var value = values[i]; ${M} ${w} ${p.set("batch","row","col + i","output_channel","value")}; } }`};return{name:"GroupedConv-Vectorize",shaderCache:{hint:`${g.cacheKey};${t};${s};${a};${r[0]};${r[1]}`,inputDependencies:i?["rank","rank","type"]:["rank","rank"]},getRunData:()=>({outputs:[{dims:I?I(e):e,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(o/64)},programUniforms:B}),getShaderSource:d}}}),ed,jo,gd,Vo,Wr,or,Id,id,jr,zf=jA(()=>{Ge(),Wf(),jf(),Da(),Vf(),Si(),ha(),oi(),ed=(A,g,e,I,i,t)=>{let s=A[0],o=A.slice(t?1:2,t?3:4),C=o.length,r=g[0],Q=g.slice(2).map((a,d)=>a+(a-1)*(e[d]-1)),B=o.map((a,d)=>a+I[d]+I[d+C]).map((a,d)=>Math.floor((a-Q[d]+i[d])/i[d]));return B.splice(0,0,s),B.splice(t?3:1,0,r),B},jo=[2,3,1,0],gd=(A,g)=>{if(!A||A.length!==2&&A.length!==3)throw new Error("Conv requires 2 or 3 inputs");if(A[0].dims.length>5)throw new Error("greater than 5D is not supported");if(A[0].dims.length!==A[1].dims.length)throw new Error("filter does not have same dimension as input");let e=A[0].dims[g.format==="NHWC"?A[0].dims.length-1:1],I=A[1].dims[1]*g.group;if(e!==I)throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");if(A.length===3&&(A[2].dims.length!==1||A[1].dims[0]!==A[2].dims[0]))throw new Error("invalid bias");let i=A[0].dims.length-2;if(g.dilations.length!==i)throw new Error(`dilations should be ${i}D`);if(g.strides.length!==i)throw new Error(`strides should be ${i}D`);if(g.pads.length!==i*2)throw new Error(`pads should be ${i*2}D`);if(g.kernelShape.length!==0&&g.kernelShape.length!==A[1].dims.length-2)throw new Error("invalid kernel shape")},Vo=(A,g)=>{let e=A.kernelShape.slice();e.length{let g=ca(A),e=A.format,I=["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][A.auto_pad],i=A.dilations,t=A.group,s=A.kernel_shape,o=A.pads,C=A.strides,r=A.w_is_const();return{autoPad:I,format:e,dilations:i,group:t,kernelShape:s,pads:o,strides:C,wIsConst:r,...g,cacheKey:`${A.format};${g.activation};`}},or=(A,g,e,I)=>{let i=e.format==="NHWC",t=ed(g[0].dims,g[1].dims,e.dilations,e.pads,e.strides,i);if(e.group!==1){let F=[g[0]];if(i){let m=A.kernelCustomData.wT??A.compute(nI(g[1],jo),{inputs:[1],outputs:[e.wIsConst?-2:-1]})[0];e.wIsConst&&!A.kernelCustomData.wT&&(A.kernelCustomData.wT=m),F.push(m)}else F.push(g[1]);g.length===3&&F.push(g[2]),!A.adapterInfo.isArchitecture("ampere")&&i&&g[1].dims[0]===e.group&&g[1].dims[1]===1&&e.dilations[0]===1&&e.dilations[1]===1?A.compute(ww(F,e,t,I),{inputs:F}):A.compute(Dw(F,e,t,I),{inputs:F});return}let s=g.length===3,o=g[0].dims[i?1:2],C=g[0].dims[i?2:3],r=g[0].dims[i?3:1],Q=g[1].dims[2],B=g[1].dims[3],a=t[i?1:2],d=t[i?2:3],c=t[i?3:1],p=i&&Q===o&&B===C&&e.pads[0]===0&&e.pads[1]===0;if(p||Q===1&&B===1&&e.dilations[0]===1&&e.dilations[1]===1&&e.strides[0]===1&&e.strides[1]===1&&e.pads[0]===0&&e.pads[1]===0){let F=t[0],m,G,T,J=[];if(i){let P=A.kernelCustomData.wT??A.compute(nI(g[1],jo),{inputs:[1],outputs:[e.wIsConst?-2:-1]})[0];if(e.wIsConst&&!A.kernelCustomData.wT&&(A.kernelCustomData.wT=P),p){let tA=o*C*r;m=g[0].reshape([1,F,tA]),G=P.reshape([1,tA,c]),T=[1,F,c]}else m=g[0].reshape([F,o*C,r]),G=P.reshape([1,r,c]),T=[F,a*d,c];J.push(m),J.push(G)}else m=g[0].reshape([F,r,o*C]),G=g[1].reshape([1,c,r]),T=[F,c,a*d],J.push(G),J.push(m);s&&J.push(g[2]);let Z=T[2],z=J[0].dims[J[0].dims.length-1];Z<8&&z<8?A.compute(ua(J,e,t,T,i,I),{inputs:J}):A.compute(Cs(J,e,t,T,i,I),{inputs:J});return}let L=!0,w=A.kernelCustomData.wT??A.compute(nI(g[1],jo),{inputs:[1],outputs:[e.wIsConst?-2:-1]})[0];e.wIsConst&&!A.kernelCustomData.wT&&(A.kernelCustomData.wT=w);let u=[g[0],w];s&&u.push(g[2]);let _=i?a*d:c,y=i?c:a*d,M=Q*B*r;A.compute(dw(u,e,t,_,y,M,s,L,I),{inputs:u})},Id=(A,g)=>{let e=g.format==="NHWC",I=[A.inputs[0].reshape(e?[A.inputs[0].dims[0],1,A.inputs[0].dims[1],A.inputs[0].dims[2]]:[A.inputs[0].dims[0],A.inputs[0].dims[1],1,A.inputs[0].dims[2]]),A.inputs[1].reshape([A.inputs[1].dims[0],A.inputs[1].dims[1],1,A.inputs[1].dims[2]])];A.inputs.length===3&&I.push(A.inputs[2]);let i=[0,g.pads[0],0,g.pads[1]],t=[1].concat(g.strides),s=[1].concat(g.dilations),o=[1].concat(g.kernelShape),C=Vo({...g,pads:i,strides:t,dilations:s,kernelShape:o},I);or(A,I,C,r=>e?[r[0],r[2],r[3]]:[r[0],r[1],r[3]])},id=(A,g,e)=>{let I=e.format==="NHWC"?"channelsLast":"channelsFirst",i=Vo(e,g),t=e.autoPad==="NOTSET"?e.pads:e.autoPad,s=uw(g[0].dims,g[1].dims,e.strides,e.dilations,t,!1,I);A.compute(hw(g,i,s.outShape,[s.filterDepth,s.filterHeight,s.filterWidth],[s.padInfo.front,s.padInfo.top,s.padInfo.left],I))},jr=(A,g)=>{if(gd(A.inputs,g),A.inputs[0].dims.length===3)Id(A,g);else if(A.inputs[0].dims.length===5)id(A,A.inputs,g);else{let e=Vo(g,A.inputs);or(A,A.inputs,e)}}}),pw,$f=jA(()=>{ye(),jI(),Ge(),Ke(),pw=(A,g,e)=>{let I=A.length>2,i=g.outputShape,t=g.format==="NHWC",s=g.group,o=A[1].dims,C=o[2]/s,r=o[3],Q=t?Dg(C):1,B=t&&r===1&&C>=4,a=B?Math.floor(C/4)*4:Math.floor(C/Q)*Q,d=C-a,c=t?Dg(r):1,p=t?r===1?Q:c:1,L=FA.size(i)/c,w=[Math.ceil(L/64),1,1];Ye("verbose",()=>`[conv2d_backprop_webgpu] dispatch = ${w}`);let u=["rank","rank"],_=[g.strides[0],g.strides[1]],y=[g.kernelShape[t?1:2],g.kernelShape[t?2:3]],M=[g.dilations[0],g.dilations[1]],F=[y[0]+(g.dilations[0]<=1?0:(g.kernelShape[t?1:2]-1)*(g.dilations[0]-1)),y[1]+(g.dilations[1]<=1?0:(g.kernelShape[t?2:3]-1)*(g.dilations[1]-1))],m=[F[0]-1-Math.floor((g.pads[0]+g.pads[2])/2),F[1]-1-Math.floor((g.pads[1]+g.pads[3])/2)],G=[{type:12,data:L},{type:12,data:_},{type:12,data:y},{type:12,data:M},{type:12,data:F},{type:6,data:m},{type:12,data:a},{type:12,data:C},{type:12,data:r},...de(A[0].dims,A[1].dims)];I&&(G.push(...de(A[2].dims)),u.push("rank")),G.push(...de(i));let T=J=>{let Z=[{name:"output_size",type:"u32"},{name:"strides",type:"u32",length:_.length},{name:"filter_dims",type:"u32",length:y.length},{name:"dilations",type:"u32",length:y.length},{name:"effective_filter_dims",type:"u32",length:F.length},{name:"pads",type:"i32",length:m.length},{name:"input_channels_per_group_int",type:"u32"},{name:"input_channels_per_group",type:"u32"},{name:"output_channels_per_group",type:"u32"}],z=Hg(A[0].dataType),P=t?1:2,tA=t?2:3,AA=t?3:1,iA=UA("W",A[1].dataType,A[1].dims.length,p),rA=UA("Dy",A[0].dataType,A[0].dims.length,Q),CA=[rA,iA];I&&CA.push(UA("bias",A[2].dataType,[i[AA]].length,c));let cA=ne("result",A[0].dataType,i.length,c),uA=()=>{let $="";if(B)Q===4?$+=` let xValue = ${rA.getByOffset("x_offset")}; let wValue = ${iA.getByOffset("w_offset")}; dotProd = dotProd + dot(xValue, wValue); x_offset += 1u; w_offset += 1u;`:Q===2?$+=` dotProd = dotProd + dot(vec4<${z}>(${rA.getByOffset("x_offset")}, ${rA.getByOffset("x_offset + 1u")}), vec4<${z}>(${iA.getByOffset("w_offset")}, ${iA.getByOffset("w_offset + 1u")})); x_offset += 2u; w_offset += 2u;`:Q===1&&($+=` dotProd = dotProd + dot(vec4<${z}>(${rA.getByOffset("x_offset")}, ${rA.getByOffset("x_offset + 1u")}, ${rA.getByOffset("x_offset + 2u")}, ${rA.getByOffset("x_offset + 3u")}), vec4<${z}>(${iA.getByOffset("w_offset")}, ${iA.getByOffset("w_offset + 1u")}, ${iA.getByOffset("w_offset + 2u")}, ${iA.getByOffset("w_offset + 3u")})); x_offset += 4u; w_offset += 4u;`);else if($+=` let xValue = ${t?rA.getByOffset(`${rA.indicesToOffset(`${rA.type.indices}(batch, idyR, idyC, inputChannel)`)} / ${Q}`):rA.get("batch","inputChannel","idyR","idyC")}; `,Q===1)$+=` let w_offset = ${iA.indicesToOffset(`${iA.type.indices}(u32(wRPerm), u32(wCPerm), inputChannel, wOutChannel)`)}; let wValue = ${iA.getByOffset(`w_offset / ${p}`)}; dotProd = dotProd + xValue * wValue;`;else for(let W=0;W{if(d===0)return"";if(!B)throw new Error(`packInputAs4 ${B} is not true.`);let $="";if(Q===1){$+="dotProd = dotProd";for(let W=0;W(i32(r), i32(c)) - uniforms.pads; let dyRCorner = dyCorner.x; let dyCCorner = dyCorner.y; let groupId = d1 / uniforms.output_channels_per_group; let wOutChannel = d1 - groupId * uniforms.output_channels_per_group; // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). // ? = to be determined. : = across all values in that axis. var dotProd = ${cA.type.value}(0.0); var wR: u32 = 0; if (uniforms.dilations.x == 1) { // Minimum wR >= 0 that satisfies (dyRCorner + wR) % (uniforms.strides.x) == 0 wR = u32(((dyRCorner + i32(uniforms.strides.x) - 1) / i32(uniforms.strides.x)) * i32(uniforms.strides.x) - dyRCorner); } for (; wR < uniforms.effective_filter_dims.x; wR = wR + 1) { if (wR % uniforms.dilations.x != 0) { continue; } let dyR = (${z}(dyRCorner) + ${z}(wR)) / ${z}(uniforms.strides[0]); let wRPerm = uniforms.filter_dims.x - 1 - wR / uniforms.dilations.x; if (dyR < 0.0 || dyR >= ${z}(uniforms.Dy_shape[${P}]) || fract(dyR) > 0.0 || wRPerm < 0) { continue; } let idyR: u32 = u32(dyR); var wC: u32 = 0; if (uniforms.dilations.y == 1) { // Minimum wC >= 0 that satisfies (dyCCorner + wC) % (uniforms.strides.y) == 0 wC = u32(((dyCCorner + i32(uniforms.strides.y) - 1) / i32(uniforms.strides.y)) * i32(uniforms.strides.y) - dyCCorner); } for (; wC < uniforms.effective_filter_dims.y; wC = wC + 1) { if (wC % uniforms.dilations.y != 0) { continue; } let dyC = (${z}(dyCCorner) + ${z}(wC)) / ${z}(uniforms.strides.y); let wCPerm = uniforms.filter_dims.y - 1 - wC / uniforms.dilations.y; if (dyC < 0.0 || dyC >= ${z}(uniforms.Dy_shape[${tA}]) || fract(dyC) > 0.0 || wCPerm < 0) { continue; } let idyC: u32 = u32(dyC); var inputChannel = groupId * uniforms.input_channels_per_group; ${B?` var x_offset = ${rA.indicesToOffset(`${rA.type.indices}(batch, idyR, idyC, inputChannel)`)} / ${Q}; var w_offset = ${iA.indicesToOffset(`${iA.type.indices}(wRPerm, wCPerm, inputChannel, wOutChannel)`)} / ${p}; `:""} for (var d2: u32 = 0; d2 < uniforms.input_channels_per_group_int; d2 = d2 + ${B?4:Q}) { ${uA()} inputChannel = inputChannel + ${B?4:Q}; } ${v()} wC = wC + uniforms.strides.y - 1; } wR = wR + uniforms.strides[0] - 1; } let value = dotProd${I?` + bias[d1 / ${c}]`:""}; ${cA.setByOffset("global_idx","value")}; `;return` ${J.registerUniforms(Z).declareVariables(...CA,cA)} ${J.mainStart()} ${J.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")}; ${x}}`};return{name:"ConvTranspose2D",shaderCache:{hint:`${g.cacheKey};${Q}${p}${c}${B}${d}`,inputDependencies:u},getRunData:()=>({dispatchGroup:{x:w[0],y:w[1],z:w[2]},outputs:[{dims:e?e(i):i,dataType:A[0].dataType}],programUniforms:G}),getShaderSource:T}}}),td,od,sd,sr,fw,Cd,Cr,rd,yw,Zf=jA(()=>{$f(),Si(),oi(),td=(A,g,e,I,i,t)=>(A-1)*g+e+(I-1)*i+1-t,od=(A,g,e,I,i)=>{let t=Math.floor(A/2);g==="SAME_UPPER"?(e[I]=t,e[i]=A-t):g==="SAME_LOWER"&&(e[I]=A-t,e[i]=t)},sd=(A,g,e,I,i,t,s,o,C,r)=>{let Q=A.length-2,B=r.length===0;C.length{let e=A.kernelShape.slice();if(A.kernelShape.length===0||A.kernelShape.reduce((B,a)=>B*a,1)===0){e.length=0;for(let B=2;BB+a,0)===0){let B=g[0].dims.length-2;C=new Array(B).fill(1)}let r=A.strides.slice();if(r.reduce((B,a)=>B+a,0)===0){let B=g[0].dims.length-2;r=new Array(B).fill(1)}sd(o,e,C,A.autoPad,A.group,i,r,I,s,t);let Q=Object.assign({},A);return Object.assign(Q,{kernelShape:e,pads:i,outputPadding:s,outputShape:t,dilations:C,strides:r}),Q},fw=A=>{let g=ca(A),e=A.format,I=["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][typeof A.autoPad>"u"?0:A.autoPad],i=A.dilations,t=A.group,s=A.kernelShape,o=A.pads,C=A.strides,r=A.wIsConst(),Q=A.outputPadding,B=A.outputShape;return{autoPad:I,format:e,dilations:i,group:t,kernelShape:s,outputPadding:Q,outputShape:B,pads:o,strides:C,wIsConst:r,...g,cacheKey:`${A.format};${g.activation};`}},Cd=(A,g)=>{if(!A||A.length!==2&&A.length!==3)throw new Error("Conv requires 2 or 3 inputs");if(A[0].dims.length!==4&&A[0].dims.length!==3)throw new Error("currently only support 2-dimensional conv");if(A[0].dims.length!==A[1].dims.length)throw new Error("filter does not have same dimension as input");let e=A[0].dims[g.format==="NHWC"?A[0].dims.length-1:1],I=A[1].dims[0];if(e!==I)throw new Error("FILTER_IN_CHANNEL should be equal to DATA_CHANNEL");let i=A[1].dims[1]*g.group;if(A.length===3&&(A[2].dims.length!==1||A[2].dims[0]!==i))throw new Error("invalid bias");let t=A[0].dims.length-2;if(g.dilations.reduce((s,o)=>s+o,0)>0&&g.dilations.length!==t)throw new Error(`dilations should be ${t}D`);if(g.strides.reduce((s,o)=>s+o,0)>0&&g.strides.length!==t)throw new Error(`strides should be ${t}D`);if(g.pads.reduce((s,o)=>s+o,0)>0&&g.pads.length!==t*2)throw new Error(`pads should be ${t*2}D`);if(g.outputPadding.length!==t&&g.outputPadding.length!==0)throw new Error(`output_padding should be ${t}D`);if(g.kernelShape.reduce((s,o)=>s+o,0)>0&&g.kernelShape.length!==0&&g.kernelShape.length!==A[1].dims.length-2)throw new Error("invalid kernel shape");if(g.outputShape.length!==0&&g.outputShape.length!==A[0].dims.length-2)throw new Error("invalid output shape")},Cr=(A,g,e,I)=>{let i=A.kernelCustomData.wT??A.compute(nI(g[1],[2,3,0,1]),{inputs:[1],outputs:[e.wIsConst?-2:-1]})[0];e.wIsConst&&!A.kernelCustomData.wT&&(A.kernelCustomData.wT=i);let t=[g[0],i];g.length===3&&t.push(g[2]),A.compute(pw(t,e,I),{inputs:t})},rd=(A,g)=>{let e=g.format==="NHWC",I=[A.inputs[0].reshape(e?[A.inputs[0].dims[0],1,A.inputs[0].dims[1],A.inputs[0].dims[2]]:[A.inputs[0].dims[0],A.inputs[0].dims[1],1,A.inputs[0].dims[2]]),A.inputs[1].reshape([A.inputs[1].dims[0],A.inputs[1].dims[1],1,A.inputs[1].dims[2]])];A.inputs.length===3&&I.push(A.inputs[2]);let i=g.kernelShape;(i.length===0||i[0]===0)&&(i=[A.inputs[1].dims[2]]);let t=g.dilations;(t.length===0||t[0]===0)&&(t=[1]);let s=g.strides;(s.length===0||s[0]===0)&&(s=[1]);let o=g.pads;o.length===0&&(o=[0,0]),o=[0,o[0],0,o[1]],s=[1].concat(s),t=[1].concat(t),i=[1].concat(i);let C=g.outputPadding;C=[0].concat(C);let r=sr({...g,pads:o,strides:s,dilations:t,kernelShape:i,outputPadding:C},I);Cr(A,I,r,Q=>e?[Q[0],Q[2],Q[3]]:[Q[0],Q[1],Q[3]])},yw=(A,g)=>{if(Cd(A.inputs,g),A.inputs[0].dims.length===3)rd(A,g);else{let e=sr(g,A.inputs);Cr(A,A.inputs,e)}}}),ad,mw,Mw,Xf=jA(()=>{ye(),Ge(),pg(),Ke(),ad=(A,g,e,I)=>{let i=FA.size(g),t=g.length,s=UA("input",A,t),o=ne("output",A,t),C=e.dataType===6?e.getInt32Array()[0]:Number(e.getBigInt64Array()[0]),r=FA.normalizeAxis(C,t),Q=B=>{let a=` i32(${s.indicesGet("inputIndices","uniforms.axis")}) `,d=le("uniforms.input_shape","uniforms.axis",t),c=I.reverse?a+(I.exclusive?" + 1":""):"0",p=I.reverse?d:a+(I.exclusive?"":" + 1");return` ${B.registerUniform("outputSize","u32").registerUniform("axis","u32").declareVariables(s,o)} ${B.mainStart()} ${B.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} var inputIndices = ${o.offsetToIndices("global_idx")}; var sum = ${o.type.value}(0); let first : i32 = ${c}; let last : i32 = ${p}; for (var i : i32 = first; i < last; i++) { ${s.indicesSet("inputIndices","uniforms.axis","u32(i)")}; sum = sum + ${s.getByIndices("inputIndices")}; } ${o.setByOffset("global_idx","sum")}; }`};return{name:"CumSum",shaderCache:{hint:I.cacheKey,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:g,dataType:A}],dispatchGroup:{x:Math.ceil(i/64)},programUniforms:[{type:12,data:i},{type:12,data:r},...de(g,g)]}),getShaderSource:Q}},mw=(A,g)=>{let e=A.inputs[0].dims,I=A.inputs[0].dataType,i=A.inputs[1];A.compute(ad(I,e,i,g),{inputs:[0]})},Mw=A=>{let g=A.exclusive===1,e=A.reverse===1;return We({exclusive:g,reverse:e})}}),Bd,Qd,nd,Fw,Sw,Ay=jA(()=>{ye(),Ge(),pg(),Ke(),Bd=A=>{if(!A||A.length!==1)throw new Error("DepthToSpace requires 1 input.");if(A[0].dims.length!==4)throw new Error("DepthToSpace requires 4D input.")},Qd=(A,g,e,I)=>{let i=[];i.push(`fn perm(i: ${I.type.indices}) -> ${e.type.indices} { var a: ${e.type.indices};`);for(let t=0;t{let e,I,i,t,s,o,C=g.format==="NHWC",r=g.blocksize,Q=g.mode==="DCR";C?([e,I,i,t]=A.dims,s=Q?[e,I,i,r,r,t/r**2]:[e,I,i,t/r**2,r,r],o=Q?[0,1,3,2,4,5]:[0,1,4,2,5,3]):([e,I,i,t]=[A.dims[0],A.dims[2],A.dims[3],A.dims[1]],s=Q?[e,r,r,t/r**2,I,i]:[e,t/r**2,r,r,I,i],o=Q?[0,3,4,1,5,2]:[0,1,4,2,5,3]);let B=A.reshape(s),a=B.dims.length,d=A.dataType,c=UA("a",d,a),p=ne("output",d,a),L=w=>` ${w.registerUniform("output_size","u32").declareVariables(c,p)} ${Qd(o,a,c,p)} ${w.mainStart()} ${w.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let indices = ${p.offsetToIndices("global_idx")}; let aIndices = perm(indices); ${p.setByOffset("global_idx",c.getByIndices("aIndices"))} }`;return{name:"DepthToSpace",shaderCache:{hint:`${A.dims};${g.blocksize};${g.mode}`,inputDependencies:["rank"]},getRunData:w=>{let u=C?[e,I*r,i*r,t/r**2]:[e,t/r**2,I*r,i*r],_=FA.size(u),y=B.dims,M=FA.sortBasedOnPerm(y,o);return{outputs:[{dims:u,dataType:w[0].dataType}],dispatchGroup:{x:Math.ceil(_/64)},programUniforms:[{type:12,data:_},...de(y,M)]}},getShaderSource:L}},Fw=(A,g)=>{Bd(A.inputs),A.compute(nd(A.inputs[0],g))},Sw=A=>We({blocksize:A.blocksize,mode:A.mode,format:A.format})}),zo,bt,rr,Ed,ld,cd,dd,ar,ud,Nw,_w,ey=jA(()=>{ye(),Ge(),pg(),Ke(),zo="[a-zA-Z]|\\.\\.\\.",bt="("+zo+")+",rr="^"+bt+"$",Ed="("+bt+",)*"+bt,ld="^"+Ed+"$",cd=class{constructor(A=-1){this.symbolToIndices=new Map,this.inputIndex=A}addSymbol(A,g){let e=this.symbolToIndices.get(A);e===void 0?e=[g]:e.push(g),this.symbolToIndices.set(A,e)}},dd=class{constructor(A,g){this.equation=g,this.hasEllipsis=!1,this.symbolToInfo=new Map,this.lhs=new Array,this.outputDims=[];let[e,I]=g.includes("->")?g.split("->",2):[g,""];if(!e.match(RegExp(ld)))throw new Error("Invalid LHS term");if(e.split(",").forEach((i,t)=>{let s=A[t].dims.slice();if(!i.match(RegExp(rr)))throw new Error("Invalid LHS term");let o=this.processTerm(i,!0,s,t);this.lhs.push(o)}),I==="")I+=[...this.symbolToInfo.entries()].filter(([i,t])=>t.count===1||i==="...").map(([i])=>i).join("");else if(!I.match(RegExp(bt)))throw new Error("Invalid RHS");I.match(RegExp(zo,"g"))?.forEach(i=>{if(i==="...")this.outputDims=this.outputDims.concat(this.ellipsisDims);else{let t=this.symbolToInfo.get(i);if(t===void 0)throw new Error("Invalid RHS symbol");this.outputDims.push(t.dimValue)}}),this.rhs=this.processTerm(I,!1,this.outputDims)}addSymbol(A,g,e){let I=this.symbolToInfo.get(A);if(I!==void 0){if(I.dimValue!==g&&I.count!==1)throw new Error("Dimension mismatch");I.count++,I.inputIndices.push(e)}else I={count:1,dimValue:g,inputIndices:[e]};this.symbolToInfo.set(A,I)}processTerm(A,g,e,I=-1){let i=e.length,t=!1,s=[],o=0;if(!A.match(RegExp(rr))&&!g&&A!=="")throw new Error("Invalid LHS term");let C=A.match(RegExp(zo,"g")),r=new cd(I);return C?.forEach((Q,B)=>{if(Q==="..."){if(t)throw new Error("Only one ellipsis is allowed per input term");t=!0;let a=i-C.length+1;if(a<0)throw new Error("Ellipsis out of bounds");if(s=e.slice(o,o+a),this.hasEllipsis){if(this.ellipsisDims.length!==s.length||this.ellipsisDims.toString()!==s.toString())throw new Error("Ellipsis dimensions mismatch")}else if(g)this.hasEllipsis=!0,this.ellipsisDims=s;else throw new Error("Ellipsis must be specified in the LHS");for(let d=0;dA+"_max",ud=(A,g,e,I)=>{let i=A.map(r=>r.length).map((r,Q)=>UA(`input${Q}`,g,r)),t=FA.size(I),s=ne("output",g,I.length),o=[...e.symbolToInfo.keys()].filter(r=>!e.rhs.symbolToIndices.has(r)),C=r=>{let Q=[],B="var prod = 1.0;",a="var sum = 0.0;",d="sum += prod;",c=[],p=[],L=[],w=[],u=e.symbolToInfo.size===e.rhs.symbolToIndices.size;e.symbolToInfo.forEach((y,M)=>{if(e.rhs.symbolToIndices.has(M)){let F=e.rhs.symbolToIndices.get(M)?.[0];F!==void 0&&e.lhs.forEach((m,G)=>{if(y.inputIndices.includes(G)){let T=m.symbolToIndices.get(M);if(T===void 0)throw new Error("Invalid symbol error");T.forEach(J=>{Q.push(`${i[G].indicesSet(`input${G}Indices`,J,s.indicesGet("outputIndices",F))}`)})}})}else e.lhs.forEach((F,m)=>{if(y.inputIndices.includes(m)){let G=F.symbolToIndices.get(M);if(G===void 0)throw new Error("Invalid symbol error");G.forEach(T=>{c.push(`${i[m].indicesSet(`input${m}Indices`,T,`${M}`)}`)}),w.push(`prod *= ${i[m].getByIndices(`input${m}Indices`)};`)}}),p.push(`for(var ${M}: u32 = 0; ${M} < uniforms.${ar(M)}; ${M}++) {`),L.push("}")});let _=u?[...Q,`let sum = ${i.map((y,M)=>y.getByIndices(`input${M}Indices`)).join(" * ")};`]:[...Q,a,...p,...c,B,...w,d,...L];return` ${r.registerUniforms(o.map(y=>({name:`${ar(y)}`,type:"u32"}))).registerUniform("outputSize","u32").declareVariables(...i,s)} ${r.mainStart()} ${r.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} var outputIndices = ${s.offsetToIndices("global_idx")}; ${i.map((y,M)=>`var input${M}Indices: ${i[M].type.indices};`).join(` `)} ${_.join(` `)}; ${s.setByOffset("global_idx","sum")}; }`};return{name:"Einsum",shaderCache:{hint:e.equation,inputDependencies:A.map(()=>"rank")},getRunData:()=>{let r=o.filter(B=>e.symbolToInfo.has(B)).map(B=>({type:12,data:e.symbolToInfo.get(B)?.dimValue||0}));r.push({type:12,data:t});let Q=A.map((B,a)=>[...de(B)]).reduce((B,a)=>B.concat(a),r);return Q.push(...de(I)),{outputs:[{dims:I,dataType:g}],dispatchGroup:{x:Math.ceil(t/64)},programUniforms:Q}},getShaderSource:C}},Nw=(A,g)=>{let e=new dd(A.inputs,g.equation),I=e.outputDims,i=A.inputs.map((t,s)=>t.dims);A.compute(ud(i,A.inputs[0].dataType,e,I))},_w=A=>{let g=A.equation.replace(/\s+/g,"");return We({equation:g})}}),hd,Br,Dd,wd,Rw,gy=jA(()=>{ye(),Ge(),Ke(),hd=A=>{if(!A||A.length!==2)throw new Error("Expand requires 2 input.");let g=A[0].dims,e=Array.from(A[1].getBigInt64Array(),Number),I=e.length{let e=A.length-g.length,I=[];for(let i=0;iA.length>g.length?Br(A,g):Br(g,A),wd=A=>{let g=A[0].dims,e=Array.from(A[1].getBigInt64Array(),Number),I=Dd(g,e),i=A[0].dataType,t=i===9||FA.size(g)===1,s=i===9||g.length>0&&g[g.length-1]%4===0?4:1,o=t||I.length>0&&I[I.length-1]%4===0?4:1,C=Math.ceil(FA.size(I)/o),r=B=>{let a=UA("input",i,g.length,s),d=ne("output",i,I.length,o),c;if(i===9){let p=(L,w,u="")=>` let outputIndices${w} = ${d.offsetToIndices(`outputOffset + ${w}u`)}; let offset${w} = ${a.broadcastedIndicesToOffset(`outputIndices${w}`,d)}; let index${w} = offset${w} / 4u; let component${w} = offset${w} % 4u; ${L}[${w}] = ${u}(${a.getByOffset(`index${w}`)}[component${w}]); `;c=` let outputOffset = global_idx * ${o}; var data = vec4(0); ${p("data",0,"u32")} ${p("data",1,"u32")} ${p("data",2,"u32")} ${p("data",3,"u32")} ${d.setByOffset("global_idx","data")} }`}else c=` let outputIndices = ${d.offsetToIndices(`global_idx * ${o}`)}; let inputOffset = ${a.broadcastedIndicesToOffset("outputIndices",d)}; let data = ${d.type.value}(${a.getByOffset(`inputOffset / ${s}`)}); ${d.setByOffset("global_idx","data")} }`;return` ${B.registerUniform("vec_size","u32").declareVariables(a,d)} ${B.mainStart()} ${B.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} ${c}`},Q=[{type:12,data:C},...de(g,I)];return{name:"Expand",shaderCache:{hint:`${I.length};${s}${o}`,inputDependencies:["rank"]},getShaderSource:r,getRunData:()=>({outputs:[{dims:I,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(C/64)},programUniforms:Q})}},Rw=A=>{hd(A.inputs),A.compute(wd(A.inputs),{inputs:[0]})}}),pd,Gw,Iy=jA(()=>{ye(),Ge(),Ke(),la(),pd=A=>{let g=A[0].dataType,e=FA.size(A[0].dims),I=FA.size(A[1].dims),i=I%4===0,t=s=>{let o=UA("x",g,[1],4),C=UA("bias",g,[1],4),r=ne("y",g,[1],4),Q=[{name:"output_vec_size",type:"u32"},{name:"bias_size",type:"u32"}],B=d=>` let bias${d}_offset: u32 = (global_idx * 4 + ${d}) % uniforms.bias_size; let bias${d} = ${C.getByOffset(`bias${d}_offset / 4`)}[bias${d}_offset % 4];`,a=i?` let bias = ${C.getByOffset("global_idx % (uniforms.bias_size / 4)")};`:`${B(0)}${B(1)}${B(2)}${B(3)} let bias = ${o.type.value}(bias0, bias1, bias2, bias3);`;return`${s.registerUniforms(Q).declareVariables(o,C,r)} ${vr(Xg(g))} ${s.mainStart(et)} ${s.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_vec_size")} let x = ${o.getByOffset("global_idx")}; ${a} let x_in = x + bias; ${r.setByOffset("global_idx",Hr("x_in"))} }`};return{name:"FastGeluWithBias",shaderCache:{hint:`${i}`,inputDependencies:["type","type"]},getShaderSource:t,getRunData:s=>({outputs:[{dims:s[0].dims,dataType:s[0].dataType}],programUniforms:[{type:12,data:Math.ceil(e/4)},{type:12,data:I}],dispatchGroup:{x:Math.ceil(e/et/4)}})}},Gw=A=>{A.inputs.length<2||FA.size(A.inputs[1].dims)===0?ZD(A):A.compute(pd(A.inputs))}}),fd,yd,kw,Lw,iy=jA(()=>{ye(),Ge(),pg(),Ke(),fd=A=>{if(!A||A.length!==2)throw new Error("Gather requires 2 inputs.")},yd=(A,g)=>{let e=A[0].dims,I=A[1].dims,i=e.length,t=FA.normalizeAxis(g.axis,i),s=e.slice(0);s.splice(t,1,...I);let o=e[t],C=A[0].dataType===9?4:1,r=Math.ceil(FA.size(s)/C),Q=[{type:12,data:r},{type:6,data:o},{type:12,data:t},...de(A[0].dims,A[1].dims,s)],B=a=>{let d=UA("data",A[0].dataType,A[0].dims.length,C),c=UA("inputIndices",A[1].dataType,A[1].dims.length),p=ne("output",A[0].dataType,s.length,C),L=u=>{let _=I.length,y=`var indicesIndices${u} = ${c.type.indices}(0);`;for(let M=0;M<_;M++)y+=`${_>1?`indicesIndices${u}[${M}]`:`indicesIndices${u}`} = ${s.length>1?`outputIndices${u}[uniforms.axis + ${M}]`:`outputIndices${u}`};`;y+=` var idx${u} = ${c.getByIndices(`indicesIndices${u}`)}; if (idx${u} < 0) { idx${u} = idx${u} + uniforms.axisDimLimit; } var dataIndices${u} : ${d.type.indices}; `;for(let M=0,F=0;M1?`dataIndices${u}[${M}]`:`dataIndices${u}`} = u32(idx${u});`,F+=_):(y+=`${i>1?`dataIndices${u}[${M}]`:`dataIndices${u}`} = ${s.length>1?`outputIndices${u}[${F}]`:`outputIndices${u}`};`,F++);return y},w;if(A[0].dataType===9){let u=(_,y,M="")=>` let outputIndices${y} = ${p.offsetToIndices(`outputOffset + ${y}u`)}; ${L(y)}; let offset${y} = ${d.indicesToOffset(`dataIndices${y}`)}; let index${y} = offset${y} / 4u; let component${y} = offset${y} % 4u; ${_}[${y}] = ${M}(${d.getByOffset(`index${y}`)}[component${y}]); `;w=` let outputOffset = global_idx * ${C}; var value = vec4(0); ${u("value",0,"u32")} ${u("value",1,"u32")} ${u("value",2,"u32")} ${u("value",3,"u32")} ${p.setByOffset("global_idx","value")} `}else w=` let outputIndices = ${p.offsetToIndices("global_idx")}; ${L("")}; let value = ${d.getByIndices("dataIndices")}; ${p.setByOffset("global_idx","value")}; `;return` ${a.registerUniform("outputSize","u32").registerUniform("axisDimLimit","i32").registerUniform("axis","u32").declareVariables(d,c,p)} ${a.mainStart()} ${a.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} ${w} }`};return{name:"Gather",shaderCache:{hint:g.cacheKey,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:s,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(r/64)},programUniforms:Q}),getShaderSource:B}},kw=A=>We({axis:A.axis}),Lw=(A,g)=>{let e=A.inputs;fd(e),A.compute(yd(A.inputs,g))}}),md,Kw,Uw,ty=jA(()=>{ye(),Ge(),Ke(),md=(A,g,e,I,i,t,s,o,C)=>{let r=[{type:12,data:t},{type:12,data:I},{type:12,data:i},{type:12,data:e},{type:12,data:s},{type:12,data:o},{type:12,data:C}],Q=[t];r.push(...de(g.dims,Q));let B=a=>{let d=UA("indices_data",g.dataType,g.dims.length),c=ne("input_slice_offsets_data",12,1,1),p=[d,c],L=[{name:"output_size",type:"u32"},{name:"batch_dims",type:"u32"},{name:"input_dims",type:"u32",length:i.length},{name:"sizes_from_slice_dims_data",type:"u32",length:e.length},{name:"num_slices_per_batch",type:"u32"},{name:"input_batch_stride",type:"u32"},{name:"num_slice_dims",type:"u32"}];return` ${a.registerUniforms(L).declareVariables(...p)} ${a.mainStart()} ${a.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let batch_idx = global_idx / uniforms.num_slices_per_batch; let base_offset = batch_idx * uniforms.input_batch_stride; let slice_indices_base_offset = global_idx * uniforms.num_slice_dims; var relative_slice_offset = 0; for (var dim_idx = 0u; dim_idx < uniforms.num_slice_dims; dim_idx ++) { var index = i32(indices_data[dim_idx + slice_indices_base_offset].x); let input_dim_idx = uniforms.batch_dims + dim_idx; if (index < 0) { ${i.length===1?"index += i32(uniforms.input_dims);":"index += i32(uniforms.input_dims[input_dim_idx]);"} } ${e.length===1?"relative_slice_offset += index * i32(uniforms.sizes_from_slice_dims_data);":"relative_slice_offset += index * i32(uniforms.sizes_from_slice_dims_data[dim_idx]);"} } input_slice_offsets_data[global_idx] = base_offset + u32(relative_slice_offset); }`};return A.compute({name:"computeSliceOffsets",shaderCache:{hint:`${i.length}_${e.length}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:Q,dataType:A.inputs[1].dataType}],dispatchGroup:{x:Math.ceil(t/64)},programUniforms:r}),getShaderSource:B},{inputs:[g],outputs:[-1]})[0]},Kw=(A,g)=>{let e=A.inputs,I=e[0].dims,i=e[0].dataType,t=e[1].dims,s=t[t.length-1],o=FA.sizeToDimension(t,t.length-1),C=FA.sizeFromDimension(I,g.batchDims+s),r=FA.sizeToDimension(I,g.batchDims),Q=FA.sizeFromDimension(I,g.batchDims),B=o/r,a=new Array(s),d=C;for(let y=0;yI.length)throw new Error("last dimension of indices must not be larger than rank of input tensor");let L=t.slice(0,-1).concat(I.slice(p)),w=FA.size(L),u=[{type:12,data:w},{type:12,data:C},...de(e[0].dims,c.dims,L)],_=y=>{let M=UA("data",e[0].dataType,e[0].dims.length),F=UA("slice_offsets",12,c.dims.length),m=ne("output",e[0].dataType,L.length);return` ${y.registerUniform("output_size","u32").registerUniform("slice_size","u32").declareVariables(M,F,m)} ${y.mainStart()} ${y.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let slice_offset = slice_offsets[global_idx / uniforms.slice_size]; output[global_idx] = data[u32(slice_offset) + global_idx % uniforms.slice_size]; }`};A.compute({name:"GatherND",shaderCache:{hint:g.cacheKey,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:L,dataType:i}],dispatchGroup:{x:Math.ceil(w/64)},programUniforms:u}),getShaderSource:_},{inputs:[e[0],c]})},Uw=A=>({batchDims:A.batch_dims,cacheKey:""})}),Md,Fd,bw,Jw,oy=jA(()=>{ye(),Ge(),pg(),Ke(),Md=(A,g)=>{if(A.length<3||A.length>4)throw new Error("GatherBlockQuantized requires 3 or 4 inputs.");let e=FA.normalizeAxis(g.quantizeAxis,A[0].dims.length),I=g.blockSize,i=A[0],t=A[2],s=A.length===4?A[3]:void 0;if(t.dims.length!==i.dims.length||!i.dims.map((o,C)=>C===e?Math.ceil(o/I)===t.dims[C]:o===t.dims[C]).reduce((o,C)=>o&&C,!0))throw new Error("Scales must have the same rank as the input tensor and the dims should match except on gatherAxis.");if(s){if(s.dataType!==i.dataType)throw new Error("Zero point must have the same data type as the input tensor.");if(s.dims.length!==t.dims.length||!s.dims.map((o,C)=>o===t.dims[C]).reduce((o,C)=>o&&C,!0))throw new Error("Zero point must have the same rank as the input tensor and the dims should match except on quantizeAxis.")}},Fd=(A,g)=>{let e=A[0].dims,I=A[1].dims,i=e.length,t=FA.normalizeAxis(g.gatherAxis,i),s=FA.normalizeAxis(g.quantizeAxis,i),o=e.slice(0);o.splice(t,1,...I);let C=FA.size(o),r=A[2].dataType,Q=A[0].dataType===22,B=[{type:12,data:C},{type:12,data:s},{type:12,data:t},{type:12,data:g.blockSize},...de(...A.map((d,c)=>d.dims),o)],a=d=>{let c=UA("data",A[0].dataType,A[0].dims.length),p=UA("inputIndices",A[1].dataType,A[1].dims.length),L=UA("scales",A[2].dataType,A[2].dims.length),w=A.length>3?UA("zeroPoint",A[3].dataType,A[3].dims.length):void 0,u=ne("output",r,o.length),_=[c,p,L];w&&_.push(w);let y=[{name:"output_size",type:"u32"},{name:"quantize_axis",type:"u32"},{name:"gather_axis",type:"u32"},{name:"block_size",type:"u32"}];return` ${d.registerUniforms(y).declareVariables(..._,u)} ${d.mainStart()} let output_indices = ${u.offsetToIndices("global_idx")}; var indices_indices = ${p.type.indices}(0); ${I.length>1?` for (var i: u32 = 0; i < ${I.length}; i++) { let index = ${u.indicesGet("output_indices","uniforms.gather_axis + i")}; ${p.indicesSet("indices_indices","i","index")}; }`:`indices_indices = ${u.indicesGet("output_indices","uniforms.gather_axis")};`}; var data_indices = ${c.type.indices}(0); for (var i: u32 = 0; i < uniforms.gather_axis; i++) { let index = ${u.indicesGet("output_indices","i")}; ${c.indicesSet("data_indices","i","index")}; } var index_from_indices = ${p.getByIndices("indices_indices")}; if (index_from_indices < 0) { index_from_indices += ${e[t]}; } ${c.indicesSet("data_indices","uniforms.gather_axis","u32(index_from_indices)")}; for (var i = uniforms.gather_axis + 1; i < ${o.length}; i++) { let index = ${u.indicesGet("output_indices",`i + ${I.length} - 1`)}; ${c.indicesSet("data_indices","i","index")}; } let data_offset = ${c.indicesToOffset("data_indices")}; let data_index = data_offset % 8; // Convert 4-bit packed data to 8-bit packed data. let packed_4bit_quantized_data = ${c.getByOffset("data_offset / 8")}; let packed_8bit_quantized_data = (packed_4bit_quantized_data >> (4 * (data_index % 2))) & 0x0f0f0f0f; let quantized_data_vec = ${Q?"unpack4xI8":"unpack4xU8"}(u32(packed_8bit_quantized_data)); let quantized_data = quantized_data_vec[data_index / 2]; var scale_indices = data_indices; let quantize_axis_index = ${L.indicesGet("data_indices","uniforms.quantize_axis")} / uniforms.block_size; ${L.indicesSet("scale_indices","uniforms.quantize_axis","quantize_axis_index")}; var scale = ${L.getByIndices("scale_indices")}; ${w?` let zero_point_indices = scale_indices; let zero_point_offset = ${w.indicesToOffset("zero_point_indices")}; let zero_point_index = zero_point_offset % 8; let packed_4bit_zero_points = ${w.getByOffset("zero_point_offset / 8")}; let packed_8bit_zero_points = (packed_4bit_zero_points >> (4 * (zero_point_index % 2))) & 0x0f0f0f0f; let zero_point_vec = ${Q?"unpack4xI8":"unpack4xU8"}(u32(packed_8bit_zero_points)); let zero_point = zero_point_vec[zero_point_index / 2];`:"var zero_point = 0"}; let dequantized_data = ${Xg(r)}(quantized_data - zero_point) * scale; ${u.setByOffset("global_idx","dequantized_data")}; }`};return{name:"GatherBlockQuantized",shaderCache:{hint:`${g.cacheKey};${A.filter((d,c)=>c!==1).map(d=>d.dims.join("_")).join(";")}`,inputDependencies:Array.from({length:A.length},(d,c)=>"rank")},getRunData:()=>({outputs:[{dims:o,dataType:r}],dispatchGroup:{x:Math.ceil(C/64)},programUniforms:B}),getShaderSource:a}},bw=(A,g)=>{let e=A.inputs;Md(e,g),A.compute(Fd(A.inputs,g))},Jw=A=>We({blockSize:A.blockSize,gatherAxis:A.gatherAxis,quantizeAxis:A.quantizeAxis})}),Sd,Nd,xw,Tw,sy=jA(()=>{ye(),Ge(),pg(),Ke(),Sd=A=>{if(!A||A.length!==2)throw new Error("GatherElements requires 2 inputs.");if(A[0].dims.length<1)throw new Error("GatherElements requires that the data input be rank >= 1.");if(A[0].dims.length!==A[1].dims.length)throw new Error(`GatherElements requires that the data input and indices input tensors be of same rank.`)},Nd=(A,g)=>{let e=A[0].dims,I=A[0].dataType,i=e.length,t=A[1].dims,s=A[1].dataType,o=FA.normalizeAxis(g.axis,i),C=e[o],r=t.slice(0),Q=FA.size(r),B=UA("input",I,i),a=UA("indicesInput",s,t.length),d=ne("output",I,r.length),c=[{type:12,data:Q},{type:6,data:C},{type:12,data:o}];return c.push(...de(e,t,r)),{name:"GatherElements",shaderCache:{inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:r,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(Q/64)},programUniforms:c}),getShaderSource:p=>` ${p.registerUniform("outputSize","u32").registerUniform("axisDimLimit","i32").registerUniform("axis","u32").declareVariables(B,a,d)} ${p.mainStart()} ${p.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} let outputIndices = ${d.offsetToIndices("global_idx")}; var idx = ${a.getByOffset("global_idx")}; if (idx < 0) { idx = idx + uniforms.axisDimLimit; } var inputIndices = ${B.type.indices}(outputIndices); ${B.indicesSet("inputIndices","uniforms.axis","u32(idx)")}; let value = ${B.getByIndices("inputIndices")}; ${d.setByOffset("global_idx","value")}; }`}},xw=A=>We({axis:A.axis}),Tw=(A,g)=>{let e=A.inputs;Sd(e),A.compute(Nd(A.inputs,g))}}),_d,Rd,Yw,Pw,Cy=jA(()=>{ye(),Ge(),Ke(),_d=A=>{if(!A)throw new Error("Input is missing");if(A.length<2||A.length>3)throw new Error("Invaid input number.");if(A.length===3&&A[2].dims.length>2)throw new Error("Invalid input shape of C");if(A[0].dataType!==A[1].dataType||A.length===3&&A[0].dataType!==A[2].dataType)throw new Error("Input types are mismatched")},Rd=(A,g)=>{let e=A[0].dims.slice(),I=A[1].dims.slice(),[i,t,s]=xh.getShapeOfGemmResult(e,g.transA,I,g.transB,A.length===3?A[2].dims:void 0),o=[i,t];if(!o)throw new Error("Can't use gemm on the given tensors");let C=16,r=Math.ceil(t/C),Q=Math.ceil(i/C),B=!0,a=FA.size(o),d=[{type:12,data:B?r:a},{type:12,data:i},{type:12,data:t},{type:12,data:s},{type:1,data:g.alpha},{type:1,data:g.beta}],c=["type","type"];A.length===3&&(d.push(...de(A[2].dims)),c.push("rank")),d.push(...de(o));let p=w=>{let u="";g.transA&&g.transB?u="value += a[k * uniforms.M + m] * b[n * uniforms.K + k];":g.transA&&!g.transB?u="value += a[k * uniforms.M + m] * b[k * uniforms.N + n];":!g.transA&&g.transB?u="value += a[m * uniforms.K + k] * b[n * uniforms.K + k];":!g.transA&&!g.transB&&(u="value += a[m * uniforms.K + k] * b[k * uniforms.N + n];");let _=g.alpha===1?"":"value *= uniforms.alpha;",y=UA("a",A[0].dataType,A[0].dims),M=UA("b",A[1].dataType,A[1].dims),F=y.type.value,m=null,G=[y,M];A.length===3&&(m=UA("c",A[2].dataType,A[2].dims.length),G.push(m));let T=ne("output",A[0].dataType,o.length);G.push(T);let J=[{name:"output_size",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"},{name:"alpha",type:"f32"},{name:"beta",type:"f32"}];return` ${w.registerUniforms(J).declareVariables(...G)} ${w.mainStart()} ${w.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let m = global_idx / uniforms.N; let n = global_idx % uniforms.N; var value = ${F}(0); for (var k: u32 = 0u; k < uniforms.K; k++) { ${u} } ${_} ${m!=null?`let cOffset = ${m.broadcastedIndicesToOffset("vec2(m, n)",T)}; value += ${F}(uniforms.beta) * ${m.getByOffset("cOffset")};`:""} output[global_idx] = value; }`},L=w=>{let u=UA("a",A[0].dataType,A[0].dims),_=UA("b",A[1].dataType,A[1].dims),y=null,M=[u,_];A.length===3&&(y=UA("c",A[2].dataType,A[2].dims.length),M.push(y));let F=ne("output",A[0].dataType,o.length);M.push(F);let m=[{name:"num_tile_n",type:"u32"},{name:"M",type:"u32"},{name:"N",type:"u32"},{name:"K",type:"u32"},{name:"alpha",type:"f32"},{name:"beta",type:"f32"}],G="",T="";g.transA&&g.transB?(T=` var col = tile_row_start + local_id.x; var row = k_start + local_id.y; if (col < uniforms.M && row < uniforms.K) { tile_a[local_id.y][local_id.x] = a[row * uniforms.M + col]; } else { tile_a[local_id.y][local_id.x] = ${u.type.value}(0); } col = k_start + local_id.x; row = tile_col_start + local_id.y; if (col < uniforms.K && row < uniforms.N) { tile_b[local_id.y][local_id.x] = b[row * uniforms.K + col]; } else { tile_b[local_id.y][local_id.x] = ${_.type.value}(0); } `,G="value += tile_a[k][local_id.y] * tile_b[local_id.x][k];"):g.transA&&!g.transB?(T=` var col = tile_row_start + local_id.x; var row = k_start + local_id.y; if (col < uniforms.M && row < uniforms.K) { tile_a[local_id.y][local_id.x] = a[row * uniforms.M + col]; } else { tile_a[local_id.y][local_id.x] = ${u.type.value}(0); } col = tile_col_start + local_id.x; row = k_start + local_id.y; if (col < uniforms.N && row < uniforms.K) { tile_b[local_id.y][local_id.x] = b[row * uniforms.N + col]; } else { tile_b[local_id.y][local_id.x] = ${_.type.value}(0); } `,G="value += tile_a[k][local_id.y] * tile_b[k][local_id.x];"):!g.transA&&g.transB?(T=` var col = k_start + local_id.x; var row = tile_row_start + local_id.y; if (col < uniforms.K && row < uniforms.M) { tile_a[local_id.y][local_id.x] = a[row * uniforms.K + col]; } else { tile_a[local_id.y][local_id.x] = ${u.type.value}(0); } col = k_start + local_id.x; row = tile_col_start + local_id.y; if (col < uniforms.K && row < uniforms.N) { tile_b[local_id.y][local_id.x] = b[row * uniforms.K + col]; } else { tile_b[local_id.y][local_id.x] = ${_.type.value}(0); } `,G="value += tile_a[local_id.y][k] * tile_b[local_id.x][k];"):!g.transA&&!g.transB&&(T=` var col = k_start + local_id.x; var row = tile_row_start + local_id.y; if (col < uniforms.K && row < uniforms.M) { tile_a[local_id.y][local_id.x] = a[row * uniforms.K + col]; } else { tile_a[local_id.y][local_id.x] = ${u.type.value}(0); } col = tile_col_start + local_id.x; row = k_start + local_id.y; if (col < uniforms.N && row < uniforms.K) { tile_b[local_id.y][local_id.x] = b[row * uniforms.N + col]; } else { tile_b[local_id.y][local_id.x] = ${_.type.value}(0); } `,G="value += tile_a[local_id.y][k] * tile_b[k][local_id.x];");let J=g.alpha===1?"":"value *= uniforms.alpha;";return` ${w.registerUniforms(m).declareVariables(...M)} var tile_a: array, ${C}>; var tile_b: array, ${C}>; ${w.mainStart([C,C,1])} let tile_col_start = (workgroup_index % uniforms.num_tile_n) * ${C}; let tile_row_start = (workgroup_index / uniforms.num_tile_n) * ${C}; let num_tiles = (uniforms.K - 1) / ${C} + 1; var k_start = 0u; var value = ${F.type.value}(0); for (var t: u32 = 0u; t < num_tiles; t++) { ${T} k_start = k_start + ${C}; workgroupBarrier(); for (var k: u32 = 0u; k < ${C}; k++) { ${G} } workgroupBarrier(); } ${J} let m = tile_row_start + local_id.y; let n = tile_col_start + local_id.x; ${y!=null?`let cOffset = ${y.broadcastedIndicesToOffset("vec2(m, n)",F)}; value += ${F.type.value}(uniforms.beta) * ${y.getByOffset("cOffset")};`:""} if (m < uniforms.M && n < uniforms.N) { output[m * uniforms.N + n] = value; } }`};return B?{name:"GemmShared",shaderCache:{hint:`${g.cacheKey}`,inputDependencies:c},getRunData:()=>({outputs:[{dims:o,dataType:A[0].dataType}],dispatchGroup:{x:r*Q},programUniforms:d}),getShaderSource:L}:{name:"Gemm",shaderCache:{hint:`${g.cacheKey}`,inputDependencies:c},getRunData:()=>({outputs:[{dims:o,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(a/64)},programUniforms:d}),getShaderSource:p}},Yw=A=>{let g=A.transA,e=A.transB,I=A.alpha,i=A.beta;return{transA:g,transB:e,alpha:I,beta:i,cacheKey:`${A.transA};${A.transB};${A.alpha===1}`}},Pw=(A,g)=>{_d(A.inputs),A.compute(Rd(A.inputs,g))}}),PI,OI,ci,di,Gd,kd,Ld,Kd,Ud,bd,Jd,xd,vw,Hw,ry=jA(()=>{ye(),Ge(),pg(),Ke(),[PI,OI,ci,di]=[0,1,2,3],Gd=A=>{if(A[0].dims.length!==4)throw new Error("only 4-D tensor is supported.");if(A[0].dims.length!==A[1].dims.length)throw new Error("input dimensions must be equal to grid dimensions");if(A[0].dims.length-2!==A[1].dims[A[1].dims.length-1])throw new Error(`last dimension of grid must be equal to ${A[0].dims.length-2}`);if(A[0].dims[0]!==A[1].dims[0])throw new Error("grid batch size must match input batch size")},kd=` fn gs_get_cubic_coeffs(x: f32) -> vec4 { let cubic_alpha = -0.75f; let x_abs = abs(x); var coeffs: vec4; coeffs[0] = (((cubic_alpha * (x_abs + 1) - 5 * cubic_alpha) * (x_abs + 1) + 8 * cubic_alpha) * (x_abs + 1) - 4 * cubic_alpha); coeffs[1] = (((cubic_alpha + 2) * x_abs - (cubic_alpha + 3)) * x_abs * x_abs + 1); coeffs[2] = (((cubic_alpha + 2) * (1 - x_abs) - (cubic_alpha + 3)) * (1 - x_abs) * (1 - x_abs) + 1); coeffs[3] = (((cubic_alpha * (2 - x_abs) - 5 * cubic_alpha) * (2 - x_abs) + 8 * cubic_alpha) * (2 - x_abs) - 4 * cubic_alpha); return coeffs; } `,Ld=A=>` fn gs_bicubic_interpolate(p: mat4x4<${A}>, x: f32, y: f32) -> ${A} { var v: vec4; var coeffs = gs_get_cubic_coeffs(x); for (var i = 0; i < 4; i++) { v[i] = coeffs[0] * p[i][0] + coeffs[1] * p[i][1] + coeffs[2] * p[i][2] + coeffs[3] * p[i][3]; } coeffs = gs_get_cubic_coeffs(y); let pixel = ${A}(coeffs[0] * v[0] + coeffs[1] * v[1] + coeffs[2] * v[2] + coeffs[3] * v[3]); return pixel; } `,Kd=A=>` fn gs_denormalize(n: f32, length: i32) -> f32 { ${A.alignCorners===0?` // alignCorners: false => [-1, 1] to [-0.5, length - 0.5] return ((n + 1.0) * f32(length) - 1.0) / 2.0; `:` // alignCorners: true => [-1, 1] to [0, length - 1] return (n + 1.0) / 2.0 * (f32(length - 1)); `} } `,Ud=A=>` ${A.paddingMode==="reflection"?` fn gs_reflect(x: i32, x_min: f32, x_max: f32) -> u32 { var dx = 0.0; var fx = f32(x); let range = x_max - x_min; if (fx < x_min) { dx = x_min - fx; let n = u32(dx / range); let r = dx - f32(n) * range; if (n % 2 == 0) { fx = x_min + r; } else { fx = x_max - r; } } else if (fx > x_max) { dx = fx - x_max; let n = u32(dx / range); let r = dx - f32(n) * range; if (n % 2 == 0) { fx = x_max - r; } else { fx = x_min + r; } } return u32(fx); }`:""} `,bd=(A,g,e)=>` fn pixel_at_grid(r: i32, c: i32, H: i32, W: i32, batch: u32, channel: u32, border: vec4) -> ${g} { var pixel = ${g}(0); var indices = vec4(0); indices[${PI}] = batch; indices[${OI}] = channel;`+(()=>{switch(e.paddingMode){case"zeros":return` if (r >= 0 && r < H && c >=0 && c < W) { indices[${ci}] = u32(r); indices[${di}] = u32(c); } else { return ${g}(0); } `;case"border":return` indices[${ci}] = u32(clamp(r, 0, H - 1)); indices[${di}] = u32(clamp(c, 0, W - 1)); `;case"reflection":return` indices[${ci}] = gs_reflect(r, border[1], border[3]); indices[${di}] = gs_reflect(c, border[0], border[2]); `;default:throw new Error(`padding mode ${e.paddingMode} is not supported`)}})()+` return ${A.getByIndices("indices")}; } `,Jd=(A,g,e)=>(()=>{switch(e.mode){case"nearest":return` let result = pixel_at_grid(i32(round(y)), i32(round(x)), H_in, W_in, indices[${PI}], indices[${OI}], border); `;case"bilinear":return` let x1 = i32(floor(x)); let y1 = i32(floor(y)); let x2 = x1 + 1; let y2 = y1 + 1; let p11 = pixel_at_grid(y1, x1, H_in, W_in, indices[${PI}], indices[${OI}], border); let p12 = pixel_at_grid(y1, x2, H_in, W_in, indices[${PI}], indices[${OI}], border); let p21 = pixel_at_grid(y2, x1, H_in, W_in, indices[${PI}], indices[${OI}], border); let p22 = pixel_at_grid(y2, x2, H_in, W_in, indices[${PI}], indices[${OI}], border); let dx2 = ${g}(f32(x2) - x); let dx1 = ${g}(x - f32(x1)); let dy2 = ${g}(f32(y2) - y); let dy1 = ${g}(y - f32(y1)); let result = dy2 * (dx2 * p11 + dx1 * p12) + dy1 * (dx2 * p21 + dx1 * p22); `;case"bicubic":return` let x0 = i32(floor(x)) - 1; let y0 = i32(floor(y)) - 1; var p: mat4x4<${g}>; for (var h = 0; h < 4; h++) { for (var w = 0; w < 4; w++) { p[h][w] = pixel_at_grid(h + y0, w + x0, H_in, W_in, indices[${PI}], indices[${OI}], border); } } let dx = x - f32(x0 + 1); let dy = y - f32(y0 + 1); let result = gs_bicubic_interpolate(p, dx, dy); `;default:throw new Error(`mode ${e.mode} is not supported`)}})()+`${A.setByOffset("global_idx","result")}`,xd=(A,g)=>{let e=UA("x",A[0].dataType,A[0].dims.length),I=[A[1].dims[0],A[1].dims[1],A[1].dims[2]],i=UA("grid",A[1].dataType,I.length,2),t=[A[0].dims[0],A[0].dims[1],A[1].dims[1],A[1].dims[2]];g.format==="NHWC"&&(t=[A[0].dims[0],A[1].dims[1],A[1].dims[2],A[0].dims[3]],[PI,OI,ci,di]=[0,3,1,2]);let s=ne("output",A[0].dataType,t.length),o=e.type.value,C=FA.size(t),r=[{type:12,data:C},...de(A[0].dims,I,t)],Q=B=>` ${B.registerUniform("output_size","u32").declareVariables(e,i,s)} ${kd} ${Ld(o)} ${Kd(g)} ${Ud(g)} ${bd(e,o,g)} ${B.mainStart()} ${B.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let H_in = i32(uniforms.x_shape[${ci}]); let W_in = i32(uniforms.x_shape[${di}]); ${g.alignCorners===0?` let x_min = -0.5; let x_max = f32(W_in) - 0.5; let y_min = -0.5; let y_max = f32(H_in) - 0.5; `:` let x_min = 0.0; let x_max = f32(W_in) - 1.0; let y_min = 0.0; let y_max = f32(H_in) - 1.0; `}; let border = vec4(x_min, y_min, x_max, y_max); let indices = ${s.offsetToIndices("global_idx")}; var grid_indices = vec3(indices[${PI}], indices[${ci}], indices[${di}]); let nxy = ${i.getByIndices("grid_indices")}; var x = gs_denormalize(f32(nxy[0]), W_in); var y = gs_denormalize(f32(nxy[1]), H_in); ${Jd(s,o,g)} }`;return{name:"GridSample",shaderCache:{hint:`${g.cacheKey}`,inputDependencies:["type","type"]},getRunData:B=>{let a=FA.size(t);return{outputs:[{dims:t,dataType:B[0].dataType}],dispatchGroup:{x:Math.ceil(a/64)},programUniforms:r}},getShaderSource:Q}},vw=(A,g)=>{Gd(A.inputs),A.compute(xd(A.inputs,g))},Hw=A=>We({alignCorners:A.align_corners,mode:A.mode,paddingMode:A.padding_mode,format:A.format})}),II,Td,qw,Qr,Yd,qt,Ow,Ww=jA(()=>{ye(),Ge(),pg(),Ba(),Ea(),Ke(),oi(),II=(A,g)=>A.length>g&&A[g].dims.length>0?A[g]:void 0,Td=(A,g)=>{let e=A[0],I=II(A,1),i=II(A,2),t=II(A,3),s=II(A,4),o=II(A,5),C=II(A,6),r=II(A,7);if(e.dims.length!==3&&e.dims.length!==5)throw new Error("Input query is expected to have 3 or 5 dimensions");let Q=e.dims[0],B=e.dims[1],a=e.dims.length===3?e.dims[2]:g.numHeads*e.dims[4],d=B,c=0,p=0,L=Math.floor(a/g.numHeads);if(C&&r&&FA.size(C.dims)&&FA.size(r.dims)){if(C.dims.length!==4)throw new Error('Input "past_key" is expected to have 4 dimensions');if(C.dims[0]!==Q||C.dims[1]!==g.numHeads||C.dims[3]!==L)throw new Error('Input "past_key" shape (batch_size, num_heads, past_sequence_length, head_size)');if(r.dims[0]!==Q||r.dims[1]!==g.numHeads||r.dims[3]!==L)throw new Error('Input "past_value" shape (batch_size, num_heads, past_sequence_length, head_size)');if(C.dims[2]!==r.dims[2])throw new Error('Input "past_key" and "past_value" shall have same dim 2 (past_sequence_length)');if(r.dims.length!==4)throw new Error('Input "past_value" is expected to have 4 dimensions');c=C.dims[2],p=C.dims[2]}else if(C&&FA.size(C.dims)||r&&FA.size(r.dims))throw new Error('Input "past_key" and "past_value" shall be both present or both absent');let w;if(I&&FA.size(I.dims)>0){if(e.dims.length!==3)throw new Error('Input "query" is expected to have 3 dimensions when key is given');if(I.dims.length<3||I.dims.length>5)throw new Error('Input "key" is expected to have 3, 4, or 5 dimensions');if(e.dims[0]!==I.dims[0])throw new Error('Input "query" and "key" shall have same dim 0 (batch size)');if(I.dims.length===3){if(I.dims[2]!==e.dims[2])throw new Error('Input "query" and "key" shall have same dim 2 (hidden_size)');w=2,d=I.dims[1]}else if(I.dims.length===5){if(I.dims[2]!==g.numHeads||I.dims[3]!==2||I.dims[4]!==L)throw new Error('Expect "key" shape (batch_size, kv_sequence_length, num_heads, 2, head_size) for packed kv');if(i)throw new Error('Expect "value" be none when "key" has packed kv format.');w=5,d=I.dims[1]}else{if(I.dims[1]!==g.numHeads||I.dims[3]!==L)throw new Error('Expect "key" shape (batch_size, num_heads, kv_sequence_length, head_size) for past_key');w=0,d=I.dims[2]}}else{if(e.dims.length!==5)throw new Error('Input "query" is expected to have 5 dimensions when key is empty');if(e.dims[2]!==g.numHeads||e.dims[3]!==3)throw new Error('Expect "query" shape (batch_size, kv_sequence_length, num_heads, 3, head_size) for packed kv');w=3}if(t&&FA.size(t.dims)>0){if(t.dims.length!==1)throw new Error('Input "bias" is expected to have 1 dimension');if(I&&I.dims.length===5&&I.dims[3]===2)throw new Error("bias is not allowed for packed kv.")}let u=c+d,_=0;if(s&&FA.size(s.dims)>0){_=8;let m=s.dims;throw m.length===1?m[0]===Q?_=1:m[0]===3*Q+2&&(_=3):m.length===2&&m[0]===Q&&m[1]===u&&(_=5),_===8?new Error('Input "key_padding_mask" shape shall be (batch_size) or (batch_size, total_sequence_length)'):new Error("Mask not supported")}let y=!1,M=a;if(i&&FA.size(i.dims)>0){if(i.dims.length!==3&&i.dims.length!==4)throw new Error('Input "value" is expected to have 3 or 4 dimensions');if(e.dims[0]!==i.dims[0])throw new Error('Input "query" and "value" shall have same dim 0 (batch_size)');if(i.dims.length===3){if(d!==i.dims[1])throw new Error('Input "key" and "value" shall have the same dim 1 (kv_sequence_length)');M=i.dims[2]}else{if(d!==i.dims[2])throw new Error('Input "key" and "value" shall have the same dim 2 (kv_sequence_length)');M=i.dims[1]*i.dims[3],y=!0}}let F=!1;if(s&&FA.size(s.dims)>0)throw new Error("Key padding mask is not supported");if(o&&FA.size(o.dims)>0){if(o.dims.length!==4)throw new Error('Input "attention_bias" is expected to have 4 dimensions');if(o.dims[0]!==Q||o.dims[1]!==g.numHeads||o.dims[2]!==B||o.dims[3]!==u)throw new Error('Expect "attention_bias" shape (batch_size, num_heads, sequence_length, total_sequence_length)')}return{batchSize:Q,sequenceLength:B,pastSequenceLength:c,kvSequenceLength:d,totalSequenceLength:u,maxSequenceLength:p,inputHiddenSize:0,hiddenSize:a,vHiddenSize:M,headSize:L,vHeadSize:Math.floor(M/g.numHeads),numHeads:g.numHeads,isUnidirectional:!1,pastPresentShareBuffer:!1,maskFilterValue:g.maskFilterValue,maskType:_,scale:g.scale,broadcastResPosBias:F,passPastInKv:y,qkvFormat:w}},qw=A=>We({...A}),Qr=We({perm:[0,2,1,3]}),Yd=(A,g,e,I,i,t,s)=>{let o=[I,i,t],C=FA.size(o),r=[{type:12,data:C},{type:12,data:s},{type:12,data:t}],Q=B=>{let a=ne("qkv_with_bias",g.dataType,o),d=UA("qkv",g.dataType,o),c=UA("bias",e.dataType,o),p=[{name:"output_size",type:"u32"},{name:"bias_offset",type:"u32"},{name:"hidden_size",type:"u32"}];return` ${B.registerUniforms(p).declareVariables(d,c,a)} ${B.mainStart()} ${B.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let bias_offset_idx = (global_idx % uniforms.hidden_size) + uniforms.bias_offset; qkv_with_bias[global_idx] = qkv[global_idx] + bias[bias_offset_idx]; }`};return A.compute({name:"MultiHeadAttentionAddBias",shaderCache:{inputDependencies:["type","type"]},getRunData:()=>({outputs:[{dims:o,dataType:g.dataType,gpuDataType:0}],dispatchGroup:{x:Math.ceil(C/64)},programUniforms:r}),getShaderSource:Q},{inputs:[g,e],outputs:[-1]})[0]},qt=(A,g,e,I,i,t,s,o)=>{let C=t;if(s&&FA.size(s.dims)>0){if(I===1)throw new Error("AddBiasReshape is not implemented. Please export your model with packed QKV or KV");return C=Yd(A,t,s,g,I,e*i,o),C=C.reshape([g,I,e,i]),e===1||I===1?C:A.compute(nI(C,Qr.perm),{inputs:[C],outputs:[-1]})[0]}else return t.dims.length===3&&(C=t.reshape([g,I,e,i])),e===1||I===1?C:A.compute(nI(C,Qr.perm),{inputs:[C],outputs:[-1]})[0]},Ow=(A,g)=>{let e=Td(A.inputs,g),I=A.inputs[0],i=II(A.inputs,1),t=II(A.inputs,2),s=II(A.inputs,3),o=II(A.inputs,4),C=II(A.inputs,5),r=II(A.inputs,6),Q=II(A.inputs,7);if(I.dims.length===5)throw new Error("Packed QKV is not implemented");if(i?.dims.length===5)throw new Error("Packed KV is not implemented");let B=i&&t&&i.dims.length===4&&t.dims.length===4,a=qt(A,e.batchSize,e.numHeads,e.sequenceLength,e.headSize,I,s,0);if(B)return Vt(A,a,i,t,o,void 0,r,Q,C,e);if(!i||!t)throw new Error("key and value must be provided");let d=qt(A,e.batchSize,e.numHeads,e.kvSequenceLength,e.headSize,i,s,e.hiddenSize),c=qt(A,e.batchSize,e.numHeads,e.kvSequenceLength,e.vHeadSize,t,s,2*e.hiddenSize);Vt(A,a,d,c,o,void 0,r,Q,C,e)}}),Pd,vd,Hd,qd,Vr,jw,Vw,zw=jA(()=>{ye(),Ge(),pg(),Ke(),Pd=A=>{if(!A||A.length<1)throw new Error("too few inputs")},vd=(A,g)=>{let e=[],I=g.numOutputs;return A[1].dims[0]>0&&(A[1].getBigInt64Array().forEach(i=>e.push(Number(i))),I=e.length),We({numOutputs:I,axis:g.axis,splitSizes:e})},Hd=A=>` fn calculateOutputIndex(index: u32) -> u32 { for (var i: u32 = 0u; i < ${A}u; i += 1u ) { if (index < ${le("uniforms.size_in_split_axis","i",A)}) { return i; } } return ${A}u; }`,qd=A=>{let g=A.length,e=[];for(let I=0;I{let e=A[0].dims,I=FA.size(e),i=A[0].dataType,t=FA.normalizeAxis(g.axis,e.length),s=new Array(g.numOutputs),o=UA("input",i,e.length),C=new Array(g.numOutputs),r=[],Q=[],B=0,a=[{type:12,data:I}];for(let c=0;c` ${c.registerUniform("input_size","u32").registerUniform("size_in_split_axis","u32",C.length).declareVariables(o,...s)} ${Hd(C.length)} ${qd(s)} ${c.mainStart()} ${c.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.input_size")} var indices = ${o.offsetToIndices("global_idx")}; var index = ${o.indicesGet("indices",t)}; let output_number = calculateOutputIndex(index); if (output_number != 0) { index -= ${le("uniforms.size_in_split_axis","output_number - 1u",C.length)}; ${o.indicesSet("indices",t,"index")}; } writeBufferData(output_number, indices, global_idx); }`;return{name:"Split",shaderCache:{hint:g.cacheKey,inputDependencies:["rank"]},getShaderSource:d,getRunData:()=>({outputs:r,dispatchGroup:{x:Math.ceil(I/64)},programUniforms:a})}},jw=(A,g)=>{Pd(A.inputs);let e=A.inputs.length===1?g:vd(A.inputs,g);A.compute(Vr(A.inputs,e),{inputs:[0]})},Vw=A=>{let g=A.axis,e=A.splitSizes,I=A.numOutputs<0?e.length:A.numOutputs;if(I!==e.length)throw new Error("numOutputs and splitSizes lengh must be equal");return We({axis:g,numOutputs:I,splitSizes:e})}}),Od,rs,$w,Zw=jA(()=>{ye(),Ge(),pg(),Ke(),Od=(A,g)=>{let[e,I,i,t]=A,{numHeads:s,rotaryEmbeddingDim:o}=g;if(e.dims.length!==3&&e.dims.length!==4)throw new Error(`Input 'x' is expected to have 3 or 4 dimensions, got ${e.dims.length}`);if(!FA.areEqual(I.dims,[])&&!FA.areEqual(I.dims,[1])&&I.dims.length!==2)throw new Error(`Input 'position_ids' is expected to have 0, 1, or 2 dimensions, got ${I.dims.length}`);if(i.dims.length!==2)throw new Error(`Input 'cos_cache' is expected to have 2 dimensions, got ${i.dims.length}`);if(t.dims.length!==2)throw new Error(`Input 'sin_cache' is expected to have 2 dimensions, got ${t.dims.length}`);if(!FA.areEqual(i.dims,t.dims))throw new Error("Inputs 'cos_cache' and 'sin_cache' are expected to have the same shape");if(o>0&&s===0)throw new Error("num_heads must be provided if rotary_embedding_dim is specified");let C=e.dims[0],r=e.dims[e.dims.length-2],Q=i.dims[0],B=FA.sizeFromDimension(e.dims,1)/r,a=o===0?i.dims[1]*2:B/s;if(o>a)throw new Error("rotary_embedding_dim must be less than or equal to head_size");if(I.dims.length===2){if(C!==I.dims[0])throw new Error(`Input 'position_ids' dimension 0 should be of size batch_size, got ${I.dims[0]}`);if(r!==I.dims[1])throw new Error(`Input 'position_ids' dimension 1 should be of size sequence_length, got ${I.dims[1]}`)}if(a/2!==i.dims[1]&&o/2!==i.dims[1])throw new Error(`Input 'cos_cache' dimension 1 should be same as head_size / 2 or rotary_embedding_dim / 2, got ${i.dims[1]}`);if(r>Q)throw new Error("Updating cos_cache and sin_cache in RotaryEmbedding is not currently supported")},rs=(A,g)=>{let{interleaved:e,numHeads:I,rotaryEmbeddingDim:i,scale:t}=g,s=A[0].dims[0],o=FA.sizeFromDimension(A[0].dims,1),C=A[0].dims[A[0].dims.length-2],r=o/C,Q=A[2].dims[1],B=i===0?Q*2:r/I,a=new Array(s,C,r/B,B-Q),d=FA.computeStrides(a),c=[{type:1,data:t},{type:12,data:a},{type:12,data:d},...A[0].dims.length===3?new Array({type:12,data:[o,r,B,1]}):[],...A[0].dims.length===4?new Array({type:12,data:[o,B,C*B,1]}):[],...de(A[0].dims,A[1].dims,A[2].dims,A[3].dims,A[0].dims)],p=L=>{let w=UA("input",A[0].dataType,A[0].dims.length),u=UA("position_ids",A[1].dataType,A[1].dims.length),_=UA("cos_cache",A[2].dataType,A[2].dims.length),y=UA("sin_cache",A[3].dataType,A[3].dims.length),M=ne("output",A[0].dataType,A[0].dims.length);return L.registerUniforms([{name:"scale",type:"f32"},{name:"global_shape",type:"u32",length:a.length},{name:"global_strides",type:"u32",length:d.length},{name:"input_output_strides",type:"u32",length:d.length}]),` ${L.declareVariables(w,u,_,y,M)} ${L.mainStart(et)} let half_rotary_emb_dim = uniforms.${_.name}_shape[1]; let bsnh = global_idx / uniforms.global_strides % uniforms.global_shape; let size = uniforms.global_shape[0] * uniforms.global_strides[0]; ${L.guardAgainstOutOfBoundsWorkgroupSizes("size")} if (bsnh[3] < half_rotary_emb_dim) { let position_ids_idx = ${u.broadcastedIndicesToOffset("bsnh.xy",ne("",u.type.tensor,2))}; let position_id = u32(${u.getByOffset("position_ids_idx")}) + select(0, bsnh[1], position_ids_idx == 0); let i = dot(bsnh, uniforms.input_output_strides) + select(0, bsnh[3], ${e}); let j = i + select(half_rotary_emb_dim, 1, ${e}); let re = ${w.getByOffset("i")} * ${_.get("position_id","bsnh[3]")} - ${w.getByOffset("j")} * ${y.get("position_id","bsnh[3]")}; ${M.setByOffset("i","re")} let im = ${w.getByOffset("i")} * ${y.get("position_id","bsnh[3]")} + ${w.getByOffset("j")} * ${_.get("position_id","bsnh[3]")}; ${M.setByOffset("j","im")} } else { let k = dot(bsnh, uniforms.input_output_strides) + half_rotary_emb_dim; ${M.setByOffset("k",w.getByOffset("k"))} } }`};return{name:"RotaryEmbedding",shaderCache:{hint:We({interleaved:e}).cacheKey,inputDependencies:["rank","rank","rank","rank"]},getShaderSource:p,getRunData:()=>({outputs:[{dims:A[0].dims,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(FA.size(a)/et)},programUniforms:c})}},$w=(A,g)=>{Od(A.inputs,g),A.compute(rs(A.inputs,g))}}),Wd,jd,nr,Vd,Xw,ay=jA(()=>{pg(),ye(),Ea(),Ww(),zw(),oi(),Zw(),Ke(),Wd=(A,g)=>{if(g.doRotary&&A.length<=7)throw new Error("cos_cache and sin_cache inputs are required if do_rotary is specified");let e=A[0],I=A[1],i=A[2],t=A[3],s=A[4];if(g.doRotary!==0&&A.length<=7)throw new Error("cos_cast and sin_cache are expected if do_rotary attribute is non-zero");if(g.localWindowSize!==-1)throw new Error("Local attention is not supported");if(g.softcap!==0)throw new Error("Softcap is not supported");if(g.rotaryInterleaved!==0)throw new Error("Rotary interleaved is not supported");if(g.smoothSoftmax)throw new Error("Smooth softmax is not supported");if(e.dims.length!==3&&e.dims.length!==5)throw new Error("Input query is expected to have 3 or 5 dimensions");let o=!1,C=e.dims[0],r=e.dims[1],Q=e.dims.length===3?o?e.dims[2]/3:e.dims[2]:g.numHeads*e.dims[4],B=r,a=0,d=!I||I.dims.length===0,c=Math.floor(d?Q/(g.numHeads+2*g.kvNumHeads):Q/g.numHeads);d&&(Q=c*g.numHeads);let p=t&&t.dims.length!==0,L=s&&s.dims.length!==0;if(p&&t.dims.length===4&&t.dims[0]===C&&t.dims[1]!==g.kvNumHeads&&t.dims[2]===g.kvNumHeads&&t.dims[3]===c)throw new Error("BSNH pastKey/pastValue is not supported");if(p&&L){if(t.dims.length!==4)throw new Error('Input "past_key" is expected to have 4 dimensions');if(s.dims.length!==4)throw new Error('Input "past_value" is expected to have 4 dimensions');a=t.dims[2]}else if(p||L)throw new Error('Input "past_key" and "past_value" shall be both present or both absent');let w=1;if(I&&I.dims.length>0){if(e.dims.length!==3)throw new Error('Input "query" is expected to have 3 dimensions when key is given');if(I.dims.length<3||I.dims.length>5)throw new Error('Input "key" is expected to have 3, 4, or 5 dimensions');if(e.dims[0]!==I.dims[0])throw new Error('Input "query" and "key" shall have same dim 0 (batch size)');if(I.dims.length===3){if(e.dims[2]%I.dims[2]!==0)throw new Error('Dimension 2 of "query" should be a multiple of "key"');B=I.dims[1]}else if(I.dims.length===5){if(I.dims[2]!==g.numHeads||I.dims[3]!==2||I.dims[4]!==c)throw new Error('Expect "key" shape (batch_size, kv_sequence_length, num_heads, 2, head_size) for packed kv');if(i)throw new Error('Expect "value" be none when "key" has packed kv format.');B=I.dims[1]}else{if(I.dims[1]!==g.numHeads||I.dims[3]!==c)throw new Error('Expect "key" shape (batch_size, num_heads, kv_sequence_length, head_size) for past_key');B=I.dims[2]}}else{if(e.dims.length!==3&&e.dims.length!==5)throw new Error('Input "query" is expected to have 3 or 5 dimensions when key is empty');if(e.dims.length===5&&(e.dims[2]!==g.numHeads||e.dims[3]!==3))throw new Error('Expect "query" shape (batch_size, kv_sequence_length, num_heads, 3, head_size) for packed kv');w=3}let u=0,_=!1,y=g.kvNumHeads?c*g.kvNumHeads:Q;if(i&&i.dims.length>0){if(i.dims.length!==3&&i.dims.length!==4)throw new Error('Input "value" is expected to have 3 or 4 dimensions');if(e.dims[0]!==i.dims[0])throw new Error('Input "query" and "value" shall have same dim 0 (batch_size)');if(i.dims.length===3){if(B!==i.dims[1])throw new Error('Input "key" and "value" shall have the same dim 1 (kv_sequence_length)');y=i.dims[2]}else{if(B!==i.dims[2])throw new Error('Input "past_key" and "past_value" shall have the same dim 2 (kv_sequence_length)');y=i.dims[1]*i.dims[3],_=!0}}let M=A.length>4?A[5]:void 0;if(M&&M.dims.length!==1&&M.dims[0]!==C)throw new Error('Input "seqlens" is expected to have 1 dimension and the same dim 0 as batch_size');return{batchSize:C,sequenceLength:r,pastSequenceLength:a,kvSequenceLength:B,totalSequenceLength:-1,maxSequenceLength:-1,inputHiddenSize:0,hiddenSize:Q,vHiddenSize:y,headSize:c,vHeadSize:Math.floor(y/g.kvNumHeads),numHeads:g.numHeads,kvNumHeads:g.kvNumHeads,nReps:g.numHeads/g.kvNumHeads,pastPresentShareBuffer:!1,maskType:u,scale:g.scale,broadcastResPosBias:!1,passPastInKv:_,qkvFormat:w}},jd=We({perm:[0,2,1,3]}),nr=(A,g,e)=>{let I=g,i=e.kvNumHeads;return g.dims.length===3&&e.kvSequenceLength!==0&&(I=g.reshape([e.batchSize,e.kvSequenceLength,i,e.headSize]),I=A.compute(nI(I,jd.perm),{inputs:[I],outputs:[-1]})[0]),I},Vd=(A,g,e,I)=>{let i=7,t=["type","type"],s=[A*g],o=A*g,C=[{type:12,data:o},{type:12,data:g},{type:12,data:A}],r=Q=>{let B=UA("seq_lens",e.dataType,e.dims),a=UA("total_seq_lens",I.dataType,I.dims),d=ne("pos_ids",i,s),c=[{name:"output_size",type:"u32"},{name:"sequence_length",type:"u32"},{name:"batch_size",type:"u32"}];return` ${Q.registerUniforms(c).declareVariables(B,a,d)} ${Q.mainStart()} ${Q.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let total_sequence_length = u32(${a.getByOffset("0")}); let is_subsequent_prompt = uniforms.sequence_length > 1 && uniforms.sequence_length != total_sequence_length; let is_first_prompt = !is_subsequent_prompt && uniforms.sequence_length == total_sequence_length; let batch_idx = global_idx / uniforms.sequence_length; let sequence_idx = i32(global_idx % uniforms.sequence_length); var pos_id: i32 = 0; let seqlen = ${B.getByOffset("batch_idx")}; let total_seqlen = seqlen + 1; if (is_first_prompt) { if (sequence_idx < total_seqlen) { pos_id = sequence_idx; } else { pos_id = 1; } ${d.setByOffset("global_idx","pos_id")} } else if (is_subsequent_prompt) { let past_seqlen = total_seqlen - i32(uniforms.sequence_length); if (past_seqlen + sequence_idx < total_seqlen) { pos_id = past_seqlen + sequence_idx; } else { pos_id = 1; } ${d.setByOffset("global_idx","pos_id")} } else if (global_idx < uniforms.batch_size) { ${d.setByOffset("global_idx","seqlen")} }; } `};return{name:"GeneratePositionIds",shaderCache:{hint:`${A};${g}`,inputDependencies:t},getRunData:()=>({outputs:[{dims:s,dataType:i}],dispatchGroup:{x:Math.ceil(o/64)},programUniforms:C}),getShaderSource:r}},Xw=(A,g)=>{let e=Wd(A.inputs,g);if(A.inputs[0].dims.length===5)throw new Error("Packed QKV is not implemented");if(A.inputs[1]?.dims.length===5)throw new Error("Packed KV is not implemented");let I=A.inputs[0],i=A.inputs[1]&&A.inputs[1].dims.length>0?A.inputs[1]:void 0,t=A.inputs[2]&&A.inputs[2].dims.length>0?A.inputs[2]:void 0,s=A.inputs[3]&&A.inputs[3].dims.length!==0?A.inputs[3]:void 0,o=A.inputs[4]&&A.inputs[4].dims.length!==0?A.inputs[4]:void 0,C=A.inputs.length>4?A.inputs[5]:void 0,r=A.inputs.length>5?A.inputs[6]:void 0,Q=e.kvNumHeads?e.kvNumHeads:e.numHeads,B=We({axis:2,numOutputs:3,splitSizes:[e.numHeads*e.headSize,Q*e.headSize,Q*e.headSize]}),[a,d,c]=!i&&!t?A.compute(Vr([I],B),{inputs:[I],outputs:[-1,-1,-1]}):[I,i,t],p,L;if(g.doRotary){let y=A.compute(Vd(e.batchSize,e.sequenceLength,C,r),{inputs:[C,r],outputs:[-1]})[0],M=A.inputs[7],F=A.inputs[8],m=We({interleaved:g.rotaryInterleaved!==0,numHeads:e.numHeads,rotaryEmbeddingDim:0,scale:g.scale}),G=[a,y,M,F],T=[-1];p=A.compute(rs(G,m),{inputs:G,outputs:T})[0],G.splice(0,1,d);let J=We({interleaved:g.rotaryInterleaved!==0,numHeads:e.kvNumHeads,rotaryEmbeddingDim:0,scale:g.scale});L=A.compute(rs(G,J),{inputs:G,outputs:T})[0]}let w=qt(A,e.batchSize,e.numHeads,e.sequenceLength,e.headSize,g.doRotary?p:a,void 0,0),u=nr(A,g.doRotary?L:d,e),_=nr(A,c,e);Vt(A,w,u,_,void 0,void 0,s,o,void 0,e,C,r)}}),Er,zd,$d,A0,By=jA(()=>{ye(),Ge(),oi(),Ke(),Er=(A,g,e,I,i,t,s,o)=>{let C=Dg(t),r=C===1?"f32":`vec${C}f`,Q=C===1?"vec2f":`mat2x${C}f`,B=i*s,a=64;B===1&&(a=256);let d=[i,s,t/C],c=[i,s,2],p=["rank","type","type"],L=[];L.push(...de(d,c));let w=u=>{let _=UA("x",g.dataType,3,C),y=UA("scale",e.dataType,e.dims),M=UA("bias",I.dataType,I.dims),F=ne("output",1,3,2),m=[_,y,M,F];return` var workgroup_shared : array<${Q}, ${a}>; const workgroup_size = ${a}u; ${u.declareVariables(...m)} ${u.mainStart(a)} let batch = workgroup_index / uniforms.x_shape[1]; let channel = workgroup_index % uniforms.x_shape[1]; let hight = uniforms.x_shape[2]; // initialize workgroup memory var sum = ${r}(0); var squared_sum = ${r}(0); for (var h = local_idx; h < hight; h += workgroup_size) { let value = ${r}(${_.get("batch","channel","h")}); sum += value; squared_sum += value * value; } workgroup_shared[local_idx] = ${Q}(sum, squared_sum); workgroupBarrier(); for (var currSize = workgroup_size >> 1; currSize > 0; currSize = currSize >> 1) { if (local_idx < currSize) { workgroup_shared[local_idx] = workgroup_shared[local_idx] + workgroup_shared[local_idx + currSize]; } workgroupBarrier(); } if (local_idx == 0) { let sum_final = ${ti("workgroup_shared[0][0]",C)} / f32(hight * ${C}); let squared_sum_final = ${ti("workgroup_shared[0][1]",C)} / f32(hight * ${C}); let inv_std_dev = inverseSqrt(squared_sum_final - sum_final * sum_final + f32(${o})); let channel_scale = inv_std_dev * f32(scale[channel]); let channel_shift = f32(bias[channel]) - sum_final * channel_scale; output[workgroup_index] = vec2f(channel_scale, channel_shift); } }`};return A.compute({name:"InstanceNormComputeChannelScaleShift",shaderCache:{hint:`${C};${o};${a}`,inputDependencies:p},getRunData:()=>({outputs:[{dims:c,dataType:1}],dispatchGroup:{x:B},programUniforms:L}),getShaderSource:w},{inputs:[g,e,I],outputs:[-1]})[0]},zd=(A,g,e)=>{let I=g[0].dims,i=I,t=2,s=I[0],o=I[1],C=FA.sizeFromDimension(I,t),r=Dg(C),Q=FA.size(i)/r,B=Er(A,g[0],g[1],g[2],s,C,o,e.epsilon),a=[s,o,C/r],d=[s,o],c=["type","none"],p=L=>{let w=UA("x",g[0].dataType,a.length,r),u=UA("scale_shift",1,d.length,2),_=ne("output",g[0].dataType,a.length,r),y=[w,u,_];return` ${L.registerUniform("output_size","u32").declareVariables(...y)} ${L.mainStart()} ${L.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let outputIndices = ${_.offsetToIndices("global_idx")}; let batch = outputIndices[0]; let channel = outputIndices[1]; let scale_shift = ${u.getByIndices("vec2(batch, channel)")}; let value = ${w.getByOffset("global_idx")} * ${_.type.value}(scale_shift.x) + ${_.type.value}(scale_shift.y); ${_.setByOffset("global_idx","value")}; }`};A.compute({name:"InstanceNormalization",shaderCache:{hint:`${r}`,inputDependencies:c},getRunData:()=>({outputs:[{dims:i,dataType:g[0].dataType}],dispatchGroup:{x:Math.ceil(Q/64)},programUniforms:[{type:12,data:Q},...de(a,d,a)]}),getShaderSource:p},{inputs:[g[0],B]})},$d=(A,g,e)=>{let I=g[0].dims,i=I,t=I[0],s=I[I.length-1],o=FA.sizeFromDimension(I,1)/s,C=Dg(s),r=FA.size(i)/C,Q=[{type:12,data:o},{type:12,data:Math.floor(s/C)}],B=["type","type"],a=!1,d=[0,I.length-1];for(let w=0;wI[d[u]])),p=Er(A,c,g[1],g[2],t,o,s,e.epsilon),L=w=>{let u=Hg(g[0].dataType),_=C===1?"vec2f":`mat${C}x2f`,y=m=>{let G=m===0?"x":"y",T=C===1?"f32":`vec${C}f`;switch(C){case 1:return`${u}(${T}(scale.${G}))`;case 2:return`vec2<${u}>(${T}(scale[0].${G}, scale[1].${G}))`;case 4:return`vec4<${u}>(${T}(scale[0].${G}, scale[1].${G}, scale[2].${G}, scale[3].${G}))`;default:throw new Error(`Not supported compoents ${C}`)}},M=UA("input",g[0].dataType,g[0].dims,C),F=ne("output",g[0].dataType,i,C);return` @group(0) @binding(0) var input : array<${M.type.storage}>; @group(0) @binding(1) var scale_input : array<${_}>; @group(0) @binding(2) var output : array<${F.type.storage}>; struct Uniforms {H: u32, C : u32}; @group(0) @binding(3) var uniforms: Uniforms; ${w.mainStart()} let current_image_number = global_idx / (uniforms.C * uniforms.H); let current_channel_number = global_idx % uniforms.C; let scale_offset = current_image_number * uniforms.C + current_channel_number; let scale = scale_input[scale_offset]; output[global_idx] = fma(input[global_idx], ${y(0)}, ${y(1)}); }`};A.compute({name:"InstanceNormalizationNHWC",shaderCache:{hint:`${C}`,inputDependencies:B},getRunData:()=>({outputs:[{dims:i,dataType:g[0].dataType}],dispatchGroup:{x:Math.ceil(r/64)},programUniforms:Q}),getShaderSource:L},{inputs:[g[0],p]})},A0=(A,g)=>{g.format==="NHWC"?$d(A,A.inputs,g):zd(A,A.inputs,g)}}),Zd,Xd,e0,Qy=jA(()=>{ye(),Ge(),Ke(),Zd=A=>{if(!A||A.length<2)throw new Error("layerNorm requires at least 2 inputs.")},Xd=(A,g,e)=>{let I=g.simplified,i=A[0].dims,t=A[1],s=!I&&A[2],o=i,C=FA.normalizeAxis(g.axis,i.length),r=FA.sizeToDimension(i,C),Q=FA.sizeFromDimension(i,C),B=FA.size(t.dims),a=s?FA.size(s.dims):0;if(B!==Q||s&&a!==Q)throw new Error(`Size of X.shape()[axis:] == ${Q}. Size of scale and bias (if provided) must match this. Got scale size of ${B} and bias size of ${a}`);let d=[];for(let M=0;M1,u=e>2,_=M=>{let F=Hg(A[0].dataType),m=[UA("x",A[0].dataType,A[0].dims,c),UA("scale",t.dataType,t.dims,c)];s&&m.push(UA("bias",s.dataType,s.dims,c)),m.push(ne("output",A[0].dataType,o,c)),w&&m.push(ne("mean_data_output",1,d)),u&&m.push(ne("inv_std_output",1,d));let G=[{name:"norm_count",type:"u32"},{name:"norm_size",type:"f32"},{name:"norm_size_vectorized",type:"u32"},{name:"epsilon",type:"f32"}];return` ${M.registerUniforms(G).declareVariables(...m)} ${M.mainStart()} ${M.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.norm_count")} let offset = global_idx * uniforms.norm_size_vectorized; var mean_vector = ${Tr("f32",c)}; var mean_square_vector = ${Tr("f32",c)}; for (var h: u32 = 0u; h < uniforms.norm_size_vectorized; h++) { let value = ${Xi(F,c,"x[h + offset]")}; mean_vector += value; mean_square_vector += value * value; } let mean = ${ti("mean_vector",c)} / uniforms.norm_size; let inv_std_dev = inverseSqrt(${ti("mean_square_vector",c)} / uniforms.norm_size ${I?"":"- mean * mean"} + uniforms.epsilon); for (var j: u32 = 0; j < uniforms.norm_size_vectorized; j++) { let f32input = ${Xi(F,c,"x[j + offset]")}; let f32scale = ${Xi(F,c,"scale[j]")}; output[j + offset] = ${m[0].type.value}((f32input ${I?"":"- mean"}) * inv_std_dev * f32scale ${s?`+ ${Xi(F,c,"bias[j]")}`:""} ); } ${w?"mean_data_output[global_idx] = mean":""}; ${u?"inv_std_output[global_idx] = inv_std_dev":""}; }`},y=[{dims:o,dataType:A[0].dataType}];return w&&y.push({dims:d,dataType:1}),u&&y.push({dims:d,dataType:1}),{name:"LayerNormalization",shaderCache:{hint:`${c};${e};${I}`,inputDependencies:p},getRunData:()=>({outputs:y,dispatchGroup:{x:Math.ceil(r/64)},programUniforms:L}),getShaderSource:_}},e0=(A,g)=>{Zd(A.inputs),A.compute(Xd(A.inputs,g,A.outputCount))}}),Au,g0,ny=jA(()=>{Ge(),ha(),Da(),Au=A=>{if(!A||A.length!==2)throw new Error("MatMul requires 2 inputs.");if(A[0].dims[A[0].dims.length-1]!==A[1].dims[A[1].dims.length-2])throw new Error("shared dimension does not match.")},g0=A=>{Au(A.inputs);let g=At.calcShape(A.inputs[0].dims,A.inputs[1].dims,!0);if(!g)throw new Error("Can't use matmul on the given tensors");let e=g[g.length-1],I=A.inputs[0].dims[A.inputs[0].dims.length-1];if(e<8&&I<8)A.compute(ua(A.inputs,{activation:""},g));else{let i=g[g.length-2],t=FA.size(A.inputs[0].dims.slice(0,-2)),s=FA.size(A.inputs[1].dims.slice(0,-2));if(t!==1&&i===1&&s===1){let o=A.inputs[0].reshape([1,t,I]),C=A.inputs[1].reshape([1,I,e]),r=[1,t,e],Q=[o,C];A.compute(Cs(Q,{activation:""},g,r),{inputs:Q})}else A.compute(Cs(A.inputs,{activation:""},g))}}}),eu,gu,Iu,I0,i0,Ey=jA(()=>{ye(),Ge(),pg(),Ke(),eu=(A,g)=>{if(A.length<3||A.length>4)throw new Error("MatMulNBits requires 3 or 4 inputs");let e=A[0],I=e.dims.length;if(e.dims[I-1]!==g.k)throw new Error("The last dim of input shape does not match the k value");let i=Math.floor((g.k+g.blockSize-1)/g.blockSize),t=g.blockSize/8*g.bits,s=A[1];if(!FA.areEqual(s.dims,[g.n,i,t]))throw new Error("The second inputs must be 3D tensor with shape N X nBlocksPerCol X blobSize");let o=A[2].dims;if(FA.size(o)!==g.n*i)throw new Error("scales input size error.");if(A.length===4){let C=A[3].dims,r=g.bits>4?g.n*i:g.n*Math.floor((i+1)/2);if(FA.size(C)!==r)throw new Error("zeroPoints input size error.")}},gu=(A,g)=>{let e=A[0].dims,I=e.length,i=e[I-2],t=g.k,s=g.n,o=e.slice(0,I-2),C=FA.size(o),r=A[1].dims[2]/4,Q=A[0].dataType,B=Dg(g.k),a=Dg(r),d=Dg(s),c=o.concat([i,s]),p=i>1&&s/d%2===0?2:1,L=FA.size(c)/d/p,w=64,u=[],_=[C,i,t/B],y=FA.convertShape(A[1].dims).slice();y.splice(-1,1,r/a),u.push(...de(_)),u.push(...de(y)),u.push(...de(A[2].dims)),A.length===4&&u.push(...de(FA.convertShape(A[3].dims)));let M=[C,i,s/d];u.push(...de(M));let F=m=>{let G=_.length,T=UA("a",A[0].dataType,G,B),J=UA("b",12,y.length,a),Z=UA("scales",A[2].dataType,A[2].dims.length),z=[T,J,Z],P=A.length===4?UA("zero_points",12,A[3].dims.length):void 0;P&&z.push(P);let tA=M.length,AA=ne("output",A[0].dataType,tA,d),iA=Hg(A[0].dataType),rA=(()=>{switch(B){case 1:return`array<${iA}, 8>`;case 2:return`mat4x2<${iA}>`;case 4:return`mat2x4<${iA}>`;default:throw new Error(`${B}-component is not supported.`)}})(),CA=()=>{let v=` // reuse a data var input_offset = ${T.indicesToOffset(`${T.type.indices}(batch, row, word_offset)`)}; var a_data: ${rA}; for (var j: u32 = 0; j < ${8/B}; j++) { a_data[j] = ${T.getByOffset("input_offset")}; input_offset++; } `;for(let x=0;x> 4) & b_mask); b_quantized_values = ${rA}(${Array.from({length:4},($,W)=>`${iA}(b_value_lower[${W}]), ${iA}(b_value_upper[${W}])`).join(", ")}); b_dequantized_values = ${B===1?`${rA}(${Array.from({length:8},($,W)=>`(b_quantized_values[${W}] - ${P?`zero_point${x}`:"zero_point"}) * scale${x}`).join(", ")});`:`(b_quantized_values - ${rA}(${Array(8).fill(`${P?`zero_point${x}`:"zero_point"}`).join(",")})) * scale${x};`}; workgroup_shared[local_id.x * ${p} + ${Math.floor(x/d)}]${d>1?`[${x%d}]`:""} += ${Array.from({length:8/B},($,W)=>`${B===1?`a_data[${W}] * b_dequantized_values[${W}]`:`dot(a_data[${W}], b_dequantized_values[${W}])`}`).join(" + ")}; `;return v},cA=()=>{let v=` var col_index = col * ${d}; ${P?` let zero_point_bytes_per_col = (nBlocksPerCol + 1) / 2; var zero_point_byte_count: u32; var zero_point_word_index: u32; var zero_point_byte_offset: u32; let zero_point_nibble_offset: u32 = block & 0x1u; var zero_point_bits_offset: u32; var zero_point_word: u32;`:` // The default zero point is 8 for unsigned 4-bit quantization. let zero_point = ${iA}(8);`} `;for(let x=0;x> 0x1u); zero_point_word_index = zero_point_byte_count >> 0x2u; zero_point_byte_offset = zero_point_byte_count & 0x3u; zero_point_bits_offset = (zero_point_byte_offset << 3) + (zero_point_nibble_offset << 2); zero_point_word = ${P.getByOffset("zero_point_word_index")} >> zero_point_bits_offset; let zero_point${x} = ${iA}((zero_point_word) & 0xFu);`:""} col_index += 1;`;return v},uA=()=>{let v=`col_index = col * ${d};`;for(let x=0;x; var b_value_upper: vec4; var b_quantized_values: ${rA}; var b_dequantized_values: ${rA};`,v};return` var workgroup_shared: array<${AA.type.value}, ${p*w}>; ${m.declareVariables(...z,AA)} ${m.mainStart([w,1,1])} let output_indices = ${AA.offsetToIndices(`(global_idx / ${w}) * ${p}`)}; let col = output_indices[2]; let row = output_indices[1]; let batch = output_indices[0]; let nBlocksPerCol = uniforms.b_shape[1]; for (var block = local_id.x; block < nBlocksPerCol; block += ${w}) { //process one block var word_offset: u32 = block * ${g.blockSize/B}; ${cA()} for (var word: u32 = 0; word < ${r}; word += ${a}) { ${uA()} for (var i: u32 = 0; i < ${a}; i++) { ${CA()} word_offset += ${8/B}; } } } workgroupBarrier(); if (local_id.x < ${p}) { var output_value: ${AA.type.value} = ${AA.type.value}(0); var workgroup_shared_offset: u32 = local_id.x; for (var b: u32 = 0u; b < ${w}u; b++) { output_value += workgroup_shared[workgroup_shared_offset]; workgroup_shared_offset += ${p}; } ${AA.setByIndices(`${AA.type.indices}(batch, row, col + local_id.x)`,"output_value")}; } }`};return{name:"MatMulNBits",shaderCache:{hint:`${g.blockSize};${g.bits};${B};${a};${d};${p};${w}`,inputDependencies:Array(A.length).fill("rank")},getRunData:()=>({outputs:[{dims:c,dataType:Q}],dispatchGroup:{x:L},programUniforms:u}),getShaderSource:F}},Iu=(A,g)=>{let e=A[0].dims,I=e.length,i=e[I-2],t=g.k,s=g.n,o=e.slice(0,I-2),C=FA.size(o),r=A[1].dims[2]/4,Q=A[0].dataType,B=Dg(g.k),a=Dg(r),d=o.concat([i,s]),c=128,p=s%8===0?8:s%4===0?4:1,L=c/p,w=L*a*8,u=w/B,_=w/g.blockSize,y=FA.size(d)/p,M=[],F=[C,i,t/B],m=FA.convertShape(A[1].dims).slice();m.splice(-1,1,r/a),M.push(...de(F)),M.push(...de(m)),M.push(...de(A[2].dims)),A.length===4&&M.push(...de(FA.convertShape(A[3].dims)));let G=[C,i,s];M.push(...de(G));let T=J=>{let Z=F.length,z=UA("a",A[0].dataType,Z,B),P=UA("b",12,m.length,a),tA=UA("scales",A[2].dataType,A[2].dims.length),AA=[z,P,tA],iA=A.length===4?UA("zero_points",12,A[3].dims.length):void 0;iA&&AA.push(iA);let rA=G.length,CA=ne("output",A[0].dataType,rA),cA=Hg(A[0].dataType),uA=()=>{switch(B){case 1:return` let a_data0 = vec4<${cA}>(sub_a[word_offset], sub_a[word_offset + 1], sub_a[word_offset + 2], sub_a[word_offset + 3]); let a_data1 = vec4<${cA}>(sub_a[word_offset + 4], sub_a[word_offset + 5], sub_a[word_offset + 6], sub_a[word_offset + 7]);`;case 2:return` let a_data0 = vec4<${cA}>(sub_a[word_offset], sub_a[word_offset + 1]); let a_data1 = vec4<${cA}>(sub_a[word_offset + 2], sub_a[word_offset + 3]);`;case 4:return` let a_data0 = sub_a[word_offset]; let a_data1 = sub_a[word_offset + 1];`;default:throw new Error(`${B}-component is not supported.`)}};return` var sub_a: array<${z.type.value}, ${u}>; var inter_results: array, ${p}>; ${J.declareVariables(...AA,CA)} ${J.mainStart([L,p,1])} let output_indices = ${CA.offsetToIndices(`workgroup_index * ${p}`)}; let col = output_indices[2]; let row = output_indices[1]; let batch = output_indices[0]; let n_blocks_per_col = uniforms.b_shape[1]; let num_tiles = (n_blocks_per_col - 1) / ${_} + 1; // Loop over shared dimension. for (var tile: u32 = 0; tile < num_tiles; tile += 1) { let a_col_start = tile * ${u}; // load one tile A data into shared memory. for (var a_offset = local_idx; a_offset < ${u}; a_offset += ${c}) { let a_col = a_col_start + a_offset; if (a_col < uniforms.a_shape[2]) { sub_a[a_offset] = ${z.getByIndices(`${z.type.indices}(batch, row, a_col)`)}; } else { sub_a[a_offset] = ${z.type.value}(0); } } workgroupBarrier(); // each thread process one block let b_row = col + local_id.y; let block = tile * ${_} + local_id.x; ${iA?` let zero_point_bytes_per_col = (n_blocks_per_col + 1) / 2; let zero_point_byte_count = b_row * zero_point_bytes_per_col + (block >> 0x1u); let zero_point_word_index = zero_point_byte_count >> 0x2u; let zero_point_byte_offset = zero_point_byte_count & 0x3u; let zero_point_nibble_offset: u32 = block & 0x1u; let zero_point_bits_offset = (zero_point_byte_offset << 3) + (zero_point_nibble_offset << 2); let zero_point_word = ${iA.getByOffset("zero_point_word_index")} >> zero_point_bits_offset; let zero_point = ${cA}((zero_point_word) & 0xFu);`:` // The default zero point is 8 for unsigned 4-bit quantization. let zero_point = ${cA}(8);`} let scale = ${tA.getByOffset("b_row * n_blocks_per_col + block")}; let b_data = ${P.getByIndices(`${P.type.indices}(b_row, block, 0)`)}; var word_offset = local_id.x * ${g.blockSize/B}; for (var i: u32 = 0; i < ${a}; i++) { ${uA()} let b_value = ${a===1?"b_data":"b_data[i]"}; let b_value_lower = unpack4xU8(b_value & 0x0F0F0F0Fu); let b_value_upper = unpack4xU8((b_value >> 4) & 0x0F0F0F0Fu); let b_quantized_values = mat2x4<${cA}>(${Array.from({length:4},(v,x)=>`${cA}(b_value_lower[${x}]), ${cA}(b_value_upper[${x}])`).join(", ")}); let b_dequantized_values = (b_quantized_values - mat2x4<${cA}>(${Array(8).fill("zero_point").join(",")})) * scale; inter_results[local_id.y][local_id.x] += ${Array.from({length:2},(v,x)=>`${`dot(a_data${x}, b_dequantized_values[${x}])`}`).join(" + ")}; word_offset += ${8/B}; } workgroupBarrier(); } if (local_idx < ${p}) { var output_value: ${CA.type.value} = ${CA.type.value}(0); for (var b = 0u; b < ${L}; b++) { output_value += inter_results[local_idx][b]; } if (col + local_idx < uniforms.output_shape[2]) { ${CA.setByIndices(`${CA.type.indices}(batch, row, col + local_idx)`,"output_value")} } } }`};return{name:"BlockwiseMatMulNBits32",shaderCache:{hint:`${g.blockSize};${B};${a};${L};${p}`,inputDependencies:Array(A.length).fill("rank")},getRunData:()=>({outputs:[{dims:d,dataType:Q}],dispatchGroup:{x:y},programUniforms:M}),getShaderSource:T}},I0=(A,g)=>{eu(A.inputs,g),g.blockSize===32&&A.adapterInfo.isVendor("intel")&&A.adapterInfo.isArchitecture("gen-12lp")?A.compute(Iu(A.inputs,g)):A.compute(gu(A.inputs,g))},i0=A=>We(A)}),iu,tu,ou,su,Cu,ru,au,Bu,t0,ly=jA(()=>{ye(),Ge(),Ke(),iu=A=>{if(!A||A.length<1)throw new Error("Too few inputs");if(A[0].dataType!==1&&A[0].dataType!==10)throw new Error("Input type must be float or float16.");if(A.length>=2){let g=A[0].dims.length*2===A[1].dims[0];if(A.length===4&&(g=A[3].dims[0]*2===A[1].dims[0]),!g)throw new Error("The pads should be a 1D tensor of shape [2 * input_rank] or [2 * num_axes].")}},tu=(A,g,e)=>{let I="";for(let i=g-1;i>=0;--i)I+=` k = i32(${A.indicesGet("indices",i)}) - ${le("uniforms.pads",i,e)}; if (k < 0) { break; } if (k >= i32(${le("uniforms.x_shape",i,g)})) { break; } offset += k * i32(${le("uniforms.x_strides",i,g)}); `;return` value = ${A.type.value}(uniforms.constant_value); for (var i = 0; i < 1; i++) { var offset = 0; var k = 0; ${I} value = x[offset]; } `},ou=(A,g,e)=>{let I="";for(let i=g-1;i>=0;--i)I+=` k = i32(${A.indicesGet("indices",i)}) - ${le("uniforms.pads",i,e)}; if (k < 0) { k = -k; } { let _2n_1 = 2 * (i32(${le("uniforms.x_shape",i,g)}) - 1); k = k % _2n_1; if(k >= i32(${le("uniforms.x_shape",i,g)})) { k = _2n_1 - k; } } offset += k * i32(${le("uniforms.x_strides",i,g)}); `;return` var offset = 0; var k = 0; ${I} value = x[offset]; `},su=(A,g,e)=>{let I="";for(let i=g-1;i>=0;--i)I+=` k = i32(${A.indicesGet("indices",i)}) - ${le("uniforms.pads",i,e)}; if (k < 0) { k = 0; } if (k >= i32(${le("uniforms.x_shape",i,g)})) { k = i32(${le("uniforms.x_shape",i,g)}) - 1; } offset += k * i32(${le("uniforms.x_strides",i,g)}); `;return` var offset = 0; var k = 0; ${I} value = x[offset]; `},Cu=(A,g,e)=>{let I="";for(let i=g-1;i>=0;--i)I+=` k = i32(${A.indicesGet("indices",i)}) - ${le("uniforms.pads",i,e)}; if (k < 0) { k += i32(${le("uniforms.x_shape",i,g)}]); } if (k >= i32(${le("uniforms.x_shape",i,g)})) { k -= i32(${le("uniforms.x_shape",i,g)}); } offset += k * i32(${le("uniforms.x_strides",i,g)}); `;return` var offset = 0; var k = 0; ${I} value = x[offset]; `},ru=(A,g,e)=>{switch(e.mode){case 0:return tu(A,g,e.pads.length);case 1:return ou(A,g,e.pads.length);case 2:return su(A,g,e.pads.length);case 3:return Cu(A,g,e.pads.length);default:throw new Error("Invalid mode")}},au=(A,g)=>{let e=FA.padShape(A[0].dims.slice(),g.pads),I=A[0].dims,i=FA.size(e),t=[{type:12,data:i},{type:6,data:g.pads}],s=A.length>=3&&A[2].data;g.mode===0&&t.push({type:s?A[2].dataType:1,data:g.value}),t.push(...de(A[0].dims,e));let o=["rank"],C=r=>{let Q=ne("output",A[0].dataType,e.length),B=UA("x",A[0].dataType,I.length),a=B.type.value,d=ru(Q,I.length,g),c=[{name:"output_size",type:"u32"},{name:"pads",type:"i32",length:g.pads.length}];return g.mode===0&&c.push({name:"constant_value",type:s?a:"f32"}),` ${r.registerUniforms(c).declareVariables(B,Q)} ${r.mainStart()} ${r.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let indices = ${Q.offsetToIndices("global_idx")}; var value = ${a}(0); ${d} output[global_idx] = value; }`};return{name:"Pad",shaderCache:{hint:`${g.mode}${s}`,inputDependencies:o},getRunData:()=>({outputs:[{dims:e,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(FA.size(e)/64)},programUniforms:t}),getShaderSource:C}},Bu=(A,g)=>{if(A.length>1){let e=A[1].getBigInt64Array(),I=A.length>=3&&A[2].data?A[2].dataType===10?A[2].getUint16Array()[0]:A[2].getFloat32Array()[0]:0,i=A[0].dims.length,t=new Int32Array(2*i).fill(0);if(A.length>=4){let o=A[3].getBigInt64Array();for(let C=0;Ct[Number(C)]=Number(o));let s=[];return t.forEach(o=>s.push(o)),{mode:g.mode,value:I,pads:s}}else return g},t0=(A,g)=>{iu(A.inputs);let e=Bu(A.inputs,g);A.compute(au(A.inputs,e),{inputs:[0]})}}),Jt,lr,cr,dr,ur,Qu,nu,hr,Dr,o0,s0,wr,C0,r0,pr,a0,B0,Q0,n0,cy=jA(()=>{JI(),ye(),Ge(),Ke(),Jt=A=>{if(Cg.webgpu.validateInputContent&&(!A||A.length!==1))throw new Error("Pool ops requires 1 input.")},lr=(A,g,e)=>{let I=g.format==="NHWC",i=A.dims.slice();I&&i.splice(1,0,i.pop());let t=Object.hasOwnProperty.call(g,"dilations"),s=g.kernelShape.slice(),o=g.strides.slice(),C=t?g.dilations.slice():[],r=g.pads.slice();os.adjustPoolAttributes(e,i,s,o,C,r);let Q=os.computePoolOutputShape(e,i,o,C,s,r,g.autoPad),B=Object.assign({},g);t?Object.assign(B,{kernelShape:s,strides:o,pads:r,dilations:C,cacheKey:g.cacheKey}):Object.assign(B,{kernelShape:s,strides:o,pads:r,cacheKey:g.cacheKey});let a=Q.slice();return a.push(a.splice(1,1)[0]),[B,I?a:Q]},cr=(A,g)=>{let e=g.format==="NHWC",I=FA.size(A),i=FA.size(g.kernelShape),t=[{type:12,data:I},{type:12,data:i}],s=[{name:"outputSize",type:"u32"},{name:"kernelSize",type:"u32"}];if(g.kernelShape.length<=2){let o=g.kernelShape[g.kernelShape.length-1],C=g.strides[g.strides.length-1],r=g.pads[g.pads.length/2-1],Q=g.pads[g.pads.length-1],B=!!(r+Q);t.push({type:12,data:o},{type:12,data:C},{type:12,data:r},{type:12,data:Q}),s.push({name:"kw",type:"u32"},{name:"sw",type:"u32"},{name:"pwStart",type:"u32"},{name:"pwEnd",type:"u32"});let a=!1;if(g.kernelShape.length===2){let d=g.kernelShape[g.kernelShape.length-2],c=g.strides[g.strides.length-2],p=g.pads[g.pads.length/2-2],L=g.pads[g.pads.length-2];a=!!(p+L),t.push({type:12,data:d},{type:12,data:c},{type:12,data:p},{type:12,data:L}),s.push({name:"kh",type:"u32"},{name:"sh",type:"u32"},{name:"phStart",type:"u32"},{name:"phEnd",type:"u32"})}return[t,s,!0,B,a]}else{if(e)throw new Error("Pooling with kernelShape.length > 2 is not supported for NHWC format.");let o=FA.computeStrides(g.kernelShape);t.push({type:12,data:o},{type:12,data:g.pads},{type:12,data:g.strides}),s.push({name:"kernelStrides",type:"u32",length:o.length},{name:"pads",type:"u32",length:g.pads.length},{name:"strides",type:"u32",length:g.strides.length});let C=g.pads.reduce((r,Q)=>r+Q);return[t,s,!!C,!1,!1]}},dr=(A,g,e,I,i,t,s,o,C,r,Q,B)=>{let a=i.format==="NHWC",d=g.type.value,c=ne("output",g.type.tensor,I);if(i.kernelShape.length<=2){let p="",L="",w="",u=e-(a?2:1);if(Q?p=` for (var i: u32 = 0u; i < uniforms.kw; i++) { xIndices[${u}] = indices[${u}] * uniforms.sw - uniforms.pwStart + i; if (xIndices[${u}] < 0 || xIndices[${u}] >= uniforms.x_shape[${u}]) { pad++; continue; } let x_val = x[${g.indicesToOffset("xIndices")}]; ${t} }`:p=` for (var i: u32 = 0u; i < uniforms.kw; i++) { xIndices[${u}] = indices[${u}] * uniforms.sw - uniforms.pwStart + i; let x_val = x[${g.indicesToOffset("xIndices")}]; ${t} }`,i.kernelShape.length===2){let _=e-(a?3:2);B?L=` for (var j: u32 = 0u; j < uniforms.kh; j++) { xIndices[${_}] = indices[${_}] * uniforms.sh - uniforms.phStart + j; if (xIndices[${_}] < 0 || xIndices[${_}] >= uniforms.x_shape[${_}]) { pad += i32(uniforms.kw); continue; } `:L=` for (var j: u32 = 0u; j < uniforms.kh; j++) { xIndices[${_}] = indices[${_}] * uniforms.sh - uniforms.phStart + j; `,w=` } `}return` ${A.registerUniforms(C).declareVariables(g,c)} ${A.mainStart()} ${A.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} let indices = ${c.offsetToIndices("global_idx")}; var xIndices = ${c.offsetToIndices("global_idx")}; var value = ${d}(${o}); var pad = 0; ${L} ${p} ${w} ${s} output[global_idx] = value; }`}else{if(a)throw new Error("Pooling with kernelShape.length > 2 is not supported for NHWC format.");let p=i.kernelShape.length,L=i.pads.length,w="";return r?w=` if (xIndices[j] >= uniforms.x_shape[j]) { pad++; isPad = true; break; } } if (!isPad) { let x_val = x[${g.indicesToOffset("xIndices")}]; ${t} }`:w=` } let x_val = x[${g.indicesToOffset("xIndices")}]; ${t} `,` ${A.registerUniforms(C).declareVariables(g,c)} ${A.mainStart()} ${A.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} let indices = ${c.offsetToIndices("global_idx")}; var xIndices = ${c.offsetToIndices("global_idx")}; var offsets: array; var value = ${d}(${o}); var pad = 0; var isPad = false; for (var i: u32 = 0u; i < uniforms.kernelSize; i++) { var offset = i; for (var j = 0u; j < ${p-1}u; j++) { offsets[j] = offset / ${le("uniforms.kernelStrides","j",p)}; offset -= offsets[j] * ${le("uniforms.kernelStrides","j",p)}; } offsets[${p-1}] = offset; isPad = false; for (var j = ${e-p}u; j < ${e}u; j++) { xIndices[j] = indices[j] * ${le("uniforms.strides",`j - ${e-p}u`,p)} + offsets[j - ${e-p}u] - ${le("uniforms.pads","j - 2u",L)}; ${w} } ${s} output[global_idx] = value; }`}},ur=A=>`${A.format};${A.ceilMode};${A.autoPad};${A.kernelShape.length}`,Qu=A=>`${ur(A)};${A.countIncludePad}`,nu=A=>`${ur(A)};${A.storageOrder};${A.dilations}`,hr=A=>({format:A.format,autoPad:["NOTSET","VALID","SAME_UPPER","SAME_LOWER"][A.auto_pad],ceilMode:A.ceil_mode,kernelShape:A.kernel_shape,strides:A.strides,pads:A.pads}),Dr=(A,g,e,I)=>{let[i,t]=lr(g,I,e),s=UA("x",g.dataType,g.dims.length),o=s.type.value,C="value += x_val;",r="";i.countIncludePad?r+=`value /= ${o}(uniforms.kernelSize);`:r+=`value /= ${o}(i32(uniforms.kernelSize) - pad);`;let[Q,B,a,d,c]=cr(t,i);Q.push(...de(g.dims,t));let p=["rank"];return{name:A,shaderCache:{hint:`${I.cacheKey};${a};${d};${c}`,inputDependencies:p},getRunData:()=>({outputs:[{dims:t,dataType:g.dataType}],dispatchGroup:{x:Math.ceil(FA.size(t)/64)},programUniforms:Q}),getShaderSource:L=>dr(L,s,g.dims.length,t.length,i,C,r,0,B,a,d,c)}},o0=A=>{let g=A.count_include_pad!==0,e=hr(A);if(e.ceilMode!==0)throw new Error("using ceil() in shape computation is not yet supported for AveragePool");let I={countIncludePad:g,...e,cacheKey:""};return{...I,cacheKey:Qu(I)}},s0=(A,g)=>{Jt(A.inputs),A.compute(Dr("AveragePool",A.inputs[0],!1,g))},wr={autoPad:"",ceilMode:0,countIncludePad:!1,kernelShape:[],strides:[],pads:[],storageOrder:0,dilations:[]},C0=A=>{let g=A.format;return{format:g,...wr,cacheKey:g}},r0=(A,g)=>{Jt(A.inputs),A.compute(Dr("GlobalAveragePool",A.inputs[0],!0,g))},pr=(A,g,e,I)=>{let[i,t]=lr(g,I,e),s=` value = max(x_val, value); `,o="",C=UA("x",g.dataType,g.dims.length),r=["rank"],[Q,B,a,d,c]=cr(t,i);return Q.push(...de(g.dims,t)),{name:A,shaderCache:{hint:`${I.cacheKey};${a};${d};${c}`,inputDependencies:r},getRunData:()=>({outputs:[{dims:t,dataType:g.dataType}],dispatchGroup:{x:Math.ceil(FA.size(t)/64)},programUniforms:Q}),getShaderSource:p=>dr(p,C,g.dims.length,t.length,i,s,o,g.dataType===10?-65504:-1e5,B,a,d,c)}},a0=(A,g)=>{Jt(A.inputs),A.compute(pr("MaxPool",A.inputs[0],!1,g))},B0=A=>{let g=A.storage_order,e=A.dilations,I=hr(A);if(g!==0)throw new Error("column major storage order is not yet supported for MaxPool");if(I.ceilMode!==0)throw new Error("using ceil() in shape computation is not yet supported for MaxPool");let i={storageOrder:g,dilations:e,...I,cacheKey:""};return{...i,cacheKey:nu(i)}},Q0=A=>{let g=A.format;return{format:g,...wr,cacheKey:g}},n0=(A,g)=>{Jt(A.inputs),A.compute(pr("GlobalMaxPool",A.inputs[0],!0,g))}}),Eu,lu,E0,l0,dy=jA(()=>{ye(),Ge(),pg(),Ke(),Eu=(A,g)=>{if(A.length<2||A.length>3)throw new Error("DequantizeLinear requires 2 or 3 inputs.");if(A.length===3&&A[1].dims===A[2].dims)throw new Error("x-scale and x-zero-point must have the same shape.");if(A.length===3&&A[0].dataType!==A[2].dataType)throw new Error("x and x-zero-point must have the same data type.");if(A[0].dataType===6&&A.length>2)throw new Error("In the case of dequantizing int32 there is no zero point.");if(A[1].dims.length!==0&&A[1].dims.length!==1&&A[1].dims.length!==A[0].dims.length)throw new Error("scale input must be a scalar, a 1D tensor, or have the same rank as the input tensor.");if(A.length>2){if(A[0].dataType!==A[2].dataType)throw new Error("x and x-zero-point must have the same data type.");if(A[1].dims.length!==A[2].dims.length)throw new Error("scale and zero-point inputs must have the same rank.");if(!A[1].dims.map((e,I)=>e===A[2].dims[I]).reduce((e,I)=>e&&I,!0))throw new Error("scale and zero-point inputs must have the same shape.")}if(g.blockSize>0){if(A[1].dims.length===0||A[1].dims.length===1&&A[1].dims[0]===1)throw new Error("blockSize must be set only for block quantization.");if(!A[1].dims.map((i,t)=>t===g.axis||i===A[0].dims[t]).reduce((i,t)=>i&&t,!0))throw new Error("For block qunatization, scale input shape to match the input shape except for the axis");if(A[1].dims.length!==A[0].dims.length)throw new Error("For block qunatization the scale input rank must be the same as the x rank.");let e=A[0].dims[g.axis],I=A[1].dims[g.axis];if(g.blockSizeMath.ceil(e/(I-1)-1))throw new Error("blockSize must be with in the range [ceil(dI / Si), ceil(dI / (Si - 1) - 1)].")}},lu=(A,g)=>{let e=FA.normalizeAxis(g.axis,A[0].dims.length),I=A[0].dataType,i=I===3,t=A[0].dims,s=A[1].dataType,o=FA.size(t),C=I===3||I===2,r=C?[Math.ceil(FA.size(A[0].dims)/4)]:A[0].dims,Q=A[1].dims,B=A.length>2?A[2]:void 0,a=B?C?[Math.ceil(FA.size(B.dims)/4)]:B.dims:void 0,d=Q.length===0||Q.length===1&&Q[0]===1,c=d===!1&&Q.length===1,p=Dg(o),L=d&&(!C||p===4),w=L?p:1,u=L&&!C?p:1,_=UA("input",C?12:I,r.length,u),y=UA("scale",s,Q.length),M=B?UA("zero_point",C?12:I,a.length):void 0,F=ne("output",s,t.length,w),m=[_,y];M&&m.push(M);let G=[r,Q];B&&G.push(a);let T=[{type:12,data:o/w},{type:12,data:e},{type:12,data:g.blockSize},...de(...G,t)],J=Z=>{let z=[{name:"output_size",type:"u32"},{name:"axis",type:"u32"},{name:"block_size",type:"u32"}];return` ${Z.registerUniforms(z).declareVariables(...m,F)} ${Z.mainStart()} ${Z.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let output_indices = ${F.offsetToIndices("global_idx")}; // Set input x ${C?` let input = ${_.getByOffset("global_idx / 4")}; let x_vec = ${i?"unpack4xI8(input)":"unpack4xU8(input)"}; let x_value = ${w===1?"x_vec[global_idx % 4]":"x_vec"};`:`let x_value = ${_.getByOffset("global_idx")};`}; // Set scale input ${d?`let scale_value= ${y.getByOffset("0")}`:c?` let scale_index = ${F.indicesGet("output_indices","uniforms.axis")}; let scale_value= ${y.getByOffset("scale_index")};`:` var scale_indices: ${y.type.indices} = output_indices; let index = ${y.indicesGet("scale_indices","uniforms.axis")} / uniforms.block_size; ${y.indicesSet("scale_indices","uniforms.axis","index")}; let scale_value= ${y.getByIndices("scale_indices")};`}; // Set zero-point input ${M?d?C?` let zero_point_input = ${M.getByOffset("0")}; let zero_point_vec = ${i?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"}; let zero_point_value= zero_point_vec[0]`:`let zero_point_value = ${M.getByOffset("0")}`:c?C?` let zero_point_index = ${F.indicesGet("output_indices","uniforms.axis")}; let zero_point_input = ${M.getByOffset("zero_point_index / 4")}; let zero_point_vec = ${i?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"}; let zero_point_value = zero_point_vec[zero_point_index % 4]`:` let zero_point_index = ${F.indicesGet("output_indices","uniforms.axis")}; let zero_point_value = ${M.getByOffset("zero_point_index")};`:C?` let zero_point_offset = ${y.indicesToOffset("scale_indices")}; let zero_point_input = ${M.getByOffset("zero_point_offset / 4")}; let zero_point_vec = ${i?"unpack4xI8(zero_point_input)":"unpack4xU8(zero_point_input)"}; let zero_point_value = zero_point_vec[zero_point_offset % 4];`:`let zero_point_value = ${M.getByIndices("scale_indices")};`:`let zero_point_value = ${C?i?"i32":"u32":_.type.value}(0);`}; // Compute and write output ${F.setByOffset("global_idx",`${F.type.value}(x_value - zero_point_value) * scale_value`)}; }`};return{name:"DequantizeLinear",shaderCache:{hint:g.cacheKey,inputDependencies:M?["rank","rank","rank"]:["rank","rank"]},getShaderSource:J,getRunData:()=>({outputs:[{dims:t,dataType:s}],dispatchGroup:{x:Math.ceil(o/w/64),y:1,z:1},programUniforms:T})}},E0=(A,g)=>{Eu(A.inputs,g),A.compute(lu(A.inputs,g))},l0=A=>We({axis:A.axis,blockSize:A.blockSize})}),cu,du,c0,uy=jA(()=>{JI(),ye(),Ke(),cu=(A,g,e)=>{let I=A===g,i=Ag&&e>0;if(I||i||t)throw new Error("Range these inputs' contents are invalid.")},du=(A,g,e,I)=>{let i=Math.abs(Math.ceil((g-A)/e)),t=[i],s=i,o=[{type:12,data:s},{type:I,data:A},{type:I,data:e},...de(t)],C=r=>{let Q=ne("output",I,t.length),B=Q.type.value,a=[{name:"outputSize",type:"u32"},{name:"start",type:B},{name:"delta",type:B}];return` ${r.registerUniforms(a).declareVariables(Q)} ${r.mainStart()} ${r.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} output[global_idx] = uniforms.start + ${B}(global_idx) * uniforms.delta; }`};return{name:"Range",shaderCache:{hint:`${I}`},getShaderSource:C,getRunData:()=>({outputs:[{dims:t,dataType:I}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:o})}},c0=A=>{let g=0,e=0,I=0;A.inputs[0].dataType===6?(g=A.inputs[0].getInt32Array()[0],e=A.inputs[1].getInt32Array()[0],I=A.inputs[2].getInt32Array()[0]):A.inputs[0].dataType===1&&(g=A.inputs[0].getFloat32Array()[0],e=A.inputs[1].getFloat32Array()[0],I=A.inputs[2].getFloat32Array()[0]),Cg.webgpu.validateInputContent&&cu(g,e,I),A.compute(du(g,e,I,A.inputs[0].dataType),{inputs:[]})}}),uu,fr,yr,hu,d0,u0,hy=jA(()=>{ye(),Ge(),pg(),Ke(),uu=(A,g,e,I)=>{if(A!=="none"&&I!=="i32"&&I!=="u32"&&I!=="f32")throw new Error(`Input ${I} is not supported with reduction ${A}.`);let i=`{ var oldValue = 0; loop { let newValueF32 =`,t=`; let newValue = bitcast(newValueF32); let res = atomicCompareExchangeWeak(&${g}, oldValue, newValue); if res.exchanged { break; } oldValue = res.old_value; } }`;switch(A){case"none":return`${g}=${e};`;case"add":return I==="i32"||I==="u32"?`atomicAdd(&${g}, bitcast<${I}>(${e}));`:` ${i}bitcast<${I}>(oldValue) + (${e})${t}`;case"max":return I==="i32"||I==="u32"?`atomicMax(&${g}, bitcast<${I}>(${e}));`:` ${i}max(bitcast(oldValue), (${e}))${t}`;case"min":return I==="i32"||I==="u32"?`atomicMin(&${g}, bitcast<${I}>(${e}));`:`${i}min(bitcast<${I}>(oldValue), (${e}))${t}`;case"mul":return`${i}(bitcast<${I}>(oldValue) * (${e}))${t}`;default:throw new Error(`Reduction ${A} is not supported.`)}},fr=(A,g)=>`${A===1?` let element_count_dim = uniforms.output_strides; let dim_value = uniforms.output_shape;`:` let element_count_dim = uniforms.output_strides[${g?"i - indices_start":"i"}]; let dim_value = uniforms.output_shape[${g?"i - indices_start":"i"} + uniforms.last_index_dimension];`} if (index >= 0) { if (index >= i32(dim_value)) { index = i32(dim_value - 1); } } else { if (index < -i32(dim_value)) { index = 0; } else { index += i32(dim_value); } } data_offset += u32((u32(index) * element_count_dim));`,yr=(A,g,e)=>`for (var i = 0u; i < uniforms.num_updates_elements; i++) { let value = updates[uniforms.num_updates_elements * ${e?"global_idx":"idx"} + i]; ${uu(A.reduction,"output[data_offset + i]","value",g)} }`,hu=(A,g)=>{let e=A[0].dims,I=A[1].dims,i=e,t=1,s=Math.ceil(FA.size(I)/t),o=I[I.length-1],C=FA.sizeFromDimension(e,o),r=FA.sizeFromDimension(I,0)/o,Q=[{type:12,data:s},{type:12,data:o},{type:12,data:C},...de(A[1].dims,A[2].dims,i)],B=a=>{let d=UA("indices",A[1].dataType,A[1].dims.length),c=UA("updates",A[2].dataType,A[2].dims.length,t),p=g.reduction!=="none"&&g.reduction!==""?Oh("output",A[0].dataType,i.length):ne("output",A[0].dataType,i.length,t);return` ${a.registerUniform("output_size","u32").registerUniform("last_index_dimension","u32").registerUniform("num_updates_elements","u32").declareVariables(d,c,p)} ${a.mainStart()} ${a.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} var hasDuplicates = false; if (${g.reduction==="none"}) { for (var i = 0; i < ${r}; i = i + 1) { for (var j = i + 1; j < ${r}; j = j + 1) { var index_i = i32(indices[i].x); var index_j = i32(indices[j].x); if (index_i == index_j) { hasDuplicates = true; break; } } if (hasDuplicates) { break; } } } if (${g.reduction==="none"} && hasDuplicates) { if (global_idx != 0u) { return; } // Process each index-update pair individually when duplicates exist for (var idx = 0u; idx < ${r}u; idx++) { var data_offset = 0u; for (var i = 0u; i < uniforms.last_index_dimension; i++) { var index = i32(indices[idx * uniforms.last_index_dimension + i].x); ${fr(e.length,!1)} } ${yr(g,p.type.value,!1)} } return; } var data_offset = 0u; var indices_start = uniforms.last_index_dimension * global_idx; var indices_end = indices_start + uniforms.last_index_dimension; for (var i = indices_start; i < indices_end; i++) { var index = i32(indices[i].x); ${fr(e.length,!0)} } ${yr(g,p.type.value,!0)} }`};return{name:"ScatterND",shaderCache:{hint:`${g.cacheKey}_${g.reduction}`,inputDependencies:["rank","rank"]},getRunData:()=>({outputs:[{dims:i,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(s/64)},programUniforms:Q}),getShaderSource:B}},d0=A=>We({reduction:A.reduction}),u0=(A,g)=>{A.compute(hu(A.inputs,g),{inputs:[A.inputs[1],A.inputs[2]],outputs:[]})}}),Du,wu,pu,mr,fu,yu,mu,Mu,Fu,Su,Nu,_u,Mr,Ru,Gu,ku,Lu,Ku,h0,D0,Dy=jA(()=>{ye(),Ge(),pg(),Ke(),Du=(A,g)=>{if(A.every(e=>e>0||(()=>{throw new Error("Resize requires scales input values to be positive")})),A.length>0){if(g.mode==="linear"){if(!(A.length===2||A.length===3||A.length===4&&A[0]===1&&A[1]===1||A.length===4&&A[0]===1&&A[3]===1||A.length===5&&A[0]===1&&A[1]===1))throw new Error(`For linear mode, Resize requires scales to be 2D, 3D, 4D with either two outermost or one innermost and one outermost scale values equal to 1, or 5D with two outermost scale values equal to 1`)}else if(g.mode==="cubic"&&!(A.length===2||A.length===4&&A[0]===1&&A[1]===1||A.length===4&&A[0]===1&&A[3]===1))throw new Error("Resize requires scales input size to be 2 or 4 for cubic mode")}},wu=(A,g,e)=>{g.every(i=>i>=0&&i{throw new Error("Resize requires axes input values to be positive and less than rank")}));let I=new Array(e).fill(1);return g.forEach((i,t)=>I[i]=A[t]),I},pu=(A,g,e,I,i,t)=>{let[s,o,C]=e>10?[1,2,3]:[-1,A.length>1?1:-1,-1],r=A[0].dims.length;if(s>0&&A.length>s&&A[s].dims.length>0)A[s].getFloat32Array().forEach(Q=>t.push(Q));else if(g.coordinateTransformMode==="tf_crop_and_resize")throw new Error("Resize requires RoI input to be specified when coordinateTransformMode is tfCropAndResize");if(o>0&&A.length>o&&A[o].dims.length===1&&A[o].dims[0]>0){if(A[o].getFloat32Array().forEach(Q=>I.push(Q)),I.length!==0&&I.length!==r&&e>=18&&I.length!==g.axes.length)throw new Error("Resize requires scales input size to be same as input rank or axes size for opset 18 and up");Du(I,g),g.axes.length>0&&wu(I,g.axes,r).forEach((Q,B)=>I[B]=Q)}if(C>0&&A.length>C&&A[C].dims.length===1&&A[C].dims[0]>0&&(A[C].getBigInt64Array().forEach(Q=>i.push(Number(Q))),i.length!==0&&i.length!==r&&e>=18&&i.length!==g.axes.length))throw new Error("Resize requires sizes input size to be same as input rank or axes size for opset 18 and up");if(g.axes.length>0){if(I.length!==0&&I.length!==g.axes.length)throw new Error('Resize requires "scales" input size to be of axes rank when axes attributes is specified');if(i.length!==0&&i.length!==g.axes.length)throw new Error('Resize requires "sizes" input size to be of rank axes rank when axes attributes is specified')}if(typeof I<"u"&&typeof i<"u"&&I.length>0&&i.length>r)throw new Error("Resize requires only of scales or sizes to be specified")},mr=(A,g,e,I)=>` // The whole part and the fractional part are calculated separately due to inaccuracy of floating // point division. As an example, f32(21) / f32(7) may evaluate to 2.99... instead of 3, causing an // offset-by-one error later in floor(). let big = (${A}) * (${g}); let whole = ${I}(big / (${e})); let fract = ${I}(big % (${e})) / ${I}(${e}); return whole + fract; `,fu=(A,g)=>`fn getOriginalCoordinateFromResizedCoordinate(xResized: u32, xScale: f32, lengthResized: u32, lengthOriginal: u32, roiStart: f32, roiEnd: f32) -> ${g} { `+(()=>{switch(A){case"asymmetric":return` if (xScale < 1.0 || floor(xScale) != xScale) { return ${g}(xResized) / ${g}(xScale); } else { ${mr("xResized","lengthOriginal","lengthResized",g)} } `;case"pytorch_half_pixel":return`if (lengthResized > 1) { return (${g}(xResized) + 0.5) / ${g}(xScale) - 0.5; } else { return 0.0; }`;case"tf_half_pixel_for_nn":return`return (${g}(xResized) + 0.5) / ${g}(xScale);`;case"align_corners":return`if (lengthResized == 1) { return 0.0; } else { ${mr("xResized","lengthOriginal - 1","lengthResized - 1",g)} }`;case"tf_crop_and_resize":return`if (lengthResized > 1) { return ${g}(roiStart) * ${g}(lengthOriginal - 1) + (${g}(xResized) * ${g}(roiEnd - roiStart) * ${g}(lengthOriginal - 1)) / ${g}(lengthResized - 1); } else { return 0.5 * ${g}(roiStart + roiEnd) * ${g}(lengthOriginal - 1); }`;case"half_pixel_symmetric":return`const outputWidth = ${g}xScale * ${g}(lengthResized); const adjustment = ${g}(lengthResized) / outputWidth; const center = ${g}(lengthOriginal) / 2; const offset = center * (1 - adjustment); return offset + ((${g}(xResized) + 0.5) / ${g}(xScale)) - 0.5;`;case"half_pixel":return`return ((${g}(xResized) + 0.5) / ${g}(xScale)) - 0.5;`;default:throw new Error(`Coordinate transform mode ${A} is not supported`)}})()+"}",yu=(A,g,e)=>`fn getNearestPixelFromOriginal(xOriginal: ${e}, isDownSample: bool) -> ${e} {`+(()=>{switch(A){case"round_prefer_ceil":return"if (fract(xOriginal) == 0.5) { return ceil(xOriginal); } else { return round(xOriginal); }";case"floor":return"return floor(xOriginal);";case"ceil":return"return ceil(xOriginal);";case"round_prefer_floor":return"if (fract(xOriginal) == 0.5) { return floor(xOriginal); } else { return round(xOriginal); }";case"simple":default:if(g<11)return"if (isDownSample) { return ceil(xOriginal); } else { return xOriginal; }";throw new Error(`Nearest mode ${A} is not supported`)}})()+"}",mu=(A,g,e)=>{let I=new Array(e).fill(0).concat(new Array(e).fill(1)),i=A.length===0?I:A.slice();return g.length>0?(g.forEach((t,s)=>{I[t]=i[s],I[s+e]=i[g.length+s]}),I):i},Mu=(A,g,e,I)=>{let i=[];if(e.length>0)if(I.length>0){if(A.forEach(t=>i.push(t)),Math.max(...I)>A.length)throw new Error("axes is out of bound");I.forEach((t,s)=>i[t]=e[s])}else e.forEach(t=>i.push(t));else{if(g.length===0)throw new Error("Resize requires either scales or sizes.");i=A.map((t,s)=>Math.round(t*g[s]))}return i},Fu=(A,g,e)=>{let I=(()=>{switch(e.keepAspectRatioPolicy){case"not_larger":return e.axes.length>0?Math.min(...e.axes.map(t=>g[t]),Number.MAX_VALUE):Math.min(...g,Number.MAX_VALUE);case"not_smaller":return e.axes.length>0?Math.max(...e.axes.map(t=>g[t]),Number.MIN_VALUE):Math.max(...g,Number.MIN_VALUE);default:throw new Error(`Keep aspect ratio policy ${e.keepAspectRatioPolicy} is not supported`)}})();g.fill(1,0,g.length);let i=A.slice();return e.axes.length>0?(e.axes.forEach(t=>g[t]=I),e.axes.forEach(t=>i[t]=Math.round(A[t]*g[t]))):(g.fill(I,0,g.length),i.forEach((t,s)=>i[s]=Math.round(t*g[s]))),i},Su=(A,g,e,I,i)=>` fn calculateOriginalIndicesFromOutputIndices(output_indices: ${A.type.indices}) -> array<${A.type.value}, ${e.length}> { var original_indices: array<${A.type.value}, ${e.length}>; for (var i:u32 = 0; i < ${e.length}; i++) { var output_index = ${A.indicesGet("output_indices","i")}; var scale = ${le("uniforms.scales","i",I)}; var roi_low = ${le("uniforms.roi","i",i)}; var roi_hi = ${le("uniforms.roi",`i + ${g.length}`,i)}; if (scale == 1.0) { original_indices[i] = ${A.type.value}(output_index); } else { var input_shape_i = ${le("uniforms.input_shape","i",g.length)}; var output_shape_i = ${le("uniforms.output_shape","i",e.length)}; original_indices[i] = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i, input_shape_i, roi_low, roi_hi); } } return original_indices; }`,Nu=(A,g,e,I,i,t,s)=>` fn calculateInputIndicesFromOutputIndices(output_indices: ${g.type.indices}) -> ${A.type.indices} { var input_indices: ${A.type.indices}; for (var i:u32 = 0; i < ${I.length}; i++) { var output_index = ${g.indicesGet("output_indices","i")}; var input_index: u32; var scale = ${le("uniforms.scales","i",i)}; if (scale == 1.0) { input_index = output_index; } else { var roi_low = ${le("uniforms.roi","i",t)}; var roi_hi = ${le("uniforms.roi",`i + ${e.length}`,t)}; var input_shape_i = ${le("uniforms.input_shape","i",e.length)}; var output_shape_i = ${le("uniforms.output_shape","i",I.length)}; var original_idx = getOriginalCoordinateFromResizedCoordinate(output_index, scale, output_shape_i, input_shape_i, roi_low, roi_hi); if (!${s} || (original_idx >= 0 && original_idx < ${g.type.value}(input_shape_i))) { if (original_idx < 0) { input_index = 0; } else if (original_idx > ${g.type.value}(input_shape_i - 1)) { input_index = input_shape_i - 1; } else { input_index = u32(getNearestPixelFromOriginal(original_idx, scale < 1)); } } else { input_index = u32(original_idx); } } ${A.indicesSet("input_indices","i","input_index")} } return input_indices; }`,_u=(A,g)=>` fn checkInputIndices(input_indices: ${A.type.indices}) -> bool { for (var i:u32 = 0; i < ${g.length}; i++) { var input_index = ${A.indicesGet("input_indices","i")}; if (input_index < 0 || input_index >= ${le("uniforms.input_shape","i",g.length)}) { return false; } } return true; }`,Mr=(A,g,e,I)=>A.rank>I?` ${A.indicesSet("input_indices",g,"channel")}; ${A.indicesSet("input_indices",e,"batch")}; `:"",Ru=(A,g,e,I,i)=>{let[t,s,o,C]=e.length===2?[-1,0,1,-1]:[0,2,3,1],r=A.type.value;return` fn getInputValue(batch: u32, channel: u32, row: u32, col: u32) -> ${r} { var input_indices: ${A.type.indices}; ${A.indicesSet("input_indices",s,`max(0, min(row, ${e[s]} - 1))`)}; ${A.indicesSet("input_indices",o,`max(0, min(col, ${e[o]} - 1))`)}; ${Mr(A,C,t,2)} return ${A.getByIndices("input_indices")}; } fn bilinearInterpolation(output_indices: ${g.type.indices}) -> ${r} { var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices); var row:${r} = originalIndices[${s}]; var col:${r} = originalIndices[${o}]; ${I?`if (row < 0 || row > (${e[s]} - 1) || col < 0 || col > (${e[o]} - 1)) { return ${i}; }`:""}; row = max(0, min(row, ${e[s]} - 1)); col = max(0, min(col, ${e[o]} - 1)); var row1: u32 = u32(row); var col1: u32 = u32(col); var row2: u32 = u32(row + 1); var col2: u32 = u32(col + 1); var channel: u32 = ${e.length>2?`u32(originalIndices[${C}])`:"0"}; var batch: u32 = ${e.length>2?`u32(originalIndices[${t}])`:"0"}; var x11: ${r} = getInputValue(batch, channel, row1, col1); var x12: ${r} = getInputValue(batch, channel, row1, col2); var x21: ${r} = getInputValue(batch, channel, row2, col1); var x22: ${r} = getInputValue(batch, channel, row2, col2); var dx1: ${r} = abs(row - ${r}(row1)); var dx2: ${r} = abs(${r}(row2) - row); var dy1: ${r} = abs(col - ${r}(col1)); var dy2: ${r} = abs(${r}(col2) - col); if (row1 == row2) { dx1 = 0.5; dx2 = 0.5; } if (col1 == col2) { dy1 = 0.5; dy2 = 0.5; } return (x11 * dx2 * dy2 + x12 * dx2 * dy1 + x21 * dx1 * dy2 + x22 * dx1 * dy1); }`},Gu=(A,g,e,I,i,t,s,o,C,r)=>{let Q=e.length===2,[B,a]=Q?[0,1]:[2,3],d=A.type.value,c=p=>{let L=p===B?"row":"col";return` fn ${L}CubicInterpolation(input_indices: ${A.type.indices}, output_indices: ${g.type.indices}) -> ${d} { var output_index = ${g.indicesGet("output_indices",p)}; var originalIdx: ${d} = getOriginalCoordinateFromResizedCoordinate(output_index, ${i[p]}, ${I[p]}, ${e[p]}, ${t[p]}, ${t[p]} + ${e.length}); var fractOriginalIdx: ${d} = originalIdx - floor(originalIdx); var coefs = getCubicInterpolationCoefs(fractOriginalIdx); if (${o} && (originalIdx < 0 || originalIdx > (${e[p]} - 1))) { return ${C}; } var data: array<${d}, 4> = array<${d}, 4>(0.0, 0.0, 0.0, 0.0); for (var i: i32 = -1; i < 3; i++) { var ${L}: ${d} = originalIdx + ${d}(i); if (${L} < 0 || ${L} >= ${e[p]}) { ${r?`coefs[i + 1] = 0.0; continue;`:o?`return ${C};`:`${L} = max(0, min(${L}, ${e[p]} - 1));`}; } var input_indices_copy: ${A.type.indices} = input_indices; ${A.indicesSet("input_indices_copy",p,`u32(${L})`)}; data[i + 1] = ${p===B?A.getByIndices("input_indices_copy"):"rowCubicInterpolation(input_indices_copy, output_indices)"}; } return cubicInterpolation1D(data, coefs); }`};return` ${c(B)}; ${c(a)}; fn getCubicInterpolationCoefs(s: ${d}) -> array<${d}, 4> { var absS = abs(s); var coeffs: array<${d}, 4> = array<${d}, 4>(0.0, 0.0, 0.0, 0.0); var oneMinusAbsS: ${d} = 1.0 - absS; var twoMinusAbsS: ${d} = 2.0 - absS; var onePlusAbsS: ${d} = 1.0 + absS; coeffs[0] = ((${s} * onePlusAbsS - 5 * ${s}) * onePlusAbsS + 8 * ${s}) * onePlusAbsS - 4 * ${s}; coeffs[1] = ((${s} + 2) * absS - (${s} + 3)) * absS * absS + 1; coeffs[2] = ((${s} + 2) * oneMinusAbsS - (${s} + 3)) * oneMinusAbsS * oneMinusAbsS + 1; coeffs[3] = ((${s} * twoMinusAbsS - 5 * ${s}) * twoMinusAbsS + 8 * ${s}) * twoMinusAbsS - 4 * ${s}; return coeffs; } fn cubicInterpolation1D(x: array<${d}, 4>, coefs: array<${d}, 4>) -> ${d} { var coefsSum: ${d} = coefs[0] + coefs[1] + coefs[2] + coefs[3]; return (x[0] * coefs[0] + x[1] * coefs[1]+ x[2] * coefs[2]+ x[3] * coefs[3]) / coefsSum; } fn bicubicInterpolation(output_indices: ${g.type.indices}) -> ${d} { var input_indices: ${A.type.indices} = output_indices; return colCubicInterpolation(input_indices, output_indices); } `},ku=(A,g,e,I,i)=>{let[t,s,o,C,r]=e.length===3?[-1,0,1,2,-1]:[0,2,3,4,1],Q=A.type.value;return` fn getInputValue(batch: u32, channel: u32, depth:u32, height: u32, width: u32) -> ${Q} { var input_indices: ${A.type.indices}; ${A.indicesSet("input_indices",s,`max(0, min(depth, ${e[s]} - 1))`)}; ${A.indicesSet("input_indices",o,`max(0, min(height, ${e[o]} - 1))`)}; ${A.indicesSet("input_indices",C,`max(0, min(width, ${e[C]} - 1))`)}; ${Mr(A,r,t,3)} return ${A.getByIndices("input_indices")}; } fn trilinearInterpolation(output_indices: ${g.type.indices}) -> ${Q} { var originalIndices = calculateOriginalIndicesFromOutputIndices(output_indices); var depth:${Q} = originalIndices[${s}]; var height:${Q} = originalIndices[${o}]; var width:${Q} = originalIndices[${C}]; ${I?`if (depth < 0 || depth > (${e[s]} - 1) || height < 0 || height > (${e[o]} - 1) || width < 0 || (width > ${e[C]} - 1)) { return ${i}; }`:""}; depth = max(0, min(depth, ${e[s]} - 1)); height = max(0, min(height, ${e[o]} - 1)); width = max(0, min(width, ${e[C]} - 1)); var depth1: u32 = u32(depth); var height1: u32 = u32(height); var width1: u32 = u32(width); var depth2: u32 = u32(depth + 1); var height2: u32 = u32(height + 1); var width2: u32 = u32(width + 1); var channel: u32 = ${e.length>3?`u32(originalIndices[${r}])`:"0"}; var batch: u32 = ${e.length>3?`u32(originalIndices[${t}])`:"0"}; var x111: ${Q} = getInputValue(batch, channel, depth1, height1, width1); var x112: ${Q} = getInputValue(batch, channel, depth1, height1, width2); var x121: ${Q} = getInputValue(batch, channel, depth1, height2, width1); var x122: ${Q} = getInputValue(batch, channel, depth1, height2, width2); var x211: ${Q} = getInputValue(batch, channel, depth2, height1, width1); var x212: ${Q} = getInputValue(batch, channel, depth2, height1, width2); var x221: ${Q} = getInputValue(batch, channel, depth2, height2, width1); var x222: ${Q} = getInputValue(batch, channel, depth2, height2, width2); var dx1: ${Q} = abs(depth - ${Q}(depth1)); var dx2: ${Q} = abs(${Q}(depth2) - depth); var dy1: ${Q} = abs(height - ${Q}(height1)); var dy2: ${Q} = abs(${Q}(height2) - height); var dz1: ${Q} = abs(width - ${Q}(width1)); var dz2: ${Q} = abs(${Q}(width2) - width); if (depth1 == depth2) { dx1 = 0.5; dx2 = 0.5; } if (height1 == height2) { dy1 = 0.5; dy2 = 0.5; } if (width1 == width2) { dz1 = 0.5; dz2 = 0.5; } return (x111 * dx2 * dy2 * dz2 + x112 * dx2 * dy2 * dz1 + x121 * dx2 * dy1 *dz2 + x122 * dx2 * dy1 * dz1 + x211 * dx1 * dy2 * dz2 + x212 * dx1 * dy2 * dz1 + x221 * dx1 * dy1 *dz2 + x222 * dx1 * dy1 * dz1); }`},Lu=(A,g,e,I,i,t)=>{let s=A.dims,o=mu(t,g.axes,s.length),C=Mu(s,I,i,g.axes),r=I.slice();I.length===0&&(r=s.map((u,_)=>u===0?1:C[_]/u),g.keepAspectRatioPolicy!=="stretch"&&(C=Fu(s,r,g)));let Q=ne("output",A.dataType,C.length),B=UA("input",A.dataType,s.length),a=FA.size(C),d=s.length===C.length&&s.every((u,_)=>u===C[_]),c=g.coordinateTransformMode==="tf_crop_and_resize",p=g.extrapolationValue,L=B.type.value,w=u=>` ${d?"":` ${fu(g.coordinateTransformMode,L)}; ${(()=>{switch(g.mode){case"nearest":return` ${_u(B,s)}; ${yu(g.nearestMode,e,L)}; ${Nu(B,Q,s,C,r.length,o.length,c)}; `;case"linear":return` ${Su(Q,s,C,r.length,o.length)}; ${(()=>{if(s.length===2||s.length===4)return`${Ru(B,Q,s,c,p)}`;if(s.length===3||s.length===5)return`${ku(B,Q,s,c,p)}`;throw Error("Linear mode only supports input dims 2, 3, 4 and 5 are supported in linear mode.")})()}; `;case"cubic":return` ${(()=>{if(s.length===2||s.length===4)return`${Gu(B,Q,s,C,r,o,g.cubicCoeffA,c,g.extrapolationValue,g.excludeOutside)}`;throw Error("Cubic mode only supports input dims 2 and 4 are supported in linear mode.")})()}; `;default:throw Error("Invalid resize mode")}})()}; `} ${u.registerUniform("output_size","u32").registerUniform("scales","f32",r.length).registerUniform("roi","f32",o.length).declareVariables(B,Q)} ${u.mainStart()} ${u.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} ${d?"output[global_idx] = input[global_idx];":` let output_indices = ${Q.offsetToIndices("global_idx")}; var input_indices: ${B.type.indices}; ${(()=>{switch(g.mode){case"nearest":return`input_indices = calculateInputIndicesFromOutputIndices(output_indices); if (checkInputIndices(input_indices)) { output[global_idx] = ${B.getByIndices("input_indices")}; } else { output[global_idx] = ${g.extrapolationValue}; }`;case"linear":return`output[global_idx] = ${s.length===2||s.length===4?"bilinearInterpolation":"trilinearInterpolation"}(output_indices);`;case"cubic":return"output[global_idx] = bicubicInterpolation(output_indices);";default:throw Error(`Unsupported resize mode: ${g.mode}`)}})()}; `} }`;return{name:"Resize",shaderCache:{hint:`${g.cacheKey}|${e}|${r.length>0?g.mode==="cubic"?r:r.length:""}|${i.length>0?i:""}|${o.length>0?o:""}|${d}|${g.mode==="nearest"?s.length:s}`,inputDependencies:["rank"]},getShaderSource:w,getRunData:()=>({outputs:[{dims:C,dataType:A.dataType}],dispatchGroup:{x:Math.ceil(a/64)},programUniforms:[{type:12,data:a},{type:1,data:r},{type:1,data:o},...de(s,C)]})}},Ku=A=>{let g=A.customDataBuffer;return new Uint32Array(g,g.byteOffset,1)[0]},h0=(A,g)=>{let e=[],I=[],i=[],t=Ku(A);if(g.antialias!==0)throw Error("Only default value (0) for Antialias attribute is supported");pu(A.inputs,g,t,e,I,i),A.compute(Lu(A.inputs[0],g,t,e,I,i),{inputs:[0]})},D0=A=>{let g=A.antialias,e=A.axes,I=A.coordinateTransformMode,i=A.cubicCoeffA,t=A.excludeOutside!==0,s=A.extrapolationValue,o=A.keepAspectRatioPolicy,C=A.mode,r=A.nearestMode===""?"simple":A.nearestMode;return We({antialias:g,axes:e,coordinateTransformMode:I,cubicCoeffA:i,excludeOutside:t,extrapolationValue:s,keepAspectRatioPolicy:o,mode:C,nearestMode:r})}}),Uu,bu,w0,wy=jA(()=>{ye(),Ge(),Ke(),Uu=A=>{if(!A||A.length<3)throw new Error("layerNorm requires at least 3 inputs.");let g=A[0],e=A[1],I=A[2];if(g.dataType!==e.dataType||g.dataType!==I.dataType)throw new Error("All inputs must have the same data type");if(g.dims.length!==3&&g.dims.length!==2)throw new Error("Input must be 2D or 3D");if(e.dims.length!==3&&e.dims.length!==2)throw new Error("Skip must be 2D or 3D");let i=g.dims[g.dims.length-1],t=g.dims[g.dims.length-2];if(e.dims[e.dims.length-1]!==i)throw new Error("Skip must have the same hidden size as input");if(e.dims[e.dims.length-2]!==t)throw new Error("Skip must have the same sequence length as input");if(I.dims.length!==1)throw new Error("Gamma must be 1D");if(I.dims[I.dims.length-1]!==i)throw new Error("Gamma must have the same hidden size as input");if(A.length>3){let s=A[3];if(s.dims.length!==1)throw new Error("Beta must be 1D");if(s.dims[s.dims.length-1]!==i)throw new Error("Beta must have the same hidden size as input")}if(A.length>4){let s=A[4];if(s.dims.length!==1)throw new Error("Bias must be 1D");if(s.dims[s.dims.length-1]!==i)throw new Error("Bias must have the same hidden size as input")}},bu=(A,g,e,I)=>{let i=g.simplified,t=A[0].dims,s=FA.size(t),o=t,C=s,r=t.slice(-1)[0],Q=I?t.slice(0,-1).concat(1):[],B=!i&&A.length>3,a=A.length>4,d=I&&e>1,c=I&&e>2,p=e>3,L=64,w=Dg(r),u=[{type:12,data:C},{type:12,data:w},{type:12,data:r},{type:1,data:g.epsilon}],_=M=>{let F=[{name:"output_size",type:"u32"},{name:"components",type:"u32"},{name:"hidden_size",type:"u32"},{name:"epsilon",type:"f32"}],m=[UA("x",A[0].dataType,A[0].dims,w),UA("skip",A[1].dataType,A[1].dims,w),UA("gamma",A[2].dataType,A[2].dims,w)];B&&m.push(UA("beta",A[3].dataType,A[3].dims,w)),a&&m.push(UA("bias",A[4].dataType,A[4].dims,w)),m.push(ne("output",A[0].dataType,o,w)),d&&m.push(ne("mean_output",1,Q)),c&&m.push(ne("inv_std_output",1,Q)),p&&m.push(ne("input_skip_bias_sum",A[0].dataType,o,w));let G=Hg(A[0].dataType),T=Hg(1,w);return` ${M.registerUniforms(F).declareVariables(...m)} var sum_shared : array<${T}, ${L}>; var sum_squared_shared : array<${T}, ${L}>; ${M.mainStart([L,1,1])} let ix = local_id.x; let iy = global_id.x / ${L}; let hidden_size_vectorized: u32 = uniforms.hidden_size / uniforms.components; var stride = hidden_size_vectorized / ${L}; let offset = ix * stride + iy * hidden_size_vectorized; let offset1d = stride * ix; if (ix == ${L-1}) { stride = hidden_size_vectorized - stride * ix; } for (var i: u32 = 0; i < stride; i++) { let skip_value = skip[offset + i]; let bias_value = ${a?"bias[offset1d + i]":G+"(0.0)"}; let input_value = x[offset + i]; let value = input_value + skip_value + bias_value; ${p?"input_skip_bias_sum[offset + i] = value;":""} output[offset + i] = value; let f32_value = ${Xi(G,w,"value")}; sum_shared[ix] += f32_value; sum_squared_shared[ix] += f32_value * f32_value; } workgroupBarrier(); var reduce_size : u32 = ${L}; for (var curr_size = reduce_size >> 1; curr_size > 0; curr_size = reduce_size >> 1) { reduce_size = curr_size + (reduce_size & 1); if (ix < curr_size) { sum_shared[ix] += sum_shared[ix + reduce_size]; sum_squared_shared[ix] += sum_squared_shared[ix + reduce_size]; } workgroupBarrier(); } let sum = sum_shared[0]; let square_sum = sum_squared_shared[0]; let mean = ${ti("sum",w)} / f32(uniforms.hidden_size); let inv_std_dev = inverseSqrt(${ti("square_sum",w)} / f32(uniforms.hidden_size) ${i?"":"- mean * mean"} + uniforms.epsilon); ${d?"mean_output[global_idx] = mean;":""} ${c?"inv_std_output[global_idx] = inv_std_dev;":""} for (var i: u32 = 0; i < stride; i++) { output[offset + i] = (output[offset + i] ${i?"":`- ${G}(mean)`}) * ${G}(inv_std_dev) * gamma[offset1d + i] ${B?"+ beta[offset1d + i]":""}; } }`},y=[{dims:o,dataType:A[0].dataType}];return e>1&&y.push({dims:Q,dataType:1}),e>2&&y.push({dims:Q,dataType:1}),e>3&&y.push({dims:t,dataType:A[0].dataType}),{name:"SkipLayerNormalization",shaderCache:{hint:`${w};${d};${c};${p}`,inputDependencies:A.map((M,F)=>"type")},getShaderSource:_,getRunData:()=>({outputs:y,dispatchGroup:{x:Math.ceil(C/r)},programUniforms:u})}},w0=(A,g)=>{Uu(A.inputs);let e=[0];A.outputCount>1&&e.push(-3),A.outputCount>2&&e.push(-3),A.outputCount>3&&e.push(3),A.compute(bu(A.inputs,g,A.outputCount,!1),{outputs:e})}}),Ju,xt,xu,Fr,Tu,Yu,p0,f0,py=jA(()=>{ye(),Ge(),pg(),Ke(),Ju=(A,g)=>{if(!A||A.length<1)throw new Error("too few inputs");if(g.axes.length!==0){if(g.axes.length!==g.starts.length||g.axes.length!==g.ends.length)throw new Error("axes, starts and ends must have the same length")}else if(g.starts.length!==g.ends.length)throw new Error("starts and ends must have the same length");A.slice(1).forEach((e,I)=>{if(A[I+1].dataType!==6&&A[I+1].dataType!==7)throw new Error(`Input ${I} must be an array of int32 or int64`)})},xt=(A,g)=>{let e=[];if(A.length>g)if(A[g].dataType===7)A[g].getBigInt64Array().forEach(I=>e.push(Number(I)));else if(A[g].dataType===6)A[g].getInt32Array().forEach(I=>e.push(Number(I)));else throw new Error(`Input ${g} must be an array of int32 or int64`);return e},xu=(A,g)=>{if(A.length>1){let e=xt(A,1),I=xt(A,2),i=xt(A,3);return i.length===0&&(i=[...Array(A[0].dims.length).keys()]),We({starts:e,ends:I,axes:i})}else return g},Fr=(A,g,e,I,i)=>{let t=A;return A<0&&(t+=e[I[g]]),i[g]<0?Math.max(0,Math.min(t,e[I[g]]-1)):Math.max(0,Math.min(t,e[I[g]]))},Tu=(A,g,e)=>`fn calculateInputIndices(output_indices: ${g.type.indices}) -> ${A.type.indices} { var input_indices: ${A.type.indices}; var carry = 0u; for (var i = ${e.length}; i >= 0; i--) { let input_shape_i = ${le("uniforms.input_shape","i",e.length)}; let steps_i = ${le("uniforms.steps","i",e.length)}; let signs_i = ${le("uniforms.signs","i",e.length)}; let starts_i = ${le("uniforms.starts","i",e.length)}; var output_index = ${g.indicesGet("output_indices","i")}; var input_index = output_index * steps_i + starts_i + carry; carry = input_index / input_shape_i; input_index = input_index % input_shape_i; if (signs_i < 0) { input_index = input_shape_i - input_index - 1u + starts_i; } ${A.indicesSet("input_indices","i","input_index")}; } return input_indices; }`,Yu=(A,g)=>{let e=A[0].dims,I=FA.size(e),i=g.axes.length>0?FA.normalizeAxes(g.axes,e.length):[...Array(e.length).keys()],t=xt(A,4);t.forEach(w=>w!==0||(()=>{throw new Error("step cannot be 0")})),t.length===0&&(t=Array(i.length).fill(1));let s=g.starts.map((w,u)=>Fr(w,u,e,i,t)),o=g.ends.map((w,u)=>Fr(w,u,e,i,t));if(i.length!==s.length||i.length!==o.length)throw new Error("start, ends and axes should have the same number of elements");if(i.length!==e.length)for(let w=0;wMath.sign(w));t.forEach((w,u,_)=>{if(w<0){let y=(o[u]-s[u])/w,M=s[u],F=M+y*t[u];s[u]=F,o[u]=M,_[u]=-w}});let r=e.slice(0);i.forEach((w,u)=>{r[w]=Math.ceil((o[w]-s[w])/t[w])});let Q={dims:r,dataType:A[0].dataType},B=ne("output",A[0].dataType,r.length),a=UA("input",A[0].dataType,A[0].dims.length),d=FA.size(r),c=[{name:"outputSize",type:"u32"},{name:"starts",type:"u32",length:s.length},{name:"signs",type:"i32",length:C.length},{name:"steps",type:"u32",length:t.length}],p=[{type:12,data:d},{type:12,data:s},{type:6,data:C},{type:12,data:t},...de(A[0].dims,r)],L=w=>` ${w.registerUniforms(c).declareVariables(a,B)} ${Tu(a,B,e)} ${w.mainStart()} ${w.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.outputSize")} let output_indices = ${B.offsetToIndices("global_idx")}; let input_indices = calculateInputIndices(output_indices); ${B.setByOffset("global_idx",a.getByIndices("input_indices"))} }`;return{name:"Slice",shaderCache:{hint:`${C.length}_${s.length}_${t.length}`,inputDependencies:["rank"]},getShaderSource:L,getRunData:()=>({outputs:[Q],dispatchGroup:{x:Math.ceil(I/64)},programUniforms:p})}},p0=(A,g)=>{Ju(A.inputs,g);let e=xu(A.inputs,g);A.compute(Yu(A.inputs,e),{inputs:[0]})},f0=A=>{let g=A.starts,e=A.ends,I=A.axes;return We({starts:g,ends:e,axes:I})}}),Pu,vu,y0,m0,fy=jA(()=>{ye(),Ge(),pg(),oi(),Ke(),Pu=A=>{if(!A||A.length!==1)throw new Error("Softmax op requires 1 input.")},vu=(A,g)=>{let e=A.inputs[0],I=e.dims,i=FA.size(I),t=I.length,s=FA.normalizeAxis(g.axis,t),o=sG),r[s]=t-1,r[t-1]=s,C=A.compute(nI(e,r),{inputs:[e],outputs:[-1]})[0]):C=e;let Q=C.dims,B=Q[t-1],a=i/B,d=Dg(B),c=B/d,p=64;a===1&&(p=256);let L=(m,G)=>G===4?`max(max(${m}.x, ${m}.y), max(${m}.z, ${m}.w))`:G===2?`max(${m}.x, ${m}.y)`:G===3?`max(max(${m}.x, ${m}.y), ${m}.z)`:m,w=UA("x",C.dataType,C.dims,d),u=ne("result",C.dataType,C.dims,d),_=w.type.value,y=Hg(C.dataType)==="f32"?`var threadMax = ${_}(-3.402823e+38f);`:`var threadMax = ${_}(-65504.0h);`,M=m=>` var rowMaxShared : ${_}; var rowSumShared : ${_}; var threadShared : array<${_}, ${p}>; fn getValue(row: i32, col: i32, row_stride: i32) -> ${_} { let index = row * row_stride + col; return x[index]; } fn setValue(row: i32, col: i32, row_stride: i32, value: ${_}) { let index = row * row_stride + col; result[index] = value; } ${m.registerUniform("packedCols","i32").declareVariables(w,u)} ${m.mainStart(p)} let gindex = i32(global_idx); let lindex = i32(local_idx); const wg = ${p}; let row = gindex / wg; let cols = uniforms.packedCols; let row_stride : i32 = uniforms.packedCols; // find the rows max ${y} for (var col = lindex; col < cols; col += wg) { let value = getValue(row, col, row_stride); threadMax = max(threadMax, value); } if (lindex < cols) { threadShared[lindex] = threadMax; } workgroupBarrier(); var reduceSize = min(cols, wg); for (var currSize = reduceSize >> 1; currSize > 0; currSize = reduceSize >> 1) { reduceSize = currSize + (reduceSize & 1); if (lindex < currSize) { threadShared[lindex] = max(threadShared[lindex], threadShared[lindex + reduceSize]); } workgroupBarrier(); } if (lindex == 0) { rowMaxShared = ${_}(${L("threadShared[0]",d)}); } workgroupBarrier(); // find the rows sum var threadSum = ${_}(0.0); for (var col = lindex; col < cols; col += wg) { let subExp = exp(getValue(row, col, row_stride) - rowMaxShared); threadSum += subExp; } threadShared[lindex] = threadSum; workgroupBarrier(); for (var currSize = wg >> 1; currSize > 0; currSize = currSize >> 1) { if (lindex < currSize) { threadShared[lindex] = threadShared[lindex] + threadShared[lindex + currSize]; } workgroupBarrier(); } if (lindex == 0) { rowSumShared = ${_}(${ti("threadShared[0]",d)}); } workgroupBarrier(); // calculate final value for each element in the row for (var col = lindex; col < cols; col += wg) { let value = exp(getValue(row, col, row_stride) - rowMaxShared) / rowSumShared; setValue(row, col, row_stride, value); } }`,F=A.compute({name:"Softmax",shaderCache:{hint:`${d};${p}`,inputDependencies:["type"]},getRunData:()=>({outputs:[{dims:Q,dataType:C.dataType}],dispatchGroup:{x:a},programUniforms:[{type:6,data:c}]}),getShaderSource:M},{inputs:[C],outputs:[o?-1:0]})[0];o&&A.compute(nI(F,r),{inputs:[F]})},y0=(A,g)=>{Pu(A.inputs),vu(A,g)},m0=A=>We({axis:A.axis})}),Sr,Hu,qu,Ou,M0,yy=jA(()=>{ye(),Ge(),Ke(),Sr=A=>Array.from(A.getBigInt64Array(),Number),Hu=A=>{if(!A||A.length!==2)throw new Error("Tile requires 2 inputs.");if(A[0].dataType!==1&&A[0].dataType!==10&&A[0].dataType!==6&&A[0].dataType!==12)throw new Error("Tile only support float, float16, int32, and uint32 data types");if(A[1].dataType!==7)throw new Error("Tile `repeats` input should be of int64 data type");if(A[1].dims.length!==1)throw new Error("Tile `repeats` input should be 1-D");if(Sr(A[1]).length!==A[0].dims.length)throw new Error("Tile `repeats` input should have same number of elements as rank of input data tensor")},qu=(A,g)=>{let e=[];for(let I=0;I{let e=A[0].dims,I=g??Sr(A[1]),i=qu(e,I),t=FA.size(i),s=A[0].dataType,o=UA("input",s,e.length),C=ne("output",s,i.length),r=Q=>` const inputShape = ${o.indices(...e)}; ${Q.registerUniform("output_size","u32").declareVariables(o,C)} ${Q.mainStart()} ${Q.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.output_size")} let output_indices = ${C.offsetToIndices("global_idx")}; var input_indices: ${o.type.indices}; for (var i = 0; i < ${e.length}; i++) { let input_dim_i = ${o.indicesGet("uniforms.input_shape","i")}; let input_dim_value = ${C.indicesGet("output_indices","i")} % input_dim_i; ${o.indicesSet("input_indices","i","input_dim_value")} } ${C.setByOffset("global_idx",o.getByIndices("input_indices"))} }`;return{name:"Tile",shaderCache:{hint:`${I}`,inputDependencies:["rank"]},getRunData:()=>({outputs:[{dims:i,dataType:A[0].dataType}],dispatchGroup:{x:Math.ceil(t/64)},programUniforms:[{type:12,data:t},...de(A[0].dims,i)]}),getShaderSource:r}},M0=A=>{Hu(A.inputs),A.compute(Ou(A.inputs),{inputs:[0]})}}),Wu,ju,F0,my=jA(()=>{ye(),Ge(),Ke(),Wu=(A,g,e,I,i)=>{let t=ne("output_data",i,e.length,4),s=UA("a_data",g[1].dataType,g[1].dims.length,4),o=UA("b_data",g[2].dataType,g[2].dims.length,4),C=UA("c_data",g[0].dataType,g[0].dims.length,4),r,Q=(B,a,d)=>`select(${a}, ${B}, ${d})`;if(!I)r=t.setByOffset("global_idx",Q(s.getByOffset("global_idx"),o.getByOffset("global_idx"),C.getByOffset("global_idx")));else{let B=(a,d,c="")=>{let p=`a_data[index_a${d}][component_a${d}]`,L=`b_data[index_b${d}][component_b${d}]`,w=`bool(c_data[index_c${d}] & (0xffu << (component_c${d} * 8)))`;return` let output_indices${d} = ${t.offsetToIndices(`global_idx * 4u + ${d}u`)}; let offset_a${d} = ${s.broadcastedIndicesToOffset(`output_indices${d}`,t)}; let offset_b${d} = ${o.broadcastedIndicesToOffset(`output_indices${d}`,t)}; let offset_c${d} = ${C.broadcastedIndicesToOffset(`output_indices${d}`,t)}; let index_a${d} = offset_a${d} / 4u; let index_b${d} = offset_b${d} / 4u; let index_c${d} = offset_c${d} / 4u; let component_a${d} = offset_a${d} % 4u; let component_b${d} = offset_b${d} % 4u; let component_c${d} = offset_c${d} % 4u; ${a}[${d}] = ${c}(${Q(p,L,w)}); `};i===9?r=` var data = vec4(0); ${B("data",0,"u32")} ${B("data",1,"u32")} ${B("data",2,"u32")} ${B("data",3,"u32")} output_data[global_idx] = dot(vec4(0x1, 0x100, 0x10000, 0x1000000), vec4(data));`:r=` ${B("output_data[global_idx]",0)} ${B("output_data[global_idx]",1)} ${B("output_data[global_idx]",2)} ${B("output_data[global_idx]",3)} `}return` ${A.registerUniform("vec_size","u32").declareVariables(C,s,o,t)} ${A.mainStart()} ${A.guardAgainstOutOfBoundsWorkgroupSizes("uniforms.vec_size")} ${r} }`},ju=A=>{let g=A[1].dims,e=A[2].dims,I=A[0].dims,i=A[1].dataType,t=!(FA.areEqual(g,e)&&FA.areEqual(e,I)),s=g,o=FA.size(g);if(t){let r=At.calcShape(At.calcShape(g,e,!1),I,!1);if(!r)throw new Error("Can't perform where op on the given tensors");s=r,o=FA.size(s)}let C=Math.ceil(o/4);return{name:"Where",shaderCache:{inputDependencies:["rank","rank","rank"]},getShaderSource:r=>Wu(r,A,s,t,i),getRunData:()=>({outputs:[{dims:s,dataType:i}],dispatchGroup:{x:Math.ceil(o/64/4)},programUniforms:[{type:12,data:C},...de(I,g,e,s)]})}},F0=A=>{A.compute(ju(A.inputs))}}),S0,My=jA(()=>{Tf(),Ea(),Yf(),Pf(),vf(),Hf(),qf(),zf(),Zf(),Xf(),Ay(),ey(),gy(),Iy(),iy(),ty(),oy(),sy(),Cy(),ry(),ay(),By(),Qy(),ny(),Ey(),Ww(),ly(),cy(),dy(),uy(),hy(),na(),Dy(),Zw(),wy(),py(),fy(),zw(),yy(),oi(),la(),my(),S0=new Map([["Abs",[wD]],["Acos",[pD]],["Acosh",[fD]],["Add",[Iw]],["ArgMax",[dD,Pr]],["ArgMin",[cD,Pr]],["Asin",[yD]],["Asinh",[mD]],["Atan",[MD]],["Atanh",[FD]],["Attention",[uD]],["AveragePool",[s0,o0]],["BatchNormalization",[hD]],["BiasAdd",[DD]],["BiasSplitGelu",[gw]],["Cast",[ND,SD]],["Ceil",[RD]],["Clip",[_D]],["Concat",[nw,Ew]],["Conv",[jr,Wr]],["ConvTranspose",[yw,fw]],["Cos",[GD]],["Cosh",[kD]],["CumSum",[mw,Mw]],["DepthToSpace",[Fw,Sw]],["DequantizeLinear",[E0,l0]],["Div",[iw]],["Einsum",[Nw,_w]],["Elu",[LD,Ht]],["Equal",[tw]],["Erf",[KD]],["Exp",[UD]],["Expand",[Rw]],["FastGelu",[Gw]],["Floor",[bD]],["FusedConv",[jr,Wr]],["Gather",[Lw,kw]],["GatherElements",[Tw,xw]],["GatherBlockQuantized",[bw,Jw]],["GatherND",[Kw,Uw]],["Gelu",[JD]],["Gemm",[Pw,Yw]],["GlobalAveragePool",[r0,C0]],["GlobalMaxPool",[n0,Q0]],["Greater",[rw]],["GreaterOrEqual",[Bw]],["GridSample",[vw,Hw]],["GroupQueryAttention",[Xw]],["HardSigmoid",[OD,qD]],["InstanceNormalization",[A0]],["LayerNormalization",[e0]],["LeakyRelu",[xD,Ht]],["Less",[aw]],["LessOrEqual",[Qw]],["Log",[Aw]],["MatMul",[g0]],["MatMulNBits",[I0,i0]],["MaxPool",[a0,B0]],["Mul",[ow]],["MultiHeadAttention",[Ow,qw]],["Neg",[YD]],["Not",[TD]],["Pad",[t0]],["Pow",[sw]],["QuickGelu",[ew,Ht]],["Range",[c0]],["Reciprocal",[PD]],["ReduceMin",[BD]],["ReduceMean",[oD]],["ReduceMax",[aD]],["ReduceSum",[nD]],["ReduceProd",[QD]],["ReduceL1",[sD]],["ReduceL2",[CD]],["ReduceLogSum",[lD]],["ReduceLogSumExp",[rD]],["ReduceSumSquare",[ED]],["Relu",[vD]],["Resize",[h0,D0]],["RotaryEmbedding",[$w]],["ScatterND",[u0,d0]],["Sigmoid",[HD]],["Sin",[WD]],["Sinh",[jD]],["Slice",[p0,f0]],["SkipLayerNormalization",[w0]],["Split",[jw,Vw]],["Sqrt",[VD]],["Softmax",[y0,m0]],["Sub",[Cw]],["Tan",[zD]],["Tanh",[$D]],["ThresholdedRelu",[XD,Ht]],["Tile",[M0]],["Transpose",[jh,Vh]],["Where",[F0]]])}),N0,Fy=jA(()=>{JI(),jI(),Ke(),N0=class{constructor(A){this.backend=A,this.repo=new Map,this.attributesBound=!1}getArtifact(A){return this.repo.get(A)}setArtifact(A,g){this.repo.set(A,g)}run(A,g,e,I,i){bI(A.programInfo.name);let t=this.backend.device,s=this.backend.getComputePassEncoder();this.backend.writeTimestamp(this.backend.pendingDispatchNumber*2);let o=[];for(let r of g)o.push({binding:o.length,resource:{buffer:r.buffer}});for(let r of e)o.push({binding:o.length,resource:{buffer:r.buffer}});i&&o.push({binding:o.length,resource:i});let C=t.createBindGroup({layout:A.computePipeline.getBindGroupLayout(0),entries:o,label:A.programInfo.name});if(this.backend.sessionStatus==="capturing"){let r={kernelId:this.backend.currentKernelId,computePipeline:A.computePipeline,bindGroup:C,dispatchGroup:I};this.backend.capturedCommandList.get(this.backend.currentSessionId).push(r)}s.setPipeline(A.computePipeline),s.setBindGroup(0,C),s.dispatchWorkgroups(...I),this.backend.writeTimestamp(this.backend.pendingDispatchNumber*2+1),this.backend.pendingDispatchNumber++,(this.backend.pendingDispatchNumber>=this.backend.maxDispatchNumber||this.backend.queryType==="at-passes")&&this.backend.endComputePass(),this.backend.pendingDispatchNumber>=this.backend.maxDispatchNumber&&this.backend.flush(),pI(A.programInfo.name)}dispose(){}build(A,g){bI(A.name);let e=this.backend.device,I=[];[{feature:"shader-f16",extension:"f16"},{feature:"subgroups",extension:"subgroups"}].forEach(r=>{e.features.has(r.feature)&&I.push(`enable ${r.extension};`)});let i=Wh(g,this.backend.device.limits),t=A.getShaderSource(i),s=`${I.join(` `)} ${i.additionalImplementations} ${t}`,o=e.createShaderModule({code:s,label:A.name});Ye("verbose",()=>`[WebGPU] ${A.name} shader code: ${s}`);let C=e.createComputePipeline({compute:{module:o,entryPoint:"main"},layout:"auto",label:A.name});return pI(A.name),{programInfo:A,computePipeline:C,uniformVariablesInfo:i.variablesInfo}}normalizeDispatchGroupSize(A){let g=typeof A=="number"?A:A.x,e=typeof A=="number"?1:A.y||1,I=typeof A=="number"?1:A.z||1,i=this.backend.device.limits.maxComputeWorkgroupsPerDimension;if(g<=i&&e<=i&&I<=i)return[g,e,I];let t=g*e*I,s=Math.ceil(Math.sqrt(t));if(s>i){if(s=Math.ceil(Math.cbrt(t)),s>i)throw new Error("Total dispatch size exceeds WebGPU maximum.");return[s,s,s]}else return[s,s,1]}}}),_0={};gt(_0,{WebGpuBackend:()=>R0});var Vu,zu,$u,R0,Sy=jA(()=>{JI(),ye(),jI(),Ph(),Jf(),My(),Fy(),Vu=(A,g)=>{if(g.length!==A.length)throw new Error(`inputDependencies length ${g.length} is not equal to inputTensors length ${A.length}.`);let e=[];for(let I=0;I{let I=A.name;return A.shaderCache?.hint&&(I+="["+A.shaderCache.hint+"]"),I+=":"+e+`:${Vu(g,A.shaderCache?.inputDependencies??new Array(g.length).fill("dims"))}`,I},$u=class{constructor(A){A&&(this.architecture=A.architecture,this.vendor=A.vendor)}isArchitecture(A){return this.architecture===A}isVendor(A){return this.vendor===A}},R0=class{constructor(){this.currentSessionId=null,this.currentKernelId=null,this.commandEncoder=null,this.computePassEncoder=null,this.maxDispatchNumber=16,this.pendingDispatchNumber=0,this.pendingKernels=[],this.pendingQueries=new Map,this.sessionStatus="default",this.capturedCommandList=new Map,this.capturedPendingKernels=new Map,this.sessionExternalDataMapping=new Map}get currentKernelCustomData(){if(this.currentKernelId===null)throw new Error("currentKernelCustomData(): currentKernelId is null. (should not happen)");let A=this.kernelCustomData.get(this.currentKernelId);return A||(A={},this.kernelCustomData.set(this.currentKernelId,A)),A}async initialize(A,g){this.env=A;let e=[],I={requiredLimits:{maxComputeWorkgroupStorageSize:g.limits.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:g.limits.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:g.limits.maxStorageBufferBindingSize,maxBufferSize:g.limits.maxBufferSize,maxComputeInvocationsPerWorkgroup:g.limits.maxComputeInvocationsPerWorkgroup,maxComputeWorkgroupSizeX:g.limits.maxComputeWorkgroupSizeX,maxComputeWorkgroupSizeY:g.limits.maxComputeWorkgroupSizeY,maxComputeWorkgroupSizeZ:g.limits.maxComputeWorkgroupSizeZ},requiredFeatures:e},i=t=>g.features.has(t)&&e.push(t)&&!0;i("chromium-experimental-timestamp-query-inside-passes")||i("timestamp-query"),i("shader-f16"),i("subgroups"),this.device=await g.requestDevice(I),this.adapterInfo=new $u(g.info||await g.requestAdapterInfo()),this.gpuDataManager=qh(this),this.programManager=new N0(this),this.kernels=new Map,this.kernelPersistentData=new Map,this.kernelCustomData=new Map,ra(A.logLevel,!!A.debug),this.device.onuncapturederror=t=>{t.error instanceof GPUValidationError&&console.error(`An uncaught WebGPU validation error was raised: ${t.error.message}`)},Object.defineProperty(this.env.webgpu,"device",{value:this.device,writable:!1,enumerable:!0,configurable:!1}),Object.defineProperty(this.env.webgpu,"adapter",{value:g,writable:!1,enumerable:!0,configurable:!1}),this.setQueryType()}dispose(){typeof this.querySet<"u"&&this.querySet.destroy(),this.gpuDataManager.dispose()}getCommandEncoder(){return this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder()),this.commandEncoder}getComputePassEncoder(){if(!this.computePassEncoder){let A=this.getCommandEncoder(),g={};this.queryType==="at-passes"&&(g.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:this.pendingDispatchNumber*2,endOfPassWriteIndex:this.pendingDispatchNumber*2+1}),this.computePassEncoder=A.beginComputePass(g)}return this.computePassEncoder}endComputePass(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}flush(){if(!this.commandEncoder)return;bI(),this.endComputePass();let A;this.queryType!=="none"&&(this.commandEncoder.resolveQuerySet(this.querySet,0,this.pendingDispatchNumber*2,this.queryResolveBuffer,0),A=this.device.createBuffer({size:this.pendingDispatchNumber*2*8,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),this.pendingQueries.set(A,this.pendingKernels),this.pendingKernels=[],this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,A,0,this.pendingDispatchNumber*2*8)),this.device.queue.submit([this.commandEncoder.finish()]),this.gpuDataManager.refreshPendingBuffers(),this.commandEncoder=null,this.pendingDispatchNumber=0,this.queryType!=="none"&&A.mapAsync(GPUMapMode.READ).then(()=>{let g=new BigUint64Array(A.getMappedRange()),e=this.pendingQueries.get(A);for(let I=0;I"u"&&(this.queryTimeBase=a);let c=Number(a-this.queryTimeBase),p=Number(d-this.queryTimeBase);if(!Number.isSafeInteger(c)||!Number.isSafeInteger(p))throw new RangeError("incorrect timestamp range");if(this.env.webgpu.profiling?.ondata)this.env.webgpu.profiling.ondata({version:1,inputsMetadata:Q.map(L=>({dims:L.dims,dataType:WI(L.dataType)})),outputsMetadata:B.map(L=>({dims:L.dims,dataType:WI(L.dataType)})),kernelId:t,kernelType:o,kernelName:C,programName:r,startTime:c,endTime:p});else{let L="";Q.forEach((u,_)=>{L+=`input[${_}]: [${u.dims}] | ${WI(u.dataType)}, `});let w="";B.forEach((u,_)=>{w+=`output[${_}]: [${u.dims}] | ${WI(u.dataType)}, `}),console.log(`[profiling] kernel "${t}|${o}|${C}|${r}" ${L}${w}execution time: ${p-c} ns`)}jt("GPU",`${r}::${a}::${d}`)}A.unmap(),this.pendingQueries.delete(A)}),pI()}run(A,g,e,I,i,t){bI(A.name);let s=[];for(let u=0;u_):e;if(Q.length!==o.length)throw new Error(`Output size ${Q.length} must be equal to ${o.length}.`);let B=[],a=[];for(let u=0;u=t)throw new Error(`Invalid output index: ${Q[u]}`);if(Q[u]===-3)continue;let _=Q[u]===-1,y=Q[u]===-2,M=_||y?i(o[u].dataType,o[u].dims):I(Q[u],o[u].dataType,o[u].dims);if(B.push(M),M.data===0)continue;let F=this.gpuDataManager.get(M.data);if(!F)throw new Error(`no GPU data for output: ${M.data}`);if(_&&this.temporaryData.push(F),y){let m=this.kernelPersistentData.get(this.currentKernelId);m||(m=[],this.kernelPersistentData.set(this.currentKernelId,m)),m.push(F)}a.push(F)}if(s.length!==g.length||a.length!==B.length){if(a.length===0)return pI(A.name),B;throw new Error(`Program ${A.name} has zero-sized tensor(s) in inputs or outputs. This is not supported now.`)}let d;if(r){let u=0,_=[];r.forEach(m=>{let G=typeof m.data=="number"?[m.data]:m.data;if(G.length===0)return;let T=m.type===10?2:4,J,Z;m.type===10?(Z=G.length>4?16:G.length>2?8:G.length*T,J=G.length>4?16:T*G.length):(Z=G.length<=2?G.length*T:16,J=16),u=Math.ceil(u/Z)*Z,_.push(u);let z=m.type===10?8:4;u+=G.length>4?Math.ceil(G.length/z)*J:G.length*T});let y=16;u=Math.ceil(u/y)*y;let M=new ArrayBuffer(u);r.forEach((m,G)=>{let T=_[G],J=typeof m.data=="number"?[m.data]:m.data;if(m.type===6)new Int32Array(M,T,J.length).set(J);else if(m.type===12)new Uint32Array(M,T,J.length).set(J);else if(m.type===10)new Uint16Array(M,T,J.length).set(J);else if(m.type===1)new Float32Array(M,T,J.length).set(J);else throw new Error(`Unsupported uniform type: ${WI(m.type)}`)});let F=this.gpuDataManager.create(u,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);this.device.queue.writeBuffer(F.buffer,0,M,0,u),this.gpuDataManager.release(F.id),d={offset:0,size:u,buffer:F.buffer}}let c=this.programManager.normalizeDispatchGroupSize(C),p=c[1]===1&&c[2]===1,L=zu(A,g,p),w=this.programManager.getArtifact(L);if(w||(w=this.programManager.build(A,c),this.programManager.setArtifact(L,w),Ye("info",()=>`[artifact] key: ${L}, programName: ${A.name}`)),r&&w.uniformVariablesInfo){if(r.length!==w.uniformVariablesInfo.length)throw new Error(`Uniform variables count mismatch: expect ${w.uniformVariablesInfo.length}, got ${r.length} in program "${w.programInfo.name}".`);for(let u=0;u`[ProgramManager] run "${A.name}" (key=${L}) with ${c[0]}x${c[1]}x${c[2]}`),this.queryType!=="none"||this.sessionStatus==="capturing"){let u={kernelId:this.currentKernelId,programName:w.programInfo.name,inputTensorViews:g,outputTensorViews:B};this.pendingKernels.push(u),this.sessionStatus==="capturing"&&this.capturedPendingKernels.get(this.currentSessionId).push(u)}return this.programManager.run(w,s,a,c,d),pI(A.name),B}upload(A,g){this.gpuDataManager.upload(A,g)}memcpy(A,g){this.gpuDataManager.memcpy(A,g)}async download(A,g){await this.gpuDataManager.download(A,g)}alloc(A){return this.gpuDataManager.create(A).id}free(A){return this.gpuDataManager.release(A)}createKernel(A,g,e,I){let i=S0.get(A);if(!i)throw new Error(`kernel not implemented: ${A}`);let t={kernelType:A,kernelName:I,kernelEntry:i[0],attributes:[i[1],e]};this.kernels.set(g,t)}releaseKernel(A){let g=this.kernelPersistentData.get(A);if(g){for(let e of g)this.gpuDataManager.release(e.id);this.kernelPersistentData.delete(A)}this.kernelCustomData.delete(A),this.kernels.delete(A)}computeKernel(A,g,e){let I=this.kernels.get(A);if(!I)throw new Error(`kernel not created: ${A}`);let i=I.kernelType,t=I.kernelName,s=I.kernelEntry,o=I.attributes;if(this.currentKernelId!==null)throw new Error(`kernel "[${i}] ${t}" is not allowed to be called recursively`);this.currentKernelId=A,o[0]&&(o[1]=o[0](o[1]),o[0]=void 0),Ye("info",()=>`[WebGPU] Start to run kernel "[${i}] ${t}"...`);let C=this.env.debug;this.temporaryData=[];try{return C&&this.device.pushErrorScope("validation"),s(g,o[1]),0}catch(r){return e.push(Promise.resolve(`[WebGPU] Kernel "[${i}] ${t}" failed. ${r}`)),1}finally{C&&e.push(this.device.popErrorScope().then(r=>r?`GPU validation error for kernel "[${i}] ${t}": ${r.message}`:null));for(let r of this.temporaryData)this.gpuDataManager.release(r.id);this.temporaryData=[],this.currentKernelId=null}}registerBuffer(A,g,e,I){let i=this.sessionExternalDataMapping.get(A);i||(i=new Map,this.sessionExternalDataMapping.set(A,i));let t=i.get(g),s=this.gpuDataManager.registerExternalBuffer(e,I,t);return i.set(g,[s,e]),s}unregisterBuffers(A){let g=this.sessionExternalDataMapping.get(A);g&&(g.forEach(e=>this.gpuDataManager.unregisterExternalBuffer(e[0])),this.sessionExternalDataMapping.delete(A))}getBuffer(A){let g=this.gpuDataManager.get(A);if(!g)throw new Error(`no GPU data for buffer: ${A}`);return g.buffer}createDownloader(A,g,e){return async()=>{let I=await xr(this,A,g);return aa(I.buffer,e)}}writeTimestamp(A){this.queryType==="inside-passes"&&this.computePassEncoder.writeTimestamp(this.querySet,A)}setQueryType(){this.queryType="none",(this.env.webgpu.profiling?.mode==="default"||(typeof this.env.trace>"u"?this.env.wasm.trace:this.env.trace))&&(this.device.features.has("chromium-experimental-timestamp-query-inside-passes")?this.queryType="inside-passes":this.device.features.has("timestamp-query")&&(this.queryType="at-passes"),this.queryType!=="none"&&typeof this.querySet>"u"&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:this.maxDispatchNumber*2}),this.queryResolveBuffer=this.device.createBuffer({size:this.maxDispatchNumber*2*8,usage:GPUBufferUsage.COPY_SRC|GPUBufferUsage.QUERY_RESOLVE})))}captureBegin(){Ye("info","captureBegin"),this.capturedCommandList.get(this.currentSessionId)||this.capturedCommandList.set(this.currentSessionId,[]),this.capturedPendingKernels.get(this.currentSessionId)||this.capturedPendingKernels.set(this.currentSessionId,[]),this.flush(),this.sessionStatus="capturing"}captureEnd(){Ye("info","captureEnd"),this.flush(),this.sessionStatus="default"}replay(){Ye("info","replay"),this.sessionStatus="replaying";let A=this.capturedCommandList.get(this.currentSessionId),g=this.capturedPendingKernels.get(this.currentSessionId),e=A.length;this.pendingKernels=[];for(let I=0;I=this.maxDispatchNumber||this.queryType==="at-passes")&&this.endComputePass(),this.pendingDispatchNumber>=this.maxDispatchNumber&&this.flush()}this.flush(),this.sessionStatus="default"}onCreateSession(){this.gpuDataManager.onCreateSession()}onReleaseSession(A){this.unregisterBuffers(A),this.capturedCommandList.has(A)&&this.capturedCommandList.delete(A),this.capturedPendingKernels.has(A)&&this.capturedPendingKernels.delete(A),this.gpuDataManager.onReleaseSession(A)}onRunStart(A){this.currentSessionId=A,this.setQueryType()}}}),G0={};gt(G0,{init:()=>k0});var $o,Zu,k0,Ny=jA(()=>{ye(),jI(),Ge(),bf(),$o=class L0{constructor(g,e,I,i){this.module=g,this.dataType=e,this.data=I,this.dims=i}getFloat32Array(){if(this.dataType!==1)throw new Error("Invalid data type");let g=FA.size(this.dims);return g===0?new Float32Array:new Float32Array(this.module.HEAP8.buffer,this.data,g)}getBigInt64Array(){if(this.dataType!==7)throw new Error("Invalid data type");let g=FA.size(this.dims);return g===0?new BigInt64Array:new BigInt64Array(this.module.HEAP8.buffer,this.data,g)}getInt32Array(){if(this.dataType!==6)throw new Error("Invalid data type");let g=FA.size(this.dims);return g===0?new Int32Array:new Int32Array(this.module.HEAP8.buffer,this.data,g)}getUint16Array(){if(this.dataType!==10&&this.dataType!==4)throw new Error("Invalid data type");let g=FA.size(this.dims);return g===0?new Uint16Array:new Uint16Array(this.module.HEAP8.buffer,this.data,g)}reshape(g){if(FA.size(g)!==FA.size(this.dims))throw new Error("Invalid new shape");return new L0(this.module,this.dataType,this.data,g)}},Zu=class{constructor(A,g,e){this.module=A,this.backend=g,this.customDataOffset=0,this.customDataSize=0,this.adapterInfo=g.adapterInfo;let I=A.PTR_SIZE,i=e/A.PTR_SIZE,t=I===4?"i32":"i64";this.opKernelContext=Number(A.getValue(I*i++,t));let s=Number(A.getValue(I*i++,t));this.outputCount=Number(A.getValue(I*i++,t)),this.customDataOffset=Number(A.getValue(I*i++,"*")),this.customDataSize=Number(A.getValue(I*i++,t));let o=[];for(let C=0;Ctypeof s=="number"?this.inputs[s]:s)??this.inputs,I=g?.outputs??[],i=(s,o,C)=>new $o(this.module,o,this.output(s,C),C),t=(s,o)=>{let C=pi(s,o);if(!C)throw new Error(`Unsupported data type: ${s}`);let r=C>0?this.backend.gpuDataManager.create(C).id:0;return new $o(this.module,s,r,o)};return this.backend.run(A,e,I,i,t,this.outputCount)}output(A,g){let e=this.module.stackSave();try{let I=this.module.PTR_SIZE,i=I===4?"i32":"i64",t=this.module.stackAlloc((1+g.length)*I);this.module.setValue(t,g.length,i);for(let s=0;s{let i=g.jsepInit;if(!i)throw new Error("Failed to initialize JSEP. The WebAssembly module is not built with JSEP support.");if(A==="webgpu"){let t=(Sy(),Wt(_0)).WebGpuBackend,s=new t;await s.initialize(e,I),i("webgpu",[s,o=>s.alloc(Number(o)),o=>s.free(o),(o,C,r,Q=!1)=>{if(Q)Ye("verbose",()=>`[WebGPU] jsepCopyGpuToGpu: src=${Number(o)}, dst=${Number(C)}, size=${Number(r)}`),s.memcpy(Number(o),Number(C));else{Ye("verbose",()=>`[WebGPU] jsepCopyCpuToGpu: dataOffset=${Number(o)}, gpuDataId=${Number(C)}, size=${Number(r)}`);let B=g.HEAPU8.subarray(Number(o>>>0),Number(o>>>0)+Number(r));s.upload(Number(C),B)}},async(o,C,r)=>{Ye("verbose",()=>`[WebGPU] jsepCopyGpuToCpu: gpuDataId=${o}, dataOffset=${C}, size=${r}`),await s.download(Number(o),()=>g.HEAPU8.subarray(Number(C)>>>0,Number(C+r)>>>0))},(o,C,r)=>s.createKernel(o,Number(C),r,g.UTF8ToString(g._JsepGetNodeName(Number(C)))),o=>s.releaseKernel(o),(o,C,r,Q)=>{Ye("verbose",()=>`[WebGPU] jsepRun: sessionHandle=${r}, kernel=${o}, contextDataOffset=${C}`);let B=new Zu(g,s,Number(C));return s.computeKernel(Number(o),B,Q)},()=>s.captureBegin(),()=>s.captureEnd(),()=>s.replay()])}else{let t=new Hh(e);i("webnn",[t,()=>t.reserveTensorId(),s=>t.releaseTensorId(s),async(s,o,C,r,Q)=>t.ensureTensor(s,o,C,r,Q),(s,o)=>{t.uploadTensor(s,o)},async(s,o)=>t.downloadTensor(s,o)])}}}),Xu,wa,pa,Ii,Ah,Nr,as,fa,ya,_r,ma,Ma,Fa,K0=jA(()=>{Lf(),Kf(),ye(),Fi(),ia(),Jh(),Xu=(A,g)=>{ig()._OrtInit(A,g)!==0&&Xe("Can't initialize onnxruntime.")},wa=async A=>{Xu(A.wasm.numThreads,ts(A.logLevel))},pa=async(A,g)=>{ig().asyncInit?.();{let e=(Ny(),Wt(G0)).init;if(g==="webgpu"){if(typeof navigator>"u"||!navigator.gpu)throw new Error("WebGPU is not supported in current environment");let I=A.webgpu.adapter;if(I){if(typeof I.limits!="object"||typeof I.features!="object"||typeof I.requestDevice!="function")throw new Error("Invalid GPU adapter set in `env.webgpu.adapter`. It must be a GPUAdapter object.")}else{let i=A.webgpu.powerPreference;if(i!==void 0&&i!=="low-power"&&i!=="high-performance")throw new Error(`Invalid powerPreference setting: "${i}"`);let t=A.webgpu.forceFallbackAdapter;if(t!==void 0&&typeof t!="boolean")throw new Error(`Invalid forceFallbackAdapter setting: "${t}"`);if(I=await navigator.gpu.requestAdapter({powerPreference:i,forceFallbackAdapter:t}),!I)throw new Error('Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.')}await e("webgpu",ig(),A,I)}if(g==="webnn"){if(typeof navigator>"u"||!navigator.ml)throw new Error("WebNN is not supported in current environment");await e("webnn",ig(),A)}}},Ii=new Map,Ah=A=>{let g=ig(),e=g.stackSave();try{let I=g.PTR_SIZE,i=g.stackAlloc(2*I);g._OrtGetInputOutputCount(A,i,i+I)!==0&&Xe("Can't get session input/output count.");let t=I===4?"i32":"i64";return[Number(g.getValue(i,t)),Number(g.getValue(i+I,t))]}finally{g.stackRestore(e)}},Nr=(A,g)=>{let e=ig(),I=e.stackSave(),i=0;try{let t=e.PTR_SIZE,s=e.stackAlloc(2*t);e._OrtGetInputOutputMetadata(A,g,s,s+t)!==0&&Xe("Can't get session input/output metadata.");let o=Number(e.getValue(s,"*"));i=Number(e.getValue(s+t,"*"));let C=e.HEAP32[i/4];if(C===0)return[o,0];let r=e.HEAPU32[i/4+1],Q=[];for(let B=0;B{let g=ig(),e=g._malloc(A.byteLength);if(e===0)throw new Error(`Can't create a session. failed to allocate a buffer of size ${A.byteLength}.`);return g.HEAPU8.set(A,e),[e,A.byteLength]},fa=async(A,g)=>{let e,I,i=ig();Array.isArray(A)?[e,I]=A:A.buffer===i.HEAPU8.buffer?[e,I]=[A.byteOffset,A.byteLength]:[e,I]=as(A);let t=0,s=0,o=0,C=[],r=[],Q=[];try{if([s,C]=await bh(g),g?.externalData&&i.mountExternalData){let y=[];for(let M of g.externalData){let F=typeof M=="string"?M:M.path;y.push(Ca(typeof M=="string"?M:M.data).then(m=>{i.mountExternalData(F,m)}))}await Promise.all(y)}for(let y of g?.executionProviders??[])if((typeof y=="string"?y:y.name)==="webnn"){if(i.shouldTransferToMLTensor=!1,typeof y!="string"){let M=y,F=M?.context,m=M?.gpuDevice,G=M?.deviceType,T=M?.powerPreference;F?i.currentContext=F:m?i.currentContext=await i.webnnCreateMLContext(m):i.currentContext=await i.webnnCreateMLContext({deviceType:G,powerPreference:T})}else i.currentContext=await i.webnnCreateMLContext();break}t=await i._OrtCreateSession(e,I,s),i.webgpuOnCreateSession?.(t),t===0&&Xe("Can't create a session."),i.jsepOnCreateSession?.(),i.currentContext&&(i.webnnRegisterMLContext(t,i.currentContext),i.currentContext=void 0,i.shouldTransferToMLTensor=!0);let[B,a]=Ah(t),d=!!g?.enableGraphCapture,c=[],p=[],L=[],w=[],u=[];for(let y=0;yy==="gpu-buffer"||y==="ml-tensor")&&(o=i._OrtCreateBinding(t),o===0&&Xe("Can't create IO binding."),_={handle:o,outputPreferredLocations:u,outputPreferredLocationsEncoded:u.map(y=>br(y))}),Ii.set(t,[t,r,Q,_,d,!1]),[t,c,p,L,w]}catch(B){throw r.forEach(a=>i._OrtFree(a)),Q.forEach(a=>i._OrtFree(a)),o!==0&&i._OrtReleaseBinding(o)!==0&&Xe("Can't release IO binding."),t!==0&&i._OrtReleaseSession(t)!==0&&Xe("Can't release session."),B}finally{i._free(e),s!==0&&i._OrtReleaseSessionOptions(s)!==0&&Xe("Can't release session options."),C.forEach(B=>i._free(B)),i.unmountExternalData?.()}},ya=A=>{let g=ig(),e=Ii.get(A);if(!e)throw new Error(`cannot release session. invalid session id: ${A}`);let[I,i,t,s,o]=e;s&&(o&&g._OrtClearBoundOutputs(s.handle)!==0&&Xe("Can't clear bound outputs."),g._OrtReleaseBinding(s.handle)!==0&&Xe("Can't release IO binding.")),g.jsepOnReleaseSession?.(A),g.webnnOnReleaseSession?.(A),g.webgpuOnReleaseSession?.(A),i.forEach(C=>g._OrtFree(C)),t.forEach(C=>g._OrtFree(C)),g._OrtReleaseSession(I)!==0&&Xe("Can't release session."),Ii.delete(A)},_r=async(A,g,e,I,i,t,s=!1)=>{if(!A){g.push(0);return}let o=ig(),C=o.PTR_SIZE,r=A[0],Q=A[1],B=A[3],a=B,d,c;if(r==="string"&&(B==="gpu-buffer"||B==="ml-tensor"))throw new Error("String tensor is not supported on GPU.");if(s&&B!=="gpu-buffer")throw new Error(`External buffer must be provided for input/output index ${t} when enableGraphCapture is true.`);if(B==="gpu-buffer"){let w=A[2].gpuBuffer;c=pi($i(r),Q);{let u=o.jsepRegisterBuffer;if(!u)throw new Error('Tensor location "gpu-buffer" is not supported without using WebGPU.');d=u(I,t,w,c)}}else if(B==="ml-tensor"){let w=A[2].mlTensor;c=pi($i(r),Q);let u=o.webnnRegisterMLTensor;if(!u)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');d=u(I,w,$i(r),Q)}else{let w=A[2];if(Array.isArray(w)){c=C*w.length,d=o._malloc(c),e.push(d);for(let u=0;uo.setValue(L+_*C,u,C===4?"i32":"i64"));let w=o._OrtCreateTensor($i(r),d,c,L,Q.length,br(a));w===0&&Xe(`Can't create tensor for input/output. session=${I}, index=${t}.`),g.push(w)}finally{o.stackRestore(p)}},ma=async(A,g,e,I,i,t)=>{let s=ig(),o=s.PTR_SIZE,C=Ii.get(A);if(!C)throw new Error(`cannot run inference. invalid session id: ${A}`);let r=C[0],Q=C[1],B=C[2],a=C[3],d=C[4],c=C[5],p=g.length,L=I.length,w=0,u=[],_=[],y=[],M=[],F=s.stackSave(),m=s.stackAlloc(p*o),G=s.stackAlloc(p*o),T=s.stackAlloc(L*o),J=s.stackAlloc(L*o);try{[w,u]=Uh(t);for(let P=0;PRA*vA,1);CA=WI(v);let xA=a?.outputPreferredLocations[I[P]];if(CA==="string"){if(xA==="gpu-buffer"||xA==="ml-tensor")throw new Error("String tensor is not supported on GPU.");let RA=[];for(let vA=0;vA0){let RA=s.jsepGetBuffer;if(!RA)throw new Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.');let vA=RA(cA),ie=pi(v,nA);if(ie===void 0||!oa(CA))throw new Error(`Unsupported data type: ${CA}`);rA=!0,z.push([CA,W,{gpuBuffer:vA,download:s.jsepCreateDownloader(vA,ie,CA),dispose:()=>{s._OrtReleaseTensor(tA)!==0&&Xe("Can't release tensor.")}},"gpu-buffer"])}else if(xA==="ml-tensor"&&nA>0){let RA=s.webnnEnsureTensor,vA=s.webnnIsInt64Supported;if(!RA||!vA)throw new Error('preferredLocation "ml-tensor" is not supported without using WebNN.');if(pi(v,nA)===void 0||!sa(CA))throw new Error(`Unsupported data type: ${CA}`);if(CA==="int64"&&!vA(A))throw new Error('preferredLocation "ml-tensor" for int64 output is not supported by current WebNN Context.');let ie=await RA(A,cA,v,W,!1);rA=!0,z.push([CA,W,{mlTensor:ie,download:s.webnnCreateMLTensorDownloader(cA,CA),dispose:()=>{s.webnnReleaseTensorId(cA),s._OrtReleaseTensor(tA)}},"ml-tensor"])}else{let RA=ta(CA),vA=new RA(nA);new Uint8Array(vA.buffer,vA.byteOffset,vA.byteLength).set(s.HEAPU8.subarray(cA,cA+vA.byteLength)),z.push([CA,W,vA,"cpu"])}}finally{s.stackRestore(AA),CA==="string"&&cA&&s._free(cA),rA||s._OrtReleaseTensor(tA),s.webnnOnRunEnd?.(r)}}return a&&!d&&(s._OrtClearBoundOutputs(a.handle)!==0&&Xe("Can't clear bound outputs."),Ii.set(A,[r,Q,B,a,d,!1])),z}finally{s.stackRestore(F),_.forEach(Z=>s._OrtReleaseTensor(Z)),y.forEach(Z=>s._OrtReleaseTensor(Z)),M.forEach(Z=>s._free(Z)),w!==0&&s._OrtReleaseRunOptions(w),u.forEach(Z=>s._free(Z))}},Ma=A=>{let g=ig(),e=Ii.get(A);if(!e)throw new Error("invalid session id");let I=e[0],i=g._OrtEndProfiling(I);i===0&&Xe("Can't get an profile file name."),g._OrtFree(i)},Fa=A=>{let g=[];for(let e of A){let I=e[2];!Array.isArray(I)&&"buffer"in I&&g.push(I.buffer)}return g}}),ii,hI,ji,Tt,Yt,Zo,Rr,Xo,ui,hi,eh,U0,b0,J0,x0,T0,Y0,P0,v0=jA(()=>{JI(),K0(),Fi(),ga(),ii=()=>!!Cg.wasm.proxy&&typeof document<"u",ji=!1,Tt=!1,Yt=!1,Xo=new Map,ui=(A,g)=>{let e=Xo.get(A);e?e.push(g):Xo.set(A,[g])},hi=()=>{if(ji||!Tt||Yt||!hI)throw new Error("worker not ready")},eh=A=>{switch(A.data.type){case"init-wasm":ji=!1,A.data.err?(Yt=!0,Rr[1](A.data.err)):(Tt=!0,Rr[0]()),Zo&&(URL.revokeObjectURL(Zo),Zo=void 0);break;case"init-ep":case"copy-from":case"create":case"release":case"run":case"end-profiling":{let g=Xo.get(A.data.type);A.data.err?g.shift()[1](A.data.err):g.shift()[0](A.data.out);break}}},U0=async()=>{if(!Tt){if(ji)throw new Error("multiple calls to 'initWasm()' detected.");if(Yt)throw new Error("previous call to 'initWasm()' failed.");if(ji=!0,ii())return new Promise((A,g)=>{hI?.terminate(),Lh().then(([e,I])=>{try{hI=I,hI.onerror=t=>g(t),hI.onmessage=eh,Rr=[A,g];let i={type:"init-wasm",in:Cg};!i.in.wasm.wasmPaths&&(e||Ur)&&(i.in.wasm.wasmPaths={wasm:new URL(""+new URL("ort-wasm-simd-threaded.jsep-B0T3yYHD.wasm",import.meta.url).href,import.meta.url).href}),hI.postMessage(i),Zo=e}catch(i){g(i)}},g)});try{await Ia(Cg.wasm),await wa(Cg),Tt=!0}catch(A){throw Yt=!0,A}finally{ji=!1}}},b0=async A=>{if(ii())return hi(),new Promise((g,e)=>{ui("init-ep",[g,e]);let I={type:"init-ep",in:{epName:A,env:Cg}};hI.postMessage(I)});await pa(Cg,A)},J0=async A=>ii()?(hi(),new Promise((g,e)=>{ui("copy-from",[g,e]);let I={type:"copy-from",in:{buffer:A}};hI.postMessage(I,[A.buffer])})):as(A),x0=async(A,g)=>{if(ii()){if(g?.preferredOutputLocation)throw new Error('session option "preferredOutputLocation" is not supported for proxy.');return hi(),new Promise((e,I)=>{ui("create",[e,I]);let i={type:"create",in:{model:A,options:{...g}}},t=[];A instanceof Uint8Array&&t.push(A.buffer),hI.postMessage(i,t)})}else return fa(A,g)},T0=async A=>{if(ii())return hi(),new Promise((g,e)=>{ui("release",[g,e]);let I={type:"release",in:A};hI.postMessage(I)});ya(A)},Y0=async(A,g,e,I,i,t)=>{if(ii()){if(e.some(s=>s[3]!=="cpu"))throw new Error("input tensor on GPU is not supported for proxy.");if(i.some(s=>s))throw new Error("pre-allocated output tensor is not supported for proxy.");return hi(),new Promise((s,o)=>{ui("run",[s,o]);let C=e,r={type:"run",in:{sessionId:A,inputIndices:g,inputs:C,outputIndices:I,options:t}};hI.postMessage(r,Fa(C))})}else return ma(A,g,e,I,i,t)},P0=async A=>{if(ii())return hi(),new Promise((g,e)=>{ui("end-profiling",[g,e]);let I={type:"end-profiling",in:A};hI.postMessage(I)});Ma(A)}}),Gr,gh,H0,_y=jA(()=>{JI(),v0(),ye(),ea(),Jh(),Gr=(A,g)=>{switch(A.location){case"cpu":return[A.type,A.dims,A.data,"cpu"];case"gpu-buffer":return[A.type,A.dims,{gpuBuffer:A.gpuBuffer},"gpu-buffer"];case"ml-tensor":return[A.type,A.dims,{mlTensor:A.mlTensor},"ml-tensor"];default:throw new Error(`invalid data location: ${A.location} for ${g()}`)}},gh=A=>{switch(A[3]){case"cpu":return new KI(A[0],A[2],A[1]);case"gpu-buffer":{let g=A[0];if(!oa(g))throw new Error(`not supported data type: ${g} for deserializing GPU tensor`);let{gpuBuffer:e,download:I,dispose:i}=A[2];return KI.fromGpuBuffer(e,{dataType:g,dims:A[1],download:I,dispose:i})}case"ml-tensor":{let g=A[0];if(!sa(g))throw new Error(`not supported data type: ${g} for deserializing MLTensor tensor`);let{mlTensor:e,download:I,dispose:i}=A[2];return KI.fromMLTensor(e,{dataType:g,dims:A[1],download:I,dispose:i})}default:throw new Error(`invalid data location: ${A[3]}`)}},H0=class{async fetchModelAndCopyToWasmMemory(A){return J0(await Ca(A))}async loadModel(A,g){bI();let e;typeof A=="string"?e=await this.fetchModelAndCopyToWasmMemory(A):e=A,[this.sessionId,this.inputNames,this.outputNames,this.inputMetadata,this.outputMetadata]=await x0(e,g),pI()}async dispose(){return T0(this.sessionId)}async run(A,g,e){bI();let I=[],i=[];Object.entries(A).forEach(B=>{let a=B[0],d=B[1],c=this.inputNames.indexOf(a);if(c===-1)throw new Error(`invalid input '${a}'`);I.push(d),i.push(c)});let t=[],s=[];Object.entries(g).forEach(B=>{let a=B[0],d=B[1],c=this.outputNames.indexOf(a);if(c===-1)throw new Error(`invalid output '${a}'`);t.push(d),s.push(c)});let o=I.map((B,a)=>Gr(B,()=>`input "${this.inputNames[i[a]]}"`)),C=t.map((B,a)=>B?Gr(B,()=>`output "${this.outputNames[s[a]]}"`):null),r=await Y0(this.sessionId,i,o,s,C,e),Q={};for(let B=0;B$r,initializeFlags:()=>zr,wasmBackend:()=>O0});var zr,$r,O0,Ry=jA(()=>{JI(),v0(),_y(),zr=()=>{(typeof Cg.wasm.initTimeout!="number"||Cg.wasm.initTimeout<0)&&(Cg.wasm.initTimeout=0);let A=Cg.wasm.simd;if(typeof A!="boolean"&&A!==void 0&&A!=="fixed"&&A!=="relaxed"&&(console.warn(`Property "env.wasm.simd" is set to unknown value "${A}". Reset it to \`false\` and ignore SIMD feature checking.`),Cg.wasm.simd=!1),typeof Cg.wasm.proxy!="boolean"&&(Cg.wasm.proxy=!1),typeof Cg.wasm.trace!="boolean"&&(Cg.wasm.trace=!1),typeof Cg.wasm.numThreads!="number"||!Number.isInteger(Cg.wasm.numThreads)||Cg.wasm.numThreads<=0)if(typeof self<"u"&&!self.crossOriginIsolated)Cg.wasm.numThreads=1;else{let g=typeof navigator>"u"?df("node:os").cpus().length:navigator.hardwareConcurrency;Cg.wasm.numThreads=Math.min(4,Math.ceil((g||1)/2))}},$r=class{async init(A){zr(),await U0(),await b0(A)}async createInferenceSessionHandler(A,g){let e=new H0;return await e.loadModel(A,g),e}},O0=new $r});JI();JI();JI();var Gy="1.22.0-dev.20250409-89f8206ba4",ky=Sh;{let A=(Ry(),Wt(q0)).wasmBackend;fi("webgpu",A,5),fi("webnn",A,5),fi("cpu",A,10),fi("wasm",A,10)}Object.defineProperty(Cg.versions,"web",{value:Gy,enumerable:!0});/** * @license * Copyright 2021 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= *//** * @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= *//** * @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */var Ly=Object.freeze({__proto__:null,get InferenceSession(){return Aa},get TRACE(){return jt},get TRACE_FUNC_BEGIN(){return bI},get TRACE_FUNC_END(){return pI},get Tensor(){return KI},default:ky,get env(){return Cg},get registerBackend(){return fi}}),kr={},Ky={"onnxruntime-common":(A=>{A.exports=nf}),"onnxruntime-web":(A=>{A.exports=Ly}),"?2ce3":(()=>{}),"?7992":(()=>{}),"?5af5":(()=>{}),"?2b25":(()=>{}),"?db59":(()=>{}),"?383f":(()=>{}),"?fa4b":(()=>{}),"./node_modules/@huggingface/jinja/dist/index.js":((A,g,e)=>{e.r(g),e.d(g,{Environment:()=>ee,Interpreter:()=>TA,Template:()=>lI,parse:()=>xA,tokenize:()=>Q});var I=Object.freeze({Text:"Text",NumericLiteral:"NumericLiteral",StringLiteral:"StringLiteral",Identifier:"Identifier",Equals:"Equals",OpenParen:"OpenParen",CloseParen:"CloseParen",OpenStatement:"OpenStatement",CloseStatement:"CloseStatement",OpenExpression:"OpenExpression",CloseExpression:"CloseExpression",OpenSquareBracket:"OpenSquareBracket",CloseSquareBracket:"CloseSquareBracket",OpenCurlyBracket:"OpenCurlyBracket",CloseCurlyBracket:"CloseCurlyBracket",Comma:"Comma",Dot:"Dot",Colon:"Colon",Pipe:"Pipe",CallOperator:"CallOperator",AdditiveBinaryOperator:"AdditiveBinaryOperator",MultiplicativeBinaryOperator:"MultiplicativeBinaryOperator",ComparisonBinaryOperator:"ComparisonBinaryOperator",UnaryOperator:"UnaryOperator",Comment:"Comment"}),i=class{constructor(R,gA){this.value=R,this.type=gA}};function t(R){return/\w/.test(R)}function s(R){return/[0-9]/.test(R)}var o=[["{%",I.OpenStatement],["%}",I.CloseStatement],["{{",I.OpenExpression],["}}",I.CloseExpression],["(",I.OpenParen],[")",I.CloseParen],["{",I.OpenCurlyBracket],["}",I.CloseCurlyBracket],["[",I.OpenSquareBracket],["]",I.CloseSquareBracket],[",",I.Comma],[".",I.Dot],[":",I.Colon],["|",I.Pipe],["<=",I.ComparisonBinaryOperator],[">=",I.ComparisonBinaryOperator],["==",I.ComparisonBinaryOperator],["!=",I.ComparisonBinaryOperator],["<",I.ComparisonBinaryOperator],[">",I.ComparisonBinaryOperator],["+",I.AdditiveBinaryOperator],["-",I.AdditiveBinaryOperator],["~",I.AdditiveBinaryOperator],["*",I.MultiplicativeBinaryOperator],["/",I.MultiplicativeBinaryOperator],["%",I.MultiplicativeBinaryOperator],["=",I.Equals]],C=new Map([["n",` `],["t"," "],["r","\r"],["b","\b"],["f","\f"],["v","\v"],["'","'"],['"','"'],["\\","\\"]]);function r(R,gA={}){return R.endsWith(` `)&&(R=R.slice(0,-1)),gA.lstrip_blocks&&(R=R.replace(/^[ \t]*({[#%-])/gm,"$1")),gA.trim_blocks&&(R=R.replace(/([#%-]})\n/g,"$1")),R.replace(/-%}\s*/g,"%}").replace(/\s*{%-/g,"{%").replace(/-}}\s*/g,"}}").replace(/\s*{{-/g,"{{").replace(/-#}\s*/g,"#}").replace(/\s*{#-/g,"{#").replace(/{%\s*(end)?generation\s*%}/gs,"")}function Q(R,gA={}){const j=[],IA=r(R,gA);let aA=0,yA=0;const bA=ae=>{let Ee="";for(;ae(IA[aA]);){if(IA[aA]==="\\"){if(++aA,aA>=IA.length)throw new SyntaxError("Unexpected end of input");const Ie=IA[aA++],_e=C.get(Ie);if(_e===void 0)throw new SyntaxError(`Unexpected escaped character: ${Ie}`);Ee+=_e;continue}if(Ee+=IA[aA++],aA>=IA.length)throw new SyntaxError("Unexpected end of input")}return Ee};A:for(;aA0){j.push(new i(Ie,I.Text));continue}}if(IA[aA]==="{"&&IA[aA+1]==="#"){aA+=2;let Ie="";for(;IA[aA]!=="#"||IA[aA+1]!=="}";){if(aA+2>=IA.length)throw new SyntaxError("Missing end of comment tag");Ie+=IA[aA++]}j.push(new i(Ie,I.Comment)),aA+=2;continue}bA(Ie=>/\s/.test(Ie));const Ee=IA[aA];if(Ee==="-"||Ee==="+"){const Ie=j.at(-1)?.type;if(Ie===I.Text||Ie===void 0)throw new SyntaxError(`Unexpected character: ${Ee}`);switch(Ie){case I.Identifier:case I.NumericLiteral:case I.StringLiteral:case I.CloseParen:case I.CloseSquareBracket:break;default:{++aA;const _e=bA(s);j.push(new i(`${Ee}${_e}`,_e.length>0?I.NumericLiteral:I.UnaryOperator));continue}}}for(const[Ie,_e]of o){if(Ie==="}}"&&yA>0)continue;if(IA.slice(aA,aA+Ie.length)===Ie){j.push(new i(Ie,_e)),_e===I.OpenExpression?yA=0:_e===I.OpenCurlyBracket?++yA:_e===I.CloseCurlyBracket&&--yA,aA+=Ie.length;continue A}}if(Ee==="'"||Ee==='"'){++aA;const Ie=bA(_e=>_e!==Ee);j.push(new i(Ie,I.StringLiteral)),++aA;continue}if(s(Ee)){let Ie=bA(s);if(IA[aA]==="."&&s(IA[aA+1])){++aA;const _e=bA(s);Ie=`${Ie}.${_e}`}j.push(new i(Ie,I.NumericLiteral));continue}if(t(Ee)){const Ie=bA(t);j.push(new i(Ie,I.Identifier));continue}throw new SyntaxError(`Unexpected character: ${Ee}`)}return j}var B=class{type="Statement"},a=class extends B{constructor(R){super(),this.body=R}type="Program"},d=class extends B{constructor(R,gA,j){super(),this.test=R,this.body=gA,this.alternate=j}type="If"},c=class extends B{constructor(R,gA,j,IA){super(),this.loopvar=R,this.iterable=gA,this.body=j,this.defaultBlock=IA}type="For"},p=class extends B{type="Break"},L=class extends B{type="Continue"},w=class extends B{constructor(R,gA,j){super(),this.assignee=R,this.value=gA,this.body=j}type="Set"},u=class extends B{constructor(R,gA,j){super(),this.name=R,this.args=gA,this.body=j}type="Macro"},_=class extends B{constructor(R){super(),this.value=R}type="Comment"},y=class extends B{type="Expression"},M=class extends y{constructor(R,gA,j){super(),this.object=R,this.property=gA,this.computed=j}type="MemberExpression"},F=class extends y{constructor(R,gA){super(),this.callee=R,this.args=gA}type="CallExpression"},m=class extends y{constructor(R){super(),this.value=R}type="Identifier"},G=class extends y{constructor(R){super(),this.value=R}type="Literal"},T=class extends G{type="IntegerLiteral"},J=class extends G{type="FloatLiteral"},Z=class extends G{type="StringLiteral"},z=class extends G{type="ArrayLiteral"},P=class extends G{type="TupleLiteral"},tA=class extends G{type="ObjectLiteral"},AA=class extends y{constructor(R,gA,j){super(),this.operator=R,this.left=gA,this.right=j}type="BinaryExpression"},iA=class extends y{constructor(R,gA){super(),this.operand=R,this.filter=gA}type="FilterExpression"},rA=class extends B{constructor(R,gA){super(),this.filter=R,this.body=gA}type="FilterStatement"},CA=class extends y{constructor(R,gA){super(),this.lhs=R,this.test=gA}type="SelectExpression"},cA=class extends y{constructor(R,gA,j){super(),this.operand=R,this.negate=gA,this.test=j}type="TestExpression"},uA=class extends y{constructor(R,gA){super(),this.operator=R,this.argument=gA}type="UnaryExpression"},v=class extends y{constructor(R=void 0,gA=void 0,j=void 0){super(),this.start=R,this.stop=gA,this.step=j}type="SliceExpression"},x=class extends y{constructor(R,gA){super(),this.key=R,this.value=gA}type="KeywordArgumentExpression"},$=class extends y{constructor(R){super(),this.argument=R}type="SpreadExpression"},W=class extends B{constructor(R,gA,j){super(),this.call=R,this.callerArgs=gA,this.body=j}type="CallStatement"},nA=class extends y{constructor(R,gA,j){super(),this.condition=R,this.trueExpr=gA,this.falseExpr=j}type="Ternary"};function xA(R){const gA=new a([]);let j=0;function IA(f,k){const b=R[j++];if(!b||b.type!==f)throw new Error(`Parser Error: ${k}. ${b.type} !== ${f}.`);return b}function aA(f){if(!Ee(f))throw new SyntaxError(`Expected ${f}`);++j}function yA(){switch(R[j].type){case I.Comment:return new _(R[j++].value);case I.Text:return Ie();case I.OpenStatement:return _e();case I.OpenExpression:return be();default:throw new SyntaxError(`Unexpected token type: ${R[j].type}`)}}function bA(...f){return j+f.length<=R.length&&f.every((k,b)=>k===R[j+b].type)}function ae(...f){return R[j]?.type===I.OpenStatement&&R[j+1]?.type===I.Identifier&&f.includes(R[j+1]?.value)}function Ee(...f){return j+f.length<=R.length&&f.every((k,b)=>R[j+b].type==="Identifier"&&k===R[j+b].value)}function Ie(){return new Z(IA(I.Text,"Expected text token").value)}function _e(){if(IA(I.OpenStatement,"Expected opening statement token"),R[j].type!==I.Identifier)throw new SyntaxError(`Unknown statement, got ${R[j].type}`);const f=R[j].value;let k;switch(f){case"set":++j,k=tg();break;case"if":++j,k=Ag(),IA(I.OpenStatement,"Expected {% token"),aA("endif"),IA(I.CloseStatement,"Expected %} token");break;case"macro":++j,k=lg(),IA(I.OpenStatement,"Expected {% token"),aA("endmacro"),IA(I.CloseStatement,"Expected %} token");break;case"for":++j,k=gg(),IA(I.OpenStatement,"Expected {% token"),aA("endfor"),IA(I.CloseStatement,"Expected %} token");break;case"call":{++j;let b=null;bA(I.OpenParen)&&(b=cg());const eA=l();if(eA.type!=="Identifier")throw new SyntaxError("Expected identifier following call statement");const EA=cg();IA(I.CloseStatement,"Expected closing statement token");const DA=[];for(;!ae("endcall");)DA.push(yA());IA(I.OpenStatement,"Expected '{%'"),aA("endcall"),IA(I.CloseStatement,"Expected closing statement token");const MA=new F(eA,EA);k=new W(MA,b,DA);break}case"break":++j,IA(I.CloseStatement,"Expected closing statement token"),k=new p;break;case"continue":++j,IA(I.CloseStatement,"Expected closing statement token"),k=new L;break;case"filter":{++j;let b=l();b instanceof m&&bA(I.OpenParen)&&(b=yg(b)),IA(I.CloseStatement,"Expected closing statement token");const eA=[];for(;!ae("endfilter");)eA.push(yA());IA(I.OpenStatement,"Expected '{%'"),aA("endfilter"),IA(I.CloseStatement,"Expected '%}'"),k=new rA(b,eA);break}default:throw new SyntaxError(`Unknown statement type: ${f}`)}return k}function be(){IA(I.OpenExpression,"Expected opening expression token");const f=og();return IA(I.CloseExpression,"Expected closing expression token"),f}function tg(){const f=Og();let k=null;const b=[];if(bA(I.Equals))++j,k=Og();else{for(IA(I.CloseStatement,"Expected %} token");!ae("endset");)b.push(yA());IA(I.OpenStatement,"Expected {% token"),aA("endset")}return IA(I.CloseStatement,"Expected closing statement token"),new w(f,k,b)}function Ag(){const f=og();IA(I.CloseStatement,"Expected closing statement token");const k=[],b=[];for(;!ae("elif","else","endif");)k.push(yA());if(ae("elif")){++j,++j;const eA=Ag();b.push(eA)}else if(ae("else"))for(++j,++j,IA(I.CloseStatement,"Expected closing statement token");!ae("endif");)b.push(yA());return new d(f,k,b)}function lg(){const f=l();if(f.type!=="Identifier")throw new SyntaxError("Expected identifier following macro statement");const k=cg();IA(I.CloseStatement,"Expected closing statement token");const b=[];for(;!ae("endmacro");)b.push(yA());return new u(f,k,b)}function Og(f=!1){const k=f?l:og,b=[k()],eA=bA(I.Comma);for(;eA&&(++j,b.push(k()),!!bA(I.Comma)););return eA?new P(b):b[0]}function gg(){const f=Og(!0);if(!(f instanceof m||f instanceof P))throw new SyntaxError(`Expected identifier/tuple for the loop variable, got ${f.type} instead`);if(!Ee("in"))throw new SyntaxError("Expected `in` keyword following loop variable");++j;const k=og();IA(I.CloseStatement,"Expected closing statement token");const b=[];for(;!ae("endfor","else");)b.push(yA());const eA=[];if(ae("else"))for(++j,++j,IA(I.CloseStatement,"Expected closing statement token");!ae("endfor");)eA.push(yA());return new c(f,k,b,eA)}function og(){return Wg()}function Wg(){const f=Lg();if(Ee("if")){++j;const k=Lg();if(Ee("else")){++j;const b=Wg();return new nA(k,f,b)}else return new CA(f,k)}return f}function Lg(){let f=sI();for(;Ee("or");){const k=R[j];++j;const b=sI();f=new AA(k,f,b)}return f}function sI(){let f=CI();for(;Ee("and");){const k=R[j];++j;const b=CI();f=new AA(k,f,b)}return f}function CI(){let f;for(;Ee("not");){const k=R[j];++j;const b=CI();f=new uA(k,b)}return f??jg()}function jg(){let f=cI();for(;;){let k;if(Ee("not","in"))k=new i("not in",I.Identifier),j+=2;else if(Ee("in"))k=R[j++];else if(bA(I.ComparisonBinaryOperator))k=R[j++];else break;const b=cI();f=new AA(k,f,b)}return f}function cI(){let f=Tg();for(;bA(I.AdditiveBinaryOperator);){const k=R[j];++j;const b=Tg();f=new AA(k,f,b)}return f}function $g(){const f=iI(l());return bA(I.OpenParen)?yg(f):f}function yg(f){let k=new F(f,cg());return k=iI(k),bA(I.OpenParen)&&(k=yg(k)),k}function cg(){IA(I.OpenParen,"Expected opening parenthesis for arguments list");const f=$e();return IA(I.CloseParen,"Expected closing parenthesis for arguments list"),f}function $e(){const f=[];for(;!bA(I.CloseParen);){let k;if(R[j].type===I.MultiplicativeBinaryOperator&&R[j].value==="*"){++j;const b=og();k=new $(b)}else if(k=og(),bA(I.Equals)){if(++j,!(k instanceof m))throw new SyntaxError("Expected identifier for keyword argument");const b=og();k=new x(k,b)}f.push(k),bA(I.Comma)&&++j}return f}function mg(){const f=[];let k=!1;for(;!bA(I.CloseSquareBracket);)bA(I.Colon)?(f.push(void 0),++j,k=!0):(f.push(og()),bA(I.Colon)&&(++j,k=!0));if(f.length===0)throw new SyntaxError("Expected at least one argument for member/slice expression");if(k){if(f.length>3)throw new SyntaxError("Expected 0-3 arguments for slice expression");return new v(...f)}return f[0]}function iI(f){for(;bA(I.Dot)||bA(I.OpenSquareBracket);){const k=R[j];++j;let b;const eA=k.type===I.OpenSquareBracket;if(eA)b=mg(),IA(I.CloseSquareBracket,"Expected closing square bracket");else if(b=l(),b.type!=="Identifier")throw new SyntaxError("Expected identifier following dot operator");f=new M(f,b,eA)}return f}function Tg(){let f=tI();for(;bA(I.MultiplicativeBinaryOperator);){const k=R[j++],b=tI();f=new AA(k,f,b)}return f}function tI(){let f=yI();for(;Ee("is");){++j;const k=Ee("not");k&&++j;const b=l();if(!(b instanceof m))throw new SyntaxError("Expected identifier for the test");f=new cA(f,k,b)}return f}function yI(){let f=$g();for(;bA(I.Pipe);){++j;let k=l();if(!(k instanceof m))throw new SyntaxError("Expected identifier for the filter");bA(I.OpenParen)&&(k=yg(k)),f=new iA(f,k)}return f}function l(){const f=R[j++];switch(f.type){case I.NumericLiteral:{const k=f.value;return k.includes(".")?new J(Number(k)):new T(Number(k))}case I.StringLiteral:{let k=f.value;for(;bA(I.StringLiteral);)k+=R[j++].value;return new Z(k)}case I.Identifier:return new m(f.value);case I.OpenParen:{const k=Og();return IA(I.CloseParen,"Expected closing parenthesis, got ${tokens[current].type} instead."),k}case I.OpenSquareBracket:{const k=[];for(;!bA(I.CloseSquareBracket);)k.push(og()),bA(I.Comma)&&++j;return++j,new z(k)}case I.OpenCurlyBracket:{const k=new Map;for(;!bA(I.CloseCurlyBracket);){const b=og();IA(I.Colon,"Expected colon between key and value in object literal");const eA=og();k.set(b,eA),bA(I.Comma)&&++j}return++j,new tA(k)}default:throw new SyntaxError(`Unexpected token: ${f.type}`)}}for(;j=0?(gA=(gA??=0)<0?Math.max(R.length+gA,0):Math.min(gA,R.length),j=(j??=R.length)<0?Math.max(R.length+j,0):Math.min(j,R.length)):(gA=(gA??=R.length-1)<0?Math.max(R.length+gA,-1):Math.min(gA,R.length-1),j=(j??=-1)<-1?Math.max(R.length+j,-1):Math.min(j,R.length-1));const yA=[];for(let bA=gA;aA*bAgA.toUpperCase())}function kA(R){return X(new Date,R)}function X(R,gA){const j=new Intl.DateTimeFormat(void 0,{month:"long"}),IA=new Intl.DateTimeFormat(void 0,{month:"short"}),aA=yA=>yA<10?"0"+yA:yA.toString();return gA.replace(/%[YmdbBHM%]/g,yA=>{switch(yA){case"%Y":return R.getFullYear().toString();case"%m":return aA(R.getMonth()+1);case"%d":return aA(R.getDate());case"%b":return IA.format(R);case"%B":return j.format(R);case"%H":return aA(R.getHours());case"%M":return aA(R.getMinutes());case"%%":return"%";default:return yA}})}function q(R){return R.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function wA(R,gA,j,IA){if(IA===0)return R;let aA=IA==null||IA<0?1/0:IA;const yA=gA.length===0?new RegExp("(?=)","gu"):new RegExp(q(gA),"gu");return R.replaceAll(yA,bA=>aA>0?(--aA,j):bA)}var LA=class extends Error{},JA=class extends Error{},GA=class{type="RuntimeValue";value;builtins=new Map;constructor(R=void 0){this.value=R}__bool__(){return new YA(!!this.value)}toString(){return String(this.value)}},fA=class extends GA{type="IntegerValue"},_A=class extends GA{type="FloatValue";toString(){return this.value%1===0?this.value.toFixed(1):this.value.toString()}},dA=class extends GA{type="StringValue";builtins=new Map([["upper",new $A(()=>new dA(this.value.toUpperCase()))],["lower",new $A(()=>new dA(this.value.toLowerCase()))],["strip",new $A(()=>new dA(this.value.trim()))],["title",new $A(()=>new dA(ie(this.value)))],["capitalize",new $A(()=>new dA(this.value.charAt(0).toUpperCase()+this.value.slice(1)))],["length",new fA(this.value.length)],["rstrip",new $A(()=>new dA(this.value.trimEnd()))],["lstrip",new $A(()=>new dA(this.value.trimStart()))],["startswith",new $A(R=>{if(R.length===0)throw new Error("startswith() requires at least one argument");const gA=R[0];if(gA instanceof dA)return new YA(this.value.startsWith(gA.value));if(gA instanceof SA){for(const j of gA.value){if(!(j instanceof dA))throw new Error("startswith() tuple elements must be strings");if(this.value.startsWith(j.value))return new YA(!0)}return new YA(!1)}throw new Error("startswith() argument must be a string or tuple of strings")})],["endswith",new $A(R=>{if(R.length===0)throw new Error("endswith() requires at least one argument");const gA=R[0];if(gA instanceof dA)return new YA(this.value.endsWith(gA.value));if(gA instanceof SA){for(const j of gA.value){if(!(j instanceof dA))throw new Error("endswith() tuple elements must be strings");if(this.value.endsWith(j.value))return new YA(!0)}return new YA(!1)}throw new Error("endswith() argument must be a string or tuple of strings")})],["split",new $A(R=>{const gA=R[0]??new WA;if(!(gA instanceof dA||gA instanceof WA))throw new Error("sep argument must be a string or null");const j=R[1]??new fA(-1);if(!(j instanceof fA))throw new Error("maxsplit argument must be a number");let IA=[];if(gA instanceof WA){const aA=this.value.trimStart();for(const{0:yA,index:bA}of aA.matchAll(/\S+/g)){if(j.value!==-1&&IA.length>=j.value&&bA!==void 0){IA.push(yA+aA.slice(bA+yA.length));break}IA.push(yA)}}else{if(gA.value==="")throw new Error("empty separator");IA=this.value.split(gA.value),j.value!==-1&&IA.length>j.value&&IA.push(IA.splice(j.value).join(gA.value))}return new SA(IA.map(aA=>new dA(aA)))})],["replace",new $A(R=>{if(R.length<2)throw new Error("replace() requires at least two arguments");const gA=R[0],j=R[1];if(!(gA instanceof dA&&j instanceof dA))throw new Error("replace() arguments must be strings");let IA;if(R.length>2?R[2].type==="KeywordArgumentsValue"?IA=R[2].value.get("count")??new WA:IA=R[2]:IA=new WA,!(IA instanceof fA||IA instanceof WA))throw new Error("replace() count argument must be a number or null");return new dA(wA(this.value,gA.value,j.value,IA.value))})]])},YA=class extends GA{type="BooleanValue"},HA=class extends GA{type="ObjectValue";__bool__(){return new YA(this.value.size>0)}builtins=new Map([["get",new $A(([R,gA])=>{if(!(R instanceof dA))throw new Error(`Object key must be a string: got ${R.type}`);return this.value.get(R.value)??gA??new WA})],["items",new $A(()=>this.items())],["keys",new $A(()=>this.keys())],["values",new $A(()=>this.values())]]);items(){return new SA(Array.from(this.value.entries()).map(([R,gA])=>new SA([new dA(R),gA])))}keys(){return new SA(Array.from(this.value.keys()).map(R=>new dA(R)))}values(){return new SA(Array.from(this.value.values()))}},Ae=class extends HA{type="KeywordArgumentsValue"},SA=class extends GA{type="ArrayValue";builtins=new Map([["length",new fA(this.value.length)]]);__bool__(){return new YA(this.value.length>0)}},re=class extends SA{type="TupleValue"},$A=class extends GA{type="FunctionValue"},WA=class extends GA{type="NullValue"},Ce=class extends GA{type="UndefinedValue"},ee=class{constructor(R){this.parent=R}variables=new Map([["namespace",new $A(R=>{if(R.length===0)return new HA(new Map);if(R.length!==1||!(R[0]instanceof HA))throw new Error("`namespace` expects either zero arguments or a single object argument");return R[0]})]]);tests=new Map([["boolean",R=>R.type==="BooleanValue"],["callable",R=>R instanceof $A],["odd",R=>{if(!(R instanceof fA))throw new Error(`cannot odd on ${R.type}`);return R.value%2!==0}],["even",R=>{if(!(R instanceof fA))throw new Error(`cannot even on ${R.type}`);return R.value%2===0}],["false",R=>R.type==="BooleanValue"&&!R.value],["true",R=>R.type==="BooleanValue"&&R.value],["none",R=>R.type==="NullValue"],["string",R=>R.type==="StringValue"],["number",R=>R instanceof fA||R instanceof _A],["integer",R=>R instanceof fA],["iterable",R=>R.type==="ArrayValue"||R.type==="StringValue"],["mapping",R=>R.type==="ObjectValue"],["lower",R=>{const gA=R.value;return R.type==="StringValue"&&gA===gA.toLowerCase()}],["upper",R=>{const gA=R.value;return R.type==="StringValue"&&gA===gA.toUpperCase()}],["none",R=>R.type==="NullValue"],["defined",R=>R.type!=="UndefinedValue"],["undefined",R=>R.type==="UndefinedValue"],["equalto",(R,gA)=>R.value===gA.value],["eq",(R,gA)=>R.value===gA.value]]);set(R,gA){return this.declareVariable(R,ke(gA))}declareVariable(R,gA){if(this.variables.has(R))throw new SyntaxError(`Variable already declared: ${R}`);return this.variables.set(R,gA),gA}setVariable(R,gA){return this.variables.set(R,gA),gA}resolve(R){if(this.variables.has(R))return this;if(this.parent)return this.parent.resolve(R);throw new Error(`Unknown variable: ${R}`)}lookupVariable(R){try{return this.resolve(R).variables.get(R)??new Ce}catch{return new Ce}}};function oe(R){R.set("false",!1),R.set("true",!0),R.set("none",null),R.set("raise_exception",gA=>{throw new Error(gA)}),R.set("range",RA),R.set("strftime_now",kA),R.set("True",!0),R.set("False",!1),R.set("None",null)}var TA=class{global;constructor(R){this.global=R??new ee}run(R){return this.evaluate(R,this.global)}evaluateBinaryExpression(R,gA){const j=this.evaluate(R.left,gA);switch(R.operator.value){case"and":return j.__bool__().value?this.evaluate(R.right,gA):j;case"or":return j.__bool__().value?j:this.evaluate(R.right,gA)}const IA=this.evaluate(R.right,gA);switch(R.operator.value){case"==":return new YA(j.value==IA.value);case"!=":return new YA(j.value!=IA.value)}if(j instanceof Ce||IA instanceof Ce){if(IA instanceof Ce&&["in","not in"].includes(R.operator.value))return new YA(R.operator.value==="not in");throw new Error(`Cannot perform operation ${R.operator.value} on undefined values`)}else{if(j instanceof WA||IA instanceof WA)throw new Error("Cannot perform operation on null values");if(R.operator.value==="~")return new dA(j.value.toString()+IA.value.toString());if((j instanceof fA||j instanceof _A)&&(IA instanceof fA||IA instanceof _A)){const aA=j.value,yA=IA.value;switch(R.operator.value){case"+":case"-":case"*":{const bA=R.operator.value==="+"?aA+yA:R.operator.value==="-"?aA-yA:aA*yA;return j instanceof _A||IA instanceof _A?new _A(bA):new fA(bA)}case"/":return new _A(aA/yA);case"%":{const bA=aA%yA;return j instanceof _A||IA instanceof _A?new _A(bA):new fA(bA)}case"<":return new YA(aA":return new YA(aA>yA);case">=":return new YA(aA>=yA);case"<=":return new YA(aA<=yA)}}else if(j instanceof SA&&IA instanceof SA)switch(R.operator.value){case"+":return new SA(j.value.concat(IA.value))}else if(IA instanceof SA){const aA=IA.value.find(yA=>yA.value===j.value)!==void 0;switch(R.operator.value){case"in":return new YA(aA);case"not in":return new YA(!aA)}}}if(j instanceof dA||IA instanceof dA)switch(R.operator.value){case"+":return new dA(j.value.toString()+IA.value.toString())}if(j instanceof dA&&IA instanceof dA)switch(R.operator.value){case"in":return new YA(IA.value.includes(j.value));case"not in":return new YA(!IA.value.includes(j.value))}if(j instanceof dA&&IA instanceof HA)switch(R.operator.value){case"in":return new YA(IA.value.has(j.value));case"not in":return new YA(!IA.value.has(j.value))}throw new SyntaxError(`Unknown operator "${R.operator.value}" between ${j.type} and ${IA.type}`)}evaluateArguments(R,gA){const j=[],IA=new Map;for(const aA of R)if(aA.type==="SpreadExpression"){const yA=aA,bA=this.evaluate(yA.argument,gA);if(!(bA instanceof SA))throw new Error(`Cannot unpack non-iterable type: ${bA.type}`);for(const ae of bA.value)j.push(ae)}else if(aA.type==="KeywordArgumentExpression"){const yA=aA;IA.set(yA.key.value,this.evaluate(yA.value,gA))}else{if(IA.size>0)throw new Error("Positional arguments must come before keyword arguments");j.push(this.evaluate(aA,gA))}return[j,IA]}applyFilter(R,gA,j){if(gA.type==="Identifier"){const IA=gA;if(IA.value==="tojson")return new dA(Je(R));if(R instanceof SA)switch(IA.value){case"list":return R;case"first":return R.value[0];case"last":return R.value[R.value.length-1];case"length":return new fA(R.value.length);case"reverse":return new SA(R.value.reverse());case"sort":return new SA(R.value.sort((aA,yA)=>{if(aA.type!==yA.type)throw new Error(`Cannot compare different types: ${aA.type} and ${yA.type}`);switch(aA.type){case"IntegerValue":case"FloatValue":return aA.value-yA.value;case"StringValue":return aA.value.localeCompare(yA.value);default:throw new Error(`Cannot compare type: ${aA.type}`)}}));case"join":return new dA(R.value.map(aA=>aA.value).join(""));case"string":return new dA(Je(R));case"unique":{const aA=new Set,yA=[];for(const bA of R.value)aA.has(bA.value)||(aA.add(bA.value),yA.push(bA));return new SA(yA)}default:throw new Error(`Unknown ArrayValue filter: ${IA.value}`)}else if(R instanceof dA)switch(IA.value){case"length":case"upper":case"lower":case"title":case"capitalize":{const aA=R.builtins.get(IA.value);if(aA instanceof $A)return aA.value([],j);if(aA instanceof fA)return aA;throw new Error(`Unknown StringValue filter: ${IA.value}`)}case"trim":return new dA(R.value.trim());case"indent":return new dA(R.value.split(` `).map((aA,yA)=>yA===0||aA.length===0?aA:" "+aA).join(` `));case"join":case"string":return R;case"int":{const aA=parseInt(R.value,10);return new fA(isNaN(aA)?0:aA)}case"float":{const aA=parseFloat(R.value);return new _A(isNaN(aA)?0:aA)}default:throw new Error(`Unknown StringValue filter: ${IA.value}`)}else if(R instanceof fA||R instanceof _A)switch(IA.value){case"abs":return R instanceof fA?new fA(Math.abs(R.value)):new _A(Math.abs(R.value));case"int":return new fA(Math.floor(R.value));case"float":return new _A(R.value);default:throw new Error(`Unknown NumericValue filter: ${IA.value}`)}else if(R instanceof HA)switch(IA.value){case"items":return new SA(Array.from(R.value.entries()).map(([aA,yA])=>new SA([new dA(aA),yA])));case"length":return new fA(R.value.size);default:throw new Error(`Unknown ObjectValue filter: ${IA.value}`)}else if(R instanceof YA)switch(IA.value){case"bool":return new YA(R.value);case"int":return new fA(R.value?1:0);case"float":return new _A(R.value?1:0);case"string":return new dA(R.value?"true":"false");default:throw new Error(`Unknown BooleanValue filter: ${IA.value}`)}throw new Error(`Cannot apply filter "${IA.value}" to type: ${R.type}`)}else if(gA.type==="CallExpression"){const IA=gA;if(IA.callee.type!=="Identifier")throw new Error(`Unknown filter: ${IA.callee.type}`);const aA=IA.callee.value;if(aA==="tojson"){const[,yA]=this.evaluateArguments(IA.args,j),bA=yA.get("indent")??new WA;if(!(bA instanceof fA||bA instanceof WA))throw new Error("If set, indent must be a number");return new dA(Je(R,bA.value))}else if(aA==="join"){let yA;if(R instanceof dA)yA=Array.from(R.value);else if(R instanceof SA)yA=R.value.map(Ie=>Ie.value);else throw new Error(`Cannot apply filter "${aA}" to type: ${R.type}`);const[bA,ae]=this.evaluateArguments(IA.args,j),Ee=bA.at(0)??ae.get("separator")??new dA("");if(!(Ee instanceof dA))throw new Error("separator must be a string");return new dA(yA.join(Ee.value))}else if(aA==="int"||aA==="float"){const[yA,bA]=this.evaluateArguments(IA.args,j),ae=yA.at(0)??bA.get("default")??(aA==="int"?new fA(0):new _A(0));if(R instanceof dA){const Ee=aA==="int"?parseInt(R.value,10):parseFloat(R.value);return isNaN(Ee)?ae:aA==="int"?new fA(Ee):new _A(Ee)}else{if(R instanceof fA||R instanceof _A)return R;if(R instanceof YA)return aA==="int"?new fA(R.value?1:0):new _A(R.value?1:0);throw new Error(`Cannot apply filter "${aA}" to type: ${R.type}`)}}else if(aA==="default"){const[yA,bA]=this.evaluateArguments(IA.args,j),ae=yA[0]??new dA(""),Ee=yA[1]??bA.get("boolean")??new YA(!1);if(!(Ee instanceof YA))throw new Error("`default` filter flag must be a boolean");return R instanceof Ce||Ee.value&&!R.__bool__().value?ae:R}if(R instanceof SA){switch(aA){case"selectattr":case"rejectattr":{const yA=aA==="selectattr";if(R.value.some(be=>!(be instanceof HA)))throw new Error(`\`${aA}\` can only be applied to array of objects`);if(IA.args.some(be=>be.type!=="StringLiteral"))throw new Error(`arguments of \`${aA}\` must be strings`);const[bA,ae,Ee]=IA.args.map(be=>this.evaluate(be,j));let Ie;if(ae){const be=j.tests.get(ae.value);if(!be)throw new Error(`Unknown test: ${ae.value}`);Ie=be}else Ie=(...be)=>be[0].__bool__().value;const _e=R.value.filter(be=>{const tg=be.value.get(bA.value),Ag=tg?Ie(tg,Ee):!1;return yA?Ag:!Ag});return new SA(_e)}case"map":{const[,yA]=this.evaluateArguments(IA.args,j);if(yA.has("attribute")){const bA=yA.get("attribute");if(!(bA instanceof dA))throw new Error("attribute must be a string");const ae=yA.get("default"),Ee=R.value.map(Ie=>{if(!(Ie instanceof HA))throw new Error("items in map must be an object");return Ie.value.get(bA.value)??ae??new Ce});return new SA(Ee)}else throw new Error("`map` expressions without `attribute` set are not currently supported.")}}throw new Error(`Unknown ArrayValue filter: ${aA}`)}else if(R instanceof dA){switch(aA){case"indent":{const[yA,bA]=this.evaluateArguments(IA.args,j),ae=yA.at(0)??bA.get("width")??new fA(4);if(!(ae instanceof fA))throw new Error("width must be a number");const Ee=yA.at(1)??bA.get("first")??new YA(!1),Ie=yA.at(2)??bA.get("blank")??new YA(!1),_e=R.value.split(` `),be=" ".repeat(ae.value),tg=_e.map((Ag,lg)=>!Ee.value&&lg===0||!Ie.value&&Ag.length===0?Ag:be+Ag);return new dA(tg.join(` `))}case"replace":{const yA=R.builtins.get("replace");if(!(yA instanceof $A))throw new Error("replace filter not available");const[bA,ae]=this.evaluateArguments(IA.args,j);return yA.value([...bA,new Ae(ae)],j)}}throw new Error(`Unknown StringValue filter: ${aA}`)}else throw new Error(`Cannot apply filter "${aA}" to type: ${R.type}`)}throw new Error(`Unknown filter: ${gA.type}`)}evaluateFilterExpression(R,gA){const j=this.evaluate(R.operand,gA);return this.applyFilter(j,R.filter,gA)}evaluateTestExpression(R,gA){const j=this.evaluate(R.operand,gA),IA=gA.tests.get(R.test.value);if(!IA)throw new Error(`Unknown test: ${R.test.value}`);const aA=IA(j);return new YA(R.negate?!aA:aA)}evaluateSelectExpression(R,gA){return this.evaluate(R.test,gA).__bool__().value?this.evaluate(R.lhs,gA):new Ce}evaluateUnaryExpression(R,gA){const j=this.evaluate(R.argument,gA);switch(R.operator.value){case"not":return new YA(!j.value);default:throw new SyntaxError(`Unknown operator: ${R.operator.value}`)}}evaluateTernaryExpression(R,gA){return this.evaluate(R.condition,gA).__bool__().value?this.evaluate(R.trueExpr,gA):this.evaluate(R.falseExpr,gA)}evalProgram(R,gA){return this.evaluateBlock(R.body,gA)}evaluateBlock(R,gA){let j="";for(const IA of R){const aA=this.evaluate(IA,gA);aA.type!=="NullValue"&&aA.type!=="UndefinedValue"&&(j+=aA.toString())}return new dA(j)}evaluateIdentifier(R,gA){return gA.lookupVariable(R.value)}evaluateCallExpression(R,gA){const[j,IA]=this.evaluateArguments(R.args,gA);IA.size>0&&j.push(new Ae(IA));const aA=this.evaluate(R.callee,gA);if(aA.type!=="FunctionValue")throw new Error(`Cannot call something that is not a function: got ${aA.type}`);return aA.value(j,gA)}evaluateSliceExpression(R,gA,j){if(!(R instanceof SA||R instanceof dA))throw new Error("Slice object must be an array or string");const IA=this.evaluate(gA.start,j),aA=this.evaluate(gA.stop,j),yA=this.evaluate(gA.step,j);if(!(IA instanceof fA||IA instanceof Ce))throw new Error("Slice start must be numeric or undefined");if(!(aA instanceof fA||aA instanceof Ce))throw new Error("Slice stop must be numeric or undefined");if(!(yA instanceof fA||yA instanceof Ce))throw new Error("Slice step must be numeric or undefined");return R instanceof SA?new SA(vA(R.value,IA.value,aA.value,yA.value)):new dA(vA(Array.from(R.value),IA.value,aA.value,yA.value).join(""))}evaluateMemberExpression(R,gA){const j=this.evaluate(R.object,gA);let IA;if(R.computed){if(R.property.type==="SliceExpression")return this.evaluateSliceExpression(j,R.property,gA);IA=this.evaluate(R.property,gA)}else IA=new dA(R.property.value);let aA;if(j instanceof HA){if(!(IA instanceof dA))throw new Error(`Cannot access property with non-string: got ${IA.type}`);aA=j.value.get(IA.value)??j.builtins.get(IA.value)}else if(j instanceof SA||j instanceof dA)if(IA instanceof fA)aA=j.value.at(IA.value),j instanceof dA&&(aA=new dA(j.value.at(IA.value)));else if(IA instanceof dA)aA=j.builtins.get(IA.value);else throw new Error(`Cannot access property with non-string/non-number: got ${IA.type}`);else{if(!(IA instanceof dA))throw new Error(`Cannot access property with non-string: got ${IA.type}`);aA=j.builtins.get(IA.value)}return aA instanceof GA?aA:new Ce}evaluateSet(R,gA){const j=R.value?this.evaluate(R.value,gA):this.evaluateBlock(R.body,gA);if(R.assignee.type==="Identifier"){const IA=R.assignee.value;gA.setVariable(IA,j)}else if(R.assignee.type==="TupleLiteral"){const IA=R.assignee;if(!(j instanceof SA))throw new Error(`Cannot unpack non-iterable type in set: ${j.type}`);const aA=j.value;if(aA.length!==IA.value.length)throw new Error(`Too ${IA.value.length>aA.length?"few":"many"} items to unpack in set`);for(let yA=0;yAAg.setVariable(R.loopvar.value,be);else if(R.loopvar.type==="TupleLiteral"){const Ag=R.loopvar;if(be.type!=="ArrayValue")throw new Error(`Cannot unpack non-iterable type: ${be.type}`);const lg=be;if(Ag.value.length!==lg.value.length)throw new Error(`Too ${Ag.value.length>lg.value.length?"few":"many"} items to unpack`);tg=Og=>{for(let gg=0;gg0?yA[Ie-1]:new Ce],["nextitem",Ie{const aA=new ee(IA);j=j.slice();let yA;j.at(-1)?.type==="KeywordArgumentsValue"&&(yA=j.pop());for(let bA=0;bA{const Ie=new ee(Ee);if(R.callerArgs)for(let _e=0;_ethis.evaluate(j,gA)));case"TupleLiteral":return new re(R.value.map(j=>this.evaluate(j,gA)));case"ObjectLiteral":{const j=new Map;for(const[IA,aA]of R.value){const yA=this.evaluate(IA,gA);if(!(yA instanceof dA))throw new Error(`Object keys must be strings: got ${yA.type}`);j.set(yA.value,this.evaluate(aA,gA))}return new HA(j)}case"Identifier":return this.evaluateIdentifier(R,gA);case"CallExpression":return this.evaluateCallExpression(R,gA);case"MemberExpression":return this.evaluateMemberExpression(R,gA);case"UnaryExpression":return this.evaluateUnaryExpression(R,gA);case"BinaryExpression":return this.evaluateBinaryExpression(R,gA);case"FilterExpression":return this.evaluateFilterExpression(R,gA);case"FilterStatement":return this.evaluateFilterStatement(R,gA);case"TestExpression":return this.evaluateTestExpression(R,gA);case"SelectExpression":return this.evaluateSelectExpression(R,gA);case"Ternary":return this.evaluateTernaryExpression(R,gA);case"Comment":return new WA;default:throw new SyntaxError(`Unknown node type: ${R.type}`)}}};function ke(R){switch(typeof R){case"number":return Number.isInteger(R)?new fA(R):new _A(R);case"string":return new dA(R);case"boolean":return new YA(R);case"undefined":return new Ce;case"object":return R===null?new WA:Array.isArray(R)?new SA(R.map(ke)):new HA(new Map(Object.entries(R).map(([gA,j])=>[gA,ke(j)])));case"function":return new $A((gA,j)=>{const IA=R(...gA.map(aA=>aA.value))??null;return ke(IA)});default:throw new Error(`Cannot convert to runtime value: ${R}`)}}function Je(R,gA,j){const IA=j??0;switch(R.type){case"NullValue":case"UndefinedValue":return"null";case"IntegerValue":case"FloatValue":case"StringValue":case"BooleanValue":return JSON.stringify(R.value);case"ArrayValue":case"ObjectValue":{const aA=gA?" ".repeat(gA):"",yA=` `+aA.repeat(IA),bA=yA+aA;if(R.type==="ArrayValue"){const ae=R.value.map(Ee=>Je(Ee,gA,IA+1));return gA?`[${bA}${ae.join(`,${bA}`)}${yA}]`:`[${ae.join(", ")}]`}else{const ae=Array.from(R.value.entries()).map(([Ee,Ie])=>{const _e=`"${Ee}": ${Je(Ie,gA,IA+1)}`;return gA?`${bA}${_e}`:_e});return gA?`{${ae.join(",")}${yA}}`:`{${ae.join(", ")}}`}}default:throw new Error(`Cannot convert to JSON: ${R.type}`)}}var pe=` `,fg="{%- ",zg=" -%}";function qg(R){switch(R.operator.type){case"MultiplicativeBinaryOperator":return 4;case"AdditiveBinaryOperator":return 3;case"ComparisonBinaryOperator":return 2;case"Identifier":return R.operator.value==="and"?1:R.operator.value==="in"||R.operator.value==="not in"?2:0}return 0}function xg(R,gA=" "){const j=typeof gA=="number"?" ".repeat(gA):gA;return U(R.body,0,j).replace(/\n$/,"")}function rg(...R){return fg+R.join(" ")+zg}function U(R,gA,j){return R.map(IA=>wg(IA,gA,j)).join(pe)}function wg(R,gA,j){const IA=j.repeat(gA);switch(R.type){case"Program":return U(R.body,gA,j);case"If":return xI(R,gA,j);case"For":return fI(R,gA,j);case"Set":return AI(R,gA,j);case"Macro":return he(R,gA,j);case"Break":return IA+rg("break");case"Continue":return IA+rg("continue");case"CallStatement":return EI(R,gA,j);case"FilterStatement":return ze(R,gA,j);case"Comment":return IA+"{# "+R.value+" #}";default:return IA+"{{- "+Ne(R)+" -}}"}}function xI(R,gA,j){const IA=j.repeat(gA),aA=[];let yA=R;for(;yA&&(aA.push({test:yA.test,body:yA.body}),yA.alternate.length===1&&yA.alternate[0].type==="If");)yA=yA.alternate[0];let bA=IA+rg("if",Ne(aA[0].test))+pe+U(aA[0].body,gA+1,j);for(let ae=1;ae0&&(bA+=pe+IA+rg("else")+pe+U(yA.alternate,gA+1,j)),bA+=pe+IA+rg("endif"),bA}function fI(R,gA,j){const IA=j.repeat(gA);let aA="";if(R.iterable.type==="SelectExpression"){const bA=R.iterable;aA=`${Ne(bA.lhs)} if ${Ne(bA.test)}`}else aA=Ne(R.iterable);let yA=IA+rg("for",Ne(R.loopvar),"in",aA)+pe+U(R.body,gA+1,j);return R.defaultBlock.length>0&&(yA+=pe+IA+rg("else")+pe+U(R.defaultBlock,gA+1,j)),yA+=pe+IA+rg("endfor"),yA}function AI(R,gA,j){const IA=j.repeat(gA),aA=Ne(R.assignee),yA=R.value?Ne(R.value):"",bA=IA+rg("set",`${aA}${R.value?" = "+yA:""}`);return R.body.length===0?bA:bA+pe+U(R.body,gA+1,j)+pe+IA+rg("endset")}function he(R,gA,j){const IA=j.repeat(gA),aA=R.args.map(Ne).join(", ");return IA+rg("macro",`${R.name.value}(${aA})`)+pe+U(R.body,gA+1,j)+pe+IA+rg("endmacro")}function EI(R,gA,j){const IA=j.repeat(gA),aA=R.callerArgs&&R.callerArgs.length>0?`(${R.callerArgs.map(Ne).join(", ")})`:"",yA=Ne(R.call);let bA=IA+rg(`call${aA}`,yA)+pe;return bA+=U(R.body,gA+1,j)+pe,bA+=IA+rg("endcall"),bA}function ze(R,gA,j){const IA=j.repeat(gA),aA=R.filter.type==="Identifier"?R.filter.value:Ne(R.filter);let yA=IA+rg("filter",aA)+pe;return yA+=U(R.body,gA+1,j)+pe,yA+=IA+rg("endfilter"),yA}function Ne(R,gA=-1){switch(R.type){case"SpreadExpression":return`*${Ne(R.argument)}`;case"Identifier":return R.value;case"IntegerLiteral":return`${R.value}`;case"FloatLiteral":return`${R.value}`;case"StringLiteral":return JSON.stringify(R.value);case"BinaryExpression":{const j=R,IA=qg(j),aA=Ne(j.left,IA),yA=Ne(j.right,IA+1),bA=`${aA} ${j.operator.value} ${yA}`;return IA`${Ne(IA)}: ${Ne(aA)}`).join(", ")}}`;case"SliceExpression":{const j=R,IA=j.start?Ne(j.start):"",aA=j.stop?Ne(j.stop):"",yA=j.step?`:${Ne(j.step)}`:"";return`${IA}:${aA}${yA}`}case"KeywordArgumentExpression":{const j=R;return`${j.key.value}=${Ne(j.value)}`}case"Ternary":{const j=R,IA=`${Ne(j.trueExpr)} if ${Ne(j.condition,0)} else ${Ne(j.falseExpr)}`;return gA>-1?`(${IA})`:IA}default:throw new Error(`Unknown expression type: ${R.type}`)}}var lI=class{parsed;constructor(R){const gA=Q(R,{lstrip_blocks:!0,trim_blocks:!0});this.parsed=xA(gA)}render(R){const gA=new ee;if(oe(gA),R)for(const[aA,yA]of Object.entries(R))gA.set(aA,yA);return new TA(gA).run(this.parsed).value}format(R){return xg(this.parsed,R?.indent||" ")}}}),"./src/backends/onnx.js":((A,g,e)=>{var I;e.r(g),e.d(g,{Tensor:()=>o.Tensor,createInferenceSession:()=>L,deviceToExecutionProviders:()=>c,isONNXProxy:()=>F,isONNXTensor:()=>y,runInferenceSession:()=>_});var i=e("./src/env.js"),t=e("?2ce3"),s=e("onnxruntime-web"),o=e("onnxruntime-common");const C=Object.freeze({auto:null,gpu:null,cpu:"cpu",wasm:"wasm",webgpu:"webgpu",cuda:"cuda",dml:"dml",webnn:{name:"webnn",deviceType:"cpu"},"webnn-npu":{name:"webnn",deviceType:"npu"},"webnn-gpu":{name:"webnn",deviceType:"gpu"},"webnn-cpu":{name:"webnn",deviceType:"cpu"}}),r=[];let Q,B;const a=Symbol.for("onnxruntime");if(a in globalThis)B=globalThis[a];else if(i.apis.IS_NODE_ENV){switch(B=t??(I||(I=e.t(t,2))),process.platform){case"win32":r.push("dml");break;case"linux":process.arch==="x64"&&r.push("cuda");break}r.push("cpu"),Q=["cpu"]}else B=s,i.apis.IS_WEBNN_AVAILABLE&&r.push("webnn-npu","webnn-gpu","webnn-cpu","webnn"),i.apis.IS_WEBGPU_AVAILABLE&&r.push("webgpu"),r.push("wasm"),Q=["wasm"];const d=B.InferenceSession;function c(m=null){if(!m)return Q;switch(m){case"auto":return r;case"gpu":return r.filter(G=>["webgpu","cuda","dml","webnn-gpu"].includes(G))}if(r.includes(m))return[C[m]??m];throw new Error(`Unsupported device: "${m}". Should be one of: ${r.join(", ")}.`)}let p=null;async function L(m,G,T){p&&await p;const J=d.create(m,G);p??=J;const Z=await J;return Z.config=T,Z}let w=Promise.resolve();const u=i.apis.IS_BROWSER_ENV||i.apis.IS_WEBWORKER_ENV;async function _(m,G){const T=()=>m.run(G);return await(u?w=w.then(T):T())}function y(m){return m instanceof B.Tensor}const M=B?.env;M?.wasm&&(!(typeof ServiceWorkerGlobalScope<"u"&&self instanceof ServiceWorkerGlobalScope)&&!M.wasm.wasmPaths&&(M.wasm.wasmPaths=`https://cdn.jsdelivr.net/npm/@huggingface/transformers@${i.env.version}/dist/`),M.wasm.proxy=!1),M?.webgpu&&(M.webgpu.powerPreference="high-performance");function F(){return M?.wasm?.proxy}i.env.backends.onnx=M}),"./src/base/feature_extraction_utils.js":((A,g,e)=>{e.r(g),e.d(g,{FeatureExtractor:()=>s,validate_audio_inputs:()=>o});var I=e("./src/utils/constants.js"),i=e("./src/utils/generic.js"),t=e("./src/utils/hub.js");class s extends i.Callable{constructor(r){super(),this.config=r}static async from_pretrained(r,Q={}){const B=await(0,t.getModelJSON)(r,I.FEATURE_EXTRACTOR_NAME,!0,Q);return new this(B)}}function o(C,r){if(!(C instanceof Float32Array||C instanceof Float64Array))throw new Error(`${r} expects input to be a Float32Array or a Float64Array, but got ${C?.constructor?.name??typeof C} instead. If using the feature extractor directly, remember to use \`read_audio(url, sampling_rate)\` to obtain the raw audio data of the file/url.`)}}),"./src/base/image_processors_utils.js":((A,g,e)=>{e.r(g),e.d(g,{ImageProcessor:()=>y,center_to_corners_format:()=>B,post_process_instance_segmentation:()=>_,post_process_object_detection:()=>a,post_process_panoptic_segmentation:()=>u,post_process_semantic_segmentation:()=>d});var I=e("./src/utils/generic.js"),i=e("./src/utils/tensor.js"),t=e("./src/utils/maths.js");e("./src/utils/image.js");var s=e("./src/utils/core.js"),o=e("./src/utils/hub.js"),C=e("./src/utils/constants.js");function r(M,F,m=0,G=null){const T=M/F;let J=(0,t.bankers_round)(T)*F;return G!==null&&J>G&&(J=Math.floor(T)*F),JF&&x.push(W)}else{let W=(0,t.max)(v.data)[1];if(W===P-1||($=(0,t.softmax)(v.data),$[W]xA*iA[(RA+1)%2])),rA.boxes.push(nA),rA.classes.push(W),rA.scores.push($[W])}}tA.push(rA)}return tA}function d(M,F=null){const m=M.logits,G=m.dims[0];if(F!==null&&F.length!==G)throw Error("Make sure that you pass in as many target sizes as the batch dimension of the logits");const T=[];for(let J=0;JiA[x]&&(iA[x]=v[x],rA[x]=uA)}const CA=new Array(z.dims[0]);for(let uA=0;uAuA!==void 0);T.push({segmentation:AA,labels:cA})}return T}function c(M,F,m,G){const T=[],J=[],Z=[];for(let z=0;zm&&(T.push(tA),J.push(rA),Z.push(AA))}return[T,J,Z]}function p(M,F,m,G=.5,T=.8){const J=[];let Z=0,z=0;const P=F[m].data;for(let AA=0;AA=G&&++z;let tA=Z>0&&z>0;return tA&&(tA=Z/z>T),[tA,J]}function L(M,F,m,G,T,J=null,Z=null){const[z,P]=Z??M[0].dims,tA=new i.Tensor("int32",new Int32Array(z*P),[z,P]),AA=[];if(Z!==null)for(let uA=0;uArA[$]&&(iA[$]=uA,rA[$]=x[$])}let CA=0;const cA=tA.data;for(let uA=0;uA200)throw new Error(`absolute aspect ratio must be smaller than 200, got ${Math.max(M,F)/Math.min(M,F)}`);let J=Math.round(M/m)*m,Z=Math.round(F/m)*m;if(J*Z>T){const z=Math.sqrt(M*F/T);J=Math.floor(M/z/m)*m,Z=Math.floor(F/z/m)*m}else if(J*ZJ?tA=Math.floor(J*P/T):J>T&&(P=Math.floor(T*tA/J)),await F.resize(tA,P,{resample:G}))}async crop_margin(F,m=200){const G=F.clone().grayscale(),T=(0,t.min)(G.data)[0],Z=(0,t.max)(G.data)[0]-T;if(Z===0)return F;const z=m/255;let P=G.width,tA=G.height,AA=0,iA=0;const rA=G.data;for(let CA=0;CAthis.preprocess(J)));return{pixel_values:(0,i.stack)(G.map(J=>J.pixel_values),0),original_sizes:G.map(J=>J.original_size),reshaped_input_sizes:G.map(J=>J.reshaped_input_size)}}static async from_pretrained(F,m={}){const G=await(0,o.getModelJSON)(F,C.IMAGE_PROCESSOR_NAME,!0,m);return new this(G)}}}),"./src/base/processing_utils.js":((A,g,e)=>{e.r(g),e.d(g,{Processor:()=>s});var I=e("./src/utils/constants.js"),i=e("./src/utils/generic.js"),t=e("./src/utils/hub.js");class s extends i.Callable{static classes=["image_processor_class","tokenizer_class","feature_extractor_class"];static uses_processor_config=!1;static uses_chat_template_file=!1;constructor(C,r,Q){super(),this.config=C,this.components=r,this.chat_template=Q}get image_processor(){return this.components.image_processor}get tokenizer(){return this.components.tokenizer}get feature_extractor(){return this.components.feature_extractor}apply_chat_template(C,r={}){if(!this.tokenizer)throw new Error("Unable to apply chat template without a tokenizer.");return this.tokenizer.apply_chat_template(C,{tokenize:!1,chat_template:this.chat_template??void 0,...r})}batch_decode(...C){if(!this.tokenizer)throw new Error("Unable to decode without a tokenizer.");return this.tokenizer.batch_decode(...C)}decode(...C){if(!this.tokenizer)throw new Error("Unable to decode without a tokenizer.");return this.tokenizer.decode(...C)}async _call(C,...r){for(const Q of[this.image_processor,this.feature_extractor,this.tokenizer])if(Q)return Q(C,...r);throw new Error("No image processor, feature extractor, or tokenizer found.")}static async from_pretrained(C,r={}){const[Q,B,a]=await Promise.all([this.uses_processor_config?(0,t.getModelJSON)(C,I.PROCESSOR_NAME,!0,r):{},Promise.all(this.classes.filter(d=>d in this).map(async d=>{const c=await this[d].from_pretrained(C,r);return[d.replace(/_class$/,""),c]})).then(Object.fromEntries),this.uses_chat_template_file?(0,t.getModelText)(C,I.CHAT_TEMPLATE_NAME,!0,r):null]);return new this(Q,B,a)}}}),"./src/configs.js":((A,g,e)=>{e.r(g),e.d(g,{AutoConfig:()=>Q,PretrainedConfig:()=>r,getCacheShapes:()=>o});var I=e("./src/utils/core.js"),i=e("./src/utils/hub.js");async function t(B,a){return await(0,i.getModelJSON)(B,"config.json",!0,a)}function s(B){const a={};let d={};switch(B.model_type){case"llava":case"paligemma":case"gemma3":case"florence2":case"llava_onevision":case"idefics3":case"ultravox":case"voxtral":case"smolvlm":case"gemma3n":d=s(B.text_config);break;case"moondream1":d=s(B.phi_config);break;case"musicgen":d=s(B.decoder);break;case"multi_modality":d=s(B.language_config);break;case"gpt2":case"gptj":case"jais":case"codegen":case"gpt_bigcode":a.num_heads="n_head",a.num_layers="n_layer",a.hidden_size="n_embd";break;case"gpt_neox":case"stablelm":case"opt":case"falcon":case"modernbert-decoder":a.num_heads="num_attention_heads",a.num_layers="num_hidden_layers",a.hidden_size="hidden_size";break;case"llama":case"llama4_text":case"arcee":case"lfm2":case"smollm3":case"olmo":case"olmo2":case"mobilellm":case"granite":case"cohere":case"mistral":case"starcoder2":case"qwen2":case"qwen2_vl":case"phi":case"phi3":case"phi3_v":case"llava_qwen2":a.num_heads="num_key_value_heads",a.num_layers="num_hidden_layers",a.hidden_size="hidden_size",a.num_attention_heads="num_attention_heads",a.dim_kv="head_dim";break;case"qwen3":case"gemma":case"gemma2":case"vaultgemma":case"gemma3_text":case"gemma3n_text":case"glm":case"helium":case"ernie4_5":a.num_heads="num_key_value_heads",a.num_layers="num_hidden_layers",a.dim_kv="head_dim";break;case"openelm":a.num_heads="num_kv_heads",a.num_layers="num_transformer_layers",a.dim_kv="head_dim";break;case"gpt_neo":case"donut-swin":a.num_heads="num_heads",a.num_layers="num_layers",a.hidden_size="hidden_size";break;case"bloom":a.num_heads="n_head",a.num_layers="n_layer",a.hidden_size="hidden_size";break;case"mpt":a.num_heads="n_heads",a.num_layers="n_layers",a.hidden_size="d_model";break;case"exaone":a.num_heads="num_key_value_heads",a.num_layers="num_layers",a.dim_kv="head_dim",a.num_attention_heads="num_attention_heads";break;case"t5":case"mt5":case"longt5":a.num_decoder_layers="num_decoder_layers",a.num_decoder_heads="num_heads",a.decoder_dim_kv="d_kv",a.num_encoder_layers="num_layers",a.num_encoder_heads="num_heads",a.encoder_dim_kv="d_kv";break;case"bart":case"mbart":case"marian":case"whisper":case"lite-whisper":case"m2m_100":case"blenderbot":case"blenderbot-small":case"florence2_language":a.num_decoder_layers="decoder_layers",a.num_decoder_heads="decoder_attention_heads",a.decoder_hidden_size="d_model",a.num_encoder_layers="encoder_layers",a.num_encoder_heads="encoder_attention_heads",a.encoder_hidden_size="d_model";break;case"speecht5":a.num_decoder_layers="decoder_layers",a.num_decoder_heads="decoder_attention_heads",a.decoder_hidden_size="hidden_size",a.num_encoder_layers="encoder_layers",a.num_encoder_heads="encoder_attention_heads",a.encoder_hidden_size="hidden_size";break;case"trocr":a.num_encoder_layers=a.num_decoder_layers="decoder_layers",a.num_encoder_heads=a.num_decoder_heads="decoder_attention_heads",a.encoder_hidden_size=a.decoder_hidden_size="d_model";break;case"musicgen_decoder":a.num_encoder_layers=a.num_decoder_layers="num_hidden_layers",a.num_encoder_heads=a.num_decoder_heads="num_attention_heads",a.encoder_hidden_size=a.decoder_hidden_size="hidden_size";break;case"moonshine":a.num_decoder_layers="decoder_num_hidden_layers",a.num_decoder_heads="decoder_num_key_value_heads",a.num_encoder_layers="encoder_num_hidden_layers",a.num_encoder_heads="encoder_num_key_value_heads",a.encoder_hidden_size=a.decoder_hidden_size="hidden_size";break;case"vision-encoder-decoder":const p=s(B.decoder),L="num_decoder_layers"in p,w=(0,I.pick)(B,["model_type","is_encoder_decoder"]);return L?(w.num_decoder_layers=p.num_decoder_layers,w.num_decoder_heads=p.num_decoder_heads,w.decoder_hidden_size=p.decoder_hidden_size,w.num_encoder_layers=p.num_encoder_layers,w.num_encoder_heads=p.num_encoder_heads,w.encoder_hidden_size=p.encoder_hidden_size):(w.num_layers=p.num_layers,w.num_heads=p.num_heads,w.hidden_size=p.hidden_size),w}const c={...d,...(0,I.pick)(B,["model_type","multi_query","is_encoder_decoder"])};for(const p in a)c[p]=B[a[p]];return c}function o(B,a){if(B.model_type==="lfm2"){const d=a?.prefix??"past_key_values",c=d==="present"?"present":"past",p={},{layer_types:L,num_attention_heads:w,num_key_value_heads:u,hidden_size:_,conv_L_cache:y}=B,M=_/w,F=a?.batch_size??1;for(let m=0;m{e.r(g),e.d(g,{apis:()=>w,env:()=>m});var I=e("?db59"),i=e("?383f"),t=e("?fa4b");const s="3.7.3",o=typeof window<"u"&&typeof window.document<"u",C=typeof self<"u"&&["DedicatedWorkerGlobalScope","ServiceWorkerGlobalScope","SharedWorkerGlobalScope"].includes(self.constructor?.name),r=typeof self<"u"&&"caches"in self,Q=typeof navigator<"u"&&"gpu"in navigator,B=typeof navigator<"u"&&"ml"in navigator,a=typeof process<"u",d=a&&process?.release?.name==="node",c=!G(I),p=!G(i),L=typeof globalThis.Deno<"u",w=Object.freeze({IS_BROWSER_ENV:o,IS_WEBWORKER_ENV:C,IS_WEB_CACHE_AVAILABLE:r,IS_WEBGPU_AVAILABLE:Q,IS_WEBNN_AVAILABLE:B,IS_PROCESS_AVAILABLE:a,IS_NODE_ENV:d,IS_FS_AVAILABLE:c,IS_PATH_AVAILABLE:p}),u=c&&p;let _="./";if(u){const T=Object(import.meta).url;T?_=i.dirname(i.dirname(t.fileURLToPath(T))):typeof __dirname<"u"&&(_=i.dirname(__dirname))}const y=u?i.join(_,"/.cache/"):null,M="/models/",F=u?i.join(_,M):M,m={version:s,backends:{onnx:{}},allowRemoteModels:!0,remoteHost:"https://huggingface.co/",remotePathTemplate:"{model}/resolve/{revision}/",allowLocalModels:!(o||C),localModelPath:F,useFS:c,useBrowserCache:r&&!L,useFSCache:c,cacheDir:y,useCustomCache:!1,customCache:null};function G(T){return Object.keys(T).length===0}}),"./src/generation/configuration_utils.js":((A,g,e)=>{e.r(g),e.d(g,{GenerationConfig:()=>i});var I=e("./src/utils/core.js");class i{max_length=20;max_new_tokens=null;min_length=0;min_new_tokens=null;early_stopping=!1;max_time=null;do_sample=!1;num_beams=1;num_beam_groups=1;penalty_alpha=null;use_cache=!0;temperature=1;top_k=50;top_p=1;typical_p=1;epsilon_cutoff=0;eta_cutoff=0;diversity_penalty=0;repetition_penalty=1;encoder_repetition_penalty=1;length_penalty=1;no_repeat_ngram_size=0;bad_words_ids=null;force_words_ids=null;renormalize_logits=!1;constraints=null;forced_bos_token_id=null;forced_eos_token_id=null;remove_invalid_values=!1;exponential_decay_length_penalty=null;suppress_tokens=null;streamer=null;begin_suppress_tokens=null;forced_decoder_ids=null;guidance_scale=null;num_return_sequences=1;output_attentions=!1;output_hidden_states=!1;output_scores=!1;return_dict_in_generate=!1;pad_token_id=null;bos_token_id=null;eos_token_id=null;encoder_no_repeat_ngram_size=0;decoder_start_token_id=null;generation_kwargs={};constructor(s){Object.assign(this,(0,I.pick)(s,Object.getOwnPropertyNames(this)))}}}),"./src/generation/logits_process.js":((A,g,e)=>{e.r(g),e.d(g,{ClassifierFreeGuidanceLogitsProcessor:()=>w,ForcedBOSTokenLogitsProcessor:()=>C,ForcedEOSTokenLogitsProcessor:()=>r,LogitsProcessor:()=>t,LogitsProcessorList:()=>o,LogitsWarper:()=>s,MinLengthLogitsProcessor:()=>c,MinNewTokensLengthLogitsProcessor:()=>p,NoBadWordsLogitsProcessor:()=>L,NoRepeatNGramLogitsProcessor:()=>a,RepetitionPenaltyLogitsProcessor:()=>d,SuppressTokensAtBeginLogitsProcessor:()=>Q,TemperatureLogitsWarper:()=>u,TopKLogitsWarper:()=>y,TopPLogitsWarper:()=>_,WhisperTimeStampLogitsProcessor:()=>B});var I=e("./src/utils/generic.js");e("./src/utils/tensor.js");var i=e("./src/utils/maths.js");class t extends I.Callable{_call(F,m){throw Error("`_call` should be implemented in a subclass")}}class s extends I.Callable{_call(F,m){throw Error("`_call` should be implemented in a subclass")}}class o extends I.Callable{constructor(){super(),this.processors=[]}push(F){this.processors.push(F)}extend(F){this.processors.push(...F)}_call(F,m){let G=m;for(const T of this.processors)G=T(F,G);return G}[Symbol.iterator](){return this.processors.values()}}class C extends t{constructor(F){super(),this.bos_token_id=F}_call(F,m){for(let G=0;G=1&&J[J.length-1]>=this.timestamp_begin,z=J.length<2||J[J.length-2]>=this.timestamp_begin;if(Z&&(z?T.subarray(this.timestamp_begin).fill(-1/0):T.subarray(0,this.eos_token_id).fill(-1/0)),F[G].length===this.begin_index&&this.max_initial_timestamp_index!==null){const iA=this.timestamp_begin+this.max_initial_timestamp_index;T.subarray(iA+1).fill(-1/0)}const P=(0,i.log_softmax)(T),tA=Math.log(P.subarray(this.timestamp_begin).map(Math.exp).reduce((iA,rA)=>iA+rA)),AA=(0,i.max)(P.subarray(0,this.timestamp_begin))[0];tA>AA&&T.subarray(0,this.timestamp_begin).fill(-1/0)}return m}}class a extends t{constructor(F){super(),this.no_repeat_ngram_size=F}getNgrams(F){const m=F.length,G=[];for(let J=0;J1 to use the classifier free guidance processor, got guidance scale ${F}.`);this.guidance_scale=F}_call(F,m){if(m.dims[0]!==2*F.length)throw new Error(`Logits should have twice the batch size of the input ids, the first half of batches corresponding to the conditional inputs, and the second half of batches corresponding to the unconditional inputs. Got batch size ${m.dims[0]} for the logits and ${F.length} for the input ids.`);const G=F.length,T=m.slice([0,G],null),J=m.slice([G,m.dims[0]],null);for(let Z=0;Z1)throw new Error(`\`top_p\` must be a float > 0 and < 1, but is ${F}`);if(!Number.isInteger(G)||G<1)throw new Error(`\`min_tokens_to_keep\` must be a positive integer, but is ${G}`);this.top_p=F,this.filter_value=m,this.min_tokens_to_keep=G}}class y extends s{constructor(F,{filter_value:m=-1/0,min_tokens_to_keep:G=1}={}){if(super(),!Number.isInteger(F)||F<0)throw new Error(`\`top_k\` must be a positive integer, but is ${F}`);this.top_k=Math.max(F,G),this.filter_value=m}}}),"./src/generation/logits_sampler.js":((A,g,e)=>{e.r(g),e.d(g,{LogitsSampler:()=>s});var I=e("./src/utils/generic.js"),i=e("./src/utils/tensor.js"),t=e("./src/utils/maths.js");e("./src/generation/configuration_utils.js");class s extends I.Callable{constructor(B){super(),this.generation_config=B}async _call(B){return this.sample(B)}async sample(B){throw Error("sample should be implemented in subclasses.")}getLogits(B,a){let d=B.dims.at(-1),c=B.data;if(a===-1)c=c.slice(-d);else{let p=a*d;c=c.slice(p,p+d)}return c}randomSelect(B){let a=0;for(let c=0;c1)return new r(B);if(B.num_return_sequences>1)throw Error(`num_return_sequences has to be 1 when doing greedy search, but is ${B.num_return_sequences}.`);return new o(B)}}class o extends s{async sample(B){const a=(0,t.max)(B.data)[1];return[[BigInt(a),0]]}}class C extends s{async sample(B){let a=B.dims.at(-1);this.generation_config.top_k>0&&(a=Math.min(this.generation_config.top_k,a));const[d,c]=await(0,i.topk)(B,a),p=(0,t.softmax)(d.data);return Array.from({length:this.generation_config.num_beams},()=>{const L=this.randomSelect(p);return[c.data[L],Math.log(p[L])]})}}class r extends s{async sample(B){let a=B.dims.at(-1);this.generation_config.top_k>0&&(a=Math.min(this.generation_config.top_k,a));const[d,c]=await(0,i.topk)(B,a),p=(0,t.softmax)(d.data);return Array.from({length:this.generation_config.num_beams},(L,w)=>[c.data[w],Math.log(p[w])])}}}),"./src/generation/stopping_criteria.js":((A,g,e)=>{e.r(g),e.d(g,{EosTokenCriteria:()=>o,InterruptableStoppingCriteria:()=>C,MaxLengthCriteria:()=>s,StoppingCriteria:()=>i,StoppingCriteriaList:()=>t});var I=e("./src/utils/generic.js");class i extends I.Callable{_call(Q,B){throw Error("StoppingCriteria needs to be subclassed")}}class t extends I.Callable{constructor(){super(),this.criteria=[]}push(Q){this.criteria.push(Q)}extend(Q){Q instanceof t?Q=Q.criteria:Q instanceof i&&(Q=[Q]),this.criteria.push(...Q)}_call(Q,B){const a=new Array(Q.length).fill(!1);for(const d of this.criteria){const c=d(Q,B);for(let p=0;pB.length>=this.max_length)}}class o extends i{constructor(Q){super(),Array.isArray(Q)||(Q=[Q]),this.eos_token_id=Q}_call(Q,B){return Q.map(a=>{const d=a.at(-1);return this.eos_token_id.some(c=>d==c)})}}class C extends i{constructor(){super(),this.interrupted=!1}interrupt(){this.interrupted=!0}reset(){this.interrupted=!1}_call(Q,B){return new Array(Q.length).fill(this.interrupted)}}}),"./src/generation/streamers.js":((A,g,e)=>{e.r(g),e.d(g,{BaseStreamer:()=>s,TextStreamer:()=>C,WhisperTextStreamer:()=>r});var I=e("./src/utils/core.js"),i=e("./src/tokenizers.js"),t=e("./src/env.js");class s{put(B){throw Error("Not implemented")}end(){throw Error("Not implemented")}}const o=t.apis.IS_PROCESS_AVAILABLE?Q=>process.stdout.write(Q):Q=>console.log(Q);class C extends s{constructor(B,{skip_prompt:a=!1,callback_function:d=null,token_callback_function:c=null,skip_special_tokens:p=!0,decode_kwargs:L={},...w}={}){super(),this.tokenizer=B,this.skip_prompt=a,this.callback_function=d??o,this.token_callback_function=c,this.decode_kwargs={skip_special_tokens:p,...L,...w},this.token_cache=[],this.print_len=0,this.next_tokens_are_prompt=!0}put(B){if(B.length>1)throw Error("TextStreamer only supports batch size of 1");const a=this.next_tokens_are_prompt;if(a&&(this.next_tokens_are_prompt=!1,this.skip_prompt))return;const d=B[0];this.token_callback_function?.(d),this.token_cache=(0,I.mergeArrays)(this.token_cache,d);const c=this.tokenizer.decode(this.token_cache,this.decode_kwargs);let p;a||c.endsWith(` `)?(p=c.slice(this.print_len),this.token_cache=[],this.print_len=0):c.length>0&&(0,i.is_chinese_char)(c.charCodeAt(c.length-1))?(p=c.slice(this.print_len),this.print_len+=p.length):(p=c.slice(this.print_len,c.lastIndexOf(" ")+1),this.print_len+=p.length),this.on_finalized_text(p,!1)}end(){let B;this.token_cache.length>0?(B=this.tokenizer.decode(this.token_cache,this.decode_kwargs).slice(this.print_len),this.token_cache=[],this.print_len=0):B="",this.next_tokens_are_prompt=!0,this.on_finalized_text(B,!0)}on_finalized_text(B,a){B.length>0&&this.callback_function?.(B),a&&this.callback_function===o&&t.apis.IS_PROCESS_AVAILABLE&&this.callback_function?.(` `)}}class r extends C{constructor(B,{skip_prompt:a=!1,callback_function:d=null,token_callback_function:c=null,on_chunk_start:p=null,on_chunk_end:L=null,on_finalize:w=null,time_precision:u=.02,skip_special_tokens:_=!0,decode_kwargs:y={}}={}){super(B,{skip_prompt:a,skip_special_tokens:_,callback_function:d,token_callback_function:c,decode_kwargs:y}),this.timestamp_begin=B.timestamp_begin,this.on_chunk_start=p,this.on_chunk_end=L,this.on_finalize=w,this.time_precision=u,this.waiting_for_timestamp=!1}put(B){if(B.length>1)throw Error("WhisperTextStreamer only supports batch size of 1");const a=B[0];if(a.length===1){const d=Number(a[0])-this.timestamp_begin;if(d>=0){const c=d*this.time_precision;this.waiting_for_timestamp?this.on_chunk_end?.(c):this.on_chunk_start?.(c),this.waiting_for_timestamp=!this.waiting_for_timestamp,this.token_callback_function?.(a);return}}return super.put(B)}end(){super.end(),this.on_finalize?.()}}}),"./src/models.js":((A,g,e)=>{e.r(g),e.d(g,{ASTForAudioClassification:()=>rt,ASTModel:()=>Ct,ASTPreTrainedModel:()=>st,AlbertForMaskedLM:()=>VA,AlbertForQuestionAnswering:()=>ZA,AlbertForSequenceClassification:()=>ge,AlbertModel:()=>zA,AlbertPreTrainedModel:()=>NA,ArceeForCausalLM:()=>qI,ArceeModel:()=>Ug,ArceePreTrainedModel:()=>qe,AutoModel:()=>op,AutoModelForAudioClassification:()=>mp,AutoModelForAudioFrameClassification:()=>Fp,AutoModelForAudioTextToText:()=>Up,AutoModelForCTC:()=>yp,AutoModelForCausalLM:()=>np,AutoModelForDepthEstimation:()=>Rp,AutoModelForDocumentQuestionAnswering:()=>Sp,AutoModelForImageClassification:()=>dp,AutoModelForImageFeatureExtraction:()=>Lp,AutoModelForImageMatting:()=>Np,AutoModelForImageSegmentation:()=>up,AutoModelForImageTextToText:()=>Kp,AutoModelForImageToImage:()=>_p,AutoModelForMaskGeneration:()=>fp,AutoModelForMaskedLM:()=>Ep,AutoModelForNormalEstimation:()=>Gp,AutoModelForObjectDetection:()=>wp,AutoModelForPoseEstimation:()=>kp,AutoModelForQuestionAnswering:()=>lp,AutoModelForSemanticSegmentation:()=>hp,AutoModelForSeq2SeqLM:()=>rp,AutoModelForSequenceClassification:()=>sp,AutoModelForSpeechSeq2Seq:()=>ap,AutoModelForTextToSpectrogram:()=>Bp,AutoModelForTextToWaveform:()=>Qp,AutoModelForTokenClassification:()=>Cp,AutoModelForUniversalSegmentation:()=>Dp,AutoModelForVision2Seq:()=>cp,AutoModelForXVector:()=>Mp,AutoModelForZeroShotObjectDetection:()=>pp,BartForConditionalGeneration:()=>ag,BartForSequenceClassification:()=>Mg,BartModel:()=>mI,BartPretrainedModel:()=>Kg,BaseModelOutput:()=>LA,BeitForImageClassification:()=>jB,BeitModel:()=>WB,BeitPreTrainedModel:()=>Ps,BertForMaskedLM:()=>fA,BertForQuestionAnswering:()=>YA,BertForSequenceClassification:()=>_A,BertForTokenClassification:()=>dA,BertModel:()=>GA,BertPreTrainedModel:()=>JA,BlenderbotForConditionalGeneration:()=>Fg,BlenderbotModel:()=>Bg,BlenderbotPreTrainedModel:()=>Rg,BlenderbotSmallForConditionalGeneration:()=>VI,BlenderbotSmallModel:()=>eI,BlenderbotSmallPreTrainedModel:()=>dg,BloomForCausalLM:()=>cB,BloomModel:()=>lB,BloomPreTrainedModel:()=>_s,CLIPModel:()=>Et,CLIPPreTrainedModel:()=>YI,CLIPSegForImageSegmentation:()=>wt,CLIPSegModel:()=>Ki,CLIPSegPreTrainedModel:()=>ZI,CLIPTextModel:()=>uo,CLIPTextModelWithProjection:()=>lt,CLIPVisionModel:()=>ho,CLIPVisionModelWithProjection:()=>ct,CamembertForMaskedLM:()=>Ee,CamembertForQuestionAnswering:()=>be,CamembertForSequenceClassification:()=>Ie,CamembertForTokenClassification:()=>_e,CamembertModel:()=>ae,CamembertPreTrainedModel:()=>bA,CausalLMOutput:()=>Qi,CausalLMOutputWithPast:()=>Jp,ChineseCLIPModel:()=>Do,ChineseCLIPPreTrainedModel:()=>ue,ClapAudioModelWithProjection:()=>eE,ClapModel:()=>Xn,ClapPreTrainedModel:()=>Fo,ClapTextModelWithProjection:()=>AE,CodeGenForCausalLM:()=>KA,CodeGenModel:()=>lA,CodeGenPreTrainedModel:()=>V,CohereForCausalLM:()=>ja,CohereModel:()=>Wa,CoherePreTrainedModel:()=>Ds,ConvBertForMaskedLM:()=>EI,ConvBertForQuestionAnswering:()=>lI,ConvBertForSequenceClassification:()=>ze,ConvBertForTokenClassification:()=>Ne,ConvBertModel:()=>he,ConvBertPreTrainedModel:()=>AI,ConvNextForImageClassification:()=>PQ,ConvNextModel:()=>YQ,ConvNextPreTrainedModel:()=>IC,ConvNextV2ForImageClassification:()=>HQ,ConvNextV2Model:()=>vQ,ConvNextV2PreTrainedModel:()=>iC,DFineForObjectDetection:()=>sQ,DFineModel:()=>oQ,DFinePreTrainedModel:()=>js,DINOv3ConvNextModel:()=>ZQ,DINOv3ConvNextPreTrainedModel:()=>$Q,DINOv3ViTModel:()=>zQ,DINOv3ViTPreTrainedModel:()=>VQ,DPTForDepthEstimation:()=>fQ,DPTModel:()=>pQ,DPTPreTrainedModel:()=>AC,DacDecoderModel:()=>vE,DacDecoderOutput:()=>TE,DacEncoderModel:()=>PE,DacEncoderOutput:()=>xE,DacModel:()=>YE,DacPreTrainedModel:()=>Lo,DebertaForMaskedLM:()=>lg,DebertaForQuestionAnswering:()=>og,DebertaForSequenceClassification:()=>Og,DebertaForTokenClassification:()=>gg,DebertaModel:()=>Ag,DebertaPreTrainedModel:()=>tg,DebertaV2ForMaskedLM:()=>sI,DebertaV2ForQuestionAnswering:()=>cI,DebertaV2ForSequenceClassification:()=>CI,DebertaV2ForTokenClassification:()=>jg,DebertaV2Model:()=>Lg,DebertaV2PreTrainedModel:()=>Wg,DecisionTransformerModel:()=>pE,DecisionTransformerPreTrainedModel:()=>wE,DeiTForImageClassification:()=>QQ,DeiTModel:()=>BQ,DeiTPreTrainedModel:()=>zs,DepthAnythingForDepthEstimation:()=>mQ,DepthAnythingPreTrainedModel:()=>yQ,DepthProForDepthEstimation:()=>_Q,DepthProPreTrainedModel:()=>NQ,DetrForObjectDetection:()=>zB,DetrForSegmentation:()=>vs,DetrModel:()=>VB,DetrObjectDetectionOutput:()=>Hs,DetrPreTrainedModel:()=>wo,DetrSegmentationOutput:()=>$B,Dinov2ForImageClassification:()=>OQ,Dinov2Model:()=>qQ,Dinov2PreTrainedModel:()=>tC,Dinov2WithRegistersForImageClassification:()=>jQ,Dinov2WithRegistersModel:()=>WQ,Dinov2WithRegistersPreTrainedModel:()=>oC,DistilBertForMaskedLM:()=>iI,DistilBertForQuestionAnswering:()=>mg,DistilBertForSequenceClassification:()=>cg,DistilBertForTokenClassification:()=>$e,DistilBertModel:()=>yg,DistilBertPreTrainedModel:()=>$g,DonutSwinModel:()=>TQ,DonutSwinPreTrainedModel:()=>xQ,EfficientNetForImageClassification:()=>CE,EfficientNetModel:()=>sE,EfficientNetPreTrainedModel:()=>dC,ElectraForMaskedLM:()=>j,ElectraForQuestionAnswering:()=>yA,ElectraForSequenceClassification:()=>IA,ElectraForTokenClassification:()=>aA,ElectraModel:()=>gA,ElectraPreTrainedModel:()=>R,Ernie4_5_ForCausalLM:()=>jn,Ernie4_5_Model:()=>Wn,Ernie4_5_PretrainedModel:()=>QC,EsmForMaskedLM:()=>yI,EsmForSequenceClassification:()=>l,EsmForTokenClassification:()=>f,EsmModel:()=>tI,EsmPreTrainedModel:()=>Tg,ExaoneForCausalLM:()=>Ja,ExaoneModel:()=>ba,ExaonePreTrainedModel:()=>ls,FalconForCausalLM:()=>Zn,FalconModel:()=>$n,FalconPreTrainedModel:()=>EC,FastViTForImageClassification:()=>UB,FastViTModel:()=>KB,FastViTPreTrainedModel:()=>bs,Florence2ForConditionalGeneration:()=>no,Florence2PreTrainedModel:()=>Qo,GLPNForDepthEstimation:()=>JQ,GLPNModel:()=>bQ,GLPNPreTrainedModel:()=>gC,GPT2LMHeadModel:()=>bi,GPT2Model:()=>pt,GPT2PreTrainedModel:()=>Ui,GPTBigCodeForCausalLM:()=>Y,GPTBigCodeModel:()=>K,GPTBigCodePreTrainedModel:()=>S,GPTJForCausalLM:()=>n,GPTJModel:()=>Ft,GPTJPreTrainedModel:()=>Pi,GPTNeoForCausalLM:()=>Ti,GPTNeoModel:()=>xi,GPTNeoPreTrainedModel:()=>XI,GPTNeoXForCausalLM:()=>Mt,GPTNeoXModel:()=>mt,GPTNeoXPreTrainedModel:()=>Yi,Gemma2ForCausalLM:()=>Za,Gemma2Model:()=>$a,Gemma2PreTrainedModel:()=>ps,Gemma3ForCausalLM:()=>gB,Gemma3Model:()=>eB,Gemma3PreTrainedModel:()=>ys,Gemma3nForConditionalGeneration:()=>HI,Gemma3nPreTrainedModel:()=>si,GemmaForCausalLM:()=>za,GemmaModel:()=>Va,GemmaPreTrainedModel:()=>ws,GlmForCausalLM:()=>Ua,GlmModel:()=>Ka,GlmPreTrainedModel:()=>Es,GraniteForCausalLM:()=>Oa,GraniteModel:()=>qa,GranitePreTrainedModel:()=>hs,GroundingDinoForObjectDetection:()=>An,GroundingDinoPreTrainedModel:()=>XQ,GroupViTModel:()=>LB,GroupViTPreTrainedModel:()=>kB,HeliumForCausalLM:()=>La,HeliumModel:()=>ka,HeliumPreTrainedModel:()=>ns,HieraForImageClassification:()=>EQ,HieraModel:()=>nQ,HieraPreTrainedModel:()=>$s,HubertForCTC:()=>Rn,HubertForSequenceClassification:()=>Gn,HubertModel:()=>_n,HubertPreTrainedModel:()=>W0,IJepaForImageClassification:()=>yB,IJepaModel:()=>fB,IJepaPreTrainedModel:()=>Ls,Idefics3ForConditionalGeneration:()=>ki,Idefics3PreTrainedModel:()=>Qt,ImageMattingOutput:()=>Dl,JAISLMHeadModel:()=>yt,JAISModel:()=>ft,JAISPreTrainedModel:()=>Ji,JinaCLIPModel:()=>Dt,JinaCLIPPreTrainedModel:()=>ai,JinaCLIPTextModel:()=>Bi,JinaCLIPVisionModel:()=>aI,Lfm2ForCausalLM:()=>_a,Lfm2Model:()=>Na,Lfm2PreTrainedModel:()=>St,LiteWhisperForConditionalGeneration:()=>ro,Llama4ForCausalLM:()=>Te,Llama4PreTrainedModel:()=>Me,LlamaForCausalLM:()=>Qe,LlamaModel:()=>te,LlamaPreTrainedModel:()=>qA,LlavaForConditionalGeneration:()=>Gi,LlavaOnevisionForConditionalGeneration:()=>ao,LlavaPreTrainedModel:()=>Bt,LlavaQwen2ForCausalLM:()=>co,LongT5ForConditionalGeneration:()=>Eg,LongT5Model:()=>sg,LongT5PreTrainedModel:()=>Ng,M2M100ForConditionalGeneration:()=>Bn,M2M100Model:()=>an,M2M100PreTrainedModel:()=>rC,MBartForCausalLM:()=>uI,MBartForConditionalGeneration:()=>MI,MBartForSequenceClassification:()=>_g,MBartModel:()=>rI,MBartPreTrainedModel:()=>Yg,MPNetForMaskedLM:()=>me,MPNetForQuestionAnswering:()=>BA,MPNetForSequenceClassification:()=>ve,MPNetForTokenClassification:()=>Ze,MPNetModel:()=>se,MPNetPreTrainedModel:()=>MA,MT5ForConditionalGeneration:()=>dI,MT5Model:()=>oI,MT5PreTrainedModel:()=>eg,MarianMTModel:()=>rn,MarianModel:()=>Cn,MarianPreTrainedModel:()=>CC,MaskFormerForInstanceSegmentation:()=>UQ,MaskFormerModel:()=>KQ,MaskFormerPreTrainedModel:()=>eC,MaskedLMOutput:()=>Pg,Metric3DForDepthEstimation:()=>GQ,Metric3DPreTrainedModel:()=>RQ,Metric3Dv2ForDepthEstimation:()=>LQ,Metric3Dv2PreTrainedModel:()=>kQ,MgpstrForSceneTextRecognition:()=>FE,MgpstrModelOutput:()=>mE,MgpstrPreTrainedModel:()=>ME,MimiDecoderModel:()=>JE,MimiDecoderOutput:()=>KE,MimiEncoderModel:()=>bE,MimiEncoderOutput:()=>LE,MimiModel:()=>UE,MimiPreTrainedModel:()=>ko,MistralForCausalLM:()=>On,MistralModel:()=>qn,MistralPreTrainedModel:()=>BC,MobileBertForMaskedLM:()=>eA,MobileBertForQuestionAnswering:()=>DA,MobileBertForSequenceClassification:()=>EA,MobileBertModel:()=>b,MobileBertPreTrainedModel:()=>k,MobileLLMForCausalLM:()=>Ta,MobileLLMModel:()=>xa,MobileLLMPreTrainedModel:()=>cs,MobileNetV1ForImageClassification:()=>aE,MobileNetV1ForSemanticSegmentation:()=>BE,MobileNetV1Model:()=>rE,MobileNetV1PreTrainedModel:()=>No,MobileNetV2ForImageClassification:()=>nE,MobileNetV2ForSemanticSegmentation:()=>EE,MobileNetV2Model:()=>QE,MobileNetV2PreTrainedModel:()=>_o,MobileNetV3ForImageClassification:()=>cE,MobileNetV3ForSemanticSegmentation:()=>dE,MobileNetV3Model:()=>lE,MobileNetV3PreTrainedModel:()=>Ro,MobileNetV4ForImageClassification:()=>hE,MobileNetV4ForSemanticSegmentation:()=>DE,MobileNetV4Model:()=>uE,MobileNetV4PreTrainedModel:()=>Go,MobileViTForImageClassification:()=>TB,MobileViTModel:()=>xB,MobileViTPreTrainedModel:()=>Js,MobileViTV2ForImageClassification:()=>PB,MobileViTV2Model:()=>YB,MobileViTV2PreTrainedModel:()=>xs,ModelOutput:()=>wA,ModernBertDecoderForCausalLM:()=>fg,ModernBertDecoderModel:()=>pe,ModernBertDecoderPreTrainedModel:()=>Je,ModernBertForMaskedLM:()=>oe,ModernBertForSequenceClassification:()=>TA,ModernBertForTokenClassification:()=>ke,ModernBertModel:()=>ee,ModernBertPreTrainedModel:()=>Ce,Moondream1ForConditionalGeneration:()=>Bo,MoonshineForConditionalGeneration:()=>_i,MoonshineModel:()=>Bs,MoonshinePreTrainedModel:()=>at,MptForCausalLM:()=>uB,MptModel:()=>dB,MptPreTrainedModel:()=>Rs,MultiModalityCausalLM:()=>yE,MultiModalityPreTrainedModel:()=>fE,MusicgenForCausalLM:()=>$0,MusicgenForConditionalGeneration:()=>hC,MusicgenModel:()=>z0,MusicgenPreTrainedModel:()=>uC,NeoBertForMaskedLM:()=>SA,NeoBertForQuestionAnswering:()=>WA,NeoBertForSequenceClassification:()=>re,NeoBertForTokenClassification:()=>$A,NeoBertModel:()=>Ae,NeoBertPreTrainedModel:()=>HA,NomicBertModel:()=>qg,NomicBertPreTrainedModel:()=>zg,OPTForCausalLM:()=>DB,OPTModel:()=>hB,OPTPreTrainedModel:()=>Gs,Olmo2ForCausalLM:()=>Ha,Olmo2Model:()=>va,Olmo2PreTrainedModel:()=>us,OlmoForCausalLM:()=>Pa,OlmoModel:()=>Ya,OlmoPreTrainedModel:()=>ds,OpenELMForCausalLM:()=>iB,OpenELMModel:()=>IB,OpenELMPreTrainedModel:()=>ms,OwlViTForObjectDetection:()=>HB,OwlViTModel:()=>vB,OwlViTPreTrainedModel:()=>Ts,Owlv2ForObjectDetection:()=>OB,Owlv2Model:()=>qB,Owlv2PreTrainedModel:()=>Ys,PaliGemmaForConditionalGeneration:()=>lo,PaliGemmaPreTrainedModel:()=>Eo,PatchTSMixerForPrediction:()=>RE,PatchTSMixerModel:()=>_E,PatchTSMixerPreTrainedModel:()=>wC,PatchTSTForPrediction:()=>NE,PatchTSTModel:()=>SE,PatchTSTPreTrainedModel:()=>DC,Phi3ForCausalLM:()=>EB,Phi3Model:()=>nB,Phi3PreTrainedModel:()=>Ns,Phi3VForCausalLM:()=>Ci,Phi3VPreTrainedModel:()=>Li,PhiForCausalLM:()=>QB,PhiModel:()=>BB,PhiPreTrainedModel:()=>Ss,PreTrainedModel:()=>q,PretrainedMixin:()=>je,PvtForImageClassification:()=>SB,PvtModel:()=>FB,PvtPreTrainedModel:()=>Ks,PyAnnoteForAudioFrameClassification:()=>dn,PyAnnoteModel:()=>cn,PyAnnotePreTrainedModel:()=>aC,QuestionAnsweringModelOutput:()=>Zg,Qwen2ForCausalLM:()=>oB,Qwen2Model:()=>tB,Qwen2PreTrainedModel:()=>Ms,Qwen2VLForConditionalGeneration:()=>aB,Qwen2VLPreTrainedModel:()=>rB,Qwen3ForCausalLM:()=>CB,Qwen3Model:()=>sB,Qwen3PreTrainedModel:()=>Fs,RFDetrForObjectDetection:()=>iQ,RFDetrModel:()=>IQ,RFDetrObjectDetectionOutput:()=>tQ,RFDetrPreTrainedModel:()=>Ws,RTDetrForObjectDetection:()=>XB,RTDetrModel:()=>ZB,RTDetrObjectDetectionOutput:()=>Nt,RTDetrPreTrainedModel:()=>qs,RTDetrV2ForObjectDetection:()=>eQ,RTDetrV2Model:()=>AQ,RTDetrV2ObjectDetectionOutput:()=>gQ,RTDetrV2PreTrainedModel:()=>Os,ResNetForImageClassification:()=>cQ,ResNetModel:()=>lQ,ResNetPreTrainedModel:()=>Zs,RoFormerForMaskedLM:()=>U,RoFormerForQuestionAnswering:()=>fI,RoFormerForSequenceClassification:()=>wg,RoFormerForTokenClassification:()=>xI,RoFormerModel:()=>rg,RoFormerPreTrainedModel:()=>xg,RobertaForMaskedLM:()=>$t,RobertaForQuestionAnswering:()=>Ao,RobertaForSequenceClassification:()=>Zt,RobertaForTokenClassification:()=>Xt,RobertaModel:()=>It,RobertaPreTrainedModel:()=>TI,SamImageSegmentationOutput:()=>sn,SamModel:()=>on,SamPreTrainedModel:()=>tn,SapiensForDepthEstimation:()=>FQ,SapiensForNormalEstimation:()=>SQ,SapiensForSemanticSegmentation:()=>MQ,SapiensPreTrainedModel:()=>fo,SegformerForImageClassification:()=>IE,SegformerForSemanticSegmentation:()=>iE,SegformerModel:()=>V0,SegformerPreTrainedModel:()=>So,Seq2SeqLMOutput:()=>bp,SequenceClassifierOutput:()=>Fe,SiglipModel:()=>ut,SiglipPreTrainedModel:()=>dt,SiglipTextModel:()=>ht,SiglipVisionModel:()=>ri,SmolLM3ForCausalLM:()=>Ga,SmolLM3Model:()=>Ra,SmolLM3PreTrainedModel:()=>Qs,SmolVLMForConditionalGeneration:()=>nt,SnacDecoderModel:()=>OE,SnacEncoderModel:()=>qE,SnacModel:()=>HE,SnacPreTrainedModel:()=>Ko,SpeechT5ForSpeechToText:()=>Tn,SpeechT5ForTextToSpeech:()=>Yn,SpeechT5HifiGan:()=>Pn,SpeechT5Model:()=>j0,SpeechT5PreTrainedModel:()=>Mo,SqueezeBertForMaskedLM:()=>oA,SqueezeBertForQuestionAnswering:()=>hA,SqueezeBertForSequenceClassification:()=>sA,SqueezeBertModel:()=>H,SqueezeBertPreTrainedModel:()=>N,StableLmForCausalLM:()=>oE,StableLmModel:()=>tE,StableLmPreTrainedModel:()=>cC,Starcoder2ForCausalLM:()=>zn,Starcoder2Model:()=>Vn,Starcoder2PreTrainedModel:()=>nC,StyleTextToSpeech2Model:()=>xn,StyleTextToSpeech2PreTrainedModel:()=>Jn,Swin2SRForImageSuperResolution:()=>wQ,Swin2SRModel:()=>DQ,Swin2SRPreTrainedModel:()=>Xs,SwinForImageClassification:()=>uQ,SwinForSemanticSegmentation:()=>hQ,SwinModel:()=>dQ,SwinPreTrainedModel:()=>po,T5ForConditionalGeneration:()=>ng,T5Model:()=>Re,T5PreTrainedModel:()=>ce,TableTransformerForObjectDetection:()=>rQ,TableTransformerModel:()=>CQ,TableTransformerObjectDetectionOutput:()=>aQ,TableTransformerPreTrainedModel:()=>Vs,TokenClassifierOutput:()=>bg,TrOCRForCausalLM:()=>Hn,TrOCRPreTrainedModel:()=>vn,UltravoxModel:()=>pC,UltravoxPreTrainedModel:()=>GE,UniSpeechForCTC:()=>wn,UniSpeechForSequenceClassification:()=>pn,UniSpeechModel:()=>Dn,UniSpeechPreTrainedModel:()=>yo,UniSpeechSatForAudioFrameClassification:()=>Mn,UniSpeechSatForCTC:()=>yn,UniSpeechSatForSequenceClassification:()=>mn,UniSpeechSatModel:()=>fn,UniSpeechSatPreTrainedModel:()=>_t,VaultGemmaForCausalLM:()=>AB,VaultGemmaModel:()=>Xa,VaultGemmaPreTrainedModel:()=>fs,ViTForImageClassification:()=>pB,ViTMAEModel:()=>_B,ViTMAEPreTrainedModel:()=>NB,ViTMSNForImageClassification:()=>GB,ViTMSNModel:()=>RB,ViTMSNPreTrainedModel:()=>Us,ViTModel:()=>wB,ViTPreTrainedModel:()=>ks,VisionEncoderDecoderModel:()=>Ri,VitMatteForImageMatting:()=>JB,VitMattePreTrainedModel:()=>bB,VitPoseForPoseEstimation:()=>MB,VitPosePreTrainedModel:()=>mB,VitsModel:()=>lC,VitsModelOutput:()=>wl,VitsPreTrainedModel:()=>gE,VoxtralForConditionalGeneration:()=>kE,Wav2Vec2BertForCTC:()=>Sn,Wav2Vec2BertForSequenceClassification:()=>Nn,Wav2Vec2BertModel:()=>Fn,Wav2Vec2BertPreTrainedModel:()=>mo,Wav2Vec2ForAudioFrameClassification:()=>ln,Wav2Vec2ForCTC:()=>nn,Wav2Vec2ForSequenceClassification:()=>En,Wav2Vec2Model:()=>Qn,Wav2Vec2PreTrainedModel:()=>Ai,WavLMForAudioFrameClassification:()=>bn,WavLMForCTC:()=>Ln,WavLMForSequenceClassification:()=>Kn,WavLMForXVector:()=>Un,WavLMModel:()=>kn,WavLMPreTrainedModel:()=>vi,WeSpeakerResNetModel:()=>hn,WeSpeakerResNetPreTrainedModel:()=>un,WhisperForConditionalGeneration:()=>Ni,WhisperModel:()=>Co,WhisperPreTrainedModel:()=>vI,XLMForQuestionAnswering:()=>to,XLMForSequenceClassification:()=>Io,XLMForTokenClassification:()=>io,XLMModel:()=>eo,XLMPreTrainedModel:()=>zI,XLMRobertaForMaskedLM:()=>it,XLMRobertaForQuestionAnswering:()=>so,XLMRobertaForSequenceClassification:()=>tt,XLMRobertaForTokenClassification:()=>ot,XLMRobertaModel:()=>oo,XLMRobertaPreTrainedModel:()=>$I,XLMWithLMHeadModel:()=>go,XVectorOutput:()=>hl,YolosForObjectDetection:()=>gn,YolosModel:()=>en,YolosObjectDetectionOutput:()=>In,YolosPreTrainedModel:()=>sC});var I=e("./src/configs.js"),i=e("./src/backends/onnx.js"),t=e("./src/utils/dtypes.js"),s=e("./src/utils/generic.js"),o=e("./src/utils/core.js"),C=e("./src/utils/hub.js"),r=e("./src/utils/constants.js"),Q=e("./src/generation/logits_process.js"),B=e("./src/generation/configuration_utils.js"),a=e("./src/utils/tensor.js"),d=e("./src/utils/image.js"),c=e("./src/utils/maths.js"),p=e("./src/generation/stopping_criteria.js"),L=e("./src/generation/logits_sampler.js"),w=e("./src/env.js"),u=e("./src/models/whisper/generation_whisper.js"),_=e("./src/models/whisper/common_whisper.js");const y={EncoderOnly:0,EncoderDecoder:1,Seq2Seq:2,Vision2Seq:3,DecoderOnly:4,MaskGeneration:5,ImageTextToText:6,Musicgen:7,MultiModality:8,Phi3V:9,AudioTextToText:10,AutoEncoder:11,ImageAudioTextToText:12},M=new Map,F=new Map,m=new Map;async function G(h,D,O){let QA=O.config?.["transformers.js_config"]??{},pA=O.device??QA.device;pA&&typeof pA!="string"&&(pA.hasOwnProperty(D)?pA=pA[D]:(console.warn(`device not specified for "${D}". Using the default device.`),pA=null));const mA=pA??(w.apis.IS_NODE_ENV?"cpu":"wasm"),PA=(0,i.deviceToExecutionProviders)(mA),OA=QA.device_config??{};OA.hasOwnProperty(mA)&&(QA={...QA,...OA[mA]});let XA=O.dtype??QA.dtype;if(typeof XA!="string"&&(XA&&XA.hasOwnProperty(D)?XA=XA[D]:(XA=t.DEFAULT_DEVICE_DTYPE_MAPPING[mA]??t.DATA_TYPES.fp32,console.warn(`dtype not specified for "${D}". Using the default dtype (${XA}) for this device (${mA}).`))),XA===t.DATA_TYPES.auto){let xe=QA.dtype;typeof xe!="string"&&(xe=xe?.[D]),xe&&xe!==t.DATA_TYPES.auto&&t.DATA_TYPES.hasOwnProperty(xe)?XA=xe:XA=t.DEFAULT_DEVICE_DTYPE_MAPPING[mA]??t.DATA_TYPES.fp32}const Be=XA;if(t.DEFAULT_DTYPE_SUFFIX_MAPPING.hasOwnProperty(Be)){if(Be===t.DATA_TYPES.fp16&&mA==="webgpu"&&!await(0,t.isWebGpuFp16Supported)())throw new Error(`The device (${mA}) does not support fp16.`)}else throw new Error(`Invalid dtype: ${Be}. Should be one of: ${Object.keys(t.DATA_TYPES).join(", ")}`);const Se=QA.kv_cache_dtype,Le=Se?typeof Se=="string"?Se:Se[Be]??"float32":void 0;if(Le&&!["float32","float16"].includes(Le))throw new Error(`Invalid kv_cache_dtype: ${Le}. Should be one of: float32, float16`);const Ue={dtype:Be,kv_cache_dtype:Le,device:mA},we=t.DEFAULT_DTYPE_SUFFIX_MAPPING[Be],Ve=`${D}${we}.onnx`,fe=`${O.subfolder??""}/${Ve}`,De={...O.session_options};De.executionProviders??=PA;const Pe=QA.free_dimension_overrides;Pe?De.freeDimensionOverrides??=Pe:mA.startsWith("webnn")&&!De.freeDimensionOverrides&&console.warn(`WebNN does not currently support dynamic shapes and requires 'free_dimension_overrides' to be set in config.json, preferably as a field within config["transformers.js_config"]["device_config"]["${mA}"]. When 'free_dimension_overrides' is not set, you may experience significant performance degradation.`);const Ig=w.apis.IS_NODE_ENV&&w.env.useFSCache,ug=(0,C.getModelFile)(h,fe,!0,O,Ig),Gg=O.use_external_data_format??QA.use_external_data_format;let kg=[];if(Gg){let xe;typeof Gg=="object"?Gg.hasOwnProperty(Ve)?xe=Gg[Ve]:Gg.hasOwnProperty(D)?xe=Gg[D]:xe=!1:xe=Gg;const hg=+xe;if(hg>C.MAX_EXTERNAL_DATA_CHUNKS)throw new Error(`The number of external data chunks (${hg}) exceeds the maximum allowed value (${C.MAX_EXTERNAL_DATA_CHUNKS}).`);for(let vg=0;vg{const Oi=await(0,C.getModelFile)(h,gI,!0,O,Ig);FI(Oi instanceof Uint8Array?{path:ni,data:Oi}:ni)}))}}else De.externalData!==void 0&&(kg=De.externalData.map(async xe=>{if(typeof xe.data=="string"){const hg=await(0,C.getModelFile)(h,xe.data,!0,O);return{...xe,data:hg}}return xe}));if(kg.length>0){const xe=await Promise.all(kg);w.apis.IS_NODE_ENV||(De.externalData=xe)}if(mA==="webgpu"){const xe=(0,I.getCacheShapes)(O.config,{prefix:"present"});if(Object.keys(xe).length>0&&!(0,i.isONNXProxy)()){const hg={};for(const vg in xe)hg[vg]="gpu-buffer";De.preferredOutputLocation=hg}}return{buffer_or_path:await ug,session_options:De,session_config:Ue}}async function T(h,D,O){return Object.fromEntries(await Promise.all(Object.keys(D).map(async QA=>{const{buffer_or_path:pA,session_options:mA,session_config:PA}=await G(h,D[QA],O),OA=await(0,i.createInferenceSession)(pA,mA,PA);return[QA,OA]})))}async function J(h,D,O){return Object.fromEntries(await Promise.all(Object.keys(D).map(async QA=>{const pA=await(0,C.getModelJSON)(h,D[QA],!1,O);return[QA,pA]})))}function Z(h,D){const O=Object.create(null),QA=[];for(const PA of h.inputNames){const OA=D[PA];if(!(OA instanceof a.Tensor)){QA.push(PA);continue}O[PA]=(0,i.isONNXProxy)()?OA.clone():OA}if(QA.length>0)throw new Error(`An error occurred during model execution: "Missing the following inputs: ${QA.join(", ")}.`);const pA=Object.keys(D).length,mA=h.inputNames.length;if(pA>mA){let PA=Object.keys(D).filter(OA=>!h.inputNames.includes(OA));console.warn(`WARNING: Too many inputs were provided (${pA} > ${mA}). The following inputs will be ignored: "${PA.join(", ")}".`)}return O}async function z(h,D){const O=Z(h,D);try{const QA=Object.fromEntries(Object.entries(O).map(([mA,PA])=>[mA,PA.ort_tensor])),pA=await(0,i.runInferenceSession)(h,QA);return P(pA)}catch(QA){const pA=Object.fromEntries(Object.entries(O).map(([mA,PA])=>{const OA={type:PA.type,dims:PA.dims,location:PA.location};return OA.location!=="gpu-buffer"&&(OA.data=PA.data),[mA,OA]}));throw console.error(`An error occurred during model execution: "${QA}".`),console.error("Inputs given to model:",pA),QA}}function P(h){for(let D in h)(0,i.isONNXTensor)(h[D])?h[D]=new a.Tensor(h[D]):typeof h[D]=="object"&&P(h[D]);return h}function tA(h){if(h instanceof a.Tensor)return h;if(h.length===0)throw Error("items must be non-empty");if(Array.isArray(h[0])){if(h.some(D=>D.length!==h[0].length))throw Error("Unable to create tensor, you should probably activate truncation and/or padding with 'padding=True' and/or 'truncation=True' to have batched tensors with the same length.");return new a.Tensor("int64",BigInt64Array.from(h.flat().map(D=>BigInt(D))),[h.length,h[0].length])}else return new a.Tensor("int64",BigInt64Array.from(h.map(D=>BigInt(D))),[1,h.length])}function AA(h){return new a.Tensor("bool",[h],[1])}async function iA(h,D){let{encoder_outputs:O,input_ids:QA,decoder_input_ids:pA,...mA}=D;if(!O){const OA=(0,o.pick)(D,h.sessions.model.inputNames);O=(await rA(h,OA)).last_hidden_state}return mA.input_ids=pA,mA.encoder_hidden_states=O,h.sessions.decoder_model_merged.inputNames.includes("encoder_attention_mask")&&(mA.encoder_attention_mask=D.attention_mask),await cA(h,mA,!0)}async function rA(h,D){const O=h.sessions.model,QA=(0,o.pick)(D,O.inputNames);if(O.inputNames.includes("inputs_embeds")&&!QA.inputs_embeds){if(!D.input_ids)throw new Error("Both `input_ids` and `inputs_embeds` are missing in the model inputs.");QA.inputs_embeds=await h.encode_text({input_ids:D.input_ids})}if(O.inputNames.includes("token_type_ids")&&!QA.token_type_ids){if(!QA.input_ids)throw new Error("Both `input_ids` and `token_type_ids` are missing in the model inputs.");QA.token_type_ids=(0,a.zeros_like)(QA.input_ids)}if(O.inputNames.includes("pixel_mask")&&!QA.pixel_mask){if(!QA.pixel_values)throw new Error("Both `pixel_values` and `pixel_mask` are missing in the model inputs.");const pA=QA.pixel_values.dims;QA.pixel_mask=(0,a.ones)([pA[0],pA[2],pA[3]])}return await z(O,QA)}async function CA(h,D){const O=await h.encode(D);return await h.decode(O)}async function cA(h,D,O=!1){const QA=h.sessions[O?"decoder_model_merged":"model"],{past_key_values:pA,...mA}=D;if(QA.inputNames.includes("use_cache_branch")&&(mA.use_cache_branch=AA(!!pA)),QA.inputNames.includes("position_ids")&&mA.attention_mask&&!mA.position_ids){const OA=["paligemma","gemma3_text","gemma3"].includes(h.config.model_type)?1:0;mA.position_ids=RA(mA,pA,OA)}h.addPastKeyValues(mA,pA);const PA=(0,o.pick)(mA,QA.inputNames);return await z(QA,PA)}function uA({modality_token_id:h,inputs_embeds:D,modality_features:O,input_ids:QA,attention_mask:pA}){const mA=QA.tolist().map(Be=>Be.reduce((Se,Le,Ue)=>(Le==h&&Se.push(Ue),Se),[])),PA=mA.reduce((Be,Se)=>Be+Se.length,0),OA=O.dims[0];if(PA!==OA)throw new Error(`Number of tokens and features do not match: tokens: ${PA}, features ${OA}`);let XA=0;for(let Be=0;BemA.dims[1]||pA[pA.at(-1)])),{...O,decoder_input_ids:tA(D)}}function kA(h,...D){return h.config.is_encoder_decoder?ie(h,...D):vA(h,...D)}function X(h,D,O,QA){const pA=!!O.past_key_values;return QA.guidance_scale!==null&&QA.guidance_scale>1&&(pA?O.input_ids=(0,a.cat)([O.input_ids,O.input_ids],0):(O.input_ids=(0,a.cat)([O.input_ids,(0,a.full_like)(O.input_ids,BigInt(QA.pad_token_id))],0),O.attention_mask=(0,a.cat)([O.attention_mask,(0,a.full_like)(O.attention_mask,0n)],0))),(pA||!O.pixel_values)&&(O.pixel_values=(0,a.full)([0,0,3,384,384],1)),pA&&(O.images_seq_mask=new a.Tensor("bool",new Array(1).fill(!0).fill(!1,0,1),[1,1]),O.images_emb_mask=new a.Tensor("bool",new Array(0).fill(!1),[1,1,0])),O}class q extends s.Callable{main_input_name="input_ids";forward_params=["input_ids","attention_mask"];constructor(D,O,QA){super(),this.config=D,this.sessions=O,this.configs=QA;const pA=m.get(this.constructor),mA=M.get(pA);switch(this.can_generate=!1,this._forward=null,this._prepare_inputs_for_generation=null,mA){case y.DecoderOnly:this.can_generate=!0,this._forward=cA,this._prepare_inputs_for_generation=vA;break;case y.Seq2Seq:case y.Vision2Seq:case y.Musicgen:this.can_generate=!0,this._forward=iA,this._prepare_inputs_for_generation=ie;break;case y.EncoderDecoder:this._forward=iA;break;case y.ImageTextToText:this.can_generate=!0,this._forward=nA,this._prepare_inputs_for_generation=kA;break;case y.AudioTextToText:this.can_generate=!0,this._forward=W,this._prepare_inputs_for_generation=kA;break;case y.Phi3V:case y.ImageAudioTextToText:this.can_generate=!0,this._prepare_inputs_for_generation=kA;break;case y.MultiModality:this.can_generate=!0,this._prepare_inputs_for_generation=X;break;case y.AutoEncoder:this._forward=CA;break;default:this._forward=rA;break}this.can_generate&&this.forward_params.push("past_key_values"),this.custom_config=this.config["transformers.js_config"]??{}}async dispose(){const D=[];for(const O of Object.values(this.sessions))O?.handler?.dispose&&D.push(O.handler.dispose());return await Promise.all(D)}static async from_pretrained(D,{progress_callback:O=null,config:QA=null,cache_dir:pA=null,local_files_only:mA=!1,revision:PA="main",model_file_name:OA=null,subfolder:XA="onnx",device:Be=null,dtype:Se=null,use_external_data_format:Le=null,session_options:Ue={}}={}){let we={progress_callback:O,config:QA,cache_dir:pA,local_files_only:mA,revision:PA,model_file_name:OA,subfolder:XA,device:Be,dtype:Se,use_external_data_format:Le,session_options:Ue};const Ve=m.get(this),fe=M.get(Ve);QA=we.config=await I.AutoConfig.from_pretrained(D,we);let De;if(fe===y.DecoderOnly)De=await Promise.all([T(D,{model:we.model_file_name??"model"},we),J(D,{generation_config:"generation_config.json"},we)]);else if(fe===y.Seq2Seq||fe===y.Vision2Seq)De=await Promise.all([T(D,{model:"encoder_model",decoder_model_merged:"decoder_model_merged"},we),J(D,{generation_config:"generation_config.json"},we)]);else if(fe===y.MaskGeneration)De=await Promise.all([T(D,{model:"vision_encoder",prompt_encoder_mask_decoder:"prompt_encoder_mask_decoder"},we)]);else if(fe===y.EncoderDecoder)De=await Promise.all([T(D,{model:"encoder_model",decoder_model_merged:"decoder_model_merged"},we)]);else if(fe===y.ImageTextToText){const Pe={embed_tokens:"embed_tokens",vision_encoder:"vision_encoder",decoder_model_merged:"decoder_model_merged"};QA.is_encoder_decoder&&(Pe.model="encoder_model"),De=await Promise.all([T(D,Pe,we),J(D,{generation_config:"generation_config.json"},we)])}else if(fe===y.AudioTextToText){const Pe={embed_tokens:"embed_tokens",audio_encoder:"audio_encoder",decoder_model_merged:"decoder_model_merged"};De=await Promise.all([T(D,Pe,we),J(D,{generation_config:"generation_config.json"},we)])}else if(fe===y.ImageAudioTextToText){const Pe={embed_tokens:"embed_tokens",audio_encoder:"audio_encoder",vision_encoder:"vision_encoder",decoder_model_merged:"decoder_model_merged"};De=await Promise.all([T(D,Pe,we),J(D,{generation_config:"generation_config.json"},we)])}else if(fe===y.Musicgen)De=await Promise.all([T(D,{model:"text_encoder",decoder_model_merged:"decoder_model_merged",encodec_decode:"encodec_decode"},we),J(D,{generation_config:"generation_config.json"},we)]);else if(fe===y.MultiModality)De=await Promise.all([T(D,{prepare_inputs_embeds:"prepare_inputs_embeds",model:"language_model",lm_head:"lm_head",gen_head:"gen_head",gen_img_embeds:"gen_img_embeds",image_decode:"image_decode"},we),J(D,{generation_config:"generation_config.json"},we)]);else if(fe===y.Phi3V)De=await Promise.all([T(D,{prepare_inputs_embeds:"prepare_inputs_embeds",model:"model",vision_encoder:"vision_encoder"},we),J(D,{generation_config:"generation_config.json"},we)]);else if(fe===y.AutoEncoder)De=await Promise.all([T(D,{encoder_model:"encoder_model",decoder_model:"decoder_model"},we)]);else{if(fe!==y.EncoderOnly){const Pe=Ve??QA?.model_type;Pe!=="custom"&&console.warn(`Model type for '${Pe}' not found, assuming encoder-only architecture. Please report this at ${r.GITHUB_ISSUE_URL}.`)}De=await Promise.all([T(D,{model:we.model_file_name??"model"},we)])}return new this(QA,...De)}async _call(D){return await this.forward(D)}async forward(D){return await this._forward(this,D)}get generation_config(){return this.configs?.generation_config??null}_get_logits_warper(D){const O=new Q.LogitsProcessorList;return D.temperature!==null&&D.temperature!==1&&O.push(new Q.TemperatureLogitsWarper(D.temperature)),D.top_k!==null&&D.top_k!==0&&O.push(new Q.TopKLogitsWarper(D.top_k)),D.top_p!==null&&D.top_p<1&&O.push(new Q.TopPLogitsWarper(D.top_p)),O}_get_logits_processor(D,O,QA=null){const pA=new Q.LogitsProcessorList;if(D.repetition_penalty!==null&&D.repetition_penalty!==1&&pA.push(new Q.RepetitionPenaltyLogitsProcessor(D.repetition_penalty)),D.no_repeat_ngram_size!==null&&D.no_repeat_ngram_size>0&&pA.push(new Q.NoRepeatNGramLogitsProcessor(D.no_repeat_ngram_size)),D.bad_words_ids!==null&&pA.push(new Q.NoBadWordsLogitsProcessor(D.bad_words_ids,D.eos_token_id)),D.min_length!==null&&D.eos_token_id!==null&&D.min_length>0&&pA.push(new Q.MinLengthLogitsProcessor(D.min_length,D.eos_token_id)),D.min_new_tokens!==null&&D.eos_token_id!==null&&D.min_new_tokens>0&&pA.push(new Q.MinNewTokensLengthLogitsProcessor(O,D.min_new_tokens,D.eos_token_id)),D.forced_bos_token_id!==null&&pA.push(new Q.ForcedBOSTokenLogitsProcessor(D.forced_bos_token_id)),D.forced_eos_token_id!==null&&pA.push(new Q.ForcedEOSTokenLogitsProcessor(D.max_length,D.forced_eos_token_id)),D.begin_suppress_tokens!==null){const mA=O>1||D.forced_bos_token_id===null?O:O+1;pA.push(new Q.SuppressTokensAtBeginLogitsProcessor(D.begin_suppress_tokens,mA))}return D.guidance_scale!==null&&D.guidance_scale>1&&pA.push(new Q.ClassifierFreeGuidanceLogitsProcessor(D.guidance_scale)),QA!==null&&pA.extend(QA),pA}_prepare_generation_config(D,O,QA=B.GenerationConfig){const pA={...this.config};for(const PA of["decoder","generator","text_config"])PA in pA&&Object.assign(pA,pA[PA]);const mA=new QA(pA);return Object.assign(mA,this.generation_config??{}),D&&Object.assign(mA,D),O&&Object.assign(mA,(0,o.pick)(O,Object.getOwnPropertyNames(mA))),mA}_get_stopping_criteria(D,O=null){const QA=new p.StoppingCriteriaList;return D.max_length!==null&&QA.push(new p.MaxLengthCriteria(D.max_length,this.config.max_position_embeddings??null)),D.eos_token_id!==null&&QA.push(new p.EosTokenCriteria(D.eos_token_id)),O&&QA.extend(O),QA}_validate_model_class(){if(!this.can_generate){const D=[mC,MC,yC,fC],O=m.get(this.constructor),QA=new Set,pA=this.config.model_type;for(const PA of D){const OA=PA.get(pA);OA&&QA.add(OA[0])}let mA=`The current model class (${O}) is not compatible with \`.generate()\`, as it doesn't have a language model head.`;throw QA.size>0&&(mA+=` Please use the following class instead: ${[...QA].join(", ")}`),Error(mA)}}prepare_inputs_for_generation(...D){return this._prepare_inputs_for_generation(this,...D)}_update_model_kwargs_for_generation({generated_input_ids:D,outputs:O,model_inputs:QA,is_encoder_decoder:pA}){return QA.past_key_values=this.getPastKeyValues(O,QA.past_key_values),QA.input_ids=new a.Tensor("int64",D.flat(),[D.length,1]),pA||(QA.attention_mask=(0,a.cat)([QA.attention_mask,(0,a.ones)([QA.attention_mask.dims[0],1])],1)),QA.position_ids=null,QA}_prepare_model_inputs({inputs:D,bos_token_id:O,model_kwargs:QA}){const pA=(0,o.pick)(QA,this.forward_params),mA=this.main_input_name;if(mA in pA){if(D)throw new Error("`inputs`: {inputs}` were passed alongside {input_name} which is not allowed. Make sure to either pass {inputs} or {input_name}=...")}else pA[mA]=D;return{inputs_tensor:pA[mA],model_inputs:pA,model_input_name:mA}}async _prepare_encoder_decoder_kwargs_for_generation({inputs_tensor:D,model_inputs:O,model_input_name:QA,generation_config:pA}){if(this.sessions.model.inputNames.includes("inputs_embeds")&&!O.inputs_embeds&&"_prepare_inputs_embeds"in this){const{input_ids:PA,pixel_values:OA,attention_mask:XA,...Be}=O,Se=await this._prepare_inputs_embeds(O);O={...Be,...(0,o.pick)(Se,["inputs_embeds","attention_mask"])}}let{last_hidden_state:mA}=await rA(this,O);if(pA.guidance_scale!==null&&pA.guidance_scale>1)mA=(0,a.cat)([mA,(0,a.full_like)(mA,0)],0),"attention_mask"in O&&(O.attention_mask=(0,a.cat)([O.attention_mask,(0,a.zeros_like)(O.attention_mask)],0));else if(O.decoder_input_ids){const PA=tA(O.decoder_input_ids).dims[0];if(PA!==mA.dims[0]){if(mA.dims[0]!==1)throw new Error(`The encoder outputs have a different batch size (${mA.dims[0]}) than the decoder inputs (${PA}).`);mA=(0,a.cat)(Array.from({length:PA},()=>mA),0)}}return O.encoder_outputs=mA,O}_prepare_decoder_input_ids_for_generation({batch_size:D,model_input_name:O,model_kwargs:QA,decoder_start_token_id:pA,bos_token_id:mA,generation_config:PA}){let{decoder_input_ids:OA,...XA}=QA;if(!(OA instanceof a.Tensor)){if(OA)Array.isArray(OA[0])||(OA=Array.from({length:D},()=>OA));else if(pA??=mA,this.config.model_type==="musicgen")OA=Array.from({length:D*this.config.decoder.num_codebooks},()=>[pA]);else if(Array.isArray(pA)){if(pA.length!==D)throw new Error(`\`decoder_start_token_id\` expcted to have length ${D} but got ${pA.length}`);OA=pA}else OA=Array.from({length:D},()=>[pA]);OA=tA(OA)}return QA.decoder_attention_mask=(0,a.ones_like)(OA),{input_ids:OA,model_inputs:XA}}async generate({inputs:D=null,generation_config:O=null,logits_processor:QA=null,stopping_criteria:pA=null,streamer:mA=null,...PA}){this._validate_model_class(),O=this._prepare_generation_config(O,PA);let{inputs_tensor:OA,model_inputs:XA,model_input_name:Be}=this._prepare_model_inputs({inputs:D,model_kwargs:PA});const Se=this.config.is_encoder_decoder;Se&&("encoder_outputs"in XA||(XA=await this._prepare_encoder_decoder_kwargs_for_generation({inputs_tensor:OA,model_inputs:XA,model_input_name:Be,generation_config:O})));let Le;Se?{input_ids:Le,model_inputs:XA}=this._prepare_decoder_input_ids_for_generation({batch_size:XA[Be].dims.at(0),model_input_name:Be,model_kwargs:XA,decoder_start_token_id:O.decoder_start_token_id,bos_token_id:O.bos_token_id,generation_config:O}):Le=XA[Be];let Ue=Le.dims.at(-1);O.max_new_tokens!==null&&(O.max_length=Ue+O.max_new_tokens);const we=this._get_logits_processor(O,Ue,QA),Ve=this._get_stopping_criteria(O,pA),fe=XA[Be].dims.at(0),De=L.LogitsSampler.getSampler(O),Pe=new Array(fe).fill(0),Ig=Le.tolist();mA&&mA.put(Ig);let ug,Gg={};for(;;){if(XA=this.prepare_inputs_for_generation(Ig,XA,O),ug=await this.forward(XA),O.output_attentions&&O.return_dict_in_generate){const gI=this.getAttentions(ug);for(const FI in gI)FI in Gg||(Gg[FI]=[]),Gg[FI].push(gI[FI])}const xe=ug.logits.slice(null,-1,null),hg=we(Ig,xe),vg=[];for(let gI=0;gIgI))break;XA=this._update_model_kwargs_for_generation({generated_input_ids:vg,outputs:ug,model_inputs:XA,is_encoder_decoder:Se})}mA&&mA.end();const kg=this.getPastKeyValues(ug,XA.past_key_values,!0),Sg=new a.Tensor("int64",Ig.flat(),[Ig.length,Ig[0].length]);if(O.return_dict_in_generate)return{sequences:Sg,past_key_values:kg,...Gg};for(const xe of Object.values(ug))xe.location==="gpu-buffer"&&xe.dispose();return Sg}getPastKeyValues(D,O,QA=!1){const pA=Object.create(null);for(const mA in D)if(mA.startsWith("present")){const PA=mA.replace("present_conv","past_conv").replace("present","past_key_values"),OA=mA.includes("encoder");if(OA&&O?pA[PA]=O[PA]:pA[PA]=D[mA],O&&(!OA||QA)){const XA=O[PA];XA.location==="gpu-buffer"&&XA.dispose()}}return pA}getAttentions(D){const O={};for(const QA of["cross_attentions","encoder_attentions","decoder_attentions"])for(const pA in D)pA.startsWith(QA)&&(QA in O||(O[QA]=[]),O[QA].push(D[pA]));return O}addPastKeyValues(D,O){if(O)Object.assign(D,O);else{const QA=this.sessions.decoder_model_merged??this.sessions.model,pA=(D[this.main_input_name]??D.attention_mask)?.dims?.[0]??1,mA=QA?.config?.kv_cache_dtype??"float32",PA=mA==="float16"?a.DataTypeMap.float16:a.DataTypeMap.float32,OA=(0,I.getCacheShapes)(this.config,{batch_size:pA});for(const XA in OA){const Be=OA[XA].reduce((Se,Le)=>Se*Le,1);D[XA]=new a.Tensor(mA,new PA(Be),OA[XA])}}}async encode_image({pixel_values:D}){return(await z(this.sessions.vision_encoder,{pixel_values:D})).image_features}async encode_text({input_ids:D}){return(await z(this.sessions.embed_tokens,{input_ids:D})).inputs_embeds}async encode_audio({audio_values:D}){return(await z(this.sessions.audio_encoder,{audio_values:D})).audio_features}}class wA{}class LA extends wA{constructor({last_hidden_state:D,hidden_states:O=null,attentions:QA=null}){super(),this.last_hidden_state=D,this.hidden_states=O,this.attentions=QA}}class JA extends q{}class GA extends JA{}class fA extends JA{async _call(D){return new Pg(await super._call(D))}}class _A extends JA{async _call(D){return new Fe(await super._call(D))}}class dA extends JA{async _call(D){return new bg(await super._call(D))}}class YA extends JA{async _call(D){return new Zg(await super._call(D))}}class HA extends q{}class Ae extends HA{}class SA extends HA{async _call(D){return new Pg(await super._call(D))}}class re extends HA{async _call(D){return new Fe(await super._call(D))}}class $A extends HA{async _call(D){return new bg(await super._call(D))}}class WA extends HA{async _call(D){return new Zg(await super._call(D))}}class Ce extends q{}class ee extends Ce{}class oe extends Ce{async _call(D){return new Pg(await super._call(D))}}class TA extends Ce{async _call(D){return new Fe(await super._call(D))}}class ke extends Ce{async _call(D){return new bg(await super._call(D))}}class Je extends q{}class pe extends Je{}class fg extends Je{}class zg extends q{}class qg extends zg{}class xg extends q{}class rg extends xg{}class U extends xg{async _call(D){return new Pg(await super._call(D))}}class wg extends xg{async _call(D){return new Fe(await super._call(D))}}class xI extends xg{async _call(D){return new bg(await super._call(D))}}class fI extends xg{async _call(D){return new Zg(await super._call(D))}}class AI extends q{}class he extends AI{}class EI extends AI{async _call(D){return new Pg(await super._call(D))}}class ze extends AI{async _call(D){return new Fe(await super._call(D))}}class Ne extends AI{async _call(D){return new bg(await super._call(D))}}class lI extends AI{async _call(D){return new Zg(await super._call(D))}}class R extends q{}class gA extends R{}class j extends R{async _call(D){return new Pg(await super._call(D))}}class IA extends R{async _call(D){return new Fe(await super._call(D))}}class aA extends R{async _call(D){return new bg(await super._call(D))}}class yA extends R{async _call(D){return new Zg(await super._call(D))}}class bA extends q{}class ae extends bA{}class Ee extends bA{async _call(D){return new Pg(await super._call(D))}}class Ie extends bA{async _call(D){return new Fe(await super._call(D))}}class _e extends bA{async _call(D){return new bg(await super._call(D))}}class be extends bA{async _call(D){return new Zg(await super._call(D))}}class tg extends q{}class Ag extends tg{}class lg extends tg{async _call(D){return new Pg(await super._call(D))}}class Og extends tg{async _call(D){return new Fe(await super._call(D))}}class gg extends tg{async _call(D){return new bg(await super._call(D))}}class og extends tg{async _call(D){return new Zg(await super._call(D))}}class Wg extends q{}class Lg extends Wg{}class sI extends Wg{async _call(D){return new Pg(await super._call(D))}}class CI extends Wg{async _call(D){return new Fe(await super._call(D))}}class jg extends Wg{async _call(D){return new bg(await super._call(D))}}class cI extends Wg{async _call(D){return new Zg(await super._call(D))}}class $g extends q{}class yg extends $g{}class cg extends $g{async _call(D){return new Fe(await super._call(D))}}class $e extends $g{async _call(D){return new bg(await super._call(D))}}class mg extends $g{async _call(D){return new Zg(await super._call(D))}}class iI extends $g{async _call(D){return new Pg(await super._call(D))}}class Tg extends q{}class tI extends Tg{}class yI extends Tg{async _call(D){return new Pg(await super._call(D))}}class l extends Tg{async _call(D){return new Fe(await super._call(D))}}class f extends Tg{async _call(D){return new bg(await super._call(D))}}class k extends q{}class b extends k{}class eA extends k{async _call(D){return new Pg(await super._call(D))}}class EA extends k{async _call(D){return new Fe(await super._call(D))}}class DA extends k{async _call(D){return new Zg(await super._call(D))}}class MA extends q{}class se extends MA{}class me extends MA{async _call(D){return new Pg(await super._call(D))}}class ve extends MA{async _call(D){return new Fe(await super._call(D))}}class Ze extends MA{async _call(D){return new bg(await super._call(D))}}class BA extends MA{async _call(D){return new Zg(await super._call(D))}}class N extends q{}class H extends N{}class oA extends N{async _call(D){return new Pg(await super._call(D))}}class sA extends N{async _call(D){return new Fe(await super._call(D))}}class hA extends N{async _call(D){return new Zg(await super._call(D))}}class NA extends q{}class zA extends NA{}class ge extends NA{async _call(D){return new Fe(await super._call(D))}}class ZA extends NA{async _call(D){return new Zg(await super._call(D))}}class VA extends NA{async _call(D){return new Pg(await super._call(D))}}class ce extends q{forward_params=["input_ids","attention_mask","encoder_outputs","decoder_input_ids","decoder_attention_mask","past_key_values"]}class Re extends ce{}class ng extends ce{}class Ng extends q{}class sg extends Ng{}class Eg extends Ng{}class eg extends q{}class oI extends eg{}class dI extends eg{}class Kg extends q{}class mI extends Kg{}class ag extends Kg{}class Mg extends Kg{async _call(D){return new Fe(await super._call(D))}}class Yg extends q{}class rI extends Yg{}class MI extends Yg{}class _g extends Yg{async _call(D){return new Fe(await super._call(D))}}class uI extends Yg{}class Rg extends q{}class Bg extends Rg{}class Fg extends Rg{}class dg extends q{}class eI extends dg{}class VI extends dg{}class TI extends q{}class It extends TI{}class $t extends TI{async _call(D){return new Pg(await super._call(D))}}class Zt extends TI{async _call(D){return new Fe(await super._call(D))}}class Xt extends TI{async _call(D){return new bg(await super._call(D))}}class Ao extends TI{async _call(D){return new Zg(await super._call(D))}}class zI extends q{}class eo extends zI{}class go extends zI{async _call(D){return new Pg(await super._call(D))}}class Io extends zI{async _call(D){return new Fe(await super._call(D))}}class io extends zI{async _call(D){return new bg(await super._call(D))}}class to extends zI{async _call(D){return new Zg(await super._call(D))}}class $I extends q{}class oo extends $I{}class it extends $I{async _call(D){return new Pg(await super._call(D))}}class tt extends $I{async _call(D){return new Fe(await super._call(D))}}class ot extends $I{async _call(D){return new bg(await super._call(D))}}class so extends $I{async _call(D){return new Zg(await super._call(D))}}class st extends q{}class Ct extends st{}class rt extends st{}class vI extends q{requires_attention_mask=!1;main_input_name="input_features";forward_params=["input_features","attention_mask","decoder_input_ids","decoder_attention_mask","past_key_values"]}class Co extends vI{}class Ni extends vI{_prepare_generation_config(D,O){return super._prepare_generation_config(D,O,u.WhisperGenerationConfig)}_retrieve_init_tokens(D){const O=[D.decoder_start_token_id];let QA=D.language;const pA=D.task;if(D.is_multilingual){QA||(console.warn("No language specified - defaulting to English (en)."),QA="en");const PA=`<|${(0,_.whisper_language_to_code)(QA)}|>`;O.push(D.lang_to_id[PA]),O.push(D.task_to_id[pA??"transcribe"])}else if(QA||pA)throw new Error("Cannot specify `task` or `language` for an English-only model. If the model is intended to be multilingual, pass `is_multilingual=true` to generate, or update the generation config.");return!D.return_timestamps&&D.no_timestamps_token_id&&O.at(-1)!==D.no_timestamps_token_id?O.push(D.no_timestamps_token_id):D.return_timestamps&&O.at(-1)===D.no_timestamps_token_id&&(console.warn("<|notimestamps|> prompt token is removed from generation_config since `return_timestamps` is set to `true`."),O.pop()),O.filter(mA=>mA!=null)}async generate({inputs:D=null,generation_config:O=null,logits_processor:QA=null,stopping_criteria:pA=null,...mA}){O=this._prepare_generation_config(O,mA);const PA=mA.decoder_input_ids??this._retrieve_init_tokens(O);if(O.return_timestamps&&(QA??=new Q.LogitsProcessorList,QA.push(new Q.WhisperTimeStampLogitsProcessor(O,PA))),O.begin_suppress_tokens&&(QA??=new Q.LogitsProcessorList,QA.push(new Q.SuppressTokensAtBeginLogitsProcessor(O.begin_suppress_tokens,PA.length))),O.return_token_timestamps){if(!O.alignment_heads)throw new Error("Model generation config has no `alignment_heads`, token-level timestamps not available. See https://gist.github.com/hollance/42e32852f24243b748ae6bc1f985b13a on how to add this property to the generation config.");O.task==="translate"&&console.warn("Token-level timestamps may not be reliable for task 'translate'."),O.output_attentions=!0,O.return_dict_in_generate=!0}const OA=await super.generate({inputs:D,generation_config:O,logits_processor:QA,decoder_input_ids:PA,...mA});return O.return_token_timestamps&&(OA.token_timestamps=this._extract_token_timestamps(OA,O.alignment_heads,O.num_frames)),OA}_extract_token_timestamps(D,O,QA=null,pA=.02){if(!D.cross_attentions)throw new Error("Model outputs must contain cross attentions to extract timestamps. This is most likely because the model was not exported with `output_attentions=True`.");QA==null&&console.warn("`num_frames` has not been set, meaning the entire audio will be analyzed. This may lead to inaccurate token-level timestamps for short audios (< 30 seconds).");let mA=this.config.median_filter_width;mA===void 0&&(console.warn("Model config has no `median_filter_width`, using default value of 7."),mA=7);const PA=D.cross_attentions,OA=Array.from({length:this.config.decoder_layers},(fe,De)=>(0,a.cat)(PA.map(Pe=>Pe[De]),2)),XA=(0,a.stack)(O.map(([fe,De])=>{if(fe>=OA.length)throw new Error(`Layer index ${fe} is out of bounds for cross attentions (length ${OA.length}).`);return QA?OA[fe].slice(null,De,null,[0,QA]):OA[fe].slice(null,De)})).transpose(1,0,2,3),[Be,Se]=(0,a.std_mean)(XA,-2,0,!0),Le=XA.clone();for(let fe=0;fePe[xe+1]-Pe[xe]),Gg=(0,o.mergeArrays)([1],ug).map(Sg=>!!Sg),kg=[];for(let Sg=0;SgArray.from({length:D.dims[0]},ug=>Array.from({length:D.dims[1]},Gg=>1))),Ve=O?O.tolist():[],fe=QA?QA.tolist():[];let De=0,Pe=0;for(let Ig=0;IgUe[Ig][Jg]==1),kg=ug.reduce((Qg,Jg,ei)=>(Jg==XA&&Qg.push(ei),Qg),[]).map(Qg=>ug[Qg+1]),Sg=kg.filter(Qg=>Qg==PA).length,xe=kg.filter(Qg=>Qg==OA).length;let hg=[],vg=0,ni=Sg,gI=xe;for(let Qg=0;QgSI>vg&&li==PA),ei=ug.findIndex((li,SI)=>SI>vg&&li==OA),Ei=ni>0&&Jg!==-1?Jg:ug.length+1,Wi=gI>0&&ei!==-1?ei:ug.length+1;let bo,FC,SC,NC;Ei0?(0,c.max)(hg.at(-1))[0]+1:0;hg.push(Array.from({length:3*RC},(li,SI)=>pl+SI%RC));const GC=RC+pl,xo=Tp*_C*Jo,Yp=Array.from({length:xo},(li,SI)=>GC+Math.floor(SI/(_C*Jo))),Pp=Array.from({length:xo},(li,SI)=>GC+Math.floor(SI/Jo)%_C),vp=Array.from({length:xo},(li,SI)=>GC+SI%Jo);hg.push([Yp,Pp,vp].flat()),vg=bo+xo}if(vg0?(0,c.max)(hg.at(-1))[0]+1:0,Jg=ug.length-vg;hg.push(Array.from({length:3*Jg},(ei,Ei)=>Qg+Ei%Jg))}const FI=hg.reduce((Qg,Jg)=>Qg+Jg.length,0),qi=new Array(FI);let Oi=0;for(let Qg=0;Qg<3;++Qg)for(let Jg=0;JgLe[De%Le.length]),Ve=Array.from({length:Ue[0]},(fe,De)=>(0,c.max)(Le.subarray(Ue[1]*De,Ue[1]*(De+1)))[0]+1n+BigInt(Ue[1]));return[new a.Tensor("int64",we,[3,...Ue]),new a.Tensor("int64",Ve,[Ve.length,1])]}else{const[Le,Ue]=D.dims,we=BigInt64Array.from({length:3*Le*Ue},(Ve,fe)=>BigInt(Math.floor(fe%Ue/Le)));return[new a.Tensor("int64",we,[3,...D.dims]),(0,a.zeros)([Le,1])]}}async encode_image({pixel_values:D,image_grid_thw:O}){return(await z(this.sessions.vision_encoder,{pixel_values:D,grid_thw:O})).image_features}_merge_input_ids_with_image_features(D){return v({image_token_id:this.config.image_token_id,...D})}prepare_inputs_for_generation(D,O,QA){if(O.attention_mask&&!O.position_ids)if(!O.past_key_values)[O.position_ids,O.rope_deltas]=this.get_rope_index(O.input_ids,O.image_grid_thw,O.video_grid_thw,O.attention_mask);else{O.pixel_values=null;const pA=BigInt(Object.values(O.past_key_values)[0].dims.at(-2)),mA=O.rope_deltas.map(PA=>pA+PA);O.position_ids=(0,a.stack)([mA,mA,mA],0)}return O}}class Ss extends q{}class BB extends Ss{}class QB extends Ss{}class Ns extends q{}class nB extends Ns{}class EB extends Ns{}class _s extends q{}class lB extends _s{}class cB extends _s{}class Rs extends q{}class dB extends Rs{}class uB extends Rs{}class Gs extends q{}class hB extends Gs{}class DB extends Gs{}class ks extends q{}class wB extends ks{}class pB extends ks{async _call(D){return new Fe(await super._call(D))}}class Ls extends q{}class fB extends Ls{}class yB extends Ls{async _call(D){return new Fe(await super._call(D))}}class mB extends q{}class MB extends mB{}class Ks extends q{}class FB extends Ks{}class SB extends Ks{async _call(D){return new Fe(await super._call(D))}}class NB extends q{}class _B extends NB{}class Us extends q{}class RB extends Us{}class GB extends Us{async _call(D){return new Fe(await super._call(D))}}class kB extends q{}class LB extends kB{}class bs extends q{}class KB extends bs{}class UB extends bs{async _call(D){return new Fe(await super._call(D))}}class bB extends q{}class JB extends bB{async _call(D){return new Dl(await super._call(D))}}class Js extends q{}class xB extends Js{}class TB extends Js{async _call(D){return new Fe(await super._call(D))}}class xs extends q{}class YB extends xs{}class PB extends xs{async _call(D){return new Fe(await super._call(D))}}class Ts extends q{}class vB extends Ts{}class HB extends Ts{}class Ys extends q{}class qB extends Ys{}class OB extends Ys{}class Ps extends q{}class WB extends Ps{}class jB extends Ps{async _call(D){return new Fe(await super._call(D))}}class wo extends q{}class VB extends wo{}class zB extends wo{async _call(D){return new Hs(await super._call(D))}}class vs extends wo{async _call(D){return new $B(await super._call(D))}}class Hs extends wA{constructor({logits:D,pred_boxes:O}){super(),this.logits=D,this.pred_boxes=O}}class $B extends wA{constructor({logits:D,pred_boxes:O,pred_masks:QA}){super(),this.logits=D,this.pred_boxes=O,this.pred_masks=QA}}class qs extends q{}class ZB extends qs{}class XB extends qs{async _call(D){return new Nt(await super._call(D))}}class Nt extends wA{constructor({logits:D,pred_boxes:O}){super(),this.logits=D,this.pred_boxes=O}}class Os extends q{}class AQ extends Os{}class eQ extends Os{async _call(D){return new gQ(await super._call(D))}}class gQ extends Nt{}class Ws extends q{}class IQ extends Ws{}class iQ extends Ws{async _call(D){return new tQ(await super._call(D))}}class tQ extends Nt{}class js extends q{}class oQ extends js{}class sQ extends js{async _call(D){return new Nt(await super._call(D))}}class Vs extends q{}class CQ extends Vs{}class rQ extends Vs{async _call(D){return new aQ(await super._call(D))}}class aQ extends Hs{}class zs extends q{}class BQ extends zs{}class QQ extends zs{async _call(D){return new Fe(await super._call(D))}}class $s extends q{}class nQ extends $s{}class EQ extends $s{async _call(D){return new Fe(await super._call(D))}}class Zs extends q{}class lQ extends Zs{}class cQ extends Zs{async _call(D){return new Fe(await super._call(D))}}class po extends q{}class dQ extends po{}class uQ extends po{async _call(D){return new Fe(await super._call(D))}}class hQ extends po{}class Xs extends q{}class DQ extends Xs{}class wQ extends Xs{}class AC extends q{}class pQ extends AC{}class fQ extends AC{}class yQ extends q{}class mQ extends yQ{}class fo extends q{}class MQ extends fo{}class FQ extends fo{}class SQ extends fo{}class NQ extends q{}class _Q extends NQ{}class RQ extends q{}class GQ extends RQ{}class kQ extends q{}class LQ extends kQ{}class eC extends q{}class KQ extends eC{}class UQ extends eC{}class gC extends q{}class bQ extends gC{}class JQ extends gC{}class xQ extends q{}class TQ extends xQ{}class IC extends q{}class YQ extends IC{}class PQ extends IC{async _call(D){return new Fe(await super._call(D))}}class iC extends q{}class vQ extends iC{}class HQ extends iC{async _call(D){return new Fe(await super._call(D))}}class tC extends q{}class qQ extends tC{}class OQ extends tC{async _call(D){return new Fe(await super._call(D))}}class oC extends q{}class WQ extends oC{}class jQ extends oC{async _call(D){return new Fe(await super._call(D))}}class VQ extends q{}class zQ extends VQ{}class $Q extends q{}class ZQ extends $Q{}class XQ extends q{}class An extends XQ{}class sC extends q{}class en extends sC{}class gn extends sC{async _call(D){return new In(await super._call(D))}}class In extends wA{constructor({logits:D,pred_boxes:O}){super(),this.logits=D,this.pred_boxes=O}}class tn extends q{}class on extends tn{async get_image_embeddings({pixel_values:D}){return await rA(this,{pixel_values:D})}async forward(D){if((!D.image_embeddings||!D.image_positional_embeddings)&&(D={...D,...await this.get_image_embeddings(D)}),!D.input_labels&&D.input_points){const QA=D.input_points.dims.slice(0,-1),pA=QA.reduce((mA,PA)=>mA*PA,1);D.input_labels=new a.Tensor("int64",new BigInt64Array(pA).fill(1n),QA)}const O={image_embeddings:D.image_embeddings,image_positional_embeddings:D.image_positional_embeddings};return D.input_points&&(O.input_points=D.input_points),D.input_labels&&(O.input_labels=D.input_labels),D.input_boxes&&(O.input_boxes=D.input_boxes),await z(this.sessions.prompt_encoder_mask_decoder,O)}async _call(D){return new sn(await super._call(D))}}class sn extends wA{constructor({iou_scores:D,pred_masks:O}){super(),this.iou_scores=D,this.pred_masks=O}}class CC extends q{}class Cn extends CC{}class rn extends CC{}class rC extends q{}class an extends rC{}class Bn extends rC{}class Ai extends q{}class Qn extends Ai{}class nn extends Ai{async _call(D){return new Qi(await super._call(D))}}class En extends Ai{async _call(D){return new Fe(await super._call(D))}}class ln extends Ai{async _call(D){return new bg(await super._call(D))}}class aC extends q{}class cn extends aC{}class dn extends aC{async _call(D){return new bg(await super._call(D))}}class un extends q{}class hn extends un{}class yo extends q{}class Dn extends yo{}class wn extends yo{async _call(D){return new Qi(await super._call(D))}}class pn extends yo{async _call(D){return new Fe(await super._call(D))}}class _t extends q{}class fn extends _t{}class yn extends _t{async _call(D){return new Qi(await super._call(D))}}class mn extends _t{async _call(D){return new Fe(await super._call(D))}}class Mn extends _t{async _call(D){return new bg(await super._call(D))}}class mo extends q{}class Fn extends mo{}class Sn extends mo{async _call(D){return new Qi(await super._call(D))}}class Nn extends mo{async _call(D){return new Fe(await super._call(D))}}class W0 extends q{}class _n extends Ai{}class Rn extends Ai{async _call(D){return new Qi(await super._call(D))}}class Gn extends Ai{async _call(D){return new Fe(await super._call(D))}}class vi extends q{}class kn extends vi{}class Ln extends vi{async _call(D){return new Qi(await super._call(D))}}class Kn extends vi{async _call(D){return new Fe(await super._call(D))}}class Un extends vi{async _call(D){return new hl(await super._call(D))}}class bn extends vi{async _call(D){return new bg(await super._call(D))}}class Jn extends q{}class xn extends Jn{}class Mo extends q{}class j0 extends Mo{}class Tn extends Mo{}class Yn extends Mo{async generate_speech(D,O,{threshold:QA=.5,minlenratio:pA=0,maxlenratio:mA=20,vocoder:PA=null}={}){const OA={input_ids:D},{encoder_outputs:XA,encoder_attention_mask:Be}=await rA(this,OA),Se=XA.dims[1]/this.config.reduction_factor,Le=Math.floor(Se*mA),Ue=Math.floor(Se*pA),we=this.config.num_mel_bins;let Ve=[],fe=null,De=null,Pe=0;for(;;){++Pe;const Gg=AA(!!De);let kg;De?kg=De.output_sequence_out:kg=new a.Tensor("float32",new Float32Array(we),[1,1,we]);let Sg={use_cache_branch:Gg,output_sequence:kg,encoder_attention_mask:Be,speaker_embeddings:O,encoder_hidden_states:XA};this.addPastKeyValues(Sg,fe),De=await z(this.sessions.decoder_model_merged,Sg),fe=this.getPastKeyValues(De,fe);const{prob:xe,spectrum:hg}=De;if(Ve.push(hg),Pe>=Ue&&(Array.from(xe.data).filter(vg=>vg>=QA).length>0||Pe>=Le))break}const Ig=(0,a.cat)(Ve),{waveform:ug}=await z(PA.sessions.model,{spectrogram:Ig});return{spectrogram:Ig,waveform:ug}}}class Pn extends q{main_input_name="spectrogram"}class vn extends q{}class Hn extends vn{}class BC extends q{}class qn extends BC{}class On extends BC{}class QC extends q{}class Wn extends QC{}class jn extends QC{}class nC extends q{}class Vn extends nC{}class zn extends nC{}class EC extends q{}class $n extends EC{}class Zn extends EC{}class Fo extends q{}class Xn extends Fo{}class AE extends Fo{static async from_pretrained(D,O={}){return super.from_pretrained(D,{...O,model_file_name:O.model_file_name??"text_model"})}}class eE extends Fo{static async from_pretrained(D,O={}){return super.from_pretrained(D,{...O,model_file_name:O.model_file_name??"audio_model"})}}class gE extends q{}class lC extends gE{async _call(D){return new wl(await super._call(D))}}class So extends q{}class V0 extends So{}class IE extends So{}class iE extends So{}class cC extends q{}class tE extends cC{}class oE extends cC{}class dC extends q{}class sE extends dC{}class CE extends dC{async _call(D){return new Fe(await super._call(D))}}class uC extends q{}class z0 extends uC{}class $0 extends uC{}class hC extends q{forward_params=["input_ids","attention_mask","encoder_outputs","decoder_input_ids","decoder_attention_mask","past_key_values"];_apply_and_filter_by_delay_pattern_mask(D){const[O,QA]=D.dims,pA=this.config.decoder.num_codebooks,mA=QA-pA;let PA=0;for(let Be=0;Be0&&Ue<=mA&&(D.data[PA++]=D.data[Be])}const OA=Math.floor(O/pA),XA=PA/(OA*pA);return new a.Tensor(D.type,D.data.slice(0,PA),[OA,pA,XA])}prepare_inputs_for_generation(D,O,QA){let pA=structuredClone(D);for(let PA=0;PA=OA&&(pA[PA][OA]=BigInt(this.config.decoder.pad_token_id));return QA.guidance_scale!==null&&QA.guidance_scale>1&&(pA=pA.concat(pA)),super.prepare_inputs_for_generation(pA,O,QA)}async generate(D){const O=await super.generate(D),QA=this._apply_and_filter_by_delay_pattern_mask(O).unsqueeze_(0),{audio_values:pA}=await z(this.sessions.encodec_decode,{audio_codes:QA});return pA}}class No extends q{}class rE extends No{}class aE extends No{async _call(D){return new Fe(await super._call(D))}}class BE extends No{}class _o extends q{}class QE extends _o{}class nE extends _o{async _call(D){return new Fe(await super._call(D))}}class EE extends _o{}class Ro extends q{}class lE extends Ro{}class cE extends Ro{async _call(D){return new Fe(await super._call(D))}}class dE extends Ro{}class Go extends q{}class uE extends Go{}class hE extends Go{async _call(D){return new Fe(await super._call(D))}}class DE extends Go{}class wE extends q{}class pE extends wE{}class fE extends q{}class yE extends fE{forward_params=["input_ids","pixel_values","images_seq_mask","images_emb_mask","attention_mask","position_ids","past_key_values"];constructor(...D){super(...D),this._generation_mode="text"}async forward(D){const O=this._generation_mode??"text";let QA;if(O==="text"||!D.past_key_values){const XA=this.sessions.prepare_inputs_embeds,Be=(0,o.pick)(D,XA.inputNames);QA=await z(XA,Be)}else{const XA=this.sessions.gen_img_embeds,Be=(0,o.pick)({image_ids:D.input_ids},XA.inputNames);QA=await z(XA,Be)}const pA={...D,...QA},mA=await cA(this,pA),PA=this.sessions[O==="text"?"lm_head":"gen_head"];if(!PA)throw new Error(`Unable to find "${PA}" generation head`);const OA=await z(PA,(0,o.pick)(mA,PA.inputNames));return{...QA,...mA,...OA}}async generate(D){return this._generation_mode="text",super.generate(D)}async generate_images(D){this._generation_mode="image";const O=(D.inputs??D[this.main_input_name]).dims[1],pA=(await super.generate(D)).slice(null,[O,null]),mA=this.sessions.image_decode,{decoded_image:PA}=await z(mA,{generated_tokens:pA}),OA=PA.add_(1).mul_(255/2).clamp_(0,255).to("uint8"),XA=[];for(const Be of OA){const Se=d.RawImage.fromTensor(Be);XA.push(Se)}return XA}}class mE extends wA{constructor({char_logits:D,bpe_logits:O,wp_logits:QA}){super(),this.char_logits=D,this.bpe_logits=O,this.wp_logits=QA}get logits(){return[this.char_logits,this.bpe_logits,this.wp_logits]}}class ME extends q{}class FE extends ME{async _call(D){return new mE(await super._call(D))}}class DC extends q{}class SE extends DC{}class NE extends DC{}class wC extends q{}class _E extends wC{}class RE extends wC{}class GE extends q{forward_params=["input_ids","attention_mask","position_ids","audio_values","past_key_values"]}class pC extends GE{_merge_input_ids_with_audio_features(D){const O=D.audio_features.dims.at(-1),QA=D.audio_features.view(-1,O);return x({audio_token_id:this.config.ignore_index??this.config.audio_token_id,...D,audio_features:QA})}}class kE extends pC{}class ko extends q{main_input_name="input_values";forward_params=["input_values"]}class LE extends wA{constructor({audio_codes:D}){super(),this.audio_codes=D}}class KE extends wA{constructor({audio_values:D}){super(),this.audio_values=D}}class UE extends ko{async encode(D){return new LE(await z(this.sessions.encoder_model,D))}async decode(D){return new KE(await z(this.sessions.decoder_model,D))}}class bE extends ko{static async from_pretrained(D,O={}){return super.from_pretrained(D,{...O,model_file_name:O.model_file_name??"encoder_model"})}}class JE extends ko{static async from_pretrained(D,O={}){return super.from_pretrained(D,{...O,model_file_name:O.model_file_name??"decoder_model"})}}class Lo extends q{main_input_name="input_values";forward_params=["input_values"]}class xE extends wA{constructor({audio_codes:D}){super(),this.audio_codes=D}}class TE extends wA{constructor({audio_values:D}){super(),this.audio_values=D}}class YE extends Lo{async encode(D){return new xE(await z(this.sessions.encoder_model,D))}async decode(D){return new TE(await z(this.sessions.decoder_model,D))}}class PE extends Lo{static async from_pretrained(D,O={}){return super.from_pretrained(D,{...O,model_file_name:O.model_file_name??"encoder_model"})}}class vE extends Lo{static async from_pretrained(D,O={}){return super.from_pretrained(D,{...O,model_file_name:O.model_file_name??"decoder_model"})}}class Ko extends q{main_input_name="input_values";forward_params=["input_values"]}class HE extends Ko{async encode(D){return await z(this.sessions.encoder_model,D)}async decode(D){return await z(this.sessions.decoder_model,D)}}class qE extends Ko{static async from_pretrained(D,O={}){return super.from_pretrained(D,{...O,model_file_name:O.model_file_name??"encoder_model"})}}class OE extends Ko{static async from_pretrained(D,O={}){return super.from_pretrained(D,{...O,model_file_name:O.model_file_name??"decoder_model"})}}class je{static MODEL_CLASS_MAPPINGS=null;static BASE_IF_FAIL=!1;static async from_pretrained(D,{progress_callback:O=null,config:QA=null,cache_dir:pA=null,local_files_only:mA=!1,revision:PA="main",model_file_name:OA=null,subfolder:XA="onnx",device:Be=null,dtype:Se=null,use_external_data_format:Le=null,session_options:Ue={}}={}){const we={progress_callback:O,config:QA,cache_dir:pA,local_files_only:mA,revision:PA,model_file_name:OA,subfolder:XA,device:Be,dtype:Se,use_external_data_format:Le,session_options:Ue};if(we.config=await I.AutoConfig.from_pretrained(D,we),!this.MODEL_CLASS_MAPPINGS)throw new Error("`MODEL_CLASS_MAPPINGS` not implemented for this type of `AutoClass`: "+this.name);const Ve=we.config.model_type;for(const fe of this.MODEL_CLASS_MAPPINGS){let De=fe.get(Ve);if(!De){for(const Pe of fe.values())if(Pe[0]===Ve){De=Pe;break}if(!De)continue}return await De[1].from_pretrained(D,we)}if(this.BASE_IF_FAIL)return ul.has(Ve)||console.warn(`Unknown model class "${Ve}", attempting to construct from base class.`),await q.from_pretrained(D,we);throw Error(`Unsupported model type: ${Ve}`)}}const Z0=new Map([["bert",["BertModel",GA]],["neobert",["NeoBertModel",Ae]],["modernbert",["ModernBertModel",ee]],["nomic_bert",["NomicBertModel",qg]],["roformer",["RoFormerModel",rg]],["electra",["ElectraModel",gA]],["esm",["EsmModel",tI]],["convbert",["ConvBertModel",he]],["camembert",["CamembertModel",ae]],["deberta",["DebertaModel",Ag]],["deberta-v2",["DebertaV2Model",Lg]],["mpnet",["MPNetModel",se]],["albert",["AlbertModel",zA]],["distilbert",["DistilBertModel",yg]],["roberta",["RobertaModel",It]],["xlm",["XLMModel",eo]],["xlm-roberta",["XLMRobertaModel",oo]],["clap",["ClapModel",Xn]],["clip",["CLIPModel",Et]],["clipseg",["CLIPSegModel",Ki]],["chinese_clip",["ChineseCLIPModel",Do]],["siglip",["SiglipModel",ut]],["jina_clip",["JinaCLIPModel",Dt]],["mobilebert",["MobileBertModel",b]],["squeezebert",["SqueezeBertModel",H]],["wav2vec2",["Wav2Vec2Model",Qn]],["wav2vec2-bert",["Wav2Vec2BertModel",Fn]],["unispeech",["UniSpeechModel",Dn]],["unispeech-sat",["UniSpeechSatModel",fn]],["hubert",["HubertModel",_n]],["wavlm",["WavLMModel",kn]],["audio-spectrogram-transformer",["ASTModel",Ct]],["vits",["VitsModel",lC]],["pyannote",["PyAnnoteModel",cn]],["wespeaker-resnet",["WeSpeakerResNetModel",hn]],["detr",["DetrModel",VB]],["rt_detr",["RTDetrModel",ZB]],["rt_detr_v2",["RTDetrV2Model",AQ]],["rf_detr",["RFDetrModel",IQ]],["d_fine",["DFineModel",oQ]],["table-transformer",["TableTransformerModel",CQ]],["vit",["ViTModel",wB]],["ijepa",["IJepaModel",fB]],["pvt",["PvtModel",FB]],["vit_msn",["ViTMSNModel",RB]],["vit_mae",["ViTMAEModel",_B]],["groupvit",["GroupViTModel",LB]],["fastvit",["FastViTModel",KB]],["mobilevit",["MobileViTModel",xB]],["mobilevitv2",["MobileViTV2Model",YB]],["owlvit",["OwlViTModel",vB]],["owlv2",["Owlv2Model",qB]],["beit",["BeitModel",WB]],["deit",["DeiTModel",BQ]],["hiera",["HieraModel",nQ]],["convnext",["ConvNextModel",YQ]],["convnextv2",["ConvNextV2Model",vQ]],["dinov2",["Dinov2Model",qQ]],["dinov2_with_registers",["Dinov2WithRegistersModel",WQ]],["dinov3_vit",["DINOv3ViTModel",zQ]],["dinov3_convnext",["DINOv3ConvNextModel",ZQ]],["resnet",["ResNetModel",lQ]],["swin",["SwinModel",dQ]],["swin2sr",["Swin2SRModel",DQ]],["donut-swin",["DonutSwinModel",TQ]],["yolos",["YolosModel",en]],["dpt",["DPTModel",pQ]],["glpn",["GLPNModel",bQ]],["hifigan",["SpeechT5HifiGan",Pn]],["efficientnet",["EfficientNetModel",sE]],["decision_transformer",["DecisionTransformerModel",pE]],["patchtst",["PatchTSTForPrediction",SE]],["patchtsmixer",["PatchTSMixerForPrediction",_E]],["mobilenet_v1",["MobileNetV1Model",rE]],["mobilenet_v2",["MobileNetV2Model",QE]],["mobilenet_v3",["MobileNetV3Model",lE]],["mobilenet_v4",["MobileNetV4Model",uE]],["maskformer",["MaskFormerModel",KQ]],["mgp-str",["MgpstrForSceneTextRecognition",FE]],["style_text_to_speech_2",["StyleTextToSpeech2Model",xn]]]),X0=new Map([["t5",["T5Model",Re]],["longt5",["LongT5Model",sg]],["mt5",["MT5Model",oI]],["bart",["BartModel",mI]],["mbart",["MBartModel",rI]],["marian",["MarianModel",Cn]],["whisper",["WhisperModel",Co]],["m2m_100",["M2M100Model",an]],["blenderbot",["BlenderbotModel",Bg]],["blenderbot-small",["BlenderbotSmallModel",eI]]]),Ap=new Map([["mimi",["MimiModel",UE]],["dac",["DacModel",YE]],["snac",["SnacModel",HE]]]),ep=new Map([["bloom",["BloomModel",lB]],["jais",["JAISModel",ft]],["gpt2",["GPT2Model",pt]],["gptj",["GPTJModel",Ft]],["gpt_bigcode",["GPTBigCodeModel",K]],["gpt_neo",["GPTNeoModel",xi]],["gpt_neox",["GPTNeoXModel",mt]],["codegen",["CodeGenModel",lA]],["llama",["LlamaModel",te]],["arcee",["ArceeModel",Ug]],["lfm2",["Lfm2Model",Na]],["smollm3",["SmolLM3Model",Ra]],["exaone",["ExaoneModel",ba]],["olmo",["OlmoModel",Ya]],["olmo2",["Olmo2Model",va]],["mobilellm",["MobileLLMModel",xa]],["granite",["GraniteModel",qa]],["cohere",["CohereModel",Wa]],["gemma",["GemmaModel",Va]],["gemma2",["Gemma2Model",$a]],["vaultgemma",["VaultGemmaModel",Xa]],["gemma3_text",["Gemma3Model",eB]],["helium",["HeliumModel",ka]],["glm",["GlmModel",Ka]],["openelm",["OpenELMModel",IB]],["qwen2",["Qwen2Model",tB]],["qwen3",["Qwen3Model",sB]],["phi",["PhiModel",BB]],["phi3",["Phi3Model",nB]],["mpt",["MptModel",dB]],["opt",["OPTModel",hB]],["mistral",["MistralModel",qn]],["ernie4_5",["Ernie4_5_Model",Wn]],["starcoder2",["Starcoder2Model",Vn]],["falcon",["FalconModel",$n]],["stablelm",["StableLmModel",tE]],["modernbert-decoder",["ModernBertDecoderModel",pe]]]),fC=new Map([["speecht5",["SpeechT5ForSpeechToText",Tn]],["whisper",["WhisperForConditionalGeneration",Ni]],["lite-whisper",["LiteWhisperForConditionalGeneration",ro]],["moonshine",["MoonshineForConditionalGeneration",_i]]]),WE=new Map([["speecht5",["SpeechT5ForTextToSpeech",Yn]]]),jE=new Map([["vits",["VitsModel",lC]],["musicgen",["MusicgenForConditionalGeneration",hC]]]),VE=new Map([["bert",["BertForSequenceClassification",_A]],["neobert",["NeoBertForSequenceClassification",re]],["modernbert",["ModernBertForSequenceClassification",TA]],["roformer",["RoFormerForSequenceClassification",wg]],["electra",["ElectraForSequenceClassification",IA]],["esm",["EsmForSequenceClassification",l]],["convbert",["ConvBertForSequenceClassification",ze]],["camembert",["CamembertForSequenceClassification",Ie]],["deberta",["DebertaForSequenceClassification",Og]],["deberta-v2",["DebertaV2ForSequenceClassification",CI]],["mpnet",["MPNetForSequenceClassification",ve]],["albert",["AlbertForSequenceClassification",ge]],["distilbert",["DistilBertForSequenceClassification",cg]],["roberta",["RobertaForSequenceClassification",Zt]],["xlm",["XLMForSequenceClassification",Io]],["xlm-roberta",["XLMRobertaForSequenceClassification",tt]],["bart",["BartForSequenceClassification",Mg]],["mbart",["MBartForSequenceClassification",_g]],["mobilebert",["MobileBertForSequenceClassification",EA]],["squeezebert",["SqueezeBertForSequenceClassification",sA]]]),zE=new Map([["bert",["BertForTokenClassification",dA]],["neobert",["NeoBertForTokenClassification",$A]],["modernbert",["ModernBertForTokenClassification",ke]],["roformer",["RoFormerForTokenClassification",xI]],["electra",["ElectraForTokenClassification",aA]],["esm",["EsmForTokenClassification",f]],["convbert",["ConvBertForTokenClassification",Ne]],["camembert",["CamembertForTokenClassification",_e]],["deberta",["DebertaForTokenClassification",gg]],["deberta-v2",["DebertaV2ForTokenClassification",jg]],["mpnet",["MPNetForTokenClassification",Ze]],["distilbert",["DistilBertForTokenClassification",$e]],["roberta",["RobertaForTokenClassification",Xt]],["xlm",["XLMForTokenClassification",io]],["xlm-roberta",["XLMRobertaForTokenClassification",ot]]]),yC=new Map([["t5",["T5ForConditionalGeneration",ng]],["longt5",["LongT5ForConditionalGeneration",Eg]],["mt5",["MT5ForConditionalGeneration",dI]],["bart",["BartForConditionalGeneration",ag]],["mbart",["MBartForConditionalGeneration",MI]],["marian",["MarianMTModel",rn]],["m2m_100",["M2M100ForConditionalGeneration",Bn]],["blenderbot",["BlenderbotForConditionalGeneration",Fg]],["blenderbot-small",["BlenderbotSmallForConditionalGeneration",VI]]]),mC=new Map([["bloom",["BloomForCausalLM",cB]],["gpt2",["GPT2LMHeadModel",bi]],["jais",["JAISLMHeadModel",yt]],["gptj",["GPTJForCausalLM",n]],["gpt_bigcode",["GPTBigCodeForCausalLM",Y]],["gpt_neo",["GPTNeoForCausalLM",Ti]],["gpt_neox",["GPTNeoXForCausalLM",Mt]],["codegen",["CodeGenForCausalLM",KA]],["llama",["LlamaForCausalLM",Qe]],["llama4_text",["Llama4ForCausalLM",Te]],["arcee",["ArceeForCausalLM",qI]],["lfm2",["Lfm2ForCausalLM",_a]],["smollm3",["SmolLM3ForCausalLM",Ga]],["exaone",["ExaoneForCausalLM",Ja]],["olmo",["OlmoForCausalLM",Pa]],["olmo2",["Olmo2ForCausalLM",Ha]],["mobilellm",["MobileLLMForCausalLM",Ta]],["granite",["GraniteForCausalLM",Oa]],["cohere",["CohereForCausalLM",ja]],["gemma",["GemmaForCausalLM",za]],["gemma2",["Gemma2ForCausalLM",Za]],["vaultgemma",["VaultGemmaForCausalLM",AB]],["gemma3_text",["Gemma3ForCausalLM",gB]],["helium",["HeliumForCausalLM",La]],["glm",["GlmForCausalLM",Ua]],["openelm",["OpenELMForCausalLM",iB]],["qwen2",["Qwen2ForCausalLM",oB]],["qwen3",["Qwen3ForCausalLM",CB]],["phi",["PhiForCausalLM",QB]],["phi3",["Phi3ForCausalLM",EB]],["mpt",["MptForCausalLM",uB]],["opt",["OPTForCausalLM",DB]],["mbart",["MBartForCausalLM",uI]],["mistral",["MistralForCausalLM",On]],["ernie4_5",["Ernie4_5_ForCausalLM",jn]],["starcoder2",["Starcoder2ForCausalLM",zn]],["falcon",["FalconForCausalLM",Zn]],["trocr",["TrOCRForCausalLM",Hn]],["stablelm",["StableLmForCausalLM",oE]],["modernbert-decoder",["ModernBertDecoderForCausalLM",fg]],["phi3_v",["Phi3VForCausalLM",Ci]]]),gp=new Map([["multi_modality",["MultiModalityCausalLM",yE]]]),$E=new Map([["bert",["BertForMaskedLM",fA]],["neobert",["NeoBertForMaskedLM",SA]],["modernbert",["ModernBertForMaskedLM",oe]],["roformer",["RoFormerForMaskedLM",U]],["electra",["ElectraForMaskedLM",j]],["esm",["EsmForMaskedLM",yI]],["convbert",["ConvBertForMaskedLM",EI]],["camembert",["CamembertForMaskedLM",Ee]],["deberta",["DebertaForMaskedLM",lg]],["deberta-v2",["DebertaV2ForMaskedLM",sI]],["mpnet",["MPNetForMaskedLM",me]],["albert",["AlbertForMaskedLM",VA]],["distilbert",["DistilBertForMaskedLM",iI]],["roberta",["RobertaForMaskedLM",$t]],["xlm",["XLMWithLMHeadModel",go]],["xlm-roberta",["XLMRobertaForMaskedLM",it]],["mobilebert",["MobileBertForMaskedLM",eA]],["squeezebert",["SqueezeBertForMaskedLM",oA]]]),ZE=new Map([["bert",["BertForQuestionAnswering",YA]],["neobert",["NeoBertForQuestionAnswering",WA]],["roformer",["RoFormerForQuestionAnswering",fI]],["electra",["ElectraForQuestionAnswering",yA]],["convbert",["ConvBertForQuestionAnswering",lI]],["camembert",["CamembertForQuestionAnswering",be]],["deberta",["DebertaForQuestionAnswering",og]],["deberta-v2",["DebertaV2ForQuestionAnswering",cI]],["mpnet",["MPNetForQuestionAnswering",BA]],["albert",["AlbertForQuestionAnswering",ZA]],["distilbert",["DistilBertForQuestionAnswering",mg]],["roberta",["RobertaForQuestionAnswering",Ao]],["xlm",["XLMForQuestionAnswering",to]],["xlm-roberta",["XLMRobertaForQuestionAnswering",so]],["mobilebert",["MobileBertForQuestionAnswering",DA]],["squeezebert",["SqueezeBertForQuestionAnswering",hA]]]),MC=new Map([["vision-encoder-decoder",["VisionEncoderDecoderModel",Ri]],["idefics3",["Idefics3ForConditionalGeneration",ki]],["smolvlm",["SmolVLMForConditionalGeneration",nt]]]),XE=new Map([["llava",["LlavaForConditionalGeneration",Gi]],["llava_onevision",["LlavaOnevisionForConditionalGeneration",ao]],["moondream1",["Moondream1ForConditionalGeneration",Bo]],["florence2",["Florence2ForConditionalGeneration",no]],["qwen2-vl",["Qwen2VLForConditionalGeneration",aB]],["idefics3",["Idefics3ForConditionalGeneration",ki]],["smolvlm",["SmolVLMForConditionalGeneration",nt]],["paligemma",["PaliGemmaForConditionalGeneration",lo]],["llava_qwen2",["LlavaQwen2ForCausalLM",co]],["gemma3n",["Gemma3nForConditionalGeneration",HI]]]),Al=new Map([["ultravox",["UltravoxModel",pC]],["voxtral",["VoxtralForConditionalGeneration",kE]]]),Ip=new Map([["vision-encoder-decoder",["VisionEncoderDecoderModel",Ri]]]),el=new Map([["vit",["ViTForImageClassification",pB]],["ijepa",["IJepaForImageClassification",yB]],["pvt",["PvtForImageClassification",SB]],["vit_msn",["ViTMSNForImageClassification",GB]],["fastvit",["FastViTForImageClassification",UB]],["mobilevit",["MobileViTForImageClassification",TB]],["mobilevitv2",["MobileViTV2ForImageClassification",PB]],["beit",["BeitForImageClassification",jB]],["deit",["DeiTForImageClassification",QQ]],["hiera",["HieraForImageClassification",EQ]],["convnext",["ConvNextForImageClassification",PQ]],["convnextv2",["ConvNextV2ForImageClassification",HQ]],["dinov2",["Dinov2ForImageClassification",OQ]],["dinov2_with_registers",["Dinov2WithRegistersForImageClassification",jQ]],["resnet",["ResNetForImageClassification",cQ]],["swin",["SwinForImageClassification",uQ]],["segformer",["SegformerForImageClassification",IE]],["efficientnet",["EfficientNetForImageClassification",CE]],["mobilenet_v1",["MobileNetV1ForImageClassification",aE]],["mobilenet_v2",["MobileNetV2ForImageClassification",nE]],["mobilenet_v3",["MobileNetV3ForImageClassification",cE]],["mobilenet_v4",["MobileNetV4ForImageClassification",hE]]]),gl=new Map([["detr",["DetrForObjectDetection",zB]],["rt_detr",["RTDetrForObjectDetection",XB]],["rt_detr_v2",["RTDetrV2ForObjectDetection",eQ]],["rf_detr",["RFDetrForObjectDetection",iQ]],["d_fine",["DFineForObjectDetection",sQ]],["table-transformer",["TableTransformerForObjectDetection",rQ]],["yolos",["YolosForObjectDetection",gn]]]),Il=new Map([["owlvit",["OwlViTForObjectDetection",HB]],["owlv2",["Owlv2ForObjectDetection",OB]],["grounding-dino",["GroundingDinoForObjectDetection",An]]]),Hi=new Map([["detr",["DetrForSegmentation",vs]],["clipseg",["CLIPSegForImageSegmentation",wt]]]),il=new Map([["segformer",["SegformerForSemanticSegmentation",iE]],["sapiens",["SapiensForSemanticSegmentation",MQ]],["swin",["SwinForSemanticSegmentation",hQ]],["mobilenet_v1",["MobileNetV1ForSemanticSegmentation",BE]],["mobilenet_v2",["MobileNetV2ForSemanticSegmentation",EE]],["mobilenet_v3",["MobileNetV3ForSemanticSegmentation",dE]],["mobilenet_v4",["MobileNetV4ForSemanticSegmentation",DE]]]),tl=new Map([["detr",["DetrForSegmentation",vs]],["maskformer",["MaskFormerForInstanceSegmentation",UQ]]]),ol=new Map([["sam",["SamModel",on]]]),sl=new Map([["wav2vec2",["Wav2Vec2ForCTC",nn]],["wav2vec2-bert",["Wav2Vec2BertForCTC",Sn]],["unispeech",["UniSpeechForCTC",wn]],["unispeech-sat",["UniSpeechSatForCTC",yn]],["wavlm",["WavLMForCTC",Ln]],["hubert",["HubertForCTC",Rn]]]),Cl=new Map([["wav2vec2",["Wav2Vec2ForSequenceClassification",En]],["wav2vec2-bert",["Wav2Vec2BertForSequenceClassification",Nn]],["unispeech",["UniSpeechForSequenceClassification",pn]],["unispeech-sat",["UniSpeechSatForSequenceClassification",mn]],["wavlm",["WavLMForSequenceClassification",Kn]],["hubert",["HubertForSequenceClassification",Gn]],["audio-spectrogram-transformer",["ASTForAudioClassification",rt]]]),rl=new Map([["wavlm",["WavLMForXVector",Un]]]),al=new Map([["unispeech-sat",["UniSpeechSatForAudioFrameClassification",Mn]],["wavlm",["WavLMForAudioFrameClassification",bn]],["wav2vec2",["Wav2Vec2ForAudioFrameClassification",ln]],["pyannote",["PyAnnoteForAudioFrameClassification",dn]]]),Bl=new Map([["vitmatte",["VitMatteForImageMatting",JB]]]),ip=new Map([["patchtst",["PatchTSTForPrediction",NE]],["patchtsmixer",["PatchTSMixerForPrediction",RE]]]),Ql=new Map([["swin2sr",["Swin2SRForImageSuperResolution",wQ]]]),nl=new Map([["dpt",["DPTForDepthEstimation",fQ]],["depth_anything",["DepthAnythingForDepthEstimation",mQ]],["glpn",["GLPNForDepthEstimation",JQ]],["sapiens",["SapiensForDepthEstimation",FQ]],["depth_pro",["DepthProForDepthEstimation",_Q]],["metric3d",["Metric3DForDepthEstimation",GQ]],["metric3dv2",["Metric3Dv2ForDepthEstimation",LQ]]]),El=new Map([["sapiens",["SapiensForNormalEstimation",SQ]]]),ll=new Map([["vitpose",["VitPoseForPoseEstimation",MB]]]),cl=new Map([["clip",["CLIPVisionModelWithProjection",ct]],["siglip",["SiglipVisionModel",ri]],["jina_clip",["JinaCLIPVisionModel",aI]]]),dl=[[Z0,y.EncoderOnly],[X0,y.EncoderDecoder],[ep,y.DecoderOnly],[Ap,y.AutoEncoder],[VE,y.EncoderOnly],[zE,y.EncoderOnly],[yC,y.Seq2Seq],[fC,y.Seq2Seq],[mC,y.DecoderOnly],[gp,y.MultiModality],[$E,y.EncoderOnly],[ZE,y.EncoderOnly],[MC,y.Vision2Seq],[XE,y.ImageTextToText],[Al,y.AudioTextToText],[el,y.EncoderOnly],[Hi,y.EncoderOnly],[tl,y.EncoderOnly],[il,y.EncoderOnly],[Bl,y.EncoderOnly],[ip,y.EncoderOnly],[Ql,y.EncoderOnly],[nl,y.EncoderOnly],[El,y.EncoderOnly],[ll,y.EncoderOnly],[gl,y.EncoderOnly],[Il,y.EncoderOnly],[ol,y.MaskGeneration],[sl,y.EncoderOnly],[Cl,y.EncoderOnly],[WE,y.Seq2Seq],[jE,y.EncoderOnly],[rl,y.EncoderOnly],[al,y.EncoderOnly],[cl,y.EncoderOnly]];for(const[h,D]of dl)for(const[O,QA]of h.values())M.set(O,D),m.set(QA,O),F.set(O,QA);const tp=[["MusicgenForConditionalGeneration",hC,y.Musicgen],["Phi3VForCausalLM",Ci,y.Phi3V],["CLIPTextModelWithProjection",lt,y.EncoderOnly],["SiglipTextModel",ht,y.EncoderOnly],["JinaCLIPTextModel",Bi,y.EncoderOnly],["ClapTextModelWithProjection",AE,y.EncoderOnly],["ClapAudioModelWithProjection",eE,y.EncoderOnly],["DacEncoderModel",PE,y.EncoderOnly],["DacDecoderModel",vE,y.EncoderOnly],["MimiEncoderModel",bE,y.EncoderOnly],["MimiDecoderModel",JE,y.EncoderOnly],["SnacEncoderModel",qE,y.EncoderOnly],["SnacDecoderModel",OE,y.EncoderOnly],["Gemma3nForConditionalGeneration",HI,y.ImageAudioTextToText]];for(const[h,D,O]of tp)M.set(h,O),m.set(D,h),F.set(h,D);const ul=new Map([["modnet",Hi],["birefnet",Hi],["isnet",Hi],["ben",Hi]]);for(const[h,D]of ul.entries())D.set(h,["PreTrainedModel",q]),M.set(h,y.EncoderOnly),m.set(q,h),F.set(h,q);class op extends je{static MODEL_CLASS_MAPPINGS=dl.map(D=>D[0]);static BASE_IF_FAIL=!0}class sp extends je{static MODEL_CLASS_MAPPINGS=[VE]}class Cp extends je{static MODEL_CLASS_MAPPINGS=[zE]}class rp extends je{static MODEL_CLASS_MAPPINGS=[yC]}class ap extends je{static MODEL_CLASS_MAPPINGS=[fC]}class Bp extends je{static MODEL_CLASS_MAPPINGS=[WE]}class Qp extends je{static MODEL_CLASS_MAPPINGS=[jE]}class np extends je{static MODEL_CLASS_MAPPINGS=[mC]}class Ep extends je{static MODEL_CLASS_MAPPINGS=[$E]}class lp extends je{static MODEL_CLASS_MAPPINGS=[ZE]}class cp extends je{static MODEL_CLASS_MAPPINGS=[MC]}class dp extends je{static MODEL_CLASS_MAPPINGS=[el]}class up extends je{static MODEL_CLASS_MAPPINGS=[Hi]}class hp extends je{static MODEL_CLASS_MAPPINGS=[il]}class Dp extends je{static MODEL_CLASS_MAPPINGS=[tl]}class wp extends je{static MODEL_CLASS_MAPPINGS=[gl]}class pp extends je{static MODEL_CLASS_MAPPINGS=[Il]}class fp extends je{static MODEL_CLASS_MAPPINGS=[ol]}class yp extends je{static MODEL_CLASS_MAPPINGS=[sl]}class mp extends je{static MODEL_CLASS_MAPPINGS=[Cl]}class Mp extends je{static MODEL_CLASS_MAPPINGS=[rl]}class Fp extends je{static MODEL_CLASS_MAPPINGS=[al]}class Sp extends je{static MODEL_CLASS_MAPPINGS=[Ip]}class Np extends je{static MODEL_CLASS_MAPPINGS=[Bl]}class _p extends je{static MODEL_CLASS_MAPPINGS=[Ql]}class Rp extends je{static MODEL_CLASS_MAPPINGS=[nl]}class Gp extends je{static MODEL_CLASS_MAPPINGS=[El]}class kp extends je{static MODEL_CLASS_MAPPINGS=[ll]}class Lp extends je{static MODEL_CLASS_MAPPINGS=[cl]}class Kp extends je{static MODEL_CLASS_MAPPINGS=[XE]}class Up extends je{static MODEL_CLASS_MAPPINGS=[Al]}class bp extends wA{constructor({logits:D,past_key_values:O,encoder_outputs:QA,decoder_attentions:pA=null,cross_attentions:mA=null}){super(),this.logits=D,this.past_key_values=O,this.encoder_outputs=QA,this.decoder_attentions=pA,this.cross_attentions=mA}}class Fe extends wA{constructor({logits:D,...O}){super(),this.logits=D;const QA=Object.values(O);QA.length>0&&(this.attentions=QA)}}class hl extends wA{constructor({logits:D,embeddings:O}){super(),this.logits=D,this.embeddings=O}}class bg extends wA{constructor({logits:D}){super(),this.logits=D}}class Pg extends wA{constructor({logits:D}){super(),this.logits=D}}class Zg extends wA{constructor({start_logits:D,end_logits:O}){super(),this.start_logits=D,this.end_logits=O}}class Qi extends wA{constructor({logits:D}){super(),this.logits=D}}class Jp extends wA{constructor({logits:D,past_key_values:O}){super(),this.logits=D,this.past_key_values=O}}class Dl extends wA{constructor({alphas:D}){super(),this.alphas=D}}class wl extends wA{constructor({waveform:D,spectrogram:O}){super(),this.waveform=D,this.spectrogram=O}}}),"./src/models/audio_spectrogram_transformer/feature_extraction_audio_spectrogram_transformer.js":((A,g,e)=>{e.r(g),e.d(g,{ASTFeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js");e("./src/utils/tensor.js");var i=e("./src/utils/audio.js");class t extends I.FeatureExtractor{constructor(o){super(o);const C=this.config.sampling_rate,r=(0,i.mel_filter_bank)(257,this.config.num_mel_bins,20,Math.floor(C/2),C,null,"kaldi",!0);this.mel_filters=r,this.window=(0,i.window_function)(400,"hann",{periodic:!1}),this.mean=this.config.mean,this.std=this.config.std}async _extract_fbank_features(o,C){return(0,i.spectrogram)(o,this.window,400,160,{fft_length:512,power:2,center:!1,preemphasis:.97,mel_filters:this.mel_filters,log_mel:"log",mel_floor:1192092955078125e-22,remove_dc_offset:!0,max_num_frames:C,transpose:!0})}async _call(o){(0,I.validate_audio_inputs)(o,"ASTFeatureExtractor");const C=await this._extract_fbank_features(o,this.config.max_length);if(this.config.do_normalize){const r=this.std*2,Q=C.data;for(let B=0;B{e.r(g),e.d(g,{AutoFeatureExtractor:()=>s});var I=e("./src/utils/constants.js"),i=e("./src/utils/hub.js");e("./src/base/feature_extraction_utils.js");var t=e("./src/models/feature_extractors.js");class s{static async from_pretrained(C,r={}){const Q=await(0,i.getModelJSON)(C,I.FEATURE_EXTRACTOR_NAME,!0,r),B=Q.feature_extractor_type,a=t[B];if(!a)throw new Error(`Unknown feature_extractor_type: '${B}'. Please report this at ${I.GITHUB_ISSUE_URL}.`);return new a(Q)}}}),"./src/models/auto/image_processing_auto.js":((A,g,e)=>{e.r(g),e.d(g,{AutoImageProcessor:()=>o});var I=e("./src/utils/constants.js"),i=e("./src/utils/hub.js"),t=e("./src/base/image_processors_utils.js"),s=e("./src/models/image_processors.js");class o{static async from_pretrained(r,Q={}){const B=await(0,i.getModelJSON)(r,I.IMAGE_PROCESSOR_NAME,!0,Q),a=B.image_processor_type??B.feature_extractor_type;let d=s[a?.replace(/Fast$/,"")];return d||(a!==void 0&&console.warn(`Image processor type '${a}' not found, assuming base ImageProcessor. Please report this at ${I.GITHUB_ISSUE_URL}.`),d=t.ImageProcessor),new d(B)}}}),"./src/models/auto/processing_auto.js":((A,g,e)=>{e.r(g),e.d(g,{AutoProcessor:()=>r});var I=e("./src/utils/constants.js"),i=e("./src/utils/hub.js"),t=e("./src/base/processing_utils.js"),s=e("./src/models/processors.js"),o=e("./src/models/image_processors.js"),C=e("./src/models/feature_extractors.js");class r{static async from_pretrained(B,a={}){const d=await(0,i.getModelJSON)(B,I.IMAGE_PROCESSOR_NAME,!0,a),{image_processor_type:c,feature_extractor_type:p,processor_class:L}=d;if(L&&s[L])return s[L].from_pretrained(B,a);if(!c&&!p)throw new Error("No `image_processor_type` or `feature_extractor_type` found in the config.");const w={};if(c){const _=o[c.replace(/Fast$/,"")];if(!_)throw new Error(`Unknown image_processor_type: '${c}'.`);w.image_processor=new _(d)}if(p){const _=o[p];if(_)w.image_processor=new _(d);else{const y=C[p];if(!y)throw new Error(`Unknown feature_extractor_type: '${p}'.`);w.feature_extractor=new y(d)}}const u={};return new t.Processor(u,w,null)}}}),"./src/models/beit/image_processing_beit.js":((A,g,e)=>{e.r(g),e.d(g,{BeitFeatureExtractor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}}),"./src/models/bit/image_processing_bit.js":((A,g,e)=>{e.r(g),e.d(g,{BitImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}}),"./src/models/chinese_clip/image_processing_chinese_clip.js":((A,g,e)=>{e.r(g),e.d(g,{ChineseCLIPFeatureExtractor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}}),"./src/models/clap/feature_extraction_clap.js":((A,g,e)=>{e.r(g),e.d(g,{ClapFeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js");e("./src/utils/tensor.js");var i=e("./src/utils/audio.js");class t extends I.FeatureExtractor{constructor(o){super(o),this.mel_filters=(0,i.mel_filter_bank)(this.config.nb_frequency_bins,this.config.feature_size,this.config.frequency_min,this.config.frequency_max,this.config.sampling_rate,null,"htk"),this.mel_filters_slaney=(0,i.mel_filter_bank)(this.config.nb_frequency_bins,this.config.feature_size,this.config.frequency_min,this.config.frequency_max,this.config.sampling_rate,"slaney","slaney"),this.window=(0,i.window_function)(this.config.fft_window_size,"hann")}async _get_input_mel(o,C,r,Q){let B;const a=o.length-C;if(a>0)if(r==="rand_trunc"){const d=Math.floor(Math.random()*(a+1));o=o.subarray(d,d+C),B=await this._extract_fbank_features(o,this.mel_filters_slaney,this.config.nb_max_samples)}else throw new Error(`Truncation strategy "${r}" not implemented`);else{if(a<0){let d=new Float64Array(C);if(d.set(o),Q==="repeat")for(let c=o.length;c{e.r(g),e.d(g,{CLIPFeatureExtractor:()=>t,CLIPImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}}),"./src/models/convnext/image_processing_convnext.js":((A,g,e)=>{e.r(g),e.d(g,{ConvNextFeatureExtractor:()=>t,ConvNextImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{constructor(o){super(o),this.crop_pct=this.config.crop_pct??224/256}async resize(o){const C=this.size?.shortest_edge;if(C===void 0)throw new Error("Size dictionary must contain 'shortest_edge' key.");if(C<384){const r=Math.floor(C/this.crop_pct),[Q,B]=this.get_resize_output_image_size(o,{shortest_edge:r});o=await o.resize(Q,B,{resample:this.resample}),o=await o.center_crop(C,C)}else o=await o.resize(C,C,{resample:this.resample});return o}}class t extends i{}}),"./src/models/dac/feature_extraction_dac.js":((A,g,e)=>{e.r(g),e.d(g,{DacFeatureExtractor:()=>i});var I=e("./src/models/encodec/feature_extraction_encodec.js");class i extends I.EncodecFeatureExtractor{}}),"./src/models/deit/image_processing_deit.js":((A,g,e)=>{e.r(g),e.d(g,{DeiTFeatureExtractor:()=>t,DeiTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}}),"./src/models/detr/image_processing_detr.js":((A,g,e)=>{e.r(g),e.d(g,{DetrFeatureExtractor:()=>s,DetrImageProcessor:()=>t});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");class t extends I.ImageProcessor{async _call(C){const r=await super._call(C),Q=[r.pixel_values.dims[0],64,64],B=(0,i.full)(Q,1n);return{...r,pixel_mask:B}}post_process_object_detection(...C){return(0,I.post_process_object_detection)(...C)}post_process_panoptic_segmentation(...C){return(0,I.post_process_panoptic_segmentation)(...C)}post_process_instance_segmentation(...C){return(0,I.post_process_instance_segmentation)(...C)}}class s extends t{}}),"./src/models/dinov3_vit/image_processing_dinov3_vit.js":((A,g,e)=>{e.r(g),e.d(g,{DINOv3ViTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}}),"./src/models/donut/image_processing_donut.js":((A,g,e)=>{e.r(g),e.d(g,{DonutFeatureExtractor:()=>t,DonutImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{pad_image(o,C,r,Q={}){const[B,a,d]=C;let c=this.image_mean;Array.isArray(this.image_mean)||(c=new Array(d).fill(c));let p=this.image_std;Array.isArray(p)||(p=new Array(d).fill(c));const L=c.map((w,u)=>-w/p[u]);return super.pad_image(o,C,r,{center:!0,constant_values:L,...Q})}}class t extends i{}}),"./src/models/dpt/image_processing_dpt.js":((A,g,e)=>{e.r(g),e.d(g,{DPTFeatureExtractor:()=>t,DPTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}}),"./src/models/efficientnet/image_processing_efficientnet.js":((A,g,e)=>{e.r(g),e.d(g,{EfficientNetImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{constructor(s){super(s),this.include_top=this.config.include_top??!0,this.include_top&&(this.image_std=this.image_std.map(o=>o*o))}}}),"./src/models/encodec/feature_extraction_encodec.js":((A,g,e)=>{e.r(g),e.d(g,{EncodecFeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js");class t extends I.FeatureExtractor{async _call(o){(0,I.validate_audio_inputs)(o,"EncodecFeatureExtractor"),o instanceof Float64Array&&(o=new Float32Array(o));const C=this.config.feature_size;if(o.length%C!==0)throw new Error(`The length of the audio data must be a multiple of the number of channels (${C}).`);const r=[1,C,o.length/C];return{input_values:new i.Tensor("float32",o,r)}}}}),"./src/models/feature_extractors.js":((A,g,e)=>{e.r(g),e.d(g,{ASTFeatureExtractor:()=>I.ASTFeatureExtractor,ClapFeatureExtractor:()=>t.ClapFeatureExtractor,DacFeatureExtractor:()=>s.DacFeatureExtractor,EncodecFeatureExtractor:()=>i.EncodecFeatureExtractor,Gemma3nAudioFeatureExtractor:()=>o.Gemma3nAudioFeatureExtractor,ImageFeatureExtractor:()=>L.ImageProcessor,MoonshineFeatureExtractor:()=>C.MoonshineFeatureExtractor,PyAnnoteFeatureExtractor:()=>r.PyAnnoteFeatureExtractor,SeamlessM4TFeatureExtractor:()=>Q.SeamlessM4TFeatureExtractor,SnacFeatureExtractor:()=>B.SnacFeatureExtractor,SpeechT5FeatureExtractor:()=>a.SpeechT5FeatureExtractor,Wav2Vec2FeatureExtractor:()=>d.Wav2Vec2FeatureExtractor,WeSpeakerFeatureExtractor:()=>c.WeSpeakerFeatureExtractor,WhisperFeatureExtractor:()=>p.WhisperFeatureExtractor});var I=e("./src/models/audio_spectrogram_transformer/feature_extraction_audio_spectrogram_transformer.js"),i=e("./src/models/encodec/feature_extraction_encodec.js"),t=e("./src/models/clap/feature_extraction_clap.js"),s=e("./src/models/dac/feature_extraction_dac.js"),o=e("./src/models/gemma3n/feature_extraction_gemma3n.js"),C=e("./src/models/moonshine/feature_extraction_moonshine.js"),r=e("./src/models/pyannote/feature_extraction_pyannote.js"),Q=e("./src/models/seamless_m4t/feature_extraction_seamless_m4t.js"),B=e("./src/models/snac/feature_extraction_snac.js"),a=e("./src/models/speecht5/feature_extraction_speecht5.js"),d=e("./src/models/wav2vec2/feature_extraction_wav2vec2.js"),c=e("./src/models/wespeaker/feature_extraction_wespeaker.js"),p=e("./src/models/whisper/feature_extraction_whisper.js"),L=e("./src/base/image_processors_utils.js")}),"./src/models/florence2/processing_florence2.js":((A,g,e)=>{e.r(g),e.d(g,{Florence2Processor:()=>s});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");class s extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;constructor(C,r,Q){super(C,r,Q);const{tasks_answer_post_processing_type:B,task_prompts_without_inputs:a,task_prompts_with_input:d}=this.image_processor.config;this.tasks_answer_post_processing_type=new Map(Object.entries(B??{})),this.task_prompts_without_inputs=new Map(Object.entries(a??{})),this.task_prompts_with_input=new Map(Object.entries(d??{})),this.regexes={quad_boxes:/(.+?)/gm,bboxes:/([^<]+)?/gm},this.size_per_bin=1e3}construct_prompts(C){typeof C=="string"&&(C=[C]);const r=[];for(const Q of C)if(this.task_prompts_without_inputs.has(Q))r.push(this.task_prompts_without_inputs.get(Q));else{for(const[B,a]of this.task_prompts_with_input)if(Q.includes(B)){r.push(a.replaceAll("{input}",Q).replaceAll(B,""));break}r.length!==C.length&&r.push(Q)}return r}post_process_generation(C,r,Q){const B=this.tasks_answer_post_processing_type.get(r)??"pure_text";C=C.replaceAll("","").replaceAll("","");let a;switch(B){case"pure_text":a=C;break;case"description_with_bboxes":case"bboxes":case"phrase_grounding":case"ocr":const d=B==="ocr"?"quad_boxes":"bboxes",c=C.matchAll(this.regexes[d]),p=[],L=[];for(const[w,u,..._]of c)p.push(u?u.trim():p.at(-1)??""),L.push(_.map((y,M)=>(Number(y)+.5)/this.size_per_bin*Q[M%2]));a={labels:p,[d]:L};break;default:throw new Error(`Task "${r}" (of type "${B}") not yet implemented.`)}return{[r]:a}}async _call(C,r=null,Q={}){if(!C&&!r)throw new Error("Either text or images must be provided");const B=await this.image_processor(C,Q),a=r?this.tokenizer(this.construct_prompts(r),Q):{};return{...B,...a}}}}),"./src/models/gemma3n/feature_extraction_gemma3n.js":((A,g,e)=>{e.r(g),e.d(g,{Gemma3nAudioFeatureExtractor:()=>s});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js"),t=e("./src/utils/audio.js");class s extends I.FeatureExtractor{constructor(C){super(C);const{fft_length:r,feature_size:Q,min_frequency:B,max_frequency:a,sampling_rate:d,frame_length:c}=this.config,p=(0,t.mel_filter_bank)(Math.floor(1+r/2),Q,B,a,d,null,"htk",!1);this.mel_filters=p,this.window=(0,t.window_function)(c,"hann")}async _extract_fbank_features(C,r){return(0,t.spectrogram)(C,this.window,this.config.frame_length,this.config.hop_length,{fft_length:this.config.fft_length,center:!1,onesided:!0,preemphasis:this.config.preemphasis,preemphasis_htk_flavor:this.config.preemphasis_htk_flavor,mel_filters:this.mel_filters,log_mel:"log",mel_floor:this.config.mel_floor,remove_dc_offset:!1,transpose:!0})}async _call(C,{max_length:r=48e4,truncation:Q=!0,padding:B=!0,pad_to_multiple_of:a=128}={}){if((0,I.validate_audio_inputs)(C,"Gemma3nAudioFeatureExtractor"),Q&&C.length>r&&(C=C.slice(0,r)),B&&C.length%a!==0){const p=a-C.length%a,L=new Float64Array(C.length+p);L.set(C),this.config.padding_value!==0&&L.fill(this.config.padding_value,C.length),C=L}const d=await this._extract_fbank_features(C,this.config.max_length),c=(0,i.full)([1,d.dims[0]],!0);return{input_features:d.unsqueeze_(0),input_features_mask:c}}}}),"./src/models/gemma3n/processing_gemma3n.js":((A,g,e)=>{e.r(g),e.d(g,{Gemma3nProcessor:()=>o});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/models/auto/feature_extraction_auto.js"),s=e("./src/tokenizers.js");e("./src/utils/image.js"),e("./src/utils/audio.js");class o extends I.Processor{static image_processor_class=i.AutoImageProcessor;static feature_extractor_class=t.AutoFeatureExtractor;static tokenizer_class=s.AutoTokenizer;static uses_processor_config=!0;static uses_chat_template_file=!0;constructor(r,Q,B){super(r,Q,B),this.audio_seq_length=this.config.audio_seq_length,this.image_seq_length=this.config.image_seq_length;const{audio_token_id:a,boa_token:d,audio_token:c,eoa_token:p,image_token_id:L,boi_token:w,image_token:u,eoi_token:_}=this.tokenizer.config;this.audio_token_id=a,this.boa_token=d,this.audio_token=c;const y=c.repeat(this.audio_seq_length);this.full_audio_sequence=` ${d}${y}${p} `,this.image_token_id=L,this.boi_token=w,this.image_token=u;const M=u.repeat(this.image_seq_length);this.full_image_sequence=` ${w}${M}${_} `}async _call(r,Q=null,B=null,a={}){typeof r=="string"&&(r=[r]);let d;B&&(d=await this.feature_extractor(B,a),r=r.map(L=>L.replaceAll(this.audio_token,this.full_audio_sequence)));let c;return Q&&(c=await this.image_processor(Q,a),r=r.map(L=>L.replaceAll(this.image_token,this.full_image_sequence))),{...this.tokenizer(r,a),...c,...d}}}}),"./src/models/glpn/image_processing_glpn.js":((A,g,e)=>{e.r(g),e.d(g,{GLPNFeatureExtractor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}}),"./src/models/grounding_dino/image_processing_grounding_dino.js":((A,g,e)=>{e.r(g),e.d(g,{GroundingDinoImageProcessor:()=>t});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");class t extends I.ImageProcessor{async _call(o){const C=await super._call(o),r=C.pixel_values.dims,Q=(0,i.ones)([r[0],r[2],r[3]]);return{...C,pixel_mask:Q}}}}),"./src/models/grounding_dino/processing_grounding_dino.js":((A,g,e)=>{e.r(g),e.d(g,{GroundingDinoProcessor:()=>C});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js"),s=e("./src/base/image_processors_utils.js");function o(r,Q){const a=r.dims.at(-1)-1,d=r.tolist();d.fill(!1,0,1),d.fill(!1,a);const c=Q.tolist();return d.map((p,L)=>p?L:null).filter(p=>p!==null).map(p=>c[p])}class C extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;async _call(Q,B,a={}){const d=Q?await this.image_processor(Q,a):{};return{...B?this.tokenizer(B,a):{},...d}}post_process_grounded_object_detection(Q,B,{box_threshold:a=.25,text_threshold:d=.25,target_sizes:c=null}={}){const{logits:p,pred_boxes:L}=Q,w=p.dims[0];if(c!==null&&c.length!==w)throw Error("Make sure that you pass in as many target sizes as the batch dimension of the logits");const u=p.dims.at(1),_=p.sigmoid(),y=_.max(-1).tolist(),M=L.tolist().map(m=>m.map(G=>(0,s.center_to_corners_format)(G))),F=[];for(let m=0;mP.map((tA,AA)=>tA*G[(AA+1)%2])));const T=y[m],J=[],Z=[],z=[];for(let P=0;P{e.r(g),e.d(g,{Idefics3ImageProcessor:()=>t});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");class t extends I.ImageProcessor{constructor(o){super(o),this.do_image_splitting=o.do_image_splitting??!0,this.max_image_size=o.max_image_size}get_resize_for_vision_encoder(o,C){let[r,Q]=o.dims.slice(-2);const B=Q/r;return Q>=r?(Q=Math.ceil(Q/C)*C,r=Math.floor(Q/B),r=Math.ceil(r/C)*C):(r=Math.ceil(r/C)*C,Q=Math.floor(r*B),Q=Math.ceil(Q/C)*C),{height:r,width:Q}}async _call(o,{do_image_splitting:C=null,return_row_col_info:r=!1}={}){let Q;if(!Array.isArray(o))Q=[[o]];else{if(o.length===0||!o[0])throw new Error("No images provided.");Array.isArray(o[0])?Q=o:Q=[o]}let B=[],a=[],d=[];const c=[],p=[];for(const m of Q){let G=await Promise.all(m.map(Z=>this.preprocess(Z)));c.push(...G.map(Z=>Z.original_size)),p.push(...G.map(Z=>Z.reshaped_input_size)),G.forEach(Z=>Z.pixel_values.unsqueeze_(0));const{longest_edge:T}=this.max_image_size;let J;if(C??this.do_image_splitting){let Z=new Array(G.length),z=new Array(G.length);J=await Promise.all(G.map(async(P,tA)=>{const AA=this.get_resize_for_vision_encoder(P.pixel_values,T),iA=await(0,i.interpolate_4d)(P.pixel_values,{size:[AA.height,AA.width]}),{frames:rA,num_splits_h:CA,num_splits_w:cA}=await this.split_image(iA,this.max_image_size);return Z[tA]=CA,z[tA]=cA,(0,i.cat)(rA,0)})),a.push(Z),d.push(z)}else{const Z=[T,T];J=await Promise.all(G.map(z=>(0,i.interpolate_4d)(z.pixel_values,{size:Z}))),a.push(new Array(G.length).fill(0)),d.push(new Array(G.length).fill(0))}B.push((0,i.cat)(J,0))}const L=B.length,[w,u,_,y]=B[0].dims;let M,F;if(L===1)M=B[0].unsqueeze_(0),F=(0,i.full)([L,w,_,y],!0);else{const m=Math.max(...B.map(J=>J.dims.at(0)));F=(0,i.full)([L,m,_,y],!0);const G=F.data,T=m*_*y;for(let J=0;Jr||d>Q){c=Math.ceil(a/r),p=Math.ceil(d/Q);const L=Math.ceil(a/c),w=Math.ceil(d/p);for(let y=0;y{e.r(g),e.d(g,{Idefics3Processor:()=>Q});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");e("./src/utils/image.js");var s=e("./src/utils/core.js");function o(B,a,d,c,p,L){let w="";for(let u=0;u`+p.repeat(B);w+=` `}return w+=` ${c}${L}`+p.repeat(B)+`${c}`,w}function C(B,a,d,c){return`${a}${c}`+d.repeat(B)+`${a}`}function r(B,a,d,c,p,L){return B===0&&a===0?C(d,c,p,L):o(d,B,a,c,p,L)}class Q extends I.Processor{static image_processor_class=i.AutoImageProcessor;static tokenizer_class=t.AutoTokenizer;static uses_processor_config=!0;fake_image_token="";image_token="";global_img_token="";async _call(a,d=null,c={}){c.return_row_col_info??=!0;let p;d&&(p=await this.image_processor(d,c)),Array.isArray(a)||(a=[a]);const L=p.rows??[new Array(a.length).fill(0)],w=p.cols??[new Array(a.length).fill(0)],u=this.config.image_seq_len,_=[],y=[];for(let F=0;Fr(P,T[tA],u,this.fake_image_token,this.image_token,this.global_img_token)),Z=m.split(this.image_token);if(Z.length===0)throw new Error("The image token should be present in the text.");let z=Z[0];for(let P=0;P{e.r(g),e.d(g,{BeitFeatureExtractor:()=>I.BeitFeatureExtractor,BitImageProcessor:()=>i.BitImageProcessor,CLIPFeatureExtractor:()=>s.CLIPFeatureExtractor,CLIPImageProcessor:()=>s.CLIPImageProcessor,ChineseCLIPFeatureExtractor:()=>t.ChineseCLIPFeatureExtractor,ConvNextFeatureExtractor:()=>o.ConvNextFeatureExtractor,ConvNextImageProcessor:()=>o.ConvNextImageProcessor,DINOv3ViTImageProcessor:()=>Q.DINOv3ViTImageProcessor,DPTFeatureExtractor:()=>a.DPTFeatureExtractor,DPTImageProcessor:()=>a.DPTImageProcessor,DeiTFeatureExtractor:()=>C.DeiTFeatureExtractor,DeiTImageProcessor:()=>C.DeiTImageProcessor,DetrFeatureExtractor:()=>r.DetrFeatureExtractor,DetrImageProcessor:()=>r.DetrImageProcessor,DonutFeatureExtractor:()=>B.DonutFeatureExtractor,DonutImageProcessor:()=>B.DonutImageProcessor,EfficientNetImageProcessor:()=>d.EfficientNetImageProcessor,GLPNFeatureExtractor:()=>c.GLPNFeatureExtractor,GroundingDinoImageProcessor:()=>p.GroundingDinoImageProcessor,Idefics3ImageProcessor:()=>L.Idefics3ImageProcessor,JinaCLIPImageProcessor:()=>u.JinaCLIPImageProcessor,LlavaOnevisionImageProcessor:()=>_.LlavaOnevisionImageProcessor,Mask2FormerImageProcessor:()=>y.Mask2FormerImageProcessor,MaskFormerFeatureExtractor:()=>M.MaskFormerFeatureExtractor,MaskFormerImageProcessor:()=>M.MaskFormerImageProcessor,MobileNetV1FeatureExtractor:()=>F.MobileNetV1FeatureExtractor,MobileNetV1ImageProcessor:()=>F.MobileNetV1ImageProcessor,MobileNetV2FeatureExtractor:()=>m.MobileNetV2FeatureExtractor,MobileNetV2ImageProcessor:()=>m.MobileNetV2ImageProcessor,MobileNetV3FeatureExtractor:()=>G.MobileNetV3FeatureExtractor,MobileNetV3ImageProcessor:()=>G.MobileNetV3ImageProcessor,MobileNetV4FeatureExtractor:()=>T.MobileNetV4FeatureExtractor,MobileNetV4ImageProcessor:()=>T.MobileNetV4ImageProcessor,MobileViTFeatureExtractor:()=>J.MobileViTFeatureExtractor,MobileViTImageProcessor:()=>J.MobileViTImageProcessor,NougatImageProcessor:()=>Z.NougatImageProcessor,OwlViTFeatureExtractor:()=>P.OwlViTFeatureExtractor,OwlViTImageProcessor:()=>P.OwlViTImageProcessor,Owlv2ImageProcessor:()=>z.Owlv2ImageProcessor,Phi3VImageProcessor:()=>tA.Phi3VImageProcessor,PvtImageProcessor:()=>AA.PvtImageProcessor,Qwen2VLImageProcessor:()=>iA.Qwen2VLImageProcessor,RTDetrImageProcessor:()=>rA.RTDetrImageProcessor,SamImageProcessor:()=>CA.SamImageProcessor,SegformerFeatureExtractor:()=>cA.SegformerFeatureExtractor,SegformerImageProcessor:()=>cA.SegformerImageProcessor,SiglipImageProcessor:()=>uA.SiglipImageProcessor,SmolVLMImageProcessor:()=>v.SmolVLMImageProcessor,Swin2SRImageProcessor:()=>x.Swin2SRImageProcessor,VLMImageProcessor:()=>w.VLMImageProcessor,ViTFeatureExtractor:()=>$.ViTFeatureExtractor,ViTImageProcessor:()=>$.ViTImageProcessor,VitMatteImageProcessor:()=>W.VitMatteImageProcessor,VitPoseImageProcessor:()=>nA.VitPoseImageProcessor,YolosFeatureExtractor:()=>xA.YolosFeatureExtractor,YolosImageProcessor:()=>xA.YolosImageProcessor});var I=e("./src/models/beit/image_processing_beit.js"),i=e("./src/models/bit/image_processing_bit.js"),t=e("./src/models/chinese_clip/image_processing_chinese_clip.js"),s=e("./src/models/clip/image_processing_clip.js"),o=e("./src/models/convnext/image_processing_convnext.js"),C=e("./src/models/deit/image_processing_deit.js"),r=e("./src/models/detr/image_processing_detr.js"),Q=e("./src/models/dinov3_vit/image_processing_dinov3_vit.js"),B=e("./src/models/donut/image_processing_donut.js"),a=e("./src/models/dpt/image_processing_dpt.js"),d=e("./src/models/efficientnet/image_processing_efficientnet.js"),c=e("./src/models/glpn/image_processing_glpn.js"),p=e("./src/models/grounding_dino/image_processing_grounding_dino.js"),L=e("./src/models/idefics3/image_processing_idefics3.js"),w=e("./src/models/janus/image_processing_janus.js"),u=e("./src/models/jina_clip/image_processing_jina_clip.js"),_=e("./src/models/llava_onevision/image_processing_llava_onevision.js"),y=e("./src/models/mask2former/image_processing_mask2former.js"),M=e("./src/models/maskformer/image_processing_maskformer.js"),F=e("./src/models/mobilenet_v1/image_processing_mobilenet_v1.js"),m=e("./src/models/mobilenet_v2/image_processing_mobilenet_v2.js"),G=e("./src/models/mobilenet_v3/image_processing_mobilenet_v3.js"),T=e("./src/models/mobilenet_v4/image_processing_mobilenet_v4.js"),J=e("./src/models/mobilevit/image_processing_mobilevit.js"),Z=e("./src/models/nougat/image_processing_nougat.js"),z=e("./src/models/owlv2/image_processing_owlv2.js"),P=e("./src/models/owlvit/image_processing_owlvit.js"),tA=e("./src/models/phi3_v/image_processing_phi3_v.js"),AA=e("./src/models/pvt/image_processing_pvt.js"),iA=e("./src/models/qwen2_vl/image_processing_qwen2_vl.js"),rA=e("./src/models/rt_detr/image_processing_rt_detr.js"),CA=e("./src/models/sam/image_processing_sam.js"),cA=e("./src/models/segformer/image_processing_segformer.js"),uA=e("./src/models/siglip/image_processing_siglip.js"),v=e("./src/models/smolvlm/image_processing_smolvlm.js"),x=e("./src/models/swin2sr/image_processing_swin2sr.js"),$=e("./src/models/vit/image_processing_vit.js"),W=e("./src/models/vitmatte/image_processing_vitmatte.js"),nA=e("./src/models/vitpose/image_processing_vitpose.js"),xA=e("./src/models/yolos/image_processing_yolos.js")}),"./src/models/janus/image_processing_janus.js":((A,g,e)=>{e.r(g),e.d(g,{VLMImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{constructor(s){super({do_pad:!0,pad_size:{width:s.image_size,height:s.image_size},...s}),this.constant_values=this.config.background_color.map(o=>o*this.rescale_factor)}pad_image(s,o,C,r){return super.pad_image(s,o,C,{constant_values:this.constant_values,center:!0,...r})}}}),"./src/models/janus/processing_janus.js":((A,g,e)=>{e.r(g),e.d(g,{VLChatProcessor:()=>r});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js"),s=e("./src/utils/core.js"),o=e("./src/utils/tensor.js"),C=e("./src/utils/image.js");class r extends I.Processor{static image_processor_class=i.AutoImageProcessor;static tokenizer_class=t.AutoTokenizer;static uses_processor_config=!0;constructor(B,a,d){super(B,a,d),this.image_tag=this.config.image_tag,this.image_start_tag=this.config.image_start_tag,this.image_end_tag=this.config.image_end_tag,this.num_image_tokens=this.config.num_image_tokens}async _call(B,{images:a=null,chat_template:d="default"}={}){a?Array.isArray(a)||(a=[a]):a=await Promise.all(B.filter(J=>J.images).flatMap(J=>J.images).map(J=>C.RawImage.read(J)));const c=this.tokenizer,p=c.apply_chat_template(B,{tokenize:!1,add_generation_prompt:!0,chat_template:d}),L=J=>c.encode(J,{add_special_tokens:!1}),w=p.split(this.image_tag),u=w.length-1;if(a.length!==u)throw new Error(`Number of images provided (${a.length}) does not match number of "${this.image_tag}" image tags (${u})`);const[_,y,M]=c.model.convert_tokens_to_ids([this.image_tag,this.image_start_tag,this.image_end_tag]);let F=L(w[0]),m=new Array(F.length).fill(!1);for(let J=1;J0){const J=await this.image_processor(a);return J.pixel_values.unsqueeze_(0),{...T,...J}}return T}}}),"./src/models/jina_clip/image_processing_jina_clip.js":((A,g,e)=>{e.r(g),e.d(g,{JinaCLIPImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{constructor(s){const{resize_mode:o,fill_color:C,interpolation:r,size:Q,...B}=s,a=o==="squash"?{width:Q,height:Q}:o==="shortest"?{shortest_edge:Q}:{longest_edge:Q},d=r==="bicubic"?3:2;super({...B,size:a,resample:d,do_center_crop:!0,crop_size:Q,do_normalize:!0})}}}),"./src/models/jina_clip/processing_jina_clip.js":((A,g,e)=>{e.r(g),e.d(g,{JinaCLIPProcessor:()=>s});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");class s extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;async _call(C=null,r=null,Q={}){if(!C&&!r)throw new Error("Either text or images must be provided");const B=C?this.tokenizer(C,Q):{},a=r?await this.image_processor(r,Q):{};return{...B,...a}}}}),"./src/models/llava/processing_llava.js":((A,g,e)=>{e.r(g),e.d(g,{LlavaProcessor:()=>s});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");class s extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;static uses_processor_config=!0;async _call(C,r=null,Q={}){const B=await this.image_processor(C,Q);if(r){const[d,c]=B.pixel_values.dims.slice(-2),{image_token:p,patch_size:L,num_additional_image_tokens:w}=this.config,u=Math.floor(d/L)*Math.floor(c/L)+w;r=structuredClone(r),Array.isArray(r)||(r=[r]);for(let _=0;_{e.r(g),e.d(g,{LlavaOnevisionImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}}),"./src/models/mask2former/image_processing_mask2former.js":((A,g,e)=>{e.r(g),e.d(g,{Mask2FormerImageProcessor:()=>i});var I=e("./src/models/maskformer/image_processing_maskformer.js");class i extends I.MaskFormerImageProcessor{}}),"./src/models/maskformer/image_processing_maskformer.js":((A,g,e)=>{e.r(g),e.d(g,{MaskFormerFeatureExtractor:()=>t,MaskFormerImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_panoptic_segmentation(...o){return(0,I.post_process_panoptic_segmentation)(...o)}post_process_instance_segmentation(...o){return(0,I.post_process_instance_segmentation)(...o)}}class t extends i{}}),"./src/models/mgp_str/processing_mgp_str.js":((A,g,e)=>{e.r(g),e.d(g,{MgpstrProcessor:()=>C});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js"),s=e("./src/utils/maths.js");const o={char:["char_decode",1],bpe:["bpe_decode",2],wp:["wp_decode",102]};class C extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;get char_tokenizer(){return this.components.char_tokenizer}get bpe_tokenizer(){return this.components.bpe_tokenizer}get wp_tokenizer(){return this.components.wp_tokenizer}_decode_helper(Q,B){if(!o.hasOwnProperty(B))throw new Error(`Format ${B} is not supported.`);const[a,d]=o[B],c=this[a].bind(this),[p,L]=Q.dims,w=[],u=[],_=Q.tolist();for(let M=0;M0?G.reduce((J,Z)=>J*Z,1):0;u.push(m),w.push(T)}return[c(u),w]}char_decode(Q){return this.char_tokenizer.batch_decode(Q).map(B=>B.replaceAll(" ",""))}bpe_decode(Q){return this.bpe_tokenizer.batch_decode(Q)}wp_decode(Q){return this.wp_tokenizer.batch_decode(Q).map(B=>B.replaceAll(" ",""))}batch_decode([Q,B,a]){const[d,c]=this._decode_helper(Q,"char"),[p,L]=this._decode_helper(B,"bpe"),[w,u]=this._decode_helper(a,"wp"),_=[],y=[];for(let M=0;M{e.r(g),e.d(g,{MobileNetV1FeatureExtractor:()=>t,MobileNetV1ImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}}),"./src/models/mobilenet_v2/image_processing_mobilenet_v2.js":((A,g,e)=>{e.r(g),e.d(g,{MobileNetV2FeatureExtractor:()=>t,MobileNetV2ImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}}),"./src/models/mobilenet_v3/image_processing_mobilenet_v3.js":((A,g,e)=>{e.r(g),e.d(g,{MobileNetV3FeatureExtractor:()=>t,MobileNetV3ImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}}),"./src/models/mobilenet_v4/image_processing_mobilenet_v4.js":((A,g,e)=>{e.r(g),e.d(g,{MobileNetV4FeatureExtractor:()=>t,MobileNetV4ImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}}),"./src/models/mobilevit/image_processing_mobilevit.js":((A,g,e)=>{e.r(g),e.d(g,{MobileViTFeatureExtractor:()=>t,MobileViTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}}),"./src/models/moonshine/feature_extraction_moonshine.js":((A,g,e)=>{e.r(g),e.d(g,{MoonshineFeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js");class t extends I.FeatureExtractor{async _call(o){(0,I.validate_audio_inputs)(o,"MoonshineFeatureExtractor"),o instanceof Float64Array&&(o=new Float32Array(o));const C=[1,o.length];return{input_values:new i.Tensor("float32",o,C)}}}}),"./src/models/moonshine/processing_moonshine.js":((A,g,e)=>{e.r(g),e.d(g,{MoonshineProcessor:()=>s});var I=e("./src/models/auto/feature_extraction_auto.js"),i=e("./src/tokenizers.js"),t=e("./src/base/processing_utils.js");class s extends t.Processor{static tokenizer_class=i.AutoTokenizer;static feature_extractor_class=I.AutoFeatureExtractor;async _call(C){return await this.feature_extractor(C)}}}),"./src/models/nougat/image_processing_nougat.js":((A,g,e)=>{e.r(g),e.d(g,{NougatImageProcessor:()=>i});var I=e("./src/models/donut/image_processing_donut.js");class i extends I.DonutImageProcessor{}}),"./src/models/owlv2/image_processing_owlv2.js":((A,g,e)=>{e.r(g),e.d(g,{Owlv2ImageProcessor:()=>i});var I=e("./src/models/owlvit/image_processing_owlvit.js");class i extends I.OwlViTImageProcessor{}}),"./src/models/owlvit/image_processing_owlvit.js":((A,g,e)=>{e.r(g),e.d(g,{OwlViTFeatureExtractor:()=>t,OwlViTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_object_detection(...o){return(0,I.post_process_object_detection)(...o)}}class t extends i{}}),"./src/models/owlvit/processing_owlvit.js":((A,g,e)=>{e.r(g),e.d(g,{OwlViTProcessor:()=>s});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");class s extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor}}),"./src/models/paligemma/processing_paligemma.js":((A,g,e)=>{e.r(g),e.d(g,{PaliGemmaProcessor:()=>C});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");const s="";function o(r,Q,B,a,d){return`${a.repeat(B*d)}${Q}${r} `}class C extends I.Processor{static tokenizer_class=t.AutoTokenizer;static image_processor_class=i.AutoImageProcessor;static uses_processor_config=!1;async _call(Q,B=null,a={}){B||(console.warn("You are using PaliGemma without a text prefix. It will perform as a picture-captioning model."),B=""),Array.isArray(Q)||(Q=[Q]),Array.isArray(B)||(B=[B]);const d=this.tokenizer.bos_token,c=this.image_processor.config.image_seq_length;let p;B.some(u=>u.includes(s))?p=B.map(u=>{const _=u.replaceAll(s,s.repeat(c)),y=_.lastIndexOf(s),M=y===-1?0:y+s.length;return _.slice(0,M)+d+_.slice(M)+` `}):(console.warn("You are passing both `text` and `images` to `PaliGemmaProcessor`. The processor expects special image tokens in the text, as many tokens as there are images per each text. It is recommended to add `` tokens in the very beginning of your text. For this call, we will infer how many images each text has and add special tokens."),p=B.map(u=>o(u,d,c,s,Q.length)));const L=this.tokenizer(p,a);return{...await this.image_processor(Q,a),...L}}}}),"./src/models/phi3_v/image_processing_phi3_v.js":((A,g,e)=>{e.r(g),e.d(g,{Phi3VImageProcessor:()=>Q});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");const t=336,s=[2,3],{ceil:o,floor:C,sqrt:r}=Math;class Q extends I.ImageProcessor{constructor(a){super({...a,do_normalize:!0,do_pad:!0,pad_size:"custom",do_convert_rgb:!0,do_resize:!0}),this._num_crops=a.num_crops}calc_num_image_tokens_from_image_size(a,d){const{num_img_tokens:c}=this.config;return C((C(d/t)*C(a/t)+1)*c+1+(C(d/t)+1)*r(c))}get_resize_output_image_size(a,d){const c=this._num_crops,[p,L]=a.size;let w=p/L,u=1;for(;u*Math.ceil(u/w)<=c;)u+=1;u-=1;const _=Math.floor(u*336),y=Math.floor(_/w);return[_,y]}pad_image(a,d,c,p={}){const[L,w]=d,u=t*o(L/t),_=t*o(w/t),y=[1,1,1].map((M,F)=>(M-this.image_mean[F])/this.image_std[F]);return super.pad_image(a,d,{width:_,height:u},{center:!0,constant_values:y,...p})}async _call(a,{num_crops:d=null}={}){if(this._num_crops=d??=this.config.num_crops,d<4||r(d)%1!==0)throw new Error("num_crops must be a square number >= 4");Array.isArray(a)||(a=[a]);const c=a.length,p=await Promise.all(a.map(m=>this.preprocess(m))),L=p.map(m=>m.original_size),w=p.map(m=>m.reshaped_input_size),u=[];for(const{pixel_values:m}of p){m.unsqueeze_(0);const[G,T]=m.dims.slice(-2),J=await(0,i.interpolate_4d)(m,{size:[t,t],mode:"bicubic"});if(d>0){const Z=[],z=r(d),P=C(T/z),tA=C(G/z);for(let iA=0;iAm.map(G=>t*o(G/t))),M=new i.Tensor("int64",y.flat(),[c,2]),F=y.map(([m,G])=>this.calc_num_image_tokens_from_image_size(G,m));return{pixel_values:_,original_sizes:L,reshaped_input_sizes:w,image_sizes:M,num_img_tokens:F}}}}),"./src/models/phi3_v/processing_phi3_v.js":((A,g,e)=>{e.r(g),e.d(g,{Phi3VProcessor:()=>C});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");e("./src/utils/image.js");const s="<|image|>",o=/<\|image_\d+\|>/g;class C extends I.Processor{static image_processor_class=i.AutoImageProcessor;static tokenizer_class=t.AutoTokenizer;async _call(Q,B=null,{padding:a=!0,truncation:d=!0,num_crops:c=null}={}){Array.isArray(Q)||(Q=[Q]);let p,L;if(B){L=await this.image_processor(B,{num_crops:c});const{num_img_tokens:w}=L,u=Q.map((y,M)=>y.split(o).join(s.repeat(w[M])));p=this.tokenizer(u,{padding:a,truncation:d});const _=this.tokenizer.model.convert_tokens_to_ids([s])[0];p.input_ids.map_(y=>y==_?-y:y)}else p=this.tokenizer(Q);return{...p,...L}}}}),"./src/models/processors.js":((A,g,e)=>{e.r(g),e.d(g,{Florence2Processor:()=>I.Florence2Processor,Gemma3nProcessor:()=>i.Gemma3nProcessor,GroundingDinoProcessor:()=>t.GroundingDinoProcessor,Idefics3Processor:()=>s.Idefics3Processor,JinaCLIPProcessor:()=>C.JinaCLIPProcessor,LlavaProcessor:()=>r.LlavaProcessor,MgpstrProcessor:()=>Q.MgpstrProcessor,MoonshineProcessor:()=>B.MoonshineProcessor,OwlViTProcessor:()=>a.OwlViTProcessor,PaliGemmaProcessor:()=>c.PaliGemmaProcessor,Phi3VProcessor:()=>d.Phi3VProcessor,PyAnnoteProcessor:()=>p.PyAnnoteProcessor,Qwen2VLProcessor:()=>L.Qwen2VLProcessor,SamProcessor:()=>w.SamProcessor,SmolVLMProcessor:()=>u.SmolVLMProcessor,SpeechT5Processor:()=>_.SpeechT5Processor,UltravoxProcessor:()=>y.UltravoxProcessor,VLChatProcessor:()=>o.VLChatProcessor,VoxtralProcessor:()=>M.VoxtralProcessor,Wav2Vec2Processor:()=>F.Wav2Vec2Processor,Wav2Vec2ProcessorWithLM:()=>m.Wav2Vec2ProcessorWithLM,WhisperProcessor:()=>G.WhisperProcessor});var I=e("./src/models/florence2/processing_florence2.js"),i=e("./src/models/gemma3n/processing_gemma3n.js"),t=e("./src/models/grounding_dino/processing_grounding_dino.js"),s=e("./src/models/idefics3/processing_idefics3.js"),o=e("./src/models/janus/processing_janus.js"),C=e("./src/models/jina_clip/processing_jina_clip.js"),r=e("./src/models/llava/processing_llava.js"),Q=e("./src/models/mgp_str/processing_mgp_str.js"),B=e("./src/models/moonshine/processing_moonshine.js"),a=e("./src/models/owlvit/processing_owlvit.js"),d=e("./src/models/phi3_v/processing_phi3_v.js"),c=e("./src/models/paligemma/processing_paligemma.js"),p=e("./src/models/pyannote/processing_pyannote.js"),L=e("./src/models/qwen2_vl/processing_qwen2_vl.js"),w=e("./src/models/sam/processing_sam.js"),u=e("./src/models/smolvlm/processing_smolvlm.js"),_=e("./src/models/speecht5/processing_speecht5.js"),y=e("./src/models/ultravox/processing_ultravox.js"),M=e("./src/models/voxtral/processing_voxtral.js"),F=e("./src/models/wav2vec2/processing_wav2vec2.js"),m=e("./src/models/wav2vec2_with_lm/processing_wav2vec2_with_lm.js"),G=e("./src/models/whisper/processing_whisper.js")}),"./src/models/pvt/image_processing_pvt.js":((A,g,e)=>{e.r(g),e.d(g,{PvtImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}}),"./src/models/pyannote/feature_extraction_pyannote.js":((A,g,e)=>{e.r(g),e.d(g,{PyAnnoteFeatureExtractor:()=>s});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js"),t=e("./src/utils/maths.js");class s extends I.FeatureExtractor{async _call(C){(0,I.validate_audio_inputs)(C,"PyAnnoteFeatureExtractor"),C instanceof Float64Array&&(C=new Float32Array(C));const r=[1,1,C.length];return{input_values:new i.Tensor("float32",C,r)}}samples_to_frames(C){return(C-this.config.offset)/this.config.step}post_process_speaker_diarization(C,r){const Q=r/this.samples_to_frames(r)/this.config.sampling_rate,B=[];for(const a of C.tolist()){const d=[];let c=-1;for(let p=0;p({id:p,start:L*Q,end:w*Q,confidence:u/(w-L)})))}return B}}}),"./src/models/pyannote/processing_pyannote.js":((A,g,e)=>{e.r(g),e.d(g,{PyAnnoteProcessor:()=>t});var I=e("./src/base/processing_utils.js"),i=e("./src/models/pyannote/feature_extraction_pyannote.js");class t extends I.Processor{static feature_extractor_class=i.PyAnnoteFeatureExtractor;async _call(o){return await this.feature_extractor(o)}post_process_speaker_diarization(...o){return this.feature_extractor.post_process_speaker_diarization(...o)}get sampling_rate(){return this.feature_extractor.config.sampling_rate}}}),"./src/models/qwen2_vl/image_processing_qwen2_vl.js":((A,g,e)=>{e.r(g),e.d(g,{Qwen2VLImageProcessor:()=>t});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");class t extends I.ImageProcessor{async _call(o,...C){const{pixel_values:r,original_sizes:Q,reshaped_input_sizes:B}=await super._call(o,...C);let a=r;const{temporal_patch_size:d,merge_size:c,patch_size:p}=this.config;a.dims[0]===1&&(a=(0,i.cat)(Array.from({length:d},()=>a),0));const L=a.dims[0]/d,w=a.dims[1],u=Math.floor(a.dims[2]/p),_=Math.floor(a.dims[3]/p),y=a.view(L,d,w,Math.floor(u/c),c,p,Math.floor(_/c),c,p).permute(0,3,6,4,7,2,1,5,8).view(L*u*_,w*d*p*p),M=new i.Tensor("int64",[L,u,_],[1,3]);return{pixel_values:y,image_grid_thw:M,original_sizes:Q,reshaped_input_sizes:B}}}}),"./src/models/qwen2_vl/processing_qwen2_vl.js":((A,g,e)=>{e.r(g),e.d(g,{Qwen2VLProcessor:()=>s});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js"),t=e("./src/tokenizers.js");e("./src/utils/image.js");class s extends I.Processor{static image_processor_class=i.AutoImageProcessor;static tokenizer_class=t.AutoTokenizer;async _call(C,r=null,...Q){Array.isArray(C)||(C=[C]);let B,a;if(r&&(B=await this.image_processor(r),a=B.image_grid_thw),a){let c=this.image_processor.config.merge_size**2,p=0;const L=a.tolist();C=C.map(w=>{for(;w.includes("<|image_pad|>");){const u=Number(L[p++].reduce((_,y)=>_*y,1n));w=w.replace("<|image_pad|>","<|placeholder|>".repeat(Math.floor(u/c)))}return w.replaceAll("<|placeholder|>","<|image_pad|>")})}return{...this.tokenizer(C),...B}}}}),"./src/models/rt_detr/image_processing_rt_detr.js":((A,g,e)=>{e.r(g),e.d(g,{RTDetrImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_object_detection(...s){return(0,I.post_process_object_detection)(...s)}}}),"./src/models/sam/image_processing_sam.js":((A,g,e)=>{e.r(g),e.d(g,{SamImageProcessor:()=>s});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/core.js"),t=e("./src/utils/tensor.js");class s extends I.ImageProcessor{reshape_input_points(C,r,Q,B=!1){C=structuredClone(C);let a=(0,i.calculateDimensions)(C);if(a.length===3)B||(a=[1,...a]),C=[C];else if(a.length!==4)throw Error("The input_points must be a 4D tensor of shape `batch_size`, `point_batch_size`, `nb_points_per_image`, `2`.");for(let d=0;dB!==r.dims[a]))throw Error(`The first ${Q.length} dimensions of 'input_points' and 'input_labels' must be the same.`);return new t.Tensor("int64",C.flat(1/0).map(BigInt),Q)}async _call(C,{input_points:r=null,input_labels:Q=null,input_boxes:B=null}={}){const a=await super._call(C);if(r&&(a.input_points=this.reshape_input_points(r,a.original_sizes,a.reshaped_input_sizes)),Q){if(!a.input_points)throw Error("`input_points` must be provided if `input_labels` are provided.");a.input_labels=this.add_input_labels(Q,a.input_points)}return B&&(a.input_boxes=this.reshape_input_points(B,a.original_sizes,a.reshaped_input_sizes,!0)),a}async post_process_masks(C,r,Q,{mask_threshold:B=0,binarize:a=!0,pad_size:d=null}={}){const c=[];d=d??this.pad_size;const p=[d.height,d.width];for(let L=0;LB&&(M[F]=1);_=new t.Tensor("bool",M,_.dims)}c.push(_)}return c}generate_crop_boxes(C,r,{crop_n_layers:Q=0,overlap_ratio:B=512/1500,points_per_crop:a=32,crop_n_points_downscale_factor:d=1}={}){}}}),"./src/models/sam/processing_sam.js":((A,g,e)=>{e.r(g),e.d(g,{SamProcessor:()=>t});var I=e("./src/base/processing_utils.js"),i=e("./src/models/auto/image_processing_auto.js");class t extends I.Processor{static image_processor_class=i.AutoImageProcessor;async _call(...o){return await this.image_processor(...o)}post_process_masks(...o){return this.image_processor.post_process_masks(...o)}reshape_input_points(...o){return this.image_processor.reshape_input_points(...o)}}}),"./src/models/seamless_m4t/feature_extraction_seamless_m4t.js":((A,g,e)=>{e.r(g),e.d(g,{SeamlessM4TFeatureExtractor:()=>s});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js"),t=e("./src/utils/audio.js");class s extends I.FeatureExtractor{constructor(C){super(C);const r=this.config.sampling_rate,Q=(0,t.mel_filter_bank)(257,this.config.num_mel_bins,20,Math.floor(r/2),r,null,"kaldi",!0);this.mel_filters=Q,this.window=(0,t.window_function)(400,"povey",{periodic:!1})}async _extract_fbank_features(C,r){return C=C.map(Q=>Q*32768),(0,t.spectrogram)(C,this.window,400,160,{fft_length:512,power:2,center:!1,preemphasis:.97,mel_filters:this.mel_filters,log_mel:"log",mel_floor:1192092955078125e-22,remove_dc_offset:!0,max_num_frames:r,transpose:!0})}async _call(C,{padding:r=!0,pad_to_multiple_of:Q=2,do_normalize_per_mel_bins:B=!0,return_attention_mask:a=!0}={}){(0,I.validate_audio_inputs)(C,"SeamlessM4TFeatureExtractor");let d=await this._extract_fbank_features(C,this.config.max_length);if(B){const[M,F]=d.dims,m=d.data;for(let G=0;G0){const T=new Float32Array(F*(M+G));T.set(m),T.fill(this.config.padding_value,m.length);const J=M+G;d=new i.Tensor(d.type,T,[J,F]),a&&(c=new i.Tensor("int64",new BigInt64Array(J),[1,J]),c.data.fill(1n,0,M))}}const[p,L]=d.dims,w=this.config.stride;if(p%w!==0)throw new Error(`The number of frames (${p}) must be a multiple of the stride (${w}).`);const _=d.view(1,Math.floor(p/w),L*w),y={input_features:_};if(a){const M=_.dims[1],F=new BigInt64Array(M);if(c){const m=c.data;for(let G=1,T=0;G{e.r(g),e.d(g,{SegformerFeatureExtractor:()=>t,SegformerImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_semantic_segmentation(...o){return(0,I.post_process_semantic_segmentation)(...o)}}class t extends i{}}),"./src/models/siglip/image_processing_siglip.js":((A,g,e)=>{e.r(g),e.d(g,{SiglipImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}}),"./src/models/smolvlm/image_processing_smolvlm.js":((A,g,e)=>{e.r(g),e.d(g,{SmolVLMImageProcessor:()=>I.Idefics3ImageProcessor});var I=e("./src/models/idefics3/image_processing_idefics3.js")}),"./src/models/smolvlm/processing_smolvlm.js":((A,g,e)=>{e.r(g),e.d(g,{SmolVLMProcessor:()=>I.Idefics3Processor});var I=e("./src/models/idefics3/processing_idefics3.js")}),"./src/models/snac/feature_extraction_snac.js":((A,g,e)=>{e.r(g),e.d(g,{SnacFeatureExtractor:()=>i});var I=e("./src/models/dac/feature_extraction_dac.js");class i extends I.DacFeatureExtractor{}}),"./src/models/speecht5/feature_extraction_speecht5.js":((A,g,e)=>{e.r(g),e.d(g,{SpeechT5FeatureExtractor:()=>i});var I=e("./src/base/feature_extraction_utils.js");class i extends I.FeatureExtractor{}}),"./src/models/speecht5/processing_speecht5.js":((A,g,e)=>{e.r(g),e.d(g,{SpeechT5Processor:()=>s});var I=e("./src/base/processing_utils.js"),i=e("./src/tokenizers.js"),t=e("./src/models/auto/feature_extraction_auto.js");class s extends I.Processor{static tokenizer_class=i.AutoTokenizer;static feature_extractor_class=t.AutoFeatureExtractor;async _call(C){return await this.feature_extractor(C)}}}),"./src/models/swin2sr/image_processing_swin2sr.js":((A,g,e)=>{e.r(g),e.d(g,{Swin2SRImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{pad_image(s,o,C,r={}){const[Q,B,a]=o;return super.pad_image(s,o,{width:B+(C-B%C)%C,height:Q+(C-Q%C)%C},{mode:"symmetric",center:!1,constant_values:-1,...r})}}}),"./src/models/ultravox/processing_ultravox.js":((A,g,e)=>{e.r(g),e.d(g,{UltravoxProcessor:()=>s});var I=e("./src/models/auto/feature_extraction_auto.js"),i=e("./src/tokenizers.js"),t=e("./src/base/processing_utils.js");class s extends t.Processor{static tokenizer_class=i.AutoTokenizer;static feature_extractor_class=I.AutoFeatureExtractor;static uses_processor_config=!0;async _call(C,r=null,Q={}){if(Array.isArray(C))throw new Error("Batched inputs are not supported yet.");let B={};if(r){const d=r.length,{input_features:c}=await this.feature_extractor(r,{...Q,max_length:d}),p=Math.round(d/this.config.encoder_ds_factor+1e-4),L=1+Math.ceil(p/this.config.stack_factor);B.audio_token_len=[L],B.audio_values=c;const w=this.config.audio_placeholder;if(!C.includes(w))throw new Error(`The input text does not contain the image token ${w}.`);C=C.replaceAll(w,w.repeat(L))}return{...this.tokenizer(C,{add_special_tokens:!1,...Q}),...B}}}}),"./src/models/vit/image_processing_vit.js":((A,g,e)=>{e.r(g),e.d(g,{ViTFeatureExtractor:()=>t,ViTImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{}class t extends i{}}),"./src/models/vitmatte/image_processing_vitmatte.js":((A,g,e)=>{e.r(g),e.d(g,{VitMatteImageProcessor:()=>t});var I=e("./src/base/image_processors_utils.js"),i=e("./src/utils/tensor.js");class t extends I.ImageProcessor{async _call(o,C){Array.isArray(o)||(o=[o]),Array.isArray(C)||(C=[C]);const r=await Promise.all(o.map(a=>this.preprocess(a))),Q=await Promise.all(C.map(a=>this.preprocess(a,{do_normalize:!1,do_convert_rgb:!1,do_convert_grayscale:!0})));return{pixel_values:(0,i.stack)(r.map((a,d)=>(0,i.cat)([a.pixel_values,Q[d].pixel_values],0)),0),original_sizes:r.map(a=>a.original_size),reshaped_input_sizes:r.map(a=>a.reshaped_input_size)}}}}),"./src/models/vitpose/image_processing_vitpose.js":((A,g,e)=>{e.r(g),e.d(g,{VitPoseImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_pose_estimation(s,o,{threshold:C=null}={}){const r=s.tolist(),[Q,B,a,d]=s.dims,c=[];for(let p=0;p{e.r(g),e.d(g,{VoxtralProcessor:()=>B});var I=e("./src/models/auto/feature_extraction_auto.js"),i=e("./src/tokenizers.js"),t=e("./src/base/processing_utils.js"),s=e("./src/utils/tensor.js");const o="[AUDIO]",C="[BEGIN_AUDIO]",r=375;function Q(a,d){const c=[];for(let p=0;pQ(J,y)),F=M.map(J=>J.length),m=M.flat(),G=(await Promise.all(m.map(J=>this.feature_extractor(J,p)))).map(J=>J.input_features);L.audio_values=G.length>1?(0,s.cat)(G,0):G[0];let T=u[0];for(let J=0;J{e.r(g),e.d(g,{Wav2Vec2FeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js"),i=e("./src/utils/tensor.js");class t extends I.FeatureExtractor{_zero_mean_unit_var_norm(o){const r=o.reduce((B,a)=>B+a,0)/o.length,Q=o.reduce((B,a)=>B+(a-r)**2,0)/o.length;return o.map(B=>(B-r)/Math.sqrt(Q+1e-7))}async _call(o){(0,I.validate_audio_inputs)(o,"Wav2Vec2FeatureExtractor"),o instanceof Float64Array&&(o=new Float32Array(o));let C=o;this.config.do_normalize&&(C=this._zero_mean_unit_var_norm(C));const r=[1,C.length];return{input_values:new i.Tensor("float32",C,r),attention_mask:new i.Tensor("int64",new BigInt64Array(C.length).fill(1n),r)}}}}),"./src/models/wav2vec2/processing_wav2vec2.js":((A,g,e)=>{e.r(g),e.d(g,{Wav2Vec2Processor:()=>s});var I=e("./src/tokenizers.js"),i=e("./src/models/auto/feature_extraction_auto.js"),t=e("./src/base/processing_utils.js");class s extends t.Processor{static tokenizer_class=I.AutoTokenizer;static feature_extractor_class=i.AutoFeatureExtractor;async _call(C){return await this.feature_extractor(C)}}}),"./src/models/wav2vec2_with_lm/processing_wav2vec2_with_lm.js":((A,g,e)=>{e.r(g),e.d(g,{Wav2Vec2ProcessorWithLM:()=>s});var I=e("./src/tokenizers.js"),i=e("./src/models/auto/feature_extraction_auto.js"),t=e("./src/base/processing_utils.js");class s extends t.Processor{static tokenizer_class=I.AutoTokenizer;static feature_extractor_class=i.AutoFeatureExtractor;async _call(C){return await this.feature_extractor(C)}}}),"./src/models/wespeaker/feature_extraction_wespeaker.js":((A,g,e)=>{e.r(g),e.d(g,{WeSpeakerFeatureExtractor:()=>t});var I=e("./src/base/feature_extraction_utils.js");e("./src/utils/tensor.js");var i=e("./src/utils/audio.js");class t extends I.FeatureExtractor{constructor(o){super(o);const C=this.config.sampling_rate,r=(0,i.mel_filter_bank)(257,this.config.num_mel_bins,20,Math.floor(C/2),C,null,"kaldi",!0);this.mel_filters=r,this.window=(0,i.window_function)(400,"hamming",{periodic:!1}),this.min_num_frames=this.config.min_num_frames}async _extract_fbank_features(o){return o=o.map(C=>C*32768),(0,i.spectrogram)(o,this.window,400,160,{fft_length:512,power:2,center:!1,preemphasis:.97,mel_filters:this.mel_filters,log_mel:"log",mel_floor:1192092955078125e-22,remove_dc_offset:!0,transpose:!0,min_num_frames:this.min_num_frames})}async _call(o){(0,I.validate_audio_inputs)(o,"WeSpeakerFeatureExtractor");const C=(await this._extract_fbank_features(o)).unsqueeze_(0);if(this.config.fbank_centering_span===null){const r=C.mean(1).data,Q=C.data,[B,a,d]=C.dims;for(let c=0;c{e.r(g),e.d(g,{WHISPER_LANGUAGE_MAPPING:()=>i,WHISPER_TO_LANGUAGE_CODE_MAPPING:()=>t,whisper_language_to_code:()=>s});const I=[["en","english"],["zh","chinese"],["de","german"],["es","spanish"],["ru","russian"],["ko","korean"],["fr","french"],["ja","japanese"],["pt","portuguese"],["tr","turkish"],["pl","polish"],["ca","catalan"],["nl","dutch"],["ar","arabic"],["sv","swedish"],["it","italian"],["id","indonesian"],["hi","hindi"],["fi","finnish"],["vi","vietnamese"],["he","hebrew"],["uk","ukrainian"],["el","greek"],["ms","malay"],["cs","czech"],["ro","romanian"],["da","danish"],["hu","hungarian"],["ta","tamil"],["no","norwegian"],["th","thai"],["ur","urdu"],["hr","croatian"],["bg","bulgarian"],["lt","lithuanian"],["la","latin"],["mi","maori"],["ml","malayalam"],["cy","welsh"],["sk","slovak"],["te","telugu"],["fa","persian"],["lv","latvian"],["bn","bengali"],["sr","serbian"],["az","azerbaijani"],["sl","slovenian"],["kn","kannada"],["et","estonian"],["mk","macedonian"],["br","breton"],["eu","basque"],["is","icelandic"],["hy","armenian"],["ne","nepali"],["mn","mongolian"],["bs","bosnian"],["kk","kazakh"],["sq","albanian"],["sw","swahili"],["gl","galician"],["mr","marathi"],["pa","punjabi"],["si","sinhala"],["km","khmer"],["sn","shona"],["yo","yoruba"],["so","somali"],["af","afrikaans"],["oc","occitan"],["ka","georgian"],["be","belarusian"],["tg","tajik"],["sd","sindhi"],["gu","gujarati"],["am","amharic"],["yi","yiddish"],["lo","lao"],["uz","uzbek"],["fo","faroese"],["ht","haitian creole"],["ps","pashto"],["tk","turkmen"],["nn","nynorsk"],["mt","maltese"],["sa","sanskrit"],["lb","luxembourgish"],["my","myanmar"],["bo","tibetan"],["tl","tagalog"],["mg","malagasy"],["as","assamese"],["tt","tatar"],["haw","hawaiian"],["ln","lingala"],["ha","hausa"],["ba","bashkir"],["jw","javanese"],["su","sundanese"]],i=new Map(I),t=new Map([...I.map(([o,C])=>[C,o]),["burmese","my"],["valencian","ca"],["flemish","nl"],["haitian","ht"],["letzeburgesch","lb"],["pushto","ps"],["panjabi","pa"],["moldavian","ro"],["moldovan","ro"],["sinhalese","si"],["castilian","es"]]);function s(o){o=o.toLowerCase();let C=t.get(o);if(C===void 0){const r=o.match(/^<\|([a-z]{2})\|>$/);if(r&&(o=r[1]),i.has(o))C=o;else{const B=o.length===2?i.keys():i.values();throw new Error(`Language "${o}" is not supported. Must be one of: ${JSON.stringify(Array.from(B))}`)}}return C}}),"./src/models/whisper/feature_extraction_whisper.js":((A,g,e)=>{e.r(g),e.d(g,{WhisperFeatureExtractor:()=>s});var I=e("./src/base/feature_extraction_utils.js");e("./src/utils/tensor.js");var i=e("./src/utils/audio.js"),t=e("./src/utils/maths.js");class s extends I.FeatureExtractor{constructor(C){super(C),this.config.mel_filters??=(0,i.mel_filter_bank)(Math.floor(1+this.config.n_fft/2),this.config.feature_size,0,8e3,this.config.sampling_rate,"slaney","slaney"),this.window=(0,i.window_function)(this.config.n_fft,"hann")}async _extract_fbank_features(C){const r=await(0,i.spectrogram)(C,this.window,this.config.n_fft,this.config.hop_length,{power:2,mel_filters:this.config.mel_filters,log_mel:"log10",max_num_frames:Math.min(Math.floor(C.length/this.config.hop_length),this.config.nb_max_frames)}),Q=r.data,B=(0,t.max)(Q)[0];for(let a=0;aB?(C.length>this.config.n_samples&&console.warn("Attempting to extract features for audio longer than 30 seconds. If using a pipeline to extract transcript from a long audio clip, remember to specify `chunk_length_s` and/or `stride_length_s`."),Q=C.slice(0,B)):(Q=new Float32Array(B),Q.set(C)),{input_features:(await this._extract_fbank_features(Q)).unsqueeze_(0)}}}}),"./src/models/whisper/generation_whisper.js":((A,g,e)=>{e.r(g),e.d(g,{WhisperGenerationConfig:()=>i});var I=e("./src/generation/configuration_utils.js");class i extends I.GenerationConfig{return_timestamps=null;return_token_timestamps=null;num_frames=null;alignment_heads=null;task=null;language=null;no_timestamps_token_id=null;prompt_ids=null;is_multilingual=null;lang_to_id=null;task_to_id=null;max_initial_timestamp_index=1}}),"./src/models/whisper/processing_whisper.js":((A,g,e)=>{e.r(g),e.d(g,{WhisperProcessor:()=>s});var I=e("./src/models/auto/feature_extraction_auto.js"),i=e("./src/tokenizers.js"),t=e("./src/base/processing_utils.js");class s extends t.Processor{static tokenizer_class=i.AutoTokenizer;static feature_extractor_class=I.AutoFeatureExtractor;async _call(C){return await this.feature_extractor(C)}}}),"./src/models/yolos/image_processing_yolos.js":((A,g,e)=>{e.r(g),e.d(g,{YolosFeatureExtractor:()=>t,YolosImageProcessor:()=>i});var I=e("./src/base/image_processors_utils.js");class i extends I.ImageProcessor{post_process_object_detection(...o){return(0,I.post_process_object_detection)(...o)}}class t extends i{}}),"./src/ops/registry.js":((A,g,e)=>{e.r(g),e.d(g,{TensorOpRegistry:()=>s});var I=e("./src/backends/onnx.js"),i=e("./src/utils/tensor.js");const t=async(o,C,r)=>{const Q=await(0,I.createInferenceSession)(new Uint8Array(o),C);return(async B=>{const a=(0,I.isONNXProxy)(),d=Object.fromEntries(Object.entries(B).map(([p,L])=>[p,(a?L.clone():L).ort_tensor])),c=await(0,I.runInferenceSession)(Q,d);return Array.isArray(r)?r.map(p=>new i.Tensor(c[p])):new i.Tensor(c[r])})};class s{static session_options={};static get nearest_interpolate_4d(){return this._nearest_interpolate_4d||(this._nearest_interpolate_4d=t([8,10,18,0,58,129,1,10,41,10,1,120,10,0,10,0,10,1,115,18,1,121,34,6,82,101,115,105,122,101,42,18,10,4,109,111,100,101,34,7,110,101,97,114,101,115,116,160,1,3,18,1,114,90,31,10,1,120,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,90,15,10,1,115,18,10,10,8,8,7,18,4,10,2,8,4,98,31,10,1,121,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,66,2,16,21],this.session_options,"y")),this._nearest_interpolate_4d}static get bilinear_interpolate_4d(){return this._bilinear_interpolate_4d||(this._bilinear_interpolate_4d=t([8,9,18,0,58,128,1,10,40,10,1,120,10,0,10,0,10,1,115,18,1,121,34,6,82,101,115,105,122,101,42,17,10,4,109,111,100,101,34,6,108,105,110,101,97,114,160,1,3,18,1,114,90,31,10,1,120,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,90,15,10,1,115,18,10,10,8,8,7,18,4,10,2,8,4,98,31,10,1,121,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,66,2,16,20],this.session_options,"y")),this._bilinear_interpolate_4d}static get bicubic_interpolate_4d(){return this._bicubic_interpolate_4d||(this._bicubic_interpolate_4d=t([8,9,18,0,58,127,10,39,10,1,120,10,0,10,0,10,1,115,18,1,121,34,6,82,101,115,105,122,101,42,16,10,4,109,111,100,101,34,5,99,117,98,105,99,160,1,3,18,1,114,90,31,10,1,120,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,90,15,10,1,115,18,10,10,8,8,7,18,4,10,2,8,4,98,31,10,1,121,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,99,10,3,18,1,104,10,3,18,1,119,66,2,16,20],this.session_options,"y")),this._bicubic_interpolate_4d}static get matmul(){return this._matmul||(this._matmul=t([8,9,18,0,58,55,10,17,10,1,97,10,1,98,18,1,99,34,6,77,97,116,77,117,108,18,1,114,90,9,10,1,97,18,4,10,2,8,1,90,9,10,1,98,18,4,10,2,8,1,98,9,10,1,99,18,4,10,2,8,1,66,2,16,20],this.session_options,"c")),this._matmul}static get stft(){return this._stft||(this._stft=t([8,7,18,0,58,148,1,10,38,10,1,115,10,1,106,10,1,119,10,1,108,18,1,111,34,4,83,84,70,84,42,15,10,8,111,110,101,115,105,100,101,100,24,1,160,1,2,18,1,115,90,26,10,1,115,18,21,10,19,8,1,18,15,10,3,18,1,98,10,3,18,1,115,10,3,18,1,99,90,11,10,1,106,18,6,10,4,8,7,18,0,90,16,10,1,119,18,11,10,9,8,1,18,5,10,3,18,1,119,90,11,10,1,108,18,6,10,4,8,7,18,0,98,31,10,1,111,18,26,10,24,8,1,18,20,10,3,18,1,98,10,3,18,1,102,10,3,18,1,100,10,3,18,1,99,66,2,16,17],this.session_options,"o")),this._stft}static get rfft(){return this._rfft||(this._rfft=t([8,9,18,0,58,97,10,33,10,1,120,10,0,10,1,97,18,1,121,34,3,68,70,84,42,15,10,8,111,110,101,115,105,100,101,100,24,1,160,1,2,18,1,100,90,21,10,1,120,18,16,10,14,8,1,18,10,10,3,18,1,115,10,3,18,1,99,90,11,10,1,97,18,6,10,4,8,7,18,0,98,21,10,1,121,18,16,10,14,8,1,18,10,10,3,18,1,115,10,3,18,1,99,66,2,16,20],this.session_options,"y")),this._rfft}static get top_k(){return this._top_k||(this._top_k=t([8,10,18,0,58,73,10,18,10,1,120,10,1,107,18,1,118,18,1,105,34,4,84,111,112,75,18,1,116,90,9,10,1,120,18,4,10,2,8,1,90,15,10,1,107,18,10,10,8,8,7,18,4,10,2,8,1,98,9,10,1,118,18,4,10,2,8,1,98,9,10,1,105,18,4,10,2,8,7,66,2,16,21],this.session_options,["v","i"])),this._top_k}static get slice(){return this._slice||(this._slice=t([8,7,18,0,58,96,10,25,10,1,120,10,1,115,10,1,101,10,1,97,10,1,116,18,1,121,34,5,83,108,105,99,101,18,1,114,90,9,10,1,120,18,4,10,2,8,1,90,9,10,1,115,18,4,10,2,8,7,90,9,10,1,101,18,4,10,2,8,7,90,9,10,1,97,18,4,10,2,8,7,90,9,10,1,116,18,4,10,2,8,7,98,9,10,1,121,18,4,10,2,8,1,66,2,16,13],this.session_options,"y")),this._slice}}}),"./src/pipelines.js":((A,g,e)=>{e.r(g),e.d(g,{AudioClassificationPipeline:()=>z,AutomaticSpeechRecognitionPipeline:()=>tA,BackgroundRemovalPipeline:()=>CA,DepthEstimationPipeline:()=>nA,DocumentQuestionAnsweringPipeline:()=>x,FeatureExtractionPipeline:()=>J,FillMaskPipeline:()=>_,ImageClassificationPipeline:()=>iA,ImageFeatureExtractionPipeline:()=>Z,ImageSegmentationPipeline:()=>rA,ImageToImagePipeline:()=>W,ImageToTextPipeline:()=>AA,ObjectDetectionPipeline:()=>uA,Pipeline:()=>p,QuestionAnsweringPipeline:()=>u,SummarizationPipeline:()=>M,Text2TextGenerationPipeline:()=>y,TextClassificationPipeline:()=>L,TextGenerationPipeline:()=>G,TextToAudioPipeline:()=>$,TokenClassificationPipeline:()=>w,TranslationPipeline:()=>F,ZeroShotAudioClassificationPipeline:()=>P,ZeroShotClassificationPipeline:()=>T,ZeroShotImageClassificationPipeline:()=>cA,ZeroShotObjectDetectionPipeline:()=>v,pipeline:()=>vA});var I=e("./src/tokenizers.js"),i=e("./src/models.js"),t=e("./src/models/auto/processing_auto.js");e("./src/base/processing_utils.js");var s=e("./src/utils/generic.js"),o=e("./src/utils/core.js"),C=e("./src/utils/maths.js"),r=e("./src/utils/audio.js"),Q=e("./src/utils/tensor.js"),B=e("./src/utils/image.js");async function a(kA){return Array.isArray(kA)||(kA=[kA]),await Promise.all(kA.map(X=>B.RawImage.read(X)))}async function d(kA,X){return Array.isArray(kA)||(kA=[kA]),await Promise.all(kA.map(q=>typeof q=="string"||q instanceof URL?(0,r.read_audio)(q,X):q instanceof Float64Array?new Float32Array(q):q))}function c(kA,X){X&&(kA=kA.map(GA=>GA|0));const[q,wA,LA,JA]=kA;return{xmin:q,ymin:wA,xmax:LA,ymax:JA}}class p extends s.Callable{constructor({task:X,model:q,tokenizer:wA=null,processor:LA=null}){super(),this.task=X,this.model=q,this.tokenizer=wA,this.processor=LA}async dispose(){await this.model.dispose()}}class L extends p{constructor(X){super(X)}async _call(X,{top_k:q=1}={}){const wA=this.tokenizer(X,{padding:!0,truncation:!0}),LA=await this.model(wA),JA=this.model.config.problem_type==="multi_label_classification"?_A=>_A.sigmoid():_A=>new Q.Tensor("float32",(0,C.softmax)(_A.data),_A.dims),GA=this.model.config.id2label,fA=[];for(const _A of LA.logits){const dA=JA(_A),YA=await(0,Q.topk)(dA,q),HA=YA[0].tolist(),SA=YA[1].tolist().map((re,$A)=>({label:GA?GA[re]:`LABEL_${re}`,score:HA[$A]}));q===1?fA.push(...SA):fA.push(SA)}return Array.isArray(X)||q===1?fA:fA[0]}}class w extends p{constructor(X){super(X)}async _call(X,{ignore_labels:q=["O"]}={}){const wA=Array.isArray(X),LA=this.tokenizer(wA?X:[X],{padding:!0,truncation:!0}),GA=(await this.model(LA)).logits,fA=this.model.config.id2label,_A=[];for(let dA=0;dAoe==this.tokenizer.sep_token_id);_A[HA].map((oe,TA)=>oe==1&&(TA===0||TA>SA&&dA.findIndex(ke=>ke==Ae[TA])===-1));const re=JA[HA].tolist(),$A=GA[HA].tolist();for(let oe=1;oeTA==Ae[oe])!==-1)&&(re[oe]=-1/0,$A[oe]=-1/0);const WA=(0,C.softmax)(re).map((oe,TA)=>[oe,TA]),Ce=(0,C.softmax)($A).map((oe,TA)=>[oe,TA]);WA[0][0]=0,Ce[0][0]=0;const ee=(0,o.product)(WA,Ce).filter(oe=>oe[0][1]<=oe[1][1]).map(oe=>[oe[0][1],oe[1][1],oe[0][0]*oe[1][0]]).sort((oe,TA)=>TA[2]-oe[2]);for(let oe=0;oere==this.tokenizer.mask_token_id);if(dA===-1)throw Error(`Mask token (${this.tokenizer.mask_token}) not found in text.`);const YA=LA[fA][dA],HA=await(0,Q.topk)(new Q.Tensor("float32",(0,C.softmax)(YA.data),YA.dims),q),Ae=HA[0].tolist(),SA=HA[1].tolist();JA.push(SA.map((re,$A)=>{const WA=_A.slice();return WA[dA]=re,{score:Ae[$A],token:Number(re),token_str:this.tokenizer.decode([re]),sequence:this.tokenizer.decode(WA,{skip_special_tokens:!0})}}))}return Array.isArray(X)?JA:JA[0]}}class y extends p{_key="generated_text";constructor(X){super(X)}async _call(X,q={}){Array.isArray(X)||(X=[X]),this.model.config.prefix&&(X=X.map(_A=>this.model.config.prefix+_A));const wA=this.model.config.task_specific_params;wA&&wA[this.task]&&wA[this.task].prefix&&(X=X.map(_A=>wA[this.task].prefix+_A));const LA=this.tokenizer,JA={padding:!0,truncation:!0};let GA;this instanceof F&&"_build_translation_inputs"in LA?GA=LA._build_translation_inputs(X,JA,q):GA=LA(X,JA);const fA=await this.model.generate({...GA,...q});return LA.batch_decode(fA,{skip_special_tokens:!0}).map(_A=>({[this._key]:_A}))}}class M extends y{_key="summary_text";constructor(X){super(X)}}class F extends y{_key="translation_text";constructor(X){super(X)}}function m(kA){return Array.isArray(kA)&&kA.every(X=>"role"in X&&"content"in X)}class G extends p{constructor(X){super(X)}async _call(X,q={}){let wA=!1,LA=!1,JA=q.add_special_tokens??(this.tokenizer.add_bos_token||this.tokenizer.add_eos_token)??!1,GA;if(typeof X=="string")GA=X=[X];else if(Array.isArray(X)&&X.every(SA=>typeof SA=="string"))wA=!0,GA=X;else{if(m(X))X=[X];else if(Array.isArray(X)&&X.every(m))wA=!0;else throw new Error("Input must be a string, an array of strings, a Chat, or an array of Chats");LA=!0,GA=X.map(SA=>this.tokenizer.apply_chat_template(SA,{tokenize:!1,add_generation_prompt:!0})),JA=!1}const fA=LA?!1:q.return_full_text??!0;this.tokenizer.padding_side="left";const _A=this.tokenizer(GA,{add_special_tokens:JA,padding:!0,truncation:!0}),dA=await this.model.generate({..._A,...q}),YA=this.tokenizer.batch_decode(dA,{skip_special_tokens:!0});let HA;!fA&&_A.input_ids.dims.at(-1)>0&&(HA=this.tokenizer.batch_decode(_A.input_ids,{skip_special_tokens:!0}).map(SA=>SA.length));const Ae=Array.from({length:X.length},SA=>[]);for(let SA=0;SA[q.toLowerCase(),wA])),this.entailment_id=this.label2id.entailment,this.entailment_id===void 0&&(console.warn("Could not find 'entailment' in label2id mapping. Using 2 as entailment_id."),this.entailment_id=2),this.contradiction_id=this.label2id.contradiction??this.label2id.not_entailment,this.contradiction_id===void 0&&(console.warn("Could not find 'contradiction' in label2id mapping. Using 0 as contradiction_id."),this.contradiction_id=0)}async _call(X,q,{hypothesis_template:wA="This example is {}.",multi_label:LA=!1}={}){const JA=Array.isArray(X);JA||(X=[X]),Array.isArray(q)||(q=[q]);const GA=q.map(dA=>wA.replace("{}",dA)),fA=LA||q.length===1,_A=[];for(const dA of X){const YA=[];for(const SA of GA){const re=this.tokenizer(dA,{text_pair:SA,padding:!0,truncation:!0}),$A=await this.model(re);fA?YA.push([$A.logits.data[this.contradiction_id],$A.logits.data[this.entailment_id]]):YA.push($A.logits.data[this.entailment_id])}const Ae=(fA?YA.map(SA=>(0,C.softmax)(SA)[1]):(0,C.softmax)(YA)).map((SA,re)=>[SA,re]).sort((SA,re)=>re[0]-SA[0]);_A.push({sequence:dA,labels:Ae.map(SA=>q[SA[1]]),scores:Ae.map(SA=>SA[0])})}return JA?_A:_A[0]}}class J extends p{constructor(X){super(X)}async _call(X,{pooling:q="none",normalize:wA=!1,quantize:LA=!1,precision:JA="binary"}={}){const GA=this.tokenizer(X,{padding:!0,truncation:!0}),fA=await this.model(GA);let _A=fA.last_hidden_state??fA.logits??fA.token_embeddings;switch(q){case"none":break;case"mean":_A=(0,Q.mean_pooling)(_A,GA.attention_mask);break;case"first_token":case"cls":_A=_A.slice(null,0);break;case"last_token":case"eos":_A=_A.slice(null,-1);break;default:throw Error(`Pooling method '${q}' not supported.`)}return wA&&(_A=_A.normalize(2,-1)),LA&&(_A=(0,Q.quantize_embeddings)(_A,JA)),_A}}class Z extends p{constructor(X){super(X)}async _call(X,{pool:q=null}={}){const wA=await a(X),{pixel_values:LA}=await this.processor(wA),JA=await this.model({pixel_values:LA});let GA;if(q){if(!("pooler_output"in JA))throw Error("No pooled output was returned. Make sure the model has a 'pooler' layer when using the 'pool' option.");GA=JA.pooler_output}else GA=JA.last_hidden_state??JA.logits??JA.image_embeds;return GA}}class z extends p{constructor(X){super(X)}async _call(X,{top_k:q=5}={}){const wA=this.processor.feature_extractor.config.sampling_rate,LA=await d(X,wA),JA=this.model.config.id2label,GA=[];for(const fA of LA){const _A=await this.processor(fA),YA=(await this.model(_A)).logits[0],HA=await(0,Q.topk)(new Q.Tensor("float32",(0,C.softmax)(YA.data),YA.dims),q),Ae=HA[0].tolist(),re=HA[1].tolist().map(($A,WA)=>({label:JA?JA[$A]:`LABEL_${$A}`,score:Ae[WA]}));GA.push(re)}return Array.isArray(X)?GA:GA[0]}}class P extends p{constructor(X){super(X)}async _call(X,q,{hypothesis_template:wA="This is a sound of {}."}={}){const LA=!Array.isArray(X);LA&&(X=[X]);const JA=q.map(YA=>wA.replace("{}",YA)),GA=this.tokenizer(JA,{padding:!0,truncation:!0}),fA=this.processor.feature_extractor.config.sampling_rate,_A=await d(X,fA),dA=[];for(const YA of _A){const HA=await this.processor(YA),Ae=await this.model({...GA,...HA}),SA=(0,C.softmax)(Ae.logits_per_audio.data);dA.push([...SA].map((re,$A)=>({score:re,label:q[$A]})))}return LA?dA[0]:dA}}class tA extends p{constructor(X){super(X)}async _call(X,q={}){switch(this.model.config.model_type){case"whisper":case"lite-whisper":return this._call_whisper(X,q);case"wav2vec2":case"wav2vec2-bert":case"unispeech":case"unispeech-sat":case"hubert":return this._call_wav2vec2(X,q);case"moonshine":return this._call_moonshine(X,q);default:throw new Error(`AutomaticSpeechRecognitionPipeline does not support model type '${this.model.config.model_type}'.`)}}async _call_wav2vec2(X,q){q.language&&console.warn('`language` parameter is not yet supported for `wav2vec2` models, defaulting to "English".'),q.task&&console.warn('`task` parameter is not yet supported for `wav2vec2` models, defaulting to "transcribe".');const wA=!Array.isArray(X);wA&&(X=[X]);const LA=this.processor.feature_extractor.config.sampling_rate,JA=await d(X,LA),GA=[];for(const fA of JA){const _A=await this.processor(fA),YA=(await this.model(_A)).logits[0],HA=[];for(const SA of YA)HA.push((0,C.max)(SA.data)[1]);const Ae=this.tokenizer.decode(HA);GA.push({text:Ae})}return wA?GA[0]:GA}async _call_whisper(X,q){const wA=q.return_timestamps??!1,LA=q.chunk_length_s??0,JA=q.force_full_sequences??!1;let GA=q.stride_length_s??null;const fA={...q};wA==="word"&&(fA.return_token_timestamps=!0,fA.return_timestamps=!1);const _A=!Array.isArray(X);_A&&(X=[X]);const dA=this.processor.feature_extractor.config.chunk_length/this.model.config.max_source_positions,YA=this.processor.feature_extractor.config.hop_length,HA=this.processor.feature_extractor.config.sampling_rate,Ae=await d(X,HA),SA=[];for(const re of Ae){let $A=[];if(LA>0){if(GA===null)GA=LA/6;else if(LA<=GA)throw Error("`chunk_length_s` must be larger than `stride_length_s`.");const ee=HA*LA,oe=HA*GA,TA=ee-2*oe;let ke=0;for(;;){const Je=ke+ee,pe=re.subarray(ke,Je),fg=await this.processor(pe),zg=ke===0,qg=Je>=re.length;if($A.push({stride:[pe.length,zg?0:oe,qg?0:oe],input_features:fg.input_features,is_last:qg}),qg)break;ke+=TA}}else $A=[{stride:[re.length,0,0],input_features:(await this.processor(re)).input_features,is_last:!0}];for(const ee of $A){fA.num_frames=Math.floor(ee.stride[0]/YA);const oe=await this.model.generate({inputs:ee.input_features,...fA});wA==="word"?(ee.tokens=oe.sequences.tolist()[0],ee.token_timestamps=oe.token_timestamps.tolist()[0].map(TA=>(0,C.round)(TA,2))):ee.tokens=oe[0].tolist(),ee.stride=ee.stride.map(TA=>TA/HA)}const[WA,Ce]=this.tokenizer._decode_asr($A,{time_precision:dA,return_timestamps:wA,force_full_sequences:JA});SA.push({text:WA,...Ce})}return _A?SA[0]:SA}async _call_moonshine(X,q){const wA=!Array.isArray(X);wA&&(X=[X]);const LA=this.processor.feature_extractor.config.sampling_rate,JA=await d(X,LA),GA=[];for(const fA of JA){const _A=await this.processor(fA),dA=Math.floor(fA.length/LA)*6,YA=await this.model.generate({max_new_tokens:dA,...q,..._A}),HA=this.processor.batch_decode(YA,{skip_special_tokens:!0})[0];GA.push({text:HA})}return wA?GA[0]:GA}}class AA extends p{constructor(X){super(X)}async _call(X,q={}){const wA=Array.isArray(X),LA=await a(X),{pixel_values:JA}=await this.processor(LA),GA=[];for(const fA of JA){fA.dims=[1,...fA.dims];const _A=await this.model.generate({inputs:fA,...q}),dA=this.tokenizer.batch_decode(_A,{skip_special_tokens:!0}).map(YA=>({generated_text:YA.trim()}));GA.push(dA)}return wA?GA:GA[0]}}class iA extends p{constructor(X){super(X)}async _call(X,{top_k:q=5}={}){const wA=await a(X),{pixel_values:LA}=await this.processor(wA),JA=await this.model({pixel_values:LA}),GA=this.model.config.id2label,fA=[];for(const _A of JA.logits){const dA=await(0,Q.topk)(new Q.Tensor("float32",(0,C.softmax)(_A.data),_A.dims),q),YA=dA[0].tolist(),Ae=dA[1].tolist().map((SA,re)=>({label:GA?GA[SA]:`LABEL_${SA}`,score:YA[re]}));fA.push(Ae)}return Array.isArray(X)?fA:fA[0]}}class rA extends p{constructor(X){super(X),this.subtasks_mapping={panoptic:"post_process_panoptic_segmentation",instance:"post_process_instance_segmentation",semantic:"post_process_semantic_segmentation"}}async _call(X,{threshold:q=.5,mask_threshold:wA=.5,overlap_mask_area_threshold:LA=.8,label_ids_to_fuse:JA=null,target_sizes:GA=null,subtask:fA=null}={}){if(Array.isArray(X)&&X.length!==1)throw Error("Image segmentation pipeline currently only supports a batch size of 1.");const dA=await a(X),YA=dA.map(ee=>[ee.height,ee.width]),HA=await this.processor(dA),{inputNames:Ae,outputNames:SA}=this.model.sessions.model;if(!Ae.includes("pixel_values")){if(Ae.length!==1)throw Error(`Expected a single input name, but got ${Ae.length} inputs: ${Ae}.`);const ee=Ae[0];if(ee in HA)throw Error(`Input name ${ee} already exists in the inputs.`);HA[ee]=HA.pixel_values}const re=await this.model(HA);let $A=null;if(fA!==null)$A=this.subtasks_mapping[fA];else if(this.processor.image_processor){for(const[ee,oe]of Object.entries(this.subtasks_mapping))if(oe in this.processor.image_processor){$A=this.processor.image_processor[oe].bind(this.processor.image_processor),fA=ee;break}}const WA=this.model.config.id2label,Ce=[];if(fA)if(fA==="panoptic"||fA==="instance"){const ee=$A(re,q,wA,LA,JA,GA??YA)[0],oe=ee.segmentation;for(const TA of ee.segments_info){const ke=new Uint8ClampedArray(oe.data.length);for(let pe=0;pefg<-1e-5||fg>1+1e-5)&&Je.sigmoid_();const pe=await B.RawImage.fromTensor(Je.mul_(255).to("uint8")).resize(ke[1],ke[0]);Ce.push({label:null,score:null,mask:pe})}}return Ce}}class CA extends rA{constructor(X){super(X)}async _call(X,q={}){if(Array.isArray(X)&&X.length!==1)throw Error("Background removal pipeline currently only supports a batch size of 1.");const LA=await a(X),JA=await super._call(X,q);return LA.map((fA,_A)=>{const dA=fA.clone();return dA.putAlpha(JA[_A].mask),dA})}}class cA extends p{constructor(X){super(X)}async _call(X,q,{hypothesis_template:wA="This is a photo of {}"}={}){const LA=Array.isArray(X),JA=await a(X),GA=q.map(Ae=>wA.replace("{}",Ae)),fA=this.tokenizer(GA,{padding:this.model.config.model_type==="siglip"?"max_length":!0,truncation:!0}),{pixel_values:_A}=await this.processor(JA),dA=await this.model({...fA,pixel_values:_A}),YA=this.model.config.model_type==="siglip"?Ae=>Ae.sigmoid().data:Ae=>(0,C.softmax)(Ae.data),HA=[];for(const Ae of dA.logits_per_image){const re=[...YA(Ae)].map(($A,WA)=>({score:$A,label:q[WA]}));re.sort(($A,WA)=>WA.score-$A.score),HA.push(re)}return LA?HA:HA[0]}}class uA extends p{constructor(X){super(X)}async _call(X,{threshold:q=.9,percentage:wA=!1}={}){const LA=Array.isArray(X);if(LA&&X.length!==1)throw Error("Object detection pipeline currently only supports a batch size of 1.");const JA=await a(X),GA=wA?null:JA.map(SA=>[SA.height,SA.width]),{pixel_values:fA,pixel_mask:_A}=await this.processor(JA),dA=await this.model({pixel_values:fA,pixel_mask:_A}),YA=this.processor.image_processor.post_process_object_detection(dA,q,GA),HA=this.model.config.id2label,Ae=YA.map(SA=>SA.boxes.map((re,$A)=>({score:SA.scores[$A],label:HA[SA.classes[$A]],box:c(re,!wA)})));return LA?Ae:Ae[0]}}class v extends p{constructor(X){super(X)}async _call(X,q,{threshold:wA=.1,top_k:LA=null,percentage:JA=!1}={}){const GA=Array.isArray(X),fA=await a(X),_A=this.tokenizer(q,{padding:!0,truncation:!0}),dA=await this.processor(fA),YA=[];for(let HA=0;HA({score:Ce.scores[oe],label:Ce.labels[oe],box:c(ee,!JA)}))}else{const Ce=this.processor.image_processor.post_process_object_detection($A,wA,SA,!0)[0];WA=Ce.boxes.map((ee,oe)=>({score:Ce.scores[oe],label:q[Ce.classes[oe]],box:c(ee,!JA)}))}WA.sort((Ce,ee)=>ee.score-Ce.score),LA!==null&&(WA=WA.slice(0,LA)),YA.push(WA)}return GA?YA:YA[0]}}class x extends p{constructor(X){super(X)}async _call(X,q,wA={}){const LA=(await a(X))[0],{pixel_values:JA}=await this.processor(LA),GA=`${q}`,fA=this.tokenizer(GA,{add_special_tokens:!1,padding:!0,truncation:!0}).input_ids,_A=await this.model.generate({inputs:JA,max_length:this.model.config.decoder.max_position_embeddings,decoder_input_ids:fA,...wA}),YA=this.tokenizer.batch_decode(_A)[0].match(/(.*?)<\/s_answer>/);let HA=null;return YA&&YA.length>=2&&(HA=YA[1].trim()),[{answer:HA}]}}class $ extends p{DEFAULT_VOCODER_ID="Xenova/speecht5_hifigan";constructor(X){super(X),this.vocoder=X.vocoder??null}async _call(X,{speaker_embeddings:q=null}={}){return this.processor?this._call_text_to_spectrogram(X,{speaker_embeddings:q}):this._call_text_to_waveform(X)}async _call_text_to_waveform(X){const q=this.tokenizer(X,{padding:!0,truncation:!0}),{waveform:wA}=await this.model(q),LA=this.model.config.sampling_rate;return new r.RawAudio(wA.data,LA)}async _call_text_to_spectrogram(X,{speaker_embeddings:q}){if(this.vocoder||(console.log("No vocoder specified, using default HifiGan vocoder."),this.vocoder=await i.AutoModel.from_pretrained(this.DEFAULT_VOCODER_ID,{dtype:"fp32"})),(typeof q=="string"||q instanceof URL)&&(q=new Float32Array(await(await fetch(q)).arrayBuffer())),q instanceof Float32Array)q=new Q.Tensor("float32",q,[1,q.length]);else if(!(q instanceof Q.Tensor))throw new Error("Speaker embeddings must be a `Tensor`, `Float32Array`, `string`, or `URL`.");const{input_ids:wA}=this.tokenizer(X,{padding:!0,truncation:!0}),{waveform:LA}=await this.model.generate_speech(wA,q,{vocoder:this.vocoder}),JA=this.processor.feature_extractor.config.sampling_rate;return new r.RawAudio(LA.data,JA)}}class W extends p{constructor(X){super(X)}async _call(X){const q=await a(X),wA=await this.processor(q),LA=await this.model(wA),JA=[];for(const GA of LA.reconstruction){const fA=GA.squeeze().clamp_(0,1).mul_(255).round_().to("uint8");JA.push(B.RawImage.fromTensor(fA))}return JA.length>1?JA:JA[0]}}class nA extends p{constructor(X){super(X)}async _call(X){const q=await a(X),wA=await this.processor(q),{predicted_depth:LA}=await this.model(wA),JA=[];for(let GA=0;GA1?JA:JA[0]}}const xA=Object.freeze({"text-classification":{tokenizer:I.AutoTokenizer,pipeline:L,model:i.AutoModelForSequenceClassification,default:{model:"Xenova/distilbert-base-uncased-finetuned-sst-2-english"},type:"text"},"token-classification":{tokenizer:I.AutoTokenizer,pipeline:w,model:i.AutoModelForTokenClassification,default:{model:"Xenova/bert-base-multilingual-cased-ner-hrl"},type:"text"},"question-answering":{tokenizer:I.AutoTokenizer,pipeline:u,model:i.AutoModelForQuestionAnswering,default:{model:"Xenova/distilbert-base-cased-distilled-squad"},type:"text"},"fill-mask":{tokenizer:I.AutoTokenizer,pipeline:_,model:i.AutoModelForMaskedLM,default:{model:"Xenova/bert-base-uncased"},type:"text"},summarization:{tokenizer:I.AutoTokenizer,pipeline:M,model:i.AutoModelForSeq2SeqLM,default:{model:"Xenova/distilbart-cnn-6-6"},type:"text"},translation:{tokenizer:I.AutoTokenizer,pipeline:F,model:i.AutoModelForSeq2SeqLM,default:{model:"Xenova/t5-small"},type:"text"},"text2text-generation":{tokenizer:I.AutoTokenizer,pipeline:y,model:i.AutoModelForSeq2SeqLM,default:{model:"Xenova/flan-t5-small"},type:"text"},"text-generation":{tokenizer:I.AutoTokenizer,pipeline:G,model:i.AutoModelForCausalLM,default:{model:"Xenova/gpt2"},type:"text"},"zero-shot-classification":{tokenizer:I.AutoTokenizer,pipeline:T,model:i.AutoModelForSequenceClassification,default:{model:"Xenova/distilbert-base-uncased-mnli"},type:"text"},"audio-classification":{pipeline:z,model:i.AutoModelForAudioClassification,processor:t.AutoProcessor,default:{model:"Xenova/wav2vec2-base-superb-ks"},type:"audio"},"zero-shot-audio-classification":{tokenizer:I.AutoTokenizer,pipeline:P,model:i.AutoModel,processor:t.AutoProcessor,default:{model:"Xenova/clap-htsat-unfused"},type:"multimodal"},"automatic-speech-recognition":{tokenizer:I.AutoTokenizer,pipeline:tA,model:[i.AutoModelForSpeechSeq2Seq,i.AutoModelForCTC],processor:t.AutoProcessor,default:{model:"Xenova/whisper-tiny.en"},type:"multimodal"},"text-to-audio":{tokenizer:I.AutoTokenizer,pipeline:$,model:[i.AutoModelForTextToWaveform,i.AutoModelForTextToSpectrogram],processor:[t.AutoProcessor,null],default:{model:"Xenova/speecht5_tts"},type:"text"},"image-to-text":{tokenizer:I.AutoTokenizer,pipeline:AA,model:i.AutoModelForVision2Seq,processor:t.AutoProcessor,default:{model:"Xenova/vit-gpt2-image-captioning"},type:"multimodal"},"image-classification":{pipeline:iA,model:i.AutoModelForImageClassification,processor:t.AutoProcessor,default:{model:"Xenova/vit-base-patch16-224"},type:"multimodal"},"image-segmentation":{pipeline:rA,model:[i.AutoModelForImageSegmentation,i.AutoModelForSemanticSegmentation,i.AutoModelForUniversalSegmentation],processor:t.AutoProcessor,default:{model:"Xenova/detr-resnet-50-panoptic"},type:"multimodal"},"background-removal":{pipeline:CA,model:[i.AutoModelForImageSegmentation,i.AutoModelForSemanticSegmentation,i.AutoModelForUniversalSegmentation],processor:t.AutoProcessor,default:{model:"Xenova/modnet"},type:"image"},"zero-shot-image-classification":{tokenizer:I.AutoTokenizer,pipeline:cA,model:i.AutoModel,processor:t.AutoProcessor,default:{model:"Xenova/clip-vit-base-patch32"},type:"multimodal"},"object-detection":{pipeline:uA,model:i.AutoModelForObjectDetection,processor:t.AutoProcessor,default:{model:"Xenova/detr-resnet-50"},type:"multimodal"},"zero-shot-object-detection":{tokenizer:I.AutoTokenizer,pipeline:v,model:i.AutoModelForZeroShotObjectDetection,processor:t.AutoProcessor,default:{model:"Xenova/owlvit-base-patch32"},type:"multimodal"},"document-question-answering":{tokenizer:I.AutoTokenizer,pipeline:x,model:i.AutoModelForDocumentQuestionAnswering,processor:t.AutoProcessor,default:{model:"Xenova/donut-base-finetuned-docvqa"},type:"multimodal"},"image-to-image":{pipeline:W,model:i.AutoModelForImageToImage,processor:t.AutoProcessor,default:{model:"Xenova/swin2SR-classical-sr-x2-64"},type:"image"},"depth-estimation":{pipeline:nA,model:i.AutoModelForDepthEstimation,processor:t.AutoProcessor,default:{model:"Xenova/dpt-large"},type:"image"},"feature-extraction":{tokenizer:I.AutoTokenizer,pipeline:J,model:i.AutoModel,default:{model:"Xenova/all-MiniLM-L6-v2"},type:"text"},"image-feature-extraction":{processor:t.AutoProcessor,pipeline:Z,model:[i.AutoModelForImageFeatureExtraction,i.AutoModel],default:{model:"Xenova/vit-base-patch16-224-in21k"},type:"image"}}),RA=Object.freeze({"sentiment-analysis":"text-classification",ner:"token-classification",asr:"automatic-speech-recognition","text-to-speech":"text-to-audio",embeddings:"feature-extraction"});async function vA(kA,X=null,{progress_callback:q=null,config:wA=null,cache_dir:LA=null,local_files_only:JA=!1,revision:GA="main",device:fA=null,dtype:_A=null,subfolder:dA="onnx",use_external_data_format:YA=null,model_file_name:HA=null,session_options:Ae={}}={}){kA=RA[kA]??kA;const SA=xA[kA.split("_",1)[0]];if(!SA)throw Error(`Unsupported pipeline: ${kA}. Must be one of [${Object.keys(xA)}]`);X||(X=SA.default.model,console.log(`No model specified. Using default model: "${X}".`));const re={progress_callback:q,config:wA,cache_dir:LA,local_files_only:JA,revision:GA,device:fA,dtype:_A,subfolder:dA,use_external_data_format:YA,model_file_name:HA,session_options:Ae},$A=new Map([["tokenizer",SA.tokenizer],["model",SA.model],["processor",SA.processor]]),WA=await ie($A,X,re);WA.task=kA,(0,o.dispatchCallback)(q,{status:"ready",task:kA,model:X});const Ce=SA.pipeline;return new Ce(WA)}async function ie(kA,X,q){const wA=Object.create(null),LA=[];for(const[JA,GA]of kA.entries()){if(!GA)continue;let fA;Array.isArray(GA)?fA=new Promise(async(_A,dA)=>{let YA;for(const HA of GA){if(HA===null){_A(null);return}try{_A(await HA.from_pretrained(X,q));return}catch(Ae){if(Ae.message?.includes("Unsupported model type"))YA=Ae;else if(Ae.message?.includes("Could not locate file"))YA=Ae;else{dA(Ae);return}}}dA(YA)}):fA=GA.from_pretrained(X,q),wA[JA]=fA,LA.push(fA)}await Promise.all(LA);for(const[JA,GA]of Object.entries(wA))wA[JA]=await GA;return wA}}),"./src/tokenizers.js":((A,g,e)=>{e.r(g),e.d(g,{AlbertTokenizer:()=>ze,AutoTokenizer:()=>Ze,BartTokenizer:()=>be,BertTokenizer:()=>EI,BlenderbotSmallTokenizer:()=>eA,BlenderbotTokenizer:()=>b,BloomTokenizer:()=>Og,CLIPTokenizer:()=>yI,CamembertTokenizer:()=>bA,CodeGenTokenizer:()=>tI,CodeLlamaTokenizer:()=>Wg,CohereTokenizer:()=>se,ConvBertTokenizer:()=>IA,DebertaTokenizer:()=>R,DebertaV2Tokenizer:()=>gA,DistilBertTokenizer:()=>yA,ElectraTokenizer:()=>Ee,Ernie4_5_Tokenizer:()=>ve,EsmTokenizer:()=>cI,FalconTokenizer:()=>CI,GPT2Tokenizer:()=>_e,GPTNeoXTokenizer:()=>jg,GemmaTokenizer:()=>yg,Grok1Tokenizer:()=>cg,HerbertTokenizer:()=>j,LlamaTokenizer:()=>og,M2M100Tokenizer:()=>iI,MBart50Tokenizer:()=>Ag,MBartTokenizer:()=>tg,MPNetTokenizer:()=>sI,MarianTokenizer:()=>f,MgpstrTokenizer:()=>me,MobileBertTokenizer:()=>Ne,NllbTokenizer:()=>mg,NougatTokenizer:()=>DA,PreTrainedTokenizer:()=>he,Qwen2Tokenizer:()=>$g,RoFormerTokenizer:()=>aA,RobertaTokenizer:()=>lg,SiglipTokenizer:()=>l,SpeechT5Tokenizer:()=>EA,SqueezeBertTokenizer:()=>lI,T5Tokenizer:()=>Ie,TokenizerModel:()=>Z,VitsTokenizer:()=>MA,Wav2Vec2CTCTokenizer:()=>k,WhisperTokenizer:()=>Tg,XLMRobertaTokenizer:()=>Lg,XLMTokenizer:()=>ae,is_chinese_char:()=>_});var I=e("./src/utils/generic.js"),i=e("./src/utils/core.js"),t=e("./src/utils/hub.js"),s=e("./src/utils/maths.js"),o=e("./src/utils/tensor.js"),C=e("./src/utils/data-structures.js"),r=e("./node_modules/@huggingface/jinja/dist/index.js"),Q=e("./src/models/whisper/common_whisper.js");async function B(BA,N){const H=await Promise.all([(0,t.getModelJSON)(BA,"tokenizer.json",!0,N),(0,t.getModelJSON)(BA,"tokenizer_config.json",!0,N)]);return N.legacy!==null&&(H[1].legacy=N.legacy),H}function a(BA,N){const H=[];let oA=0;for(const sA of BA.matchAll(N)){const hA=sA[0];oA0&&H.push(hA),oA=sA.index+hA.length}return oA=19968&&BA<=40959||BA>=13312&&BA<=19903||BA>=131072&&BA<=173791||BA>=173824&&BA<=177983||BA>=177984&&BA<=178207||BA>=178208&&BA<=183983||BA>=63744&&BA<=64255||BA>=194560&&BA<=195103}function y(BA,N,H){const oA=[];let sA=0;for(;sAthis.tokens_to_ids.get(H)??this.unk_token_id)}convert_ids_to_tokens(N){return N.map(H=>this.vocab[H]??this.unk_token)}}class z extends Z{constructor(N){super(N),this.tokens_to_ids=c(N.vocab),this.unk_token_id=this.tokens_to_ids.get(N.unk_token),this.unk_token=N.unk_token,this.max_input_chars_per_word=N.max_input_chars_per_word??100,this.vocab=new Array(this.tokens_to_ids.size);for(const[H,oA]of this.tokens_to_ids)this.vocab[oA]=H}encode(N){const H=[];for(const oA of N){const sA=[...oA];if(sA.length>this.max_input_chars_per_word){H.push(this.unk_token);continue}let hA=!1,NA=0;const zA=[];for(;NA0&&(VA=this.config.continuing_subword_prefix+VA),this.tokens_to_ids.has(VA)){ZA=VA;break}--ge}if(ZA===null){hA=!0;break}zA.push(ZA),NA=ge}hA?H.push(this.unk_token):H.push(...zA)}return H}}class P extends Z{constructor(N,H){super(N);const oA=N.vocab.length;this.vocab=new Array(oA),this.scores=new Array(oA);for(let sA=0;sA[sA,hA])),this.bos_token=" ",this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=H.eos_token,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.unk_token=this.vocab[this.unk_token_id],this.minScore=(0,s.min)(this.scores)[0],this.unk_score=this.minScore-10,this.scores[this.unk_token_id]=this.unk_score,this.trie=new C.CharTrie,this.trie.extend(this.vocab),this.fuse_unk=!0}populateNodes(N){const H=N.chars,oA=1;let sA=0;for(;sA{const BA=[...Array.from({length:94},(sA,hA)=>hA+33),...Array.from({length:12},(sA,hA)=>hA+161),...Array.from({length:82},(sA,hA)=>hA+174)],N=BA.slice();let H=0;for(let sA=0;sA<256;++sA)BA.includes(sA)||(BA.push(sA),N.push(256+H),H+=1);const oA=N.map(sA=>String.fromCharCode(sA));return Object.fromEntries(BA.map((sA,hA)=>[sA,oA[hA]]))})(),AA=(0,i.reverseDictionary)(tA);class iA extends Z{constructor(N){super(N),this.tokens_to_ids=c(N.vocab),this.unk_token_id=this.tokens_to_ids.get(N.unk_token),this.unk_token=N.unk_token,this.vocab=new Array(this.tokens_to_ids.size);for(const[oA,sA]of this.tokens_to_ids)this.vocab[sA]=oA;const H=Array.isArray(N.merges[0]);this.merges=H?N.merges:N.merges.map(oA=>oA.split(" ",2)),this.bpe_ranks=new Map(this.merges.map((oA,sA)=>[JSON.stringify(oA),sA])),this.end_of_word_suffix=N.end_of_word_suffix,this.continuing_subword_suffix=N.continuing_subword_suffix??null,this.byte_fallback=this.config.byte_fallback??!1,this.byte_fallback&&(this.text_encoder=new TextEncoder),this.ignore_merges=this.config.ignore_merges??!1,this.max_length_to_cache=256,this.cache_capacity=1e4,this.cache=new C.LRUCache(this.cache_capacity)}clear_cache(){this.cache.clear()}bpe(N){if(N.length===0)return[];const H=this.cache.get(N);if(H!==void 0)return H;const oA=Array.from(N);this.end_of_word_suffix&&(oA[oA.length-1]+=this.end_of_word_suffix);let sA=[];if(oA.length>1){const hA=new C.PriorityQueue((ge,ZA)=>ge.score`<0x${zA.toString(16).toUpperCase().padStart(2,"0")}>`);NA.every(zA=>this.tokens_to_ids.has(zA))?H.push(...NA):H.push(this.unk_token)}else H.push(this.unk_token)}return H}}class rA extends Z{constructor(N,H){super(N),this.tokens_to_ids=c(H.target_lang?N.vocab[H.target_lang]:N.vocab),this.bos_token=H.bos_token,this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=H.eos_token,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.pad_token=H.pad_token,this.pad_token_id=this.tokens_to_ids.get(this.pad_token),this.unk_token=H.unk_token,this.unk_token_id=this.tokens_to_ids.get(this.unk_token),this.vocab=new Array(this.tokens_to_ids.size);for(const[oA,sA]of this.tokens_to_ids)this.vocab[sA]=oA}encode(N){return N}}class CA extends I.Callable{constructor(N){super(),this.config=N}static fromConfig(N){if(N===null)return null;switch(N.type){case"BertNormalizer":return new kA(N);case"Precompiled":return new qg(N);case"Sequence":return new ie(N);case"Replace":return new cA(N);case"NFC":return new v(N);case"NFD":return new x(N);case"NFKC":return new $(N);case"NFKD":return new W(N);case"Strip":return new nA(N);case"StripAccents":return new xA(N);case"Lowercase":return new RA(N);case"Prepend":return new vA(N);default:throw new Error(`Unknown Normalizer type: ${N.type}`)}}normalize(N){throw Error("normalize should be implemented in subclass.")}_call(N){return this.normalize(N)}}class cA extends CA{normalize(N){const H=d(this.config.pattern);return H===null?N:N.replaceAll(H,this.config.content)}}class uA extends CA{form=void 0;normalize(N){return N=N.normalize(this.form),N}}class v extends uA{form="NFC"}class x extends uA{form="NFD"}class $ extends uA{form="NFKC"}class W extends uA{form="NFKD"}class nA extends CA{normalize(N){return this.config.strip_left&&this.config.strip_right?N=N.trim():(this.config.strip_left&&(N=N.trimStart()),this.config.strip_right&&(N=N.trimEnd())),N}}class xA extends CA{normalize(N){return N=w(N),N}}class RA extends CA{normalize(N){return N=N.toLowerCase(),N}}class vA extends CA{normalize(N){return N=this.config.prepend+N,N}}class ie extends CA{constructor(N){super(N),this.normalizers=N.normalizers.map(H=>CA.fromConfig(H))}normalize(N){return this.normalizers.reduce((H,oA)=>oA.normalize(H),N)}}class kA extends CA{_tokenize_chinese_chars(N){const H=[];for(let oA=0;oAthis.pre_tokenize_text(oA,H)):this.pre_tokenize_text(N,H)).flat()}_call(N,H){return this.pre_tokenize(N,H)}}class q extends X{constructor(N){super(),this.pattern=new RegExp(`[^\\s${F}]+|[${F}]`,"gu")}pre_tokenize_text(N,H){return N.trim().match(this.pattern)||[]}}class wA extends X{constructor(N){super(),this.config=N,this.add_prefix_space=this.config.add_prefix_space,this.trim_offsets=this.config.trim_offsets,this.use_regex=this.config.use_regex??!0,this.pattern=/'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+/gu,this.byte_encoder=tA,this.text_encoder=new TextEncoder}pre_tokenize_text(N,H){return this.add_prefix_space&&!N.startsWith(" ")&&(N=" "+N),(this.use_regex?N.match(this.pattern)||[]:[N]).map(sA=>Array.from(this.text_encoder.encode(sA),hA=>this.byte_encoder[hA]).join(""))}}class LA extends X{constructor(N){super(),this.config=N,this.pattern=d(this.config.pattern,this.config.invert)}pre_tokenize_text(N,H){return this.pattern===null?[]:this.config.invert?N.match(this.pattern)||[]:this.config.behavior?.toLowerCase()==="removed"?N.split(this.pattern).filter(oA=>oA):a(N,this.pattern)}}class JA extends X{constructor(N){super(),this.config=N,this.pattern=new RegExp(`[^${F}]+|[${F}]+`,"gu")}pre_tokenize_text(N,H){return N.match(this.pattern)||[]}}class GA extends X{constructor(N){super(),this.config=N;const H=`[^\\d]+|\\d${this.config.individual_digits?"":"+"}`;this.pattern=new RegExp(H,"gu")}pre_tokenize_text(N,H){return N.match(this.pattern)||[]}}class fA extends I.Callable{constructor(N){super(),this.config=N}static fromConfig(N){if(N===null)return null;switch(N.type){case"TemplateProcessing":return new YA(N);case"ByteLevel":return new HA(N);case"RobertaProcessing":return new dA(N);case"BertProcessing":return new _A(N);case"Sequence":return new Ae(N);default:throw new Error(`Unknown PostProcessor type: ${N.type}`)}}post_process(N,...H){throw Error("post_process should be implemented in subclass.")}_call(N,...H){return this.post_process(N,...H)}}class _A extends fA{constructor(N){super(N),this.cls=N.cls[0],this.sep=N.sep[0]}post_process(N,H=null,{add_special_tokens:oA=!0}={}){oA&&(N=(0,i.mergeArrays)([this.cls],N,[this.sep]));let sA=new Array(N.length).fill(0);if(H!==null){const hA=oA&&this instanceof dA?[this.sep]:[],NA=oA?[this.sep]:[];N=(0,i.mergeArrays)(N,hA,H,NA),sA=(0,i.mergeArrays)(sA,new Array(H.length+hA.length+NA.length).fill(1))}return{tokens:N,token_type_ids:sA}}}class dA extends _A{}class YA extends fA{constructor(N){super(N),this.single=N.single,this.pair=N.pair}post_process(N,H=null,{add_special_tokens:oA=!0}={}){const sA=H===null?this.single:this.pair;let hA=[],NA=[];for(const zA of sA)"SpecialToken"in zA?oA&&(hA.push(zA.SpecialToken.id),NA.push(zA.SpecialToken.type_id)):"Sequence"in zA&&(zA.Sequence.id==="A"?(hA=(0,i.mergeArrays)(hA,N),NA=(0,i.mergeArrays)(NA,new Array(N.length).fill(zA.Sequence.type_id))):zA.Sequence.id==="B"&&(hA=(0,i.mergeArrays)(hA,H),NA=(0,i.mergeArrays)(NA,new Array(H.length).fill(zA.Sequence.type_id))));return{tokens:hA,token_type_ids:NA}}}class HA extends fA{post_process(N,H=null){return H&&(N=(0,i.mergeArrays)(N,H)),{tokens:N}}}class Ae extends fA{constructor(N){super(N),this.processors=N.processors.map(H=>fA.fromConfig(H))}post_process(N,H=null,oA={}){let sA;for(const hA of this.processors)if(hA instanceof HA)N=hA.post_process(N).tokens,H&&(H=hA.post_process(H).tokens);else{const NA=hA.post_process(N,H,oA);N=NA.tokens,sA=NA.token_type_ids}return{tokens:N,token_type_ids:sA}}}class SA extends I.Callable{constructor(N){super(),this.config=N,this.added_tokens=[],this.end_of_word_suffix=null,this.trim_offsets=N.trim_offsets}static fromConfig(N){if(N===null)return null;switch(N.type){case"WordPiece":return new ee(N);case"Metaspace":return new zg(N);case"ByteLevel":return new oe(N);case"Replace":return new re(N);case"ByteFallback":return new $A(N);case"Fuse":return new WA(N);case"Strip":return new Ce(N);case"Sequence":return new ke(N);case"CTC":return new TA(N);case"BPEDecoder":return new Je(N);default:throw new Error(`Unknown Decoder type: ${N.type}`)}}_call(N){return this.decode(N)}decode(N){return this.decode_chain(N).join("")}decode_chain(N){throw Error("`decode_chain` should be implemented in subclass.")}}class re extends SA{decode_chain(N){const H=d(this.config.pattern);return H===null?N:N.map(oA=>oA.replaceAll(H,this.config.content))}}class $A extends SA{constructor(N){super(N),this.text_decoder=new TextDecoder}decode_chain(N){const H=[];let oA=[];for(const sA of N){let hA=null;if(sA.length===6&&sA.startsWith("<0x")&&sA.endsWith(">")){const NA=parseInt(sA.slice(3,5),16);isNaN(NA)||(hA=NA)}if(hA!==null)oA.push(hA);else{if(oA.length>0){const NA=this.text_decoder.decode(Uint8Array.from(oA));H.push(NA),oA=[]}H.push(sA)}}if(oA.length>0){const sA=this.text_decoder.decode(Uint8Array.from(oA));H.push(sA),oA=[]}return H}}class WA extends SA{decode_chain(N){return[N.join("")]}}class Ce extends SA{constructor(N){super(N),this.content=this.config.content,this.start=this.config.start,this.stop=this.config.stop}decode_chain(N){return N.map(H=>{let oA=0;for(let hA=0;hA(oA!==0&&(H.startsWith(this.config.prefix)?H=H.replace(this.config.prefix,""):H=" "+H),this.cleanup&&(H=L(H)),H))}}class oe extends SA{constructor(N){super(N),this.byte_decoder=AA,this.text_decoder=new TextDecoder("utf-8",{fatal:!1,ignoreBOM:!0}),this.end_of_word_suffix=null}convert_tokens_to_string(N){const H=N.join(""),oA=new Uint8Array([...H].map(hA=>this.byte_decoder[hA]));return this.text_decoder.decode(oA)}decode_chain(N){const H=[];let oA=[];for(const sA of N)this.added_tokens.find(hA=>hA.content===sA)!==void 0?(oA.length>0&&(H.push(this.convert_tokens_to_string(oA)),oA=[]),H.push(sA)):oA.push(sA);return oA.length>0&&H.push(this.convert_tokens_to_string(oA)),H}}class TA extends SA{constructor(N){super(N),this.pad_token=this.config.pad_token,this.word_delimiter_token=this.config.word_delimiter_token,this.cleanup=this.config.cleanup}convert_tokens_to_string(N){if(N.length===0)return"";const H=[N[0]];for(let hA=1;hAhA!==this.pad_token).join("");return this.cleanup&&(sA=L(sA).replaceAll(this.word_delimiter_token," ").trim()),sA}decode_chain(N){return[this.convert_tokens_to_string(N)]}}class ke extends SA{constructor(N){super(N),this.decoders=N.decoders.map(H=>SA.fromConfig(H))}decode_chain(N){return this.decoders.reduce((H,oA)=>oA.decode_chain(H),N)}}class Je extends SA{constructor(N){super(N),this.suffix=this.config.suffix}decode_chain(N){return N.map((H,oA)=>H.replaceAll(this.suffix,oA===N.length-1?"":" "))}}class pe extends SA{decode_chain(N){let H="";for(let oA=1;oAoA.normalize("NFKC")).join("~"):N=N.normalize("NFKC"),N}}class xg extends X{constructor(N){super(),this.tokenizers=N.pretokenizers.map(H=>X.fromConfig(H))}pre_tokenize_text(N,H){return this.tokenizers.reduce((oA,sA)=>sA.pre_tokenize(oA,H),[N])}}class rg extends X{constructor(N){super()}pre_tokenize_text(N,H){return N.match(/\w+|[^\w\s]+/g)||[]}}class U extends X{constructor(N){super()}pre_tokenize_text(N,H){return M(N)}}class wg extends X{constructor(N){super(),this.config=N,this.pattern=d(this.config.pattern),this.content=this.config.content}pre_tokenize_text(N,H){return this.pattern===null?[N]:[N.replaceAll(this.pattern,this.config.content)]}}const xI=["bos_token","eos_token","unk_token","sep_token","pad_token","cls_token","mask_token"];function fI(BA,N,H,oA){for(const sA of Object.keys(BA)){const hA=N-BA[sA].length,NA=H(sA),zA=new Array(hA).fill(NA);BA[sA]=oA==="right"?(0,i.mergeArrays)(BA[sA],zA):(0,i.mergeArrays)(zA,BA[sA])}}function AI(BA,N){for(const H of Object.keys(BA))BA[H].length=N}class he extends I.Callable{return_token_type_ids=!1;padding_side="right";constructor(N,H){super(),this.config=H,this.normalizer=CA.fromConfig(N.normalizer),this.pre_tokenizer=X.fromConfig(N.pre_tokenizer),this.model=Z.fromConfig(N.model,H),this.post_processor=fA.fromConfig(N.post_processor),this.decoder=SA.fromConfig(N.decoder),this.special_tokens=[],this.all_special_ids=[],this.added_tokens=[];for(const oA of N.added_tokens){const sA=new J(oA);this.added_tokens.push(sA),this.model.tokens_to_ids.set(sA.content,sA.id),this.model.vocab[sA.id]=sA.content,sA.special&&(this.special_tokens.push(sA.content),this.all_special_ids.push(sA.id))}if(this.additional_special_tokens=H.additional_special_tokens??[],this.special_tokens.push(...this.additional_special_tokens),this.special_tokens=[...new Set(this.special_tokens)],this.decoder&&(this.decoder.added_tokens=this.added_tokens,this.decoder.end_of_word_suffix=this.model.end_of_word_suffix),this.added_tokens_splitter=new C.DictionarySplitter(this.added_tokens.map(oA=>oA.content)),this.added_tokens_map=new Map(this.added_tokens.map(oA=>[oA.content,oA])),this.mask_token=this.getToken("mask_token"),this.mask_token_id=this.model.tokens_to_ids.get(this.mask_token),this.pad_token=this.getToken("pad_token","eos_token"),this.pad_token_id=this.model.tokens_to_ids.get(this.pad_token),this.sep_token=this.getToken("sep_token"),this.sep_token_id=this.model.tokens_to_ids.get(this.sep_token),this.unk_token=this.getToken("unk_token"),this.unk_token_id=this.model.tokens_to_ids.get(this.unk_token),this.bos_token=this.getToken("bos_token"),this.bos_token_id=this.model.tokens_to_ids.get(this.bos_token),this.eos_token=this.getToken("eos_token"),this.eos_token_id=this.model.tokens_to_ids.get(this.eos_token),this.model_max_length=H.model_max_length,this.remove_space=H.remove_space,this.clean_up_tokenization_spaces=H.clean_up_tokenization_spaces??!0,this.do_lowercase_and_remove_accent=H.do_lowercase_and_remove_accent??!1,H.padding_side&&(this.padding_side=H.padding_side),this.add_bos_token=H.add_bos_token,this.add_eos_token=H.add_eos_token,this.legacy=!1,this.chat_template=H.chat_template??null,Array.isArray(this.chat_template)){const oA=Object.create(null);for(const{name:sA,template:hA}of this.chat_template){if(typeof sA!="string"||typeof hA!="string")throw new Error('Chat template must be a list of objects with "name" and "template" properties');oA[sA]=hA}this.chat_template=oA}this._compiled_template_cache=new Map}getToken(...N){for(const H of N){const oA=this.config[H];if(oA)if(typeof oA=="object"){if(oA.__type==="AddedToken")return oA.content;throw Error(`Unknown token: ${oA}`)}else return oA}return null}static async from_pretrained(N,{progress_callback:H=null,config:oA=null,cache_dir:sA=null,local_files_only:hA=!1,revision:NA="main",legacy:zA=null}={}){const ge=await B(N,{progress_callback:H,config:oA,cache_dir:sA,local_files_only:hA,revision:NA,legacy:zA});return new this(...ge)}_call(N,{text_pair:H=null,add_special_tokens:oA=!0,padding:sA=!1,truncation:hA=null,max_length:NA=null,return_tensor:zA=!0,return_token_type_ids:ge=null}={}){const ZA=Array.isArray(N);let VA;if(ZA){if(N.length===0)throw Error("text array must be non-empty");if(H!==null){if(Array.isArray(H)){if(N.length!==H.length)throw Error("text and text_pair must have the same length")}else throw Error("text_pair must also be an array");VA=N.map((Re,ng)=>this._encode_plus(Re,{text_pair:H[ng],add_special_tokens:oA,return_token_type_ids:ge}))}else VA=N.map(Re=>this._encode_plus(Re,{add_special_tokens:oA,return_token_type_ids:ge}))}else{if(N==null)throw Error("text may not be null or undefined");if(Array.isArray(H))throw Error("When specifying `text_pair`, since `text` is a string, `text_pair` must also be a string (i.e., not an array).");VA=[this._encode_plus(N,{text_pair:H,add_special_tokens:oA,return_token_type_ids:ge})]}if(NA===null?NA=this.model_max_length:hA===null&&(sA===!0?(console.warn("`max_length` is ignored when `padding: true` and there is no truncation strategy. To pad to max length, use `padding: 'max_length'`."),NA=this.model_max_length):sA===!1&&(console.warn("Truncation was not explicitly activated but `max_length` is provided a specific value, please use `truncation: true` to explicitly truncate examples to max length."),hA=!0)),sA===!0&&(NA=Math.min((0,s.max)(VA.map(Re=>Re.input_ids.length))[0],NA??1/0)),NA=Math.min(NA,this.model_max_length??1/0),sA||hA)for(let Re=0;ReNA?hA&&AI(VA[Re],NA):sA&&fI(VA[Re],NA,ng=>ng==="input_ids"?this.pad_token_id:0,this.padding_side));const ce={};if(zA){if(!(sA&&hA)&&VA.some(ng=>{for(const Ng of Object.keys(ng))if(ng[Ng].length!==VA[0][Ng]?.length)return!0;return!1}))throw Error("Unable to create tensor, you should probably activate truncation and/or padding with 'padding=true' and 'truncation=true' to have batched tensors with the same length.");const Re=[VA.length,VA[0].input_ids.length];for(const ng of Object.keys(VA[0]))ce[ng]=new o.Tensor("int64",BigInt64Array.from(VA.flatMap(Ng=>Ng[ng]).map(BigInt)),Re)}else{for(const Re of Object.keys(VA[0]))ce[Re]=VA.map(ng=>ng[Re]);if(!ZA)for(const Re of Object.keys(ce))ce[Re]=ce[Re][0]}return ce}_encode_text(N){if(N===null)return null;const H=this.added_tokens_splitter.split(N);for(let sA=0;sA0&&(H[sA-1]=H[sA-1].trimEnd()),hA.rstrip&&sA{if(sA.length===0)return[];if(this.added_tokens_map.has(sA))return[sA];if(this.remove_space===!0&&(sA=sA.trim().split(/\s+/).join(" ")),this.do_lowercase_and_remove_accent&&(sA=u(sA)),this.normalizer!==null&&(sA=this.normalizer(sA)),sA.length===0)return[];const NA=this.pre_tokenizer!==null?this.pre_tokenizer(sA,{section_index:hA}):[sA];return this.model(NA)})}_encode_plus(N,{text_pair:H=null,add_special_tokens:oA=!0,return_token_type_ids:sA=null}={}){const{tokens:hA,token_type_ids:NA}=this._tokenize_helper(N,{pair:H,add_special_tokens:oA}),zA=this.model.convert_tokens_to_ids(hA),ge={input_ids:zA,attention_mask:new Array(zA.length).fill(1)};return(sA??this.return_token_type_ids)&&NA&&(ge.token_type_ids=NA),ge}_tokenize_helper(N,{pair:H=null,add_special_tokens:oA=!1}={}){const sA=this._encode_text(N),hA=this._encode_text(H);return this.post_processor?this.post_processor(sA,hA,{add_special_tokens:oA}):{tokens:(0,i.mergeArrays)(sA??[],hA??[])}}tokenize(N,{pair:H=null,add_special_tokens:oA=!1}={}){return this._tokenize_helper(N,{pair:H,add_special_tokens:oA}).tokens}encode(N,{text_pair:H=null,add_special_tokens:oA=!0,return_token_type_ids:sA=null}={}){return this._encode_plus(N,{text_pair:H,add_special_tokens:oA,return_token_type_ids:sA}).input_ids}batch_decode(N,H={}){return N instanceof o.Tensor&&(N=N.tolist()),N.map(oA=>this.decode(oA,H))}decode(N,H={}){if(N instanceof o.Tensor&&(N=p(N)),!Array.isArray(N)||N.length===0||!(0,i.isIntegralNumber)(N[0]))throw Error("token_ids must be a non-empty array of integers.");return this.decode_single(N,H)}decode_single(N,{skip_special_tokens:H=!1,clean_up_tokenization_spaces:oA=null}){let sA=this.model.convert_ids_to_tokens(N);H&&(sA=sA.filter(NA=>!this.special_tokens.includes(NA)));let hA=this.decoder?this.decoder(sA):sA.join(" ");return this.decoder&&this.decoder.end_of_word_suffix&&(hA=hA.replaceAll(this.decoder.end_of_word_suffix," "),H&&(hA=hA.trim())),(oA??this.clean_up_tokenization_spaces)&&(hA=L(hA)),hA}get_chat_template({chat_template:N=null,tools:H=null}={}){if(this.chat_template&&typeof this.chat_template=="object"){const oA=this.chat_template;if(N!==null&&Object.hasOwn(oA,N))N=oA[N];else if(N===null)if(H!==null&&"tool_use"in oA)N=oA.tool_use;else if("default"in oA)N=oA.default;else throw Error(`This model has multiple chat templates with no default specified! Please either pass a chat template or the name of the template you wish to use to the 'chat_template' argument. Available template names are ${Object.keys(oA).sort()}.`)}else if(N===null)if(this.chat_template)N=this.chat_template;else throw Error("Cannot use apply_chat_template() because tokenizer.chat_template is not set and no template argument was passed! For information about writing templates and setting the tokenizer.chat_template attribute, please see the documentation at https://huggingface.co/docs/transformers/main/en/chat_templating");return N}apply_chat_template(N,{tools:H=null,documents:oA=null,chat_template:sA=null,add_generation_prompt:hA=!1,tokenize:NA=!0,padding:zA=!1,truncation:ge=!1,max_length:ZA=null,return_tensor:VA=!0,return_dict:ce=!1,tokenizer_kwargs:Re={},...ng}={}){if(sA=this.get_chat_template({chat_template:sA,tools:H}),typeof sA!="string")throw Error(`chat_template must be a string, but got ${typeof sA}`);let Ng=this._compiled_template_cache.get(sA);Ng===void 0&&(Ng=new r.Template(sA),this._compiled_template_cache.set(sA,Ng));const sg=Object.create(null);for(const eg of xI){const oI=this.getToken(eg);oI&&(sg[eg]=oI)}const Eg=Ng.render({messages:N,add_generation_prompt:hA,tools:H,documents:oA,...sg,...ng});if(NA){const eg=this._call(Eg,{add_special_tokens:!1,padding:zA,truncation:ge,max_length:ZA,return_tensor:VA,...Re});return ce?eg:eg.input_ids}return Eg}}class EI extends he{return_token_type_ids=!0}class ze extends he{return_token_type_ids=!0}class Ne extends he{return_token_type_ids=!0}class lI extends he{return_token_type_ids=!0}class R extends he{return_token_type_ids=!0}class gA extends he{return_token_type_ids=!0}class j extends he{return_token_type_ids=!0}class IA extends he{return_token_type_ids=!0}class aA extends he{return_token_type_ids=!0}class yA extends he{}class bA extends he{}class ae extends he{return_token_type_ids=!0;constructor(N,H){super(N,H),console.warn('WARNING: `XLMTokenizer` is not yet supported by Hugging Face\'s "fast" tokenizers library. Therefore, you may experience slightly inaccurate results.')}}class Ee extends he{return_token_type_ids=!0}class Ie extends he{}class _e extends he{}class be extends he{}class tg extends he{constructor(N,H){super(N,H),this.languageRegex=/^[a-z]{2}_[A-Z]{2}$/,this.language_codes=this.special_tokens.filter(oA=>this.languageRegex.test(oA)),this.lang_to_token=oA=>oA}_build_translation_inputs(N,H,oA){return $e(this,N,H,oA)}}class Ag extends tg{}class lg extends he{}class Og extends he{}const gg="▁";class og extends he{padding_side="left";constructor(N,H){super(N,H),this.legacy=H.legacy??!0,this.legacy||(this.normalizer=null,this.pre_tokenizer=new fg({replacement:gg,add_prefix_space:!0,prepend_scheme:"first"}))}_encode_text(N){if(N===null)return null;if(this.legacy||N.length===0)return super._encode_text(N);let H=super._encode_text(gg+N.replaceAll(gg," "));return H.length>1&&H[0]===gg&&this.special_tokens.includes(H[1])&&(H=H.slice(1)),H}}class Wg extends he{}class Lg extends he{}class sI extends he{}class CI extends he{}class jg extends he{}class cI extends he{}class $g extends he{}class yg extends he{}class cg extends he{}function $e(BA,N,H,oA){if(!("language_codes"in BA)||!Array.isArray(BA.language_codes))throw new Error("Tokenizer must have `language_codes` attribute set and it should be an array of language ids.");if(!("languageRegex"in BA)||!(BA.languageRegex instanceof RegExp))throw new Error("Tokenizer must have `languageRegex` attribute set and it should be a regular expression.");if(!("lang_to_token"in BA)||typeof BA.lang_to_token!="function")throw new Error("Tokenizer must have `lang_to_token` attribute set and it should be a function.");const sA=oA.src_lang,hA=oA.tgt_lang;if(!BA.language_codes.includes(hA))throw new Error(`Target language code "${hA}" is not valid. Must be one of: {${BA.language_codes.join(", ")}}`);if(sA!==void 0){if(!BA.language_codes.includes(sA))throw new Error(`Source language code "${sA}" is not valid. Must be one of: {${BA.language_codes.join(", ")}}`);for(const NA of BA.post_processor.config.single)if("SpecialToken"in NA&&BA.languageRegex.test(NA.SpecialToken.id)){NA.SpecialToken.id=BA.lang_to_token(sA);break}}return oA.forced_bos_token_id=BA.model.convert_tokens_to_ids([BA.lang_to_token(hA)])[0],BA._call(N,H)}class mg extends he{constructor(N,H){super(N,H),this.languageRegex=/^[a-z]{3}_[A-Z][a-z]{3}$/,this.language_codes=this.special_tokens.filter(oA=>this.languageRegex.test(oA)),this.lang_to_token=oA=>oA}_build_translation_inputs(N,H,oA){return $e(this,N,H,oA)}}class iI extends he{constructor(N,H){super(N,H),this.languageRegex=/^__[a-z]{2,3}__$/,this.language_codes=this.special_tokens.filter(oA=>this.languageRegex.test(oA)).map(oA=>oA.slice(2,-2)),this.lang_to_token=oA=>`__${oA}__`}_build_translation_inputs(N,H,oA){return $e(this,N,H,oA)}}class Tg extends he{get timestamp_begin(){return this.model.convert_tokens_to_ids(["<|notimestamps|>"])[0]+1}_decode_asr(N,{return_timestamps:H=!1,return_language:oA=!1,time_precision:sA=null,force_full_sequences:hA=!0}={}){if(sA===null)throw Error("Must specify time_precision");let NA=null;const zA=H==="word";function ge(){return{language:NA,timestamp:[null,null],text:""}}const ZA=[];let VA=ge(),ce=0;const Re=this.timestamp_begin,Ng=Re+1500;let sg=[],Eg=[],eg=!1,oI=null;const dI=new Set(this.all_special_ids);for(const ag of N){const Mg=ag.tokens,Yg=zA?ag.token_timestamps:null;let rI=null,MI=Re;if("stride"in ag){const[Rg,Bg,Fg]=ag.stride;if(ce-=Bg,oI=Rg-Fg,Bg&&(MI=Bg/sA+Re),Fg)for(let dg=Mg.length-1;dg>=0;--dg){const eI=Number(Mg[dg]);if(eI>=Re){if(rI!==null&&(eI-Re)*sA=Re&&Bg<=Ng){const Fg=(Bg-Re)*sA+ce,dg=(0,s.round)(Fg,2);if(rI!==null&&Bg>=rI)eg=!0;else if(eg||sg.length>0&&Bg0?(sg.push(_g),zA&&Eg.push(uI)):sg.every(Rg=>Rg.length===0)&&(VA=ge(),sg=[],_g=[],Eg=[],uI=[])}if(sg.length>0){if(hA&&H)throw new Error("Whisper did not predict an ending timestamp, which can happen if audio is cut off in the middle of a word. Also make sure WhisperTimeStampLogitsProcessor was used during generation.");const[ag,Mg]=this.findLongestCommonSequence(sg,Eg),Yg=this.decode(ag);VA.text=Yg,zA&&(VA.words=this.collateWordTimestamps(ag,Mg,NA)),ZA.push(VA)}let Kg=Object.create(null);const mI=ZA.map(ag=>ag.text).join("");if(H||oA){for(let ag=0;ag0;let zA=NA?[]:null,ge=NA?H[0]:null;for(let ZA=1;ZABg===MI[Fg]&&ge[mI+Fg]<=H[ZA][Yg+Fg]).length:_g=Mg.filter((Bg,Fg)=>Bg===MI[Fg]).length;const uI=Kg/1e4,Rg=_g/Kg+uI;_g>1&&Rg>ce&&(ce=Rg,Re=[mI,ag,Yg,rI])}const[Ng,sg,Eg,eg]=Re,oI=Math.floor((sg+Ng)/2),dI=Math.floor((eg+Eg)/2);hA.push(...oA.slice(0,oI)),oA=VA.slice(dI),sA=oA.length,NA&&(zA.push(...ge.slice(0,oI)),ge=H[ZA].slice(dI))}return hA.push(...oA),NA?(zA.push(...ge),[hA,zA]):[hA,[]]}collateWordTimestamps(N,H,oA){const[sA,hA,NA]=this.combineTokensIntoWords(N,oA),zA=[];for(let ge=0;ge=sA){const zA=((NA-sA)*oA).toFixed(2);hA.push(`<|${zA}|>`),hA.push([])}else hA[hA.length-1].push(NA);return hA=hA.map(NA=>typeof NA=="string"?NA:super.decode(NA,H)),hA.join("")}splitTokensOnUnicode(N){const H=this.decode(N,{decode_with_timestamps:!0}),oA="�",sA=[],hA=[],NA=[];let zA=[],ge=[],ZA=0;for(let VA=0;VA=this.model.tokens_to_ids.get("<|endoftext|>"),Ng=VA.startsWith(" "),sg=VA.trim(),Eg=ge.test(sg);if(ng||Ng||Eg||hA.length===0)hA.push(VA),NA.push(ce),zA.push(Re);else{const eg=hA.length-1;hA[eg]+=VA,NA[eg].push(...ce),zA[eg].push(...Re)}}return[hA,NA,zA]}mergePunctuations(N,H,oA,sA,hA){const NA=structuredClone(N),zA=structuredClone(H),ge=structuredClone(oA);let ZA=NA.length-2,VA=NA.length-1;for(;ZA>=0;)NA[ZA].startsWith(" ")&&sA.includes(NA[ZA].trim())?(NA[VA]=NA[ZA]+NA[VA],zA[VA]=(0,i.mergeArrays)(zA[ZA],zA[VA]),ge[VA]=(0,i.mergeArrays)(ge[ZA],ge[VA]),NA[ZA]="",zA[ZA]=[],ge[ZA]=[]):VA=ZA,--ZA;for(ZA=0,VA=1;VAce),zA.filter(ce=>ce.length>0),ge.filter(ce=>ce.length>0)]}}class tI extends he{}class yI extends he{}class l extends he{}class f extends he{constructor(N,H){super(N,H),this.languageRegex=/^(>>\w+<<)\s*/g,this.supported_language_codes=this.model.vocab.filter(oA=>this.languageRegex.test(oA)),console.warn('WARNING: `MarianTokenizer` is not yet supported by Hugging Face\'s "fast" tokenizers library. Therefore, you may experience slightly inaccurate results.')}_encode_text(N){if(N===null)return null;const[H,...oA]=N.trim().split(this.languageRegex);if(oA.length===0)return super._encode_text(H);if(oA.length===2){const[sA,hA]=oA;return this.supported_language_codes.includes(sA)||console.warn(`Unsupported language code "${sA}" detected, which may lead to unexpected behavior. Should be one of: ${JSON.stringify(this.supported_language_codes)}`),(0,i.mergeArrays)([sA],super._encode_text(hA))}}}class k extends he{}class b extends he{}class eA extends he{}class EA extends he{}class DA extends he{}class MA extends he{constructor(N,H){super(N,H),this.decoder=new pe({})}}class se extends he{}class me extends he{}class ve extends he{}class Ze{static TOKENIZER_CLASS_MAPPING={T5Tokenizer:Ie,DistilBertTokenizer:yA,CamembertTokenizer:bA,DebertaTokenizer:R,DebertaV2Tokenizer:gA,BertTokenizer:EI,HerbertTokenizer:j,ConvBertTokenizer:IA,RoFormerTokenizer:aA,XLMTokenizer:ae,ElectraTokenizer:Ee,MobileBertTokenizer:Ne,SqueezeBertTokenizer:lI,AlbertTokenizer:ze,GPT2Tokenizer:_e,BartTokenizer:be,MBartTokenizer:tg,MBart50Tokenizer:Ag,RobertaTokenizer:lg,WhisperTokenizer:Tg,CodeGenTokenizer:tI,CLIPTokenizer:yI,SiglipTokenizer:l,MarianTokenizer:f,BloomTokenizer:Og,NllbTokenizer:mg,M2M100Tokenizer:iI,LlamaTokenizer:og,CodeLlamaTokenizer:Wg,XLMRobertaTokenizer:Lg,MPNetTokenizer:sI,FalconTokenizer:CI,GPTNeoXTokenizer:jg,EsmTokenizer:cI,Wav2Vec2CTCTokenizer:k,BlenderbotTokenizer:b,BlenderbotSmallTokenizer:eA,SpeechT5Tokenizer:EA,NougatTokenizer:DA,VitsTokenizer:MA,Qwen2Tokenizer:$g,GemmaTokenizer:yg,Grok1Tokenizer:cg,CohereTokenizer:se,MgpstrTokenizer:me,Ernie4_5_Tokenizer:ve,PreTrainedTokenizer:he};static async from_pretrained(N,{progress_callback:H=null,config:oA=null,cache_dir:sA=null,local_files_only:hA=!1,revision:NA="main",legacy:zA=null}={}){const[ge,ZA]=await B(N,{progress_callback:H,config:oA,cache_dir:sA,local_files_only:hA,revision:NA,legacy:zA}),VA=ZA.tokenizer_class?.replace(/Fast$/,"")??"PreTrainedTokenizer";let ce=this.TOKENIZER_CLASS_MAPPING[VA];return ce||(console.warn(`Unknown tokenizer class "${VA}", attempting to construct from base class.`),ce=he),new ce(ge,ZA)}}}),"./src/utils/audio.js":((A,g,e)=>{e.r(g),e.d(g,{RawAudio:()=>z,hamming:()=>a,hanning:()=>B,mel_filter_bank:()=>_,read_audio:()=>r,spectrogram:()=>G,window_function:()=>T});var I=e("./src/utils/hub.js"),i=e("./src/utils/maths.js"),t=e("./src/utils/core.js"),s=e("./src/env.js"),o=e("./src/utils/tensor.js"),C=e("?7992");async function r(P,tA){if(typeof AudioContext>"u")throw Error("Unable to load audio from path/URL since `AudioContext` is not available in your environment. Instead, audio data should be passed directly to the pipeline/processor. For more information and some example code, see https://huggingface.co/docs/transformers.js/guides/node-audio-processing.");const AA=await(await(0,I.getFile)(P)).arrayBuffer(),iA=new AudioContext({sampleRate:tA});typeof tA>"u"&&console.warn(`No sampling rate provided, using default of ${iA.sampleRate}Hz.`);const rA=await iA.decodeAudioData(AA);let CA;if(rA.numberOfChannels===2){const cA=Math.sqrt(2),uA=rA.getChannelData(0),v=rA.getChannelData(1);CA=new Float32Array(uA.length);for(let x=0;x2595*Math.log10(1+P/700),kaldi:P=>1127*Math.log(1+P/700),slaney:(P,tA=1e3,AA=15,iA=27/Math.log(6.4))=>P>=tA?AA+Math.log(P/tA)*iA:3*P/200};function c(P,tA="htk"){const AA=d[tA];if(!AA)throw new Error('mel_scale should be one of "htk", "slaney" or "kaldi".');return typeof P=="number"?AA(P):P.map(iA=>AA(iA))}const p={htk:P=>700*(10**(P/2595)-1),kaldi:P=>700*(Math.exp(P/1127)-1),slaney:(P,tA=1e3,AA=15,iA=Math.log(6.4)/27)=>P>=AA?tA*Math.exp(iA*(P-AA)):200*P/3};function L(P,tA="htk"){const AA=p[tA];if(!AA)throw new Error('mel_scale should be one of "htk", "slaney" or "kaldi".');return typeof P=="number"?AA(P):P.map(iA=>AA(iA))}function w(P,tA){const AA=Float64Array.from({length:tA.length-1},(cA,uA)=>tA[uA+1]-tA[uA]),iA=Array.from({length:P.length},()=>new Array(tA.length));for(let cA=0;cAnew Array(P.length));for(let cA=0;cAP+iA*CA)}function _(P,tA,AA,iA,rA,CA=null,cA="htk",uA=!1){if(CA!==null&&CA!=="slaney")throw new Error('norm must be one of null or "slaney"');if(P<2)throw new Error(`Require num_frequency_bins: ${P} >= 2`);if(AA>iA)throw new Error(`Require min_frequency: ${AA} <= max_frequency: ${iA}`);const v=c(AA,cA),x=c(iA,cA),$=u(v,x,tA+2);let W=L($,cA),nA;if(uA){const RA=rA/((P-1)*2);nA=c(Float64Array.from({length:P},(vA,ie)=>ie*RA),cA),W=$}else nA=u(0,Math.floor(rA/2),P);const xA=w(nA,W);if(CA!==null&&CA==="slaney")for(let RA=0;RArA)throw Error(`frame_length (${AA}) may not be larger than fft_length (${rA})`);if(JA!==AA)throw new Error(`Length of the window (${JA}) must equal frame_length (${AA})`);if(iA<=0)throw new Error("hop_length must be greater than zero");if(CA===null&&W!==null)throw new Error("You have provided `mel_filters` but `power` is `None`. Mel spectrogram computation is not yet supported for complex-valued spectrogram. Specify `power` to fix this issue.");if(!$)throw new Error("`preemphasis_htk_flavor=false` is not currently supported.");if(cA){if(uA!=="reflect")throw new Error(`pad_mode="${uA}" not implemented yet.`);const Ce=Math.floor((rA-1)/2)+1;P=y(P,Ce,Ce)}let GA=Math.floor(1+Math.floor((P.length-AA)/iA));X!==null&&GAGA?wA&&(dA=q):dA=_A=q);const YA=new i.FFT(rA),HA=new Float64Array(rA),Ae=new Float64Array(YA.outputBufferSize),SA=new Float32Array(fA*dA);for(let Ce=0;Ce<_A;++Ce){const ee=Ce*iA,oe=Math.min(P.length-ee,AA);oe!==AA&&HA.fill(0,0,AA);for(let TA=0;TA=1;--TA)HA[TA]-=x*HA[TA-1];HA[0]*=1-x}for(let TA=0;TAMath.pow(uA,.85));break;default:throw new Error(`Unknown window type ${tA}.`)}if(AA&&(cA=cA.subarray(0,P)),iA===null)return cA;if(P>iA)throw new Error(`Length of the window (${P}) may not be larger than frame_length (${iA})`);return cA}function J(P,tA){let AA=44;const iA=new ArrayBuffer(AA+P.length*4),rA=new DataView(iA);Z(rA,0,"RIFF"),rA.setUint32(4,36+P.length*4,!0),Z(rA,8,"WAVE"),Z(rA,12,"fmt "),rA.setUint32(16,16,!0),rA.setUint16(20,3,!0),rA.setUint16(22,1,!0),rA.setUint32(24,tA,!0),rA.setUint32(28,tA*4,!0),rA.setUint16(32,4,!0),rA.setUint16(34,32,!0),Z(rA,36,"data"),rA.setUint32(40,P.length*4,!0);for(let CA=0;CA{let CA=await rA.arrayBuffer();C.writeFileSync(iA,Buffer.from(CA))};else throw new Error("Unable to save because filesystem is disabled in this environment.");await AA(tA,this.toBlob())}}}),"./src/utils/constants.js":((A,g,e)=>{e.r(g),e.d(g,{CHAT_TEMPLATE_NAME:()=>C,CONFIG_NAME:()=>i,FEATURE_EXTRACTOR_NAME:()=>t,GENERATION_CONFIG_NAME:()=>r,GITHUB_ISSUE_URL:()=>I,IMAGE_PROCESSOR_NAME:()=>s,PROCESSOR_NAME:()=>o});const I="https://github.com/huggingface/transformers.js/issues/new/choose",i="config.json",t="preprocessor_config.json",s=t,o="processor_config.json",C="chat_template.jinja",r="generation_config.json"}),"./src/utils/core.js":((A,g,e)=>{e.r(g),e.d(g,{calculateDimensions:()=>r,calculateReflectOffset:()=>d,count:()=>w,dispatchCallback:()=>I,escapeRegExp:()=>t,isIntegralNumber:()=>o,isNullishDimension:()=>C,isTypedArray:()=>s,len:()=>L,mergeArrays:()=>B,pick:()=>p,pop:()=>Q,product:()=>a,reverseDictionary:()=>i,saveBlob:()=>c});function I(u,_){u&&u(_)}function i(u){return Object.fromEntries(Object.entries(u).map(([_,y])=>[y,_]))}function t(u){return u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function s(u){return u?.prototype?.__proto__?.constructor?.name==="TypedArray"}function o(u){return Number.isInteger(u)||typeof u=="bigint"}function C(u){return u==null||u===-1}function r(u){const _=[];let y=u;for(;Array.isArray(y);)_.push(y.length),y=y[0];return _}function Q(u,_,y=void 0){const M=u[_];if(M!==void 0)return delete u[_],M;if(y===void 0)throw Error(`Key ${_} does not exist in object.`);return y}function B(...u){return Array.prototype.concat.apply([],u)}function a(...u){return u.reduce((_,y)=>_.flatMap(M=>y.map(F=>[M,F])))}function d(u,_){return Math.abs((u+_)%(2*_)-_)}function c(u,_){const y=URL.createObjectURL(_),M=document.createElement("a");M.href=y,M.download=u,M.click(),M.remove(),URL.revokeObjectURL(y)}function p(u,_){return Object.assign({},..._.map(y=>{if(u[y]!==void 0)return{[y]:u[y]}}))}function L(u){let _=0;for(const y of u)++_;return _}function w(u,_){let y=0;for(const M of u)M===_&&++y;return y}}),"./src/utils/data-structures.js":((A,g,e)=>{e.r(g),e.d(g,{CharTrie:()=>i,DictionarySplitter:()=>C,LRUCache:()=>r,PriorityQueue:()=>I,TokenLattice:()=>s});class I{constructor(B=(d,c)=>d>c,a=1/0){this._heap=[],this._comparator=B,this._maxSize=a}get size(){return this._heap.length}isEmpty(){return this.size===0}peek(){return this._heap[0]}push(...B){return this.extend(B)}extend(B){for(const a of B)if(this.size0&&this._swap(0,a),this._heap.pop(),this._siftDown(),B}replace(B){const a=this.peek();return this._heap[0]=B,this._siftDown(),a}_parent(B){return(B+1>>>1)-1}_left(B){return(B<<1)+1}_right(B){return B+1<<1}_greater(B,a){return this._comparator(this._heap[B],this._heap[a])}_swap(B,a){const d=this._heap[B];this._heap[B]=this._heap[a],this._heap[a]=d}_siftUp(){this._siftUpFrom(this.size-1)}_siftUpFrom(B){for(;B>0&&this._greater(B,this._parent(B));)this._swap(B,this._parent(B)),B=this._parent(B)}_siftDown(){let B=0;for(;this._left(B)[]),this.endNodes=Array.from({length:this.len+1},()=>[]);const c=new o(this.bosTokenId,0,0,0,0),p=new o(this.eosTokenId,1,this.len,0,0);this.nodes.push(c.clone()),this.nodes.push(p.clone()),this.beginNodes[this.len].push(p),this.endNodes[0].push(c)}insert(B,a,d,c){const p=this.nodes.length,L=new o(c,p,B,a,d);this.beginNodes[B].push(L),this.endNodes[B+a].push(L),this.nodes.push(L)}viterbi(){const B=this.len;let a=0;for(;a<=B;){if(this.beginNodes[a].length==0)return[];for(let w of this.beginNodes[a]){w.prev=null;let u=0,_=null;for(let y of this.endNodes[a]){const M=y.backtraceScore+w.score;(_===null||M>u)&&(_=y.clone(),u=M)}if(_!==null)w.prev=_,w.backtraceScore=u;else return[]}++a}const d=[],p=this.beginNodes[B][0].prev;if(p===null)return[];let L=p.clone();for(;L.prev!==null;)d.push(L.clone()),L=L.clone().prev.clone();return d.reverse(),d}piece(B){return this.chars.slice(B.pos,B.pos+B.length).join("")}tokens(){return this.viterbi().map(a=>this.piece(a))}tokenIds(){return this.viterbi().map(a=>a.tokenId)}}class o{constructor(B,a,d,c,p){this.tokenId=B,this.nodeId=a,this.pos=d,this.length=c,this.score=p,this.prev=null,this.backtraceScore=0}clone(){const B=new o(this.tokenId,this.nodeId,this.pos,this.length,this.score);return B.prev=this.prev,B.backtraceScore=this.backtraceScore,B}}class C{constructor(B){this.trie=this._buildTrie(B)}_buildTrie(B){const a=Object.create(null);for(const d of B){let c=a;for(let p=0;pc&&a.push(B.slice(c,p)),a.push(w),p+=w.length,c=p):++p}return cthis.capacity&&this.cache.delete(this.cache.keys().next().value)}clear(){this.cache.clear()}}}),"./src/utils/devices.js":((A,g,e)=>{e.r(g),e.d(g,{DEVICE_TYPES:()=>I});const I=Object.freeze({auto:"auto",gpu:"gpu",cpu:"cpu",wasm:"wasm",webgpu:"webgpu",cuda:"cuda",dml:"dml",webnn:"webnn","webnn-npu":"webnn-npu","webnn-gpu":"webnn-gpu","webnn-cpu":"webnn-cpu"})}),"./src/utils/dtypes.js":((A,g,e)=>{e.r(g),e.d(g,{DATA_TYPES:()=>s,DEFAULT_DEVICE_DTYPE_MAPPING:()=>o,DEFAULT_DTYPE_SUFFIX_MAPPING:()=>C,isWebGpuFp16Supported:()=>t});var I=e("./src/env.js"),i=e("./src/utils/devices.js");const t=(function(){let r;return async function(){if(r===void 0)if(!I.apis.IS_WEBGPU_AVAILABLE)r=!1;else try{r=(await navigator.gpu.requestAdapter()).features.has("shader-f16")}catch{r=!1}return r}})(),s=Object.freeze({auto:"auto",fp32:"fp32",fp16:"fp16",q8:"q8",int8:"int8",uint8:"uint8",q4:"q4",bnb4:"bnb4",q4f16:"q4f16"}),o=Object.freeze({[i.DEVICE_TYPES.wasm]:s.q8}),C=Object.freeze({[s.fp32]:"",[s.fp16]:"_fp16",[s.int8]:"_int8",[s.uint8]:"_uint8",[s.q8]:"_quantized",[s.q4]:"_q4",[s.q4f16]:"_q4f16",[s.bnb4]:"_bnb4"})}),"./src/utils/generic.js":((A,g,e)=>{e.r(g),e.d(g,{Callable:()=>I});const I=class{constructor(){let i=function(...t){return i._call(...t)};return Object.setPrototypeOf(i,new.target.prototype)}_call(...i){throw Error("Must implement _call method in subclass")}}}),"./src/utils/hub.js":((A,g,e)=>{e.r(g),e.d(g,{MAX_EXTERNAL_DATA_CHUNKS:()=>o,getFile:()=>d,getModelFile:()=>u,getModelJSON:()=>y,getModelText:()=>_});var I=e("?7992"),i=e("?5af5"),t=e("./src/env.js"),s=e("./src/utils/core.js");const o=100,C={txt:"text/plain",html:"text/html",css:"text/css",js:"text/javascript",json:"application/json",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif"};class r{constructor(G){if(this.filePath=G,this.headers=new Headers,this.exists=I.existsSync(G),this.exists){this.status=200,this.statusText="OK";let T=I.statSync(G);this.headers.set("content-length",T.size.toString()),this.updateContentType();const J=I.createReadStream(G);this.body=new ReadableStream({start(Z){J.on("data",z=>Z.enqueue(z)),J.on("end",()=>Z.close()),J.on("error",z=>Z.error(z))},cancel(){J.destroy()}})}else this.status=404,this.statusText="Not Found",this.body=null}updateContentType(){const G=this.filePath.toString().split(".").pop().toLowerCase();this.headers.set("content-type",C[G]??"application/octet-stream")}clone(){let G=new r(this.filePath);return G.exists=this.exists,G.status=this.status,G.statusText=this.statusText,G.headers=new Headers(this.headers),G}async arrayBuffer(){return(await I.promises.readFile(this.filePath)).buffer}async blob(){const G=await I.promises.readFile(this.filePath);return new Blob([G],{type:this.headers.get("content-type")})}async text(){return await I.promises.readFile(this.filePath,"utf8")}async json(){return JSON.parse(await this.text())}}function Q(m,G=null,T=null){let J;try{J=new URL(m)}catch{return!1}return!(G&&!G.includes(J.protocol)||T&&!T.includes(J.hostname))}const B=/^(\b[\w\-.]+\b\/)?\b[\w\-.]{1,96}\b$/;function a(m){return!(!B.test(m)||m.includes("..")||m.includes("--")||m.endsWith(".git")||m.endsWith(".ipynb"))}async function d(m){if(t.env.useFS&&!Q(m,["http:","https:","blob:"]))return new r(m instanceof URL?m.protocol==="file:"?m.pathname:m.toString():m);if(typeof process<"u"&&process?.release?.name==="node"){const G=!!kr?.TESTING_REMOTELY,T=t.env.version,J=new Headers;if(J.set("User-Agent",`transformers.js/${T}; is_ci/${G};`),Q(m,["http:","https:"],["huggingface.co","hf.co"])){const z=kr?.HF_TOKEN??kr?.HF_ACCESS_TOKEN;z&&J.set("Authorization",`Bearer ${z}`)}return fetch(m,{headers:J})}else return fetch(m)}const c={400:"Bad request error occurred while trying to load file",401:"Unauthorized access to file",403:"Forbidden access to file",404:"Could not locate file",408:"Request timeout error occurred while trying to load file",500:"Internal server error error occurred while trying to load file",502:"Bad gateway error occurred while trying to load file",503:"Service unavailable error occurred while trying to load file",504:"Gateway timeout error occurred while trying to load file"};function p(m,G,T){if(!T)return null;const J=c[m]??`Error (${m}) occurred while trying to load file`;throw Error(`${J}: "${G}".`)}class L{constructor(G){this.path=G}async match(G){let T=i.join(this.path,G),J=new r(T);if(J.exists)return J}async put(G,T,J=void 0){let Z=i.join(this.path,G);try{const z=T.headers.get("Content-Length"),P=parseInt(z??"0");let tA=0;await I.promises.mkdir(i.dirname(Z),{recursive:!0});const AA=I.createWriteStream(Z),iA=T.body.getReader();for(;;){const{done:rA,value:CA}=await iA.read();if(rA)break;await new Promise((uA,v)=>{AA.write(CA,x=>{if(x){v(x);return}uA()})}),tA+=CA.length;const cA=P?tA/P*100:0;J?.({progress:cA,loaded:tA,total:P})}AA.close()}catch(z){try{await I.promises.unlink(Z)}catch{}throw z}}}async function w(m,...G){for(let T of G)try{let J=await m.match(T);if(J)return J}catch{continue}}async function u(m,G,T=!0,J={},Z=!1){if(!t.env.allowLocalModels){if(J.local_files_only)throw Error("Invalid configuration detected: local models are disabled (`env.allowLocalModels=false`) but you have requested to only use local models (`local_files_only=true`).");if(!t.env.allowRemoteModels)throw Error("Invalid configuration detected: both local and remote models are disabled. Fix by setting `env.allowLocalModels` or `env.allowRemoteModels` to `true`.")}(0,s.dispatchCallback)(J.progress_callback,{status:"initiate",name:m,file:G});let z;if(!z&&t.env.useCustomCache){if(!t.env.customCache)throw Error("`env.useCustomCache=true`, but `env.customCache` is not defined.");if(!t.env.customCache.match||!t.env.customCache.put)throw new Error("`env.customCache` must be an object which implements the `match` and `put` functions of the Web Cache API. For more information, see https://developer.mozilla.org/en-US/docs/Web/API/Cache");z=t.env.customCache}if(!z&&t.env.useBrowserCache){if(typeof caches>"u")throw Error("Browser cache is not available in this environment.");try{z=await caches.open("transformers-cache")}catch(nA){console.warn("An error occurred while opening the browser cache:",nA)}}if(!z&&t.env.useFSCache){if(!t.apis.IS_FS_AVAILABLE)throw Error("File System Cache is not available in this environment.");z=new L(J.cache_dir??t.env.cacheDir)}const P=J.revision??"main",tA=F(m,G),AA=a(m),iA=AA?F(t.env.localModelPath,tA):tA,rA=F(t.env.remoteHost,t.env.remotePathTemplate.replaceAll("{model}",m).replaceAll("{revision}",encodeURIComponent(P)),G);let CA;const cA=z instanceof L?P==="main"?tA:F(m,P,G):rA;let uA=!1,v;z&&(v=await w(z,iA,cA));const x=v!==void 0;if(v===void 0){if(t.env.allowLocalModels)if(Q(tA,["http:","https:"])){if(J.local_files_only)throw new Error(`\`local_files_only=true\`, but attempted to load a remote file from: ${tA}.`);if(!t.env.allowRemoteModels)throw new Error(`\`env.allowRemoteModels=false\`, but attempted to load a remote file from: ${tA}.`)}else try{v=await d(iA),CA=iA}catch(xA){console.warn(`Unable to load from local path "${iA}": "${xA}"`)}if(v===void 0||v.status===404){if(J.local_files_only||!t.env.allowRemoteModels){if(T)throw Error(`\`local_files_only=true\` or \`env.allowRemoteModels=false\` and file was not found locally at "${iA}".`);return null}if(!AA)throw Error(`Local file missing at "${iA}" and download aborted due to invalid model ID "${m}".`);if(v=await d(rA),v.status!==200)return p(v.status,rA,T);CA=cA}uA=z&&typeof Response<"u"&&v instanceof Response&&v.status===200}(0,s.dispatchCallback)(J.progress_callback,{status:"download",name:m,file:G});let $;if(!(t.apis.IS_NODE_ENV&&Z)){let nA;J.progress_callback?x&&typeof navigator<"u"&&/firefox/i.test(navigator.userAgent)?(nA=new Uint8Array(await v.arrayBuffer()),(0,s.dispatchCallback)(J.progress_callback,{status:"progress",name:m,file:G,progress:100,loaded:nA.length,total:nA.length})):nA=await M(v,xA=>{(0,s.dispatchCallback)(J.progress_callback,{status:"progress",name:m,file:G,...xA})}):nA=new Uint8Array(await v.arrayBuffer()),$=nA}if(uA&&CA&&await z.match(CA)===void 0)if($)await z.put(CA,new Response($,{headers:v.headers})).catch(nA=>{console.warn(`Unable to add response to browser cache: ${nA}.`)});else{const nA=J.progress_callback?xA=>(0,s.dispatchCallback)(J.progress_callback,{status:"progress",name:m,file:G,...xA}):void 0;await z.put(CA,v,nA)}if((0,s.dispatchCallback)(J.progress_callback,{status:"done",name:m,file:G}),$){if(!t.apis.IS_NODE_ENV&&Z)throw new Error("Cannot return path in a browser environment.");return $}if(v instanceof r)return v.filePath;const W=await z?.match(CA);if(W instanceof r)return W.filePath;if(W instanceof Response)return new Uint8Array(await W.arrayBuffer());if(typeof W=="string")return W;throw new Error("Unable to get model file path or buffer.")}async function _(m,G,T=!0,J={}){const Z=await u(m,G,T,J,!1);return Z===null?null:new TextDecoder("utf-8").decode(Z)}async function y(m,G,T=!0,J={}){const Z=await _(m,G,T,J);return Z===null?{}:JSON.parse(Z)}async function M(m,G){const T=m.headers.get("Content-Length");T===null&&console.warn("Unable to determine content-length from response headers. Will expand buffer when needed.");let J=parseInt(T??"0"),Z=new Uint8Array(J),z=0;const P=m.body.getReader();async function tA(){const{done:AA,value:iA}=await P.read();if(AA)return;const rA=z+iA.length;if(rA>J){J=rA;const cA=new Uint8Array(J);cA.set(Z),Z=cA}Z.set(iA,z),z=rA;const CA=z/J*100;return G({progress:CA,loaded:z,total:J}),tA()}return await tA(),Z}function F(...m){return m=m.map((G,T)=>(T&&(G=G.replace(new RegExp("^/"),"")),T!==m.length-1&&(G=G.replace(new RegExp("/$"),"")),G)),m.join("/")}}),"./src/utils/image.js":((A,g,e)=>{e.r(g),e.d(g,{RawImage:()=>c,load_image:()=>p});var I=e("./src/utils/core.js"),i=e("./src/utils/hub.js"),t=e("./src/env.js"),s=e("./src/utils/tensor.js"),o=e("?2b25");let C,r,Q;const B=t.apis.IS_BROWSER_ENV||t.apis.IS_WEBWORKER_ENV;if(B)C=(L,w)=>{if(!self.OffscreenCanvas)throw new Error("OffscreenCanvas not supported by this browser.");return new self.OffscreenCanvas(L,w)},Q=self.createImageBitmap,r=self.ImageData;else if(o)Q=async L=>{const u=(await L.metadata()).channels,{data:_,info:y}=await L.rotate().raw().toBuffer({resolveWithObject:!0}),M=new c(new Uint8ClampedArray(_),y.width,y.height,y.channels);return u!==void 0&&u!==y.channels&&M.convert(u),M};else throw new Error("Unable to load image processing library.");const a={0:"nearest",1:"lanczos",2:"bilinear",3:"bicubic",4:"box",5:"hamming"},d=new Map([["png","image/png"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["gif","image/gif"]]);class c{constructor(w,u,_,y){this.data=w,this.width=u,this.height=_,this.channels=y}get size(){return[this.width,this.height]}static async read(w){if(w instanceof c)return w;if(typeof w=="string"||w instanceof URL)return await this.fromURL(w);if(w instanceof Blob)return await this.fromBlob(w);if(typeof HTMLCanvasElement<"u"&&w instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&w instanceof OffscreenCanvas)return this.fromCanvas(w);throw new Error(`Unsupported input type: ${typeof w}`)}static fromCanvas(w){if(!B)throw new Error("fromCanvas() is only supported in browser environments.");const _=w.getContext("2d").getImageData(0,0,w.width,w.height).data;return new c(_,w.width,w.height,4)}static async fromURL(w){const u=await(0,i.getFile)(w);if(u.status!==200)throw new Error(`Unable to read image from "${w}" (${u.status} ${u.statusText})`);const _=await u.blob();return this.fromBlob(_)}static async fromBlob(w){if(B){const u=await Q(w),_=C(u.width,u.height).getContext("2d");return _.drawImage(u,0,0),new this(_.getImageData(0,0,u.width,u.height).data,u.width,u.height,4)}else{const u=o(await w.arrayBuffer());return await Q(u)}}static fromTensor(w,u="CHW"){if(w.dims.length!==3)throw new Error(`Tensor should have 3 dimensions, but has ${w.dims.length} dimensions.`);if(u==="CHW")w=w.transpose(1,2,0);else if(u!=="HWC")throw new Error(`Unsupported channel format: ${u}`);if(!(w.data instanceof Uint8ClampedArray||w.data instanceof Uint8Array))throw new Error(`Unsupported tensor type: ${w.type}`);switch(w.dims[2]){case 1:case 2:case 3:case 4:return new c(w.data,w.dims[1],w.dims[0],w.dims[2]);default:throw new Error(`Unsupported number of channels: ${w.dims[2]}`)}}grayscale(){if(this.channels===1)return this;const w=new Uint8ClampedArray(this.width*this.height*1);switch(this.channels){case 3:case 4:for(let u=0,_=0;u=0?G=_:J=-_,y>=0?T=y:Z=-y,m.drawImage(F,G,T,w,u,J,Z,w,u),new c(m.getImageData(0,0,w,u).data,w,u,4).convert(M)}else{let M=this.toSharp();if(_>=0&&y>=0)M=M.extract({left:Math.floor(_),top:Math.floor(y),width:w,height:u});else if(_<=0&&y<=0){const F=Math.floor(-y),m=Math.floor(-_);M=M.extend({top:F,left:m,right:w-this.width-m,bottom:u-this.height-F})}else{let F=[0,0],m=0;y<0?(F[0]=Math.floor(-y),F[1]=u-this.height-F[0]):m=Math.floor(y);let G=[0,0],T=0;_<0?(G[0]=Math.floor(-_),G[1]=w-this.width-G[0]):T=Math.floor(_),M=M.extend({top:F[0],bottom:F[1],left:G[0],right:G[1]}).extract({left:T,top:m,width:w,height:u})}return await Q(M)}}async toBlob(w="image/png",u=1){if(!B)throw new Error("toBlob() is only supported in browser environments.");return await this.toCanvas().convertToBlob({type:w,quality:u})}toTensor(w="CHW"){let u=new s.Tensor("uint8",new Uint8Array(this.data),[this.height,this.width,this.channels]);if(w!=="HWC")if(w==="CHW")u=u.permute(2,0,1);else throw new Error(`Unsupported channel format: ${w}`);return u}toCanvas(){if(!B)throw new Error("toCanvas() is only supported in browser environments.");const w=this.clone().rgba(),u=C(w.width,w.height),_=new r(w.data,w.width,w.height);return u.getContext("2d").putImageData(_,0,0),u}split(){const{data:w,width:u,height:_,channels:y}=this,M=w.constructor,F=w.length/y,m=Array.from({length:y},()=>new M(F));for(let G=0;Gnew c(G,u,_,1))}_update(w,u,_,y=null){return this.data=w,this.width=u,this.height=_,y!==null&&(this.channels=y),this}clone(){return new c(this.data.slice(),this.width,this.height,this.channels)}convert(w){if(this.channels===w)return this;switch(w){case 1:this.grayscale();break;case 3:this.rgb();break;case 4:this.rgba();break;default:throw new Error(`Conversion failed due to unsupported number of channels: ${this.channels}`)}return this}async save(w){if(B){if(t.apis.IS_WEBWORKER_ENV)throw new Error("Unable to save an image from a Web Worker.");const u=w.split(".").pop().toLowerCase(),_=d.get(u)??"image/png",y=await this.toBlob(_);(0,I.saveBlob)(w,y)}else{if(t.apis.IS_FS_AVAILABLE)return await this.toSharp().toFile(w);throw new Error("Unable to save the image because filesystem is disabled in this environment.")}}toSharp(){if(B)throw new Error("toSharp() is only supported in server-side environments.");return o(this.data,{raw:{width:this.width,height:this.height,channels:this.channels}})}}const p=c.read.bind(c)}),"./src/utils/maths.js":((A,g,e)=>{e.r(g),e.d(g,{FFT:()=>p,bankers_round:()=>u,cos_sim:()=>C,dot:()=>o,dynamic_time_warping:()=>_,interpolate_data:()=>I,log_softmax:()=>s,magnitude:()=>r,max:()=>B,medianFilter:()=>L,min:()=>Q,permute_data:()=>i,round:()=>w,softmax:()=>t});function I(y,[M,F,m],[G,T],J="bilinear",Z=!1){const z=T/m,P=G/F,tA=new y.constructor(G*T*M),AA=F*m,iA=G*T;for(let rA=0;rA=0;--Z)G[Z]=z,m[Z]=M[F[Z]],z*=m[Z];const T=F.map((Z,z)=>G[F.indexOf(z)]),J=new y.constructor(y.length);for(let Z=0;Z=0;--P)z+=tA%M[P]*T[P],tA=Math.floor(tA/M[P]);J[z]=y[Z]}return[J,m]}function t(y){const M=B(y)[0],F=y.map(T=>Math.exp(T-M)),m=F.reduce((T,J)=>T+J,0);return F.map(T=>T/m)}function s(y){const M=B(y)[0];let F=0;for(let T=0;TT-M-m)}function o(y,M){let F=0;for(let m=0;mM+F*F,0))}function Q(y){if(y.length===0)throw Error("Array must not be empty");let M=y[0],F=0;for(let m=1;mM&&(M=y[m],F=m);return[M,F]}function a(y){return y>0&&(y&y-1)===0}class d{constructor(M){if(this.size=M|0,this.size<=1||!a(this.size))throw new Error("FFT size must be a power of two larger than 1");this._csize=M<<1,this.table=new Float64Array(this.size*2);for(let m=0;mm;m<<=1)++F;this._width=F%2===0?F-1:F,this._bitrev=new Int32Array(1<>>G&3)<>>1);for(let G=0;G>>1]=M[G];return m}toComplexArray(M,F){const m=F||this.createComplexArray();for(let G=0;G>>1],m[G+1]=0;return m}transform(M,F){if(M===F)throw new Error("Input and output buffers must be different");this._transform4(M,F,1)}realTransform(M,F){if(M===F)throw new Error("Input and output buffers must be different");this._realTransform4(M,F,1)}inverseTransform(M,F){if(M===F)throw new Error("Input and output buffers must be different");this._transform4(M,F,-1);for(let m=0;m>=2;J>=2;J>>=2){Z=G/J<<1;const iA=Z>>>2;for(z=0;z>>1,J>>>1)}else for(z=0,P=0;z>>1,J>>>1,m)}const AA=this.table;for(J>>=2;J>=2;J>>=2){Z=G/J<<1;const rA=Z>>>1,CA=rA>>>1,cA=CA>>>1;for(z=0;z>>1;for(let rA=2;rA>1;++tA){const AA=(tA+1-M)**2/2,iA=Math.sqrt(z**2+P**2)**AA,rA=AA*Math.atan2(P,z),CA=2*tA;T[CA]=iA*Math.cos(rA),T[CA+1]=iA*Math.sin(rA),J[CA]=T[CA],J[CA+1]=-T[CA+1]}this._slicedChirpBuffer=T.subarray(F,m),this._f=new d(G>>1),this._f.transform(this._chirpBuffer,J)}_transform(M,F,m){const G=this._buffer1,T=this._buffer2,J=this._outBuffer1,Z=this._outBuffer2,z=this._chirpBuffer,P=this._slicedChirpBuffer,tA=this._a;if(m)for(let AA=0;AA>1,CA=F[rA];G[AA]=CA*P[AA],G[iA]=CA*P[iA]}else for(let AA=0;AA=y.length&&(z=2*(y.length-1)-z),m[J++]=y[z]}m.sort(),F[T]=m[G]}return F}function w(y,M){const F=Math.pow(10,M);return Math.round(y*F)/F}function u(y){const M=Math.round(y);return Math.abs(y)%1===.5?M%2===0?M:M-1:M}function _(y){const M=y.length,F=y[0].length,m=[M+1,F+1],G=Array.from({length:m[0]},()=>Array(m[1]).fill(1/0));G[0][0]=0;const T=Array.from({length:m[0]},()=>Array(m[1]).fill(-1));for(let tA=1;tA0||Z>0;)switch(z.push(J-1),P.push(Z-1),T[J][Z]){case 0:--J,--Z;break;case 1:--J;break;case 2:--Z;break;default:throw new Error(`Internal error in dynamic time warping. Unexpected trace[${J}, ${Z}]. Please file a bug report.`)}return z.reverse(),P.reverse(),[z,P]}}),"./src/utils/tensor.js":((A,g,e)=>{e.r(g),e.d(g,{DataTypeMap:()=>s,Tensor:()=>o,cat:()=>F,full:()=>P,full_like:()=>tA,interpolate:()=>Q,interpolate_4d:()=>B,layer_norm:()=>u,matmul:()=>a,mean:()=>J,mean_pooling:()=>w,ones:()=>AA,ones_like:()=>iA,permute:()=>r,quantize_embeddings:()=>uA,rand:()=>cA,rfft:()=>d,slice:()=>L,stack:()=>m,std_mean:()=>T,topk:()=>c,zeros:()=>rA,zeros_like:()=>CA});var I=e("./src/utils/maths.js"),i=e("./src/backends/onnx.js"),t=e("./src/ops/registry.js");const s=Object.freeze({float32:Float32Array,float16:typeof Float16Array<"u"?Float16Array:Uint16Array,float64:Float64Array,string:Array,int8:Int8Array,uint8:Uint8Array,int16:Int16Array,uint16:Uint16Array,int32:Int32Array,uint32:Uint32Array,int64:BigInt64Array,uint64:BigUint64Array,bool:Uint8Array,uint4:Uint8Array,int4:Int8Array});class o{get dims(){return this.ort_tensor.dims}set dims(x){this.ort_tensor.dims=x}get type(){return this.ort_tensor.type}get data(){return this.ort_tensor.data}get size(){return this.ort_tensor.size}get location(){return this.ort_tensor.location}ort_tensor;constructor(...x){return(0,i.isONNXTensor)(x[0])?this.ort_tensor=x[0]:this.ort_tensor=new i.Tensor(x[0],x[1],x[2]),new Proxy(this,{get:($,W)=>{if(typeof W=="string"){let nA=Number(W);if(Number.isInteger(nA))return $._getitem(nA)}return $[W]},set:($,W,nA)=>$[W]=nA})}dispose(){this.ort_tensor.dispose()}*[Symbol.iterator](){const[x,...$]=this.dims;if($.length>0){const W=$.reduce((nA,xA)=>nA*xA);for(let nA=0;nA0){const nA=W.reduce((xA,RA)=>xA*RA);return this._subarray(x,nA,W)}else return new o(this.type,[this.data[x]],W)}indexOf(x){const $=this.data;for(let W=0;W<$.length;++W)if($[W]==x)return W;return-1}_subarray(x,$,W){const nA=x*$,xA=(x+1)*$,RA="subarray"in this.data?this.data.subarray(nA,xA):this.data.slice(nA,xA);return new o(this.type,RA,W)}item(){const x=this.data;if(x.length!==1)throw new Error(`a Tensor with ${x.length} elements cannot be converted to Scalar`);return x[0]}tolist(){return C(this.data,this.dims)}sigmoid(){return this.clone().sigmoid_()}sigmoid_(){const x=this.data;for(let $=0;$LA)throw new Error(`Invalid slice: ${q}`);const JA=[Math.max(wA,0),Math.min(LA,this.dims[X])];W.push(JA),$.push(JA[1]-JA[0])}else throw new Error(`Invalid slice: ${q}`)}const nA=W.map(([X,q])=>q-X),xA=nA.reduce((X,q)=>X*q),RA=this.data,vA=new RA.constructor(xA),ie=this.stride();let kA=!0;for(let X=1;X=0;--wA){const JA=nA[wA];q+=(LA%JA+W[wA][0])*ie[wA],LA=Math.floor(LA/JA)}vA[X]=RA[q]}return new o(this.type,vA,$)}permute(...x){return r(this,x)}transpose(...x){return this.permute(...x)}sum(x=null,$=!1){return this.norm(1,x,$)}norm(x="fro",$=null,W=!1){if(x==="fro")x=2;else if(typeof x=="string")throw Error(`Unsupported norm: ${x}`);const nA=this.data,xA=(kA,X)=>kA+X**x;if($===null){const kA=nA.reduce(xA,0)**(1/x);return new o(this.type,[kA],[])}const[RA,vA,ie]=G(xA,this,$,W);if(x!==1)for(let kA=0;kA=0;--ie){const q=this.dims[ie];if(ie!==$){const wA=kA%q;vA+=wA*X,X*=this.dims[ie]}kA=Math.floor(kA/q)}nA[RA]/=xA[vA]}return this}normalize(x=2,$=1){return this.clone().normalize_(x,$)}stride(){return Z(this.dims)}squeeze(x=null){return new o(this.type,this.data,_(this.dims,x))}squeeze_(x=null){return this.dims=_(this.dims,x),this}unsqueeze(x=null){return new o(this.type,this.data,y(this.dims,x))}unsqueeze_(x=null){return this.dims=y(this.dims,x),this}flatten_(x=0,$=-1){$=($+this.dims.length)%this.dims.length;let W=this.dims.slice(0,x),nA=this.dims.slice(x,$+1),xA=this.dims.slice($+1);return this.dims=[...W,nA.reduce((RA,vA)=>RA*vA,1),...xA],this}flatten(x=0,$=-1){return this.clone().flatten_(x,$)}view(...x){let $=-1;for(let nA=0;nAvA!==$?xA*RA:xA,1);x[$]=W.length/nA}return new o(this.type,W,x)}neg_(){const x=this.data;for(let $=0;$x?1:0;return new o("bool",$,this.dims)}lt(x){const $=new Uint8Array(this.data.length),W=this.data;for(let nA=0;nAMath.min(RA,vA),this,x,$,1/0);return new o(W,nA,xA)}max(x=null,$=!1){if(x===null){const RA=(0,I.max)(this.data)[0];return new o(this.type,[RA],[])}const[W,nA,xA]=G((RA,vA)=>Math.max(RA,vA),this,x,$,-1/0);return new o(W,nA,xA)}argmin(x=null,$=!1){if(x!==null)throw new Error("`dim !== null` not yet implemented.");const W=(0,I.min)(this.data)[1];return new o("int64",[BigInt(W)],[])}argmax(x=null,$=!1){if(x!==null)throw new Error("`dim !== null` not yet implemented.");const W=(0,I.max)(this.data)[1];return new o("int64",[BigInt(W)],[])}to(x){if(this.type===x)return this;if(!s.hasOwnProperty(x))throw new Error(`Unsupported type: ${x}`);let $;const W=["int64","uint64"].includes(this.type),nA=["int64","uint64"].includes(x);return W&&!nA?$=Number:!W&&nA&&($=BigInt),new o(x,s[x].from(this.data,$),this.dims)}}function C(v,x){const $=v.length,W=x.reduce((xA,RA)=>xA*RA);if($!==W)throw Error(`cannot reshape array of size ${$} into shape (${x})`);let nA=v;for(let xA=x.length-1;xA>=0;xA--)nA=nA.reduce((RA,vA)=>{let ie=RA[RA.length-1];return ie.lengthnew o("int64",v,[v.length]);async function L(v,x,$,W,nA){return await(await t.TensorOpRegistry.slice)({x:v,s:p(x),e:p($),a:p(W),t:p(nA??new Array(W.length).fill(1))})}function w(v,x){const $=v.data,W=x.data,nA=[v.dims[0],v.dims[2]],xA=new $.constructor(nA[0]*nA[1]),[RA,vA,ie]=v.dims;let kA=0;for(let X=0;X$!==1):typeof x=="number"?v[x]===1&&v.splice(x,1):Array.isArray(x)&&(v=v.filter(($,W)=>$!==1||!x.includes(W))),v}function y(v,x){return x=M(x,v.length+1),v=v.slice(),v.splice(x,0,1),v}function M(v,x,$=null,W=!0){if(v<-x||v>=x){if(W)throw new Error(`IndexError: index ${v} is out of bounds for dimension${$===null?"":" "+$} with size ${x}`);return v<-x?0:x}return v<0&&(v=(v%x+x)%x),v}function F(v,x=0){x=M(x,v[0].dims.length);const $=v[0].dims.slice();$[x]=v.reduce((RA,vA)=>RA+vA.dims[x],0);const W=$.reduce((RA,vA)=>RA*vA,1),nA=new v[0].data.constructor(W),xA=v[0].type;if(x===0){let RA=0;for(const vA of v){const ie=vA.data;nA.set(ie,RA),RA+=ie.length}}else{let RA=0;for(let vA=0;vA=0;--wA){const GA=kA[wA];let fA=LA%GA;wA===x&&(fA+=RA),q+=fA*JA,JA*=$[wA],LA=Math.floor(LA/GA)}nA[q]=ie[X]}RA+=kA[x]}}return new o(xA,nA,$)}function m(v,x=0){return F(v.map($=>$.unsqueeze(x)),x)}function G(v,x,$=null,W=!1,nA=null){const xA=x.data,RA=x.dims;$=M($,RA.length);const vA=RA.slice();vA[$]=1;const ie=new xA.constructor(xA.length/RA[$]);nA!==null&&ie.fill(nA);for(let kA=0;kA=0;--q){const JA=RA[q];if(q!==$){const GA=wA%JA;X+=GA*LA,LA*=vA[q]}wA=Math.floor(wA/JA)}ie[X]=v(ie[X],xA[kA],kA,X)}return W||vA.splice($,1),[x.type,ie,vA]}function T(v,x=null,$=1,W=!1){const nA=v.data,xA=v.dims;if(x===null){const LA=nA.reduce((_A,dA)=>_A+dA,0)/nA.length,JA=Math.sqrt(nA.reduce((_A,dA)=>_A+(dA-LA)**2,0)/(nA.length-$)),GA=new o(v.type,[LA],[]);return[new o(v.type,[JA],[]),GA]}x=M(x,xA.length);const RA=J(v,x,W),vA=RA.data,[ie,kA,X]=G((wA,LA,JA,GA)=>wA+(LA-vA[GA])**2,v,x,W);for(let wA=0;wAkA+X,0);return new o(v.type,[ie/nA.length],[])}x=M(x,W.length);const[xA,RA,vA]=G((ie,kA)=>ie+kA,v,x,$);if(W[x]!==1)for(let ie=0;ie=0;--$)x[$]=W,W*=v[$];return x}function z(v,x,$,W){const nA=v.reduce((xA,RA)=>xA*RA,1);return new o($,new W(nA).fill(x),v)}function P(v,x){let $,W;if(typeof x=="number")$="float32",W=Float32Array;else if(typeof x=="bigint")$="int64",W=BigInt64Array;else if(typeof x=="boolean")$="bool",W=Uint8Array;else throw new Error(`Unsupported data type: ${typeof x}`);return z(v,x,$,W)}function tA(v,x){return P(v.dims,x)}function AA(v){return z(v,1n,"int64",BigInt64Array)}function iA(v){return AA(v.dims)}function rA(v){return z(v,0n,"int64",BigInt64Array)}function CA(v){return rA(v.dims)}function cA(v){const x=v.reduce(($,W)=>$*W,1);return new o("float32",Float32Array.from({length:x},()=>Math.random()),v)}function uA(v,x){if(v.dims.length!==2)throw new Error("The tensor must have 2 dimensions");if(v.dims.at(-1)%8!==0)throw new Error("The last dimension of the tensor must be a multiple of 8");if(!["binary","ubinary"].includes(x))throw new Error("The precision must be either 'binary' or 'ubinary'");const $=x==="binary",W=$?"int8":"uint8",nA=$?Int8Array:Uint8Array,xA=v.data,RA=new nA(xA.length/8);for(let vA=0;vA0?1:0,kA=Math.floor(vA/8),X=vA%8;RA[kA]|=ie<<7-X,$&&X===0&&(RA[kA]-=128)}return new o(W,RA,[v.dims[0],v.dims[1]/8])}}),"./src/utils/video.js":((A,g,e)=>{e.r(g),e.d(g,{RawVideo:()=>s,RawVideoFrame:()=>t,load_video:()=>o});var I=e("./src/utils/image.js"),i=e("./src/env.js");class t{constructor(r,Q){this.image=r,this.timestamp=Q}}class s{constructor(r,Q){r.length>0&&r[0]instanceof I.RawImage&&(r=r.map((B,a)=>new t(B,(a+1)/(r.length+1)*Q))),this.frames=r,this.duration=Q}get width(){return this.frames[0].image.width}get height(){return this.frames[0].image.height}get fps(){return this.frames.length/this.duration}}async function o(C,{num_frames:r=null,fps:Q=null}={}){if(!i.apis.IS_BROWSER_ENV)throw new Error("`load_video` is currently only supported in browser environments.");if(r==null&&Q==null)throw new Error("Either num_frames or fps must be provided.");const B=[],a=document.createElement("video");if(a.crossOrigin="anonymous",a.muted=!0,typeof C=="string")a.src=C;else if(C instanceof Blob)a.src=URL.createObjectURL(C);else if(C instanceof HTMLVideoElement)a.src=C.src;else throw new Error("Invalid URL or video element provided.");if(await new Promise(_=>a.onloadedmetadata=_),a.seekable.start(0)===a.seekable.end(0)){const y=await(await fetch(a.src)).blob();a.src=URL.createObjectURL(y),await new Promise(M=>a.onloadedmetadata=M)}const d=a.duration;let c,p;r!=null?(c=r,p=r===1?0:d/(r-1)):(p=1/Q,c=Math.floor(d/p));let L=[];for(let _=0;_{a.onseeked=m}),u.drawImage(a,0,0,w.width,w.height);const y=u.getImageData(0,0,w.width,w.height),M=new I.RawImage(y.data,w.width,w.height,4),F=new t(M,_);B.push(F)}return a.remove(),new s(B,d)}})},Ih={};function Oe(A){var g=Ih[A];if(g!==void 0)return g.exports;var e=Ih[A]={exports:{}};return Ky[A](e,e.exports,Oe),e.exports}(()=>{var A=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,g;Oe.t=function(e,I){if(I&1&&(e=this(e)),I&8||typeof e=="object"&&e&&(I&4&&e.__esModule||I&16&&typeof e.then=="function"))return e;var i=Object.create(null);Oe.r(i);var t={};g=g||[null,A({}),A([]),A(A)];for(var s=I&2&&e;typeof s=="object"&&!~g.indexOf(s);s=A(s))Object.getOwnPropertyNames(s).forEach(o=>t[o]=()=>e[o]);return t.default=()=>e,Oe.d(i,t),i}})();Oe.d=(A,g)=>{for(var e in g)Oe.o(g,e)&&!Oe.o(A,e)&&Object.defineProperty(A,e,{enumerable:!0,get:g[e]})};Oe.o=(A,g)=>Object.prototype.hasOwnProperty.call(A,g);Oe.r=A=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var E={};(()=>{/*!*****************************!*\ !*** ./src/transformers.js ***! \*****************************/Oe.r(E),Oe.d(E,{ASTFeatureExtractor:()=>B.ASTFeatureExtractor,ASTForAudioClassification:()=>e.ASTForAudioClassification,ASTModel:()=>e.ASTModel,ASTPreTrainedModel:()=>e.ASTPreTrainedModel,AlbertForMaskedLM:()=>e.AlbertForMaskedLM,AlbertForQuestionAnswering:()=>e.AlbertForQuestionAnswering,AlbertForSequenceClassification:()=>e.AlbertForSequenceClassification,AlbertModel:()=>e.AlbertModel,AlbertPreTrainedModel:()=>e.AlbertPreTrainedModel,AlbertTokenizer:()=>I.AlbertTokenizer,ArceeForCausalLM:()=>e.ArceeForCausalLM,ArceeModel:()=>e.ArceeModel,ArceePreTrainedModel:()=>e.ArceePreTrainedModel,AudioClassificationPipeline:()=>g.AudioClassificationPipeline,AutoConfig:()=>i.AutoConfig,AutoFeatureExtractor:()=>a.AutoFeatureExtractor,AutoImageProcessor:()=>p.AutoImageProcessor,AutoModel:()=>e.AutoModel,AutoModelForAudioClassification:()=>e.AutoModelForAudioClassification,AutoModelForAudioFrameClassification:()=>e.AutoModelForAudioFrameClassification,AutoModelForAudioTextToText:()=>e.AutoModelForAudioTextToText,AutoModelForCTC:()=>e.AutoModelForCTC,AutoModelForCausalLM:()=>e.AutoModelForCausalLM,AutoModelForDepthEstimation:()=>e.AutoModelForDepthEstimation,AutoModelForDocumentQuestionAnswering:()=>e.AutoModelForDocumentQuestionAnswering,AutoModelForImageClassification:()=>e.AutoModelForImageClassification,AutoModelForImageFeatureExtraction:()=>e.AutoModelForImageFeatureExtraction,AutoModelForImageMatting:()=>e.AutoModelForImageMatting,AutoModelForImageSegmentation:()=>e.AutoModelForImageSegmentation,AutoModelForImageTextToText:()=>e.AutoModelForImageTextToText,AutoModelForImageToImage:()=>e.AutoModelForImageToImage,AutoModelForMaskGeneration:()=>e.AutoModelForMaskGeneration,AutoModelForMaskedLM:()=>e.AutoModelForMaskedLM,AutoModelForNormalEstimation:()=>e.AutoModelForNormalEstimation,AutoModelForObjectDetection:()=>e.AutoModelForObjectDetection,AutoModelForPoseEstimation:()=>e.AutoModelForPoseEstimation,AutoModelForQuestionAnswering:()=>e.AutoModelForQuestionAnswering,AutoModelForSemanticSegmentation:()=>e.AutoModelForSemanticSegmentation,AutoModelForSeq2SeqLM:()=>e.AutoModelForSeq2SeqLM,AutoModelForSequenceClassification:()=>e.AutoModelForSequenceClassification,AutoModelForSpeechSeq2Seq:()=>e.AutoModelForSpeechSeq2Seq,AutoModelForTextToSpectrogram:()=>e.AutoModelForTextToSpectrogram,AutoModelForTextToWaveform:()=>e.AutoModelForTextToWaveform,AutoModelForTokenClassification:()=>e.AutoModelForTokenClassification,AutoModelForUniversalSegmentation:()=>e.AutoModelForUniversalSegmentation,AutoModelForVision2Seq:()=>e.AutoModelForVision2Seq,AutoModelForXVector:()=>e.AutoModelForXVector,AutoModelForZeroShotObjectDetection:()=>e.AutoModelForZeroShotObjectDetection,AutoProcessor:()=>u.AutoProcessor,AutoTokenizer:()=>I.AutoTokenizer,AutomaticSpeechRecognitionPipeline:()=>g.AutomaticSpeechRecognitionPipeline,BackgroundRemovalPipeline:()=>g.BackgroundRemovalPipeline,BartForConditionalGeneration:()=>e.BartForConditionalGeneration,BartForSequenceClassification:()=>e.BartForSequenceClassification,BartModel:()=>e.BartModel,BartPretrainedModel:()=>e.BartPretrainedModel,BartTokenizer:()=>I.BartTokenizer,BaseModelOutput:()=>e.BaseModelOutput,BaseStreamer:()=>_.BaseStreamer,BeitFeatureExtractor:()=>c.BeitFeatureExtractor,BeitForImageClassification:()=>e.BeitForImageClassification,BeitModel:()=>e.BeitModel,BeitPreTrainedModel:()=>e.BeitPreTrainedModel,BertForMaskedLM:()=>e.BertForMaskedLM,BertForQuestionAnswering:()=>e.BertForQuestionAnswering,BertForSequenceClassification:()=>e.BertForSequenceClassification,BertForTokenClassification:()=>e.BertForTokenClassification,BertModel:()=>e.BertModel,BertPreTrainedModel:()=>e.BertPreTrainedModel,BertTokenizer:()=>I.BertTokenizer,BitImageProcessor:()=>c.BitImageProcessor,BlenderbotForConditionalGeneration:()=>e.BlenderbotForConditionalGeneration,BlenderbotModel:()=>e.BlenderbotModel,BlenderbotPreTrainedModel:()=>e.BlenderbotPreTrainedModel,BlenderbotSmallForConditionalGeneration:()=>e.BlenderbotSmallForConditionalGeneration,BlenderbotSmallModel:()=>e.BlenderbotSmallModel,BlenderbotSmallPreTrainedModel:()=>e.BlenderbotSmallPreTrainedModel,BlenderbotSmallTokenizer:()=>I.BlenderbotSmallTokenizer,BlenderbotTokenizer:()=>I.BlenderbotTokenizer,BloomForCausalLM:()=>e.BloomForCausalLM,BloomModel:()=>e.BloomModel,BloomPreTrainedModel:()=>e.BloomPreTrainedModel,BloomTokenizer:()=>I.BloomTokenizer,CLIPFeatureExtractor:()=>c.CLIPFeatureExtractor,CLIPImageProcessor:()=>c.CLIPImageProcessor,CLIPModel:()=>e.CLIPModel,CLIPPreTrainedModel:()=>e.CLIPPreTrainedModel,CLIPSegForImageSegmentation:()=>e.CLIPSegForImageSegmentation,CLIPSegModel:()=>e.CLIPSegModel,CLIPSegPreTrainedModel:()=>e.CLIPSegPreTrainedModel,CLIPTextModel:()=>e.CLIPTextModel,CLIPTextModelWithProjection:()=>e.CLIPTextModelWithProjection,CLIPTokenizer:()=>I.CLIPTokenizer,CLIPVisionModel:()=>e.CLIPVisionModel,CLIPVisionModelWithProjection:()=>e.CLIPVisionModelWithProjection,CamembertForMaskedLM:()=>e.CamembertForMaskedLM,CamembertForQuestionAnswering:()=>e.CamembertForQuestionAnswering,CamembertForSequenceClassification:()=>e.CamembertForSequenceClassification,CamembertForTokenClassification:()=>e.CamembertForTokenClassification,CamembertModel:()=>e.CamembertModel,CamembertPreTrainedModel:()=>e.CamembertPreTrainedModel,CamembertTokenizer:()=>I.CamembertTokenizer,CausalLMOutput:()=>e.CausalLMOutput,CausalLMOutputWithPast:()=>e.CausalLMOutputWithPast,ChineseCLIPFeatureExtractor:()=>c.ChineseCLIPFeatureExtractor,ChineseCLIPModel:()=>e.ChineseCLIPModel,ChineseCLIPPreTrainedModel:()=>e.ChineseCLIPPreTrainedModel,ClapAudioModelWithProjection:()=>e.ClapAudioModelWithProjection,ClapFeatureExtractor:()=>B.ClapFeatureExtractor,ClapModel:()=>e.ClapModel,ClapPreTrainedModel:()=>e.ClapPreTrainedModel,ClapTextModelWithProjection:()=>e.ClapTextModelWithProjection,ClassifierFreeGuidanceLogitsProcessor:()=>M.ClassifierFreeGuidanceLogitsProcessor,CodeGenForCausalLM:()=>e.CodeGenForCausalLM,CodeGenModel:()=>e.CodeGenModel,CodeGenPreTrainedModel:()=>e.CodeGenPreTrainedModel,CodeGenTokenizer:()=>I.CodeGenTokenizer,CodeLlamaTokenizer:()=>I.CodeLlamaTokenizer,CohereForCausalLM:()=>e.CohereForCausalLM,CohereModel:()=>e.CohereModel,CoherePreTrainedModel:()=>e.CoherePreTrainedModel,CohereTokenizer:()=>I.CohereTokenizer,ConvBertForMaskedLM:()=>e.ConvBertForMaskedLM,ConvBertForQuestionAnswering:()=>e.ConvBertForQuestionAnswering,ConvBertForSequenceClassification:()=>e.ConvBertForSequenceClassification,ConvBertForTokenClassification:()=>e.ConvBertForTokenClassification,ConvBertModel:()=>e.ConvBertModel,ConvBertPreTrainedModel:()=>e.ConvBertPreTrainedModel,ConvBertTokenizer:()=>I.ConvBertTokenizer,ConvNextFeatureExtractor:()=>c.ConvNextFeatureExtractor,ConvNextForImageClassification:()=>e.ConvNextForImageClassification,ConvNextImageProcessor:()=>c.ConvNextImageProcessor,ConvNextModel:()=>e.ConvNextModel,ConvNextPreTrainedModel:()=>e.ConvNextPreTrainedModel,ConvNextV2ForImageClassification:()=>e.ConvNextV2ForImageClassification,ConvNextV2Model:()=>e.ConvNextV2Model,ConvNextV2PreTrainedModel:()=>e.ConvNextV2PreTrainedModel,DFineForObjectDetection:()=>e.DFineForObjectDetection,DFineModel:()=>e.DFineModel,DFinePreTrainedModel:()=>e.DFinePreTrainedModel,DINOv3ConvNextModel:()=>e.DINOv3ConvNextModel,DINOv3ConvNextPreTrainedModel:()=>e.DINOv3ConvNextPreTrainedModel,DINOv3ViTImageProcessor:()=>c.DINOv3ViTImageProcessor,DINOv3ViTModel:()=>e.DINOv3ViTModel,DINOv3ViTPreTrainedModel:()=>e.DINOv3ViTPreTrainedModel,DPTFeatureExtractor:()=>c.DPTFeatureExtractor,DPTForDepthEstimation:()=>e.DPTForDepthEstimation,DPTImageProcessor:()=>c.DPTImageProcessor,DPTModel:()=>e.DPTModel,DPTPreTrainedModel:()=>e.DPTPreTrainedModel,DacDecoderModel:()=>e.DacDecoderModel,DacDecoderOutput:()=>e.DacDecoderOutput,DacEncoderModel:()=>e.DacEncoderModel,DacEncoderOutput:()=>e.DacEncoderOutput,DacFeatureExtractor:()=>B.DacFeatureExtractor,DacModel:()=>e.DacModel,DacPreTrainedModel:()=>e.DacPreTrainedModel,DataTypeMap:()=>C.DataTypeMap,DebertaForMaskedLM:()=>e.DebertaForMaskedLM,DebertaForQuestionAnswering:()=>e.DebertaForQuestionAnswering,DebertaForSequenceClassification:()=>e.DebertaForSequenceClassification,DebertaForTokenClassification:()=>e.DebertaForTokenClassification,DebertaModel:()=>e.DebertaModel,DebertaPreTrainedModel:()=>e.DebertaPreTrainedModel,DebertaTokenizer:()=>I.DebertaTokenizer,DebertaV2ForMaskedLM:()=>e.DebertaV2ForMaskedLM,DebertaV2ForQuestionAnswering:()=>e.DebertaV2ForQuestionAnswering,DebertaV2ForSequenceClassification:()=>e.DebertaV2ForSequenceClassification,DebertaV2ForTokenClassification:()=>e.DebertaV2ForTokenClassification,DebertaV2Model:()=>e.DebertaV2Model,DebertaV2PreTrainedModel:()=>e.DebertaV2PreTrainedModel,DebertaV2Tokenizer:()=>I.DebertaV2Tokenizer,DecisionTransformerModel:()=>e.DecisionTransformerModel,DecisionTransformerPreTrainedModel:()=>e.DecisionTransformerPreTrainedModel,DeiTFeatureExtractor:()=>c.DeiTFeatureExtractor,DeiTForImageClassification:()=>e.DeiTForImageClassification,DeiTImageProcessor:()=>c.DeiTImageProcessor,DeiTModel:()=>e.DeiTModel,DeiTPreTrainedModel:()=>e.DeiTPreTrainedModel,DepthAnythingForDepthEstimation:()=>e.DepthAnythingForDepthEstimation,DepthAnythingPreTrainedModel:()=>e.DepthAnythingPreTrainedModel,DepthEstimationPipeline:()=>g.DepthEstimationPipeline,DepthProForDepthEstimation:()=>e.DepthProForDepthEstimation,DepthProPreTrainedModel:()=>e.DepthProPreTrainedModel,DetrFeatureExtractor:()=>c.DetrFeatureExtractor,DetrForObjectDetection:()=>e.DetrForObjectDetection,DetrForSegmentation:()=>e.DetrForSegmentation,DetrImageProcessor:()=>c.DetrImageProcessor,DetrModel:()=>e.DetrModel,DetrObjectDetectionOutput:()=>e.DetrObjectDetectionOutput,DetrPreTrainedModel:()=>e.DetrPreTrainedModel,DetrSegmentationOutput:()=>e.DetrSegmentationOutput,Dinov2ForImageClassification:()=>e.Dinov2ForImageClassification,Dinov2Model:()=>e.Dinov2Model,Dinov2PreTrainedModel:()=>e.Dinov2PreTrainedModel,Dinov2WithRegistersForImageClassification:()=>e.Dinov2WithRegistersForImageClassification,Dinov2WithRegistersModel:()=>e.Dinov2WithRegistersModel,Dinov2WithRegistersPreTrainedModel:()=>e.Dinov2WithRegistersPreTrainedModel,DistilBertForMaskedLM:()=>e.DistilBertForMaskedLM,DistilBertForQuestionAnswering:()=>e.DistilBertForQuestionAnswering,DistilBertForSequenceClassification:()=>e.DistilBertForSequenceClassification,DistilBertForTokenClassification:()=>e.DistilBertForTokenClassification,DistilBertModel:()=>e.DistilBertModel,DistilBertPreTrainedModel:()=>e.DistilBertPreTrainedModel,DistilBertTokenizer:()=>I.DistilBertTokenizer,DocumentQuestionAnsweringPipeline:()=>g.DocumentQuestionAnsweringPipeline,DonutFeatureExtractor:()=>c.DonutFeatureExtractor,DonutImageProcessor:()=>c.DonutImageProcessor,DonutSwinModel:()=>e.DonutSwinModel,DonutSwinPreTrainedModel:()=>e.DonutSwinPreTrainedModel,EfficientNetForImageClassification:()=>e.EfficientNetForImageClassification,EfficientNetImageProcessor:()=>c.EfficientNetImageProcessor,EfficientNetModel:()=>e.EfficientNetModel,EfficientNetPreTrainedModel:()=>e.EfficientNetPreTrainedModel,ElectraForMaskedLM:()=>e.ElectraForMaskedLM,ElectraForQuestionAnswering:()=>e.ElectraForQuestionAnswering,ElectraForSequenceClassification:()=>e.ElectraForSequenceClassification,ElectraForTokenClassification:()=>e.ElectraForTokenClassification,ElectraModel:()=>e.ElectraModel,ElectraPreTrainedModel:()=>e.ElectraPreTrainedModel,ElectraTokenizer:()=>I.ElectraTokenizer,EncodecFeatureExtractor:()=>B.EncodecFeatureExtractor,EosTokenCriteria:()=>y.EosTokenCriteria,Ernie4_5_ForCausalLM:()=>e.Ernie4_5_ForCausalLM,Ernie4_5_Model:()=>e.Ernie4_5_Model,Ernie4_5_PretrainedModel:()=>e.Ernie4_5_PretrainedModel,Ernie4_5_Tokenizer:()=>I.Ernie4_5_Tokenizer,EsmForMaskedLM:()=>e.EsmForMaskedLM,EsmForSequenceClassification:()=>e.EsmForSequenceClassification,EsmForTokenClassification:()=>e.EsmForTokenClassification,EsmModel:()=>e.EsmModel,EsmPreTrainedModel:()=>e.EsmPreTrainedModel,EsmTokenizer:()=>I.EsmTokenizer,ExaoneForCausalLM:()=>e.ExaoneForCausalLM,ExaoneModel:()=>e.ExaoneModel,ExaonePreTrainedModel:()=>e.ExaonePreTrainedModel,FFT:()=>r.FFT,FalconForCausalLM:()=>e.FalconForCausalLM,FalconModel:()=>e.FalconModel,FalconPreTrainedModel:()=>e.FalconPreTrainedModel,FalconTokenizer:()=>I.FalconTokenizer,FastViTForImageClassification:()=>e.FastViTForImageClassification,FastViTModel:()=>e.FastViTModel,FastViTPreTrainedModel:()=>e.FastViTPreTrainedModel,FeatureExtractionPipeline:()=>g.FeatureExtractionPipeline,FeatureExtractor:()=>Q.FeatureExtractor,FillMaskPipeline:()=>g.FillMaskPipeline,Florence2ForConditionalGeneration:()=>e.Florence2ForConditionalGeneration,Florence2PreTrainedModel:()=>e.Florence2PreTrainedModel,Florence2Processor:()=>w.Florence2Processor,ForcedBOSTokenLogitsProcessor:()=>M.ForcedBOSTokenLogitsProcessor,ForcedEOSTokenLogitsProcessor:()=>M.ForcedEOSTokenLogitsProcessor,GLPNFeatureExtractor:()=>c.GLPNFeatureExtractor,GLPNForDepthEstimation:()=>e.GLPNForDepthEstimation,GLPNModel:()=>e.GLPNModel,GLPNPreTrainedModel:()=>e.GLPNPreTrainedModel,GPT2LMHeadModel:()=>e.GPT2LMHeadModel,GPT2Model:()=>e.GPT2Model,GPT2PreTrainedModel:()=>e.GPT2PreTrainedModel,GPT2Tokenizer:()=>I.GPT2Tokenizer,GPTBigCodeForCausalLM:()=>e.GPTBigCodeForCausalLM,GPTBigCodeModel:()=>e.GPTBigCodeModel,GPTBigCodePreTrainedModel:()=>e.GPTBigCodePreTrainedModel,GPTJForCausalLM:()=>e.GPTJForCausalLM,GPTJModel:()=>e.GPTJModel,GPTJPreTrainedModel:()=>e.GPTJPreTrainedModel,GPTNeoForCausalLM:()=>e.GPTNeoForCausalLM,GPTNeoModel:()=>e.GPTNeoModel,GPTNeoPreTrainedModel:()=>e.GPTNeoPreTrainedModel,GPTNeoXForCausalLM:()=>e.GPTNeoXForCausalLM,GPTNeoXModel:()=>e.GPTNeoXModel,GPTNeoXPreTrainedModel:()=>e.GPTNeoXPreTrainedModel,GPTNeoXTokenizer:()=>I.GPTNeoXTokenizer,Gemma2ForCausalLM:()=>e.Gemma2ForCausalLM,Gemma2Model:()=>e.Gemma2Model,Gemma2PreTrainedModel:()=>e.Gemma2PreTrainedModel,Gemma3ForCausalLM:()=>e.Gemma3ForCausalLM,Gemma3Model:()=>e.Gemma3Model,Gemma3PreTrainedModel:()=>e.Gemma3PreTrainedModel,Gemma3nAudioFeatureExtractor:()=>B.Gemma3nAudioFeatureExtractor,Gemma3nForConditionalGeneration:()=>e.Gemma3nForConditionalGeneration,Gemma3nPreTrainedModel:()=>e.Gemma3nPreTrainedModel,Gemma3nProcessor:()=>w.Gemma3nProcessor,GemmaForCausalLM:()=>e.GemmaForCausalLM,GemmaModel:()=>e.GemmaModel,GemmaPreTrainedModel:()=>e.GemmaPreTrainedModel,GemmaTokenizer:()=>I.GemmaTokenizer,GlmForCausalLM:()=>e.GlmForCausalLM,GlmModel:()=>e.GlmModel,GlmPreTrainedModel:()=>e.GlmPreTrainedModel,GraniteForCausalLM:()=>e.GraniteForCausalLM,GraniteModel:()=>e.GraniteModel,GranitePreTrainedModel:()=>e.GranitePreTrainedModel,Grok1Tokenizer:()=>I.Grok1Tokenizer,GroundingDinoForObjectDetection:()=>e.GroundingDinoForObjectDetection,GroundingDinoImageProcessor:()=>c.GroundingDinoImageProcessor,GroundingDinoPreTrainedModel:()=>e.GroundingDinoPreTrainedModel,GroundingDinoProcessor:()=>w.GroundingDinoProcessor,GroupViTModel:()=>e.GroupViTModel,GroupViTPreTrainedModel:()=>e.GroupViTPreTrainedModel,HeliumForCausalLM:()=>e.HeliumForCausalLM,HeliumModel:()=>e.HeliumModel,HeliumPreTrainedModel:()=>e.HeliumPreTrainedModel,HerbertTokenizer:()=>I.HerbertTokenizer,HieraForImageClassification:()=>e.HieraForImageClassification,HieraModel:()=>e.HieraModel,HieraPreTrainedModel:()=>e.HieraPreTrainedModel,HubertForCTC:()=>e.HubertForCTC,HubertForSequenceClassification:()=>e.HubertForSequenceClassification,HubertModel:()=>e.HubertModel,HubertPreTrainedModel:()=>e.HubertPreTrainedModel,IJepaForImageClassification:()=>e.IJepaForImageClassification,IJepaModel:()=>e.IJepaModel,IJepaPreTrainedModel:()=>e.IJepaPreTrainedModel,Idefics3ForConditionalGeneration:()=>e.Idefics3ForConditionalGeneration,Idefics3ImageProcessor:()=>c.Idefics3ImageProcessor,Idefics3PreTrainedModel:()=>e.Idefics3PreTrainedModel,Idefics3Processor:()=>w.Idefics3Processor,ImageClassificationPipeline:()=>g.ImageClassificationPipeline,ImageFeatureExtractionPipeline:()=>g.ImageFeatureExtractionPipeline,ImageFeatureExtractor:()=>B.ImageFeatureExtractor,ImageMattingOutput:()=>e.ImageMattingOutput,ImageProcessor:()=>d.ImageProcessor,ImageSegmentationPipeline:()=>g.ImageSegmentationPipeline,ImageToImagePipeline:()=>g.ImageToImagePipeline,ImageToTextPipeline:()=>g.ImageToTextPipeline,InterruptableStoppingCriteria:()=>y.InterruptableStoppingCriteria,JAISLMHeadModel:()=>e.JAISLMHeadModel,JAISModel:()=>e.JAISModel,JAISPreTrainedModel:()=>e.JAISPreTrainedModel,JinaCLIPImageProcessor:()=>c.JinaCLIPImageProcessor,JinaCLIPModel:()=>e.JinaCLIPModel,JinaCLIPPreTrainedModel:()=>e.JinaCLIPPreTrainedModel,JinaCLIPProcessor:()=>w.JinaCLIPProcessor,JinaCLIPTextModel:()=>e.JinaCLIPTextModel,JinaCLIPVisionModel:()=>e.JinaCLIPVisionModel,Lfm2ForCausalLM:()=>e.Lfm2ForCausalLM,Lfm2Model:()=>e.Lfm2Model,Lfm2PreTrainedModel:()=>e.Lfm2PreTrainedModel,LiteWhisperForConditionalGeneration:()=>e.LiteWhisperForConditionalGeneration,Llama4ForCausalLM:()=>e.Llama4ForCausalLM,Llama4PreTrainedModel:()=>e.Llama4PreTrainedModel,LlamaForCausalLM:()=>e.LlamaForCausalLM,LlamaModel:()=>e.LlamaModel,LlamaPreTrainedModel:()=>e.LlamaPreTrainedModel,LlamaTokenizer:()=>I.LlamaTokenizer,LlavaForConditionalGeneration:()=>e.LlavaForConditionalGeneration,LlavaOnevisionForConditionalGeneration:()=>e.LlavaOnevisionForConditionalGeneration,LlavaOnevisionImageProcessor:()=>c.LlavaOnevisionImageProcessor,LlavaPreTrainedModel:()=>e.LlavaPreTrainedModel,LlavaProcessor:()=>w.LlavaProcessor,LlavaQwen2ForCausalLM:()=>e.LlavaQwen2ForCausalLM,LogitsProcessor:()=>M.LogitsProcessor,LogitsProcessorList:()=>M.LogitsProcessorList,LogitsWarper:()=>M.LogitsWarper,LongT5ForConditionalGeneration:()=>e.LongT5ForConditionalGeneration,LongT5Model:()=>e.LongT5Model,LongT5PreTrainedModel:()=>e.LongT5PreTrainedModel,M2M100ForConditionalGeneration:()=>e.M2M100ForConditionalGeneration,M2M100Model:()=>e.M2M100Model,M2M100PreTrainedModel:()=>e.M2M100PreTrainedModel,M2M100Tokenizer:()=>I.M2M100Tokenizer,MBart50Tokenizer:()=>I.MBart50Tokenizer,MBartForCausalLM:()=>e.MBartForCausalLM,MBartForConditionalGeneration:()=>e.MBartForConditionalGeneration,MBartForSequenceClassification:()=>e.MBartForSequenceClassification,MBartModel:()=>e.MBartModel,MBartPreTrainedModel:()=>e.MBartPreTrainedModel,MBartTokenizer:()=>I.MBartTokenizer,MPNetForMaskedLM:()=>e.MPNetForMaskedLM,MPNetForQuestionAnswering:()=>e.MPNetForQuestionAnswering,MPNetForSequenceClassification:()=>e.MPNetForSequenceClassification,MPNetForTokenClassification:()=>e.MPNetForTokenClassification,MPNetModel:()=>e.MPNetModel,MPNetPreTrainedModel:()=>e.MPNetPreTrainedModel,MPNetTokenizer:()=>I.MPNetTokenizer,MT5ForConditionalGeneration:()=>e.MT5ForConditionalGeneration,MT5Model:()=>e.MT5Model,MT5PreTrainedModel:()=>e.MT5PreTrainedModel,MarianMTModel:()=>e.MarianMTModel,MarianModel:()=>e.MarianModel,MarianPreTrainedModel:()=>e.MarianPreTrainedModel,MarianTokenizer:()=>I.MarianTokenizer,Mask2FormerImageProcessor:()=>c.Mask2FormerImageProcessor,MaskFormerFeatureExtractor:()=>c.MaskFormerFeatureExtractor,MaskFormerForInstanceSegmentation:()=>e.MaskFormerForInstanceSegmentation,MaskFormerImageProcessor:()=>c.MaskFormerImageProcessor,MaskFormerModel:()=>e.MaskFormerModel,MaskFormerPreTrainedModel:()=>e.MaskFormerPreTrainedModel,MaskedLMOutput:()=>e.MaskedLMOutput,MaxLengthCriteria:()=>y.MaxLengthCriteria,Metric3DForDepthEstimation:()=>e.Metric3DForDepthEstimation,Metric3DPreTrainedModel:()=>e.Metric3DPreTrainedModel,Metric3Dv2ForDepthEstimation:()=>e.Metric3Dv2ForDepthEstimation,Metric3Dv2PreTrainedModel:()=>e.Metric3Dv2PreTrainedModel,MgpstrForSceneTextRecognition:()=>e.MgpstrForSceneTextRecognition,MgpstrModelOutput:()=>e.MgpstrModelOutput,MgpstrPreTrainedModel:()=>e.MgpstrPreTrainedModel,MgpstrProcessor:()=>w.MgpstrProcessor,MgpstrTokenizer:()=>I.MgpstrTokenizer,MimiDecoderModel:()=>e.MimiDecoderModel,MimiDecoderOutput:()=>e.MimiDecoderOutput,MimiEncoderModel:()=>e.MimiEncoderModel,MimiEncoderOutput:()=>e.MimiEncoderOutput,MimiModel:()=>e.MimiModel,MimiPreTrainedModel:()=>e.MimiPreTrainedModel,MinLengthLogitsProcessor:()=>M.MinLengthLogitsProcessor,MinNewTokensLengthLogitsProcessor:()=>M.MinNewTokensLengthLogitsProcessor,MistralForCausalLM:()=>e.MistralForCausalLM,MistralModel:()=>e.MistralModel,MistralPreTrainedModel:()=>e.MistralPreTrainedModel,MobileBertForMaskedLM:()=>e.MobileBertForMaskedLM,MobileBertForQuestionAnswering:()=>e.MobileBertForQuestionAnswering,MobileBertForSequenceClassification:()=>e.MobileBertForSequenceClassification,MobileBertModel:()=>e.MobileBertModel,MobileBertPreTrainedModel:()=>e.MobileBertPreTrainedModel,MobileBertTokenizer:()=>I.MobileBertTokenizer,MobileLLMForCausalLM:()=>e.MobileLLMForCausalLM,MobileLLMModel:()=>e.MobileLLMModel,MobileLLMPreTrainedModel:()=>e.MobileLLMPreTrainedModel,MobileNetV1FeatureExtractor:()=>c.MobileNetV1FeatureExtractor,MobileNetV1ForImageClassification:()=>e.MobileNetV1ForImageClassification,MobileNetV1ForSemanticSegmentation:()=>e.MobileNetV1ForSemanticSegmentation,MobileNetV1ImageProcessor:()=>c.MobileNetV1ImageProcessor,MobileNetV1Model:()=>e.MobileNetV1Model,MobileNetV1PreTrainedModel:()=>e.MobileNetV1PreTrainedModel,MobileNetV2FeatureExtractor:()=>c.MobileNetV2FeatureExtractor,MobileNetV2ForImageClassification:()=>e.MobileNetV2ForImageClassification,MobileNetV2ForSemanticSegmentation:()=>e.MobileNetV2ForSemanticSegmentation,MobileNetV2ImageProcessor:()=>c.MobileNetV2ImageProcessor,MobileNetV2Model:()=>e.MobileNetV2Model,MobileNetV2PreTrainedModel:()=>e.MobileNetV2PreTrainedModel,MobileNetV3FeatureExtractor:()=>c.MobileNetV3FeatureExtractor,MobileNetV3ForImageClassification:()=>e.MobileNetV3ForImageClassification,MobileNetV3ForSemanticSegmentation:()=>e.MobileNetV3ForSemanticSegmentation,MobileNetV3ImageProcessor:()=>c.MobileNetV3ImageProcessor,MobileNetV3Model:()=>e.MobileNetV3Model,MobileNetV3PreTrainedModel:()=>e.MobileNetV3PreTrainedModel,MobileNetV4FeatureExtractor:()=>c.MobileNetV4FeatureExtractor,MobileNetV4ForImageClassification:()=>e.MobileNetV4ForImageClassification,MobileNetV4ForSemanticSegmentation:()=>e.MobileNetV4ForSemanticSegmentation,MobileNetV4ImageProcessor:()=>c.MobileNetV4ImageProcessor,MobileNetV4Model:()=>e.MobileNetV4Model,MobileNetV4PreTrainedModel:()=>e.MobileNetV4PreTrainedModel,MobileViTFeatureExtractor:()=>c.MobileViTFeatureExtractor,MobileViTForImageClassification:()=>e.MobileViTForImageClassification,MobileViTImageProcessor:()=>c.MobileViTImageProcessor,MobileViTModel:()=>e.MobileViTModel,MobileViTPreTrainedModel:()=>e.MobileViTPreTrainedModel,MobileViTV2ForImageClassification:()=>e.MobileViTV2ForImageClassification,MobileViTV2Model:()=>e.MobileViTV2Model,MobileViTV2PreTrainedModel:()=>e.MobileViTV2PreTrainedModel,ModelOutput:()=>e.ModelOutput,ModernBertDecoderForCausalLM:()=>e.ModernBertDecoderForCausalLM,ModernBertDecoderModel:()=>e.ModernBertDecoderModel,ModernBertDecoderPreTrainedModel:()=>e.ModernBertDecoderPreTrainedModel,ModernBertForMaskedLM:()=>e.ModernBertForMaskedLM,ModernBertForSequenceClassification:()=>e.ModernBertForSequenceClassification,ModernBertForTokenClassification:()=>e.ModernBertForTokenClassification,ModernBertModel:()=>e.ModernBertModel,ModernBertPreTrainedModel:()=>e.ModernBertPreTrainedModel,Moondream1ForConditionalGeneration:()=>e.Moondream1ForConditionalGeneration,MoonshineFeatureExtractor:()=>B.MoonshineFeatureExtractor,MoonshineForConditionalGeneration:()=>e.MoonshineForConditionalGeneration,MoonshineModel:()=>e.MoonshineModel,MoonshinePreTrainedModel:()=>e.MoonshinePreTrainedModel,MoonshineProcessor:()=>w.MoonshineProcessor,MptForCausalLM:()=>e.MptForCausalLM,MptModel:()=>e.MptModel,MptPreTrainedModel:()=>e.MptPreTrainedModel,MultiModalityCausalLM:()=>e.MultiModalityCausalLM,MultiModalityPreTrainedModel:()=>e.MultiModalityPreTrainedModel,MusicgenForCausalLM:()=>e.MusicgenForCausalLM,MusicgenForConditionalGeneration:()=>e.MusicgenForConditionalGeneration,MusicgenModel:()=>e.MusicgenModel,MusicgenPreTrainedModel:()=>e.MusicgenPreTrainedModel,NeoBertForMaskedLM:()=>e.NeoBertForMaskedLM,NeoBertForQuestionAnswering:()=>e.NeoBertForQuestionAnswering,NeoBertForSequenceClassification:()=>e.NeoBertForSequenceClassification,NeoBertForTokenClassification:()=>e.NeoBertForTokenClassification,NeoBertModel:()=>e.NeoBertModel,NeoBertPreTrainedModel:()=>e.NeoBertPreTrainedModel,NllbTokenizer:()=>I.NllbTokenizer,NoBadWordsLogitsProcessor:()=>M.NoBadWordsLogitsProcessor,NoRepeatNGramLogitsProcessor:()=>M.NoRepeatNGramLogitsProcessor,NomicBertModel:()=>e.NomicBertModel,NomicBertPreTrainedModel:()=>e.NomicBertPreTrainedModel,NougatImageProcessor:()=>c.NougatImageProcessor,NougatTokenizer:()=>I.NougatTokenizer,OPTForCausalLM:()=>e.OPTForCausalLM,OPTModel:()=>e.OPTModel,OPTPreTrainedModel:()=>e.OPTPreTrainedModel,ObjectDetectionPipeline:()=>g.ObjectDetectionPipeline,Olmo2ForCausalLM:()=>e.Olmo2ForCausalLM,Olmo2Model:()=>e.Olmo2Model,Olmo2PreTrainedModel:()=>e.Olmo2PreTrainedModel,OlmoForCausalLM:()=>e.OlmoForCausalLM,OlmoModel:()=>e.OlmoModel,OlmoPreTrainedModel:()=>e.OlmoPreTrainedModel,OpenELMForCausalLM:()=>e.OpenELMForCausalLM,OpenELMModel:()=>e.OpenELMModel,OpenELMPreTrainedModel:()=>e.OpenELMPreTrainedModel,OwlViTFeatureExtractor:()=>c.OwlViTFeatureExtractor,OwlViTForObjectDetection:()=>e.OwlViTForObjectDetection,OwlViTImageProcessor:()=>c.OwlViTImageProcessor,OwlViTModel:()=>e.OwlViTModel,OwlViTPreTrainedModel:()=>e.OwlViTPreTrainedModel,OwlViTProcessor:()=>w.OwlViTProcessor,Owlv2ForObjectDetection:()=>e.Owlv2ForObjectDetection,Owlv2ImageProcessor:()=>c.Owlv2ImageProcessor,Owlv2Model:()=>e.Owlv2Model,Owlv2PreTrainedModel:()=>e.Owlv2PreTrainedModel,PaliGemmaForConditionalGeneration:()=>e.PaliGemmaForConditionalGeneration,PaliGemmaPreTrainedModel:()=>e.PaliGemmaPreTrainedModel,PaliGemmaProcessor:()=>w.PaliGemmaProcessor,PatchTSMixerForPrediction:()=>e.PatchTSMixerForPrediction,PatchTSMixerModel:()=>e.PatchTSMixerModel,PatchTSMixerPreTrainedModel:()=>e.PatchTSMixerPreTrainedModel,PatchTSTForPrediction:()=>e.PatchTSTForPrediction,PatchTSTModel:()=>e.PatchTSTModel,PatchTSTPreTrainedModel:()=>e.PatchTSTPreTrainedModel,Phi3ForCausalLM:()=>e.Phi3ForCausalLM,Phi3Model:()=>e.Phi3Model,Phi3PreTrainedModel:()=>e.Phi3PreTrainedModel,Phi3VForCausalLM:()=>e.Phi3VForCausalLM,Phi3VImageProcessor:()=>c.Phi3VImageProcessor,Phi3VPreTrainedModel:()=>e.Phi3VPreTrainedModel,Phi3VProcessor:()=>w.Phi3VProcessor,PhiForCausalLM:()=>e.PhiForCausalLM,PhiModel:()=>e.PhiModel,PhiPreTrainedModel:()=>e.PhiPreTrainedModel,Pipeline:()=>g.Pipeline,PreTrainedModel:()=>e.PreTrainedModel,PreTrainedTokenizer:()=>I.PreTrainedTokenizer,PretrainedConfig:()=>i.PretrainedConfig,PretrainedMixin:()=>e.PretrainedMixin,Processor:()=>L.Processor,PvtForImageClassification:()=>e.PvtForImageClassification,PvtImageProcessor:()=>c.PvtImageProcessor,PvtModel:()=>e.PvtModel,PvtPreTrainedModel:()=>e.PvtPreTrainedModel,PyAnnoteFeatureExtractor:()=>B.PyAnnoteFeatureExtractor,PyAnnoteForAudioFrameClassification:()=>e.PyAnnoteForAudioFrameClassification,PyAnnoteModel:()=>e.PyAnnoteModel,PyAnnotePreTrainedModel:()=>e.PyAnnotePreTrainedModel,PyAnnoteProcessor:()=>w.PyAnnoteProcessor,QuestionAnsweringModelOutput:()=>e.QuestionAnsweringModelOutput,QuestionAnsweringPipeline:()=>g.QuestionAnsweringPipeline,Qwen2ForCausalLM:()=>e.Qwen2ForCausalLM,Qwen2Model:()=>e.Qwen2Model,Qwen2PreTrainedModel:()=>e.Qwen2PreTrainedModel,Qwen2Tokenizer:()=>I.Qwen2Tokenizer,Qwen2VLForConditionalGeneration:()=>e.Qwen2VLForConditionalGeneration,Qwen2VLImageProcessor:()=>c.Qwen2VLImageProcessor,Qwen2VLPreTrainedModel:()=>e.Qwen2VLPreTrainedModel,Qwen2VLProcessor:()=>w.Qwen2VLProcessor,Qwen3ForCausalLM:()=>e.Qwen3ForCausalLM,Qwen3Model:()=>e.Qwen3Model,Qwen3PreTrainedModel:()=>e.Qwen3PreTrainedModel,RFDetrForObjectDetection:()=>e.RFDetrForObjectDetection,RFDetrModel:()=>e.RFDetrModel,RFDetrObjectDetectionOutput:()=>e.RFDetrObjectDetectionOutput,RFDetrPreTrainedModel:()=>e.RFDetrPreTrainedModel,RTDetrForObjectDetection:()=>e.RTDetrForObjectDetection,RTDetrImageProcessor:()=>c.RTDetrImageProcessor,RTDetrModel:()=>e.RTDetrModel,RTDetrObjectDetectionOutput:()=>e.RTDetrObjectDetectionOutput,RTDetrPreTrainedModel:()=>e.RTDetrPreTrainedModel,RTDetrV2ForObjectDetection:()=>e.RTDetrV2ForObjectDetection,RTDetrV2Model:()=>e.RTDetrV2Model,RTDetrV2ObjectDetectionOutput:()=>e.RTDetrV2ObjectDetectionOutput,RTDetrV2PreTrainedModel:()=>e.RTDetrV2PreTrainedModel,RawAudio:()=>t.RawAudio,RawImage:()=>s.RawImage,RawVideo:()=>o.RawVideo,RawVideoFrame:()=>o.RawVideoFrame,RepetitionPenaltyLogitsProcessor:()=>M.RepetitionPenaltyLogitsProcessor,ResNetForImageClassification:()=>e.ResNetForImageClassification,ResNetModel:()=>e.ResNetModel,ResNetPreTrainedModel:()=>e.ResNetPreTrainedModel,RoFormerForMaskedLM:()=>e.RoFormerForMaskedLM,RoFormerForQuestionAnswering:()=>e.RoFormerForQuestionAnswering,RoFormerForSequenceClassification:()=>e.RoFormerForSequenceClassification,RoFormerForTokenClassification:()=>e.RoFormerForTokenClassification,RoFormerModel:()=>e.RoFormerModel,RoFormerPreTrainedModel:()=>e.RoFormerPreTrainedModel,RoFormerTokenizer:()=>I.RoFormerTokenizer,RobertaForMaskedLM:()=>e.RobertaForMaskedLM,RobertaForQuestionAnswering:()=>e.RobertaForQuestionAnswering,RobertaForSequenceClassification:()=>e.RobertaForSequenceClassification,RobertaForTokenClassification:()=>e.RobertaForTokenClassification,RobertaModel:()=>e.RobertaModel,RobertaPreTrainedModel:()=>e.RobertaPreTrainedModel,RobertaTokenizer:()=>I.RobertaTokenizer,SamImageProcessor:()=>c.SamImageProcessor,SamImageSegmentationOutput:()=>e.SamImageSegmentationOutput,SamModel:()=>e.SamModel,SamPreTrainedModel:()=>e.SamPreTrainedModel,SamProcessor:()=>w.SamProcessor,SapiensForDepthEstimation:()=>e.SapiensForDepthEstimation,SapiensForNormalEstimation:()=>e.SapiensForNormalEstimation,SapiensForSemanticSegmentation:()=>e.SapiensForSemanticSegmentation,SapiensPreTrainedModel:()=>e.SapiensPreTrainedModel,SeamlessM4TFeatureExtractor:()=>B.SeamlessM4TFeatureExtractor,SegformerFeatureExtractor:()=>c.SegformerFeatureExtractor,SegformerForImageClassification:()=>e.SegformerForImageClassification,SegformerForSemanticSegmentation:()=>e.SegformerForSemanticSegmentation,SegformerImageProcessor:()=>c.SegformerImageProcessor,SegformerModel:()=>e.SegformerModel,SegformerPreTrainedModel:()=>e.SegformerPreTrainedModel,Seq2SeqLMOutput:()=>e.Seq2SeqLMOutput,SequenceClassifierOutput:()=>e.SequenceClassifierOutput,SiglipImageProcessor:()=>c.SiglipImageProcessor,SiglipModel:()=>e.SiglipModel,SiglipPreTrainedModel:()=>e.SiglipPreTrainedModel,SiglipTextModel:()=>e.SiglipTextModel,SiglipTokenizer:()=>I.SiglipTokenizer,SiglipVisionModel:()=>e.SiglipVisionModel,SmolLM3ForCausalLM:()=>e.SmolLM3ForCausalLM,SmolLM3Model:()=>e.SmolLM3Model,SmolLM3PreTrainedModel:()=>e.SmolLM3PreTrainedModel,SmolVLMForConditionalGeneration:()=>e.SmolVLMForConditionalGeneration,SmolVLMImageProcessor:()=>c.SmolVLMImageProcessor,SmolVLMProcessor:()=>w.SmolVLMProcessor,SnacDecoderModel:()=>e.SnacDecoderModel,SnacEncoderModel:()=>e.SnacEncoderModel,SnacFeatureExtractor:()=>B.SnacFeatureExtractor,SnacModel:()=>e.SnacModel,SnacPreTrainedModel:()=>e.SnacPreTrainedModel,SpeechT5FeatureExtractor:()=>B.SpeechT5FeatureExtractor,SpeechT5ForSpeechToText:()=>e.SpeechT5ForSpeechToText,SpeechT5ForTextToSpeech:()=>e.SpeechT5ForTextToSpeech,SpeechT5HifiGan:()=>e.SpeechT5HifiGan,SpeechT5Model:()=>e.SpeechT5Model,SpeechT5PreTrainedModel:()=>e.SpeechT5PreTrainedModel,SpeechT5Processor:()=>w.SpeechT5Processor,SpeechT5Tokenizer:()=>I.SpeechT5Tokenizer,SqueezeBertForMaskedLM:()=>e.SqueezeBertForMaskedLM,SqueezeBertForQuestionAnswering:()=>e.SqueezeBertForQuestionAnswering,SqueezeBertForSequenceClassification:()=>e.SqueezeBertForSequenceClassification,SqueezeBertModel:()=>e.SqueezeBertModel,SqueezeBertPreTrainedModel:()=>e.SqueezeBertPreTrainedModel,SqueezeBertTokenizer:()=>I.SqueezeBertTokenizer,StableLmForCausalLM:()=>e.StableLmForCausalLM,StableLmModel:()=>e.StableLmModel,StableLmPreTrainedModel:()=>e.StableLmPreTrainedModel,Starcoder2ForCausalLM:()=>e.Starcoder2ForCausalLM,Starcoder2Model:()=>e.Starcoder2Model,Starcoder2PreTrainedModel:()=>e.Starcoder2PreTrainedModel,StoppingCriteria:()=>y.StoppingCriteria,StoppingCriteriaList:()=>y.StoppingCriteriaList,StyleTextToSpeech2Model:()=>e.StyleTextToSpeech2Model,StyleTextToSpeech2PreTrainedModel:()=>e.StyleTextToSpeech2PreTrainedModel,SummarizationPipeline:()=>g.SummarizationPipeline,SuppressTokensAtBeginLogitsProcessor:()=>M.SuppressTokensAtBeginLogitsProcessor,Swin2SRForImageSuperResolution:()=>e.Swin2SRForImageSuperResolution,Swin2SRImageProcessor:()=>c.Swin2SRImageProcessor,Swin2SRModel:()=>e.Swin2SRModel,Swin2SRPreTrainedModel:()=>e.Swin2SRPreTrainedModel,SwinForImageClassification:()=>e.SwinForImageClassification,SwinForSemanticSegmentation:()=>e.SwinForSemanticSegmentation,SwinModel:()=>e.SwinModel,SwinPreTrainedModel:()=>e.SwinPreTrainedModel,T5ForConditionalGeneration:()=>e.T5ForConditionalGeneration,T5Model:()=>e.T5Model,T5PreTrainedModel:()=>e.T5PreTrainedModel,T5Tokenizer:()=>I.T5Tokenizer,TableTransformerForObjectDetection:()=>e.TableTransformerForObjectDetection,TableTransformerModel:()=>e.TableTransformerModel,TableTransformerObjectDetectionOutput:()=>e.TableTransformerObjectDetectionOutput,TableTransformerPreTrainedModel:()=>e.TableTransformerPreTrainedModel,TemperatureLogitsWarper:()=>M.TemperatureLogitsWarper,Tensor:()=>C.Tensor,Text2TextGenerationPipeline:()=>g.Text2TextGenerationPipeline,TextClassificationPipeline:()=>g.TextClassificationPipeline,TextGenerationPipeline:()=>g.TextGenerationPipeline,TextStreamer:()=>_.TextStreamer,TextToAudioPipeline:()=>g.TextToAudioPipeline,TokenClassificationPipeline:()=>g.TokenClassificationPipeline,TokenClassifierOutput:()=>e.TokenClassifierOutput,TokenizerModel:()=>I.TokenizerModel,TopKLogitsWarper:()=>M.TopKLogitsWarper,TopPLogitsWarper:()=>M.TopPLogitsWarper,TrOCRForCausalLM:()=>e.TrOCRForCausalLM,TrOCRPreTrainedModel:()=>e.TrOCRPreTrainedModel,TranslationPipeline:()=>g.TranslationPipeline,UltravoxModel:()=>e.UltravoxModel,UltravoxPreTrainedModel:()=>e.UltravoxPreTrainedModel,UltravoxProcessor:()=>w.UltravoxProcessor,UniSpeechForCTC:()=>e.UniSpeechForCTC,UniSpeechForSequenceClassification:()=>e.UniSpeechForSequenceClassification,UniSpeechModel:()=>e.UniSpeechModel,UniSpeechPreTrainedModel:()=>e.UniSpeechPreTrainedModel,UniSpeechSatForAudioFrameClassification:()=>e.UniSpeechSatForAudioFrameClassification,UniSpeechSatForCTC:()=>e.UniSpeechSatForCTC,UniSpeechSatForSequenceClassification:()=>e.UniSpeechSatForSequenceClassification,UniSpeechSatModel:()=>e.UniSpeechSatModel,UniSpeechSatPreTrainedModel:()=>e.UniSpeechSatPreTrainedModel,VLChatProcessor:()=>w.VLChatProcessor,VLMImageProcessor:()=>c.VLMImageProcessor,VaultGemmaForCausalLM:()=>e.VaultGemmaForCausalLM,VaultGemmaModel:()=>e.VaultGemmaModel,VaultGemmaPreTrainedModel:()=>e.VaultGemmaPreTrainedModel,ViTFeatureExtractor:()=>c.ViTFeatureExtractor,ViTForImageClassification:()=>e.ViTForImageClassification,ViTImageProcessor:()=>c.ViTImageProcessor,ViTMAEModel:()=>e.ViTMAEModel,ViTMAEPreTrainedModel:()=>e.ViTMAEPreTrainedModel,ViTMSNForImageClassification:()=>e.ViTMSNForImageClassification,ViTMSNModel:()=>e.ViTMSNModel,ViTMSNPreTrainedModel:()=>e.ViTMSNPreTrainedModel,ViTModel:()=>e.ViTModel,ViTPreTrainedModel:()=>e.ViTPreTrainedModel,VisionEncoderDecoderModel:()=>e.VisionEncoderDecoderModel,VitMatteForImageMatting:()=>e.VitMatteForImageMatting,VitMatteImageProcessor:()=>c.VitMatteImageProcessor,VitMattePreTrainedModel:()=>e.VitMattePreTrainedModel,VitPoseForPoseEstimation:()=>e.VitPoseForPoseEstimation,VitPoseImageProcessor:()=>c.VitPoseImageProcessor,VitPosePreTrainedModel:()=>e.VitPosePreTrainedModel,VitsModel:()=>e.VitsModel,VitsModelOutput:()=>e.VitsModelOutput,VitsPreTrainedModel:()=>e.VitsPreTrainedModel,VitsTokenizer:()=>I.VitsTokenizer,VoxtralForConditionalGeneration:()=>e.VoxtralForConditionalGeneration,VoxtralProcessor:()=>w.VoxtralProcessor,Wav2Vec2BertForCTC:()=>e.Wav2Vec2BertForCTC,Wav2Vec2BertForSequenceClassification:()=>e.Wav2Vec2BertForSequenceClassification,Wav2Vec2BertModel:()=>e.Wav2Vec2BertModel,Wav2Vec2BertPreTrainedModel:()=>e.Wav2Vec2BertPreTrainedModel,Wav2Vec2CTCTokenizer:()=>I.Wav2Vec2CTCTokenizer,Wav2Vec2FeatureExtractor:()=>B.Wav2Vec2FeatureExtractor,Wav2Vec2ForAudioFrameClassification:()=>e.Wav2Vec2ForAudioFrameClassification,Wav2Vec2ForCTC:()=>e.Wav2Vec2ForCTC,Wav2Vec2ForSequenceClassification:()=>e.Wav2Vec2ForSequenceClassification,Wav2Vec2Model:()=>e.Wav2Vec2Model,Wav2Vec2PreTrainedModel:()=>e.Wav2Vec2PreTrainedModel,Wav2Vec2Processor:()=>w.Wav2Vec2Processor,Wav2Vec2ProcessorWithLM:()=>w.Wav2Vec2ProcessorWithLM,WavLMForAudioFrameClassification:()=>e.WavLMForAudioFrameClassification,WavLMForCTC:()=>e.WavLMForCTC,WavLMForSequenceClassification:()=>e.WavLMForSequenceClassification,WavLMForXVector:()=>e.WavLMForXVector,WavLMModel:()=>e.WavLMModel,WavLMPreTrainedModel:()=>e.WavLMPreTrainedModel,WeSpeakerFeatureExtractor:()=>B.WeSpeakerFeatureExtractor,WeSpeakerResNetModel:()=>e.WeSpeakerResNetModel,WeSpeakerResNetPreTrainedModel:()=>e.WeSpeakerResNetPreTrainedModel,WhisperFeatureExtractor:()=>B.WhisperFeatureExtractor,WhisperForConditionalGeneration:()=>e.WhisperForConditionalGeneration,WhisperModel:()=>e.WhisperModel,WhisperPreTrainedModel:()=>e.WhisperPreTrainedModel,WhisperProcessor:()=>w.WhisperProcessor,WhisperTextStreamer:()=>_.WhisperTextStreamer,WhisperTimeStampLogitsProcessor:()=>M.WhisperTimeStampLogitsProcessor,WhisperTokenizer:()=>I.WhisperTokenizer,XLMForQuestionAnswering:()=>e.XLMForQuestionAnswering,XLMForSequenceClassification:()=>e.XLMForSequenceClassification,XLMForTokenClassification:()=>e.XLMForTokenClassification,XLMModel:()=>e.XLMModel,XLMPreTrainedModel:()=>e.XLMPreTrainedModel,XLMRobertaForMaskedLM:()=>e.XLMRobertaForMaskedLM,XLMRobertaForQuestionAnswering:()=>e.XLMRobertaForQuestionAnswering,XLMRobertaForSequenceClassification:()=>e.XLMRobertaForSequenceClassification,XLMRobertaForTokenClassification:()=>e.XLMRobertaForTokenClassification,XLMRobertaModel:()=>e.XLMRobertaModel,XLMRobertaPreTrainedModel:()=>e.XLMRobertaPreTrainedModel,XLMRobertaTokenizer:()=>I.XLMRobertaTokenizer,XLMTokenizer:()=>I.XLMTokenizer,XLMWithLMHeadModel:()=>e.XLMWithLMHeadModel,XVectorOutput:()=>e.XVectorOutput,YolosFeatureExtractor:()=>c.YolosFeatureExtractor,YolosForObjectDetection:()=>e.YolosForObjectDetection,YolosImageProcessor:()=>c.YolosImageProcessor,YolosModel:()=>e.YolosModel,YolosObjectDetectionOutput:()=>e.YolosObjectDetectionOutput,YolosPreTrainedModel:()=>e.YolosPreTrainedModel,ZeroShotAudioClassificationPipeline:()=>g.ZeroShotAudioClassificationPipeline,ZeroShotClassificationPipeline:()=>g.ZeroShotClassificationPipeline,ZeroShotImageClassificationPipeline:()=>g.ZeroShotImageClassificationPipeline,ZeroShotObjectDetectionPipeline:()=>g.ZeroShotObjectDetectionPipeline,bankers_round:()=>r.bankers_round,cat:()=>C.cat,cos_sim:()=>r.cos_sim,dot:()=>r.dot,dynamic_time_warping:()=>r.dynamic_time_warping,env:()=>A.env,full:()=>C.full,full_like:()=>C.full_like,getCacheShapes:()=>i.getCacheShapes,hamming:()=>t.hamming,hanning:()=>t.hanning,interpolate:()=>C.interpolate,interpolate_4d:()=>C.interpolate_4d,interpolate_data:()=>r.interpolate_data,is_chinese_char:()=>I.is_chinese_char,layer_norm:()=>C.layer_norm,load_image:()=>s.load_image,load_video:()=>o.load_video,log_softmax:()=>r.log_softmax,magnitude:()=>r.magnitude,matmul:()=>C.matmul,max:()=>r.max,mean:()=>C.mean,mean_pooling:()=>C.mean_pooling,medianFilter:()=>r.medianFilter,mel_filter_bank:()=>t.mel_filter_bank,min:()=>r.min,ones:()=>C.ones,ones_like:()=>C.ones_like,permute:()=>C.permute,permute_data:()=>r.permute_data,pipeline:()=>g.pipeline,quantize_embeddings:()=>C.quantize_embeddings,rand:()=>C.rand,read_audio:()=>t.read_audio,rfft:()=>C.rfft,round:()=>r.round,slice:()=>C.slice,softmax:()=>r.softmax,spectrogram:()=>t.spectrogram,stack:()=>C.stack,std_mean:()=>C.std_mean,topk:()=>C.topk,window_function:()=>t.window_function,zeros:()=>C.zeros,zeros_like:()=>C.zeros_like});var A=Oe("./src/env.js"),g=Oe("./src/pipelines.js"),e=Oe("./src/models.js"),I=Oe("./src/tokenizers.js"),i=Oe("./src/configs.js"),t=Oe("./src/utils/audio.js"),s=Oe("./src/utils/image.js"),o=Oe("./src/utils/video.js"),C=Oe("./src/utils/tensor.js"),r=Oe("./src/utils/maths.js"),Q=Oe("./src/base/feature_extraction_utils.js"),B=Oe("./src/models/feature_extractors.js"),a=Oe("./src/models/auto/feature_extraction_auto.js"),d=Oe("./src/base/image_processors_utils.js"),c=Oe("./src/models/image_processors.js"),p=Oe("./src/models/auto/image_processing_auto.js"),L=Oe("./src/base/processing_utils.js"),w=Oe("./src/models/processors.js"),u=Oe("./src/models/auto/processing_auto.js"),_=Oe("./src/generation/streamers.js"),y=Oe("./src/generation/stopping_criteria.js"),M=Oe("./src/generation/logits_process.js")})();E.ASTFeatureExtractor;E.ASTForAudioClassification;E.ASTModel;E.ASTPreTrainedModel;E.AlbertForMaskedLM;E.AlbertForQuestionAnswering;E.AlbertForSequenceClassification;E.AlbertModel;E.AlbertPreTrainedModel;E.AlbertTokenizer;E.ArceeForCausalLM;E.ArceeModel;E.ArceePreTrainedModel;E.AudioClassificationPipeline;E.AutoConfig;E.AutoFeatureExtractor;E.AutoImageProcessor;E.AutoModel;E.AutoModelForAudioClassification;E.AutoModelForAudioFrameClassification;E.AutoModelForAudioTextToText;E.AutoModelForCTC;E.AutoModelForCausalLM;E.AutoModelForDepthEstimation;E.AutoModelForDocumentQuestionAnswering;E.AutoModelForImageClassification;E.AutoModelForImageFeatureExtraction;E.AutoModelForImageMatting;E.AutoModelForImageSegmentation;E.AutoModelForImageTextToText;E.AutoModelForImageToImage;E.AutoModelForMaskGeneration;E.AutoModelForMaskedLM;E.AutoModelForNormalEstimation;E.AutoModelForObjectDetection;E.AutoModelForPoseEstimation;E.AutoModelForQuestionAnswering;E.AutoModelForSemanticSegmentation;E.AutoModelForSeq2SeqLM;E.AutoModelForSequenceClassification;E.AutoModelForSpeechSeq2Seq;E.AutoModelForTextToSpectrogram;E.AutoModelForTextToWaveform;E.AutoModelForTokenClassification;E.AutoModelForUniversalSegmentation;E.AutoModelForVision2Seq;E.AutoModelForXVector;E.AutoModelForZeroShotObjectDetection;E.AutoProcessor;E.AutoTokenizer;E.AutomaticSpeechRecognitionPipeline;E.BackgroundRemovalPipeline;E.BartForConditionalGeneration;E.BartForSequenceClassification;E.BartModel;E.BartPretrainedModel;E.BartTokenizer;E.BaseModelOutput;E.BaseStreamer;E.BeitFeatureExtractor;E.BeitForImageClassification;E.BeitModel;E.BeitPreTrainedModel;E.BertForMaskedLM;E.BertForQuestionAnswering;E.BertForSequenceClassification;E.BertForTokenClassification;E.BertModel;E.BertPreTrainedModel;E.BertTokenizer;E.BitImageProcessor;E.BlenderbotForConditionalGeneration;E.BlenderbotModel;E.BlenderbotPreTrainedModel;E.BlenderbotSmallForConditionalGeneration;E.BlenderbotSmallModel;E.BlenderbotSmallPreTrainedModel;E.BlenderbotSmallTokenizer;E.BlenderbotTokenizer;E.BloomForCausalLM;E.BloomModel;E.BloomPreTrainedModel;E.BloomTokenizer;E.CLIPFeatureExtractor;E.CLIPImageProcessor;E.CLIPModel;E.CLIPPreTrainedModel;E.CLIPSegForImageSegmentation;E.CLIPSegModel;E.CLIPSegPreTrainedModel;E.CLIPTextModel;E.CLIPTextModelWithProjection;E.CLIPTokenizer;E.CLIPVisionModel;E.CLIPVisionModelWithProjection;E.CamembertForMaskedLM;E.CamembertForQuestionAnswering;E.CamembertForSequenceClassification;E.CamembertForTokenClassification;E.CamembertModel;E.CamembertPreTrainedModel;E.CamembertTokenizer;E.CausalLMOutput;E.CausalLMOutputWithPast;E.ChineseCLIPFeatureExtractor;E.ChineseCLIPModel;E.ChineseCLIPPreTrainedModel;E.ClapAudioModelWithProjection;E.ClapFeatureExtractor;E.ClapModel;E.ClapPreTrainedModel;E.ClapTextModelWithProjection;E.ClassifierFreeGuidanceLogitsProcessor;E.CodeGenForCausalLM;E.CodeGenModel;E.CodeGenPreTrainedModel;E.CodeGenTokenizer;E.CodeLlamaTokenizer;E.CohereForCausalLM;E.CohereModel;E.CoherePreTrainedModel;E.CohereTokenizer;E.ConvBertForMaskedLM;E.ConvBertForQuestionAnswering;E.ConvBertForSequenceClassification;E.ConvBertForTokenClassification;E.ConvBertModel;E.ConvBertPreTrainedModel;E.ConvBertTokenizer;E.ConvNextFeatureExtractor;E.ConvNextForImageClassification;E.ConvNextImageProcessor;E.ConvNextModel;E.ConvNextPreTrainedModel;E.ConvNextV2ForImageClassification;E.ConvNextV2Model;E.ConvNextV2PreTrainedModel;E.DFineForObjectDetection;E.DFineModel;E.DFinePreTrainedModel;E.DINOv3ConvNextModel;E.DINOv3ConvNextPreTrainedModel;E.DINOv3ViTImageProcessor;E.DINOv3ViTModel;E.DINOv3ViTPreTrainedModel;E.DPTFeatureExtractor;E.DPTForDepthEstimation;E.DPTImageProcessor;E.DPTModel;E.DPTPreTrainedModel;E.DacDecoderModel;E.DacDecoderOutput;E.DacEncoderModel;E.DacEncoderOutput;E.DacFeatureExtractor;E.DacModel;E.DacPreTrainedModel;E.DataTypeMap;E.DebertaForMaskedLM;E.DebertaForQuestionAnswering;E.DebertaForSequenceClassification;E.DebertaForTokenClassification;E.DebertaModel;E.DebertaPreTrainedModel;E.DebertaTokenizer;E.DebertaV2ForMaskedLM;E.DebertaV2ForQuestionAnswering;E.DebertaV2ForSequenceClassification;E.DebertaV2ForTokenClassification;E.DebertaV2Model;E.DebertaV2PreTrainedModel;E.DebertaV2Tokenizer;E.DecisionTransformerModel;E.DecisionTransformerPreTrainedModel;E.DeiTFeatureExtractor;E.DeiTForImageClassification;E.DeiTImageProcessor;E.DeiTModel;E.DeiTPreTrainedModel;E.DepthAnythingForDepthEstimation;E.DepthAnythingPreTrainedModel;E.DepthEstimationPipeline;E.DepthProForDepthEstimation;E.DepthProPreTrainedModel;E.DetrFeatureExtractor;E.DetrForObjectDetection;E.DetrForSegmentation;E.DetrImageProcessor;E.DetrModel;E.DetrObjectDetectionOutput;E.DetrPreTrainedModel;E.DetrSegmentationOutput;E.Dinov2ForImageClassification;E.Dinov2Model;E.Dinov2PreTrainedModel;E.Dinov2WithRegistersForImageClassification;E.Dinov2WithRegistersModel;E.Dinov2WithRegistersPreTrainedModel;E.DistilBertForMaskedLM;E.DistilBertForQuestionAnswering;E.DistilBertForSequenceClassification;E.DistilBertForTokenClassification;E.DistilBertModel;E.DistilBertPreTrainedModel;E.DistilBertTokenizer;E.DocumentQuestionAnsweringPipeline;E.DonutFeatureExtractor;E.DonutImageProcessor;E.DonutSwinModel;E.DonutSwinPreTrainedModel;E.EfficientNetForImageClassification;E.EfficientNetImageProcessor;E.EfficientNetModel;E.EfficientNetPreTrainedModel;E.ElectraForMaskedLM;E.ElectraForQuestionAnswering;E.ElectraForSequenceClassification;E.ElectraForTokenClassification;E.ElectraModel;E.ElectraPreTrainedModel;E.ElectraTokenizer;E.EncodecFeatureExtractor;E.EosTokenCriteria;E.Ernie4_5_ForCausalLM;E.Ernie4_5_Model;E.Ernie4_5_PretrainedModel;E.Ernie4_5_Tokenizer;E.EsmForMaskedLM;E.EsmForSequenceClassification;E.EsmForTokenClassification;E.EsmModel;E.EsmPreTrainedModel;E.EsmTokenizer;E.ExaoneForCausalLM;E.ExaoneModel;E.ExaonePreTrainedModel;E.FFT;E.FalconForCausalLM;E.FalconModel;E.FalconPreTrainedModel;E.FalconTokenizer;E.FastViTForImageClassification;E.FastViTModel;E.FastViTPreTrainedModel;E.FeatureExtractionPipeline;E.FeatureExtractor;E.FillMaskPipeline;E.Florence2ForConditionalGeneration;E.Florence2PreTrainedModel;E.Florence2Processor;E.ForcedBOSTokenLogitsProcessor;E.ForcedEOSTokenLogitsProcessor;E.GLPNFeatureExtractor;E.GLPNForDepthEstimation;E.GLPNModel;E.GLPNPreTrainedModel;E.GPT2LMHeadModel;E.GPT2Model;E.GPT2PreTrainedModel;E.GPT2Tokenizer;E.GPTBigCodeForCausalLM;E.GPTBigCodeModel;E.GPTBigCodePreTrainedModel;E.GPTJForCausalLM;E.GPTJModel;E.GPTJPreTrainedModel;E.GPTNeoForCausalLM;E.GPTNeoModel;E.GPTNeoPreTrainedModel;E.GPTNeoXForCausalLM;E.GPTNeoXModel;E.GPTNeoXPreTrainedModel;E.GPTNeoXTokenizer;E.Gemma2ForCausalLM;E.Gemma2Model;E.Gemma2PreTrainedModel;E.Gemma3ForCausalLM;E.Gemma3Model;E.Gemma3PreTrainedModel;E.Gemma3nAudioFeatureExtractor;E.Gemma3nForConditionalGeneration;E.Gemma3nPreTrainedModel;E.Gemma3nProcessor;E.GemmaForCausalLM;E.GemmaModel;E.GemmaPreTrainedModel;E.GemmaTokenizer;E.GlmForCausalLM;E.GlmModel;E.GlmPreTrainedModel;E.GraniteForCausalLM;E.GraniteModel;E.GranitePreTrainedModel;E.Grok1Tokenizer;E.GroundingDinoForObjectDetection;E.GroundingDinoImageProcessor;E.GroundingDinoPreTrainedModel;E.GroundingDinoProcessor;E.GroupViTModel;E.GroupViTPreTrainedModel;E.HeliumForCausalLM;E.HeliumModel;E.HeliumPreTrainedModel;E.HerbertTokenizer;E.HieraForImageClassification;E.HieraModel;E.HieraPreTrainedModel;E.HubertForCTC;E.HubertForSequenceClassification;E.HubertModel;E.HubertPreTrainedModel;E.IJepaForImageClassification;E.IJepaModel;E.IJepaPreTrainedModel;E.Idefics3ForConditionalGeneration;E.Idefics3ImageProcessor;E.Idefics3PreTrainedModel;E.Idefics3Processor;E.ImageClassificationPipeline;E.ImageFeatureExtractionPipeline;E.ImageFeatureExtractor;E.ImageMattingOutput;E.ImageProcessor;E.ImageSegmentationPipeline;E.ImageToImagePipeline;E.ImageToTextPipeline;E.InterruptableStoppingCriteria;E.JAISLMHeadModel;E.JAISModel;E.JAISPreTrainedModel;E.JinaCLIPImageProcessor;E.JinaCLIPModel;E.JinaCLIPPreTrainedModel;E.JinaCLIPProcessor;E.JinaCLIPTextModel;E.JinaCLIPVisionModel;E.Lfm2ForCausalLM;E.Lfm2Model;E.Lfm2PreTrainedModel;E.LiteWhisperForConditionalGeneration;E.Llama4ForCausalLM;E.Llama4PreTrainedModel;E.LlamaForCausalLM;E.LlamaModel;E.LlamaPreTrainedModel;E.LlamaTokenizer;E.LlavaForConditionalGeneration;E.LlavaOnevisionForConditionalGeneration;E.LlavaOnevisionImageProcessor;E.LlavaPreTrainedModel;E.LlavaProcessor;E.LlavaQwen2ForCausalLM;E.LogitsProcessor;E.LogitsProcessorList;E.LogitsWarper;E.LongT5ForConditionalGeneration;E.LongT5Model;E.LongT5PreTrainedModel;E.M2M100ForConditionalGeneration;E.M2M100Model;E.M2M100PreTrainedModel;E.M2M100Tokenizer;E.MBart50Tokenizer;E.MBartForCausalLM;E.MBartForConditionalGeneration;E.MBartForSequenceClassification;E.MBartModel;E.MBartPreTrainedModel;E.MBartTokenizer;E.MPNetForMaskedLM;E.MPNetForQuestionAnswering;E.MPNetForSequenceClassification;E.MPNetForTokenClassification;E.MPNetModel;E.MPNetPreTrainedModel;E.MPNetTokenizer;E.MT5ForConditionalGeneration;E.MT5Model;E.MT5PreTrainedModel;E.MarianMTModel;E.MarianModel;E.MarianPreTrainedModel;E.MarianTokenizer;E.Mask2FormerImageProcessor;E.MaskFormerFeatureExtractor;E.MaskFormerForInstanceSegmentation;E.MaskFormerImageProcessor;E.MaskFormerModel;E.MaskFormerPreTrainedModel;E.MaskedLMOutput;E.MaxLengthCriteria;E.Metric3DForDepthEstimation;E.Metric3DPreTrainedModel;E.Metric3Dv2ForDepthEstimation;E.Metric3Dv2PreTrainedModel;E.MgpstrForSceneTextRecognition;E.MgpstrModelOutput;E.MgpstrPreTrainedModel;E.MgpstrProcessor;E.MgpstrTokenizer;E.MimiDecoderModel;E.MimiDecoderOutput;E.MimiEncoderModel;E.MimiEncoderOutput;E.MimiModel;E.MimiPreTrainedModel;E.MinLengthLogitsProcessor;E.MinNewTokensLengthLogitsProcessor;E.MistralForCausalLM;E.MistralModel;E.MistralPreTrainedModel;E.MobileBertForMaskedLM;E.MobileBertForQuestionAnswering;E.MobileBertForSequenceClassification;E.MobileBertModel;E.MobileBertPreTrainedModel;E.MobileBertTokenizer;E.MobileLLMForCausalLM;E.MobileLLMModel;E.MobileLLMPreTrainedModel;E.MobileNetV1FeatureExtractor;E.MobileNetV1ForImageClassification;E.MobileNetV1ForSemanticSegmentation;E.MobileNetV1ImageProcessor;E.MobileNetV1Model;E.MobileNetV1PreTrainedModel;E.MobileNetV2FeatureExtractor;E.MobileNetV2ForImageClassification;E.MobileNetV2ForSemanticSegmentation;E.MobileNetV2ImageProcessor;E.MobileNetV2Model;E.MobileNetV2PreTrainedModel;E.MobileNetV3FeatureExtractor;E.MobileNetV3ForImageClassification;E.MobileNetV3ForSemanticSegmentation;E.MobileNetV3ImageProcessor;E.MobileNetV3Model;E.MobileNetV3PreTrainedModel;E.MobileNetV4FeatureExtractor;E.MobileNetV4ForImageClassification;E.MobileNetV4ForSemanticSegmentation;E.MobileNetV4ImageProcessor;E.MobileNetV4Model;E.MobileNetV4PreTrainedModel;E.MobileViTFeatureExtractor;E.MobileViTForImageClassification;E.MobileViTImageProcessor;E.MobileViTModel;E.MobileViTPreTrainedModel;E.MobileViTV2ForImageClassification;E.MobileViTV2Model;E.MobileViTV2PreTrainedModel;E.ModelOutput;E.ModernBertDecoderForCausalLM;E.ModernBertDecoderModel;E.ModernBertDecoderPreTrainedModel;E.ModernBertForMaskedLM;E.ModernBertForSequenceClassification;E.ModernBertForTokenClassification;E.ModernBertModel;E.ModernBertPreTrainedModel;E.Moondream1ForConditionalGeneration;E.MoonshineFeatureExtractor;E.MoonshineForConditionalGeneration;E.MoonshineModel;E.MoonshinePreTrainedModel;E.MoonshineProcessor;E.MptForCausalLM;E.MptModel;E.MptPreTrainedModel;E.MultiModalityCausalLM;E.MultiModalityPreTrainedModel;E.MusicgenForCausalLM;E.MusicgenForConditionalGeneration;E.MusicgenModel;E.MusicgenPreTrainedModel;E.NeoBertForMaskedLM;E.NeoBertForQuestionAnswering;E.NeoBertForSequenceClassification;E.NeoBertForTokenClassification;E.NeoBertModel;E.NeoBertPreTrainedModel;E.NllbTokenizer;E.NoBadWordsLogitsProcessor;E.NoRepeatNGramLogitsProcessor;E.NomicBertModel;E.NomicBertPreTrainedModel;E.NougatImageProcessor;E.NougatTokenizer;E.OPTForCausalLM;E.OPTModel;E.OPTPreTrainedModel;E.ObjectDetectionPipeline;E.Olmo2ForCausalLM;E.Olmo2Model;E.Olmo2PreTrainedModel;E.OlmoForCausalLM;E.OlmoModel;E.OlmoPreTrainedModel;E.OpenELMForCausalLM;E.OpenELMModel;E.OpenELMPreTrainedModel;E.OwlViTFeatureExtractor;E.OwlViTForObjectDetection;E.OwlViTImageProcessor;E.OwlViTModel;E.OwlViTPreTrainedModel;E.OwlViTProcessor;E.Owlv2ForObjectDetection;E.Owlv2ImageProcessor;E.Owlv2Model;E.Owlv2PreTrainedModel;E.PaliGemmaForConditionalGeneration;E.PaliGemmaPreTrainedModel;E.PaliGemmaProcessor;E.PatchTSMixerForPrediction;E.PatchTSMixerModel;E.PatchTSMixerPreTrainedModel;E.PatchTSTForPrediction;E.PatchTSTModel;E.PatchTSTPreTrainedModel;E.Phi3ForCausalLM;E.Phi3Model;E.Phi3PreTrainedModel;E.Phi3VForCausalLM;E.Phi3VImageProcessor;E.Phi3VPreTrainedModel;E.Phi3VProcessor;E.PhiForCausalLM;E.PhiModel;E.PhiPreTrainedModel;E.Pipeline;E.PreTrainedModel;E.PreTrainedTokenizer;E.PretrainedConfig;E.PretrainedMixin;E.Processor;E.PvtForImageClassification;E.PvtImageProcessor;E.PvtModel;E.PvtPreTrainedModel;E.PyAnnoteFeatureExtractor;E.PyAnnoteForAudioFrameClassification;E.PyAnnoteModel;E.PyAnnotePreTrainedModel;E.PyAnnoteProcessor;E.QuestionAnsweringModelOutput;E.QuestionAnsweringPipeline;E.Qwen2ForCausalLM;E.Qwen2Model;E.Qwen2PreTrainedModel;E.Qwen2Tokenizer;E.Qwen2VLForConditionalGeneration;E.Qwen2VLImageProcessor;E.Qwen2VLPreTrainedModel;E.Qwen2VLProcessor;E.Qwen3ForCausalLM;E.Qwen3Model;E.Qwen3PreTrainedModel;E.RFDetrForObjectDetection;E.RFDetrModel;E.RFDetrObjectDetectionOutput;E.RFDetrPreTrainedModel;E.RTDetrForObjectDetection;E.RTDetrImageProcessor;E.RTDetrModel;E.RTDetrObjectDetectionOutput;E.RTDetrPreTrainedModel;E.RTDetrV2ForObjectDetection;E.RTDetrV2Model;E.RTDetrV2ObjectDetectionOutput;E.RTDetrV2PreTrainedModel;E.RawAudio;E.RawImage;E.RawVideo;E.RawVideoFrame;E.RepetitionPenaltyLogitsProcessor;E.ResNetForImageClassification;E.ResNetModel;E.ResNetPreTrainedModel;E.RoFormerForMaskedLM;E.RoFormerForQuestionAnswering;E.RoFormerForSequenceClassification;E.RoFormerForTokenClassification;E.RoFormerModel;E.RoFormerPreTrainedModel;E.RoFormerTokenizer;E.RobertaForMaskedLM;E.RobertaForQuestionAnswering;E.RobertaForSequenceClassification;E.RobertaForTokenClassification;E.RobertaModel;E.RobertaPreTrainedModel;E.RobertaTokenizer;E.SamImageProcessor;E.SamImageSegmentationOutput;E.SamModel;E.SamPreTrainedModel;E.SamProcessor;E.SapiensForDepthEstimation;E.SapiensForNormalEstimation;E.SapiensForSemanticSegmentation;E.SapiensPreTrainedModel;E.SeamlessM4TFeatureExtractor;E.SegformerFeatureExtractor;E.SegformerForImageClassification;E.SegformerForSemanticSegmentation;E.SegformerImageProcessor;E.SegformerModel;E.SegformerPreTrainedModel;E.Seq2SeqLMOutput;E.SequenceClassifierOutput;E.SiglipImageProcessor;E.SiglipModel;E.SiglipPreTrainedModel;E.SiglipTextModel;E.SiglipTokenizer;E.SiglipVisionModel;E.SmolLM3ForCausalLM;E.SmolLM3Model;E.SmolLM3PreTrainedModel;E.SmolVLMForConditionalGeneration;E.SmolVLMImageProcessor;E.SmolVLMProcessor;E.SnacDecoderModel;E.SnacEncoderModel;E.SnacFeatureExtractor;E.SnacModel;E.SnacPreTrainedModel;E.SpeechT5FeatureExtractor;E.SpeechT5ForSpeechToText;E.SpeechT5ForTextToSpeech;E.SpeechT5HifiGan;E.SpeechT5Model;E.SpeechT5PreTrainedModel;E.SpeechT5Processor;E.SpeechT5Tokenizer;E.SqueezeBertForMaskedLM;E.SqueezeBertForQuestionAnswering;E.SqueezeBertForSequenceClassification;E.SqueezeBertModel;E.SqueezeBertPreTrainedModel;E.SqueezeBertTokenizer;E.StableLmForCausalLM;E.StableLmModel;E.StableLmPreTrainedModel;E.Starcoder2ForCausalLM;E.Starcoder2Model;E.Starcoder2PreTrainedModel;E.StoppingCriteria;E.StoppingCriteriaList;E.StyleTextToSpeech2Model;E.StyleTextToSpeech2PreTrainedModel;E.SummarizationPipeline;E.SuppressTokensAtBeginLogitsProcessor;E.Swin2SRForImageSuperResolution;E.Swin2SRImageProcessor;E.Swin2SRModel;E.Swin2SRPreTrainedModel;E.SwinForImageClassification;E.SwinForSemanticSegmentation;E.SwinModel;E.SwinPreTrainedModel;E.T5ForConditionalGeneration;E.T5Model;E.T5PreTrainedModel;E.T5Tokenizer;E.TableTransformerForObjectDetection;E.TableTransformerModel;E.TableTransformerObjectDetectionOutput;E.TableTransformerPreTrainedModel;E.TemperatureLogitsWarper;E.Tensor;E.Text2TextGenerationPipeline;E.TextClassificationPipeline;E.TextGenerationPipeline;E.TextStreamer;E.TextToAudioPipeline;E.TokenClassificationPipeline;E.TokenClassifierOutput;E.TokenizerModel;E.TopKLogitsWarper;E.TopPLogitsWarper;E.TrOCRForCausalLM;E.TrOCRPreTrainedModel;E.TranslationPipeline;E.UltravoxModel;E.UltravoxPreTrainedModel;E.UltravoxProcessor;E.UniSpeechForCTC;E.UniSpeechForSequenceClassification;E.UniSpeechModel;E.UniSpeechPreTrainedModel;E.UniSpeechSatForAudioFrameClassification;E.UniSpeechSatForCTC;E.UniSpeechSatForSequenceClassification;E.UniSpeechSatModel;E.UniSpeechSatPreTrainedModel;E.VLChatProcessor;E.VLMImageProcessor;E.VaultGemmaForCausalLM;E.VaultGemmaModel;E.VaultGemmaPreTrainedModel;E.ViTFeatureExtractor;E.ViTForImageClassification;E.ViTImageProcessor;E.ViTMAEModel;E.ViTMAEPreTrainedModel;E.ViTMSNForImageClassification;E.ViTMSNModel;E.ViTMSNPreTrainedModel;E.ViTModel;E.ViTPreTrainedModel;E.VisionEncoderDecoderModel;E.VitMatteForImageMatting;E.VitMatteImageProcessor;E.VitMattePreTrainedModel;E.VitPoseForPoseEstimation;E.VitPoseImageProcessor;E.VitPosePreTrainedModel;E.VitsModel;E.VitsModelOutput;E.VitsPreTrainedModel;E.VitsTokenizer;E.VoxtralForConditionalGeneration;E.VoxtralProcessor;E.Wav2Vec2BertForCTC;E.Wav2Vec2BertForSequenceClassification;E.Wav2Vec2BertModel;E.Wav2Vec2BertPreTrainedModel;E.Wav2Vec2CTCTokenizer;E.Wav2Vec2FeatureExtractor;E.Wav2Vec2ForAudioFrameClassification;E.Wav2Vec2ForCTC;E.Wav2Vec2ForSequenceClassification;E.Wav2Vec2Model;E.Wav2Vec2PreTrainedModel;E.Wav2Vec2Processor;E.Wav2Vec2ProcessorWithLM;E.WavLMForAudioFrameClassification;E.WavLMForCTC;E.WavLMForSequenceClassification;E.WavLMForXVector;E.WavLMModel;E.WavLMPreTrainedModel;E.WeSpeakerFeatureExtractor;E.WeSpeakerResNetModel;E.WeSpeakerResNetPreTrainedModel;E.WhisperFeatureExtractor;E.WhisperForConditionalGeneration;E.WhisperModel;E.WhisperPreTrainedModel;E.WhisperProcessor;E.WhisperTextStreamer;E.WhisperTimeStampLogitsProcessor;E.WhisperTokenizer;E.XLMForQuestionAnswering;E.XLMForSequenceClassification;E.XLMForTokenClassification;E.XLMModel;E.XLMPreTrainedModel;E.XLMRobertaForMaskedLM;E.XLMRobertaForQuestionAnswering;E.XLMRobertaForSequenceClassification;E.XLMRobertaForTokenClassification;E.XLMRobertaModel;E.XLMRobertaPreTrainedModel;E.XLMRobertaTokenizer;E.XLMTokenizer;E.XLMWithLMHeadModel;E.XVectorOutput;E.YolosFeatureExtractor;E.YolosForObjectDetection;E.YolosImageProcessor;E.YolosModel;E.YolosObjectDetectionOutput;E.YolosPreTrainedModel;E.ZeroShotAudioClassificationPipeline;E.ZeroShotClassificationPipeline;E.ZeroShotImageClassificationPipeline;E.ZeroShotObjectDetectionPipeline;E.bankers_round;E.cat;E.cos_sim;E.dot;E.dynamic_time_warping;E.env;E.full;E.full_like;E.getCacheShapes;E.hamming;E.hanning;E.interpolate;E.interpolate_4d;E.interpolate_data;E.is_chinese_char;E.layer_norm;var Uy=E.load_image;E.load_video;E.log_softmax;E.magnitude;E.matmul;E.max;E.mean;E.mean_pooling;E.medianFilter;E.mel_filter_bank;E.min;E.ones;E.ones_like;E.permute;E.permute_data;var ih=E.pipeline;E.quantize_embeddings;E.rand;E.read_audio;E.rfft;E.round;E.slice;E.softmax;E.spectrogram;E.stack;E.std_mean;E.topk;E.window_function;E.zeros;E.zeros_like;function by(A){let g="";for(let e=0;ee.charCodeAt(0)))}function Vi(A,g){if(A.length{let I=new Map,i=(t,...s)=>new Promise((o,C)=>{let r=new Date().getTime()+"-"+Math.random();I.set(r,[o,C]),g.postMessage({rpc:t,id:r,args:s})});g.postMessage({ready:!0}),g.onmessage=t=>{if(t.data.ready){e(i);return}let s=I.get(t.data.id);s!=null&&(I.delete(t.data.id),t.data.error?s[1](new Error(t.data.error)):s[0](t.data.result))}})}static runtime(){let g=new Map,e=async I=>{if(I.data.ready&&postMessage({ready:!0}),I.data.rpc){let t={id:I.data.id,result:null,error:null};try{t.result=await g.get(I.data.rpc)?.(...I.data.args)}catch(s){t.error=s.toString()}postMessage(t)}};return postMessage({ready:!0}),{handler:e,register:(I,i)=>{g.set(I,i)}}}}let{handler:Yy,register:Sa}=Ty.runtime();onmessage=Yy;let zt=new Map;function oh(A){let g=[];return{async batch(e){g.push(await A(e))},async finalize(){let e=g.reduce((r,Q)=>r+Q.dims[0],0),I=g[0].dims[1],i=2,t=new Float32Array(e*I),s=0;for(let r=0;r{let g=new Date().getTime()+"-"+Math.random(),e={device:"webgpu"};if(A.type=="text"){let I=await ih("feature-extraction",A.model,e),i=oh(async t=>{let s=t.map(C=>C?.toString()??""),o=await I(s,{pooling:"mean",normalize:!0});if(o.dims.length==3&&(o=o.mean(1)),o.dims.length!=2||o.dims[0]!=t.length)throw new Error("output embedding dimension mismatch");return o});return zt.set(g,i),g}else if(A.type=="image"){let I=await ih("image-feature-extraction",A.model,e),i=oh(async t=>{let s=t.map(C=>xy(C)??"");s=await Promise.all(s.map(C=>Uy(C)));let o=await I(s);if(o.dims.length==3&&(o=o.mean(1)),o.dims.length!=2||o.dims[0]!=s.length)throw new Error("output embedding dimension mismatch");return o});return zt.set(g,i),g}else throw new Error("invalid data type")});Sa("embedding.batch",async(A,g)=>{await zt.get(A)?.batch(g)});Sa("embedding.finalize",async A=>{let g=zt.get(A);if(g)return zt.delete(A),g.finalize()});