From 7dec9d8cc4f50aab8ec2db5d429b7b8b704f2fe7 Mon Sep 17 00:00:00 2001 From: Nicholas Albion Date: Thu, 31 Aug 2023 12:04:16 +1000 Subject: [PATCH 1/6] build-root-directory: bindings/java --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dd87bee4..6cbdadfd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -431,6 +431,7 @@ jobs: uses: gradle/gradle-build-action@v2 with: arguments: publish + build-root-directory: bindings/java env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} From 2f52783a080e8955e80e4324fed73e2f906bb80c Mon Sep 17 00:00:00 2001 From: Nicholas Albion Date: Thu, 31 Aug 2023 14:54:02 +1000 Subject: [PATCH 2/6] OSSRH_USERNAME -> JIRA_USER --- .github/workflows/build.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6cbdadfd..08eda870 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -433,8 +433,10 @@ jobs: arguments: publish build-root-directory: bindings/java env: - MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} - MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + MAVEN_USERNAME: ${{ secrets.JIRA_USER }} + MAVEN_PASSWORD: ${{ secrets.JIRA_PASS }} + # MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} + # MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} quantize: runs-on: ubuntu-latest From 6780c98e193c19decb99157496c74046dd0e4aac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=83=E5=AE=A2=E9=A3=9E=E9=BE=99?= <562826179@qq.com> Date: Tue, 5 Sep 2023 18:53:34 +0800 Subject: [PATCH 3/6] readme : update CMake build commands (#1231) * Update README.md * Update README.md: `vcpkg install opencl clblast` * readme : update build commands --------- Co-authored-by: Georgi Gerganov --- README.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 9192462b..5f180604 100644 --- a/README.md +++ b/README.md @@ -287,8 +287,8 @@ speed-up - more than x3 faster compared with CPU-only execution. Here are the in WHISPER_COREML=1 make -j # using CMake - cd build - cmake -DWHISPER_COREML=1 .. + cmake -B build -DWHISPER_COREML=1 + cmake --build build -j --config Release ``` - Run the examples as usual. For example: @@ -366,8 +366,8 @@ This can result in significant speedup in encoder performance. Here are the inst And then build the project using cmake: ```bash - cd build - cmake -DWHISPER_OPENVINO=1 .. + cmake -B build -DWHISPER_OPENVINO=1 + cmake --build build -j --config Release ``` - Run the examples as usual. For example: @@ -418,11 +418,9 @@ make clean WHISPER_CLBLAST=1 make -j CMake: -cd whisper.cpp ; mkdir build ; cd build -cmake -DWHISPER_CLBLAST=ON .. -make clean -make -j -cp bin/* ../ +cd whisper.cpp +cmake -B build -DWHISPER_CLBLAST=ON +cmake --build build -j --config Release ``` From 59a3d0cb576db605f76f82f07350647837e15c7a Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 5 Sep 2023 13:54:40 +0300 Subject: [PATCH 4/6] ggml : sync (ggml-alloc, GPU, eps, etc.) (#1220) * ggml : sync (ggml-alloc, GPU, eps, etc.) * ggml : fix build * wasm : fix build --- bindings/javascript/libwhisper.worker.js | 2 +- bindings/javascript/whisper.js | 12 +- examples/common.cpp | 94 +- examples/common.h | 21 +- examples/talk.wasm/gpt-2.cpp | 17 +- examples/talk/gpt-2.cpp | 12 +- ggml-alloc.c | 594 ++ ggml-alloc.h | 26 + ggml-cuda.cu | 4336 ++++++++++++-- ggml-cuda.h | 46 +- ggml-metal.h | 20 +- ggml-metal.m | 723 ++- ggml-metal.metal | 2136 +++---- ggml-opencl.cpp | 6 +- ggml.c | 6644 ++++++++++++++-------- ggml.h | 620 +- whisper.cpp | 40 +- 17 files changed, 11254 insertions(+), 4095 deletions(-) create mode 100644 ggml-alloc.c create mode 100644 ggml-alloc.h diff --git a/bindings/javascript/libwhisper.worker.js b/bindings/javascript/libwhisper.worker.js index ec4811ee..db2083ad 100644 --- a/bindings/javascript/libwhisper.worker.js +++ b/bindings/javascript/libwhisper.worker.js @@ -1 +1 @@ -"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}whisper_factory(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}; +"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}whisper_factory(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err(`worker.js received unknown command ${e.data.cmd}`);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage; diff --git a/bindings/javascript/whisper.js b/bindings/javascript/whisper.js index 0a9bb720..60ca4db9 100644 --- a/bindings/javascript/whisper.js +++ b/bindings/javascript/whisper.js @@ -3,19 +3,17 @@ var whisper_factory = (() => { var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; return ( -function(whisper_factory) { - whisper_factory = whisper_factory || {}; +function(moduleArg = {}) { -function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I16(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP16}function GROWABLE_HEAP_U16(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU16}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU32}function GROWABLE_HEAP_F32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF64}var Module=typeof whisper_factory!="undefined"?whisper_factory:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var ENVIRONMENT_IS_PTHREAD=Module["ENVIRONMENT_IS_PTHREAD"]||false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{var ret=tryParseAsDataURI(filename);if(ret){onload(ret)}filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=(status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"};let nodeWorkerThreads;try{nodeWorkerThreads=require("worker_threads")}catch(e){console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?');throw e}global.Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}if(!ENVIRONMENT_IS_NODE){read_=url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance=="undefined"){global.performance=require("perf_hooks").performance}}var defaultPrint=console.log.bind(console);var defaultPrintErr=console.warn.bind(console);if(ENVIRONMENT_IS_NODE){defaultPrint=str=>fs.writeSync(1,str+"\n");defaultPrintErr=str=>fs.writeSync(2,str+"\n")}var out=Module["print"]||defaultPrint;var err=Module["printErr"]||defaultPrintErr;Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var POINTER_SIZE=4;var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof SharedArrayBuffer?heapOrArray.slice(idx,endPtr):heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;if(ENVIRONMENT_IS_PTHREAD){buffer=Module["buffer"]}function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module["wasmMemory"];buffer=Module["buffer"]}else{if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":2147483648/65536,"shared":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){err("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)")}throw Error("bad memory")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,AGFzbQEAAAABhwVTYAF/AGABfwF/YAJ/fwBgA39/fwF/YAJ/fwF/YAN/f38AYAR/f39/AX9gBH9/f38AYAZ/f39/f38Bf2AAAGAFf39/f38Bf2AFf39/f38AYAZ/f39/f38AYAh/f39/f39/fwF/YAABf2AHf39/f39/fwF/YAd/f39/f39/AGABfQF9YAV/fn5+fgBgA39+fwF+YAp/f39/f39/f39/AGAFf39/f34Bf2AEf39/fwF+YAN/f38BfGAEf35+fwBgCn9/f39/f39/f38Bf2AIf39/f39/f38AYAJ8fAF8YAd/f39/f35+AX9gBn9/f39+fgF/YAV/f35/fwBgBH9/fn4Bf2ACf34AYAF8AX1gAnx/AXxgBX9/fn5+AX9gAXwBfGAMf39/f39/f39/f39/AX9gA39+fwF/YA9/f39/f39/f39/f39/f38AYAt/f39/f39/f39/fwF/YAZ/fH9/f38Bf2AJf39/f39/f39/AGAJf39/f39/f39/AX9gBX9/f398AX9gAAF8YAN/f34Bf2AAAX5gAn98AGACfX0BfWAEfn5+fgF/YAJ+fwF/YAN/f3wBf2ACf30Bf2AGf39+fn9/AX9gBH9/fn8Bf2ACfn4BfGAEf39+fgBgBn9/f39/fQBgA39/fwF9YAR/f39+AX5gA39/fgBgAn5+AX1gAn9/AX5gA35+fgF/YAh/f35+fn9/fwF/YAF/AX5gAX4Bf2AFf319fX0AYAt/f39/f39/f39/fwBgAX0AYAJ/fQBgAn19AGADf399AGADf319AGADfX19AGAEf399fwBgBH99fX0AYAR9fX19AGACfX8Bf2AFf39/fX0AYAV/f39/fQBgBH9/f38BfAKyAjIBYQFiAAkBYQFjAAUBYQFkAAEBYQFlAAUBYQFmAAABYQFnAAsBYQFoAC0BYQFpAAwBYQFqAAQBYQFrAAEBYQFsAAUBYQFtAAABYQFuAAABYQFvAAkBYQFwAAEBYQFxAAYBYQFyAAMBYQFzAAIBYQF0AAUBYQF1AAEBYQF2AAABYQF3ABcBYQF4AAoBYQF5ABABYQF6AA4BYQFBAA4BYQFCAAoBYQFDAAQBYQFEAAQBYQFFAAEBYQFGAAABYQFHAAYBYQFIAA4BYQFJAAYBYQFKAAABYQFLABcBYQFMAAMBYQFNAAUBYQFOAAYBYQFP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Qv///////z+DIQwgAiAEhUKAgICAgICAgIB/gyEKIAJC////////P4MiDUIgiCEOIARCMIinQf//AXEhBwJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAdB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiC0KAgICAgIDA//8AVCALQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQoMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhCiADIQEMAgsgASALQoCAgICAgMD//wCFhFAEQCACIAOEUARAQoCAgICAgOD//wAhCkIAIQEMAwsgCkKAgICAgIDA//8AhCEKQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAIAEgC4QhAkIAIQEgAlAEQEKAgICAgIDg//8AIQoMAwsgCkKAgICAgIDA//8AhCEKDAILIAEgC4RQBEBCACEBDAILIAIgA4RQBEBCACEBDAILIAtC////////P1gEQCAFQdAAaiABIA0gASANIA1QIgYbeSAGQQZ0rXynIgZBD2sQY0EQIAZrIQYgBSkDWCINQiCIIQ4gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAwgAyAMIAxQIggbeSAIQQZ0rXynIghBD2sQYyAGIAhrQRBqIQYgBSkDSCEMIAUpA0AhAwsgA0IPhiILQoCA/v8PgyICIAFCIIgiBH4iECALQiCIIhMgAUL/////D4MiAX58Ig9CIIYiESABIAJ+fCILIBFUrSACIA1C/////w+DIg1+IhUgBCATfnwiESAMQg+GIhIgA0IxiIRC/////w+DIgMgAX58IhQgDyAQVK1CIIYgD0IgiIR8Ig8gAiAOQoCABIQiDH4iFiANIBN+fCIOIBJCIIhCgICAgAiEIgIgAX58IhAgAyAEfnwiEkIghnwiF3whASAHIAlqIAZqQf//AGshBgJAIAIgBH4iGCAMIBN+fCIEIBhUrSAEIAQgAyANfnwiBFatfCACIAx+fCAEIAQgESAVVK0gESAUVq18fCIEVq18IAMgDH4iAyACIA1+fCICIANUrUIghiACQiCIhHwgBCACQiCGfCICIARUrXwgAiACIBAgElatIA4gFlStIA4gEFat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AygCEBogAyADKAIIQQRrNgIIDAELCyADKAIABEAgAygCECADKAIAIgEgAygCDCABa0ECdRCYAwsLIAtBIGokAAwBCyABIANJBEAgACgCBCAAKAIAIgNrGiAAIAFBAnQgA2oQ/wIgACgCACIBIAAoAgggAWtBfHFqGiAAKAIEGgsLCyAAKAIAIAJBAnRqKAIABEAgACgCACACQQJ0aigCACIBQQRqQX/+HgIARQRAIAEgASgCACgCCBEAAAsLIAooAgghASAKQQA2AgggACgCACACQQJ0aiABNgIAIAooAgghACAKQQA2AgggAARAIABBBGpBf/4eAgBFBEAgACAAKAIAKAIIEQAACwsgCkEQaiQACwkAQZwcELMEAAslACAALQALQQd2BEAgACAAKAIAIAAoAghB/////wdxENYBCyAACzQBAX8jAEEQayIDJAAgAyABNgIMIAAgAygCDDYCACAAQQRqIAIoAgA2AgAgA0EQaiQAIAALlwICBH8IfiMAQRBrIgQkAAJAIAIpAxAiByABKQMQIgiBQgBSDQAgAikDGCIJIAEpAxgiCoFCAFINACACKQMgIgsgASkDICIMgUIAUg0AIAIpAygiDSABKQMoIg6BQgBSDQAgASgCSCEGAkACQCAHIAhSDQAgCSAKUg0AIAsgDFINACANIA5SDQAgBg0AIAEhAwwBCyAAIAEoAgAgAigCCCACQRBqQQAQPCIDQQ42AkAgBgRAIAAgAygCACADKAIIIANBEGpBABA8IQULIAMgAjYCUCADIAE2AkwgAyAFNgJICyAEQRBqJAAgAw8LIARBxcoANgIIIARBiyc2AgQgBEGRJDYCAEG4nwIoAgBBiNIAIAQQMhAAAAvwAQEDfwJ/IwBBEGsiBCQAAkAgASkDECACKQMQUg0AIAEpAxggAikDGFINACABKQMgIAIpAyBSDQAgASkDKCACKQMoUg0AIAFBEGohAwJ/An8CQCABKAJIDQAgAigCSA0AQQAMAQtBAQshBSAAIAEoAgAgASgCCCADQQAQPCIDQQI2AkBBACAFRQ0AGiAAIAMoAgAgAygCCCADQRBqQQAQPAshACADIAI2AlAgAyABNgJMIAMgADYCSCAEQRBqJAAgAwwBCyAEQdvKADYCCCAEQcsjNgIEIARBkSQ2AgBBuJ8CKAIAQYjSACAEEDIQAAALCx0A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AgAMAQsgAAsiBCADaiABIAIQdSAAIAIgA2oiARCWASAFQQA6AA8gASAEaiAFLQAPOgAADAELIAAgBCACIANqIARrIAMgA0EAIAIgARC+AQsgBUEQaiQAIAAL4QICBX8BfiAAQgA3AgQgACAAQQRqIgU2AgAgASgCBCICBEAgASgCACIGIAJBA3RqIQcDQCAAKAIEIQQCQAJAAkAgBSIBIAAoAgBGDQAgBSECAkAgBCIDBEADQCADIgEoAgQiAw0ADAILAAsDQCACKAIIIgEoAgAgAkYhAyABIQIgAw0ACwsgBigCACIDIAEoAhBKDQAgBSICIQEgBEUNAQNAIAQiASgCECICIANKBEAgASECIAEoAgAiBA0BDAMLIAIgA04NAyABKAIEIgQNAAsgAUEEaiECDAELIAFBBGogBSAEGyICKAIADQEgASAFIAQbIQELQRgQMyEDIAYpAgAhCCADIAE2AgggA0IANwIAIAMgCDcCECACIAM2AgAgACgCACgCACIBBEAgACABNgIAIAIoAgAhAwsgACgCBCADEJUBIAAgACgCCEEBajYCCAsgBkEIaiIGIAdHDQALCyAAC9YBAQJ/IwBBEGsiBCQAAkACQCACQQtJBEAgACIDIAAtAAtBgAFxIAJyOgALIAAgAC0AC0H/AHE6AAsMAQsgAkHv////B0sNASAEQQhqIAAgAkELTwR/IAJBEGpBcHEiAyADQQFrIgMgA0ELRhsFQQoLQQFqELgBIAQoAgwaIAAgBCgCCCIDNgIAIAAgACgCCEGAgICAeHEgBCgCDEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggACACNgIECyADIAEgAkEBahB1IARBEGokAA8LEEwAC1IBAX8gAUEBayICQRBNBH8gAkECdEGchQNqKAIABUGwIAshAiAAQaSRAzYCACAAQaiSAzYCACAAQQRqIAIQ9gIgACABNgIIIABB6PwCNgIAIAALxwkCBH8FfiMAQfAAayIGJAAgBEL///////////8AgyEJAkACQCABUCIFIAJC////////////AIMiCkKAgICAgIDA//8AfUKAgICAgIDAgIB/VCAKUBtFBEAgA0IAUiAJQoCAgICAgMD//wB9IgtCgICAgICAwICAf1YgC0KAgICAgIDAgIB/URsNAQsgBSAKQoCAgICAgMD//wBUIApCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhBCABIQMMAgsgA1AgCUKAgICAgIDA//8AVCAJQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQQMAgsgASAKQoCAgICAgMD//wCFhFAEQEKAgICAgIDg//8AIAIgASADhSACIASFQoCAgICAgICAgH+FhFAiBRshBEIAIAEgBRshAwwCCyADIAlCgICAgICAwP//AIWEUA0BIAEgCoRQBEAgAyAJhEIAUg0CIAEgA4MhAyACIASDIQQMAgsgAyAJhEIAUg0AIAEhAyACIQQMAQsgAyABIAEgA1QgCSAKViAJIApRGyIIGyEKIAQgAiAIGyILQv///////z+DIQkgAiAEIAgbIgJCMIinQf//AXEhByALQjCIp0H//wFxIgVFBEAgBkHgAGogCiAJIAogCSAJUCIFG3kgBUEGdK18pyIFQQ9rEGMgBikDaCEJIAYpA2AhCkEQIAVrIQULIAEgAyAIGyEDIAJC////////P4MhBCAHRQRAIAZB0ABqIAMgBCADIAQgBFAiBxt5IAdBBnStfKciB0EPaxBjQRAgB2shByAGKQNYIQQgBikDUCEDCyAEQgOGIANCPYiEQoCAgICAgIAEhCEBIAlCA4YgCkI9iIQhBCACIAuFIQ0CfiADQgOGIgIgBSAHRg0AGiAFIAdrIgdB/wBLBEBCACEBQgEMAQsgBkFAayACIAFBgAEgB2sQYyAGQTBqIAIgASAHEKYBIAYpAzghASAGKQMwIAYpA0AgBikDSIRCAFKthAshCSAEQoCAgICAgIAEhCEMIApCA4YhCgJAIA1CAFMEQEIAIQNCACEEIAkgCoUgASAMhYRQDQIgCiAJfSECIAwgAX0gCSAKVq19IgRC/////////wNWDQEgBkEgaiACIAQgAiAEIARQIgcbeSAHQQZ0rXynQQxrIgcQYyAFIAdrIQUgBikDKCEEIAYpAyAhAgwBCyAJIAp8IgIgCVStIAEgDHx8IgRCgICAgICAgAiDUA0AIAlCAYMgBEI/hiACQgGIhIQhAiAFQQFqIQUgBEIBiCEECyALQoCAgICAgICAgH+DIQEgBUH//wFOBEAgAUKAgICAgIDA//8AhCEEQgAhAwwBC0EAIQcCQCAFQQBKBEAgBSEHDAELIAZBEGogAiAEIAVB/wBqEGMgBiACIARBASAFaxCmASAGKQMAIAYpAxAgBikDGIRCAFKthCECIAYpAwghBAsgAqdBB3EiBUEES60gBEI9hiACQgOIhCICfCIDIAJUrSAEQgOIQv///////z+DIAetQjCGhCABhHwhBAJAIAVBBEYEQCAEIANCAYMiASADfCIDIAFUrXwhBAwBCyAFRQ0BCwsgACADNwMAIAAgBDcDCCAGQfAAaiQACwoAIABBtMIrEHgLOAICfwF+IwBBEGsiACQAIAAQygEgACkDACECIAAoAgghASAAQRBqJAAgAUHoB22sIAJCwIQ9fnwLZAAgAigCBEGwAXEiAkEgRgRAIAEPCwJAIAJBEEcNAAJAAkAgAC0AACICQStrDgMAAQABCyAAQQFqDwsgASAAa0ECSA0AIAJBMEcNACAALQABQSByQfgARw0AIABBAmohAAsgAAs5AQF/IwBBEGsiASQAIAECfyAALQALQQd2BEAgACgCAAwBCyAACzYCCCABKAIIIQAgAUEQaiQAIAALfgICfwF+IwBBEGsiAyQAIAACfiABRQRAQgAMAQsgAyABIAFBH3UiAnMgAmsiAq1CACACZyICQdEAahBjIAMpAwhCgICAgICAwACFQZ6AASACa61CMIZ8IAFBgICAgHhxrUIghoQhBCADKQMACzcDACAAIAQ3AwggA0EQaiQACwwAIAEgAiAAEPEDGguKAwIDfwF8IwBBEGsiASQAAkAgALwiA0H/////B3EiAkHan6T6A00EQCACQYCAgMwDSQ0BIAC7EIMBIQAMAQsgAkHRp+2DBE0EQCAAuyEEIAJB45fbgARNBEAgA0EASARAIAREGC1EVPsh+T+gEIQBjCEADAMLIAREGC1EVPsh+b+gEIQBIQAMAgtEGC1EVPshCcBEGC1EVPshCUAgA0EAThsgBKCaEIMBIQAMAQsgAkHV44iHBE0EQCACQd/bv4UETQRAIAC7IQQgA0EASARAIARE0iEzf3zZEkCgEIQBIQAMAwsgBETSITN/fNkSwKAQhAGMIQAMAgtEGC1EVPshGUBEGC1EVPshGcAgA0EASBsgALugEIMBIQAMAQsgAkGAgID8B08EQCAAIACTIQAMAQsCQAJAAkACQCAAIAFBCGoQjQRBA3EOAwABAgMLIAErAwgQgwEhAAwDCyABKwMIEIQBIQAMAgsgASsDCJoQgwEhAAwBCyABKwMIEIQBjCEACyABQRBqJAAgAAv0AgIDfwF8IwBBEGsiASQAAn0gALwiA0H/////B3EiAkHan6T6A00EQEMAAIA/IAJBgICAzANJDQEaIAC7EIQBDAELIAJB0aftgwRNBEAgAkHkl9uABE8EQEQYLURU+yEJQEQYLURU+yEJwCADQQBIGyAAu6AQhAGMDAILIAC7IQQgA0EASARAIAREGC1EVPsh+T+gEIMBDAILRBgtRFT7Ifk/IAShEIMBDAELIAJB1eOIhwRNBEAgAkHg27+FBE8EQEQYLURU+yEZQEQYLURU+yEZwCADQQBIGyAAu6AQhAEMAgsgA0EASARARNIhM3982RLAIAC7oRCDAQwCCyAAu0TSITN/fNkSwKAQgwEMAQsgACAAkyACQYCAgPwHTw0AGgJAAkACQAJAIAAgAUEIahCNBEEDcQ4DAAECAwsgASsDCBCEAQwDCyABKwMImhCDAQwCCyABKwMIEIQBjAwBCyABKwMIEIMBCyEAIAFBEGokACAACycAIAAoAgAiACABEEoiARCXA0UEQBBIAAsgACgCCCABQQJ0aigCAAs6AQF/IAAoAgBBAnQiAUHw5gBqNQIAIAApAyggACkDICAAKQMYIAApAxB+fn5+IAFBsOcAajQCAH+nCyAAIwBBEGsiASQAIABCADcCACAAQQA2AgggAUEQaiQAC5QCAQV/An8jAEEQayIEJAAgASkDKCABKQMgIAEpAxggASkDEH5+fiACKQMoIAIpAyAgAikDGCACKQMQfn5+UQRAIAJBEGohAwJ/IAEoAkhFBEBBACACKAJIRQ0BGgtBAQshBiAAIAIoAgAgAigCCCADIAIoAoABEDwiAyACKAIwNgIwIAMgAigCNDYCNCADIAIoAjg2AjggAigCPCEHIANBHTYCQCADIAc2AjwgBgRAIAAgAygCACADKAIIIANBEGpBABA8IQULIAMgAjYCUCADIAE2AkwgAyAFNgJIIARBEGokACADDAELIARB9ckANgIIIARBrSs2AgQgBEGRJDYCAEG4nwIoAgBBiNIAIAQQMhAAAAsLgAQBA38gAkGABE8EQCAAIAEgAhAlIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAEEDcUUEQCAAIQIMAQsgAkUEQCAAIQIMAQsgACECA0AgAiABLQAAOgAAIAFBAWohASACQQFqIgJBA3FFDQEgAiADSQ0ACwsCQCADQXxxIgRBwABJDQAgAiAEQUBqIgVLDQADQCACIAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAiABKAIoNgIoIAIgASgCLDYCLCACIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCACIAEoAjw2AjwgAUFAayEBIAJBQGsiAiAFTQ0ACwsgAiAETw0BA0AgAiABKAIANgIAIAFBBGohASACQQRqIgIgBEkNAAsMAQsgA0EESQRAIAAhAgwBCyAAIANBBGsiBEsEQCAAIQIMAQsgACECA0AgAiABLQAAOgAAIAIgAS0AAToAASACIAEtAAI6AAIgAiABLQADOgADIAFBBGohASACQQRqIgIgBE0NAAsLIAIgA0kEQANAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANHDQALCyAACyQBAX8jAEEQayIDJAAgAyACNgIMIAAgASACEPgDIANBEGokAAsSACAAKAIAIgAEQCAAEM4DGgsLEQAgACABKAIAEM4DNgIAIAALRwECfyAAIAE3A3AgACAAKAIsIAAoAgQiA2usNwN4IAAoAgghAgJAIAFQDQAgAiADa6wgAVcNACADIAGnaiECCyAAIAI2AmgLjAICAn8CfCAAvCIBQYCAgPwDRgRAQwAAAAAPCwJAIAFBgICA/AdrQf///4d4TQRAIAFBAXQiAkUEQCMAQRBrIgFDAACAvzgCDCABKgIMQwAAAACVDwsgAUGAgID8B0YNASACQYCAgHhJIAFBAE5xRQRAIAAgAJMiACAAlQ8LIABDAAAAS5S8QYCAgNwAayEBC0Gw/AErAwAgASABQYCAzPkDayIBQYCAgHxxa767IAFBD3ZB8AFxIgJBqPoBaisDAKJEAAAAAAAA8L+gIgMgA6IiBKJBuPwBKwMAIAOiQcD8ASsDAKCgIASiIAFBF3W3Qaj8ASsDAKIgAkGw+gFqKwMAoCADoKC2IQALIAALkAEBBH8CQCMDKAIYIgEgACgCTEH/////e3FGDQBBASEDIABBzABqIgJBACAB/kgCAEUNACACQQAgAUGAgICABHIiBP5IAgAiAEUNAANAIABBgICAgARyIQECQCAAQYCAgIAEcUUEQCAAIAIgACAB/kgCAEcNAQsgAiABEIwECyACQQAgBP5IAgAiAA0ACwsgAwtLAQJ8IAAgAKIiASAAoiICIAEgAaKiIAFEp0Y7jIfNxj6iRHTnyuL5ACq/oKIgAiABRLL7bokQEYE/okR3rMtUVVXFv6CiIACgoLYLTwEBfCAAIACiIgAgACAAoiIBoiAARGlQ7uBCk/k+okQnHg/oh8BWv6CiIAFEQjoF4VNVpT+iIABEgV4M/f//37+iRAAAAAAAAPA/oKCgtgt2AQF/IwBBEGsiAiQAIAAtAAtBB3YEQCAAIAAoAgAgACgCCEH/////B3EQ1gELIAAgASgCCDYCCCAAIAEpAgA3AgAgASABLQALQYABcToACyABIAEtAAtB/wBxOgALIAJBADYCDCABIAIoAgw2AgAgAkEQaiQAC7ICAQR/IwBBEGsiByQAIAcgATYCCEEAIQFBBiEFAkACQCAAIAdBCGoQQA0AQQQhBSADQcAAAn8gACgCACIGKAIMIgggBigCEEYEQCAGIAYoAgAoAiQRAQAMAQsgCCgCAAsiBiADKAIAKAIMEQMARQ0AIAMgBkEAIAMoAgAoAjQRAwAhAQNAAkAgABBYGiABQTBrIQEgACAHQQhqEEANACAEQQJIDQAgA0HAAAJ/IAAoAgAiBSgCDCIGIAUoAhBGBEAgBSAFKAIAKAIkEQEADAELIAYoAgALIgUgAygCACgCDBEDAEUNAyAEQQFrIQQgAyAFQQAgAygCACgCNBEDACABQQpsaiEBDAELC0ECIQUgACAHQQhqEEBFDQELIAIgAigCACAFcjYCAAsgB0EQaiQAIAEL2AIBBH8jAEEQayIHJAAgByABNgIIQQAhAUEGIQUCQAJAIAAgB0EIahBBDQBBBCEFAn8gACgCACIGKAIMIgggBigCEEYEQCAGIAYoAgAoAiQRAQAMAQsgCC0AAAvAIgZBAE4EfyADKAIIIAZB/wFxQQJ0aigCAEHAAHFBAEcFQQALRQ0AIAMgBkEAIAMoAgAoAiQRAwAhAQNAAkAgABBZGiABQTBrIQEgACAHQQhqEEENACAEQQJIDQACfyAAKAIAIgUoAgwiBiAFKAIQRgRAIAUgBSgCACgCJBEBAAwBCyAGLQAAC8AiBUEATgR/IAMoAgggBUH/AXFBAnRqKAIAQcAAcUEARwVBAAtFDQMgBEEBayEEIAMgBUEAIAMoAgAoAiQRAwAgAUEKbGohAQwBCwtBAiEFIAAgB0EIahBBRQ0BCyACIAIoAgAgBXI2AgALIAdBEGokACABC5YBAQN/IwBBEGsiBCQAIAQgATYCDCAEIAM2AgggBCAEQQxqEH8hBiAEKAIIIQMjAEEQayIBJAAgASADNgIMIAEgAzYCCEF/IQUCQEEAQQAgAiADEOoBIgNBAEgNACAAIANBAWoiAxBFIgA2AgAgAEUNACAAIAMgAiABKAIMEOoBIQULIAFBEGokACAGEH4gBEEQaiQAIAULLgACQCAAKAIEQcoAcSIABEAgAEHAAEYEQEEIDwsgAEEIRw0BQRAPC0EADwtBCgv5AQIDfgJ/IwBBEGsiBSQAAn4gAb0iA0L///////////8AgyICQoCAgICAgIAIfUL/////////7/8AWARAIAJCPIYhBCACQgSIQoCAgICAgICAPHwMAQsgAkKAgICAgICA+P8AWgRAIANCPIYhBCADQgSIQoCAgICAgMD//wCEDAELIAJQBEBCAAwBCyAFIAJCACADp2dBIGogAkIgiKdnIAJCgICAgBBUGyIGQTFqEGMgBSkDACEEIAUpAwhCgICAgICAwACFQYz4ACAGa61CMIaECyECIAAgBDcDACAAIAIgA0KAgICAgICAgIB/g4Q3AwggBUEQaiQAC/MFAgZ/AXsjAEHAAWsiBCQAAkACQAJAAkACQAJAAkAgAkEESQRAIANBBE8NASACQQJGDQIgAiADRg0DIAJBA0YNBCADQQJGDQUgA0EDRg0GIAEoAkghByAAIAEoAgAgASgCCCABQRBqIAEoAoABEDwiBSABKAIwNgIwIAUgASgCNDYCNCAFIAEoAjg2AjggBSABKAI8NgI8IAJBAnQiCCAEQbABaiIGaiABKQMQPgIAIAZBCGogASkDGD4CACAGIANBAnQiCWogASkDID4CACAGQQxqIAEpAyg+AgAgCCAEQaABaiIGaiABKAIwNgIAIAYgASgCNDYCCCAGIAlqIAEoAjg2AgAgBiABKAI8NgIMIAUgBDQCsAE3AxAgBSAENAK0ATcDGCAFIAQ0ArgBNwMgIAUgBDQCvAE3AyggBP0ABKABIQogBUEhNgJAIAUgCv0LAzBBACEGIAcEQCAAIAUoAgAgBSgCCCAFQRBqQQAQPCEGIAVBAzoApwEgBSADOgCmASAFQQI6AKUBIAUgAjoApAELIAVBADYCUCAFIAE2AkwgBSAGNgJIIARBwAFqJAAgBQ8LIARB9ic2ApgBIARBjS42ApQBIARBkSQ2ApABQbifAigCAEGI0gAgBEGQAWoQMgwGCyAEQa4nNgJ4IARBjy42AnQgBEGRJDYCcEG4nwIoAgBBiNIAIARB8ABqEDIMBQsgBEGDMzYCCCAEQZIuNgIEIARBkSQ2AgBBuJ8CKAIAQYjSACAEEDIMBAsgBEHZMDYCGCAEQZMuNgIUIARBkSQ2AhBBuJ8CKAIAQYjSACAEQRBqEDIMAwsgBEHlLzYCKCAEQZQuNgIkIARBkSQ2AiBBuJ8CKAIAQYjSACAEQSBqEDIMAgsgBEHKMDYCOCAEQZUuNgI0IARBkSQ2AjBBuJ8CKAIAQYjSACAEQTBqEDIMAQsgBEHHLzYCWCAEQZcuNgJUIARBkSQ2AlBBuJ8CKAIAQYjSACAEQdAAahAyCxAAAAsJACAAQQEQqwELHwAgAEHMAGoiAEEA/kECAEGAgICABHEEQCAAEIwBCwsoAQF/IABBzIwBNgIAIAAoAgQiAQRAIAEgASgCACgCBBEAAAsgABAxC4QFAQN/IwBBIGsiCCQAIAggAjYCECAIIAE2AhggCEEIaiIBIAMoAhwiAjYCACACQQRqQQH+HgIAGiABEGYhCSABKAIAIgFBBGpBf/4eAgBFBEAgASABKAIAKAIIEQAACyAEQQA2AgBBACEBAkADQCAGIAdGDQEgAQ0BAkAgCEEYaiAIQRBqEEANAAJAIAkgBigCAEEAIAkoAgAoAjQRAwBBJUYEQCAGQQRqIgEgB0YNAkEAIQoCfwJAIAkgASgCAEEAIAkoAgAoAjQRAwAiAkHFAEYNACACQf8BcUEwRg0AIAYhASACDAELIAZBCGogB0YNAyACIQogCSAGKAIIQQAgCSgCACgCNBEDAAshAiAIIAAgCCgCGCAIKAIQIAMgBCAFIAIgCiAAKAIAKAIkEQ0ANgIYIAFBCGohBgwBCyAJQQEgBigCACAJKAIAKAIMEQMABEADQAJAIAcgBkEEaiIGRgRAIAchBgwBCyAJQQEgBigCACAJKAIAKAIMEQMADQELCwNAIAhBGGogCEEQahBADQIgCUEBAn8gCCgCGCIBKAIMIgIgASgCEEYEQCABIAEoAgAoAiQRAQAMAQsgAigCAAsgCSgCACgCDBEDAEUNAiAIQRhqEFgaDAALAAsgCQJ/IAgoAhgiASgCDCICIAEoAhBGBEAgASABKAIAKAIkEQEADAELIAIoAgALIAkoAgAoAhwRBAAgCSAGKAIAIAkoAgAoAhwRBABGBEAgBkEEaiEGIAhBGGoQWBoMAQsgBEEENgIACyAEKAIAIQEMAQsLIARBBDYCAAsgCEEYaiAIQRBqEEAEQCAEIAQoAgBBAnI2AgALIAgoAhghACAIQSBqJAAgAAu5BQEDfyMAQSBrIggkACAIIAI2AhAgCCABNgIYIAhBCGoiASADKAIcIgI2AgAgAkEEakEB/h4CABogARBwIQkgASgCACIBQQRqQX/+HgIARQRAIAEgASgCACgCCBEAAAsgBEEANgIAQQAhAQJAA0AgBiAHRg0BIAENAQJAIAhBGGogCEEQahBBDQACQCAJIAYsAABBACAJKAIAKAIkEQMAQSVGBEAgBkEBaiIBIAdGDQJBACEKAn8CQCAJIAEsAABBACAJKAIAKAIkEQMAIgJBxQBGDQAgAkH/AXFBMEYNACAGIQEgAgwBCyAGQQJqIAdGDQMgAiEKIAkgBiwAAkEAIAkoAgAoAiQRAwALIQIgCCAAIAgoAhggCCgCECADIAQgBSACIAogACgCACgCJBENADYCGCABQQJqIQYMAQsgBiwAACIBQQBOBH8gCSgCCCABQf8BcUECdGooAgBBAXEFQQALBEADQAJAIAcgBkEBaiIGRgRAIAchBgwBCyAGLAAAIgFBAE4EfyAJKAIIIAFB/wFxQQJ0aigCAEEBcQVBAAsNAQsLA0AgCEEYaiAIQRBqEEENAgJ/IAgoAhgiASgCDCICIAEoAhBGBEAgASABKAIAKAIkEQEADAELIAItAAALwCIBQQBOBH8gCSgCCCABQf8BcUECdGooAgBBAXEFQQALRQ0CIAhBGGoQWRoMAAsACyAJAn8gCCgCGCIBKAIMIgIgASgCEEYEQCABIAEoAgAoAiQRAQAMAQsgAi0AAAvAIAkoAgAoAgwRBAAgCSAGLAAAIAkoAgAoAgwRBABGBEAgBkEBaiEGIAhBGGoQWRoMAQsgBEEENgIACyAEKAIAIQEMAQsLIARBBDYCAAsgCEEYaiAIQRBqEEEEQCAEIAQoAgBBAnI2AgALIAgoAhghACAIQSBqJAAgAAvgAQEEfyMAQRBrIggkAAJAIABFDQAgBCgCDCEGIAIgAWsiB0EASgRAIAAgASAHQQJ2IgcgACgCACgCMBEDACAHRw0BCyAGIAMgAWtBAnUiAWtBACABIAZIGyIBQQBKBEAgAAJ/IAggASAFELgDIgUtAAtBB3YEQCAFKAIADAELIAULIAEgACgCACgCMBEDACEGIAUQTRogASAGRw0BCyADIAJrIgFBAEoEQCAAIAIgAUECdiIBIAAoAgAoAjARAwAgAUcNAQsgBCgCDBogBEEANgIMIAAhCQsgCEEQaiQAIAkL0wEBBH8jAEEQayIHJAACQCAARQ0AIAQoAgwhBiACIAFrIghBAEoEQCAAIAEgCCAAKAIAKAIwEQMAIAhHDQELIAYgAyABayIBa0EAIAEgBkgbIgFBAEoEQCAAAn8gByABIAUQugMiBS0AC0EHdgRAIAUoAgAMAQsgBQsgASAAKAIAKAIwEQMAIQYgBRA0GiABIAZHDQELIAMgAmsiAUEASgRAIAAgAiABIAAoAgAoAjARAwAgAUcNAQsgBCgCDBogBEEANgIMIAAhCQsgB0EQaiQAIAkLBAAgAAsfAEEIEAIgABD1AiIAQYyTAzYCACAAQayTA0EHEAEAC5QEAQN/IAEgACABRiICOgAMAkAgAg0AA0AgASgCCCICLQAMDQECQCACIAIoAggiAygCACIERgRAAkAgAygCBCIERQ0AIAQtAAwNAAwCCwJAIAEgAigCAEYEQCACIQEMAQsgAiACKAIEIgEoAgAiADYCBCABIAAEfyAAIAI2AgggAigCCAUgAws2AgggAigCCCIAIAAoAgAgAkdBAnRqIAE2AgAgASACNgIAIAIgATYCCCABKAIIIgMoAgAhAgsgAUEBOgAMIANBADoADCADIAIoAgQiADYCACAABEAgACADNgIICyACIAMoAgg2AgggAygCCCIAIAAoAgAgA0dBAnRqIAI2AgAgAiADNgIEIAMgAjYCCA8LAkAgBEUNACAELQAMDQAMAQsCQCABIAIoAgBHBEAgAiEBDAELIAIgASgCBCIANgIAIAEgAAR/IAAgAjYCCCACKAIIBSADCzYCCCACKAIIIgAgACgCACACR0ECdGogATYCACABIAI2AgQgAiABNgIIIAEoAgghAwsgAUEBOgAMIANBADoADCADIAMoAgQiACgCACIBNgIEIAEEQCABIAM2AggLIAAgAygCCDYCCCADKAIIIgEgASgCACADR0ECdGogADYCACAAIAM2AgAgAyAANgIIDAILIARBDGohASACQQE6AAwgAyAAIANGOgAMIAFBAToAACADIgEgAEcNAAsLCzQAIAAtAAtBB3YEQCAAIAE2AgQPCyAAIAAtAAtBgAFxIAFyOgALIAAgAC0AC0H/AHE6AAsLDAAgAEGChoAgNgAAC1sBAX8jAEEQayIBJAAgAQJ/IAAtAAtBB3YEQCAAKAIADAELIAALAn8gAC0AC0EHdgRAIAAoAgQMAQsgAC0AC0H/AHELQQJ0ajYCCCABKAIIIQAgAUEQaiQAIAALrAEBAX8CQCADQYAQcUUNACADQcoAcSIEQQhGDQAgBEHAAEYNACACRQ0AIABBKzoAACAAQQFqIQALIANBgARxBEAgAEEjOgAAIABBAWohAAsDQCABLQAAIgQEQCAAIAQ6AAAgAEEBaiEAIAFBAWohAQwBCwsgAAJ/Qe8AIANBygBxIgFBwABGDQAaQdgAQfgAIANBgIABcRsgAUEIRg0AGkHkAEH1ACACGws6AAALWAEBfyMAQRBrIgEkACABAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAsCfyAALQALQQd2BEAgACgCBAwBCyAALQALQf8AcQtqNgIIIAEoAgghACABQRBqJAAgAAsSACABIAEgAkECdGogABDjAxoLTQECfyABLQAAIQICQCAALQAAIgNFDQAgAiADRw0AA0AgAS0AASECIAAtAAEiA0UNASABQQFqIQEgAEEBaiEAIAIgA0YNAAsLIAMgAmsLJgEBfyMAQRBrIgIkACACIAE2AgxBiJUDIAAgARD5AyACQRBqJAALyQUEBH8CfAF9AX4gAbwiBEEBdEGAgIAIakGBgIAISSECAkACQAJAAkAgALwiA0GAgID8B2tBgICAiHhPBEAgAg0BDAMLIAJFDQELQwAAgD8hCCADQYCAgPwDRg0CIARBAXQiAkUNAiACQYGAgHhJIANBAXQiAkGAgIB4TXFFBEAgACABkg8LIAJBgICA+AdGDQJDAAAAACABIAGUIAJB////9wdLIARBAE5zGw8LIANBAXRBgICACGpBgYCACEkEQCAAIACUIQggA0EASARAIAiMIAggBBCFBEEBRhshCAsgBEEATg0CIwBBEGsiAkMAAIA/IAiVOAIMIAIqAgwPCyADQQBIBEAgBBCFBCICRQRAIAAgAJMiACAAlQ8LIANB/////wdxIQMgAkEBRkEQdCEFCyADQf///wNLDQAgAEMAAABLlLxB/////wdxQYCAgNwAayEDCwJAQZCfAisDACADIANBgIDM+QNrIgRBgICAfHFrvrsgBEEPdkHwAXEiAkGQnQJqKwMAokQAAAAAAADwv6AiBqJBmJ8CKwMAoCAGIAaiIgcgB6KiQaCfAisDACAGokGonwIrAwCgIAeiQbCfAisDACAGoiACQZidAmorAwAgBEEXdbegoKCgIAG7oiIHvUKAgICAgIDg//8Ag0KBgICAgIDAr8AAVA0AIAdEcdXR////X0BkBEAjAEEQayICQwAAAPBDAAAAcCAFGzgCDCACKgIMQwAAAHCUDwsgB0QAAAAAAMBiwGVFDQAjAEEQayICQwAAAJBDAAAAECAFGzgCDCACKgIMQwAAABCUDwtB2LYBKwMAIAdB0LYBKwMAIgYgB6AiByAGoaEiBqJB4LYBKwMAoCAGIAaiokHotgErAwAgBqJEAAAAAAAA8D+goCAHvSIJIAWtfEIvhiAJp0EfcUEDdEHQtAFqKQMAfL+itiEICyAIC94BAQV/IwBBEGsiBSQAIAEgAkcEQCAAQQRqIQYDQCAAIAYgBUEMaiAFQQhqIAFBEGoQkwQiBCgCAEUEQEEYEDMiAyABKQIQNwIQIAMgBSgCDDYCCCADQgA3AgAgBCADNgIAIAAoAgAoAgAiBwRAIAAgBzYCACAEKAIAIQMLIAAoAgQgAxCVASAAIAAoAghBAWo2AggLAkAgASgCBCIEBEADQCAEIgMoAgAiBA0ADAILAAsDQCABKAIIIgMoAgAgAUchBCADIQEgBA0ACwsgAyIBIAJHDQALCyAFQRBqJAALiwQBBX8CQAJAAkACQCAALQBZBEAgACgCDCICIAEgAigCACgCFBEEACEEIAAoAhgiASAAKAIcIgNJBEAgASAEOgAAIAAgAUEBajYCGA8LIAEgACgCFCIBayIFQQFqIgJBAEgNAiAFQf////8HIAMgAWsiA0EBdCIGIAIgAiAGSRsgA0H/////A08bIgMEfyADEDMFQQALIgJqIgYgBDoAACACIAEgBfwKAAAgACACIANqNgIcIAAgBkEBajYCGCAAIAI2AhQgAUUNASABEDEPCyAAKAIcIQQgACgCGCECIAAtAFoEQCACIARJDQQgAiAAKAIUIgJrIgVBAWoiA0EASA0DIAVB/////wcgBCACayIEQQF0IgYgAyADIAZJGyAEQf////8DTxsiAwR/IAMQMwVBAAsiBGoiBiABOgAAIAQgAiAF/AoAACAAIAMgBGo2AhwgACAGQQFqNgIYIAAgBDYCFCACRQ0BIAIQMQ8LIAIgBEcNAyACIAAoAhQiBGsiAkEBaiIFQQBIDQIgAkH/////ByACQQF0IgMgBSADIAVLGyACQf////8DTxsiAwR/IAMQMwVBAAsiBWoiBiABOgAAIAUgBCAC/AoAACAAIAMgBWo2AhwgACAGQQFqNgIYIAAgBTYCFCAERQ0AIAQQMQsPCxBEAAsQRAALIAIgAToAACAAIAJBAWo2AhgLEwAgAUEBdEGQhgNqQQIgABDxAwt2AQF/IwBBEGsiAiQAIAIgADYCDAJAIAAgAUYNAANAIAIgAUEBayIBNgIIIAAgAU8NASACKAIMIgAtAAAhASAAIAIoAggiAC0AADoAACAAIAE6AAAgAiACKAIMQQFqIgA2AgwgAigCCCEBDAALAAsgAkEQaiQAC9sBAgF/An5BASEEAkAgAEIAUiABQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AURsNACACQgBSIANC////////////AIMiBkKAgICAgIDA//8AViAGQoCAgICAgMD//wBRGw0AIAAgAoQgBSAGhIRQBEBBAA8LIAEgA4NCAFkEQEF/IQQgACACVCABIANTIAEgA1EbDQEgACAChSABIAOFhEIAUg8LQX8hBCAAIAJWIAEgA1UgASADURsNACAAIAKFIAEgA4WEQgBSIQQLIAQLrwMBA38jAEEgayIDJAACQAJAAkAgACgCACIEQQBKBEADQCAAIAJBAnRqKAIUIAFGDQIgAkEBaiICIARHDQALC0EAIQIgACgCBCIEQQBKBEADQCAAIAJBAnRqQZSAAmooAgAgAUYNAiACQQFqIgIgBEcNAAsLIAEoAkwiAgRAIAAgAhCkAQsgASgCUCICBEAgACACEKQBCyAB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Af5IApyWAyAARw0ACyAADwsjA0EcakEwNgIAQX8LgwECA38BfgJAIABCgICAgBBUBEAgACEFDAELA0AgAUEBayIBIAAgAEIKgCIFQgp+fadBMHI6AAAgAEL/////nwFWIQIgBSEAIAINAAsLIAWnIgIEQANAIAFBAWsiASACIAJBCm4iA0EKbGtBMHI6AAAgAkEJSyEEIAMhAiAEDQALCyABCxoAIAAgARCABCIAQQAgAC0AACABQf8BcUYbC/ACAgJ/AX4CQCACRQ0AIAAgAToAACAAIAJqIgNBAWsgAToAACACQQNJDQAgACABOgACIAAgAToAASADQQNrIAE6AAAgA0ECayABOgAAIAJBB0kNACAAIAE6AAMgA0EEayABOgAAIAJBCUkNACAAQQAgAGtBA3EiBGoiAyABQf8BcUGBgoQIbCIANgIAIAMgAiAEa0F8cSICaiIBQQRrIAA2AgAgAkEJSQ0AIAMgADYCCCADIAA2AgQgAUEIayAANgIAIAFBDGsgADYCACACQRlJDQAgAyAANgIYIAMgADYCFCADIAA2AhAgAyAANgIMIAFBEGsgADYCACABQRRrIAA2AgAgAUEYayAANgIAIAFBHGsgADYCACACIANBBHFBGHIiAWsiAkEgSQ0AIACtQoGAgIAQfiEFIAEgA2ohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkEgayICQR9LDQALCwv9DAIFfwJ8IwBBQGoiAyQAIAIrAyAhCAJ/AkAgASsDICIJIAArAyBkRQRAQQAgCCAJZEUNAhogAyABLQAIOgA4IAMgASkDADcDMCABKAIUIQUgASgCECEGIAFCADcDECABKAIYIQcgAUEANgIYIAMgASgCRDYCKCADIAEpAjw3AyAgAyAB/QACLP0LAxAgAyAB/QACHP0LAwAgASACKQMANwMAIAEgAi0ACDoACCABIAIoAhA2AhAgASACKAIUNgIUIAEgAigCGDYCGCACQQA2AhggAkEANgIQIAEgAigCRDYCRCABIAIpAjw3AjwgASAC/QACLP0LAiwgASAC/QACHP0LAhwgAiADKQMwNwMAIAIgAy0AODoACCACKAIQIgQEQCACIAQ2AhQgBBAxCyACIAc2AhggAiAFNgIUIAIgBjYCECACIAMoAig2AkQgAiADKQMgNwI8IAIgA/0AAxD9CwIsIAIgA/0AAwD9CwIcQQEgASsDICAAKwMgZEUNAhogAyAALQAIOgA4IAMgACkDADcDMCAAKAIUIQIgACgCECEEIABCADcDECAAKAIYIQUgAEEANgIYIAMgACgCRDYCKCADIAApAjw3AyAgAyAA/QACLP0LAxAgAyAA/QACHP0LAwAgACABKQMANwMAIAAgAS0ACDoACCAAIAEoAhA2AhAgACABKAIUNgIUIAAgASgCGDYCGCABQQA2AhggAUEANgIQIAAgASgCRDYCRCAAIAEpAjw3AjwgACAB/QACLP0LAiwgACAB/QACHP0LAhwgASADLQA4OgAIIAEgAykDMDcDACABKAIQIgAEQCABIAA2AhQgABAxCyABIAU2AhggASACNgIUIAEgBDYCECABIAMoAig2AkQgASADKQMgNwI8IAEgA/0AAxD9CwIsIAEgA/0AAwD9CwIcDAELIAggCWQEQCADIAAtAAg6ADggAyAAKQMANwMwIAAoAhQhASAAKAIQIQQgAEIANwMQIAAoAhghBSAAQQA2AhggAyAAKAJENgIoIAMgACkCPDcDICADIAD9AAIs/QsDECADIAD9AAIc/QsDACAAIAIpAwA3AwAgACACLQAIOgAIIAAgAigCEDYCECAAIAIoAhQ2AhQgACACKAIYNgIYIAJBADYCGCACQQA2AhAgACACKAJENgJEIAAgAikCPDcCPCAAIAL9AAIs/QsCLCAAIAL9AAIc/QsCHCACIAMpAzA3AwAgAiADLQA4OgAIIAIoAhAiAARAIAIgADYCFCAAEDELIAIgBTYCGCACIAE2AhQgAiAENgIQIAIgAygCKDYCRCACIAMpAyA3AjwgAiAD/QADEP0LAiwgAiAD/QADAP0LAhxBAQwCCyADIAAtAAg6ADggAyAAKQMANwMwIAAoAhQhBCAAKAIQIQUgAEIANwMQIAAoAhghBiAAQQA2AhggAyAAKAJENgIoIAMgACkCPDcDICADIAD9AAIs/QsDECADIAD9AAIc/QsDACAAIAEpAwA3AwAgACABLQAIOgAIIAAgASgCEDYCECAAIAEoAhQ2AhQgACABKAIYNgIYIAFBADYCGCABQQA2AhAgACABKAJENgJEIAAgASkCPDcCPCAAIAH9AAIs/QsCLCAAIAH9AAIc/QsCHCABIAMpAzA3AwAgASADLQA4OgAIIAEoAhAiAARAIAEgADYCFCAAEDELIAEgBjYCGCABIAQ2AhQgASAFNgIQIAEgAygCKDYCRCABIAMpAyA3AjwgASAD/QADEP0LAiwgASAD/QADAP0LAhxBASACKwMgIAErAyBkRQ0BGiADIAEtAAg6ADggAyABKQMANwMwIAFBADYCGCABQgA3AxAgAyABKAJENgIoIAMgASkCPDcDICADIAH9AAIs/QsDECADIAH9AAIc/QsDACABIAItAAg6AAggASACKQMANwMAIAEgAigCEDYCECABIAIoAhQ2AhQgASACKAIYNgIYIAJBADYCECACQQA2AhggASACKAJENgJEIAEgAikCPDcCPCABIAL9AAIs/QsCLCABIAL9AAIc/QsCHCACIAMpAzA3AwAgAiADLQA4OgAIIAIoAhAiAARAIAIgADYCFCAAEDELIAIgBjYCGCACIAQ2AhQgAiAFNgIQIAIgAygCKDYCRCACIAMpAyA3AjwgAiAD/QADEP0LAiwgAiAD/QADAP0LAhwLQQILIQAgA0FAayQAIAALgwMBBH8jAEEQayIIJAAgAiABQX9zQe////8Hak0EQAJ/IAAtAAtBB3YEQCAAKAIADAELIAALIQkgCCAAIAFB5////wNJBH8gCCABQQF0NgIMIAggASACajYCACMAQRBrIgIkACAIKAIAIAhBDGoiCigCAEkhCyACQRBqJAAgCiAIIAsbKAIAIgJBC08EfyACQRBqQXBxIgIgAkEBayICIAJBC0YbBUEKC0EBagVB7////wcLELgBIAgoAgAhAiAIKAIEGiAEBEAgAiAJIAQQdQsgBgRAIAIgBGogByAGEHULIAMgBCAFaiIKayEHIAMgCkcEQCACIARqIAZqIAQgCWogBWogBxB1CyABQQFqIgFBC0cEQCAAIAkgARDkAQsgACACNgIAIAAgACgCCEGAgICAeHEgCCgCBEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggACAEIAZqIAdqIgA2AgQgCEEAOgAMIAAgAmogCC0ADDoAACAIQRBqJAAPCxBMAAv6AwIGfwh+IwBBMGsiAyQAAkACQCACKQMoIAIpAyAiCSACKQMYIgogAikDECILfn5+IgwgASkDKCABKQMgIg0gASkDGCIOIAEpAxAiD35+flEEQCACKAIw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QX9zIARqIQpBACEGIAgEQANAIAMgAEECdCILaiACIAtqKgIAkTgCACAAQQFqIQAgBkEBaiIGIAhHDQALCyAKQQNJDQADQCADIABBAnQiBmogAiAGaioCAJE4AgAgAyAGQQRqIgpqIAIgCmoqAgCROAIAIAMgBkEIaiIKaiACIApqKgIAkTgCACADIAZBDGoiBmogAiAGaioCAJE4AgAgAEEEaiIAIARHDQALCyAHQQFqIgcgDUcNAAsLIAVBEGokAAwBCyAFQfgeNgIIIAVBtMEANgIEDC8LDCcLIAEoAkwhAyMAQdAAayICJAACQAJAAkACQAJAIAMoAgBFBEAgACgCBA0BIAMpAxAiPiABKQMQUg0CIAMpAxgiQiABKQMYUg0CIAMpAyAiQCABKQMgUg0CIAMpAygiPyABKQMoUg0CAkACQCAAKAIADgMBAAEACyABKAIwQQRHDQQgAygCMEEERw0FIEAgQn4gP36nIglBAEwNACA+pyIFQQBMDQAgAygCNCEKIAEoAjQhCyADKAKAASENIAEoAoABIQ4gBUEDcSEIIAVBfHEhASAFQQRJIQwDQCANIAcgCmxqIQMgDiAHIAtsaiEEQQAhAAJAAkAgDA0AIAQgA2tBEEkNAANAIAQgAEECdCIGaiADIAZq/QACACJZ/R8AEIEB/RMgWf0fARCBAf0gASBZ/R8CEIEB/SACIFn9HwMQgQH9IAP9CwIAIABBBGoiACABRw0ACyABIgAgBUYNAQsgAEF/cyAFaiERQQAhBiAIBEADQCAEIABBAnQiD2ogAyAPaioCABCBATgCACAAQQFqIQAgBkEBaiIGIAhHDQALCyARQQNJDQADQCAEIABBAnQiBmogAyAGaioCABCBATgCACAEIAZBBGoiEWogAyARaioCABCBATgCACAEIAZBCGoiEWogAyARaioCABCBATgCACAEIAZBDGoiBmogAyAGaioCABCBATgCACAAQQRqIgAgBUcNAAsLIAdBAWoiByAJRw0ACwsgAkHQAGokAAwFCyACQfgeNgJIIAJB38EANgJEIAJBkSQ2AkBBuJ8CKAIAQYjSACACQUBrEDIMOgsgAkG+NTYCOCACQcDBADYCNAwwCyACQZrDADYCKCACQcHBADYCJAwsCyACQbnDADYCGCACQcrBADYCFAwsCyACQfTDADYCCCACQcvB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ADgCACAEIAZBBGoiEmogASASaioCADgCACAEIAZBCGoiEmogASASaioCADgCACAEIAZBDGoiBmogASAGaioCADgCACAAQQRqIgAgBUcNAAsLIAdBAWoiByAWRw0ACyBAQgF8IkAgP1INAAsgRkIBfCFGIApBAWoiCiAVRw0ACyBCQgF8IkIgQVINAAsgRUIBfCFFIAlBAWoiCSAURw0ACyA+QgF8Ij4gQ1INAAsgREIBfCFEIAhBAWoiCCATRw0ACwsgA0HQAGokAAwFCyADQfgeNgJIIANB8cMANgJEIANBkSQ2AkBBuJ8CKAIAQYjSACADQUBrEDIMNgsgA0G+NTYCOCADQa3DADYCNAwwCyADQZnCADYCKCADQa7DADYCJAwwCyADQdPEADYCGCADQc/DADYCFAwwCyADQazFADYCCCADQdDDADYCBAwrCwwiCyABKAJMIQIjAEEQayIFJAACQCACKAIARQRAAkACQCAAKAIADgMBAAEACyACKQMoIAIpAyAgAikDGH5+pyINQQBMDQAgAigCECIEQQBMDQAgAigCNCEOIAEoAjQhDCACKAKAASERIAEoAoABIQ8gBEEDcSEIIARBfHEhASAEQQRrIhJBAnZBAWoiAEH8////B3EhECAAQQNxIQkgBEEESSETA0AgESAHIA5saiECIA8gByAMbGohA0EAIQACQAJAIBMNACADIAJrQRBJDQBBACEKQQAhCyASQQxPBEADQCADIABBAnQiBmogAiAGav0AAgD94AH9CwIAIAMgBkEQciIUaiACIBRq/QACAP3gAf0LAgAgAyAGQSByIhRqIAIgFGr9AAIA/eAB/QsCACADIAZBMHIiBmogAiAGav0AAgD94AH9CwIAIABBEGohACALQQRqIgsgEEcNAAsLIAkEQANAIAMgAEECdCIGaiACIAZq/QACAP3gAf0LAgAgAEEEaiEAIApBAWoiCiAJRw0ACwsgASIAIARGDQELIABBf3MgBGohCkEAIQYgCARAA0AgAyAAQQJ0IgtqIAIgC2oqAgCLOAIAIABBAWohACAGQQFqIgYgCEcNAAsLIApBA0kNAANAIAMgAEECdCIGaiACIAZqKgIAizgCACADIAZBBGoiCmogAiAKaioCAIs4AgAgAyAGQQhqIgpqIAIgCmoqAgCLOAIAIAMgBkEMaiIGaiACIAZqKgIAizgCACAAQQRqIgAgBEcNAAsLIAdBAWoiByANRw0ACwsgBUEQaiQADAELIAVB+B42AgggBUGbxAA2AgQMKQsMIQsgASgCTCECIwBBEGsiBSQAAkAgAigCAEUEQAJAAkAgACgCAA4DAQABAAsgAikDKCACKQMgIAIpAxh+fqciCUEATA0AIAIoAhAiA0EATA0AIAIoAjQhCiABKAI0IQsgAigCgAEhDSABKAKAASEOQQAgA2shDCADQQFxIREgA0F8cSEBIANBBGsiD0ECdkEBaiIAQf7///8HcSESIABBAXEhECADQQRJIRMDQCANIAcgCmxqIQIgDiAHIAtsaiEEQQAhAAJAAkAgEw0AIAQgAmtBEEkNAEEAIQYgD0EETwRAA0AgBCAAQQJ0Ighq/QwAAIA/AACAPwAAgD8AAIA//QwAAIC/AACAvwAAgL8AAIC//QwAAAAAAAAAAAAAAAAAAAAAIAIgCGr9AAIAIln9DAAAAAAAAAAAAAAAAAAAAAD9Q/1SIFn9DAAAAAAAAAAAAAAAAAAAAAD9RP1S/QsCACAEIAhBEHIiCGr9DAAAgD8AAIA/AACAPwAAgD/9DAAAgL8AAIC/AACAvwAAgL/9DAAAAAAAAAAAAAAAAAAAAAAgAiAIav0AAgAiWf0MAAAAAAAAAAAAAAAAAAAAAP1D/VIgWf0MAAAAAAAAAAAAAAAAAAAAAP1E/VL9CwIAIABBCGohACAGQQJqIgYgEkcNAAsLIBAEQCAEIABBAnQiAGr9DAAAgD8AAIA/AACAPwAAgD/9DAAAgL8AAIC/AACAvwAAgL/9DAAAAAAAAAAAAAAAAAAAAAAgACACav0AAgAiWf0MAAAAAAAAAAAAAAAAAAAAAP1D/VIgWf0MAAAAAAAAAAAAAAAAAAAAAP1E/VL9CwIACyABIgAgA0YNAQsgAEF/cyEGIBEEQCAEIABBAnQiCGpDAACAP0MAAIC/QwAAAAAgAiAIaioCACJiQwAAAABdGyBiQwAAAABeGzgCACAAQQFyIQALIAYgDEYNAANAIAQgAEECdCIGakMAAIA/QwAAgL9DAAAAACACIAZqKgIAImJDAAAAAF0bIGJDAAAAAF4bOAIAIAQgBkEEaiIGakMAAIA/QwAAgL9DAAAAACACIAZqKgIAImJDAAAAAF0bIGJDAAAAAF4bOAIAIABBAmoiACADRw0ACwsgB0EBaiIHIAlHDQALCyAFQRBqJAAMAQsgBUH4HjYCCCAFQcXEADYCBAwoCwwgCyABKAJMIQIjAEEQayIFJAACQCACKAIARQRAAkACQCAAKAIADgMBAAEACyACKQMoIAIpAyAgAikDGH5+pyINQQBMDQAgAigCECIEQQBMDQAgAigCNCEOIAEoAjQhDCACKAKAASERIAEoAoABIQ8gBEEDcSEIIARBfHEhASAEQQRrIhJBAnZBAWoiAEH8////B3EhECAAQQNxIQkgBEEESSETA0AgESAHIA5saiECIA8gByAMbGohA0EAIQACQAJAIBMNACADIAJrQRBJDQBBACEKQQAhCyASQQxPBEADQCADIABBAnQiBmogAiAGav0AAgD94QH9CwIAIAMgBkEQciIUaiACIBRq/QACAP3hAf0LAgAgAyAGQSByIhRqIAIgFGr9AAIA/eEB/QsCACADIAZBMHIiBmogAiAGav0AAgD94QH9CwIAIABBEGohACALQQRqIgsgEEcNAAsLIAkEQANAIAMgAEECdCIGaiACIAZq/QACAP3hAf0LAgAgAEEEaiEAIApBAWoiCiAJRw0ACwsgASIAIARGDQELIABBf3MgBGohCkEAIQYgCARAA0AgAyAAQQJ0IgtqIAIgC2oqAgCMOAIAIABBAWohACAGQQFqIgYgCEcNAAsLIApBA0kNAANAIAMgAEECdCIGaiACIAZqKgIAjDgCACADIAZBBGoiCmogAiAKaioCAIw4AgAgAyAGQQhqIgpqIAIgCmoqAgCMOAIAIAMgBkEMaiIGaiACIAZqKgIAjDgCACAAQQRqIgAgBEcNAAsLIAdBAWoiByANRw0ACwsgBUEQaiQADAELIAVB+B42AgggBUHvxAA2AgQMJwsMHwsgASgCTCECIwBBEGsiBSQAAkAgAigCAEUEQAJAAkAgACgCAA4DAQABAAsgAikDKCACKQMgIAIpAxh+fqciDUEATA0AIAIoAhAiBEEATA0AIAIoAjQhDiABKAI0IQwgAigCgAEhESABKAKAASEPIARBA3EhCCAEQXxxIQEgBEEEayISQQJ2QQFqIgBB/P///wdxIRAgAEEDcSEJIARBBEkhEwNAIBEgByAObGohAiAPIAcgDGxqIQNBACEAAkACQCATDQAgAyACa0EQSQ0AQQAhCkEAIQsg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IgMEQCAAQYgVaigCACIBIAMiAkcEQANAIAFBKGsiAigCHCIEBEAgAUEIayAENgIAIAQQMQsgAUENaywAAEEASARAIAFBGGsoAgAQMQsgAiIBIANHDQALIAAoAoQVIQILIAAgAzYCiBUgAhAxCyAAKAL4FCIBBEAgAEH8FGogATYCACABEDELIABBqBRqKAIAIgEEQCAAQawUaiABNgIAIAEQMQsgAEGcFGooAgAiAQRAIABBoBRqIAE2AgAgARAxCyAAQZAUaigCACIBBEAgAEGUFGogATYCACABEDELIABBhBRqKAIAIgEEQCAAQYgUaiABNgIAIAEQMQsgAEH4E2ooAgAiAQRAIABB/BNqIAE2AgAgARAxCyAAQewTaigCACIBBEAgAEHwE2ogATYCACABEDELIABB4BNqKAIAIgEEQCAAQeQTaiABNgIAIAEQMQsgAEHUE2ooAgAiAQRAIABB2BNqIAE2AgAgARAxCyAAQcgTaigCACIBBEAgAEHME2ogATYCACABEDELIABBvBNqKAIAIgEEQCAAQcATaiABNgIAIAEQMQsgAEGwE2ooAgAiAQRAIABBtBNqIAE2AgAgARAxCyAAQaQTaigCACIBBEAgAEGoE2ogATYCACABEDELIABBmBNqKAIAIgEEQCAAQZwTaiABNgIAIAEQMQsgAEGME2ooAgAiAQRAIABBkBNqIAE2AgAgARAxCyAAQYATaigCACIBBEAgAEGEE2ogATYCACABEDELIAAoAvQSIgEEQCAAQfgSaiABNgIAIAEQMQsgACgC6BIiAQRAIABB7BJqIAE2AgAgARAxCyAAQegSaiEBIABB6ABqIQQDQCABQZABayIDKAKEASICBEAgAUEIayACNgIAIAIQMQsgAUEYaygCACICBEAgAUEUayACNgIAIAIQMQsgAUEkaygCACICBEAgAUEgayACNgIAIAIQMQsgAUEwaygCACICBEAgAUEsayACNgIAIAIQMQsgAUHwAGsoAgAiAgRAIAFB7ABrIAI2AgAgAhAxCyABQYQBaygCACICBEAgAUGAAWsgAjYCACACEDELIAMiASAERw0ACyAAKAJcIgEEQCAAIAE2AmAgARAxCyAAQUBrKAIAIgEEQCAAIAE2AkQgARAxCyAACysAIAEEQCAAIAEoAgAQgwIgACABKAIEEIMCIAFBFGogASgCGBBRIAEQMQsLFQAgAEGokgM2AgAgAEEEahDhAiAACwwAIAAQ4gIaIAAQMQtLAQJ/IAAoAgQiBkEIdSEHIAAoAgAiACABIAIgBkEBcQR/IAcgAygCAGooAgAFIAcLIANqIARBAiAGQQJxGyAFIAAoAgAoAhQRDAALmgEAIABBAToANQJAIAAoAgQgAkcNACAAQQE6ADQCQCAAKAIQIgJFBEAgAEEBNgIkIAAgAzYCGCAAIAE2AhAgA0EBRw0CIAAoAjBBAUYNAQwCCyABIAJGBEAgACgCGCICQQJGBEAgACADNgIYIAMhAgsgACgCMEEBRw0CIAJBAUYNAQwCCyAAIAAoAiRBAWo2AiQLIABBAToANgsLXQEBfyAAKAIQIgNFBEAgAEEBNgIkIAAgAjYCGCAAIAE2AhAPCwJAIAEgA0YEQCAAKAIYQQJHDQEgACACNgIYDwsgAEEBOgA2IABBAjYCGCAAIAAoAiRBAWo2AiQLC5oBAQJ/An9BiIkDLgEAIgFFBEAjA0EcakEcNgIAQX8MAQsCQAJAIAFBfkoNAEHpoAwhAAJAAkACQAJAAkACQAJAIAFB/wFxQQFrDgsIAAECAwQEBQUGAwcLQYCACAwIC0GAgAIMBwtBgIAEDAYLQf////8HDAULEBkMBAsQGEEQdgwDC0EADAILIAEhAAsgAAsiAEEAIABBAEobC1IBA38CQAJAA0BBBiEBQQohAgJAQfDUKygCACIAQf////8HcUH+////B2sOAgMCAAsgAEHw1CsgACAAQQFq/kgCAEcNAAtBACECCyACIQELIAELfgEEf0H81CsoAgAjAygCGEYEQEH81CtBADYCAAsDQEH01CsoAgAhAkHw1CtB8NQrKAIAIgAgAEEBa0EAIABB/////wdxIgFBAUcbQQAgAUH/////B0cbIgP+SAIAIABHDQALAkAgAw0AIAJFIABBAE5xDQBB8NQrIAEQqwELCx0AIAAgAUHAhD1uIgAQoQEgASAAQcCEPWxrEI0CCx0AIAAgAUGQzgBuIgAQoQEgASAAQZDOAGxrEI4CCxsAIAAgAUHkAG4iABChASABIABB5ABsaxChAQv8AQEDfyMAQRBrIgIkACACIAE2AgwCQAJAAn8gAC0AC0EHdiIERQRAQQEhASAALQALQf8AcQwBCyAAKAIIQf////8HcUEBayEBIAAoAgQLIgMgAUYEQCAAIAFBASABIAEQ8AICfyAALQALQQd2BEAgACgCAAwBC0EACxoMAQsCfyAALQALQQd2BEAgACgCAAwBC0EACxogBA0AIAAiASADQQFqIAAtAAtBgAFxcjoACyAAIAAtAAtB/wBxOgALDAELIAAoAgAhASAAIANBAWo2AgQLIAEgA0ECdGoiACACKAIMNgIAIAJBADYCCCAAIAIoAgg2AgQgAkEQaiQAC/kBAQN/IwBBEGsiAiQAIAIgAToADwJAAkACfyAALQALQQd2IgRFBEBBCiEBIAAtAAtB/wBxDAELIAAoAghB/////wdxQQFrIQEgACgCBAsiAyABRgRAIAAgAUEBIAEgARCTAgJ/IAAtAAtBB3YEQCAAKAIADAELQQALGgwBCwJ/IAAtAAtBB3YEQCAAKAIADAELQQALGiAEDQAgACIBIANBAWogAC0AC0GAAXFyOgALIAAgAC0AC0H/AHE6AAsMAQsgACgCACEBIAAgA0EBajYCBAsgASADaiIAIAItAA86AAAgAkEAOgAOIAAgAi0ADjoAASACQRBqJAALiAEBAX8gAiAALQALQQd2BH8gACgCCEH/////B3FBAWsFQQoLIgNNBEACfyAALQALQQd2BEAgACgCAAwBCyAACyIDIAEgAvwKAAAgACADIAIQlwIPCyAAIAMgAiADawJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxCyIAQQAgACACIAEQvgELPQEBfyMAQRBrIgMkACADIAI6AA8DQCABBEAgACADLQAPOgAAIAFBAWshASAAQQFqIQAMAQsLIANBEGokAAu+AgEEfyMAQRBrIgUkACACQe////8HIAFrTQRAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAshBiAFIAAgAUHn////A0kEfyAFIAFBAXQ2AgwgBSABIAJqNgIAIwBBEGsiAiQAIAUoAgAgBUEMaiIHKAIASSEIIAJBEGokACAHIAUgCBsoAgAiAkELTwR/IAJBEGpBcHEiAiACQQFrIgIgAkELRhsFQQoLQQFqBUHv////BwsQuAEgBSgCACECIAUoAgQaIAQEQCACIAYgBBB1CyADIARHBEAgAiAEaiAEIAZqIAMgBGsQdQsgAUEBaiIBQQtHBEAgACAGIAEQ5AELIAAgAjYCACAAIAAoAghBgICAgHhxIAUoAgRB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAVBEGokAA8LEEwAC0MAIAEEQCAAIAEoAgAQlAIgACABKAIEEJQCIAEsACtBAEgEQCABKAIgEDELIAEsABtBAEgEQCABKAIQEDELIAEQMQsLqwIBBn8gACgCAEUEQEF/IQMjAEEQayICJAAgAkEANgIMIABBIGoiBhDsASAAKAIUIgFBAEchBQJAIAFFDQADQAJAIAFBCGpBAEEB/kgCAARAIAIgAigCDEEBajYCDCABIAJBDGo2AhAMAQsgBCABIAQbIQQgA0EBayEDCyABKAIAIgFBAEchBSADRQ0BIAENAAsLAkAgBQRAIAFBBGohAyABKAIEIgVFDQEgBUEANgIADAELIABBBGohAwsgA0EANgIAIAAgATYCFCAGEOsBIAIoAgwiAQRAA0AgAkEMakEAIAEQyAEgAigCDCIBDQALCyAEBEAgBEEMahDrAQsgAkEQaiQAQQAPCyAAKAIMBEAgAEEIaiIAQQH+HgIAGiAAQf////8HEKsBC0EACw0AIAAgASACQn8QzQMLLwEBfyMAQRBrIgMkACAAIAIQlgEgA0EAOgAPIAEgAmogAy0ADzoAACADQRBqJAALFwAgACgCCBBCRwRAIAAoAggQ0QMLIAALOAEBfyMAQRBrIgMkACADIAI2AgwgA0EIaiADQQxqEH8hAiAAIAEQtAIhACACEH4gA0EQaiQAIAALBABBAQs3AQF/IwBBEGsiAiQAIAIgACgCADYCCCACIAIoAgggAUECdGo2AgggAigCCCEAIAJBEGokACAACzQBAX8jAEEQayICJAAgAiAAKAIANgIIIAIgAigCCCABajYCCCACKAIIIQAgAkEQaiQAIAALMQAgAigCACECA0ACQCAAIAFHBH8gACgCACACRw0BIAAFIAELDwsgAEEEaiEADAALAAvHBAEBfyMAQRBrIgwkACAMIAA2AgwCQAJAIAAgBUYEQCABLQAARQ0BQQAhACABQQA6AAAgBCAEKAIAIgFBAWo2AgAgAUEuOgAAAn8gBy0AC0EHdgRAIAcoAgQMAQsgBy0AC0H/AHELRQ0CIAkoAgAiASAIa0GfAUoNAiAKKAIAIQIgCSABQQRqNgIAIAEgAjYCAAwCCwJAIAAgBkcNAAJ/IActAAtBB3YEQCAHKAIEDAELIActAAtB/wBxC0UNACABLQAARQ0BQQAhACAJKAIAIgEgCGtBnwFKDQIgCigCACEAIAkgAUEEajYCACABIAA2AgBBACEAIApBADYCAAwCC0F/IQAgCyALQYABaiAMQQxqEJ0CIAtrIgVB/ABKDQEgBUECdUGQxgJqLQAAIQYCQAJAIAVBe3EiAEHYAEcEQCAAQeAARw0BIAMgBCgCACIBRwRAQX8hACABQQFrLQAAQd8AcSACLQAAQf8AcUcNBQsgBCABQQFqNgIAIAEgBjoAAEEAIQAMBAsgAkHQADoAAAwBCyAGQd8AcSIAIAItAABHDQAgAiAAQYABcjoAACABLQAARQ0AIAFBADoAAAJ/IActAAtBB3YEQCAHKAIEDAELIActAAtB/wBxC0UNACAJKAIAIgAgCGtBnwFKDQAgCigCACEBIAkgAEEEajYCACAAIAE2AgALIAQgBCgCACIAQQFqNgIAIAAgBjoAAEEAIQAgBUHUAEoNASAKIAooAgBBAWo2AgAMAQtBfyEACyAMQRBqJAAgAAumAQECfyMAQRBrIgYkACAGQQhqIgUgASgCHCIBNgIAIAFBBGpBAf4eAgAaIAUQZiIBQZDGAkGwxgIgAiABKAIAKAIwEQYAGiADIAUQswEiASABKAIAKAIMEQEANgIAIAQgASABKAIAKAIQEQEANgIAIAAgASABKAIAKAIUEQIAIAUoAgAiAEEEakF//h4CAEUEQCAAIAAoAgAoAggRAAALIAZBEGokAAsxACACLQAAIQIDQAJAIAAgAUcEfyAALQAAIAJHDQEgAAUgAQsPCyAAQQFqIQAMAAsAC7sEAQF/IwBBEGsiDCQAIAwgADoADwJAAkAgACAFRgRAIAEtAABFDQFBACEAIAFBADoAACAEIAQoAgAiAUEBajYCACABQS46AAACfyAHLQALQQd2BEAgBygCBAwBCyAHLQALQf8AcQtFDQIgCSgCACIBIAhrQZ8BSg0CIAooAgAhAiAJIAFBBGo2AgAgASACNgIADAILAkAgACAGRw0AAn8gBy0AC0EHdgRAIAcoAgQMAQsgBy0AC0H/AHELRQ0AIAEtAABFDQFBACEAIAkoAgAiASAIa0GfAUoNAiAKKAIAIQAgCSABQQRqNgIAIAEgADYCAEEAIQAgCkEANgIADAILQX8hACALIAtBIGogDEEPahCgAiALayIFQR9KDQEgBUGQxgJqLQAAIQYCQAJAAkACQCAFQX5xQRZrDgMBAgACCyADIAQoAgAiAUcEQCABQQFrLQAAQd8AcSACLQAAQf8AcUcNBQsgBCABQQFqNgIAIAEgBjoAAEEAIQAMBAsgAkHQADoAAAwBCyAGQd8AcSIAIAItAABHDQAgAiAAQYABcjoAACABLQAARQ0AIAFBADoAAAJ/IActAAtBB3YEQCAHKAIEDAELIActAAtB/wBxC0UNACAJKAIAIgAgCGtBnwFKDQAgCigCACEBIAkgAEEEajYCACAAIAE2AgALIAQgBCgCACIAQQFqNgIAIAAgBjoAAEEAIQAgBUEVSg0BIAogCigCAEEBajYCAAwBC0F/IQALIAxBEGokACAAC6YBAQJ/IwBBEGsiBiQAIAZBCGoiBSABKAIcIgE2AgAgAUEEakEB/h4CABogBRBwIgFBkMYCQbDGAiACIAEoAgAoAiARBgAaIAMgBRC1ASIBIAEoAgAoAgwRAQA6AAAgBCABIAEoAgAoAhARAQA6AAAgACABIAEoAgAoAhQRAgAgBSgCACIAQQRqQX/+HgIARQRAIAAgACgCACgCCBEAAAsgBkEQaiQAC8tMBBR+F38FewF9IwBBkAFrIiAkAAJAAkACQCABKAIwIhggASgCACIXQQJ0IhlB8OYAaigCACIlRyIiDQAgATUCNCIDIAEpAxAgGK1+IBlBsOcAajQCAH9SDQAgATUCOCIFIAEpAxggA35SDQAgATUCPCABKQMgIAV+Ug0AIAIoAjAiGSACKAIAIhpBAnQiI0Hw5gBqKAIARw0AIAI1AjQiAyACKQMQIBmtfiAjQbDnAGo0AgB/Ug0AIAI1AjgiBSACKQMYIAN+Ug0AIAI1AjwgAikDICAFflINACAXIBpHDQAgACABIAIQvwEMAQsCQAJAAkACQAJAAkACQCAXDgICAAELIAIpAygiEiACKQMgIg8gAikDGCIQIAIpAxAiC35+fiABKQMoIg0gASkDICIJIAEpAxgiDiABKQMQIgR+fn5RBEACQCAAKAIADgMIAAgACyACKAI8IR4gAigCOCEfIAIoAjQhISABKAI8IScgASgCOCEdIAEoAjQhIyAAKAIIIRkgACgCBCEkIAIoAjAhGwJAICINACAjrSIDIAQgGK1+Ug0AIB2tIgUgAyAOflINACAnrSAFIAl+Ug0AIBsgAigCACIXQQJ0IhpB8OYAaigCAEcNACAhrSIDIAsgG61+IBpBsOcAajQCAH9SDQAgH60iBSADIBB+Ug0AIB6tIAUgD35SDQAgF0EBRw0AIAAgASACEL8BDAgLIA6nIhcgGWpBAWsgGW0iJiAkbCIZICZqIhogFyAXIBpKGyEaAkAgAigCACIcQQFHDQAgBCALUg0AICINACAbICVHDQAgDUIAVw0IIAlCAFcNCCAZIBpODQggGCALp2whACAarCEMIBmsIQUDQCAnIAanIhdsIRggFyAebCEXQgAhCANAIB0gCKciGWwhGiAZIB9sIRkgBSEDA0AgAigCgAEgGWogF2ogISADpyIbbGogASgCgAEgGmogGGogGyAjbGogAPwKAAAgA0IBfCIDIAxSDQALIAhCAXwiCCAJUg0ACyAGQgF8IgYgDVINAAsMCAsgGyAcQQJ0IiJB8OYAaigCAEcNAyAhrSIDIAsgG61+ICJBsOcAajQCACIFf1INAyAfrSIMIAMgEH5SDQMgHq0gDCAPflINAyAYQQJHDQQCQCAcDgIHAAYLIA1CAFcNByAJQgBXDQcgAigCgAEhGyAZIASnIgBBAXQiGGwhHyAXIBprIBhsISEgCacgFyAZaiAaa2wgAGxBAXQhIiAZICNsISQgGiAZa0EBcSElQQAhAkIAIQsgGiAZQQFqIgBGISYDQAJAIBkgGkgEQCAnIAunbCEcQgAhAwNAIAIgH2ohFyAdIAOnbCEeICUEfyAXIBtqIAEoAoABIBxqIB5qICRqIBj8CgAAIBcgGGohFyAABSAZCyECICZFBEADQCAXIBtqIAEoAoABIB5qIBxqIAIgI2xqIBj8CgAAIBsgFyAYaiIXaiABKAKAASAeaiAcaiACQQFqICNsaiAY/AoAACAXIBhqIRcgAkECaiICIBpHDQALCyAXICFqIQIgA0IBfCIDIAlSDQALDAELIAIgImohAgsgC0IBfCILIA1SDQALDAcLICBB9swANgJIICBB0DM2AkQgIEGRJDYCQEG4nwIoAgBBiNIAICBBQGsQMgwHCyAgQfgeNgIIICBBnTg2AgQgIEGRJDYCAEG4nwIoAgBBiNIAICAQMgwGCwJAAkACQAJAIAIpAygiEiACKQMgIg8gAikDGCIQIAIpAxAiDX5+fiABKQMoIg4gASkDICIJIAEpAxgiAyABKQMQIgR+fn5RBEACQCAAKAIADgMKAAoACyACKAI8IRwgAigCOCEeIAIoAjQhHyABKAI8IRsgASgCOCEnIAEoAjQhIyAAKAIIIRkgACgCBCEhIAIoAjAhFwJAICINACAjrSIFIAQgGK1+Ug0AICetIgwgAyAFflINACAbrSAJIAx+Ug0AIBcgAigCACIaQQJ0Ih1B8OYAaigCAEcNACAfrSIFIA0gF61+IB1BsOcAajQCAH9SDQAgHq0iDCAFIBB+Ug0AIBytIAwgD35SDQAgGg0AIAAgASACEL8BDAoLIAOnIgAgGWpBAWsgGW0iJCAhbCIZICRqIhogACAAIBpKGyEaAkAgAigCACIdDQAgBCANUg0AICINACAXICVHDQAgDkIAVw0KIAlCAFcNCiAZIBpODQogGCANp2whACAarCEMIBmsIQUDQCAbIAanIhdsIRggFyAcbCEXQgAhCANAICcgCKciGWwhGiAZIB5sIRkgBSEDA0AgAigCgAEgGWogF2ogHyADpyIdbGogASgCgAEgGmogGGogHSAjbGogAPwKAAAgA0IBfCIDIAxSDQALIAhCAXwiCCAJUg0ACyAGQgF8IgYgDlINAAsMCgsgFyAdQQJ0IiJB8OYAaigCAEcNASAfrSIFIA0gF61+ICJBsOcAajQCACIMf1INASAerSIHIAUgEH5SDQEgHK0gByAPflINASAYQQRHDQICQCAdDgIABQQLIA5CAFcNCSAJQgBXDQkgAigCgAEhHSAZIASnIgJBAnQiGGwhHyAAIBprIBhsISEgCacgACAZaiAaa2wgAmxBAnQhIiAZICNsISQgGiAZa0EBcSElQQAhAiAaIBlBAWoiAEYhJgNAAkAgGSAaSARAIBsgC6dsIRxCACEDA0AgAiAfaiEXICcgA6dsIR4gJQR/IBcgHWogASgCgAEgHGogHmogJGogGPwKAAAgFyAYaiEXIAAFIBkLIQIgJkUEQANAIBcgHWogASgCgAEgHmogHGogAiAjbGogGPwKAAAgHSAXIBhqIhdqIAEoAoABIB5qIBxqIAJBAWogI2xqIBj8CgAAIBcgGGohFyACQQJqIgIgGkcNAAsLIBcgIWohAiADQgF8IgMgCVINAAsMAQsgAiAiaiECCyALQgF8IgsgDlINAAsMCQsgIEH2zAA2AogBICBB8TU2AoQBICBBkSQ2AoABQbifAigCAEGI0gAgIEGAAWoQMgwJCwJAAkACQCAdDgICAAELIA5CAFcNCSAJQgBXDQkgGSAaTg0JIARCAFcNCSAEIBmsIgd+IRMgAyAarCIUfSAEfiEVIAIoAoABIQAgASgCgAEhAUIAIQMDQCABIBsgEadsaiECQgAhDANAIA0gAyATfCIDVwRAA0AgAyANfSEDAkAgCEIBfCIIIBBSDQBCACEIIApCAXwiCiAPUg0AIAZCAXwiBUIAIAUgElIbIQZCACEKCyADIA1ZDQALCyACICcgDKdsaiEZIAchBQNAIBkgIyAFp2xqIRpCACELA0AgACAXIAOnbGogHyAIp2xqIB4gCqdsaiAcIAanbGpBgPwBIBogGCALp2xqKgIAIjOLQwAAgHeUQwAAgAiUQYCAgIgHIDO8Ih1BAXQiIUGAgIB4cSIiICJBgICAiAdNG0EBdkGAgIA8ar6SvCIiQQ12QYD4AXEgIkH/H3FqICFBgICAeEsbIB1BEHZBgIACcXI7AQACQCADQgF8IgMgDVINAEIAIQMgCEIBfCIIIBBSDQAgDyAKQgF8IgpSBEBCACEIDAELIAZCAXwiCEIAIAggElIbIQZCACEIQgAhCgsgC0IBfCILIARSDQALIAVCAXwiBSAUUg0ACyANIAMgFXwiA1cEQANAIAMgDX0hAwJAIAhCAXwiCCAQUg0AQgAhCCAKQgF8IgogD1INACAGQgF8IgVCACAFIBJSGyEGQgAhCgsgAyANWQ0ACwsgDEIBfCIMIAlSDQALIBFCAXwiESAOUg0ACwwJCyAgQfgeNgJ4ICBBhjg2AnQgIEGRJDYCcEG4nwIoAgBBiNIAICBB8ABqEDIMCQsgDkIAVw0HIAlCAFcNByAZIBpODQcgBEIAVw0HIAQgGawiB34hEyADIBqsIhR9IAR+IRVCACEDA0AgGyARp2whAEIAIQwDQCANIAMgE3wiA1cEQANAIAMgDX0hAwJAIAhCAXwiCCAQUg0AQgAhCCAKQgF8IgogD1INACAGQgF8IgVCACAFIBJSGyEGQgAhCgsgAyANWQ0ACwsgJyAMp2whGSAHIQUDQCAjIAWnbCEaQgAhCwNAIAIoAoABIBcgA6dsaiAfIAinbGogHiAKp2xqIBwgBqdsaiABKAKAASAaaiAZaiAAaiAYIAunbGooAAA2AAACQCADQgF8IgMgDVINAEIAIQMgCEIBfCIIIBBSDQAgDyAKQgF8IgpSBEBCACEIDAELIAZCAXwiCEIAIAggElIbIQZCACEIQgAhCgsgC0IBfCILIARSDQALIAVCAXwiBSAUUg0ACyANIAMgFXwiA1cEQANAIAMgDX0hAwJAIAhCAXwiCCAQUg0AQgAhCCAKQgF8IgogD1INACAGQgF8IgVCACAFIBJSGyEGQgAhCgsgAyANWQ0ACwsgDEIBfCIMIAlSDQALIA4gEUIBfCIRUg0ACwwHCwJAAkACQCAdDgIAAQILIA5CAFcNCCAJQgBXDQggGSAaTg0IIARCAFcNCCAZIASnIgBsISIgAyAarX0gBH6nISUgGEEBRiAEQgtWcSEmIARCA4MhByACKAKAASIcIABBAnRqISggBEJ8gyIMpyEpICEgI2wgJGwiAq0hCCAAIAJqQQNqrSEKIBj9ESEwICetIQ0gG60hESABKAKAASEeQQAhAUIAIQUDQCAFIBF+IgMgCnwhDyADIAh8IRAgHiAbIAWnbGohIUIAIQYDQCABICJqIQIgISAnIAanbGohJCAPIAYgDX4iA3ynISogAyAQfKchK0EAIQAgGSEXA0AgJCAXICNsaiEdQgAhCwJAAkAgJkUEQEIAIQMMAQsCQCAcIAJBAnQiAWogHiAAICNsIh8gKmpqTw0AIB4gHyAramogASAoak8NAEIAIQMMAQsgAiApaiEB/QwAAAAAAQAAAAIAAAADAAAAIS5CACEDA0AgHCACIAOnakECdGogHSAwIC79tQEiL/0bAGr9CQIAIB0gL/0bAWoqAgD9IAEgHSAv/RsCaioCAP0gAiAdIC/9GwNqKgIA/SAD/QsCACAu/QwEAAAABAAAAAQAAAAEAAAA/a4BIS4gA0IEfCIDIAxSDQALIAEhAiAMIgMgBFENAQsgBCADQn+FfCESIAdCAFIEQANAIBwgAkECdGogHSAYIAOnbGoqAgA4AgAgA0IBfCEDIAJBAWohAiALQgF8IgsgB1INAAsLIBJCA1QNAANAIBwgAkECdGoiASAdIBggA6ciH2xqKgIAOAIAIAEgHSAYIB9BAWpsaioCADgCBCABIB0gGCAfQQJqbGoqAgA4AgggASAdIBggH0EDamxqKgIAOAIMIAJBBGohAiADQgR8IgMgBFINAAsLIABBAWohACAXQQFqIhcgGkcNAAsgAiAlaiEBIAZCAXwiBiAJUg0ACyAFQgF8IgUgDlINAAsMCAsgDkIAVw0HIAlCAFcNByAZIBpODQcgBEIAVw0HIAIoAoABIR0gGSAEp2whHCADIBqtfSAEfqchHiAYQQFGIARCA1ZxIR8gBEJ8gyIFpyEhIBj9ESEwIAEoAoABISJBACEBQgAhBwNAICIgGyAHp2xqISRCACEIA0AgASAcaiEBICQgJyAIp2xqISUgGSEAA0AgJSAAICNsaiECQgAhAwJAAkAgH0UEQCABIRcMAQsgASAhaiEX/QwAAAAAAQAAAAIAAAADAAAAIS4DQCAdIAEgA6dqQQF0av0MAH4AAAB+AAAAfgAAAH4AACACIDAgLv21ASIv/RsAav0JAgAgAiAv/RsBaioCAP0gASACIC/9GwJqKgIA/SACIAIgL/0bA2oqAgD9IAMiL/3gAf0MAACAdwAAgHcAAIB3AACAd/3mAf0MAACACAAAgAgAAIAIAACACP3mASAvQQH9qwEiMf0MAAAA/wAAAP8AAAD/AAAA//1O/QwAAABxAAAAcQAAAHEAAABx/bkBQQH9rQH9DAAAgAcAAIAHAACABwAAgAf9rgH95AEiMkEN/a0B/QwAfAAAAHwAAAB8AAAAfAAA/U4gMv0M/w8AAP8PAAD/DwAA/w8AAP1O/a4BIDH9DAAAAP8AAAD/AAAA/wAAAP/9PP1SIC9BEP2tAf0MAIAAAACAAAAAgAAAAIAAAP1O/VAgL/0NAAEEBQgJDA0AAQABAAEAAf1bAQAAIC79DAQAAAAEAAAABAAAAAQAAAD9rgEhLiADQgR8IgMgBVINAAsgFyEBIAUiAyAEUQ0BCyAXIQEDQCAdIAFBAXRqQYD8ASACIBggA6dsaioCACIzi0MAAIB3lEMAAIAIlEGAgICIByAzvCIXQQF0IiZBgICAeHEiKCAoQYCAgIgHTRtBAXZBgICAPGq+krwiKEENdkGA+AFxIChB/x9xaiAmQYCAgHhLGyAXQRB2QYCAAnFyOwEAIAFBAWohASADQgF8IgMgBFINAAsLIABBAWoiACAaRw0ACyABIB5qIQEgCEIBfCIIIAlSDQALIAdCAXwiByAOUg0ACwwHCyAgQfgeNgJoICBBjzc2AmQgIEGRJDYCYEG4nwIoAgBBiNIAICBB4ABqEDIMBwtBzAcgHXZBAXEEQCAEIAx/IQMgDkIAVw0GIAlCAFcNBiAdQRhsQbTkAGooAgAhHSACKAKAASEcIAAgGWogGmsgFyADp2wiFyAJp2xsISIgFyAZbCEkIBcgACAaa2whJSAEpyEeIBlBAWohACAZICNsISYgGiAZayIoQQFxISlBACEYA0ACQCAZIBpIBEAgGyALp2whH0IAIQMDQCAYICRqIQIgJyADp2whISApBH8gASgCgAEgH2ogIWogJmogAiAcaiAeIB0RBQAgAiAXaiECIAAFIBkLIRggKEEBRwRAA0AgASgCgAEgIWogH2ogGCAjbGogAiAcaiAeIB0RBQAgASgCgAEgIWogH2ogGEEBaiAjbGogHCACIBdqIgJqIB4gHREFACACIBdqIQIgGEECaiIYIBpHDQALCyACICVqIRggA0IBfCIDIAlSDQALDAELIBggImohGAsgC0IBfCILIA5SDQALDAYLICBB+B42AlggIEHlNjYCVCAgQZEkNgJQQbifAigCAEGI0gAgIEHQAGoQMgwGCyAOQgBXDQQgCUIAVw0EIBkgGk4NBCACKAKAASECIBkgBKciF2whHCADIBqtfSAEfqchHiAJpyAAIBlqIBprbCAXbCEfIARCfIMiBachIUEAIRhCACEHA0ACQCAEQgBXBEAgGCAfaiEYDAELIAEoAoABIBsgB6dsaiEiQgAhCANAIBggHGohGCAiICcgCKdsaiEkIBkhAANAICQgACAjbGohHUIAIQMCQAJAIARCBFQEQCAYIRcMAQsgGCAhaiEXA0AgAiAYIAOnIiVqQQF0av0MAH4AAAB+AAAAfgAAAH4AACAdICVBAnRq/QACACIu/eAB/QwAAIB3AACAdwAAgHcAAIB3/eYB/QwAAIAIAACACAAAgAgAAIAI/eYBIC5BAf2rASIv/QwAAAD/AAAA/wAAAP8AAAD//U79DAAAAHEAAABxAAAAcQAAAHH9uQFBAf2tAf0MAACABwAAgAcAAIAHAACAB/2uAf3kASIwQQ39rQH9DAB8AAAAfAAAAHwAAAB8AAD9TiAw/Qz/DwAA/w8AAP8PAAD/DwAA/U79rgEgL/0MAAAA/wAAAP8AAAD/AAAA//08/VIgLkEQ/a0B/QwAgAAAAIAAAACAAAAAgAAA/U79UCAu/Q0AAQQFCAkMDQABAAEAAQAB/VsBAAAgA0IEfCIDIAVSDQALIBchGCAFIgMgBFENAQsgFyEYA0AgAiAYQQF0akGA/AEgHSADp0ECdGoqAgAiM4tDAACAd5RDAACACJRBgICAiAcgM7wiF0EBdCIlQYCAgHhxIiYgJkGAgICIB00bQQF2QYCAgDxqvpK8IiZBDXZBgPgBcSAmQf8fcWogJUGAgIB4SxsgF0EQdkGAgAJxcjsBACAYQQFqIRggA0IBfCIDIARSDQALCyAAQQFqIgAgGkcNAAsgGCAeaiEYIAhCAXwiCCAJUg0ACwsgB0IBfCIHIA5SDQALDAQLAkACQAJAIBwOAgACAQsgDUIAVw0FIAlCAFcNBSAZIBpODQUgBEIAVw0FIAQgGawiDH4hEyAOIBqsIhR9IAR+IRUgAigCgAEhACABKAKAASEBQgAhAwNAIAEgJyARp2xqIQJCACEOA0AgCyADIBN8IgNXBEADQCADIAt9IQMCQCAHQgF8IgcgEFINAEIAIQcgBkIBfCIGIA9SDQAgCkIBfCIFQgAgBSASUhshCkIAIQYLIAMgC1kNAAsLIAIgHSAOp2xqIRcgDCEFA0AgFyAjIAWnbGohGUIAIQgDQCAAIBsgA6dsaiAhIAenbGogHyAGp2xqIB4gCqdsaiAZIBggCKdsai8BAEECdEHAlgNqKgIAOAIAAkAgA0IBfCIDIAtSDQBCACEDIAdCAXwiByAQUg0AIA8gBkIBfCIGUgRAQgAhBwwBCyAKQgF8IgdCACAHIBJSGyEKQgAhB0IAIQYLIAhCAXwiCCAEUg0ACyAFQgF8IgUgFFINAAsgCyADIBV8IgNXBEADQCADIAt9IQMCQCAHQgF8IgcgEFINAEIAIQcgBkIBfCIGIA9SDQAgCkIBfCIFQgAgBSASUhshCkIAIQYLIAMgC1kNAAsLIA5CAXwiDiAJUg0ACyARQgF8IhEgDVINAAsMBQsgIEH4HjYCOCAgQek1NgI0ICBBkSQ2AjBBuJ8CKAIAQYjSACAgQTBqEDIMBQsgDUIAVw0DIAlCAFcNAyAZIBpODQMgBEIAVw0DIAQgGawiBX4hFCAOIBqsIhV9IAR+IRZCACEDA0AgJyARp2whAEIAIRMDQCALIAMgFHwiA1cEQANAIAMgC30hAwJAIAdCAXwiByAQUg0AQgAhByAGQgF8IgYgD1INACAKQgF8IgxCACAMIBJSGyEKQgAhBgsgAyALWQ0ACwsgHSATp2whFyAFIQwDQCAjIAynbCEZQgAhCANAIAIoAoABIBsgA6dsaiAhIAenbGogHyAGp2xqIB4gCqdsaiABKAKAASAZaiAXaiAAaiAYIAinbGovAAA7AAACQCADQgF8IgMgBFINAEIAIQMgB0IBfCIHIA5SDQAgCSAGQgF8IgZSBEBCACEHDAELIApCAXwiB0IAIAcgDVIbIQpCACEHQgAhBgsgCEIBfCIIIARSDQALIAxCAXwiDCAVUg0ACyALIAMgFnwiA1cEQANAIAMgC30hAwJAIAdCAXwiByAQUg0AQgAhByAGQgF8IgYgD1INACAKQgF8IgxCACAMIBJSGyEKQgAhBgsgAyALWQ0ACwsgE0IBfCITIAlSDQALIBFCAXwiESANUg0ACwwDCwJAAkACQCAcDgIAAgELIA1CAFcNBCAJQgBXDQQgAigCgAEhHCAZIASnIgBsIR4gDiAarX0gBH6nIR8gGEEBRiAEQgNWcSEhIARCAYMhByAJpyAXIBlqIBprbCAAbCEiIARCfIMiBachJCAY/REhMEEAIQIDQAJAAkAgGSAaTg0AIARCAFcNACABKAKAASAnIAanbGohJUIAIQoDQCACIB5qIRcgJSAdIAqnbGohJiAZIQADQCAmIAAgI2xqIRtCACEDAkACQCAhRQRAIBchAgwBCyAXICRqIQL9DAAAAAABAAAAAgAAAAMAAAAhLgNAIBwgFyADp2pBAnRqIBsgMCAu/bUBIi/9GwBq/QwAAAAAAAAAAAAAAAAAAAAA/VUBAAAiMf0bAEECdEHAlgNq/QkCACAbIC/9GwFqIDH9VQEAAiIx/RsBQQJ0QcCWA2oqAgD9IAEgGyAv/RsCaiAx/VUBAAQiMf0bAkECdEHAlgNqKgIA/SACIBsgL/0bA2ogMf1VAQAG/RsDQQJ0QcCWA2oqAgD9IAP9CwIAIC79DAQAAAAEAAAABAAAAAQAAAD9rgEhLiADQgR8IgMgBVINAAsgAiEXIAUiAyAEUQ0BCyADQgGEIQwgB1AEfyACBSAcIAJBAnRqIBsgGCADp2xqLwEAQQJ0QcCWA2oqAgA4AgAgDCEDIAJBAWoLIRcgBCAMUQ0AA0AgHCAXQQJ0aiICIBsgGCADpyIobGovAQBBAnRBwJYDaioCADgCACACIBsgGCAoQQFqbGovAQBBAnRBwJYDaioCADgCBCAXQQJqIRcgA0ICfCIDIARSDQALCyAAQQFqIgAgGkcNAAsgFyAfaiECIAkgCkIBfCIKUg0ACwwBCyACICJqIQILIAZCAXwiBiANUg0ACwwECyAgQfgeNgIoICBB9DQ2AiQgIEGRJDYCIEG4nwIoAgBBiNIAICBBIGoQMgwECyANQgBXDQIgCUIAVw0CIBkgGk4NAiAZIASnIgBsISIgDiAarX0gBH6nISUgGEEBRiAEQg9WcSEoIARCA4MhByACKAKAASIcIABBAXRqISkgCacgFyAZaiAaa2wgAGwhKiAEQniDIgWnISsgIyAkbCAmbCICrSEKIAAgAmpBAWqtIQsgGP0RITEgHa0hDiAnrSERQQAhAkIAIQwDQAJAIARCAFcEQCACICpqIQIMAQsgDCARfiIDIAt8IQ8gAyAKfCEQIAEoAoABIiEgJyAMp2xqISRCACEGA0AgAiAiaiEXICQgHSAGp2xqISYgDyAGIA5+IgN8pyEsIAMgEHynIS1BACEeIBkhAANAICYgACAjbGohG0IAIQgCQAJAIChFBEBCACEDDAELAkAgHCAXQQF0IgJqICEgHiAjbCIfICxqak8NACAhIB8gLWpqIAIgKWpPDQBCACEDDAELIBcgK2ohAv0MBAAAAAUAAAAGAAAABwAAACEu/QwAAAAAAQAAAAIAAAADAAAAIS9CACEDA0AgHCAXIAOnakEBdGogGyAxIC79tQEiMP0bA2ogGyAw/RsCaiAbIDD9GwFqIBsgMP0bAGogGyAxIC/9tQEiMP0bA2ogGyAw/RsCaiAbIDD9GwFqIBsgMP0bAGr9CAEA/VUBAAH9VQEAAv1VAQAD/VUBAAT9VQEABf1VAQAG/VUBAAf9CwEAIC/9DAgAAAAIAAAACAAAAAgAAAD9rgEhLyAu/QwIAAAACAAAAAgAAAAIAAAA/a4BIS4gA0IIfCIDIAVSDQALIAIhFyAFIgMgBFENAQsgBCADQn+FfCESIAdCAFIEQANAIBwgF0EBdGogGyAYIAOnbGovAQA7AQAgA0IBfCEDIBdBAWohFyAIQgF8IgggB1INAAsLIBJCA1QNAANAIBwgF0EBdGoiAiAbIBggA6ciH2xqLwEAOwEAIAIgGyAYIB9BAWpsai8BADsBAiACIBsgGCAfQQJqbGovAQA7AQQgAiAbIBggH0EDamxqLwEAOwEGIBdBBGohFyADQgR8IgMgBFINAAsLIB5BAWohHiAAQQFqIgAgGkcNAAsgFyAlaiECIAZCAXwiBiAJUg0ACwsgDEIBfCIMIA1SDQALDAILQcwHIBx2QQFxBEAgBCAFfyEDIA1CAFcNAiAJQgBXDQIgACgCECAkIASnIh5BEGpsQQJ0aiEAIBxBGGxBtOQAaigCACEcIAIoAoABIR8gFyAZaiAaayAbIAOnbCIbIAmnbGwhJSAZIBtsISEgGyAXIBprbCEiIARCfIMhBSAaIBlrIgJBA3EhJEEAIRggAkEBa0EDSSEmA0ACQCAZIBpOBEAgGCAlaiEYDAELQgAhByAEQgBVBEAgJyAGp2whKANAIBggIWohFyAdIAenbCEpIBkhAgNAIAEoAoABIClqIChqIAIgI2xqIRhCACEDAkAgBEIEWgRAA0AgACADpyIqQQJ0aiAYICpBAXRq/QQBACIu/RsAQQJ0QcCWA2r9CQIAIC79GwFBAnRBwJYDaioCAP0gASAu/RsCQQJ0QcCWA2oqAgD9IAIgLv0bA0ECdEHAlgNqKgIA/SAD/QsCACADQgR8IgMgBVINAAsgBSIDIARRDQELA0AgACADpyIqQQJ0aiAYICpBAXRqLwEAQQJ0QcCWA2oqAgA4AgAgA0IBfCIDIARSDQALCyAAIBcgH2ogHiAcEQUAIBcgG2ohFyACQQFqIgIgGkcNAAsgFyAiaiEYIAdCAXwiByAJUg0ACwwBCwNAIBggIWohGEEAIRcgGSECICQEQANAIAAgGCAfaiAeIBwRBQAgAkEBaiECIBggG2ohGCAXQQFqIhcgJEcNAAsLICZFBEADQCAAIBggH2ogHiAcEQUAIAAgHyAYIBtqIhdqIB4gHBEFACAAIB8gFyAbaiIXaiAeIBwRBQAgACAfIBcgG2oiF2ogHiAcEQUAIBcgG2ohGCACQQRqIgIgGkcNAAsLIBggImohGCAHQgF8IgcgCVINAAsLIAZCAXwiBiANUg0ACwwCCyAgQfgeNgIYICBByjQ2AhQgIEGRJDYCEEG4nwIoAgBBiNIAICBBEGoQMgwCCyANQgBXDQAgCUIAVw0AIAIoAoABIQAgGSAEpyICbCEcIA4gGq19IAR+pyEeIAmnIBcgGWogGmtsIAJsIR8gBEJ8gyIFpyEhQQAhGANAAkACQCAZIBpODQAgBEIAVw0AIAEoAoABICcgBqdsaiEiQgAhBwNAIBggHGohGCAiIB0gB6dsaiEkIBkhAgNAICQgAiAjbGohG0IAIQMCQAJAIARCBFQEQCAYIRcMAQsgGCAhaiEXA0AgACAYIAOnIiVqQQJ0aiAbICVBAXRq/QQBACIu/RsAQQJ0QcCWA2r9CQIAIC79GwFBAnRBwJYDaioCAP0gASAu/RsCQQJ0QcCWA2oqAgD9IAIgLv0bA0ECdEHAlgNqKgIA/SAD/QsCACADQgR8IgMgBVINAAsgFyEYIAUiAyAEUQ0BCyAXIRgDQCAAIBhBAnRqIBsgA6dBAXRqLwEAQQJ0QcCWA2oqAgA4AgAgGEEBaiEYIANCAXwiAyAEUg0ACwsgAkEBaiICIBpHDQALIBggHmohGCAJIAdCAXwiB1INAAsMAQsgGCAfaiEYCyAGQgF8IgYgDVINAAsLICBBkAFqJAAPCxAAAAt/AgJ/An4jAEGgAWsiBCQAIAQgATYCPCAEIAE2AhQgBEF/NgIYIARBEGoiBUIAEIABIAQgBSADQQEQ2AMgBCkDCCEGIAQpAwAhByACBEAgAiABIAQoAhQgBCgCiAFqIAQoAjxrajYCAAsgACAGNwMIIAAgBzcDACAEQaABaiQAC+UBAQl/IAAgAEE9EIAEIgFGBEBBAA8LAkAgACABIABrIgVqLQAADQBBpMArKAIAIgNFDQAgAygCACICRQ0AA0ACQAJ/IAAhAUEAIQZBACAFIgdFDQAaAkAgAS0AACIERQ0AA0ACQCACLQAAIghFDQAgB0EBayIHRQ0AIAQgCEcNACACQQFqIQIgAS0AASEEIAFBAWohASAEDQEMAgsLIAQhBgsgBkH/AXEgAi0AAGsLRQRAIAMoAgAgBWoiAS0AAEE9Rg0BCyADKAIEIQIgA0EEaiEDIAINAQwCCwsgAUEBaiEJCyAJC60UAgt/An4jAEHAAWsiAiQAIAEoAgghCCACQQA7AbwBIAJBADYCuAEgAiAINgK0ASACQQA2ArABAkACQCAIQQJIDQAgAiAIQQV0a0EgaiIMJAAgAkEB/hkAvAEgCEEBayEHA0AgAyAHRg0BIANBAWohBiAMIANBBXRqIQUCfyABKAIQIgNFBEBBACEEQQAMAQsgAygCAEECdCIEQfDmAGo1AgAgAykDKCADKQMgIAMpAxggAykDEH5+fn4gBEGw5wBqNAIAf6chBCADKAKAAQshAyAFQQA2AhggBSADNgIUIAUgBDYCECAFIAg2AgwgBSAGNgIIIAVCgICAgBA3AwAgBSACQbABajYCHCAGIQMgBUEKIAUQggRFDQALIAJBzzU2AogBIAJB9u0ANgKEASACQZEkNgKAAUG4nwIoAgBBiNIAIAJBgAFqEDIMAQsCQAJAAkACQAJAAkAgASgCACIJQQBMDQAgCEECdCEKIAhBA3QhC0EAIQRBACEGA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgASAGQQJ0aigCFCIDKAJADjQKAAEBAgoDCgoKCgoKCgoKCgoKCgMDAwMDAwQFCgAKCgoKCgoKCgUKBQUFCgoGBgcICgoJCwsgAyAINgJkQQAhBUHMByADKAIAdkEBcQRAIAogAygCEGwhBQsgBCAFIAQgBUsbIQQMCgsgAyAINgJkQQAhBUHMByADKAJMIgMoAgB2QQFxBEAgCiADKAIQbCEFCyAEIAUgBCAFSxshBAwJCyADIAg2AmRBACEFQcwHIAMoAkwoAgB2QQFxBEAgCiADKAJQKAIQbCEFCyAEIAUgBCAFSxshBAwICyADIAg2AmQMBwsgAyAINgJkIAQCfwJAAkACQCADKAJMKAIAIgcOAgEAAgsgAygCUCIFKAIADQEgBSkDKCAFKQMgIAUpAxggBSkDEH5+fqdBAXQMAgsgAygCUCgCAA0AQQAMAQtBzAcgB3ZBAXFFDQogAygCUCIDKAIADQogAykDKCADKQMgIAMpAxggAykDECAHQRhsQcTkAGooAgBBAnQiA0Hw5gBqNQIAfn5+fiADQbDnAGo0AgB/pwsiAyADIARJGyEEDAYLIAMgCDYCZAwFCyADIAg2AmQgAygCTCIHKQMoQgFSDQggAygCUCIDKQMgQgFSDQkgAykDKEIBUg0KIAcpAxAhDQJ/AkACQCAHKAIADgIBAA4LIAMoAgANDULg////ByEOQQEMAQsgAygCAA0MQuD///8DIQ5BAgshBSAEIAcpAyAgDX4gBykDGEIffCAOg34gAykDGCADKQMQIA2nQQJtQQF0rXx+fKcgBXQiAyADIARJGyEEDAQLIAMgCDYCZCADKAJQIgUoAhhBA2pBfHEhB0EAIQMCQAJAIAUoAgAOAgAAAQsgByALbCEDCyAEIAMgAyAESRshBAwDCyADIAg2AmRBACEFIAMoAlAiAygCAEEBTQRAIAsgAygCGGwhBQsgBCAFIAQgBUsbIQQMAgsgAkH4HjYCeCACQe3vADYCdCACQZEkNgJwQbifAigCAEGI0gAgAkHwAGoQMgwJCyADQQE2AmQLIAZBAWoiBiAJRw0ACwJAIAEoAhAEQCAEIAEoAgxNDQEgAkH4HjYCGCACQfPvADYCFCACQZEkNgIQQbifAigCAEGI0gAgAkEQahAyDAgLIARFDQAgASAIQQZ0IARqQUBqIgY2AgwgAiAGrTcDmAEgASAAQQpBASACQZgBakEAEDw2AhAgASgCACEJCyAJQQBMDQAgCEEBayEJQQAhCgNAIAEgCkECdGooAhQhBCACQgA3A5gBIAIgBCgCZDYCoAEgAgJ/IAEoAhAiAEUEQCACQQA2AqQBQQAMAQsgAiAAKAIAQQJ0IgZB8OYAajUCACAAKQMoIAApAyAgACkDGCAAKQMQfn5+fiAGQbDnAGo0AgB/PgKkASAAKAKAAQs2AqgBIAJBmAFqIAQQ4gEgBCgCZEECTgRAIAkgAkEB/h4CuAFGBEAgAkEA/hkAvAELA0AgAv4SALwBQQFxDQALIAhBAk4EQCABKAIQIQdBACEGA0AgBkEBaiEDIAQoAmQhCyAMIAZBBXRqIgYCfyAHRQRAQQAhBUEADAELIAcoAgBBAnQiAEHw5gBqNQIAIAcpAyggBykDICAHKQMYIAcpAxB+fn5+IABBsOcAajQCAH+nIQUgBygCgAELNgIUIAYgBTYCECAGIAs2AgwgBiADNgIIIAZBATYCBCAGIAQ2AhggAyIGIAlHDQALCyACQQH+JQK4ARoDQCAC/hACuAFBAEoNAAsgAkEB/hkAvAELIAJBATYCmAEgAkGYAWogBBDiAQJAIAQoAmRBAkgNACAJIAJBAf4eArgBRgRAIAJBAP4ZALwBCwNAIAL+EgC8AUEBcQ0ACyACQQH+JQK4ARoDQCAC/hACuAENAAsgBCgCZEECSA0AIAkgAkEB/h4CuAFGBEAgAkEA/hkAvAELA0AgAv4SALwBQQFxDQALIAhBAk4EQCABKAIQIQdBACEGA0AgBkEBaiEDIAQoAmQhCyAMIAZBBXRqIgYCfyAHRQRAQQAhBUEADAELIAcoAgBBAnQiAEHw5gBqNQIAIAcpAyggBykDICAHKQMYIAcpAxB+fn5+IABBsOcAajQCAH+nIQUgBygCgAELNgIUIAYgBTYCECAGIAs2AgwgBiADNgIIIAZBAjYCBCAGIAQ2AhggAyIGIAlHDQALCyACQQH+JQK4ARoDQCAC/hACuAFBAEoNAAsgAkEB/hkAvAELIAJBAjYCmAEgAkGYAWogBBDiASAEKAJkQQJOBEAgCSACQQH+HgK4AUYEQCACQQD+GQC8AQsDQCAC/hIAvAFBAXENAAsgAkEB/iUCuAEaA0AgAv4QArgBDQALCyAEIAQoAmhBAWo2AmggCkEBaiIKIAEoAgBIDQALCwJAIAhBAUwNACACQQH+GQC9ASACQQH+GQC8ASAIQQJrIQBBACEGA0AgDCAGQQV0aigCABCBBEUEQCAAIAZGIQMgBkEBaiEGIANFDQEMAgsLIAJBzzU2AgggAkGZ8QA2AgQgAkGRJDYCAEG4nwIoAgBBiNIAIAIQMgwGCyABIAEoApSAA0EBajYClIADIAJBwAFqJAAPCyACQfgeNgIoIAJB+e4ANgIkIAJBkSQ2AiBBuJ8CKAIAQYjSACACQSBqEDIMBAsgAkGsNDYCaCACQaPvADYCZCACQZEkNgJgQbifAigCAEGI0gAgAkHgAGoQMgwDCyACQcM0NgJYIAJBpO8ANgJUIAJBkSQ2AlBBuJ8CKAIAQYjSACACQdAAahAyDAILIAJBlTQ2AkggAkGl7wA2AkQgAkGRJDYCQEG4nwIoAgBBiNIAIAJBQGsQMgwBCyACQfgeNgI4IAJBt+8ANgI0IAJBkSQ2AjBBuJ8CKAIAQYjSACACQTBqEDILEAAAC0QBAX8jAEEQayIFJAAgBSABIAIgAyAEQoCAgICAgICAgH+FEG8gBSkDACEBIAAgBSkDCDcDCCAAIAE3AwAgBUEQaiQAC4QBAQJ/IABB7KcCNgIAIAAoAighAQNAIAEEQEEAIAAgAUEBayIBQQJ0IgIgACgCJGooAgAgACgCICACaigCABEFAAwBCwsgACgCHCIBQQRqQX/+HgIARQRAIAEgASgCACgCCBEAAAsgACgCIBAxIAAoAiQQMSAAKAIwEDEgACgCPBAxIAALIAAgACAAKAIYRSABciIBNgIQIAAoAhQgAXEEQBBIAAsLVQECfyMAQRBrIgQkACACIAFrIQUgASACRwRAIAMgASAF/AoAAAsgBCABIAVqNgIMIAQgAyAFajYCCCAAIAQoAgw2AgAgACAEKAIINgIEIARBEGokAAs2AQF/IwBBEGsiAyQAIAMgATYCDCADIAI2AgggACADKAIMNgIAIAAgAygCCDYCBCADQRBqJAALjgEBA38gASgCSCEEIAAgASgCACABKAIIIAFBEGogASgCgAEQPCICIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCABKAI8IQMgAkEoNgJAIAIgAzYCPEEAIQMgBARAIAAgAigCACACKAIIIAJBEGpBABA8IQMLIAJBADYCUCACIAE2AkwgAiADNgJIIAILOwEBfyAAQbSmAigCACIBNgIAIAAgAUEMaygCAGpBwKYCKAIANgIAIABBCGoQ5QEaIABB7ABqELACIAALtgEBA38gASgCSCEEIAAgASgCACABKAIIIAFBEGogASgCgAEQPCICIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCACIAEoAjw2AjwgAiABKQMYNwMQIAIgASkDEDcDGCACIAEoAjQ2AjAgASgCMCEDIAJBIjYCQCACIAM2AjRBACEDIAQEQCAAIAIoAgAgAigCCCACQRBqQQAQPCEDCyACQQA2AlAgAiABNgJMIAIgAzYCSCACCwwAIABBCGoQsAIgAAsIACAAEKgCGgt8AQJ/IAAgACgCSCIBQQFrIAFyNgJIIAAoAhQgACgCHEcEQCAAQQBBACAAKAIkEQMAGgsgAEEANgIcIABCADcDECAAKAIAIgFBBHEEQCAAIAFBIHI2AgBBfw8LIAAgACgCLCAAKAIwaiICNgIIIAAgAjYCBCABQRt0QR91CzcBAX8gACgCTEEASARAIAAgASACEPQDDwsgABCCASEDIAAgASACEPQDIQIgAwRAIAAQjQELIAIL0gMCAn4CfyMAQSBrIgQkAAJAIAFC////////////AIMiA0KAgICAgIDAgDx9IANCgICAgICAwP/DAH1UBEAgAUIEhiAAQjyIhCEDIABC//////////8PgyIAQoGAgICAgICACFoEQCADQoGAgICAgICAwAB8IQIMAgsgA0KAgICAgICAgEB9IQIgAEKAgICAgICAgAhSDQEgAiADQgGDfCECDAELIABQIANCgICAgICAwP//AFQgA0KAgICA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AiAGIANBAWogACgCEEEBahDSAiEDCyADIARHDQELCyAEIAVGBEBBCBAzIQMgACgCJCIFKAIEIQYgA0G4iwE2AgAgAyAGNgIEIAUgAzYCBCAAIAAoAiQoAgQ2AiQLQQwQMyEDIAcoAgQhBSADIAEoAgQ2AgggAyAFNgIEIANBjJcBNgIAIAcgAzYCBCABQQA2AgRBCBAzIQMgACgCJCgCBCEFIANBuIsBNgIAIAMgBTYCBCABIAM2AgQgACgCJEEANgIEQQgQMyEDIAEoAgQhBSADQcyXATYCACADIAU2AgQgACgCJCADNgIEIAAgASgCBDYCJCACIARHDQALCyACC+gDAQR/AkACQAJAIAAoAgQgACgCACICa0EobSIFQQFqIgNB58yZM0kEQEHmzJkzIAAoAgggAmtBKG0iAkEBdCIEIAMgAyAESRsgAkGz5swZTxsiA0HnzJkzTw0BIANBKGwiAxAzIgQgBUEobGoiAiAB/QADAP0LAwAgAiABKAIYNgIYIAIgASkDEDcDECABQgA3AxAgAUEANgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAFBADYCJCABQgA3AhwgAyAEaiEDIAJBKGohBSAAKAIEIgEgACgCACIERg0CA0AgAkEoayICIAFBKGsiAf0AAwD9CwMAIAIgASgCGDYCGCACIAEpAxA3AxAgAUIANwMQIAFBADYCGCACIAEoAhw2AhwgAiABKAIgNgIgIAIgASgCJDYCJCABQQA2AiQgAUIANwIcIAEgBEcNAAsgACADNgIIIAAoAgQhAyAAIAU2AgQgACgCACEBIAAgAjYCACABIANGDQMDQCADQShrIgAoAhwiAgRAIANBCGsgAjYCACACEDELIANBDWssAABBAEgEQCADQRhrKAIAEDELIAAiAyABRw0ACwwDCxBEAAsQWwALIAAgAzYCCCAAIAU2AgQgACACNgIACyABBEAgARAxCwsfACABBEAgACABKAIAENYCIAAgASgCBBDWAiABEDELC/MlAhB/AnwjAEHwAGsiBCQAA0AgAUEsayELIAFBMGshDiABQTRrIQ8gAUE4ayENIAFBKGshESABQcgAayEKA0AgACEFA0ACQAJAAkACQAJAAkACQAJAIAEgBWsiDEHIAG0iCQ4GBwcABAECAwsgAUEoaysDACAFKwMg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AP0LAgAgBCAFQRByIg1qIAEgDWr9AAIA/QsCACAEIAVBIHIiDWogASANav0AAgD9CwIAIAQgBUEwciIFaiABIAVq/QACAP0LAgAgA0EQaiEDIAxBBGoiDCARRw0ACwsgCQRAA0AgBCADQQJ0IgVqIAEgBWr9AAIA/QsCACADQQRqIQMgC0EBaiILIAlHDQALCyAIQQJ0IgUgBGohAyAIIBBGDQEgASAFaiEBCwNAIAMgASgCADYCACADQQRqIQMgAUEEaiIBIAdJDQALCyAAIAM2AgQgBCAPRwRAIAQgCkF8cWsgDiAK/AoAAAsgAiAGRg0BIA4gAiAGIAJr/AoAAA8LIAcgBWtBAnUgCmoiAUGAgICABE8NAUH/////AyAEIAVrIgRBAXUiBiABIAEgBkkbIARB/P///wdPGyIBBH8gAUGAgICABE8NAyABQQJ0EDMFQQALIgQgCEF8cWohBiACIANHBEAgBiACIAlBfHH8CgAAIAYgCkECdGohBgsgBCAFIAj8CgAAIAYgDiAHIA5rIgL8CgAAIAAgBCABQQJ0ajYCCCAAIAIgBmo2AgQgACAENgIAIAUEQCAFEDELCw8LEEQACxBbAAvxFwIJfwN8AkADQCABQQhrIQogAUEQayEHA0AgACEDA0ACQAJAAkACQAJAAkACQAJAIAEgA2siCEEEdSIJDgYHBwABBAIDCyABQRBrIgArAwAiDCADKwMAIg1kRQ0GIAMgDDkDACAAIA05AwAMCgsgAUEQayIAKwMAIQwgAysDECINIAMrAwAiDmRFBEAgDCANZEUNBiADIAw5AxAgACANOQMAIANBGGooAgAhACADIAFBCGsiASgCADYCGCABIAA2AgAgAysDECIMIAMrAwAiDWRFDQYgAyANOQMQIAMgDDkDACADKAIIIQAgAyADKAIYNgIIIAMgADYCGA8LIAwgDWQEQCADIAw5AwAgACAOOQMADAoLIAMgDjkDECADIA05AwAgAygCCCECIAMgA0EYaigCADYCCCADIAI2AhggACsDACIMIA5kRQ0FIAMgDDkDECAAIA45AwAgAyABQQhrIgAoAgA2AhggACACNgIADwsgAyADQRBqIANBIGogA0EwahDNARogAUEQayIAKwMAIgwgAysDMCINZEUNBCADIAw5AzAgACANOQMAIANBOGooAgAhACADIAFBCGsiASgCADYCOCABIAA2AgAgAysDMCIMIAMrAyAiDWRFDQQgAyANOQMwIAMgDDkDICADQShqKAIAIQEgAyADKAI4IgA2AiggAyABNgI4IAwgAysDECINZEUNBCADIA05AyAgAyAMOQMQIANBGGooAgAhASADIAA2AhggAyABNgIoIAwgAysDACINZEUNBCADIA05AxAgAyAMOQMAIAMoAgghASADIAA2AgggAyABNgIYDwsgCEHvAEwEQCADKwMgIQwCQCADKwMQIg4gAysDACINZEUEQCAMIA5kRQ0BIAMgDjkDICADIAw5AxAgA0EYaigCACEAIAMgA0EoaigCACICNgIYIAMgADYCKCAMIA1kRQ0BIAMgDTkDECADIAw5AwAgAygCCCEAIAMgAjYCCCADIAA2AhgMAQsgDCAOZARAIAMgDTkDICADIAw5AwAgAygCCCEAIAMgA0EoaigCADYCCCADIAA2AigMAQsgAyANOQMQIAMgDjkDACADKAIIIQAgAyADQRhqKAIANgIIIAMgADYCGCAMIA1kRQ0AIAMgDTkDICADIAw5AxAgA0EoaigCACECIAMgADYCKCADIAI2AhgLIANBMGoiAiABRg0EIANBIGohBQNAIAIrAwAiDSAFKwMAIgxkBEAgAigCCCEHIAIhBANAAkAgBCAMOQMAIAQgBSIAKAIINgIIIAAgA0YEQCADIQAMAQsgACEEIA0gAEEQayIFKwMAIgxkDQELCyAAIAc2AgggACANOQMACyACIgVBEGoiACECIAAgAUcNAAsMBAsgAkUEQCABIANGDQQgCUECa0EBdiIGIQADQAJAIAYgACIHSA0AIAMgB0EEdGohAiADIAdBAXQiBEEBciIFQQR0aiEAAkAgCSAEQQJqIgRMBEAgBSEEDAELIAArAwAgACsDEGRFBEAgBSEEDAELIABBEGohAAsgACsDACIMIAIrAwAiDWQNACACKAIIIQoDQAJAIAIgDDkDACACIAAiAigCCDYCCCAEIAZKDQAgAyAEQQF0IgRBAXIiBUEEdGohAAJAIAkgBEECaiIETARAIAUhBAwBCyAAKwMAIAArAxBkRQRAIAUhBAwBCyAAQRBqIQALIAArAwAiDCANZEUNAQsLIAIgCjYCCCACIA05AwALIAdBAWshACAHQQBKDQALIAhBBHYhAANAIAEhBSAA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CCAKEGIgChA0GiAEIAAgACgCACgCDBEBADoAACAFIAAgACgCACgCEBEBADoAACAKIAAgACgCACgCFBECACAGIAoQYiAKEDQaIAogACAAKAIAKAIYEQIAIAcgChBiIAoQNBogACAAKAIAKAIkEQEADAELIAIQqQMhAAJAIAEEQCAKIAAgACgCACgCLBECACADIAooAgA2AAAgCiAAIAAoAgAoAiARAgAMAQsgCiAAIAAoAgAoAigRAgAgAyAKKAIANgAAIAogACAAKAIAKAIcEQIACyAIIAoQYiAKEDQaIAQgACAAKAIAKAIMEQEAOgAAIAUgACAAKAIAKAIQEQEAOgAAIAogACAAKAIAKAIUEQIAIAYgChBiIAoQNBogCiAAIAAoAgAoAhgRAgAgByAKEGIgChA0GiAAIAAoAgAoAiQRAQALNgIAIApBEGokAAsKACAAQcjBKxB4CwoAIABB0MErEHgLHwEBfyABKAIAEOoDIQIgACABKAIANgIEIAAgAjYCAAvKGAEKfyMAQbAEayILJAAgCyAKNgKkBCALIAE2AqgEAkAgACALQagEahBABEAgBSAFKAIAQQRyNgIAQQAhAAwBCyALQaIBNgJgIAsgC0GIAWogC0GQAWogC0HgAGoiDxBOIhEoAgAiATYChAEgCyABQZADajYCgAEjAEEQayIBJAAgD0IANwIAIA9BADYCCCABQRBqJAAjAEEQayIBJAAgC0HQAGoiDkIANwIAIA5BADYCCCABQRBqJAAjAEEQayIBJAAgC0FAayINQgA3AgAgDUEANgIIIAFBEGokACMAQRBrIgEkACALQTBqIgxCADcCACAMQQA2AgggAUEQaiQAIwBBEGsiASQAIAtBIGoiEEIANwIAIBBBADYCCCABQRBqJAAjAEEQayIBJAAgCwJ/IAIEQCABIAMQpQMiAiACKAIAKAIsEQIAIAsgASgCADYAeCABIAIgAigCACgCIBECACAMIAEQhQEgARBNGiABIAIgAigCACgCHBECACANIAEQhQEgARBNGiALIAIgAigCACgCDBEBADYCdCALIAIgAigCACgCEBEBADYCcCABIAIgAigCACgCFBECACAPIAEQYiABEDQaIAEgAiACKAIAKAIYEQIAIA4gARCFASABEE0aIAIgAigCACgCJBEBAAwBCyABIAMQpAMiAiACKAIA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uMErEHgLCgAgAEHAwSsQeAvhAQEGfyMAQRBrIgUkACAAKAIEIQMCfyACKAIAIAAoAgBrIgRB/////wdJBEAgBEEBdAwBC0F/CyIEQQEgBBshBCABKAIAIQcgACgCACEIIANBogFGBH9BAAUgACgCAAsgBBDEASIGBEAgA0GiAUcEQCAAKAIAGiAAQQA2AgALIAVBoQE2AgQgACAFQQhqIAYgBUEEahBOIgMQqAMgAygCACEGIANBADYCACAGBEAgBiADKAIEEQAACyABIAAoAgAgByAIa2o2AgAgAiAEIAAoAgBqNgIAIAVBEGokAA8LEEgACyABAX8gASgCABDsA8AhAiAAIAEoAgA2AgQgACACOgAAC7QZAQp/IwBBsARrIgskACALIAo2AqQEIAsgATYCqAQCQCAAIAtBqARqEEEEQCAFIAUoAgBBBHI2AgBBACEADAELIAtBogE2AmggCyALQYgBaiALQZABaiALQegAaiIPEE4iESgCACIBNgKEASALIAFBkANqNgKAASMAQRBrIgEkACAPQgA3AgAgD0EANgIIIAFBEGokACMAQRBrIgEkACALQdgAaiIOQgA3AgAgDkEANgIIIAFBEGokACMAQRBrIgEkACALQcgAaiINQgA3AgAgDUEANgIIIAFBEGokACMAQRBrIgEkACALQThqIgxCADcCACAMQQA2AgggAUEQaiQAIwBBEGsiASQAIAtBKGoiEEIANwIAIBBBADYCCCABQRBqJAAjAEEQayIBJAAgCwJ/IAIEQCABIAMQqgMiAiACKAIAKAIsEQIAIAsgASgCADYAeCABIAIgAigCACgCIBECACAMIAEQYiABEDQaIAEgAiACKAIAKAIcEQIAIA0gARBiIAEQNBogCyACIAIoAgAoAgwRAQA6AHcgCyACIAIoAgAoAhARAQA6AHYgASACIAIoAgAoAhQRAgAgDyABEGIgARA0GiABIAIgAigCACgCGBECACAOIAEQYiABEDQaIAIgAigCACgCJBEBAAwBCyABIAMQqQMiAiACKAIAKAIsEQIAIAsgASgCADYAeCABIAIgAigCACgCIBECACAMIAEQYiABEDQaIAEgAiACKAIAKAIcEQIAIA0gARBiIAEQNBogCyACIAIoAgAoAgwRAQA6AHcgCyACIAIoAgAoAhARAQA6AHYgASACIAIoAgAo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CQ0AIAUEQCAFIARBAnRqQQA2AgALIApFBEBBACEKDAELIAQgCmpBADoAAAsgBSEACyADKAIEIAMoAixrrCADKQN4IBV8fCEVIA4gCEEAR2ohDgsgAUEBaiEEIAEtAAEiAQ0BDAgLCyAFIQAMAQtBASEHQQAhCkEAIQAMAgsgDCEHDAMLIAwhBwsgDg0BC0F/IQ4LIAdFDQAgChAxIAAQMQsgEQRAIAMQjQELIAZBsAJqJAAgA0GQAWokACAOC0MAAkAgAEUNAAJAAkACQAJAIAFBAmoOBgABAgIEAwQLIAAgAjwAAA8LIAAgAj0BAA8LIAAgAj4CAA8LIAAgAjcDAAsLtQMCA38BfiMAQSBrIgMkAAJAIAFC////////////AIMiBUKAgICAgIDAwD99IAVCgICAgICAwL/AAH1UBEAgAUIZiKchBCAAUCABQv///w+DIgVCgICACFQgBUKAgIAIURtFBEAgBEGBgICABGohAgwCCyAEQYCAgIAEaiECIAAgBUKAgIAIhYRCAFINASACIARBAXFqIQIMAQsgAFAgBUKAgICAgIDA//8AVCAFQoCAgICAgMD//wBRG0UEQCABQhmIp0H///8BcUGAgID+B3IhAgwBC0GAgID8ByECIAVC////////v7/AAFYNAEEAIQIgBUIwiKciBEGR/gBJDQAgA0EQaiAAIAFC////////P4NCgICAgICAwACEIgUgBEGB/gBrEGMgAyAAIAVBgf8AIARrEKYBIAMpAwgiAEIZiKchAiADKQMAIAMpAxAgAykDGIRCAFKthCIFUCAAQv///w+DIgBCgICACFQgAEKAgIAIURtFBEAgAkEBaiECDAELIAUgAEKAgIAIhYRCAFINACACQQFxIAJqIQILIANBIGokACACIAFCIIinQYCAgIB4cXK+C4wEAgR/AX4CQAJAAkACQAJAAn8gACgCBCICIAAoAmhHBEAgACACQQFqNgIEIAItAAAMAQsgABA9CyICQStrDgMAAQABCyACQS1GIQUCfyAAKAIEIgMgACgCaEcEQCAAIANBAWo2AgQgAy0AAAwBCyAAED0LIgNBOmshBCABRQ0BIARBdUsNASAAKQNwQgBTDQIgACAAKAIEQQFrNgIEDAILIAJBOmshBCACIQMLIARBdkkNACADQTBrIgRBCkkEQEEAIQIDQCADIAJB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gICAgMC7wAAQRyAFKQNYIglCMIinQfgAayEGIAUpA1AhAwsgCUL///////8/g0KAgICAgIDAAIQhCyAKQv///////z+DQoCAgICAgMAAhCEKIAYgB0gEQANAAn4gCiALfSADIARWrX0iCUIAWQRAIAkgBCADfSIEhFAEQCAFQSBqIAEgAkIAQgAQRyAFKQMoIQIgBSkDICEEDAULIAlCAYYgBEI/iIQMAQsgCkIBhiAEQj+IhAshCiAEQgGGIQQgB0EBayIHIAZKDQALIAYhBwsCQCAKIAt9IAMgBFatfSIJQgBTBEAgCiEJDAELIAkgBCADfSIEhEIAUg0AIAVBMGogASACQgBCABBHIAUpAzghAiAFKQMwIQQMAQsgCUL///////8/WARAA0AgBEI/iCEBIAdBAWshByAEQgGGIQQgASAJQgGGhCIJQoCAgICAgMAAVA0ACwsgCEGAgAJxIQYgB0EATARAIAVBQGsgBCAJQv///////z+DIAdB+ABqIAZyrUIwhoRCAEKAgICAgIDAwz8QRyAFKQNIIQIgBSkDQCEEDAELIAlC////////P4MgBiAHcq1CMIaEIQILIAAgBDcDACAAIAI3AwggBUGAAWokAAuqDwIFfw9+IwBB0AJrIgUkACAEQv///////z+DIQsgAkL///////8/gyEKIAIgBIVCgICAgICAgICAf4MhDSAEQjCIp0H//wFxIQgCQAJAIAJCMIinQf//AXEiCUH//wFrQYKAfk8EQCAIQf//AWtBgYB+Sw0BCyABUCACQv///////////wCDIgxCgICAgICAwP//AFQgDEKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCENDAILIANQIARC////////////AIMiAkKAgICAgIDA//8AVCACQoCAgICAgMD//wBRG0UEQCAEQoCAgICAgCCEIQ0gAyEBDAILIAEgDEKAgICAgIDA//8AhYRQBEAgAyACQoCAgICAgMD//wCFhFAEQEIAIQFCgICAgICA4P//ACENDAMLIA1CgICAgICAwP//AIQhDUIAIQEMAgsgAyACQoCAgICAgMD//wCFhFAEQEIAIQEMAgsgASAMhFAEQEKAgICAgIDg//8AIA0gAiADhFAbIQ1CACEBDAILIAIgA4RQBEAgDUKAgICAgIDA//8AhCENQgAhAQwCCyAMQv///////z9YBEAgBUHAAmogASAKIAEgCiAKUCIGG3kgBkEGdK18pyIGQQ9rEGNBECAGayEGIAUpA8gCIQogBSkDwAIhAQsgAkL///////8/Vg0AIAVBsAJqIAMgCyADIAsgC1AiBxt5IAdBBnStfKciB0EPaxBjIAYgB2pBEGshBiAFKQO4AiELIAUpA7ACIQMLIAVBoAJqIAtCgICAgICAwACEIhJCD4YgA0IxiIQiAkIAQoCAgICw5ryC9QAgAn0iBEIAEFwgBUGQAmpCACAFKQOoAn1CACAEQgAQXCAFQYACaiAFKQOYAkIBhiAFKQOQAkI/iIQiBEIAIAJCABBcIAVB8AFqIARCAEIAIAUpA4gCfUIAEFwgBUHgAWogBSkD+AFCAYYgBSkD8AFCP4iEIgRCACACQgAQXCAFQdABaiAEQgBCACAFKQPoAX1CABBcIAVBwAFqIAUpA9gBQgGGIAUpA9ABQj+IhCIEQgAgAkIAEFwgBUGwAWogBEIAQgAgBSkDyAF9QgAQXCAFQaABaiACQgAgBSkDuAFCAYYgBSkDsAFCP4iEQgF9IgJCABBcIAVBkAFqIANCD4ZCACACQgAQXCAFQfAAaiACQgBCACAFKQOoASAFKQOgASIMIAUpA5gBfCIEIAxUrXwgBEIBVq18fUIAEFwgBUGAAWpCASAEfUIAIAJCABBcIAYgCSAIa2ohBgJ/IAUpA3AiE0IBhiIOIAUpA4gBIg9CAYYgBSkDgAFCP4iEfCIQQufsAH0iFEIgiCICIApCgICAgICAwACEIhVCAYYiFkIgiCIEfiIRIAFCAYYiDEIgiCILIBAgFFatIA4gEFatIAUpA3hCAYYgE0I/iIQgD0I/iHx8fEIBfSITQiCIIhB+fCIOIBFUrSAOIA4gE0L/////D4MiEyABQj+IIhcgCkIBhoRC/////w+DIgp+fCIOVq18IAQgEH58IAQgE34iESAKIBB+fCIPIBFUrUIghiAPQiCIhHwgDiAOIA9CIIZ8Ig5WrXwgDiAOIBRC/////w+DIhQgCn4iESACIAt+fCIPIBFUrSAPIA8gEyAMQv7///8PgyIRfnwiD1atfHwiDlatfCAOIAQgFH4iGCAQIBF+fCIEIAIgCn58IgogCyATfnwiEEIgiCAKIBBWrSAEIBhUrSAEIApWrXx8QiCGhHwiBCAOVK18IAQgDyACIBF+IgIgCyAUfnwiC0IgiCACIAtWrUIghoR8IgIgD1StIAIgEEIghnwgAlStfHwiAiAEVK18IgRC/////////wBYBEAgFiAXhCEVIAVB0ABqIAIgBCADIBIQXCABQjGGIAUpA1h9IAUpA1AiAUIAUq19IQpCACABfSELIAZB/v8AagwBCyAFQeAAaiAEQj+GIAJCAYiEIgIgBEIBiCIEIAMgEhBcIAFCMIYgBSkDaH0gBSkDYCIMQgBSrX0hCkIAIAx9IQsgASEMIAZB//8AagsiBkH//wFOBEAgDUKAgICAgIDA//8AhCENQgAhAQwBCwJ+IAZBAEoEQCAKQgGGIAtCP4iEIQogBEL///////8/gyAGrUIwhoQhDCALQgGGDAELIAZBj39MBEBCACEBDAILIAVBQGsgAiAEQQEgBmsQpgEgBUEwaiAMIBUgBkHwAGoQYyAFQSBqIAMgEiAFKQNAIgIgBSkDSCIMEFwgBSkDOCAFKQMoQgGGIAUpAyAiAUI/iIR9IAUpAzAiBCABQgGGIgFUrX0hCiAEIAF9CyEEIAVBEGogAyASQgNCABBcIAUgAyASQgVCABBcIAwgAiACIAMgAkIBgyIBIAR8IgNUIAogASADVq18IgEgElYgASASURutfCICVq18IgQgAiACIARCgICAgICAwP//AFQgAyAFKQMQViABIAUpAxgiBFYgASAEURtxrXwiAlatfCIEIAIgBEKAgICAgIDA//8AVCADIAUpAwBWIAEgBSkDCCIDViABIANRG3GtfCIBIAJUrXwgDYQhDQsgACABNwMAIAAgDTcDCCAFQdACaiQAC78CAQF/IwBB0ABrIgQkAAJAIANBgIABTgRAIARBIGogASACQgBCgICAgICAgP//ABBHIAQpAyghAiAEKQMgIQEgA0H//wFJBEAgA0H//wBrIQMMAgsgBEEQaiABIAJCAEKAgICAgICA//8AEEdB/f8CIAMgA0H9/wJOG0H+/wFrIQMgBCkDGCECIAQpAxAhAQwBCyADQYGAf0oNACAEQUBrIAEgAkIAQoCAgICAgIA5EEcgBCkDSCECIAQpA0AhASADQfSAfksEQCADQY3/AGohAwwBCyAEQTBqIAEgAkIAQoCAgICAgIA5EEdB6IF9IAMgA0HogX1MG0Ga/gFqIQMgBCkDOCECIAQpAzAhAQsgBCABIAJCACADQf//AGqtQjCGEEcgACAEKQMINwMIIAAgBCkDADcDACAEQdAAaiQACzUAIAAgATcDACAAIAJC////////P4MgBEIwiKdBgIACcSACQjCIp0H//wFxcq1CMIaENwMIC8ABAgF/An5BfyEDAkAgAEIAUiABQv///////////wCDIgRCgICAgICAwP//AFYgBEKAgICAgIDA//8AURsNACACQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AUnENACAAIAQgBYSEUARAQQAPCyABIAKDQgBZBEAgASACUiABIAJTcQ0BIAAgASAChYRCAFIPCyAAQgBSIAEgAlUgASACURsNACAAIAEgAoWEQgBSIQMLIAMLSwECfyAAKAIAIgEEQAJ/IAEoAgwiAiABKAIQRgRAIAEgASgCACgCJBEBAAwBCyACKAIAC0F/RwRAIAAoAgBFDwsgAEEANgIAC0EBC0sBAn8gACgCACIBBEACfyABKAIMIgIgASgCEEYEQCABIAEoAgAoAiQRAQAMAQsgAi0AAAtBf0cEQCAAKAIARQ8LIABBADYCAAtBAQtxAQJ/IAFBCEsEQEEEIAEgAUEETRshAiAAQQEgABshAwNAAkAjAEEQayIAJAAgAEEANgIMIABBDGogAiADEPUDGiAAKAIMIQEgAEEQaiQAIAENAEH02Sv+EAIAIgBFDQAgABEJAAwBCwsgAQ8LIAAQMwsJACABQQEQ4AMLEwAgAUEISwRAIAAQMQ8LIAAQMQuBAQECfyMAQRBrIgQkACMAQSBrIgMkACADQRhqIAAgARCrAiADQRBqIAMoAhggAygCHCACEKoCIAMgACADKAIQIABrajYCDCADIAIgAygCFCACa2o2AgggBCADKAIMNgIIIAQgAygCCDYCDCADQSBqJAAgBCgCDCEAIARBEGokACAACwkAIAAQrQIQMQv9AQIEfwF+IwBBIGsiAyQAAkAgASkDIEIBUg0AIAEpAyhCAVINACACKQMYQgFSDQAgAikDIEIBUg0AIAIpAyhCAVINACACKAIAQQxHDQACfwJAIAEoAkgNACACKAJIDQBBAAwBC0EBCyEGIAEpAxAhByADIAIpAxA3AxggAyAHNwMQIABBAEECIANBEGpBABA8IgRBIzYCQCAGBEAgACAE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IAAoAjggAEFAaygCACAAKAIEERAADBgLIAFBgICAgAFGDRAgAUGAgICQAUcNFyAAKAIQIAAoAhggACgCICAAKAIoIAAoAjAgACgCOCAAQUBrKAIAIAAoAkggACgCUCAAKAIEESoADBcLIAFB/////wFMBEAgAUGAgICgAUYNESABQYCAgLABRw0XIAAoAhAgACgCGCAAKAIgIAAoAiggACgCMCAAKAI4IABBQGsoAgAgACgCSCAAKAJQIAAoAlggACgCYCAAKAIEEUUADBcLIAFBgICAgAJGDREgAUGAgICQAkcNFiAAIAAoAhAgACgCBBEBADYCsAEMFgsCQCABQf///88CTARAIAFB////twJMBEAgAUGAgICgAkYNFCABQYCAgLACRw0YIAAgACgCECAAKAIYIAAoAiAgACgCBBEDADYCsAEMGAsgAUGAgIC4AkYNASABQYCAgMACRw0XIAAgACgCECAAKAIYIAAoAiAgACgCKCAAKAIEEQYANgKwAQwXCyABQf///+8CTARAIAFBgICA0AJGDRQgAUGAgIDgAkcNFyAAIAAoAhAgACgCGCAAKAIgIAAoAiggACgCMCAAKAI4IAAoAgQRCAA2ArABDBcLIAFBgICA8AJGDRQgAUGAgICAA0YNFSABQYCAgJADRw0WIAAgACgCECAAKAIYIAAoAiAgACgCKCAAKAIwIAAoAjggAEFAaygCACAAKAJIIAAoAlAgACgCBBErADYCsAEMFgsgACAAKAIQIAAoAhggACgCIBAkNgKwAQwVCyAAIAAoAgQgACgCECAAQRhqECM5A7ABDBQLIAAoAhAgACgCBBEAAAwTCyAAKgIQIAAoAgQRRgAMEgsgACgCECAAKAIYIAAoAgQRAgAMEQsgACgCECAAKgIYIAAoAgQRRwAMEAsgACoCECAAKgIYIAAoAgQRSAAMDwsgACgCECAAKAIYIAAqAiAgACgCBBFJAAwOCyAAKAIQIAAqAhggACoCICAAKAIEEUoADA0LIAAqAhAgACoCGCAAKgIgIAAoAgQRSwAMDAsgAUGggIDAAEcNCyAAKAIQIAAoAhggACoCICAAKAIoIAAoAgQRTAAMCwsgACgCECAAKgIYIAAqAiAgACoCKCAAKAIEEU0ADAoLIAAqAhAgACoCGCAAKgIgIAAqAiggACgCBBFOAAwJCyAAKAIQ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BwsgBw0AC0EAIBNFDQAaIAMoAgAiAEEBOgAIIAAgASAFajYCBCAAIAE2AgBBAQshASAGQThqEJUEAkAgBigCPCIHIAYoAkAiAEYNAANAIAcoAgAQMSAHQQRqIgcgAEcNAAsgBigCQCIAIAYoAjwiAkYNACAGIAAgAiAAa0EDakF8cWo2AkALIAYoAjgiAARAIAAQMQsgBkHQAGokACABDwsQywIACxDKAgALewACQCABIAJGDQAgAUEBaiACRg0AIAEtAABB3ABHDQACQCABLAABIgJBJGsOOwABAQEBAQABAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAQsgACACEFUgAUECaiEBCyABC8YDAQV/AkACQAJAIAAoAgQgACgCACIEa0EYbSIFQQFqIgJBq9Wq1QBJBEBBqtWq1QAgACgCCCAEa0EYbSIEQQF0IgYgAiACIAZJGyAEQdWq1SpPGyIEBEAgBEGr1arVAE8NAiAEQRhsEDMhAwsgBUEYbCADaiICIAEpAgA3AgAgAiABKAIINgIIIAFCADcCACABQQA2AgggAiABKAIUNgIUIAIgASkCDDcCDCABQgA3AgwgAUEANgIUIAMgBEEYbGohAyACQRhqIQQgACgCBCIBIAAoAgAiBUYNAgNAIAJBGGsiAiABQRhrIgEpAgA3AgAgAiABKAIINgIIIAFCADcCACABQQA2AgggAiABKAIUNgIUIAIgASkCDDcCDCABQgA3AgwgAUEANgIUIAEgBUcNAAsgACADNgIIIAAoAgQhAyAAIAQ2AgQgACgCACEBIAAgAjYCACABIANGDQMDQCADQQFrLAAAQQBIBEAgA0EMaygCABAxCyADQRhrIQAgA0ENaywAAEEASARAIAAoAgAQMQsgACIDIAFHDQALDAMLEEQACxBbAAsgACADNgIIIAAgBDYCBCAAIAI2AgALIAEEQCABEDELCxMAQQwQAkEBEG5BkIUDQScQAQALigYBA38CQCABIAJHBEACQAJAAkACQAJAAkACQAJAAkAgASwAACIFQcQAaw40AwgICAgICAgICAgICAgIBQgICAcICAgICAgICAgIAQgCCAgICAgICAgICAgICAgECAgIBgALIAUNByADIAUQVgwJCyADQQgQVgwICyAEIAQoAlBB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ADcCACAAQQA6AOIRIABB5MIBOwHgESAAQQI6AOsRIABB2BFqQYEbLwAAOwAAIABBBjoA3xEgAEEaNgLQESAAQQA6ANoRIABB/RooAAA2AtQRIABBkB5qIABB6BFqKAIANgIAIAAgACkD4BE3A4geIABBlB5qQRo2AgAgAEGgHmogAEHcEWooAgA2AgAgAEGYHmogACkC1BE3AwAgAEEAOgDCESAAQejqATsBwBEgAEECOgDLESAAQbwRaiICQeEXLQAAOgAAIABBCToAvxEgAEEbNgKwESAAQQA6AL0RIABB2RcpAAAiEzcCtBEgAEGsHmogAEHIEWooAgA2AgAgACAAKQPAETcCpB4gAEGwHmpBGzYCACAAQbweaiACKAIANgIAIABBtB5qIBM3AgAgAEEAOgCiESAAQfTCATsBoBEgAEECOgCrESAAQZgRakGPGS0AADoAACAAQQU6AJ8RIABBHDYCkBEgAEEAOgCZESAAQYsZKAAANgKUESAAQcgeaiAAQagRaigCADYCACAAIAApA6ARNwPAHiAAQcweakEcNgIAIABB2B5qIABBnBFqKAIANgIAIABB0B5qIAApApQRNwMAIABBADoAghEgAEHu3gE7AYARIABBAjoAixEgAEH8EGoiAkG5GC0AADoAACAAQQk6AP8QIABBHTYC8BAgAEEAOgD9ECAAQbEYKQAAIhM3AvQQIABB5B5qIABBiBFqKAIANgIAIAAgACkDgBE3AtweIABB6B5qQR02AgAgAEH0HmogAigCADYCACAAQeweaiATNwIAIABBADoA4hAgAEH00AE7AeAQIABBAjoA6xAgAEHYEGpBADoAACAAQQQ6AN8QIABBHjYC0BAgAEH00IXLBjYC1BAgAEGAH2ogAEHoEGooAgA2AgAgACAAKQPgEDcD+B4gAEGEH2pBHjYCACAAQZAfaiAAQdwQaigCADYCACAAQYgfaiAAKQLUEDcDACAAQQA6AMIQIABB9eQBOwHAECAAQQI6AMsQIABBuBBqQQA6AAAgAEEEOgC/ECAAQR82ArAQIABB9eSRqwc2ArQQIABBnB9qIABByBBqKAIANgIAIAAgACkDwBA3ApQfIABBoB9qQR82AgAgAEGsH2ogAEG8EGooAgA2AgAgAEGkH2ogACkCtBA3AgAgAEEAOgCiECAAQejkATsBoBAgAEECOgCrECAAQZwQaiICQQA6AAAgAEEIOgCfECAAQSA2ApAQIABC4+S9i8au2rDuADcClBAgAEG4H2ogAEGoEGooAgA2AgAgACAAKQOgEDcDsB8gAEG8H2pBIDYCACAAQcgfaiACKAIANgIAIABBwB9qQuPkvYvGrtqw7gA3AwAgAEEAOgCCECAAQeLOATsBgBAgAEECOgCLECAAQfwPaiICQesXLQAAOgAAIABBCToA/w8gAEEhNgLwDyAAQQA6AP0PIABB4xcpAAAiEzcC9A8gAEHUH2ogAEGIEGooAgA2AgAgACAAKQOAEDcCzB8gAEHYH2pBITYCACAAQeQfaiACKAIANgIAIABB3B9qIBM3AgAgAEEAOgDiDyAAQezoATsB4A8gAEECOgDrDyAAQdwPaiICQZwYLwAAOwEAIABBCjoA3w8gAEEiNgLQDyAAQQA6AN4PIABBlBgpAAAiEzcC1A8gAEHwH2ogAEHoD2ooAgA2AgAgACAAKQPgDzcD6B8gAEH0H2pBIjYCACAAQYAgaiACKAIANgIAIABB+B9qIBM3AwAgAEEAOgDCDyAAQezCATsBwA8gAEECOgDLDyAAQbgPakGVFi0AADoAACAAQQU6AL8PIABBIzYCsA8gAEEAOgC5DyAAQZEWKAAANgK0DyAAQYwgaiAAQcgPaigCADYCACAAIAApA8APNwKEICAAQZAgakEjNgIAIABBnCBqIABBvA9qKAIANgIAIABBlCBqIAApArQPNwIAIABBADoAog8gAEHt0gE7AaAPIABBAjoAqw8gAEGYD2pBhRotAAA6AAAgAEEFOgCfDyAAQSQ2ApAPIABBADoAmQ8gAEGBGigAADYClA8gAEGoIGogAEGoD2ooAgA2AgAgACAAKQOgDzcDoCAgAEGsIGpBJDYCACAAQbggaiAAQZwPaigCADYCACAAQbAgaiAAKQKUDzcDACAAQQA6AIIPIABB7dgBOwGADyAAQQI6AIsPIABB/A5qIgJB3BgtAAA6AAAgAEEJOgD/DiAAQSU2AvAOIABBADoA/Q4gAEHUGCkAACITNwL0DiAAQcQgaiAAQYgPaigCADYCACAAIAApA4APNwK8ICAAQcggakElNgIAIABB1CBqIAIoAgA2AgAgAEHMIGogEzcCACAAQQA6AOIOIABB4/IBOwHgDiAAQQI6AOsOIABB2A5qQesaLQAAOgAAIABBBToA3w4gAEEmNgLQDiAAQQA6ANkOIABB5xooAAA2AtQOIABB4CBqIABB6A5qKAIANgIAIAAgACkD4A43A9ggIABB5CBqQSY2AgAgAEHwIGogAEHcDmooAgA2AgAgAEHoIGogACkC1A43AwAgAEEAOgDCDiAAQfPWATsBwA4gAEECOgDLDiAAQbgOakH8GS8AADsAACAAQQY6AL8OIABBJzYCsA4gAEEAOgC6DiAAQfgZKAAANgK0DiAAQfwgaiAAQcgOaigCADYCACAAIAApA8AONwL0ICAAQYAhakEnNgIAIABBjCFqIABBvA5qKAIANgIAIABBhCFqIAApArQONwIAIABBADoAog4gAEH0ygE7AaAOIABBAjoAqw4gAEGYDmpBwAovAAA7AAAgAEEGOgCfDiAAQSg2ApAOIABBADoAmg4gAEG8CigAADYClA4gAEGYIWogAEGoDmooAgA2AgAgACAAKQOgDjcDkCEgAEGcIWpBKDYCACAAQaghaiAAQZwOaigCADYCACAAQaAhaiAAKQKUDjcDACAAQQA6AIIOIABB5sIBOwGADiAAQQI6AIsOIABBBzoA/w0gAEEpNgLwDSAAQQA6APsNIABByRcoAAA2APcNIABBxhcoAAA2AvQNIABBtCFqIABBiA5qKAIANgIAIAAgACkDgA43AqwhIABBuCFqQSk2AgAgAEHEIWogAEH8DWooAgA2AgAgAEG8IWogACkC9A03AgAgAEEAOgDiDSAAQezsATsB4A0gAEECOgDrDSAAQQc6AN8NIABBKjYC0A0gAEEAOgDbDSAAQa4XKAAANgDXDSAAQasXKAAANgLUDSAAQdAhaiAAQegNaigCADYCACAAIAApA+ANNwPIISAAQdQhakEqNgIAIABB4CFqIABB3A1qKAIANgIAIABB2CFqIAApAtQNNwMAIABBADoAwg0gAEHi3AE7AcANIABBAjoAyw0gAEEHOgC/DSAAQSs2ArANIABBADoAuw0gAEGwGigAADYAtw0gAEGtGigAADYCtA0gAEHsIWogAEHIDWooAgA2AgAgACAAKQPADTcC5CEgAEHwIWpBKzYCACAAQfwhaiAAQbwNaigCADYCACAAQfQhaiAAKQK0DTcCACAAQQA6AKINIABB8+QBOwGgDSAAQQI6AKsNIABBBzoAnw0g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IAAgACkDsAo3A9AkIABB3CRqQTg2AgAgAEHoJGogAEGsCmooAgA2AgAgAEHgJGogACkCpAo3AwAgAEEAOgCSCiAAQevWATsBkAogAEECOgCbCiAAQYgKakHNGy8AADsAACAAQQY6AI8KIABBOTYCgAogAEEAOgCKCiAAQckbKAAANgKECiAAQfQkaiAAQZgKaigCADYCACAAIAApA5AKNwLsJCAAQfgkakE5NgIAIABBhCVqIABBjApqKAIANgIAIABB/CRqIAApAoQKNwIAIABBADoA8gkgAEHz4gE7AfAJIABBAjoA+wkgAEHsCWoiAkEAOgAAIABBCDoA7wkgAEE6NgLgCSAAQuHYiYvmrdqw7gA3AuQJIABBkCVqIABB+AlqKAIANgIAIAAgACkD8Ak3A4glIABBlCVqQTo2AgAgAEGgJWogAigCADYCACAAQZglakLh2ImL5q3asO4ANwMAIABBADoA0gkgAEHz7gE7AdAJIABBAjoA2wkgAEEHOgDPCSAAQTs2AsAJIABBADoAywkgAEGaGigAADYAxwkgAEGXGigAADYCxAkgAEGsJWogAEHYCWooAgA2AgAgACAAKQPQCTcCpCUgAEGwJWpBOzYCACAAQbwlaiAAQcwJaigCADYCACAAQbQlaiAAKQLECTcCACAAQQA6ALIJIABB59gBOwGwCSAAQQI6ALsJIABBrAlqIgJBADoAACAAQQg6AK8JIABBPDYCoAkgAELnwrHLtqzasO4ANwKkCSAAQcglaiAAQbgJaigCADYCACAAIAApA7AJNwPAJSAAQcwlakE8NgIAIABB2CVqIAIoAgA2AgAgAEHQJWpC58Kxy7as2rDuADcDACAAQQA6AJIJIABB7eQBOwGQCSAAQQI6AJsJIABBBzoAjwkgAEE9NgKACSAAQQA6AIsJIABBuBooAAA2AIcJIABBtRooAAA2AoQJIABB5CVqIABBmAlqKAIANgIAIAAgACkDkAk3AtwlIABB6CVqQT02AgAgAEH0JWogAEGMCWooAgA2AgAgAEHsJWogACkChAk3AgAgAEEAOgDyCCAAQfDCATsB8AggAEECOgD7CCAAQQc6AO8IIABBPjYC4AggAEEAOgDrCCAAQc0aKAAANgDnCCAAQcoaKAAANgLkCCAAQYAmaiAAQfgIaigCADYCACAAIAApA/AINwP4JSAAQYQmakE+NgIAIABBkCZqIABB7AhqKAIANgIAIABBiCZqIAApAuQINwMAIABBADoA0gggAEHz0gE7AdAIIABBAjoA2wggAEEHOgDPCCAAQT82AsAIIABBADoAywggAEGiJSgAADYAxwggAEGfJSgAADYCxAggAEGcJmogAEHYCGooAgA2AgAgACAAKQPQCDcClCYgAEGgJmpBPzYCACAAQawmaiAAQcwIaigCADYCACAAQaQmaiAAKQLECDcCACAAQQA6ALIIIABB69oBOwGwCCAAQQI6ALsIIABBqAhqQdETLQAAOgAAIABBBToArwggAEHAADYCoAggAEEAOgCpCCAAQc0TKAAANgKkCCAAQbgmaiAAQbgIaigCADYCACAAIAApA7AINwOwJiAAQbwmakHAADYCACAAQcgmaiAAQawIaigCADYCACAAQcAmaiAAKQKkCDcDACAAQQA6AJIIIABB89wBOwGQCCAAQQI6AJsIIABBiAhqQZclLQAAOgAAIABBBToAjwggAEHBADYCgAggAEEAOgCJCCAAQZMlKAAANgKECCAAQdQmaiAAQZgIaigCADYCACAAIAApA5AINwLMJiAAQdgmakHBADYCACAAQeQmaiAAQYwIaigCADYCACAAQdwmaiAAKQKECDcCACAAQQA6APIHIABB+d4BOwHwByAAQQI6APsHIABBwSUvAAA7AOgHIABBBjoA7wcgAEHCADYC4AcgAEEAOgDqByAAQb0lKAAANgLkByAAQfAmaiAAKAL4BzYCACAAIAApA/AHNwPoJiAAQfQmakHCADYCACAAQYAnaiAAKALsBzYCACAAQfgmaiAAKQLkBzcDACAAQQA6ANIHIABB894BOwHQByAAQQI6ANsHIABBqhovAAA7AMgHIABBBjoAzwcgAEHDADYCwAcgAEEAOgDKByAAQaYaKAAANgLEByAAQYwnaiAAKALYBzYCACAAIAApA9AHNwKEJyAAQZAnakHDADYCACAAQZwnaiAAKALMBzYCACAAQZQnaiAAKQLEBzcCACAAQQA6ALIHIABB4cwBOwGwByAAQQI6ALsHIABBlBAtAAA6AKwHIABBCToArwcgAEHEADYCoAcgAEEAOgCtByAAQYwQKQAAIhM3AqQHIABBqCdqIAAoArgHNgIAIAAgACkDsAc3A6AnIABBrCdqQcQA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4t4BOwHQAiAAQQI6ANsCIABBBzoAzwIgAEHYADYCwAIgAEEAOgDLAiAAQZMXKAAANgDHAiAAQZAXKAAANgLEAiAAQdgraiAAKALYAjYCACAAIAApA9ACNwPQKyAAQdwrakHYADYCACAAQegraiAAKALMAjYCACAAQeAraiAAKQLEAjcDACAAQQA6ALICIABB9NgBOwGwAiAAQQI6ALsCIABBBzoArwIgAEHZADYCoAIgAEEAOgCrAiAAQfAbKAAANgCnAiAAQe0bKAAANgKkAiAAQfQraiAAKAK4AjYCACAAIAApA7ACNwLsKyAAQfgrakHZADYCACAAQYQsaiAAKAKsAjYCACAAQfwraiAAKQKkAjcCACAAQQA6AJICIABB7c4BOwGQAiAAQQI6AJsCIABBADoAjAIgAEEIOgCPAiAAQdoANgKAAiAAQu3CsYv2rNi5+QA3AoQCIABBkCxqIAAoApgCNgIAIAAgACkDkAI3A4gsIABBlCxqQdoANgIAIABBoCxqIAAoAowCNgIAIABBmCxqQu3CsYv2rNi5+QA3AwAgAEEAOgDyASAAQeHmATsB8AEgAEECOgD7ASAAQQA6AOwBIABBCDoA7wEgAEHbADYC4AEgAELh5s2L1q3ZueUANwLkASAAQawsaiAAKAL4ATYCACAAIAApA/ABNwKkLCAAQbAsakHbADYCACAAQbwsaiAAKALsATYCACAAQbQsakLh5s2L1q3ZueUANwIAIABBADoA0gEgAEH06AE7AdABIABBAjoA2wEgAEGCFC0AADoAyAEgAEEFOgDPASAAQdwANgLAASAAQQA6AMkBIABB/hMoAAA2AsQBIABByCxqIAAoAtgBNgIAIAAgACkD0AE3A8AsIABBzCxqQdwANgIAIABB2CxqIAAoAswBNgIAIABB0CxqIAApAsQBNwMAIABBAzoAuwEgAEEAOgCzASAAQbIKLQAAOgCyASAAQbAKLwAAOwGwASAAQQA6AKwBIABBCDoArwEgAEHdADYCoAEgAELowt2Llq3asO4ANwKkASAAQeQsaiAAKAK4ATYCACAAIAApA7ABNwLcLCAAQegsakHdADYCACAAQfQsaiAAKAKsATYCACAAQewsakLowt2Llq3asO4ANwIAIABBADoAkgEgAEHs3AE7AZABIABBAjoAmwEgAEEHOgCPASAAQd4ANgKAASAAQQA6AIsBIABBqiUoAAA2AIcBIABBpyUoAAA2AoQBIABBgC1qIAAoApgBNgIAIAAgACkDkAE3A/gsIABBhC1qQd4ANgIAIABBkC1qIAAoAowBNgIAIABBiC1qIAApAoQBNwMAIABBADoAciAAQejCATsBcCAAQQI6AHsgAEGRJS0AADoAaCAAQQU6AG8gAEHfADYCYCAAQQA6AGkgAEGNJSgAADYCZCAAQZwtaiAAKAJ4NgIAIAAgACkDcDcClC0gAEGgLWpB3wA2AgAgAEGsLWogACgCbDYCACAAQaQtaiAAKQJkNwIAIABBADoAUiAAQeLCATsBUCAAQQI6AFsgAEEHOgBPIABB4AA2AkAgAEEAOgBLIABBvBMoAAA2AEcgAEG5EygAADYCRCAAQbgtaiAAKAJYNgIAIAAgACkDUDcDsC0gAEG8LWpB4AA2AgAgAEHILWogACgCTDYCACAAQcAtaiAAKQJENwMAIABBADoAMiAAQeruATsBMCAAQQI6ADsgAEEAOgAsIABBCDoALyAAQeEANgIgIABC6sLZi+at2bnlADcCJCAAQdQtaiAAKAI4NgIAIAAgACkDMDcCzC0gAEHYLWpB4QA2AgAgAEHkLWogACgCLDYCACAAQdwtakLqwtmL5q3ZueUANwIAIABBADoAEiAAQfPqATsBECAAQQI6ABsgAEGpHy0AADoADCAAQQk6AA8gAEHiADYCACAAQQA6AA0gAEGhHykAACITNwIEIABB8C1qIAAoAhg2AgAgACAAKQMQNwPoLSAAQfQtakHiADYCACAAQYAuaiAAKAIMNgIAIABB+C1qIBM3AwBByLArQgA3AgBBxLArQciwKzYCAANAIwBBEGsiCCQAIABBiC5qIhECfyAAQbAYaiAEQRxsaiEFAkACQAJAQcSwKygCAEHIsCtGBEBByLArKAIAIQZByLArIQMMAQsCQEHIsCsoAgAiBkUEQEHIsCshAgNAIAIoAggiAygCACACRiEHIAMhAiAHDQALDAELIAYhAgNAIAIiAygCBCICDQALCwJAIAUoAgQgBS0ACyICIALAIg9BAEgiCxsiByADKAIUIAMtABsiAiACwEEASCINGyICIAIgB0sbIhAEQCADKAIQIANBEGogDRsgBSgCACAFIAsbIBAQRiILDQELIAIgB0kNAQwCCyALQQBODQELIAZFDQEgCCADNgIMIANBBGoMAgtByLArKAIAIgJFDQAgBSgCACAFIA9BAEgbIQ9ByLArIQYDQAJAAkACQAJAAkACQCACIgMoAhQgAi0AGyICIALAQQBIIg0bIgIgByACIAdJIhAbIgsEQCAPIAMoAhAgA0EQaiANGyINIAsQRiISRQRAIAIgB0sNAgwDCyASQQBODQIMAQsgAiAHTQ0CCyADIQYgAygCACICDQUMBAsgDSAPIAsQRiICDQELIBANAQwCCyACQQBODQELIANBBGohBiADKAIEIgINAQsLIAggAzYCDCAGDAELIAhByLArNgIMQciwKwsiBigCACICBH9BAAVBLBAzIgJBEGohAwJAIAUsAAtBAE4EQCADIAUpAgA3AgAgAyAFKAIINgIIDAELIAMgBSgCACAFKAIEEG0LIAIgBSgCDDYCHCACQSBqIQMCQCAFLAAbQQBOBEAgAyAFKQIQNwIAIAMgBSgCGDYCCAwBCyADIAUoAhAgBSgCFBBtCyACIAgoAgw2AgggAkIANwIAIAYgAjYCACACIQNBxLArKAIAKAIAIgUEQEHEsCsgBTYCACAGKAIAIQMLQciwKygCACADEJUBQcywK0HMsCsoAgBBAWo2AgBBAQs6AAQgESACNgIAIAhBEGokACAEQQFqIgRB4wBHDQALIABBhC5qIQQDQCAEQQFrLAAAQQBIBEAgBEEMaygCABAxCyAEQRxrIQIgBEERaywAAEEASARAIAIoAgAQMQsgAiIEIABBsBhqRw0ACyAALAAPQQBIBEAgACgCBBAxCyAALAAbQQBIBEAgACgCEBAxCyAALAAvQQBIBEAgACgCJBAxCyAALAA7QQBIBEAgACgCMBAxCyAALABPQQBIBEAgACgCRBAxCyAALABbQQBIBEAgACgCUBAxCyAALABvQQBIBEAgACgCZBAxCyAALAB7QQBIBEAgACgCcBAxCyAALACPAUEASARAIAAoAoQBEDELIAAsAJsBQQBIBEAgACgCkAEQMQsgACwArwFBAEgEQCAAKAKkARAxCyAALAC7AUEASARAIAAoArABEDELIAAsAM8BQQBIBEAgACgCxAEQMQsgACwA2wFBAEgEQCAAKALQARAxCyAALADvAUEASARAIAAoAuQBEDELIAAsAPsBQQBIBEAgACgC8AEQMQsgACwAjwJBAEgEQCAAKAKEAhAxCyAALACbAkEASARAIAAoApACEDELIAAsAK8CQQBIBEAgACgCpAIQMQsgACwAuwJBAEgEQCAAKAKwAhAxCyAALADPAkEASARAIAAoAsQCEDELIAAsANsCQQBIBEAgACgC0AIQMQsgACwA7wJBAEgEQCAAKALkAhAxCyAALAD7AkEASARAIAAoAvACEDELIA4QMSAALACLA0EASARAIAAoAoADEDELIAAsAJ8DQQBIBEAgACgClAMQMQsgACwAqwNBAEgEQCAAKAKgAxAxCyAALAC/A0EASARAIAAoArQDEDELIAAsAMsDQQBIBEAgACgCwAMQMQsgACwA3wNBAEgEQCAAKALUAxAxCyAALADrA0EASARAIAAoAuADEDELIAAsAP8DQQBIBEAgACgC9AMQMQsgACwAiwRBAEgEQCAAKAKABBAxCyAALACfBEEASARAIAAoApQEEDELIAAsAKsEQQBIBEAgACgCoAQQMQsgChAxIAAsALsEQQBIBEAgACgCsAQQMQsgACwAzwRBAEgEQCAAKALEBBAxCyAALADbBEEASARAIAAoAtAEEDELIAAsAO8EQQBIBEAgACgC5AQQMQsgACwA+wRBAEgEQCAAKALwBBAxCyAALACPBUEASARAIAAoAoQFEDELIAAsAJsFQQBIBEAgACgCkAUQMQsgACwArwVBAEgEQCAAKAKkBRAxCyAALAC7BUEASARAIAAoArAFEDELIAAsAM8FQQBIBEAgACgCxAUQMQsgACwA2wVBAEgEQCAAKALQBRAxCyAALADvBUEASARAIAAoAuQFEDELIAAsAPsFQQBIBEAgACgC8AUQMQsgACwAjwZBAEgEQCAAKAKEBhAxCyAALACbBkEASARAIAAoApAGEDELIAAsAK8GQQBIBEAgACgCpAYQMQsgACwAuwZBAEgEQCAAKAKwBhAxCyAALADPBkEASARAIAAoAsQGEDELIAAsANsGQQBIBEAgACgC0AYQMQsgACwA7wZBAEgEQCAAKALkBhAxCyAALAD7BkEASARAIAAoAvAGEDELIAAsAI8HQQBIBEAgACgChAcQMQsgACwAmwdBAEgEQCAAKAKQBxAxCyAALACvB0EASARAIAAoAqQHEDELIAAsALsHQQBIBEAgACgCsAcQMQsgACwAzwdBAEgEQCAAKALEBxAxCyAALADbB0EASARAIAAoAtAHEDELIAAsAO8HQQBIBEAgACgC5AcQMQsgACwA+wdBAEgEQCAAKALwBxAxCyAALACPCEEASARAIAAoAoQIEDELIAAsAJsIQQBIBEAgACgCkAgQMQsgACwArwhBAEgEQCAAKAKkCBAxCyAALAC7CEEASARAIAAoArAIEDELIAAsAM8IQQBIBEAgACgCxAgQMQsgACwA2whBAEgEQCAAKALQCBAxCyAALADvCEEASARAIAAoAuQIEDELIAAsAPsIQQBIBEAgACgC8AgQMQsgACwAjwlBAEgEQCAAKAKECRAxCyAALACbCUEASARAIAAoApAJEDELIAAsAK8JQQBIBEAgACgCpAkQMQsgACwAuwlBAEgEQCAAKAKwCRAxCyAALADPCUEASARAIAAoAsQJEDELIAAsANsJQQBIBEAgACgC0AkQMQsgACwA7wlBAEgEQCAAKALkCRAxCyAALAD7CUEASARAIAAoAvAJEDELIAAsAI8KQQBIBEAgACgChAoQMQsgACwAmwpBAEgEQCAAKAKQChAxCyAALACvCkEASARAIAAoAqQKEDELIAAsALsKQQBIBEAgACgCsAoQMQsgACwAzwpBAEgEQCAAKALEChAxCyAALADbCkEASARAIAAoAtAKEDELIAAsAO8KQQBIBEAgACgC5AoQMQsgACwA+wpBAEgEQCAAKALwChAxCyAALACPC0EASARAIAAoAoQLEDELIAAsAJsLQQBIBEAgACgCkAsQMQsgACwArwtBAEgEQCAAKAKkCxAxCyAALAC7C0EASARAIAAoArALEDELIAAsAM8LQQBIBEAgACgCxAsQMQsgACwA2wtBAEgEQCAAKALQCxAxCyAALADvC0EASARAIAAoAuQLEDELIAAsAPsLQQBIBEAgACgC8AsQMQsgACwAjwxBAEgEQCAAKAKEDBAxCyAALACbDEEASARAIAAoApAMEDELIAAsAK8MQQBIBEAgACgCpAwQMQsgACwAuwxBAEgEQCAAKAKwDBAxCyAALADPDEEASARAIAAoAsQMEDELIAAsANsMQQBIBEAgACgC0AwQMQsgACwA7wxBAEgEQCAAKALkDBAxCyAALAD7DEEASARAIAAoAvAMEDELIAkQMSAALACLDUEASARAIAAoAoANEDELIAAsAJ8NQQBIBEAgACgClA0QMQsgACwAqw1BAEgEQCAAKAKgDRAxCyAALAC/DUEASARAIAAoArQNEDELIAAsAMsNQQBIBEAgACgCwA0QMQsgACwA3w1BAEgEQCAAKALUDRAxCyAALADrDUEASARAIAAoAuANEDELIAAsAP8NQQBIBEAgACgC9A0QMQsgACwAiw5BAEgEQCAAKAKADhAxCyAALACfDkEASARAIAAoApQOEDELIAAsAKsOQQBIBEAgACgCoA4QMQsgACwAvw5BAEgEQCAAKAK0DhAxCyAALADLDkEASARAIAAoAsAOEDELIAAsAN8OQQBIBEAgACgC1A4QMQsgACwA6w5BAEgEQCAAKALgDhAxCyAALAD/DkEASARAIAAoAvQOEDELIAAsAIsPQQBIBEAgACgCgA8QMQsgACwAnw9BAEgEQCAAKAKUDxAxCyAALACrD0EASARAIAAoAqAPEDELIAAsAL8PQQBIBEAgACgCtA8QMQsgACwAyw9BAEgEQCAAKALADxAxCyAALADfD0EASARAIAAoAtQPEDELIAAsAOsPQQBIBEAgACgC4A8QMQsgACwA/w9BAEgEQCAAKAL0DxAxCyAALACLEEEASARAIAAoAoAQEDELIAAsAJ8QQQBIBEAgACgClBAQMQsgACwAqxBBAEgEQCAAKAKgEBAxCyAALAC/EEEASARAIAAoArQQEDELIAAsAMsQQQBIBEAgACgCwBAQMQsgACwA3xBBAEgEQCAAKALUEBAxCyAALADrEEEASARAIAAoAuAQEDELIAAsAP8QQQBIBEAgACgC9BAQMQsgACwAixFBAEgEQCAAKAKAERAxCyAALACfEUEASARAIAAoApQREDELIAAsAKsRQQBIBEAgACgCoBEQMQsgACwAvxFBAEgEQCAAKAK0ERAxCyAALADLEUEASARAIAAoAsAREDELIAAsAN8RQQBIBEAgACgC1BEQMQsgACwA6xFBAEgEQCAAKALgERAxCyAALAD/EUEASARAIAAoAvQREDELIAAsAIsSQQBIBEAgACgCgBIQMQsgACwAnxJBAEgEQCAAKAKUEhAxCyAALACrEkEASARAIAAoAqASEDELIAAsAL8SQQBIBEAgACgCtBIQMQsgACwAyxJBAEgEQCAAKALAEhAxCyAALADfEkEASARAIAAoAtQSEDELIAAsAOsSQQBIBEAgACgC4BIQMQsgACwA/xJBAEgEQCAAKAL0EhAxCyAALACLE0EASARAIAAoAoATEDELIAAsAJ8TQQBIBEAgACgClBMQMQsgACwAqxNBAEgEQCAAKAKgExAxCyAALAC/E0EASARAIAAoArQTEDELIAAsAMsTQQBIBEAgACgCwBMQMQsgACwA3xNBAEgEQCAAKALUExAxCyAALADrE0EASARAIAAoAuATEDELIAAsAP8TQQBIBEAgACgC9BMQMQsgACwAixRBAEgEQCAAKAKAFBAxCyAALACfFEEASARAIAAoApQUEDELIAAsAKsUQQBIBEAgACgCoBQQMQsgACwAvxRBAEgEQCAAKAK0FBAxCyAALADLFEEASARAIAAoAsAUEDELIAAsAN8UQQBIBEAgACgC1BQQMQsgACwA6xRBAEgEQCAAKALgFBAxCyAALAD/FEEASARAIAAoAvQUEDELIAAsAIsVQQBIBEAgACgCgBUQMQsgACwAnxVBAEgEQCAAKAKUFRAxCyAALACrFUEASARAIAAoAqAVEDELIAAsAL8VQQBIBEAgACgCtBUQMQsgACwAyxVBAEgEQCAAKALAFRAxCyAALADfFUEASARAIAAoAtQVEDELIAAsAOsVQQBIBEAgACgC4BUQMQsgACwA/xVBAEgEQCAAKAL0FRAxCyAALACLFkEASARAIAAoAoAWEDELIAAsAJ8WQQBIBEAgACgClBYQMQsgACwAqxZBAEgEQCAAKAKgFhAxCyAALAC/FkEASARAIAAoArQWEDELIAAsAMsWQQBIBEAgACgCwBYQMQsgACwA3xZBAEgEQCAAKALUFhAxCyAALADrFkEASARAIAAoAuAWEDELIAAsAP8WQQBIBEAgACgC9BYQMQsgACwAixdBAEgEQCAAKAKAFxAxCyAALACfF0EASARAIAAoApQXEDELIAAsAKsXQQBIBEAgACgCoBcQMQsgACwAvxdBAEgEQCAAKAK0FxAxCyAALADLF0EASARAIAAoAsAXEDELIAAsAN8XQQBIBEAgACgC1BcQMQsgACwA6xdBAEgEQCAAKALgFxAxCyAALAD/F0EASARAIAAoAvQXEDELIAAsAIsYQQBIBEAgACgCgBgQMQsgACwAnxhBAEgEQCAAKAKUGBAxCyAALACrGEEASARAIAAoAqAYEDELIABBkC5qJAAgAUEFNgLk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ayIAJAACQEHIsSv+EgAAQQFxDQBByLErEFNFDQBBvLErQgA3AgBBxLErQQA2AgBByLErEFILAn9Bx7ErLAAAQQBIBEBBwLErQQA2AgBBvLErKAIADAELQcexK0EAOgAAQbyxKwtBADoAACAAQQAQOCAAIABB8s4AEDkiASgCCDYCGCAAIAEpAgA3AxAgAUIANwIAIAFBADYCCCAAIABBEGpB7s4AEDYiASgCCDYCKCAAIAEpAgA3AyAgAUIANwIAIAFBADYCCEG8sSsgACgCICAAQSBqIAAtACsiAcBBAEgiBBsgACgCJCABIAQbEGsaIAAsACtBAEgEQCAAKAIgEDELIAAsABtBAEgEQCAAKAIQEDELIAAsAAtBAEgEQCAAKAIAEDELIABBABA4IAAgAEHNzwAQOSIBKAIINgIYIAAgASkCADcDECABQgA3AgAgAUEANgIIIAAgAEEQakHuzgAQNiIBKAIINgIoIAAgASkCADcDICABQgA3AgAgAUEANgIIQbyxKyAAKAIgIABBIGogAC0AKyIBwEEASCIEGyAAKAIkIAEgBBsQaxogACwAK0EASARAIAAoAiAQMQsgACwAG0EASARAIAAoAhAQMQsgACwAC0EASARAIAAoAgAQMQsgAEEAEDggACAAQdXPABA5IgEoAgg2AhggACABKQIANwMQIAFCADcCACABQQA2AgggACAAQRBqQe7OABA2IgEoAgg2AiggACABKQIANwMgIAFCADcCACABQQA2AghBvLErIAAoAiAgAEEgaiAALQArIgHAQQBIIgQbIAAoAiQgASAEGxBrGiAALAArQQBIBEAgACgCIBAxCyAALAAbQQBIBEAgACgCEBAxCyAALAALQQBIBEAgACgCABAxCyAAQQAQOCAAIABBvs8AEDkiASgCCDYCGCAAIAEpAgA3AxAgAUIANwIAIAFBADYCCCAAIABBEGpB7s4AEDYiASgCCDYCKCAAIAEpAgA3AyAgAUIANwIAIAFBADYCCEG8sSsgACgCICAAQSBqIAAtACsiAcBBAEgiBBsgACgCJCABIAQbEGsaIAAsACtBAEgEQCAAKAIgEDELIAAsABtBAEgEQCAAKAIQEDELIAAsAAtBAEgEQCAAKAIAEDELIABBABA4IAAgAEGIzwAQOSIBKAIINgIYIAAgASkCADcDECABQgA3AgAgAUEANgIIIAAgAEEQakHuzgAQNiIBKAIINgIoIAAgASkCADcDICABQgA3AgAgAUEANgIIQbyxKyAAKAIgIABBIGogAC0AKyIBwEEASCIEGyAAKAIkIAEgBBsQaxogACwAK0EASARAIAAoAiAQMQsgACwAG0EASARAIAAoAhAQMQsgACwAC0EASARAIAAoAgAQMQsgAEEAEDggACAAQbrPABA5IgEoAgg2AhggACABKQIANwMQIAFCADcCACABQQA2AgggACAAQRBqQe7OABA2IgEoAgg2AiggACABKQIANwMgIAFCADcCACABQQA2AghBvLErIAAoAiAgAEEgaiAALQArIgHAQQBIIgQbIAAoAiQgASAEGxBrGiAALAArQQBIBEAgACgCIBAxCyAALAAbQQBIBEAgACgCEBAxCyAALAALQQBIBEAgACgCABAxCyAAQQAQOCAAIABBp88AEDkiASgCCDYCGCAAIAEpAgA3AxAgAUIANwIAIAFBADYCCCAAIABBEGpB7s4AEDYiASgCCDYCKCAAIAEpAgA3AyAgAUIANwIAIAFBADYCCEG8sSsgACgCICAAQSBqIAAtACsiAcBBAEgiBBsgACgCJCABIAQbEGsaIAAsACtBAEgEQCAAKAIgEDELIAAsABtBAEgEQCAAKAIQEDELIAAsAAtBAEgEQCAAKAIAEDELIABBABA4IAAgAEGvzwAQOSIBKAIINgIYIAAgASkCADcDECABQgA3AgAgAUEANgIIIAAgAEEQakHuzgAQNiIBKAIINgIoIAAgASkCADcDICABQgA3AgAgAUEANgIIQbyxKyAAKAIgIABBIGogAC0AKyIBwEEASCIEGyAAKAIkIAEgBBsQaxogACwAK0EASARAIAAoAiAQMQsgACwAG0EASARAIAAoAhAQMQsgACwAC0EASARAIAAoAgAQMQsgAEEBEDggACAAQZrPABA5IgEoAgg2AhggACABKQIANwMQIAFCADcCACABQQA2AgggACAAQRBqQe7OABA2IgEoAgg2AiggACABKQIANwMgIAFCADcCACABQQA2AghBvLErIAAoAiAgAEEgaiAALQArIgHAQQBIIgQbIAAoAiQgASAEGxBrGiAALAArQQBIBEAgACgCIBAxCyAALAAbQQBIBEAgACgCEBAxCyAALAALQQBIBEAgACgCABAxCyAAQQAQOCAAIABBgM8AEDkiASgCCDYCGCAAIAEpAgA3AxAgAUIANwIAIAFBADYCCCAAIABBEGpB7s4AEDYiASgCCDYCKCAAIAEpAgA3AyAgAUIANwIAIAFBADYCCEG8sSsgACgCICAAQSBqIAAtACsiAcBBAEgiBBsgACgCJCABIAQbEGsaIAAsACtBAEgEQCAAKAIgEDELIAAsABtBAEgEQCAAKAIQEDELIAAsAAtBAEgEQCAAKAIAEDELIABBABA4IAAgAEHFzwAQOSIBKAIINgIYIAAgASkCADcDECABQgA3AgAgAUEANgIIIAAgAEEQakHuzgAQNiIBKAIINgIoIAAgASkCADcDICABQgA3AgAgAUEANgIIQbyxKyAAKAIgIABBIGogAC0AKyIBwEEASCIEGyAAKAIkIAEgBBsQaxogACwAK0EASARAIAAoAiAQMQsgACwAG0EASARAIAAoAhAQMQsgACwAC0EASARAIAAoAgAQMQsgAEEAEDggACAAQfnOABA5IgEoAgg2AhggACABKQIANwMQIAFCADcCACABQQA2AgggACAAQRBqQe7OABA2IgEoAgg2AiggACABKQIANwMgIAFCADcCACABQQA2AghBvLErIAAoAiAgAEEgaiAALQArIgHAQQBIIgQbIAAoAiQgASAEGxBrGiAALAArQQBIBEAgACgCIBAxCyAALAAbQQBIBEAgACgCEBAxCyAALAALQQBIBEAgACgCABAxCyAAQQAQOCAAIABBkM8AEDkiASgCCDYCGCAAIAEpAgA3AxAgAUIANwIAIAFBADYCCCAAIABBEGpB7s4AEDYiASgCCDYCKCAAIAEpAgA3AyAgAUIANwIAIAFBADYCCEG8sSsgACgCICAAQSBqIAAtACsiAcBBAEgiBBsgACgCJCABIAQbEGsaIAAsACtBAEgEQCAAKAIgEDELIAAsABtBAEgEQCAAKAIQEDELIAAsAAtBAEgEQCAAKAIAEDELQcexKywAACEBQbyxKygCACEEIABBMGokACAOQbyxKyAEIAFBAE4bNgLIASAOIAM2AsQBIA4gAjYCwAFBxtEAIA5BwAFqEJ0BELkCIA5BATYCtAEgDiAOKALkATYCsAEgDiAOKAKkAjYCuAEgDkHuHkHDISAOLQD0ARs2ArwBIA5Bwc4ANgKgASAOIA4oAtQBIA4oAtAB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EAAAABAAAAD9Tv0MAAAAAAAAAAAAAAAAAAAAACAEQQpq/VwAAP0NEAECAxEFBgcSCQoLEw0ODyIIQQT9rQH9UP0M8P////D////w////8P////2uAf36Af3mAf0LAlAgAyAHIAJBBHb9ESACQQV2/RwBIAJBBnb9HAIgAkEHdv0cAyIKQQT9qwH9DBAAAAAQAAAAEAAAABAAAAD9TiAI/QwPAAAADwAAAA8AAAAPAAAA/U79UP0M8P////D////w////8P////2uAf36Af3mAf0LAhAgAyAHIAJBFHb9ESACQRV2/RwBIAJBFnb9HAIgAkEXdv0cA/0MEAAAABAAAAAQAAAAEAAAAP1O/QwAAAAAAAAAAAAAAAAAAAAAIARBDmr9XAAA/Q0QAQIDEQUGBxIJCgsTDQ4PIghBBP2tAf1Q/Qzw////8P////D////w/////a4B/foB/eYB/QsCYCADIAcgCv0MEAAAABAAAAAQAAAAEAAAAP1OIAj9DA8AAAAPAAAADwAAAA8AAAD9Tv1Q/Qzw////8P////D////w/////a4B/foB/eYB/QsCICADIAcgAkEYdv0RIAJBGXb9HAEgAkEadv0cAiACQRt2/RwD/QwQAAAAEAAAABAAAAAQAAAA/U79DAAAAAAAAAAAAAAAAAAAAAAgBEESav1cAAD9DRABAgMRBQYHEgkKCxMNDg8iCEEE/a0B/VD9DPD////w////8P////D////9rgH9+gH95gH9CwJwIAMgByAJQQT9qwH9DBAAAAAQAAAAEAAAABAAAAD9TiAI/QwPAAAADwAAAA8AAAAPAAAA/U79UP0M8P////D////w////8P////2uAf36Af3mAf0LAjAgBUEBaiIFIAZHDQALCwseAQF/QbCWAygCACIABEAgABDdAkGwlgNBADYCAAsL3wYBDn8jAEHwA2siACQAIABB6ANqIgYgAygCHCIHNgIAIAdBBGpBAf4eAgAaIAYQZiEKAn8gBS0AC0EHdgRAIAUoAgQMAQsgBS0AC0H/AHELBEACfyAFLQALQQd2BEAgBSgCAAwBCyAFCygCACAKQS0gCigCACgCLBEEAEYhCwsgAiALIABB6ANqIABB4ANqIABB3ANqIRMgAEHYA2ohECMAQRBrIgYkACAAQcgDaiICQgA3AgAgAkEANgIIIAZBEGok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AAAAACAGQQZq/VwAAP0NEAECAxEFBgcSCQoLEw0ODyIEQQT9rQH9DPj////4////+P////j////9rgH9+gH95gH9CwJQIAIgAyAE/QwPAAAADwAAAA8AAAAPAAAA/U79DPj////4////+P////j////9rgH9+gH95gH9CwIQIAIgA/0MAAAAAAAAAAAAAAAAAAAAACAGQQpq/VwAAP0NEAECAxEFBgcSCQoLEw0ODyIEQQT9rQH9DPj////4////+P////j////9rgH9+gH95gH9CwJgIAIgAyAE/QwPAAAADwAAAA8AAAAPAAAA/U79DPj////4////+P////j////9rgH9+gH95gH9CwIgIAIgA/0MAAAAAAAAAAAAAAAAAAAAACAGQQ5q/VwAAP0NEAECAxEFBgcSCQoLEw0ODyIEQQT9rQH9DPj////4////+P////j////9rgH9+gH95gH9CwJwIAIgAyAE/QwPAAAADwAAAA8AAAAPAAAA/U79DPj////4////+P////j////9rgH9+gH95gH9CwIwIAVBAWoiBSAHRw0ACwsL9QQBCH8CfyMAQdABayIAJAAgAEIlNwPIASAAQcgBakEBckH14gAgAigCBBDeASEGIAAgAEGgAWo2ApwBEEIhCAJ/IAYEQCACKAIIIQUgACAEOQMoIAAgBTYCICAAQaABakEeIAggAEHIAWogAEEgahBgDAELIAAgBDkDMCAAQaABakEeIAggAEHIAWogAEEwahBgCyEHIABBoQE2AlAgAEGQAWpBACAAQdAAahBOIQggAEGgAWoiCSEFAkAgB0EeTgRAEEIhBQJ/IAYEQCACKAIIIQcgACAEOQMIIAAgBzYCACAAQZwBaiAFIABByAFqIAAQiAEMAQsgACAEOQMQIABBnAFqIAUgAEHIAWogAEEQahCIAQsiB0F/Rg0BIAgoAgAhBSAIIAAoApwBNgIAIAUEQCAFIAgoAgQRAAALIAAoApwBIQULIAUgBSAHaiIKIAIQciELIABBoQE2AlAgAEHIAGpBACAAQdAAahBOIQUCQCAAKAKcASAAQaABakYEQCAAQdAAaiEHDAELIAdBAXQQRSIHRQ0BIAUoAgAhBiAFIAc2AgAgBgRAIAYgBSgCBBEAAAsgACgCnAEhCQsgAEE4aiIGIAIoAhwiDDYCACAMQQRqQQH+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AAtBB3YEQCABKAIADAELIAELIgI2ArwBIAAgAEEQajYCDCAAQQA2AggDQAJAIABB2AJqIABB0AJqEEANACAAKAK8AQJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEDIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQNyABIAEtAAtBB3YEfyABKAIIQf////8HcUEBawVBCgsQNyAAIAMCfyABLQALQQd2BEAgASgCAAwBCyABCyICajYCvAELAn8gACgC2AIiAygCDCIIIAMoAhBGBEAgAyADKAIAKAIkEQEADAELIAgoAgALIAYgAiAAQbwBaiAAQQhqIAAoAswCIABB0AFqIABBEGogAEEMaiAHELIBDQAgAEHYAmoQWBoMAQsLAkACfyAALQDbAUEHdgRAIAAoAtQBDAELIAAtANsBQf8AcQtFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK8ASAEIAYQxAM3AwAgAEHQAWogAEEQaiAAKAIMIAQQYSAAQdgCaiAAQdACahBABEAgBCAEKAIAQQJyNgIACyAAKALYAiECIAEQNBogAEHQAWoQNBogAEHgAmokACACC5kFAQN/IwBB4AJrIgAkACAAIAI2AtACIAAgATYC2AIgAxCJASEGIAMgAEHgAWoQwgEhByAAQdABaiADIABBzAJqEMEBIwBBEGsiAiQAIABBwAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxA3IAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK8ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQdgCaiAAQdACahBADQAgACgCvAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EDcgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDcgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsi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AiAAIAE2ApgCIABB4AFqIAMgAEHwAWogAEHvAWogAEHuAWoQogIjAEEQayICJAAgAEHQAWoiAUIANwIAIAFBADYCCCACQRBqJAAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDcgAAJ/IAEtAAtBB3YEQCABKAIADAELIAELIgI2AswBIAAgAEEgajYCHCAAQQA2AhggAEEBOgAXIABBxQA6ABYDQAJAIABBmAJqIABBkAJqEEENACAAKALMAQJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEDIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQNyABIAEtAAtBB3YEfyABKAIIQf////8HcUEBawVBCgsQNyAAIAMCfyABLQALQQd2BEAgASgCAAwBCyABCyICajYCzAELAn8gACgCmAIiAygCDCIGIAMoAhBGBEAgAyADKAIAKAIkEQEADAELIAYtAAALwCAAQRdqIABBFmogAiAAQcwBaiAALADvASAALADuASAAQeABaiAAQSBqIABBHGogAEEYaiAAQfABahChAg0AIABBmAJqEFkaDAELCwJAAn8gAC0A6wFBB3YEQCAAKALkAQwBCyAALQDrAUH/AHELRQ0AIAAtABdFDQAgACgCHCIDIABBIGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALMASAEEMEDIAApAwAhByAFIAApAwg3AwggBSAHNwMAIABB4AFqIABBIGogACgCHCAEEGEgAEGYAmogAEGQAmoQQQRAIAQgBCgCAEECcjYCAAsgACgCmAIhAiABEDQaIABB4AFqEDQaIABBoAJqJAAgAgu5BQEBfyMAQZACayIAJAAgACACNgKAAiAAIAE2AogCIABB0AFqIAMgAEHgAWogAEHfAWogAEHeAWoQogIjAEEQayICJAAgAEHAAWoiAUIANwIAIAFBADYCCCACQRBqJAAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDcgAAJ/IAEtAAtBB3YEQCABKAIADAELIAELIgI2ArwBIAAgAEEQajYCDCAAQQA2AgggAEEBOgAHIABBxQA6AAYDQAJAIABBiAJqIABBgAJqEEENACAAKAK8AQJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEDIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQNyABIAEtAAtBB3YEfyABKAIIQf////8HcUEBawVBCgsQNyAAIAMCfyABLQALQQd2BEAgASgCAAwBCyABCyICajYCvAELAn8gACgCiAIiAygCDCIGIAMoAhBGBEAgAyADKAIAKAIkEQEADAELIAYtAAALwCAAQQdqIABBBmogAiAAQbwBaiAALADfASAALADeASAAQdABaiAAQRBqIABBDGogAEEIaiAAQeABahChAg0AIABBiAJqEFkaDAELCwJAAn8gAC0A2wFBB3YEQCAAKALUAQwBCyAALQDbAUH/AHELRQ0AIAAtAAdFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK8ASAEEMIDOQMAIABB0AFqIABBEGogACgCDCAEEGEgAEGIAmogAEGAAmoQQQRAIAQgBCgCAEECcjYCAAsgACgCiAIhAiABEDQaIABB0AFqEDQaIABBkAJqJAAgAgu5BQEBfyMAQZACayIAJAAgACACNgKAAiAAIAE2AogCIABB0AFqIAMgAEHgAWogAEHfAWogAEHeAWoQogIjAEEQayICJAAgAEHAAWoiAUIANwIAIAFBADYCCCACQRBqJAAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDcgAAJ/IAEtAAtBB3YEQCABKAIADAELIAELIgI2ArwBIAAgAEEQajYCDCAAQQA2AgggAEEBOgAHIABBxQA6AAYDQAJAIABBiAJqIABBgAJqEEENACAAKAK8AQJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEDIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQNyABIAEtAAtBB3YEfyABKAIIQf////8HcUEBawVBCgsQNyAAIAMCfyABLQALQQd2BEAgASgCAAwBCyABCyICajYCvAELAn8gACgCiAIiAygCDCIGIAMoAhBGBEAgAyADKAIAKAIkEQEADAELIAYtAAALwCAAQQdqIABBBmogAiAAQbwBaiAALADfASAALADeASAAQdABaiAAQRBqIABBDGogAEEIaiAAQeABahChAg0AIABBiAJqEFkaDAELCwJAAn8gAC0A2wFBB3YEQCAAKALUAQwBCyAALQDbAUH/AHELRQ0AIAAtAAdFDQAgACgCDCIDIABBEGprQZ8BSg0AIAAgA0EEajYCDCADIAAoAgg2AgALIAUgAiAAKAK8ASAEEMMDOAIAIABB0AFqIABBEGogACgCDCAEEGEgAEGIAmogAEGAAmoQQQRAIAQgBCgCAEECcjYCAAsgACgCiAIhAiABEDQaIABB0AFqEDQaIABBkAJqJAAgAguPBQECfyMAQZACayIAJAAgACACNgKAAiAAIAE2AogCIAMQiQEhBiAAQdABaiADIABB/wFqEMMBIwBBEGsiAiQAIABBwAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxA3IAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK8ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQYgCaiAAQYACahBBDQAgACgCvAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EDcgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDcgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArwBCwJ/IAAoAogCIgMoAgwiByADKAIQRgRAIAMgAygCACgCJBEBAAwBCyAHLQAAC8AgBiACIABBvAFqIABBCGogACwA/wEgAEHQAWogAEEQaiAAQQxqQZDGAhC0AQ0AIABBiAJqEFkaDAELCwJAAn8gAC0A2wFBB3YEQCAAKALUAQwBCyAALQDbAUH/AHELRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCvAEgBCAGEMQDNwMAIABB0AFqIABBEGogACgCDCAEEGEgAEGIAmogAEGAAmoQQQRAIAQgBCgCAEECcjYCAAsgACgCiAIhAiABEDQaIABB0AFqEDQaIABBkAJqJAAgAguPBQECfyMAQZACayIAJAAgACACNgKAAiAAIAE2AogCIAMQiQEhBiAAQdABaiADIABB/wFqEMMBIwBBEGsiAiQAIABBwAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxA3IAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK8ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQYgCaiAAQYACahBBDQAgACgCvAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EDcgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDcgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArwBCwJ/IAAoAogCIgMoAgwiByADKAIQRgRAIAMgAygCACgCJBEBAAwBCyAHLQAAC8AgBiACIABBvAFqIABBCGogACwA/wEgAEHQAWogAEEQaiAAQQxqQZDGAhC0AQ0AIABBiAJqEFkaDAELCwJAAn8gAC0A2wFBB3YEQCAAKALUAQwBCyAALQDbAUH/AHELRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCvAEgBCAGEMgDOwEAIABB0AFqIABBEGogACgCDCAEEGEgAEGIAmogAEGAAmoQQQRAIAQgBCgCAEECcjYCAAsgACgCiAIhAiABEDQaIABB0AFqEDQaIABBkAJqJAAgAguPBQECfyMAQZACayIAJAAgACACNgKAAiAAIAE2AogCIAMQiQEhBiAAQdABaiADIABB/wFqEMMBIwBBEGsiAiQAIABBwAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxA3IAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK8ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQYgCaiAAQYACahBBDQAgACgCvAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EDcgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDcgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArwBCwJ/IAAoAogCIgMoAgwiByADKAIQRgRAIAMgAygCACgCJBEBAAwBCyAHLQAAC8AgBiACIABBvAFqIABBCGogACwA/wEgAEHQAWogAEEQaiAAQQxqQZDGAhC0AQ0AIABBiAJqEFkaDAELCwJAAn8gAC0A2wFBB3YEQCAAKALUAQwBCyAALQDbAUH/AHELRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCvAEgBCAGEMkDNwMAIABB0AFqIABBEGogACgCDCAEEGEgAEGIAmogAEGAAmoQQQRAIAQgBCgCAEECcjYCAAsgACgCiAIhAiABEDQaIABB0AFqEDQaIABBkAJqJAAgAguPBQECfyMAQZACayIAJAAgACACNgKAAiAAIAE2AogCIAMQiQEhBiAAQdABaiADIABB/wFqEMMBIwBBEGsiAiQAIABBwAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxA3IAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK8ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQYgCaiAAQYACahBBDQAgACgCvAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EDcgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDcgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArwBCwJ/IAAoAogCIgMoAgwiByADKAIQRgRAIAMgAygCACgCJBEBAAwBCyAHLQAAC8AgBiACIABBvAFqIABBCGogACwA/wEgAEHQAWogAEEQaiAAQQxqQZDGAhC0AQ0AIABBiAJqEFkaDAELCwJAAn8gAC0A2wFBB3YEQCAAKALUAQwBCyAALQDbAUH/AHELRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCvAEgBCAGEMoDNgIAIABB0AFqIABBEGogACgCDCAEEGEgAEGIAmogAEGAAmoQQQRAIAQgBCgCAEECcjYCAAsgACgCiAIhAiABEDQaIABB0AFqEDQaIABBkAJqJAAgAgvXAgEBfyMAQSBrIgYkACAGIAE2AhgCQCADKAIEQQFxRQRAIAZBfzYCACAAIAEgAiADIAQgBiAAKAIAKAIQEQgAIQECQAJAAkAgBigCAA4CAAECCyAFQQA6AAAMAwsgBUEBOgAADAILIAVBAToAACAEQQQ2AgAMAQsgBiADKAIcIgA2AgAgAEEEakEB/h4CABogBhBwIQEgBigCACIAQQRqQX/+HgIARQRAIAAgACgCACgCCBEAAAsgBiADKAIcIgA2AgAgAEEEakEB/h4CABogBhC1ASEDIAYoAgAiAEEEakF//h4CAEUEQCAAIAAoAgAoAggRAAALIAYgAyADKAIAKAIYEQIAIAZBDHIgAyADKAIAKAIcEQIAIAUgBkEYaiIDIAIgBiADIAEgBEEBEOEBIAZGOgAAIAYoAhghAQNAIANBDGsQNCIDIAZHDQALCyAGQSBqJAAgAQtAAQF/QQAhAAN/IAEgAkYEfyAABSABKAIAIABBBHRqIgBBgICAgH9xIgNBGHYgA3IgAHMhACABQQRqIQEMAQsLCxsAIwBBEGsiASQAIAAgAiADEMsDIAFBEGokAAtUAQJ/AkADQCADIARHBEBBfyEAIAEgAkYNAiABKAIAIgUgAygCACIGSA0CIAUgBkoEQEEBDwUgA0EEaiEDIAFBBGohAQwCCwALCyABIAJHIQALIAALQAEBf0EAIQADfyABIAJGBH8gAAUgASwAACAAQQR0aiIAQYCAgIB/cSIDQRh2IANyIABzIQAgAUEBaiEBDAELCwsLACAAIAIgAxDMAwteAQN/IAEgBCADa2ohBQJAA0AgAyAERwRAQX8hACABIAJGDQIgASwAACIGIAMsAAAiB0gNAiAGIAdKBEBBAQ8FIANBAWohAyABQQFqIQEMAgsACwsgAiAFRyEACyAAC88BAQR/IABBBGohAiAAKAIcIgEoAgRBAWshAwNAAkACQCADIAFBAf4eAghGBEAgACgCHEEA/hkADAwBCwNAIAAoAhz+EgAMQQFxRQ0BIAAoAhz+EgANQQFxRQ0ACwwBCyAAKAIcQQH+JQIIGgNAAkAgACgCHP4SAAwhBCAAKAIc/hIADUEBcSEBIARBAXENACABRQ0BDAILCyABDQAgACgCGCIBRQ0AIAAoAgggACgCDEgEQCACIAEQ4gELIABBADYCGCAAKAIcIQEMAQsLQQALUgECfyABIAAoAlQiASABIAJBgAJqIgMQ/wMiBCABayADIAQbIgMgAiACIANLGyICEHwaIAAgASADaiIDNgJUIAAgAzYCCCAAIAEgAmo2AgQgAgsMACAAEKgCGiAAEDELEwAgACAAKAIAQQxrKAIAahDkAwvj0QEDGH8IfQZ+AkBBsJYDKAIABH9BAAVBsJYDAn8gACgCACAAIAAsAAtBAEgbIRIjAEHwAWsiCCQAIAggEjYCFCAIQZIeNgIQQbifAigCACIFQZjiACAIQRBqEDIgCEGspgI2ApwBIAhBuKYCKAIAIgA2AjAgCEEwaiICIABBDGsoAgBqQbymAigCADYCACAIQQA2AjQgAiAIKAIwQQxrKAIAaiIAQQA2AhQgACAIQThqIgw2AhggAEEANgIMIABCgqCAgOAANwIEIAAgDEU2AhAgAEEgakEAQSj8CwAgAEEcahDYARogAEKAgICAcDcCSCAIQaymAjYCnAEgCEGYpgI2AjACfyMAQRBrIgAkACAMQaijAjYCACAMQQRqENgBGiAMQgA3AhggDEIANwIQIAxCADcCCCAMQQA2AiggDEIANwIgIAxBmKQCNgIAIAxBNGpBAEEv/AsAIAAgDCgCBCICNgIIIAJBBGpBAf4eAgAaIAAoAghBvMIrEEoQlwMhBCAAKAIIIgJBBGpBf/4eAgBFBEAgAiACKAIAKAIIEQAACyAEBEAgACAMKAIEIgI2AgAgAkEEakEB/h4CABogDCAAEOcDNgJEIAAoAgAiAkEEakF//h4CAEUEQCACIAIoAgAoAggRAAALIAwgDCgCRCICIAIoAgAoAhwRAQA6AGILIAxBAEGAICAMKAIAKAIMEQMAGiAAQRBqJAACQAJAIAwoAkANAEEAIQIjAEEQayIKJAACQAJAQYklQcskLAAAELsBRQRAIwNBHDYCHAwBC0ECIQBByyRBKxC7AUUEQEHLJC0AAEHyAEchAAsgAEGAAXIgAEHLJEH4ABC7ARsiAEGAgCByIABByyRB5QAQuwEbIgAgAEHAAHJByyQtAAAiAEHyAEYbIgRBgARyIAQgAEH3AEYbIgRBgAhyIAQgAEHhAEYbIQAgCkK2AzcDAEGcfyASIABBgIACciAKECgiAEGBYE8EQCMDQQAgAGs2AhxBfyEACyAAQQBIDQEjAEEgayIEJAACfwJAAkBBiSVByyQsAAAQuwFFBEAjA0EcNgIcDAELQZgJEEUiAg0BC0EADAELIAJBAEGQARC8AUHLJEErELsBRQRAIAJBCEEEQcskLQAAQfIARhs2AgALAkBByyQtAABB4QBHBEAgAigCACEBDAELIABBA0EAEBAiAUGACHFFBEAgBCABQYAIcqw3AxAgAEEEIARBEGoQEBoLIAIgAigCAEGAAXIiATYCAAsgAkF/NgJQIAJBgAg2AjAgAiAANgI8IAIgAkGYAWo2AiwCQCABQQhxDQAgBCAEQRhqrTcDACAAQZOoASAEECcNACACQQo2AlALIAJB8wA2AiggAkH0ADYCJCACQfUANgIgIAJB9gA2AgxB8bErLQAARQRAIAJBfzYCTAsgAhDuASIBKAIANgI4IAEoAgAiBwRAIAcgAjYCNAsgASACNgIAQaCzKxDGASACCyECIARBIGokACACDQEgABAOGgtBACECCyAKQRBqJAAgDCACNgJAIAJFDQAgDEEMNgJYDAELQQAMAQsgDAtFBEAgCCgCMEEMaygCACAIQTBqaiIAIAAoAhBBBHIQqQILIAhBnAFqIRUCQCAIKAIwQQxrKAIAIAhBMGpqLQAQQQVxBEAgCCASNgIEIAhBkh42AgAgBUH/4QAgCBAyQQAhBQwBCyAIQSI2AiwgCEEjNgIoIAhBJDYCJCAIIAhBMGo2AiAjAEEQayITJABBgAIQMyIF/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAF/QwBAAAAAQAAAAAAAACYygAA/QsDECAFQZiVAzYCuAEgBf0MAAAAAAAAAAAAAAAAAAAAAP0LAuwBIAVBsAFqIgBCADcDACAFQQA2AlggBUIANwNQIAVBQGtC0ICAgBA3AwAgBf0MwAEAAIABAAAGAAAABAAAAP0LAzAgBf0M3AUAAIABAAAGAAAABAAAAP0LAyAgBUIANwOIASAF/QwAAAAAAAAAAAAAAAAAAAAA/QsDkAEgBUHAAWoiAkIANwMAIAVBrAFqIhYgADYCACAFQbwBaiIXIAI2AgAgBUHMAWoiAEEANgIAIAVCuYmDgKCXMTcD4AEgBUG7iQM2AugBIAX9DAAAAABQxAAAUcQAALjEAAD9CwPQASAFQcgBaiIYIAA2AgACf0EAIQIjAEGABWsiASQAIAFBrCM2AvADQbifAigCACIJQePSACABQfADahAyIAUQcSIjNwMIIAgoAiAgAUGABGpBBCAIKAIkEQMAGgJAAkAgASgCgARB7NqduwZHBEAgAUGsIzYC4AMgCUHb4QAgAUHgA2oQMgwBCyAIKAIgIAVBHGpBBCAIKAIkEQMAGiAIKAIgIAVBIGpBBCAIKAIkEQMAGiAIKAIgIAVBJGpBBCAIKAIkEQMAGiAIKAIgIAVBKGpBBCAIKAIkEQMAGiAIKAIgIAVBLGpBBCAIKAIkEQMAGiAIKAIgIAVBMGpBBCAIKAIkEQMAGiAIKAIgIAVBNGpBBCAIKAIkEQMAGiAIKAIgIAVBOGpBBCAIKAIkEQMAGiAIKAIgIAVBPGpBBCAIKAIkEQMAGiAIKAIgIAVBQGtBBCAIKAIkEQMAGiAIKAIgIAVBxABqQQQgCCgCJBEDABpBASEAAkACQAJAAkACQAJAIAUoAixBBGsOHQQFAAUFBQUFAQUFBQUFBQUFBQUFAgUFBQUFBQUDBQtBAiEADAMLQQMhAAwCC0EEIQAMAQtBBSEACyAFIAA2AhgLIAUgBSgCRCIAIABB6AdtIgpB6AdsayIENgJEIAUCfyMAQRBrIgAkAAJAIARBCk8NAEGPByAEdkEBcUUNACAEQQJ0QZCIAWooAgAhBCAAQRBqJAAgBAwBCyAAQfEmNgIIIABB2x02AgQgAEGRJDYCAEG4nwIoAgBBiNIAIAAQMhAAAAsiADYCECAAQQ1GBEAgASAFKAJENgIEIAFBrCM2AgAgCUH34AAgARAyDAELIAUoAkQhAyABIAUoAhw2AtQDIAFBrCM2AtADIAlB4NkAIAFB0ANqEDIgASAFKAIgNgLEAyABQawjNgLAAyAJQZjZACABQcADahAyIAEgBSgCJDYCtAMgAUGsIzYCsAMgCUG42AAgAUGwA2oQMiABIAUoAig2AqQDIAFBrCM2AqADIAlBgNkAIAFBoANqEDIgASAFKAIsNgKUAyABQawjNgKQAyAJQaDYACABQZADahAyIAEgBSgCMDYChAMgAUGsIzYCgAMgCUHI2QAgAUGAA2oQMiABIAUoAjQ2AvQCIAFBrCM2AvACIAlB6NgAIAFB8AJqEDIgASAFKAI4NgLkAiABQawjNgLgAiAJQbDZACABQeACahAyIAEgBSgCPDYC1AIgAUGsIzYC0AIgCUHQ2AAgAUHQAmoQMiABIAUoAkA2AsQCIAFBrCM2AsACIAlB+NkAIAFBwAJqEDIgASAFKAJENgK0AiABQawjNgKwAiAJQajaACABQbACahAyIAEgCjYCpAIgAUGsIzYCoAIgCUGQ2gAgAUGgAmoQMiABIAUoAhg2ApQCIAFBrCM2ApACIAlBwNoAIAFBkAJqEDJB1LArKAIAIgJFDQEgBSgCGCEAAkADQCACKAIQIgQgAEoEQCACKAIAIgINAQwECyAAIARMDQEgAigCBCICDQALDAILQeCwKygCACIHRQ0BIAIoAhQhBgJAA0AgBygCECICIABKBEAgBygCACIHDQEMBAsgACACTA0BIAcoAgQiBw0ACwwCC0HssCsoAgAiAkUNASAHKAIUIQsCQANAIAIoAhAiBCAASgRAIAIoAgAiAg0BDAQLIAAgBEwNASACKAIEIgINAAsMAgtB+LArKAIAIgdFDQEgAigCFCEOAkADQCAHKAIQIgIgAEoEQCAHKAIAIgcNAQwECyAAIAJMDQEgBygCBCIHDQALDAILQYSxKygCACICRQ0BIAcoAhQhECAFKAIQIQQCQANAIAIoAhAiCiAESgRAIAIoAgAiAg0BDAQLIAQgCkwNASACKAIEIgINAAsMAgsgAigCGCICRQ0BQQFBAiADGyEKAkADQCACKAIQIgQgAEoEQCACKAIAIgINAQwECyAAIARMDQEgAigCBCICDQALDAILQZyxKygCACIHRQ0BIAIoAhQhAwJAA0AgBygCECICIABKBEAgBygCACIHDQEMBAsgACACTA0BIAcoAgQiBw0ACwwCC0GosSsoAgAiAkUNASAHKAIUIQ8CQANAIAIoAhAiBCAASgRAIAIoAgAiAg0BDAQLIAAgBEwNASACKAIEIgINAAsMAgtBtLErKAIAIgdFDQECQANAIAcoAhAiBCAASgRAIAcoAgAiBw0BDAQLIAAgBEwNASAHKAIEIgcNAAsMAgtBkLErKAIAIgRFDQEgBiALaiAOaiAQaiADIA9qIAIoAhQiAiAHKAIUIgcgAiAHSxtqIApsaiECAkADQCAEKAIQIgcgAEoEQCAEKAIAIgQNAQwECyAAIAdMDQEgBCgCBCIEDQALDAILIAEgBCgCFCAKbLhEAAAAAAAAUD+iRAAAAAAAAFA/ojkDgAIgAUGsIzYC8AEgASACuEQAAAAAAABQP6JEAAAAAAAAUD+iOQP4ASAJQbfeACABQfABahB9QQwQMyICQQA2AgggAkIANwIAIAUgAjYCpAFBhLErKAIAIgBFDQEgBSgCECEEAkADQCAAKAIQIgcgBEoEQCAAKAIAIgANAQwECyAEIAdMDQEgACgCBCIADQALDAILIAAoAhgiAEUNASAFKAIYIQQCQANAIAAoAhAiByAESgRAIAAoAgAiAA0BDAQLIAQgB0wNASAAKAIEIgANAAsMAgsgACgCFCAKbCIABEAgAEEASA0HIAAQMyIEQQAgAPwLACACIAAgBGoiADYCCCACIAA2AgQgAiAENgIACyAIKAIgIAVByABqQQQgCCgCJBEDABogCCgCICAFQcwAakEEIAgoAiQRAwAaAkAgBSgCTCAFKAJIbCIEIAUoAlQiAiAFQdAAaiIHKAIAIgBrQQJ1IgpLBEAgByAEIAprEGkgBSgCUCEAIAUoAlQhAgwBCyAEIApPDQAgBSAAIARBAnRqIgI2AlQLIAgoAiAgACACIABrIAgoAiQRAwAaIAFBADYC8AQgCCgCICABQfAEakEEIAgoAiQRAwAaIAFBADYCiAQgAUIANwOABCABQYABEDMiADYC3AQgASAANgLYBCABIABBgAFqNgLgBAJAIAEoAvAEIgBBAEoEQCAFQcwBaiEKIAVBvAFqIQ5BACEHA0AgCCgCICABQfgEakEEIAgoAiQRAwAaAkAgASgC+AQiAwRAAkAgASgC3AQiBCABKALYBCICayIGIANJBEAgAyAGayILIAEoAuAEIgAgBGtNBEAgBEEAIAv8CwAgASAEIAtqIgQ2AtwEIAEoAtgEIQAMAgsgA0EASA0NQf////8HIAAgAmsiAEEBdCIEIAMgAyAESRsgAEH/////A08bIgQQMyIAIAZqQQAgC/wLACAAIAIgBvwKAAAgASAAIARqNgLgBCABIAAgA2oiBDYC3AQgASAANgLYBCACRQ0BIAIQMQwBCyADIAZJBEAgASACIANqIgQ2AtwECyACIQALIAgoAiAgACAEIABrIgIgCCgCJBEDABogAUGABGogACACEJECDAELAn8gASwAiwRBAEgEQCABQQA2AoQEIAEoAoAEDAELIAFBADoAiwQgAUGABGoLQQA6AAALIAEgAUGABGoiADYCuAQgAUHIBGogDiAAIAFBuARqEN4CIAEoAsgEIAc2AhwCQAJAIAoiBCIAKAIAIgJFDQADQCACIgAoAhAiAiAHSgRAIAAiBCgCACICDQEMAgsgAiAHTgRAIAAhAgwDCyAAKAIEIgINAAsgAEEEaiEEC0EgEDMiAiAHNgIQIAIgADYCCCACQgA3AgAgAkIANwIUIAJBADYCHCAEIAI2AgAgAiEAIAUoAsgBKAIAIgMEQCAFIAM2AsgBIAQoAgAhAAsgBSgCzAEgABCVASAFIAUoAtABQQFqNgLQAQsCQCACQRRqIgAgAUGABGpGDQAgAS0AiwQiA8AhBCACLAAfQQBOBEAgBEEATgRAIAAgASkDgAQ3AgAgACABKAKIBDYCCAwCCyAAIAEoAoAEIAEoAoQEENQBDAELIAAgASgCgAQgAUGABGogBEEASCIAGyABKAKEBCADIAAbENUBCyAHQQFqIgcgASgC8AQiAEgNAAsLIAUgBSgCHCICNgK4ASACQZmVA0YEQCAFIAX9AALUAf0MAQAAAAEAAAABAAAAAQAAAP2uAf0LAtQBIAUgBSgC5AFBAWo2AuQBIAUgBSgC6AFBAWo2AugBCwJAIAAgAk4NACABQawjNgLgASABIAIgAGs2AuQBIAlB0NAAIAFB4AFqEDIgASgC8AQiByAFKAIcTg0AIAVBzAFqIQogBUG8AWohBiABQYAEakEEciEDA0ACQCAFKALoASIAIAdIBEAgAUG4BGoiAiAHIABrEDggASACQdMlEDkiACgCCDYC0AQgASAAKQIANwPIBCAAQgA3AgAgAEEANgIIIAFByARqQcwmEDYiACgCACECIAEgACgCBDYC+AQgASAAKAAHNgD7BCAAQgA3AgAgAC0ACyEEIABBADYCCCABLACLBEEASARAIAEoAoAEEDELIAEgAjYCgAQgAyABKAD7BDYAAyADIAEoAvgENgIAIAEgBDoAiwQgASwA0wRBAEgEQCABKALIBBAxCyABLADDBEEATg0BIAEoArgEEDEMAQsgBSgC1AEgB0YEQAJ/IAEsAIsEQQBIBEAgAUEHNgKEBCABKAKABAwBCyABQQc6AIsEIAFBgARqCyIAQQA6AAcgAEGsJigAADYAAyAAQakmKAAANgAADAELIAUoAtgBIAdGBEACfyABLACLBEEASARAIAFBBzYChAQgASgCgAQMAQsgAUEHOgCLBCABQYAEagsiAEEAOgAHIABBnCYoAAA2AAMgAEGZJigAADYAAAwBCyAFKALcASAHRgRAAn8gASwAiwRBAEgEQCABQQg2AoQEIAEoAoAEDAELIAFBCDoAiwQgAUGABGoLIgBBADoACCAAQtu+wZLVyNWv3QA3AAAMAQsgBSgC5AEgB0YEQAJ/IAEsAIsEQQBIBEAgAUEHNgKEBCABKAKABAwBCyABQQc6AIsEIAFBgARqCyIAQQA6AAcgAEGkJigAADYAAyAAQaEmKAAANgAADAELIAAgB0YEQAJ/IAEsAIsEQQBIBEAgAUEHNgKEBCABKAKABAwBCyABQQc6AIsEIAFBgARqCyIAQQA6AAcgAEG0JigAADYAAyAAQbEmKAAANgAADAELIAFBuARqIgAgBxA4IAEgAEHEJRA5IgAoAgg2AtAEIAEgACkCADcDyAQgAEIANwIAIABBADYCCCABQcgEakHMJhA2IgAoAgAhAiABIAAoAgQ2AvgEIAEgACgABzYA+wQgAEIANwIAIAAtAAshBCAAQQA2AgggASwAiwRBAEgEQCABKAKABBAxCyABIAI2AoAEIAMgASgA+wQ2AAMgAyABKAL4BDYCACABIAQ6AIsEIAEsANMEQQBIBEAgASgCyAQQMQsgASwAwwRBAE4NACABKAK4BBAxCyABIAFBgARqIgA2ArgEIAFByARqIAYgACABQbgEahDeAiABKALIBCAHNgIcAkACQCAKIgQiACgCACICRQ0AA0AgAiIAKAIQIgIgB0oEQCAAIgQoAgAiAg0BDAILIAIgB04EQCAAIQIMAwsgACgCBCICDQALIABBBGohBAtBIBAzIgIgBzYCECACIAA2AgggAkIANwIAIAJCADcCFCACQQA2AhwgBCACNgIAIAIhACAFKALIASgCACILBEAgBSALNgLIASAEKAIAIQALIAUoAswBIAAQlQEgBSAFKALQAUEBajYC0AELAkAgAkEUaiIAIAFBgARqRg0AIAEtAIsEIgvAIQQgAiwAH0EATgRAIARBAE4EQCAAIAEpA4AENwIAIAAgASgCiAQ2AggMAgsgACABKAKABCABKAKEBBDUAQwBCyAAIAEoAoAEIAFBgARqIARBAEgiABsgASgChAQgCyAAGxDVAQsgB0EBaiIHIAUoAhxIDQALCyABKALYBCIABEAgABAxCyABLACLBEEASARAIAEoAoAEEDELIAUoAjwhByAFKAIsIQMgBSgCHCELIAUoAjQhACAFKAIwIQ4gBSgCICEQIAUoAkAhDyAFKAIkIQQgBSgCECICQQBHIgZBAnQiCkHw5gBqKAIAsyAKQbDnAGooAgCylSEZIAZBAnQiCkHw5gBqKAIAsyAKQbDnAGooAgCylSEbIAJBAnQiCkHw5gBqKAIAsyAKQbDnAGooAgCylSEeQfDmACgCALNBsOcAKAIAspUhGiAKQfDmAGooAgCzIApBsOcAaigCALKVIRwgAUGsIzYC0AECfyAEIARsIgpBA2yyIBuUAn8gBLIiHSAalAJ/IBkgBCAPbEEDbLKUAn8gGiAEIBBsspRDAAAAAJIiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALs5IiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALs5IiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALs5IiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALIRACfyAAsiIfIBqUAn8gACALbLIgHpQCfyAAIA5ssiAalAJ/IB0gGpQiGQJ/IBkCfyAZIBCzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAuzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAuzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAuzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAuzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAuzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAshCwJ/IAOyIhkgGiAdlJQCfyAfIBqUIAuzkiIbQwAAgE9dIBtDAAAAAGBxBEAgG6kMAQtBAAuzkiIbQwAAgE9dIBtDAAAAAGBxBEAgG6kMAQtBAAshCwJ/IBkgHCAEIARBAnQiDmyyIh6UlAJ/IBkgGiAdlJQgC7OSIhtDAACAT10gG0MAAAAAYHEEQCAbqQwBC0EAC7OSIhtDAACAT10gG0MAAAAAYHEEQCAbqQwBC0EACyEEAn8gGSAaIB2UlCIbAn8gGSAcIAqyIiCUlAJ/IBsCfyAbAn8gGwJ/IBkgHCAelJQCfyAZIBogDrKUlCAEs5IiG0MAAIBPXSAbQwAAAABgcQRAIBupDAELQQALs5IiG0MAAIBPXSAbQwAAAABgcQRAIBupDAELQQALs5IiG0MAAIBPXSAbQwAAAABgcQRAIBupDAELQQALs5IiG0MAAIBPXSAbQwAAAABgcQRAIBupDAELQQALs5IiG0MAAIBPXSAbQwAAAABgcQRAIBupDAELQQALs5IiG0MAAIBPXSAbQwAAAABgcQRAIBupDAELQQALs5IiG0MAAIBPXSAbQwAAAABgcQRAIBupDAELQQALIQQCfyAHsiIbIBogH5SUAn8gGSAaIB2UlCIdAn8gGSAcICCUlCIZAn8gHQJ/IBkCfyAZIASzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAuzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAuzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAuzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAuzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAuzkiIZQwAAgE9dIBlDAAAAAGBxBEAgGakMAQtBAAshBAJ/IBsgHCAAQQJ0IgogAGyyIh2UlAJ/IBsgGiAflJQgBLOSIhlDAACAT10gGUMAAAAAYHEEQCAZqQwBC0EAC7OSIhlDAACAT10gGUMAAAAAYHEEQCAZqQwBC0EACyEEAn8gGyAaIB+UlCIZAn8gGyAcIAAgAGyyIh6UlAJ/IBkCfyAZAn8gGQJ/IBsgHCAdlJQCfyAbIBogCrKUlCAEs5IiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALs5IiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALs5IiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALs5IiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALs5IiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALs5IiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALs5IiGUMAAIBPXSAZQwAAAABgcQRAIBmpDAELQQALIQAgAQJ/IBsgGiAflJQiGgJ/IBsgHCAelJQiHAJ/IBoCfyAcAn8gHAJ/IBoCfyAcAn8gGgJ/IBoCfyAaAn8gHAJ/IBoCfyAcAn8gHCAAs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALs5IiGkMAAIBPXSAaQwAAAABgcQRAIBqpDAELQQALIANBD2wgB0EYbGpBCXRqQYA8arhEAAAAAAAAsD6iOQPYASAJQbvcACABQdABahB9IAUoAqQBIgAoAgQhBCAAKAIAIQAgAUEAOgCwBCABIAEoArAENgLIASABIAA2AqwEIAEgBCAAazYCqAQgASABKQOoBDcDwAEgBSABQcABahDPASIANgKgAQJAAkAgAEUEQCABQawjNgIQIAlB5tYAIAFBEGoQMgwBCyAFNAJAISIgBSgCPCEKIAUoAjQhDiAFNAIwISQgBSgCJCEQIAU0AiAhJSAFNAIcISYCQCAFKAIsIgMgBSgCjAEgBSgCiAEiBGtBPG0iAEsEQCADIABrIgQgBSgCkAEiDSAFKAKMASIAa0E8bU0EQCAFIAQEfyAAQQAgBEE8bEE8ayIEIARBPHBrQTxqIgT8CwAgACAEagUgAAs2AowBDAILAkAgACAFKAKIASIHayIPQTxtIhEgBGoiC0HFiJEiSQRAQQAhAEHEiJEiIA0gB2tBPG0iDUEBdCIUIAsgCyAUSRsgDUGixIgRTxsiCwRAIAtBxYiRIk8NAiALQTxsEDMhAAsgEUE8bCAAaiINQQAgBEE8bEE8ayIEIARBPHBrQTxqIgT8CwAgDSAPQURtQTxsaiIRIAcgD/wKAAAgBSAAIAtBPGxqNgKQASAFIAQgDWo2AowBIAUgETYCiAEgBwRAIAcQMQsMAwsMDAsQWwALIAAgA00NACAFIAQgA0E8bGo2AowBCwJAIAUoApgBIAUoApQBIgRrQeAAbSIAIApJBEAgCiAAayIEIAUoApwBIg0gBSgCmAEiAGtB4ABtTQRAIAUgBAR/IABBACAEQeAAbEHgAGsiBCAEQeAAcGtB4ABqIgT8CwAgACAEagUgAAs2ApgBDAILAkAgACAFKAKUASIHayIPQeAAbSIRIARqIgtBq9WqFUkEQEEAIQBBqtWqFSANIAdrQeAAbSINQQF0IhQgCyALIBRJGyANQdWq1QpPGyILBEAgC0Gr1aoVTw0CIAtB4ABsEDMhAAsgEUHgAGwgAGoiDUEAIARB4ABsQeAAayIEIARB4ABwa0HgAGoiBPwLACANIA9BoH9tQeAAbGoiESAHIA/8CgAAIAUgACALQeAAbGo2ApwBIAUgBCANajYCmAEgBSARNgKUASAHBEAgBxAxCwwDCwwMCxBbAAsgACAKTQ0AIAUgBCAKQeAAbGo2ApgBCyAFIAUoAqABQQAgEKwiISAlEFQ2AlwgBSAFKAKgASAGQgMgIiAhEKwBNgJgIAUgBSgCoAFBAEIBICEQVDYCZCAFIAUoAqABIAZCAyAhICEQrAE2AmggBSAFKAKgAUEAQgEgIRBUNgJsIAUgBSgCoAFBACAhEEk2AnAgBSAFKAKgAUEAICEQSTYCdCAFKAJcIQcgAUEgEDMiADYCgAQgAUKcgICAgISAgIB/NwKEBCAAQescKAAANgAYIABB4xwpAAA3ABAgAEHTHP0AAAD9CwAAIABBADoAHCABIAFBgARqIgA2AsgEIAFB2ARqIAVBrAFqIgQgACABQcgEahA6IAEoAtgEIAc2AhwgASwAiwRBAEgEQCABKAKABBAxCyAFKAJgIQcgAUEgEDMiADYCgAQgAUKUgICAgISAgIB/NwKEBCAAQbIOKAAANgAQIABBog79AAAA/QsAACAAQQA6ABQgASABQYAEaiIANgLIBCABQdgEaiAEIAAgAUHIBGoQOiABKALYBCAHNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgBSgCZCEHIAFBIBAzIgA2AoAEIAFCkoCAgICEgICAfzcChAQgAEHNEi8AADsAECAAQb0S/QAAAP0LAAAgAEEAOgASIAEgAUGABGoiADYCyAQgAUHYBGogBCAAIAFByARqEDogASgC2AQgBzYCHCABLACLBEEASARAIAEoAoAEEDELIAUoAmghByABQSAQMyIANgKABCABQpSAgICAhICAgH83AoQEIABBjw4oAAA2ABAgAEH/Df0AAAD9CwAAIABBADoAFCABIAFBgARqIgA2AsgEIAFB2ARqIAQgACABQcgEahA6IAEoAtgEIAc2AhwgASwAiwRBAEgEQCABKAKABBAxCyAFKAJsIQcgAUEgEDMiADYCgAQgAUKSgICAgISAgIB/NwKEBCAAQa4SLwAAOwAQIABBnhL9AAAA/QsAACAAQQA6ABIgASABQYAEaiIANgLIBCABQdgEaiAEIAAgAUHIBGoQOiABKALYBCAHNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgBSgCcCEHIAFBIBAzIgA2AoAEIAFCloCAgICEgICAfzcChAQgAEHkDCkAADcADiAAQdYM/QAAAP0LAAAgAEEAOgAWIAEgAUGABGoiADYCyAQgAUHYBGogBCAAIAFByARqEDogASgC2AQgBzYCHCABLACLBEEASARAIAEoAoAEEDELIAUoAnQhByABQSAQMyIANgKABCABQpSAgICAhICAgH83AoQEIABBshEoAAA2ABAgAEGiEf0AAAD9CwAAIABBADoAFCABIAFBgARqIgA2AsgEIAFB2ARqIAQgACABQcgEahA6IAEoAtgEIAc2AhwgASwAiwRBAEgEQCABKAKABBAxCyADQQBKBEAgEEECdKwhIkEAIQcDQCAFKAKIASAHQTxsaiIAIAUoAqABQQAgIRBJNgIkIAAgBSgCoAFBACAhEEk2AiggACAFKAKgASACICEgIhBUNgIsIAAgBSgCoAFBACAiEEk2AjAgACAFKAKgASACICIgIRBUNgI0IAAgBSgCoAFBACAhEEk2AjggACAFKAKgAUEAICEQSTYCACAAIAUoAqABQQAgIRBJNgIEIAAgBSgCoAEgAiAhICEQVDYCECAAIAUoAqABQQAgIRBJNgIUIAAgBSgCoAEgAiAhICEQVDYCGCAAIAUoAqABIAIgISAhEFQ2AhwgACAFKAKgAUEAICEQSTYCICAAIAUoAqABIAIgISAhEFQ2AgggACAFKAKgAUEAICEQSTYCDCAAKAIkIQsgAUHIBGoiBiAHEDggASAGQfM2EDkiBigCCDYC4AQgASAGKQIANwPYBCAGQgA3AgAgBkEANgIIIAEgAUHYBGpB7QwQNiIGKAIINgKIBCABIAYpAgA3A4AEIAZCADcCACAGQQA2AgggASABQYAEaiIGNgL4BCABQbgEaiAEIAYgAUH4BGoQOiABKAK4BCALNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAighCyABQcgEaiIGIAcQOCABIAZB8zYQOSIGKAIINgLgBCABIAYpAgA3A9gEIAZCADcCACAGQQA2AgggASABQdgEakG3ERA2IgYoAgg2AogEIAEgBikCADcDgAQgBkIANwIAIAZBADYCCCABIAFBgARqIgY2AvgEIAFBuARqIAQgBiABQfgEahA6IAEoArgEIAs2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCLCELIAFByARqIgYgBxA4IAEgBkHzNhA5IgYoAgg2AuAEIAEgBikCADcD2AQgBkIANwIAIAZBADYCCCABIAFB2ARqQbcOEDYiBigCCDYCiAQgASAGKQIANwOABCAGQgA3AgAgBkEANgIIIAEgAUGABGoiBjYC+AQgAUG4BGogBCAGIAFB+ARqEDogASgCuAQgCzYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAAKAIwIQsgAUHIBGoiBiAHEDggASAGQfM2EDkiBigCCDYC4AQgASAGKQIANwPYBCAGQgA3AgAgBkEANgIIIAEgAUHYBGpB0BIQNiIGKAIINgKIBCABIAYpAgA3A4AEIAZCADcCACAGQQA2AgggASABQYAEaiIGNgL4BCABQbgEaiAEIAYgAUH4BGoQOiABKAK4BCALNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAjQhCyABQcgEaiIGIAcQOCABIAZB8zYQOSIGKAIINgLgBCABIAYpAgA3A9gEIAZCADcCACAGQQA2AgggASABQdgEakGUDhA2IgYoAgg2AogEIAEgBikCADcDgAQgBkIANwIAIAZBADYCCCABIAFBgARqIgY2AvgEIAFBuARqIAQgBiABQfgEahA6IAEoArgEIAs2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCOCELIAFByARqIgYgBxA4IAEgBkHzNhA5IgYoAgg2AuAEIAEgBikCADcD2AQgBkIANwIAIAZBADYCCCABIAFB2ARqQbESEDYiBigCCDYCiAQgASAGKQIANwOABCAGQgA3AgAgBkEANgIIIAEgAUGABGoiBjYC+AQgAUG4BGogBCAGIAFB+ARqEDogASgCuAQgCzYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAAKAIAIQsgAUHIBGoiBiAHEDggASAGQfM2EDkiBigCCDYC4AQgASAGKQIANwPYBCAGQgA3AgAgBkEANgIIIAEgAUHYBGpBkg0QNiIGKAIINgKIBCABIAYpAgA3A4AEIAZCADcCACAGQQA2AgggASABQYAEaiIGNgL4BCABQbgEaiAEIAYgAUH4BGoQOiABKAK4BCALNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAgQhCyABQcgEaiIGIAcQOCABIAZB8zYQOSIGKAIINgLgBCABIAYpAgA3A9gEIAZCADcCACAGQQA2AgggASABQdgEakHYERA2IgYoAgg2AogEIAEgBikCADcDgAQgBkIANwIAIAZBADYCCCABIAFBgARqIgY2AvgEIAFBuARqIAQgBiABQfgEahA6IAEoArgEIAs2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCECELIAFByARqIgYgBxA4IAEgBkHzNhA5IgYoAgg2AuAEIAEgBikCADcD2AQgBkIANwIAIAZBADYCCCABIAFB2ARqQfMLEDYiBigCCDYCiAQgASAGKQIANwOABCAGQgA3AgAgBkEANgIIIAEgAUGABGoiBjYC+AQgAUG4BGogBCAGIAFB+ARqEDogASgCuAQgCzYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAAKAIUIQsgAUHIBGoiBiAHEDggASAGQfM2EDkiBigCCDYC4AQgASAGKQIANwPYBCAGQgA3AgAgBkEANgIIIAEgAUHYBGpB7RAQNiIGKAIINgKIBCABIAYpAgA3A4AEIAZCADcCACAGQQA2AgggASABQYAEaiIGNgL4BCABQbgEaiAEIAYgAUH4BGoQOiABKAK4BCALNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAhghCyABQcgEaiIGIAcQOCABIAZB8zYQOSIGKAIINgLgBCABIAYpAgA3A9gEIAZCADcCACAGQQA2AgggASABQdgEakGdDBA2IgYoAgg2AogEIAEgBikCADcDgAQgBkIANwIAIAZBADYCCCABIAFBgARqIgY2AvgEIAFBuARqIAQgBiABQfgEahA6IAEoArgEIAs2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCHCELIAFByARqIgYgBxA4IAEgBkHzNhA5IgYoAgg2AuAEIAEgBikCADcD2AQgBkIANwIAIAZBADYCCCABIAFB2ARqQewNEDYiBigCCDYCiAQgASAGKQIANwOABCAGQgA3AgAgBkEANgIIIAEgAUGABGoiBjYC+AQgAUG4BGogBCAGIAFB+ARqEDogASgCuAQgCzYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgE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NgIIIAEgAUHYBGpB7QwQNiIDKAIINgKIBCABIAMpAgA3A4AEIANCADcCACADQQA2AgggASABQYAEaiIDNgL4BCABQbgEaiAEIAMgAUH4BGoQOiABKAK4BCAGNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAkwhBiABQcgEaiIDIAcQOCABIANBgzcQOSIDKAIINgLgBCABIAMpAgA3A9gEIANCADcCACADQQA2AgggASABQdgEakG3ERA2IgMoAgg2AogEIAEgAykCADcDgAQgA0IANwIAIANBADYCCCABIAFBgARqIgM2AvgEIAFBuARqIAQgAyABQfgEahA6IAEoArgEIAY2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCUCEGIAFByARqIgMgBxA4IAEgA0GDNxA5IgMoAgg2AuAEIAEgAykCADcD2AQgA0IANwIAIANBADYCCCABIAFB2ARqQbcOEDYiAygCCDYCiAQgASADKQIANwOABCADQgA3AgAgA0EANgIIIAEgAUGABGoiAzYC+AQgAUG4BGogBCADIAFB+ARqEDogASgCuAQgBjYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAAKAJUIQYgAUHIBGoiAyAHEDggASADQYM3EDkiAygCCDYC4AQgASADKQIANwPYBCADQgA3AgAgA0EANgIIIAEgAUHYBGpB0BIQNiIDKAIINgKIBCABIAMpAgA3A4AEIANCADcCACADQQA2AgggASABQYAEaiIDNgL4BCABQbgEaiAEIAMgAUH4BGoQOiABKAK4BCAGNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAlghBiABQcgEaiIDIAcQOCABIANBgzcQOSIDKAIINgLgBCABIAMpAgA3A9gEIANCADcCACADQQA2AgggASABQdgEakGUDhA2IgMoAgg2AogEIAEgAykCADcDgAQgA0IANwIAIANBADYCCCABIAFBgARqIgM2AvgEIAFBuARqIAQgAyABQfgEahA6IAEoArgEIAY2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCXCEGIAFByARqIgMgBxA4IAEgA0GDNxA5IgMoAgg2AuAEIAEgAykCADcD2AQgA0IANwIAIANBADYCCCABIAFB2ARqQbESEDYiAygCCDYCiAQgASADKQIANwOABCADQgA3AgAgA0EANgIIIAEgAUGABGoiAzYC+AQgAUG4BGogBCADIAFB+ARqEDogASgCuAQgBjYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAAKAIAIQYgAUHIBGoiAyAHEDggASADQYM3EDkiAygCCDYC4AQgASADKQIANwPYBCADQgA3AgAgA0EANgIIIAEgAUHYBGpBkg0QNiIDKAIINgKIBCABIAMpAgA3A4AEIANCADcCACADQQA2AgggASABQYAEaiIDNgL4BCABQbgEaiAEIAMgAUH4BGoQOiABKAK4BCAGNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAgQhBiABQcgEaiIDIAcQOCABIANBgzcQOSIDKAIINgLgBCABIAMpAgA3A9gEIANCADcCACADQQA2AgggASABQdgEakHYERA2IgMoAgg2AogEIAEgAykCADcDgAQgA0IANwIAIANBADYCCCABIAFBgARqIgM2AvgEIAFBuARqIAQgAyABQfgEahA6IAEoArgEIAY2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCECEGIAFByARqIgMgBxA4IAEgA0GDNxA5IgMoAgg2AuAEIAEgAykCADcD2AQgA0IANwIAIANBADYCCCABIAFB2ARqQfMLEDYiAygCCDYCiAQgASADKQIANwOABCADQgA3AgAgA0EANgIIIAEgAUGABGoiAzYC+AQgAUG4BGogBCADIAFB+ARqEDogASgCuAQgBjYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAAKAIUIQYgAUHIBGoiAyAHEDggASADQYM3EDkiAygCCDYC4AQgASADKQIANwPYBCADQgA3AgAgA0EANgIIIAEgAUHYBGpB7RAQNiIDKAIINgKIBCABIAMpAgA3A4AEIANCADcCACADQQA2AgggASABQYAEaiIDNgL4BCABQbgEaiAEIAMgAUH4BGoQOiABKAK4BCAGNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAhghBiABQcgEaiIDIAcQOCABIANBgzcQOSIDKAIINgLgBCABIAMpAgA3A9gEIANCADcCACADQQA2AgggASABQdgEakGdDBA2IgMoAgg2AogEIAEgAykCADcDgAQgA0IANwIAIANBADYCCCABIAFBgARqIgM2AvgEIAFBuARqIAQgAyABQfgEahA6IAEoArgEIAY2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCHCEGIAFByARqIgMgBxA4IAEgA0GDNxA5IgMoAgg2AuAEIAEgAykCADcD2AQgA0IANwIAIANBADYCCCABIAFB2ARqQewNEDYiAygCCDYCiAQgASADKQIANwOABCADQgA3AgAgA0EANgIIIAEgAUGABGoiAzYC+AQgAUG4BGogBCADIAFB+ARqEDogASgCuAQgBjYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAAKAIgIQYgAUHIBGoiAyAHEDggASADQYM3EDkiAygCCDYC4AQgASADKQIANwPYBCADQgA3AgAgA0EANgIIIAEgAUHYBGpBjRIQNiIDKAIINgKIBCABIAMpAgA3A4AEIANCADcCACADQQA2AgggASABQYAEaiIDNgL4BCABQbgEaiAEIAMgAUH4BGoQOiABKAK4BCAGNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAgghBiABQcgEaiIDIAcQOCABIANBgzcQOSIDKAIINgLgBCABIAMpAgA3A9gEIANCADcCACADQQA2AgggASABQdgEakHFDBA2IgMoAgg2AogEIAEgAykCADcDgAQgA0IANwIAIANBADYCCCABIAFBgARqIgM2AvgEIAFBuARqIAQgAyABQfgEahA6IAEoArgEIAY2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCDCEGIAFByARqIgMgBxA4IAEgA0GDNxA5IgMoAgg2AuAEIAEgAykCADcD2AQgA0IANwIAIANBADYCCCABIAFB2ARqQZMREDYiAygCCDYCiAQgASADKQIANwOABCADQgA3AgAgA0EANgIIIAEgAUGABGoiAzYC+AQgAUG4BGogBCADIAFB+ARqEDogASgCuAQgBjYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAAKAIkIQYgAUHIBGoiAyAHEDggASADQYM3EDkiAygCCDYC4AQgASADKQIANwPYBCADQgA3AgAgA0EANgIIIAEgAUHYBGpB/AwQNiIDKAIINgKIBCABIAMpAgA3A4AEIANCADcCACADQQA2AgggASABQYAEaiIDNgL4BCABQbgEaiAEIAMgAUH4BGoQOiABKAK4BCAGNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAighBiABQcgEaiIDIAcQOCABIANBgzcQOSIDKAIINgLgBCABIAMpAgA3A9gEIANCADcCACADQQA2AgggASABQdgEakHEERA2IgMoAgg2AogEIAEgAykCADcDgAQgA0IANwIAIANBADYCCCABIAFBgARqIgM2AvgEIAFBuARqIAQgAyABQfgEahA6IAEoArgEIAY2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCNCEGIAFByARqIgMgBxA4IAEgA0GDNxA5IgMoAgg2AuAEIAEgAykCADcD2AQgA0IANwIAIANBADYCCCABIAFB2ARqQdoLEDYiAygCCDYCiAQgASADKQIANwOABCADQgA3AgAgA0EANgIIIAEgAUGABGoiAzYC+AQgAUG4BGogBCADIAFB+ARqEDogASgCuAQgBjYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAAKAI4IQYgAUHIBGoiAyAHEDggASADQYM3EDkiAygCCDYC4AQgASADKQIANwPYBCADQgA3AgAgA0EANgIIIAEgAUHYBGpB1hAQNiIDKAIINgKIBCABIAMpAgA3A4AEIANCADcCACADQQA2AgggASABQYAEaiIDNgL4BCABQbgEaiAEIAMgAUH4BGoQOiABKAK4BCAGNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAjwhBiABQcgEaiIDIAcQOCABIANBgzcQOSIDKAIINgLgBCABIAMpAgA3A9gEIANCADcCACADQQA2AgggASABQdgEakGGDBA2IgMoAgg2AogEIAEgAykCADcDgAQgA0IANwIAIANBADYCCCABIAFBgARqIgM2AvgEIAFBuARqIAQgAyABQfgEahA6IAEoArgEIAY2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgAEFAaygCACEGIAFByARqIgMgBxA4IAEgA0GDNxA5IgMoAgg2AuAEIAEgAykCADcD2AQgA0IANwIAIANBADYCCCABIAFB2ARqQdMNEDYiAygCCDYCiAQgASADKQIANwOABCADQgA3AgAgA0EANgIIIAEgAUGABGoiAzYC+AQgAUG4BGogBCADIAFB+ARqEDogASgCuAQgBjYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAAKAJEIQYgAUHIBGoiAyAHEDggASADQYM3EDkiAygCCDYC4AQgASADKQIANwPYBCADQgA3AgAgA0EANgIIIAEgAUHYBGpB9hEQNiIDKAIINgKIBCABIAMpAgA3A4AEIANCADcCACADQQA2AgggASABQYAEaiIDNgL4BCABQbgEaiAEIAMgAUH4BGoQOiABKAK4BCAGNgIcIAEsAIsEQQBIBEAgASgCgAQQMQsgASwA4wRBAEgEQCABKALYBBAxCyABLADTBEEASARAIAEoAsgEEDELIAAoAiwhBiABQcgEaiIDIAcQOCABIANBgzcQOSIDKAIINgLgBCABIAMpAgA3A9gEIANCADcCACADQQA2AgggASABQdgEakGuDBA2IgMoAgg2AogEIAEgAykCADcDgAQgA0IANwIAIANBADYCCCABIAFBgARqIgM2AvgEIAFBuARqIAQgAyABQfgEahA6IAEoArgEIAY2AhwgASwAiwRBAEgEQCABKAKABBAxCyABLADjBEEASARAIAEoAtgEEDELIAEsANMEQQBIBEAgASgCyAQQMQsgACgCMCEDIAFByARqIgAgBxA4IAEgAEGDNxA5IgAoAgg2AuAEIAEgACkCADcD2AQgAEIANwIAIABBADYCCCABIAFB2ARqQf4QEDYiACgCCDYCiAQgASAAKQIANwOABCAAQgA3AgAgAEEANgIIIAEgAUGABGoiADYC+AQgAUG4BGogBCAAIAFB+ARqEDogASgCuAQgAzYCHCABLACLBEEASARAIAEoAoAEEDELIAEsAOMEQQBIBEAgASgC2AQQMQsgASwA0wRBAEgEQCABKALIBBAxCyAHQQFqIgcgCkcNAAsLIAVBADYCqAEgBUGwAWohBkEAIQMDQCAIKAIgIAFBoARqQQQgCCgCJBEDABogCCgCICABQZwEakEEIAgoAiQRAwAaIAgoAiAgAUGYBGpBBCAIKAIkEQMAGgJAAkACQCAIKAIgIAgoAigRAQAEQCABQawjNgJAIAEgA7hEAAAAAAAAUD+iRAAAAAAAAFA/ojkDSCAJQZ3cACABQUBrEH0gBSgCqAEiAA0BIAFBrCM2AiAgCUGz0wAgAUEgahAyDAcLQQAhACABQcCIAf0ABAD9CwSABEEBIQIgASgCoARBAEoNAQwCCyAAIAUoArQBIgJGDQUgASAANgI4IAEgAjYCNCABQawjNgIwIAlB/tYAIAFBMGoQMgwDCwNAIAgoAiAgAUGABGogAEECdGoiCkEEIAgoAiQRAwAaIAooAgAgAmwhAiAAQQFqIgAgASgCoARIDQALC0EAIQogAUEANgLgBCABQgA3A9gEIAFBADYC0AQgAUIANwPIBEEAIQAgASgCnAQiBwRAIAdBAEgNCyABIAcQMyIANgLIBCABIAAgB2oiCjYC0AQgAEEAIAf8CwAgASAKNgLMBAsgCCgCICAAIAogAGsiCiAIKAIkEQMAGiABQdgEaiIHIAAgChCRAgJ/IAQgBxCBAiAGRgRAIAFBrCM2AlAgASABKALYBCABQdgEaiABLADjBEEASBs2AlQgCUHm1AAgAUHQAGoQMkEADAELIAEoAtgEIAFB2ARqIAEsAOMEQQBIGyILEGUiAEHw////B08NAwJAAkAgAEELTwRAIABBD3JBAWoiChAzIQcgASAKQYCAgIB4cjYCwAQgASAHNgK4BCABIAA2ArwEIAAgB2ohCgwBCyABIAA6AMMEIAFBuARqIgcgAGohCiAARQ0BCyAHIAsgAPwKAAALIApBADoAACABIAFBuARqIgA2AvAEIAFB+ARqIAQgACABQfAEahA6IAEoAvgEKAIcIQAgASwAwwRBAEgEQCABKAK4BBAxCyACrCAAKQMoIAApAyAgACkDGCAAKQMQfn5+UgRAIAFBrCM2ArABIAEgASgC2AQgAUHYBGogASwA4wRBAEgbNgK0ASAJQbjUACABQbABahAyIAApAyAhISAAKQMYISIgASAAKQMQPgKgASABICI+AqQBIAEgIT4CqAEgAUGsIzYCkAEgASABKAKABDYClAEgASABKQKEBDcDmAEgCUGw2wAgAUGQAWoQMkEADAELIAApAxghISABKAKEBCEKAkACQCAAKQMQIiIgASgCgAQiB6xSDQAgISAKrFINACAAKQMgIAE0AogEUQ0BCyABIAApAyA+AoABIAEgBzYChAEgASAKNgKIASABIAEoAogENgKMASABQawjNgJwIAEgASgC2AQgAUHYBGogASwA4wRBAEgbNgJ0IAEgIj4CeCABICE+AnwgCUHY2gAgAUHwAGoQMkEADAELIAIgASgCmARBAnRB8OYAaigCAGwiAiAAKAIAQQJ0QbDnAGooAgBuIAAQeUcEQCABKALYBCEKIAEsAOMEIQcgABB5IQAgASACNgJsIAEgADYCaCABQawjNgJgIAEgCiABQdgEaiAHQQBIGzYCZCAJQYvQACABQeAAahAyQQAMAQsgCCgCJCECIAgoAiAgACgCgAEgABB5IAIRAwAa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NgLMASAAIAE2AsgBIARFDQAgBBAxIAUoArgBIQILAkAgACgC3AEgACgC1AEiBGtBAnUgAk8NACACQYCAgIAETw0JIAAoAtgBIQggAkECdCIJEDMiASAEIAggBGsiCPwKAAAgACABIAlqNgLcASAAIAEgCGo2AtgBIAAgATYC1AEgBEUNACAEEDEgBSgCuAEhAgsCQCAAKALoASAAKALgASIEa0ECdSACTw0AIAJBgICAgARPDQkgACgC5AEhASACQQJ0IggQMyICIAQgASAEayIB/AoAACAAIAIgCGo2AugBIAAgASACajYC5AEgACACNgLgASAERQ0AIAQQMQtBqLErKAIAIgRFDQIgBSgCGCEBAkADQCAEKAIQIgIgAUoEQCAEKAIAIgQNAQwFCyABIAJMDQEgBCgCBCIEDQALDAMLQbSxKygCACICRQ0CAkADQCACKAIQIgggAUoEQCACKAIAIgINAQwFCyABIAhMDQEgAigCBCICDQALDAMLAkAgBCgCFCIEIAIoAhQiAiACIARJGyAHbCICIABB7BJqKAIAIgcgACgC6BIiBGsiAUsEQCACIAFrIgggAEHwEmooAgAiCSAHa00EQCAHQQAgCPwLACAAIAcgCGo2AuwSDAILIAJBAEgNBUH/////ByAJIARrIgdBAXQiCSACIAIgCUkbIAdB/////wNPGyIJEDMiByABakEAIAj8CwAgByAEIAH8CgAAIAAgByAJajYC8BIgACACIAdqNgLsEiAAIAc2AugSIARFDQEgBBAxDAELIAEgAk0NACAAIAIgBGo2AuwSC0HUsCsoAgAiAkUNAiAFKAIYIQQCQANAIAIoAhAiASAESgRAIAIoAgAiAg0BDAULIAEgBE4NASACKAIEIgINAAsMAwsCQCACKAIUIgIgAEH4EmooAgAiByAAKAL0EiIEayIBSwRAIAIgAWsiCCAAQfwSaigCACIJIAdrTQRAIAdBACAI/AsAIAAgByAIajYC+BIMAgsgAkEASA0FQf////8HIAkgBGsiB0EBdCIJIAIgAiAJSRsgB0H/////A08bIgkQMyIHIAFqQQAgCPwLACAHIAQgAfwKAAAgACAHIAlqNgL8EiAAIAIgB2o2AvgSIAAgBzYC9BIgBEUNASAEEDEMAQsgASACTQ0AIAAgAiAEajYC+BILQeCwKygCACICRQ0C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/AsAQdqJA0EAQfgA/AgTAEHSigNBAEHkAPwLAEG2iwNBAEG6CPwIFABB8JMDQQBB1AD8CBUAQcSUA0EAQTz8CwBBgJUDQQBB2QD8CBYAQdmVA0EAQT/8CwBBmJYDQQBBEPwIFwBBsJYDQQBByMMo/AsAQfjZK0EC/hcCAEH42StBf/4AAgAaDAELQfjZK0EBQn/+AQIAGgv8CQD8CQH8CQL8CQP8CQT8CQX8CQb8CQf8CQj8CQn8CQr8CQv8CQz8CQ38CQ78CQ/8CRD8CRH8CRL8CRP8CRT8CRX8CRb8CRcLC8b0AhgBllzima8A4pmuAOKZrQDimawA4pmrAOKZquKZquKZqgDimakA44CPAOOAjgDjgI0A44CMAHoAaW5maW5pdHkARmVicnVhcnkASmFudWFyeQBKdWx5AG1hbGF5AFRodXJzZGF5AFR1ZXNkYXkAV2VkbmVzZGF5AFNhdHVyZGF5AFN1bmRheQBNb25kYXkARnJpZGF5AE1heQAlbS8lZC8leQAhIWt2X3NlbGYuY3R4AGNhY2hlLmN0eABzaXgAJXMgZmFpbGVkIHRvIHJlbGVhc2UgbXV0ZXgAJXMgZmFpbGVkIHRvIGFjcXVpcmUgbXV0ZXgAY2lyY3VtZmxleAAtKyAgIDBYMHgALTBYKzBYIDBYLTB4KzB4IDB4AGhlYnJldwBoYXcATm92AFRodQB0ZWx1Z3UAQXVndXN0ACVzIGZhaWxlZCB0byBicm9hZGNhc3QAdW5zaWduZWQgc2hvcnQAYWxlcnQAcHJpbnQAdW5zaWduZWQgaW50AGNpcmN1bWZsZXgtYWNjZW50AGdyYXZlLWFjY2VudABmdWxsX2RlZmF1bHQAa3ZfY2FjaGVfcmVpbml0AGt2X2NhY2hlX2luaXQAeGRpZ2l0AC5jcm9zc19hdHRuLnF1ZXJ5LndlaWdodAAuYXR0bi5xdWVyeS53ZWlnaHQALmNyb3NzX2F0dG4ua2V5LndlaWdodAAuYXR0bi5rZXkud2VpZ2h0AC5jcm9zc19hdHRuLm91dC53ZWlnaHQALmF0dG4ub3V0LndlaWdodABlbmNvZGVyLmxuX3Bvc3Qud2VpZ2h0AC5tbHBfbG4ud2VpZ2h0AC5jcm9zc19hdHRuX2xuLndlaWdodAAuYXR0bl9sbi53ZWlnaHQAZGVjb2Rlci5sbi53ZWlnaHQAZGVjb2Rlci50b2tlbl9lbWJlZGRpbmcud2VpZ2h0AC5jcm9zc19hdHRuLnZhbHVlLndlaWdodAAuYXR0bi52YWx1ZS53ZWlnaHQAZW5jb2Rlci5jb252Mi53ZWlnaHQALm1scC4yLndlaWdodABlbmNvZGVyLmNvbnYxLndlaWdodAAubWxwLjAud2VpZ2h0AHNldAByaWdodC1jdXJseS1icmFja2V0AGxlZnQtY3VybHktYnJhY2tldAByaWdodC1zcXVhcmUtYnJhY2tldABsZWZ0LXNxdWFyZS1icmFja2V0AHB1bmN0AE9jdABmbG9hdABTYXQAY29tbWVyY2lhbC1hdAB1aW50NjRfdABoeXBoZW4tbWludXMAcmV2ZXJzZS1zb2xpZHVzAHdoaXNwZXJfZXhwX2NvbXB1dGVfdG9rZW5fbGV2ZWxfdGltZXN0YW1wcwBhZnJpa2FhbnMAcGFyYW1zAHJpZ2h0LXBhcmVudGhlc2lzAGxlZnQtcGFyZW50aGVzaXMAd2hpc3Blcl9wcmludF90aW1pbmdzAC5jcm9zc19hdHRuLnF1ZXJ5LmJpYXMALmF0dG4ucXVlcnkuYmlhcwAuY3Jvc3NfYXR0bi5vdXQuYmlhcwAuYXR0bi5vdXQuYmlhcwBlbmNvZGVyLmxuX3Bvc3QuYmlhcwAubWxwX2xuLmJpYXMALmNyb3NzX2F0dG5fbG4uYmlhcwAuYXR0bl9sbi5iaWFzAGRlY29kZXIubG4uYmlhcwAuY3Jvc3NfYXR0bi52YWx1ZS5iaWFzAC5hdHRuLnZhbHVlLmJpYXMAZW5jb2Rlci5jb252Mi5iaWFzAC5tbHAuMi5iaWFzAGVuY29kZXIuY29udjEuYmlhcwAubWxwLjAuYmlhcwAlcwBmb3VyAHdoaXNwZXJfbGFuZ19zdHIAQXByAGNvbnN0cnVjdG9yAHZlY3RvcgBjZ3JhcGgtPm5vZGVzW2NncmFwaC0+bl9ub2RlcyAtIDFdID09IHRlbnNvcgBiYXNoa2lyAGxvd2VyAHVwcGVyAGtobWVyAGJ1ZmZlcgBPY3RvYmVyAE5vdmVtYmVyAFNlcHRlbWJlcgBEZWNlbWJlcgB0YXRhcgBteWFubWFyAHVuc2lnbmVkIGNoYXIAaW9zX2Jhc2U6OmNsZWFyAE1hcgBxAC9Vc2Vycy9nZ2VyZ2Fub3YvZGV2ZWxvcG1lbnQvZ2l0aHViL3doaXNwZXIuY3BwL3doaXNwZXIuY3BwAGZ1bGwtc3RvcABTZXAAJUk6JU06JVMgJXAAdHdvAGF1dG8AcGFzaHRvAHplcm8AbGFvAFN1bgBKdW4AY2FycmlhZ2UtcmV0dXJuAGJyZXRvbgBzZW1pY29sb24Ac3RkOjpleGNlcHRpb24AX19jeGFfZ3VhcmRfYWNxdWlyZSBkZXRlY3RlZCByZWN1cnNpdmUgaW5pdGlhbGl6YXRpb24ATW9uAGxhdGluAHBlcmNlbnQtc2lnbgBwbHVzLXNpZ24AZXF1YWxzLXNpZ24AbnVtYmVyLXNpZ24AZG9sbGFyLXNpZ24AbGVzcy10aGFuLXNpZ24AZ3JlYXRlci10aGFuLXNpZ24Ac2V2ZW4AdHVya21lbgBoeXBoZW4Ab2NjaXRhbgB0aWJldGFuAG5hbgBnZXJtYW4AY2F0YWxhbgBsYXR2aWFuAGJlbGFydXNpYW4AcnVzc2lhbgBwZXJzaWFuAGluZG9uZXNpYW4AaHVuZ2FyaWFuAGJ1bGdhcmlhbgBib3NuaWFuAG1hY2Vkb25pYW4AdWtyYWluaWFuAHNsb3ZlbmlhbgBsaXRodWFuaWFuAG1vbmdvbGlhbgBpdGFsaWFuAG5vcndlZ2lhbgBzZXJiaWFuAGtvcmVhbgBKYW4AYWxudW0AbWFsYXlhbGFtAEp1bABjbnRybABnZ21sX25ld190ZW5zb3JfaW1wbABib29sAGxsAEFwcmlsAHRhbWlsAGVtc2NyaXB0ZW46OnZhbABueW5vcnNrAGFzdGVyaXNrAHF1ZXN0aW9uLW1hcmsAcXVvdGF0aW9uLW1hcmsAZXhjbGFtYXRpb24tbWFyawBibGFuawB0YWppawBncmVlawB1emJlawBzbG92YWsAagBtYW9yaQBGcmkAYXplcmJhaWphbmkAc3dhaGlsaQBuZXBhbGkAc29tYWxpAGJlbmdhbGkAbWFyYXRoaQBzaW5kaGkAaGluZGkAcHVuamFiaQBiYWRfYXJyYXlfbmV3X2xlbmd0aAB3ZWxzaABmaW5uaXNoAHNwYW5pc2gAZGFuaXNoAHBvbGlzaABlbmdsaXNoAHR1cmtpc2gAbHV4ZW1ib3VyZ2lzaABzd2VkaXNoAHlpZGRpc2gAYmFja3NsYXNoAGdyYXBoAGthemFraABkdXRjaABNYXJjaABmcmVuY2gAY3plY2gAQXVnAHRhZ2Fsb2cAdW5zaWduZWQgbG9uZwB0ZXJtaW5hdGluZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGVuY29kZXIucG9zaXRpb25hbF9lbWJlZGRpbmcAZGVjb2Rlci5wb3NpdGlvbmFsX2VtYmVkZGluZwBpbmYAJS4wTGYAJUxmAGlkKnNpemVvZihnZ21sX2ZwMTZfdCkgPD0gcGFyYW1zLT53c2l6ZQB3aGlzcGVyX3Rva2VuaXplAGZpdmUAdHJ1ZQBiYXNxdWUAVHVlAHdoaXNwZXJfaW5pdF9zdGF0ZQB3aGlzcGVyX2luaXRfbm9fc3RhdGUAd2hpc3Blcl9pbml0X2Zyb21fZmlsZV9ub19zdGF0ZQB3aGlzcGVyX2xhbmdfYXV0b19kZXRlY3Rfd2l0aF9zdGF0ZQB3aGlzcGVyX2Z1bGxfd2l0aF9zdGF0ZQB0cmFuc2xhdGUAZmFsc2UAcG9ydHVndWVzZQBtYWx0ZXNlAGZhcm9lc2UAY2hpbmVzZQBzdW5kYW5lc2UAdmlldG5hbWVzZQBfX2N4YV9ndWFyZF9yZWxlYXNlAHVuZGVyc2NvcmUAX19jeGFfZ3VhcmRfYWNxdWlyZQB3dHlwZSA9PSBjYWNoZS52LT50eXBlAHNyYzAtPnR5cGUgPT0gZHN0LT50eXBlAGRzdC0+dHlwZSA9PSBzcmMwLT50eXBlAFVua25vd24gZXJyb3IgdHlwZQBKdW5lAG9uZQBuaW5lAG5ld2xpbmUAbG93LWxpbmUAdmVydGljYWwtbGluZQBoYWl0aWFuIGNyZW9sZQBkb3VibGUAYXBvc3Ryb3BoZQB0aHJlZQBmcmVlAHRpbGRlAHJpZ2h0LWJyYWNlAGxlZnQtYnJhY2UAYmFja3NwYWNlAHRyYW5zY3JpYmUAcGVyaW9kAG1hcDo6YXQ6ICBrZXkgbm90IGZvdW5kAGFtcGVyc2FuZAB2b2lkAHdoaXNwZXJfbGFuZ19pZAB0ZXJtaW5hdGVfaGFuZGxlciB1bmV4cGVjdGVkbHkgcmV0dXJuZWQAdGhyZWFkIGNvbnN0cnVjdG9yIGZhaWxlZABfX3RocmVhZF9zcGVjaWZpY19wdHIgY29uc3RydWN0aW9uIGZhaWxlZAB0aHJlYWQ6OmpvaW4gZmFpbGVkAG11dGV4IGxvY2sgZmFpbGVkAGZvcm0tZmVlZABXZWQAd2hpc3Blcl9tb2RlbF9sb2FkACUwMmQ6JTAyZDolMDJkJXMlMDNkAHN0ZDo6YmFkX2FsbG9jAGRzdC0+bmVbMF0gPT0gbmMAYW1oYXJpYwBpY2VsYW5kaWMAYXJhYmljAERlYwAvVXNlcnMvZ2dlcmdhbm92L2RldmVsb3BtZW50L2dpdGh1Yi93aGlzcGVyLmNwcC9nZ21sLmMAd2IAcmIARmViAHZlcnRpY2FsLXRhYgBuX2xvZ2l0cyA9PSBjdHgudm9jYWIubl92b2NhYgB3K2IAcitiAGErYgByd2EAaGF1c2EAc2hvbmEAY29tbWEAc2luaGFsYQBsaW5nYWxhAGFscGhhAGthbm5hZGEAeW9ydWJhAFtfZXh0cmFfdG9rZW5fAFtfVFRfAG5iMDAgPT0gR0dNTF9UWVBFX1NJWkVbdHlwZV0AbmIwMCA9PSAoaW50KSBHR01MX1RZUEVfU0laRVt0eXBlXQBbX1NPVF9dAFtfTk9UX10AW19FT1RfXQBbX0JFR19dAGEtPm5lWzFdID09IGItPm5lWzFdAFoAJWEgJWIgJWQgJUg6JU06JVMgJVkAUE9TSVgAVwBWAFUAd3R5cGUgIT0gR0dNTF9UWVBFX0NPVU5UAGF4aXMzID49IDAgJiYgYXhpczMgPCBHR01MX01BWF9ESU1TAGF4aXMyID49IDAgJiYgYXhpczIgPCBHR01MX01BWF9ESU1TAGF4aXMxID49IDAgJiYgYXhpczEgPCBHR01MX01BWF9ESU1TAGF4aXMwID49IDAgJiYgYXhpczAgPCBHR01MX01BWF9ESU1TAGNncmFwaC0+bl9sZWFmcyA8IEdHTUxfTUFYX05PREVTAGNncmFwaC0+bl9ub2RlcyA8IEdHTUxfTUFYX05PREVTACVIOiVNOiVTAFIAUQBQAE8ATkFOAG5lMSA9PSBOAFBNAEFNAG5lYjEwID09IE0AbmVjMDAgPT0gTQBOVUwAY3R4LT5tZW1fYnVmZmVyICE9IE5VTEwATENfQUxMAEsASgBJAEgATEFORwBJTkYARQBuZXYxID09IEQAbmVjMDEgPT0gRABuZWswID09IEQAbmUwID09IEQAbmVjMTAgPT0gRABuZWIwMCA9PSBEAEMAQgBBAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4APj4+ADw8PAAwMTIzNDU2Nzg5AEhFQVBVOABDLlVURi04AGRzdC0+dHlwZSA9PSBHR01MX1RZUEVfRjE2AGdnbWxfbmVsZW1lbnRzKG9wdDApID09IDUAYXhpczIgIT0gYXhpczMAYXhpczEgIT0gYXhpczMAYXhpczAgIT0gYXhpczMAbmUwMyA9PSBuZTMAbmIyIDw9IG5iMwBuZTMgPT0gbmUxMwBuZTAzID09IG5lMTMAbmUzID09IG5lMDMAZ2dtbF9uZWxlbWVudHMoc3JjMSkgPT0gMwBheGlzMSAhPSBheGlzMgBheGlzMCAhPSBheGlzMgBnZ21sX25lbGVtZW50cyhhKSA9PSBuZTAqbmUxKm5lMgBuZTAyID09IG5lMgBuYjEgPD0gbmIyAG5lMiA9PSBuZWEyAGdnbWxfaXNfbWF0cml4KGEpICYmIGdnbWxfaXNfdmVjdG9yKGIpICYmIGItPnR5cGUgPT0gR0dNTF9UWVBFX0kzMgBzcmMxLT50eXBlID09IEdHTUxfVFlQRV9JMzIAb3B0MC0+dHlwZSA9PSBHR01MX1RZUEVfSTMyAGRzdC0+dHlwZSA9PSBHR01MX1RZUEVfRjMyAHNyYzEtPnR5cGUgPT0gR0dNTF9UWVBFX0YzMgBuZTIgPT0gbmUxMgBuZTAyID09IG5lMTIAbmUyID09IG5lMDIAYXhpczAgIT0gYXhpczEAZ2dtbF9uZWxlbWVudHMoYSkgPT0gbmUwKm5lMQBuZTAwID09IG5lMQBuYjAgPD0gbmIxAG5lMSA9PSBuZWExAG5lMSA9PSBuZTExAG5lMSA9PSBuZTAxAG5lMCA9PSBuZTAxAHQgPT0gMCB8fCB0ID09IDEAYS0+bmVbM10gPT0gMQBub2RlLT5zcmMxLT5uZVszXSA9PSAxAG5vZGUtPnNyYzAtPm5lWzNdID09IDEAbm9kZS0+c3JjMS0+bmVbMl0gPT0gMQBuZTAwICUgMiA9PSAxAG5lYzExID09IDEAbmViMTEgPT0gMQBuZTAxID09IDEAbmUwID09IDEAbmUwMCA9PSBuZTAAbl9kaW1zIDw9IG5lMABuZTAgPT0gbmVhMABQID49IDAAcGFyYW1zLT5pdGggPT0gMAByYyA9PSAwACgodWludHB0cl90KSAocmVzdWx0KSklR0dNTF9NRU1fQUxJR04gPT0gMAAoKHVpbnRwdHJfdCkgKGN0eC0+bWVtX2J1ZmZlcikpJUdHTUxfTUVNX0FMSUdOID09IDAAbl9kaW1zICUgMiA9PSAwAFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBtaXNtYXRjaGVkIHsgYW5kIH0uAGVuY29kZXIuYmxvY2tzLgBkZWNvZGVyLmJsb2Nrcy4AVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgY2hhcmFjdGVyIHJhbmdlLCBzdWNoIGFzIFtiLWFdIGluIG1vc3QgZW5jb2RpbmdzLgBBbiBlbXB0eSByZWdleCBpcyBub3QgYWxsb3dlZCBpbiB0aGUgUE9TSVggZ3JhbW1hci4AVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgcmFuZ2UgaW4gYSB7fSBleHByZXNzaW9uLgBUaGUgcGFyc2VyIGRpZCBub3QgY29uc3VtZSB0aGUgZW50aXJlIHJlZ3VsYXIgZXhwcmVzc2lvbi4AT25lIG9mICo/K3sgd2FzIG5vdCBwcmVjZWRlZCBieSBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4AVGhlIGNvbXBsZXhpdHkgb2YgYW4gYXR0ZW1wdGVkIG1hdGNoIGFnYWluc3QgYSByZWd1bGFyIGV4cHJlc3Npb24gZXhjZWVkZWQgYSBwcmUtc2V0IGxldmVsLgBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgYW4gaW52YWxpZCBlc2NhcGVkIGNoYXJhY3Rlciwgb3IgYSB0cmFpbGluZyBlc2NhcGUuAFRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGNvbnZlcnQgdGhlIGV4cHJlc3Npb24gaW50byBhIGZpbml0ZSBzdGF0ZSBtYWNoaW5lLgBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgYW4gaW52YWxpZCBjb2xsYXRpbmcgZWxlbWVudCBuYW1lLgBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgYW4gaW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZS4AVGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb3VsZCBtYXRjaCB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBzZXF1ZW5jZS4AVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgYmFjayByZWZlcmVuY2UuAEFuIGludmFsaWQgcmVnZXggZ3JhbW1hciBoYXMgYmVlbiByZXF1ZXN0ZWQuAFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBtaXNtYXRjaGVkIFsgYW5kIF0uAFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBtaXNtYXRjaGVkICggYW5kICkuAC0tLQB3KwAnc3wndHwncmV8J3ZlfCdtfCdsbHwnZHwgP1tbOmFscGhhOl1dK3wgP1tbOmRpZ2l0Ol1dK3wgP1teXHNbOmFscGhhOl1bOmRpZ2l0Ol1dK3xccysoPyFcUyl8XHMrAHIrAGErAG5fZWxlbWVudHMgPT0gZ2dtbF9uZWxlbWVudHMoY2FjaGUudikAZ2dtbF9pc19jb250aWd1b3VzKGRzdCkAb2Zmc2V0ICsgaW0wKm5iMCArIGltMSpuYjEgKyBpbTIqbmIyICsgaW0zKm5iMyA8IGdnbWxfbmJ5dGVzKGRzdCkAb2Zmc2V0ICsgKG5lMTAgPT0gMCA/IDAgOiBuZTEwLTEpKm5iMCArIChuZTExID09IDAgPyAwIDogbmUxMS0xKSpuYjEgKyAobmUxMiA9PSAwID8gMCA6IG5lMTItMSkqbmIyICsgKG5lMTMgPT0gMCA/IDAgOiBuZTEzLTEpKm5iMyA8IGdnbWxfbmJ5dGVzKGRzdCkAZ2dtbF9hcmVfc2FtZV9zaGFwZShvcHQwLCBkc3QpAGdnbWxfY2FuX3JlcGVhdChzcmMwLCBkc3QpAGdnbWxfYXJlX3NhbWVfc2hhcGUoc3JjMCwgc3JjMSkgJiYgZ2dtbF9hcmVfc2FtZV9zaGFwZShzcmMwLCBkc3QpAGdnbWxfY2FuX3JlcGVhdF9yb3dzKHNyYzEsIHNyYzApICYmIGdnbWxfYXJlX3NhbWVfc2hhcGUoc3JjMCwgZHN0KQBkc3QtPm5iWzBdID09IHNpemVvZihmbG9hdCkAdGVuc29yLT5uYlswXSA9PSBzaXplb2YoZmxvYXQpAHNyYzAtPm5iWzBdID09IHNpemVvZihmbG9hdCkAbmJ2MCA9PSBzaXplb2YoZmxvYXQpAG5icTAgPT0gc2l6ZW9mKGZsb2F0KQBuYmswID09IHNpemVvZihmbG9hdCkAbmIwID09IHNpemVvZihmbG9hdCkAbmJjMTAgPT0gc2l6ZW9mKGZsb2F0KQBuYjEwID09IHNpemVvZihmbG9hdCkAbmJiMTAgPT0gc2l6ZW9mKGZsb2F0KQBuYjAwID09IHNpemVvZihmbG9hdCkAdGVuc29yLT5uYlswXSA9PSBzaXplb2YoaW50OF90KQB0ZW5zb3ItPm5iWzBdID09IHNpemVvZihpbnQxNl90KQB0ZW5zb3ItPm5iWzBdID09IHNpemVvZihnZ21sX2ZwMTZfdCkAc3JjMC0+bmJbMF0gPT0gc2l6ZW9mKGdnbWxfZnAxNl90KQBuYnYwID09IHNpemVvZihnZ21sX2ZwMTZfdCkAbmJxMCA9PSBzaXplb2YoZ2dtbF9mcDE2X3QpAG5iazAgPT0gc2l6ZW9mKGdnbWxfZnAxNl90KQBuYjAgPT0gc2l6ZW9mKGdnbWxfZnAxNl90KQBuYmEwID09IHNpemVvZihnZ21sX2ZwMTZfdCkAbmJjMDAgPT0gc2l6ZW9mKGdnbWxfZnAxNl90KQBuYjAwID09IHNpemVvZihnZ21sX2ZwMTZfdCkAbmJiMDAgPT0gc2l6ZW9mKGdnbWxfZnAxNl90KQB0ZW5zb3ItPm5iWzBdID09IHNpemVvZihpbnQzMl90KQAobnVsbCkAY2FjaGUuYnVmLnNpemUoKSA+PSAyKm5fZWxlbWVudHMqZ2dtbF90eXBlX3NpemVmKHd0eXBlKQBnZ21sX2lzX3F1YW50aXplZChzcmMwLT50eXBlKQBnZ21sX2lzX2NvbnRpZ3VvdXMoZ3JhZCkAZ2dtbF9hcmVfc2FtZV9zaGFwZShzcmMwLCBncmFkKQBnZ21sX2lzX21hdHJpeChiKQBnZ21sX25lbGVtZW50cyhhKSA9PSBnZ21sX25lbGVtZW50cyhiKQBnZ21sX2lzX3NjYWxhcihiKQBnZ21sX2Nhbl9tdWxfbWF0KGEsIGIpAGdnbWxfY2FuX3JlcGVhdChhLCBiKQBnZ21sX2FyZV9zYW1lX3NoYXBlKGEsIGIpAGdnbWxfaXNfY29udGlndW91cyhhKQAhZ2dtbF9pc190cmFuc3Bvc2VkKGEpAGdnbWxfaXNfcGFkZGVkXzFkKGEpAGdnbWxfY2FuX3JlcGVhdF9yb3dzKGIsIGEpAGdnbWxfaXNfc2NhbGFyKHNyYzEpAGdnbWxfYXJlX3NhbWVfc2hhcGUoc3JjMCwgZHN0KSAmJiBnZ21sX2FyZV9zYW1lX3NoYXBlKHNyYzAsIHNyYzEpAGdnbWxfaXNfY29udGlndW91cyhvcHQwKQBnZ21sX2lzX2NvbnRpZ3VvdXMoZHN0KSAmJiBnZ21sX2lzX2NvbnRpZ3VvdXMoc3JjMCkAZ2dtbF9uZWxlbWVudHMoZHN0KSA9PSBnZ21sX25lbGVtZW50cyhzcmMwKQBvZmZzZXQgKyAobmUxMCA9PSAwID8gMCA6IG5lMTAtMSkqbmIwMCArIChuZTExID09IDAgPyAwIDogbmUxMS0xKSpuYjAxICsgKG5lMTIgPT0gMCA/IDAgOiBuZTEyLTEpKm5iMDIgKyAobmUxMyA9PSAwID8gMCA6IG5lMTMtMSkqbmIwMyA8IGdnbWxfbmJ5dGVzKHNyYzApACkpKQBvcGVyYXRvcigpACgoKABQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkIQAgfCAAQVZYID0gAFZTWCA9IABCTEFTID0gAE5FT04gPSAAQ09SRU1MID0gAFdBU01fU0lNRCA9IABGMTZDID0gAEZQMTZfVkEgPSAAQVJNX0ZNQSA9IABTU0UzID0gAEFWWDIgPSAAQVZYNTEyID0gACVzOiBub3QgZW5vdWdoIHNwYWNlIGluIHRoZSBzY3JhdGNoIG1lbW9yeQoAJXM6IHRlbnNvciAnJXMnIGhhcyB3cm9uZyBzaXplIGluIG1vZGVsIGZpbGU6IGdvdCAlenUsIGV4cGVjdGVkICV6dQoAJXM6IGFkZGluZyAlZCBleHRyYSB0b2tlbnMKACVzOiAgICAgIG1lbCB0aW1lID0gJTguMmYgbXMKACVzOiAgICB0b3RhbCB0aW1lID0gJTguMmYgbXMKACVzOiAgICAgbG9hZCB0aW1lID0gJTguMmYgbXMKAHN5c3RlbV9pbmZvOiBuX3RocmVhZHMgPSAlZCAvICVkIHwgJXMKAFdISVNQRVJfQVNTRVJUOiAlczolZDogJXMKAEdHTUxfQVNTRVJUOiAlczolZDogJXMKAFslcyAtLT4gJXNdICAlcwoAJXM6IG9mZnNldCAlZG1zIGlzIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGF1ZGlvCgAlczogbG9hZGluZyBtb2RlbAoAJXM6IGZhaWxlZCB0byBsb2FkIG1vZGVsCgAlczogICAgIGZhbGxiYWNrcyA9ICUzZCBwIC8gJTNkIGgKACVzOiBXQVJOIG5vIHRlbnNvcnMgbG9hZGVkIGZyb20gbW9kZWwgZmlsZSAtIGFzc3VtaW5nIGVtcHR5IG1vZGVsIGZvciB0ZXN0aW5nCgAlczogZW5jb2Rlcl9iZWdpbl9jYWxsYmFjayByZXR1cm5lZCBmYWxzZSAtIGFib3J0aW5nCgAlczogdGVuc29yICclcycgaGFzIHdyb25nIHNpemUgaW4gbW9kZWwgZmlsZQoAJXM6IHVua25vd24gdGVuc29yICclcycgaW4gbW9kZWwgZmlsZQoAJXM6IG5vIHNpZ25hbCBkYXRhIGF2YWlsYWJsZQoAJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGt2IGNhY2hlCgAlczoga3ZfY2FjaGVfaW5pdCgpIGZhaWxlZCBmb3IgY3Jvc3MtYXR0ZW50aW9uIGNhY2hlCgAlczoga3ZfY2FjaGVfaW5pdCgpIGZhaWxlZCBmb3Igc2VsZi1hdHRlbnRpb24gY2FjaGUKACVzOiBmYWlsZWQgdG8gYXV0by1kZXRlY3QgbGFuZ3VhZ2UKACVzOiBnZ21sX2luaXQoKSBmYWlsZWQKACVzOiBFUlJPUiBub3QgYWxsIHRlbnNvcnMgbG9hZGVkIGZyb20gbW9kZWwgZmlsZSAtIGV4cGVjdGVkICV6dSwgZ290ICVkCgAlczoga3ZfY2FjaGVfcmVpbml0KCkgZmFpbGVkIGZvciBzZWxmLWF0dGVudGlvbiwgZGVjb2RlciAlZAoAJXM6IHVua25vd24gbGFuZ3VhZ2UgaWQgJWQKACVzOiBuX2F1ZGlvX2xheWVyID0gJWQKACVzOiBuX2F1ZGlvX3N0YXRlID0gJWQKACVzOiBuX3RleHRfbGF5ZXIgID0gJWQKACVzOiBuX3RleHRfc3RhdGUgID0gJWQKACVzOiBuX2F1ZGlvX2hlYWQgID0gJWQKACVzOiBuX2F1ZGlvX2N0eCAgID0gJWQKACVzOiBuX3RleHRfaGVhZCAgID0gJWQKACVzOiBuX3RleHRfY3R4ICAgID0gJWQKACVzOiBuX3ZvY2FiICAgICAgID0gJWQKACVzOiBuX21lbHMgICAgICAgID0gJWQKACVzOiBxbnR2ciAgICAgICAgID0gJWQKACVzOiBmdHlwZSAgICAgICAgID0gJWQKACVzOiB0eXBlICAgICAgICAgID0gJWQK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EAAQEBAQABAQEAAQEBAAEBAAABAQEAAQEBAQABAQABAQABAAEBAAEBAQAAAQEAAQEAAAABAQABAQEBAQABAAEBAAEBAAEAAQEBAAEAAQABAQAAAQABAAEBAQEAAAEAAQEAAQAAAQABAQEAAAABAAEBAAAAAAEAAQEBAQEBAAABAQABAQEAAAEBAQABAQAAAQEAAAEBAAABAQEBAAEAAAEBAAEAAQAAAQEBAAABAAABAQAAAAEAAAEBAQEBAAAAAQEAAQEAAAABAQEAAQAAAAEBAAABAAAAAQEBAQAAAAABAQABAAAAAAEBAQAAAAAAAQEAAAAAAAABAQEBAQEBAQABAAEBAQEBAAEBAAEBAQEAAQAAAQEBAQABAQEAAQEBAAEAAQABAQEAAQEAAAEBAQABAAAAAQEBAAEBAQEAAQEAAQABAQABAQABAQABAAEBAAEAAAEAAQEAAQEBAAABAQABAAEAAAEBAAEBAAAAAQEAAQAAAAABAQABAQEBAQABAAEAAQEBAAEAAQEAAQEAAQABAAABAQABAAEBAQABAAEAAQABAAEAAQABAQAAAQABAAEAAAABAAEAAQEBAQAAAQABAAEBAAABAAEBAAEAAAEAAQAAAQAAAQABAQEAAAABAAEAAQAAAAEAAQEAAAAAAQABAAAAAAABAAEBAQEBAQAAAQABAQEBAAABAQABAQEAAAEAAAEBAQAAAQEBAAEBAAABAAEAAQEAAAEBAAABAQAAAQAAAAEBAAABAQEBAAEAAAEAAQEAAQAAAQEAAQABAAABAAABAAEAAAEBAQAAAQAAAQABAAABAAABAQAAAAEAAAEAAAAAAQAAAQEBAQEAAAABAAEBAQAAAAEBAAEBAAAAAQAAAQEAAAABAQEAAQAAAAEAAQABAAAAAQEAAAEAAAABAAAAAQAAAAEBAQEAAAAAAQABAQAAAAABAQABAAAAAAEAAAEAAAAAAQEBAAAAAAABAAEAAAAAAAEBAAAAAAAAAQAAAAAAAAABAQEBAQEBAQAAAQEBAQEBAAEAAQEBAQEAAAABAQEBAQABAQABAQEBAAABAAEBAQEAAQAAAQEBAQAAAAABAQEBAAEBAQABAQEAAAEBAAEBAQABAAEAAQEBAAAAAQABAQEAAQEAAAEBAQAAAQAAAQEBAAEAAAABAQEAAAAAAAEBAQABAQEBAAEBAAABAQEAAQEAAQABAQABAQAAAAEBAAEBAAEBAAEAAQEAAAEAAQABAQABAAABAAEBAAAAAAEAAQEAAQEBAAABAQAAAQEAAAEBAAEAAQAAAQEAAAABAAABAQABAQAAAAEBAAABAAAAAQEAAQAAAAABAQAAAAAAAAEBAAEBAQEBAAEAAAEBAQEAAQABAAEBAQABAAAAAQEBAAEAAQEAAQEAAQAAAQABAQABAAEAAAEBAAEAAAAAAQEAAQABAQEAAQABAAABAQABAAEAAQABAAEAAQAAAAEAAQABAAEBAAABAAEAAAEAAAEAAQABAAAAAQABAAAAAAABAAEAAQEBAQAAAQAAAQEBAAABAAEAAQEAAAEAAAABAQAAAQABAQABAAABAAABAAEAAAEAAQAAAQAAAQAAAAABAAABAAEBAQAAAAEAAAEBAAAAAQABAAEAAAABAAAAAQAAAAEAAQEAAAAAAQAAAQAAAAABAAEAAAAAAAEAAAAAAAAAAQABAQEBAQEAAAABAQEBAQAAAQABAQEBAAAAAAEBAQEAAAEBAAEBAQAAAAEAAQEBAAABAAABAQEAAAAAAAEBAQAAAQEBAAEBAAAAAQEAAQEAAAEAAQABAQAAAAABAAEBAAABAQAAAQEAAAABAAABAQAAAQAAAAEBAAAAAAAAAQEAAAEBAQEAAQAAAAEBAQABAAABAAEBAAEAAAAAAQEAAQAAAQEAAQABAAAAAQABAAEAAAEAAAEAAQAAAAAAAQABAAABAQEAAAEAAAABAQAAAQAAAQABAAABAAAAAAEAAAEAAAEBAAAAAQAAAAEAAAABAAABAAAAAAEAAAAAAAAAAQAAAQEBAQEAAAAAAQEBAQAAAAEAAQEBAAAAAAABAQEAAAABAQABAQAAAAABAAEBAAAAAQAAAQEAAAAAAAABAQAAAAEBAQABAAAAAAEBAAEAAAABAAEAAQAAAAAAAQABAAAAAQEAAAEAAAAAAQAAAQAAAAEAAAABAAAAAAAAAAEAAAABAQEBAAAAAAABAQEAAAAAAQABAQAAAAAAAAEBAAAAAAEBAAEAAAAAAAEAAQAAAAABAAABAAAAAAAAAAEAAAAAAQEBAAAAAAAAAQEAAAAAAAEAAQAAAAAAAAABAAAAAAABAQAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAQAAAAAAAAEBAAAAAAAAAAABAAAAAAABAAEAAAAAAAABAQAAAAAAAQEBAAAAAAAAAAABAAAAAAEAAAEAAAAAAAEAAQAAAAABAQABAAAAAAAAAQEAAAAAAQABAQAAAAAAAQEBAAAAAAEBAQEAAAAAAAAAAAEAAAABAAAAAQAAAAABAAABAAAAAQEAAAEAAAAAAAEAAQAAAAEAAQABAAAAAAEBAAEAAAABAQEAAQAAAAAAAAEBAAAAAQAAAQEAAAAAAQABAQAAAAEBAAEBAAAAAAABAQEAAAABAAEBAQAAAAABAQEBAAAAAQEBAQEAAAAAAAAAAAEAAAEAAAAAAQAAAAEAAAABAAABAQAAAAEAAAAAAQAAAQAAAQABAAABAAAAAQEAAAEAAAEBAQAAAQAAAAAAAQABAAABAAABAAEAAAABAAEAAQAAAQEAAQABAAAAAAEBAAEAAAEAAQEAAQAAAAEBAQABAAABAQEBAAEAAAAAAAABAQAAAQAAAAEBAAAAAQAAAQEAAAEBAAABAQAAAAABAAEBAAABAAEAAQEAAAABAQABAQAAAQEBAAEBAAAAAAABAQEAAAEAAAEBAQAAAAEAAQEBAAABAQABAQEAAAAAAQEBAQAAAQABAQEBAAAAAQEBAQEAAAEBAQEBAQAAAAAAAAAAAQABAAAAAAABAAABAAAAAAEAAQEAAAAAAQAAAAEAAAABAAEAAQAAAAEAAAEBAAAAAQABAQEAAAABAAAAAAEAAAEAAQAAAQAAAQAAAQABAAABAAEBAAEAAAEAAAABAQAAAQABAAEBAAABAAABAQEAAAEAAQEBAQAAAQAAAAAAAQABAAEAAAABAAEAAAEAAAEAAQABAQAAAQABAAAAAQABAAEAAQABAAEAAQAAAQEAAQABAAEBAQABAAEAAAAAAQEAAQABAAABAQABAAABAAEBAAEAAQEAAQEAAQAAAAEBAQABAAEAAQEBAAEAAAEBAQEAAQABAQEBAQABAAAAAAAAAQEAAQAAAAABAQAAAQAAAAEBAAEBAAAAAQEAAAABAAABAQABAAEAAAEBAAABAQAAAQEAAQEBAAABAQAAAAABAAEBAAEAAAEAAQEAAAEAAQABAQABAQABAAEBAAAAAQEAAQEAAQABAQABAQAAAQEBAAEBAAEBAQEAAQEAAAAAAAEBAQABAAAAAQEBAAABAAABAQEAAQEAAAEBAQAAAAEAAQEBAAEAAQABAQEAAAEBAAEBAQABAQEAAQEBAAAAAAEBAQEAAQAAAQEBAQAAAQABAQEBAAEBAAEBAQEAAAABAQEBAQABAAEBAQEBAAABAQEBAQEAAQEBAQEBAQAAAAAAAAAAAQEAAAAAAAABAAEAAAAAAAEBAQAAAAAAAQAAAQAAAAABAQABAAAAAAEAAQEAAAAAAQEBAQAAAAABAAAAAQAAAAEBAAABAAAAAQABAAEAAAABAQEAAQAAAAEAAAEBAAAAAQEAAQEAAAABAAEBAQAAAAEBAQEBAAAAAQAAAAABAAABAQAAAAEAAAEAAQAAAQAAAQEBAAABAAABAAABAAEAAAEBAAEAAQAAAQABAQABAAABAQEBAAEAAAEAAAABAQAAAQEAAAEBAAABAAEAAQEAAAEBAQABAQAAAQAAAQEBAAABAQABAQEAAAEAAQEBAQAAAQEBAQEBAAABAAAAAAABAAEBAAAAAAEAAQABAAAAAQABAQEAAAABAAEAAAEAAAEAAQEAAQAAAQABAAEBAAABAAEBAQEAAAEAAQAAAAEAAQABAQAAAQABAAEAAQABAAEAAQEBAAEAAQABAAABAQABAAEBAAEBAAEAAQABAQEAAQABAQEBAQABAAEAAAAAAQEAAQEAAAABAQABAAEAAAEBAAEBAQAAAQEAAQAAAQABAQABAQABAAEBAAEAAQEAAQEAAQEBAQABAQABAAAAAQEBAAEBAAABAQEAAQABAAEBAQABAQEAAQEBAAEAAAEBAQEAAQEAAQEBAQABAAEBAQEBAAEBAQEBAQEAAQAAAAAAAAEBAQAAAAAAAQEAAQAAAAABAQEBAAAAAAEBAAABAAAAAQEBAAEAAAABAQABAQAAAAEBAQEBAAAAAQEAAAABAAABAQEAAAEAAAEBAAEAAQAAAQEBAQABAAABAQAAAQEAAAEBAQABAQAAAQEAAQEBAAABAQEBAQEAAAEBAAAAAAEAAQEBAAAAAQABAQABAAABAAEBAQEAAAEAAQEAAAEAAQABAQEAAQABAAEBAAEBAAEAAQEBAQEAAQABAQAAAAEBAAEBAQAAAQEAAQEAAQABAQABAQEBAAEBAAEBAAABAQEAAQEBAAEBAQABAQABAQEBAAEBAQEBAQEAAQEAAAAAAAEBAQEAAAAAAQEBAAEAAAABAQEBAQAAAAEBAQAAAQAAAQEBAQABAAABAQEAAQEAAAEBAQEBAQAAAQEBAAAAAQABAQEBAAABAAEBAQABAAEAAQEBAQEAAQABAQEAAAEBAAEBAQEAAQEAAQEBAAEBAQABAQEBAQEBAAEBAQAAAAABAQEBAQAAAAEBAQEAAQAAAQEBAQEBAAABAQEBAAABAAEBAQEBAAEAAQEBAQABAQABAQEBAQEBAAEBAQEAAAABAQEBAQEAAAEBAQEBAAEAAQEBAQEBAQABAQEBAQAAAQEBAQEBAQABAQEBAQEAAQEBAQEBAQEBAQEBAQEBAAAAAAAQAAAAIAAAADAAAAAAAAAAAAAAAAAAAACAAAAAYAAAAHAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAACgRAAAMwAAADQAAAA1AAAANgAAAE5TdDNfXzIxMV9fZW5kX3N0YXRlSWNFRQBOU3QzX18yNl9fbm9kZUljRUUAnMcAAIVEAADExwAAbEQAAJhEAAAAAAAAUEUAADcAAAA4AAAAOQAAADoAAAA7AAAATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE5TXzEzX19lbXB0eV9zdGF0ZUljRUVOU18xMHNoYXJlZF9wdHJJUzJfRTI3X19zaGFyZWRfcHRyX2RlZmF1bHRfZGVsZXRlSVMyX1MyX0VFTlNfOWFsbG9jYXRvcklTMl9FRUVFAAAAAMTHAADIRAAASL4AAE5TdDNfXzIxMHNoYXJlZF9wdHJJTlNfMTNfX2VtcHR5X3N0YXRlSWNFRUUyN19fc2hhcmVkX3B0cl9kZWZhdWx0X2RlbGV0ZUlTMl9TMl9FRQAAAAAAAAA4RgAAPAAAAD0AAAA+AAAANgAAAE5TdDNfXzIxM19fZW1wdHlfc3RhdGVJY0VFAE5TdDNfXzIxNl9fb3duc19vbmVfc3RhdGVJY0VFAE5TdDNfXzIxNV9faGFzX29uZV9zdGF0ZUljRUUAAADExwAAAUYAAJhEAADExwAA40UAACBGAADExwAAyEUAACxGAAAAAAAALEYAADwAAAA/AAAAQAAAADYAAAAAAAAAmEYAADwAAABBAAAAQgAAADYAAABOU3QzX18yMjBfX2xfYW5jaG9yX211bHRpbGluZUljRUUAAADExwAAdEYAACxGAAAAAAAA4EYAADwAAABDAAAARAAAADYAAABOU3QzX18yMjBfX3JfYW5jaG9yX211bHRpbGluZUljRUUAAADExwAAvEYAACxGAAAAAAAAOEcAAEUAAABGAAAARwAAADYAAABOU3QzX18yMTVfX3dvcmRfYm91bmRhcnlJY05TXzEycmVnZXhfdHJhaXRzSWNFRUVFAAAAxMcAAARHAAAsRgAAAAAAAIxHAABIAAAASQAAAEoAAAA2AAAATlN0M19fMjExX19sb29rYWhlYWRJY05TXzEycmVnZXhfdHJhaXRzSWNFRUVFAAAAxMcAAFxHAAAsRgAAAAAAANhHAAA8AAAASwAAAEwAAAA2AAAATlN0M19fMjIzX19tYXRjaF9hbnlfYnV0X25ld2xpbmVJY0VFAAAAAMTHAACwRwAALEYAAAAAAAA0SAAATQAAAE4AAABPAAAANgAAAE5TdDNfXzIxOF9fbWF0Y2hfY2hhcl9pY2FzZUljTlNfMTJyZWdleF90cmFpdHNJY0VFRUUAAAAAxMcAAPxHAAAsRgAAAAAAAJBIAABQAAAAUQAAAFIAAAA2AAAATlN0M19fMjIwX19tYXRjaF9jaGFyX2NvbGxhdGVJY05TXzEycmVnZXhfdHJhaXRzSWNFRUVFAADExwAAWEgAACxGAAAAAAAA0EgAADwAAABTAAAAVAAAADYAAABOU3QzX18yMTJfX21hdGNoX2NoYXJJY0VFAAAAxMcAALRIAAAsRgAAAAAAAChJAABVAAAAVgAAAFcAAAA2AAAATlN0M19fMjE2X19iYWNrX3JlZl9pY2FzZUljTlNfMTJyZWdleF90cmFpdHNJY0VFRUUAAMTHAAD0SAAALEYAAAAAAACESQAAWAAAAFkAAABaAAAANgAAAE5TdDNfXzIxOF9fYmFja19yZWZfY29sbGF0ZUljTlNfMTJyZWdleF90cmFpdHNJY0VFRUUAAAAAxMcAAExJAAAsRgAAAAAAAMBJAAA8AAAAWwAAAFwAAAA2AAAATlN0M19fMjEwX19iYWNrX3JlZkljRUUAxMcAAKhJAAAsRgAAAAAAABxKAABdAAAAXgAAAF8AAAA2AAAATlN0M19fMjIwX19icmFja2V0X2V4cHJlc3Npb25JY05TXzEycmVnZXhfdHJhaXRzSWNFRUVFAADExwAA5EkAACxGAAAAAAAAbEoAADwAAABgAAAAYQAAADYAAABOU3QzX18yMjhfX2JlZ2luX21hcmtlZF9zdWJleHByZXNzaW9uSWNFRQAAAMTHAABASgAALEYAAAAAAAC4SgAAPAAAAGIAAABjAAAANgAAAE5TdDNfXzIyNl9fZW5kX21hcmtlZF9zdWJleHByZXNzaW9uSWNFRQDExwAAkEoAACxGAAAAAAAAHEsAAGQAAABlAAAAZgAAAGcAAABOU3QzX18yNl9fbG9vcEljRUUATlN0M19fMjE3X19vd25zX3R3b19zdGF0ZXNJY0VFAAAAxMcAAO9KAAAsRgAAxMcAANxKAAAQSwAAAAAAABBLAABkAAAAaAAAAEAAAAA2AAAAAAAAAHhLAAAzAAAAaQAAAGoAAAA2AAAATlN0M19fMjE3X19yZXBlYXRfb25lX2xvb3BJY0VFAADExwAAWEsAACBGAAAAAAAAuEsAAGQAAABrAAAAbAAAAG0AAABOU3QzX18yMTFfX2FsdGVybmF0ZUljRUUAAAAAxMcAAJxLAAAQSwAAAAAAAABMAAAzAAAAbgAAAG8AAAA2AAAATlN0M19fMjIxX19lbXB0eV9ub25fb3duX3N0YXRlSWNFRQAAxMcAANxLAAAgRgAAAAAAAEBMAAA8AAAAcAAAAHEAAAA2AAAATlN0M19fMjExX19tYXRjaF9hbnlJY0VFAAAAAMTHAAAkTAAALEYAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAACcxwAATEwAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAACcxwAAlEwAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0lEc05TXzExY2hhcl90cmFpdHNJRHNFRU5TXzlhbGxvY2F0b3JJRHNFRUVFAAAAnMcAANxMAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRGlOU18xMWNoYXJfdHJhaXRzSURpRUVOU185YWxsb2NhdG9ySURpRUVFRQAAAJzHAAAoTQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAACcxwAAdE0AAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92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IRQAAAAAAAAAAAAAABcAAAAAFwAAAAAJFAAAAAAAFAAAFAH2CRYAAAAAAAAAAAAAABUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgAAAAC8kgAAfgAAAH8AAACAAAAAgQAAAIIAAACDAAAAhAAAAIUAAACGAAAAhwAAAIgAAACJAAAAigAAAIsAAAAIAAAAAAAAAPSSAACMAAAAjQAAAPj////4////9JIAAI4AAACPAAAA7JEAAACSAAAAAAAA2JMAAJAAAACRAAAAkgAAAJMAAACUAAAAlQAAAJYAAACFAAAAhgAAAJcAAACIAAAAmAAAAIoAAACZAAAATlN0M19fMjliYXNpY19pb3NJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAADExwAAUJIAAAiUAABOU3QzX18yMTViYXNpY19zdHJlYW1idWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAAAAnMcAAIiSAABOU3QzX18yMTNiYXNpY19pc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAAAgyAAAxJIAAAAAAAABAAAAfJIAAAP0//9sAAAAAAAAAJyTAACaAAAAmwAAAJT///+U////nJMAAJwAAACdAAAAGJMAAFCTAABkkwAALJMAAGwAAAAAAAAA9JIAAIwAAACNAAAAlP///5T////0kgAAjgAAAI8AAABOU3QzX18yMTRiYXNpY19pZnN0cmVhbUljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRQDExwAAbJMAAPSSAABOU3QzX18yMTNiYXNpY19maWxlYnVmSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAADExwAAqJMAALySAAAAAAAACJQAAJ4AAACfAAAATlN0M19fMjhpb3NfYmFzZUUAAACcxwAA9JMAANF0ngBXnb0qgHBSD///PicKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BRgAAAA1AAAAcQAAAGv////O+///kr///wAAAAAAAAAA/////////////////////////////////////////////////////////////////wABAgMEBQYHCAn/////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP///////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAQIEBwMGBQAAAAAAAAACAADAAwAAwAQAAMAFAADABgAAwAcAAMAIAADACQAAwAoAAMALAADADAAAwA0AAMAOAADADwAAwBAAAMARAADAEgAAwBMAAMAUAADAFQAAwBYAAMAXAADAGAAAwBkAAMAaAADAGwAAwBwAAMAdAADAHgAAwB8AAMAAAACzAQAAwwIAAMMDAADDBAAAwwUAAMMGAADDBwAAwwgAAMMJAADDCgAAwwsAAMMMAADDDQAA0w4AAMMPAADDAAAMuwEADMMCAAzDAwAMwwQADNsAAAAA3hIElQAAAAD///////////////9AlgAAFAAAAEMuVVRGLTgBAlSWAUpMQ19DVFlQRQAAAABMQ19OVU1FUklDAABMQ19USU1FAAAAAABMQ19DT0xMQVRFAABMQ19NT05FVEFSWQBMQ19NRVNTQUdFUwAAmQH5AwEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAEEAAABCAAAAQwAAAEQAAABFAAAARgAAAEcA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AAC9EAAAAQAAAMcJAAAIAAAAMgUAAAAEAADTBQAAAAEAAE5TdDNfXzIxMXJlZ2V4X2Vycm9yRQAAAMTHAAB4wgAAzMkAAM8dAAALHgAALR0AAL0eAAAeHwAASx8AAEYbAAAdHAAAkxsAAHodAACVHAAA0RwAAEUeAADxHgAA6RsAADAQAABbHAAAAAAAAAoAAABkAAAA6AMAABAnAACghgEAQEIPAICWmAAA4fUFAMqaOwAAAAAAAAAAMDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTkAAAAAAAAAAAL/AARkACAAAAT//wYAAQABAAEA//8B/wH//////wH/Af8B/wH/Af8B/wH/Af//////Cv8gAP//A/8B/wT/HgAAAQX//////2MAAAhjAOgDAgAAAP//////AAAAAf8B//////////////8AAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAf8B//////8AASAABACAAAAI//8B/wH/////////Af8G/wf/CP8J//////+8ArwCAQD//wEAAQD//wAA//////////8AAAAAAAAAAAAAAAAAAAAAFAF4//8BAAr///////////8B/wH/AAAAAAAAAf8B/wH/AAAAAAAAAAAAAAAAAAAAAAAAAf8AAAAAAAAB/wH/AQAAAAEAAAAB//////8AAAAAAf///wAAAAD/////////////KAAK//////8BAAr/////AP//////////AboIAf8B////AQD//////////////////wr//////04xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAADExwAA0sUAAOjJAABOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAAADExwAAAMYAAPTFAABOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UAAADExwAAMMYAAPTFAABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQDExwAAYMYAAFTGAAAAAAAA1MYAAKsBAACsAQAArQEAAK4BAACvAQAATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAMTHAACsxgAA9MUAAHYAAACYxgAA4MYAAGIAAACYxgAA7MYAAGMAAACYxgAA+MYAAGgAAACYxgAABMcAAGEAAACYxgAAEMcAAHMAAACYxgAAHMcAAHQAAACYxgAAKMcAAGkAAACYxgAANMcAAGoAAACYxgAAQMcAAGwAAACYxgAATMcAAG0AAACYxgAAWMcAAHgAAACYxgAAZMcAAHkAAACYxgAAcMcAAGYAAACYxgAAfMcAAGQAAACYxgAAiMcAAAAAAAAkxgAAqwEAALABAACtAQAArgEAALEBAACyAQAAswEAALQBAAAAAAAADMgAAKsBAAC1AQAArQEAAK4BAACxAQAAtgEAALcBAAC4AQAATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAAAAAMTHAADkxwAAJMYAAAAAAABoyAAAqwEAALkBAACtAQAArgEAALEBAAC6AQAAuwEAALwBAABOMTBfX2N4eGFiaXYxMjFfX3ZtaV9jbGFzc190eXBlX2luZm9FAAAAxMcAAEDIAAAkxgAAAAAAANjIAAAIAAAAvQEAAL4BAAAAAAAAAMkAAAgAAAC/AQAAwAEAAAAAAADAyAAACAAAAMEBAADCAQAAU3Q5ZXhjZXB0aW9uAAAAAJzHAACwyAAAU3Q5YmFkX2FsbG9jAAAAAMTHAADIyAAAwMgAAFN0MjBiYWRfYXJyYXlfbmV3X2xlbmd0aAAAAADExwAA5MgAANjIAAAAAAAARMkAAAcAAADDAQAAxAEAAAAAAADMyQAAxQEAAMYBAACnAQAAU3QxMWxvZ2ljX2Vycm9yAMTHAAA0yQAAwMgAAAAAAAB4yQAABwAAAMcBAADEAQAAU3QxMmxlbmd0aF9lcnJvcgAAAADExwAAZMkAAETJAAAAAAAArMkAAAcAAADIAQAAxAEAAFN0MTJvdXRfb2ZfcmFuZ2UAAAAAxMcAAJjJAABEyQAAU3QxM3J1bnRpbWVfZXJyb3IAAADExwAAuMkAAMDIAABTdDl0eXBlX2luZm8AAAAAnMcAANjJAAABVAUAAAAAAAAAAAAAAHYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAABzAAAA8NkKAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAD//////////wFZ8MkAAAAAAAAFAAAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAeQAAAPjZCgAABAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA/////woBEIjKAAAA7QsAAAIAAKoBAAA=";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;registerTLSInit(Module["asm"]["aa"]);wasmTable=Module["asm"]["Z"];addOnInit(Module["asm"]["Y"]);wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency("wasm-instantiate")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}function receiveInstantiationResult(result){receiveInstance(result["instance"],result["module"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);readyPromiseReject(e)}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;var ASM_CONSTS={};function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function killThread(pthread_ptr){var worker=PThread.pthreads[pthread_ptr];delete PThread.pthreads[pthread_ptr];worker.terminate();__emscripten_thread_free_data(pthread_ptr);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0}function cancelThread(pthread_ptr){var worker=PThread.pthreads[pthread_ptr];worker.postMessage({"cmd":"cancel"})}function cleanupThread(pthread_ptr){var worker=PThread.pthreads[pthread_ptr];assert(worker);PThread.returnWorkerToPool(worker)}function spawnThread(threadParams){var worker=PThread.getNewWorker();if(!worker){return 6}PThread.runningWorkers.push(worker);PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={"cmd":"run","start_routine":threadParams.startRoutine,"arg":threadParams.arg,"pthread_ptr":threadParams.pthread_ptr};worker.runPthread=()=>{if(ENVIRONMENT_IS_NODE){worker.ref()}msg.time=performance.now();worker.postMessage(msg,threadParams.transferList);delete worker.runPthread};if(worker.loaded){worker.runPthread()}return 0}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return()=>{crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return()=>crypto_module["randomBytes"](1)[0]}catch(e){}}return()=>abort("randomDevice")}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;for(var i=0;i{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,GROWABLE_HEAP_I8(),ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node},createPreloadedFile:(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=()=>{ok++;if(ok+fail==total)finish()};putRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}GROWABLE_HEAP_I32()[buf>>2]=stat.dev;GROWABLE_HEAP_I32()[buf+8>>2]=stat.ino;GROWABLE_HEAP_I32()[buf+12>>2]=stat.mode;GROWABLE_HEAP_U32()[buf+16>>2]=stat.nlink;GROWABLE_HEAP_I32()[buf+20>>2]=stat.uid;GROWABLE_HEAP_I32()[buf+24>>2]=stat.gid;GROWABLE_HEAP_I32()[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[buf+40>>2]=tempI64[0],GROWABLE_HEAP_I32()[buf+44>>2]=tempI64[1];GROWABLE_HEAP_I32()[buf+48>>2]=4096;GROWABLE_HEAP_I32()[buf+52>>2]=stat.blocks;tempI64=[Math.floor(stat.atime.getTime()/1e3)>>>0,(tempDouble=Math.floor(stat.atime.getTime()/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[buf+56>>2]=tempI64[0],GROWABLE_HEAP_I32()[buf+60>>2]=tempI64[1];GROWABLE_HEAP_U32()[buf+64>>2]=0;tempI64=[Math.floor(stat.mtime.getTime()/1e3)>>>0,(tempDouble=Math.floor(stat.mtime.getTime()/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[buf+72>>2]=tempI64[0],GROWABLE_HEAP_I32()[buf+76>>2]=tempI64[1];GROWABLE_HEAP_U32()[buf+80>>2]=0;tempI64=[Math.floor(stat.ctime.getTime()/1e3)>>>0,(tempDouble=Math.floor(stat.ctime.getTime()/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[buf+88>>2]=tempI64[0],GROWABLE_HEAP_I32()[buf+92>>2]=tempI64[1];GROWABLE_HEAP_U32()[buf+96>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[buf+104>>2]=tempI64[0],GROWABLE_HEAP_I32()[buf+108>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=GROWABLE_HEAP_U8().slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=GROWABLE_HEAP_I32()[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,code);EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;if(!implicit){if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw"unwind"}else{}}_proc_exit(status)}var _exit=exitJS;function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){if(ENVIRONMENT_IS_PTHREAD){PThread.initWorker()}else{PThread.initMainThread()}},initMainThread:function(){var pthreadPoolSize=8;while(pthreadPoolSize--){PThread.allocateUnusedWorker()}},initWorker:function(){noExitRuntime=false},setExitStatus:function(status){EXITSTATUS=status},terminateAllThreads:function(){for(var worker of Object.values(PThread.pthreads)){PThread.returnWorkerToPool(worker)}for(var worker of PThread.unusedWorkers){worker.terminate()}PThread.unusedWorkers=[]},returnWorkerToPool:function(worker){var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0;if(ENVIRONMENT_IS_NODE){worker.unref()}__emscripten_thread_free_data(pthread_ptr)},receiveObjectTransfer:function(data){},threadInitTLS:function(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=e=>{var d=e["data"];var cmd=d["cmd"];if(worker.pthread_ptr)PThread.currentProxiedOperationCallerThread=worker.pthread_ptr;if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var targetWorker=PThread.pthreads[d.targetThread];if(targetWorker){targetWorker.postMessage(d,d["transferList"])}else{err('Internal error! Worker sent a message "'+cmd+'" to target pthread '+d["targetThread"]+", but that thread no longer exists!")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd==="processProxyingQueue"){executeNotifiedProxyingQueue(d["queue"])}else if(cmd==="spawnThread"){spawnThread(d)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;if(ENVIRONMENT_IS_NODE){worker.unref()}if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread()}}else if(cmd==="print"){out("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="printErr"){err("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="alert"){alert("Thread "+d["threadId"]+": "+d["text"])}else if(d.target==="setimmediate"){worker.postMessage(d)}else if(cmd==="callHandler"){Module[d["handler"]](...d["args"])}else if(cmd){err("worker sent an unknown command "+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=e=>{var message="worker sent an error!";err(message+" "+e.filename+":"+e.lineno+": "+e.message);throw e};if(ENVIRONMENT_IS_NODE){worker.on("message",function(data){worker.onmessage({data:data})});worker.on("error",function(e){worker.onerror(e)});worker.on("detachedExit",function(){})}var handlers=[];var knownHandlers=["onExit","onAbort","print","printErr"];for(var handler of knownHandlers){if(Module.hasOwnProperty(handler)){handlers.push(handler)}}worker.postMessage({"cmd":"load","handlers":handlers,"urlOrBlob":Module["mainScriptUrlOrBlob"]||_scriptDir,"wasmMemory":wasmMemory,"wasmModule":wasmModule})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile("libwhisper.worker.js");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()}};Module["PThread"]=PThread;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function establishStackSpace(){var pthread_ptr=_pthread_self();var stackTop=GROWABLE_HEAP_I32()[pthread_ptr+52>>2];var stackSize=GROWABLE_HEAP_I32()[pthread_ptr+56>>2];var stackMax=stackTop-stackSize;_emscripten_stack_set_limits(stackTop,stackMax);stackRestore(stackTop)}Module["establishStackSpace"]=establishStackSpace;function exitOnMainThread(returnCode){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,0,returnCode);try{_exit(returnCode)}catch(e){handleException(e)}}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func}function invokeEntryPoint(ptr,arg){var result=getWasmTableEntry(ptr)(arg);if(keepRuntimeAlive()){PThread.setExitStatus(result)}else{__emscripten_thread_exit(result)}}Module["invokeEntryPoint"]=invokeEntryPoint;function registerTLSInit(tlsInitFunc){PThread.tlsInitFunctions.push(tlsInitFunc)}function ___cxa_allocate_exception(size){return _malloc(size+24)+24}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){GROWABLE_HEAP_U32()[this.ptr+4>>2]=type};this.get_type=function(){return GROWABLE_HEAP_U32()[this.ptr+4>>2]};this.set_destructor=function(destructor){GROWABLE_HEAP_U32()[this.ptr+8>>2]=destructor};this.get_destructor=function(){return GROWABLE_HEAP_U32()[this.ptr+8>>2]};this.set_refcount=function(refcount){GROWABLE_HEAP_I32()[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;GROWABLE_HEAP_I8()[this.ptr+12>>0]=caught};this.get_caught=function(){return GROWABLE_HEAP_I8()[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;GROWABLE_HEAP_I8()[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return GROWABLE_HEAP_I8()[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){Atomics.add(GROWABLE_HEAP_I32(),this.ptr+0>>2,1)};this.release_ref=function(){var prev=Atomics.sub(GROWABLE_HEAP_I32(),this.ptr+0>>2,1);return prev===1};this.set_adjusted_ptr=function(adjustedPtr){GROWABLE_HEAP_U32()[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return GROWABLE_HEAP_U32()[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return GROWABLE_HEAP_U32()[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function ___emscripten_init_main_thread_js(tb){__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,!ENVIRONMENT_IS_WEB);PThread.threadInitTLS()}function ___emscripten_thread_cleanup(thread){if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({"cmd":"cleanupThread","thread":thread})}function pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,pthread_ptr,attr,startRoutine,arg);return ___pthread_create_js(pthread_ptr,attr,startRoutine,arg)}function ___pthread_create_js(pthread_ptr,attr,startRoutine,arg){if(typeof SharedArrayBuffer=="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 6}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg)}if(error)return error;var threadParams={startRoutine:startRoutine,pthread_ptr:pthread_ptr,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)}function setErrNo(value){GROWABLE_HEAP_I32()[___errno_location()>>2]=value;return value}function ___syscall_fcntl64(fd,cmd,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,fd,cmd,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;GROWABLE_HEAP_I16()[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(5,1,fd,op,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();GROWABLE_HEAP_I32()[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(6,1,dirfd,path,flags,varargs);SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function __embind_register_bigint(primitiveType,name,size,minRange,maxRange){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(GROWABLE_HEAP_U8()[c]){ret+=embind_charCodes[GROWABLE_HEAP_U8()[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}return name}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}var name=registeredInstance.name;if(!rawType){throwBindingError('type "'+name+'" must have a positive integer typeid pointer')}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError("Cannot register type '"+name+"' twice")}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":8,"readValueFromPointer":function(pointer){var heap;if(size===1){heap=GROWABLE_HEAP_I8()}else if(size===2){heap=GROWABLE_HEAP_I16()}else if(size===4){heap=GROWABLE_HEAP_I32()}else{throw new TypeError("Unknown boolean type size: "+name)}return this["fromWireType"](heap[pointer>>shift])},destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle}}}};function simpleReadValueFromPointer(pointer){return this["fromWireType"](GROWABLE_HEAP_I32()[pointer>>2])}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":function(destructors,value){return Emval.toHandle(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](GROWABLE_HEAP_F32()[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](GROWABLE_HEAP_F64()[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)}function dynCall(sig,ptr,args){if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn}function getDynCaller(sig,ptr){var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError("unknown function pointer with signature "+signature+": "+rawFunction)}return fp}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(message+": "+unboundTypes.map(getTypeName).join([", "]))}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return GROWABLE_HEAP_I8()[pointer]}:function readU8FromPointer(pointer){return GROWABLE_HEAP_U8()[pointer]};case 1:return signed?function readS16FromPointer(pointer){return GROWABLE_HEAP_I16()[pointer>>1]}:function readU16FromPointer(pointer){return GROWABLE_HEAP_U16()[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return GROWABLE_HEAP_I32()[pointer>>2]}:function readU32FromPointer(pointer){return GROWABLE_HEAP_U32()[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=GROWABLE_HEAP_U32();var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=GROWABLE_HEAP_U32()[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||GROWABLE_HEAP_U8()[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}GROWABLE_HEAP_U8()[ptr+i]=charCode}}else{for(var i=0;i>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&GROWABLE_HEAP_U16()[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(GROWABLE_HEAP_U8().slice(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=GROWABLE_HEAP_I16()[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}GROWABLE_HEAP_I16()[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=GROWABLE_HEAP_I32()[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}GROWABLE_HEAP_I32()[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}GROWABLE_HEAP_I32()[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>GROWABLE_HEAP_U16();shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>GROWABLE_HEAP_U32();shift=2}registerType(rawType,{name:name,"fromWireType":function(value){var length=GROWABLE_HEAP_U32()[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value=="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);GROWABLE_HEAP_U32()[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function __emscripten_default_pthread_stack_size(){return 65536}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function executeNotifiedProxyingQueue(queue){Atomics.store(GROWABLE_HEAP_I32(),queue>>2,1);if(_pthread_self()){__emscripten_proxy_execute_task_queue(queue)}Atomics.compareExchange(GROWABLE_HEAP_I32(),queue>>2,1,0)}Module["executeNotifiedProxyingQueue"]=executeNotifiedProxyingQueue;function __emscripten_notify_task_queue(targetThreadId,currThreadId,mainThreadId,queue){if(targetThreadId==currThreadId){setTimeout(()=>executeNotifiedProxyingQueue(queue))}else if(ENVIRONMENT_IS_PTHREAD){postMessage({"targetThread":targetThreadId,"cmd":"processProxyingQueue","queue":queue})}else{var worker=PThread.pthreads[targetThreadId];if(!worker){return}worker.postMessage({"cmd":"processProxyingQueue","queue":queue})}return 1}function __emscripten_set_offscreencanvas_size(target,width,height){return-1}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __emval_as(handle,returnType,destructorsRef){handle=Emval.toValue(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=Emval.toHandle(destructors);GROWABLE_HEAP_U32()[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}return symbol}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=Emval.toValue(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2],"parameter "+i)}return a}var emval_registeredMethods=[];function __emval_get_method_caller(argCount,argTypes){var types=emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var returnId=emval_registeredMethods[signatureName];if(returnId!==undefined){return returnId}var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;iGROWABLE_HEAP_U32();var functionBody="return function emval_allocator_"+argCount+"(constructor, argTypes, args) {\n"+" var HEAPU32 = getMemory();\n";for(var i=0;i>2)], 'parameter "+i+"');\n"+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"+"argTypes += 4;\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return valueToHandle(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","valueToHandle","getMemory",functionBody)(requireRegisteredType,Module,Emval.toHandle,getMemory)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=Emval.toValue(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return Emval.toHandle(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)}function _abort(){abort("")}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}}function _emscripten_check_blocking_allowed(){if(ENVIRONMENT_IS_NODE)return;if(ENVIRONMENT_IS_WORKER)return;warnOnce("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function getHeapMax(){return 2147483648}function _emscripten_get_heap_max(){return getHeapMax()}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=()=>{var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(ENVIRONMENT_IS_PTHREAD){_emscripten_get_now=()=>performance.now()-Module["__performance_now_clock_drift"]}else _emscripten_get_now=()=>performance.now();function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest,src,src+num)}function _emscripten_num_logical_cores(){if(ENVIRONMENT_IS_NODE)return require("os").cpus().length;return navigator["hardwareConcurrency"]}function withStackSave(f){var stack=stackSave();var ret=f();stackRestore(stack);return ret}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var outerArgs=arguments;return withStackSave(()=>{var serializedNumCallArgs=numCallArgs;var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i>3;for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=GROWABLE_HEAP_U8().length;requestedSize=requestedSize>>>0;if(requestedSize<=oldSize){return false}var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_unwind_to_js_event_loop(){throw"unwind"}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)GROWABLE_HEAP_I8()[buffer>>0]=0}function _environ_get(__environ,environ_buf){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(7,1,__environ,environ_buf);var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;GROWABLE_HEAP_U32()[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(8,1,penviron_count,penviron_buf_size);var strings=getEnvStrings();GROWABLE_HEAP_U32()[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});GROWABLE_HEAP_U32()[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(9,1,fd);try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=GROWABLE_HEAP_U32()[iov+4>>2];iov+=8;var curr=FS.read(stream,GROWABLE_HEAP_I8(),ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(11,1,fd,offset_low,offset_high,whence,newOffset);try{var offset=convertI32PairToI53Checked(offset_low,offset_high);if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[newOffset>>2]=tempI64[0],GROWABLE_HEAP_I32()[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=GROWABLE_HEAP_U32()[iov+4>>2];iov+=8;var curr=FS.write(stream,GROWABLE_HEAP_I8(),ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(12,1,fd,iov,iovcnt,pnum);try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);GROWABLE_HEAP_U32()[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function writeArrayToMemory(array,buffer){GROWABLE_HEAP_I8().set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=GROWABLE_HEAP_I32()[tm+40>>2];var date={tm_sec:GROWABLE_HEAP_I32()[tm>>2],tm_min:GROWABLE_HEAP_I32()[tm+4>>2],tm_hour:GROWABLE_HEAP_I32()[tm+8>>2],tm_mday:GROWABLE_HEAP_I32()[tm+12>>2],tm_mon:GROWABLE_HEAP_I32()[tm+16>>2],tm_year:GROWABLE_HEAP_I32()[tm+20>>2],tm_wday:GROWABLE_HEAP_I32()[tm+24>>2],tm_yday:GROWABLE_HEAP_I32()[tm+28>>2],tm_isdst:GROWABLE_HEAP_I32()[tm+32>>2],tm_gmtoff:GROWABLE_HEAP_I32()[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm,loc){return _strftime(s,maxsize,format,tm)}PThread.init();var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");var proxiedFunctionTable=[null,_proc_exit,exitOnMainThread,pthreadCreateProxied,___syscall_fcntl64,___syscall_ioctl,___syscall_openat,_environ_get,_environ_sizes_get,_fd_close,_fd_read,_fd_seek,_fd_write];var ASSERTIONS=false;var decodeBase64=typeof atob=="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve(Module);initRuntime();postMessage({"cmd":"loaded"});return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); +function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU8}function GROWABLE_HEAP_I16(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP16}function GROWABLE_HEAP_U16(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU16}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPU32}function GROWABLE_HEAP_F32(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPF32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=HEAP8.buffer){updateMemoryViews()}return HEAPF64}var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var ENVIRONMENT_IS_PTHREAD=Module["ENVIRONMENT_IS_PTHREAD"]||false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]";let nodeWorkerThreads;try{nodeWorkerThreads=require("worker_threads")}catch(e){console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?');throw e}global.Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}if(!ENVIRONMENT_IS_NODE){read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance=="undefined"){global.performance=require("perf_hooks").performance}}var defaultPrint=console.log.bind(console);var defaultPrintErr=console.error.bind(console);if(ENVIRONMENT_IS_NODE){defaultPrint=(...args)=>fs.writeSync(1,args.join(" ")+"\n");defaultPrintErr=(...args)=>fs.writeSync(2,args.join(" ")+"\n")}var out=Module["print"]||defaultPrint;var err=Module["printErr"]||defaultPrintErr;Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;assert(INITIAL_MEMORY>=65536,"INITIAL_MEMORY should be larger than STACK_SIZE, was "+INITIAL_MEMORY+"! (STACK_SIZE="+65536+")");if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module["wasmMemory"]}else{if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":2147483648/65536,"shared":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){err("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)")}throw Error("bad memory")}}}updateMemoryViews();INITIAL_MEMORY=wasmMemory.buffer.byteLength;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,AGFzbQEAAAABxQRKYAF/AGABfwF/YAJ/fwBgA39/fwF/YAJ/fwF/YAN/f38AYAR/f39/AGAEf39/fwF/YAZ/f39/f38Bf2AAAGAFf39/f38Bf2AFf39/f38AYAZ/f39/f38AYAh/f39/f39/fwF/YAABf2AHf39/f39/fwF/YAd/f39/f39/AGABfQF9YAV/fn5+fgBgA39+fwF+YAV/f39/fgF/YAR/f39/AX5gBH9+fn8AYAp/f39/f39/f39/AX9gB39/f39/fn4Bf2AGf39/f35+AX9gBX9/fn9/AGADf39/AXxgBH9/f38BfGAEf39+fgF/YAJ/fgBgAXwBfWACfH8BfGAFf39+fn4Bf2AIf39/f39/f38AYAx/f39/f39/f39/f38Bf2ADf35/AX9gD39/f39/f39/f39/f39/fwBgCn9/f39/f39/f38AYAt/f39/f39/f39/fwF/YAZ/fH9/f38Bf2AJf39/f39/f39/AGAFf39/f3wBf2AAAXxgA39/fgF/YAABfmACf3wAYAJ9fQF9YAR+fn5+AX9gA39/fQF/YAJ+fwF/YAN/f3wBf2ACf30Bf2ABfABgBn9/fn5/fwF/YAR/f35/AX9gAn5+AXxgAnx8AXxgBH9/fn4AYAR/f399AGADf39/AX1gBH9/f34BfmADf39+AGACfn4BfWACf38BfmADfn5+AX9gCH9/fn5+f39/AX9gAX4Bf2ABfAF8YAF/AX5gAn1/AX9gBX9/f319AGAFf39/f30AYAl/f39/f39/f38BfwKmAjABYQFiAAkBYQFjAAUBYQFkAAUBYQFlACsBYQFmAAABYQFnAAsBYQFoABABYQFpAAQBYQFqAAEBYQFrAAUBYQFsAAABYQFtAAABYQFuAAkBYQFvAAEBYQFwAAcBYQFxAAMBYQFyAAIBYQFzAAUBYQF0AAcBYQF1AAEBYQF2AAABYQF3ABsBYQF4AAoBYQF5ABABYQF6AA4BYQFBAA4BYQFCAAoBYQFDAAQBYQFEAAQBYQFFAAEBYQFGAAUBYQFHAAABYQFIAAcBYQFJABwBYQFKAAABYQFLAAABYQFMAAcBYQFNAAMBYQFOAAcBYQFPAAkBYQFQAAABYQFRAA4BYQFSAAIBYQFTAAYBYQFUAAIBYQFVAAYBYQFWAAQBYQFhAgOAAoCAAgPEBsIGAAIBAREC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QQRrIgJBA0sNAAsLIAJFDQELA0AgAC0AACIDIAEtAAAiBEYEQCABQQFqIQEgAEEBaiEAIAJBAWsiAg0BDAILCyADIARrDwtBAAvFCgIFfxF+IwBB4ABrIgUkACAEQv///////z+DIQwgAiAEhUKAgICAgICAgIB/gyEKIAJC////////P4MiDUIgiCEOIARCMIinQf//AXEhBwJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAdB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiC0KAgICAgIDA//8AVCALQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQoMAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhCiADIQEMAgsgASALQoCAgICAgMD//wCFhFAEQCACIAOEUARAQoCAgICAgOD//wAhCkIAIQEMAwsgCkKAgICAgIDA//8AhCEKQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAIAEgC4QhGUIAIQEgGVAEQEKAgICAgIDg//8AIQoMAwsgCkKAgICAgIDA//8AhCEKDAILIAEgC4RQBEBCACEBDAILIAIgA4RQBEBCACEBDAILIAtC////////P1gEQCAFQdAAaiABIA0gASANIA1QIgYbeSAGQQZ0rXynIgZBD2sQZUEQIAZrIQYgBSkDWCINQiCIIQ4gBSkDUCEBCyACQv///////z9WDQAgBUFAayADIAwgAyAMIAxQIggbeSAIQQZ0rXynIghBD2sQZSAGIAhrQRBqIQYgBSkDSCEMIAUpA0AhAwsgA0IPhiILQoCA/v8PgyICIAFCIIgiBH4iECALQiCIIhMgAUL/////D4MiAX58Ig9CIIYiESABIAJ+fCILIBFUrSACIA1C/////w+DIg1+IhUgBCATfnwiESAMQg+GIhIgA0IxiIRC/////w+DIgMgAX58IhQgDyAQVK1CIIYgD0IgiIR8Ig8gAiAOQoCABIQiDH4iFiANIBN+fCIOIBJCIIhCgICAgAiEIgIgAX58IhAgAyAEfnwiEkIghnwiF3whASAHIAlqIAZqQf//AGshBgJAIAIgBH4iGCAMIBN+fCIEIBhUrSAEIAQgAyANfnwiBFatfCAC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LQAADQALDAELA0AgASICQQRqIQEgAigCACIDQX9zIANBgYKECGtxQYCBgoR4cUUNAAsDQCACIgFBAWohAiABLQAADQALCyABIABrC4oDAgN/AXwjAEEQayIBJAACQCAAvCIDQf////8HcSICQdqfpPoDTQRAIAJBgICAzANJDQEgALsQggEhAAwBCyACQdGn7YMETQRAIAC7IQQgAkHjl9uABE0EQCADQQBIBEAgBEQYLURU+yH5P6AQgwGMIQAMAwsgBEQYLURU+yH5v6AQgwEhAAwCC0QYLURU+yEJwEQYLURU+yEJQCADQQBOGyAEoJoQggEhAAwBCyACQdXjiIcETQRAIAJB39u/hQRNBEAgALshBCADQQBIBEAgBETSITN/fNkSQKAQgwEhAAwDCyAERNIhM3982RLAoBCDAYwhAAwCC0QYLURU+yEZQEQYLURU+yEZwCADQQBIGyAAu6AQggEhAAwBCyACQYCAgPwHTwRAIAAgAJMhAAwBCwJAAkACQAJAIAAgAUEIahCaBEEDcQ4DAAECAwsgASsDCBCCASEADAMLIAErAwgQgwEhAAwCCyABKwMImhCCASEADAELIAErAwgQgwGMIQALIAFBEGokACAAC8EBAQN/IwBBEGsiBSQAAkAgAiAALQALQQd2BH8gACgCCEH/////B3FBAWsFQQoLIgQCfyAALQALQQd2BEAgACgCBAwBCyAALQALQf8AcQsiA2tNBEAgAkUNAQJ/IAAtAAtBB3YEQCAAKAIADAELIAALIgQgA2ogASACEHggACACIANqIgEQmAEgBUEAOgAPIAEgBGogBS0ADzoAAAwBCyAAIAQgAiAEayADaiADIANBACACIAEQwQELIAVBEGokACAACy4BAX8jAEEQayIDJAAgAyACNgIMIABBnAFqQcAAIAEgAhC8ARogA0EQaiQAIAALCgAgAEHE7jQQegsEAEEAC4wCAgJ/AnwgALwiAUGAgID8A0YEQEMAAAAADwsCQCABQYCAgPwHa0H///+HeE0EQCABQQF0IgJFBEAjAEEQayIBQwAAgL84AgwgASoCDEMAAAAAlQ8LIAFBgICA/AdGDQEgAkGAgIB4SSABQQBOcUUEQCAAIACTIgAgAJUPCyAAQwAAAEuUvEGAgIDcAGshAQtB4IQCKwMAIAEgAUGAgMz5A2siAUGAgIB8cWu+uyABQQ92QfABcSICQdiCAmorAwCiRAAAAAAAAPC/oCIDIAOiIgSiQeiEAisDACADokHwhAIrAwCgoCAEoiABQRd1t0HYhAIrAwCiIAJB4IICaisDAKAgA6CgtiEACyAACy0AIAJFBEAgACgCBCABKAIERg8LIAAgAUYEQEEBDwsgACgCBCABKAIEEJ4BRQvhAgIGfwF+IABCADcCBCAAIABBBGoiBTYCACABKAIEIgIEQCABKAIAIgYgAkEDdGohBwNAIAAoAgQhBAJAAkACQCAFIgEgACgCAEYNACABIQICQCAEIgMEQANAIAMiASgCBCIDDQAMAgsACwNAIAIoAggiASgCACACRiEIIAEhAiAIDQALCyAGKAIAIgMgASgCEEoNACAFIgIhASAERQ0BA0AgBCIBKAIQIgIgA0oEQCABIQIgASgCACIEDQEMAwsgAiADTg0DIAEoAgQiBA0ACyABQQRqIQIMAQsgAUEEaiAFIAQbIgIoAgANASABIAUgBBshAQtBGBAxIQMgBikCACEJIAMgATYCCCADQgA3AgAgAyAJNwIQIAIgAzYCACAAKAIAKAIAIgEEQCAAIAE2AgAgAigCACEDCyAAKAIEIAMQlwEgACAAKAIIQQFqNgIICyAGQQhqIgYgB0cNAAsLIAAL1gEBAn8jAEEQayIEJAACQAJAIAJBC0kEQCAAIgMgAC0AC0GAAXEgAnI6AAsgACAALQALQf8AcToACwwBCyACQe////8HSw0BIARBCGogACACQQtPBH8gAkEQakFwcSIDIANBAWsiAyADQQtGGwVBCgtBAWoQugEgBCgCDBogACAEKAIIIgM2AgAgACAAKAIIQYCAgIB4cSAEKAIMQf////8HcXI2AgggACAAKAIIQYCAgIB4cjYCCCAAIAI2AgQLIAMgASACQQFqEHggBEEQaiQADwsQSwALUgEBfyABQQFrIgJBEE0EfyACQQJ0QcyNA2ooAgAFQeMgCyECIABB2JkDNgIAIABB3JoDNgIAIABBBGogAhDyAiAAIAE2AgggAEGYhQM2AgAgAAvHCQIEfwZ+IwBB8ABrIgYkACAEQv///////////wCDIQkCQAJAIAFQIgUgAkL///////////8AgyIKQoCAgICAgMD//wB9QoCAgICAgMCAgH9UIApQG0UEQCADQgBSIAlCgICAgICAwP//AH0iC0KAgICAgIDAgIB/ViALQoCAgICAgMCAgH9RGw0BCyAFIApCgICAgICAwP//AFQgCkKAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEEIAEhAwwCCyADUCAJQoCAgICAgMD//wBUIAlCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhBAwCCyABIApCgICAgICAwP//AIWEUARAQoCAgICAgOD//wAgAiABIAOFIAIgBIVCgICAgICAgICAf4WEUCIFGyEEQgAgASAFGyEDDAILIAMgCUKAgICAgIDA//8AhYRQDQEgASAKhFAEQCADIAmEQgBSDQIgASADgyEDIAIgBIMhBAwCCyADIAmEQgBSDQAgASEDIAIhBAwBCyADIAEgASADVCAJIApWIAkgClEbIggbIQogBCACIAgbIgtC////////P4MhCSACIAQgCBsiAkIwiKdB//8BcSEHIAtCMIinQf//AXEiBUUEQCAGQeAAaiAKIAkgCiAJIAlQIgUbeSAFQQZ0rXynIgVBD2sQZSAGKQNoIQkgBikDYCEKQRAgBWshBQsgASADIAgbIQMgAkL///////8/gyEEIAdFBEAgBkHQAGogAyAEIAMgBCAEUCIHG3kgB0EGdK18pyIHQQ9rEGVBECAHayEHIAYpA1ghBCAGKQNQIQMLIARCA4YgA0I9iIRCgICAgICAgASEIQEgCUIDhiAKQj2IhCEOIAIgC4UhDQJ+IANCA4YiAiAFIAdGDQAaIAUgB2siB0H/AEsEQEIAIQFCAQwBCyAGQUBrIAIgAUGAASAHaxBlIAZBMGogAiABIAcQqAEgBikDOCEBIAYpAzAgBikDQCAGKQNIhEIAUq2ECyEJIA5CgICAgICAgASEIQwgCkIDhiEKAkAgDUIAUwRAQgAhA0IAIQQgCSAKhSABIAyFhFANAiAKIAl9IQIgDCABfSAJIApWrX0iBEL/////////A1YNASAGQSBqIAIgBCACIAQgBFAiBxt5IAdBBnStfKdBDGsiBxBlIAUgB2shBSAGKQMoIQQgBikDICECDAELIAkgCnwiAiAJVK0gASAMfHwiBEKAgICAgICACINQDQAgCUIBgyAEQj+GIAJCAYiEhCECIAVBAWohBSAEQgGIIQQLIAtCgICAgICAgICAf4MhASAFQf//AU4EQCABQoCAgICAgMD//wCEIQRCACEDDAELQQAhBwJAIAVBAEoEQCAFIQcMAQsgBkEQaiACIAQgBUH/AGoQZSAGIAIgBEEBIAVrEKgBIAYpAwAgBikDECAGKQMYhEIAUq2EIQIgBikDCCEECyACp0EHcSIFQQRLrSAEQj2GIAJCA4iEIgJ8IgMgAlStIARCA4hC////////P4MgB61CMIaEIAGEfCEEAkAgBUEERgRAIAQgA0IBgyIBIAN8IgMgAVStfCEEDAELIAVFDQELCyAAIAM3AwAgACAENwMIIAZB8ABqJAALCgAgAEHM7jQQegs4AgN/AX4jAEEQayIAJAAgABDQASAAKQMAIQMgACgCCCECIABBEGokACACQegHbawgA0LAhD1+fAtkACACKAIEQbABcSICQSBGBEAgAQ8LAkAgAkEQRw0AAkACQCAALQAAIgJBK2sOAwABAAELIABBAWoPCyABIABrQQJIDQAgAkEwRw0AIAAtAAFBIHJB+ABHDQAgAEECaiEACyAACz0BAn8CfyAALQALQQd2BEAgACgCAAwBCyAACyEBIwBBEGsiACQAIAAgATYCDCAAKAIMIQIgAEEQaiQAIAILfgICfwF+IwBBEGsiAyQAIAACfiABRQRAQgAMAQsgAyABIAFBH3UiAnMgAmsiAq1CACACZyICQdEAahBlIAMpAwhCgICAgICAwACFQZ6AASACa61CMIZ8IAFBgICAgHhxrUIghoQhBCADKQMACzcDACAAIAQ3AwggA0EQaiQACwwAIAEgAiAAEO8DGguJAgEHfyABIAAoAggiAyAAKAIEIgJrQQJ1TQRAIAAgAQR/IAJBACABQQJ0IgD8CwAgACACagUgAgs2AgQPCwJAIAIgACgCACIFa0ECdSIHIAFqIgRBgICAgARJBEBB/////wMgAyAFayIDQQF1IgggBCAEIAhJGyADQfz///8HTxsiAwRAIANBgICAgARPDQIgA0ECdBAxIQYLIAdBAnQgBmoiBEEAIAFBAnQiAfwLACABIARqIQEgAiAFRwRAA0AgBEEEayIEIAJBBGsiAioCADgCACACIAVHDQALCyAAIAYgA0ECdGo2AgggACABNgIEIAAgBDYCACAFBEAgBRAvCw8LEEEACxBRAAsnACAAKAIAIgAgARBJIgEQlgNFBEAQRwALIAAoAgggAUECdGooAgALjwQBA38gAkGABE8EQCAAIAEgAvwKAAAgAA8LIAAgAmohBAJAIAAgAXNBA3FFBEACfyAAIABBA3FFDQAaIAAgAkUNABogACABIABBf3MiAiAEIABBAWoiAyADIARJG2oiAyACQQNxIgIgAiADSxtBAWoiAvwKAAAgASACaiEBIAAgAmoLIQICQCAEQXxxIgNBwABJDQAgAiADQUBqIgVLDQADQCACIAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAiABKAIoNgIoIAIgASgCLDYCLCACIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCACIAEoAjw2AjwgAUFAayEBIAJBQGsiAiAFTQ0ACwsgAiADTw0BIAIgASACQX9zIAMgAkEEaiIFIAMgBUsbakF8cUEEaiID/AoAACABIANqIQEgAiADaiECDAELIARBBEkEQCAAIQIMAQsgACAEQQRrIgNLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIANNDQALCyACIARJBEAgAiABIAQgAmv8CgAACyAAC1ACAn4BfyAAKQMoIgEgADUCPH4iAiAAKAIAQSRsIgNBmOoAajUCACAAKQMgIAApAxggACkDECABfn5+fiADQZTqAGo0AgB/IgEgASACUxunCyAAIwBBEGsiASQAIABCADcCACAAQQA2AgggAUEQaiQAC/ACAQZ/An8jAEFAaiIEJAAgASkDKCABKQMgIAEpAxggASkDEH5+fiACKQMoIAIpAyAgAikDGCACKQMQfn5+UQRAIAJBEGohAwJAIAEoAmhFBEAgAigCaEUNAQtBASEGCyAAIAIoAgAgAigCCCADIAIoApgBEEAhCCAEIAJBnAFqIgc2AiAgCEGlwwAgBEEgahBqIgMgAigCMDYCMCADIAIoAjQ2AjQgAyACKAI4NgI4IAMgAigCPDYCPCABQZwBaiEFAkAgAi0AnAEEQCAEIAU2AhQgBCAHNgIQIANBy8sAIARBEGoQahoMAQsgBCAFNgIAIANBm8MAIAQQahoLIANBGzYCQEEAIQUgBgRAIAAgAygCACADKAIIIANBEGpBABBAIQULIAMgATYCbCADIAU2AmggAyACNgJwIARBQGskACADDAELIARB2c0ANgI4IARB3i82AjQgBEHoJDYCMEHopwIoAgAgBEEwahAwEAAACwsSACAAKAIAIgAEQCAAEMwDGgsLEQAgACABKAIAEMwDNgIAIAALRwECfyAAIAE3A3AgACAAKAIsIAAoAgQiA2usNwN4IAAoAgghAgJAIAFQDQAgAiADa6wgAVcNACADIAGnaiECCyAAIAI2AmgLSwECfCAAIACiIgEgAKIiAiABIAGioiABRKdGO4yHzcY+okR058ri+QAqv6CiIAIgAUSy+26JEBGBP6JEd6zLVFVVxb+goiAAoKC2C08BAXwgACAAoiIAIAAgAKIiAaIgAERpUO7gQpP5PqJEJx4P6IfAVr+goiABREI6BeFTVaU/oiAARIFeDP3//9+/okQAAAAAAADwP6CgoLYLdgEBfyMAQRBrIgIkACAALQALQQd2BEAgACAAKAIAIAAoAghB/////wdxENcBCyAAIAEoAgg2AgggACABKQIANwIAIAEgAS0AC0GAAXE6AAsgASABLQALQf8AcToACyACQQA2AgwgASACKAIMNgIAIAJBEGokAAuyAgEEfyMAQRBrIgckACAHIAE2AgxBACEBQQYhBQJAAkAgACAHQQxqED4NAEEEIQUgA0HAAAJ/IAAoAgAiBigCDCIIIAYoAhBGBEAgBiAGKAIAKAIkEQEADAELIAgoAgALIgYgAygCACgCDBEDAEUNACADIAZBACADKAIAKAI0EQMAIQEDQAJAIAAQXBogAUEwayEBIAAgB0EMahA+DQAgBEECSA0AIANBwAACfyAAKAIAIgUoAgwiBiAFKAIQRgRAIAUgBSgCACgCJBEBAAwBCyAGKAIACyIFIAMoAgAoAgwRAwBFDQMgBEEBayEEIAMgBUEAIAMoAgAoAjQRAwAgAUEKbGohAQwBCwtBAiEFIAAgB0EMahA+RQ0BCyACIAIoAgAgBXI2AgALIAdBEGokACABC9gCAQR/IwBBEGsiByQAIAcgATYCDEEAIQFBBiEFAkACQCAAIAdBDGoQPw0AQQQhBQJ/IAAoAgAiBigCDCIIIAYoAhBGBEAgBiAGKAIAKAIkEQEADAELIAgtAAAL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IAVBf3MgAmohDCACIAVrQQNxIgQEQEEAIQEDQCADQQFrIgMgAkEBayICLQAAOgAAIAFBAWoiASAERw0ACwsgDEEDSQ0AA0AgA0EBayACQQFrLQAAOgAAIANBAmsgAkECay0AADoAACADQQNrIAJBA2stAAA6AAAgA0EEayIDIAJBBGsiAi0AADoAACACIAVHDQALCyAAKAIAIQILIAAgCDYCCCAAIAk2AgQgACAHNgIAIAIEQCACEC8LDwsQQQALHwBBCBBhIAAQ8QIiAEHAmwM2AgAgAEHgmwNBBxACAAuUBAEEfyABIAAgAUYiAjoADAJAIAINAANAIAEoAggiAi0ADA0BAkAgAiACKAIIIgMoAgAiBEYEQAJAIAMoAgQiBEUNACAELQAMDQAMAgsCQCABIAIoAgBGBEAgAiEBDAELIAIgAigCBCIBKAIAIgA2AgQgASAABH8gACACNgIIIAIoAggFIAMLNgIIIAIoAggiACAAKAIAIAJHQQJ0aiABNgIAIAEgAjYCACACIAE2AgggASgCCCIDKAIAIQILIAFBAToADCADQQA6AAwgAyACKAIEIgA2AgAgAARAIAAgAzYCCAsgAiADKAIINgIIIAMoAggiACAAKAIAIANHQQJ0aiACNgIAIAIgAzYCBCADIAI2AggPCwJAIARFDQAgBC0ADA0ADAELAkAgASACKAIARwRAIAIhAQwBCyACIAEoAgQiADYCACABIAAEfyAAIAI2AgggAigCCAUgAws2AgggAigCCCIAIAAoAgAgAkdBAnRqIAE2AgAgASACNgIEIAIgATYCCCABKAIIIQMLIAFBAToADCADQQA6AAwgAyADKAIEIgAoAgAiATYCBCABBEAgASADNgIICyAAIAMoAgg2AgggAygCCCIBIAEoAgAgA0dBAnRqIAA2AgAgACADNgIAIAMgADYCCAwCCyAEQQxqIQUgAkEBOgAMIAMgACADRjoADCAFQQE6AAAgAyIBIABHDQALCws0ACAALQALQQd2BEAgACABNgIEDwsgACAALQALQYABcSABcjoACyAAIAAtAAtB/wBxOgALCwwAIABBgoaAIDYAAAtfAQJ/An8gAC0AC0EHdgRAIAAoAgAMAQsgAAsCfyAALQALQQd2BEAgACgCBAwBCyAALQALQf8AcQtBAnRqIQEjAEEQayIAJAAgACAB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IAZB/////wNPGyIEBH8gBBAxBUEACyIFaiIDIAE6AAAgBCAFaiEIIANBAWohCQJAIAIgB0YEQCADIQUMAQsCQAJAIAZBEEkNACAHIAIgBWprIAJqQRBJDQAgA0EQayEKIAJBEGshCyACIAZBcHEiBGshAiADIARrIQNBACEBA0AgCiABayALIAFr/QAAAP0LAAAgAUEQaiIBIARHDQALIAQgBkYNAQsgB0F/cyACaiEOIAIgB2tBA3EiBARAQQAhAQNAIANBAWsiAyACQQFrIgItAAA6AAAgAUEBaiIBIARHDQALCyAOQQNJDQADQCADQQFrIAJBAWstAAA6AAAgA0ECayACQQJrLQAAOgAAIANBA2sgAkEDay0AADoAACADQQRrIgMgAkEEayICLQAAOgAAIAIgB0cNAAsLIAAoAhQhAgsgACAINgIcIAAgCTYCGCAAIAU2AhQgAkUNAQsgAhAvCw8LEEEACxBBAAsgAiABOgAAIAAgAkEBajYCGAsTACABQQF0QcCOA2pBAiAAEO8DC3YBAX8jAEEQayICJAAgAiAANgIMAkAgACABRg0AA0AgAiABQQFrIgE2AgggACABTw0BIAIoAgwiAC0AACEBIAAgAigCCCIALQAAOgAAIAAgAToAACACIAIoAgxBAWoiADYCDCACKAIIIQEMAAsACyACQRBqJAALlgQBBn8jAEHQAGsiAyQAIABBiIADaiEFIAFB0cAAcCIGIQICQANAIAUgAkECdGoiBygCACIERQ0BIAEgBEYNASACQQFqIgJBACACQdHAAEcbIgIgBkcNAAsgA0GrHzYCSCADQeGCATYCRCADQegkNgJAQeinAigCACADQUBrEDAQAAALAkACQAJAIAEgBEYNACAHIAE2AgAgASgCbCICBEAgACACEKUBCyABKAJwIgIEQCAAIAIQpQELIAEoAnQiAgRAIAAgAhClAQsgASgCeCICBEAgACACEKUBCyABKAJ8IgIEQCAAIAIQpQELIAEoAoABIgIEQCAAIAIQpQELAkAgASgCQA0AIAEoAmgNACAAKAIEIgJBgCBODQIgAS0AnAFFBEAgAyACNgIAIAFBhyQgAxBqGiAAKAIEIQILIAAgAkECdGpBiIACaiABNgIAIAAgAkEBajYCBAwBCyAAKAIAIgJBgCBODQIgAS0AnAFFBEAgAyACNgIgIAFBjyQgA0EgahBqGiAAKAIAIQILIAAgAkECdGoiBCABNgIIIARBiIABaiABKAJoNgIAIAAgAkEBajYCAAsgA0HQAGokAA8LIANBzyk2AhggA0GEgwE2AhQgA0HoJDYCEEHopwIoAgAgA0EQahAwEAAACyADQfApNgI4IANBjYMBNgI0IANB6CQ2AjBB6KcCKAIAIANBMGoQMBAAAAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEBBfyEEIAAgAlQgASADUyABIANRGw0BIAAgAoUgASADhYRCAFIPC0F/IQQgACACViABIANVIAEgA1EbDQAgACAChSABIAOFhEIAUiEECyAECx8BAX8jAEEQayICJAAgACABIAEQZxDwAiACQRBqJAALUAEBfgJAIANBwABxBEAgAiADQUBqrYghAUIAIQIMAQsgA0UNACACQcAAIANrrYYgASADrSIEiIQhASACIASIIQILIAAgATcDACAAIAI3AwgLqAEAAkAgAUGACE4EQCAARAAAAAAAAOB/oiEAIAFB/w9JBEAgAUH/B2shAQwCCyAARAAAAAAAAOB/oiEAQf0XIAEgAUH9F04bQf4PayEBDAELIAFBgXhKDQAgAEQAAAAAAABgA6IhACABQbhwSwRAIAFByQdqIQEMAQsgAEQAAAAAAABgA6IhAEHwaCABIAFB8GhMG0GSD2ohAQsgACABQf8Haq1CNIa/oguoAQEBfyMAQSBrIgMkAAJAIAEoAmhFBEAgACABKAIAIAEoAgggAUEQakEAEEAiAEUNASAAIAE2AmwgAEEANgJoIABBEzYCQCAAIAI4AkQgA0EgaiQAIAAPCyADQasfNgIYIANBoC02AhQgA0HoJDYCEEHopwIoAgAgA0EQahAwEAAACyADQdkqNgIIIANBpiQ2AgQgA0HoJDYCAEHopwIoAgAgAxAwEAAAC8ECAgN/Bn4jAEEwayIDJAACfwJAAkAgAikDECABKQMQUg0AIAEpAxgiBiACKQMYIgeBQgBSDQAgASkDICIIIAIpAyAi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An8CQCABKwMgIgogACsDIGRFBEBBACAJIApkRQ0CGiADIAEtAAg6ADggAyABKQMANwMwIAEoAhQhBSABKAIQIQYgAUIANwMQIAEoAhghByABQQA2AhggAyABKAJENgIoIAMgASkCPDcDICADIAH9AAIs/QsDECADIAH9AAIc/QsDACABIAIpAwA3AwAgASACLQAIOgAIIAEgAigCEDYCECABIAIoAhQ2AhQgASACKAIYNgIYIAJBADYCECACQQA2AhggASACKAJENgJEIAEgAikCPDcCPCABIAL9AAIs/QsCLCABIAL9AAIc/QsCHCACIAMpAzA3AwAgAiADLQA4OgAIIAIoAhAiBARAIAIgBDYCFCAEEC8LIAIgBzYCGCACIAU2AhQgAiAGNgIQIAIgAygCKDYCRCACIAMpAyA3AjwgAiAD/QADEP0LAiwgAiAD/QADAP0LAhxBASABKwMgIAArAyBkRQ0CGiADIAAtAAg6ADggAyAAKQMANwMwIAAoAhQhAiAAKAIQIQQgAEIANwMQIAAoAhghBSAAQQA2AhggAyAAKAJENgIoIAMgACkCPDcDICADIAD9AAIs/QsDECADIAD9AAIc/QsDACAAIAEpAwA3AwAgACABLQAIOgAIIAAgASgCEDYCECAAIAEoAhQ2AhQgACABKAIYNgIYIAFBADYCECABQQA2AhggACABKAJENgJEIAAgASkCPDcCPCAAIAH9AAIs/QsCLCAAIAH9AAIc/QsCHCABIAMtADg6AAggASADKQMwNwMAIAEoAhAiAARAIAEgADYCFCAAEC8LIAEgBTYCGCABIAI2AhQgASAENgIQIAEgAygCKDYCRCABIAMpAyA3AjwgASAD/QADEP0LAiwgASAD/QADAP0LAhwMAQsgCSAKZARAIAMgAC0ACDoAOCADIAApAwA3AzAgACgCECEBIAAoAhQhBCAAQgA3AxAgACgCGCEFIABBADYCGCADIAAoAkQ2AiggAyAAKQI8NwMgIAMgAP0AAiz9CwMQIAMgAP0AAhz9CwMAIAAgAi0ACDoACCAAIAIpAwA3AwAgACACKAIQNgIQIAAgAigCFDYCFCAAIAIoAhg2AhggAkEANgIQIAJBADYCGCAAIAIoAkQ2AkQgACACKQI8NwI8IAAgAv0AAiz9CwIsIAAgAv0AAhz9CwIcIAIgAykDMDcD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BCADUg0ACyADIgIgB1ENAQsDQCA/IAKnQQJ0aiC5ATgCACACQgF8IgIgB1INAAsLIAlCAXwiCSAGUg0ACwwBCwNAIAAgCacgTmxBAnRqIT9CACEEQgAhAgJAIAdCBFoEQANAID8gBKdBAnRq/Qz//3////9/////f////3///QsCACAEQgR8IgQgA1INAAsgAyICIAdRDQELA0AgPyACp0ECdGpB////ezYCACACQgF8IgIgB1INAAsLIAlCAXwiCSAGUg0ACwsgACABaiEAIDwgPmoiPCBKSQ0ACwwCCyA+KAI4IT4CQAJAIEAOAgEAAwsgB0J8gyEDQwAAAAAgugGVIrkB/RMhyQEDQEIAIQkDQCAAIAmnIE5sQQJ0aiEBQgAhBEIAIQICQCAHQgRaBEADQCABIASnQQJ0aiDJAf0LAgAgBEIEfCIEIANSDQALIAMiAiAHUQ0BCwNAIAEgAqdBAnRqILkBOAIAIAJCAXwiAiAHUg0ACwsgCUIBfCIJIAZSDQALIAAgS0ECdGohACA8ID5qIjwgSkkNAAsMAgsgB0J8gyEDA0BCACEJA0AgACAJpyBObEECdGohAUIAIQRCACECAkAgB0IEWgRAA0AgASAEp0ECdGr9DP//f////3////9/////f//9CwIAIARCBHwiBCADUg0ACyADIgIgB1ENAQsDQCABIAKnQQJ0akH///97NgIAIAJCAXwiAiAHUg0ACwsgCUIBfCIJIAZSDQALIAAgS0ECdGohACA8ID5qIjwgSkkNAAsMAQsgPigCOCE+AkACQCBADgIBAAILIAdCfIMhA0MAAAAAILoBlSK5Af0TIckBA0BCACEJA0AgACAJpyBObEECdGohAUIAIQRCACECAkAgB0IEWgRAA0AgASAEp0ECdGogyQH9CwIAIARCBHwiBCADUg0ACyADIgIgB1ENAQsDQCABIAKnQQJ0aiC5ATgCACACQgF8IgIgB1INAAsLIAlCAXwiCSAGUg0ACyAAIEtBAnRqIQAgPCA+aiI8IEpJDQALDAELIAdCfIMhAwNAQgAhCQNAIAAgCacgTmxBAnRqIQFCACEEQgAhAgJAIAdCBFoEQANAIAEgBKdBAnRq/Qz//3////9/////f////3///QsCACAEQgR8IgQgA1INAAsgAyICIAdRDQELA0AgASACp0ECdGpB////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AAAAAAAAAAAA/QsACyAB/QwAAAAAAAAAAAAAAAAAAAAA/QsAGyABQgA3ACggAkUNASACQQNxDQILQQBBAf4lAvC5NBogA0FAayQAIAEPCyADQegqNgIIIANBuiI2AgQgA0HoJDYCAEHopwIoAgAgAxAwEAAACyADQak5NgIYIANBvCI2AhQgA0HoJDYCEEHopwIoAgAgA0EQahAwEAAAC0kBAn8gACgCBCIFQQh1IQYgACgCACIAIAEgBUEBcQR/IAYgAigCAGooAgAFIAYLIAJqIANBAiAFQQJxGyAEIAAoAgAoAhgRCwALewEBfyMAQRBrIgMkAAJAIAJBCk0EQCAAIAAtAAtBgAFxIAJyOgALIAAgAC0AC0H/AHE6AAsgACABIAIQeCADQQA6AA8gACACaiADLQAPOgAADAELIABBCiACQQprIAAtAAtB/wBxIgBBACAAIAIgARDBAQsgA0EQaiQAC3gBAn8jAEEQayIEJAACQCACIAAoAghB/////wdxIgNJBEAgACgCACEDIAAgAjYCBCADIAEgAhB4IARBADoADyACIANqIAQtAA86AAAMAQsgACADQQFrIAIgA2tBAWogACgCBCIAQQAgACACIAEQwQELIARBEGokAAsJACAAIAEQhAMLBABBBAukAQEBfwJAQbzuNP4SAABBAXENAEG87jQQVEUNAAJAQbDuNP4SAABBAXENAEGw7jQQVEUNABC8BUGo7jRBmPs0NgIAQazuNEGo7jQ2AgBBsO40EFMLQbTuNEGs7jQoAgAoAgAiATYCACABQQRqQQH+HgIAGkG47jRBtO40NgIAQbzuNBBTCyAAQbjuNCgCACgCACIBNgIAIAFBBGpBAf4eAgAaIAALRwEBfyMAQRBrIgIkAAJAIAEtAAtBB3ZFBEAgACABKAIINgIIIAAgASkCADcCAAwBCyAAIAEoAgAgASgCBBBwCyACQRBqJAALCABB/////wcLBQBB/wALdgEBfyMAQRBrIgIkACACIAA2AgwCQCAAIAFGDQADQCACIAFBBGsiATYCCCAAIAFPDQEgAigCDCIAKAIAIQEgACACKAIIIgAoAgA2AgAgACABNgIAIAIgAigCDEEEaiIANgIMIAIoAgghAQwACwALIAJBEGokAAv2BAEIfyMAQRBrIgskACAGEGshCSALQQRqIgcgBhC1ASII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ADAgAiABKQIoNwIoIAQgA0E0bGohAyACQTRqIQUgACgCBCIBIAAoAgAiBEYNAgNAIAJBNGsiAiABQTRrIgH9AAIA/QsCACACQQA2AhggAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAUEANgIYIAFCADcCECACQQA2AiQgAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAUEANgIkIAFCADcCHCACIAEtADA6ADAgAiABKQIoNwIoIAEgBEcNAAsgACADNgIIIAAoAgQhAyAAIAU2AgQgACgCACEBIAAgAjYCACABIANGDQMDQCADQTRrIgAoAhwiAgRAIANBFGsgAjYCACACEC8LIANBJGsoAgAiAgRAIANBIGsgAjYCACACEC8LIAAiAyABRw0ACwwDCxBBAAsQUQALIAAgAzYCCCAAIAU2AgQgACACNgIACyABBEAgARAvCwupBQEIfyABIAAoAggiAyAAKAIAIgRrQQxtTQRAAkAgACgCBCIFIARrQQxtIgggASABIAhLGyIHRQ0AIAQhAyAHIQYgB0EDcSIJBEADQCADIAIoAgA2AgAgAyACKAIENgIEIAMgAi0ACDoACCAGQQFrIQYgA0EMaiEDIApBAWoiCiAJRw0ACwsgB0EESQ0AA0AgAyACKAIANgIAIAMgAigCBDYCBCADIAItAAg6AAggAyACKAIANgIMIAMgAigCBDYCECADIAItAAg6ABQgAyACKAIANgIYIAMgAigCBDYCHCADIAItAAg6ACAgAyACKAIANgIkIAMgAigCBDYCKCADIAItAAg6ACwgA0EwaiEDIAZBBGsiBg0ACwsgASAISwRAIAUgASAIa0EMbGohAQNAIAUgAikCADcCACAFIAIoAgg2AgggBUEMaiIFIAFHDQALIAAgATYCBA8LIAAgBCABQQxsajYCBA8LIAQEQCAAIAQ2AgQgBBAvIABBADYCCCAAQgA3AgBBACEDCwJAIAFB1qrVqgFPDQBB1arVqgEgA0EMbSIDQQF0IgQgASABIARJGyADQarVqtUATxsiA0HWqtWqAU8NACAAIANBDGwiAxAxIgQ2AgQgACAENgIAIAAgAyAEajYCCCAEIQMgAUEMbCIBQQxrIgZBDG5BAWpBA3EiBwRAA0AgAyACKQIANwIAIAMgAigCCDYCCCADQQxqIQMg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AgwgACgCBCEEIAMgATYCFCADIAQ2AhAgAyAFKAIANgIYIAMgBSgCBDYCHCABIARKBEAgA0EMaiAIEMYBCyACIQEMAQsLIANBIGokACABC9sBAQh/IAAgAEE9EPwDIgFGBEBBAA8LAkAgACABIABrIgVqLQAADQBBvOw0KAIAIgJFDQAgAigCACIBRQ0AA0ACQAJ/IAAhBEEAIAUiBkUNABogAC0AACIDBH8CQANAIAMgAS0AACIHRw0BIAdFDQEgBkEBayIGRQ0BIAFBAWohASAELQABIQMgBEEBaiEEIAMNAAtBACEDCyADBUEACyABLQAAawtFBEAgAigCACAFaiIBLQAAQT1GDQELIAIoAgQhASACQQRqIQIgAQ0BDAILCyABQQFqIQgLIAgLRAEBfyMAQRBrIgUkACAFIAEgAiADIARCgICAgICAgICAf4UQciAFKQMAIQEgACAFKQMINwMIIAAgATcDACAFQRBqJAALhAEBAn8gAEGcsAI2AgAgACgCKCEBA0AgAQRAQQAgACABQQFrIgFBAnQiAiAAKAIkaigCACAAKAIgIAJqKAIAEQUADAELCyAAKAIcIgFBBGpBf/4eAgBFBEAgASABKAIAKAIIEQAACyAAKAIgEC8gACgCJBAvIAAoAjAQLyAAKAI8EC8gAAsgACAAIAAoAhhFIAFyIgE2AhAgACgCFCABcQRAEEcACwtGACMAQRBrIgEkACABIAM2AgwgBCACIAMgAmsiAvwKAAAgASACIARqNgIIIAAgASgCDDYCACAAIAEoAgg2AgQgAUEQaiQACzYBAX8jAEEQayIDJAAgAyABNgIMIAMgAjYCCCAAIAMoAgw2AgAgACADKAIINgIEIANBEGokAAutAQEGfyMAQRBrIgMkACABKAJoIQcgACABKAIAIAEoAgggAUEQaiABKAKYARBAIQYgAyABQZwBajYCACAGQaXDACADEGoiAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggASgCPCEFIAJBJjYCQCACIAU2AjwgBwR/IAAgAigCACACKAIIIAJBEGpBABBABUEACyEAIAIgATYCbCACIAA2AmggA0EQaiQAIAILOwEBfyAAQeSuAigCACIBNgIAIAAgAUEMaygCAGpB8K4CKAIANgIAIABBCGoQ5QEaIABB7ABqEK4CIAAL5wEBBn8jAEEgayIEJAAgASgCaCEHIAAgASgCACABKAIIIAFBEGogASgCmAEQQCEGIAQgAUGcAWoiAjYCECAGQaXDACAEQRBqEGoiAyABKAIwNgIwIAMgASgCNDYCNCADIAEoAjg2AjggAyABKAI8NgI8IAQgAjYCACADQePMACAEEGoiAiABKQMYNwMQIAIgASkDEDcDGCADIAEoAjQ2AjAgAyABKAIwNgI0IAJBIDYCQCAHBH8gACACKAIAIAIoAgggAkEQakEAEEAFQQALIQAgAiABNgJsIAIgADYCaCAEQSBqJAAgAgsMACAAQQhqEK4CIAALCAAgABCmAhoL0gMCAn4CfyMAQSBrIgQkAAJAIAFC////////////AIMiA0KAgICAgIDAgDx9IANCgICAgICAwP/DAH1UBEAgAUIEhiAAQjyIhCEDIABC//////////8PgyIAQoGAgICAgICACFoEQCADQoGAgICAgICAwAB8IQIMAgsgA0KAgICAgICAgEB9IQIgAEKAgICAgICAgAhSDQEgAiADQgGDfCECDAELIABQIANCgICAgICAwP//AFQgA0KAgICAgIDA//8AURtFBEAgAUIEhiAAQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgA0L///////+//8MAVg0AQgAhAiADQjCIpyIFQZH3AEkNACAEQRBqIAAgAUL///////8/g0KAgICAgIDAAIQiAiAFQYH3AGsQZSAEIAAgAkGB+AAgBWsQqAEgBCkDCEIEhiAEKQMAIgBCPIiEIQIgBCkDECAEKQMYhEIAUq0gAEL//////////w+DhCIAQoGAgICAgICACFoEQCACQgF8IQIMAQsgAEKAgICAgICAgAhSDQAgAkIBgyACfCECCyAEQSBqJAAgAiABQoCAgICAgICAgH+DhL8LiAIAAkAgAAR/IAFB/wBNDQECQCMDKAJgKAIARQRAIAFBgH9xQYC/A0YNAwwBCyABQf8PTQRAIAAgAUE/cUGAAXI6AAEgACABQQZ2QcABcjoAAEECDwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMPCyABQYCABGtB//8/TQRAIAAgAUE/cUGA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ASgCEDYCECAAIAEoAhQ2AhQgACABKAIYNgIYIAFBADYCECABQQA2AhggACABKAJENgJEIAAgASkCPDcCPCAAIAH9AAIs/QsCLCAAIAH9AAIc/QsCHCABIAUtADg6AAggASAFKQMwNwMAIAEoAhAiAARAIAEgADYCFCAAEC8LIAEgBDYCGCABIAI2AhQgASADNgIQIAEgBSgCKDYCRCABIAUpAyA3AjwgASAF/QADEP0LAiwgASAF/QADAP0LAhwgBkEEaiEGCyAFQUBrJAAgBguUCAEGfyMAQUBqIgQkACAAIAEgAhDAASEFAkAgAysDICACKwMgZEUNACAEIAItAAg6ADggBCACKQMANwMwIAIoAhQhByACKAIQIQggAkIANwMQIAIoAhghCSACQQA2AhggBCACKAJENgIoIAQgAikCPDcDICAEIAL9AAIs/QsDECAEIAL9AAIc/QsDACACIAMpAwA3AwAgAiADLQAIOgAIIAIgAygCEDYCECACIAMoAhQ2AhQgAiADKAIYNgIYIANBADYCECADQQA2AhggAiADKAJENgJEIAIgAykCPDcCPCACIAP9AAIs/QsCLCACIAP9AAIc/QsCHCADIAQpAzA3AwAgAyAELQA4OgAIIAMoAhAiBgRAIAMgBjYCFCAGEC8LIAMgCTYCGCADIAc2AhQgAyAINgIQIAMgBCgCKDYCRCADIAQpAyA3AjwgAyAE/QADEP0LAiwgAyAE/QADAP0LAhwgAisDICABKwMgZEUEQCAFQQFqIQUMAQsgBCABLQAIOgA4IAQgASkDADcDMCABKAIUIQYgASgCECEHIAFCADcDECABKAIYIQggAUEANgIYIAQgASgCRDYCKCAEIAEpAjw3AyAgBCAB/QACLP0LAxAgBCAB/QACHP0LAwAgASACKQMANwMAIAEgAi0ACDoACCABIAIoAhA2AhAgASACKAIUNgIUIAEgAigCGDYCGCACQQA2AhAgAkEANgIYIAEgAigCRDYCRCABIAIpAjw3AjwgASAC/QACLP0LAiwgASAC/QACHP0LAhwgAiAELQA4OgAIIAIgBCkDMDcDACACKAIQIgMEQCACIAM2AhQgAxAvCyACIAg2AhggAiAGNgIUIAIgBzYCECACIAQoAig2AkQgAiAEKQMgNwI8IAIgBP0AAxD9CwIsIAIgBP0AAwD9CwIcIAErAyAgACsDIGRFBEAgBUECaiEFDAELIAQgAC0ACDoAOCAEIAApAwA3AzAgACgCFCECIAAoAhAhAyAAQgA3AxAgACgCGCEGIABBADYCGCAEIAAoAkQ2AiggBCAAKQI8NwMgIAQgAP0AAiz9CwMQIAQgAP0AAhz9CwMAIAAgASkDADcDACAAIAEtAAg6AAggACABKAIQNgIQIAAgASgCFDYCFCAAIAEoAhg2AhggAUEANgIQIAFBADYCGCAAIAEoAkQ2AkQgACABKQI8NwI8IAAgAf0AAiz9CwIsIAAgAf0AAhz9CwIcIAEgBC0AODoACCABIAQpAzA3AwAgASgCECIABEAgASAANgIUIAAQLwsgASAGNgIYIAEgAjYCFCABIAM2AhAgASAEKAIoNgJEIAEgBCkDIDcCPCABIAT9AAMQ/QsCLCABIAT9AAMA/QsCHCAFQQNqIQULIARBQGskACAFC0gBAX8gAEGQngE2AgAgACgCCCIBBEAgASABKAIAKAIEEQAACyAAQayUATYCACAAKAIEIgEEQCABIAEoAgAoAgQRAAALIAAQLwuLCQEKfwJAAkACQAJAAkACQCAALQBZBEAgACgCDCIDIAEgAygCACgCFBEEACEFIAAoAgwiASACIAEoAgAoAhQRBAAhCCAAKAI8IgMgAEFAaygCACIESQRAIAMgBUH/AXEgCEEIdHI7AAAMBwsgAyAAKAI4IgFrIgJBfUwNAkH/////ByAEIAFrIgQgAkEBdSIJQQFqIgcgBCAHSxsgBEH+////B08bIgcEfyAHQQBIDQQgB0EBdBAxBUEACyEGIAYgCUEBdGoiBCAFQf8BcSAIQQh0cjsAACAEQQJqIQggASADRwRAAkACQCACQQJrIgVBHkkNACADIAJBfnEgBmprQRBJDQAgBEEQayEJIANBEGshCiAEIAVBAXZBAWoiC0F4cSIFQQF0IgJrIQQgAyACayEDQQAhAgNAIAkgAkEBdCIMayAKIAxr/QAAAP0LAAAgAkEIaiICIAVHDQALIAUgC0YNAQsDQCAEQQJrIgQgA0ECayIDLwAAOwAAIAEgA0cNAAsLIAAoAjghAwsgACAGIAdBAXRqNgJAIAAgCDYCPCAAIAQ2AjggA0UNASADEC8PCyAAQUBrKAIAIQQgACgCPCEDAkAgAC0AWgRAIAMgBEkNBiADIAAoAjgiB2siBkF9TA0FQf////8HIAQgB2siBCAGQQF1IglBAWoiBSAEIAVLGyAEQf7///8HTxsiBQR/IAVBAEgNBSAFQQF0EDEFQQALIQggCCAJQQF0aiIEIAFB/wFxIAJBCHRyOwAAIARBAmohCSADIAdHBEACQAJAIAZBAmsiAUEeSQ0AIAMgBkF+cSAIamtBEEkNACAEQRBrIQYgA0EQayEKIAQgAUEBdkEBaiILQXhxIgFBAXQiAmshBCADIAJrIQNBACECA0AgBiACQQF0IgxrIAogDGv9AAAA/QsAACACQQhqIgIgAUcNAAsgASALRg0BCwNAIARBAmsiBCADQQJrIgMvAAA7AAAgAyAHRw0ACwsgACgCOCEDCyAAIAggBUEBdGo2AkAgACAJNgI8IAAgBDYCOCADDQEMAgsgAyAESQ0FIAMgACgCOCIHayIGQX1MDQRB/////wcgBCAHayIEIAZBAXUiCUEBaiIFIAQgBUsbIARB/v///wdPGyIFBH8gBUEASA0EIAVBAXQQMQVBAAshCCAIIAlBAXRqIgQgAUH/AXEgAkEIdHI7AAAgBEECaiEJIAMgB0cEQAJAAkAgBkECayIBQR5JDQAgAyAGQX5xIAhqa0EQSQ0AIARBEGshBiADQRBrIQogBCABQQF2QQFqIgtBeHEiAUEBdCICayEEIAMgAmshA0EAIQIDQCAGIAJBAXQiDGsgCiAMa/0AAAD9CwAAIAJBCGoiAiABRw0ACyABIAtGDQELA0AgBEECayIEIANBAmsiAy8AADsAACADIAdHDQALCyAAKAI4IQMLIAAgCCAFQQF0ajYCQCAAIAk2AjwgACAENgI4IANFDQELIAMQLwsPCxBBAAsQUQALEEEACyADIAFB/wFxIAJBCHRyOwAACyAAIANBAmo2AjwL6wMBA38CQAJAIAEgAkYNAAJAAkACQAJAAkACQAJAAkACQCABLAAAIgRBImsOVQAICAgICAgICAgICAgACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAgICAECCAgIAwgICAgICAgECAgIBQgGCAcICwJAIAMEQCADIAQQWQwBCyAAIAQQWAsMCQsCQCADBEAgA0EHEFkMAQsgAEEHEFgLDAgLAkAgAwRAIANBCBBZDAELIABBCBBYCwwH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AgAgAysDECIMIAMrAwAiDWRFDQYgAyANOQMQIAMgDDkDACADKAIIIQAgAyADKAIYNgIIIAMgADYCGA8LIAwgDWQEQCADIAw5AwAgACAOOQMADAoLIAMgDjkDECADIA05AwAgAygCCCECIAMgA0EYaigCADYCCCADIAI2AhggACsDACIMIA5kRQ0FIAMgDDkDECAAIA45AwAgAyABQQhrIgAoAgA2AhggACACNgIADwsgAyADQRBqIANBIGogA0EwahDRARogAUEQayIAKwMAIgwgAysDMCINZEUNBCADIAw5AzAgACANOQMAIANBOGooAgAhACADIAFBCGsiASgCADYCOCABIAA2AgAgAysDMCIMIAMrAyAiDWRFDQQgAyANOQMwIAMgDDkDICADQShqKAIAIQEgAyADKAI4IgA2AiggAyABNgI4IAwgAysDECINZEUNBCADIA05AyAgAyAMOQMQIANBGGooAgAhASADIAA2AhggAyABNgIoIAwgAysDACINZEUNBCADIA05AxAgAyAMOQMAIAMoAgghASADIAA2AgggAyABNgIYDwsgB0HvAEwEQCADKwMgIQwCQCADKwMQIg4gAysDACINZEUEQCAMIA5kRQ0BIAMgDjkDICADIAw5AxAgA0EYaigCACEAIAMgA0EoaigCACICNgIYIAMgADYCKCAMIA1kRQ0BIAMgDTkDECADIAw5AwAgAygCCCEAIAMgAjYCCCADIAA2AhgMAQsgDCAOZARAIAMgDTkDICADIAw5AwAgAygCCCEAIAMgA0EoaigCADYCCCADIAA2AigMAQsgAyANOQMQIAMgDjkDACADKAIIIQAgAyADQRhqKAIANgIIIAMgADYCGCAMIA1kRQ0AIAMgDTkDICADIAw5AxAgA0EoaigCACECIAMgADYCKCADIAI2AhgLIANBMGoiAiABRg0EIANBIGohBQNAIAIrAwAiDSAFKwMAIgxkBEAgAigCCCEIIAIhBANAAkAgBCAMOQMAIAQgBSIAKAIINgIIIAAgA0YEQCADIQAMAQsgACEEIA0gAEEQayIFKwMAIgxkDQELCyAAIAg2AgggACANOQMACyACIgVBEGoiACECIAAgAUcNAAsMBAsgAkUEQCABIANGDQQgCUECa0EBdiIGIQADQAJAIAYgACIISA0AIAMgAEEEdGohAiADIABB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CywAAAVBfwshEUEAIQ9BACEQA0AgBCAHRwRAAkAgDyARRwRAIA8hEgwBCyACIAIoAgAiEkEEajYCACASIAo2AgBBACESAn8gCy0AC0EHdgRAIAsoAgQMAQsgCy0AC0H/AHELIBBBAWoiEE0EQCAPIREMAQsCfyALLQALQQd2BEAgCygCAAwBCyALCyAQai0AAEH/AEYEQEF/IREMAQsCfyALLQALQQd2BEAgCygCAAwBCyALCyAQaiwAACERCyAHQQRrIgcoAgAhDyACIAIoAgAiGEEEajYCACAYIA82AgAgEkEBaiEPDAELCyACKAIAIQcLIBogBxDdAQsgFEEBaiEUDAELCwvnAwEBfyMAQRBrIgokACAJAn8gAARAIAIQowMhAAJAIAEEQCAKQQRqIgEgACAAKAIAKAIsEQIAIAMgCigCBDYAACABIAAgACgCACgCIBECAAwBCyAKQQRqIgEgACAAKAIAKAIoEQIAIAMgCigCBDYAACABIAAgACgCACgCHBECAAsgCCABEIQBIAEQTBogBCAAIAAoAgAoAgwRAQA2AgAgBSAAIAAoAgAoAhARAQA2AgAgCkEEaiIBIAAgACgCACgCFBECACAGIAEQZCABEDIaIAEgACAAKAIAKAIYEQIAIAcgARCEASABEEwaIAAgACgCACgCJBEBAAwBCyACEKIDIQACQCABBEAgCkEEaiIBIAAgACgCACgCLBECACADIAooAgQ2AAAgASAAIAAoAgAoAiARAgAMAQsgCkEEaiIBIAAgACgCACgCKBECACADIAooAgQ2AAAgASAAIAAoAgAoAhwRAgALIAggARCEASABEEwaIAQgACAAKAIAKAIMEQEANgIAIAUgACAAKAIAKAIQEQEANgIAIApBBGoiASAAIAAoAgAoAhQRAgAgBiABEGQgARAyGiABIAAgACgCACgCGBECACAHIAEQhAEgARBMGiAAIAAoAgAoAiQRAQALNgIAIApBEGokAAvdAQEIfyMAQRBrIgUkACMAQSBrIgMkACADQRhqIAAgARCDAyADQRBqIANBDGogAygCGCADKAIcIAIQqAIgAygCECEEIwBBEGsiASQAIAEgADYCDCABQQxqIgAhCiAEIQcgACgCACEEIwBBEGsiACQAIAAgBDYCDCAKIAchCSAAKAIMIQYgAEEQaiQAIAkgBmsQmgIh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QTBqIg1CADcCACANQQA2AgggAUEQaiQAIwBBEGsiASQAIAtBJGoiDEIANwIAIAxBADYCCCABQRBqJAAjAEEQayIBJAAgC0EYaiIQQgA3AgAgEEEANgIIIAFBEGokACMAQRBrIgokACALAn8gAgRAIApBBGoiAiADEKMDIgEgASgCACgCLBECACALIAooAgQ2AFwgAiABIAEoAgAoAiARAgAgDCACEIQBIAIQTBogAiABIAEoAgAoAhwRAgAgDSACEIQBIAIQTBogCyABIAEoAgAoAgwRAQA2AlggCyABIAEoAgAoAhARAQA2AlQgAiABIAEoAgAoAhQRAgAgDyACEGQgAhAyGiACIAEgASgCACgCGBECACAOIAIQhAEgAhBMGiABIAEoAgAoAiQRAQAMAQsgCkEEaiICIAMQogMiASABKAIAKAIsEQIAIAsgCigCBDYAXCACIAEgASgCACgCIBECACAMIAIQhAEgAhBMGiACIAEgASgCACgCHBECACANIAIQhAEgAhBMGiALIAEgASgCACgCDBEBADYCWCALIAEgASgCACgCEBEBADYCVCACIAEgASgCACgCFBECACAPIAIQZCACEDIaIAIgASABKAIAKAIYEQIAIA4gAhCEASACEEwaIAEgASgCACgCJBEBAAs2AhQgCkEQaiQAIAkgCCgCADYCACAEQYAEcSESQQAhA0EAIQEDQCABIQICQAJAAkACQCADQQRGDQAgACALQYwEahA+DQBBACEKAkACQAJAAkACQAJAIAtB3ABqIANqLAAADgUBAAQDBQkLIANBA0YNByAHQQECfyAAKAIAIgEoAgwiBCABKAIQRgRAIAEgASgCACgCJBEBAAwBCyAEKAIACyAHKAIAKAIMEQMABEAgC0EMaiAAEKQDIBAgCygCDBCOAgwCCyAFIAUoAgBBBHI2AgBBACEADAYLIANBA0YNBgsDQCAAIAtBjARqED4NBiAHQQECfyAAKAIAIgEoAgwiBCABKAIQRgRAIAEgASgCACgCJBEBAAwBCyAEKAIACyAHKAIAKAIMEQMARQ0GIAtBDGogABCkAyAQIAsoAgwQjgIMAAsACwJAAn8gDS0AC0EHdgRAIA0oAgQMAQsgDS0AC0H/AHELRQ0AAn8gACgCACIBKAIMIgQgASgCEEYEQCABIAEoAgAoAiQRAQAMAQsgBCgC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AxCoAyIBIAEoAgAoAiwRAgAgCyAKKAIENgBcIAIgASABKAIAKAIgEQIAIAwgAhBkIAIQMhogAiABIAEoAgAoAhwRAgAgDSACEGQgAhAyGiALIAEgASgCACgCDBEBADoAWyALIAEgASgCACgCEBEBADoAWiACIAEgASgCACgCFBECACAPIAIQZCACEDIaIAIgASABKAIAKAIYEQIAIA4gAhBkIAIQMhogASABKAIAKAIkEQEADAELIApBBGoiAiADEKcDIgEgASgCACgCLBECACALIAooAgQ2AFwgAiABIAEoAgAoAiARAgAgDCACEGQgAhAyGiACIAEgASgCACgCHBECACANIAIQZCACEDIaIAsgASABKAIAKAIMEQEAOgBbIAsgASABKAIAKAIQEQEAOgBaIAIgASABKAIAKAIUEQIAIA8gAhBkIAIQMhogAiABIAEoAgAoAhgRAgAgDiACEGQgAhAyGiABIAEoAgAoAiQRAQALNgIYIApBEGokACAJIAgoAgA2AgAgBEGABHEhEkEAIQNBACEBA0AgASECAkACQAJAAkAgA0EERg0AIAAgC0GMBGoQPw0AQQAhCgJAAkACQAJAAkACQCALQdwAaiADaiwAAA4FAQAEAwUJCyADQQNGDQcCfyAAKAIAIgEoAgwiBCABKAIQRgRAIAEgASgCACgCJBEBAAwBCyAELQAAC8AiAUEATgR/IAcoAgggAUH/AXFBAnRqKAIAQQFxBUEACwRAIAtBEGogABCqAyAQIAssABAQjwIMAgsgBSAFKAIAQQRyNgIAQQAhAAwGCyADQQNGDQYLA0AgACALQYwEahA/DQYCfyAAKAIAIgEoAgwiBCABKAIQRgRAIAEgASgCACgCJBEBAAwBCyAELQAAC8AiAUEATgR/IAcoAgggAUH/AXFBAnRqKAIAQQFxBUEAC0UNBiALQRBqIAAQqgMgECALLAAQEI8CDAALAAsCQAJ/IA0tAAtBB3YEQCANKAIEDAELIA0tAAtB/wBxC0UNAAJ/IAAoAgAiASgCDCIEIAEoAhBGBEAgASABKAIAKAIkEQEADAELIAQtAAALwEH/AXECfyANLQALQQd2BEAgDSgCAAwBCyANCy0AAEcNACAAEF0aIAZBADoAACANIAICfyANLQALQQd2BEAgDSgCBAwBCyANLQALQf8AcQtBAUsbIQEM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An8gAi0AC0EHdgRAIAIoAgAMAQsgAgsgCmotAABGDQELIAUgBSgCAEEEcjYCAEEAIQAMAwsgABBdGiAKQQFqIQoMAAsAC0EBIQAgESgCACALKAJkRg0AQQAhACALQQA2AhAgDyARKAIAIAsoAmQgC0EQahBjIAsoAhAEQCAFIAUoAgBBBHI2AgAMAQtBASEACyAQEDIaIAwQMhogDRAyGiAOEDIaIA8QMhogESgCACEBIBFBADYCACABBEAgASARKAIEEQAACwwDCyACIQELIANBAWohAwwACwALIAtBkARqJAAgAAsMACAAQQFBLRC2AxoLDAAgAEEBQS0QuAMaC20BAX8jAEEQayIGJAAgBkEAOgAPIAYgBToADiAGIAQ6AA0gBkElOgAMIAUEQCAGLQANIQQgBiAGLQAOOgANIAYgBDoADgsgAiABIAIoAgAgAWsgBkEMaiADIAAoAgAQGiABajYCACAGQRBqJAALQgAgASACIAMgBEEEEIUBIQEgAy0AAEEEcUUEQCAAIAFB0A9qIAFB7A5qIAEgAUHkAEgbIAFBxQBIG0HsDms2AgALC0AAIAIgAyAAQQhqIAAoAggoAgQRAQAiACAAQaACaiAFIARBABDhASAAayIAQZ8CTARAIAEgAEEMbUEMbzYCAAsLQAAgAiADIABBCGogACgCCCgCABEBACIAIABBqAFqIAUgBEEAEOEBIABrIgBBpwFMBEAgASAAQQxtQQdvNgIACwtCACABIAIgAyAEQQQQhgEhASADLQAAQQRxRQRAIAAgAUHQD2ogAUHsDmogASABQeQASBsgAUHFAEgbQewOazYCAAsLQAAgAiADIABBCGogACgCCCgCBBEBACIAIABBoAJqIAUgBEEAEOIBIABrIgBBnwJMBEAgASAAQQxtQQxvNgIACwtAACACIAMgAEEIaiAAKAIIKAIAEQEAIgAgAEGoAWogBSAEQQAQ4gEgAGsiAEGnAUwEQCABIABBDG1BB282AgALCwQAQQILuQIBBX8jAEEQayIHJAAjAEEQayIDJAACQCABQe////8DTQRAAkAgAUECSQRAIAAgAC0AC0GAAXEgAXI6AAsgACAALQALQf8AcToACyAAIQQMAQsgA0EIaiAAIAFBAk8EfyABQQRqQXxxIgQgBEEBayIEIARBAkYbBUEBC0EBahCxASADKAIM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IAItAAAMAQsgARA7C0EoRgRAQQEhBgwBC0KAgICAgIDg//8AIRUgASkDcEIAUw0DIAEgASgCBEEBazYCBAwDCwNAAn8gASgCBCICIAEoAmhHBEAgASACQQFqNgIEIAItAAAMAQsgARA7CyIJQcEAayECAkACQCAJQTBrQQpJDQAgAkEaSQ0AIAlB3wBGDQAgCUHhAGtBGk8NAQsgBkEBaiEGDAELC0KAgICAgIDg//8AIRUgCUEpRg0CIAEpA3AiGEIAWQRAIAEgASgCBEEBazYCBAsCQCADBEAgBg0BDAQLDAELA0AgGEIAWQRAIAEgASgCBEEBazYCBAsgBkEBayIGDQALDAILIwNBHGpBHDYCACABQgAQgQELQgAhFQsgACAWNwMAIAAgFTcDCCAOQTBqJAALygYCBX8EfiMAQYABayIFJAACQAJAAkAgAyAEQgBCABCmAUUNAAJ/IARC////////P4MhCwJ/IARCMIinQf//AXEiBkH//wFHBEBBBCAGDQEaQQJBAyADIAuEUBsMAgsgAyALhFALCyEJIAJCMIinIghB//8BcSIHQf//AUYNACAJDQELIAVBEGogASACIAMgBBBGIAUgBSkDECICIAUpAxgiASACIAEQ1wMgBSkDCCECIAUpAwAhBAwBCyABIAJC////////////AIMiCyADIARC////////////AIMiChCmAUEATARAIAEgCyADIAoQpgEEQCABIQQMAgsgBUHwAGogASACQgBCABBGIAUpA3ghAiAFKQNwIQQMAQsgBEIwiKdB//8BcSEGIAcEfiABBSAFQeAAaiABIAtCAEKAgICAgIDAu8AAEEYgBSkDaCILQjCIp0H4AGshByAFKQNgCyEEIAZFBEAgBUHQAGogAyAKQgBCgICAgICAwLvAABBGIAUpA1giCkIwiKdB+ABrIQYgBSkDUCEDCyAKQv///////z+DQoCAgICAgMAAhCEMIAtC////////P4NCgICAgICAwACEIQsgBiAHSARAA0ACfiALIAx9IAMgBFatfSIKQgBZBEAgCiAEIAN9IgSEUARAIAVBIGogASACQgBCABBGIAUpAyghAiAFKQMgIQQMBQsgCkIBhiAEQj+IhAwBCyALQgGGIARCP4iECyELIARCAYYhBCAHQQFrIgcgBkoNAAsgBiEHCwJAIAsgDH0gAyAEVq19IgpCAFMEQCALIQoMAQsgCiAEIAN9IgSEQgBSDQAgBUEwaiABIAJCAEIAEEYgBSkDOCECIAUpAzAhBAwBCyAKQv///////z9YBEADQCAEQj+IIQ0gB0EBayEHIARCAYYhBCANIApCAYaEIgpCgICAgICAwABUDQALCyAIQYCAAnEhBiAHQQBMBEAgBUFAayAEIApC////////P4MgB0H4AGogBnKtQjCGhEIAQoCAgICAgMDDPxBGIAUpA0ghAiAFKQNAIQQMAQsgCkL///////8/gyAGIAdyrUIwhoQhAgsgACAENwMAIAAgAjcDCCAFQYABaiQAC6oPAgV/D34jAEHQAmsiBSQAIARC////////P4MhCyACQv///////z+DIQogAiAEhUKAgICAgICAgIB/gyENIARCMIinQf//AXEhCAJAAkAgAkIwiKdB//8BcSIJQf//AWtBgoB+TwRAIAhB//8Ba0GBgH5LDQELIAFQIAJC////////////AIMiDEKAgICAgIDA//8AVCAMQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQ0MAgsgA1AgBEL///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIARCgICAgICAIIQhDSADIQEMAgsgASAMQoCAgICAgMD//wCFhFAEQCADIAJCgICAgICAwP//AIWEUARAQgAhAUKAgICAgIDg//8AIQ0MAwsgDUKAgICAgIDA//8AhCENQgAhAQwCCyADIAJCgICAgICAwP//AIWEUARAQgAhAQwCCyABIAyEUARAQoCAgICAgOD//wAgDSACIAOEUBshDUIAIQEMAgsgAiADhFAEQCANQoCAgICAgMD//wCEIQ1CACEBDAILIAxC////////P1gEQCAFQcACaiABIAogASAKIApQIgYbeSAGQQZ0rXynIgZBD2sQZUEQIAZrIQYgBSkDyAIhCiAFKQPAAiEBCyACQv///////z9WDQAgBUGwAmogAyALIAMgCyALUCIHG3kgB0EGdK18pyIHQQ9rEGUgBiAHakEQayEGIAUpA7gCIQsgBSkDsAIhAwsgBUGgAmogC0KAgICAgIDAAIQiEkIPhiADQjGIhCICQgBCgICAgLDmvIL1ACACfSIEQgAQXyAFQZACakIAIAUpA6gCfUIAIARCABBfIAVBgAJqIAUpA5gCQgGGIAUpA5ACQj+IhCIEQgAgAkIAEF8gBUHwAWogBEIAQgAgBSkDiAJ9QgAQXyAFQeABaiAFKQP4AUIBhiAFKQPwAUI/iIQiBEIAIAJCABBfIAVB0AFqIARCAEIAIAUpA+gBfUIAEF8gBUHAAWogBSkD2AFCAYYgBSkD0AFCP4iEIgRCACACQgAQXyAFQbABaiAEQgBCACAFKQPIAX1CABBfIAVBoAFqIAJCACAFKQO4AUIBhiAFKQOwAUI/iIRCAX0iAkIAEF8gBUGQAWogA0IPhkIAIAJCABBfIAVB8ABqIAJCAEIAIAUpA6gBIAUpA6ABIgwgBSkDmAF8IgQgDFStfCAEQgFWrXx9QgAQXyAFQYABakIBIAR9QgAgAkIAEF8gBiAJIAhraiEGAn8gBSkDcCITQgGGIg4gBSkDiAEiD0IBhiAFKQOAAUI/iIR8IhBC5+wAfSIUQiCIIgIgCkKAgICAgIDAAIQiFUIBhiIWQiCIIgR+IhEgAUIBhiIMQiCIIgsgECAUVq0gDiAQVq0gBSkDeEIBhiATQj+IhCAPQj+IfHx8QgF9IhNCIIgiEH58Ig4gEVStIA4gDiATQv////8PgyITIAFCP4giFyAKQgGGhEL/////D4MiCn58Ig5WrXwgBCAQfnwgBCATfiIRIAogEH58Ig8gEVStQiCGIA9CIIiEfCAOIA4gD0IghnwiDlatfCAOIA4gFEL/////D4MiFCAKfiIRIAIgC358Ig8gEVStIA8gDyATIAxC/v///w+DIhF+fCIPVq18fCIOVq18IA4gBCAUfiIYIBAgEX58IgQgAiAKfnwiCiALIBN+fCIQQiCIIAogEFatIAQgGFStIAQgClatfHxCIIaEfCIEIA5UrXwgBCAPIAIgEX4iAiALIBR+fCILQiCIIAIgC1atQiCGhHwiAiAPVK0gAiAQQiCGfCACVK18fCICIARUrXwiBEL/////////AFgEQCAWIBeEIRUgBUHQAGogAiAEIAMgEhBfIAFCMYYgBSkDWH0gBSkDUCIBQgBSrX0hCkIAIAF9IQsgBkH+/wBqDAELIAVB4ABqIARCP4YgAkIBiIQiAiAEQgGIIgQgAyASEF8gAUIwhiAFKQNofSAFKQNgIgxCAFKtfSEKQgAgDH0hCyABIQwgBkH//wBqCyIGQf//AU4EQCANQoCAgICAgMD//wCEIQ1CACEBDAELAn4gBkEASgRAIApCAYYgC0I/iIQhCiAEQv///////z+DIAatQjCGhCEMIAtCAYYMAQsgBkGPf0wEQEIAIQEMAgsgBUFAayACIARBASAGaxCoASAFQTBqIAwgFSAGQfAAahBlIAVBIGogAyASIAUpA0AiAiAFKQNIIgwQXyAFKQM4IAUpAyhCAYYgBSkDICIBQj+IhH0gBSkDMCIEIAFCAYYiAVStfSEKIAQgAX0LIQQgBUEQaiADIBJCA0IAEF8gBSADIBJCBUIAEF8gDCACIAIgAyACQgGDIgEgBHwiA1QgCiABIANWrXwiASASViABIBJRG618IgJWrXwiBCACIAIgBEKAgICAgIDA//8AVCADIAUpAxBWIAEgBSkDGCIEViABIARRG3GtfCICVq18IgQgAiAEQoCAgICAgMD//wBUIAMgBSkDAFYgASAFKQMIIgNWIAEgA1Ebca18IgEgAlStfCANhCENCyAAIAE3AwAgACANNwMIIAVB0AJqJAALvwIBAX8jAEHQAGsiBCQAAkAgA0GAgAFOBEAgBEEgaiABIAJCAEKAgICAgICA//8AEEYgBCkDKCECIAQpAyAhASADQf//AUkEQCADQf//AGshAwwCCyAEQRBqIAEgAkIAQoCAgICAgID//wAQRkH9/wIgAyADQf3/Ak4bQf7/AWshAyAEKQMYIQIgBCkDECEBDAELIANBgYB/Sg0AIARBQGsgASACQgBCgICAgICAgDkQRiAEKQNIIQIgBCkDQCEBIANB9IB+SwRAIANBjf8AaiEDDAELIARBMGogASACQgBCgICAgICAgDkQRkHogX0gAyADQeiBfUwbQZr+AWohAyAEKQM4IQIgBCkDMCEBCyAEIAEgAkIAIANB//8Aaq1CMIYQRiAAIAQpAwg3AwggACAEKQMANwMAIARB0ABqJAALNQAgACABNwMAIAAgAkL///////8/gyAEQjCIp0GAgAJxIAJCMIinQf//AXFyrUIwhoQ3AwgLwAECAX8CfkF/IQMCQCAAQgBSIAFC////////////AIMiBEKAgICAgIDA//8AViAEQoCAgICAgMD//wBRGw0AIAJC////////////AIMiBUKAgICAgIDA//8AViAFQoCAgICAgMD//wBScQ0AIAAgBCAFhIRQBEBBAA8LIAEgAoNCAFkEQCABIAJSIAEgAlNxDQEgACABIAKFhEIAUg8LIABCAFIgASACVSABIAJRGw0AIAAgASAChYRCAFIhAwsgAwtLAQJ/IAAoAgAiAQRAAn8gASgCDCICIAEoAhBGBEAgASABKAIAKAIkEQEADAELIAIoAgALQX9HBEAgACgCAEUPCyAAQQA2AgALQQELSwECfyAAKAIAIgEEQAJ/IAEoAgwiAiABKAIQRgRAIAEgASgCACgCJBEBAAwBCyACLQAAC0F/RwRAIAAoAgBFDwsgAEEANgIAC0EBC5UDAgJ/AX4CfyABKQMQIgZCAn+nIQUjAEHgAGsiBCQAAkACQAJAAkAgAikDIEIBUg0AIAIpAyhCAVINACABKQMYIAIpAxhSDQEgASgCaA0CIAIoAmgNAiAEIAIpAxAgBUEBdKx8IAZCAX1Cf4V8IAOsf0IBfDcDQCABKQMgIQYgBP0MAQAAAAAAAAABAAAAAAAAAP0LBFAgBCAGNwNIIABBAEECIARBQGtBABBAIgBFDQMgACADNgJEIAAgATYCbCAAQQA2AmggAEEsNgJAIABBATYCTCAAIAU2AkggACACNgJwIARB4ABqJAAgAAwECyAEQcfNADYCOCAEQcE2NgI0IARB6CQ2AjBB6KcCKAIAIARBMGoQMBAAAAsgBEHSJzYCKCAEQcI2NgIkIARB6CQ2AiBB6KcCKAIAIARBIGoQMBAAAAsgBEGrHzYCGCAEQcY2NgIUIARB6CQ2AhBB6KcCKAIAIARBEGoQMBAAAAsgBEHZKjYCCCAEQaYkNgIEIARB6CQ2AgBB6KcCKAIAIAQQMBAAAAsLpAEBA38gAUEISwRAQQQgASABQQRNGyEBQQEgACAAQQFNGyEAA0ACQCAAIAFqQQFrQQAgAWtxIgIgACAAIAJJGyEDQQAhBCMAQRBrIgIkAAJAIAFBA3ENACADIAFwDQAgAkEMaiABIAMQ8AMhA0EAIAIoAgwgAxshBAsgAkEQaiQAIAQiAg0AQdz9NP4QAgAiA0UNACADEQkADAELCyACDwsgABAxCwkAIAFBARDeAwsTACABQQhLBEAgABAvDwsgABAvC4YBAQN/IwBBEGsiBCQAIwBBIGsiAyQAIANBGGogACABEKkCIANBEGogA0EMaiADKAIYIAMoAhwgAhCoAiADIAAgAygCECAAa2o2AgwgAyACIAMoAhQgAmtqNgIIIAQgAygCDDYCCCAEIAMoAgg2AgwgA0EgaiQAIAQoAgwhBSAEQRBqJAAgBQsJACAAEKsCEC8L+QECBX8BfiMAQSBrIgMkAAJAIAEpAyBCAVINACABKQMoQgFSDQAgAikDGEIBUg0AIAIpAyBCAVINACACKQMoQgFSDQAgAigCAEESRw0AAn8CQCABKAJoDQAgAigCaA0AQQAMAQtBAQshByABKQMQIQggAyACKQMQNwMYIAMgCDcDECAAQQBBAiADQRBqQQAQQCIEQSE2AkAgBwRAIAAgBCgCACAEKAIIIARBEGpBABBAIQULIAQgATYCbCAEIAU2AmggBCACNgJwIANBIGokACAEDwsgA0HQMzYCCCADQZszNgIEIANB6CQ2AgBB6KcCKAIAIAMQMBAAAAulAQEHfyMAQRBrIgIkACAAKAJAIgEEfyACQY4BNgIEIAJBCGogASACQQRqEE0hASAAIAAoAgAoAhgRAQAhBCABKAIAIQYgAUEANgIAIAYQmAQhBSAAQQA2AkAgAEEAQQAgACgCACgCDBEDABogASgCACEDIAFBADYCACADBEAgAyABQQRqKAIAEQEAGgtBACAAIAQgBXIbBUEACyEHIAJBEGokACAHCwoAIABB1O40EHoLhgIBA38jAEEQayIEJAAgAiABayIFQe////8HTQRAAkAgBUELSQRAIAAgAC0AC0GAAXEgBXI6AAsgACAALQALQf8AcToACyAAIQMMAQsgBEEIaiAAIAVBC08EfyAFQRBqQXBxIgMgA0EBayIDIANBC0YbBUEKC0EBahC6ASAEKAIMGiAAIAQoAggiAzYCACAAIAAoAghBgICAgHhxIAQoAgxB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAAgBTYCBAsDQCABIAJHBEAgAyABLQAAOgAAIANBAWohAyABQQFqIQEMAQsLIARBADoAByADIAQtAAc6AAAgBEEQaiQADwsQSwALVAECfwJAIAAoAgAiAkUNAAJ/IAIoAhgiAyACKAIcRgRAIAIgASACKAIAKAI0EQQADAELIAIgA0EEajYCGCADIAE2AgAgAQtBf0cNACAAQQA2AgALCzEBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIoEQEADwsg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Q6IgARD3AyEAIAEoAgBBQGoLNgIAIAAPCyABIAJB/gdrNgIAIANC/////////4eAf4NCgICAgICAgPA/hL8FIAALC7gBAQF/IAFBAEchAgJAAkACQCAAQQNxRQ0AIAFFDQADQCAALQAARQ0CIAFBAWsiAUEARyECIABBAWoiAEEDcUUNASABDQALCyACRQ0BAkAgAC0AAEUNACABQQRJDQADQCAAKAIAIgJBf3MgAkGBgoQIa3FBgIGChHhxDQIgAEEEaiEAIAFBBGsiAUEDSw0ACwsgAUUNAQsDQCAALQAARQRAIAAPCyAAQQFqIQAgAUEBayIBDQALC0EACx0AIAAgABCOBDYCeCAAQQH+FwJ8IABBAP4XAoABC98CAgZ/A34jAEFAaiIEJAACQAJAIAEoAjAiBSABKAIAIgdBJGwiBkGY6gBqKAIARw0AIAE1AjQiCiABKQMQIgwgBa1+IAZBlOoAajQCAH9SDQAgATUCOCILIAogASkDGCIKflINACABNQI8IAsgASkDICILflINACABKQMoIAogDH4gC35+IAIgA35SDQEgASgCaCEJIAQgAzcDOCAEIAI3AzAgACAHQQIgBEEwaiABKAKYARBAIQggBCABQZwBajYCACAIQfPMACAEEGoiBUEdNgJAIAkEfyAAIAUoAgAgBSgCCCAFQRBqQQAQQAVBAAshACAFIAE2AmwgBSAANgJoIARBQGskACAFDwsgBEHZzgA2AiggBEHiMDYCJCAEQegkNgIgQeinAigCACAEQSBqEDAQAAALIARBmzU2AhggBEHjMDYCFCAEQegkNgIQQeinAigCACAEQRBqEDAQAAALswECAX0CfyAAiyEBAkAgALwiA0H/////B3EiAkHVvrL4A08EQCACQYGAgIkETwRAQwAAAAAgAZVDAACAP5IhAQwCC0MAAIA/QwAAAEAgASABkhCzAkMAAABAkpWTIQEMAQsgAkH5iov0A08EQCABIAGSELMCIgAgAEMAAABAkpUhAQwBCyACQYCAgARJDQAgAUMAAADAlBCzAiIAjCAAQwAAAECSlSEBCyABjCABIANBAEgbC9oBAQJ/AkAgAUH/AXEiAwRAIABBA3EEQANAIAAtAAAiAkUNAyACIAFB/wFxRg0DIABBAWoiAEEDcQ0ACwsCQCAAKAIAIgJBf3MgAkGBgoQIa3FB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QcwSakGXHC0AADoAACAAQQU6ANMSIABBDDYCxBIgAEEAOgDNEiAAQZMcKAAANgLIEiAAQYgYaiAAQdwSaigCADYCACAAIAApAtQSNwOAGCAAQYwYakEMNgIAIABBmBhqIABB0BJqKAIANgIAIABBkBhqIAApAsgSNwMAIABBADoAuhIgAEHh5AE7AbgSIABBAjoAwxIgAEGwEmpB4SQvAAA7AQAgAEEGOgC3EiAAQQ02AqgSIABBADoAshIgAEHdJCgAADYCrBIgAEGkGGogAEHAEmooAgA2AgAgACAAKQK4EjcCnBggAEGoGGpBDTYCACAAQbQYaiAAQbQSaigCADYCACAAQawYaiAAKQKsEjcCACAAQQA6AJ4SIABB8+wBOwGcEiAAQQI6AKcSIABBkxJqQe8bKAAANgAAIABBBzoAmxIgAEEONgKMEiAAQQA6AJcSIABB7BsoAAA2ApASIABBwBhqIABBpBJqKAIANgIAIAAgACkCnBI3A7gYIABBxBhqQQ42AgAgAEHQGGogAEGYEmooAgA2AgAgAEHIGGogACkCkBI3AwAgAEEAOgCCEiAAQenoATsBgBIgAEECOgCLEiAAQfcRakHvGCgAADYAACAAQQc6AP8RIABBDzYC8BEgAEEAOgD7ESAAQewYKAAANgL0ESAAQdwYaiAAQYgSaigCADYCACAAIAApAoASNwLUGCAAQeAYakEPNgIAIABB7BhqIABB/BFqKAIANgIAIABB5BhqIAApAvQRNwIAIABBADoA5hEgAEHpyAE7AeQRIABBAjoA7xEgAEHgEWoiAkGZGC8AADsBACAAQYAUOwHiESAAQRA2AtQRIABBkRgpAAAiFDcC2BEgAEH4GGogAEHsEWooAgA2AgAgACAAKQLkETcD8BggAEH8GGpBEDYCACAAQYgZaiACKAIANgIAIABBgBlqIBQ3AwAgAEEAOgDKESAAQejSATsByBEgAEECOgDTESAAQcARakGLGy0AADoAACAAQQU6AMcRIABBETYCuBEgAEEAOgDBESAAQYcbKAAANgK8ESAAQZQZaiAAQdARaigCADYCACAAIAApAsgRNwKMGSAAQZgZakERNgIAIABBpBlqIABBxBFqKAIANgIAIABBnBlqIAApArwRNwIAIABBADoArhEgAEHm0gE7AawRIABBAjoAtxEgAEGjEWpB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aiAAQcgJaigCADYCACAAQaghaiAAKQLACTcDACAAQQA6ALIJIABB7dwBOwGwCSAAQQI6ALsJIABBrAlqIgJB6hgtAAA6AAAgAEEJOgCvCSAAQTc2AqAJIABBADoArQkgAEHiGCkAACIUNwKkCSAAQbwhaiAAQbgJaigCADYCACAAIAApArAJNwK0ISAAQcAhakE3NgIAIABBzCFqIAIoAgA2AgAgAEHEIWogFDcCACAAQQA6AJYJIABB4uYBOwGUCSAAQQI6AJ8JIABBiwlqQbMYKAAANgAAIABBBzoAkwkgAEE4NgKECSAAQQA6AI8JIABBsBgoAAA2AogJIABB2CFqIABBnAlqKAIANgIAIAAgACkClAk3A9AhIABB3CFqQTg2AgAgAEHoIWogAEGQCWooAgA2AgAgAEHgIWogACkCiAk3AwAgAEEAOgD6CCAAQevWATsB+AggAEECOgCDCSAAQfAIakGQHC8AADsBACAAQQY6APcIIABBOTYC6AggAEEAOgDyCCAAQYwcKAAANgLsCCAAQfQhaiAAQYAJaigCADYCACAAIAApAvgINwLsISAAQfghakE5NgIAIABBhCJqIABB9AhqKAIANgIAIABB/CFqIAApAuwINwIAIABBADoA3gggAEHz4gE7AdwIIABBAjoA5wggAEHYCGoiAkEAOgAAIABBCDoA2wggAEE6NgLMCCAAQuHYiYvmrdqw7gA3AtAIIABBkCJqIABB5AhqKAIANgIAIAAgACkC3Ag3A4giIABBlCJqQTo2AgAgAEGgImogAigCADYCACAAQZgiakLh2ImL5q3asO4ANwMAIABBADoAwgggAEHz7gE7AcAIIABBAjoAywggAEG3CGpB3RooAAA2AAAgAEEHOgC/CCAAQTs2ArAIIABBADoAuwggAEHaGigAADYCtAggAEGsImogAEHICGooAgA2AgAgACAAKQLACDcCpCIgAEGwImpBOzYCACAAQbwiaiAAQbwIaigCADYCACAAQbQiaiAAKQK0CDcCACAAQQA6AKYIIABB59gBOwGkCCAAQQI6AK8IIABBoAhqIgJBADoAACAAQQg6AKMIIABBPDYClAggAELnwrHLtqzasO4ANwKYCCAAQcgiaiAAQawIaigCADYCACAAIAApAqQINwPAIiAAQcwiakE8NgIAIABB2CJqIAIoAgA2AgAgAEHQImpC58Kxy7as2rDuADcDACAAQQA6AIoIIABB7eQBOwGICCAAQQI6AJMIIABB+xooAAA2AP8HIABBBzoAhwggAEE9NgL4ByAAQQA6AIMIIABB+BooAAA2AvwHIABB5CJqIABBkAhqKAIANgIAIAAgACkCiAg3AtwiIABB6CJqQT02AgAgAEH0ImogAEGECGooAgA2AgAgAEHsImogACkC/Ac3AgAgAEEAOgDuByAAQfDCATsB7AcgAEECOgD3ByAAQZAbKAAANgDjByAAQQc6AOsHIABBPjYC3AcgAEEAOgDnByAAQY0bKAAANgLgByAAQYAjaiAAKAL0BzYCACAAIAApAuwHNwP4IiAAQYQjakE+NgIAIABBkCNqIAAoAugHNgIAIABBiCNqIAApAuAHNwMAIABBADoA0gcgAEHz0gE7AdAHIABBAjoA2wcgAEGKJigAADYAxwcgAEEHOgDPByAAQT82AsAHIABBADoAywcgAEGHJigAADYCxAcgAEGcI2ogACgC2Ac2AgAgACAAKQLQBzcClCMgAEGgI2pBPzYCACAAQawjaiAAKALMBzYCACAAQaQjaiAAKQLEBzcCACAAQQA6ALYHIABB69oBOwG0ByAAQQI6AL8HIABBjhQtAAA6AKwHIABBBToAswcgAEHAADYCpAcgAEEAOgCtByAAQYoUKAAANgKoByAAQbgjaiAAKAK8BzYCACAAIAApArQHNwOwIyAAQbwjakHAADYCACAAQcgjaiAAKAKwBzYCACAAQcAjaiAAKQKoBzcDACAAQQA6AJoHIABB89wBOwGYByAAQQI6AKMHIABB/yUtAAA6AJAHIABBBToAlwcgAEHBADYCiAcgAEEAOgCRByAAQfslKAAANgKMByAAQdQjaiAAKAKgBzYCACAAIAApApgHNwLMIyAAQdgjakHBADYCACAAQeQjaiAAKAKUBzYCACAAQdwjaiAAKQKMBzcCACAAQQA6AP4GIABB+d4BOwH8BiAAQQI6AIcHIABBqSYvAAA7AfQGIABBBjoA+wYgAEHCADYC7AYgAEEAOgD2BiAAQaUmKAAANgLwBiAAQfAjaiAAKAKEBzYCACAAIAApAvwGNwPoIyAAQfQjakHCADYCACAAQYAkaiAAKAL4BjYCACAAQfgjaiAAKQLwBjcDACAAQQA6AOIGIABB894B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OgDnAkEQEDEiDkEAOgANIA5B4xspAAA3AAUgDkHeGykAADcAACAAQaQoakHWADYCACAAQaAoaiAAKALkAjYCACAAIAApAtwCNwOYKCAAQagoaiAOQQ0QcCAAQQA6ANICIABB7fIBOwHQAiAAQQI6ANsCIABBxBQoAAA2AMcCIABBwChqQdcANgIAIABBvChqIAAoAtgCNgIAIABBwRQoAAA2AsQCIABBADoAywIgAEHEKGogACkCxAI3AgAgAEEHOgDPAiAAQcwoaiAAKALMAjYCACAAQdcANgLAAiAAIAApAtACNwK0KCAAQQA6ALYCIABB4t4BOwG0AiAAQQI6AL8CIABB0BcoAAA2AKsCIABBBzoAswIgAEHYADYCpAIgAEEAOgCvAiAAQc0XKAAANgKoAiAAQdgoaiAAKAK8AjYCACAAIAApArQCNwPQKCAAQdwoakHYADYCACAAQegoaiAAKAKwAjYCACAAQeAoaiAAKQKoAjcDACAAQQA6AJoCIABB9NgBOwGYAiAAQQI6AKMCIABBsxwoAAA2AI8CIABBBzoAlwIgAEHZADYCiAIgAEEAOgCTAiAAQbAcKAAANgKMAiAAQfQoaiAAKAKgAjYCACAAIAApApgCNwLsKCAAQfgoakHZADYCACAAQYQpaiAAKAKUAjYCACAAQfwoaiAAKQKMAjcCACAAQQA6AP4BIABB7c4BOwH8ASAAQQI6AIcCIABBADoA+AEgAEEIOgD7ASAAQdoANgLsASAAQu3CsYv2rNi5+QA3AvABIABBkClqIAAoAoQCNgIAIAAgACkC/AE3A4gpIABBlClqQdoANgIAIABBoClqIAAoAvgBNgIAIABBmClqQu3CsYv2rNi5+QA3AwAgAEEAOgDiASAAQeHmATsB4AEgAEECOgDrASAAQQA6ANwBIABBCDoA3wEgAEHbADYC0AEgAELh5s2L1q3ZueUANwLUASAAQawpaiAAKALoATYCACAAIAApAuABNwKkKSAAQbApakHbADYCACAAQbwpaiAAKALcATYCACAAQbQpakLh5s2L1q3ZueUANwIAIABBADoAxgEgAEH06AE7AcQBIABBAjoAzwEgAEG/FC0AADoAvAEgAEEFOgDDASAAQdwANgK0ASAAQQA6AL0BIABBuxQoAAA2ArgBIABByClqIAAoAswBNgIAIAAgACkCxAE3A8ApIABBzClqQdwANgIAIABB2ClqIAAoAsABNgIAIABB0ClqIAApArgBNwMAIABBAzoAswEgAEEAOgCrASAAQcYKLQAAOgCqASAAQcQKLwAAOwGoASAAQQA6AKQBIABBCDoApwEgAEHdADYCmAEgAELowt2Llq3asO4ANwKcASAAQeQpaiAAKAKwATYCACAAIAApAqgBNwLcKSAAQegpakHdADYCACAAQfQpaiAAKAKkATYCACAAQewpakLowt2Llq3asO4ANwIAIABBADoAjgEgAEHs3AE7AYwBIABBAjoAlwEgAEGSJigAADYAgwEgAEEHOgCLASAAQd4ANgJ8IABBADoAhwEgAEGPJigAADYCgAEgAEGAKmogACgClAE2AgAgACAAKQKMATcD+CkgAEGEKmpB3gA2AgAgAEGQKmogACgCiAE2AgAgAEGIKmogACkCgAE3AwAgAEEAOgByIABB6MIBOwFwIABBAjoAeyAAQfklLQAAOgBoIABBBToAbyAAQd8ANgJgIABBADoAaSAAQfUlKAAANgJkIABBnCpqIAAoAng2AgAgACAAKQJwNwKUKiAAQaAqakHfADYCACAAQawqaiAAKAJsNgIAIABBpCpqIAApAmQ3AgAgAEEAOgBWIABB4sIBOwFUIABBAjoAXyAAQfkTKAAANgBLIABBBzoAUyAAQeAANgJEIABBADoATyAAQfYTKAAANgJIIABBuCpqIAAoAlw2AgAgACAAKQJUNwOwKiAAQbwqakHgADYCACAAQcgqaiAAKAJQNgIAIABBwCpqIAApAkg3AwAgAEEAOgA6IABB6u4BOwE4IABBAjoAQyAAQQA6ADQgAEEIOgA3IABB4QA2AiggAELqwtmL5q3ZueUANwIsIABB1CpqIABBQGsoAgA2AgAgACAAKQI4NwLMKiAAQdgqakHhADYCACAAQeQqaiAAKAI0NgIAIABB3CpqQurC2Yvmrdm55QA3AgAgAEEAOgAeIABB8+oBOwEcIABBAjoAJyAAQdwfLQAAOgAYIABBCToAGyAAQeIANgIMIABBADoAGSAAQdQfKQAAIhQ3AhAgAEHwKmogACgCJDYCACAAIAApAhw3A+gqIABB9CpqQeIANgIAIABBgCtqIAAoAhg2AgAgAEH4KmogFDcDAEGYuzRCADcCAEGUuzRBmLs0NgIAA0AjAEEQayIIJAAgAEGIK2oiEQJ/IABBsBVqIARBHGxqIQVBmLs0KAIAIQYCQAJAAkBBmLs0IgNBlLs0KAIARg0AAkAgBkUEQEGYuzQhAgNAIAIoAggiAygCACACRiETIAMhAiATDQALDAELIAYhAgNAIAIiAygCBCICDQALCwJAIAUoAgQgBS0ACyICIALAIg9BAEgiCxsiByADKAIUIAMtABsiAiACwEEASCINGyICIAIgB0sbIhAEQCADKAIQIANBEGogDRsgBSgCACAFIAsbIBAQRSILDQELIAIgB0kNAQwCCyALQQBODQELIAZFDQEgCCADNgIMIANBBGoMAgtBmLs0KAIAIgJFDQAgBSgCACAFIA9BAEgbIQ9BmLs0IQYDQAJAAkACQAJAAkACQCACIgMoAhQgAi0AGyICIALAQQBIIg0bIgIgByACIAdJIhAbIgsEQCAPIAMoAhAgA0EQaiANGyINIAsQRSISRQRAIAIgB0sNAgwDCyASQQBODQIMAQsgAiAHTQ0CCyADIQYgAygCACICDQUMBAsgDSAPIAsQRSICDQELIBANAQwCCyACQQBODQELIANBBGohBiADKAIEIgINAQsLIAggAzYCDCAGDAELIAhBmLs0NgIMQZi7NAsiBigCACICBH9BAAVBLBAxIgJBEGohAwJAIAUsAAtBAE4EQCADIAUpAgA3AgAgAyAFKAIINgIIDAELIAMgBSgCACAFKAIEEHALIAIgBSgCDDYCHCACQSBqIQMCQCAFLAAbQQBOBEAgAyAFKQIQNwIAIAMgBSgCGDYCCAwBCyADIAUoAhAgBSgCFBBwCyACIAgoAgw2AgggAkIANwIAIAYgAjYCACACIQNBlLs0KAIAKAIAIgUEQEGUuzQgBTYCACAGKAIAIQMLQZi7NCgCACADEJcBQZy7NEGcuzQoAgBBAWo2AgBBAQs6AAQgESACNgIAIAhBEGokACAEQQFqIgRB4wBHDQALIABBhCtqIQQDQCAEQQFrLAAAQQBIBEAgBEEMaygCABAvCyAEQRxrIQIgBEERaywAAEEASARAIAIoAgAQLwsgAiIEIABBsBVqRw0ACyAALAAbQQBIBEAgACgCEBAvCyAALAAnQQBIBEAgACgCHBAvCyAALAA3QQBIBEAgACgCLBAvCyAALABDQQBIBEAgACgCOBAvCyAALABTQQBIBEAgACgCSBAvCyAALABfQQBIBEAgACgCVBAvCyAALABvQQBIBEAgACgCZBAvCyAALAB7QQBIBEAgACgCcBAvCyAALACLAUEASARAIAAoAoABEC8LIAAsAJcBQQBIBEAgACgCjAEQLwsgACwApwFBAEgEQCAAKAKcARAvCyAALACzAUEASARAIAAoAqgBEC8LIAAsAMMBQQBIBEAgACgCuAEQLwsgACwAzwFBAEgEQCAAKALEARAvCyAALADfAUEASARAIAAoAtQBEC8LIAAsAOsBQQBIBEAgACgC4AEQLwsgACwA+wFBAEgEQCAAKALwARAvCyAALACHAkEASARAIAAoAvwBEC8LIAAsAJcCQQBIBEAgACgCjAIQLwsgACwAowJBAEgEQCAAKAKYAhAvCyAALACzAkEASARAIAAoAqgCEC8LIAAsAL8CQQBIBEAgACgCtAIQLwsgACwAzwJBAEgEQCAAKALEAhAvCyAALADbAkEASARAIAAoAtACEC8LIA4QLyAALADnAkEASARAIAAoAtwCEC8LIAAsAPcCQQBIBEAgACgC7AIQLwsgACwAgwNBAEgEQCAAKAL4AhAvCyAALACTA0EASARAIAAoAogDEC8LIAAsAJ8DQQBIBEAgACgClAMQLwsgACwArwNBAEgEQCAAKAKkAxAvCyAALAC7A0EASARAIAAoArADEC8LIAAsAMsDQQBIBEAgACgCwAMQLwsgACwA1wNBAEgEQCAAKALMAxAvCyAALADnA0EASARAIAAoAtwDEC8LIAAsAPMDQQBIBEAgACgC6AMQLwsgChAvIAAsAP8DQQBIBEAgACgC9AMQLwsgACwAjwRBAEgEQCAAKAKEBBAvCyAALACbBEEASARAIAAoApAEEC8LIAAsAKsEQQBIBEAgACgCoAQQLwsgACwAtwRBAEgEQCAAKAKsBBAvCyAALADHBEEASARAIAAoArwEEC8LIAAsANMEQQBIBEAgACgCyAQQLwsgACwA4wRBAEgEQCAAKALYBBAvCyAALADvBEEASARAIAAoAuQEEC8LIAAsAP8EQQBIBEAgACgC9AQQLwsgACwAiwVBAEgEQCAAKAKABRAvCyAALACbBUEASARAIAAoApAFEC8LIAAsAKcFQQBIBEAgACgCnAUQLwsgACwAtwVBAEgEQCAAKAKsBRAvCyAALADDBUEA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AEgEQCAAKAIEEC8LIABBBGoiAUEAEDYgACABQZPUABA3IgEoAgg2AhggACABKQIANwMQIAFCADcCACABQQA2AgggACAAQRBqQe3TABA1IgEoAgg2AiggACABKQIANwMgIAFCADcCACABQQA2AghBjLw0IAAoAiAgAEEgaiAALQArIgHAQQBIIgQbIAAoAiQgASAEGxBpGiAALAArQQBIBEAgACgCIBAvCyAALAAbQQBIBEAgACgCEBAvCyAALAAPQQBIBEAgACgCBBAvCyAAQQRqIgFBABA2IAAgAUHF1AAQNyIBKAIINgIYIAAgASkCADcDECABQgA3AgAgAUEANgIIIAAgAEEQakHt0wAQNSIBKAIINgIoIAAgASkCADcDICABQgA3AgAgAUEANgIIQYy8NCAAKAIgIABBIGogAC0AKyIBwEEASCIEGyAAKAIkIAEgBBsQaRogACwAK0EASARAIAAoAiAQLwsgACwAG0EASARAIAAoAhAQLwsgACwAD0EASARAIAAoAgQQLwsgAEEEaiIBQQAQNiAAIAFBstQAEDciASgCCDYCGCAAIAEpAgA3AxAgAUIANwIAIAFBADYCCCAAIABBEGpB7dMAEDUiASgCCDYCKCAAIAEpAgA3AyAgAUIANwIAIAFBADYCCEGMvDQgACgCICAAQSBqIAAtACsiAcBBAEgiBBsgACgCJCABIAQbEGkaIAAsACtBAEgEQCAAKAIgEC8LIAAsABtBAEgEQCAAKAIQEC8LIAAsAA9BAEgEQCAAKAIEEC8LIABBBGoiAUEAEDYgACABQbrUABA3IgEoAgg2AhggACABKQIANwMQIAFCADcCACABQQA2AgggACAAQRBqQe3TABA1IgEoAgg2AiggACABKQIANwMgIAFCADcCACABQQA2AghBjLw0IAAoAiAgAEEgaiAALQArIgHAQQBIIgQbIAAoAiQgASAEGxBpGiAALAArQQBIBEAgACgCIBAvCyAALAAbQQBIBEAgACgCEBAvCyAALAAPQQBIBEAgACgCBBAvCyAAQQRqIgFBARA2IAAgAUGl1AAQNyIBKAIINgIYIAAgASkCADcDECABQgA3AgAgAUEANgIIIAAgAEEQakHt0wAQNSIBKAIINgIoIAAgASkCADcDICABQgA3AgAgAUEANgIIQYy8NCAAKAIgIABBIGogAC0AKyIBwEEASCIEGyAAKAIkIAEgBBsQaRogACwAK0EASARAIAAoAiAQLwsgACwAG0EASARAIAAoAhAQLwsgACwAD0EASARAIAAoAgQQLwsgAEEEaiIBQQAQNiAAIAFB/9MAEDciASgCCDYCGCAAIAEpAgA3AxAgAUIANwIAIAFBADYCCCAAIABBEGpB7dMAEDUiASgCCDYCKCAAIAEpAgA3AyAgAUIANwIAIAFBADYCCEGMvDQgACgCICAAQSBqIAAtACsiAcBBAEgiBBsgACgCJCABIAQbEGkaIAAsACtBAEgEQCAAKAIgEC8LIAAsABtBAEgEQCAAKAIQEC8LIAAsAA9BAEgEQCAAKAIEEC8LIABBBGoiAUEAEDYgACABQdHUABA3IgEoAgg2AhggACABKQIANwMQIAFCADcCACABQQA2AgggACAAQRBqQe3TABA1IgEoAgg2AiggACABKQIANwMgIAFCADcCACABQQA2AghBjLw0IAAoAiAgAEEgaiAALQArIgHAQQBIIgQbIAAoAiQgASAEGxBpGiAALAArQQBIBEAgACgCIBAvCyAALAAbQQBIBEAgACgCEBAvCyAALAAPQQBIBEAgACgCBBAvCyAAQQRqIgFBABA2IAAgAUHQ1AAQNyIBKAIINgIYIAAgASkCADcDECABQgA3AgAgAUEANgIIIAAgAEEQakHt0wAQNSIBKAIINgIoIAAgASkCADcDICABQgA3AgAgAUEANgIIQYy8NCAAKAIgIABBIGogAC0AKyIBwEEASCIEGyAAKAIkIAEgBBsQaRogACwAK0EASARAIAAoAiAQLwsgACwAG0EASARAIAAoAhAQLwsgACwAD0EASARAIAAoAgQQLwsgAEEEaiIBQQAQNiAAIAFB+NMAEDciASgCCDYCGCAAIAEpAgA3AxAgAUIANwIAIAFBADYCCCAAIABBEGpB7dMAEDUiASgCCDYCKCAAIAEpAgA3AyAgAUIANwIAIAFBADYCCEGMvDQgACgCICAAQSBqIAAtACsiAcBBAEgiBBsgACgCJCABIAQbEGkaIAAsACtBAEgEQCAAKAIgEC8LIAAsABtBAEgEQCAAKAIQEC8LIAAsAA9BAEgEQCAAKAIEEC8LIABBBGoiAUEAEDYgACABQZvUABA3IgEoAgg2AhggACABKQIANwMQIAFCADcCACABQQA2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ASACIAVBAWoQnQEgBEEQaiQADAELEEsACwsgA0EQaiQACwkAIAAgBRDaAQuOBwIEfwR7IAJBH0oEQCACQSBtIQYDQCABIAVBB3RqIgNBQGsgACAFQRZsaiIELwEAQQJ0QfC5BGr9CQIAIgcgBCgBAiICQQx2/REgAkENdv0cASACQQ52/RwCIAJBD3b9HAMiCf0MEAAAABAAAAAQAAAAEAAAAP1OIAT9XAAG/YkB/akBIghBBP2tAf1Q/Qzw////8P////D////w/////a4B/foB/eYB/QsCACADIAcgAkEEdP0RIAJBA3T9HAEgAkECdP0cAiACQQF0/RwD/QwQAAAAEAAAABAAAAAQAAAA/U4gCP0MDwAAAA8AAAAPAAAADwAAAP1O/VD9DPD////w////8P////D////9rgH9+gH95gH9CwIAIAMgByACQRB2/REgAkERdv0cASACQRJ2/RwCIAJBE3b9HAP9DBAAAAAQAAAAEAAAABAAAAD9TiAEQQpq/VwAAP2JAf2pASIIQQT9rQH9UP0M8P////D////w////8P////2uAf36Af3mAf0LAlAgAyAHIAJBBHb9ESACQQV2/RwBIAJBBnb9HAIgAkEHdv0cAyIKQQT9qwH9DBAAAAAQAAAAEAAAABAAAAD9TiAI/QwPAAAADwAAAA8AAAAPAAAA/U79UP0M8P////D////w////8P////2uAf36Af3mAf0LAhAgAyAHIAJBFHb9ESACQRV2/RwBIAJBFnb9HAIgAkEXdv0cA/0MEAAAABAAAAAQAAAAEAAAAP1OIARBDmr9XAAA/YkB/akBIghBBP2tAf1Q/Qzw////8P////D////w/////a4B/foB/eYB/QsCYCADIAcgCv0MEAAAABAAAAAQAAAAEAAAAP1OIAj9DA8AAAAPAAAADwAAAA8AAAD9Tv1Q/Qzw////8P////D////w/////a4B/foB/eYB/QsCICADIAcgAkEYdv0RIAJBGXb9HAEgAkEadv0cAiACQRt2/RwD/QwQAAAAEAAAABAAAAAQAAAA/U4gBEESav1cAAD9iQH9qQEiCEEE/a0B/VD9DPD////w////8P////D////9rgH9+gH95gH9CwJwIAMgByAJQQT9qwH9DBAAAAAQAAAAEAAAABAAAAD9TiAI/QwPAAAADwAAAA8A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AAALIABBwANqJAAgDAvQBAEEfyMAQfAEayIAJAAgACACNgLoBCAAIAE2AuwEIABBswE2AhAgAEHIAWogAEHQAWogAEEQaiIBEE0hByAAQcABaiIJIAQoAhwiCDYCACAIQQRqQQH+HgIAGiAJEGshCCAAQQA6AL8BAkAgAEHsBGogAiADIAkgBCgCBCAFIABBvwFqIAggByAAQcQBaiAAQeAEahClA0UNACAAQZoxKAAANgC3ASAAQZMxKQAANwOwASAIIABBsAFqIABBugFqIABBgAFqIAgoAgAoAjARBwAaIABBsgE2AhAgAEEIakEAIAEQTSEDIAEhBAJAIAAoAsQBIAcoAgBrIgFBiQNOBEAgAUECdUECahBDIQIgAygCACEBIAMgAjYCACABBEAgASADKAIEEQAACyADKAIAIgRFDQELIAAtAL8BBEAgBEEtOgAAIARBAWohBAsgBygCACECA0AgACgCxAEgAk0EQAJAIARBADoAACAAIAY2AgAgAEEQaiAAEM8DQQFHDQAgAygCACEBIANBADYCACABBEAgASADKAIEEQAACwwECwUgBCAAQbABaiAAQYABaiIBIAFBKGogAhCbAiABa0ECdWotAAA6AAAgBEEBaiEEIAJBBGohAgwBCwsQRwALEEcACyAAQewEaiAAQegEahA+BEAgBSAFKAIAQQJyNgIACyAAKALsBCEKIAAoAsABIgFBBGpBf/4eAgBFBEAgASABKAIAKAIIEQAACyAHKAIAIQEgB0EANgIAIAEEQCABIAcoAgQRAAALIABB8ARqJAAgCgsLACAAIAEgAhC+AwveBgEGfyMAQZABayIAJAAgACACNgKIASAAIAE2AowBIABBswE2AhQgAEEYaiAAQSBqIABBFGoiCBBNIQkgAEEQaiIHIAQoAhwiATYCACABQQRqQQH+HgIAGiAHEHMhASAAQQA6AA8gAEGMAWogAiADIAcgBCgCBCAFIABBD2ogASAJIAggAEGEAWoQqwMEQCMAQRBrIgIkAAJAIAYtAAtBB3YEQCAGKAIAIQogAkEAOgAPIAogAi0ADzoAACAGQQA2AgQMAQsgAkEAOgAOIAYgAi0ADjoAACAGIAYtAAtBgAFxOgALIAYgBi0AC0H/AHE6AAsLIAJBEGokACAALQAPBEAgBiABQS0gASgCACgCHBEEABCPAgsg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dEHwuQRq/QkCACIDIAb9XAAC/YkB/akBIgRBBP2tAf0M+P////j////4////+P////2uAf36Af3mAf0LAgAgAiADIAT9DA8AAAAPAAAADwAAAA8AAAD9Tv0M+P////j////4////+P////2uAf36Af3mAf0LAgAgAiADIAZBBmr9XAAA/YkB/akBIgRBBP2tAf0M+P////j////4////+P////2uAf36Af3mAf0LAlAgAiADIAT9DA8AAAAPAAAADwAAAA8AAAD9Tv0M+P////j////4////+P////2uAf36Af3mAf0LAhAgAiADIAZBCmr9XAAA/YkB/akBIgRBBP2tAf0M+P////j////4////+P////2uAf36Af3mAf0LAmAgAiADIAT9DA8AAAAPAAAADwAAAA8AAAD9Tv0M+P////j////4////+P////2uAf36Af3mAf0LAiAgAiADIAZBDmr9XAAA/YkB/akBIgRBBP2tAf0M+P////j////4////+P////2uAf36Af3mAf0LAnAgAiADIAT9DA8AAAAPAAAADwAAAA8AAAD9Tv0M+P////j////4////+P////2uAf36Af3mAf0LAjAgBUEBaiIFIAdHDQALCwvLAQEHfyMAQdABayIAJAAQQiEFIAAgBDYCACAAQbABaiIHIAcgB0EUIAVBwBUgABBiIgpqIgUgAhB1IQggAEEQaiIEIAIoAhwiBjYCACAGQQRqQQH+HgIAGiAEEGshBiAEKAIAIglBBGpBf/4eAgBFBEAgCSAJKAIAKAIIEQAACyAGIAcgBSAEIAYoAgAoAjARBwAaIAEgBCAKQQJ0IARqIgEgCCAAa0ECdCAAakGwBWsgBSAIRhsgASACIAMQkgEhCyAAQdABaiQAIAsLkgUBCX8CfyMAQaADayIGJAAgBkIlNwOYAyAGQZgDaiIHQQFyQYUrIAIoAgQQ3wEhCCAGIAZB8AJqIgk2AuwCEEIhAAJ/IAgEQCACKAIIIQogBkFAayAFNwMAIAYgBDcDOCAGIAo2AjAgCUEeIAAgByAGQTBqEGIMAQsgBiAENwNQIAYgBTcDWCAGQfACakEeIAAgBkGYA2ogBkHQAGoQYgshACAGQbIBNgKAASAGQeQCakEAIAZBgAFqEE0hCSAGQfACaiIKIQcCQCAAQR5OBEAQQiEAAn8gCARA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DAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEDIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQOCABIAEtAAtBB3YEfyABKAIIQf////8HcUEBawVBCgsQOCAAIAMCfyABLQALQQd2BEAgASgCAAwBCyABCyICajYCzAELAn8gAEH8AmoiBigCACIDKAIMIgcgAygCEEYEQCADIAMoAgAoAiQRAQAMAQsgBygCAAsgAEEXaiAAQRZqIAIgAEHMAWogACgC7AEgACgC6AEgAEHcAWogAEEgaiAAQRxqIABBGGogAEHwAWoQnAINACAGEFwaDAELCwJAAn8gAC0A5wFBB3YEQCAAKALgAQwBCyAALQDnAUH/AHELRQ0AIAAtABdFDQAgACgCHCIDIABBIGprQZ8BSg0AIAAgA0EEajYCHCADIAAoAhg2AgALIAAgAiAAKALMASAEEL8DIAApAwAhCSAFIAApAwg3AwggBSAJNwMAIABB3AFqIABBIGogACgCHCAEEGMgAEH8AmogAEH4AmoQPgRAIAQgBCgCAEECcjYCAAsgACgC/AIhCCABEDIaIABB3AFqEDIaIABBgANqJAAgCAu5BQEDfyMAQfACayIAJAAgACACNgLoAiAAIAE2AuwCIABBzAFqIAMgAEHgAWogAEHcAWogAEHYAWoQnQIjAEEQayICJAAgAEHAAWoiAUIANwIAIAFBADYCCCACQRBqJAAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDggAAJ/IAEtAAtBB3YEQCABKAIADAELIAELIgI2ArwBIAAgAEEQajYCDCAAQQA2AgggAEEBOgAHIABBxQA6AAYDQAJAIABB7AJqIABB6AJqED4NACAAKAK8AQJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEDIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQOCABIAEtAAtBB3YEfyABKAIIQf////8HcUEBawVBCgsQOCAAIAMCfyABLQALQQd2BEAgASgCAAwBCyABCyICajYCvAELAn8gAEHsAmoiBigCACIDKAIMIgcgAygC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BEAgASgCAAwBCyABCyICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQcwCaiAAQcgCahA+DQAgACgCtAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EDggASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDggACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArQBCwJ/IABBzAJqIggoAgAiAygCDCIJIAMoAhBGBEAgAyADKAIAKAIkEQEADAELIAkoAgALIAYgAiAAQbQBaiAAQQhqIAAoAsQCIABBxAFqIABBEGogAEEMaiAHELQBDQAgCBBcGgwBCwsCQAJ/IAAtAM8BQQd2BEAgACgCyAEMAQsgAC0AzwFB/wBxC0UNACAAKAIMIgMgAEEQamtBnwFKDQAgACADQQRqNgIMIAMgACgCCDYCAAsgBSACIAAoArQBIAQgBhDGAzsBACAAQcQBaiAAQRBqIAAoAgwgBBBjIABBzAJqIABByAJqED4EQCAEIAQoAgBBAnI2AgALIAAoAswCIQogARAyGiAAQcQBahAyGiAAQdACaiQAIAoLmgUBBX8jAEHQAmsiACQAIAAgAjYCyAIgACABNgLMAiADEIgBIQYgAyAAQdABahDEASEHIABBxAFqIAMgAEHEAmoQwwEjAEEQayICJAAgAEG4AWoiAUIANwIAIAFBADYCCCACQRBqJAAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDggAAJ/IAEtAAtBB3YEQCABKAIADAELIAELIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABBzAJqIABByAJqED4NACAAKAK0AQJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEDIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQOCABIAEtAAtBB3YEfyABKAIIQf////8HcUEBawVBCgsQOCAAIAMCfyABLQALQQd2BEAgASgCAAwBCyABCyICajYC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CCAGKAIQRgRAIAYgBigCACgCJBEBAAwBCyAILQAAC8BBECABIABBtAFqIABBCGpBACADIABBEGogAEEMaiAAQdABahC2AQ0AIAcQXRoMAQsLIAIgACgCtAEgAWsQOAJ/IAItAAtBB3YEQCACKAIADAELIAILIQsQQiEJIAAgBTYCACALIAkgABC9A0EBRwRAIARBBDYCAAsgAEH8AWogAEH4AWoQPwRAIAQgBCgCAEECcjYCAAsgACgC/AEhCiACEDIaIAMQMhogAEGAAmokACAKC9EFAgN/AX4jAEGQAmsiACQAIAAgAjYCiAIgACABNgKMAiAAQdABaiADIABB4AFqIABB3wFqIABB3gFqEKACIwBBEGsiAiQAIABBxAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxA4IAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgLAASAAIABBIGo2AhwgAEEANgIYIABBAToAFyAAQcUAOgAWA0ACQCAAQYwCaiAAQYgCahA/DQAgACgCwAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0EDggASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLEDggACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2AsABCwJ/IABBjAJqIgYoAgAiAygCDCIHIAMoAhBGBEAgAyADKAIAKAIkEQEADAELIActAAALwCAAQRdqIABBFmogAiAAQcABaiAALADfASAALADeASAAQdABaiAAQSBqIABBHGogAEEYaiAAQeABahCfAg0AIAYQXRoMAQsLAkACfyAALQDbAUEHdgRAIAAoAtQBDAELIAAtANsBQf8AcQtFDQAgAC0AF0UNACAAKAIcIgMgAEEgamtBnwFKDQAgACADQQRqNgIcIAMgACgCGDYCAAsgACACIAAoAsABIAQQvwMgACkDACEJIAUgACkDCDcDCCAFIAk3AwAgAEHQAWogAEEgaiAAKAIcIAQQYyAAQYwCaiAAQYgCahA/BEAgBCAEKAIAQQJyNgIA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aiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAighBCABQbAEaiICIAYQNiABIAJBqjoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakHbERA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCLCEEIAFBsARqIgIgBhA2IAEgAkGqOhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQcsOEDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADKAIwIQQgAUGwBGoiAiAGEDYgASACQao6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpB9BIQNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAjQhBCABQbAEaiICIAYQNiABIAJBqjoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakGoDhA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCOCEEIAFBsARqIgIgBhA2IAEgAkGqOhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQdUSEDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADKAIAIQQgAUGwBGoiAiAGEDYgASACQao6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpBpg0QNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAgQhBCABQbAEaiICIAYQNiABIAJBqjoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakH8ERA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCECEEIAFBsARqIgIgBhA2IAEgAkGqOhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQYcMEDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADKAIUIQQgAUGwBGoiAiAGEDYgASACQao6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpBkREQNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAhghBCABQbAEaiICIAYQNiABIAJBqjoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakGxDBA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCHCEEIAFBsARqIgIgBhA2IAEgAkGqOhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQYAOEDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADKAIgIQQgAUGwBGoiAiAGEDYgASACQao6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpBsRIQNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAgghBCABQbAEaiICIAYQNiABIAJBqjoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakHZDBA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCDCEEIAFBsARqIgIgBhA2IAEgAkGqOhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQbcREDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyAGQQFqIgYgFUcNAAsLIAAgACgCpAFBACAMrCIvIDQQVjYCfCAAIAAoAqQBIBAgLyAxEFY2AoABIAAgACgCpAFBACAvEEg2AoQBIAAgACgCpAFBACAvEEg2AogBIAAoAnwhBCABQSAQMSICNgKABCABQpyAgICAhICAgH83AoQEIAJByx0oAAA2ABggAkHDHSkAADcAECACQbMd/QAAAP0LAAAgAkEAOgAcIAEgAUGABGoiAjYCsAQgAUHABGogByACIAFBsARqEDkgASgCwAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAAoAoABIQQgAUEgEDEiAjYCgAQgAUKegICAgISAgIB/NwKEBCACQd4NKQAANwAWIAJB2A0pAAA3ABAgAkHIDf0AAAD9CwAAIAJBADoAHiABIAFBgARqIgI2ArAEIAFBwARqIAcgAiABQbAEahA5IAEoAsAEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyAAKAKEASEEIAFBIBAxIgI2AoAEIAFCkYCAgICEgICAfzcChAQgAkHGDS0AADoAECACQbYN/QAAAP0LAAAgAkEAOgARIAEgAUGABGoiAjYCsAQgAUHABGogByACIAFBsARqEDkgASgCwAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAAoAogBIQQgAUEQEDEiAjYCgAQgAUKPgICAgIKAgIB/NwKEBCACQZESKQAANwAHIAJBihIpAAA3AAAgAkEAOgAPIAEgAUGABGoiAjYCsAQgAUHABGogByACIAFBsARqEDkgASgCwAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIBRBAEoEQCAMQQJ0rCExQQAhBgNAIAAoApgBIAZB4ABsaiIDIAAoAqQBQQAgLxBINgJIIAMgACgCpAFBACAvEEg2AkwgAyAAKAKkASAQIC8gMRBWNgJQIAMgACgCpAFBACAxEEg2AlQgAyAAKAKkASAQIDEgLxBWNgJYIAMgACgCpAFBACAvEEg2AlwgAyAAKAKkAUEAIC8QSDYCACADIAAoAqQBQQAgLxBINgIEIAMgACgCpAEgECAvIC8QVjYCECADIAAoAqQBQQAgLxBINgIUIAMgACgCpAEgECAvIC8QVjYCGCADIAAoAqQBIBAgLyAvEFY2AhwgAyAAKAKkAUEAIC8QSDYCICADIAAoAqQBIBAgLyAvEFY2AgggAyAAKAKkAUEAIC8QSDYCDCADIAAoAqQBQQAgLxBINgIkIAMgACgCpAFBACAvEEg2AiggAyAAKAKkASAQIC8gLxBWNgI0IAMgACgCpAFBACAvEEg2AjggAyAAKAKkASAQIC8gLxBWNgI8IAMgACgCpAEgECAvIC8QVjYCQCADIAAoAqQBQQAgLxBINgJEIAMgACgCpAEgECAvIC8QVjYCLCADIAAoAqQBQQAgLxBINgIwIAMoAkghBCABQbAEaiICIAYQNiABIAJBujoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakGBDRA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCTCEEIAFBsARqIgIgBhA2IAEgAkG6OhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQdsREDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADKAJQIQQgAUGwBGoiAiAGEDYgASACQbo6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpByw4QNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAlQhBCABQbAEaiICIAYQNiABIAJBujoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakH0EhA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCWCEEIAFBsARqIgIgBhA2IAEgAkG6OhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQagOEDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADKAJcIQQgAUGwBGoiAiAGEDYgASACQbo6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpB1RIQNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAgAhBCABQbAEaiICIAYQNiABIAJBujoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakGmDRA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCBCEEIAFBsARqIgIgBhA2IAEgAkG6OhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQfwREDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADKAIQIQQgAUGwBGoiAiAGEDYgASACQbo6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpBhwwQNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAhQhBCABQbAEaiICIAYQNiABIAJBujoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakGRERA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCGCEEIAFBsARqIgIgBhA2IAEgAkG6OhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQbEMEDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADKAIcIQQgAUGwBGoiAiAGEDYgASACQbo6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpBgA4QNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAiAhBCABQbAEaiICIAYQNiABIAJBujoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakGxEhA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCCCEEIAFBsARqIgIgBhA2IAEgAkG6OhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQdkMEDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADKAIMIQQgAUGwBGoiAiAGEDYgASACQbo6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpBtxEQNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAiQhBCABQbAEaiICIAYQNiABIAJBujoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakGQDRA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCKCEEIAFBsARqIgIgBhA2IAEgAkG6OhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQegREDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADKAI0IQQgAUGwBGoiAiAGEDYgASACQbo6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpB7gsQNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAjghBCABQbAEaiICIAYQNiABIAJBujoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakH6EBA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCPCEEIAFBsARqIgIgBhA2IAEgAkG6OhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQZoMEDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8LIAEsAMsEQQBIBEAgASgCwAQQLwsgASwAuwRBAEgEQCABKAKwBBAvCyADQUBrKAIAIQQgAUGwBGoiAiAGEDYgASACQbo6EDciAigCCDYCyAQgASACKQIANwPABCACQgA3AgAgAkEANgIIIAEgAUHABGpB5w0QNSICKAIINgKIBCABIAIpAgA3A4AEIAJCADcCACACQQA2AgggASABQYAEaiICNgLYBCABQaQEaiAHIAIgAUHYBGoQOSABKAKkBCAENgIcIAEsAIsEQQBIBEAgASgCgAQQLwsgASwAywRBAEgEQCABKALABBAvCyABLAC7BEEASARAIAEoArAEEC8LIAMoAkQhBCABQbAEaiICIAYQNiABIAJBujoQNyICKAIINgLIBCABIAIpAgA3A8AEIAJCADcCACACQQA2AgggASABQcAEakGaEhA1IgIoAgg2AogEIAEgAikCADcDgAQgAkIANwIAIAJBADYCCCABIAFBgARqIgI2AtgEIAFBpARqIAcgAiABQdgEahA5IAEoAqQEIAQ2AhwgASwAiwRBAEgEQCABKAKABBAvCyABLADLBEEASARAIAEoAsAEEC8LIAEsALsEQQBIBEAgASgCsAQQLwsgAygCLCEEIAFBsARqIgIgBhA2IAEgAkG6OhA3IgIoAgg2AsgEIAEgAikCADcDwAQgAkIANwIAIAJBADYCCCABIAFBwARqQcIMEDUiAigCCDYCiAQgASACKQIANwOABCACQgA3AgAgAkEANgIIIAEgAUGABGoiAjYC2AQgAUGkBGogByACIAFB2ARqEDkgASgCpAQgBDYCHCABLACLBEEASARAIAEoAoAEEC8L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ACgCADYCACAHIAAoAgQ2AgQgByAALQAIOgAIIAEgACgCDDYCACABIAAoAhA2AgQgASAALQAUOgAIIARBAmohBCAGQQJqIgYgCkcNAAsLIAtFDQIgBCAIakEMbCAFakEMayIAIAMgBEEMbGoiASgCADYCACAAIAEoAgQ2AgQgACABLQAIOgAIDAILIAFBADYCKCABQZ94NgIAIAIoAgghAwsgA0UNAQsgAiADNgIMIAMQLwsgAkFAayQAC6UBAQR/IABBrJYBNgIAIABBCGohBAJAIAAoAigiAUUNACABQX/+HgIEDQAgASABKAIAKAIIEQAAAkAgAUEIaiID/hACAARAIANBf/4eAgANAQsgASABKAIAKAIQEQAACwsgBCgCACIBQQRqQX/+HgIARQRAIAEgASgCACgCCBEAAAsgAEGslAE2AgAgACgCBCIBBEAgASABKAIAKAIEEQAACyAAEC8LowEBBH8gAEGslgE2AgAgAEEIaiEEAkAgACgCKCIBRQ0AIAFBf/4eAgQNACABIAEoAgAoAggRAAACQCABQQhqIgP+EAIABEAgA0F//h4CAA0BCyABIAEoAgAoAhARAAALCyAEKAIAIgFBBGpBf/4eAgBFBEAgASABKAIAKAIIEQAACyAAQayUATYCACAAKAIEIgEEQCABIAEoAgAoAgQRAAALIAAL6wIBBn8CQCABKAIEIgMgASgCDCIERg0AIAQgASgCCCICRgRAQQAhAiABLQAsQQhxDQFBASECIARBAWstAAAiA0HfAEYNASADwEEATgRAIAAoAgwoAgggA0ECdGotAABB4ABxDQILQQAhAgwBCwJAIAIgA0cNACABKAIsIgRBgAFxDQBBACECIARBBHENAUEBIQIgAy0AACIDQd8ARg0BIAPAQQBOBEAgACgCDCgCCCADQQJ0ai0AAEHgAHENAgtBACECDAELIAItAAAiBsAhBEEBIQUCf0EBIAJBAWstAAAiAkHfAEYNABogAsBBAE4EQEEBIAAoAgwoAgggAkECdGotAABB4ABxDQEaC0EACyEHAkAgBEHfAEYNACAEQQBOBEAgACgCDCgCCCAGQQJ0ai0AAEHgAHENAQtBACEFCyAHIAVHIQILIAFBACAAKAIEIAAtABQgAkYiABs2AiggAUGfeEGeeCAAGzYCAAtSAQF/IABB1JUBNgIAIAAo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dXRleAAlcyBmYWlsZWQgdG8gYWNxdWlyZSBtdXRleABjaXJjdW1mbGV4AC0rICAgMFgweAAtMFgrMFggMFgtMHgrMHggMHgAaGVicmV3AGhhdwBOb3YAVGh1AHRlbHVndQBBdWd1c3QAJXMgZmFpbGVkIHRvIGJyb2FkY2FzdAB1bnNpZ25lZCBzaG9ydABhbGVydABwcmludAB1bnNpZ25lZCBpbnQAY2lyY3VtZmxleC1hY2NlbnQAZ3JhdmUtYWNjZW50AGZ1bGxfZGVmYXVsdABrdl9jYWNoZV9yZWluaXQAa3ZfY2FjaGVfaW5pdAB4ZGlnaXQALmNyb3NzX2F0dG4ucXVlcnkud2VpZ2h0AC5hdHRuLnF1ZXJ5LndlaWdodAAuY3Jvc3NfYXR0bi5rZXkud2VpZ2h0AC5hdHRuLmtleS53ZWlnaHQALmNyb3NzX2F0dG4ub3V0LndlaWdodAAuYXR0bi5vdXQud2VpZ2h0AGVuY29kZXIubG5fcG9zdC53ZWlnaHQALm1scF9sbi53ZWlnaHQALmNyb3NzX2F0dG5fbG4ud2VpZ2h0AC5hdHRuX2xuLndlaWdodABkZWNvZGVyLmxuLndlaWdodABkZWNvZGVyLnRva2VuX2VtYmVkZGluZy53ZWlnaHQALmNyb3NzX2F0dG4udmFsdWUud2VpZ2h0AC5hdHRuLnZhbHVlLndlaWdodABlbmNvZGVyLmNvbnYyLndlaWdodAAubWxwLjIud2VpZ2h0AGVuY29kZXIuY29udjEud2VpZ2h0AC5tbHAuMC53ZWlnaHQAc2V0AHJpZ2h0LWN1cmx5LWJyYWNrZXQAbGVmdC1jdXJseS1icmFja2V0AHJpZ2h0LXNxdWFyZS1icmFja2V0AGxlZnQtc3F1YXJlLWJyYWNrZXQAcHVuY3QAZ2dtbF9uZXdfb2JqZWN0AE9jdABmbG9hdABTYXQAY29tbWVyY2lhbC1hdAB1aW50NjRfdABoeXBoZW4tbWludXMAcmV2ZXJzZS1zb2xpZHVzAHdoaXNwZXJfZXhwX2NvbXB1dGVfdG9rZW5fbGV2ZWxfdGltZXN0YW1wcwBhZnJpa2FhbnMAcGFyYW1zAHJpZ2h0LXBhcmVudGhlc2lzAGxlZnQtcGFyZW50aGVzaXMAd2hpc3Blcl9wcmludF90aW1pbmdzAC5jcm9zc19hdHRuLnF1ZXJ5LmJpYXMALmF0dG4ucXVlcnkuYmlhcwAuY3Jvc3NfYXR0bi5vdXQuYmlhcwAuYXR0bi5vdXQuYmlhcwBlbmNvZGVyLmxuX3Bvc3QuYmlhcwAubWxwX2xuLmJpYXMALmNyb3NzX2F0dG5fbG4uYmlhcwAuYXR0bl9sbi5iaWFzAGRlY29kZXIubG4uYmlhcwAuY3Jvc3NfYXR0bi52YWx1ZS5iaWFzAC5hdHRuLnZhbHVlLmJpYXMAZW5jb2Rlci5jb252Mi5iaWFzAC5tbHAuMi5iaWFzAGVuY29kZXIuY29udjEuYmlhcwAubWxwLjAuYmlhcwAlcwBmb3VyAHdoaXNwZXJfbGFuZ19zdHIAQXByAGNvbnN0cnVjdG9yAHZlY3RvcgBjZ3JhcGgtPm5vZGVzW2NncmFwaC0+bl9ub2RlcyAtIDFdID09IHRlbnNvcgB1bmtub3duIGFsbG9jYXRpb24gZXJyb3IAYmFzaGtpcgBsb3dlcgB1cHBlcgBraG1lcgBidWZmZXIAT2N0b2JlcgBOb3ZlbWJlcgBTZXB0ZW1iZXIARGVjZW1iZXIAdGF0YXIAbXlhbm1hcgB1bnNpZ25lZCBjaGFyAGlvc19iYXNlOjpjbGVhcgBNYXIAcQAvVXNlcnMvZ2dlcmdhbm92L2RldmVsb3BtZW50L2dpdGh1Yi93aGlzcGVyLmNwcC93aGlzcGVyLmNwcABmdWxsLXN0b3AAU2VwACVJOiVNOiVTICVwAHR3bwBhdXRvAHBhc2h0bwB6ZXJvAGxhbwBTdW4ASnVuAGNhcnJpYWdlLXJldHVybgBicmV0b24Ac2VtaWNvbG9uAHN0ZDo6ZXhjZXB0aW9uAF9fY3hhX2d1YXJkX2FjcXVpcmUgZGV0ZWN0ZWQgcmVjdXJzaXZlIGluaXRpYWxpemF0aW9uAE1vbgBsYXRpbgBwZXJjZW50LXNpZ24AcGx1cy1zaWduAGVxdWFscy1zaWduAG51bWJlci1zaWduAGRvbGxhci1zaWduAGxlc3MtdGhhbi1zaWduAGdyZWF0ZXItdGhhbi1zaWduAHNldmVuAHR1cmttZW4AaHlwaGVuAG9jY2l0YW4AdGliZXRhbgBuYW4AZ2VybWFuAGNwbGFuAGNhdGFsYW4AbGF0dmlhbgBiZWxhcnVzaWFuAHJ1c3NpYW4AcGVyc2lhbgBpbmRvbmVzaWFuAGh1bmdhcmlhbgBidWxnYXJpYW4AYm9zbmlhbgBtYWNlZG9uaWFuAHVrcmFpbmlhbgBzbG92ZW5pYW4AbGl0aHVhbmlhbgBtb25nb2xpYW4AaXRhbGlhbgBub3J3ZWdpYW4Ac2VyYmlhbgBrb3JlYW4ASmFuAGFsbnVtAG1hbGF5YWxhbQBKdWwAY250cmwAZ2dtbF9uZXdfdGVuc29yX2ltcGwAYm9vbABsbABBcHJpbAB0YW1pbABlbXNjcmlwdGVuOjp2YWwAbnlub3JzawBhc3RlcmlzawBxdWVzdGlvbi1tYXJrAHF1b3RhdGlvbi1tYXJrAGV4Y2xhbWF0aW9uLW1hcmsAYmxhbmsAdGFqaWsAZ3JlZWsAdXpiZWsAc2xvdmFrAGoAbWFvcmkARnJpAGF6ZXJiYWlqYW5pAHN3YWhpbGkAbmVwYWxpAHNvbWFsaQBiZW5nYWxpAG1hcmF0aGkAc2luZGhpAGhpbmRpAHB1bmphYmkAYmFkX2FycmF5X25ld19sZW5ndGgAd2Vsc2gAZmlubmlzaABzcGFuaXNoAGRhbmlzaABwb2xpc2gAZW5nbGlzaAB0dXJraXNoAGx1eGVtYm91cmdpc2gAc3dlZGlzaAB5aWRkaXNoAGJhY2tzbGFzaABncmFwaABrYXpha2gAZHV0Y2gATWFyY2gAZnJlbmNoAGN6ZWNoAEF1ZwB0YWdhbG9nAHVuc2lnbmVkIGxvbmcAdGVybWluYXRpbmcAc3RkOjp3c3RyaW5nAGJhc2ljX3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBlbmNvZGVyLnBvc2l0aW9uYWxfZW1iZWRkaW5nAGRlY29kZXIucG9zaXRpb25hbF9lbWJlZGRpbmcAaW5mACUuMExmACVMZgB3aGlzcGVyX3Rva2VuaXplAGZpdmUAdHJ1ZQBiYXNxdWUAaW52YWxpZCBhbGlnbm1lbnQgdmFsdWUAVHVlAHdoaXNwZXJfaW5pdF9zdGF0ZQB3aGlzcGVyX2luaXRfbm9fc3RhdGUAd2hpc3Blcl9pbml0X2Zyb21fZmlsZV9ub19zdGF0ZQB3aGlzcGVyX2xhbmdfYXV0b19kZXRlY3Rfd2l0aF9zdGF0ZQB3aGlzcGVyX2Z1bGxfd2l0aF9zdGF0ZQB0cmFuc2xhdGUAZmFsc2UAcG9ydHVndWVzZQBtYWx0ZXNlAGZhcm9lc2UAY2hpbmVzZQBzdW5kYW5lc2UAdmlldG5hbWVzZQBfX2N4YV9ndWFyZF9yZWxlYXNlAHVuZGVyc2NvcmUAX19jeGFfZ3VhcmRfYWNxdWlyZQB3dHlwZSA9PSBjYWNoZS52LT50eXBlAHNyYzAtPnR5cGUgPT0gZHN0LT50eXBlAGRzdC0+dHlwZSA9PSBzcmMwLT50eXBlAFVua25vd24gZXJyb3IgdHlwZQBKdW5lAG9uZQBuaW5lAG5ld2xpbmUAbG93LWxpbmUAdmVydGljYWwtbGluZQBoYWl0aWFuIGNyZW9sZQBkb3VibGUAYXBvc3Ryb3BoZQB0aHJlZQBmcmVlAHRpbGRlAHJpZ2h0LWJyYWNlAGxlZnQtYnJhY2UAYmFja3NwYWNlAHRyYW5zY3JpYmUAcGVyaW9kAG1hcDo6YXQ6ICBrZXkgbm90IGZvdW5kAGFtcGVyc2FuZAB2b2lkAHdoaXNwZXJfbGFuZ19pZAB0ZXJtaW5hdGVfaGFuZGxlciB1bmV4cGVjdGVkbHkgcmV0dXJuZWQAdGhyZWFkIGNvbnN0cnVjdG9yIGZhaWxlZABfX3RocmVhZF9zcGVjaWZpY19wdHIgY29uc3RydWN0aW9uIGZhaWxlZAB0aHJlYWQ6OmpvaW4gZmFpbGVkAG11dGV4IGxvY2sgZmFpbGVkAGZvcm0tZmVlZABXZWQAd2hpc3Blcl9tb2RlbF9sb2FkACUwMmQ6JTAyZDolMDJkJXMlMDNkAGxlYWZfJWQAbm9kZV8lZABnZ21sX2FsaWduZWRfbWFsbG9jAHN0ZDo6YmFkX2FsbG9jAGRzdC0+bmVbMF0gPT0gbmMAYW1oYXJpYwBpY2VsYW5kaWMAYXJhYmljAERlYwAvVXNlcnMvZ2dlcmdhbm92L2RldmVsb3BtZW50L2dpdGh1Yi93aGlzcGVyLmNwcC9nZ21sLmMAd2IAcmIARmViAHZlcnRpY2FsLXRhYgBuX2xvZ2l0cyA9PSBjdHgudm9jYWIubl92b2NhYgB3K2IAcitiAGErYgByd2EAY3BsYW4tPndvcmtfZGF0YQBoYXVzYQBzaG9uYQBjb21tYQBzaW5oYWxhAGxpbmdhbGEAYWxwaGEAa2FubmFkYQB5b3J1YmEAW19leHRyYV90b2tlbl8AW19UVF8AW19TT1RfXQBbX05PVF9dAFtfRU9UX10AW19CRUdfXQBzcmMwLT5uYlswXSA9PSBkc3QtPm5iWzBdICYmIHNyYzAtPm5iWzFdID09IGRzdC0+bmJbMV0gJiYgc3JjMC0+bmJbMl0gPT0gZHN0LT5uYlsyXSAmJiBzcmMwLT5uYlszXSA9PSBkc3QtPm5iWzNdAGEtPm5lWzFdID09IGItPm5lWzFdAFoAdGVuc29yLT5vcCA9PSBHR01MX09QX1VOQVJZACVhICViICVkICVIOiVNOiVTICVZAFBPU0lYAFcAVgBVAHd0eXBlICE9IEdHTUxfVFlQRV9DT1VOVABheGlzMyA+PSAwICYmIGF4aXMzIDwgR0dNTF9NQVhfRElNUwBheGlzMiA+PSAwICYmIGF4aXMyIDwgR0dNTF9NQVhfRElNUwBheGlzMSA+PSAwICYmIGF4aXMxIDwgR0dNTF9NQVhfRElNUwBheGlzMCA+PSAwICYmIGF4aXMwIDwgR0dNTF9NQVhfRElNUwBjZ3JhcGgtPm5fbGVhZnMgPCBHR01MX01BWF9OT0RFUwBjZ3JhcGgtPm5fbm9kZXMgPCBHR01MX01BWF9OT0RFUwAlSDolTTolUwBSAFEAUABPAE5BTgBuZTEgPT0gTgBuZWQxID09IE4AUE0AQU0AbmViMTAgPT0gTQBuZWMwMCA9PSBNAE5VTAB0ZW5zb3IgIT0gTlVMTABjdHgtPm1lbV9idWZmZXIgIT0gTlVMTABMQ19BTEwASwBKAEkASABMQU5HAElORgBFAG5ldjEgPT0gRABuZWMwMSA9PSBEAG5lazAgPT0gRABuZTAgPT0gRABuZWQwID09IEQAbmVjMTAgPT0gRABuZWIwMCA9PSBEAEMAQgBBAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AHN0ZDo6YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AD4+PgA8PDwAMDEyMzQ1Njc4OQBpOABIRUFQVTgAQy5VVEYtOABpMTYAZjE2AGRzdC0+dHlwZSA9PSBHR01MX1RZUEVfRjE2AHNyYzAtPnR5cGUgPT0gR0dNTF9UWVBFX0YxNgBheGlzMiAhPSBheGlzMwBheGlzMSAhPSBheGlzMwBheGlzMCAhPSBheGlzMwBuZTAzID09IG5lMwBuYjIgPD0gbmIzAG5lMyA9PSBuZTEzAG5lMDMgPT0gbmUxMwBuZTMgPT0gbmUwMwBheGlzMSAhPSBheGlzMgBheGlzMCAhPSBheGlzMgBnZ21sX25lbGVtZW50cyhhKSA9PSBuZTAqbmUxKm5lMgBuX2hlYWQgPT0gbmUyAG5lMDIgPT0gbmUyAG5iMSA8PSBuYjIAbmUyID09IG5lYTIAaTMyAGYzMgBnZ21sX2lzX21hdHJpeChhKSAmJiBnZ21sX2lzX3ZlY3RvcihiKSAmJiBiLT50eXBlID09IEdHTUxfVFlQRV9JMzIAZHN0LT50eXBlID09IEdHTUxfVFlQRV9GMzIAc3JjMS0+dHlwZSA9PSBHR01MX1RZUEVfRjMyAG5lMiA9PSBuZTEyAG5lMDIgPT0gbmUxMgBuZTIgPT0gbmUwMgBwMCA9PSBzcmMwLT5uZVswXS8yAGF4aXMwICE9IGF4aXMxAGsxID09IHMxAGdnbWxfbmVsZW1lbnRzKGEpID09IG5lMCpuZTEAbmUwMCA9PSBuZTEAbmIwIDw9IG5iMQBuZTEgPT0gbmVhMQBxOF8xAHE1XzEAcTRfMQBuZTEgPT0gbmUxMQBuZTEgPT0gbmUwMQBuZTAgPT0gbmUwMQB0ID09IDAgfHwgdCA9PSAxAG5vZGUtPnNyY1sxXS0+bmVbM10gPT0gMQBub2RlLT5zcmNbMF0tPm5lWzNdID09IDEAbm9kZS0+c3JjWzFdLT5uZVsyXSA9PSAxAG5lMDAgJSAyID09IDEAbmVjMTEgPT0gMQBuZWIxMSA9PSAxAG5lMDEgPT0gMQBuZTAgPT0gMQBkMCA9PSAxAGswID09IHMwAG5lMSArIG5fcGFzdCA9PSBuZTAAbmUwMCA9PSBuZTAAbl9kaW1zIDw9IG5lMABuZTAgPT0gbmVhMABxOF8wAHE1XzAAcTRfMABuZTEgPT0gbmUxMABuZTAgPT0gbmUwMABjcGxhbi0+bl90aHJlYWRzID4gMABjcGxhbi0+bl90YXNrc1tpXSA+IDAAbl9wYXN0ID49IDAAUCA+PSAwAHBhcmFtcy0+aXRoID09IDAAcmMgPT0gMAAoKHVpbnRwdHJfdCkgKG1lbV9idWZmZXIgKyBvYmpfbmV3LT5vZmZzKSklR0dNTF9NRU1fQUxJR04gPT0gMAAoKHVpbnRwdHJfdCkgKGN0eC0+bWVtX2J1ZmZlcikpJUdHTUxfTUVNX0FMSUdOID09IDAAbl9kaW1zICUgMiA9PSAwAHAxID09IDAAcDAgPT0gMABUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgbWlzbWF0Y2hlZCB7IGFuZCB9LgBlbmNvZGVyLmJsb2Nrcy4AZGVjb2Rlci5ibG9ja3MuAFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIGNoYXJhY3RlciByYW5nZSwgc3VjaCBhcyBbYi1hXSBpbiBtb3N0IGVuY29kaW5ncy4AQW4gZW1wdHkgcmVnZXggaXMgbm90IGFsbG93ZWQgaW4gdGhlIFBPU0lYIGdyYW1tYXIuAFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIHJhbmdlIGluIGEge30gZXhwcmVzc2lvbi4AVGhlIHBhcnNlciBkaWQgbm90IGNvbnN1bWUgdGhlIGVudGlyZSByZWd1bGFyIGV4cHJlc3Npb24uAE9uZSBvZiAqPyt7IHdhcyBub3QgcHJlY2VkZWQgYnkgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24uAFRoZSBjb21wbGV4aXR5IG9mIGFuIGF0dGVtcHRlZCBtYXRjaCBhZ2FpbnN0IGEgcmVndWxhciBleHByZXNzaW9uIGV4Y2VlZGVkIGEgcHJlLXNldCBsZXZlbC4AVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgZXNjYXBlZCBjaGFyYWN0ZXIsIG9yIGEgdHJhaWxpbmcgZXNjYXBlLgBUaGVyZSB3YXMgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBjb252ZXJ0IHRoZSBleHByZXNzaW9uIGludG8gYSBmaW5pdGUgc3RhdGUgbWFjaGluZS4AVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4AVGhlIGV4cHJlc3Npb24gY29udGFpbmVkIGFuIGludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUuAFRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY291bGQgbWF0Y2ggdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgc2VxdWVuY2UuAFRoZSBleHByZXNzaW9uIGNvbnRhaW5lZCBhbiBpbnZhbGlkIGJhY2sgcmVmZXJlbmNlLgBBbiBpbnZhbGlkIHJlZ2V4IGdyYW1tYXIgaGFzIGJlZW4gcmVxdWVzdGVkLgBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgbWlzbWF0Y2hlZCBbIGFuZCBdLgBUaGUgZXhwcmVzc2lvbiBjb250YWluZWQgbWlzbWF0Y2hlZCAoIGFuZCApLgAtLS0AdysAJ3N8J3R8J3JlfCd2ZXwnbXwnbGx8J2R8ID9bWzphbHBoYTpdXSt8ID9bWzpkaWdpdDpdXSt8ID9bXlxzWzphbHBoYTpdWzpkaWdpdDpdXSt8XHMrKD8hXFMpfFxzKwByKwBhKwAlcyAoY29weSkAJXMgKHZpZXcpAG5fZWxlbWVudHMgPT0gZ2dtbF9uZWxlbWVudHMoY2FjaGUudikAZ2dtbF9pc19jb250aWd1b3VzKGRzdCkAb2Zmc2V0ICsgaW0wKm5iMCArIGltMSpuYjEgKyBpbTIqbmIyICsgaW0zKm5iMyA8PSBnZ21sX25ieXRlcyhkc3QpAG9mZnNldCArIChuZTEwID09IDAgPyAwIDogbmUxMC0xKSpuYjAgKyAobmUxMSA9PSAwID8gMCA6IG5lMTEtMSkqbmIxICsgKG5lMTIgPT0gMCA/IDAgOiBuZTEyLTEpKm5iMiArIChuZTEzID09IDAgPyAwIDogbmUxMy0xKSpuYjMgPCBnZ21sX25ieXRlcyhkc3QpAGdnbWxfaXNfc2NhbGFyKGRzdCkAZ2dtbF9pc19jb250aWd1b3VzX2V4Y2VwdF9kaW1fMShkc3QpAGdnbWxfYXJlX3NhbWVfc2hhcGUoc3JjMSwgZHN0KQBnZ21sX2FyZV9zYW1lX3NoYXBlKG9wdDAsIGRzdCkAZ2dtbF9jYW5fcmVwZWF0KHNyYzAsIGRzdCkAZ2dtbF9hcmVfc2FtZV9zaGFwZShzcmMwLCBzcmMxKSAmJiBnZ21sX2FyZV9zYW1lX3NoYXBlKHNyYzAsIGRzdCkAZ2dtbF9jYW5fcmVwZWF0X3Jvd3Moc3JjMSwgc3JjMCkgJiYgZ2dtbF9hcmVfc2FtZV9zaGFwZShzcmMwLCBkc3QpAGRzdC0+bmJbMF0gPT0gc2l6ZW9mKGZsb2F0KQBzcmMwLT5uYlswXSA9PSBzaXplb2YoZmxvYXQpAG5idjAgPT0gc2l6ZW9mKGZsb2F0KQBuYnEwID09IHNpemVvZihmbG9hdCkAbmJrMCA9PSBzaXplb2YoZmxvYXQpAG5iMCA9PSBzaXplb2YoZmxvYXQpAG5iYzEwID09IHNpemVvZihmbG9hdCkAbmIxMCA9PSBzaXplb2YoZmxvYXQpAG5iYjEwID09IHNpemVvZihmbG9hdCkAbmIwMCA9PSBzaXplb2YoZmxvYXQpAHNyYzAtPm5iWzBdID09IHNpemVvZihnZ21sX2ZwMTZfdCkAbmJ2MCA9PSBzaXplb2YoZ2dtbF9mcDE2X3QpAG5icTAgPT0gc2l6ZW9mKGdnbWxfZnAxNl90KQBuYmswID09IHNpemVvZihnZ21sX2ZwMTZfdCkAbmIwID09IHNpemVvZihnZ21sX2ZwMTZfdCkAbmJhMCA9PSBzaXplb2YoZ2dtbF9mcDE2X3QpAG5iYzAwID09IHNpemVvZihnZ21sX2ZwMTZfdCkAbmIwMCA9PSBzaXplb2YoZ2dtbF9mcDE2X3QpAG5iYjAwID09IHNpemVvZihnZ21sX2ZwMTZfdCkAJXMgKGNvcHkgb2YgJXMpAChudWxsKQBjYWNoZS5idWYuc2l6ZSgpID49IDIqbl9lbGVtZW50cypnZ21sX3R5cGVfc2l6ZWYod3R5cGUpAGdnbWxfaXNfcXVhbnRpemVkKHNyYzAtPnR5cGUpAG5iMDAgPT0gZ2dtbF90eXBlX3NpemUodHlwZSkAJXMgKHBlcm11dGVkKQAlcyAodHJhbnNwb3NlZCkAJXMgKHJlc2hhcGVkKQBnZ21sX2lzX2NvbnRpZ3VvdXNfZXhjZXB0X2RpbV8xKGdyYWQpAGdnbWxfYXJlX3NhbWVfc2hhcGUoc3JjMCwgZ3JhZCkAZ2dtbF9pc19tYXRyaXgoYikAZ2dtbF9uZWxlbWVudHMoYSkgPT0gZ2dtbF9uZWxlbWVudHMoYikAZ2dtbF9pc19zY2FsYXIoYikAZ2dtbF9jYW5fbXVsX21hdChhLCBiKQBnZ21sX2Nhbl9yZXBlYXQoYSwgYikAZ2dtbF9hcmVfc2FtZV9zaGFwZShhLCBiKQBnZ21sX2lzX2NvbnRpZ3VvdXMoYSkAIWdnbWxfaXNfdHJhbnNwb3NlZChhKQBnZ21sX2lzX3BhZGRlZF8xZChhKQBnZ21sX2Nhbl9yZXBlYXRfcm93cyhiLCBhKQBnZ21sX2lzX2NvbnRpZ3VvdXMoc3JjMSkAZ2dtbF9pc19zY2FsYXIoc3JjMSkAZ2dtbF9hcmVfc2FtZV9zaGFwZShzcmMwLCBkc3QpICYmIGdnbWxfYXJlX3NhbWVfc2hhcGUoc3JjMCwgc3JjMSkAZ2dtbF9pc19jb250aWd1b3VzKG9wdDApAGdnbWxfaXNfY29udGlndW91cyhkc3QpICYmIGdnbWxfaXNfY29udGlndW91cyhzcmMwKQBnZ21sX25lbGVtZW50cyhkc3QpID09IGdnbWxfbmVsZW1lbnRzKHNyYzApAG9mZnNldCArIChuZTEwID09IDAgPyAwIDogbmUxMC0xKSpuYjAwICsgKG5lMTEgPT0gMCA/IDAgOiBuZTExLTEpKm5iMDEgKyAobmUxMiA9PSAwID8gMCA6IG5lMTItMSkqbmIwMiArIChuZTEzID09IDAgPyAwIDogbmUxMy0xKSpuYjAzIDwgZ2dtbF9uYnl0ZXMoc3JjMCkAZ2dtbF9pc19jb250aWd1b3VzX2V4Y2VwdF9kaW1fMShzcmMwKQBnZ21sX2Nhbl9yZXBlYXQoZHN0LCBzcmMwKQApKSkAb3BlcmF0b3IoKQAoKCgAc3JjMS0+dHlwZSA9PSBHR01MX1RZUEVfRjMyICYmICJvbmx5IGYzMiBzcmMxIHN1cHBvcnRlZCBmb3Igbm93IgBQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkIQAgfCAAQVZYID0gAFZTWCA9IABCTEFTID0gAE9QRU5WSU5PID0gAE5FT04gPSAAQ09SRU1MID0gAFdBU01fU0lNRCA9IABGMTZDID0gAEZQMTZfVkEgPSAAQVJNX0ZNQSA9IABTU1NFMyA9IABBVlgyID0gAEFWWDUxMiA9IAAlczogdGVuc29yICclcycgaGFzIHdyb25nIHNpemUgaW4gbW9kZWwgZmlsZTogZ290ICV6dSwgZXhwZWN0ZWQgJXp1CgAlczogYWRkaW5nICVkIGV4dHJhIHRva2VucwoAJXM6ICAgICAgbWVsIHRpbWUgPSAlOC4yZiBtcwoAJXM6ICAgIHRvdGFsIHRpbWUgPSAlOC4yZiBtcwoAJXM6ICAgICBsb2FkIHRpbWUgPSAlOC4yZiBtcwoAc3lzdGVtX2luZm86IG5fdGhyZWFkcyA9ICVkIC8gJWQgfCAlcwoAV0hJU1BFUl9BU1NFUlQ6ICVzOiVkOiAlcwoAR0dNTF9BU1NFUlQ6ICVzOiVkOiAlcwoAWyVzIC0tPiAlc10gICVzCgAlczogb2Zmc2V0ICVkbXMgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgYXVkaW8KAHVua25vd24gdG9rZW4KACVzOiBmYWlsZWQgdG8gY29tcHV0ZSBsb2cgbWVsIHNwZWN0cm9ncmFtCgAlczogbG9hZGluZyBtb2RlbAoAJXM6IGZhaWxlZCB0byBsb2FkIG1vZGVsCgAlczogICAgIGZhbGxiYWNrcyA9ICUzZCBwIC8gJTNkIGgKACVzOiBXQVJOIG5vIHRlbnNvcnMgbG9hZGVkIGZyb20gbW9kZWwgZmlsZSAtIGFzc3VtaW5nIGVtcHR5IG1vZGVsIGZvciB0ZXN0aW5nCgAlczogZW5jb2Rlcl9iZWdpbl9jYWxsYmFjayByZXR1cm5lZCBmYWxzZSAtIGFib3J0aW5nCgAlczogdGVuc29yICclcycgaGFzIHdyb25nIHNpemUgaW4gbW9kZWwgZmlsZQoAJXM6IHVua25vd24gdGVuc29yICclcycgaW4gbW9kZWwgZmlsZQoAJXM6IG5vIHNpZ25hbCBkYXRhIGF2YWlsYWJsZQoAJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGt2IGNhY2hlCgAlczoga3ZfY2FjaGVfaW5pdCgpIGZhaWxlZCBmb3IgY3Jvc3MtYXR0ZW50aW9uIGNhY2hlCgAlczoga3ZfY2FjaGVfaW5pdCgpIGZhaWxlZCBmb3Igc2VsZi1hdHRlbnRpb24gY2FjaGUKACVzOiBmYWlsZWQgdG8gYXV0by1kZXRlY3QgbGFuZ3VhZ2UKACVzOiBnZ21sX2luaXQoKSBmYWlsZWQKACVzOiBFUlJPUiBub3QgYWxsIHRlbnNvcnMgbG9hZGVkIGZyb20gbW9kZWwgZmlsZSAtIGV4cGVjdGVkICV6dSwgZ290ICVkCgAlczoga3ZfY2FjaGVfcmVpbml0KCkgZmFpbGVkIGZvciBzZWxmLWF0dGVudGlvbiwgZGVjb2RlciAlZAoAJXM6IHVua25vd24gbGFuZ3VhZ2UgaWQgJWQKACVzOiBuX2F1ZGlvX2xheWVyID0gJWQKACVzOiBuX2F1ZGlvX3N0YXRlID0gJWQKACVzOiBuX3RleHRfbGF5ZXIgID0gJWQKACVzOiBuX3RleHRfc3RhdGUgID0gJWQKACVzOiBuX2F1ZGlv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AQmeGAAAAQAAAAEBCbAYAAABAAAAAgEJyBkAAAEAAAAEAcioARAQEBAQEBAQABAQEBAQEBAQABAQEBAQEAAAEBAQEBAQEBAAEBAQEBAAEAAQEBAQEBAAABAQEBAQAAAAEBAQEBAQEBAAEBAQEAAQEAAQEBAQEAAQABAQEBAAABAAEBAQEBAQAAAQEBAQABAAABAQEBAQAAAAEBAQEAAAAAAQEBAQEBAQEAAQEBAAEBAQABAQEBAAEBAAEBAQAAAQEAAQEBAQEAAQABAQEAAQABAAEBAQEAAAEAAQEBAAAAAQABAQEBAQEAAAEBAQABAQAAAQEBAQABAAABAQEAAAEAAAEBAQEBAAAAAQEBAAEAAAABAQEBAAAAAAEBAQAAAAAAAQEBAQEBAQEAAQEAAQEBAQABAQEAAQEBAAEBAAABAQEAAQEBAQABAQABAQABAAEBAAEBAQAAAQEAAQEAAAABAQABAQEBAQABAAEBAAEBAAEAAQEBAAEAAQABAQAAAQABAAEBAQEAAAEAAQEAAQAAAQABAQEAAAABAAEBAAAAAAEAAQEBAQEBAAABAQABAQEAAAEBAQABAQAAAQEAAAEBAAABAQEBAAEAAAEBAAEAAQAAAQEBAAABAAABAQAAAAEAAAEBAQEBAAAAAQEAAQEAAAABAQEAAQAAAAEBAAABAAAAAQEBAQAAAAABAQABAAAAAAEBAQAAAAAAAQEAAAAAAAABAQEBAQEBAQABAAEBAQEBAAEBAAEBAQEAAQAAAQEBAQABAQEAAQEBAAEAAQABAQEAAQEAAAEBAQABAAAAAQEBAAEBAQEAAQEAAQABAQABAQABAQABAAEBAAEAAAEAAQEAAQEBAAABAQABAAEAAAEBAAEBAAAAAQEAAQAAAAABAQABAQEBAQABAAEAAQEBAAEAAQEAAQEAAQABAAABAQABAAEBAQABAAEAAQABAAEAAQABAQAAAQABAAEAAAABAAEAAQEBAQAAAQABAAEBAAABAAEBAAEAAAEAAQAAAQAAAQABAQEAAAABAAEAAQAAAAEAAQEAAAAAAQABAAAAAAABAAEBAQEBAQAAAQABAQEBAAABAQABAQEAAAEAAAEBAQAAAQEBAAEBAAABAAEAAQEAAAEBAAABAQAAAQAAAAEBAAABAQEBAAEAAAEAAQEAAQAAAQEAAQABAAABAAABAAEAAAEBAQAAAQAAAQABAAABAAABAQAAAAEAAAEAAAAAAQAAAQEBAQEAAAABAAEBAQAAAAEBAAEBAAAAAQAAAQEAAAABAQEAAQAAAAEAAQABAAAAAQEAAAEAAAABAAAAAQAAAAEBAQEAAAAAAQABAQAAAAABAQABAAAAAAEAAAEAAAAAAQEBAAAAAAABAAEAAAAAAAEBAAAAAAAAAQAAAAAAAAABAQEBAQEBAQAAAQEBAQEBAAEAAQEBAQEAAAABAQEBAQABAQABAQEBAAABAAEBAQEAAQAAAQEBAQAAAAABAQEBAAEBAQABAQEAAAEBAAEBAQABAAEAAQEBAAAAAQABAQEAAQEAAAEBAQAAAQAAAQEBAAEAAAABAQEAAAAAAAEBAQABAQEBAAEBAAABAQEAAQEAAQABAQABAQAAAAEBAAEBAAEBAAEAAQEAAAEAAQABAQABAAABAAEBAAAAAAEAAQEAAQEBAAABAQAAAQEAAAEBAAEAAQAAAQEAAAABAAABAQABAQAAAAEBAAABAAAAAQEAAQAAAAABAQAAAAAAAAEBAAEBAQEBAAEAAAEBAQEAAQABAAEBAQABAAAAAQEBAAEAAQEAAQEAAQAAAQABAQABAAEAAAEBAAEAAAAAAQEAAQABAQEAAQABAAABAQABAAEAAQABAAEAAQAAAAEAAQABAAEBAAABAAEAAAEAAAEAAQABAAAAAQABAAAAAAABAAEAAQEBAQAAAQAAAQEBAAABAAEAAQEAAAEAAAABAQAAAQABAQABAAABAAABAAEAAAEAAQAAAQAAAQAAAAABAAABAAEBAQAAAAEAAAEBAAAAAQABAAEAAAABAAAAAQAAAAEAAQEAAAAAAQAAAQAAAAABAAEAAAAAAAEAAAAAAAAAAQABAQEBAQEAAAABAQEBAQAAAQABAQEBAAAAAAEBAQEAAAEBAAEBAQAAAAEAAQEBAAABAAABAQEAAAAAAAEBAQAAAQEBAAEBAAAAAQEAAQEAAAEAAQABAQAAAAABAAEBAAABAQAAAQEAAAABAAABAQAAAQAAAAEBAAAAAAAAAQEAAAEBAQEAAQAAAAEBAQABAAABAAEBAAEAAAAAAQEAAQAAAQEAAQABAAAAAQABAAEAAAEAAAEAAQAAAAAAAQABAAABAQEAAAEAAAABAQAAAQAAAQABAAABAAAAAAEAAAEAAAEBAAAAAQAAAAEAAAABAAABAAAAAAEAAAAAAAAAAQAAAQEBAQEAAAAAAQEBAQAAAAEAAQEBAAAAAAABAQEAAAABAQABAQAAAAABAAEBAAAAAQAAAQEAAAAAAAABAQAAAAEBAQABAAAAAAEBAAEAAAABAAEAAQAAAAAAAQABAAAAAQEAAAEAAAAAAQAAAQAAAAEAAAABAAAAAAAAAAEAAAABAQEBAAAAAAABAQEAAAAAAQABAQAAAAAAAAEBAAAAAAEBAAEAAAAAAAEAAQAAAAABAAABAAAAAAAAAAEAAAAAAQEBAAAAAAAAAQEAAAAAAAEAAQAAAAAAAAABAAAAAAABAQAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAQAAAAAAAAEBAAAAAAAAAAABAAAAAAABAAEAAAAAAAABAQAAAAAAAQEBAAAAAAAAAAABAAAAAAEAAAEAAAAAAAEAAQAAAAABAQABAAAAAAAAAQEAAAAAAQABAQAAAAAAAQEBAAAAAAEBAQEAAAAAAAAAAAEAAAABAAAAAQAAAAABAAABAAAAAQEAAAEAAAAAAAEAAQAAAAEAAQABAAAAAAEBAAEAAAABAQEAAQAAAAAAAAEBAAAAAQAAAQEAAAAAAQABAQAAAAEBAAEBAAAAAAABAQEAAAABAAEBAQAAAAABAQEBAAAAAQEBAQEAAAAAAAAAAAEAAAEAAAAAAQAAAAEAAAABAAABAQAAAAEAAAAAAQAAAQAAAQABAAABAAAAAQEAAAEAAAEBAQAAAQAAAAAAAQABAAABAAABAAEAAAABAAEAAQAAAQEAAQABAAAAAAEBAAEAAAEAAQEAAQAAAAEBAQABAAABAQEBAAEAAAAAAAABAQAAAQAAAAEBAAAAAQAAAQEAAAEBAAABAQAAAAABAAEBAAABAAEAAQEAAAABAQABAQAAAQEBAAEBAAAAAAABAQEAAAEAAAEBAQAAAAEAAQEBAAABAQABAQEAAAAAAQEBAQAAAQABAQEBAAAAAQEBAQEAAAEBAQEBAQAAAAAAAAAAAQABAAAAAAABAAABAAAAAAEAAQEAAAAAAQAAAAEAAAABAAEAAQAAAAEAAAEBAAAAAQABAQEAAAABAAAAAAEAAAEAAQAAAQAAAQAAAQABAAABAAEBAAEAAAEAAAABAQAAAQABAAEBAAABAAABAQEAAAEAAQEBAQAAAQAAAAAAAQABAAEAAAABAAEAAAEAAAEAAQABAQAAAQABAAAAAQABAAEAAQABAAEAAQAAAQEAAQABAAEBAQABAAEAAAAAAQEAAQABAAABAQABAAABAAEBAAEAAQEAAQEAAQAAAAEBAQABAAEAAQEBAAEAAAEBAQEAAQABAQEBAQABAAAAAAAAAQEAAQAAAAABAQAAAQAAAAEBAAEBAAAAAQEAAAABAAABAQABAAEAAAEBAAABAQAAAQEAAQEBAAABAQAAAAABAAEBAAEAAAEAAQEAAAEAAQABAQABAQABAAEBAAAAAQEAAQEAAQABAQABAQAAAQEBAAEBAAEBAQEAAQEAAAAAAAEBAQABAAAAAQEBAAABAAABAQEAAQEAAAEBAQAAAAEAAQEBAAEAAQABAQEAAAEBAAEBAQABAQEAAQEBAAAAAAEBAQEAAQAAAQEBAQAAAQABAQEBAAEBAAEBAQEAAAABAQEBAQABAAEBAQEBAAABAQEBAQEAAQEBAQEBAQAAAAAAAAAAAQEAAAAAAAABAAEAAAAAAAEBAQAAAAAAAQAAAQAAAAABAQABAAAAAAEAAQEAAAAAAQEBAQAAAAABAAAAAQAAAAEBAAABAAAAAQABAAEAAAABAQEAAQAAAAEAAAEBAAAAAQEAAQEAAAABAAEBAQAAAAEBAQEBAAAAAQAAAAABAAABAQAAAAEAAAEAAQAAAQAAAQEBAAABAAABAAABAAEAAAEBAAEAAQAAAQABAQABAAABAQEBAAEAAAEAAAABAQAAAQEAAAEBAAABAAEAAQEAAAEBAQABAQAAAQAAAQEBAAABAQABAQEAAAEAAQEBAQAAAQEBAQEBAAABAAAAAAABAAEBAAAAAAEAAQABAAAAAQABAQEAAAABAAEAAAEAAAEAAQEAAQAAAQABAAEBAAABAAEBAQEAAAEAAQAAAAEAAQABAQAAAQABAAEAAQABAAEAAQEBAAEAAQABAAABAQABAAEBAAEBAAEAAQABAQEAAQABAQEBAQABAAEAAAAAAQEAAQEAAAABAQABAAEAAAEBAAEBAQAAAQEAAQAAAQABAQABAQABAAEBAAEAAQEAAQEAAQEBAQABAQABAAAAAQEBAAEBAAABAQEAAQABAAEBAQABAQEAAQEBAAEAAAEBAQEAAQEAAQEBAQABAAEBAQEBAAEBAQEBAQEAAQAAAAAAAAEBAQAAAAAAAQEAAQAAAAABAQEBAAAAAAEBAAABAAAAAQEBAAEAAAABAQABAQAAAAEBAQEBAAAAAQEAAAABAAABAQEAAAEAAAEBAAEAAQAAAQEBAQABAAABAQAAAQEAAAEBAQABAQAAAQEAAQEBAAABAQEBAQEAAAEBAAAAAAEAAQEBAAAAAQABAQABAAABAAEBAQEAAAEAAQEAAAEAAQABAQEAAQABAAEBAAEBAAEAAQEBAQEAAQABAQAAAAEBAAEBAQAAAQEAAQEAAQABAQABAQEBAAEBAAEBAAABAQEAAQEBAAEBAQABAQABAQEBAAEBAQEBAQEAAQEAAAAAAAEBAQEAAAAAAQEBAAEAAAABAQEBAQAAAAEBAQAAAQAAAQEBAQABAAABAQEAAQEAAAEBAQEBAQAAAQEBAAAAAQABAQEBAAABAAEBAQABAAEAAQEBAQEAAQABAQEAAAEBAAEBAQEAAQEAAQEBAAEBAQABAQEBAQEBAAEBAQAAAAABAQEBAQAAAAEBAQEAAQAAAQEBAQEBAAABAQEBAAABAAEBAQEBAAEAAQEBAQABAQABAQEBAQEBAAEBAQEAAAABAQEBAQEAAAEBAQEBAAEAAQEBAQEBAQABAQEBAQAAAQEBAQEBAQABAQEBAQEAAQEBAQEBAQEBAQEBAQEBABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAAAAAAAAAAAAAAAAAIAAAABgAAAAcAAAAKAAAACwAAAAwAAAANAAAADgAAAAAAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAACASAAAOAAAADkAAAA6AAAAOwAAAE5TdDNfXzIxMV9fZW5kX3N0YXRlSWNFRQBOU3QzX18yNl9fbm9kZUljRUUA0MsAAGVIAAD4ywAATEgAAHhIAAAAAAAAMEkAADwAAAA9AAAAPgAAAD8AAABAAAAATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE5TXzEzX19lbXB0eV9zdGF0ZUljRUVOU18xMHNoYXJlZF9wdHJJUzJfRTI3X19zaGFyZWRfcHRyX2RlZmF1bHRfZGVsZXRlSVMyX1MyX0VFTlNfOWFsbG9jYXRvcklTMl9FRUVFAAAAAPjLAACoSAAAeMIAAE5TdDNfXzIxMHNoYXJlZF9wdHJJTlNfMTNfX2VtcHR5X3N0YXRlSWNFRUUyN19fc2hhcmVkX3B0cl9kZWZhdWx0X2RlbGV0ZUlTMl9TMl9FRQAAAAAAAAAYSgAAQQAAAEIAAABDAAAAOwAAAE5TdDNfXzIxM19fZW1wdHlfc3RhdGVJY0VFAE5TdDNfXzIxNl9fb3duc19vbmVfc3RhdGVJY0VFAE5TdDNfXzIxNV9faGFzX29uZV9zdGF0ZUljRUUAAAD4ywAA4UkAAHhIAAD4ywAAw0kAAABKAAD4ywAAqEkAAAxKAAAAAAAADEoAAEEAAABEAAAARQAAADsAAAAAAAAAeEoAAEEAAABGAAAARwAAADsAAABOU3QzX18yMjBfX2xfYW5jaG9yX211bHRpbGluZUljRUUAAAD4ywAAVEoAAAxKAAAAAAAAwEoAAEEAAABIAAAASQAAADsAAABOU3QzX18yMjBfX3JfYW5jaG9yX211bHRpbGluZUljRUUAAAD4ywAAnEoAAAxKAAAAAAAAGEsAAEoAAABLAAAATAAAADsAAABOU3QzX18yMTVfX3dvcmRfYm91bmRhcnlJY05TXzEycmVnZXhfdHJhaXRzSWNFRUVFAAAA+MsAAORKAAAMSgAAAAAAAGxLAABNAAAATgAAAE8AAAA7AAAATlN0M19fMjExX19sb29rYWhlYWRJY05TXzEycmVnZXhfdHJhaXRzSWNFRUVFAAAA+MsAADxLAAAMSgAAAAAAALhLAABBAAAAUAAAAFEAAAA7AAAATlN0M19fMjIzX19tYXRjaF9hbnlfYnV0X25ld2xpbmVJY0VFAAAAAPjLAACQSwAADEoAAAAAAAAUTAAAUgAAAFMAAABUAAAAOwAAAE5TdDNfXzIxOF9fbWF0Y2hfY2hhcl9pY2FzZUljTlNfMTJyZWdleF90cmFpdHNJY0VFRUUAAAAA+MsAANxLAAAMSgAAAAAAAHBMAABVAAAAVgAAAFcAAAA7AAAATlN0M19fMjIwX19tYXRjaF9jaGFyX2NvbGxhdGVJY05TXzEycmVnZXhfdHJhaXRzSWNFRUVFAAD4ywAAOEwAAAxKAAAAAAAAsEwAAEEAAABYAAAAWQAAADsAAABOU3QzX18yMTJfX21hdGNoX2NoYXJJY0VFAAAA+MsAAJRMAAAMSgAAAAAAAAhNAABaAAAAWwAAAFwAAAA7AAAATlN0M19fMjE2X19iYWNrX3JlZl9pY2FzZUljTlNfMTJyZWdleF90cmFpdHNJY0VFRUUAAPjLAADUTAAADEoAAAAAAABkTQAAXQAAAF4AAABfAAAAOwAAAE5TdDNfXzIxOF9fYmFja19yZWZfY29sbGF0ZUljTlNfMTJyZWdleF90cmFpdHNJY0VFRUUAAAAA+MsAACxNAAAMSgAAAAAAAKBNAABBAAAAYAAAAGEAAAA7AAAATlN0M19fMjEwX19iYWNrX3JlZkljRUUA+MsAAIhNAAAMSgAAAAAAAPxNAABiAAAAYwAAAGQAAAA7AAAATlN0M19fMjIwX19icmFja2V0X2V4cHJlc3Npb25JY05TXzEycmVnZXhfdHJhaXRzSWNFRUVFAAD4ywAAxE0AAAxKAAAAAAAATE4AAEEAAABlAAAAZgAAADsAAABOU3QzX18yMjhfX2JlZ2luX21hcmtlZF9zdWJleHByZXNzaW9uSWNFRQAAAPjLAAAgTgAADEoAAAAAAACYTgAAQQAAAGcAAABoAAAAOwAAAE5TdDNfXzIyNl9fZW5kX21hcmtlZF9zdWJleHByZXNzaW9uSWNFRQD4ywAAcE4AAAxKAAAAAAAA/E4AAGkAAABqAAAAawAAAGwAAABOU3QzX18yNl9fbG9vcEljRUUATlN0M19fMjE3X19vd25zX3R3b19zdGF0ZXNJY0VFAAAA+MsAAM9OAAAMSgAA+MsAALxOAADwTgAAAAAAAPBOAABpAAAAbQAAAEUAAAA7AAAAAAAAAFhPAAA4AAAAbgAAAG8AAAA7AAAATlN0M19fMjE3X19yZXBlYXRfb25lX2xvb3BJY0VFAAD4ywAAOE8AAABKAAAAAAAAmE8AAGkAAABwAAAAcQAAAHIAAABOU3QzX18yMTFfX2FsdGVybmF0ZUljRUUAAAAA+MsAAHxPAADwTgAAAAAAAOBPAAA4AAAAcwAAAHQAAAA7AAAATlN0M19fMjIxX19lbXB0eV9ub25fb3duX3N0YXRlSWNFRQAA+MsAALxPAAAASgAAAAAAACBQAABBAAAAdQAAAHYAAAA7AAAATlN0M19fMjExX19tYXRjaF9hbnlJY0VFAAAAAPjLAAAEUAAADEoAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAADQywAALFAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAADQywAAdFAAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0lEc05TXzExY2hhcl90cmFpdHNJRHNFRU5TXzlhbGxvY2F0b3JJRHNFRUVFAAAA0MsAALxQAABOU3QzX18yMTJiYXNpY19zdHJpbmdJRGlOU18xMWNoYXJfdHJhaXRzSURpRUVOU185YWxsb2NhdG9ySURpRUVFRQAAANDLAAAIUQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAADQywAAVFEAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQAA0MsAAHxRAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUAANDLAACkUQAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAADQywAAzFEAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXRFRQAA0MsAAPRRAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lpRUUAANDLAAAcUgAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAADQywAARFIAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWxFRQAA0MsAAGxSAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ltRUUAANDLAACUUgAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJeEVFAADQywAAvFIAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXlFRQAA0MsAAORSAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lmRUUAANDLAAAMUwAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZEVFAADQywAANFMAAAAAAAADAAAABAAAAAQAAAAGAAAAg/miAERObgD8KRUA0VcnAN009QBi28AAPJmVAEGQQwBjUf4Au96rALdhxQA6biQA0k1CAEkG4AAJ6i4AHJLRAOsd/gApsRwA6D6n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lP///5T////MlwAArQAAAK4AAABIlwAAgJcAAJSXAABclwAAbAAAAAAAAAAklwAAnQAAAJ4AAACU////lP///ySXAACfAAAAoAAAAE5TdDNfXzIxNGJhc2ljX2lmc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRUVFAPjLAACclwAAJJcAAE5TdDNfXzIxM2Jhc2ljX2ZpbGVidWZJY05TXzExY2hhcl90cmFpdHNJY0VFRUUAAPjLAADYlwAA7JYAAAAAAAA4mAAArwAAALAAAABOU3QzX18yOGlvc19iYXNlRQAAANDLAAAkmAAA0XSeAFedvSqAcFIP//8+JwoAAABkAAAA6AMAABAnAACghgEAQEIPAICWmAAA4fUFGAAAADUAAABxAAAAa////877//+Sv///AAAAAAAAAAD/////////////////////////////////////////////////////////////////AAECAwQFBgcICf////////8KCwwNDg8QERITFBUWFxgZGhscHR4fICEiI////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wABAgQHAwYFAAAAAAAAAAIAAMADAADABAAAwAUAAMAGAADABwAAwAgAAMAJAADACgAAwAsAAMAMAADADQAAwA4AAMAPAADAEAAAwBEAAMASAADAEwAAwBQAAMAVAADAFgAAwBcAAMAYAADAGQAAwBoAAMAbAADAHAAAwB0AAMAeAADAHwAAwAAAALMBAADDAgAAwwMAAMMEAADDBQAAwwYAAMMHAADDCAAAwwkAAMMKAADDCwAAwwwAAMMNAADTDgAAww8AAMMAAAy7AQAMwwIADMMDAAzDBAAM2wAAAADeEgSVAAAAAP///////////////3CaAAAUAAAAQy5VVEYtOAEChJoBSkxDX0NUWVBFAAAAAExDX05VTUVSSUMAAExDX1RJTUUAAAAAAExDX0NPTExBVEUAAExDX01PTkVUQVJZ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AACWAQAATlN0M19fMjEwbW9uZXlwdW5jdEl3TGIwRUVFAFTMAABUugAAAAAAAAIAAAAkrgAAAgAAAIC5AAACAAAAAAAAAOS6AADoAAAAlwEAAMYAAACYAQAAmQEAAJoBAACbAQAAnAEAAJ0BAACeAQAAnwEAAKABAABOU3QzX18yMTBtb25leXB1bmN0SXdMYjFFRUUAVMwAAMi6AAAAAAAAAgAAACSuAAACAAAAgLkAAAIAAAAAAAAAiLsAAOgAAAChAQAAxgAAAKIBAACjAQAATlN0M19fMjltb25leV9nZXRJY05TXzE5aXN0cmVhbWJ1Zl9pdGVyYXRvckljTlNfMTFjaGFyX3RyYWl0c0ljRUVFRUVFAE5TdDNfXzIxMV9fbW9uZXlfZ2V0SWNFRQAA0MsAAGa7AABUzAAAILsAAAAAAAACAAAAJK4AAAIAAACAuwAAAAAAAAAAAAAsvAAA6AAAAKQBAADGAAAApQEAAKYBAABOU3QzX18yOW1vbmV5X2dldEl3TlNfMTlpc3RyZWFtYnVmX2l0ZXJhdG9ySXdOU18xMWNoYXJfdHJhaXRzSXdFRUVFRUUATlN0M19fMjExX19tb25leV9nZXRJd0VFAADQywAACrwAAFTMAADEuwAAAAAAAAIAAAAkrgAAAgAAACS8AAAAAAAAAAAAANC8AADoAAAApwEAAMYAAACoAQAAqQEAAE5TdDNfXzI5bW9uZXlfcHV0SWNOU18xOW9zdHJlYW1idWZfaXRlcmF0b3JJY05TXzExY2hhcl90cmFpdHNJY0VFRUVFRQBOU3QzX18yMTFfX21vbmV5X3B1dEljRUUAANDLAACuvAAAVMwAAGi8AAAAAAAAAgAAACSuAAACAAAAyLwAAAAAAAAAAAAAdL0AAOgAAACqAQAAxgAAAKsBAACsAQAATlN0M19fMjltb25leV9wdXRJd05TXzE5b3N0cmVhbWJ1Zl9pdGVyYXRvckl3TlNfMTFjaGFyX3RyYWl0c0l3RUVFRUVFAE5TdDNfXzIxMV9fbW9uZXlfcHV0SXdFRQAA0MsAAFK9AABUzAAADL0AAAAAAAACAAAAJK4AAAIAAABsvQAAAAAAAAAAAADsvQAA6AAAAK0BAADGAAAArgEAAK8BAACwAQAATlN0M19fMjhtZXNzYWdlc0ljRUUATlN0M19fMjEz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6AMCAAAA//////8AAAAB/wH//////////////wAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAB/wH//////wABIAAEAIAAAAj//wH/Af////////8B/wb/B/8I/wn//////7wCvAIBAP//AQABAP//AAD//////////wAAAAAAAAAAAAAAAAAAAAAUAXj//wEACv///////////wH/Af8AAAAAAAAB/wH/Af8AAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAH/Af8BAAAAAQAAAAH//////wAAAAAB////AAAAAP////////////8oAAr//////wEACv////8A//////////8BvggB/wH///8BAP//////////////////Cv//////DP8N/04xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAAD4ywAABsoAABzOAABOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAAAD4ywAANMoAACjKAABOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UAAAD4ywAAZMoAACjKAABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQD4ywAAlMoAAIjKAAAAAAAACMsAALsBAAC8AQAAvQEAAL4BAAC/AQAATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAPjLAADgygAAKMoAAHYAAADMygAAFMsAAGIAAADMygAAIMsAAGMAAADMygAALMsAAGgAAADMygAAOMsAAGEAAADMygAARMsAAHMAAADMygAAUMsAAHQAAADMygAAXMsAAGkAAADMygAAaMsAAGoAAADMygAAdMsAAGwAAADMygAAgMsAAG0AAADMygAAjMsAAHgAAADMygAAmMsAAHkAAADMygAApMsAAGYAAADMygAAsMsAAGQAAADMygAAvMsAAAAAAABYygAAuwEAAMABAAC9AQAAvgEAAMEBAADCAQAAwwEAAMQBAAAAAAAAQMwAALsBAADFAQAAvQEAAL4BAADBAQAAxgEAAMcBAADIAQAATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAAAAAPjLAAAYzAAAWMoAAAAAAACczAAAuwEAAMkBAAC9AQAAvgEAAMEBAADKAQAAywEAAMwBAABOMTBfX2N4eGFiaXYxMjFfX3ZtaV9jbGFzc190eXBlX2luZm9FAAAA+MsAAHTMAABYygAAAAAAAAzNAAAIAAAAzQEAAM4BAAAAAAAANM0AAAgAAADPAQAA0AEAAAAAAAD0zAAACAAAANEBAADSAQAAU3Q5ZXhjZXB0aW9uAAAAANDLAADkzAAAU3Q5YmFkX2FsbG9jAAAAAPjLAAD8zAAA9MwAAFN0MjBiYWRfYXJyYXlfbmV3X2xlbmd0aAAAAAD4ywAAGM0AAAzNAAAAAAAAeM0AAAcAAADTAQAA1AEAAAAAAAAAzgAA1QEAANYBAAC4AQAAU3QxMWxvZ2ljX2Vycm9yAPjLAABozQAA9MwAAAAAAACszQAABwAAANcBAADUAQAAU3QxMmxlbmd0aF9lcnJvcgAAAAD4ywAAmM0AAHjNAAAAAAAA4M0AAAcAAADYAQAA1AEAAFN0MTJvdXRfb2ZfcmFuZ2UAAAAA+MsAAMzNAAB4zQAAU3QxM3J1bnRpbWVfZXJyb3IAAAD4ywAA7M0AAPTMAABTdDl0eXBlX2luZm8AAAAA0MsAAAzOAAABATcBZCzOAAAszgAAAAABAAACAAAFAAAAAAAAAAAAAAB7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5AAAAeAAAABAwDQAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAA//////////8BWXDOAAAAAAAABQAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAIoAAAAYMA0AAAQAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAP////8KAQwIzwAA8D4OALoBAAA=";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(instance=>instance).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"a":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;wasmExports=exports;registerTLSInit(wasmExports["_"]);wasmTable=wasmExports["X"];addOnInit(wasmExports["W"]);wasmModule=module;removeRunDependency("wasm-instantiate");return exports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"],result["module"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var terminateWorker=worker=>{worker.terminate();worker.onmessage=e=>{}};var killThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];delete PThread.pthreads[pthread_ptr];terminateWorker(worker);__emscripten_thread_free_data(pthread_ptr);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0};var cancelThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];worker.postMessage({"cmd":"cancel"})};var cleanupThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];assert(worker);PThread.returnWorkerToPool(worker)};var spawnThread=threadParams=>{var worker=PThread.getNewWorker();if(!worker){return 6}PThread.runningWorkers.push(worker);PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={"cmd":"run","start_routine":threadParams.startRoutine,"arg":threadParams.arg,"pthread_ptr":threadParams.pthread_ptr};if(ENVIRONMENT_IS_NODE){worker.unref()}worker.postMessage(msg,threadParams.transferList);return 0};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>(view.set(crypto.getRandomValues(new Uint8Array(view.byteLength))),view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof SharedArrayBuffer?heapOrArray.slice(idx,endPtr):heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){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(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url,arrayBuffer=>{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={"r":0,"r+":2,"w":512|64|1,"w+":512|64|2,"a":1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get(){return this.node},set(val){this.node=val}},isRead:{get(){return(this.flags&2097155)!==1}},isWrite:{get(){return(this.flags&2097155)!==0}},isAppend:{get(){return this.flags&1024}},flags:{get(){return this.shared.flags},set(val){this.shared.flags=val}},position:{get(){return this.shared.position},set(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;i0,ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.initialized=false;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,GROWABLE_HEAP_I8(),ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):"";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}GROWABLE_HEAP_I32()[buf>>2]=stat.dev;GROWABLE_HEAP_I32()[buf+4>>2]=stat.mode;GROWABLE_HEAP_U32()[buf+8>>2]=stat.nlink;GROWABLE_HEAP_I32()[buf+12>>2]=stat.uid;GROWABLE_HEAP_I32()[buf+16>>2]=stat.gid;GROWABLE_HEAP_I32()[buf+20>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[buf+24>>2]=tempI64[0],GROWABLE_HEAP_I32()[buf+28>>2]=tempI64[1];GROWABLE_HEAP_I32()[buf+32>>2]=4096;GROWABLE_HEAP_I32()[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[buf+40>>2]=tempI64[0],GROWABLE_HEAP_I32()[buf+44>>2]=tempI64[1];GROWABLE_HEAP_U32()[buf+48>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[buf+56>>2]=tempI64[0],GROWABLE_HEAP_I32()[buf+60>>2]=tempI64[1];GROWABLE_HEAP_U32()[buf+64>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[buf+72>>2]=tempI64[0],GROWABLE_HEAP_I32()[buf+76>>2]=tempI64[1];GROWABLE_HEAP_U32()[buf+80>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[buf+88>>2]=tempI64[0],GROWABLE_HEAP_I32()[buf+92>>2]=tempI64[1];return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=GROWABLE_HEAP_U8().slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get(){var ret=GROWABLE_HEAP_I32()[SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream}};function _proc_exit(code){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(0,1,code);EXITSTATUS=code;if(!keepRuntimeAlive()){PThread.terminateAllThreads();if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}var exitJS=(status,implicit)=>{EXITSTATUS=status;if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw"unwind"}_proc_exit(status)};var _exit=exitJS;var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init(){if(ENVIRONMENT_IS_PTHREAD){PThread.initWorker()}else{PThread.initMainThread()}},initMainThread(){var pthreadPoolSize=8;while(pthreadPoolSize--){PThread.allocateUnusedWorker()}addOnPreRun(()=>{addRunDependency("loading-workers");PThread.loadWasmModuleToAllWorkers(()=>removeRunDependency("loading-workers"))})},initWorker(){noExitRuntime=false},setExitStatus:status=>{EXITSTATUS=status},terminateAllThreads__deps:["$terminateWorker"],terminateAllThreads:()=>{for(var worker of PThread.runningWorkers){terminateWorker(worker)}for(var worker of PThread.unusedWorkers){terminateWorker(worker)}PThread.unusedWorkers=[];PThread.runningWorkers=[];PThread.pthreads=[]},returnWorkerToPool:worker=>{var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0;__emscripten_thread_free_data(pthread_ptr)},receiveObjectTransfer(data){},threadInitTLS(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:worker=>new Promise(onFinishedLoading=>{worker.onmessage=e=>{var d=e["data"];var cmd=d["cmd"];if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var targetWorker=PThread.pthreads[d["targetThread"]];if(targetWorker){targetWorker.postMessage(d,d["transferList"])}else{err(`Internal error! Worker sent a message "${cmd}" to target pthread ${d["targetThread"]}, but that thread no longer exists!`)}return}if(cmd==="checkMailbox"){checkMailbox()}else if(cmd==="spawnThread"){spawnThread(d)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;if(ENVIRONMENT_IS_NODE&&!worker.pthread_ptr){worker.unref()}onFinishedLoading(worker)}else if(cmd==="alert"){alert(`Thread ${d["threadId"]}: ${d["text"]}`)}else if(d.target==="setimmediate"){worker.postMessage(d)}else if(cmd==="callHandler"){Module[d["handler"]](...d["args"])}else if(cmd){err(`worker sent an unknown command ${cmd}`)}};worker.onerror=e=>{var message="worker sent an error!";err(`${message} ${e.filename}:${e.lineno}: ${e.message}`);throw e};if(ENVIRONMENT_IS_NODE){worker.on("message",data=>worker.onmessage({data:data}));worker.on("error",e=>worker.onerror(e))}var handlers=[];var knownHandlers=["onExit","onAbort","print","printErr"];for(var handler of knownHandlers){if(Module.hasOwnProperty(handler)){handlers.push(handler)}}worker.postMessage({"cmd":"load","handlers":handlers,"urlOrBlob":Module["mainScriptUrlOrBlob"]||_scriptDir,"wasmMemory":wasmMemory,"wasmModule":wasmModule})}),loadWasmModuleToAllWorkers(onMaybeReady){if(ENVIRONMENT_IS_PTHREAD){return onMaybeReady()}let pthreadPoolReady=Promise.all(PThread.unusedWorkers.map(PThread.loadWasmModuleToWorker));pthreadPoolReady.then(onMaybeReady)},allocateUnusedWorker(){var worker;var pthreadMainJs=locateFile("libwhisper.worker.js");worker=new Worker(pthreadMainJs);PThread.unusedWorkers.push(worker)},getNewWorker(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()}};Module["PThread"]=PThread;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var establishStackSpace=()=>{var pthread_ptr=_pthread_self();var stackHigh=GROWABLE_HEAP_I32()[pthread_ptr+52>>2];var stackSize=GROWABLE_HEAP_I32()[pthread_ptr+56>>2];var stackLow=stackHigh-stackSize;_emscripten_stack_set_limits(stackHigh,stackLow);stackRestore(stackHigh)};Module["establishStackSpace"]=establishStackSpace;function exitOnMainThread(returnCode){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(1,0,returnCode);_exit(returnCode)}var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var invokeEntryPoint=(ptr,arg)=>{var result=getWasmTableEntry(ptr)(arg);function finish(result){if(keepRuntimeAlive()){PThread.setExitStatus(result)}else{__emscripten_thread_exit(result)}}finish(result)};Module["invokeEntryPoint"]=invokeEntryPoint;var registerTLSInit=tlsInitFunc=>{PThread.tlsInitFunctions.push(tlsInitFunc)};function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){GROWABLE_HEAP_U32()[this.ptr+4>>2]=type};this.get_type=function(){return GROWABLE_HEAP_U32()[this.ptr+4>>2]};this.set_destructor=function(destructor){GROWABLE_HEAP_U32()[this.ptr+8>>2]=destructor};this.get_destructor=function(){return GROWABLE_HEAP_U32()[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;GROWABLE_HEAP_I8()[this.ptr+12>>0]=caught};this.get_caught=function(){return GROWABLE_HEAP_I8()[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;GROWABLE_HEAP_I8()[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return GROWABLE_HEAP_I8()[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){GROWABLE_HEAP_U32()[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return GROWABLE_HEAP_U32()[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return GROWABLE_HEAP_U32()[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var ___emscripten_init_main_thread_js=tb=>{__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,!ENVIRONMENT_IS_WEB,65536,false);PThread.threadInitTLS()};var ___emscripten_thread_cleanup=thread=>{if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({"cmd":"cleanupThread","thread":thread})};function pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(2,1,pthread_ptr,attr,startRoutine,arg);return ___pthread_create_js(pthread_ptr,attr,startRoutine,arg)}var ___pthread_create_js=(pthread_ptr,attr,startRoutine,arg)=>{if(typeof SharedArrayBuffer=="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 6}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg)}if(error)return error;var threadParams={startRoutine:startRoutine,pthread_ptr:pthread_ptr,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)};var setErrNo=value=>{GROWABLE_HEAP_I32()[___errno_location()>>2]=value;return value};function ___syscall_fcntl64(fd,cmd,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(3,1,fd,cmd,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.getp();var offset=0;GROWABLE_HEAP_I16()[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(4,1,fd,op,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=SYSCALLS.getp();GROWABLE_HEAP_I32()[argp>>2]=termios.c_iflag||0;GROWABLE_HEAP_I32()[argp+4>>2]=termios.c_oflag||0;GROWABLE_HEAP_I32()[argp+8>>2]=termios.c_cflag||0;GROWABLE_HEAP_I32()[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){GROWABLE_HEAP_I8()[argp+i+17>>0]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=SYSCALLS.getp();var c_iflag=GROWABLE_HEAP_I32()[argp>>2];var c_oflag=GROWABLE_HEAP_I32()[argp+4>>2];var c_cflag=GROWABLE_HEAP_I32()[argp+8>>2];var c_lflag=GROWABLE_HEAP_I32()[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(GROWABLE_HEAP_I8()[argp+i+17>>0])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag:c_iflag,c_oflag:c_oflag,c_cflag:c_cflag,c_lflag:c_lflag,c_cc:c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.getp();GROWABLE_HEAP_I32()[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.getp();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=SYSCALLS.getp();GROWABLE_HEAP_I16()[argp>>1]=winsize[0];GROWABLE_HEAP_I16()[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(5,1,dirfd,path,flags,varargs);SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __embind_register_bigint=(primitiveType,name,size,minRange,maxRange)=>{};var embind_init_charCodes=()=>{var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes};var embind_charCodes=undefined;var readLatin1String=ptr=>{var ret="";var c=ptr;while(GROWABLE_HEAP_U8()[c]){ret+=embind_charCodes[GROWABLE_HEAP_U8()[c++]]}return ret};var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var BindingError=undefined;var throwBindingError=message=>{throw new BindingError(message)};var InternalError=undefined;var throwInternalError=message=>{throw new InternalError(message)};var whenDependentTypesAreResolved=(myTypes,dependentTypes,getTypeConverters)=>{myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i{if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt]}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[]}awaitingDependencies[dt].push(()=>{typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters)}})}});if(0===unregisteredTypes.length){onComplete(typeConverters)}};function sharedRegisterType(rawType,registeredInstance,options={}){var name=registeredInstance.name;if(!rawType){throwBindingError(`type "${name}" must have a positive integer typeid pointer`)}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return}else{throwBindingError(`Cannot register type '${name}' twice`)}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(cb=>cb())}}function registerType(rawType,registeredInstance,options={}){if(!("argPackAdvance"in registeredInstance)){throw new TypeError("registerType registeredInstance requires argPackAdvance")}return sharedRegisterType(rawType,registeredInstance,options)}var GenericWireTypeSize=8;var __embind_register_bool=(rawType,name,trueValue,falseValue)=>{name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(wt){return!!wt},"toWireType":function(destructors,o){return o?trueValue:falseValue},"argPackAdvance":GenericWireTypeSize,"readValueFromPointer":function(pointer){return this["fromWireType"](GROWABLE_HEAP_U8()[pointer])},destructorFunction:null})};function handleAllocatorInit(){Object.assign(HandleAllocator.prototype,{get(id){return this.allocated[id]},has(id){return this.allocated[id]!==undefined},allocate(handle){var id=this.freelist.pop()||this.allocated.length;this.allocated[id]=handle;return id},free(id){this.allocated[id]=undefined;this.freelist.push(id)}})}function HandleAllocator(){this.allocated=[undefined];this.freelist=[]}var emval_handles=new HandleAllocator;var __emval_decref=handle=>{if(handle>=emval_handles.reserved&&0===--emval_handles.get(handle).refcount){emval_handles.free(handle)}};var count_emval_handles=()=>{var count=0;for(var i=emval_handles.reserved;i{emval_handles.allocated.push({value:undefined},{value:null},{value:true},{value:false});emval_handles.reserved=emval_handles.allocated.length;Module["count_emval_handles"]=count_emval_handles};var Emval={toValue:handle=>{if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handles.get(handle).value},toHandle:value=>{switch(value){case undefined:return 1;case null:return 2;case true:return 3;case false:return 4;default:{return emval_handles.allocate({refcount:1,value:value})}}}};function simpleReadValueFromPointer(pointer){return this["fromWireType"](GROWABLE_HEAP_I32()[pointer>>2])}var __embind_register_emval=(rawType,name)=>{name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":handle=>{var rv=Emval.toValue(handle);__emval_decref(handle);return rv},"toWireType":(destructors,value)=>Emval.toHandle(value),"argPackAdvance":GenericWireTypeSize,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})};var floatReadValueFromPointer=(name,width)=>{switch(width){case 4:return function(pointer){return this["fromWireType"](GROWABLE_HEAP_F32()[pointer>>2])};case 8:return function(pointer){return this["fromWireType"](GROWABLE_HEAP_F64()[pointer>>3])};default:throw new TypeError(`invalid float width (${width}): ${name}`)}};var __embind_register_float=(rawType,name,size)=>{name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":value=>value,"toWireType":(destructors,value)=>value,"argPackAdvance":GenericWireTypeSize,"readValueFromPointer":floatReadValueFromPointer(name,size),destructorFunction:null})};var char_0=48;var char_9=57;var makeLegalFunctionName=name=>{if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return`_${name}`}return name};var runDestructors=destructors=>{while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}};function createNamedFunction(name,body){name=makeLegalFunctionName(name);return{[name]:function(){return body.apply(this,arguments)}}[name]}function newFunc(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError(`new_ called with constructor type ${typeof constructor} which is not a function`)}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc,isAsync){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns||isAsync?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i{if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError(`Function '${humanName}' called with an invalid number of arguments (${arguments.length}) - expects one of (${proto[methodName].overloadTable})!`)}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}};var exposePublicSymbol=(name,value,numArguments)=>{if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(`Cannot register public name '${name}' twice`)}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError(`Cannot register multiple overloads of a function with the same number of arguments (${numArguments})!`)}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}};var heap32VectorToArray=(count,firstElement)=>{var array=[];for(var i=0;i>2])}return array};var replacePublicSymbol=(name,value,numArguments)=>{if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}};var dynCallLegacy=(sig,ptr,args)=>{var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)};var dynCall=(sig,ptr,args)=>{if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn};var getDynCaller=(sig,ptr)=>{var argCache=[];return function(){argCache.length=0;Object.assign(argCache,arguments);return dynCall(sig,ptr,argCache)}};var embind__requireFunction=(signature,rawFunction)=>{signature=readLatin1String(signature);function makeDynCaller(){if(signature.includes("j")){return getDynCaller(signature,rawFunction)}return getWasmTableEntry(rawFunction)}var fp=makeDynCaller();if(typeof fp!="function"){throwBindingError(`unknown function pointer with signature ${signature}: ${rawFunction}`)}return fp};var extendError=(baseErrorType,errorName)=>{var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return`${this.name}: ${this.message}`}};return errorClass};var UnboundTypeError=undefined;var getTypeName=type=>{var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv};var throwUnboundTypeError=(message,types)=>{var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return}if(registeredTypes[type]){return}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return}unboundTypes.push(type);seen[type]=true}types.forEach(visit);throw new UnboundTypeError(`${message}: `+unboundTypes.map(getTypeName).join([", "]))};var __embind_register_function=(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn,isAsync)=>{var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError(`Cannot call ${name} due to unbound types`,argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn,isAsync),argCount-1);return[]})};var integerReadValueFromPointer=(name,width,signed)=>{switch(width){case 1:return signed?pointer=>GROWABLE_HEAP_I8()[pointer>>0]:pointer=>GROWABLE_HEAP_U8()[pointer>>0];case 2:return signed?pointer=>GROWABLE_HEAP_I16()[pointer>>1]:pointer=>GROWABLE_HEAP_U16()[pointer>>1];case 4:return signed?pointer=>GROWABLE_HEAP_I32()[pointer>>2]:pointer=>GROWABLE_HEAP_U32()[pointer>>2];default:throw new TypeError(`invalid integer width (${width}): ${name}`)}};var __embind_register_integer=(primitiveType,name,size,minRange,maxRange)=>{name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var fromWireType=value=>value;if(minRange===0){var bitshift=32-8*size;fromWireType=value=>value<>>bitshift}var isUnsignedType=name.includes("unsigned");var checkAssertions=(value,toTypeName)=>{};var toWireType;if(isUnsignedType){toWireType=function(destructors,value){checkAssertions(value,this.name);return value>>>0}}else{toWireType=function(destructors,value){checkAssertions(value,this.name);return value}}registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":toWireType,"argPackAdvance":GenericWireTypeSize,"readValueFromPointer":integerReadValueFromPointer(name,size,minRange!==0),destructorFunction:null})};var __embind_register_memory_view=(rawType,dataTypeIndex,name)=>{var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){var size=GROWABLE_HEAP_U32()[handle>>2];var data=GROWABLE_HEAP_U32()[handle+4>>2];return new TA(GROWABLE_HEAP_I8().buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":GenericWireTypeSize,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})};function readPointer(pointer){return this["fromWireType"](GROWABLE_HEAP_U32()[pointer>>2])}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite);var __embind_register_std_string=(rawType,name)=>{name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":value=>{var length=GROWABLE_HEAP_U32()[value>>2];var payload=value+4;var str;if(stdStringIsUTF8){var decodeStartPtr=payload;for(var i=0;i<=length;++i){var currentBytePtr=payload+i;if(i==length||GROWABLE_HEAP_U8()[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i{if(value instanceof ArrayBuffer){value=new Uint8Array(value)}var length;var valueIsOfTypeString=typeof value=="string";if(!(valueIsOfTypeString||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Int8Array)){throwBindingError("Cannot pass non-string to std::string")}if(stdStringIsUTF8&&valueIsOfTypeString){length=lengthBytesUTF8(value)}else{length=value.length}var base=_malloc(4+length+1);var ptr=base+4;GROWABLE_HEAP_U32()[base>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}GROWABLE_HEAP_U8()[ptr+i]=charCode}}else{for(var i=0;i_free(ptr)})};var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;var UTF16ToString=(ptr,maxBytesToRead)=>{var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&GROWABLE_HEAP_U16()[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder)return UTF16Decoder.decode(GROWABLE_HEAP_U8().slice(ptr,endPtr));var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=GROWABLE_HEAP_I16()[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str};var stringToUTF16=(str,outPtr,maxBytesToWrite)=>{if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}GROWABLE_HEAP_I16()[outPtr>>1]=0;return outPtr-startPtr};var lengthBytesUTF16=str=>str.length*2;var UTF32ToString=(ptr,maxBytesToRead)=>{var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=GROWABLE_HEAP_I32()[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str};var stringToUTF32=(str,outPtr,maxBytesToWrite)=>{if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}GROWABLE_HEAP_I32()[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}GROWABLE_HEAP_I32()[outPtr>>2]=0;return outPtr-startPtr};var lengthBytesUTF32=str=>{var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len};var __embind_register_std_wstring=(rawType,charSize,name)=>{name=readLatin1String(name);var decodeString,encodeString,getHeap,lengthBytesUTF,shift;if(charSize===2){decodeString=UTF16ToString;encodeString=stringToUTF16;lengthBytesUTF=lengthBytesUTF16;getHeap=()=>GROWABLE_HEAP_U16();shift=1}else if(charSize===4){decodeString=UTF32ToString;encodeString=stringToUTF32;lengthBytesUTF=lengthBytesUTF32;getHeap=()=>GROWABLE_HEAP_U32();shift=2}registerType(rawType,{name:name,"fromWireType":value=>{var length=GROWABLE_HEAP_U32()[value>>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":(destructors,value)=>{if(!(typeof value=="string")){throwBindingError(`Cannot pass non-string to C++ string type ${name}`)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);GROWABLE_HEAP_U32()[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":GenericWireTypeSize,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:ptr=>_free(ptr)})};var __embind_register_void=(rawType,name)=>{name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":()=>undefined,"toWireType":(destructors,o)=>undefined})};var nowIsMonotonic=true;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var maybeExit=()=>{if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD)__emscripten_thread_exit(EXITSTATUS);else _exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var __emscripten_thread_mailbox_await=pthread_ptr=>{if(typeof Atomics.waitAsync==="function"){var wait=Atomics.waitAsync(GROWABLE_HEAP_I32(),pthread_ptr>>2,pthread_ptr);wait.value.then(checkMailbox);var waitingAsync=pthread_ptr+128;Atomics.store(GROWABLE_HEAP_I32(),waitingAsync>>2,1)}};Module["__emscripten_thread_mailbox_await"]=__emscripten_thread_mailbox_await;var checkMailbox=()=>{var pthread_ptr=_pthread_self();if(pthread_ptr){__emscripten_thread_mailbox_await(pthread_ptr);callUserCallback(()=>__emscripten_check_mailbox())}};Module["checkMailbox"]=checkMailbox;var __emscripten_notify_mailbox_postmessage=(targetThreadId,currThreadId,mainThreadId)=>{if(targetThreadId==currThreadId){setTimeout(()=>checkMailbox())}else if(ENVIRONMENT_IS_PTHREAD){postMessage({"targetThread":targetThreadId,"cmd":"checkMailbox"})}else{var worker=PThread.pthreads[targetThreadId];if(!worker){return}worker.postMessage({"cmd":"checkMailbox"})}};var withStackSave=f=>{var stack=stackSave();var ret=f();stackRestore(stack);return ret};var proxyToMainThread=function(index,sync){var numCallArgs=arguments.length-2;var outerArgs=arguments;return withStackSave(()=>{var serializedNumCallArgs=numCallArgs;var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i{proxiedJSCallArgs.length=numCallArgs;var b=args>>3;for(var i=0;i{if(ENVIRONMENT_IS_NODE){PThread.pthreads[thread].ref()}};var requireRegisteredType=(rawType,humanName)=>{var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl};var __emval_as=(handle,returnType,destructorsRef)=>{handle=Emval.toValue(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=Emval.toHandle(destructors);GROWABLE_HEAP_U32()[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)};var emval_symbols={};var getStringOrSymbol=address=>{var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}return symbol};var emval_methodCallers=[];var __emval_call_void_method=(caller,handle,methodName,args)=>{caller=emval_methodCallers[caller];handle=Emval.toValue(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)};var emval_addMethodCaller=caller=>{var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id};var emval_lookupTypes=(argCount,argTypes)=>{var a=new Array(argCount);for(var i=0;i>2],"parameter "+i)}return a};var emval_registeredMethods=[];var __emval_get_method_caller=(argCount,argTypes)=>{var types=emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var returnId=emval_registeredMethods[signatureName];if(returnId!==undefined){return returnId}var params=["retType"];var args=[retType];var argsList="";for(var i=0;i{name=getStringOrSymbol(name);return Emval.toHandle(Module[name])};var __emval_get_property=(handle,key)=>{handle=Emval.toValue(handle);key=Emval.toValue(key);return Emval.toHandle(handle[key])};var __emval_incref=handle=>{if(handle>4){emval_handles.get(handle).refcount+=1}};var craftEmvalAllocator=argCount=>{var argsList="";for(var i=0;iGROWABLE_HEAP_U32();var functionBody="return function emval_allocator_"+argCount+"(constructor, argTypes, args) {\n"+" var HEAPU32 = getMemory();\n";for(var i=0;i>2)], 'parameter "+i+"');\n"+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"+"argTypes += 4;\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return valueToHandle(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","valueToHandle","getMemory",functionBody)(requireRegisteredType,Module,Emval.toHandle,getMemory)};var emval_newers={};var __emval_new=(handle,argCount,argTypes,args)=>{handle=Emval.toValue(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)};var __emval_new_cstring=v=>Emval.toHandle(getStringOrSymbol(v));var __emval_run_destructors=handle=>{var destructors=Emval.toValue(handle);runDestructors(destructors);__emval_decref(handle)};var _abort=()=>{abort("")};var warnOnce=text=>{if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var _emscripten_check_blocking_allowed=()=>{};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};var getHeapMax=()=>2147483648;var _emscripten_get_heap_max=()=>getHeapMax();var _emscripten_get_now;_emscripten_get_now=()=>performance.timeOrigin+performance.now();var _emscripten_num_logical_cores=()=>{if(ENVIRONMENT_IS_NODE)return require("os").cpus().length;return navigator["hardwareConcurrency"]};var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=GROWABLE_HEAP_U8().length;requestedSize>>>=0;if(requestedSize<=oldSize){return false}var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i>0]=str.charCodeAt(i)}GROWABLE_HEAP_I8()[buffer>>0]=0};var _environ_get=function(__environ,environ_buf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(6,1,__environ,environ_buf);var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;GROWABLE_HEAP_U32()[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=function(penviron_count,penviron_buf_size){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(7,1,penviron_count,penviron_buf_size);var strings=getEnvStrings();GROWABLE_HEAP_U32()[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);GROWABLE_HEAP_U32()[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(8,1,fd);try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=GROWABLE_HEAP_U32()[iov+4>>2];iov+=8;var curr=FS.read(stream,GROWABLE_HEAP_I8(),ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(10,1,fd,offset_low,offset_high,whence,newOffset);var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],GROWABLE_HEAP_I32()[newOffset>>2]=tempI64[0],GROWABLE_HEAP_I32()[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=GROWABLE_HEAP_U32()[iov+4>>2];iov+=8;var curr=FS.write(stream,GROWABLE_HEAP_I8(),ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(11,1,fd,iov,iovcnt,pnum);try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);GROWABLE_HEAP_U32()[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var arraySum=(array,index)=>{var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum};var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];var addDays=(date,days)=>{var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate};var writeArrayToMemory=(array,buffer)=>{GROWABLE_HEAP_I8().set(array,buffer)};var _strftime=(s,maxsize,format,tm)=>{var tm_zone=GROWABLE_HEAP_U32()[tm+40>>2];var date={tm_sec:GROWABLE_HEAP_I32()[tm>>2],tm_min:GROWABLE_HEAP_I32()[tm+4>>2],tm_hour:GROWABLE_HEAP_I32()[tm+8>>2],tm_mday:GROWABLE_HEAP_I32()[tm+12>>2],tm_mon:GROWABLE_HEAP_I32()[tm+16>>2],tm_year:GROWABLE_HEAP_I32()[tm+20>>2],tm_wday:GROWABLE_HEAP_I32()[tm+24>>2],tm_yday:GROWABLE_HEAP_I32()[tm+28>>2],tm_isdst:GROWABLE_HEAP_I32()[tm+32>>2],tm_gmtoff:GROWABLE_HEAP_I32()[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":date=>WEEKDAYS[date.tm_wday].substring(0,3),"%A":date=>WEEKDAYS[date.tm_wday],"%b":date=>MONTHS[date.tm_mon].substring(0,3),"%B":date=>MONTHS[date.tm_mon],"%C":date=>{var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":date=>leadingNulls(date.tm_mday,2),"%e":date=>leadingSomething(date.tm_mday,2," "),"%g":date=>getWeekBasedYear(date).toString().substring(2),"%G":date=>getWeekBasedYear(date),"%H":date=>leadingNulls(date.tm_hour,2),"%I":date=>{var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":date=>leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3),"%m":date=>leadingNulls(date.tm_mon+1,2),"%M":date=>leadingNulls(date.tm_min,2),"%n":()=>"\n","%p":date=>{if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":date=>leadingNulls(date.tm_sec,2),"%t":()=>"\t","%u":date=>date.tm_wday||7,"%U":date=>{var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":date=>{var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":date=>date.tm_wday,"%W":date=>{var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":date=>(date.tm_year+1900).toString().substring(2),"%Y":date=>date.tm_year+1900,"%z":date=>{var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":date=>date.tm_zone,"%%":()=>"%"};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1};var _strftime_l=(s,maxsize,format,tm,loc)=>_strftime(s,maxsize,format,tm);PThread.init();var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;embind_init_charCodes();BindingError=Module["BindingError"]=class BindingError extends Error{constructor(message){super(message);this.name="BindingError"}};InternalError=Module["InternalError"]=class InternalError extends Error{constructor(message){super(message);this.name="InternalError"}};handleAllocatorInit();init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");var proxiedFunctionTable=[_proc_exit,exitOnMainThread,pthreadCreateProxied,___syscall_fcntl64,___syscall_ioctl,___syscall_openat,_environ_get,_environ_sizes_get,_fd_close,_fd_read,_fd_seek,_fd_write];var wasmImports={d:___cxa_throw,K:___emscripten_init_main_thread_js,m:___emscripten_thread_cleanup,H:___pthread_create_js,q:___syscall_fcntl64,M:___syscall_ioctl,N:___syscall_openat,y:__embind_register_bigint,S:__embind_register_bool,R:__embind_register_emval,s:__embind_register_float,h:__embind_register_function,g:__embind_register_integer,c:__embind_register_memory_view,r:__embind_register_std_string,k:__embind_register_std_wstring,T:__embind_register_void,Q:__emscripten_get_now_is_monotonic,F:__emscripten_notify_mailbox_postmessage,I:__emscripten_receive_on_main_thread_js,J:__emscripten_thread_mailbox_await,P:__emscripten_thread_set_strongref,w:__emval_as,U:__emval_call_void_method,f:__emval_decref,V:__emval_get_method_caller,u:__emval_get_module_property,i:__emval_get_property,l:__emval_incref,t:__emval_new,j:__emval_new_cstring,v:__emval_run_destructors,b:_abort,n:_emscripten_check_blocking_allowed,O:_emscripten_exit_with_live_runtime,z:_emscripten_get_heap_max,e:_emscripten_get_now,A:_emscripten_num_logical_cores,E:_emscripten_resize_heap,C:_environ_get,D:_environ_sizes_get,G:_exit,o:_fd_close,L:_fd_read,x:_fd_seek,p:_fd_write,a:wasmMemory||Module["wasmMemory"],B:_strftime_l};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["W"])();var _free=a0=>(_free=wasmExports["Y"])(a0);var _malloc=a0=>(_malloc=wasmExports["Z"])(a0);var __emscripten_tls_init=Module["__emscripten_tls_init"]=()=>(__emscripten_tls_init=Module["__emscripten_tls_init"]=wasmExports["_"])();var _pthread_self=Module["_pthread_self"]=()=>(_pthread_self=Module["_pthread_self"]=wasmExports["$"])();var ___getTypeName=a0=>(___getTypeName=wasmExports["aa"])(a0);var __embind_initialize_bindings=Module["__embind_initialize_bindings"]=()=>(__embind_initialize_bindings=Module["__embind_initialize_bindings"]=wasmExports["ba"])();var ___errno_location=()=>(___errno_location=wasmExports["ca"])();var __emscripten_thread_init=Module["__emscripten_thread_init"]=(a0,a1,a2,a3,a4,a5)=>(__emscripten_thread_init=Module["__emscripten_thread_init"]=wasmExports["da"])(a0,a1,a2,a3,a4,a5);var __emscripten_thread_crashed=Module["__emscripten_thread_crashed"]=()=>(__emscripten_thread_crashed=Module["__emscripten_thread_crashed"]=wasmExports["ea"])();var _emscripten_main_thread_process_queued_calls=()=>(_emscripten_main_thread_process_queued_calls=wasmExports["emscripten_main_thread_process_queued_calls"])();var _emscripten_main_runtime_thread_id=()=>(_emscripten_main_runtime_thread_id=wasmExports["emscripten_main_runtime_thread_id"])();var __emscripten_run_on_main_thread_js=(a0,a1,a2,a3)=>(__emscripten_run_on_main_thread_js=wasmExports["fa"])(a0,a1,a2,a3);var __emscripten_thread_free_data=a0=>(__emscripten_thread_free_data=wasmExports["ga"])(a0);var __emscripten_thread_exit=Module["__emscripten_thread_exit"]=a0=>(__emscripten_thread_exit=Module["__emscripten_thread_exit"]=wasmExports["ha"])(a0);var __emscripten_check_mailbox=Module["__emscripten_check_mailbox"]=()=>(__emscripten_check_mailbox=Module["__emscripten_check_mailbox"]=wasmExports["ia"])();var _emscripten_stack_set_limits=(a0,a1)=>(_emscripten_stack_set_limits=wasmExports["ja"])(a0,a1);var stackSave=()=>(stackSave=wasmExports["ka"])();var stackRestore=a0=>(stackRestore=wasmExports["la"])(a0);var stackAlloc=a0=>(stackAlloc=wasmExports["ma"])(a0);var ___cxa_is_pointer_type=a0=>(___cxa_is_pointer_type=wasmExports["na"])(a0);var dynCall_jiji=Module["dynCall_jiji"]=(a0,a1,a2,a3,a4)=>(dynCall_jiji=Module["dynCall_jiji"]=wasmExports["oa"])(a0,a1,a2,a3,a4);var dynCall_viijii=Module["dynCall_viijii"]=(a0,a1,a2,a3,a4,a5,a6)=>(dynCall_viijii=Module["dynCall_viijii"]=wasmExports["pa"])(a0,a1,a2,a3,a4,a5,a6);var dynCall_iiiiij=Module["dynCall_iiiiij"]=(a0,a1,a2,a3,a4,a5,a6)=>(dynCall_iiiiij=Module["dynCall_iiiiij"]=wasmExports["qa"])(a0,a1,a2,a3,a4,a5,a6);var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8)=>(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=wasmExports["ra"])(a0,a1,a2,a3,a4,a5,a6,a7,a8);var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)=>(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=wasmExports["sa"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE!="undefined"&&ENVIRONMENT_IS_NODE){var buf=Buffer.from(s,"base64");return new Uint8Array(buf.buffer,buf.byteOffset,buf.length)}try{var decoded=atob(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i0){return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve(Module);initRuntime();startWorker(Module);return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); - return whisper_factory.ready + return moduleArg.ready } + ); })(); if (typeof exports === 'object' && typeof module === 'object') module.exports = whisper_factory; else if (typeof define === 'function' && define['amd']) - define([], function() { return whisper_factory; }); -else if (typeof exports === 'object') - exports["whisper_factory"] = whisper_factory; + define([], () => whisper_factory); diff --git a/examples/common.cpp b/examples/common.cpp index 7d215ae1..2b8da8f7 100644 --- a/examples/common.cpp +++ b/examples/common.cpp @@ -1,3 +1,5 @@ +#define _USE_MATH_DEFINES // for M_PI + #include "common.h" // third-party utilities @@ -13,53 +15,59 @@ #include #include -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - #if defined(_MSC_VER) #pragma warning(disable: 4244 4267) // possible loss of data #endif +// Function to check if the next argument exists +std::string get_next_arg(int& i, int argc, char** argv, const std::string& flag, gpt_params& params) { + if (i + 1 < argc && argv[i + 1][0] != '-') { + return argv[++i]; + } else { + fprintf(stderr, "error: %s requires one argument.\n", flag.c_str()); + gpt_print_usage(argc, argv, params); + exit(0); + } +} + bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { for (int i = 1; i < argc; i++) { std::string arg = argv[i]; if (arg == "-s" || arg == "--seed") { - params.seed = std::stoi(argv[++i]); + params.seed = std::stoi(get_next_arg(i, argc, argv, arg, params)); } else if (arg == "-t" || arg == "--threads") { - params.n_threads = std::stoi(argv[++i]); + params.n_threads = std::stoi(get_next_arg(i, argc, argv, arg, params)); + } else if (arg == "-ngl" || arg == "--gpu-layers" || arg == "--n-gpu-layers") { + params.n_gpu_layers = std::stoi(get_next_arg(i, argc, argv, arg, params)); } else if (arg == "-p" || arg == "--prompt") { - params.prompt = argv[++i]; + params.prompt = get_next_arg(i, argc, argv, arg, params); } else if (arg == "-n" || arg == "--n_predict") { - params.n_predict = std::stoi(argv[++i]); + params.n_predict = std::stoi(get_next_arg(i, argc, argv, arg, params)); } else if (arg == "--top_k") { - params.top_k = std::max(1, std::stoi(argv[++i])); + params.top_k = std::stoi(get_next_arg(i, argc, argv, arg, params)); } else if (arg == "--top_p") { - params.top_p = std::stof(argv[++i]); + params.top_p = std::stof(get_next_arg(i, argc, argv, arg, params)); } else if (arg == "--temp") { - params.temp = std::stof(argv[++i]); + params.temp = std::stof(get_next_arg(i, argc, argv, arg, params)); } else if (arg == "--repeat-last-n") { - params.repeat_last_n = std::stof(argv[++i]); + params.repeat_last_n = std::stoi(get_next_arg(i, argc, argv, arg, params)); } else if (arg == "--repeat-penalty") { - params.repeat_penalty = std::stof(argv[++i]); + params.repeat_penalty = std::stof(get_next_arg(i, argc, argv, arg, params)); } else if (arg == "-b" || arg == "--batch_size") { - params.n_batch = std::stoi(argv[++i]); + params.n_batch= std::stoi(get_next_arg(i, argc, argv, arg, params)); } else if (arg == "-m" || arg == "--model") { - params.model = argv[++i]; + params.model = get_next_arg(i, argc, argv, arg, params); } else if (arg == "-i" || arg == "--interactive") { params.interactive = true; } else if (arg == "-ip" || arg == "--interactive-port") { params.interactive = true; - params.interactive_port = std::stoi(argv[++i]); + params.interactive_port = std::stoi(get_next_arg(i, argc, argv, arg, params)); } else if (arg == "-h" || arg == "--help") { gpt_print_usage(argc, argv, params); exit(0); } else if (arg == "-f" || arg == "--file") { - if (++i > argc) { - fprintf(stderr, "Invalid file param"); - break; - } + get_next_arg(i, argc, argv, arg, params); std::ifstream file(argv[i]); if (!file) { fprintf(stderr, "error: failed to open file '%s'\n", argv[i]); @@ -70,7 +78,7 @@ bool gpt_params_parse(int argc, char ** argv, gpt_params & params) { params.prompt.pop_back(); } } else if (arg == "-tt" || arg == "--token_test") { - params.token_test = argv[++i]; + params.token_test = get_next_arg(i, argc, argv, arg, params); } else { fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); @@ -89,6 +97,7 @@ void gpt_print_usage(int /*argc*/, char ** argv, const gpt_params & params) { fprintf(stderr, " -h, --help show this help message and exit\n"); fprintf(stderr, " -s SEED, --seed SEED RNG seed (default: -1)\n"); fprintf(stderr, " -t N, --threads N number of threads to use during computation (default: %d)\n", params.n_threads); + fprintf(stderr, " -ngl N, --gpu-layers N number of layers to offload to GPU on supported models (default: %d)\n", params.n_gpu_layers); fprintf(stderr, " -p PROMPT, --prompt PROMPT\n"); fprintf(stderr, " prompt to start generation with (default: random)\n"); fprintf(stderr, " -f FNAME, --file FNAME\n"); @@ -755,3 +764,46 @@ float similarity(const std::string & s0, const std::string & s1) { return 1.0f - (dist / std::max(s0.size(), s1.size())); } + +bool sam_params_parse(int argc, char ** argv, sam_params & params) { + for (int i = 1; i < argc; i++) { + std::string arg = argv[i]; + + if (arg == "-s" || arg == "--seed") { + params.seed = std::stoi(argv[++i]); + } else if (arg == "-t" || arg == "--threads") { + params.n_threads = std::stoi(argv[++i]); + } else if (arg == "-m" || arg == "--model") { + params.model = argv[++i]; + } else if (arg == "-i" || arg == "--inp") { + params.fname_inp = argv[++i]; + } else if (arg == "-o" || arg == "--out") { + params.fname_out = argv[++i]; + } else if (arg == "-h" || arg == "--help") { + sam_print_usage(argc, argv, params); + exit(0); + } else { + fprintf(stderr, "error: unknown argument: %s\n", arg.c_str()); + sam_print_usage(argc, argv, params); + exit(0); + } + } + + return true; +} + +void sam_print_usage(int argc, char ** argv, const sam_params & params) { + fprintf(stderr, "usage: %s [options]\n", argv[0]); + fprintf(stderr, "\n"); + fprintf(stderr, "options:\n"); + fprintf(stderr, " -h, --help show this help message and exit\n"); + fprintf(stderr, " -s SEED, --seed SEED RNG seed (default: -1)\n"); + fprintf(stderr, " -t N, --threads N number of threads to use during computation (default: %d)\n", params.n_threads); + fprintf(stderr, " -m FNAME, --model FNAME\n"); + fprintf(stderr, " model path (default: %s)\n", params.model.c_str()); + fprintf(stderr, " -i FNAME, --inp FNAME\n"); + fprintf(stderr, " input file (default: %s)\n", params.fname_inp.c_str()); + fprintf(stderr, " -o FNAME, --out FNAME\n"); + fprintf(stderr, " output file (default: %s)\n", params.fname_out.c_str()); + fprintf(stderr, "\n"); +} diff --git a/examples/common.h b/examples/common.h index f9740a3c..7c671588 100644 --- a/examples/common.h +++ b/examples/common.h @@ -11,7 +11,7 @@ #define COMMON_SAMPLE_RATE 16000 // -// CLI argument parsing +// GPT CLI argument parsing // struct gpt_params { @@ -33,6 +33,8 @@ struct gpt_params { bool interactive = false; int32_t interactive_port = -1; + + int32_t n_gpu_layers = 0; }; bool gpt_params_parse(int argc, char ** argv, gpt_params & params); @@ -155,3 +157,20 @@ bool vad_simple( // compute similarity between two strings using Levenshtein distance float similarity(const std::string & s0, const std::string & s1); + +// +// SAM argument parsing +// + +struct sam_params { + int32_t seed = -1; // RNG seed + int32_t n_threads = std::min(4, (int32_t) std::thread::hardware_concurrency()); + + std::string model = "models/sam-vit-b/ggml-model-f16.bin"; // model path + std::string fname_inp = "img.jpg"; + std::string fname_out = "img.out"; +}; + +bool sam_params_parse(int argc, char ** argv, sam_params & params); + +void sam_print_usage(int argc, char ** argv, const sam_params & params); diff --git a/examples/talk.wasm/gpt-2.cpp b/examples/talk.wasm/gpt-2.cpp index 8fde4925..a2ba98ee 100644 --- a/examples/talk.wasm/gpt-2.cpp +++ b/examples/talk.wasm/gpt-2.cpp @@ -191,9 +191,9 @@ bool gpt2_model_load(const std::string & fname, gpt2_model & model, gpt_vocab & // create the ggml context { struct ggml_init_params params = { - .mem_size = ctx_size, - .mem_buffer = NULL, - .no_alloc = false, + /*.mem_size =*/ ctx_size, + /*.mem_buffer =*/ NULL, + /*.no_alloc =*/ false, }; model.ctx = ggml_init(params); @@ -420,7 +420,6 @@ bool gpt2_eval( struct ggml_context * ctx0 = ggml_init(params); struct ggml_cgraph gf = {}; - gf.n_threads = n_threads; struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); memcpy(embd->data, embd_inp.data(), N*ggml_element_size(embd)); @@ -442,7 +441,7 @@ bool gpt2_eval( // norm { // [ 768, N] - cur = ggml_norm(ctx0, inpL); + cur = ggml_norm(ctx0, inpL, 1e-5f); // cur = ln_1_g*cur + ln_1_b // [ 768, N] @@ -589,7 +588,7 @@ bool gpt2_eval( { // norm { - cur = ggml_norm(ctx0, inpFF); + cur = ggml_norm(ctx0, inpFF, 1e-5f); // cur = ln_2_g*cur + ln_2_b // [ 768, N] @@ -644,7 +643,7 @@ bool gpt2_eval( // norm { // [ 768, N] - inpL = ggml_norm(ctx0, inpL); + inpL = ggml_norm(ctx0, inpL, 1e-5f); // inpL = ln_f_g*inpL + ln_f_b // [ 768, N] @@ -664,8 +663,8 @@ bool gpt2_eval( //inpL = ggml_soft_max(ctx0, inpL); // run the computation - ggml_build_forward_expand(&gf, inpL); - ggml_graph_compute (ctx0, &gf); + ggml_build_forward_expand (&gf, inpL); + ggml_graph_compute_with_ctx(ctx0, &gf, n_threads); //if (n_past%100 == 0) { // ggml_graph_print (&gf); diff --git a/examples/talk/gpt-2.cpp b/examples/talk/gpt-2.cpp index 8fde4925..1ee4e728 100644 --- a/examples/talk/gpt-2.cpp +++ b/examples/talk/gpt-2.cpp @@ -379,6 +379,7 @@ bool gpt2_model_load(const std::string & fname, gpt2_model & model, gpt_vocab & // - embd_inp: the embeddings of the tokens in the context // - embd_w: the predicted logits for the next token // +// TODO: sync latest version from ggml repo bool gpt2_eval( const gpt2_model & model, const int n_threads, @@ -420,7 +421,6 @@ bool gpt2_eval( struct ggml_context * ctx0 = ggml_init(params); struct ggml_cgraph gf = {}; - gf.n_threads = n_threads; struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); memcpy(embd->data, embd_inp.data(), N*ggml_element_size(embd)); @@ -442,7 +442,7 @@ bool gpt2_eval( // norm { // [ 768, N] - cur = ggml_norm(ctx0, inpL); + cur = ggml_norm(ctx0, inpL, 1e-5f); // cur = ln_1_g*cur + ln_1_b // [ 768, N] @@ -589,7 +589,7 @@ bool gpt2_eval( { // norm { - cur = ggml_norm(ctx0, inpFF); + cur = ggml_norm(ctx0, inpFF, 1e-5f); // cur = ln_2_g*cur + ln_2_b // [ 768, N] @@ -644,7 +644,7 @@ bool gpt2_eval( // norm { // [ 768, N] - inpL = ggml_norm(ctx0, inpL); + inpL = ggml_norm(ctx0, inpL, 1e-5f); // inpL = ln_f_g*inpL + ln_f_b // [ 768, N] @@ -664,8 +664,8 @@ bool gpt2_eval( //inpL = ggml_soft_max(ctx0, inpL); // run the computation - ggml_build_forward_expand(&gf, inpL); - ggml_graph_compute (ctx0, &gf); + ggml_build_forward_expand (&gf, inpL); + ggml_graph_compute_with_ctx(ctx0, &gf, n_threads); //if (n_past%100 == 0) { // ggml_graph_print (&gf); diff --git a/ggml-alloc.c b/ggml-alloc.c new file mode 100644 index 00000000..856a4cdb --- /dev/null +++ b/ggml-alloc.c @@ -0,0 +1,594 @@ +#include "ggml-alloc.h" +#include "ggml.h" +#include +#include +#include +#include +#include + +#define UNUSED(x) (void)(x) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define GGML_MAX_CONCUR (2*GGML_MAX_NODES) + +//#define GGML_ALLOCATOR_DEBUG + +//#define AT_PRINTF printf +#define AT_PRINTF(...) ((void)0) + +struct hash_node { + struct ggml_tensor * t; + int n_children; + int n_views; +}; + +static size_t hash(void * p) { + return (size_t)p % GGML_GRAPH_HASHTABLE_SIZE; +} + +static struct hash_node * hash_get(struct hash_node hash_table[], struct ggml_tensor * t) { + size_t h = hash(t); + + // linear probing + size_t i = h; + while (hash_table[i].t != NULL) { + if (hash_table[i].t == t) { + return &hash_table[i]; + } + i = (i + 1) % GGML_GRAPH_HASHTABLE_SIZE; + if (i == h) { + // hash table is full + GGML_ASSERT(false); + } + } + + hash_table[i].t = t; + return &hash_table[i]; +} + +// TODO: GGML_PAD ? +static size_t aligned_offset(const void * buffer, size_t offset, size_t alignment) { + assert(alignment && !(alignment & (alignment - 1))); // power of 2 + size_t align = (alignment - (((uintptr_t)buffer + offset) % alignment)) % alignment; + return offset + align; +} + +struct free_block { + void * addr; + size_t size; +}; + +#define MAX_FREE_BLOCKS 128 + +struct ggml_allocr { + void * data; + size_t size; + size_t alignment; + int n_free_blocks; + struct free_block free_blocks[MAX_FREE_BLOCKS]; + struct hash_node hash_table[GGML_GRAPH_HASHTABLE_SIZE]; + size_t max_size; + bool measure; + int parse_seq[GGML_MAX_CONCUR]; + int parse_seq_len; + +#ifdef GGML_ALLOCATOR_DEBUG + struct ggml_tensor * allocated_tensors[1024]; +#endif +}; + +#ifdef GGML_ALLOCATOR_DEBUG +static void add_allocated_tensor(struct ggml_allocr * alloc, struct ggml_tensor * tensor) { + for (int i = 0; i < 1024; i++) { + if (alloc->allocated_tensors[i] == NULL) { + alloc->allocated_tensors[i] = tensor; + return; + } + } + GGML_ASSERT(!"out of allocated_tensors"); +} +static void remove_allocated_tensor(struct ggml_allocr * alloc, struct ggml_tensor * tensor) { + for (int i = 0; i < 1024; i++) { + if (alloc->allocated_tensors[i] == tensor || + (alloc->allocated_tensors[i] != NULL && alloc->allocated_tensors[i]->data == tensor->data)) { + alloc->allocated_tensors[i] = NULL; + return; + } + } + printf("tried to free tensor %s not found\n", tensor->name); + GGML_ASSERT(!"tensor not found"); +} +#endif + + +static size_t ggml_allocator_get_alloc_size(struct ggml_allocr * alloc, struct ggml_tensor * tensor) { + return ggml_nbytes(tensor); + + UNUSED(alloc); +} + +void ggml_allocr_alloc(struct ggml_allocr * alloc, struct ggml_tensor * tensor) { + size_t size = ggml_allocator_get_alloc_size(alloc, tensor); + size = aligned_offset(NULL, size, alloc->alignment); + + AT_PRINTF("%s: allocating %s (%zu bytes) - ", __func__, tensor->name, size); + + size_t max_avail = 0; + + // find the best fitting free block besides the last block + int best_fit_block = -1; + size_t best_fit_size = SIZE_MAX; + for (int i = 0; i < alloc->n_free_blocks - 1; i++) { + struct free_block * block = &alloc->free_blocks[i]; + max_avail = MAX(max_avail, block->size); + if (block->size >= size && block->size <= best_fit_size) { + best_fit_block = i; + best_fit_size = block->size; + } + } + + AT_PRINTF("block %d\n", best_fit_block); + + if (best_fit_block == -1) { + // the last block is our last resort + struct free_block * block = &alloc->free_blocks[alloc->n_free_blocks - 1]; + if (block->size >= size) { + best_fit_block = alloc->n_free_blocks - 1; + max_avail = MAX(max_avail, block->size); + } else { + fprintf(stderr, "%s: not enough space in the buffer (needed %zu, largest block available %zu)\n", + __func__, size, max_avail); + GGML_ASSERT(!"not enough space in the buffer"); + return; + } + } + struct free_block * block = &alloc->free_blocks[best_fit_block]; + void * addr = block->addr; + block->addr = (char*)block->addr + size; + block->size -= size; + if (block->size == 0) { + // remove block if empty + alloc->n_free_blocks--; + for (int j = best_fit_block; j < alloc->n_free_blocks; j++) { + alloc->free_blocks[j] = alloc->free_blocks[j+1]; + } + } + + tensor->data = addr; + +#ifdef GGML_ALLOCATOR_DEBUG + add_allocated_tensor(alloc, tensor); + size_t cur_max = (char*)addr - (char*)alloc->data + size; + if (cur_max > alloc->max_size) { + printf("max_size = %.2f MB: tensors: ", cur_max / 1024.0 / 1024.0); + for (int i = 0; i < 1024; i++) { + if (alloc->allocated_tensors[i]) { + printf("%s (%.2f MB) ", alloc->allocated_tensors[i]->name, ggml_nbytes(alloc->allocated_tensors[i]) / 1024.0 / 1024.0); + } + } + printf("\n"); + } +#endif + + alloc->max_size = MAX(alloc->max_size, (char*)addr - (char*)alloc->data + size); +} + +// this is a very naive implementation, but for our case the number of free blocks should be very small +static void ggml_allocator_free_tensor(struct ggml_allocr * alloc, struct ggml_tensor * tensor) { + void * ptr = tensor->data; + + if (ptr < alloc->data || (char*)ptr >= (char*)alloc->data + alloc->max_size) { + // the tensor was not allocated in this buffer + // this can happen because the graph allocator will try to free weights and other tensors from different buffers + // the easiest way to deal with this is just to ignore it + return; + } + + size_t size = ggml_allocator_get_alloc_size(alloc, tensor); + size = aligned_offset(NULL, size, alloc->alignment); + AT_PRINTF("%s: freeing %s (%zu bytes) - n_free_blocks = %d\n", __func__, tensor->name, size, alloc->n_free_blocks); + +#ifdef GGML_ALLOCATOR_DEBUG + remove_allocated_tensor(alloc, tensor); +#endif + + // see if we can merge with an existing block + for (int i = 0; i < alloc->n_free_blocks; i++) { + struct free_block * block = &alloc->free_blocks[i]; + // check if ptr is at the end of the block + if ((char*)block->addr + block->size == ptr) { + block->size += size; + // check if we can merge with the next block + if (i < alloc->n_free_blocks - 1 && (char*)block->addr + block->size == alloc->free_blocks[i+1].addr) { + block->size += alloc->free_blocks[i+1].size; + alloc->n_free_blocks--; + for (int j = i+1; j < alloc->n_free_blocks; j++) { + alloc->free_blocks[j] = alloc->free_blocks[j+1]; + } + } + return; + } + // check if ptr is at the beginning of the block + if ((char*)ptr + size == block->addr) { + block->addr = ptr; + block->size += size; + // check if we can merge with the previous block + if (i > 0 && (char*)alloc->free_blocks[i-1].addr + alloc->free_blocks[i-1].size == block->addr) { + alloc->free_blocks[i-1].size += block->size; + alloc->n_free_blocks--; + for (int j = i; j < alloc->n_free_blocks; j++) { + alloc->free_blocks[j] = alloc->free_blocks[j+1]; + } + } + return; + } + } + // otherwise, add a new block + GGML_ASSERT(alloc->n_free_blocks < MAX_FREE_BLOCKS && "out of free blocks"); + // insert the new block in the correct position to keep the array sorted by address (to make merging blocks faster) + int insert_pos = 0; + while (insert_pos < alloc->n_free_blocks && alloc->free_blocks[insert_pos].addr < ptr) { + insert_pos++; + } + // shift all blocks from insert_pos onward to make room for the new block + for (int i = alloc->n_free_blocks; i > insert_pos; i--) { + alloc->free_blocks[i] = alloc->free_blocks[i-1]; + } + // insert the new block + alloc->free_blocks[insert_pos].addr = ptr; + alloc->free_blocks[insert_pos].size = size; + alloc->n_free_blocks++; +} + +void ggml_allocr_set_parse_seq(struct ggml_allocr * alloc, const int * list, int n) { + for (int i = 0; i < n; i++) { + alloc->parse_seq[i] = list[i]; + } + alloc->parse_seq_len = n; +} + +void ggml_allocr_reset(struct ggml_allocr * alloc) { + alloc->n_free_blocks = 1; + size_t align_offset = aligned_offset(alloc->data, 0, alloc->alignment); + alloc->free_blocks[0].addr = (char *)alloc->data + align_offset; + alloc->free_blocks[0].size = alloc->size - align_offset; +} + +struct ggml_allocr * ggml_allocr_new(void * data, size_t size, size_t alignment) { + struct ggml_allocr * alloc = (struct ggml_allocr *)malloc(sizeof(struct ggml_allocr) /* + n_free_blocks * sizeof(struct free_block) */); + + *alloc = (struct ggml_allocr){ + /*.data = */ data, + /*.size = */ size, + /*.alignment = */ alignment, + /*.n_free_blocks = */ 0, + /*.free_blocks = */ {{0}}, + /*.hash_table = */ {{0}}, + /*.max_size = */ 0, + /*.measure = */ false, + /*.parse_seq = */ {0}, + /*.parse_seq_len = */ 0, +#ifdef GGML_ALLOCATOR_DEBUG + /*.allocated_tensors = */ {0}, +#endif + }; + + ggml_allocr_reset(alloc); + + return alloc; +} + +// address and size of the buffer when measuring +// it needs to be large enough to fit all the tensors, but it cannot overlap with other existing buffers +static void * const MEASURE_BASE_ADDR = (void *) 0x1000; +static const size_t MEASURE_MAX_SIZE = 1ULL<<40; // 1 TB + +struct ggml_allocr * ggml_allocr_new_measure(size_t alignment) { + struct ggml_allocr * alloc = (struct ggml_allocr *)malloc(sizeof(struct ggml_allocr) /* + n_free_blocks * sizeof(struct free_block) */); + + *alloc = (struct ggml_allocr){ + /*.data = */ MEASURE_BASE_ADDR, + /*.size = */ MEASURE_MAX_SIZE, + /*.alignment = */ alignment, + /*.n_free_blocks = */ 0, + /*.free_blocks = */ {{0}}, + /*.hash_table = */ {{0}}, + /*.max_size = */ 0, + /*.measure = */ true, + /*.parse_seq = */ {0}, + /*.parse_seq_len = */ 0, +#ifdef GGML_ALLOCATOR_DEBUG + /*.allocated_tensors = */ {0}, +#endif + }; + + ggml_allocr_reset(alloc); + + return alloc; +} + +void ggml_allocr_free(struct ggml_allocr * alloc) { + free(alloc); +} + +bool ggml_allocr_is_measure(struct ggml_allocr * alloc) { + return alloc->measure; +} + +//////////// compute graph allocator + +static bool ggml_is_view(struct ggml_tensor * t) { + return t->op == GGML_OP_RESHAPE || t->op == GGML_OP_VIEW || t->op == GGML_OP_TRANSPOSE || + t->op == GGML_OP_PERMUTE || t->op == GGML_OP_CPY; +} + +static bool ggml_are_same_layout(const struct ggml_tensor * a, const struct ggml_tensor * b) { + if (a->type != b->type) { + return false; + } + for (int i = 0; i < GGML_MAX_DIMS; i++) { + if (a->ne[i] != b->ne[i]) { + return false; + } + if (a->nb[i] != b->nb[i]) { + return false; + } + } + return true; +} + +static struct ggml_tensor * get_view_parent(struct ggml_tensor * t) { + switch (t->op) { + case GGML_OP_PERMUTE: + case GGML_OP_RESHAPE: + case GGML_OP_TRANSPOSE: + case GGML_OP_VIEW: + return t->src[0]; + case GGML_OP_CPY: + return t->src[1]; + default: + return NULL; + } +} + +static struct ggml_tensor * get_view_source(struct ggml_tensor * t) { + struct ggml_tensor * parent = t; + do { + parent = get_view_parent(parent); + } while (ggml_is_view(parent)); + return parent; +} + +static bool ggml_op_can_inplace(enum ggml_op op) { + switch (op) { + case GGML_OP_SCALE: + case GGML_OP_DIAG_MASK_ZERO: + case GGML_OP_DIAG_MASK_INF: + case GGML_OP_ADD: + case GGML_OP_ADD1: + case GGML_OP_ACC: + case GGML_OP_SUB: + case GGML_OP_MUL: + case GGML_OP_DIV: + case GGML_OP_SQR: + case GGML_OP_SQRT: + case GGML_OP_LOG: + case GGML_OP_UNARY: + case GGML_OP_ROPE: + case GGML_OP_RMS_NORM: + case GGML_OP_SET: + case GGML_OP_SOFT_MAX: + case GGML_OP_CONT: + case GGML_OP_ADD_REL_POS: + return true; + + default: + return false; + } +} + +static void allocate_node(struct ggml_allocr * alloc, struct ggml_tensor * node) { + struct hash_node * ht = alloc->hash_table; + if (node->data == NULL) { + if (ggml_is_view(node)) { + size_t offset; + switch(node->op) { + case GGML_OP_VIEW: + memcpy(&offset, node->op_params, sizeof(size_t)); + node->data = (char *) node->src[0]->data + offset; + break; + case GGML_OP_PERMUTE: + case GGML_OP_RESHAPE: + case GGML_OP_TRANSPOSE: + node->data = node->src[0]->data; + break; + case GGML_OP_CPY: + node->data = node->src[1]->data; + break; + default: + GGML_ASSERT(!"unknown view op"); + break; + } + } else { + // see if we can reuse a parent's buffer (inplace) + if (ggml_op_can_inplace(node->op)) { + for (int i = 0; i < GGML_MAX_SRC; i++) { + struct ggml_tensor * parent = node->src[i]; + if (parent == NULL) { + break; + } + + // if the node's data is external, then we cannot re-use it + if ((char *) parent->data < (char *) alloc->data || + (char *) parent->data >= ((char *) alloc->data + alloc->size)) { + AT_PRINTF("not reusing parent %s for %s as %p is external\n", parent->name, node->name, parent->data); + continue; + } + + struct hash_node * p_hn = hash_get(ht, parent); + if (parent->data != NULL && p_hn->n_children == 1 && p_hn->n_views == 0 && ggml_are_same_layout(node, parent)) { + if (ggml_is_view(parent)) { + struct ggml_tensor * view_src = get_view_source(parent); + struct hash_node * view_src_hn = hash_get(ht, view_src); + if (view_src_hn->n_views == 1 && view_src_hn->n_children == 0 && view_src->data == parent->data) { + // TODO: the offset of the view parent must be kept to ensure that the op doesn't overwrite + // the parent's data that it will need later (same layout requirement). the problem is that then + // we cannot free the tensor because the original address of the allocation is lost. + // adding a view_src pointer to the tensor would solve this and simplify the code dealing with views + // for now, we only reuse the parent's data if the offset is zero (view_src->data == parent->data) + AT_PRINTF("reusing view parent %s (%s) for %s\n", parent->name, view_src->name, node->name); + node->data = parent->data; + return; + } + } + else { + AT_PRINTF("reusing parent %s for %s\n", parent->name, node->name); + node->data = parent->data; + return; + } + } + } + } + ggml_allocr_alloc(alloc, node); + } + } +} + +static size_t ggml_allocator_alloc_graph_tensors_n( + struct ggml_allocr * alloc, + struct ggml_cgraph ** graphs, int n_graphs, + struct ggml_tensor *** inputs, struct ggml_tensor *** outputs) { + + // reset hash table + struct hash_node * ht = alloc->hash_table; + memset(ht, 0, sizeof(struct hash_node) * GGML_GRAPH_HASHTABLE_SIZE); + + // count number of children and views + for (int g = 0; g < n_graphs; g++) { + struct ggml_cgraph * gf = graphs[g]; + for (int i = 0; i < gf->n_nodes; i++) { + struct ggml_tensor * node = gf->nodes[i]; + + if (ggml_is_view(node)) { + struct ggml_tensor * view_src = get_view_source(node); + hash_get(ht, view_src)->n_views += 1; + } + + for (int j = 0; j < GGML_MAX_SRC; j++) { + struct ggml_tensor * parent = node->src[j]; + if (parent == NULL) { + break; + } + hash_get(ht, parent)->n_children += 1; + } + } + } + + // allocate tensors + for (int g = 0; g < n_graphs; g++) { + struct ggml_cgraph * gf = graphs[g]; + AT_PRINTF("####### graph %d/%d\n", g, n_graphs); + // graph inputs are allocated first to ensure that they are not overwritten by each other + if (inputs != NULL && inputs[g] != NULL) { + for (int i = 0; inputs[g][i] != NULL; i++) { + struct ggml_tensor * input = inputs[g][i]; + AT_PRINTF("input: %s\n", input->name); + allocate_node(alloc, input); + } + } + // if we have parse_seq then we allocate nodes following the list, and we only free nodes at barriers + int last_barrier_pos = 0; + int n_nodes = alloc->parse_seq_len ? alloc->parse_seq_len : gf->n_nodes; + + for (int ind = 0; ind < n_nodes; ind++) { + // allocate a node if there is no parse_seq or this is not a barrier + if ((alloc->parse_seq_len==0) || alloc->parse_seq[ind] != -1) { + int i = alloc->parse_seq_len ? alloc->parse_seq[ind] : ind; + struct ggml_tensor * node = gf->nodes[i]; + + // allocate parents (leafs) + for (int j = 0; j < GGML_MAX_SRC; j++) { + struct ggml_tensor * parent = node->src[j]; + if (parent == NULL) { + break; + } + allocate_node(alloc, parent); + } + + // allocate node + allocate_node(alloc, node); + + AT_PRINTF("exec: %s (%s) <= ", ggml_op_name(node->op), node->name); + for (int j = 0; j < GGML_MAX_SRC; j++) { + struct ggml_tensor * parent = node->src[j]; + if (parent == NULL) { + break; + } + AT_PRINTF("%s", parent->name); + if (j < GGML_MAX_SRC - 1 && node->src[j + 1] != NULL) { + AT_PRINTF(", "); + } + } + AT_PRINTF("\n"); + } + + + // update parents + // update immediately if there is no parse_seq + // update only at barriers if there is parse_seq + if ((alloc->parse_seq_len==0) || alloc->parse_seq[ind] == -1) { + int update_start = alloc->parse_seq_len ? last_barrier_pos : ind; + int update_end = alloc->parse_seq_len ? ind : ind + 1; + for (int i = update_start; i < update_end; i++) { + int node_i = alloc->parse_seq_len ? alloc->parse_seq[i] : i; + struct ggml_tensor * node = gf->nodes[node_i]; + + for (int j = 0; j < GGML_MAX_SRC; j++) { + struct ggml_tensor * parent = node->src[j]; + if (parent == NULL) { + break; + } + struct hash_node * p_hn = hash_get(ht, parent); + p_hn->n_children -= 1; + + //AT_PRINTF("parent %s: %d children, %d views\n", parent->name, parent->n_children, parent->n_views); + + if (p_hn->n_children == 0 && p_hn->n_views == 0) { + if (ggml_is_view(parent)) { + struct ggml_tensor * view_src = get_view_source(parent); + struct hash_node * view_src_hn = hash_get(ht, view_src); + view_src_hn->n_views -= 1; + AT_PRINTF("view_src %s: %d children, %d views\n", view_src->name, view_src_hn->n_children, view_src_hn->n_views); + if (view_src_hn->n_views == 0 && view_src_hn->n_children == 0 && view_src->data != node->data) { + ggml_allocator_free_tensor(alloc, view_src); + } + } + else { + if (parent->data != node->data) { + ggml_allocator_free_tensor(alloc, parent); + } + } + } + } + } + AT_PRINTF("\n"); + if (alloc->parse_seq_len) { + last_barrier_pos = ind + 1; + } + } + } + // free graph outputs here that wouldn't be freed otherwise because they have no children + if (outputs != NULL && outputs[g] != NULL) { + for (int i = 0; outputs[g][i] != NULL; i++) { + struct ggml_tensor * output = outputs[g][i]; + AT_PRINTF("output: %s\n", output->name); + ggml_allocator_free_tensor(alloc, output); + } + } + } + + return alloc->max_size; +} + +size_t ggml_allocr_alloc_graph(struct ggml_allocr * alloc, struct ggml_cgraph * graph) { + return ggml_allocator_alloc_graph_tensors_n(alloc, &graph, 1, NULL, NULL); +} diff --git a/ggml-alloc.h b/ggml-alloc.h new file mode 100644 index 00000000..9559da75 --- /dev/null +++ b/ggml-alloc.h @@ -0,0 +1,26 @@ +#pragma once + +#include "ggml.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +GGML_API struct ggml_allocr * ggml_allocr_new(void * data, size_t size, size_t alignment); +GGML_API struct ggml_allocr * ggml_allocr_new_measure(size_t alignment); + +// tell the allocator to parse nodes following the order described in the list +// you should call this if your graph are optimized to execute out-of-order +GGML_API void ggml_allocr_set_parse_seq(struct ggml_allocr * alloc, const int * list, int n); + +GGML_API void ggml_allocr_free(struct ggml_allocr * alloc); +GGML_API bool ggml_allocr_is_measure(struct ggml_allocr * alloc); +GGML_API void ggml_allocr_reset(struct ggml_allocr * alloc); +GGML_API void ggml_allocr_alloc(struct ggml_allocr * alloc, struct ggml_tensor * tensor); +GGML_API size_t ggml_allocr_alloc_graph(struct ggml_allocr * alloc, struct ggml_cgraph * graph); + + +#ifdef __cplusplus +} +#endif diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 694e0bcb..391e6318 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -10,16 +10,23 @@ #include #include #include -#include +#ifdef __HIP_PLATFORM_AMD__ +// for rocblas_initialize() +#include "rocblas/rocblas.h" +#endif +#define CUBLAS_COMPUTE_32F HIPBLAS_R_32F +#define CUBLAS_COMPUTE_32F_FAST_16F HIPBLAS_R_32F +#define CUBLAS_GEMM_DEFAULT HIPBLAS_GEMM_DEFAULT #define CUBLAS_OP_N HIPBLAS_OP_N #define CUBLAS_OP_T HIPBLAS_OP_T #define CUBLAS_STATUS_SUCCESS HIPBLAS_STATUS_SUCCESS #define CUBLAS_TF32_TENSOR_OP_MATH 0 +#define CUDA_R_16F HIPBLAS_R_16F +#define CUDA_R_32F HIPBLAS_R_32F #define __shfl_xor_sync(mask, var, laneMask, width) __shfl_xor(var, laneMask, width) #define cublasCreate hipblasCreate -#define cublasGetStatusString rocblas_status_to_string +#define cublasGemmEx hipblasGemmEx #define cublasHandle_t hipblasHandle_t -#define cublasLoggerConfigure(logIsOn, logToStdOut, logToStdErr, logFileName) CUBLAS_STATUS_SUCCESS #define cublasSetMathMode(handle, mode) CUBLAS_STATUS_SUCCESS #define cublasSetStream hipblasSetStream #define cublasSgemm hipblasSgemm @@ -28,10 +35,10 @@ #define cudaDeviceSynchronize hipDeviceSynchronize #define cudaError_t hipError_t #define cudaEventCreateWithFlags hipEventCreateWithFlags -#define cudaEventDestroy hipEventDestroy #define cudaEventDisableTiming hipEventDisableTiming #define cudaEventRecord hipEventRecord #define cudaEvent_t hipEvent_t +#define cudaEventDestroy hipEventDestroy #define cudaFree hipFree #define cudaFreeHost hipHostFree #define cudaGetDevice hipGetDevice @@ -40,7 +47,7 @@ #define cudaGetErrorString hipGetErrorString #define cudaGetLastError hipGetLastError #define cudaMalloc hipMalloc -#define cudaMallocHost hipHostMalloc +#define cudaMallocHost(ptr, size) hipHostMalloc(ptr, size, hipHostMallocDefault) #define cudaMemcpy hipMemcpy #define cudaMemcpy2DAsync hipMemcpy2DAsync #define cudaMemcpyAsync hipMemcpyAsync @@ -49,9 +56,11 @@ #define cudaMemcpyHostToDevice hipMemcpyHostToDevice #define cudaMemcpyKind hipMemcpyKind #define cudaMemset hipMemset +#define cudaOccupancyMaxPotentialBlockSize hipOccupancyMaxPotentialBlockSize #define cudaSetDevice hipSetDevice #define cudaStreamCreateWithFlags hipStreamCreateWithFlags #define cudaStreamNonBlocking hipStreamNonBlocking +#define cudaStreamSynchronize hipStreamSynchronize #define cudaStreamWaitEvent(stream, event) hipStreamWaitEvent(stream, event, 0) #define cudaStream_t hipStream_t #define cudaSuccess hipSuccess @@ -64,6 +73,50 @@ #include "ggml-cuda.h" #include "ggml.h" +#define MIN_CC_DP4A 610 // minimum compute capability for __dp4a, an intrinsic for byte-wise dot products +#ifndef CC_TURING +#define CC_TURING 700 +#endif + +#if defined(GGML_USE_HIPBLAS) +#define __CUDA_ARCH__ 1300 + +typedef int8_t int8x4_t __attribute__((ext_vector_type(4))); +static __device__ __forceinline__ int __vsubss4(const int a, const int b) { + const int8x4_t va = reinterpret_cast(a); + const int8x4_t vb = reinterpret_cast(b); + const int8x4_t c = __builtin_elementwise_sub_sat(va, vb); + return reinterpret_cast(c); +} + +static __device__ __forceinline__ int __dp4a(const int a, const int b, int c) { +#if defined(__gfx906__) || defined(__gfx908__) || defined(__gfx90a__) || defined(__gfx1030__) + c = __builtin_amdgcn_sdot4(a, b, c, false); +#elif defined(__gfx1100__) + c = __builtin_amdgcn_sudot4( true, a, true, b, c, false); +#elif defined(__gfx1010__) || defined(__gfx900__) + int tmp1; + int tmp2; + asm("\n \ + v_mul_i32_i24 %1, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:BYTE_0 \n \ + v_mul_i32_i24 %2, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1 \n \ + v_add3_u32 %0, %1, %2, %0 \n \ + v_mul_i32_i24 %1, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_2 \n \ + v_mul_i32_i24 %2, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_3 \n \ + v_add3_u32 %0, %1, %2, %0 \n \ + " + : "+v"(c), "=&v"(tmp1), "=&v"(tmp2) + : "v"(a), "v"(b) + ); +#else + const int8x4_t va = reinterpret_cast(a); + const int8x4_t vb = reinterpret_cast(b); + c += va[0] * vb[0] + va[1] * vb[1] + va[2] * vb[2] + va[3] * vb[3]; +#endif + return c; +} +#endif + #if defined(_MSC_VER) #pragma warning(disable: 4244 4267) // possible loss of data #endif @@ -101,17 +154,45 @@ static_assert(sizeof(half) == sizeof(ggml_fp16_t), "wrong fp16 size"); } while (0) #endif // CUDART_VERSION >= 11 -#ifdef GGML_CUDA_DMMV_F16 +#ifdef GGML_CUDA_F16 typedef half dfloat; // dequantize float typedef half2 dfloat2; #else typedef float dfloat; // dequantize float typedef float2 dfloat2; -#endif //GGML_CUDA_DMMV_F16 +#endif //GGML_CUDA_F16 + +static __device__ __forceinline__ int get_int_from_int8(const int8_t * x8, const int & i32) { + const uint16_t * x16 = (uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment + + int x32 = 0; + x32 |= x16[0] << 0; + x32 |= x16[1] << 16; + + return x32; +} + +static __device__ __forceinline__ int get_int_from_uint8(const uint8_t * x8, const int & i32) { + const uint16_t * x16 = (uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment + + int x32 = 0; + x32 |= x16[0] << 0; + x32 |= x16[1] << 16; + + return x32; +} + +static __device__ __forceinline__ int get_int_from_int8_aligned(const int8_t * x8, const int & i32) { + return *((int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment +} + +static __device__ __forceinline__ int get_int_from_uint8_aligned(const uint8_t * x8, const int & i32) { + return *((int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment +} typedef void (*dequantize_kernel_t)(const void * vx, const int ib, const int iqs, dfloat2 & v); -typedef void (*to_fp32_cuda_t)(const void * x, float * y, int k, cudaStream_t stream); -typedef void (*dot_kernel_k_t)(const void * vx, const int ib, const int iqs, const float * y, float & v); +typedef void (*to_fp32_cuda_t)(const void * __restrict__ x, float * __restrict__ y, int k, cudaStream_t stream); +typedef void (*dot_kernel_k_t)(const void * __restrict__ vx, const int ib, const int iqs, const float * __restrict__ y, float & v); typedef void (*cpy_kernel_t)(const char * cx, char * cdst); typedef void (*ggml_cuda_func_t)(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst); typedef void (*ggml_cuda_op_t)( @@ -121,9 +202,11 @@ typedef void (*ggml_cuda_op_t)( // QK = number of values after dequantization // QR = QK / number of values before dequantization +// QI = number of 32 bit integers before dequantization #define QK4_0 32 #define QR4_0 2 +#define QI4_0 (QK4_0 / (4 * QR4_0)) typedef struct { half d; // delta uint8_t qs[QK4_0 / 2]; // nibbles / quants @@ -132,15 +215,16 @@ static_assert(sizeof(block_q4_0) == sizeof(ggml_fp16_t) + QK4_0 / 2, "wrong q4_0 #define QK4_1 32 #define QR4_1 2 +#define QI4_1 (QK4_1 / (4 * QR4_1)) typedef struct { - half d; // delta - half m; // min + half2 dm; // dm.x = delta, dm.y = min uint8_t qs[QK4_1 / 2]; // nibbles / quants } block_q4_1; static_assert(sizeof(block_q4_1) == sizeof(ggml_fp16_t) * 2 + QK4_1 / 2, "wrong q4_1 block size/padding"); #define QK5_0 32 #define QR5_0 2 +#define QI5_0 (QK5_0 / (4 * QR5_0)) typedef struct { half d; // delta uint8_t qh[4]; // 5-th bit of quants @@ -150,9 +234,9 @@ static_assert(sizeof(block_q5_0) == sizeof(ggml_fp16_t) + sizeof(uint32_t) + QK5 #define QK5_1 32 #define QR5_1 2 +#define QI5_1 (QK5_1 / (4 * QR5_1)) typedef struct { - half d; // delta - half m; // min + half2 dm; // dm.x = delta, dm.y = min uint8_t qh[4]; // 5-th bit of quants uint8_t qs[QK5_1 / 2]; // nibbles / quants } block_q5_1; @@ -160,12 +244,31 @@ static_assert(sizeof(block_q5_1) == 2 * sizeof(ggml_fp16_t) + sizeof(uint32_t) + #define QK8_0 32 #define QR8_0 1 +#define QI8_0 (QK8_0 / (4 * QR8_0)) typedef struct { half d; // delta int8_t qs[QK8_0]; // quants } block_q8_0; static_assert(sizeof(block_q8_0) == sizeof(ggml_fp16_t) + QK8_0, "wrong q8_0 block size/padding"); +#define QK8_1 32 +#define QR8_1 1 +#define QI8_1 (QK8_1 / (4 * QR8_1)) +typedef struct { + half2 ds; // ds.x = delta, ds.y = sum + int8_t qs[QK8_0]; // quants +} block_q8_1; +static_assert(sizeof(block_q8_1) == 2*sizeof(ggml_fp16_t) + QK8_0, "wrong q8_1 block size/padding"); + +typedef float (*vec_dot_q_cuda_t)(const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs); +typedef void (*allocate_tiles_cuda_t)(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc); +typedef void (*load_tiles_cuda_t)( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row); +typedef float (*vec_dot_q_mul_mat_cuda_t)( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ms, const int & i, const int & j, const int & k); + //================================= k-quants #ifdef GGML_QKK_64 @@ -176,14 +279,17 @@ static_assert(sizeof(block_q8_0) == sizeof(ggml_fp16_t) + QK8_0, "wrong q8_0 blo #define K_SCALE_SIZE 12 #endif +#define QR2_K 4 +#define QI2_K (QK_K / (4*QR2_K)) typedef struct { uint8_t scales[QK_K/16]; // scales and mins, quantized with 4 bits uint8_t qs[QK_K/4]; // quants - half d; // super-block scale for quantized scales - half dmin; // super-block scale for quantized mins + half2 dm; // super-block scale for quantized scales/mins } block_q2_K; static_assert(sizeof(block_q2_K) == 2*sizeof(ggml_fp16_t) + QK_K/16 + QK_K/4, "wrong q2_K block size/padding"); +#define QR3_K 4 +#define QI3_K (QK_K / (4*QR3_K)) typedef struct { uint8_t hmask[QK_K/8]; // quants - high bit uint8_t qs[QK_K/4]; // quants - low 2 bits @@ -196,23 +302,26 @@ typedef struct { } block_q3_K; //static_assert(sizeof(block_q3_K) == sizeof(ggml_fp16_t) + QK_K / 4 + QK_K / 8 + K_SCALE_SIZE, "wrong q3_K block size/padding"); +#define QR4_K 2 +#define QI4_K (QK_K / (4*QR4_K)) #ifdef GGML_QKK_64 typedef struct { - half d[2]; // super-block scales/mins + half dm[2]; // super-block scales/mins uint8_t scales[2]; // 4-bit block scales/mins uint8_t qs[QK_K/2]; // 4--bit quants } block_q4_K; -static_assert(sizeof(block_q4_K) == 2*sizeof(ggml_fp16_t) + QK_K/2 + 2, "wrong q4_K block size/padding"); +static_assert(sizeof(block_q4_K) == sizeof(half2) + QK_K/2 + 2, "wrong q4_K block size/padding"); #else typedef struct { - half d; // super-block scale for quantized scales - half dmin; // super-block scale for quantized mins + half2 dm; // super-block scale for quantized scales/mins uint8_t scales[3*QK_K/64]; // scales, quantized with 6 bits uint8_t qs[QK_K/2]; // 4--bit quants } block_q4_K; static_assert(sizeof(block_q4_K) == 2*sizeof(ggml_fp16_t) + 3*QK_K/64 + QK_K/2, "wrong q4_K block size/padding"); #endif +#define QR5_K 2 +#define QI5_K (QK_K / (4*QR5_K)) #ifdef GGML_QKK_64 typedef struct { half d; // super-block scale @@ -223,15 +332,16 @@ typedef struct { static_assert(sizeof(block_q5_K) == sizeof(ggml_fp16_t) + QK_K/2 + QK_K/8 + QK_K/16, "wrong q5_K block size/padding"); #else typedef struct { - half d; // super-block scale for quantized scales - half dmin; // super-block scale for quantized mins - uint8_t scales[K_SCALE_SIZE]; // scales and mins, quantized with 6 bits - uint8_t qh[QK_K/8]; // quants, high bit - uint8_t qs[QK_K/2]; // quants, low 4 bits + half2 dm; // super-block scale for quantized scales/mins + uint8_t scales[K_SCALE_SIZE]; // scales and mins, quantized with 6 bits + uint8_t qh[QK_K/8]; // quants, high bit + uint8_t qs[QK_K/2]; // quants, low 4 bits } block_q5_K; static_assert(sizeof(block_q5_K) == 2*sizeof(ggml_fp16_t) + K_SCALE_SIZE + QK_K/2 + QK_K/8, "wrong q5_K block size/padding"); #endif +#define QR6_K 2 +#define QI6_K (QK_K / (4*QR6_K)) typedef struct { uint8_t ql[QK_K/2]; // quants, lower 4 bits uint8_t qh[QK_K/4]; // quants, upper 2 bits @@ -241,22 +351,26 @@ typedef struct { static_assert(sizeof(block_q6_K) == sizeof(ggml_fp16_t) + 13*QK_K/16, "wrong q6_K block size/padding"); #define WARP_SIZE 32 +#define MATRIX_ROW_PADDING 512 // last row of quant. matrices is a multiple of this to avoid out-of-bounds memory accesses #define CUDA_ADD_BLOCK_SIZE 256 #define CUDA_MUL_BLOCK_SIZE 256 +#define CUDA_GELU_BLOCK_SIZE 256 #define CUDA_SILU_BLOCK_SIZE 256 #define CUDA_CPY_BLOCK_SIZE 32 #define CUDA_SCALE_BLOCK_SIZE 256 #define CUDA_ROPE_BLOCK_SIZE 256 +#define CUDA_ALIBI_BLOCK_SIZE 32 #define CUDA_DIAG_MASK_INF_BLOCK_SIZE 32 +#define CUDA_QUANTIZE_BLOCK_SIZE 256 #define CUDA_DEQUANTIZE_BLOCK_SIZE 256 // dmmv = dequantize_mul_mat_vec #ifndef GGML_CUDA_DMMV_X #define GGML_CUDA_DMMV_X 32 #endif -#ifndef GGML_CUDA_DMMV_Y -#define GGML_CUDA_DMMV_Y 1 +#ifndef GGML_CUDA_MMV_Y +#define GGML_CUDA_MMV_Y 1 #endif #ifndef K_QUANTS_PER_ITERATION @@ -270,13 +384,27 @@ struct ggml_tensor_extra_gpu { cudaEvent_t events[GGML_CUDA_MAX_DEVICES]; // events for synchronizing multiple GPUs }; -static __global__ void add_f32(const float * x, const float * y, float * dst, const int k) { +static int g_device_count = -1; +static int g_main_device = 0; +static int g_compute_capabilities[GGML_CUDA_MAX_DEVICES]; +static float g_tensor_split[GGML_CUDA_MAX_DEVICES] = {0}; +static bool g_mul_mat_q = true; + +static void * g_scratch_buffer = nullptr; +static size_t g_scratch_size = 1024*1024*1024; // 1 GB by default +static size_t g_scratch_offset = 0; + +static cublasHandle_t g_cublas_handles[GGML_CUDA_MAX_DEVICES] = {nullptr}; + +static cudaStream_t g_cudaStreams_main[GGML_CUDA_MAX_DEVICES] = { nullptr }; + +static __global__ void add_f32(const float * x, const float * y, float * dst, const int kx, const int ky) { const int i = blockDim.x*blockIdx.x + threadIdx.x; - if (i >= k) { + if (i >= kx) { return; } - dst[i] = x[i] + y[i]; + dst[i] = x[i] + y[i%ky]; } static __global__ void add_f16_f32_f16(const half * x, const float * y, half * dst, const int k) { @@ -297,6 +425,19 @@ static __global__ void mul_f32(const float * x, const float * y, float * dst, co dst[i] = x[i] * y[i%ky]; } +static __global__ void gelu_f32(const float * x, float * dst, const int k) { + const float GELU_COEF_A = 0.044715f; + const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f; + const int i = blockDim.x*blockIdx.x + threadIdx.x; + + if (i >= k) { + return; + } + + float xi = x[i]; + dst[i] = 0.5f*xi*(1.0f + tanhf(SQRT_2_OVER_PI*xi*(1.0f + GELU_COEF_A*xi*xi))); +} + static __global__ void silu_f32(const float * x, float * dst, const int k) { const int i = blockDim.x*blockIdx.x + threadIdx.x; @@ -306,32 +447,58 @@ static __global__ void silu_f32(const float * x, float * dst, const int k) { dst[i] = x[i] / (1.0f + expf(-x[i])); } -static __global__ void rms_norm_f32(const float * x, float * dst, const int ncols) { +static __global__ void norm_f32(const float * x, float * dst, const int ncols) { const int row = blockIdx.x*blockDim.y + threadIdx.y; const int tid = threadIdx.x; - const float eps = 1e-6; + const float eps = 1e-5f; + + float mean = 0.0f; + float var = 0.0f; + + for (int col = tid; col < ncols; col += WARP_SIZE) { + const float xi = x[row*ncols + col]; + mean += xi; + var += xi * xi; + } + + // sum up partial sums +#pragma unroll + for (int mask = 16; mask > 0; mask >>= 1) { + mean += __shfl_xor_sync(0xffffffff, mean, mask, 32); + var += __shfl_xor_sync(0xffffffff, var, mask, 32); + } + + mean /= ncols; + var = var / ncols - mean * mean; + const float inv_var = rsqrtf(var + eps); + + for (int col = tid; col < ncols; col += WARP_SIZE) { + dst[row*ncols + col] = (x[row*ncols + col] - mean) * inv_var; + } +} + +static __global__ void rms_norm_f32(const float * x, float * dst, const int ncols, const float eps) { + const int row = blockIdx.x*blockDim.y + threadIdx.y; + const int tid = threadIdx.x; float tmp = 0.0f; // partial sum for thread in warp - for (int i = 0; i < ncols; i += WARP_SIZE) { - const int col = i + tid; + for (int col = tid; col < ncols; col += WARP_SIZE) { const float xi = x[row*ncols + col]; tmp += xi * xi; } // sum up partial sums - __syncthreads(); #pragma unroll for (int mask = 16; mask > 0; mask >>= 1) { tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); } const float mean = tmp / ncols; - const float scale = 1.0f / sqrtf(mean + eps); + const float scale = rsqrtf(mean + eps); - for (int i = 0; i < ncols; i += WARP_SIZE) { - const int col = i + tid; + for (int col = tid; col < ncols; col += WARP_SIZE) { dst[row*ncols + col] = scale * x[row*ncols + col]; } } @@ -346,33 +513,33 @@ static __device__ __forceinline__ void dequantize_q4_0(const void * vx, const in v.x = vui & 0xF; v.y = vui >> 4; -#ifdef GGML_CUDA_DMMV_F16 +#ifdef GGML_CUDA_F16 v = __hsub2(v, {8.0f, 8.0f}); v = __hmul2(v, {d, d}); #else v.x = (v.x - 8.0f) * d; v.y = (v.y - 8.0f) * d; -#endif // GGML_CUDA_DMMV_F16 +#endif // GGML_CUDA_F16 } static __device__ __forceinline__ void dequantize_q4_1(const void * vx, const int ib, const int iqs, dfloat2 & v){ const block_q4_1 * x = (const block_q4_1 *) vx; - const dfloat d = x[ib].d; - const dfloat m = x[ib].m; + const dfloat d = __low2half(x[ib].dm); + const dfloat m = __high2half(x[ib].dm); const int vui = x[ib].qs[iqs]; v.x = vui & 0xF; v.y = vui >> 4; -#ifdef GGML_CUDA_DMMV_F16 +#ifdef GGML_CUDA_F16 v = __hmul2(v, {d, d}); v = __hadd2(v, {m, m}); #else v.x = (v.x * d) + m; v.y = (v.y * d) + m; -#endif // GGML_CUDA_DMMV_F16 +#endif // GGML_CUDA_F16 } static __device__ __forceinline__ void dequantize_q5_0(const void * vx, const int ib, const int iqs, dfloat2 & v){ @@ -389,20 +556,20 @@ static __device__ __forceinline__ void dequantize_q5_0(const void * vx, const in v.x = ((x[ib].qs[iqs] & 0xf) | xh_0); v.y = ((x[ib].qs[iqs] >> 4) | xh_1); -#ifdef GGML_CUDA_DMMV_F16 +#ifdef GGML_CUDA_F16 v = __hsub2(v, {16.0f, 16.0f}); v = __hmul2(v, {d, d}); #else v.x = (v.x - 16.0f) * d; v.y = (v.y - 16.0f) * d; -#endif // GGML_CUDA_DMMV_F16 +#endif // GGML_CUDA_F16 } static __device__ __forceinline__ void dequantize_q5_1(const void * vx, const int ib, const int iqs, dfloat2 & v){ const block_q5_1 * x = (const block_q5_1 *) vx; - const dfloat d = x[ib].d; - const dfloat m = x[ib].m; + const dfloat d = __low2half(x[ib].dm); + const dfloat m = __high2half(x[ib].dm); uint32_t qh; memcpy(&qh, x[ib].qh, sizeof(qh)); @@ -413,13 +580,13 @@ static __device__ __forceinline__ void dequantize_q5_1(const void * vx, const in v.x = ((x[ib].qs[iqs] & 0xf) | xh_0); v.y = ((x[ib].qs[iqs] >> 4) | xh_1); -#ifdef GGML_CUDA_DMMV_F16 +#ifdef GGML_CUDA_F16 v = __hmul2(v, {d, d}); v = __hadd2(v, {m, m}); #else v.x = (v.x * d) + m; v.y = (v.y * d) + m; -#endif // GGML_CUDA_DMMV_F16 +#endif // GGML_CUDA_F16 } static __device__ __forceinline__ void dequantize_q8_0(const void * vx, const int ib, const int iqs, dfloat2 & v){ @@ -430,17 +597,17 @@ static __device__ __forceinline__ void dequantize_q8_0(const void * vx, const in v.x = x[ib].qs[iqs + 0]; v.y = x[ib].qs[iqs + 1]; -#ifdef GGML_CUDA_DMMV_F16 +#ifdef GGML_CUDA_F16 v = __hmul2(v, {d, d}); #else v.x *= d; v.y *= d; -#endif // GGML_CUDA_DMMV_F16 +#endif // GGML_CUDA_F16 } //================================== k-quants -static __global__ void dequantize_block_q2_K(const void * vx, float * yy) { +static __global__ void dequantize_block_q2_K(const void * __restrict__ vx, float * __restrict__ yy) { const int i = blockIdx.x; const block_q2_K * x = (const block_q2_K *) vx; @@ -454,8 +621,8 @@ static __global__ void dequantize_block_q2_K(const void * vx, float * yy) { const uint8_t q = x[i].qs[32*n + l]; float * y = yy + i*QK_K + 128*n; - float dall = x[i].d; - float dmin = x[i].dmin; + float dall = __low2half(x[i].dm); + float dmin = __high2half(x[i].dm); y[l+ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4); y[l+32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 2) & 3) - dmin * (x[i].scales[is+2] >> 4); y[l+64] = dall * (x[i].scales[is+4] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+4] >> 4); @@ -465,15 +632,15 @@ static __global__ void dequantize_block_q2_K(const void * vx, float * yy) { const int il = tid%16; // 0...15 const uint8_t q = x[i].qs[il] >> (2*is); float * y = yy + i*QK_K + 16*is + il; - float dall = x[i].d; - float dmin = x[i].dmin; + float dall = __low2half(x[i].dm); + float dmin = __high2half(x[i].dm); y[ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4); y[32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+2] >> 4); #endif } -static __global__ void dequantize_block_q3_K(const void * vx, float * yy) { +static __global__ void dequantize_block_q3_K(const void * __restrict__ vx, float * __restrict__ yy) { const int i = blockIdx.x; const block_q3_K * x = (const block_q3_K *) vx; @@ -537,7 +704,7 @@ static inline __device__ void get_scale_min_k4(int j, const uint8_t * q, uint8_t } #endif -static __global__ void dequantize_block_q4_K(const void * vx, float * yy) { +static __global__ void dequantize_block_q4_K(const void * __restrict__ vx, float * __restrict__ yy) { const block_q4_K * x = (const block_q4_K *) vx; const int i = blockIdx.x; @@ -552,8 +719,8 @@ static __global__ void dequantize_block_q4_K(const void * vx, float * yy) { float * y = yy + i*QK_K + 64*il + n*ir; - const float dall = x[i].d; - const float dmin = x[i].dmin; + const float dall = __low2half(x[i].dm); + const float dmin = __high2half(x[i].dm); const uint8_t * q = x[i].qs + 32*il + n*ir; @@ -570,14 +737,14 @@ static __global__ void dequantize_block_q4_K(const void * vx, float * yy) { const int tid = threadIdx.x; const uint8_t * q = x[i].qs; float * y = yy + i*QK_K; - const float d = (float)x[i].d[0]; - const float m = (float)x[i].d[1]; + const float d = (float)x[i].dm[0]; + const float m = (float)x[i].dm[1]; y[tid+ 0] = d * (x[i].scales[0] & 0xF) * (q[tid] & 0xF) - m * (x[i].scales[0] >> 4); y[tid+32] = d * (x[i].scales[1] & 0xF) * (q[tid] >> 4) - m * (x[i].scales[1] >> 4); #endif } -static __global__ void dequantize_block_q5_K(const void * vx, float * yy) { +static __global__ void dequantize_block_q5_K(const void * __restrict__ vx, float * __restrict__ yy) { const block_q5_K * x = (const block_q5_K *) vx; const int i = blockIdx.x; @@ -591,8 +758,8 @@ static __global__ void dequantize_block_q5_K(const void * vx, float * yy) { float * y = yy + i*QK_K + 64*il + 2*ir; - const float dall = x[i].d; - const float dmin = x[i].dmin; + const float dall = __low2half(x[i].dm); + const float dmin = __high2half(x[i].dm); const uint8_t * ql = x[i].qs + 32*il + 2*ir; const uint8_t * qh = x[i].qh + 2*ir; @@ -623,7 +790,7 @@ static __global__ void dequantize_block_q5_K(const void * vx, float * yy) { #endif } -static __global__ void dequantize_block_q6_K(const void * vx, float * yy) { +static __global__ void dequantize_block_q6_K(const void * __restrict__ vx, float * __restrict__ yy) { const block_q6_K * x = (const block_q6_K *) vx; const int i = blockIdx.x; @@ -667,7 +834,7 @@ static __global__ void dequantize_block_q6_K(const void * vx, float * yy) { #endif } -static __global__ void dequantize_mul_mat_vec_q2_k(const void * vx, const float * yy, float * dst, const int ncols, int nrows) { +static __global__ void dequantize_mul_mat_vec_q2_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) { static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION"); @@ -704,8 +871,8 @@ static __global__ void dequantize_mul_mat_vec_q2_k(const void * vx, const float const float * y = yy + i * QK_K + y_offset; const uint8_t * q = x[i].qs + q_offset; - const float dall = x[i].d; - const float dmin = x[i].dmin; + const float dall = __low2half(x[i].dm); + const float dmin = __high2half(x[i].dm); const uint32_t * a = (const uint32_t *)(x[i].scales + s_offset); aux[0] = a[0] & 0x0f0f0f0f; @@ -747,9 +914,7 @@ static __global__ void dequantize_mul_mat_vec_q2_k(const void * vx, const float uaux[0] = s[0] & 0x0f0f0f0f; uaux[1] = (s[0] >> 4) & 0x0f0f0f0f; - const half2 * dh = (const half2 *)&x[i].d; - - const float2 dall = __half22float2(dh[0]); + const float2 dall = __half22float2(x[i].dm); float sum1 = 0, sum2 = 0; for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) { @@ -765,7 +930,6 @@ static __global__ void dequantize_mul_mat_vec_q2_k(const void * vx, const float #endif // sum up partial sums and write back result - __syncthreads(); #pragma unroll for (int mask = 16; mask > 0; mask >>= 1) { tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); @@ -776,7 +940,7 @@ static __global__ void dequantize_mul_mat_vec_q2_k(const void * vx, const float } } -static __global__ void dequantize_mul_mat_vec_q3_k(const void * vx, const float * yy, float * dst, const int ncols, int nrows) { +static __global__ void dequantize_mul_mat_vec_q3_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) { const int row = blockIdx.y*blockDim.y + threadIdx.y; if (row > nrows) return; @@ -870,7 +1034,6 @@ static __global__ void dequantize_mul_mat_vec_q3_k(const void * vx, const float #endif // sum up partial sums and write back result - __syncthreads(); #pragma unroll for (int mask = 16; mask > 0; mask >>= 1) { tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); @@ -881,7 +1044,7 @@ static __global__ void dequantize_mul_mat_vec_q3_k(const void * vx, const float } } -static __global__ void dequantize_mul_mat_vec_q4_k(const void * vx, const float * yy, float * dst, const int ncols, int nrows) { +static __global__ void dequantize_mul_mat_vec_q4_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) { const int row = blockIdx.y*blockDim.y + threadIdx.y; if (row > nrows) return; @@ -914,17 +1077,23 @@ static __global__ void dequantize_mul_mat_vec_q4_k(const void * vx, const float uint16_t aux[4]; const uint8_t * sc = (const uint8_t *)aux; +#if K_QUANTS_PER_ITERATION == 2 + uint32_t q32[4]; + const uint8_t * q4 = (const uint8_t *)q32; +#else + uint16_t q16[4]; + const uint8_t * q4 = (const uint8_t *)q16; +#endif + float tmp = 0; // partial sum for thread in warp for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) { - const uint8_t * q1 = x[i].qs + q_offset; - const uint8_t * q2 = q1 + 64; const float * y1 = yy + i*QK_K + y_offset; const float * y2 = y1 + 128; - const float dall = x[i].d; - const float dmin = x[i].dmin; + const float dall = __low2half(x[i].dm); + const float dmin = __high2half(x[i].dm); const uint16_t * a = (const uint16_t *)x[i].scales; aux[0] = a[im+0] & kmask1; @@ -932,14 +1101,41 @@ static __global__ void dequantize_mul_mat_vec_q4_k(const void * vx, const float aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2); aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2); +#if K_QUANTS_PER_ITERATION == 2 + const uint32_t * q1 = (const uint32_t *)(x[i].qs + q_offset); + const uint32_t * q2 = q1 + 16; + + q32[0] = q1[0] & 0x0f0f0f0f; + q32[1] = q1[0] & 0xf0f0f0f0; + q32[2] = q2[0] & 0x0f0f0f0f; + q32[3] = q2[0] & 0xf0f0f0f0; + float4 s = {0.f, 0.f, 0.f, 0.f}; float smin = 0; - for (int l = 0; l < n; ++l) { - s.x += y1[l] * (q1[l] & 0xF); s.y += y1[l+32] * (q1[l] >> 4); - s.z += y2[l] * (q2[l] & 0xF); s.w += y2[l+32] * (q2[l] >> 4); + for (int l = 0; l < 4; ++l) { + s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+ 4]; + s.z += y2[l] * q4[l+8]; s.w += y2[l+32] * q4[l+12]; smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7]; } - tmp += dall * (s.x * sc[0] + s.y * sc[1] + s.z * sc[4] + s.w * sc[5]) - dmin * smin; + tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin; +#else + const uint16_t * q1 = (const uint16_t *)(x[i].qs + q_offset); + const uint16_t * q2 = q1 + 32; + + q16[0] = q1[0] & 0x0f0f; + q16[1] = q1[0] & 0xf0f0; + q16[2] = q2[0] & 0x0f0f; + q16[3] = q2[0] & 0xf0f0; + + float4 s = {0.f, 0.f, 0.f, 0.f}; + float smin = 0; + for (int l = 0; l < 2; ++l) { + s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+2]; + s.z += y2[l] * q4[l+4]; s.w += y2[l+32] * q4[l+6]; + smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7]; + } + tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin; +#endif } #else @@ -959,8 +1155,8 @@ static __global__ void dequantize_mul_mat_vec_q4_k(const void * vx, const float const uint16_t * a = (const uint16_t *)x[i].scales; aux16[0] = a[0] & 0x0f0f; aux16[1] = (a[0] >> 4) & 0x0f0f; - const float d = (float)x[i].d[0]; - const float m = (float)x[i].d[1]; + const float d = (float)x[i].dm[0]; + const float m = (float)x[i].dm[1]; float sum = 0.f; for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) { sum += y[j+ 0] * (d * s[0] * (q[j+ 0] & 0xF) - m * s[2]) @@ -974,7 +1170,6 @@ static __global__ void dequantize_mul_mat_vec_q4_k(const void * vx, const float #endif // sum up partial sums and write back result - __syncthreads(); #pragma unroll for (int mask = 16; mask > 0; mask >>= 1) { tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); @@ -985,7 +1180,7 @@ static __global__ void dequantize_mul_mat_vec_q4_k(const void * vx, const float } } -static __global__ void dequantize_mul_mat_vec_q5_k(const void * vx, const float * yy, float * dst, const int ncols) { +static __global__ void dequantize_mul_mat_vec_q5_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols) { const int row = blockIdx.x; const int num_blocks_per_row = ncols / QK_K; @@ -1020,16 +1215,18 @@ static __global__ void dequantize_mul_mat_vec_q5_k(const void * vx, const float uint16_t aux[4]; const uint8_t * sc = (const uint8_t *)aux; + uint16_t q16[8]; + const uint8_t * q4 = (const uint8_t *)q16; + for (int i = ix; i < num_blocks_per_row; i += 2) { const uint8_t * ql1 = x[i].qs + q_offset; - const uint8_t * ql2 = ql1 + 64; const uint8_t * qh = x[i].qh + l0; const float * y1 = yy + i*QK_K + y_offset; const float * y2 = y1 + 128; - const float dall = x[i].d; - const float dmin = x[i].dmin; + const float dall = __low2half(x[i].dm); + const float dmin = __high2half(x[i].dm); const uint16_t * a = (const uint16_t *)x[i].scales; aux[0] = a[im+0] & kmask1; @@ -1039,15 +1236,25 @@ static __global__ void dequantize_mul_mat_vec_q5_k(const void * vx, const float float4 sum = {0.f, 0.f, 0.f, 0.f}; float smin = 0; + const uint16_t * q1 = (const uint16_t *)ql1; + const uint16_t * q2 = q1 + 32; + q16[0] = q1[0] & 0x0f0f; + q16[1] = q1[8] & 0x0f0f; + q16[2] = (q1[0] >> 4) & 0x0f0f; + q16[3] = (q1[8] >> 4) & 0x0f0f; + q16[4] = q2[0] & 0x0f0f; + q16[5] = q2[8] & 0x0f0f; + q16[6] = (q2[0] >> 4) & 0x0f0f; + q16[7] = (q2[8] >> 4) & 0x0f0f; for (int l = 0; l < n; ++l) { - sum.x += y1[l+ 0] * ((ql1[l+ 0] & 0xF) + (qh[l+ 0] & (hm1 << 0) ? 16 : 0)) - + y1[l+16] * ((ql1[l+16] & 0xF) + (qh[l+16] & (hm1 << 0) ? 16 : 0)); - sum.y += y1[l+32] * ((ql1[l+ 0] >> 4) + (qh[l+ 0] & (hm1 << 1) ? 16 : 0)) - + y1[l+48] * ((ql1[l+16] >> 4) + (qh[l+16] & (hm1 << 1) ? 16 : 0)); - sum.z += y2[l+ 0] * ((ql2[l+ 0] & 0xF) + (qh[l+ 0] & (hm2 << 0) ? 16 : 0)) - + y2[l+16] * ((ql2[l+16] & 0xF) + (qh[l+16] & (hm2 << 0) ? 16 : 0)); - sum.w += y2[l+32] * ((ql2[l+ 0] >> 4) + (qh[l+ 0] & (hm2 << 1) ? 16 : 0)) - + y2[l+48] * ((ql2[l+16] >> 4) + (qh[l+16] & (hm2 << 1) ? 16 : 0)); + sum.x += y1[l+ 0] * (q4[l +0] + (qh[l+ 0] & (hm1 << 0) ? 16 : 0)) + + y1[l+16] * (q4[l +2] + (qh[l+16] & (hm1 << 0) ? 16 : 0)); + sum.y += y1[l+32] * (q4[l +4] + (qh[l+ 0] & (hm1 << 1) ? 16 : 0)) + + y1[l+48] * (q4[l +6] + (qh[l+16] & (hm1 << 1) ? 16 : 0)); + sum.z += y2[l+ 0] * (q4[l +8] + (qh[l+ 0] & (hm2 << 0) ? 16 : 0)) + + y2[l+16] * (q4[l+10] + (qh[l+16] & (hm2 << 0) ? 16 : 0)); + sum.w += y2[l+32] * (q4[l+12] + (qh[l+ 0] & (hm2 << 1) ? 16 : 0)) + + y2[l+48] * (q4[l+14] + (qh[l+16] & (hm2 << 1) ? 16 : 0)); smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3] + (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7]; } @@ -1079,7 +1286,6 @@ static __global__ void dequantize_mul_mat_vec_q5_k(const void * vx, const float #endif // sum up partial sums and write back result - __syncthreads(); #pragma unroll for (int mask = 16; mask > 0; mask >>= 1) { tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); @@ -1090,7 +1296,7 @@ static __global__ void dequantize_mul_mat_vec_q5_k(const void * vx, const float } } -static __global__ void dequantize_mul_mat_vec_q6_k(const void * vx, const float * yy, float * dst, const int ncols, int nrows) { +static __global__ void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) { static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION"); @@ -1190,7 +1396,6 @@ static __global__ void dequantize_mul_mat_vec_q6_k(const void * vx, const float #endif // sum up partial sums and write back result - __syncthreads(); #pragma unroll for (int mask = 16; mask > 0; mask >>= 1) { tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); @@ -1209,8 +1414,47 @@ static __device__ void convert_f16(const void * vx, const int ib, const int iqs, v.y = x[ib + iqs + 1]; } +static __global__ void quantize_q8_1(const float * __restrict__ x, void * __restrict__ vy, const int kx, const int kx_padded) { + const int ix = blockDim.x*blockIdx.x + threadIdx.x; + + if (ix >= kx_padded) { + return; + } + + const int iy = blockDim.y*blockIdx.y + threadIdx.y; + + const int i_padded = iy*kx_padded + ix; + + block_q8_1 * y = (block_q8_1 *) vy; + + const int ib = i_padded / QK8_1; // block index + const int iqs = i_padded % QK8_1; // quant index + + const float xi = ix < kx ? x[iy*kx + ix] : 0.0f; + float amax = fabsf(xi); + float sum = xi; + +#pragma unroll + for (int mask = 16; mask > 0; mask >>= 1) { + amax = fmaxf(amax, __shfl_xor_sync(0xffffffff, amax, mask, 32)); + sum += __shfl_xor_sync(0xffffffff, sum, mask, 32); + } + + const float d = amax / 127; + const int8_t q = amax == 0.0f ? 0 : roundf(xi / d); + + y[ib].qs[iqs] = q; + + if (iqs > 0) { + return; + } + + reinterpret_cast(y[ib].ds.x) = d; + reinterpret_cast(y[ib].ds.y) = sum; +} + template -static __global__ void dequantize_block(const void * vx, float * y, const int k) { +static __global__ void dequantize_block(const void * __restrict__ vx, float * __restrict__ y, const int k) { const int i = blockDim.x*blockIdx.x + 2*threadIdx.x; if (i >= k) { @@ -1230,8 +1474,2322 @@ static __global__ void dequantize_block(const void * vx, float * y, const int k) y[iybs + iqs + y_offset] = v.y; } +// VDR = vec dot ratio, how many contiguous integers each thread processes when the vec dot kernel is called +// MMVQ = mul_mat_vec_q, MMQ = mul_mat_q + +#define VDR_Q4_0_Q8_1_MMVQ 2 +#define VDR_Q4_0_Q8_1_MMQ 4 + +template static __device__ __forceinline__ float vec_dot_q4_0_q8_1_impl( + const int * v, const int * u, const float & d4, const half2 & ds8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + int sumi = 0; + +#pragma unroll + for (int i = 0; i < vdr; ++i) { + const int vi0 = (v[i] >> 0) & 0x0F0F0F0F; + const int vi1 = (v[i] >> 4) & 0x0F0F0F0F; + + // SIMD dot product of quantized values + sumi = __dp4a(vi0, u[2*i+0], sumi); + sumi = __dp4a(vi1, u[2*i+1], sumi); + } + + const float2 ds8f = __half22float2(ds8); + + // second part effectively subtracts 8 from each quant value + return d4 * (sumi * ds8f.x - (8*vdr/QI4_0) * ds8f.y); +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +#define VDR_Q4_1_Q8_1_MMVQ 2 +#define VDR_Q4_1_Q8_1_MMQ 4 + +template static __device__ __forceinline__ float vec_dot_q4_1_q8_1_impl( + const int * v, const int * u, const half2 & dm4, const half2 & ds8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + int sumi = 0; + +#pragma unroll + for (int i = 0; i < vdr; ++i) { + const int vi0 = (v[i] >> 0) & 0x0F0F0F0F; + const int vi1 = (v[i] >> 4) & 0x0F0F0F0F; + + // SIMD dot product of quantized values + sumi = __dp4a(vi0, u[2*i+0], sumi); + sumi = __dp4a(vi1, u[2*i+1], sumi); + } + +#ifdef GGML_CUDA_F16 + const float2 tmp = __half22float2(__hmul2(dm4, ds8)); + const float d4d8 = tmp.x; + const float m4s8 = tmp.y; +#else + const float2 dm4f = __half22float2(dm4); + const float2 ds8f = __half22float2(ds8); + const float d4d8 = dm4f.x * ds8f.x; + const float m4s8 = dm4f.y * ds8f.y; +#endif // GGML_CUDA_F16 + + // scale second part of sum by QI8_1/(vdr * QR4_1) to compensate for multiple threads adding it + return sumi * d4d8 + m4s8 / (QI8_1 / (vdr * QR4_1)); +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +#define VDR_Q5_0_Q8_1_MMVQ 2 +#define VDR_Q5_0_Q8_1_MMQ 4 + +template static __device__ __forceinline__ float vec_dot_q5_0_q8_1_impl( + const int * vl, const int * vh, const int * u, const float & d5, const half2 & ds8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + int sumi = 0; + +#pragma unroll + for (int i = 0; i < vdr; ++i) { + int vi0 = (vl[i] >> 0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits + vi0 |= (vh[i] << 4) & 0x00000010; // 0 -> 4 + vi0 |= (vh[i] << 11) & 0x00001000; // 1 -> 12 + vi0 |= (vh[i] << 18) & 0x00100000; // 2 -> 20 + vi0 |= (vh[i] << 25) & 0x10000000; // 3 -> 28 + sumi = __dp4a(vi0, u[2*i+0], sumi); // SIMD dot product of quantized values + + int vi1 = (vl[i] >> 4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits + vi1 |= (vh[i] >> 12) & 0x00000010; // 16 -> 4 + vi1 |= (vh[i] >> 5) & 0x00001000; // 17 -> 12 + vi1 |= (vh[i] << 2) & 0x00100000; // 18 -> 20 + vi1 |= (vh[i] << 9) & 0x10000000; // 19 -> 28 + sumi = __dp4a(vi1, u[2*i+1], sumi); // SIMD dot product of quantized values + } + + const float2 ds8f = __half22float2(ds8); + + // second part effectively subtracts 16 from each quant value + return d5 * (sumi * ds8f.x - (16*vdr/QI5_0) * ds8f.y); +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +#define VDR_Q5_1_Q8_1_MMVQ 2 +#define VDR_Q5_1_Q8_1_MMQ 4 + +template static __device__ __forceinline__ float vec_dot_q5_1_q8_1_impl( + const int * vl, const int * vh, const int * u, const half2 & dm5, const half2 & ds8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + int sumi = 0; + +#pragma unroll + for (int i = 0; i < vdr; ++i) { + int vi0 = (vl[i] >> 0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits + vi0 |= (vh[i] << 4) & 0x00000010; // 0 -> 4 + vi0 |= (vh[i] << 11) & 0x00001000; // 1 -> 12 + vi0 |= (vh[i] << 18) & 0x00100000; // 2 -> 20 + vi0 |= (vh[i] << 25) & 0x10000000; // 3 -> 28 + sumi = __dp4a(vi0, u[2*i+0], sumi); // SIMD dot product of quantized values + + int vi1 = (vl[i] >> 4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits + vi1 |= (vh[i] >> 12) & 0x00000010; // 16 -> 4 + vi1 |= (vh[i] >> 5) & 0x00001000; // 17 -> 12 + vi1 |= (vh[i] << 2) & 0x00100000; // 18 -> 20 + vi1 |= (vh[i] << 9) & 0x10000000; // 19 -> 28 + sumi = __dp4a(vi1, u[2*i+1], sumi); // SIMD dot product of quantized values + } + +#ifdef GGML_CUDA_F16 + const float2 tmp = __half22float2(__hmul2(dm5, ds8)); + const float d5d8 = tmp.x; + const float m5s8 = tmp.y; +#else + const float2 dm5f = __half22float2(dm5); + const float2 ds8f = __half22float2(ds8); + const float d5d8 = dm5f.x * ds8f.x; + const float m5s8 = dm5f.y * ds8f.y; +#endif // GGML_CUDA_F16 + + // scale second part of sum by QI5_1 / vdr to compensate for multiple threads adding it + return sumi*d5d8 + m5s8 / (QI5_1 / vdr); + +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +#define VDR_Q8_0_Q8_1_MMVQ 2 +#define VDR_Q8_0_Q8_1_MMQ 8 + +template static __device__ __forceinline__ float vec_dot_q8_0_q8_1_impl( + const int * v, const int * u, const float & d8_0, const float & d8_1) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + int sumi = 0; + +#pragma unroll + for (int i = 0; i < vdr; ++i) { + // SIMD dot product of quantized values + sumi = __dp4a(v[i], u[i], sumi); + } + + return d8_0*d8_1 * sumi; +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +template static __device__ __forceinline__ float vec_dot_q8_1_q8_1_impl( + const int * v, const int * u, const half2 & dm8, const half2 & ds8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + int sumi = 0; + +#pragma unroll + for (int i = 0; i < vdr; ++i) { + // SIMD dot product of quantized values + sumi = __dp4a(v[i], u[i], sumi); + } + +#ifdef GGML_CUDA_F16 + const float2 tmp = __half22float2(__hmul2(dm8, ds8)); + const float d8d8 = tmp.x; + const float m8s8 = tmp.y; +#else + const float2 dm8f = __half22float2(dm8); + const float2 ds8f = __half22float2(ds8); + const float d8d8 = dm8f.x * ds8f.x; + const float m8s8 = dm8f.y * ds8f.y; +#endif // GGML_CUDA_F16 + + // scale second part of sum by QI8_1/ vdr to compensate for multiple threads adding it + return sumi*d8d8 + m8s8 / (QI8_1 / vdr); +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +#define VDR_Q2_K_Q8_1_MMVQ 1 +#define VDR_Q2_K_Q8_1_MMQ 2 + +// contiguous v/x values +static __device__ __forceinline__ float vec_dot_q2_K_q8_1_impl_mmvq( + const int & v, const int * __restrict__ u, const uint8_t * __restrict__ scales, + const half2 & dm2, const float * __restrict__ d8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + float sumf_d = 0.0f; + float sumf_m = 0.0f; + +#pragma unroll + for (int i = 0; i < QR2_K; ++i) { + const int sc = scales[2*i]; + + const int vi = (v >> (2*i)) & 0x03030303; + + sumf_d += d8[i] * (__dp4a(vi, u[i], 0) * (sc & 0xF)); // SIMD dot product + + // fill int with 4x m + int m = sc >> 4; + m |= m << 8; + m |= m << 16; + sumf_m += d8[i] * __dp4a(m, u[i], 0); // multiply constant q2_K part with sum of q8_1 values + } + + const float2 dm2f = __half22float2(dm2); + + return dm2f.x*sumf_d - dm2f.y*sumf_m; +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +// contiguous u/y values +static __device__ __forceinline__ float vec_dot_q2_K_q8_1_impl_mmq( + const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ scales, + const half2 & dm2, const float & d8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + int sumi_d = 0; + int sumi_m = 0; + +#pragma unroll + for (int i0 = 0; i0 < QI8_1; i0 += QI8_1/2) { + int sumi_d_sc = 0; + + const int sc = scales[i0 / (QI8_1/2)]; + + // fill int with 4x m + int m = sc >> 4; + m |= m << 8; + m |= m << 16; + +#pragma unroll + for (int i = i0; i < i0 + QI8_1/2; ++i) { + sumi_d_sc = __dp4a(v[i], u[i], sumi_d_sc); // SIMD dot product + sumi_m = __dp4a(m, u[i], sumi_m); // multiply sum of q8_1 values with m + } + + sumi_d += sumi_d_sc * (sc & 0xF); + } + + const float2 dm2f = __half22float2(dm2); + + return d8 * (dm2f.x*sumi_d - dm2f.y*sumi_m); +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +#define VDR_Q3_K_Q8_1_MMVQ 1 +#define VDR_Q3_K_Q8_1_MMQ 2 + +// contiguous v/x values +static __device__ __forceinline__ float vec_dot_q3_K_q8_1_impl_mmvq( + const int & vl, const int & vh, const int * __restrict__ u, const uint8_t * __restrict__ scales, + const int & scale_offset, const float & d3, const float * __restrict__ d8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + float sumf = 0.0f; + +#pragma unroll + for (int i = 0; i < QR3_K; ++i) { + const int isc = scale_offset + 2*i; + + const int isc_low = isc % (QK_K/32); + const int sc_shift_low = 4 * (isc / (QK_K/32)); + const int sc_low = (scales[isc_low] >> sc_shift_low) & 0xF; + + const int isc_high = isc % (QK_K/64); + const int sc_shift_high = 2 * (isc / (QK_K/64)); + const int sc_high = ((scales[(QK_K/32) + isc_high] >> sc_shift_high) & 3) << 4; + + const int sc = (sc_low | sc_high) - 32; + + const int vil = (vl >> (2*i)) & 0x03030303; + + const int vih = ((vh >> i) << 2) & 0x04040404; + + const int vi = __vsubss4(vil, vih); + + sumf += d8[i] * (__dp4a(vi, u[i], 0) * sc); // SIMD dot product + } + + return d3 * sumf; +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +// contiguous u/y values +static __device__ __forceinline__ float vec_dot_q3_K_q8_1_impl_mmq( + const int * __restrict__ v, const int * __restrict__ u, const int8_t * __restrict__ scales, + const float & d3, const float & d8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + int sumi = 0; + +#pragma unroll + for (int i0 = 0; i0 < QR3_K*VDR_Q3_K_Q8_1_MMQ; i0 += QI8_1/2) { + int sumi_sc = 0; + + for (int i = i0; i < i0 + QI8_1/2; ++i) { + sumi_sc = __dp4a(v[i], u[i], sumi_sc); // SIMD dot product + } + + sumi += sumi_sc * scales[i0 / (QI8_1/2)]; + } + + return d3*d8 * sumi; +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +#define VDR_Q4_K_Q8_1_MMVQ 2 +#define VDR_Q4_K_Q8_1_MMQ 8 + +// contiguous v/x values +static __device__ __forceinline__ float vec_dot_q4_K_q8_1_impl_vmmq( + const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc, + const uint8_t * __restrict__ m, const half2 & dm4, const float * __restrict__ d8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + float sumf_d = 0.0f; + float sumf_m = 0.0f; + +#pragma unroll + for (int i = 0; i < QR4_K; ++i) { + const int v0i = (v[0] >> (4*i)) & 0x0F0F0F0F; + const int v1i = (v[1] >> (4*i)) & 0x0F0F0F0F; + + const int dot1 = __dp4a(v1i, u[2*i+1], __dp4a(v0i, u[2*i+0], 0)); // SIMD dot product + const int dot2 = __dp4a(0x01010101, u[2*i+1], __dp4a(0x01010101, u[2*i+0], 0)); // sum of u + + sumf_d += d8[i] * (dot1 * sc[i]); + sumf_m += d8[i] * (dot2 * m[i]); // multiply constant part of q4_K with sum of q8_1 values + } + + const float2 dm4f = __half22float2(dm4); + + return dm4f.x*sumf_d - dm4f.y*sumf_m; + +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +// contiguous u/y values +static __device__ __forceinline__ float vec_dot_q4_K_q8_1_impl_mmq( + const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc, + const uint8_t * __restrict__ m, const half2 & dm4, const half2 * __restrict__ ds8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + float sumf_d = 0.0f; + float sumf_m = 0.0f; + +#pragma unroll + for (int i = 0; i < QR4_K*VDR_Q4_K_Q8_1_MMQ/QI8_1; ++i) { + int sumi_d = 0; + +#pragma unroll + for (int j = 0; j < QI8_1; ++j) { + sumi_d = __dp4a((v[j] >> (4*i)) & 0x0F0F0F0F, u[i*QI8_1 + j], sumi_d); // SIMD dot product + } + + const float2 ds8f = __half22float2(ds8[i]); + + sumf_d += ds8f.x * (sc[i] * sumi_d); + sumf_m += ds8f.y * m[i]; // sum of q8_1 block * q4_K min val + } + + const float2 dm4f = __half22float2(dm4); + + return dm4f.x*sumf_d - dm4f.y*sumf_m; + +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +#define VDR_Q5_K_Q8_1_MMVQ 2 +#define VDR_Q5_K_Q8_1_MMQ 8 + +// contiguous v/x values +static __device__ __forceinline__ float vec_dot_q5_K_q8_1_impl_vmmq( + const int * __restrict__ vl, const int * __restrict__ vh, const int * __restrict__ u, const uint8_t * __restrict__ sc, + const uint8_t * __restrict__ m, const half2 & dm5, const float * __restrict__ d8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + float sumf_d = 0.0f; + float sumf_m = 0.0f; + +#pragma unroll + for (int i = 0; i < QR5_K; ++i) { + const int vl0i = (vl[0] >> (4*i)) & 0x0F0F0F0F; + const int vl1i = (vl[1] >> (4*i)) & 0x0F0F0F0F; + + const int vh0i = ((vh[0] >> i) << 4) & 0x10101010; + const int vh1i = ((vh[1] >> i) << 4) & 0x10101010; + + const int v0i = vl0i | vh0i; + const int v1i = vl1i | vh1i; + + const int dot1 = __dp4a(v0i, u[2*i+0], __dp4a(v1i, u[2*i+1], 0)); // SIMD dot product + const int dot2 = __dp4a(0x01010101, u[2*i+0], __dp4a(0x01010101, u[2*i+1], 0)); // sum of u + + sumf_d += d8[i] * (dot1 * sc[i]); + sumf_m += d8[i] * (dot2 * m[i]); + + } + + const float2 dm5f = __half22float2(dm5); + + return dm5f.x*sumf_d - dm5f.y*sumf_m; + +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +// contiguous u/y values +static __device__ __forceinline__ float vec_dot_q5_K_q8_1_impl_mmq( + const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc, + const uint8_t * __restrict__ m, const half2 & dm4, const half2 * __restrict__ ds8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + float sumf_d = 0.0f; + float sumf_m = 0.0f; + +#pragma unroll + for (int i = 0; i < QR5_K*VDR_Q5_K_Q8_1_MMQ/QI8_1; ++i) { + int sumi_d = 0; + +#pragma unroll + for (int j = 0; j < QI8_1; ++j) { + sumi_d = __dp4a(v[i*QI8_1 + j], u[i*QI8_1 + j], sumi_d); // SIMD dot product + } + + const float2 ds8f = __half22float2(ds8[i]); + + sumf_d += ds8f.x * (sc[i] * sumi_d); + sumf_m += ds8f.y * m[i]; // sum of q8_1 block * q4_K min val + } + + const float2 dm4f = __half22float2(dm4); + + return dm4f.x*sumf_d - dm4f.y*sumf_m; + +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +#define VDR_Q6_K_Q8_1_MMVQ 1 +#define VDR_Q6_K_Q8_1_MMQ 8 + +// contiguous v/x values +static __device__ __forceinline__ float vec_dot_q6_K_q8_1_impl_mmvq( + const int & vl, const int & vh, const int * __restrict__ u, const int8_t * __restrict__ scales, + const float & d, const float * __restrict__ d8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + float sumf = 0.0f; + +#pragma unroll + for (int i = 0; i < QR6_K; ++i) { + const int sc = scales[4*i]; + + const int vil = (vl >> (4*i)) & 0x0F0F0F0F; + + const int vih = ((vh >> (4*i)) << 4) & 0x30303030; + + const int vi = __vsubss4((vil | vih), 0x20202020); // vi = (vil | vih) - 32 + + sumf += d8[i] * (__dp4a(vi, u[i], 0) * sc); // SIMD dot product + } + + return d*sumf; +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +// contiguous u/y values +static __device__ __forceinline__ float vec_dot_q6_K_q8_1_impl_mmq( + const int * __restrict__ v, const int * __restrict__ u, const int8_t * __restrict__ sc, + const float & d6, const float * __restrict__ d8) { + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + float sumf_d = 0.0f; + +#pragma unroll + for (int i0 = 0; i0 < VDR_Q6_K_Q8_1_MMQ; i0 += 4) { + int2 sumi_d = {0, 0}; // 2 q6_K scales per q8_1 scale + +#pragma unroll + for (int i = i0; i < i0 + 2; ++i) { + sumi_d.x = __dp4a(v[2*i+0], u[2*i+0], sumi_d.x); // SIMD dot product + sumi_d.x = __dp4a(v[2*i+1], u[2*i+1], sumi_d.x); // SIMD dot product + + sumi_d.y = __dp4a(v[2*i+4], u[2*i+4], sumi_d.y); // SIMD dot product + sumi_d.y = __dp4a(v[2*i+5], u[2*i+5], sumi_d.y); // SIMD dot product + } + + sumf_d += d8[i0/4] * (sc[i0/2+0]*sumi_d.x + sc[i0/2+1]*sumi_d.y); + } + + return d6 * sumf_d; + +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A +} + +static __device__ __forceinline__ float vec_dot_q4_0_q8_1( + const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { + + const block_q4_0 * bq4_0 = (const block_q4_0 *) vbq; + + int v[VDR_Q4_0_Q8_1_MMVQ]; + int u[2*VDR_Q4_0_Q8_1_MMVQ]; + +#pragma unroll + for (int i = 0; i < VDR_Q4_0_Q8_1_MMVQ; ++i) { + v[i] = get_int_from_uint8(bq4_0->qs, iqs + i); + u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); + u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_0); + } + + return vec_dot_q4_0_q8_1_impl(v, u, bq4_0->d, bq8_1->ds); +} + +template static __device__ __forceinline__ void allocate_tiles_q4_0(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { + + __shared__ int tile_x_qs[mmq_y * (WARP_SIZE) + mmq_y]; + __shared__ float tile_x_d[mmq_y * (WARP_SIZE/QI4_0) + mmq_y/QI4_0]; + + *x_ql = tile_x_qs; + *x_dm = (half2 *) tile_x_d; +} + +template static __device__ __forceinline__ void load_tiles_q4_0( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { + + __builtin_assume(i_offset >= 0); + __builtin_assume(i_offset < nwarps); + __builtin_assume(k >= 0); + __builtin_assume(k < WARP_SIZE); + + const int kbx = k / QI4_0; + const int kqsx = k % QI4_0; + + const block_q4_0 * bx0 = (block_q4_0 *) vx; + + float * x_dmf = (float *) x_dm; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { + int i = i0 + i_offset; + + if (need_check) { + i = min(i, i_max); + } + + const block_q4_0 * bxi = bx0 + i*blocks_per_row + kbx; + + x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8(bxi->qs, kqsx); + // x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbx] = bxi->d; + } + + const int blocks_per_tile_x_row = WARP_SIZE / QI4_0; + const int kbxd = k % blocks_per_tile_x_row; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_0) { + int i = i0 + i_offset * QI4_0 + k / blocks_per_tile_x_row; + + if (need_check) { + i = min(i, i_max); + } + + const block_q4_0 * bxi = bx0 + i*blocks_per_row + kbxd; + + x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbxd] = bxi->d; + } +} + +static __device__ __forceinline__ float vec_dot_q4_0_q8_1_mul_mat( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { + + const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); + const float * x_dmf = (float *) x_dm; + + int u[2*VDR_Q4_0_Q8_1_MMQ]; + +#pragma unroll + for (int l = 0; l < VDR_Q4_0_Q8_1_MMQ; ++l) { + u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; + u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI4_0) % WARP_SIZE]; + } + + return vec_dot_q4_0_q8_1_impl + (&x_ql[i * (WARP_SIZE + 1) + k], u, x_dmf[i * (WARP_SIZE/QI4_0) + i/QI4_0 + k/QI4_0], + y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); +} + +static __device__ __forceinline__ float vec_dot_q4_1_q8_1( + const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { + + const block_q4_1 * bq4_1 = (const block_q4_1 *) vbq; + + int v[VDR_Q4_1_Q8_1_MMVQ]; + int u[2*VDR_Q4_1_Q8_1_MMVQ]; + +#pragma unroll + for (int i = 0; i < VDR_Q4_1_Q8_1_MMVQ; ++i) { + v[i] = get_int_from_uint8_aligned(bq4_1->qs, iqs + i); + u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); + u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_1); + } + + return vec_dot_q4_1_q8_1_impl(v, u, bq4_1->dm, bq8_1->ds); +} + +template static __device__ __forceinline__ void allocate_tiles_q4_1(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { + + __shared__ int tile_x_qs[mmq_y * (WARP_SIZE) + + mmq_y]; + __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI4_1) + mmq_y/QI4_1]; + + *x_ql = tile_x_qs; + *x_dm = tile_x_dm; +} + +template static __device__ __forceinline__ void load_tiles_q4_1( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { + + __builtin_assume(i_offset >= 0); + __builtin_assume(i_offset < nwarps); + __builtin_assume(k >= 0); + __builtin_assume(k < WARP_SIZE); + + const int kbx = k / QI4_1; + const int kqsx = k % QI4_1; + + const block_q4_1 * bx0 = (block_q4_1 *) vx; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { + int i = i0 + i_offset; + + if (need_check) { + i = min(i, i_max); + } + + const block_q4_1 * bxi = bx0 + i*blocks_per_row + kbx; + + x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx); + } + + const int blocks_per_tile_x_row = WARP_SIZE / QI4_1; + const int kbxd = k % blocks_per_tile_x_row; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_1) { + int i = i0 + i_offset * QI4_1 + k / blocks_per_tile_x_row; + + if (need_check) { + i = min(i, i_max); + } + + const block_q4_1 * bxi = bx0 + i*blocks_per_row + kbxd; + + x_dm[i * (WARP_SIZE/QI4_1) + i / QI4_1 + kbxd] = bxi->dm; + } +} + +static __device__ __forceinline__ float vec_dot_q4_1_q8_1_mul_mat( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { + + const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); + + int u[2*VDR_Q4_1_Q8_1_MMQ]; + +#pragma unroll + for (int l = 0; l < VDR_Q4_1_Q8_1_MMQ; ++l) { + u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; + u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI4_1) % WARP_SIZE]; + } + + return vec_dot_q4_1_q8_1_impl + (&x_ql[i * (WARP_SIZE + 1) + k], u, x_dm[i * (WARP_SIZE/QI4_1) + i/QI4_1 + k/QI4_1], + y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); +} + +static __device__ __forceinline__ float vec_dot_q5_0_q8_1( + const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { + + const block_q5_0 * bq5_0 = (const block_q5_0 *) vbq; + + int vl[VDR_Q5_0_Q8_1_MMVQ]; + int vh[VDR_Q5_0_Q8_1_MMVQ]; + int u[2*VDR_Q5_0_Q8_1_MMVQ]; + +#pragma unroll + for (int i = 0; i < VDR_Q5_0_Q8_1_MMVQ; ++i) { + vl[i] = get_int_from_uint8(bq5_0->qs, iqs + i); + vh[i] = get_int_from_uint8(bq5_0->qh, 0) >> (4 * (iqs + i)); + u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); + u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_0); + } + + return vec_dot_q5_0_q8_1_impl(vl, vh, u, bq5_0->d, bq8_1->ds); +} + +template static __device__ __forceinline__ void allocate_tiles_q5_0(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { + + __shared__ int tile_x_ql[mmq_y * (2*WARP_SIZE) + mmq_y]; + __shared__ float tile_x_d[mmq_y * (WARP_SIZE/QI5_0) + mmq_y/QI5_0]; + + *x_ql = tile_x_ql; + *x_dm = (half2 *) tile_x_d; +} + +template static __device__ __forceinline__ void load_tiles_q5_0( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { + + __builtin_assume(i_offset >= 0); + __builtin_assume(i_offset < nwarps); + __builtin_assume(k >= 0); + __builtin_assume(k < WARP_SIZE); + + const int kbx = k / QI5_0; + const int kqsx = k % QI5_0; + + const block_q5_0 * bx0 = (block_q5_0 *) vx; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { + int i = i0 + i_offset; + + if (need_check) { + i = min(i, i_max); + } + + const block_q5_0 * bxi = bx0 + i*blocks_per_row + kbx; + + const int ql = get_int_from_uint8(bxi->qs, kqsx); + const int qh = get_int_from_uint8(bxi->qh, 0) >> (4 * (k % QI5_0)); + + int qs0 = (ql >> 0) & 0x0F0F0F0F; + qs0 |= (qh << 4) & 0x00000010; // 0 -> 4 + qs0 |= (qh << 11) & 0x00001000; // 1 -> 12 + qs0 |= (qh << 18) & 0x00100000; // 2 -> 20 + qs0 |= (qh << 25) & 0x10000000; // 3 -> 28 + qs0 = __vsubss4(qs0, 0x10101010); // subtract 16 + + x_ql[i * (2*WARP_SIZE + 1) + 2*k+0] = qs0; + + int qs1 = (ql >> 4) & 0x0F0F0F0F; + qs1 |= (qh >> 12) & 0x00000010; // 16 -> 4 + qs1 |= (qh >> 5) & 0x00001000; // 17 -> 12 + qs1 |= (qh << 2) & 0x00100000; // 18 -> 20 + qs1 |= (qh << 9) & 0x10000000; // 19 -> 28 + qs1 = __vsubss4(qs1, 0x10101010); // subtract 16 + + x_ql[i * (2*WARP_SIZE + 1) + 2*k+1] = qs1; + } + + const int blocks_per_tile_x_row = WARP_SIZE / QI5_0; + const int kbxd = k % blocks_per_tile_x_row; + float * x_dmf = (float *) x_dm; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_0) { + int i = i0 + i_offset * QI5_0 + k / blocks_per_tile_x_row; + + if (need_check) { + i = min(i, i_max); + } + + const block_q5_0 * bxi = bx0 + i*blocks_per_row + kbxd; + + x_dmf[i * (WARP_SIZE/QI5_0) + i / QI5_0 + kbxd] = bxi->d; + } +} + +static __device__ __forceinline__ float vec_dot_q5_0_q8_1_mul_mat( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { + + const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); + const int index_bx = i * (WARP_SIZE/QI5_0) + i/QI5_0 + k/QI5_0; + const float * x_dmf = (const float *) x_dm; + const float * y_df = (const float *) y_ds; + + int u[2*VDR_Q5_0_Q8_1_MMQ]; + +#pragma unroll + for (int l = 0; l < VDR_Q5_0_Q8_1_MMQ; ++l) { + u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; + u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI5_0) % WARP_SIZE]; + } + + return vec_dot_q8_0_q8_1_impl + (&x_ql[i * (2*WARP_SIZE + 1) + 2 * k], u, x_dmf[index_bx], y_df[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); +} + +static __device__ __forceinline__ float vec_dot_q5_1_q8_1( + const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { + + const block_q5_1 * bq5_1 = (const block_q5_1 *) vbq; + + int vl[VDR_Q5_1_Q8_1_MMVQ]; + int vh[VDR_Q5_1_Q8_1_MMVQ]; + int u[2*VDR_Q5_1_Q8_1_MMVQ]; + +#pragma unroll + for (int i = 0; i < VDR_Q5_1_Q8_1_MMVQ; ++i) { + vl[i] = get_int_from_uint8_aligned(bq5_1->qs, iqs + i); + vh[i] = get_int_from_uint8_aligned(bq5_1->qh, 0) >> (4 * (iqs + i)); + u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); + u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_1); + } + + return vec_dot_q5_1_q8_1_impl(vl, vh, u, bq5_1->dm, bq8_1->ds); +} + +template static __device__ __forceinline__ void allocate_tiles_q5_1(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { + + __shared__ int tile_x_ql[mmq_y * (2*WARP_SIZE) + mmq_y]; + __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI5_1) + mmq_y/QI5_1]; + + *x_ql = tile_x_ql; + *x_dm = tile_x_dm; +} + +template static __device__ __forceinline__ void load_tiles_q5_1( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { + + __builtin_assume(i_offset >= 0); + __builtin_assume(i_offset < nwarps); + __builtin_assume(k >= 0); + __builtin_assume(k < WARP_SIZE); + + const int kbx = k / QI5_1; + const int kqsx = k % QI5_1; + + const block_q5_1 * bx0 = (block_q5_1 *) vx; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { + int i = i0 + i_offset; + + if (need_check) { + i = min(i, i_max); + } + + const block_q5_1 * bxi = bx0 + i*blocks_per_row + kbx; + + const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx); + const int qh = get_int_from_uint8_aligned(bxi->qh, 0) >> (4 * (k % QI5_1)); + + int qs0 = (ql >> 0) & 0x0F0F0F0F; + qs0 |= (qh << 4) & 0x00000010; // 0 -> 4 + qs0 |= (qh << 11) & 0x00001000; // 1 -> 12 + qs0 |= (qh << 18) & 0x00100000; // 2 -> 20 + qs0 |= (qh << 25) & 0x10000000; // 3 -> 28 + + x_ql[i * (2*WARP_SIZE + 1) + 2*k+0] = qs0; + + int qs1 = (ql >> 4) & 0x0F0F0F0F; + qs1 |= (qh >> 12) & 0x00000010; // 16 -> 4 + qs1 |= (qh >> 5) & 0x00001000; // 17 -> 12 + qs1 |= (qh << 2) & 0x00100000; // 18 -> 20 + qs1 |= (qh << 9) & 0x10000000; // 19 -> 28 + + x_ql[i * (2*WARP_SIZE + 1) + 2*k+1] = qs1; + } + + const int blocks_per_tile_x_row = WARP_SIZE / QI5_1; + const int kbxd = k % blocks_per_tile_x_row; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_1) { + int i = i0 + i_offset * QI5_1 + k / blocks_per_tile_x_row; + + if (need_check) { + i = min(i, i_max); + } + + const block_q5_1 * bxi = bx0 + i*blocks_per_row + kbxd; + + x_dm[i * (WARP_SIZE/QI5_1) + i / QI5_1 + kbxd] = bxi->dm; + } +} + +static __device__ __forceinline__ float vec_dot_q5_1_q8_1_mul_mat( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { + + const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2)); + const int index_bx = i * (WARP_SIZE/QI5_1) + + i/QI5_1 + k/QI5_1; + + int u[2*VDR_Q5_1_Q8_1_MMQ]; + +#pragma unroll + for (int l = 0; l < VDR_Q5_1_Q8_1_MMQ; ++l) { + u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l) % WARP_SIZE]; + u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI5_1) % WARP_SIZE]; + } + + return vec_dot_q8_1_q8_1_impl + (&x_ql[i * (2*WARP_SIZE + 1) + 2 * k], u, x_dm[index_bx], y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]); +} + +static __device__ __forceinline__ float vec_dot_q8_0_q8_1( + const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { + + const block_q8_0 * bq8_0 = (const block_q8_0 *) vbq; + + int v[VDR_Q8_0_Q8_1_MMVQ]; + int u[VDR_Q8_0_Q8_1_MMVQ]; + +#pragma unroll + for (int i = 0; i < VDR_Q8_0_Q8_1_MMVQ; ++i) { + v[i] = get_int_from_int8(bq8_0->qs, iqs + i); + u[i] = get_int_from_int8_aligned(bq8_1->qs, iqs + i); + } + + return vec_dot_q8_0_q8_1_impl(v, u, bq8_0->d, __low2half(bq8_1->ds)); +} + +template static __device__ __forceinline__ void allocate_tiles_q8_0(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { + + __shared__ int tile_x_qs[mmq_y * (WARP_SIZE) + mmq_y]; + __shared__ float tile_x_d[mmq_y * (WARP_SIZE/QI8_0) + mmq_y/QI8_0]; + + *x_ql = tile_x_qs; + *x_dm = (half2 *) tile_x_d; +} + +template static __device__ __forceinline__ void load_tiles_q8_0( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { + + __builtin_assume(i_offset >= 0); + __builtin_assume(i_offset < nwarps); + __builtin_assume(k >= 0); + __builtin_assume(k < WARP_SIZE); + + const int kbx = k / QI8_0; + const int kqsx = k % QI8_0; + float * x_dmf = (float *) x_dm; + + const block_q8_0 * bx0 = (block_q8_0 *) vx; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { + int i = i0 + i_offset; + + if (need_check) { + i = min(i, i_max); + } + + const block_q8_0 * bxi = bx0 + i*blocks_per_row + kbx; + + x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_int8(bxi->qs, kqsx); + } + + const int blocks_per_tile_x_row = WARP_SIZE / QI8_0; + const int kbxd = k % blocks_per_tile_x_row; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI8_0) { + int i = i0 + i_offset * QI8_0 + k / blocks_per_tile_x_row; + + if (need_check) { + i = min(i, i_max); + } + + const block_q8_0 * bxi = bx0 + i*blocks_per_row + kbxd; + + x_dmf[i * (WARP_SIZE/QI8_0) + i / QI8_0 + kbxd] = bxi->d; + } +} + +static __device__ __forceinline__ float vec_dot_q8_0_q8_1_mul_mat( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { + + const float * x_dmf = (const float *) x_dm; + const float * y_df = (const float *) y_ds; + + return vec_dot_q8_0_q8_1_impl + (&x_ql[i * (WARP_SIZE + 1) + k], &y_qs[j * WARP_SIZE + k], x_dmf[i * (WARP_SIZE/QI8_0) + i/QI8_0 + k/QI8_0], + y_df[j * (WARP_SIZE/QI8_1) + k/QI8_1]); +} + +static __device__ __forceinline__ float vec_dot_q2_K_q8_1( + const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { + + const block_q2_K * bq2_K = (const block_q2_K *) vbq; + + const int bq8_offset = QR2_K * (iqs / QI8_1); + const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2); + + const uint8_t * scales = bq2_K->scales + scale_offset; + + const int v = get_int_from_uint8_aligned(bq2_K->qs, iqs); + int u[QR2_K]; + float d8[QR2_K]; + +#pragma unroll + for (int i = 0; i < QR2_K; ++ i) { + u[i] = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1); + d8[i] = __low2half(bq8_1[bq8_offset + i].ds); + } + + return vec_dot_q2_K_q8_1_impl_mmvq(v, u, scales, bq2_K->dm, d8); +} + +template static __device__ __forceinline__ void allocate_tiles_q2_K(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { + + __shared__ int tile_x_ql[mmq_y * (WARP_SIZE) + mmq_y]; + __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI2_K) + mmq_y/QI2_K]; + __shared__ int tile_x_sc[mmq_y * (WARP_SIZE/4) + mmq_y/4]; + + *x_ql = tile_x_ql; + *x_dm = tile_x_dm; + *x_sc = tile_x_sc; +} + +template static __device__ __forceinline__ void load_tiles_q2_K( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { + + __builtin_assume(i_offset >= 0); + __builtin_assume(i_offset < nwarps); + __builtin_assume(k >= 0); + __builtin_assume(k < WARP_SIZE); + + const int kbx = k / QI2_K; + const int kqsx = k % QI2_K; + + const block_q2_K * bx0 = (block_q2_K *) vx; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { + int i = i0 + i_offset; + + if (need_check) { + i = min(i, i_max); + } + + const block_q2_K * bxi = bx0 + i*blocks_per_row + kbx; + + x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx); + } + + const int blocks_per_tile_x_row = WARP_SIZE / QI2_K; + const int kbxd = k % blocks_per_tile_x_row; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI2_K) { + int i = (i0 + i_offset * QI2_K + k / blocks_per_tile_x_row) % mmq_y; + + if (need_check) { + i = min(i, i_max); + } + + const block_q2_K * bxi = bx0 + i*blocks_per_row + kbxd; + + x_dm[i * (WARP_SIZE/QI2_K) + i / QI2_K + kbxd] = bxi->dm; + } + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) { + int i = i0 + i_offset * 4 + k / (WARP_SIZE/4); + + if (need_check) { + i = min(i, i_max); + } + + const block_q2_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/4)) / (QI2_K/4); + + x_sc[i * (WARP_SIZE/4) + i / 4 + k % (WARP_SIZE/4)] = get_int_from_uint8_aligned(bxi->scales, k % (QI2_K/4)); + } +} + +static __device__ __forceinline__ float vec_dot_q2_K_q8_1_mul_mat( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { + + const int kbx = k / QI2_K; + const int ky = (k % QI2_K) * QR2_K; + const float * y_df = (const float *) y_ds; + + int v[QR2_K*VDR_Q2_K_Q8_1_MMQ]; + + const int kqsx = i * (WARP_SIZE + 1) + kbx*QI2_K + (QI2_K/2) * (ky/(2*QI2_K)) + ky % (QI2_K/2); + const int shift = 2 * ((ky % (2*QI2_K)) / (QI2_K/2)); + +#pragma unroll + for (int l = 0; l < QR2_K*VDR_Q2_K_Q8_1_MMQ; ++l) { + v[l] = (x_ql[kqsx + l] >> shift) & 0x03030303; + } + + const uint8_t * scales = ((const uint8_t *) &x_sc[i * (WARP_SIZE/4) + i/4 + kbx*4]) + ky/4; + + const int index_y = j * WARP_SIZE + (QR2_K*k) % WARP_SIZE; + return vec_dot_q2_K_q8_1_impl_mmq(v, &y_qs[index_y], scales, x_dm[i * (WARP_SIZE/QI2_K) + i/QI2_K + kbx], y_df[index_y/QI8_1]); +} + +static __device__ __forceinline__ float vec_dot_q3_K_q8_1( + const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { + + const block_q3_K * bq3_K = (const block_q3_K *) vbq; + + const int bq8_offset = QR3_K * (iqs / (QI3_K/2)); + const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2); + + const float d = bq3_K->d; + + const int vl = get_int_from_uint8(bq3_K->qs, iqs); + + // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted + const int vh = ~get_int_from_uint8(bq3_K->hmask, iqs % (QI3_K/2)) >> bq8_offset; + + int u[QR3_K]; + float d8[QR3_K]; + +#pragma unroll + for (int i = 0; i < QR3_K; ++i) { + u[i] = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1); + d8[i] = __low2half(bq8_1[bq8_offset + i].ds); + } + + return vec_dot_q3_K_q8_1_impl_mmvq(vl, vh, u, bq3_K->scales, scale_offset, d, d8); +} + +template static __device__ __forceinline__ void allocate_tiles_q3_K(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { + + __shared__ int tile_x_ql[mmq_y * (WARP_SIZE) + mmq_y]; + __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI3_K) + mmq_y/QI3_K]; + __shared__ int tile_x_qh[mmq_y * (WARP_SIZE/2) + mmq_y/2]; + __shared__ int tile_x_sc[mmq_y * (WARP_SIZE/4) + mmq_y/4]; + + *x_ql = tile_x_ql; + *x_dm = tile_x_dm; + *x_qh = tile_x_qh; + *x_sc = tile_x_sc; +} + +template static __device__ __forceinline__ void load_tiles_q3_K( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { + + __builtin_assume(i_offset >= 0); + __builtin_assume(i_offset < nwarps); + __builtin_assume(k >= 0); + __builtin_assume(k < WARP_SIZE); + + const int kbx = k / QI3_K; + const int kqsx = k % QI3_K; + + const block_q3_K * bx0 = (block_q3_K *) vx; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { + int i = i0 + i_offset; + + if (need_check) { + i = min(i, i_max); + } + + const block_q3_K * bxi = bx0 + i*blocks_per_row + kbx; + + x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8(bxi->qs, kqsx); + } + + const int blocks_per_tile_x_row = WARP_SIZE / QI3_K; + const int kbxd = k % blocks_per_tile_x_row; + float * x_dmf = (float *) x_dm; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI3_K) { + int i = (i0 + i_offset * QI3_K + k / blocks_per_tile_x_row) % mmq_y; + + if (need_check) { + i = min(i, i_max); + } + + const block_q3_K * bxi = bx0 + i*blocks_per_row + kbxd; + + x_dmf[i * (WARP_SIZE/QI3_K) + i / QI3_K + kbxd] = bxi->d; + } + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 2) { + int i = i0 + i_offset * 2 + k / (WARP_SIZE/2); + + if (need_check) { + i = min(i, i_max); + } + + const block_q3_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/2)) / (QI3_K/2); + + // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted + x_qh[i * (WARP_SIZE/2) + i / 2 + k % (WARP_SIZE/2)] = ~get_int_from_uint8(bxi->hmask, k % (QI3_K/2)); + } + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) { + int i = i0 + i_offset * 4 + k / (WARP_SIZE/4); + + if (need_check) { + i = min(i, i_max); + } + + const block_q3_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/4)) / (QI3_K/4); + + const int ksc = k % (QI3_K/4); + + const int ksc_low = ksc % (QI3_K/8); + const int shift_low = 4 * (ksc / (QI3_K/8)); + const int sc_low = (get_int_from_uint8(bxi->scales, ksc_low) >> shift_low) & 0x0F0F0F0F; + + const int ksc_high = QI3_K/8; + const int shift_high = 2 * ksc; + const int sc_high = ((get_int_from_uint8(bxi->scales, ksc_high) >> shift_high) << 4) & 0x30303030; + + const int sc = __vsubss4(sc_low | sc_high, 0x20202020); + + x_sc[i * (WARP_SIZE/4) + i / 4 + k % (WARP_SIZE/4)] = sc; + } +} + +static __device__ __forceinline__ float vec_dot_q3_K_q8_1_mul_mat( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { + + const int kbx = k / QI3_K; + const int ky = (k % QI3_K) * QR3_K; + const float * x_dmf = (const float *) x_dm; + const float * y_df = (const float *) y_ds; + + const int8_t * scales = ((int8_t *) (x_sc + i * (WARP_SIZE/4) + i/4 + kbx*4)) + ky/4; + + int v[QR3_K*VDR_Q3_K_Q8_1_MMQ]; + +#pragma unroll + for (int l = 0; l < QR3_K*VDR_Q3_K_Q8_1_MMQ; ++l) { + const int kqsx = i * (WARP_SIZE + 1) + kbx*QI3_K + (QI3_K/2) * (ky/(2*QI3_K)) + ky % (QI3_K/2); + const int shift = 2 * ((ky % 32) / 8); + const int vll = (x_ql[kqsx + l] >> shift) & 0x03030303; + + const int vh = x_qh[i * (WARP_SIZE/2) + i/2 + kbx * (QI3_K/2) + (ky+l)%8] >> ((ky+l) / 8); + const int vlh = (vh << 2) & 0x04040404; + + v[l] = __vsubss4(vll, vlh); + } + + const int index_y = j * WARP_SIZE + (k*QR3_K) % WARP_SIZE; + return vec_dot_q3_K_q8_1_impl_mmq(v, &y_qs[index_y], scales, x_dmf[i * (WARP_SIZE/QI3_K) + i/QI3_K + kbx], y_df[index_y/QI8_1]); +} + +static __device__ __forceinline__ float vec_dot_q4_K_q8_1( + const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { + +#ifndef GGML_QKK_64 + const block_q4_K * bq4_K = (const block_q4_K *) vbq; + + int v[2]; + int u[2*QR4_K]; + float d8[QR4_K]; + + // iqs is in 0,2..30. bq8_offset = iqs/4 -> bq8_offset = 0, 2, 4, 6 + const int bq8_offset = QR4_K * ((iqs/2) / (QI8_1/2)); + + // iqs = 0....3 -> bq8_offset = 0, want q4_offset = 0, 4, 8, 12 + // iqs = 4....7 -> bq8_offset = 2, want q4_offset = 32, 36, 40, 44 + // iqs = 8...11 -> bq8_offset = 4, want q4_offset = 64, 68, 72, 76 + // iqs = 12..15 -> bq8_offset = 6, want q4_offset = 96, 100, 104, 108 + + const int * q4 = (const int *)(bq4_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4)); + v[0] = q4[0]; + v[1] = q4[4]; + + const uint16_t * scales = (const uint16_t *)bq4_K->scales; + uint16_t aux[2]; + const int j = bq8_offset/2; + if (j < 2) { + aux[0] = scales[j+0] & 0x3f3f; + aux[1] = scales[j+2] & 0x3f3f; + } else { + aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2); + aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2); + } + const uint8_t * sc = (const uint8_t *)aux; + const uint8_t * m = sc + 2; + + for (int i = 0; i < QR4_K; ++i) { + const block_q8_1 * bq8i = bq8_1 + bq8_offset + i; + d8[i] = __low2half(bq8i->ds); + + const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4); + u[2*i+0] = q8[0]; + u[2*i+1] = q8[4]; + } + + return vec_dot_q4_K_q8_1_impl_vmmq(v, u, sc, m, bq4_K->dm, d8); + +#else + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + const block_q4_K * bq4_K = (const block_q4_K *) vbq; + + float sumf_d = 0.0f; + float sumf_m = 0.0f; + + uint16_t aux16[2]; + const uint8_t * s = (const uint8_t *)aux16; + + const uint16_t * a = (const uint16_t *)bq4_K->scales; + aux16[0] = a[0] & 0x0f0f; + aux16[1] = (a[0] >> 4) & 0x0f0f; + + const float dall = bq4_K->dm[0]; + const float dmin = bq4_K->dm[1]; + + const float d8_1 = __low2float(bq8_1[0].ds); + const float d8_2 = __low2float(bq8_1[1].ds); + + const int ui1 = *((const int *)bq8_1[0].qs + (iqs/2)); + const int ui2 = *((const int *)bq8_1[0].qs + (iqs/2) + 4); + const int ui3 = *((const int *)bq8_1[1].qs + (iqs/2)); + const int ui4 = *((const int *)bq8_1[1].qs + (iqs/2) + 4); + + const int * q4 = (const int *)bq4_K->qs + (iqs/2); + const int v1 = q4[0]; + const int v2 = q4[4]; + + const int dot1 = __dp4a(ui2, v2 & 0x0f0f0f0f, __dp4a(ui1, v1 & 0x0f0f0f0f, 0)); + const int dot2 = __dp4a(ui4, (v2 >> 4) & 0x0f0f0f0f, __dp4a(ui3, (v1 >> 4) & 0x0f0f0f0f, 0)); + const int dot3 = __dp4a(0x01010101, ui2, __dp4a(0x01010101, ui1, 0)); + const int dot4 = __dp4a(0x01010101, ui4, __dp4a(0x01010101, ui3, 0)); + + sumf_d += d8_1 * (dot1 * s[0]) + d8_2 * (dot2 * s[1]); + sumf_m += d8_1 * (dot3 * s[2]) + d8_2 * (dot4 * s[3]); + + return dall * sumf_d - dmin * sumf_m; + +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A + +#endif +} + +template static __device__ __forceinline__ void allocate_tiles_q4_K(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { + + __shared__ int tile_x_ql[mmq_y * (WARP_SIZE) + mmq_y]; + __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI4_K) + mmq_y/QI4_K]; + __shared__ int tile_x_sc[mmq_y * (WARP_SIZE/8) + mmq_y/8]; + + *x_ql = tile_x_ql; + *x_dm = tile_x_dm; + *x_sc = tile_x_sc; +} + +template static __device__ __forceinline__ void load_tiles_q4_K( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { + + __builtin_assume(i_offset >= 0); + __builtin_assume(i_offset < nwarps); + __builtin_assume(k >= 0); + __builtin_assume(k < WARP_SIZE); + + const int kbx = k / QI4_K; // == 0 if QK_K == 256 + const int kqsx = k % QI4_K; // == k if QK_K == 256 + + const block_q4_K * bx0 = (block_q4_K *) vx; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { + int i = i0 + i_offset; + + if (need_check) { + i = min(i, i_max); + } + + const block_q4_K * bxi = bx0 + i*blocks_per_row + kbx; + + x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx); + } + + const int blocks_per_tile_x_row = WARP_SIZE / QI4_K; // == 1 if QK_K == 256 + const int kbxd = k % blocks_per_tile_x_row; // == 0 if QK_K == 256 + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_K) { + int i = (i0 + i_offset * QI4_K + k / blocks_per_tile_x_row) % mmq_y; + + if (need_check) { + i = min(i, i_max); + } + + const block_q4_K * bxi = bx0 + i*blocks_per_row + kbxd; + +#if QK_K == 256 + x_dm[i * (WARP_SIZE/QI4_K) + i / QI4_K + kbxd] = bxi->dm; +#else + x_dm[i * (WARP_SIZE/QI4_K) + i / QI4_K + kbxd] = {bxi->dm[0], bxi->dm[1]}; +#endif + } + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) { + int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y; + + if (need_check) { + i = min(i, i_max); + } + + const block_q4_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / (QI4_K/8); + + const int * scales = (int *) bxi->scales; + + const int ksc = k % (WARP_SIZE/8); + + // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8 + int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits + scales8 |= (scales[ksc/2] >> (2 * (ksc % 2))) & 0x30303030; // upper 2 bits + + x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8; + } +} + +static __device__ __forceinline__ float vec_dot_q4_K_q8_1_mul_mat( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { + + const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/16]) + 2*((k % 16) / 8); + + const int index_y = j * WARP_SIZE + (QR4_K*k) % WARP_SIZE; + return vec_dot_q4_K_q8_1_impl_mmq(&x_ql[i * (WARP_SIZE + 1) + k], &y_qs[index_y], sc, sc+8, + x_dm[i * (WARP_SIZE/QI4_K) + i/QI4_K], &y_ds[index_y/QI8_1]); +} + +static __device__ __forceinline__ float vec_dot_q5_K_q8_1( + const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { + +#ifndef GGML_QKK_64 + const block_q5_K * bq5_K = (const block_q5_K *) vbq; + + int vl[2]; + int vh[2]; + int u[2*QR5_K]; + float d8[QR5_K]; + + const int bq8_offset = QR5_K * ((iqs/2) / (QI8_1/2)); + const int * ql = (const int *)(bq5_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4)); + const int * qh = (const int *)(bq5_K->qh + 4 * ((iqs/2)%4)); + + vl[0] = ql[0]; + vl[1] = ql[4]; + + vh[0] = qh[0] >> bq8_offset; + vh[1] = qh[4] >> bq8_offset; + + const uint16_t * scales = (const uint16_t *)bq5_K->scales; + uint16_t aux[2]; + const int j = bq8_offset/2; + if (j < 2) { + aux[0] = scales[j+0] & 0x3f3f; + aux[1] = scales[j+2] & 0x3f3f; + } else { + aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2); + aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2); + } + const uint8_t * sc = (const uint8_t *)aux; + const uint8_t * m = sc + 2; + +#pragma unroll + for (int i = 0; i < QR5_K; ++i) { + const block_q8_1 * bq8i = bq8_1 + bq8_offset + i; + d8[i] = __low2float(bq8i->ds); + + const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4); + u[2*i+0] = q8[0]; + u[2*i+1] = q8[4]; + } + + return vec_dot_q5_K_q8_1_impl_vmmq(vl, vh, u, sc, m, bq5_K->dm, d8); + +#else + +#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics + const block_q5_K * bq5_K = (const block_q5_K *) vbq; + + const int8_t * s = bq5_K->scales; + + const float d = bq5_K->d; + + const float d8_1 = __low2half(bq8_1[0].ds); + const float d8_2 = __low2half(bq8_1[1].ds); + + const int ui1 = *((const int *)bq8_1[0].qs + (iqs/2)); + const int ui2 = *((const int *)bq8_1[0].qs + (iqs/2) + 4); + const int ui3 = *((const int *)bq8_1[1].qs + (iqs/2)); + const int ui4 = *((const int *)bq8_1[1].qs + (iqs/2) + 4); + + const int * ql = (const int *)bq5_K->qs + (iqs/2); + const int vl1 = ql[0]; + const int vl2 = ql[4]; + + const int step = 4 * (iqs/2); // 0, 4, 8, 12 + const int im = step/8; // = 0 for iqs = 0, 2, = 1 for iqs = 4, 6 + const int in = step%8; // 0, 4, 0, 4 + const int vh = (*((const int *)(bq5_K->qh + in))) >> im; + + const int v1 = (((vh << 4) & 0x10101010) ^ 0x10101010) | ((vl1 >> 0) & 0x0f0f0f0f); + const int v2 = (((vh << 2) & 0x10101010) ^ 0x10101010) | ((vl2 >> 0) & 0x0f0f0f0f); + const int v3 = (((vh >> 0) & 0x10101010) ^ 0x10101010) | ((vl1 >> 4) & 0x0f0f0f0f); + const int v4 = (((vh >> 2) & 0x10101010) ^ 0x10101010) | ((vl2 >> 4) & 0x0f0f0f0f); + + const float sumf_d = d8_1 * (__dp4a(ui1, v1, 0) * s[0] + __dp4a(ui2, v2, 0) * s[1]) + + d8_2 * (__dp4a(ui3, v3, 0) * s[2] + __dp4a(ui4, v4, 0) * s[3]); + + return d * sumf_d; + +#else + assert(false); + return 0.0f; // only to satisfy the compiler +#endif // __CUDA_ARCH__ >= MIN_CC_DP4A + +#endif +} + +template static __device__ __forceinline__ void allocate_tiles_q5_K(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { + + __shared__ int tile_x_ql[mmq_y * (2*WARP_SIZE) + mmq_y]; + __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI5_K) + mmq_y/QI5_K]; + __shared__ int tile_x_sc[mmq_y * (WARP_SIZE/8) + mmq_y/8]; + + *x_ql = tile_x_ql; + *x_dm = tile_x_dm; + *x_sc = tile_x_sc; +} + +template static __device__ __forceinline__ void load_tiles_q5_K( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { + + __builtin_assume(i_offset >= 0); + __builtin_assume(i_offset < nwarps); + __builtin_assume(k >= 0); + __builtin_assume(k < WARP_SIZE); + + const int kbx = k / QI5_K; // == 0 if QK_K == 256 + const int kqsx = k % QI5_K; // == k if QK_K == 256 + + const block_q5_K * bx0 = (block_q5_K *) vx; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { + int i = i0 + i_offset; + + if (need_check) { + i = min(i, i_max); + } + + const block_q5_K * bxi = bx0 + i*blocks_per_row + kbx; + const int ky = QR5_K*kqsx; + + const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx); + const int ql0 = (ql >> 0) & 0x0F0F0F0F; + const int ql1 = (ql >> 4) & 0x0F0F0F0F; + + const int qh = get_int_from_uint8_aligned(bxi->qh, kqsx % (QI5_K/4)); + const int qh0 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 0)) << 4) & 0x10101010; + const int qh1 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 1)) << 4) & 0x10101010; + + const int kq0 = ky - ky % (QI5_K/2) + k % (QI5_K/4) + 0; + const int kq1 = ky - ky % (QI5_K/2) + k % (QI5_K/4) + (QI5_K/4); + + x_ql[i * (2*WARP_SIZE + 1) + kq0] = ql0 | qh0; + x_ql[i * (2*WARP_SIZE + 1) + kq1] = ql1 | qh1; + } + + const int blocks_per_tile_x_row = WARP_SIZE / QI5_K; // == 1 if QK_K == 256 + const int kbxd = k % blocks_per_tile_x_row; // == 0 if QK_K == 256 + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_K) { + int i = (i0 + i_offset * QI5_K + k / blocks_per_tile_x_row) % mmq_y; + + if (need_check) { + i = min(i, i_max); + } + + const block_q5_K * bxi = bx0 + i*blocks_per_row + kbxd; + +#if QK_K == 256 + x_dm[i * (WARP_SIZE/QI5_K) + i / QI5_K + kbxd] = bxi->dm; +#endif + } + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) { + int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y; + + if (need_check) { + i = min(i, i_max); + } + + const block_q5_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / (QI5_K/8); + + const int * scales = (int *) bxi->scales; + + const int ksc = k % (WARP_SIZE/8); + + // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8 + int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits + scales8 |= (scales[ksc/2] >> (2 * (ksc % 2))) & 0x30303030; // upper 2 bits + + x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8; + } +} + +static __device__ __forceinline__ float vec_dot_q5_K_q8_1_mul_mat( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { + + const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/16]) + 2 * ((k % 16) / 8); + + const int index_x = i * (QR5_K*WARP_SIZE + 1) + QR5_K*k; + const int index_y = j * WARP_SIZE + (QR5_K*k) % WARP_SIZE; + return vec_dot_q5_K_q8_1_impl_mmq(&x_ql[index_x], &y_qs[index_y], sc, sc+8, + x_dm[i * (WARP_SIZE/QI5_K) + i/QI5_K], &y_ds[index_y/QI8_1]); +} + +static __device__ __forceinline__ float vec_dot_q6_K_q8_1( + const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs) { + + const block_q6_K * bq6_K = (const block_q6_K *) vbq; + + const int bq8_offset = 2 * QR6_K * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/4); + const int scale_offset = (QI6_K/4) * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/8); + const int vh_shift = 2 * ((iqs % (QI6_K/2)) / (QI6_K/4)); + + const int vl = get_int_from_uint8(bq6_K->ql, iqs); + const int vh = get_int_from_uint8(bq6_K->qh, (QI6_K/4) * (iqs / (QI6_K/2)) + iqs % (QI6_K/4)) >> vh_shift; + + const int8_t * scales = bq6_K->scales + scale_offset; + + int u[QR6_K]; + float d8[QR6_K]; + +#pragma unroll + for (int i = 0; i < QR6_K; ++i) { + u[i] = get_int_from_int8_aligned(bq8_1[bq8_offset + 2*i].qs, iqs % QI8_1); + d8[i] = __low2half(bq8_1[bq8_offset + 2*i].ds); + } + + return vec_dot_q6_K_q8_1_impl_mmvq(vl, vh, u, scales, bq6_K->d, d8); +} + +template static __device__ __forceinline__ void allocate_tiles_q6_K(int ** x_ql, half2 ** x_dm, int ** x_qh, int ** x_sc) { + + __shared__ int tile_x_ql[mmq_y * (2*WARP_SIZE) + mmq_y]; + __shared__ half2 tile_x_dm[mmq_y * (WARP_SIZE/QI6_K) + mmq_y/QI6_K]; + __shared__ int tile_x_sc[mmq_y * (WARP_SIZE/8) + mmq_y/8]; + + *x_ql = tile_x_ql; + *x_dm = tile_x_dm; + *x_sc = tile_x_sc; +} + +template static __device__ __forceinline__ void load_tiles_q6_K( + const void * __restrict__ vx, int * __restrict__ x_ql, half2 * __restrict__ x_dm, int * __restrict__ x_qh, + int * __restrict__ x_sc, const int & i_offset, const int & i_max, const int & k, const int & blocks_per_row) { + + __builtin_assume(i_offset >= 0); + __builtin_assume(i_offset < nwarps); + __builtin_assume(k >= 0); + __builtin_assume(k < WARP_SIZE); + + const int kbx = k / QI6_K; // == 0 if QK_K == 256 + const int kqsx = k % QI6_K; // == k if QK_K == 256 + + const block_q6_K * bx0 = (block_q6_K *) vx; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps) { + int i = i0 + i_offset; + + if (need_check) { + i = min(i, i_max); + } + + const block_q6_K * bxi = bx0 + i*blocks_per_row + kbx; + const int ky = QR6_K*kqsx; + + const int ql = get_int_from_uint8(bxi->ql, kqsx); + const int ql0 = (ql >> 0) & 0x0F0F0F0F; + const int ql1 = (ql >> 4) & 0x0F0F0F0F; + + const int qh = get_int_from_uint8(bxi->qh, (QI6_K/4) * (kqsx / (QI6_K/2)) + kqsx % (QI6_K/4)); + const int qh0 = ((qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4)))) << 4) & 0x30303030; + const int qh1 = (qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4)))) & 0x30303030; + + const int kq0 = ky - ky % QI6_K + k % (QI6_K/2) + 0; + const int kq1 = ky - ky % QI6_K + k % (QI6_K/2) + (QI6_K/2); + + x_ql[i * (2*WARP_SIZE + 1) + kq0] = __vsubss4(ql0 | qh0, 0x20202020); + x_ql[i * (2*WARP_SIZE + 1) + kq1] = __vsubss4(ql1 | qh1, 0x20202020); + } + + const int blocks_per_tile_x_row = WARP_SIZE / QI6_K; // == 1 if QK_K == 256 + const int kbxd = k % blocks_per_tile_x_row; // == 0 if QK_K == 256 + float * x_dmf = (float *) x_dm; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI6_K) { + int i = (i0 + i_offset * QI6_K + k / blocks_per_tile_x_row) % mmq_y; + + if (need_check) { + i = min(i, i_max); + } + + const block_q6_K * bxi = bx0 + i*blocks_per_row + kbxd; + + x_dmf[i * (WARP_SIZE/QI6_K) + i / QI6_K + kbxd] = bxi->d; + } + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) { + int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y; + + if (need_check) { + i = min(i, i_max); + } + + const block_q6_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / 4; + + x_sc[i * (WARP_SIZE/8) + i / 8 + k % (WARP_SIZE/8)] = get_int_from_int8(bxi->scales, k % (QI6_K/8)); + } +} + +static __device__ __forceinline__ float vec_dot_q6_K_q8_1_mul_mat( + const int * __restrict__ x_ql, const half2 * __restrict__ x_dm, const int * __restrict__ x_qh, const int * __restrict__ x_sc, + const int * __restrict__ y_qs, const half2 * __restrict__ y_ds, const int & i, const int & j, const int & k) { + + const float * x_dmf = (const float *) x_dm; + const float * y_df = (const float *) y_ds; + + const int8_t * sc = ((const int8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/8]); + + const int index_x = i * (QR6_K*WARP_SIZE + 1) + QR6_K*k; + const int index_y = j * WARP_SIZE + (QR6_K*k) % WARP_SIZE; + return vec_dot_q6_K_q8_1_impl_mmq(&x_ql[index_x], &y_qs[index_y], sc, x_dmf[i * (WARP_SIZE/QI6_K) + i/QI6_K], &y_df[index_y/QI8_1]); +} + +template +static __device__ __forceinline__ void mul_mat_q( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + + const block_q_t * x = (const block_q_t *) vx; + const block_q8_1 * y = (const block_q8_1 *) vy; + + const int blocks_per_row_x = ncols_x / qk; + const int blocks_per_col_y = nrows_y / QK8_1; + const int blocks_per_warp = WARP_SIZE / qi; + + const int & ncols_dst = ncols_y; + + const int row_dst_0 = blockIdx.x*mmq_y; + const int & row_x_0 = row_dst_0; + + const int col_dst_0 = blockIdx.y*mmq_x; + const int & col_y_0 = col_dst_0; + + int * tile_x_ql = nullptr; + half2 * tile_x_dm = nullptr; + int * tile_x_qh = nullptr; + int * tile_x_sc = nullptr; + + allocate_tiles(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc); + + __shared__ int tile_y_qs[mmq_x * WARP_SIZE]; + __shared__ half2 tile_y_ds[mmq_x * WARP_SIZE/QI8_1]; + + float sum[mmq_y/WARP_SIZE][mmq_x/nwarps] = {0.0f}; + + for (int ib0 = 0; ib0 < blocks_per_row_x; ib0 += blocks_per_warp) { + + load_tiles(x + row_x_0*blocks_per_row_x + ib0, tile_x_ql, tile_x_dm, tile_x_qh, tile_x_sc, + threadIdx.y, nrows_x-row_x_0-1, threadIdx.x, blocks_per_row_x); + +#pragma unroll + for (int ir = 0; ir < qr; ++ir) { + const int kqs = ir*WARP_SIZE + threadIdx.x; + const int kbxd = kqs / QI8_1; + +#pragma unroll + for (int i = 0; i < mmq_x; i += nwarps) { + const int col_y_eff = min(col_y_0 + threadIdx.y + i, ncols_y-1); // to prevent out-of-bounds memory accesses + + const block_q8_1 * by0 = &y[col_y_eff*blocks_per_col_y + ib0 * (qk/QK8_1) + kbxd]; + + const int index_y = (threadIdx.y + i) * WARP_SIZE + kqs % WARP_SIZE; + tile_y_qs[index_y] = get_int_from_int8_aligned(by0->qs, threadIdx.x % QI8_1); + } + +#pragma unroll + for (int ids0 = 0; ids0 < mmq_x; ids0 += nwarps * QI8_1) { + const int ids = (ids0 + threadIdx.y * QI8_1 + threadIdx.x / (WARP_SIZE/QI8_1)) % mmq_x; + const int kby = threadIdx.x % (WARP_SIZE/QI8_1); + const int col_y_eff = min(col_y_0 + ids, ncols_y-1); + + // if the sum is not needed it's faster to transform the scale to f32 ahead of time + const half2 * dsi_src = &y[col_y_eff*blocks_per_col_y + ib0 * (qk/QK8_1) + ir*(WARP_SIZE/QI8_1) + kby].ds; + half2 * dsi_dst = &tile_y_ds[ids * (WARP_SIZE/QI8_1) + kby]; + if (need_sum) { + *dsi_dst = *dsi_src; + } else { + float * dfi_dst = (float *) dsi_dst; + *dfi_dst = __low2half(*dsi_src); + } + } + + __syncthreads(); + +// #pragma unroll // unrolling this loop causes too much register pressure + for (int k = ir*WARP_SIZE/qr; k < (ir+1)*WARP_SIZE/qr; k += vdr) { +#pragma unroll + for (int j = 0; j < mmq_x; j += nwarps) { +#pragma unroll + for (int i = 0; i < mmq_y; i += WARP_SIZE) { + sum[i/WARP_SIZE][j/nwarps] += vec_dot( + tile_x_ql, tile_x_dm, tile_x_qh, tile_x_sc, tile_y_qs, tile_y_ds, + threadIdx.x + i, threadIdx.y + j, k); + } + } + } + + __syncthreads(); + } + } + +#pragma unroll + for (int j = 0; j < mmq_x; j += nwarps) { + const int col_dst = col_dst_0 + j + threadIdx.y; + + if (col_dst >= ncols_dst) { + return; + } + +#pragma unroll + for (int i = 0; i < mmq_y; i += WARP_SIZE) { + const int row_dst = row_dst_0 + threadIdx.x + i; + + if (row_dst >= nrows_dst) { + continue; + } + + dst[col_dst*nrows_dst + row_dst] = sum[i/WARP_SIZE][j/nwarps]; + } + } +} + +#define MMQ_X_Q4_0_AMPERE 64 +#define MMQ_Y_Q4_0_AMPERE 128 +#define NWARPS_Q4_0_AMPERE 4 +#define MMQ_X_Q4_0_PASCAL 64 +#define MMQ_Y_Q4_0_PASCAL 64 +#define NWARPS_Q4_0_PASCAL 8 + +template static __global__ void mul_mat_q4_0( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + +#if __CUDA_ARCH__ >= CC_TURING + const int mmq_x = MMQ_X_Q4_0_AMPERE; + const int mmq_y = MMQ_Y_Q4_0_AMPERE; + const int nwarps = NWARPS_Q4_0_AMPERE; + + mul_mat_q, + load_tiles_q4_0, VDR_Q4_0_Q8_1_MMQ, vec_dot_q4_0_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + +#elif __CUDA_ARCH__ >= MIN_CC_DP4A + const int mmq_x = MMQ_X_Q4_0_PASCAL; + const int mmq_y = MMQ_Y_Q4_0_PASCAL; + const int nwarps = NWARPS_Q4_0_PASCAL; + + mul_mat_q, + load_tiles_q4_0, VDR_Q4_0_Q8_1_MMQ, vec_dot_q4_0_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); +#else + (void) vec_dot_q4_0_q8_1_mul_mat; + assert(false); +#endif // __CUDA_ARCH__ >= CC_TURING +} + +#define MMQ_X_Q4_1_AMPERE 64 +#define MMQ_Y_Q4_1_AMPERE 128 +#define NWARPS_Q4_1_AMPERE 4 +#define MMQ_X_Q4_1_PASCAL 64 +#define MMQ_Y_Q4_1_PASCAL 64 +#define NWARPS_Q4_1_PASCAL 8 + +template static __global__ void +#if __CUDA_ARCH__ < CC_TURING + __launch_bounds__(WARP_SIZE*NWARPS_Q4_1_PASCAL, 2) +#endif // __CUDA_ARCH__ < CC_TURING + mul_mat_q4_1( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + +#if __CUDA_ARCH__ >= CC_TURING + const int mmq_x = MMQ_X_Q4_1_AMPERE; + const int mmq_y = MMQ_Y_Q4_1_AMPERE; + const int nwarps = NWARPS_Q4_1_AMPERE; + + mul_mat_q, + load_tiles_q4_1, VDR_Q4_1_Q8_1_MMQ, vec_dot_q4_1_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + +#elif __CUDA_ARCH__ >= MIN_CC_DP4A + const int mmq_x = MMQ_X_Q4_1_PASCAL; + const int mmq_y = MMQ_Y_Q4_1_PASCAL; + const int nwarps = NWARPS_Q4_1_PASCAL; + + mul_mat_q, + load_tiles_q4_1, VDR_Q4_1_Q8_1_MMQ, vec_dot_q4_1_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); +#else + (void) vec_dot_q4_1_q8_1_mul_mat; + assert(false); +#endif // __CUDA_ARCH__ >= CC_TURING +} + +#define MMQ_X_Q5_0_AMPERE 128 +#define MMQ_Y_Q5_0_AMPERE 64 +#define NWARPS_Q5_0_AMPERE 4 +#define MMQ_X_Q5_0_PASCAL 64 +#define MMQ_Y_Q5_0_PASCAL 64 +#define NWARPS_Q5_0_PASCAL 8 + +template static __global__ void mul_mat_q5_0( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + +#if __CUDA_ARCH__ >= CC_TURING + const int mmq_x = MMQ_X_Q5_0_AMPERE; + const int mmq_y = MMQ_Y_Q5_0_AMPERE; + const int nwarps = NWARPS_Q5_0_AMPERE; + + mul_mat_q, + load_tiles_q5_0, VDR_Q5_0_Q8_1_MMQ, vec_dot_q5_0_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + +#elif __CUDA_ARCH__ >= MIN_CC_DP4A + const int mmq_x = MMQ_X_Q5_0_PASCAL; + const int mmq_y = MMQ_Y_Q5_0_PASCAL; + const int nwarps = NWARPS_Q5_0_PASCAL; + + mul_mat_q, + load_tiles_q5_0, VDR_Q5_0_Q8_1_MMQ, vec_dot_q5_0_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); +#else + (void) vec_dot_q5_0_q8_1_mul_mat; + assert(false); +#endif // __CUDA_ARCH__ >= CC_TURING +} + +#define MMQ_X_Q5_1_AMPERE 128 +#define MMQ_Y_Q5_1_AMPERE 64 +#define NWARPS_Q5_1_AMPERE 4 +#define MMQ_X_Q5_1_PASCAL 64 +#define MMQ_Y_Q5_1_PASCAL 64 +#define NWARPS_Q5_1_PASCAL 8 + +template static __global__ void mul_mat_q5_1( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + +#if __CUDA_ARCH__ >= CC_TURING + const int mmq_x = MMQ_X_Q5_1_AMPERE; + const int mmq_y = MMQ_Y_Q5_1_AMPERE; + const int nwarps = NWARPS_Q5_1_AMPERE; + + mul_mat_q, + load_tiles_q5_1, VDR_Q5_1_Q8_1_MMQ, vec_dot_q5_1_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + +#elif __CUDA_ARCH__ >= MIN_CC_DP4A + const int mmq_x = MMQ_X_Q5_1_PASCAL; + const int mmq_y = MMQ_Y_Q5_1_PASCAL; + const int nwarps = NWARPS_Q5_1_PASCAL; + + mul_mat_q, + load_tiles_q5_1, VDR_Q5_1_Q8_1_MMQ, vec_dot_q5_1_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); +#else + (void) vec_dot_q5_1_q8_1_mul_mat; + assert(false); +#endif // __CUDA_ARCH__ >= CC_TURING +} + +#define MMQ_X_Q8_0_AMPERE 128 +#define MMQ_Y_Q8_0_AMPERE 64 +#define NWARPS_Q8_0_AMPERE 4 +#define MMQ_X_Q8_0_PASCAL 64 +#define MMQ_Y_Q8_0_PASCAL 64 +#define NWARPS_Q8_0_PASCAL 8 + +template static __global__ void mul_mat_q8_0( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + +#if __CUDA_ARCH__ >= CC_TURING + const int mmq_x = MMQ_X_Q8_0_AMPERE; + const int mmq_y = MMQ_Y_Q8_0_AMPERE; + const int nwarps = NWARPS_Q8_0_AMPERE; + + mul_mat_q, + load_tiles_q8_0, VDR_Q8_0_Q8_1_MMQ, vec_dot_q8_0_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + +#elif __CUDA_ARCH__ >= MIN_CC_DP4A + const int mmq_x = MMQ_X_Q8_0_PASCAL; + const int mmq_y = MMQ_Y_Q8_0_PASCAL; + const int nwarps = NWARPS_Q8_0_PASCAL; + + mul_mat_q, + load_tiles_q8_0, VDR_Q8_0_Q8_1_MMQ, vec_dot_q8_0_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); +#else + (void) vec_dot_q8_0_q8_1_mul_mat; + assert(false); +#endif // __CUDA_ARCH__ >= CC_TURING +} + +#define MMQ_X_Q2_K_AMPERE 64 +#define MMQ_Y_Q2_K_AMPERE 128 +#define NWARPS_Q2_K_AMPERE 4 +#define MMQ_X_Q2_K_PASCAL 64 +#define MMQ_Y_Q2_K_PASCAL 64 +#define NWARPS_Q2_K_PASCAL 8 + +template static __global__ void mul_mat_q2_K( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + +#if __CUDA_ARCH__ >= CC_TURING + const int mmq_x = MMQ_X_Q2_K_AMPERE; + const int mmq_y = MMQ_Y_Q2_K_AMPERE; + const int nwarps = NWARPS_Q2_K_AMPERE; + + mul_mat_q, + load_tiles_q2_K, VDR_Q2_K_Q8_1_MMQ, vec_dot_q2_K_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + +#elif __CUDA_ARCH__ >= MIN_CC_DP4A + const int mmq_x = MMQ_X_Q2_K_PASCAL; + const int mmq_y = MMQ_Y_Q2_K_PASCAL; + const int nwarps = NWARPS_Q2_K_PASCAL; + + mul_mat_q, + load_tiles_q2_K, VDR_Q2_K_Q8_1_MMQ, vec_dot_q2_K_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); +#else + (void) vec_dot_q2_K_q8_1_mul_mat; + assert(false); +#endif // __CUDA_ARCH__ >= CC_TURING +} + +#define MMQ_X_Q3_K_AMPERE 128 +#define MMQ_Y_Q3_K_AMPERE 128 +#define NWARPS_Q3_K_AMPERE 4 +#define MMQ_X_Q3_K_PASCAL 64 +#define MMQ_Y_Q3_K_PASCAL 64 +#define NWARPS_Q3_K_PASCAL 8 + +template static __global__ void +#if __CUDA_ARCH__ < CC_TURING + __launch_bounds__(WARP_SIZE*NWARPS_Q3_K_PASCAL, 2) +#endif // __CUDA_ARCH__ < CC_TURING + mul_mat_q3_K( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + +#if __CUDA_ARCH__ >= CC_TURING + const int mmq_x = MMQ_X_Q3_K_AMPERE; + const int mmq_y = MMQ_Y_Q3_K_AMPERE; + const int nwarps = NWARPS_Q3_K_AMPERE; + + mul_mat_q, + load_tiles_q3_K, VDR_Q3_K_Q8_1_MMQ, vec_dot_q3_K_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + +#elif __CUDA_ARCH__ >= MIN_CC_DP4A + const int mmq_x = MMQ_X_Q3_K_PASCAL; + const int mmq_y = MMQ_Y_Q3_K_PASCAL; + const int nwarps = NWARPS_Q3_K_PASCAL; + + mul_mat_q, + load_tiles_q3_K, VDR_Q3_K_Q8_1_MMQ, vec_dot_q3_K_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); +#else + (void) vec_dot_q3_K_q8_1_mul_mat; + assert(false); +#endif // __CUDA_ARCH__ >= CC_TURING +} + +#define MMQ_X_Q4_K_AMPERE 64 +#define MMQ_Y_Q4_K_AMPERE 128 +#define NWARPS_Q4_K_AMPERE 4 +#define MMQ_X_Q4_K_PASCAL 64 +#define MMQ_Y_Q4_K_PASCAL 64 +#define NWARPS_Q4_K_PASCAL 8 + +template static __global__ void +#if __CUDA_ARCH__ < CC_TURING + __launch_bounds__(WARP_SIZE*NWARPS_Q4_K_PASCAL, 2) +#endif // __CUDA_ARCH__ < CC_TURING + mul_mat_q4_K( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + +#if __CUDA_ARCH__ >= CC_TURING + const int mmq_x = MMQ_X_Q4_K_AMPERE; + const int mmq_y = MMQ_Y_Q4_K_AMPERE; + const int nwarps = NWARPS_Q4_K_AMPERE; + + mul_mat_q, + load_tiles_q4_K, VDR_Q4_K_Q8_1_MMQ, vec_dot_q4_K_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + +#elif __CUDA_ARCH__ >= MIN_CC_DP4A + const int mmq_x = MMQ_X_Q4_K_PASCAL; + const int mmq_y = MMQ_Y_Q4_K_PASCAL; + const int nwarps = NWARPS_Q4_K_PASCAL; + + mul_mat_q, + load_tiles_q4_K, VDR_Q4_K_Q8_1_MMQ, vec_dot_q4_K_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); +#else + (void) vec_dot_q4_K_q8_1_mul_mat; + assert(false); +#endif // __CUDA_ARCH__ >= CC_TURING +} + +#define MMQ_X_Q5_K_AMPERE 64 +#define MMQ_Y_Q5_K_AMPERE 128 +#define NWARPS_Q5_K_AMPERE 4 +#define MMQ_X_Q5_K_PASCAL 64 +#define MMQ_Y_Q5_K_PASCAL 64 +#define NWARPS_Q5_K_PASCAL 8 + +template static __global__ void mul_mat_q5_K( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + +#if __CUDA_ARCH__ >= CC_TURING + const int mmq_x = MMQ_X_Q5_K_AMPERE; + const int mmq_y = MMQ_Y_Q5_K_AMPERE; + const int nwarps = NWARPS_Q5_K_AMPERE; + + mul_mat_q, + load_tiles_q5_K, VDR_Q5_K_Q8_1_MMQ, vec_dot_q5_K_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + +#elif __CUDA_ARCH__ >= MIN_CC_DP4A + const int mmq_x = MMQ_X_Q5_K_PASCAL; + const int mmq_y = MMQ_Y_Q5_K_PASCAL; + const int nwarps = NWARPS_Q5_K_PASCAL; + + mul_mat_q, + load_tiles_q5_K, VDR_Q5_K_Q8_1_MMQ, vec_dot_q5_K_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); +#else + (void) vec_dot_q5_K_q8_1_mul_mat; + assert(false); +#endif // __CUDA_ARCH__ >= CC_TURING +} + +#define MMQ_X_Q6_K_AMPERE 64 +#define MMQ_Y_Q6_K_AMPERE 64 +#define NWARPS_Q6_K_AMPERE 4 +#define MMQ_X_Q6_K_PASCAL 64 +#define MMQ_Y_Q6_K_PASCAL 64 +#define NWARPS_Q6_K_PASCAL 8 + +template static __global__ void +#if __CUDA_ARCH__ < CC_TURING + __launch_bounds__(WARP_SIZE*NWARPS_Q6_K_PASCAL, 2) +#endif // __CUDA_ARCH__ < CC_TURING + mul_mat_q6_K( + const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst) { + +#if __CUDA_ARCH__ >= CC_TURING + const int mmq_x = MMQ_X_Q6_K_AMPERE; + const int mmq_y = MMQ_Y_Q6_K_AMPERE; + const int nwarps = NWARPS_Q6_K_AMPERE; + + mul_mat_q, + load_tiles_q6_K, VDR_Q6_K_Q8_1_MMQ, vec_dot_q6_K_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + +#elif __CUDA_ARCH__ >= MIN_CC_DP4A + const int mmq_x = MMQ_X_Q6_K_PASCAL; + const int mmq_y = MMQ_Y_Q6_K_PASCAL; + const int nwarps = NWARPS_Q6_K_PASCAL; + + mul_mat_q, + load_tiles_q6_K, VDR_Q6_K_Q8_1_MMQ, vec_dot_q6_K_q8_1_mul_mat> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); +#else + (void) vec_dot_q6_K_q8_1_mul_mat; + assert(false); +#endif // __CUDA_ARCH__ >= CC_TURING +} + +template +static __global__ void mul_mat_vec_q(const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, const int ncols, const int nrows) { + const int row = blockIdx.y*blockDim.y + threadIdx.y; + + if (row >= nrows) { + return; + } + + const int blocks_per_row = ncols / qk; + const int blocks_per_warp = vdr * WARP_SIZE / qi; + +// partial sum for each thread + float tmp = 0.0f; + + const block_q_t * x = (const block_q_t *) vx; + const block_q8_1 * y = (const block_q8_1 *) vy; + + for (int i = 0; i < blocks_per_row; i += blocks_per_warp) { + const int ibx = row*blocks_per_row + i + threadIdx.x / (qi/vdr); // x block index + + const int iby = (i + threadIdx.x / (qi/vdr)) * (qk/QK8_1); // y block index that aligns with ibx + + const int iqs = vdr * (threadIdx.x % (qi/vdr)); // x block quant index when casting the quants to int + + tmp += vec_dot_q_cuda(&x[ibx], &y[iby], iqs); + } + + // sum up partial sums and write back result +#pragma unroll + for (int mask = 16; mask > 0; mask >>= 1) { + tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); + } + + if (threadIdx.x == 0) { + dst[row] = tmp; + } +} + template -static __global__ void dequantize_mul_mat_vec(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows) { +static __global__ void dequantize_mul_mat_vec(const void * __restrict__ vx, const dfloat * __restrict__ y, float * __restrict__ dst, const int ncols, const int nrows) { // qk = quantized weights per x block // qr = number of quantized weights per data value in x block const int row = blockIdx.y*blockDim.y + threadIdx.y; @@ -1247,11 +3805,11 @@ static __global__ void dequantize_mul_mat_vec(const void * vx, const dfloat * y, const int y_offset = qr == 1 ? 1 : qk/2; // partial sum for each thread -#ifdef GGML_CUDA_DMMV_F16 +#ifdef GGML_CUDA_F16 half2 tmp = {0.0f, 0.0f}; // two sums for f16 to take advantage of half2 intrinsics #else float tmp = 0.0f; -#endif // GGML_CUDA_DMMV_F16 +#endif // GGML_CUDA_F16 for (int i = 0; i < ncols; i += iter_stride) { const int col = i + vals_per_iter*tid; @@ -1271,7 +3829,7 @@ static __global__ void dequantize_mul_mat_vec(const void * vx, const dfloat * y, // matrix multiplication // for qr = 2 the y index needs to increase by 1 per j iter because of y_offset = qk/2 -#ifdef GGML_CUDA_DMMV_F16 +#ifdef GGML_CUDA_F16 tmp += __hmul2(v, { y[iybs + iqs + j/qr + 0], y[iybs + iqs + j/qr + y_offset] @@ -1279,31 +3837,34 @@ static __global__ void dequantize_mul_mat_vec(const void * vx, const dfloat * y, #else tmp += v.x * y[iybs + iqs + j/qr + 0]; tmp += v.y * y[iybs + iqs + j/qr + y_offset]; -#endif // GGML_CUDA_DMMV_F16 +#endif // GGML_CUDA_F16 } } // sum up partial sums and write back result - __syncthreads(); #pragma unroll for (int mask = 16; mask > 0; mask >>= 1) { tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); } if (tid == 0) { -#ifdef GGML_CUDA_DMMV_F16 +#ifdef GGML_CUDA_F16 dst[row] = tmp.x + tmp.y; #else dst[row] = tmp; -#endif // GGML_CUDA_DMMV_F16 +#endif // GGML_CUDA_F16 } } -static __global__ void mul_mat_p021_f16_f32(const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x, const int nchannels_x) { +static __global__ void mul_mat_p021_f16_f32( + const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst, + const int ncols_x, const int nrows_x, const int nchannels_x, const int nchannels_y) { + const half * x = (const half *) vx; const int row_x = blockDim.y*blockIdx.y + threadIdx.y; const int channel = blockDim.z*blockIdx.z + threadIdx.z; + const int channel_x = channel / (nchannels_y / nchannels_x); const int nrows_y = ncols_x; const int nrows_dst = nrows_x; @@ -1319,7 +3880,7 @@ static __global__ void mul_mat_p021_f16_f32(const void * vx, const float * y, fl } // x is transposed and permuted - const int ix = row_x*nchannels_x*ncols_x + channel*ncols_x + col_x; + const int ix = row_x*nchannels_x*ncols_x + channel_x*ncols_x + col_x; const float xi = __half2float(x[ix]); const int row_y = col_x; @@ -1335,7 +3896,6 @@ static __global__ void mul_mat_p021_f16_f32(const void * vx, const float * y, fl const int idst = channel*nrows_dst + row_dst; // sum up partial sums and write back result - __syncthreads(); #pragma unroll for (int mask = 16; mask > 0; mask >>= 1) { tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); @@ -1347,13 +3907,14 @@ static __global__ void mul_mat_p021_f16_f32(const void * vx, const float * y, fl } static __global__ void mul_mat_vec_nc_f16_f32( // nc == non-contiguous - const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x, - const int row_stride_x, const int channel_stride_x) { + const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst, const int ncols_x, const int nrows_x, + const int row_stride_x, const int channel_stride_x, const int channel_x_divisor) { const half * x = (const half *) vx; const int row_x = blockDim.y*blockIdx.y + threadIdx.y; const int channel = blockDim.z*blockIdx.z + threadIdx.z; + const int channel_x = channel / channel_x_divisor; const int nrows_y = ncols_x; const int nrows_dst = nrows_x; @@ -1370,7 +3931,7 @@ static __global__ void mul_mat_vec_nc_f16_f32( // nc == non-contiguous break; } - const int ix = channel*channel_stride_x + row_x*row_stride_x + col_x; + const int ix = channel_x*channel_stride_x + row_x*row_stride_x + col_x; const float xi = __half2float(x[ix]); const int row_y = col_x; @@ -1381,7 +3942,6 @@ static __global__ void mul_mat_vec_nc_f16_f32( // nc == non-contiguous } // sum up partial sums and write back result - __syncthreads(); #pragma unroll for (int mask = 16; mask > 0; mask >>= 1) { tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); @@ -1432,17 +3992,18 @@ static __global__ void cpy_f32_f16(const char * cx, char * cdst, const int ne, } // rope == RoPE == rotary positional embedding -static __global__ void rope_f32(const float * x, float * dst, const int ncols, const float p, const float theta_scale) { - const int col = 2*(blockDim.x*blockIdx.x + threadIdx.x); +static __global__ void rope_f32(const float * x, float * dst, const int ncols, const float p0, + const float p_delta, const int p_delta_rows, const float theta_scale) { + const int col = 2*(blockDim.y*blockIdx.y + threadIdx.y); if (col >= ncols) { return; } - const int row = blockDim.y*blockIdx.y + threadIdx.y; + const int row = blockDim.x*blockIdx.x + threadIdx.x; const int i = row*ncols + col; - const float theta = p*powf(theta_scale, col/2); + const float theta = (p0 + p_delta * (row/p_delta_rows))*powf(theta_scale, col/2); const float sin_theta = sinf(theta); const float cos_theta = cosf(theta); @@ -1453,9 +4014,88 @@ static __global__ void rope_f32(const float * x, float * dst, const int ncols, c dst[i + 1] = x0*sin_theta + x1*cos_theta; } -static __global__ void diag_mask_inf_f32(const float * x, float * dst, const int ncols, const int rows_per_channel, const int n_past) { +static __global__ void rope_neox_f32(const float * x, float * dst, const int ncols, const float p0, + const float p_delta, const int p_delta_rows, const float theta_scale) { + const int col = 2*(blockDim.y*blockIdx.y + threadIdx.y); + + if (col >= ncols) { + return; + } + + const int row = blockDim.x*blockIdx.x + threadIdx.x; + const int i = row*ncols + col/2; + + const float theta = (p0 + p_delta * (row/p_delta_rows))*powf(theta_scale, col/2); + const float sin_theta = sinf(theta); + const float cos_theta = cosf(theta); + + const float x0 = x[i + 0]; + const float x1 = x[i + ncols/2]; + + dst[i + 0] = x0*cos_theta - x1*sin_theta; + dst[i + ncols/2] = x0*sin_theta + x1*cos_theta; +} + +static __global__ void rope_glm_f32(const float * x, float * dst, const int ncols, const float p, const float block_p, const float theta_scale) { const int col = blockDim.x*blockIdx.x + threadIdx.x; + const int half_n_dims = ncols/4; + + if (col >= half_n_dims) { + return; + } + const int row = blockDim.y*blockIdx.y + threadIdx.y; + const int i = row*ncols + col; + + const float col_theta_scale = powf(theta_scale, col); + + const float theta = p*col_theta_scale; + const float sin_theta = sinf(theta); + const float cos_theta = cosf(theta); + + const float x0 = x[i + 0]; + const float x1 = x[i + half_n_dims]; + + dst[i + 0] = x0*cos_theta - x1*sin_theta; + dst[i + half_n_dims] = x0*sin_theta + x1*cos_theta; + + const float block_theta = block_p*col_theta_scale; + const float sin_block_theta = sinf(block_theta); + const float cos_block_theta = cosf(block_theta); + + const float x2 = x[i + half_n_dims * 2]; + const float x3 = x[i + half_n_dims * 3]; + + dst[i + half_n_dims * 2] = x2*cos_block_theta - x3*sin_block_theta; + dst[i + half_n_dims * 3] = x2*sin_block_theta + x3*cos_block_theta; +} + +static __global__ void alibi_f32(const float * x, float * dst, const int ncols, const int k_rows, + const int n_heads_log2_floor, const float m0, const float m1) { + const int col = blockDim.x*blockIdx.x + threadIdx.x; + + if (col >= ncols) { + return; + } + + const int row = blockDim.y*blockIdx.y + threadIdx.y; + const int i = row*ncols + col; + + const int k = row/k_rows; + + float m_k; + if (k < n_heads_log2_floor) { + m_k = powf(m0, k + 1); + } else { + m_k = powf(m1, 2 * (k - n_heads_log2_floor) + 1); + } + + dst[i] = col * m_k + x[i]; +} + +static __global__ void diag_mask_inf_f32(const float * x, float * dst, const int ncols, const int rows_per_channel, const int n_past) { + const int col = blockDim.y*blockIdx.y + threadIdx.y; + const int row = blockDim.x*blockIdx.x + threadIdx.x; if (col >= ncols) { return; @@ -1468,44 +4108,44 @@ static __global__ void diag_mask_inf_f32(const float * x, float * dst, const int // the CUDA soft max implementation differs from the CPU implementation // instead of doubles floats are used -// values are also not normalized to the maximum value by subtracting it in the exponential function -// theoretically these changes could cause problems with rounding error and arithmetic overflow but for LLaMa it seems to be fine static __global__ void soft_max_f32(const float * x, float * dst, const int ncols) { - const int row = blockDim.y*blockIdx.y + threadIdx.y; - const int block_size = blockDim.x; - const int tid = threadIdx.x; + const int row = blockDim.x*blockIdx.x + threadIdx.x; + const int block_size = blockDim.y; + const int tid = threadIdx.y; - float tmp = 0.0; - - for (int block_start = 0; block_start < ncols; block_start += block_size) { - const int col = block_start + tid; - - if (col >= ncols) { - break; - } + float max_val = -INFINITY; + for (int col = tid; col < ncols; col += block_size) { const int i = row*ncols + col; - const float val = expf(x[i]); + max_val = max(max_val, x[i]); + } + + // find the max value in the block +#pragma unroll + for (int mask = 16; mask > 0; mask >>= 1) { + max_val = max(max_val, __shfl_xor_sync(0xffffffff, max_val, mask, 32)); + } + + float tmp = 0.f; + + for (int col = tid; col < ncols; col += block_size) { + const int i = row*ncols + col; + const float val = expf(x[i] - max_val); tmp += val; dst[i] = val; } // sum up partial sums - __syncthreads(); #pragma unroll for (int mask = 16; mask > 0; mask >>= 1) { tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); } - for (int block_start = 0; block_start < ncols; block_start += block_size) { - const int col = block_start + tid; - - if (col >= ncols) { - break; - } + const float inv_tmp = 1.f / tmp; + for (int col = tid; col < ncols; col += block_size) { const int i = row*ncols + col; - dst[i] /= tmp; + dst[i] *= inv_tmp; } } @@ -1519,9 +4159,9 @@ static __global__ void scale_f32(const float * x, float * dst, const float scale dst[i] = scale * x[i]; } -static void add_f32_cuda(const float * x, const float * y, float * dst, const int k, cudaStream_t stream) { - const int num_blocks = (k + CUDA_ADD_BLOCK_SIZE - 1) / CUDA_ADD_BLOCK_SIZE; - add_f32<<>>(x, y, dst, k); +static void add_f32_cuda(const float * x, const float * y, float * dst, const int kx, const int ky, cudaStream_t stream) { + const int num_blocks = (kx + CUDA_ADD_BLOCK_SIZE - 1) / CUDA_ADD_BLOCK_SIZE; + add_f32<<>>(x, y, dst, kx, ky); } static void add_f16_f32_f16_cuda(const half * x, const float * y, half * dst, const int k, cudaStream_t stream) { @@ -1534,15 +4174,33 @@ static void mul_f32_cuda(const float * x, const float * y, float * dst, const in mul_f32<<>>(x, y, dst, kx, ky); } +static void gelu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) { + const int num_blocks = (k + CUDA_GELU_BLOCK_SIZE - 1) / CUDA_GELU_BLOCK_SIZE; + gelu_f32<<>>(x, dst, k); +} + static void silu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) { const int num_blocks = (k + CUDA_SILU_BLOCK_SIZE - 1) / CUDA_SILU_BLOCK_SIZE; silu_f32<<>>(x, dst, k); } -static void rms_norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, cudaStream_t stream) { +static void norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % WARP_SIZE == 0); const dim3 block_dims(WARP_SIZE, 1, 1); - rms_norm_f32<<>>(x, dst, ncols); + norm_f32<<>>(x, dst, ncols); +} + +static void rms_norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float eps, cudaStream_t stream) { + GGML_ASSERT(ncols % WARP_SIZE == 0); + const dim3 block_dims(WARP_SIZE, 1, 1); + rms_norm_f32<<>>(x, dst, ncols, eps); +} + +static void quantize_row_q8_1_cuda(const float * x, void * vy, const int kx, const int ky, const int kx_padded, cudaStream_t stream) { + const int block_num_x = (kx_padded + CUDA_QUANTIZE_BLOCK_SIZE - 1) / CUDA_QUANTIZE_BLOCK_SIZE; + const dim3 num_blocks(block_num_x, ky, 1); + const dim3 block_size(CUDA_DEQUANTIZE_BLOCK_SIZE, 1, 1); + quantize_q8_1<<>>(x, vy, kx, kx_padded); } static void dequantize_row_q4_0_cuda(const void * vx, float * y, const int k, cudaStream_t stream) { @@ -1613,45 +4271,45 @@ static void dequantize_row_q6_K_cuda(const void * vx, float * y, const int k, cu static void dequantize_mul_mat_vec_q4_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_DMMV_Y - 1) / GGML_CUDA_DMMV_Y; + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; const dim3 block_nums(1, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_DMMV_Y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec <<>>(vx, y, dst, ncols, nrows); } static void dequantize_mul_mat_vec_q4_1_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_DMMV_Y - 1) / GGML_CUDA_DMMV_Y; + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; const dim3 block_nums(1, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_DMMV_Y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec <<>>(vx, y, dst, ncols, nrows); } static void dequantize_mul_mat_vec_q5_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_DMMV_Y - 1) / GGML_CUDA_DMMV_Y; + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; const dim3 block_nums(1, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_DMMV_Y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec <<>>(vx, y, dst, ncols, nrows); } static void dequantize_mul_mat_vec_q5_1_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_DMMV_Y - 1) / GGML_CUDA_DMMV_Y; + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; const dim3 block_nums(1, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_DMMV_Y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec <<>>(vx, y, dst, ncols, nrows); } static void dequantize_mul_mat_vec_q8_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_DMMV_Y - 1) / GGML_CUDA_DMMV_Y; + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; const dim3 block_nums(1, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_DMMV_Y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec <<>>(vx, y, dst, ncols, nrows); } @@ -1698,6 +4356,96 @@ static void dequantize_mul_mat_vec_q6_K_cuda(const void * vx, const float * y, f dequantize_mul_mat_vec_q6_k<<>>(vx, y, dst, ncols, nrows); } +static void mul_mat_vec_q4_0_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % QK4_0 == 0); + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; + const dim3 block_nums(1, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); + mul_mat_vec_q + <<>>(vx, vy, dst, ncols, nrows); +} + +static void mul_mat_vec_q4_1_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % QK4_1 == 0); + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; + const dim3 block_nums(1, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); + mul_mat_vec_q + <<>>(vx, vy, dst, ncols, nrows); +} + +static void mul_mat_vec_q5_0_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % QK5_0 == 0); + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; + const dim3 block_nums(1, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); + mul_mat_vec_q + <<>>(vx, vy, dst, ncols, nrows); +} + +static void mul_mat_vec_q5_1_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % QK5_1 == 0); + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; + const dim3 block_nums(1, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); + mul_mat_vec_q + <<>>(vx, vy, dst, ncols, nrows); +} + +static void mul_mat_vec_q8_0_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % QK8_0 == 0); + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; + const dim3 block_nums(1, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); + mul_mat_vec_q + <<>>(vx, vy, dst, ncols, nrows); +} + +static void mul_mat_vec_q2_K_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % QK_K == 0); + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; + const dim3 block_nums(1, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); + mul_mat_vec_q + <<>>(vx, vy, dst, ncols, nrows); +} + +static void mul_mat_vec_q3_K_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % QK_K == 0); + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; + const dim3 block_nums(1, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); + mul_mat_vec_q + <<>>(vx, vy, dst, ncols, nrows); +} + +static void mul_mat_vec_q4_K_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % QK_K == 0); + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; + const dim3 block_nums(1, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); + mul_mat_vec_q + <<>>(vx, vy, dst, ncols, nrows); +} + +static void mul_mat_vec_q5_K_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % QK_K == 0); + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; + const dim3 block_nums(1, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); + mul_mat_vec_q + <<>>(vx, vy, dst, ncols, nrows); +} + +static void mul_mat_vec_q6_K_q8_1_cuda(const void * vx, const void * vy, float * dst, const int ncols, const int nrows, cudaStream_t stream) { + GGML_ASSERT(ncols % QK_K == 0); + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; + const dim3 block_nums(1, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); + mul_mat_vec_q + <<>>(vx, vy, dst, ncols, nrows); +} + static void convert_fp16_to_fp32_cuda(const void * vx, float * y, const int k, cudaStream_t stream) { const int num_blocks = (k + CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / CUDA_DEQUANTIZE_BLOCK_SIZE; dequantize_block<1, 1, convert_f16><<>>(vx, y, k); @@ -1705,9 +4453,9 @@ static void convert_fp16_to_fp32_cuda(const void * vx, float * y, const int k, c static void convert_mul_mat_vec_f16_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0); - const int block_num_y = (nrows + GGML_CUDA_DMMV_Y - 1) / GGML_CUDA_DMMV_Y; + const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y; const dim3 block_nums(1, block_num_y, 1); - const dim3 block_dims(WARP_SIZE, GGML_CUDA_DMMV_Y, 1); + const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1); dequantize_mul_mat_vec<1, 1, convert_f16> <<>>(vx, y, dst, ncols, nrows); } @@ -1741,20 +4489,396 @@ static to_fp32_cuda_t ggml_get_to_fp32_cuda(ggml_type type) { } } -static void ggml_mul_mat_p021_f16_f32_cuda(const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x, const int nchannels_x, cudaStream_t stream) { - const dim3 block_nums(1, nrows_x, nchannels_x); +static void ggml_mul_mat_q4_0_q8_1_cuda( + const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, + const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + const int compute_capability = g_compute_capabilities[id]; + + int mmq_x, mmq_y, nwarps; + if (compute_capability >= CC_TURING) { + mmq_x = MMQ_X_Q4_0_AMPERE; + mmq_y = MMQ_Y_Q4_0_AMPERE; + nwarps = NWARPS_Q4_0_AMPERE; + } else if (compute_capability >= MIN_CC_DP4A) { + mmq_x = MMQ_X_Q4_0_PASCAL; + mmq_y = MMQ_Y_Q4_0_PASCAL; + nwarps = NWARPS_Q4_0_PASCAL; + } else { + GGML_ASSERT(false); + } + + const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; + const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; + const dim3 block_nums(block_num_x, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, nwarps, 1); + + if (nrows_x % mmq_y == 0) { + const bool need_check = false; + mul_mat_q4_0<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } else { + const bool need_check = true; + mul_mat_q4_0<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } +} + +static void ggml_mul_mat_q4_1_q8_1_cuda( + const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, + const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + const int compute_capability = g_compute_capabilities[id]; + + int mmq_x, mmq_y, nwarps; + if (compute_capability >= CC_TURING) { + mmq_x = MMQ_X_Q4_1_AMPERE; + mmq_y = MMQ_Y_Q4_1_AMPERE; + nwarps = NWARPS_Q4_1_AMPERE; + } else if (compute_capability >= MIN_CC_DP4A) { + mmq_x = MMQ_X_Q4_1_PASCAL; + mmq_y = MMQ_Y_Q4_1_PASCAL; + nwarps = NWARPS_Q4_1_PASCAL; + } else { + GGML_ASSERT(false); + } + + const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; + const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; + const dim3 block_nums(block_num_x, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, nwarps, 1); + + if (nrows_x % mmq_y == 0) { + const bool need_check = false; + mul_mat_q4_1<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } else { + const bool need_check = true; + mul_mat_q4_1<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } +} + +static void ggml_mul_mat_q5_0_q8_1_cuda( + const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, + const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + const int compute_capability = g_compute_capabilities[id]; + + int mmq_x, mmq_y, nwarps; + if (compute_capability >= CC_TURING) { + mmq_x = MMQ_X_Q5_0_AMPERE; + mmq_y = MMQ_Y_Q5_0_AMPERE; + nwarps = NWARPS_Q5_0_AMPERE; + } else if (compute_capability >= MIN_CC_DP4A) { + mmq_x = MMQ_X_Q5_0_PASCAL; + mmq_y = MMQ_Y_Q5_0_PASCAL; + nwarps = NWARPS_Q5_0_PASCAL; + } else { + GGML_ASSERT(false); + } + + const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; + const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; + const dim3 block_nums(block_num_x, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, nwarps, 1); + + if (nrows_x % mmq_y == 0) { + const bool need_check = false; + mul_mat_q5_0<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } else { + const bool need_check = true; + mul_mat_q5_0<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } +} + +static void ggml_mul_mat_q5_1_q8_1_cuda( + const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, + const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + const int compute_capability = g_compute_capabilities[id]; + + int mmq_x, mmq_y, nwarps; + if (compute_capability >= CC_TURING) { + mmq_x = MMQ_X_Q5_1_AMPERE; + mmq_y = MMQ_Y_Q5_1_AMPERE; + nwarps = NWARPS_Q5_1_AMPERE; + } else if (compute_capability >= MIN_CC_DP4A) { + mmq_x = MMQ_X_Q5_1_PASCAL; + mmq_y = MMQ_Y_Q5_1_PASCAL; + nwarps = NWARPS_Q5_1_PASCAL; + } else { + GGML_ASSERT(false); + } + + const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; + const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; + const dim3 block_nums(block_num_x, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, nwarps, 1); + + if (nrows_x % mmq_y == 0) { + const bool need_check = false; + mul_mat_q5_1<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } else { + const bool need_check = true; + mul_mat_q5_1<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } +} + +static void ggml_mul_mat_q8_0_q8_1_cuda( + const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, + const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + const int compute_capability = g_compute_capabilities[id]; + + int mmq_x, mmq_y, nwarps; + if (compute_capability >= CC_TURING) { + mmq_x = MMQ_X_Q8_0_AMPERE; + mmq_y = MMQ_Y_Q8_0_AMPERE; + nwarps = NWARPS_Q8_0_AMPERE; + } else if (compute_capability >= MIN_CC_DP4A) { + mmq_x = MMQ_X_Q8_0_PASCAL; + mmq_y = MMQ_Y_Q8_0_PASCAL; + nwarps = NWARPS_Q8_0_PASCAL; + } else { + GGML_ASSERT(false); + } + + const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; + const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; + const dim3 block_nums(block_num_x, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, nwarps, 1); + + if (nrows_x % mmq_y == 0) { + const bool need_check = false; + mul_mat_q8_0<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } else { + const bool need_check = true; + mul_mat_q8_0<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } +} + +static void ggml_mul_mat_q2_K_q8_1_cuda( + const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, + const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + const int compute_capability = g_compute_capabilities[id]; + + int mmq_x, mmq_y, nwarps; + if (compute_capability >= CC_TURING) { + mmq_x = MMQ_X_Q2_K_AMPERE; + mmq_y = MMQ_Y_Q2_K_AMPERE; + nwarps = NWARPS_Q2_K_AMPERE; + } else if (compute_capability >= MIN_CC_DP4A) { + mmq_x = MMQ_X_Q2_K_PASCAL; + mmq_y = MMQ_Y_Q2_K_PASCAL; + nwarps = NWARPS_Q2_K_PASCAL; + } else { + GGML_ASSERT(false); + } + + const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; + const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; + const dim3 block_nums(block_num_x, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, nwarps, 1); + + if (nrows_x % mmq_y == 0) { + const bool need_check = false; + mul_mat_q2_K<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } else { + const bool need_check = true; + mul_mat_q2_K<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } +} + +static void ggml_mul_mat_q3_K_q8_1_cuda( + const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, + const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { + +#if QK_K == 256 + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + const int compute_capability = g_compute_capabilities[id]; + + int mmq_x, mmq_y, nwarps; + if (compute_capability >= CC_TURING) { + mmq_x = MMQ_X_Q3_K_AMPERE; + mmq_y = MMQ_Y_Q3_K_AMPERE; + nwarps = NWARPS_Q3_K_AMPERE; + } else if (compute_capability >= MIN_CC_DP4A) { + mmq_x = MMQ_X_Q3_K_PASCAL; + mmq_y = MMQ_Y_Q3_K_PASCAL; + nwarps = NWARPS_Q3_K_PASCAL; + } else { + GGML_ASSERT(false); + } + + const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; + const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; + const dim3 block_nums(block_num_x, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, nwarps, 1); + + if (nrows_x % mmq_y == 0) { + const bool need_check = false; + mul_mat_q3_K<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } else { + const bool need_check = true; + mul_mat_q3_K<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } +#endif +} + +static void ggml_mul_mat_q4_K_q8_1_cuda( + const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, + const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + const int compute_capability = g_compute_capabilities[id]; + + int mmq_x, mmq_y, nwarps; + if (compute_capability >= CC_TURING) { + mmq_x = MMQ_X_Q4_K_AMPERE; + mmq_y = MMQ_Y_Q4_K_AMPERE; + nwarps = NWARPS_Q4_K_AMPERE; + } else if (compute_capability >= MIN_CC_DP4A) { + mmq_x = MMQ_X_Q4_K_PASCAL; + mmq_y = MMQ_Y_Q4_K_PASCAL; + nwarps = NWARPS_Q4_K_PASCAL; + } else { + GGML_ASSERT(false); + } + + const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; + const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; + const dim3 block_nums(block_num_x, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, nwarps, 1); + + if (nrows_x % mmq_y == 0) { + const bool need_check = false; + mul_mat_q4_K<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } else { + const bool need_check = true; + mul_mat_q4_K<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } +} + +static void ggml_mul_mat_q5_K_q8_1_cuda( + const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, + const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + const int compute_capability = g_compute_capabilities[id]; + + int mmq_x, mmq_y, nwarps; + if (compute_capability >= CC_TURING) { + mmq_x = MMQ_X_Q5_K_AMPERE; + mmq_y = MMQ_Y_Q5_K_AMPERE; + nwarps = NWARPS_Q5_K_AMPERE; + } else if (compute_capability >= MIN_CC_DP4A) { + mmq_x = MMQ_X_Q5_K_PASCAL; + mmq_y = MMQ_Y_Q5_K_PASCAL; + nwarps = NWARPS_Q5_K_PASCAL; + } else { + GGML_ASSERT(false); + } + + const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; + const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; + const dim3 block_nums(block_num_x, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, nwarps, 1); + + if (nrows_x % mmq_y == 0) { + const bool need_check = false; + mul_mat_q5_K<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } else { + const bool need_check = true; + mul_mat_q5_K<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } +} + +static void ggml_mul_mat_q6_K_q8_1_cuda( + const void * vx, const void * vy, float * dst, const int ncols_x, const int nrows_x, + const int ncols_y, const int nrows_y, const int nrows_dst, cudaStream_t stream) { + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + const int compute_capability = g_compute_capabilities[id]; + + int mmq_x, mmq_y, nwarps; + if (compute_capability >= CC_TURING) { + mmq_x = MMQ_X_Q6_K_AMPERE; + mmq_y = MMQ_Y_Q6_K_AMPERE; + nwarps = NWARPS_Q6_K_AMPERE; + } else if (compute_capability >= MIN_CC_DP4A) { + mmq_x = MMQ_X_Q6_K_PASCAL; + mmq_y = MMQ_Y_Q6_K_PASCAL; + nwarps = NWARPS_Q6_K_PASCAL; + } else { + GGML_ASSERT(false); + } + + const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y; + const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x; + const dim3 block_nums(block_num_x, block_num_y, 1); + const dim3 block_dims(WARP_SIZE, nwarps, 1); + + if (nrows_x % mmq_y == 0) { + const bool need_check = false; + mul_mat_q6_K<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } else { + const bool need_check = true; + mul_mat_q6_K<<>> + (vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst); + } +} + +static void ggml_mul_mat_p021_f16_f32_cuda( + const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x, + const int nchannels_x, const int nchannels_y, cudaStream_t stream) { + + const dim3 block_nums(1, nrows_x, nchannels_y); const dim3 block_dims(WARP_SIZE, 1, 1); - mul_mat_p021_f16_f32<<>>(vx, y, dst, ncols_x, nrows_x, nchannels_x); + mul_mat_p021_f16_f32<<>>(vx, y, dst, ncols_x, nrows_x, nchannels_x, nchannels_y); } static void ggml_mul_mat_vec_nc_f16_f32_cuda( const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x, const int row_stride_x, - const int nchannels_x, const int channel_stride_x, cudaStream_t stream) { + const int nchannels_x, const int nchannels_y, const int channel_stride_x, cudaStream_t stream) { - const dim3 block_nums(1, nrows_x, nchannels_x); + const dim3 block_nums(1, nrows_x, nchannels_y); const dim3 block_dims(WARP_SIZE, 1, 1); mul_mat_vec_nc_f16_f32<<>> - (vx, y, dst, ncols_x, nrows_x, row_stride_x, channel_stride_x); + (vx, y, dst, ncols_x, nrows_x, row_stride_x, channel_stride_x, nchannels_y/nchannels_x); } static void ggml_cpy_f32_f32_cuda( @@ -1782,24 +4906,51 @@ static void scale_f32_cuda(const float * x, float * dst, const float scale, cons scale_f32<<>>(x, dst, scale, k); } -static void rope_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float p, const float theta_scale, cudaStream_t stream) { - GGML_ASSERT(nrows % 2 == 0); - const dim3 block_dims(2*CUDA_ROPE_BLOCK_SIZE, 1, 1); +static void rope_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float p0, + const float p_delta, const int p_delta_rows, const float theta_scale, cudaStream_t stream) { + GGML_ASSERT(ncols % 2 == 0); + const dim3 block_dims(1, CUDA_ROPE_BLOCK_SIZE, 1); const int num_blocks_x = (ncols + 2*CUDA_ROPE_BLOCK_SIZE - 1) / (2*CUDA_ROPE_BLOCK_SIZE); + const dim3 block_nums(nrows, num_blocks_x, 1); + rope_f32<<>>(x, dst, ncols, p0, p_delta, p_delta_rows, theta_scale); +} + +static void rope_neox_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float p0, + const float p_delta, const int p_delta_rows, const float theta_scale, cudaStream_t stream) { + GGML_ASSERT(ncols % 2 == 0); + const dim3 block_dims(1, CUDA_ROPE_BLOCK_SIZE, 1); + const int num_blocks_x = (ncols + 2*CUDA_ROPE_BLOCK_SIZE - 1) / (2*CUDA_ROPE_BLOCK_SIZE); + const dim3 block_nums(nrows, num_blocks_x, 1); + rope_neox_f32<<>>(x, dst, ncols, p0, p_delta, p_delta_rows, theta_scale); +} + +static void rope_glm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float p, const float block_p, const float theta_scale, cudaStream_t stream) { + GGML_ASSERT(nrows % 4 == 0); + const dim3 block_dims(4*CUDA_ROPE_BLOCK_SIZE, 1, 1); + const int num_blocks_x = (ncols + 4*CUDA_ROPE_BLOCK_SIZE - 1) / (4*CUDA_ROPE_BLOCK_SIZE); const dim3 block_nums(num_blocks_x, nrows, 1); - rope_f32<<>>(x, dst, ncols, p, theta_scale); + rope_glm_f32<<>>(x, dst, ncols, p, block_p, theta_scale); +} + +static void alibi_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, + const int k_rows, const int n_heads_log2_floor, const float m0, + const float m1, cudaStream_t stream) { + const dim3 block_dims(CUDA_ALIBI_BLOCK_SIZE, 1, 1); + const int num_blocks_x = (ncols + CUDA_ALIBI_BLOCK_SIZE - 1) / (CUDA_ALIBI_BLOCK_SIZE); + const dim3 block_nums(num_blocks_x, nrows, 1); + alibi_f32<<>>(x, dst, ncols, k_rows, n_heads_log2_floor, m0, m1); } static void diag_mask_inf_f32_cuda(const float * x, float * dst, const int ncols_x, const int nrows_x, const int rows_per_channel, const int n_past, cudaStream_t stream) { - const dim3 block_dims(CUDA_DIAG_MASK_INF_BLOCK_SIZE, 1, 1); + const dim3 block_dims(1, CUDA_DIAG_MASK_INF_BLOCK_SIZE, 1); const int block_num_x = (ncols_x + CUDA_DIAG_MASK_INF_BLOCK_SIZE - 1) / CUDA_DIAG_MASK_INF_BLOCK_SIZE; - const dim3 block_nums(block_num_x, nrows_x, 1); + const dim3 block_nums(nrows_x, block_num_x, 1); diag_mask_inf_f32<<>>(x, dst, ncols_x, rows_per_channel, n_past); } static void soft_max_f32_cuda(const float * x, float * dst, const int ncols_x, const int nrows_x, cudaStream_t stream) { - const dim3 block_dims(WARP_SIZE, 1, 1); - const dim3 block_nums(1, nrows_x, 1); + const dim3 block_dims(1, WARP_SIZE, 1); + const dim3 block_nums(nrows_x, 1, 1); soft_max_f32<<>>(x, dst, ncols_x); } @@ -1832,20 +4983,53 @@ static void * ggml_cuda_pool_malloc(size_t size, size_t * actual_size) { scoped_spin_lock lock(g_cuda_pool_lock); int id; CUDA_CHECK(cudaGetDevice(&id)); - +#ifdef DEBUG_CUDA_MALLOC + int nnz = 0; + size_t max_size = 0, tot_size = 0; +#endif + size_t best_diff = 1ull << 36; + int ibest = -1; for (int i = 0; i < MAX_CUDA_BUFFERS; ++i) { cuda_buffer& b = g_cuda_buffer_pool[id][i]; - if (b.size >= size && b.ptr != nullptr) { - void * ptr = b.ptr; - *actual_size = b.size; - b.ptr = nullptr; - b.size = 0; - return ptr; + if (b.ptr != nullptr) { +#ifdef DEBUG_CUDA_MALLOC + ++nnz; + tot_size += b.size; + if (b.size > max_size) max_size = b.size; +#endif + if (b.size >= size) { + size_t diff = b.size - size; + if (diff < best_diff) { + best_diff = diff; + ibest = i; + if (!best_diff) { + void * ptr = b.ptr; + *actual_size = b.size; + b.ptr = nullptr; + b.size = 0; + return ptr; + } + } + } } } + if (ibest >= 0) { + cuda_buffer& b = g_cuda_buffer_pool[id][ibest]; + void * ptr = b.ptr; + *actual_size = b.size; + b.ptr = nullptr; + b.size = 0; + return ptr; + } +#ifdef DEBUG_CUDA_MALLOC + fprintf(stderr, "%s: %d buffers, max_size = %u MB, tot_size = %u MB, requested %u MB\n", __func__, nnz, + (uint32_t)(max_size/1024/1024), (uint32_t)(tot_size/1024/1024), (uint32_t)(size/1024/1024)); +#endif void * ptr; - CUDA_CHECK(cudaMalloc((void **) &ptr, size)); - *actual_size = size; + size_t look_ahead_size = (size_t) (1.05 * size); + look_ahead_size = 256 * ((look_ahead_size + 255)/256); + CUDA_CHECK(cudaMalloc((void **) &ptr, look_ahead_size)); + *actual_size = look_ahead_size; return ptr; } @@ -1867,32 +5051,31 @@ static void ggml_cuda_pool_free(void * ptr, size_t size) { } -static void * g_scratch_buffer = nullptr; -static size_t g_scratch_size = 1024*1024*1024; // 1 GB by default -static size_t g_scratch_offset = 0; - -static int g_device_count = -1; -static int g_main_device = 0; -static float g_tensor_split[GGML_CUDA_MAX_DEVICES] = {0}; - -static cublasHandle_t g_cublas_handles[GGML_CUDA_MAX_DEVICES] = {nullptr}; - -static cudaStream_t g_cudaStreams_main[GGML_CUDA_MAX_DEVICES] = { nullptr }; - void ggml_init_cublas() { static bool initialized = false; if (!initialized) { + +#ifdef __HIP_PLATFORM_AMD__ + // Workaround for a rocBLAS bug when using multiple graphics cards: + // https://github.com/ROCmSoftwarePlatform/rocBLAS/issues/1346 + rocblas_initialize(); + CUDA_CHECK(cudaDeviceSynchronize()); +#endif + CUDA_CHECK(cudaGetDeviceCount(&g_device_count)); GGML_ASSERT(g_device_count <= GGML_CUDA_MAX_DEVICES); int64_t total_vram = 0; - fprintf(stderr, "%s: found %d CUDA devices:\n", __func__, g_device_count); + fprintf(stderr, "%s: found %d " GGML_CUDA_NAME " devices:\n", __func__, g_device_count); for (int id = 0; id < g_device_count; ++id) { cudaDeviceProp prop; CUDA_CHECK(cudaGetDeviceProperties(&prop, id)); - fprintf(stderr, " Device %d: %s\n", id, prop.name); + fprintf(stderr, " Device %d: %s, compute capability %d.%d\n", id, prop.name, prop.major, prop.minor); + g_tensor_split[id] = total_vram; total_vram += prop.totalGlobalMem; + + g_compute_capabilities[id] = 100*prop.major + 10*prop.minor; } for (int id = 0; id < g_device_count; ++id) { g_tensor_split[id] /= total_vram; @@ -1917,6 +5100,9 @@ void ggml_init_cublas() { } void ggml_cuda_set_tensor_split(const float * tensor_split) { + if (tensor_split == nullptr) { + return; + } bool all_zero = true; for (int i = 0; i < g_device_count; ++i) { if (tensor_split[i] != 0.0f) { @@ -2013,16 +5199,19 @@ inline void ggml_cuda_op_add( GGML_ASSERT(src0_ddq_i != nullptr || src0_ddf_i != nullptr); GGML_ASSERT(src1_ddf_i != nullptr); - GGML_ASSERT(dst_ddf_i != nullptr); + GGML_ASSERT(dst_ddf_i != nullptr); - const int64_t ne0 = src0->ne[0]; + const int64_t ne00 = src0->ne[0]; const int64_t i01_diff = i01_high - i01_low; + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + // compute if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) { - add_f32_cuda(src0_ddf_i, src1_ddf_i, dst_ddf_i, ne0*i01_diff, cudaStream_main); + add_f32_cuda(src0_ddf_i, src1_ddf_i, dst_ddf_i, ne00*i01_diff, ne10*ne11, cudaStream_main); } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) { - add_f16_f32_f16_cuda((half *) src0_ddq_i, src1_ddf_i, (half *) dst_ddf_i, ne0*i01_diff, cudaStream_main); + add_f16_f32_f16_cuda((half *) src0_ddq_i, src1_ddf_i, (half *) dst_ddf_i, ne00*i01_diff, cudaStream_main); } else { GGML_ASSERT(false); } @@ -2041,27 +5230,42 @@ inline void ggml_cuda_op_mul( GGML_ASSERT(src0_ddf_i != nullptr); GGML_ASSERT(src1_ddf_i != nullptr); - GGML_ASSERT(dst_ddf_i != nullptr); + GGML_ASSERT(dst_ddf_i != nullptr); const int64_t ne00 = src0->ne[0]; + const int64_t i01_diff = i01_high - i01_low; const int64_t ne10 = src1->ne[0]; const int64_t ne11 = src1->ne[1]; - for (int64_t i01 = i01_low; i01 < i01_high; i01++) { - const int64_t i11 = i1*ne11 + i01%ne11; // broadcast src1 across src0 - - float * src0_ddf_i01 = src0_ddf_i + i01*ne00; - float * src1_ddf_i01 = src1_ddf_i + i11*ne10; - float * dst_ddf_i01 = dst_ddf_i + i01*ne00; - - // compute - mul_f32_cuda(src0_ddf_i01, src1_ddf_i01, dst_ddf_i01, ne00, ne10, cudaStream_main); - } + mul_f32_cuda(src0_ddf_i, src1_ddf_i, dst_ddf_i, ne00*i01_diff, ne10*ne11, cudaStream_main); (void) dst; (void) src0_ddq_i; (void) i02; + (void) i1; +} + +inline void ggml_cuda_op_gelu( + const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, char * src0_ddq_i, + float * src0_ddf_i, float * src1_ddf_i, float * dst_ddf_i, int64_t i02, int64_t i01_low, int64_t i01_high, int i1, + cudaStream_t & cudaStream_main){ + + GGML_ASSERT(src0_ddf_i != nullptr); + GGML_ASSERT(dst_ddf_i != nullptr); + + const int64_t ne00 = src0->ne[0]; + const int64_t i01_diff = i01_high - i01_low; + + // compute + gelu_f32_cuda(src0_ddf_i, dst_ddf_i, ne00*i01_diff, cudaStream_main); + + (void) src1; + (void) dst; + (void) src0_ddq_i; + (void) src1_ddf_i; + (void) i02; + (void) i1; } inline void ggml_cuda_op_silu( @@ -2086,7 +5290,7 @@ inline void ggml_cuda_op_silu( (void) i1; } -inline void ggml_cuda_op_rms_norm( +inline void ggml_cuda_op_norm( const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, char * src0_ddq_i, float * src0_ddf_i, float * src1_ddf_i, float * dst_ddf_i, int64_t i02, int64_t i01_low, int64_t i01_high, int i1, cudaStream_t & cudaStream_main){ @@ -2098,7 +5302,7 @@ inline void ggml_cuda_op_rms_norm( const int64_t i01_diff = i01_high - i01_low; // compute - rms_norm_f32_cuda(src0_ddf_i, dst_ddf_i, ne00, i01_diff, cudaStream_main); + norm_f32_cuda(src0_ddf_i, dst_ddf_i, ne00, i01_diff, cudaStream_main); (void) src1; (void) dst; @@ -2108,7 +5312,140 @@ inline void ggml_cuda_op_rms_norm( (void) i1; } -inline void ggml_cuda_op_dequantize_mul_mat_vec( +inline void ggml_cuda_op_rms_norm( + const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, char * src0_ddq_i, + float * src0_ddf_i, float * src1_ddf_i, float * dst_ddf_i, int64_t i02, int64_t i01_low, int64_t i01_high, int i1, + cudaStream_t & cudaStream_main){ + + GGML_ASSERT(src0_ddf_i != nullptr); + GGML_ASSERT(dst_ddf_i != nullptr); + + const int64_t ne00 = src0->ne[0]; + const int64_t i01_diff = i01_high - i01_low; + + float eps; + memcpy(&eps, dst->op_params, sizeof(float)); + + // compute + rms_norm_f32_cuda(src0_ddf_i, dst_ddf_i, ne00, i01_diff, eps, cudaStream_main); + + (void) src1; + (void) dst; + (void) src0_ddq_i; + (void) src1_ddf_i; + (void) i02; + (void) i1; +} + +inline void ggml_cuda_op_mul_mat_q( + const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, char * src0_ddq_i, + float * src0_ddf_i, float * src1_ddf_i, float * dst_ddf_i, int64_t i02, int64_t i01_low, int64_t i01_high, int i1, + cudaStream_t & cudaStream_main){ + + GGML_ASSERT(src0_ddq_i != nullptr); + GGML_ASSERT(src1_ddf_i != nullptr); + GGML_ASSERT(dst_ddf_i != nullptr); + + const int64_t ne00 = src0->ne[0]; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + GGML_ASSERT(ne10 % QK8_1 == 0); + + const int64_t ne0 = dst->ne[0]; + + const int64_t i01_diff = i01_high - i01_low; + + int id; + CUDA_CHECK(cudaGetDevice(&id)); + + // the main device has a larger memory buffer to hold the results from all GPUs + // nrows_dst == nrows of the matrix that the dequantize_mul_mat kernel writes into + const int64_t nrows_dst = dst->backend == GGML_BACKEND_GPU && id == g_main_device ? ne0 : i01_diff; + + const int64_t padded_row_size = ne10 % MATRIX_ROW_PADDING == 0 ? + ne10 : ne10 - ne10 % MATRIX_ROW_PADDING + MATRIX_ROW_PADDING; + size_t as; + void * src1_q8_1 = ggml_cuda_pool_malloc(padded_row_size*ne11*sizeof(block_q8_1)/QK8_1, &as); + quantize_row_q8_1_cuda(src1_ddf_i, src1_q8_1, ne10, ne11, padded_row_size, cudaStream_main); + + switch (src0->type) { + case GGML_TYPE_Q4_0: + ggml_mul_mat_q4_0_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, i01_diff, ne11, padded_row_size, nrows_dst, cudaStream_main); + break; + case GGML_TYPE_Q4_1: + ggml_mul_mat_q4_1_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, i01_diff, ne11, padded_row_size, nrows_dst, cudaStream_main); + break; + case GGML_TYPE_Q5_0: + ggml_mul_mat_q5_0_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, i01_diff, ne11, padded_row_size, nrows_dst, cudaStream_main); + break; + case GGML_TYPE_Q5_1: + ggml_mul_mat_q5_1_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, i01_diff, ne11, padded_row_size, nrows_dst, cudaStream_main); + break; + case GGML_TYPE_Q8_0: + ggml_mul_mat_q8_0_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, i01_diff, ne11, padded_row_size, nrows_dst, cudaStream_main); + break; + case GGML_TYPE_Q2_K: + ggml_mul_mat_q2_K_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, i01_diff, ne11, padded_row_size, nrows_dst, cudaStream_main); + break; + case GGML_TYPE_Q3_K: + ggml_mul_mat_q3_K_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, i01_diff, ne11, padded_row_size, nrows_dst, cudaStream_main); + break; + case GGML_TYPE_Q4_K: + ggml_mul_mat_q4_K_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, i01_diff, ne11, padded_row_size, nrows_dst, cudaStream_main); + break; + case GGML_TYPE_Q5_K: + ggml_mul_mat_q5_K_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, i01_diff, ne11, padded_row_size, nrows_dst, cudaStream_main); + break; + case GGML_TYPE_Q6_K: + ggml_mul_mat_q6_K_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, i01_diff, ne11, padded_row_size, nrows_dst, cudaStream_main); + break; + default: + GGML_ASSERT(false); + break; + } + + ggml_cuda_pool_free(src1_q8_1, as); + + (void) src1; + (void) dst; + (void) src0_ddf_i; + (void) i02; + (void) i1; +} + +static int64_t get_row_rounding(ggml_type type) { + int max_compute_capability = INT_MIN; + for (int id = 0; id < g_device_count; ++id) { + if (max_compute_capability < g_compute_capabilities[id] + && g_tensor_split[id] < (id + 1 < g_device_count ? g_tensor_split[id + 1] : 1.0f)) { + max_compute_capability = g_compute_capabilities[id]; + } + } + + switch(type) { + case GGML_TYPE_Q4_0: + case GGML_TYPE_Q4_1: + return max_compute_capability >= CC_TURING ? 128 : 64; + case GGML_TYPE_Q5_0: + case GGML_TYPE_Q5_1: + case GGML_TYPE_Q8_0: + return 64; + case GGML_TYPE_F16: + return 1; + case GGML_TYPE_Q2_K: + case GGML_TYPE_Q3_K: + case GGML_TYPE_Q4_K: + case GGML_TYPE_Q5_K: + return max_compute_capability >= CC_TURING ? 128 : 64; + case GGML_TYPE_Q6_K: + return 64; + default: + GGML_ASSERT(false); + } +} + +inline void ggml_cuda_op_mul_mat_vec( const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, char * src0_ddq_i, float * src0_ddf_i, float * src1_ddf_i, float * dst_ddf_i, int64_t i02, int64_t i01_low, int64_t i01_high, int i1, cudaStream_t & cudaStream_main){ @@ -2120,69 +5457,140 @@ inline void ggml_cuda_op_dequantize_mul_mat_vec( const int64_t ne00 = src0->ne[0]; const int64_t nrows = i01_high - i01_low; -// on some GPUs it is faster to convert src1 to half and to use half precision intrinsics -#ifdef GGML_CUDA_DMMV_F16 - size_t ash; - dfloat * src1_dfloat = nullptr; // dfloat == half - - bool src1_convert_f16 = src0->type == GGML_TYPE_Q4_0 || src0->type == GGML_TYPE_Q4_1 || - src0->type == GGML_TYPE_Q5_0 || src0->type == GGML_TYPE_Q5_1 || - src0->type == GGML_TYPE_Q8_0 || src0->type == GGML_TYPE_F16; - - if (src1_convert_f16) { - src1_dfloat = (half *) ggml_cuda_pool_malloc(ne00*sizeof(half), &ash); - ggml_cpy_f32_f16_cuda((char *) src1_ddf_i, (char *) src1_dfloat, ne00, - ne00, 1, sizeof(float), 0, 0, - ne00, 1, sizeof(half), 0, 0, cudaStream_main); - } +#ifdef GGML_CUDA_FORCE_DMMV + const bool use_mul_mat_vec_q = false; + (void) g_compute_capabilities[0]; #else - dfloat * src1_dfloat = src1_ddf_i; // dfloat == float, no conversion -#endif // GGML_CUDA_DMMV_F16 + int id; + CUDA_CHECK(cudaGetDevice(&id)); - switch (src0->type) { - case GGML_TYPE_Q4_0: - dequantize_mul_mat_vec_q4_0_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - case GGML_TYPE_Q4_1: - dequantize_mul_mat_vec_q4_1_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - case GGML_TYPE_Q5_0: - dequantize_mul_mat_vec_q5_0_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - case GGML_TYPE_Q5_1: - dequantize_mul_mat_vec_q5_1_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - case GGML_TYPE_Q8_0: - dequantize_mul_mat_vec_q8_0_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - case GGML_TYPE_Q2_K: - dequantize_mul_mat_vec_q2_K_cuda(src0_ddq_i, src1_ddf_i, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - case GGML_TYPE_Q3_K: - dequantize_mul_mat_vec_q3_K_cuda(src0_ddq_i, src1_ddf_i, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - case GGML_TYPE_Q4_K: - dequantize_mul_mat_vec_q4_K_cuda(src0_ddq_i, src1_ddf_i, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - case GGML_TYPE_Q5_K: - dequantize_mul_mat_vec_q5_K_cuda(src0_ddq_i, src1_ddf_i, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - case GGML_TYPE_Q6_K: - dequantize_mul_mat_vec_q6_K_cuda(src0_ddq_i, src1_ddf_i, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - case GGML_TYPE_F16: - convert_mul_mat_vec_f16_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); - break; - default: - GGML_ASSERT(false); - break; - } + bool mul_mat_vec_q_implemented = + src0->type == GGML_TYPE_Q4_0 || + src0->type == GGML_TYPE_Q4_1 || + src0->type == GGML_TYPE_Q5_0 || + src0->type == GGML_TYPE_Q5_1 || + src0->type == GGML_TYPE_Q8_0; +#if QK_K == 256 + mul_mat_vec_q_implemented = mul_mat_vec_q_implemented || + src0->type == GGML_TYPE_Q2_K || + src0->type == GGML_TYPE_Q3_K || + src0->type == GGML_TYPE_Q4_K || + src0->type == GGML_TYPE_Q5_K || + src0->type == GGML_TYPE_Q6_K; +#endif // QK_K == 256 -#ifdef GGML_CUDA_DMMV_F16 - if (src1_convert_f16) { - ggml_cuda_pool_free(src1_dfloat, ash); + const bool use_mul_mat_vec_q = g_compute_capabilities[id] >= MIN_CC_DP4A && mul_mat_vec_q_implemented; +#endif + + if (use_mul_mat_vec_q) { + const int64_t padded_row_size = ne00 % MATRIX_ROW_PADDING == 0 ? + ne00 : ne00 - ne00 % MATRIX_ROW_PADDING + MATRIX_ROW_PADDING; + size_t as; + void * src1_q8_1 = ggml_cuda_pool_malloc(padded_row_size*sizeof(block_q8_1)/QK8_1, &as); + quantize_row_q8_1_cuda(src1_ddf_i, src1_q8_1, ne00, 1, padded_row_size, cudaStream_main); + + switch (src0->type) { + case GGML_TYPE_Q4_0: + mul_mat_vec_q4_0_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q4_1: + mul_mat_vec_q4_1_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q5_0: + mul_mat_vec_q5_0_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q5_1: + mul_mat_vec_q5_1_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q8_0: + mul_mat_vec_q8_0_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q2_K: + mul_mat_vec_q2_K_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q3_K: + mul_mat_vec_q3_K_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q4_K: + mul_mat_vec_q4_K_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q5_K: + mul_mat_vec_q5_K_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q6_K: + mul_mat_vec_q6_K_q8_1_cuda(src0_ddq_i, src1_q8_1, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + default: + GGML_ASSERT(false); + break; + } + + ggml_cuda_pool_free(src1_q8_1, as); + } else { + // on some GPUs it is faster to convert src1 to half and to use half precision intrinsics +#ifdef GGML_CUDA_F16 + size_t ash; + dfloat * src1_dfloat = nullptr; // dfloat == half + + bool src1_convert_f16 = src0->type == GGML_TYPE_Q4_0 || src0->type == GGML_TYPE_Q4_1 || + src0->type == GGML_TYPE_Q5_0 || src0->type == GGML_TYPE_Q5_1 || + src0->type == GGML_TYPE_Q8_0 || src0->type == GGML_TYPE_F16; + + if (src1_convert_f16) { + src1_dfloat = (half *) ggml_cuda_pool_malloc(ne00*sizeof(half), &ash); + ggml_cpy_f32_f16_cuda((char *) src1_ddf_i, (char *) src1_dfloat, ne00, + ne00, 1, sizeof(float), 0, 0, + ne00, 1, sizeof(half), 0, 0, cudaStream_main); + } +#else + dfloat * src1_dfloat = src1_ddf_i; // dfloat == float, no conversion +#endif // GGML_CUDA_F16 + + switch (src0->type) { + case GGML_TYPE_Q4_0: + dequantize_mul_mat_vec_q4_0_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q4_1: + dequantize_mul_mat_vec_q4_1_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q5_0: + dequantize_mul_mat_vec_q5_0_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q5_1: + dequantize_mul_mat_vec_q5_1_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q8_0: + dequantize_mul_mat_vec_q8_0_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q2_K: + dequantize_mul_mat_vec_q2_K_cuda(src0_ddq_i, src1_ddf_i, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q3_K: + dequantize_mul_mat_vec_q3_K_cuda(src0_ddq_i, src1_ddf_i, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q4_K: + dequantize_mul_mat_vec_q4_K_cuda(src0_ddq_i, src1_ddf_i, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q5_K: + dequantize_mul_mat_vec_q5_K_cuda(src0_ddq_i, src1_ddf_i, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_Q6_K: + dequantize_mul_mat_vec_q6_K_cuda(src0_ddq_i, src1_ddf_i, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + case GGML_TYPE_F16: + convert_mul_mat_vec_f16_cuda(src0_ddq_i, src1_dfloat, dst_ddf_i, ne00, nrows, cudaStream_main); + break; + default: + GGML_ASSERT(false); + break; + } + +#ifdef GGML_CUDA_F16 + if (src1_convert_f16) { + ggml_cuda_pool_free(src1_dfloat, ash); + } +#endif // GGML_CUDA_F16 } -#endif // GGML_CUDA_DMMV_F16 (void) src1; (void) dst; @@ -2241,25 +5649,82 @@ inline void ggml_cuda_op_rope( GGML_ASSERT(dst_ddf_i != nullptr); const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; const int64_t i01_diff = i01_high - i01_low; - const int n_past = ((int32_t *) src1->data)[0]; - const int n_dims = ((int32_t *) src1->data)[1]; - const int mode = ((int32_t *) src1->data)[2]; - GGML_ASSERT(mode == 0); + const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_dims = ((int32_t *) dst->op_params)[1]; + const int mode = ((int32_t *) dst->op_params)[2]; + const int n_ctx = ((int32_t *) dst->op_params)[3]; + // RoPE alteration for extended context - const float theta_scale = powf(10000.0, -2.0f/n_dims); - const float p = ((mode & 1) == 0 ? n_past + i02 : i02); + float freq_base, freq_scale; + memcpy(&freq_base, (int32_t *) dst->op_params + 4, sizeof(float)); + memcpy(&freq_scale, (int32_t *) dst->op_params + 5, sizeof(float)); + + const float theta_scale = powf(freq_base, -2.0f/n_dims); + + const bool is_neox = mode & 2; + const bool is_glm = mode & 4; // compute - rope_f32_cuda(src0_ddf_i, dst_ddf_i, ne00, i01_diff, p, theta_scale, cudaStream_main); + if (is_glm) { + const float p = (((mode & 1) == 0 ? n_past + i02 : i02)) * freq_scale; + const float id_p = min(p, n_ctx - 2.f); + const float block_p = max(p - (n_ctx - 2.f), 0.f); + rope_glm_f32_cuda(src0_ddf_i, dst_ddf_i, ne00, i01_diff, id_p, block_p, theta_scale, cudaStream_main); + } else if (is_neox) { + GGML_ASSERT(ne00 == n_dims && "ne00 != n_dims is not implemented for CUDA yet"); + const float p0 = (((mode & 1) == 0 ? n_past : 0)) * freq_scale; + rope_neox_f32_cuda(src0_ddf_i, dst_ddf_i, ne00, i01_diff, p0, freq_scale, ne01, theta_scale, cudaStream_main); + } else { + const float p0 = (((mode & 1) == 0 ? n_past : 0)) * freq_scale; + rope_f32_cuda(src0_ddf_i, dst_ddf_i, ne00, i01_diff, p0, freq_scale, ne01, theta_scale, cudaStream_main); + } + (void) src1; (void) dst; (void) src0_ddq_i; (void) src1_ddf_i; (void) i1; } +inline void ggml_cuda_op_alibi( + const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, char * src0_ddq_i, + float * src0_ddf_i, float * src1_ddf_i, float * dst_ddf_i, int64_t i02, int64_t i01_low, int64_t i01_high, int i1, + cudaStream_t & cudaStream_main){ + + GGML_ASSERT(src0_ddf_i != nullptr); + GGML_ASSERT(dst_ddf_i != nullptr); + + const int64_t ne00 = src0->ne[0]; + const int64_t ne01 = src0->ne[1]; + const int64_t ne02 = src0->ne[2]; + const int64_t i01_diff = i01_high - i01_low; + + const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_head = ((int32_t *) dst->op_params)[1]; + float max_bias; + memcpy(&max_bias, (int32_t *) dst->op_params + 2, sizeof(float)); + + GGML_ASSERT(ne01 + n_past == ne00); + GGML_ASSERT(n_head == ne02); + + const int n_heads_log2_floor = 1 << (int) floor(log2(n_head)); + + const float m0 = powf(2.0f, -(max_bias) / n_heads_log2_floor); + const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_heads_log2_floor); + + // compute + alibi_f32_cuda(src0_ddf_i, dst_ddf_i, ne00, i01_diff, ne01, n_heads_log2_floor, m0, m1, cudaStream_main); + + (void) src1; + (void) src0_ddq_i; + (void) src1_ddf_i; + (void) i02; + (void) i1; +} + inline void ggml_cuda_op_diag_mask_inf( const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, char * src0_ddq_i, float * src0_ddf_i, float * src1_ddf_i, float * dst_ddf_i, int64_t i02, int64_t i01_low, int64_t i01_high, int i1, @@ -2272,11 +5737,12 @@ inline void ggml_cuda_op_diag_mask_inf( const int64_t ne01 = src0->ne[1]; const int64_t i01_diff = i01_high - i01_low; - const int n_past = ((int32_t *) src1->data)[0]; + const int n_past = ((int32_t *) dst->op_params)[0]; // compute diag_mask_inf_f32_cuda(src0_ddf_i, dst_ddf_i, ne00, i01_diff, ne01, n_past, cudaStream_main); + (void) src1; (void) dst; (void) src0_ddq_i; (void) src1_ddf_i; @@ -2344,6 +5810,9 @@ static void ggml_cuda_op(const ggml_tensor * src0, const ggml_tensor * src1, ggm const int64_t ne11 = use_src1 ? src1->ne[1] : 1; const int64_t ne12 = use_src1 ? src1->ne[2] : 1; const int64_t ne13 = use_src1 ? src1->ne[3] : 1; + const int64_t nrows1 = use_src1 ? ggml_nrows(src1) : 1; + + GGML_ASSERT(ne03 == ne13); const int64_t ne0 = dst->ne[0]; const int64_t ne1 = dst->ne[1]; @@ -2355,12 +5824,19 @@ static void ggml_cuda_op(const ggml_tensor * src0, const ggml_tensor * src1, ggm GGML_ASSERT(!use_src1 || src1->backend != GGML_BACKEND_GPU_SPLIT); // strides for iteration over dims 3 and 2 - const int64_t num_iters = flatten_rows ? 1 : ne02 * ne03; - const int64_t stride_mod = flatten_rows ? ne02 * ne03 : 1; + const int64_t num_iters_0 = ne02 >= ne12 ? ne02*ne03 : ne12*ne13; + const int64_t num_iters = flatten_rows ? 1 : num_iters_0; + const int64_t stride_mod = flatten_rows ? num_iters_0 : 1; const int64_t src0_stride = ne00 * ne01 * stride_mod; const int64_t src1_stride = ne10 * ne11 * stride_mod; const int64_t dst_stride = ne0 * ne1 * stride_mod; + const int64_t rows_per_iter = flatten_rows ? nrows0 : ne01; + const int64_t i03_max = flatten_rows ? 1 : ne03; + const int64_t i02_max = flatten_rows ? 1 : (ne02 >= ne12 ? ne02 : ne12); + const int64_t i02_divisor = ne02 >= ne12 ? 1 : ne12 / ne02; + GGML_ASSERT(!(flatten_rows && ne02 < ne12)); + const size_t src0_ts = ggml_type_size(src0->type); const size_t src0_bs = ggml_blck_size(src0->type); @@ -2377,6 +5853,7 @@ static void ggml_cuda_op(const ggml_tensor * src0, const ggml_tensor * src1, ggm dst->op == GGML_OP_SCALE || dst->op == GGML_OP_DIAG_MASK_INF || dst->op == GGML_OP_ROPE); const bool split = src0->backend == GGML_BACKEND_GPU_SPLIT; + GGML_ASSERT(!(split && ne02 < ne12)); const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(src0->type); @@ -2409,11 +5886,20 @@ static void ggml_cuda_op(const ggml_tensor * src0, const ggml_tensor * src1, ggm int64_t row_low, row_high; if (split) { + const int64_t rounding = get_row_rounding(src0->type); + row_low = id == 0 ? 0 : nrows0*g_tensor_split[id]; - row_high = id == g_device_count - 1 ? nrows0 : nrows0*g_tensor_split[id + 1]; + row_low -= row_low % rounding; + + if (id == g_device_count - 1) { + row_high = nrows0; + } else { + row_high = nrows0*g_tensor_split[id + 1]; + row_high -= row_high % rounding; + } } else { row_low = 0; - row_high = nrows0; + row_high = nrows0*i02_divisor; } if (row_low == row_high) { continue; @@ -2461,16 +5947,12 @@ static void ggml_cuda_op(const ggml_tensor * src0, const ggml_tensor * src1, ggm dst_ddf[id] = (float *) ggml_cuda_pool_malloc(size_dst_ddf, &dst_asf[id]); } - const int64_t i03_max = flatten_rows ? 1 : ne03; - const int64_t i02_max = flatten_rows ? 1 : ne02; - const int64_t rows_per_iter = flatten_rows ? nrows0 : ne01; - for (int64_t i03 = 0; i03 < i03_max; i03++) { const int64_t i13 = i03 % ne13; for (int64_t i02 = 0; i02 < i02_max; i02++) { const int64_t i12 = i02 % ne12; - const int64_t i0 = i03*ne02 + i02; + const int64_t i0 = i03*i02_max + i02; // i0 values that contain the lower/upper rows for a split tensor when using multiple GPUs const int64_t i0_offset_low = row_low/rows_per_iter; @@ -2504,10 +5986,10 @@ static void ggml_cuda_op(const ggml_tensor * src0, const ggml_tensor * src1, ggm const int64_t i11 = i13*ne12 + i12; // for split tensors the data begins at i0 == i0_offset_low - char * src0_ddq_i = src0_ddq[id] + (i0 - i0_offset_low)*src0_stride*src0_ts/src0_bs; - float * src0_ddf_i = src0_ddf[id] + (i0 - i0_offset_low)*src0_stride; + char * src0_ddq_i = src0_ddq[id] + (i0/i02_divisor - i0_offset_low)*src0_stride*src0_ts/src0_bs; + float * src0_ddf_i = src0_ddf[id] + (i0/i02_divisor - i0_offset_low)*src0_stride; float * src1_ddf_i = src1_ddf[id] + i11*src1_stride; - float * dst_ddf_i = dst_ddf[id] + (i0 - i0_offset_low)*dst_stride; + float * dst_ddf_i = dst_ddf[id] + (i0 - i0_offset_low)*dst_stride; // for split tensors the data pointer needs to be rounded down // to the bin edge for i03, i02 bins beyond the first @@ -2546,11 +6028,11 @@ static void ggml_cuda_op(const ggml_tensor * src0, const ggml_tensor * src1, ggm } } - if (!src0_on_device || !src0_is_contiguous) { + if ((!src0_on_device || !src0_is_contiguous) && i02 % i02_divisor == 0) { if (src0_is_f32) { - CUDA_CHECK(ggml_cuda_cpy_tensor_2d(src0_ddf_i, src0, i03, i02, i01_low, i01_high, cudaStream_main)); + CUDA_CHECK(ggml_cuda_cpy_tensor_2d(src0_ddf_i, src0, i03, i02/i02_divisor, i01_low, i01_high, cudaStream_main)); } else { - CUDA_CHECK(ggml_cuda_cpy_tensor_2d(src0_ddq_i, src0, i03, i02, i01_low, i01_high, cudaStream_main)); + CUDA_CHECK(ggml_cuda_cpy_tensor_2d(src0_ddq_i, src0, i03, i02/i02_divisor, i01_low, i01_high, cudaStream_main)); } } @@ -2580,13 +6062,12 @@ static void ggml_cuda_op(const ggml_tensor * src0, const ggml_tensor * src1, ggm if (split) { // src0 = weight matrix is saved as a transposed matrix for better memory layout. // dst is NOT transposed. - // The outputs of cuBLAS matrix matrix multiplications can therefore NOT simply be concatenated for >1 GPU. + // The outputs of matrix matrix multiplications can therefore NOT simply be concatenated for >1 GPU. // Instead they need to be copied to the correct slice in ne0 = dst row index. // If dst is a vector with ne0 == 1 then you don't have to do this but it still produces correct results. - for (int64_t j = 0; j < ne1; ++j) { - float * dhf_dst_i = (float *) ((char *) dst_off_device + (j*ne0 + i01_low)*sizeof(float) + i02*nb2 + i03*nb3); - CUDA_CHECK(cudaMemcpyAsync(dhf_dst_i, dst_ddf_i + j*i01_diff, i01_diff*sizeof(float), kind, cudaStream_main)); - } + float * dhf_dst_i = (float *) ((char *) dst_off_device + i01_low*sizeof(float) + i02*nb2 + i03*nb3); + CUDA_CHECK(cudaMemcpy2DAsync(dhf_dst_i, ne0*sizeof(float), dst_ddf_i, i01_diff*sizeof(float), + i01_diff*sizeof(float), ne1, kind, cudaStream_main)); } else { float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3); CUDA_CHECK(cudaMemcpyAsync(dhf_dst_i, dst_ddf_i, dst_stride*sizeof(float), kind, cudaStream_main)); @@ -2627,7 +6108,7 @@ static void ggml_cuda_op(const ggml_tensor * src0, const ggml_tensor * src1, ggm if (split && g_device_count > 1) { CUDA_CHECK(cudaSetDevice(g_main_device)); for (int id = 0; id < g_device_count; ++id) { - if (id != g_main_device) { + if (id != g_main_device && src0_extra->events[id]) { CUDA_CHECK(cudaStreamWaitEvent(g_cudaStreams_main[g_main_device], src0_extra->events[id])); } } @@ -2655,11 +6136,21 @@ void ggml_cuda_mul(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tens ggml_cuda_op(src0, src1, dst, ggml_cuda_op_mul, true, false); // TODO ggml_cuda_op needs modification for flatten } +void ggml_cuda_gelu(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); + ggml_cuda_op(src0, src1, dst, ggml_cuda_op_gelu, true, true); +} + void ggml_cuda_silu(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { GGML_ASSERT(src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); ggml_cuda_op(src0, src1, dst, ggml_cuda_op_silu, true, true); } +void ggml_cuda_norm(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); + ggml_cuda_op(src0, src1, dst, ggml_cuda_op_norm, true, true); +} + void ggml_cuda_rms_norm(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { GGML_ASSERT(src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); ggml_cuda_op(src0, src1, dst, ggml_cuda_op_rms_norm, true, true); @@ -2694,6 +6185,8 @@ void ggml_cuda_mul_mat_vec_p021(const ggml_tensor * src0, const ggml_tensor * sr const int64_t ne01 = src0->ne[1]; const int64_t ne02 = src0->ne[2]; + const int64_t ne12 = src1->ne[2]; + CUDA_CHECK(cudaSetDevice(g_main_device)); cudaStream_t cudaStream_main = g_cudaStreams_main[g_main_device]; @@ -2706,7 +6199,7 @@ void ggml_cuda_mul_mat_vec_p021(const ggml_tensor * src0, const ggml_tensor * sr struct ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra; float * dst_ddf = (float *) dst_extra->data_device[g_main_device]; - ggml_mul_mat_p021_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, ne02, cudaStream_main); + ggml_mul_mat_p021_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, ne02, ne12, cudaStream_main); } void ggml_cuda_mul_mat_vec_nc(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst){ @@ -2720,6 +6213,8 @@ void ggml_cuda_mul_mat_vec_nc(const ggml_tensor * src0, const ggml_tensor * src1 const int64_t ne01 = src0->ne[1]; const int64_t ne02 = src0->ne[2]; + const int64_t ne12 = src1->ne[2]; + const int64_t nb01 = src0->nb[1]; const int64_t nb02 = src0->nb[2]; @@ -2738,7 +6233,7 @@ void ggml_cuda_mul_mat_vec_nc(const ggml_tensor * src0, const ggml_tensor * src1 const int row_stride_x = nb01 / sizeof(half); const int channel_stride_x = nb02 / sizeof(half); - ggml_mul_mat_vec_nc_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, channel_stride_x, cudaStream_main); + ggml_mul_mat_vec_nc_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, ne12, channel_stride_x, cudaStream_main); } void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { @@ -2752,10 +6247,22 @@ void ggml_cuda_mul_mat(const ggml_tensor * src0, const ggml_tensor * src1, ggml_ }else if (src0->type == GGML_TYPE_F32) { ggml_cuda_op(src0, src1, dst, ggml_cuda_op_mul_mat_cublas, true, false); } else if (ggml_is_quantized(src0->type) || src0->type == GGML_TYPE_F16) { - if (src1->ne[1] == 1 && src0->ne[0] % GGML_CUDA_DMMV_X == 0 && src0->ne[1] % GGML_CUDA_DMMV_Y == 0) { - ggml_cuda_op(src0, src1, dst, ggml_cuda_op_dequantize_mul_mat_vec, false, false); + if (src1->ne[1] == 1 && src0->ne[0] % GGML_CUDA_DMMV_X == 0) { + ggml_cuda_op(src0, src1, dst, ggml_cuda_op_mul_mat_vec, false, false); } else { - ggml_cuda_op(src0, src1, dst, ggml_cuda_op_mul_mat_cublas, true, false); + int min_compute_capability = INT_MAX; + for (int id = 0; id < g_device_count; ++id) { + if (min_compute_capability > g_compute_capabilities[id] + && g_tensor_split[id] < (id + 1 < g_device_count ? g_tensor_split[id + 1] : 1.0f)) { + min_compute_capability = g_compute_capabilities[id]; + } + } + + if (g_mul_mat_q && ggml_is_quantized(src0->type) && min_compute_capability >= MIN_CC_DP4A) { + ggml_cuda_op(src0, src1, dst, ggml_cuda_op_mul_mat_q, false, false); + } else { + ggml_cuda_op(src0, src1, dst, ggml_cuda_op_mul_mat_cublas, true, false); + } } } else { GGML_ASSERT(false); @@ -2815,6 +6322,11 @@ void ggml_cuda_cpy(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tens (void) dst; } +void ggml_cuda_dup(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { + ggml_cuda_cpy(src0, dst, nullptr); + (void) src1; +} + void ggml_cuda_diag_mask_inf(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { GGML_ASSERT(src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); ggml_cuda_op(src0, src1, dst, ggml_cuda_op_diag_mask_inf, true, true); @@ -2827,7 +6339,17 @@ void ggml_cuda_soft_max(const ggml_tensor * src0, const ggml_tensor * src1, ggml void ggml_cuda_rope(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { GGML_ASSERT(src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); - ggml_cuda_op(src0, src1, dst, ggml_cuda_op_rope, true, false); // FIXME flatten changes results + GGML_ASSERT(ggml_is_contiguous(src0)); // TODO: this restriction is temporary until non-cont support is implemented + + const int mode = ((int32_t *) dst->op_params)[2]; + const bool is_glm = mode & 4; + + ggml_cuda_op(src0, src1, dst, ggml_cuda_op_rope, true, !is_glm); // flatten support not implemented for glm +} + +void ggml_cuda_alibi(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32); + ggml_cuda_op(src0, src1, dst, ggml_cuda_op_alibi, true, true); } void ggml_cuda_nop(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { @@ -2838,7 +6360,11 @@ void ggml_cuda_nop(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tens void ggml_cuda_transform_tensor(void * data, struct ggml_tensor * tensor) { int nrows = ggml_nrows(tensor); + + const int64_t ne0 = tensor->ne[0]; + const size_t nb1 = tensor->nb[1]; + ggml_backend backend = tensor->backend; struct ggml_tensor_extra_gpu * extra = new struct ggml_tensor_extra_gpu; memset(extra, 0, sizeof(*extra)); @@ -2855,8 +6381,17 @@ void ggml_cuda_transform_tensor(void * data, struct ggml_tensor * tensor) { row_low = 0; row_high = nrows; } else if (backend == GGML_BACKEND_GPU_SPLIT) { + const int64_t rounding = get_row_rounding(tensor->type); + row_low = id == 0 ? 0 : nrows*g_tensor_split[id]; - row_high = id == g_device_count - 1 ? nrows : nrows*g_tensor_split[id + 1]; + row_low -= row_low % rounding; + + if (id == g_device_count - 1) { + row_high = nrows; + } else { + row_high = nrows*g_tensor_split[id + 1]; + row_high -= row_high % rounding; + } } else { GGML_ASSERT(false); } @@ -2867,13 +6402,26 @@ void ggml_cuda_transform_tensor(void * data, struct ggml_tensor * tensor) { int64_t nrows_split = row_high - row_low; const size_t offset_split = row_low*nb1; - const size_t size = ggml_nbytes_split(tensor, nrows_split); + size_t size = ggml_nbytes_split(tensor, nrows_split); + const size_t original_size = size; - void * buf; + // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses + if (ne0 % MATRIX_ROW_PADDING != 0) { + size += (MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING) + * ggml_type_size(tensor->type)/ggml_blck_size(tensor->type); + } + + char * buf; CUDA_CHECK(cudaMalloc(&buf, size)); - void * buf_host = (char*)data + offset_split; + char * buf_host = (char*)data + offset_split; - cudaMemcpy(buf, buf_host, size, cudaMemcpyHostToDevice); + // set padding to 0 to avoid possible NaN values + if (size > original_size) { + CUDA_CHECK(cudaMemset(buf + original_size, 0, size - original_size)); + } + + + CUDA_CHECK(cudaMemcpy(buf, buf_host, original_size, cudaMemcpyHostToDevice)); extra->data_device[id] = buf; @@ -2886,7 +6434,7 @@ void ggml_cuda_transform_tensor(void * data, struct ggml_tensor * tensor) { } void ggml_cuda_free_data(struct ggml_tensor * tensor) { - if (tensor->backend != GGML_BACKEND_GPU && tensor->backend != GGML_BACKEND_GPU_SPLIT) { + if (!tensor || (tensor->backend != GGML_BACKEND_GPU && tensor->backend != GGML_BACKEND_GPU_SPLIT) ) { return; } @@ -2907,43 +6455,65 @@ void ggml_cuda_free_data(struct ggml_tensor * tensor) { delete extra; } -void ggml_cuda_assign_buffers_impl(struct ggml_tensor * tensor, bool scratch, bool force_inplace) { +static struct ggml_tensor_extra_gpu * g_temp_tensor_extras = nullptr; +static size_t g_temp_tensor_extra_index = 0; + +static struct ggml_tensor_extra_gpu * ggml_cuda_alloc_temp_tensor_extra() { + if (g_temp_tensor_extras == nullptr) { + g_temp_tensor_extras = new ggml_tensor_extra_gpu[GGML_MAX_NODES]; + } + + size_t alloc_index = g_temp_tensor_extra_index; + g_temp_tensor_extra_index = (g_temp_tensor_extra_index + 1) % GGML_MAX_NODES; + struct ggml_tensor_extra_gpu * extra = &g_temp_tensor_extras[alloc_index]; + memset(extra, 0, sizeof(*extra)); + + return extra; +} + +void ggml_cuda_assign_buffers_impl(struct ggml_tensor * tensor, bool scratch, bool force_inplace, bool no_alloc) { if (scratch && g_scratch_size == 0) { return; } // recursively assign CUDA buffers until a compute tensor is found - if (tensor->src0 != nullptr && tensor->src0->backend == GGML_BACKEND_CPU) { - const ggml_op src0_op = tensor->src0->op; - if (src0_op == GGML_OP_RESHAPE || src0_op == GGML_OP_TRANSPOSE || src0_op == GGML_OP_VIEW) { - ggml_cuda_assign_buffers_impl(tensor->src0, scratch, force_inplace); + if (tensor->src[0] != nullptr && tensor->src[0]->backend == GGML_BACKEND_CPU) { + const ggml_op src0_op = tensor->src[0]->op; + if (src0_op == GGML_OP_RESHAPE || src0_op == GGML_OP_TRANSPOSE || src0_op == GGML_OP_VIEW || src0_op == GGML_OP_PERMUTE) { + ggml_cuda_assign_buffers_impl(tensor->src[0], scratch, force_inplace, no_alloc); } } - if (tensor->op == GGML_OP_CPY && tensor->src1->backend == GGML_BACKEND_CPU) { - ggml_cuda_assign_buffers_impl(tensor->src1, scratch, force_inplace); + if (tensor->op == GGML_OP_CPY && tensor->src[1]->backend == GGML_BACKEND_CPU) { + ggml_cuda_assign_buffers_impl(tensor->src[1], scratch, force_inplace, no_alloc); } tensor->backend = GGML_BACKEND_GPU; - struct ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu; - memset(extra, 0, sizeof(*extra)); - const bool inplace = (tensor->src0 != nullptr && tensor->src0->data == tensor->data) || + if (scratch && no_alloc) { + return; + } + + struct ggml_tensor_extra_gpu * extra; + + const bool inplace = (tensor->src[0] != nullptr && tensor->src[0]->data == tensor->data) || tensor->op == GGML_OP_VIEW || force_inplace; const size_t size = ggml_nbytes(tensor); CUDA_CHECK(cudaSetDevice(g_main_device)); - if (inplace && (tensor->src0->backend == GGML_BACKEND_GPU || tensor->src0->backend == GGML_BACKEND_GPU_SPLIT)) { - struct ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu * ) tensor->src0->extra; + if (inplace && (tensor->src[0]->backend == GGML_BACKEND_GPU || tensor->src[0]->backend == GGML_BACKEND_GPU_SPLIT)) { + struct ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu * ) tensor->src[0]->extra; char * src0_ddc = (char *) src0_extra->data_device[g_main_device]; size_t offset = 0; if (tensor->op == GGML_OP_VIEW) { - memcpy(&offset, tensor->opt[0]->data, sizeof(size_t)); + memcpy(&offset, tensor->op_params, sizeof(size_t)); } + extra = ggml_cuda_alloc_temp_tensor_extra(); extra->data_device[g_main_device] = src0_ddc + offset; } else if (tensor->op == GGML_OP_CPY) { - struct ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu * ) tensor->src1->extra; + struct ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu * ) tensor->src[1]->extra; void * src1_ddv = src1_extra->data_device[g_main_device]; + extra = ggml_cuda_alloc_temp_tensor_extra(); extra->data_device[g_main_device] = src1_ddv; } else if (scratch) { GGML_ASSERT(size <= g_scratch_size); @@ -2956,6 +6526,7 @@ void ggml_cuda_assign_buffers_impl(struct ggml_tensor * tensor, bool scratch, bo CUDA_CHECK(cudaMalloc(&data, g_scratch_size)); g_scratch_buffer = data; } + extra = ggml_cuda_alloc_temp_tensor_extra(); extra->data_device[g_main_device] = data + g_scratch_offset; g_scratch_offset += size; @@ -2965,22 +6536,56 @@ void ggml_cuda_assign_buffers_impl(struct ggml_tensor * tensor, bool scratch, bo void * data; CUDA_CHECK(cudaMalloc(&data, size)); CUDA_CHECK(cudaMemset(data, 0, size)); + extra = new ggml_tensor_extra_gpu; + memset(extra, 0, sizeof(*extra)); extra->data_device[g_main_device] = data; } tensor->extra = extra; } +void ggml_cuda_assign_scratch_offset(struct ggml_tensor * tensor, size_t offset) { + if (g_scratch_size == 0) { + return; + } + if (g_scratch_buffer == nullptr) { + CUDA_CHECK(cudaMalloc(&g_scratch_buffer, g_scratch_size)); + } + + struct ggml_tensor_extra_gpu * extra = ggml_cuda_alloc_temp_tensor_extra(); + + const bool inplace = (tensor->src[0] != nullptr && tensor->src[0]->data == tensor->data) || + tensor->op == GGML_OP_VIEW; + + if (inplace && (tensor->src[0]->backend == GGML_BACKEND_GPU || tensor->src[0]->backend == GGML_BACKEND_GPU_SPLIT)) { + struct ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu * ) tensor->src[0]->extra; + char * src0_ddc = (char *) src0_extra->data_device[g_main_device]; + size_t view_offset = 0; + if (tensor->op == GGML_OP_VIEW) { + memcpy(&view_offset, tensor->op_params, sizeof(size_t)); + } + extra->data_device[g_main_device] = src0_ddc + view_offset; + } else { + extra->data_device[g_main_device] = (char *) g_scratch_buffer + offset; + } + + tensor->extra = extra; +} + void ggml_cuda_assign_buffers(struct ggml_tensor * tensor) { - ggml_cuda_assign_buffers_impl(tensor, true, false); + ggml_cuda_assign_buffers_impl(tensor, true, false, false); +} + +void ggml_cuda_assign_buffers_no_alloc(struct ggml_tensor * tensor) { + ggml_cuda_assign_buffers_impl(tensor, true, false, true); } void ggml_cuda_assign_buffers_no_scratch(struct ggml_tensor * tensor) { - ggml_cuda_assign_buffers_impl(tensor, false, false); + ggml_cuda_assign_buffers_impl(tensor, false, false, false); } void ggml_cuda_assign_buffers_force_inplace(struct ggml_tensor * tensor) { - ggml_cuda_assign_buffers_impl(tensor, false, true); + ggml_cuda_assign_buffers_impl(tensor, false, true, false); } void ggml_cuda_set_main_device(int main_device) { @@ -2997,6 +6602,10 @@ void ggml_cuda_set_main_device(int main_device) { } } +void ggml_cuda_set_mul_mat_q(bool mul_mat_q) { + g_mul_mat_q = mul_mat_q; +} + void ggml_cuda_set_scratch_size(size_t scratch_size) { g_scratch_size = scratch_size; } @@ -3013,10 +6622,16 @@ void ggml_cuda_free_scratch() { bool ggml_cuda_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor){ ggml_cuda_func_t func; const bool any_on_device = tensor->backend == GGML_BACKEND_GPU - || (tensor->src0 != nullptr && (tensor->src0->backend == GGML_BACKEND_GPU || tensor->src0->backend == GGML_BACKEND_GPU_SPLIT)) - || (tensor->src1 != nullptr && tensor->src1->backend == GGML_BACKEND_GPU); + || (tensor->src[0] != nullptr && (tensor->src[0]->backend == GGML_BACKEND_GPU || tensor->src[0]->backend == GGML_BACKEND_GPU_SPLIT)) + || (tensor->src[1] != nullptr && tensor->src[1]->backend == GGML_BACKEND_GPU); switch (tensor->op) { + case GGML_OP_DUP: + if (!any_on_device) { + return false; + } + func = ggml_cuda_dup; + break; case GGML_OP_ADD: if (!any_on_device) { return false; @@ -3029,11 +6644,28 @@ bool ggml_cuda_compute_forward(struct ggml_compute_params * params, struct ggml_ } func = ggml_cuda_mul; break; - case GGML_OP_SILU: + case GGML_OP_UNARY: + switch (ggml_get_unary_op(tensor)) { + case GGML_UNARY_OP_GELU: + if (!any_on_device) { + return false; + } + func = ggml_cuda_gelu; + break; + case GGML_UNARY_OP_SILU: + if (!any_on_device) { + return false; + } + func = ggml_cuda_silu; + break; + default: + return false; + } break; + case GGML_OP_NORM: if (!any_on_device) { return false; } - func = ggml_cuda_silu; + func = ggml_cuda_norm; break; case GGML_OP_RMS_NORM: if (!any_on_device) { @@ -3042,7 +6674,7 @@ bool ggml_cuda_compute_forward(struct ggml_compute_params * params, struct ggml_ func = ggml_cuda_rms_norm; break; case GGML_OP_MUL_MAT: - if (!any_on_device && !ggml_cuda_can_mul_mat(tensor->src0, tensor->src1, tensor)) { + if (!any_on_device && !ggml_cuda_can_mul_mat(tensor->src[0], tensor->src[1], tensor)) { return false; } func = ggml_cuda_mul_mat; @@ -3059,6 +6691,12 @@ bool ggml_cuda_compute_forward(struct ggml_compute_params * params, struct ggml_ } func = ggml_cuda_cpy; break; + case GGML_OP_CONT: + if (!any_on_device) { + return false; + } + func = ggml_cuda_dup; + break; case GGML_OP_RESHAPE: case GGML_OP_VIEW: case GGML_OP_PERMUTE: @@ -3086,6 +6724,12 @@ bool ggml_cuda_compute_forward(struct ggml_compute_params * params, struct ggml_ } func = ggml_cuda_rope; break; + case GGML_OP_ALIBI: + if (!any_on_device) { + return false; + } + func = ggml_cuda_alibi; + break; default: return false; } @@ -3096,6 +6740,18 @@ bool ggml_cuda_compute_forward(struct ggml_compute_params * params, struct ggml_ if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return true; } - func(tensor->src0, tensor->src1, tensor); + func(tensor->src[0], tensor->src[1], tensor); return true; } + +int ggml_cuda_get_device_count() { + int device_count; + CUDA_CHECK(cudaGetDeviceCount(&device_count)); + return device_count; +} + +void ggml_cuda_get_device_description(int device, char * description, size_t description_size) { + cudaDeviceProp prop; + CUDA_CHECK(cudaGetDeviceProperties(&prop, device)); + snprintf(description, description_size, "%s", prop.name); +} diff --git a/ggml-cuda.h b/ggml-cuda.h index 3c1e8deb..a72e8206 100644 --- a/ggml-cuda.h +++ b/ggml-cuda.h @@ -2,34 +2,44 @@ #include "ggml.h" +#ifdef GGML_USE_HIPBLAS +#define GGML_CUDA_NAME "ROCm" +#define GGML_CUBLAS_NAME "hipBLAS" +#else +#define GGML_CUDA_NAME "CUDA" +#define GGML_CUBLAS_NAME "cuBLAS" +#endif + #ifdef __cplusplus extern "C" { #endif #define GGML_CUDA_MAX_DEVICES 16 -void ggml_init_cublas(void); -void ggml_cuda_set_tensor_split(const float * tensor_split); +GGML_API void ggml_init_cublas(void); +GGML_API void * ggml_cuda_host_malloc(size_t size); +GGML_API void ggml_cuda_host_free(void * ptr); -void ggml_cuda_mul(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); -bool ggml_cuda_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); -size_t ggml_cuda_mul_mat_get_wsize(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); -void ggml_cuda_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst, void * wdata, size_t wsize); +GGML_API bool ggml_cuda_can_mul_mat(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst); +GGML_API void ggml_cuda_set_tensor_split(const float * tensor_split); +GGML_API void ggml_cuda_transform_tensor(void * data, struct ggml_tensor * tensor); +GGML_API void ggml_cuda_free_data(struct ggml_tensor * tensor); -// TODO: export these with GGML_API -void * ggml_cuda_host_malloc(size_t size); -void ggml_cuda_host_free(void * ptr); +GGML_API void ggml_cuda_assign_buffers(struct ggml_tensor * tensor); +GGML_API void ggml_cuda_assign_buffers_no_scratch(struct ggml_tensor * tensor); +GGML_API void ggml_cuda_assign_buffers_force_inplace(struct ggml_tensor * tensor); -void ggml_cuda_transform_tensor(void * data, struct ggml_tensor * tensor); +GGML_API void ggml_cuda_assign_buffers_no_alloc(struct ggml_tensor * tensor); +GGML_API void ggml_cuda_assign_scratch_offset(struct ggml_tensor * tensor, size_t offset); -void ggml_cuda_free_data(struct ggml_tensor * tensor); -void ggml_cuda_assign_buffers(struct ggml_tensor * tensor); -void ggml_cuda_assign_buffers_no_scratch(struct ggml_tensor * tensor); -void ggml_cuda_assign_buffers_force_inplace(struct ggml_tensor * tensor); -void ggml_cuda_set_main_device(int main_device); -void ggml_cuda_set_scratch_size(size_t scratch_size); -void ggml_cuda_free_scratch(void); -bool ggml_cuda_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor); +GGML_API void ggml_cuda_set_main_device(int main_device); +GGML_API void ggml_cuda_set_mul_mat_q(bool mul_mat_q); +GGML_API void ggml_cuda_set_scratch_size(size_t scratch_size); +GGML_API void ggml_cuda_free_scratch(void); +GGML_API bool ggml_cuda_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor); + +GGML_API int ggml_cuda_get_device_count(void); +GGML_API void ggml_cuda_get_device_description(int device, char * description, size_t description_size); #ifdef __cplusplus } diff --git a/ggml-metal.h b/ggml-metal.h index b9e50ac7..fca28d37 100644 --- a/ggml-metal.h +++ b/ggml-metal.h @@ -24,6 +24,7 @@ // max memory buffers that can be mapped to the device #define GGML_METAL_MAX_BUFFERS 16 +#define GGML_METAL_MAX_COMMAND_BUFFERS 32 struct ggml_tensor; struct ggml_cgraph; @@ -34,9 +35,16 @@ extern "C" { struct ggml_metal_context; -struct ggml_metal_context * ggml_metal_init(void); +// number of command buffers to use +struct ggml_metal_context * ggml_metal_init(int n_cb); void ggml_metal_free(struct ggml_metal_context * ctx); +void * ggml_metal_host_malloc(size_t n); +void ggml_metal_host_free (void * data); + +// set the number of command buffers to use +void ggml_metal_set_n_cb(struct ggml_metal_context * ctx, int n_cb); + // creates a mapping between a host memory buffer and a device memory buffer // - make sure to map all buffers used in the graph before calling ggml_metal_graph_compute // - the mapping is used during computation to determine the arguments of the compute kernels @@ -57,6 +65,16 @@ void ggml_metal_set_tensor(struct ggml_metal_context * ctx, struct ggml_tensor * // get data from the device into host memory void ggml_metal_get_tensor(struct ggml_metal_context * ctx, struct ggml_tensor * t); +// try to find operations that can be run concurrently in the graph +// you should run it again if the topology of your graph changes +void ggml_metal_graph_find_concurrency(struct ggml_metal_context * ctx, struct ggml_cgraph * gf, bool check_mem); + +// if the graph has been optimized for concurrently dispatch, return length of the concur_list if optimized +int ggml_metal_if_optimized(struct ggml_metal_context * ctx); + +// output the concur_list for ggml_alloc +int * ggml_metal_get_concur_list(struct ggml_metal_context * ctx); + // same as ggml_graph_compute but uses Metal // creates gf->n_threads command buffers in parallel void ggml_metal_graph_compute(struct ggml_metal_context * ctx, struct ggml_cgraph * gf); diff --git a/ggml-metal.m b/ggml-metal.m index fd69c41f..ad2ee8cf 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -5,7 +5,11 @@ #import #import -#import + +#undef MIN +#undef MAX +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) #ifdef GGML_METAL_NDEBUG #define metal_printf(...) @@ -15,6 +19,8 @@ #define UNUSED(x) (void)(x) +#define GGML_MAX_CONCUR (2*GGML_MAX_NODES) + struct ggml_metal_buffer { const char * name; @@ -25,21 +31,30 @@ struct ggml_metal_buffer { }; struct ggml_metal_context { - float * logits; + int n_cb; id device; id queue; id library; + id command_buffers [GGML_METAL_MAX_COMMAND_BUFFERS]; + id command_encoders[GGML_METAL_MAX_COMMAND_BUFFERS]; + + dispatch_queue_t d_queue; + int n_buffers; struct ggml_metal_buffer buffers[GGML_METAL_MAX_BUFFERS]; + int concur_list[GGML_MAX_CONCUR]; + int concur_list_len; + // custom kernels #define GGML_METAL_DECL_KERNEL(name) \ id function_##name; \ id pipeline_##name GGML_METAL_DECL_KERNEL(add); + GGML_METAL_DECL_KERNEL(add_row); // TODO: avoid this extra kernel, instead extend the "add" kernel to support broadcast GGML_METAL_DECL_KERNEL(mul); GGML_METAL_DECL_KERNEL(mul_row); // TODO: avoid this extra kernel, instead extend the "mul" kernel to support broadcast GGML_METAL_DECL_KERNEL(scale); @@ -51,6 +66,7 @@ struct ggml_metal_context { GGML_METAL_DECL_KERNEL(get_rows_f16); GGML_METAL_DECL_KERNEL(get_rows_q4_0); GGML_METAL_DECL_KERNEL(get_rows_q4_1); + GGML_METAL_DECL_KERNEL(get_rows_q8_0); GGML_METAL_DECL_KERNEL(get_rows_q2_K); GGML_METAL_DECL_KERNEL(get_rows_q3_K); GGML_METAL_DECL_KERNEL(get_rows_q4_K); @@ -61,11 +77,21 @@ struct ggml_metal_context { GGML_METAL_DECL_KERNEL(mul_mat_f16_f32); GGML_METAL_DECL_KERNEL(mul_mat_q4_0_f32); GGML_METAL_DECL_KERNEL(mul_mat_q4_1_f32); + GGML_METAL_DECL_KERNEL(mul_mat_q8_0_f32); GGML_METAL_DECL_KERNEL(mul_mat_q2_K_f32); GGML_METAL_DECL_KERNEL(mul_mat_q3_K_f32); GGML_METAL_DECL_KERNEL(mul_mat_q4_K_f32); GGML_METAL_DECL_KERNEL(mul_mat_q5_K_f32); GGML_METAL_DECL_KERNEL(mul_mat_q6_K_f32); + GGML_METAL_DECL_KERNEL(mul_mm_f16_f32); + GGML_METAL_DECL_KERNEL(mul_mm_q4_0_f32); + GGML_METAL_DECL_KERNEL(mul_mm_q4_1_f32); + GGML_METAL_DECL_KERNEL(mul_mm_q8_0_f32); + GGML_METAL_DECL_KERNEL(mul_mm_q2_K_f32); + GGML_METAL_DECL_KERNEL(mul_mm_q3_K_f32); + GGML_METAL_DECL_KERNEL(mul_mm_q4_K_f32); + GGML_METAL_DECL_KERNEL(mul_mm_q5_K_f32); + GGML_METAL_DECL_KERNEL(mul_mm_q6_K_f32); GGML_METAL_DECL_KERNEL(rope); GGML_METAL_DECL_KERNEL(alibi_f32); GGML_METAL_DECL_KERNEL(cpy_f32_f16); @@ -86,22 +112,18 @@ static NSString * const msl_library_source = @"see metal.metal"; @implementation GGMLMetalClass @end -struct ggml_metal_context * ggml_metal_init(void) { +struct ggml_metal_context * ggml_metal_init(int n_cb) { fprintf(stderr, "%s: allocating\n", __func__); struct ggml_metal_context * ctx = malloc(sizeof(struct ggml_metal_context)); + ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS); ctx->device = MTLCreateSystemDefaultDevice(); ctx->queue = [ctx->device newCommandQueue]; ctx->n_buffers = 0; + ctx->concur_list_len = 0; - // determine if we can use MPS - if (MPSSupportsMTLDevice(ctx->device)) { - fprintf(stderr, "%s: using MPS\n", __func__); - } else { - fprintf(stderr, "%s: not using MPS\n", __func__); - GGML_ASSERT(false && "MPS not supported"); - } + ctx->d_queue = dispatch_queue_create("llama.cpp", DISPATCH_QUEUE_CONCURRENT); #if 0 // compile from source string and show compile log @@ -111,7 +133,7 @@ struct ggml_metal_context * ggml_metal_init(void) { ctx->library = [ctx->device newLibraryWithSource:msl_library_source options:nil error:&error]; if (error) { fprintf(stderr, "%s: error: %s\n", __func__, [[error description] UTF8String]); - exit(1); + return NULL; } } #else @@ -129,7 +151,7 @@ struct ggml_metal_context * ggml_metal_init(void) { NSString * src = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; if (error) { fprintf(stderr, "%s: error: %s\n", __func__, [[error description] UTF8String]); - exit(1); + return NULL; } #ifdef GGML_QKK_64 @@ -141,19 +163,27 @@ struct ggml_metal_context * ggml_metal_init(void) { #endif if (error) { fprintf(stderr, "%s: error: %s\n", __func__, [[error description] UTF8String]); - exit(1); + return NULL; } } #endif // load kernels { + NSError * error = nil; #define GGML_METAL_ADD_KERNEL(name) \ ctx->function_##name = [ctx->library newFunctionWithName:@"kernel_"#name]; \ - ctx->pipeline_##name = [ctx->device newComputePipelineStateWithFunction:ctx->function_##name error:nil]; \ - fprintf(stderr, "%s: loaded %-32s %16p\n", __func__, "kernel_"#name, (void *) ctx->pipeline_##name); + ctx->pipeline_##name = [ctx->device newComputePipelineStateWithFunction:ctx->function_##name error:&error]; \ + fprintf(stderr, "%s: loaded %-32s %16p | th_max = %4d | th_width = %4d\n", __func__, "kernel_"#name, (void *) ctx->pipeline_##name, \ + (int) ctx->pipeline_##name.maxTotalThreadsPerThreadgroup, \ + (int) ctx->pipeline_##name.threadExecutionWidth); \ + if (error) { \ + fprintf(stderr, "%s: load pipeline error: %s\n", __func__, [[error description] UTF8String]); \ + return NULL; \ + } GGML_METAL_ADD_KERNEL(add); + GGML_METAL_ADD_KERNEL(add_row); GGML_METAL_ADD_KERNEL(mul); GGML_METAL_ADD_KERNEL(mul_row); GGML_METAL_ADD_KERNEL(scale); @@ -165,6 +195,7 @@ struct ggml_metal_context * ggml_metal_init(void) { GGML_METAL_ADD_KERNEL(get_rows_f16); GGML_METAL_ADD_KERNEL(get_rows_q4_0); GGML_METAL_ADD_KERNEL(get_rows_q4_1); + GGML_METAL_ADD_KERNEL(get_rows_q8_0); GGML_METAL_ADD_KERNEL(get_rows_q2_K); GGML_METAL_ADD_KERNEL(get_rows_q3_K); GGML_METAL_ADD_KERNEL(get_rows_q4_K); @@ -175,11 +206,21 @@ struct ggml_metal_context * ggml_metal_init(void) { GGML_METAL_ADD_KERNEL(mul_mat_f16_f32); GGML_METAL_ADD_KERNEL(mul_mat_q4_0_f32); GGML_METAL_ADD_KERNEL(mul_mat_q4_1_f32); + GGML_METAL_ADD_KERNEL(mul_mat_q8_0_f32); GGML_METAL_ADD_KERNEL(mul_mat_q2_K_f32); GGML_METAL_ADD_KERNEL(mul_mat_q3_K_f32); GGML_METAL_ADD_KERNEL(mul_mat_q4_K_f32); GGML_METAL_ADD_KERNEL(mul_mat_q5_K_f32); GGML_METAL_ADD_KERNEL(mul_mat_q6_K_f32); + GGML_METAL_ADD_KERNEL(mul_mm_f16_f32); + GGML_METAL_ADD_KERNEL(mul_mm_q4_0_f32); + GGML_METAL_ADD_KERNEL(mul_mm_q8_0_f32); + GGML_METAL_ADD_KERNEL(mul_mm_q4_1_f32); + GGML_METAL_ADD_KERNEL(mul_mm_q2_K_f32); + GGML_METAL_ADD_KERNEL(mul_mm_q3_K_f32); + GGML_METAL_ADD_KERNEL(mul_mm_q4_K_f32); + GGML_METAL_ADD_KERNEL(mul_mm_q5_K_f32); + GGML_METAL_ADD_KERNEL(mul_mm_q6_K_f32); GGML_METAL_ADD_KERNEL(rope); GGML_METAL_ADD_KERNEL(alibi_f32); GGML_METAL_ADD_KERNEL(cpy_f32_f16); @@ -189,12 +230,12 @@ struct ggml_metal_context * ggml_metal_init(void) { #undef GGML_METAL_ADD_KERNEL } - fprintf(stderr, "%s: recommendedMaxWorkingSetSize = %8.2f MB\n", __func__, ctx->device.recommendedMaxWorkingSetSize / 1024.0 / 1024.0); - fprintf(stderr, "%s: hasUnifiedMemory = %s\n", __func__, ctx->device.hasUnifiedMemory ? "true" : "false"); + fprintf(stderr, "%s: recommendedMaxWorkingSetSize = %8.2f MB\n", __func__, ctx->device.recommendedMaxWorkingSetSize / 1024.0 / 1024.0); + fprintf(stderr, "%s: hasUnifiedMemory = %s\n", __func__, ctx->device.hasUnifiedMemory ? "true" : "false"); if (ctx->device.maxTransferRate != 0) { - fprintf(stderr, "%s: maxTransferRate = %8.2f MB/s\n", __func__, ctx->device.maxTransferRate / 1024.0 / 1024.0); + fprintf(stderr, "%s: maxTransferRate = %8.2f MB/s\n", __func__, ctx->device.maxTransferRate / 1024.0 / 1024.0); } else { - fprintf(stderr, "%s: maxTransferRate = built-in GPU\n", __func__); + fprintf(stderr, "%s: maxTransferRate = built-in GPU\n", __func__); } return ctx; @@ -202,12 +243,97 @@ struct ggml_metal_context * ggml_metal_init(void) { void ggml_metal_free(struct ggml_metal_context * ctx) { fprintf(stderr, "%s: deallocating\n", __func__); +#define GGML_METAL_DEL_KERNEL(name) \ + [ctx->function_##name release]; \ + [ctx->pipeline_##name release]; + + GGML_METAL_DEL_KERNEL(add); + GGML_METAL_DEL_KERNEL(add_row); + GGML_METAL_DEL_KERNEL(mul); + GGML_METAL_DEL_KERNEL(mul_row); + GGML_METAL_DEL_KERNEL(scale); + GGML_METAL_DEL_KERNEL(silu); + GGML_METAL_DEL_KERNEL(relu); + GGML_METAL_DEL_KERNEL(gelu); + GGML_METAL_DEL_KERNEL(soft_max); + GGML_METAL_DEL_KERNEL(diag_mask_inf); + GGML_METAL_DEL_KERNEL(get_rows_f16); + GGML_METAL_DEL_KERNEL(get_rows_q4_0); + GGML_METAL_DEL_KERNEL(get_rows_q4_1); + GGML_METAL_DEL_KERNEL(get_rows_q8_0); + GGML_METAL_DEL_KERNEL(get_rows_q2_K); + GGML_METAL_DEL_KERNEL(get_rows_q3_K); + GGML_METAL_DEL_KERNEL(get_rows_q4_K); + GGML_METAL_DEL_KERNEL(get_rows_q5_K); + GGML_METAL_DEL_KERNEL(get_rows_q6_K); + GGML_METAL_DEL_KERNEL(rms_norm); + GGML_METAL_DEL_KERNEL(norm); + GGML_METAL_DEL_KERNEL(mul_mat_f16_f32); + GGML_METAL_DEL_KERNEL(mul_mat_q4_0_f32); + GGML_METAL_DEL_KERNEL(mul_mat_q4_1_f32); + GGML_METAL_DEL_KERNEL(mul_mat_q8_0_f32); + GGML_METAL_DEL_KERNEL(mul_mat_q2_K_f32); + GGML_METAL_DEL_KERNEL(mul_mat_q3_K_f32); + GGML_METAL_DEL_KERNEL(mul_mat_q4_K_f32); + GGML_METAL_DEL_KERNEL(mul_mat_q5_K_f32); + GGML_METAL_DEL_KERNEL(mul_mat_q6_K_f32); + GGML_METAL_DEL_KERNEL(mul_mm_f16_f32); + GGML_METAL_DEL_KERNEL(mul_mm_q4_0_f32); + GGML_METAL_DEL_KERNEL(mul_mm_q8_0_f32); + GGML_METAL_DEL_KERNEL(mul_mm_q4_1_f32); + GGML_METAL_DEL_KERNEL(mul_mm_q2_K_f32); + GGML_METAL_DEL_KERNEL(mul_mm_q3_K_f32); + GGML_METAL_DEL_KERNEL(mul_mm_q4_K_f32); + GGML_METAL_DEL_KERNEL(mul_mm_q5_K_f32); + GGML_METAL_DEL_KERNEL(mul_mm_q6_K_f32); + GGML_METAL_DEL_KERNEL(rope); + GGML_METAL_DEL_KERNEL(alibi_f32); + GGML_METAL_DEL_KERNEL(cpy_f32_f16); + GGML_METAL_DEL_KERNEL(cpy_f32_f32); + GGML_METAL_DEL_KERNEL(cpy_f16_f16); + +#undef GGML_METAL_DEL_KERNEL + for (int i = 0; i < ctx->n_buffers; ++i) { [ctx->buffers[i].metal release]; } + + [ctx->library release]; + [ctx->queue release]; + [ctx->device release]; + + dispatch_release(ctx->d_queue); + free(ctx); } +void * ggml_metal_host_malloc(size_t n) { + void * data = NULL; + const int result = posix_memalign((void **) &data, getpagesize(), n); + if (result != 0) { + fprintf(stderr, "%s: error: posix_memalign failed\n", __func__); + return NULL; + } + + return data; +} + +void ggml_metal_host_free(void * data) { + free(data); +} + +void ggml_metal_set_n_cb(struct ggml_metal_context * ctx, int n_cb) { + ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS); +} + +int ggml_metal_if_optimized(struct ggml_metal_context * ctx) { + return ctx->concur_list_len; +} + +int * ggml_metal_get_concur_list(struct ggml_metal_context * ctx) { + return ctx->concur_list; +} + // finds the Metal buffer that contains the tensor data on the GPU device // the assumption is that there is 1-to-1 mapping between the host and device memory buffers, so we can find the // Metal buffer based on the host memory pointer @@ -346,48 +472,154 @@ void ggml_metal_get_tensor( memcpy(t->data, (void *) ((uint8_t *) id_src.contents + offs), ggml_nbytes(t)); } +void ggml_metal_graph_find_concurrency( + struct ggml_metal_context * ctx, + struct ggml_cgraph * gf, bool check_mem) { + int search_depth = gf->n_nodes; //we only find concurrency in this range to avoid wasting too much time + int nodes_unused[GGML_MAX_CONCUR]; + + for (int i = 0; i < GGML_MAX_CONCUR; i++) { ctx->concur_list[i] = 0; } + for (int i = 0; i < gf->n_nodes; i++) { nodes_unused[i] = 1; } + ctx->concur_list_len = 0; + + int n_left = gf->n_nodes; + int n_start = 0; // all nodes before n_start at nodes_unused array have been sorted and store back to ctx->concur_list + int level_pos = 0; // at ctx->concur_list, the last layer (level) ends at level_pos + + while (n_left > 0) { + // number of nodes at a layer (that can be issued concurrently) + int concurrency = 0; + for (int i = n_start; i < ((n_start + search_depth > gf->n_nodes) ? gf->n_nodes : n_start + search_depth); i++) { + if (nodes_unused[i]) { + // if the requirements for gf->nodes[i] are satisfied + int exe_flag = 1; + + // scan all srcs + for (int src_ind = 0; src_ind < GGML_MAX_SRC; src_ind++) { + struct ggml_tensor * src_cur = gf->nodes[i]->src[src_ind]; + if (src_cur) { + // if is leaf nodes it's satisfied. + // TODO: ggml_is_leaf() + if (src_cur->op == GGML_OP_NONE && src_cur->grad == NULL) { + continue; + } + + // otherwise this src should be the output from previous nodes. + int is_found = 0; + + // scan 2*search_depth back because we inserted barrier. + //for (int j = ((level_pos - 2*search_depth) < 0 ? 0 : (level_pos - 2*search_depth)); j < level_pos; j++) { + for (int j = MAX(0, level_pos - 2*search_depth); j < level_pos; j++) { + if (ctx->concur_list[j] >= 0 && gf->nodes[ctx->concur_list[j]] == src_cur) { + is_found = 1; + break; + } + } + if (is_found == 0) { + exe_flag = 0; + break; + } + } + } + if (exe_flag && check_mem) { + // check if nodes[i]'s data will be overwritten by a node before nodes[i]. + // if node[5] and node[3] write to the same memory region, then we can't issue node[5] before node[3] + int64_t data_start = (int64_t) gf->nodes[i]->data; + int64_t length = (int64_t) ggml_nbytes(gf->nodes[i]); + for (int j = n_start; j < i; j++) { + if (nodes_unused[j] && gf->nodes[j]->op != GGML_OP_RESHAPE \ + && gf->nodes[j]->op != GGML_OP_VIEW \ + && gf->nodes[j]->op != GGML_OP_TRANSPOSE \ + && gf->nodes[j]->op != GGML_OP_PERMUTE) { + if (((int64_t)gf->nodes[j]->data) >= data_start + length || \ + ((int64_t)gf->nodes[j]->data) + (int64_t) ggml_nbytes(gf->nodes[j]) <= data_start) { + continue; + } + + exe_flag = 0; + } + } + } + if (exe_flag) { + ctx->concur_list[level_pos + concurrency] = i; + nodes_unused[i] = 0; + concurrency++; + ctx->concur_list_len++; + } + } + } + n_left -= concurrency; + // adding a barrier different layer + ctx->concur_list[level_pos + concurrency] = -1; + ctx->concur_list_len++; + // jump all sorted nodes at nodes_bak + while (!nodes_unused[n_start]) { + n_start++; + } + level_pos += concurrency + 1; + } + + if (ctx->concur_list_len > GGML_MAX_CONCUR) { + fprintf(stderr, "%s: too many elements for metal ctx->concur_list!\n", __func__); + } +} + void ggml_metal_graph_compute( struct ggml_metal_context * ctx, struct ggml_cgraph * gf) { metal_printf("%s: evaluating graph\n", __func__); + @autoreleasepool { + + // if there is ctx->concur_list, dispatch concurrently + // else fallback to serial dispatch + MTLComputePassDescriptor * edesc = MTLComputePassDescriptor.computePassDescriptor; + + const bool has_concur = ctx->concur_list_len && ctx->concur_list_len <= GGML_MAX_CONCUR; + + const int n_nodes = has_concur ? ctx->concur_list_len : gf->n_nodes; + edesc.dispatchType = has_concur ? MTLDispatchTypeConcurrent : MTLDispatchTypeSerial; + // create multiple command buffers and enqueue them // then, we encode the graph into the command buffers in parallel - const int n_cb = gf->n_threads; - - NSMutableArray * command_buffers = [NSMutableArray arrayWithCapacity:n_cb]; + const int n_cb = ctx->n_cb; for (int i = 0; i < n_cb; ++i) { - command_buffers[i] = [ctx->queue commandBuffer]; + ctx->command_buffers[i] = [ctx->queue commandBuffer]; // enqueue the command buffers in order to specify their execution order - [command_buffers[i] enqueue]; + [ctx->command_buffers[i] enqueue]; + + ctx->command_encoders[i] = [ctx->command_buffers[i] computeCommandEncoderWithDescriptor: edesc]; } - // TODO: is this the best way to start threads? - dispatch_queue_t queue = dispatch_queue_create("llama.cpp", DISPATCH_QUEUE_CONCURRENT); - for (int cb_idx = 0; cb_idx < n_cb; ++cb_idx) { - const int n_nodes_per_cb = (gf->n_nodes + n_cb - 1) / n_cb; + const int n_nodes_per_cb = (n_nodes + n_cb - 1) / n_cb; - dispatch_async(queue, ^{ + dispatch_async(ctx->d_queue, ^{ size_t offs_src0 = 0; size_t offs_src1 = 0; size_t offs_dst = 0; - id command_buffer = command_buffers[cb_idx]; - - id encoder = nil; + id command_buffer = ctx->command_buffers[cb_idx]; + id encoder = ctx->command_encoders[cb_idx]; const int node_start = (cb_idx + 0) * n_nodes_per_cb; - const int node_end = (cb_idx == n_cb - 1) ? gf->n_nodes : (cb_idx + 1) * n_nodes_per_cb; + const int node_end = MIN((cb_idx == n_cb - 1) ? n_nodes : (cb_idx + 1) * n_nodes_per_cb, n_nodes); + + for (int ind = node_start; ind < node_end; ++ind) { + const int i = has_concur ? ctx->concur_list[ind] : ind; + + if (i == -1) { + [encoder memoryBarrierWithScope:MTLBarrierScopeBuffers]; + continue; + } - for (int i = node_start; i < node_end; ++i) { metal_printf("%s: encoding node %3d, op = %8s\n", __func__, i, ggml_op_name(gf->nodes[i]->op)); - struct ggml_tensor * src0 = gf->nodes[i]->src0; - struct ggml_tensor * src1 = gf->nodes[i]->src1; + struct ggml_tensor * src0 = gf->nodes[i]->src[0]; + struct ggml_tensor * src1 = gf->nodes[i]->src[1]; struct ggml_tensor * dst = gf->nodes[i]; const int64_t ne00 = src0 ? src0->ne[0] : 0; @@ -443,6 +675,7 @@ void ggml_metal_graph_compute( //} switch (dst->op) { + case GGML_OP_NONE: case GGML_OP_RESHAPE: case GGML_OP_VIEW: case GGML_OP_TRANSPOSE: @@ -452,14 +685,16 @@ void ggml_metal_graph_compute( } break; case GGML_OP_ADD: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; + if (ggml_nelements(src1) == ne10) { + // src1 is a row + [encoder setComputePipelineState:ctx->pipeline_add_row]; + } else { + [encoder setComputePipelineState:ctx->pipeline_add]; } - - [encoder setComputePipelineState:ctx->pipeline_add]; [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; + [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3]; const int64_t n = ggml_nelements(dst); @@ -467,10 +702,6 @@ void ggml_metal_graph_compute( } break; case GGML_OP_MUL: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - if (ggml_nelements(src1) == ne10) { // src1 is a row [encoder setComputePipelineState:ctx->pipeline_mul_row]; @@ -488,10 +719,6 @@ void ggml_metal_graph_compute( } break; case GGML_OP_SCALE: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - const float scale = *(const float *) src1->data; [encoder setComputePipelineState:ctx->pipeline_scale]; @@ -503,54 +730,46 @@ void ggml_metal_graph_compute( [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; } break; - case GGML_OP_SILU: - { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } + case GGML_OP_UNARY: + switch (ggml_get_unary_op(gf->nodes[i])) { + case GGML_UNARY_OP_SILU: + { + [encoder setComputePipelineState:ctx->pipeline_silu]; + [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setComputePipelineState:ctx->pipeline_silu]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; + const int64_t n = ggml_nelements(dst); - const int64_t n = ggml_nelements(dst); + [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; + } break; + case GGML_UNARY_OP_RELU: + { + [encoder setComputePipelineState:ctx->pipeline_relu]; + [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; + const int64_t n = ggml_nelements(dst); + + [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; + } break; + case GGML_UNARY_OP_GELU: + { + [encoder setComputePipelineState:ctx->pipeline_gelu]; + [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; + + const int64_t n = ggml_nelements(dst); + + [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; + } break; + default: + { + fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); + GGML_ASSERT(false); + } } break; - case GGML_OP_RELU: - { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - - [encoder setComputePipelineState:ctx->pipeline_relu]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - - const int64_t n = ggml_nelements(dst); - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; - case GGML_OP_GELU: - { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - - [encoder setComputePipelineState:ctx->pipeline_gelu]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - - const int64_t n = ggml_nelements(dst); - - [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; - } break; case GGML_OP_SOFT_MAX: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - const int nth = 32; [encoder setComputePipelineState:ctx->pipeline_soft_max]; @@ -565,11 +784,7 @@ void ggml_metal_graph_compute( } break; case GGML_OP_DIAG_MASK_INF: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - - const int n_past = ((int32_t *)(src1->data))[0]; + const int n_past = ((int32_t *)(dst->op_params))[0]; [encoder setComputePipelineState:ctx->pipeline_diag_mask_inf]; [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; @@ -585,53 +800,44 @@ void ggml_metal_graph_compute( // TODO: needs to be updated after PR: https://github.com/ggerganov/ggml/pull/224 GGML_ASSERT(ne00 == ne10); - GGML_ASSERT(ne02 == ne12); + // GGML_ASSERT(ne02 == ne12); // Should be checked on individual data types until broadcast is implemented everywhere + uint gqa = ne12/ne02; + GGML_ASSERT(ne03 == ne13); + // for now the matrix-matrix multiplication kernel only works on A14+/M1+ SoCs + // AMD GPU and older A-chips will reuse matrix-vector multiplication kernel if (ggml_is_contiguous(src0) && ggml_is_contiguous(src1) && - (src0t == GGML_TYPE_F32 || src0t == GGML_TYPE_F16) && ne11 > 1) { - - if (encoder != nil) { - [encoder endEncoding]; - encoder = nil; - } - - MPSDataType src0dt = src0t == GGML_TYPE_F32 ? MPSDataTypeFloat32 : MPSDataTypeFloat16; - MPSDataType src1dt = src1t == GGML_TYPE_F32 ? MPSDataTypeFloat32 : MPSDataTypeFloat16; - - // for F32 x F32 we use MPS - MPSMatrixDescriptor * desc0 = [MPSMatrixDescriptor - matrixDescriptorWithRows:ne01 columns:ne00 rowBytes:src0->nb[1] dataType:src0dt]; - - MPSMatrixDescriptor * desc1 = [MPSMatrixDescriptor - matrixDescriptorWithRows:ne11 columns:ne10 rowBytes:src1->nb[1] dataType:src1dt]; - - MPSMatrixDescriptor * desc = [MPSMatrixDescriptor - matrixDescriptorWithRows:ne1 columns:ne0 rowBytes:dst->nb[1] dataType:MPSDataTypeFloat32]; - - MPSMatrixMultiplication * mul = [[MPSMatrixMultiplication alloc] - initWithDevice:ctx->device transposeLeft:false transposeRight:true - resultRows:ne11 resultColumns:ne01 interiorColumns:ne00 alpha:1.0 beta:0.0]; - - // we need to do ne02 multiplications - // TODO: is there a way to do this in parallel - currently very slow .. - // TODO: might be possible to offload part of the computation to ANE using Accelerate's CBLAS - for (int64_t i02 = 0; i02 < ne02; ++i02) { - size_t offs_src0_cur = offs_src0 + i02*nb02; - size_t offs_src1_cur = offs_src1 + i02*nb12; - size_t offs_dst_cur = offs_dst + i02*nb2; - - MPSMatrix * mat_src0 = [[MPSMatrix alloc] initWithBuffer:id_src0 offset:offs_src0_cur descriptor:desc0]; - MPSMatrix * mat_src1 = [[MPSMatrix alloc] initWithBuffer:id_src1 offset:offs_src1_cur descriptor:desc1]; - MPSMatrix * mat_dst = [[MPSMatrix alloc] initWithBuffer:id_dst offset:offs_dst_cur descriptor:desc ]; - - [mul encodeToCommandBuffer:command_buffer leftMatrix:mat_src1 rightMatrix:mat_src0 resultMatrix:mat_dst]; + src1t == GGML_TYPE_F32 && + [ctx->device supportsFamily:MTLGPUFamilyApple7] && + ne00%32 == 0 && + ne11 > 1) { + switch (src0->type) { + case GGML_TYPE_F16: [encoder setComputePipelineState:ctx->pipeline_mul_mm_f16_f32]; break; + case GGML_TYPE_Q4_0: [encoder setComputePipelineState:ctx->pipeline_mul_mm_q4_0_f32]; break; + case GGML_TYPE_Q4_1: [encoder setComputePipelineState:ctx->pipeline_mul_mm_q4_1_f32]; break; + case GGML_TYPE_Q8_0: [encoder setComputePipelineState:ctx->pipeline_mul_mm_q8_0_f32]; break; + case GGML_TYPE_Q2_K: [encoder setComputePipelineState:ctx->pipeline_mul_mm_q2_K_f32]; break; + case GGML_TYPE_Q3_K: [encoder setComputePipelineState:ctx->pipeline_mul_mm_q3_K_f32]; break; + case GGML_TYPE_Q4_K: [encoder setComputePipelineState:ctx->pipeline_mul_mm_q4_K_f32]; break; + case GGML_TYPE_Q5_K: [encoder setComputePipelineState:ctx->pipeline_mul_mm_q5_K_f32]; break; + case GGML_TYPE_Q6_K: [encoder setComputePipelineState:ctx->pipeline_mul_mm_q6_K_f32]; break; + default: GGML_ASSERT(false && "MUL MAT-MAT not implemented"); } + [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; + [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; + [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3]; + [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4]; + [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:5]; + [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:6]; + [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:7]; + [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:8]; + [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:9]; + [encoder setBytes:&gqa length:sizeof(gqa) atIndex:10]; + [encoder setThreadgroupMemoryLength:8192 atIndex:0]; + [encoder dispatchThreadgroups:MTLSizeMake( (ne11+31)/32, (ne01+63) / 64, ne12) threadsPerThreadgroup:MTLSizeMake(128, 1, 1)]; } else { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - int nth0 = 32; int nth1 = 1; @@ -639,8 +845,6 @@ void ggml_metal_graph_compute( switch (src0t) { case GGML_TYPE_F16: { - GGML_ASSERT(ne02 == ne12); - nth0 = 64; nth1 = 1; [encoder setComputePipelineState:ctx->pipeline_mul_mat_f16_f32]; @@ -663,13 +867,22 @@ void ggml_metal_graph_compute( nth1 = 8; [encoder setComputePipelineState:ctx->pipeline_mul_mat_q4_1_f32]; } break; + case GGML_TYPE_Q8_0: + { + GGML_ASSERT(ne02 == 1); + GGML_ASSERT(ne12 == 1); + + nth0 = 8; + nth1 = 8; + [encoder setComputePipelineState:ctx->pipeline_mul_mat_q8_0_f32]; + } break; case GGML_TYPE_Q2_K: { GGML_ASSERT(ne02 == 1); GGML_ASSERT(ne12 == 1); - nth0 = 4; - nth1 = 16; + nth0 = 2; + nth1 = 32; [encoder setComputePipelineState:ctx->pipeline_mul_mat_q2_K_f32]; } break; case GGML_TYPE_Q3_K: @@ -677,8 +890,8 @@ void ggml_metal_graph_compute( GGML_ASSERT(ne02 == 1); GGML_ASSERT(ne12 == 1); - nth0 = 4; - nth1 = 16; + nth0 = 2; + nth1 = 32; [encoder setComputePipelineState:ctx->pipeline_mul_mat_q3_K_f32]; } break; case GGML_TYPE_Q4_K: @@ -686,8 +899,8 @@ void ggml_metal_graph_compute( GGML_ASSERT(ne02 == 1); GGML_ASSERT(ne12 == 1); - nth0 = 4; - nth1 = 16; + nth0 = 2; + nth1 = 32; [encoder setComputePipelineState:ctx->pipeline_mul_mat_q4_K_f32]; } break; case GGML_TYPE_Q5_K: @@ -695,8 +908,8 @@ void ggml_metal_graph_compute( GGML_ASSERT(ne02 == 1); GGML_ASSERT(ne12 == 1); - nth0 = 4; - nth1 = 16; + nth0 = 2; + nth1 = 32; [encoder setComputePipelineState:ctx->pipeline_mul_mat_q5_K_f32]; } break; case GGML_TYPE_Q6_K: @@ -704,8 +917,8 @@ void ggml_metal_graph_compute( GGML_ASSERT(ne02 == 1); GGML_ASSERT(ne12 == 1); - nth0 = 4; - nth1 = 16; + nth0 = 2; + nth1 = 32; [encoder setComputePipelineState:ctx->pipeline_mul_mat_q6_K_f32]; } break; default: @@ -720,28 +933,36 @@ void ggml_metal_graph_compute( [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3]; [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4]; - [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:5]; - [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:6]; - [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:7]; - [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:8]; - [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:9]; - [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:10]; - [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:11]; - [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:12]; - [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:13]; - [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:14]; + [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5]; + [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6]; + [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7]; + [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8]; + [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:9]; + [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:10]; + [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:11]; + [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:12]; + [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:13]; + [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:14]; + [encoder setBytes:&ne0 length:sizeof(ne0) atIndex:15]; + [encoder setBytes:&ne1 length:sizeof(ne1) atIndex:16]; + [encoder setBytes:&gqa length:sizeof(gqa) atIndex:17]; - if (src0t == GGML_TYPE_Q4_0 || src0t == GGML_TYPE_Q4_1) { - [encoder setThreadgroupMemoryLength:nth0*nth1*sizeof(float) atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne11, 1) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; + if (src0t == GGML_TYPE_Q4_0 || src0t == GGML_TYPE_Q4_1 || src0t == GGML_TYPE_Q8_0 || + src0t == GGML_TYPE_Q2_K || src0t == GGML_TYPE_Q4_K) { + [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; } - else if (src0t == GGML_TYPE_Q2_K || - src0t == GGML_TYPE_Q3_K || - src0t == GGML_TYPE_Q4_K || - src0t == GGML_TYPE_Q5_K || - src0t == GGML_TYPE_Q6_K) { - [encoder setThreadgroupMemoryLength:nth0*nth1*sizeof(float) atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake(ne01, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; + else if (src0t == GGML_TYPE_Q3_K) { +#ifdef GGML_QKK_64 + [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; +#else + [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; +#endif + } + else if (src0t == GGML_TYPE_Q5_K) { + [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; + } + else if (src0t == GGML_TYPE_Q6_K) { + [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; } else { [encoder setThreadgroupMemoryLength:nth0*sizeof(float) atIndex:0]; [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; @@ -750,14 +971,11 @@ void ggml_metal_graph_compute( } break; case GGML_OP_GET_ROWS: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - switch (src0->type) { - case GGML_TYPE_F16: [encoder setComputePipelineState:ctx->pipeline_get_rows_f16]; break; + case GGML_TYPE_F16: [encoder setComputePipelineState:ctx->pipeline_get_rows_f16]; break; case GGML_TYPE_Q4_0: [encoder setComputePipelineState:ctx->pipeline_get_rows_q4_0]; break; case GGML_TYPE_Q4_1: [encoder setComputePipelineState:ctx->pipeline_get_rows_q4_1]; break; + case GGML_TYPE_Q8_0: [encoder setComputePipelineState:ctx->pipeline_get_rows_q8_0]; break; case GGML_TYPE_Q2_K: [encoder setComputePipelineState:ctx->pipeline_get_rows_q2_K]; break; case GGML_TYPE_Q3_K: [encoder setComputePipelineState:ctx->pipeline_get_rows_q3_K]; break; case GGML_TYPE_Q4_K: [encoder setComputePipelineState:ctx->pipeline_get_rows_q4_K]; break; @@ -779,13 +997,10 @@ void ggml_metal_graph_compute( } break; case GGML_OP_RMS_NORM: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } + float eps; + memcpy(&eps, dst->op_params, sizeof(float)); - const float eps = 1e-6f; - - const int nth = 256; + const int nth = 512; [encoder setComputePipelineState:ctx->pipeline_rms_norm]; [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; @@ -793,7 +1008,7 @@ void ggml_metal_graph_compute( [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:3]; [encoder setBytes:&eps length:sizeof( float) atIndex:4]; - [encoder setThreadgroupMemoryLength:nth*sizeof(float) atIndex:0]; + [encoder setThreadgroupMemoryLength:nth/32*sizeof(float) atIndex:0]; const int64_t nrows = ggml_nrows(src0); @@ -801,20 +1016,17 @@ void ggml_metal_graph_compute( } break; case GGML_OP_NORM: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - - const float eps = 1e-5f; + float eps; + memcpy(&eps, dst->op_params, sizeof(float)); const int nth = 256; [encoder setComputePipelineState:ctx->pipeline_norm]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:3]; - [encoder setBytes:&eps length:sizeof( float) atIndex:4]; + [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; + [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; + [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:3]; + [encoder setBytes:&eps length:sizeof( float) atIndex:4]; [encoder setThreadgroupMemoryLength:nth*sizeof(float) atIndex:0]; const int64_t nrows = ggml_nrows(src0); @@ -823,15 +1035,12 @@ void ggml_metal_graph_compute( } break; case GGML_OP_ALIBI: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - GGML_ASSERT((src0t == GGML_TYPE_F32)); - const int n_past = ((int32_t *) src1->data)[0]; UNUSED(n_past); - const int n_head = ((int32_t *) src1->data)[1]; - const float max_bias = ((float *) src1->data)[2]; + const int n_past = ((int32_t *) dst->op_params)[0]; UNUSED(n_past); + const int n_head = ((int32_t *) dst->op_params)[1]; + float max_bias; + memcpy(&max_bias, (int32_t *) dst->op_params + 2, sizeof(float)); if (__builtin_popcount(n_head) != 1) { GGML_ASSERT(false && "only power-of-two n_head implemented"); @@ -860,51 +1069,53 @@ void ggml_metal_graph_compute( [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:16]; [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:17]; [encoder setBytes:&m0 length:sizeof( float) atIndex:18]; + const int nth = 32; + [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; } break; case GGML_OP_ROPE: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } + const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_dims = ((int32_t *) dst->op_params)[1]; + const int mode = ((int32_t *) dst->op_params)[2]; - const int n_dims = ((int32_t *) src1->data)[1]; - const int mode = ((int32_t *) src1->data)[2]; - - const int n_past = ((int32_t *)(src1->data))[0]; + float freq_base; + float freq_scale; + memcpy(&freq_base, (int32_t *) dst->op_params + 4, sizeof(float)); + memcpy(&freq_scale, (int32_t *) dst->op_params + 5, sizeof(float)); [encoder setComputePipelineState:ctx->pipeline_rope]; - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; - [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:3]; - [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:4]; - [encoder setBytes:&ne03 length:sizeof( int64_t) atIndex:5]; - [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:6]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:7]; - [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:8]; - [encoder setBytes:&nb03 length:sizeof(uint64_t) atIndex:9]; - [encoder setBytes:&ne0 length:sizeof( int64_t) atIndex:10]; - [encoder setBytes:&ne1 length:sizeof( int64_t) atIndex:11]; - [encoder setBytes:&ne2 length:sizeof( int64_t) atIndex:12]; - [encoder setBytes:&ne3 length:sizeof( int64_t) atIndex:13]; - [encoder setBytes:&nb0 length:sizeof(uint64_t) atIndex:14]; - [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:15]; - [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:16]; - [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:17]; - [encoder setBytes:&n_past length:sizeof( int) atIndex:18]; - [encoder setBytes:&n_dims length:sizeof( int) atIndex:19]; - [encoder setBytes:&mode length:sizeof( int) atIndex:20]; + [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; + [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; + [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:3]; + [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:4]; + [encoder setBytes:&ne03 length:sizeof( int64_t) atIndex:5]; + [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:6]; + [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:7]; + [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:8]; + [encoder setBytes:&nb03 length:sizeof(uint64_t) atIndex:9]; + [encoder setBytes:&ne0 length:sizeof( int64_t) atIndex:10]; + [encoder setBytes:&ne1 length:sizeof( int64_t) atIndex:11]; + [encoder setBytes:&ne2 length:sizeof( int64_t) atIndex:12]; + [encoder setBytes:&ne3 length:sizeof( int64_t) atIndex:13]; + [encoder setBytes:&nb0 length:sizeof(uint64_t) atIndex:14]; + [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:15]; + [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:16]; + [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:17]; + [encoder setBytes:&n_past length:sizeof( int) atIndex:18]; + [encoder setBytes:&n_dims length:sizeof( int) atIndex:19]; + [encoder setBytes:&mode length:sizeof( int) atIndex:20]; + [encoder setBytes:&freq_base length:sizeof(float) atIndex:21]; + [encoder setBytes:&freq_scale length:sizeof(float) atIndex:22]; [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; } break; + case GGML_OP_DUP: case GGML_OP_CPY: + case GGML_OP_CONT: { - if (encoder == nil) { - encoder = [command_buffer computeCommandEncoder]; - } - const int nth = 32; switch (src0t) { @@ -927,30 +1138,32 @@ void ggml_metal_graph_compute( default: GGML_ASSERT(false && "not implemented"); } - [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; - [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; - [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; - [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:3]; - [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:4]; - [encoder setBytes:&ne03 length:sizeof( int64_t) atIndex:5]; - [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:6]; - [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:7]; - [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:8]; - [encoder setBytes:&nb03 length:sizeof(uint64_t) atIndex:9]; - [encoder setBytes:&ne0 length:sizeof( int64_t) atIndex:10]; - [encoder setBytes:&ne1 length:sizeof( int64_t) atIndex:11]; - [encoder setBytes:&ne2 length:sizeof( int64_t) atIndex:12]; - [encoder setBytes:&ne3 length:sizeof( int64_t) atIndex:13]; - [encoder setBytes:&nb0 length:sizeof(uint64_t) atIndex:14]; - [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:15]; - [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:16]; - [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:17]; + [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; + [encoder setBuffer:id_dst offset:offs_dst atIndex:1]; + [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:2]; + [encoder setBytes:&ne01 length:sizeof( int64_t) atIndex:3]; + [encoder setBytes:&ne02 length:sizeof( int64_t) atIndex:4]; + [encoder setBytes:&ne03 length:sizeof( int64_t) atIndex:5]; + [encoder setBytes:&nb00 length:sizeof(uint64_t) atIndex:6]; + [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:7]; + [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:8]; + [encoder setBytes:&nb03 length:sizeof(uint64_t) atIndex:9]; + [encoder setBytes:&ne0 length:sizeof( int64_t) atIndex:10]; + [encoder setBytes:&ne1 length:sizeof( int64_t) atIndex:11]; + [encoder setBytes:&ne2 length:sizeof( int64_t) atIndex:12]; + [encoder setBytes:&ne3 length:sizeof( int64_t) atIndex:13]; + [encoder setBytes:&nb0 length:sizeof(uint64_t) atIndex:14]; + [encoder setBytes:&nb1 length:sizeof(uint64_t) atIndex:15]; + [encoder setBytes:&nb2 length:sizeof(uint64_t) atIndex:16]; + [encoder setBytes:&nb3 length:sizeof(uint64_t) atIndex:17]; [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)]; } break; default: - fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); - GGML_ASSERT(false); + { + fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); + GGML_ASSERT(false); + } } } @@ -964,17 +1177,19 @@ void ggml_metal_graph_compute( } // wait for all threads to finish - dispatch_barrier_sync(queue, ^{}); - - [command_buffers[n_cb - 1] waitUntilCompleted]; + dispatch_barrier_sync(ctx->d_queue, ^{}); // check status of command buffers // needed to detect if the device ran out-of-memory for example (#1881) for (int i = 0; i < n_cb; i++) { - MTLCommandBufferStatus status = (MTLCommandBufferStatus) [command_buffers[i] status]; + [ctx->command_buffers[i] waitUntilCompleted]; + + MTLCommandBufferStatus status = (MTLCommandBufferStatus) [ctx->command_buffers[i] status]; if (status != MTLCommandBufferStatusCompleted) { fprintf(stderr, "%s: command buffer %d failed with status %lu\n", __func__, i, status); GGML_ASSERT(false); } } + + } } diff --git a/ggml-metal.metal b/ggml-metal.metal index e62fe684..82e1a0c7 100644 --- a/ggml-metal.metal +++ b/ggml-metal.metal @@ -18,46 +18,11 @@ typedef struct { uint8_t qs[QK4_1 / 2]; // nibbles / quants } block_q4_1; -static void dequantize_row_q4_0(device const block_q4_0 * x, device float * y, int k) { - const int qk = QK4_0; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const half d = x[i].d; - - for (int j = 0; j < qk/2; ++j) { - const int x0 = (x[i].qs[j] & 0x0F) - 8; - const int x1 = (x[i].qs[j] >> 4) - 8; - - y[i*qk + j + 0 ] = x0*d; - y[i*qk + j + qk/2] = x1*d; - } - } -} - -static void dequantize_row_q4_1(device const block_q4_1 * x, device float * y, int k) { - const int qk = QK4_1; - - assert(k % qk == 0); - - const int nb = k / qk; - - for (int i = 0; i < nb; i++) { - const half d = x[i].d; - const half m = x[i].m; - - for (int j = 0; j < qk/2; ++j) { - const int x0 = (x[i].qs[j] & 0x0F); - const int x1 = (x[i].qs[j] >> 4); - - y[i*qk + j + 0 ] = x0*d + m; - y[i*qk + j + qk/2] = x1*d + m; - } - } -} +#define QK8_0 32 +typedef struct { + half d; // delta + int8_t qs[QK8_0]; // quants +} block_q8_0; kernel void kernel_add( device const float * src0, @@ -67,6 +32,17 @@ kernel void kernel_add( dst[tpig] = src0[tpig] + src1[tpig]; } +// assumption: src1 is a row +// broadcast src1 into src0 +kernel void kernel_add_row( + device const float * src0, + device const float * src1, + device float * dst, + constant int64_t & ne00, + uint tpig[[thread_position_in_grid]]) { + dst[tpig] = src0[tpig] + src1[tpig % ne00]; +} + kernel void kernel_mul( device const float * src0, device const float * src1, @@ -117,7 +93,12 @@ kernel void kernel_gelu( device float * dst, uint tpig[[thread_position_in_grid]]) { float x = src0[tpig]; - dst[tpig] = 0.5f*x*(1.0f + tanh(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x))); + + // BEWARE !!! + // Simply using "tanh" instead of "precise::tanh" will sometimes results in NaNs! + // This was observed with Falcon 7B and 40B models + // + dst[tpig] = 0.5f*x*(1.0f + precise::tanh(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x))); } kernel void kernel_soft_max( @@ -208,54 +189,6 @@ kernel void kernel_diag_mask_inf( } } -kernel void kernel_get_rows_f16( - device const void * src0, - device const int * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb1, - uint tpig[[thread_position_in_grid]]) { - const int i = tpig; - const int r = ((device int32_t *) src1)[i]; - - for (int j = 0; j < ne00; j++) { - dst[i*nb1 + j] = ((device half *) ((device char *) src0 + r*nb01))[j]; - } -} - -kernel void kernel_get_rows_q4_0( - device const void * src0, - device const int * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb1, - uint tpig[[thread_position_in_grid]]) { - const int i = tpig; - const int r = ((device int32_t *) src1)[i]; - - dequantize_row_q4_0( - (device const block_q4_0 *) ((device char *) src0 + r*nb01), - (device float *) ((device char *) dst + i*nb1), ne00); -} - -kernel void kernel_get_rows_q4_1( - device const void * src0, - device const int * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb1, - uint tpig[[thread_position_in_grid]]) { - const int i = tpig; - const int r = ((device int32_t *) src1)[i]; - - dequantize_row_q4_1( - (device const block_q4_1 *) ((device char *) src0 + r*nb01), - (device float *) ((device char *) dst + i*nb1), ne00); -} - kernel void kernel_norm( device const void * src0, device float * dst, @@ -331,26 +264,33 @@ kernel void kernel_rms_norm( threadgroup float * sum [[threadgroup(0)]], uint tgpig[[threadgroup_position_in_grid]], uint tpitg[[thread_position_in_threadgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]], + uint tiisg[[thread_index_in_simdgroup]], uint ntg[[threads_per_threadgroup]]) { - device const float * x = (device const float *) ((device const char *) src0 + tgpig*nb01); + device const float4 * x = (device const float4 *) ((device const char *) src0 + tgpig*nb01); + device const float * x_scalar = (device const float *) x; + float4 sumf=0; + float all_sum=0; // parallel sum - sum[tpitg] = 0.0f; - for (int i00 = tpitg; i00 < ne00; i00 += ntg) { - sum[tpitg] += x[i00] * x[i00]; + for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) { + sumf += x[i00] * x[i00]; + } + all_sum = sumf[0] + sumf[1] + sumf[2] + sumf[3]; + all_sum = simd_sum(all_sum); + if (tiisg == 0) { + sum[sgitg] = all_sum; } - // reduce threadgroup_barrier(mem_flags::mem_threadgroup); - for (uint i = ntg/2; i > 0; i /= 2) { - if (tpitg < i) { - sum[tpitg] += sum[tpitg + i]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); + // broadcast, simd group number is ntg / 32 + for (uint i = ntg / 32 / 2; i > 0; i /= 2) { + if (tpitg < i) { + sum[tpitg] += sum[tpitg + i]; + } } - - // broadcast if (tpitg == 0) { + for (int i = 4 * (ne00 / 4); i < ne00; i++) {sum[0] += x_scalar[i];} sum[0] /= ne00; } @@ -359,10 +299,104 @@ kernel void kernel_rms_norm( const float mean = sum[0]; const float scale = 1.0f/sqrt(mean + eps); - device float * y = dst + tgpig*ne00; - for (int i00 = tpitg; i00 < ne00; i00 += ntg) { + device float4 * y = (device float4 *) (dst + tgpig*ne00); + device float * y_scalar = (device float *) y; + for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) { y[i00] = x[i00] * scale; } + if (tpitg == 0) { + for (int i00 = 4 * (ne00 / 4); i00 < ne00; i00++) {y_scalar[i00] = x_scalar[i00] * scale;} + } +} + +// function for calculate inner product between half a q4_0 block and 16 floats (yl), sumy is SUM(yl[i]) +// il indicates where the q4 quants begin (0 or QK4_0/4) +// we assume that the yl's have been multiplied with the appropriate scale factor +// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096) +inline float block_q_n_dot_y(device const block_q4_0 * qb_curr, float sumy, thread float * yl, int il) { + float d = qb_curr->d; + float2 acc = 0.f; + device const uint16_t * qs = ((device const uint16_t *)qb_curr + 1 + il/2); + for (int i = 0; i < 8; i+=2) { + acc[0] += yl[i + 0] * (qs[i / 2] & 0x000F) + + yl[i + 1] * (qs[i / 2] & 0x0F00); + acc[1] += yl[i + 8] * (qs[i / 2] & 0x00F0) + + yl[i + 9] * (qs[i / 2] & 0xF000); + } + return d * (sumy * -8.f + acc[0] + acc[1]); +} + +// function for calculate inner product between half a q4_1 block and 16 floats (yl), sumy is SUM(yl[i]) +// il indicates where the q4 quants begin (0 or QK4_0/4) +// we assume that the yl's have been multiplied with the appropriate scale factor +// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096) +inline float block_q_n_dot_y(device const block_q4_1 * qb_curr, float sumy, thread float * yl, int il) { + float d = qb_curr->d; + float m = qb_curr->m; + device const uint16_t * qs = ((device const uint16_t *)qb_curr + 2 + il/2); + float2 acc = 0.f; + for (int i = 0; i < 8; i+=2) { + acc[0] += yl[i + 0] * (qs[i / 2] & 0x000F) + + yl[i + 1] * (qs[i / 2] & 0x0F00); + acc[1] += yl[i + 8] * (qs[i / 2] & 0x00F0) + + yl[i + 9] * (qs[i / 2] & 0xF000); + } + return d * (acc[0] + acc[1]) + sumy * m; +} + +// putting them in the kernel cause a significant performance penalty +#define N_DST 4 // each SIMD group works on 4 rows +#define N_SIMDGROUP 2 // number of SIMD groups in a thread group +#define N_SIMDWIDTH 32 // assuming SIMD group size is 32 +//Note: This is a template, but strictly speaking it only applies to +// quantizations where the block size is 32. It also does not +// giard against the number of rows not being divisible by +// N_DST, so this is another explicit assumption of the implementation. +template +void mul_vec_q_n_f32(device const void * src0, device const float * src1, device float * dst, + int64_t ne00, int64_t ne01, int64_t ne02, int64_t ne10, int64_t ne12, int64_t ne0, int64_t ne1, uint gqa, + uint3 tgpig, uint tiisg, uint sgitg) { + const int nb = ne00/QK4_0; + const int r0 = tgpig.x; + const int r1 = tgpig.y; + const int im = tgpig.z; + const int first_row = (r0 * nsg + sgitg) * nr; + const uint offset0 = first_row * nb + im/gqa*(nb*ne0); + device const block_q_type * x = (device const block_q_type *) src0 + offset0; + device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; + float yl[16]; // src1 vector cache + float sumf[nr]={0.f}; + + const int ix = tiisg/2; + const int il = 8*(tiisg%2); + + device const float * yb = y + ix * QK4_0 + il; + + // each thread in a SIMD group deals with half a block. + for (int ib = ix; ib < nb; ib += nw/2) { + float sumy = 0; + for (int i = 0; i < 8; i += 2) { + sumy += yb[i] + yb[i+1]; + yl[i+0] = yb[i+ 0]; + yl[i+1] = yb[i+ 1]/256.f; + sumy += yb[i+16] + yb[i+17]; + yl[i+8] = yb[i+16]/16.f; + yl[i+9] = yb[i+17]/4096.f; + } + + for (int row = 0; row < nr; row++) { + sumf[row] += block_q_n_dot_y(x+ib+row*nb, sumy, yl, il); + } + + yb += QK4_0 * 16; + } + + for (int row = 0; row < nr; ++row) { + const float tot = simd_sum(sumf[row]); + if (tiisg == 0 && first_row + row < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot; + } + } } kernel void kernel_mul_mat_q4_0_f32( @@ -370,67 +404,17 @@ kernel void kernel_mul_mat_q4_0_f32( device const float * src1, device float * dst, constant int64_t & ne00, - constant int64_t & ne10, - constant int64_t & ne0, - threadgroup float * sum [[threadgroup(0)]], - uint2 tgpig[[threadgroup_position_in_grid]], - uint2 tpitg[[thread_position_in_threadgroup]], - uint2 tptg[[threads_per_threadgroup]]) { - const int nb = ne00/QK4_0; - - const int64_t r0 = tgpig.x; - const int64_t r1 = tgpig.y; - - device const block_q4_0 * x = (device const block_q4_0 *) src0 + r0*nb; - device const float * y = (device const float *) src1 + r1*ne10; - - const int nth = tptg.x*tptg.y; - const int ith = tptg.y*tpitg.x + tpitg.y; - - const int ix = tpitg.y/4; // 0 or 1 - const int iy = tpitg.y - 4*ix; // 0...3 - - const int first = 4 * iy; - - float sumf = 0; - - for (int i = 2*tpitg.x + ix; i < nb; i += 2*tptg.x) { - - const float d = (float)x[i].d; - - device const uint8_t * xl = x[i].qs + first; - device const float * yl = y + i * QK4_0 + first; - - float2 acc = {0.0f, 0.0f}; - - for (int j = 0; j < 4; ++j) { - - acc[0] += yl[j] * (xl[j] & 0xF) + yl[j+16] * (xl[j] >> 4); - acc[1] += yl[j] + yl[j+16]; - - } - - sumf += d * (acc[0] - 8.f*acc[1]); - } - - sum[ith] = sumf; - - // - // Accumulate the sum from all threads in the threadgroup - // - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%4 == 0) { - sum[ith] += sum[ith+1] + sum[ith+2] + sum[ith+3]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%16 == 0) { - sum[ith] += sum[ith+4] + sum[ith+8] + sum[ith+12]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith == 0) { - for (int i = 16; i < nth; i += 16) sum[0] += sum[i]; - dst[r1*ne0 + r0] = sum[0]; - } + constant int64_t & ne01[[buffer(4)]], + constant int64_t & ne02[[buffer(5)]], + constant int64_t & ne10[[buffer(9)]], + constant int64_t & ne12[[buffer(11)]], + constant int64_t & ne0[[buffer(15)]], + constant int64_t & ne1[[buffer(16)]], + constant uint & gqa[[buffer(17)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { + mul_vec_q_n_f32(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,gqa,tgpig,tiisg,sgitg); } kernel void kernel_mul_mat_q4_1_f32( @@ -438,67 +422,78 @@ kernel void kernel_mul_mat_q4_1_f32( device const float * src1, device float * dst, constant int64_t & ne00, - constant int64_t & ne10, - constant int64_t & ne0, - threadgroup float * sum [[threadgroup(0)]], - uint2 tgpig[[threadgroup_position_in_grid]], - uint2 tpitg[[thread_position_in_threadgroup]], - uint2 tptg[[threads_per_threadgroup]]) { - const int nb = ne00/QK4_1; + constant int64_t & ne01[[buffer(4)]], + constant int64_t & ne02[[buffer(5)]], + constant int64_t & ne10[[buffer(9)]], + constant int64_t & ne12[[buffer(11)]], + constant int64_t & ne0[[buffer(15)]], + constant int64_t & ne1[[buffer(16)]], + constant uint & gqa[[buffer(17)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { + mul_vec_q_n_f32(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,gqa,tgpig,tiisg,sgitg); +} - const int64_t r0 = tgpig.x; - const int64_t r1 = tgpig.y; +kernel void kernel_mul_mat_q8_0_f32( + device const void * src0, + device const float * src1, + device float * dst, + constant int64_t & ne00, + constant int64_t & ne01[[buffer(4)]], + constant int64_t & ne02[[buffer(5)]], + constant int64_t & ne10[[buffer(9)]], + constant int64_t & ne12[[buffer(11)]], + constant int64_t & ne0[[buffer(15)]], + constant int64_t & ne1[[buffer(16)]], + constant uint & gqa[[buffer(17)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { + const int nr = N_DST; + const int nsg = N_SIMDGROUP; + const int nw = N_SIMDWIDTH; - device const block_q4_1 * x = (device const block_q4_1 *) src0 + r0*nb; - device const float * y = (device const float *) src1 + r1*ne10; + const int nb = ne00/QK8_0; + const int r0 = tgpig.x; + const int r1 = tgpig.y; + const int im = tgpig.z; + const int first_row = (r0 * nsg + sgitg) * nr; + const uint offset0 = first_row * nb + im/gqa*(nb*ne0); + device const block_q8_0 * x = (device const block_q8_0 *) src0 + offset0; + device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - const uint nth = tptg.x*tptg.y; - const uint ith = tptg.y*tpitg.x + tpitg.y; + float yl[16]; + float sumf[nr]={0.f}; - const int ix = tpitg.y/4; // 0 or 1 - const int iy = tpitg.y - 4*ix; // 0...3 + const int ix = tiisg/2; + const int il = tiisg%2; - const int first = 4 * iy; - - float sumf = 0; - - for (int i = 2*tpitg.x + ix; i < nb; i += 2*tptg.x) { - - const float d = (float)x[i].d; - const float m = (float)x[i].m; - - device const uint8_t * xl = x[i].qs + first; - device const float * yl = y + i * QK4_1 + first; - - float2 acc = {0.0f, 0.0f}; - - for (int j = 0; j < 4; ++j) { - - acc[0] += yl[j+ 0] * (d * (xl[j] & 0xF) + m); - acc[1] += yl[j+16] * (d * (xl[j] >> 4) + m); + device const float * yb = y + ix * QK8_0 + 16*il; + // each thread in a SIMD group deals with half a block. + for (int ib = ix; ib < nb; ib += nw/2) { + for (int i = 0; i < 16; ++i) { + yl[i] = yb[i]; } - sumf += acc[0] + acc[1]; + for (int row = 0; row < nr; row++) { + device const int8_t * qs = x[ib+row*nb].qs + 16*il; + float sumq = 0.f; + for (int iq = 0; iq < 16; ++iq) { + sumq += qs[iq] * yl[iq]; + } + sumf[row] += sumq*x[ib+row*nb].d; + } + + yb += QK8_0 * 16; } - sum[ith] = sumf; - - // - // Accumulate the sum from all threads in the threadgroup - // - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%4 == 0) { - sum[ith] += sum[ith+1] + sum[ith+2] + sum[ith+3]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%16 == 0) { - sum[ith] += sum[ith+4] + sum[ith+8] + sum[ith+12]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith == 0) { - for (uint i = 16; i < nth; i += 16) sum[0] += sum[i]; - dst[r1*ne0 + r0] = sum[0]; + for (int row = 0; row < nr; ++row) { + const float tot = simd_sum(sumf[row]); + if (tiisg == 0 && first_row + row < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot; + } } } @@ -508,11 +503,13 @@ kernel void kernel_mul_mat_f16_f32( device float * dst, constant int64_t & ne00, constant int64_t & ne01, + constant int64_t & ne02, constant uint64_t & nb00, constant uint64_t & nb01, constant uint64_t & nb02, constant int64_t & ne10, constant int64_t & ne11, + constant int64_t & ne12, constant uint64_t & nb10, constant uint64_t & nb11, constant uint64_t & nb12, @@ -528,7 +525,7 @@ kernel void kernel_mul_mat_f16_f32( const int64_t r1 = tgpig.y; const int64_t im = tgpig.z; - device const half * x = (device const half *) (src0 + r0*nb01 + im*nb02); + device const half * x = (device const half *) (src0 + r0*nb01 + im/(ne12/ne02)*nb02); device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12); sum[tpitg.x] = 0.0f; @@ -615,17 +612,19 @@ kernel void kernel_rope( constant int & n_past, constant int & n_dims, constant int & mode, + constant float & freq_base, + constant float & freq_scale, uint3 tpig[[thread_position_in_grid]]) { const int64_t i3 = tpig[2]; const int64_t i2 = tpig[1]; const int64_t i1 = tpig[0]; const bool is_neox = mode & 2; - const float theta_scale = pow(10000.0, -2.0f/n_dims); + const float theta_scale = pow(freq_base, -2.0f/n_dims); const int64_t p = ((mode & 1) == 0 ? n_past + i2 : i2); - float theta = (float)p; + float theta = freq_scale * (float)p; if (!is_neox) { for (int64_t i0 = 0; i0 < ne0; i0 += 2) { @@ -644,7 +643,25 @@ kernel void kernel_rope( dst_data[1] = x0*sin_theta + x1*cos_theta; } } else { - // TODO: implement + for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { + for (int64_t ic = 0; ic < n_dims; ic += 2) { + const float cos_theta = cos(theta); + const float sin_theta = sin(theta); + + theta *= theta_scale; + + const int64_t i0 = ib*n_dims + ic/2; + + device const float * const src = (device float *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); + device float * dst_data = (device float *)((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); + + const float x0 = src[0]; + const float x1 = src[n_dims/2]; + + dst_data[0] = x0*cos_theta - x1*sin_theta; + dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta; + } + } } } @@ -863,354 +880,6 @@ static inline uchar4 get_scale_min_k4(int j, device const uint8_t * q) { return r; } -//========================================== dequantization ============================= - -static void dequantize_row_q2_K(device const block_q2_K * x, device float * y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - const float d = x[i].d; - const float min = x[i].dmin; - - device const uint8_t * q = x[i].qs; - -#if QK_K == 256 - int is = 0; - float dl, ml; - for (int n = 0; n < QK_K; n += 128) { - int shift = 0; - for (int j = 0; j < 4; ++j) { - - uint8_t sc = x[i].scales[is++]; - dl = d * (sc & 0xF); ml = min * (sc >> 4); - for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l] >> shift) & 3)) - ml; - - sc = x[i].scales[is++]; - dl = d * (sc & 0xF); ml = min * (sc >> 4); - for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3)) - ml; - - shift += 2; - } - q += 32; - } -#else - float dl1 = d * (x[i].scales[0] & 0xF), ml1 = min * (x[i].scales[0] >> 4); - float dl2 = d * (x[i].scales[1] & 0xF), ml2 = min * (x[i].scales[1] >> 4); - float dl3 = d * (x[i].scales[2] & 0xF), ml3 = min * (x[i].scales[2] >> 4); - float dl4 = d * (x[i].scales[3] & 0xF), ml4 = min * (x[i].scales[3] >> 4); - for (int l = 0; l < 16; ++l) { - y[l+ 0] = dl1 * ((q[l] >> 0) & 3) - ml1; - y[l+16] = dl2 * ((q[l] >> 2) & 3) - ml2; - y[l+32] = dl3 * ((q[l] >> 4) & 3) - ml3; - y[l+48] = dl4 * ((q[l] >> 6) & 3) - ml4; - } - y += QK_K; -#endif - - } -} - -static void dequantize_row_q3_K(device const block_q3_K * x, device float * y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - -#if QK_K == 256 - - const uint16_t kmask1 = 0x0303; - const uint16_t kmask2 = 0x0f0f; - - uint16_t aux[8]; - thread const int8_t * scales = (thread const int8_t*)aux; - - for (int i = 0; i < nb; i++) { - - const float d_all = (float)(x[i].d); - - device const uint8_t * q = x[i].qs; - device const uint8_t * h = x[i].hmask; - uint8_t m = 1; - - device const uint16_t * a = (device const uint16_t *)x[i].scales; - aux[0] = (a[0] & kmask2) | (((a[4] >> 0) & kmask1) << 4); - aux[1] = (a[1] & kmask2) | (((a[5] >> 0) & kmask1) << 4); - aux[2] = (a[2] & kmask2) | (((a[4] >> 2) & kmask1) << 4); - aux[3] = (a[3] & kmask2) | (((a[5] >> 2) & kmask1) << 4); - aux[4] = ((a[0] >> 4) & kmask2) | (((a[4] >> 4) & kmask1) << 4); - aux[5] = ((a[1] >> 4) & kmask2) | (((a[5] >> 4) & kmask1) << 4); - aux[6] = ((a[2] >> 4) & kmask2) | (((a[4] >> 6) & kmask1) << 4); - aux[7] = ((a[3] >> 4) & kmask2) | (((a[5] >> 6) & kmask1) << 4); - - int is = 0; - float dl; - for (int n = 0; n < QK_K; n += 128) { - int shift = 0; - for (int j = 0; j < 4; ++j) { - - dl = d_all * (scales[is++] - 32); - for (int l = 0; l < 16; ++l) { - *y++ = dl * ((int8_t)((q[l+ 0] >> shift) & 3) - ((h[l+ 0] & m) ? 0 : 4)); - } - - dl = d_all * (scales[is++] - 32); - for (int l = 0; l < 16; ++l) { - *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3) - ((h[l+16] & m) ? 0 : 4)); - } - - shift += 2; - m <<= 1; - } - q += 32; - } - } -#else - for (int i = 0; i < nb; i++) { - - const float d_all = (float)(x[i].d); - - device const uint8_t * q = x[i].qs; - device const uint8_t * hm = x[i].hmask; - - const float d1 = d_all * ((x[i].scales[0] & 0xF) - 8); - const float d2 = d_all * ((x[i].scales[0] >> 4) - 8); - const float d3 = d_all * ((x[i].scales[1] & 0xF) - 8); - const float d4 = d_all * ((x[i].scales[1] >> 4) - 8); - - for (int l = 0; l < 8; ++l) { - uint8_t h = hm[l]; - y[l+ 0] = d1 * ((int8_t)((q[l+0] >> 0) & 3) - ((h & 0x01) ? 0 : 4)); - y[l+ 8] = d1 * ((int8_t)((q[l+8] >> 0) & 3) - ((h & 0x02) ? 0 : 4)); - y[l+16] = d2 * ((int8_t)((q[l+0] >> 2) & 3) - ((h & 0x04) ? 0 : 4)); - y[l+24] = d2 * ((int8_t)((q[l+8] >> 2) & 3) - ((h & 0x08) ? 0 : 4)); - y[l+32] = d3 * ((int8_t)((q[l+0] >> 4) & 3) - ((h & 0x10) ? 0 : 4)); - y[l+40] = d3 * ((int8_t)((q[l+8] >> 4) & 3) - ((h & 0x20) ? 0 : 4)); - y[l+48] = d4 * ((int8_t)((q[l+0] >> 6) & 3) - ((h & 0x40) ? 0 : 4)); - y[l+56] = d4 * ((int8_t)((q[l+8] >> 6) & 3) - ((h & 0x80) ? 0 : 4)); - } - y += QK_K; - } -#endif - -} - -static void dequantize_row_q4_K(device const block_q4_K * x, device float * y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - device const uint8_t * q = x[i].qs; - -#if QK_K == 256 - const float d = x[i].d; - const float min = x[i].dmin; - - device const uint8_t * scales = x[i].scales; - - int is = 0; - for (int j = 0; j < QK_K; j += 64) { - const uchar4 sc = get_scale_min_k4(is, scales); - const float d1 = d * sc[0]; const float m1 = min * sc[1]; - const float d2 = d * sc[2]; const float m2 = min * sc[3]; - for (int l = 0; l < 32; ++l) *y++ = d1 * (q[l] & 0xF) - m1; - for (int l = 0; l < 32; ++l) *y++ = d2 * (q[l] >> 4) - m2; - q += 32; is += 2; - } -#else - device const uint8_t * s = x[i].scales; - device const half2 * dh = (device const half2 *)x[i].d; - const float2 d = (float2)dh[0]; - const float d1 = d[0] * (s[0] & 0xF); - const float d2 = d[0] * (s[1] & 0xF); - const float m1 = d[1] * (s[0] >> 4); - const float m2 = d[1] * (s[1] >> 4); - for (int l = 0; l < 32; ++l) { - y[l+ 0] = d1 * (q[l] & 0xF) - m1; - y[l+32] = d2 * (q[l] >> 4) - m2; - } - y += QK_K; -#endif - - } -} - -static void dequantize_row_q5_K(device const block_q5_K * x, device float * y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - -#if QK_K == 256 - for (int i = 0; i < nb; i++) { - - const float d = (float)(x[i].d); - const float min = (float)(x[i].dmin); - - device const uint8_t * ql = x[i].qs; - device const uint8_t * qh = x[i].qh; - - int is = 0; - uint8_t u1 = 1, u2 = 2; - for (int j = 0; j < QK_K; j += 64) { - const uchar4 sc = get_scale_min_k4(is, x[i].scales); - const float d1 = d * sc[0]; const float m1 = min * sc[1]; - const float d2 = d * sc[2]; const float m2 = min * sc[3]; - for (int l = 0; l < 32; ++l) *y++ = d1 * ((ql[l] & 0xF) + (qh[l] & u1 ? 16 : 0)) - m1; - for (int l = 0; l < 32; ++l) *y++ = d2 * ((ql[l] >> 4) + (qh[l] & u2 ? 16 : 0)) - m2; - ql += 32; is += 2; - u1 <<= 2; u2 <<= 2; - } - } -#else - for (int i = 0; i < nb; i++) { - - const float d = (float)x[i].d; - - device const uint8_t * ql = x[i].qs; - device const uint8_t * qh = x[i].qh; - device const int8_t * sc = x[i].scales; - - for (int l = 0; l < 8; ++l) { - y[l+ 0] = d * sc[0] * ((ql[l+ 0] & 0xF) - (qh[l] & 0x01 ? 0 : 16)); - y[l+ 8] = d * sc[0] * ((ql[l+ 8] & 0xF) - (qh[l] & 0x02 ? 0 : 16)); - y[l+16] = d * sc[1] * ((ql[l+16] & 0xF) - (qh[l] & 0x04 ? 0 : 16)); - y[l+24] = d * sc[1] * ((ql[l+24] & 0xF) - (qh[l] & 0x08 ? 0 : 16)); - y[l+32] = d * sc[2] * ((ql[l+ 0] >> 4) - (qh[l] & 0x10 ? 0 : 16)); - y[l+40] = d * sc[2] * ((ql[l+ 8] >> 4) - (qh[l] & 0x20 ? 0 : 16)); - y[l+48] = d * sc[3] * ((ql[l+16] >> 4) - (qh[l] & 0x40 ? 0 : 16)); - y[l+56] = d * sc[3] * ((ql[l+24] >> 4) - (qh[l] & 0x80 ? 0 : 16)); - } - y += QK_K; - } -#endif - -} - -static void dequantize_row_q6_K(device const block_q6_K * x, device float * y, int k) { - assert(k % QK_K == 0); - const int nb = k / QK_K; - - for (int i = 0; i < nb; i++) { - - device const uint8_t * ql = x[i].ql; - device const uint8_t * qh = x[i].qh; - device const int8_t * sc = x[i].scales; - - const float d = x[i].d; - -#if QK_K == 256 - for (int n = 0; n < QK_K; n += 128) { - for (int l = 0; l < 32; ++l) { - int is = l/16; - const int8_t q1 = (int8_t)((ql[l + 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32; - const int8_t q2 = (int8_t)((ql[l + 32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32; - const int8_t q3 = (int8_t)((ql[l + 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32; - const int8_t q4 = (int8_t)((ql[l + 32] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32; - y[l + 0] = d * sc[is + 0] * q1; - y[l + 32] = d * sc[is + 2] * q2; - y[l + 64] = d * sc[is + 4] * q3; - y[l + 96] = d * sc[is + 6] * q4; - } - y += 128; - ql += 64; - qh += 32; - sc += 8; - } -#else - for (int l = 0; l < 16; ++l) { - const int8_t q1 = (int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32; - const int8_t q2 = (int8_t)((ql[l+16] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32; - const int8_t q3 = (int8_t)((ql[l+ 0] >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32; - const int8_t q4 = (int8_t)((ql[l+16] >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32; - y[l+ 0] = d * sc[0] * q1; - y[l+16] = d * sc[1] * q2; - y[l+32] = d * sc[2] * q3; - y[l+48] = d * sc[3] * q4; - } - y += 64; -#endif - } -} - -kernel void kernel_get_rows_q2_K( - device const void * src0, - device const int * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb1, - uint tpig[[thread_position_in_grid]]) { - const int i = tpig; - const int r = ((device int32_t *) src1)[i]; - - dequantize_row_q2_K( - (device const block_q2_K *) ((device char *) src0 + r*nb01), - (device float *) ((device char *) dst + i*nb1), ne00); -} - -kernel void kernel_get_rows_q3_K( - device const void * src0, - device const int * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb1, - uint tpig[[thread_position_in_grid]]) { - const int i = tpig; - const int r = ((device int32_t *) src1)[i]; - - dequantize_row_q3_K( - (device const block_q3_K *) ((device char *) src0 + r*nb01), - (device float *) ((device char *) dst + i*nb1), ne00); -} - -kernel void kernel_get_rows_q4_K( - device const void * src0, - device const int * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb1, - uint tpig[[thread_position_in_grid]]) { - const int i = tpig; - const int r = ((device int32_t *) src1)[i]; - - dequantize_row_q4_K( - (device const block_q4_K *) ((device char *) src0 + r*nb01), - (device float *) ((device char *) dst + i*nb1), ne00); -} - -kernel void kernel_get_rows_q5_K( - device const void * src0, - device const int * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb1, - uint tpig[[thread_position_in_grid]]) { - const int i = tpig; - const int r = ((device int32_t *) src1)[i]; - - dequantize_row_q5_K( - (device const block_q5_K *) ((device char *) src0 + r*nb01), - (device float *) ((device char *) dst + i*nb1), ne00); -} - -kernel void kernel_get_rows_q6_K( - device const void * src0, - device const int * src1, - device float * dst, - constant int64_t & ne00, - constant uint64_t & nb01, - constant uint64_t & nb1, - uint tpig[[thread_position_in_grid]]) { - const int i = tpig; - const int r = ((device int32_t *) src1)[i]; - - dequantize_row_q6_K( - (device const block_q6_K *) ((device char *) src0 + r*nb01), - (device float *) ((device char *) dst + i*nb1), ne00); -} - //====================================== dot products ========================= kernel void kernel_mul_mat_q2_K_f32( @@ -1218,155 +887,193 @@ kernel void kernel_mul_mat_q2_K_f32( device const float * src1, device float * dst, constant int64_t & ne00, - constant int64_t & ne10, - constant int64_t & ne0, - threadgroup float * sum [[threadgroup(0)]], - uint2 tgpig[[threadgroup_position_in_grid]], - uint2 tpitg[[thread_position_in_threadgroup]], - uint2 tptg[[threads_per_threadgroup]]) { + constant int64_t & ne01[[buffer(4)]], + constant int64_t & ne02[[buffer(5)]], + constant int64_t & ne10[[buffer(9)]], + constant int64_t & ne12[[buffer(11)]], + constant int64_t & ne0[[buffer(15)]], + constant int64_t & ne1[[buffer(16)]], + constant uint & gqa[[buffer(17)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { const int nb = ne00/QK_K; + const int r0 = tgpig.x; + const int r1 = tgpig.y; + const int r2 = tgpig.z; - const int64_t r0 = tgpig.x; - const int64_t r1 = tgpig.y; + const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; + const int ib_row = first_row * nb; + const uint offset0 = r2/gqa*(nb*ne0); + device const block_q2_K * x = (device const block_q2_K *) src0 + ib_row + offset0; + device const float * y = (device const float *) src1 + r1*ne10 + r2*ne00*ne1; + float yl[32]; + float sumf[N_DST]={0.f}, all_sum; - device const block_q2_K * x = (device const block_q2_K *) src0 + r0*nb; - device const float * yy = (device const float *) src1 + r1*ne10; - - const int nth = tptg.x*tptg.y; - const int ith = tptg.y*tpitg.x + tpitg.y; - - float sumf = 0; + const int step = sizeof(block_q2_K) * nb; #if QK_K == 256 - const int tid = tpitg.y; // 0...16 - const int il = tid/4; // 0...3 - const int ir = tid%4; // 0...3 - const int ip = il/2; // 0 or 1 - const int shift1 = 4*(il%2);// 0 or 4 - const int shift2 = shift1+2;// 2 or 6 - const int n = 8; - const int is = 4*il + (n*ir)/16; + const int ix = tiisg/8; // 0...3 + const int it = tiisg%8; // 0...7 + const int im = it/4; // 0 or 1 + const int ir = it%4; // 0...3 + const int is = (8*ir)/16;// 0 or 1 - const int y_offset = 64*il + n*ir; - const int q_offset = 32*ip + n*ir; + device const float * y4 = y + ix * QK_K + 128 * im + 8 * ir; - for (int i = tpitg.x; i < nb; i += tptg.x) { + for (int ib = ix; ib < nb; ib += 4) { - device const uint8_t * q = x[i].qs + q_offset; - device const uint8_t * scales = x[i].scales + is; - - uint8_t d1 = scales[0] & 0xF; - uint8_t d2 = scales[2] & 0xF; - uint8_t m1 = scales[0] >> 4; - uint8_t m2 = scales[2] >> 4; - - device const float * y = yy + i*QK_K + y_offset; - - float2 s = {0.f, 0.f}; - float smin = 0; - for (int l = 0; l < n; ++l) { - s[0] += y[l+ 0] * ((q[l] >> shift1) & 3); - s[1] += y[l+32] * ((q[l] >> shift2) & 3); - smin += y[l+ 0] * m1 + y[l+32] * m2; + float4 sumy = {0.f, 0.f, 0.f, 0.f}; + for (int i = 0; i < 8; ++i) { + yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0]; + yl[i+ 8] = y4[i+32]; sumy[1] += yl[i+ 8]; + yl[i+16] = y4[i+64]; sumy[2] += yl[i+16]; + yl[i+24] = y4[i+96]; sumy[3] += yl[i+24]; } - const float dall = (float)x[i].d; - const float dmin = (float)x[i].dmin; + device const uint8_t * sc = (device const uint8_t *)x[ib].scales + 8*im + is; + device const uint16_t * qs = (device const uint16_t *)x[ib].qs + 16 * im + 4 * ir; + device const half * dh = &x[ib].d; - sumf += dall * (s[0] * d1 + s[1] * d2) - dmin * smin; + for (int row = 0; row < N_DST; row++) { + float4 acc1 = {0.f, 0.f, 0.f, 0.f}; + float4 acc2 = {0.f, 0.f, 0.f, 0.f}; + for (int i = 0; i < 8; i += 2) { + acc1[0] += yl[i+ 0] * (qs[i/2] & 0x0003); + acc2[0] += yl[i+ 1] * (qs[i/2] & 0x0300); + acc1[1] += yl[i+ 8] * (qs[i/2] & 0x000c); + acc2[1] += yl[i+ 9] * (qs[i/2] & 0x0c00); + acc1[2] += yl[i+16] * (qs[i/2] & 0x0030); + acc2[2] += yl[i+17] * (qs[i/2] & 0x3000); + acc1[3] += yl[i+24] * (qs[i/2] & 0x00c0); + acc2[3] += yl[i+25] * (qs[i/2] & 0xc000); + } + float dall = dh[0]; + float dmin = dh[1] * 1.f/16.f; + sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc2[0]) * (sc[0] & 0xF) * 1.f/ 1.f + + (acc1[1] + 1.f/256.f * acc2[1]) * (sc[2] & 0xF) * 1.f/ 4.f + + (acc1[2] + 1.f/256.f * acc2[2]) * (sc[4] & 0xF) * 1.f/16.f + + (acc1[3] + 1.f/256.f * acc2[3]) * (sc[6] & 0xF) * 1.f/64.f) - + dmin * (sumy[0] * (sc[0] & 0xF0) + sumy[1] * (sc[2] & 0xF0) + sumy[2] * (sc[4] & 0xF0) + sumy[3] * (sc[6] & 0xF0)); + + qs += step/2; + sc += step; + dh += step/2; + } + + y4 += 4 * QK_K; } #else - const int il = 4 * tpitg.x; + const int ix = tiisg/2; // 0...15 + const int it = tiisg%2; // 0...1 - uint32_t aux[2]; - thread const uint8_t * d = (thread const uint8_t *)aux; - thread const uint8_t * m = (thread const uint8_t *)aux + 4; + device const float * y4 = y + ix * QK_K + 8 * it; - for (int i = tpitg.y; i < nb; i += tptg.y) { + for (int ib = ix; ib < nb; ib += 16) { - device const uint8_t * q = x[i].qs + il; - device const float * y = yy + i*QK_K + il; - - const float dall = (float)x[i].d; - const float dmin = (float)x[i].dmin; - - device const uint32_t * a = (device const uint32_t *)x[i].scales; - aux[0] = a[0] & 0x0f0f0f0f; - aux[1] = (a[0] >> 4) & 0x0f0f0f0f; - - for (int l = 0; l < 4; ++l) { - sumf += y[l+ 0] * (dall * d[0] * ((q[l] >> 0) & 3) - dmin * m[0]) - + y[l+16] * (dall * d[1] * ((q[l] >> 2) & 3) - dmin * m[1]) - + y[l+32] * (dall * d[2] * ((q[l] >> 4) & 3) - dmin * m[2]) - + y[l+48] * (dall * d[3] * ((q[l] >> 6) & 3) - dmin * m[3]); + float4 sumy = {0.f, 0.f, 0.f, 0.f}; + for (int i = 0; i < 8; ++i) { + yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0]; + yl[i+ 8] = y4[i+16]; sumy[1] += yl[i+ 8]; + yl[i+16] = y4[i+32]; sumy[2] += yl[i+16]; + yl[i+24] = y4[i+48]; sumy[3] += yl[i+24]; } + + device const uint8_t * sc = (device const uint8_t *)x[ib].scales; + device const uint16_t * qs = (device const uint16_t *)x[ib].qs + 4 * it; + device const half * dh = &x[ib].d; + + for (int row = 0; row < N_DST; row++) { + + float4 acc1 = {0.f, 0.f, 0.f, 0.f}; + float4 acc2 = {0.f, 0.f, 0.f, 0.f}; + for (int i = 0; i < 8; i += 2) { + acc1[0] += yl[i+ 0] * (qs[i/2] & 0x0003); + acc2[0] += yl[i+ 1] * (qs[i/2] & 0x0300); + acc1[1] += yl[i+ 8] * (qs[i/2] & 0x000c); + acc2[1] += yl[i+ 9] * (qs[i/2] & 0x0c00); + acc1[2] += yl[i+16] * (qs[i/2] & 0x0030); + acc2[2] += yl[i+17] * (qs[i/2] & 0x3000); + acc1[3] += yl[i+24] * (qs[i/2] & 0x00c0); + acc2[3] += yl[i+25] * (qs[i/2] & 0xc000); + } + + float dall = dh[0]; + float dmin = dh[1]; + sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc2[0]) * (sc[0] & 0xF) * 1.f/ 1.f + + (acc1[1] + 1.f/256.f * acc2[1]) * (sc[1] & 0xF) * 1.f/ 4.f + + (acc1[2] + 1.f/256.f * acc2[2]) * (sc[2] & 0xF) * 1.f/16.f + + (acc1[3] + 1.f/256.f * acc2[3]) * (sc[3] & 0xF) * 1.f/64.f) - + dmin * (sumy[0] * (sc[0] >> 4) + sumy[1] * (sc[1] >> 4) + sumy[2] * (sc[2] >> 4) + sumy[3] * (sc[3] >> 4)); + + qs += step/2; + sc += step; + dh += step/2; + } + + y4 += 16 * QK_K; } #endif - sum[ith] = sumf; - - // - // Accumulate the sum from all threads in the threadgroup - // - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%4 == 0) { - for (int i = 1; i < 4; ++i) sum[ith] += sum[ith + i]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%16 == 0) { - for (int i = 4; i < 16; i += 4) sum[ith] += sum[ith + i]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith == 0) { - for (int i = 16; i < nth; i += 16) sum[0] += sum[i]; - dst[r1*ne0 + r0] = sum[0]; + for (int row = 0; row < N_DST; ++row) { + all_sum = simd_sum(sumf[row]); + if (tiisg == 0) { + dst[r1*ne0 + r2*ne0*ne1 + first_row + row] = all_sum; + } } } +#if QK_K == 256 kernel void kernel_mul_mat_q3_K_f32( device const void * src0, device const float * src1, device float * dst, constant int64_t & ne00, - constant int64_t & ne10, - constant int64_t & ne0, - constant int64_t & ne1, - threadgroup float * sum [[threadgroup(0)]], - uint2 tgpig[[threadgroup_position_in_grid]], - uint2 tpitg[[thread_position_in_threadgroup]], - uint2 tptg[[threads_per_threadgroup]]) { + constant int64_t & ne01[[buffer(4)]], + constant int64_t & ne02[[buffer(5)]], + constant int64_t & ne10[[buffer(9)]], + constant int64_t & ne12[[buffer(11)]], + constant int64_t & ne0[[buffer(15)]], + constant int64_t & ne1[[buffer(16)]], + constant uint & gqa[[buffer(17)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { const int nb = ne00/QK_K; const int64_t r0 = tgpig.x; const int64_t r1 = tgpig.y; + const int64_t r2 = tgpig.z; - device const block_q3_K * x = (device const block_q3_K *) src0 + r0*nb; - device const float * yy = (device const float *) src1 + r1*ne10; + const int first_row = (r0 * N_SIMDGROUP + sgitg) * 2; + const uint offset0 = r2/gqa*(nb*ne0); + device const block_q3_K * x = (device const block_q3_K *) src0 + first_row*nb + offset0; + device const float * yy = (device const float *) src1 + r1*ne10 + r2*ne00*ne1; - const int nth = tptg.x*tptg.y; - const int ith = tptg.y*tpitg.x + tpitg.y; - -#if QK_K == 256 - - const uint8_t m3 = 3; - const int8_t m4 = 4; + float yl[16]; const uint16_t kmask1 = 0x0303; const uint16_t kmask2 = 0x0f0f; - const int tid = tpitg.y; // expecting 16 + const int tid = tiisg/2; + const int ix = tiisg%2; const int ip = tid/8; // 0 or 1 const int il = tid/2 - 4*ip; // 0...3 const int ir = tid%2; const int n = 8; const int l0 = n*ir; - const uint8_t m = 1 << (4*ip + il); + const uint16_t m1 = 1 << (4*ip + il); + const uint16_t m2 = m1 << 8; const int shift = 2*il; + const uint16_t qm1 = 0x0003 << shift; + const uint16_t qm2 = 0x0300 << shift; + const int32_t v1 = 4 << shift; + const int32_t v2 = 1024 << shift; const uint16_t s_shift1 = 4*ip; const uint16_t s_shift2 = s_shift1 + 2*(il/2); @@ -1375,267 +1082,379 @@ kernel void kernel_mul_mat_q3_K_f32( const int q_offset = 32*ip + l0; const int y_offset = 128*ip + 32*il + l0; - //float sumf = 0; - float sumf1 = 0, sumf2 = 0; - for (int i = tpitg.x; i < nb; i += tptg.x) { + const int step = sizeof(block_q3_K) * nb / 2; - const float d_all = (float)(x[i].d); + device const float * y1 = yy + ix*QK_K + y_offset; - device const uint8_t * q = x[i].qs + q_offset; - device const uint8_t * h = x[i].hmask + l0; - device const float * y = yy + i * QK_K + y_offset; + float sumf1[2] = {0.f}, sumf2[2] = {0.f}; + for (int i = ix; i < nb; i += 2) { - device const uint16_t * a = (device const uint16_t *)x[i].scales; - const char2 scales = as_type((uint16_t)(((a[il] >> s_shift1) & kmask2) | (((a[ik] >> s_shift2) & kmask1) << 4))); - - float s = 0; - for (int l = 0; l < n; ++l) { - s += y[l+ 0] * ((int8_t)((q[l+ 0] >> shift) & m3) - ((h[l+ 0] & m) ? 0 : m4)); - } - float d = d_all * s; - sumf1 += d * scales[0]; - sumf2 += d; - //sumf += d_all * s * (scales[0] - 32); - - s = 0; - for (int l = 0; l < n; ++l) { - s += y[l+16] * ((int8_t)((q[l+16] >> shift) & m3) - ((h[l+16] & m) ? 0 : m4)); - } - d = d_all * s; - sumf1 += d * scales[1]; - sumf2 += d; - //sumf += d_all * s * (scales[1] - 32); - - } - - //sum[ith] = sumf; - sum[ith] = sumf1 - 32.f*sumf2; -#else - const int il = 4 * tpitg.x; // 0, 4, 8, 12 - const int im = il/8; // 0, 0, 1, 1 - const int in = il%8; // 0, 4, 0, 4 - - float sumf = 0; - - for (int i = tpitg.y; i < nb; i += tptg.y) { - - const float d_all = (float)(x[i].d); - - device const uint8_t * q = x[i].qs + il; - device const uint8_t * h = x[i].hmask + in; - device const float * y = yy + i * QK_K + il; - - const float d1 = d_all * ((x[i].scales[0] & 0xF) - 8); - const float d2 = d_all * ((x[i].scales[0] >> 4) - 8); - const float d3 = d_all * ((x[i].scales[1] & 0xF) - 8); - const float d4 = d_all * ((x[i].scales[1] >> 4) - 8); - - for (int l = 0; l < 4; ++l) { - const uint8_t hm = h[l] >> im; - sumf += y[l+ 0] * d1 * ((int8_t)((q[l+0] >> 0) & 3) - ((hm & 0x01) ? 0 : 4)) - + y[l+16] * d2 * ((int8_t)((q[l+0] >> 2) & 3) - ((hm & 0x04) ? 0 : 4)) - + y[l+32] * d3 * ((int8_t)((q[l+0] >> 4) & 3) - ((hm & 0x10) ? 0 : 4)) - + y[l+48] * d4 * ((int8_t)((q[l+0] >> 6) & 3) - ((hm & 0x40) ? 0 : 4)); + for (int l = 0; l < 8; ++l) { + yl[l+0] = y1[l+ 0]; + yl[l+8] = y1[l+16]; } + device const uint16_t * q = (device const uint16_t *)(x[i].qs + q_offset); + device const uint16_t * h = (device const uint16_t *)(x[i].hmask + l0); + device const uint16_t * a = (device const uint16_t *)(x[i].scales); + device const half * dh = &x[i].d; + + for (int row = 0; row < 2; ++row) { + + const float d_all = (float)dh[0]; + const char2 scales = as_type((uint16_t)(((a[il] >> s_shift1) & kmask2) | (((a[ik] >> s_shift2) & kmask1) << 4))); + + float s1 = 0, s2 = 0; + for (int l = 0; l < n; l += 2) { + const uint16_t qs = q[l/2]; + s1 += yl[l+0] * ((int32_t)(qs & qm1) - ((h[l/2] & m1) ? 0 : v1)); + s2 += yl[l+1] * ((int32_t)(qs & qm2) - ((h[l/2] & m2) ? 0 : v2)); + } + float d = d_all * (s1 + 1.f/256.f * s2); + sumf1[row] += d * scales[0]; + sumf2[row] += d; + + s1 = s2 = 0; + for (int l = 0; l < n; l += 2) { + const uint16_t qs = q[l/2+8]; + s1 += yl[l+8] * ((int32_t)(qs & qm1) - ((h[l/2+8] & m1) ? 0 : v1)); + s2 += yl[l+9] * ((int32_t)(qs & qm2) - ((h[l/2+8] & m2) ? 0 : v2)); + } + d = d_all * (s1 + 1.f/256.f * s2); + sumf1[row] += d * scales[1]; + sumf2[row] += d; + + q += step; + h += step; + a += step; + dh += step; + + } + + y1 += 2 * QK_K; + } - sum[ith] = sumf; - -#endif - - // - // Accumulate the sum from all threads in the threadgroup - // - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%4 == 0) { - for (int i = 1; i < 4; ++i) sum[ith] += sum[ith + i]; + for (int row = 0; row < 2; ++row) { + const float sumf = (sumf1[row] - 32.f*sumf2[row]) / (1 << shift); + const float tot = simd_sum(sumf); + if (tiisg == 0) { + dst[r1*ne0 + r2*ne0*ne1 + first_row + row] = tot; + } } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%16 == 0) { - for (int i = 4; i < 16; i += 4) sum[ith] += sum[ith + i]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith == 0) { - for (int i = 16; i < nth; i += 16) sum[0] += sum[i]; - dst[r1*ne0 + r0] = sum[0]; - } - } - -kernel void kernel_mul_mat_q4_K_f32( +#else +kernel void kernel_mul_mat_q3_K_f32( device const void * src0, device const float * src1, device float * dst, constant int64_t & ne00, - constant int64_t & ne10, - constant int64_t & ne0, - threadgroup float * sum [[threadgroup(0)]], - uint2 tgpig[[threadgroup_position_in_grid]], - uint2 tpitg[[thread_position_in_threadgroup]], - uint2 tptg[[threads_per_threadgroup]]) { + constant int64_t & ne01[[buffer(4)]], + constant int64_t & ne02[[buffer(5)]], + constant int64_t & ne10[[buffer(9)]], + constant int64_t & ne12[[buffer(11)]], + constant int64_t & ne0[[buffer(15)]], + constant int64_t & ne1[[buffer(16)]], + constant uint & gqa[[buffer(17)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { const int nb = ne00/QK_K; const int64_t r0 = tgpig.x; const int64_t r1 = tgpig.y; + const int64_t r2 = tgpig.z; - const int nth = tptg.x*tptg.y; - const int ith = tptg.y*tpitg.x + tpitg.y; + const int row = 2 * r0 + sgitg; + const uint offset0 = r2/gqa*(nb*ne0); + device const block_q3_K * x = (device const block_q3_K *) src0 + row*nb + offset0; + device const float * yy = (device const float *) src1 + r1*ne10 + r2*ne00*ne1; + const int ix = tiisg/4; + const int il = 4 * (tiisg%4);// 0, 4, 8, 12 + const int im = il/8; // 0, 0, 1, 1 + const int in = il%8; // 0, 4, 0, 4 - device const block_q4_K * x = (device const block_q4_K *) src0 + r0*nb; - device const float * yy = (device const float *) src1 + r1*ne10; + float2 sum = {0.f, 0.f}; - float sumf = 0; + for (int i = ix; i < nb; i += 8) { + + const float d_all = (float)(x[i].d); + + device const uint16_t * q = (device const uint16_t *)(x[i].qs + il); + device const uint16_t * h = (device const uint16_t *)(x[i].hmask + in); + device const uint16_t * s = (device const uint16_t *)(x[i].scales); + device const float * y = yy + i * QK_K + il; + + const float d1 = d_all * ((int32_t)(s[0] & 0x000F) - 8); + const float d2 = d_all * ((int32_t)(s[0] & 0x00F0) - 128) * 1.f/64.f; + const float d3 = d_all * ((int32_t)(s[0] & 0x0F00) - 2048) * 1.f/4096.f; + const float d4 = d_all * ((int32_t)(s[0] & 0xF000) - 32768) * 1.f/262144.f; + + for (int l = 0; l < 4; l += 2) { + const uint16_t hm = h[l/2] >> im; + sum[0] += y[l+ 0] * d1 * ((int32_t)(q[l/2] & 0x0003) - ((hm & 0x0001) ? 0 : 4)) + + y[l+16] * d2 * ((int32_t)(q[l/2] & 0x000c) - ((hm & 0x0004) ? 0 : 16)) + + y[l+32] * d3 * ((int32_t)(q[l/2] & 0x0030) - ((hm & 0x0010) ? 0 : 64)) + + y[l+48] * d4 * ((int32_t)(q[l/2] & 0x00c0) - ((hm & 0x0040) ? 0 : 256)); + sum[1] += y[l+ 1] * d1 * ((int32_t)(q[l/2] & 0x0300) - ((hm & 0x0100) ? 0 : 1024)) + + y[l+17] * d2 * ((int32_t)(q[l/2] & 0x0c00) - ((hm & 0x0400) ? 0 : 4096)) + + y[l+33] * d3 * ((int32_t)(q[l/2] & 0x3000) - ((hm & 0x1000) ? 0 : 16384)) + + y[l+49] * d4 * ((int32_t)(q[l/2] & 0xc000) - ((hm & 0x4000) ? 0 : 65536)); + } + + } + const float sumf = sum[0] + sum[1] * 1.f/256.f; + + const float tot = simd_sum(sumf); + if (tiisg == 0) { + dst[r1*ne0 + r2*ne0*ne1 + row] = tot; + } + +} +#endif #if QK_K == 256 +kernel void kernel_mul_mat_q4_K_f32( + device const void * src0, + device const float * src1, + device float * dst, + constant int64_t & ne00, + constant int64_t & ne01[[buffer(4)]], + constant int64_t & ne02[[buffer(5)]], + constant int64_t & ne10[[buffer(9)]], + constant int64_t & ne12[[buffer(11)]], + constant int64_t & ne0[[buffer(15)]], + constant int64_t & ne1[[buffer(16)]], + constant uint & gqa[[buffer(17)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { const uint16_t kmask1 = 0x3f3f; const uint16_t kmask2 = 0x0f0f; const uint16_t kmask3 = 0xc0c0; - const int tid = tpitg.y; // 0...16 - const int il = tid/4; // 0...3 - const int ir = tid - 4*il;// 0...3 - const int n = 4; + const int ix = tiisg/8; // 0...3 + const int it = tiisg%8; // 0...7 + const int im = it/4; // 0 or 1 + const int ir = it%4; // 0...3 - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; + const int nb = ne00/QK_K; + const int r0 = tgpig.x; + const int r1 = tgpig.y; + const int r2 = tgpig.z; + const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; + const int ib_row = first_row * nb; + const uint offset0 = r2/gqa*(nb*ne0); + device const block_q4_K * x = (device const block_q4_K *) src0 + ib_row + offset0; + device const float * y = (device const float *) src1 + r1*ne10 + r2*ne00*ne1; + float yl[16]; + float yh[16]; + float sumf[N_DST]={0.f}, all_sum; - const int l0 = n*(2*ir + in); - const int q_offset = 32*im + l0; - const int y_offset = 64*im + l0; + const int step = sizeof(block_q4_K) * nb / 2; - uchar2 sc1, sc2, sc3, sc4; + device const float * y4 = y + ix * QK_K + 64 * im + 8 * ir; - for (int i = tpitg.x; i < nb; i += tptg.x) { + uint16_t sc16[4]; + thread const uint8_t * sc8 = (thread const uint8_t *)sc16; - device const uint8_t * q1 = (x + i)->qs + q_offset; - device const uint8_t * q2 = q1 + 64; - device const float * y1 = yy + i*QK_K + y_offset; - device const float * y2 = y1 + 128; - - const float dall = (float)((x + i)->d); - const float dmin = (float)((x + i)->dmin); - - device const uint16_t * a = (device const uint16_t *)(x + i)->scales; - sc1 = as_type((uint16_t)(a[im+0] & kmask1)); - sc2 = as_type((uint16_t)(a[im+2] & kmask1)); - sc3 = as_type((uint16_t)(((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2))); - sc4 = as_type((uint16_t)(((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2))); - - float4 s = {0.f, 0.f, 0.f, 0.f}; - float smin = 0; - for (int l = 0; l < n; ++l) { - - s[0] += y1[l] * (q1[l] & 0xF); s[1] += y1[l+32] * (q1[l] >> 4); - s[2] += y2[l] * (q2[l] & 0xF); s[3] += y2[l+32] * (q2[l] >> 4); - smin += y1[l] * sc2[0] + y1[l+32] * sc2[1] + y2[l] * sc4[0] + y2[l+32] * sc4[1]; + for (int ib = ix; ib < nb; ib += 4) { + float4 sumy = {0.f, 0.f, 0.f, 0.f}; + for (int i = 0; i < 8; ++i) { + yl[i+0] = y4[i+ 0]; sumy[0] += yl[i+0]; + yl[i+8] = y4[i+ 32]; sumy[1] += yl[i+8]; + yh[i+0] = y4[i+128]; sumy[2] += yh[i+0]; + yh[i+8] = y4[i+160]; sumy[3] += yh[i+8]; } - sumf += dall * (s[0] * sc1[0] + s[1] * sc1[1] + s[2] * sc3[0] + s[3] * sc3[1]) - dmin * smin; + device const uint16_t * sc = (device const uint16_t *)x[ib].scales + im; + device const uint16_t * q1 = (device const uint16_t *)x[ib].qs + 16 * im + 4 * ir; + device const half * dh = &x[ib].d; + + for (int row = 0; row < N_DST; row++) { + + sc16[0] = sc[0] & kmask1; + sc16[1] = sc[2] & kmask1; + sc16[2] = ((sc[4] >> 0) & kmask2) | ((sc[0] & kmask3) >> 2); + sc16[3] = ((sc[4] >> 4) & kmask2) | ((sc[2] & kmask3) >> 2); + + device const uint16_t * q2 = q1 + 32; + + float4 acc1 = {0.f, 0.f, 0.f, 0.f}; + float4 acc2 = {0.f, 0.f, 0.f, 0.f}; + for (int i = 0; i < 8; i += 2) { + acc1[0] += yl[i+0] * (q1[i/2] & 0x000F); + acc1[1] += yl[i+1] * (q1[i/2] & 0x0F00); + acc1[2] += yl[i+8] * (q1[i/2] & 0x00F0); + acc1[3] += yl[i+9] * (q1[i/2] & 0xF000); + acc2[0] += yh[i+0] * (q2[i/2] & 0x000F); + acc2[1] += yh[i+1] * (q2[i/2] & 0x0F00); + acc2[2] += yh[i+8] * (q2[i/2] & 0x00F0); + acc2[3] += yh[i+9] * (q2[i/2] & 0xF000); + } + + float dall = dh[0]; + float dmin = dh[1]; + sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc1[1]) * sc8[0] + + (acc1[2] + 1.f/256.f * acc1[3]) * sc8[1] * 1.f/16.f + + (acc2[0] + 1.f/256.f * acc2[1]) * sc8[4] + + (acc2[2] + 1.f/256.f * acc2[3]) * sc8[5] * 1.f/16.f) - + dmin * (sumy[0] * sc8[2] + sumy[1] * sc8[3] + sumy[2] * sc8[6] + sumy[3] * sc8[7]); + + q1 += step; + sc += step; + dh += step; + } + + y4 += 4 * QK_K; } -#else - uint16_t aux16[2]; - thread const uint8_t * scales = (thread const uint8_t *)aux16; - const int il = 4*tpitg.x; - - for (int i = tpitg.y; i < nb; i += tptg.y) { - - device const uint8_t * q = x[i].qs + il; - device const float * y = yy + i * QK_K + il; - - const float d = (float)x[i].d[0]; - const float m = (float)x[i].d[1]; - - device const uint16_t * a = (device const uint16_t *)x[i].scales; - aux16[0] = a[0] & 0x0f0f; - aux16[1] = (a[0] >> 4) & 0x0f0f; - - for (int l = 0; l < 4; ++l) { - sumf += d * scales[0] * (y[l+ 0] * (q[l] & 0xF) + y[l+16] * (q[l+16] & 0xF)) - m * scales[2] * (y[l+ 0] + y[l+16]) - + d * scales[1] * (y[l+32] * (q[l] >> 4) + y[l+48] * (q[l+16] >> 4)) - m * scales[3] * (y[l+32] + y[l+48]); + for (int row = 0; row < N_DST; ++row) { + all_sum = simd_sum(sumf[row]); + if (tiisg == 0) { + dst[r1*ne0 + r2*ne0*ne1 + first_row + row] = all_sum; } } -#endif - - sum[ith] = sumf; - - // - // Accumulate the sum from all threads in the threadgroup - // This version is slightly faster than the commented out one below, - // which I copy-pasted from ggerganov's q4_0 dot product for metal. - // - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%4 == 0) { - for (int i = 1; i < 4; ++i) sum[ith] += sum[ith + i]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%16 == 0) { - for (int i = 4; i < 16; i += 4) sum[ith] += sum[ith + i]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith == 0) { - for (int i = 16; i < nth; i += 16) sum[0] += sum[i]; - dst[r1*ne0 + r0] = sum[0]; - } - - //// accumulate the sum from all threads in the threadgroup - //threadgroup_barrier(mem_flags::mem_threadgroup); - //for (uint i = nth/2; i > 0; i /= 2) { - // if (ith < i) { - // sum[ith] += sum[ith + i]; - // } - // threadgroup_barrier(mem_flags::mem_threadgroup); - //} - - //if (ith == 0) { - // dst[r1*ne0 + r0] = sum[0]; - //} } +#else +kernel void kernel_mul_mat_q4_K_f32( + device const void * src0, + device const float * src1, + device float * dst, + constant int64_t & ne00, + constant int64_t & ne01[[buffer(4)]], + constant int64_t & ne02[[buffer(5)]], + constant int64_t & ne10[[buffer(9)]], + constant int64_t & ne12[[buffer(11)]], + constant int64_t & ne0[[buffer(15)]], + constant int64_t & ne1[[buffer(16)]], + constant uint & gqa[[buffer(17)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { + + const int ix = tiisg/4; // 0...7 + const int it = tiisg%4; // 0...3 + + const int nb = ne00/QK_K; + const int r0 = tgpig.x; + const int r1 = tgpig.y; + const int r2 = tgpig.z; + const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; + const int ib_row = first_row * nb; + const uint offset0 = r2/gqa*(nb*ne0); + device const block_q4_K * x = (device const block_q4_K *) src0 + ib_row + offset0; + device const float * y = (device const float *) src1 + r1*ne10 + r2*ne00*ne1; + float yl[8]; + float yh[8]; + float sumf[N_DST]={0.f}, all_sum; + + const int step = sizeof(block_q4_K) * nb / 2; + + device const float * y4 = y + ix * QK_K + 8 * it; + + uint16_t sc16[4]; + + for (int ib = ix; ib < nb; ib += 8) { + + float2 sumy = {0.f, 0.f}; + for (int i = 0; i < 8; ++i) { + yl[i] = y4[i+ 0]; sumy[0] += yl[i]; + yh[i] = y4[i+32]; sumy[1] += yh[i]; + } + + device const uint16_t * sc = (device const uint16_t *)x[ib].scales; + device const uint16_t * qs = (device const uint16_t *)x[ib].qs + 4 * it; + device const half * dh = x[ib].d; + + for (int row = 0; row < N_DST; row++) { + + sc16[0] = sc[0] & 0x000f; + sc16[1] = sc[0] & 0x0f00; + sc16[2] = sc[0] & 0x00f0; + sc16[3] = sc[0] & 0xf000; + + float2 acc1 = {0.f, 0.f}; + float2 acc2 = {0.f, 0.f}; + for (int i = 0; i < 8; i += 2) { + acc1[0] += yl[i+0] * (qs[i/2] & 0x000F); + acc1[1] += yl[i+1] * (qs[i/2] & 0x0F00); + acc2[0] += yh[i+0] * (qs[i/2] & 0x00F0); + acc2[1] += yh[i+1] * (qs[i/2] & 0xF000); + } + + float dall = dh[0]; + float dmin = dh[1]; + sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc1[1]) * sc16[0] + + (acc2[0] + 1.f/256.f * acc2[1]) * sc16[1] * 1.f/4096.f) - + dmin * 1.f/16.f * (sumy[0] * sc16[2] + sumy[1] * sc16[3] * 1.f/256.f); + + qs += step; + sc += step; + dh += step; + } + + y4 += 8 * QK_K; + } + + for (int row = 0; row < N_DST; ++row) { + all_sum = simd_sum(sumf[row]); + if (tiisg == 0) { + dst[r1*ne0+ r2*ne0*ne1 + first_row + row] = all_sum; + } + } +} +#endif kernel void kernel_mul_mat_q5_K_f32( device const void * src0, device const float * src1, device float * dst, constant int64_t & ne00, - constant int64_t & ne10, - constant int64_t & ne0, - threadgroup float * sum [[threadgroup(0)]], - uint2 tgpig[[threadgroup_position_in_grid]], - uint2 tpitg[[thread_position_in_threadgroup]], - uint2 tptg[[threads_per_threadgroup]]) { + constant int64_t & ne01[[buffer(4)]], + constant int64_t & ne02[[buffer(5)]], + constant int64_t & ne10[[buffer(9)]], + constant int64_t & ne12[[buffer(11)]], + constant int64_t & ne0[[buffer(15)]], + constant int64_t & ne1[[buffer(16)]], + constant uint & gqa[[buffer(17)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { const int nb = ne00/QK_K; const int64_t r0 = tgpig.x; const int64_t r1 = tgpig.y; + const int r2 = tgpig.z; - device const block_q5_K * x = (device const block_q5_K *) src0 + r0*nb; - device const float * yy = (device const float *) src1 + r1*ne10; + const int first_row = (r0 * N_SIMDGROUP + sgitg) * 2; + const uint offset0 = r2/gqa*(nb*ne0); + device const block_q5_K * x = (device const block_q5_K *) src0 + first_row*nb + offset0; + device const float * yy = (device const float *) src1 + r1*ne10 + r2*ne00*ne1; - const int nth = tptg.x*tptg.y; - const int ith = tptg.y*tpitg.x + tpitg.y; + float sumf[2]={0.f}; - float sumf = 0; + const int step = sizeof(block_q5_K) * nb; #if QK_K == 256 +# + float yl[16], yh[16]; const uint16_t kmask1 = 0x3f3f; const uint16_t kmask2 = 0x0f0f; const uint16_t kmask3 = 0xc0c0; - const int tid = tpitg.y; // 0...16 - const int il = tid/4; // 0...3 - const int ir = tid - 4*il;// 0...3 - const int n = 4; + const int tid = tiisg/4; + const int ix = tiisg%4; + const int im = tid/4; + const int ir = tid%4; + const int n = 8; - const int im = il/2; // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224 - const int in = il%2; - - const int l0 = n*(2*ir + in); + const int l0 = n*ir; const int q_offset = 32*im + l0; const int y_offset = 64*im + l0; @@ -1644,78 +1463,113 @@ kernel void kernel_mul_mat_q5_K_f32( const uint8_t hm3 = hm1 << 4; const uint8_t hm4 = hm2 << 4; - uchar2 sc1, sc2, sc3, sc4; + uint16_t sc16[4]; + thread const uint8_t * sc8 = (thread const uint8_t *)sc16; - for (int i = tpitg.x; i < nb; i += tptg.x) { + device const float * y1 = yy + ix*QK_K + y_offset; - device const uint8_t * q1 = (x + i)->qs + q_offset; - device const uint8_t * q2 = q1 + 64; - device const uint8_t * qh = (x + i)->qh + l0; - device const float * y1 = yy + i*QK_K + y_offset; - device const float * y2 = y1 + 128; + for (int i = ix; i < nb; i += 4) { - const float dall = (float)((x + i)->d); - const float dmin = (float)((x + i)->dmin); + device const uint8_t * q1 = x[i].qs + q_offset; + device const uint8_t * qh = x[i].qh + l0; + device const half * dh = &x[i].d; + device const uint16_t * a = (device const uint16_t *)x[i].scales + im; - device const uint16_t * a = (device const uint16_t *)(x + i)->scales; - sc1 = as_type((uint16_t)(a[im+0] & kmask1)); - sc2 = as_type((uint16_t)(a[im+2] & kmask1)); - sc3 = as_type((uint16_t)(((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2))); - sc4 = as_type((uint16_t)(((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2))); + device const float * y2 = y1 + 128; + float4 sumy = {0.f, 0.f, 0.f, 0.f}; + for (int l = 0; l < 8; ++l) { + yl[l+0] = y1[l+ 0]; sumy[0] += yl[l+0]; + yl[l+8] = y1[l+32]; sumy[1] += yl[l+8]; + yh[l+0] = y2[l+ 0]; sumy[2] += yh[l+0]; + yh[l+8] = y2[l+32]; sumy[3] += yh[l+8]; + } - float4 s = {0.f, 0.f, 0.f, 0.f}; - float smin = 0; - for (int l = 0; l < n; ++l) { + for (int row = 0; row < 2; ++row) { - s[0] += y1[l+ 0] * ((q1[l] & 0xF) + (qh[l] & hm1 ? 16 : 0)); - s[1] += y1[l+32] * ((q1[l] >> 4) + (qh[l] & hm2 ? 16 : 0)); - s[2] += y2[l+ 0] * ((q2[l] & 0xF) + (qh[l] & hm3 ? 16 : 0)); - s[3] += y2[l+32] * ((q2[l] >> 4) + (qh[l] & hm4 ? 16 : 0)); - smin += y1[l] * sc2[0] + y1[l+32] * sc2[1] + y2[l] * sc4[0] + y2[l+32] * sc4[1]; + device const uint8_t * q2 = q1 + 64; + + sc16[0] = a[0] & kmask1; + sc16[1] = a[2] & kmask1; + sc16[2] = ((a[4] >> 0) & kmask2) | ((a[0] & kmask3) >> 2); + sc16[3] = ((a[4] >> 4) & kmask2) | ((a[2] & kmask3) >> 2); + + float4 acc = {0.f, 0.f, 0.f, 0.f}; + for (int l = 0; l < n; ++l) { + uint8_t h = qh[l]; + acc[0] += yl[l+0] * ((uint16_t)(q1[l] & 0x0F) + (h & hm1 ? 16 : 0)); + acc[1] += yl[l+8] * ((uint16_t)(q1[l] & 0xF0) + (h & hm2 ? 256 : 0)); + acc[2] += yh[l+0] * ((uint16_t)(q2[l] & 0x0F) + (h & hm3 ? 16 : 0)); + acc[3] += yh[l+8] * ((uint16_t)(q2[l] & 0xF0) + (h & hm4 ? 256 : 0)); + } + const float dall = dh[0]; + const float dmin = dh[1]; + sumf[row] += dall * (acc[0] * sc8[0] + acc[1] * sc8[1] * 1.f/16.f + acc[2] * sc8[4] + acc[3] * sc8[5] * 1.f/16.f) - + dmin * (sumy[0] * sc8[2] + sumy[1] * sc8[3] + sumy[2] * sc8[6] + sumy[3] * sc8[7]); + + q1 += step; + qh += step; + dh += step/2; + a += step/2; } - sumf += dall * (s[0] * sc1[0] + s[1] * sc1[1] + s[2] * sc3[0] + s[3] * sc3[1]) - dmin * smin; + + y1 += 4 * QK_K; } #else - const int il = 4 * tpitg.x; // 0, 4, 8, 12 - const int im = il/8; // 0, 0, 1, 1 - const int in = il%8; // 0, 4, 0, 4 + float yl[8], yh[8]; - for (int i = tpitg.y; i < nb; i += tptg.y) { + const int il = 4 * (tiisg/8); // 0, 4, 8, 12 + const int ix = tiisg%8; + const int im = il/8; // 0, 0, 1, 1 + const int in = il%8; // 0, 4, 0, 4 - const float d = (float)x[i].d; + device const float * y = yy + ix*QK_K + il; + + for (int i = ix; i < nb; i += 8) { + + for (int l = 0; l < 4; ++l) { + yl[l+0] = y[l+ 0]; + yl[l+4] = y[l+16]; + yh[l+0] = y[l+32]; + yh[l+4] = y[l+48]; + } + + device const half * dh = &x[i].d; device const uint8_t * q = x[i].qs + il; device const uint8_t * h = x[i].qh + in; device const int8_t * s = x[i].scales; - device const float * y = yy + i*QK_K + il; - for (int l = 0; l < 4; ++l) { - const uint8_t hl = h[l] >> im; - sumf += y[l+ 0] * d * s[0] * ((q[l+ 0] & 0xF) - (hl & 0x01 ? 0 : 16)) - + y[l+16] * d * s[1] * ((q[l+16] & 0xF) - (hl & 0x04 ? 0 : 16)) - + y[l+32] * d * s[2] * ((q[l+ 0] >> 4) - (hl & 0x10 ? 0 : 16)) - + y[l+48] * d * s[3] * ((q[l+16] >> 4) - (hl & 0x40 ? 0 : 16)); + for (int row = 0; row < 2; ++row) { + + const float d = dh[0]; + + float2 acc = {0.f, 0.f}; + for (int l = 0; l < 4; ++l) { + const uint8_t hl = h[l] >> im; + acc[0] += yl[l+0] * s[0] * ((int16_t)(q[l+ 0] & 0x0F) - (hl & 0x01 ? 0 : 16)) + + yl[l+4] * s[1] * ((int16_t)(q[l+16] & 0x0F) - (hl & 0x04 ? 0 : 16)); + acc[1] += yh[l+0] * s[2] * ((int16_t)(q[l+ 0] & 0xF0) - (hl & 0x10 ? 0 : 256)) + + yh[l+4] * s[3] * ((int16_t)(q[l+16] & 0xF0) - (hl & 0x40 ? 0 : 256)); + } + sumf[row] += d * (acc[0] + 1.f/16.f * acc[1]); + + q += step; + h += step; + s += step; + dh += step/2; + } + + y += 8 * QK_K; } #endif - sum[ith] = sumf; - // - // Accumulate the sum from all threads in the threadgroup - // - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%4 == 0) { - sum[ith] += sum[ith+1] + sum[ith+2] + sum[ith+3]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%16 == 0) { - sum[ith] += sum[ith+4] + sum[ith+8] + sum[ith+12]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith == 0) { - for (int i = 16; i < nth; i += 16) sum[0] += sum[i]; - dst[r1*ne0 + r0] = sum[0]; + for (int row = 0; row < 2; ++row) { + const float tot = simd_sum(sumf[row]); + if (tiisg == 0) { + dst[r1*ne0 + r2*ne0*ne1 + first_row + row] = tot; + } } } @@ -1725,12 +1579,16 @@ kernel void kernel_mul_mat_q6_K_f32( device const float * src1, device float * dst, constant int64_t & ne00, - constant int64_t & ne10, - constant int64_t & ne0, - threadgroup float * sum [[threadgroup(0)]], - uint2 tgpig[[threadgroup_position_in_grid]], - uint2 tpitg[[thread_position_in_threadgroup]], - uint2 tptg[[threads_per_threadgroup]]) { + constant int64_t & ne01[[buffer(4)]], + constant int64_t & ne02[[buffer(5)]], + constant int64_t & ne10[[buffer(9)]], + constant int64_t & ne12[[buffer(11)]], + constant int64_t & ne0[[buffer(15)]], + constant int64_t & ne1[[buffer(16)]], + constant uint & gqa[[buffer(17)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { const uint8_t kmask1 = 0x03; const uint8_t kmask2 = 0x0C; @@ -1741,20 +1599,20 @@ kernel void kernel_mul_mat_q6_K_f32( const int64_t r0 = tgpig.x; const int64_t r1 = tgpig.y; + const int r2 = tgpig.z; - device const block_q6_K * x = (device const block_q6_K *) src0 + r0*nb; - device const float * yy = (device const float *) src1 + r1*ne10; - - const int nth = tptg.x*tptg.y; - const int ith = tptg.y*tpitg.x + tpitg.y; + const int row = 2 * r0 + sgitg; + const uint offset0 = r2/gqa*(nb*ne0); + device const block_q6_K * x = (device const block_q6_K *) src0 + row * nb + offset0; + device const float * yy = (device const float *) src1 + r1*ne10 + r2*ne00*ne1; float sumf = 0; #if QK_K == 256 - // Note: we absolutely assume that tptg.y = 16 and QK_K = 256! - const int iqs = 16 * tpitg.y; - const int ip = iqs / 128; // 0 or 1 - const int il = (iqs - 128*ip)/16; // 0...7 + const int tid = tiisg/2; + const int ix = tiisg%2; + const int ip = tid/8; // 0 or 1 + const int il = tid%8; const int n = 4; const int l0 = n*il; const int is = 8*ip + l0/16; @@ -1763,9 +1621,10 @@ kernel void kernel_mul_mat_q6_K_f32( const int q_offset_l = 64*ip + l0; const int q_offset_h = 32*ip + l0; - for (int i = tpitg.x; i < nb; i += tptg.x) { + for (int i = ix; i < nb; i += 2) { - device const uint8_t * ql = x[i].ql + q_offset_l; + device const uint8_t * q1 = x[i].ql + q_offset_l; + device const uint8_t * q2 = q1 + 32; device const uint8_t * qh = x[i].qh + q_offset_h; device const int8_t * sc = x[i].scales + is; @@ -1775,19 +1634,21 @@ kernel void kernel_mul_mat_q6_K_f32( float4 sums = {0.f, 0.f, 0.f, 0.f}; for (int l = 0; l < n; ++l) { - sums[0] += y[l+ 0] * ((int8_t)((ql[l+ 0] & 0xF) | ((qh[l] & kmask1) << 4)) - 32); - sums[1] += y[l+32] * ((int8_t)((ql[l+32] & 0xF) | ((qh[l] & kmask2) << 2)) - 32); - sums[2] += y[l+64] * ((int8_t)((ql[l+ 0] >> 4) | ((qh[l] & kmask3) << 0)) - 32); - sums[3] += y[l+96] * ((int8_t)((ql[l+32] >> 4) | ((qh[l] & kmask4) >> 2)) - 32); + sums[0] += y[l+ 0] * ((int8_t)((q1[l] & 0xF) | ((qh[l] & kmask1) << 4)) - 32); + sums[1] += y[l+32] * ((int8_t)((q2[l] & 0xF) | ((qh[l] & kmask2) << 2)) - 32); + sums[2] += y[l+64] * ((int8_t)((q1[l] >> 4) | ((qh[l] & kmask3) << 0)) - 32); + sums[3] += y[l+96] * ((int8_t)((q2[l] >> 4) | ((qh[l] & kmask4) >> 2)) - 32); } sumf += dall * (sums[0] * sc[0] + sums[1] * sc[2] + sums[2] * sc[4] + sums[3] * sc[6]); } -#else - const int il = 4*tpitg.x; // 0, 4, 8, 12 - for (int i = tpitg.y; i < nb; i += tptg.y) { +#else + const int ix = tiisg/4; + const int il = 4*(tiisg%4); + + for (int i = ix; i < nb; i += 8) { device const float * y = yy + i * QK_K + il; device const uint8_t * ql = x[i].ql + il; device const uint8_t * qh = x[i].qh + il; @@ -1807,23 +1668,382 @@ kernel void kernel_mul_mat_q6_K_f32( #endif - sum[ith] = sumf; - - // - // Accumulate the sum from all threads in the threadgroup - // - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%4 == 0) { - for (int i = 1; i < 4; ++i) sum[ith] += sum[ith + i]; + const float tot = simd_sum(sumf); + if (tiisg == 0) { + dst[r1*ne0 + r2*ne0*ne1 + row] = tot; } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith%16 == 0) { - for (int i = 4; i < 16; i += 4) sum[ith] += sum[ith + i]; - } - threadgroup_barrier(mem_flags::mem_threadgroup); - if (ith == 0) { - for (int i = 16; i < nth; i += 16) sum[0] += sum[i]; - dst[r1*ne0 + r0] = sum[0]; - } - } + +//============================= templates and their specializations ============================= + +template +void dequantize_f16(device const half4x4 * src, short il, thread type4x4 & reg) { + half4x4 temp = *(((device half4x4 *)src)); + for (int i = 0; i < 16; i++){ + reg[i/4][i%4] = temp[i/4][i%4]; + } +} + +template +void dequantize_q4_0(device const block_q4_0 *xb, short il, thread type4x4 & reg) { + device const uint16_t * qs = ((device const uint16_t *)xb + 1); + const half d = il ? (xb->d / 16.h) : xb->d; + const half m = il ? ( -8.h * 16.h) : -8.h; + const ushort mask0 = il ? 0x00F0 : 0x000F; + const ushort mask1 = il ? 0xF000 : 0x0F00; + + for (int i=0;i<8;i++) { + reg[i/2][2*(i%2)] = (((qs[i] & mask0) ) + m) * d; + reg[i/2][2*(i%2)+1] = (((qs[i] & mask1) >> 8) + m) * d; + } +} + +template +void dequantize_q4_1(device const block_q4_1 *xb, short il, thread type4x4 & reg) { + device const uint16_t * qs = ((device const uint16_t *)xb + 2); + const half d = il ? (xb->d / 16.h) : xb->d; + const half m = xb->m; + const ushort mask0 = il ? 0x00F0 : 0x000F; + const ushort mask1 = il ? 0xF000 : 0x0F00; + + for (int i=0;i<8;i++) { + reg[i/2][2*(i%2)] = (((qs[i] & mask0) ) * d) + m; + reg[i/2][2*(i%2)+1] = (((qs[i] & mask1) >> 8) * d) + m; + } +} + +template +void dequantize_q8_0(device const block_q8_0 *xb, short il, thread type4x4 & reg) { + device const int8_t * qs = ((device const int8_t *)xb->qs); + const half d = xb->d; + + for (int i=0;i<16;i++) { + reg[i/4][i%4] = (qs[i + 16*il] * d); + } +} + +template +void dequantize_q2_K(device const block_q2_K *xb, short il, thread type4x4 & reg) { + const half d = xb->d; + const half min = xb->dmin; + device const uint8_t * q = (device const uint8_t *)xb->qs; + half dl, ml; + uint8_t sc = xb->scales[il]; + +#if QK_K == 256 + q = q + 32*(il/8) + 16*(il&1); + il = (il/2)%4; +#endif + half coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h); + uchar mask = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3); + dl = d * (sc & 0xF) * coef, ml = min * (sc >> 4); + for (int i = 0; i < 16; ++i) { + reg[i/4][i%4] = dl * (q[i] & mask) - ml; + } +} + +template +void dequantize_q3_K(device const block_q3_K *xb, short il, thread type4x4 & reg) { + const float d_all = (float)(xb->d); + device const uint8_t * q = (device const uint8_t *)xb->qs; + device const uint8_t * h = (device const uint8_t *)xb->hmask; + device const int8_t * scales = (device const int8_t *)xb->scales; + +#if QK_K == 256 + q = q + 32 * (il/8) + 16 * (il&1); + h = h + 16 * (il&1); + uint8_t m = 1 << (il/2); + uint16_t kmask1 = (il/4)>1 ? ((il/4)>2 ? 192 : 48) : \ + ((il/4)>0 ? 12 : 3); + uint16_t kmask2 = il/8 ? 0xF0 : 0x0F; + uint16_t scale_2 = scales[il%8], scale_1 = scales[8 + il%4]; + int16_t dl_int = (il/4)&1 ? (scale_2&kmask2) | ((scale_1&kmask1) << 2) : \ + (scale_2&kmask2) | ((scale_1&kmask1) << 4); + float dl = il<8 ? d_all * (dl_int - 32.f) : d_all * (dl_int / 16.f - 32.f); + + il = (il/2)%4; + float coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h); + uint8_t mask = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3); + + for (int i = 0; i < 16; ++i) { + reg[i/4][i%4] = coef * dl * ((q[i] & mask) - ((h[i] & m) ? 0 : 4.f/coef)); + } +#else + float kcoef = il&1 ? 1.f/16.f : 1.f; + uint16_t kmask = il&1 ? 0xF0 : 0x0F; + float dl = d_all * ((scales[il/2] & kmask) * kcoef - 8); + float coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h); + uint8_t mask = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3); + uint8_t m = 1<<(il*2); + for (int i = 0; i < 16; ++i) { + reg[i/4][i%4] = coef * dl * ((q[i] & mask) - ((h[i%8] & (m * (1 + i/8))) ? 0 : 4.f/coef)); + } +#endif +} + +template +void dequantize_q4_K(device const block_q4_K *xb, short il, thread type4x4 & reg) { + device const uint8_t * q = xb->qs; + +#if QK_K == 256 + const float d = (float)(xb->d); + const float min = (float)(xb->dmin); + short is = (il/4) * 2; + q = q + (il/4) * 32 + 16 * (il&1); + il = il%4; + const uchar4 sc = get_scale_min_k4(is, xb->scales); + const float dl = il<2 ? d * sc[0] : d * sc[2]/16.h; + const float ml = il<2 ? min * sc[1] : min * sc[3]; +#else + q = q + 16 * (il&1); + device const uint8_t * s = xb->scales; + device const half2 * dh = (device const half2 *)xb->d; + const float2 d = (float2)dh[0]; + const float dl = il<2 ? d[0] * (s[0]&0xF) : d[0] * (s[1]&0xF)/16.h; + const float ml = il<2 ? d[1] * (s[0]>>4) : d[1 ]* (s[1]>>4); +#endif + const ushort mask = il<2 ? 0x0F : 0xF0; + for (int i = 0; i < 16; ++i) { + reg[i/4][i%4] = dl * (q[i] & mask) - ml; + } +} + +template +void dequantize_q5_K(device const block_q5_K *xb, short il, thread type4x4 & reg) { + device const uint8_t * q = xb->qs; + device const uint8_t * qh = xb->qh; + +#if QK_K == 256 + const float d = (float)(xb->d); + const float min = (float)(xb->dmin); + short is = (il/4) * 2; + q = q + 32 * (il/4) + 16 * (il&1); + qh = qh + 16 * (il&1); + uint8_t ul = 1 << (il/2); + il = il%4; + const uchar4 sc = get_scale_min_k4(is, xb->scales); + const float dl = il<2 ? d * sc[0] : d * sc[2]/16.h; + const float ml = il<2 ? min * sc[1] : min * sc[3]; + + const ushort mask = il<2 ? 0x0F : 0xF0; + const float qh_val = il<2 ? 16.f : 256.f; + for (int i = 0; i < 16; ++i) { + reg[i/4][i%4] = dl * ((q[i] & mask) + (qh[i] & ul ? qh_val : 0)) - ml; + } +#else + q = q + 16 * (il&1); + device const int8_t * s = xb->scales; + const float dl = xb->d * s[il]; + uint8_t m = 1<<(il*2); + const float coef = il<2 ? 1.f : 1.f/16.f; + const ushort mask = il<2 ? 0x0F : 0xF0; + for (int i = 0; i < 16; ++i) { + reg[i/4][i%4] = coef * dl * ((q[i] & mask) - (qh[i%8] & (m*(1+i/8)) ? 0.f : 16.f/coef)); + } +#endif +} + +template +void dequantize_q6_K(device const block_q6_K *xb, short il, thread type4x4 & reg) { + const float d_all = (float)(xb->d); + device const uint8_t * ql = (device const uint8_t *)xb->ql; + device const uint8_t * qh = (device const uint8_t *)xb->qh; + device const int8_t * scales = (device const int8_t *)xb->scales; + +#if QK_K == 256 + ql = ql + 64*(il/8) + 32*((il/2)&1) + 16*(il&1); + qh = qh + 32*(il/8) + 16*(il&1); + float sc = scales[(il%2) + 2 * ((il/2))]; + il = (il/2)%4; +#else + ql = ql + 16 * (il&1); + float sc = scales[il]; +#endif + for (int i = 0; i < 16; ++i) { + uint16_t kmask1 = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3); + uint16_t kmask2 = il>1 ? 0xF0 : 0x0F; + const float coef = il>1 ? 1.f/16.f : 1.f; + float q = il&1 ? ((ql[i]&kmask2)|((qh[i]&kmask1)<<2)) - 32.f/coef : \ + ((ql[i]&kmask2)|((qh[i]&kmask1)<<4)) - 32.f/coef; + reg[i/4][i%4] = d_all * sc * q * coef; + } +} + +template +kernel void kernel_get_rows( + device const void * src0, + device const int * src1, + device float * dst, + constant int64_t & ne00, + constant uint64_t & nb01, + constant uint64_t & nb1, + uint tgpig[[threadgroup_position_in_grid]], + uint tiitg[[thread_index_in_threadgroup]], + uint tptg[[threads_per_threadgroup]]) { + const int i = tgpig; + const int r = ((device int32_t *) src1)[i]; + + for (int ind = tiitg; ind < ne00/16; ind += tptg) { + float4x4 temp; + dequantize_func( + ((device const block_q *) ((device char *) src0 + r*nb01)) + ind/nl, ind%nl, temp); + *(((device float4x4 *) ((device char *) dst + i*nb1)) + ind) = temp; + } +} + +#define BLOCK_SIZE_M 64 // 8 simdgroup matrices from matrix A +#define BLOCK_SIZE_N 32 // 4 simdgroup matrices from matrix A +#define BLOCK_SIZE_K 32 +#define THREAD_MAT_M 4 // each thread take 4 simdgroup matrices from matrix A +#define THREAD_MAT_N 2 // each thread take 2 simdgroup matrices from matrix B +#define THREAD_PER_BLOCK 128 +#define THREAD_PER_ROW 2 // 2 thread for each row in matrix A to load numbers +#define THREAD_PER_COL 4 // 4 thread for each row in matrix B to load numbers +#define SG_MAT_SIZE 64 // simdgroup matrix is of shape 8x8 +#define SG_MAT_ROW 8 + +// each block_q contains 16*nl weights +template +kernel void kernel_mul_mm(device const uchar * src0, + device const float * src1, + device float * dst, + constant int64_t & ne00, + constant int64_t & ne02, + constant int64_t & nb01, + constant int64_t & nb02, + constant int64_t & ne12, + constant int64_t & ne0, + constant int64_t & ne1, + constant uint & gqa, + threadgroup uchar * shared_memory [[threadgroup(0)]], + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiitg[[thread_index_in_threadgroup]], + uint sgitg[[simdgroup_index_in_threadgroup]]) { + + threadgroup half * sa = ((threadgroup half *)shared_memory); + threadgroup float * sb = (threadgroup float *)(shared_memory + 4096); + + const uint r0 = tgpig.y; + const uint r1 = tgpig.x; + const uint im = tgpig.z; + // if this block is of 64x32 shape or smaller + short n_rows = (ne0 - r0 * BLOCK_SIZE_M < BLOCK_SIZE_M) ? (ne0 - r0 * BLOCK_SIZE_M) : BLOCK_SIZE_M; + short n_cols = (ne1 - r1 * BLOCK_SIZE_N < BLOCK_SIZE_N) ? (ne1 - r1 * BLOCK_SIZE_N) : BLOCK_SIZE_N; + // a thread shouldn't load data outside of the matrix + short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1; + short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1; + + simdgroup_half8x8 ma[4]; + simdgroup_float8x8 mb[2]; + simdgroup_float8x8 c_res[8]; + for (int i = 0; i < 8; i++){ + c_res[i] = make_filled_simdgroup_matrix(0.f); + } + + short il = (tiitg % THREAD_PER_ROW); + uint offset0 = im/gqa*nb02; ushort offset1 = il/nl; + device const block_q * x = (device const block_q *)(src0 + (r0 * BLOCK_SIZE_M + thread_row) * nb01 + offset0) + offset1; + device const float * y = src1 + (r1 * BLOCK_SIZE_N + thread_col) * ne00 \ + + BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL) + im * ne00 * ne1; + + for (int loop_k = 0; loop_k < ne00; loop_k += BLOCK_SIZE_K) { + //load data and store to threadgroup memory + half4x4 temp_a; + dequantize_func(x, il, temp_a); + threadgroup_barrier(mem_flags::mem_threadgroup); + #pragma unroll(16) + for (int i = 0; i < 16; i++) { + *(sa + SG_MAT_SIZE * ((tiitg / THREAD_PER_ROW / 8) \ + + 16 * (tiitg % THREAD_PER_ROW) + 8 * (i / 8)) \ + + (tiitg / THREAD_PER_ROW) % 8 + (i & 7) * 8) = temp_a[i/4][i%4]; + } + *(threadgroup float2x4 *)(sb + (tiitg % THREAD_PER_COL) * 8 * 32 + 8 * (tiitg / THREAD_PER_COL)) \ + = *((device float2x4 *)y); + il = (il + 2 < nl) ? il + 2 : il % 2; + x = (il < 2) ? x + (2+nl-1)/nl : x; + y += BLOCK_SIZE_K; + + threadgroup_barrier(mem_flags::mem_threadgroup); + //load matrices from threadgroup memory and conduct outer products + threadgroup half * lsma = (sa + THREAD_MAT_M * SG_MAT_SIZE * (sgitg % 2)); + threadgroup float * lsmb = (sb + THREAD_MAT_N * SG_MAT_SIZE * (sgitg / 2)); + #pragma unroll(4) + for (int ik = 0; ik < BLOCK_SIZE_K / 8; ik++) { + #pragma unroll(4) + for (int i = 0; i < 4; i++) { + simdgroup_load(ma[i],lsma + SG_MAT_SIZE * i); + } + simdgroup_barrier(mem_flags::mem_none); + #pragma unroll(2) + for (int i = 0; i < 2; i++) { + simdgroup_load(mb[i],lsmb + SG_MAT_SIZE * i); + } + + lsma += BLOCK_SIZE_M / SG_MAT_ROW * SG_MAT_SIZE; + lsmb += BLOCK_SIZE_N / SG_MAT_ROW * SG_MAT_SIZE; + #pragma unroll(8) + for (int i = 0; i < 8; i++){ + simdgroup_multiply_accumulate(c_res[i], mb[i/4], ma[i%4], c_res[i]); + } + } + } + + if ((r0 + 1) * BLOCK_SIZE_M <= ne0 && (r1 + 1) * BLOCK_SIZE_N <= ne1) { + device float *C = dst + BLOCK_SIZE_M * r0 + 32 * (sgitg&1) \ + + (BLOCK_SIZE_N * r1 + 16 * (sgitg>>1)) * ne0 + im*ne1*ne0; + for (int i = 0; i < 8; i++) { + simdgroup_store(c_res[i], C + 8 * (i%4) + 8 * ne0 * (i/4), ne0); + } + } else { + // block is smaller than 64x32, we should avoid writing data outside of the matrix + threadgroup_barrier(mem_flags::mem_threadgroup); + threadgroup float *temp_str = ((threadgroup float *)shared_memory) \ + + 32 * (sgitg&1) + (16 * (sgitg>>1)) * BLOCK_SIZE_M; + for (int i = 0; i < 8; i++) { + simdgroup_store(c_res[i], temp_str + 8 * (i%4) + 8 * BLOCK_SIZE_M * (i/4), BLOCK_SIZE_M); + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + device float *C = dst + BLOCK_SIZE_M * r0 + (BLOCK_SIZE_N * r1) * ne0 + im*ne1*ne0; + if (sgitg==0) { + for (int i = 0; i < n_rows; i++) { + for (int j = tiitg; j< n_cols; j += BLOCK_SIZE_N) { + *(C + i + j * ne0) = *(temp_str + i + j * BLOCK_SIZE_M); + } + } + } + } +} + +#if QK_K == 256 +#define QK_NL 16 +#else +#define QK_NL 4 +#endif + +typedef void (get_rows_t)(device const void *, device const int *, device float *, constant int64_t &, \ + constant uint64_t &, constant uint64_t &, uint, uint, uint); + +template [[host_name("kernel_get_rows_f16")]] kernel get_rows_t kernel_get_rows; +template [[host_name("kernel_get_rows_q4_0")]] kernel get_rows_t kernel_get_rows; +template [[host_name("kernel_get_rows_q4_1")]] kernel get_rows_t kernel_get_rows; +template [[host_name("kernel_get_rows_q8_0")]] kernel get_rows_t kernel_get_rows; +template [[host_name("kernel_get_rows_q2_K")]] kernel get_rows_t kernel_get_rows; +template [[host_name("kernel_get_rows_q3_K")]] kernel get_rows_t kernel_get_rows; +template [[host_name("kernel_get_rows_q4_K")]] kernel get_rows_t kernel_get_rows; +template [[host_name("kernel_get_rows_q5_K")]] kernel get_rows_t kernel_get_rows; +template [[host_name("kernel_get_rows_q6_K")]] kernel get_rows_t kernel_get_rows; + +typedef void (mat_mm_t)(device const uchar *, device const float *, device float *, constant int64_t &,\ + constant int64_t &, constant int64_t &, constant int64_t &, constant int64_t &, \ + constant int64_t &, constant int64_t &, constant uint &, threadgroup uchar *, uint3, uint, uint); + +template [[host_name("kernel_mul_mm_f16_f32")]] kernel mat_mm_t kernel_mul_mm; +template [[host_name("kernel_mul_mm_q4_0_f32")]] kernel mat_mm_t kernel_mul_mm; +template [[host_name("kernel_mul_mm_q4_1_f32")]] kernel mat_mm_t kernel_mul_mm; +template [[host_name("kernel_mul_mm_q8_0_f32")]] kernel mat_mm_t kernel_mul_mm; +template [[host_name("kernel_mul_mm_q2_K_f32")]] kernel mat_mm_t kernel_mul_mm; +template [[host_name("kernel_mul_mm_q3_K_f32")]] kernel mat_mm_t kernel_mul_mm; +template [[host_name("kernel_mul_mm_q4_K_f32")]] kernel mat_mm_t kernel_mul_mm; +template [[host_name("kernel_mul_mm_q5_K_f32")]] kernel mat_mm_t kernel_mul_mm; +template [[host_name("kernel_mul_mm_q6_K_f32")]] kernel mat_mm_t kernel_mul_mm; diff --git a/ggml-opencl.cpp b/ggml-opencl.cpp index 7927d227..eb214a83 100644 --- a/ggml-opencl.cpp +++ b/ggml-opencl.cpp @@ -656,10 +656,14 @@ __kernel void dequantize_mul_mat_vec_q6_K(__global const struct block_q6_K * xx, \n#if K_QUANTS_PER_ITERATION == 1\n const int l0 = K_QUANTS_PER_ITERATION*in; // 0...15 const int is = 0; + \n#else\n + const int l0 = 4 * in; // 0, 4, 8, ..., 28 const int is = in / 4; + \n#endif\n + const int ql_offset = 64*im + l0; const int qh_offset = 32*im + l0; const int s_offset = 8*im + is; @@ -1376,7 +1380,7 @@ static void ggml_cl_mul_f32(const ggml_tensor * src0, const ggml_tensor * src1, const int64_t ne00 = src0->ne[0]; const int64_t ne01 = src0->ne[1]; const int64_t ne02 = src0->ne[2]; - const int64_t ne03 = src0->ne[2]; + const int64_t ne03 = src0->ne[3]; const int64_t ne0 = ne00 * ne01 * ne02 * ne03; const int64_t ne10 = src1->ne[0]; const int64_t ne11 = src1->ne[1]; diff --git a/ggml.c b/ggml.c index c3d51bbd..ecbc724b 100644 --- a/ggml.c +++ b/ggml.c @@ -25,16 +25,23 @@ #include #include #include +#include #ifdef GGML_USE_METAL #include #endif +// static_assert should be a #define, but if it's not, +// fall back to the _Static_assert C11 keyword. // if C99 - static_assert is noop // ref: https://stackoverflow.com/a/53923785/4039976 #ifndef static_assert +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L) +#define static_assert(cond, msg) _Static_assert(cond, msg) +#else #define static_assert(cond, msg) struct global_scope_noop_trick #endif +#endif #if defined(_MSC_VER) // disable "possible loss of data" to avoid hundreds of casts @@ -49,23 +56,23 @@ typedef volatile LONG atomic_int; typedef atomic_int atomic_bool; -static void atomic_store(atomic_int* ptr, LONG val) { +static void atomic_store(atomic_int * ptr, LONG val) { InterlockedExchange(ptr, val); } -static LONG atomic_load(atomic_int* ptr) { +static LONG atomic_load(atomic_int * ptr) { return InterlockedCompareExchange(ptr, 0, 0); } -static LONG atomic_fetch_add(atomic_int* ptr, LONG inc) { +static LONG atomic_fetch_add(atomic_int * ptr, LONG inc) { return InterlockedExchangeAdd(ptr, inc); } -static LONG atomic_fetch_sub(atomic_int* ptr, LONG dec) { +static LONG atomic_fetch_sub(atomic_int * ptr, LONG dec) { return atomic_fetch_add(ptr, -(dec)); } typedef HANDLE pthread_t; typedef DWORD thread_ret_t; -static int pthread_create(pthread_t* out, void* unused, thread_ret_t(*func)(void*), void* arg) { +static int pthread_create(pthread_t * out, void * unused, thread_ret_t(*func)(void *), void * arg) { (void) unused; HANDLE handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) func, arg, 0, NULL); if (handle == NULL) @@ -77,7 +84,7 @@ static int pthread_create(pthread_t* out, void* unused, thread_ret_t(*func)(void return 0; } -static int pthread_join(pthread_t thread, void* unused) { +static int pthread_join(pthread_t thread, void * unused) { (void) unused; return (int) WaitForSingleObject(thread, INFINITE); } @@ -90,7 +97,7 @@ static int sched_yield (void) { #include #include -typedef void* thread_ret_t; +typedef void * thread_ret_t; #include #include @@ -111,10 +118,6 @@ typedef void* thread_ret_t; #endif #endif -#ifdef __HAIKU__ -#define static_assert(cond, msg) _Static_assert(cond, msg) -#endif - /*#define GGML_PERF*/ #define GGML_DEBUG 0 #define GGML_GELU_FP16 @@ -154,12 +157,6 @@ typedef void* thread_ret_t; //#define GGML_SOFT_MAX_ACCELERATE #endif -#if UINTPTR_MAX == 0xFFFFFFFF - #define GGML_MEM_ALIGN 4 -#else - #define GGML_MEM_ALIGN 16 -#endif - // // logging // @@ -192,8 +189,8 @@ typedef void* thread_ret_t; #define GGML_ALIGNED_MALLOC(size) _aligned_malloc(size, GGML_MEM_ALIGN) #define GGML_ALIGNED_FREE(ptr) _aligned_free(ptr) #else -inline static void* ggml_aligned_malloc(size_t size) { - void* aligned_memory = NULL; +inline static void * ggml_aligned_malloc(size_t size) { + void * aligned_memory = NULL; #ifdef GGML_USE_METAL int result = posix_memalign(&aligned_memory, getpagesize(), size); #else @@ -210,8 +207,7 @@ inline static void* ggml_aligned_malloc(size_t size) { error_desc = "insufficient memory"; break; } - GGML_PRINT("%s: %s (attempted to allocate %6.2f MB)\n", - __func__, error_desc, size/(1024.0*1024.0)); + GGML_PRINT("%s: %s (attempted to allocate %6.2f MB)\n", __func__, error_desc, size/(1024.0*1024.0)); return NULL; } return aligned_memory; @@ -247,7 +243,11 @@ inline static void* ggml_aligned_malloc(size_t size) { #include "ggml-opencl.h" #endif #elif defined(GGML_USE_OPENBLAS) +#if defined(GGML_BLAS_USE_MKL) +#include +#else #include +#endif #elif defined(GGML_USE_CUBLAS) #include "ggml-cuda.h" #elif defined(GGML_USE_CLBLAST) @@ -293,11 +293,13 @@ typedef double ggml_float; #include #else #if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) || defined(__SSE3__) +#if !defined(__riscv) #include #endif #endif #endif #endif +#endif #ifdef __F16C__ @@ -481,14 +483,14 @@ ggml_fp16_t ggml_fp32_to_fp16(float x) { return GGML_FP32_TO_FP16(x); } -void ggml_fp16_to_fp32_row(const ggml_fp16_t * x, float * y, size_t n) { - for (size_t i = 0; i < n; i++) { +void ggml_fp16_to_fp32_row(const ggml_fp16_t * x, float * y, int n) { + for (int i = 0; i < n; i++) { y[i] = GGML_FP16_TO_FP32(x[i]); } } -void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, size_t n) { - size_t i = 0; +void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, int n) { + int i = 0; #if defined(__F16C__) for (; i + 7 < n; i += 8) { __m256 x_vec = _mm256_loadu_ps(x + i); @@ -1292,6 +1294,7 @@ static void quantize_row_q8_0(const float * restrict x, void * restrict vy, int #endif } #else + (void)nb; // scalar quantize_row_q8_0_reference(x, y, k); #endif @@ -1510,6 +1513,7 @@ static void quantize_row_q8_1(const float * restrict x, void * restrict vy, int #endif } #else + (void)nb; // scalar quantize_row_q8_1_reference(x, y, k); #endif @@ -1627,109 +1631,186 @@ static void dequantize_row_q8_0(const void * restrict vx, float * restrict y, in } } +static void ggml_vec_dot_f32(const int n, float * restrict s, const float * restrict x, const float * restrict y); +static void ggml_vec_dot_f16(const int n, float * restrict s, ggml_fp16_t * restrict x, ggml_fp16_t * restrict y); static void ggml_vec_dot_q4_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); static void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); static void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); static void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); static void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * restrict vx, const void * restrict vy); -static const quantize_fns_t quantize_fns[GGML_TYPE_COUNT] = { +static const ggml_type_traits_t type_traits[GGML_TYPE_COUNT] = { + [GGML_TYPE_I8] = { + .type_name = "i8", + .blck_size = 1, + .type_size = sizeof(int8_t), + .is_quantized = false, + }, + [GGML_TYPE_I16] = { + .type_name = "i16", + .blck_size = 1, + .type_size = sizeof(int16_t), + .is_quantized = false, + }, + [GGML_TYPE_I32] = { + .type_name = "i32", + .blck_size = 1, + .type_size = sizeof(int32_t), + .is_quantized = false, + }, + [GGML_TYPE_F32] = { + .type_name = "f32", + .blck_size = 1, + .type_size = sizeof(float), + .is_quantized = false, + .vec_dot = (ggml_vec_dot_t) ggml_vec_dot_f32, + .vec_dot_type = GGML_TYPE_F32, + }, + [GGML_TYPE_F16] = { + .type_name = "f16", + .blck_size = 1, + .type_size = sizeof(ggml_fp16_t), + .is_quantized = false, + .to_float = (ggml_to_float_t) ggml_fp16_to_fp32_row, + .from_float = (ggml_from_float_t) ggml_fp32_to_fp16_row, + .from_float_reference = (ggml_from_float_t) ggml_fp32_to_fp16_row, + .vec_dot = (ggml_vec_dot_t) ggml_vec_dot_f16, + .vec_dot_type = GGML_TYPE_F16, + }, [GGML_TYPE_Q4_0] = { - .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q4_0, - .quantize_row_q = quantize_row_q4_0, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q4_0_reference, - .quantize_row_q_dot = quantize_row_q8_0, - .vec_dot_q = ggml_vec_dot_q4_0_q8_0, + .type_name = "q4_0", + .blck_size = QK4_0, + .type_size = sizeof(block_q4_0), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q4_0, + .from_float = quantize_row_q4_0, + .from_float_reference = (ggml_from_float_t) quantize_row_q4_0_reference, + .vec_dot = ggml_vec_dot_q4_0_q8_0, .vec_dot_type = GGML_TYPE_Q8_0, }, [GGML_TYPE_Q4_1] = { - .dequantize_row_q = (dequantize_row_q_t)dequantize_row_q4_1, - .quantize_row_q = quantize_row_q4_1, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q4_1_reference, - .quantize_row_q_dot = quantize_row_q8_1, - .vec_dot_q = ggml_vec_dot_q4_1_q8_1, + .type_name = "q4_1", + .blck_size = QK4_1, + .type_size = sizeof(block_q4_1), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q4_1, + .from_float = quantize_row_q4_1, + .from_float_reference = (ggml_from_float_t) quantize_row_q4_1_reference, + .vec_dot = ggml_vec_dot_q4_1_q8_1, .vec_dot_type = GGML_TYPE_Q8_1, }, [GGML_TYPE_Q5_0] = { - .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q5_0, - .quantize_row_q = quantize_row_q5_0, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q5_0_reference, - .quantize_row_q_dot = quantize_row_q8_0, - .vec_dot_q = ggml_vec_dot_q5_0_q8_0, + .type_name = "q5_0", + .blck_size = QK5_0, + .type_size = sizeof(block_q5_0), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q5_0, + .from_float = quantize_row_q5_0, + .from_float_reference = (ggml_from_float_t) quantize_row_q5_0_reference, + .vec_dot = ggml_vec_dot_q5_0_q8_0, .vec_dot_type = GGML_TYPE_Q8_0, }, [GGML_TYPE_Q5_1] = { - .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q5_1, - .quantize_row_q = quantize_row_q5_1, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q5_1_reference, - .quantize_row_q_dot = quantize_row_q8_1, - .vec_dot_q = ggml_vec_dot_q5_1_q8_1, + .type_name = "q5_1", + .blck_size = QK5_1, + .type_size = sizeof(block_q5_1), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q5_1, + .from_float = quantize_row_q5_1, + .from_float_reference = (ggml_from_float_t) quantize_row_q5_1_reference, + .vec_dot = ggml_vec_dot_q5_1_q8_1, .vec_dot_type = GGML_TYPE_Q8_1, }, [GGML_TYPE_Q8_0] = { - .dequantize_row_q = dequantize_row_q8_0, - .quantize_row_q = quantize_row_q8_0, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q8_0_reference, - .quantize_row_q_dot = quantize_row_q8_0, - .vec_dot_q = ggml_vec_dot_q8_0_q8_0, + .type_name = "q8_0", + .blck_size = QK8_0, + .type_size = sizeof(block_q8_0), + .is_quantized = true, + .to_float = dequantize_row_q8_0, + .from_float = quantize_row_q8_0, + .from_float_reference = (ggml_from_float_t) quantize_row_q8_0_reference, + .vec_dot = ggml_vec_dot_q8_0_q8_0, .vec_dot_type = GGML_TYPE_Q8_0, }, [GGML_TYPE_Q8_1] = { - .dequantize_row_q = NULL, // TODO - .quantize_row_q = quantize_row_q8_1, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q8_1_reference, - .quantize_row_q_dot = quantize_row_q8_1, - .vec_dot_q = NULL, // TODO + .type_name = "q8_1", + .blck_size = QK8_1, + .type_size = sizeof(block_q8_1), + .is_quantized = true, + .from_float = quantize_row_q8_1, + .from_float_reference = (ggml_from_float_t) quantize_row_q8_1_reference, .vec_dot_type = GGML_TYPE_Q8_1, }, #ifdef GGML_USE_K_QUANTS [GGML_TYPE_Q2_K] = { - .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q2_K, - .quantize_row_q = quantize_row_q2_K, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q2_K_reference, - .quantize_row_q_dot = quantize_row_q8_K, - .vec_dot_q = ggml_vec_dot_q2_K_q8_K, + .type_name = "q2_K", + .blck_size = QK_K, + .type_size = sizeof(block_q2_K), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q2_K, + .from_float = quantize_row_q2_K, + .from_float_reference = (ggml_from_float_t) quantize_row_q2_K_reference, + .vec_dot = ggml_vec_dot_q2_K_q8_K, .vec_dot_type = GGML_TYPE_Q8_K, }, [GGML_TYPE_Q3_K] = { - .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q3_K, - .quantize_row_q = quantize_row_q3_K, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q3_K_reference, - .quantize_row_q_dot = quantize_row_q8_K, - .vec_dot_q = ggml_vec_dot_q3_K_q8_K, + .type_name = "q3_K", + .blck_size = QK_K, + .type_size = sizeof(block_q3_K), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q3_K, + .from_float = quantize_row_q3_K, + .from_float_reference = (ggml_from_float_t) quantize_row_q3_K_reference, + .vec_dot = ggml_vec_dot_q3_K_q8_K, .vec_dot_type = GGML_TYPE_Q8_K, }, [GGML_TYPE_Q4_K] = { - .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q4_K, - .quantize_row_q = quantize_row_q4_K, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q4_K_reference, - .quantize_row_q_dot = quantize_row_q8_K, - .vec_dot_q = ggml_vec_dot_q4_K_q8_K, + .type_name = "q4_K", + .blck_size = QK_K, + .type_size = sizeof(block_q4_K), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q4_K, + .from_float = quantize_row_q4_K, + .from_float_reference = (ggml_from_float_t) quantize_row_q4_K_reference, + .vec_dot = ggml_vec_dot_q4_K_q8_K, .vec_dot_type = GGML_TYPE_Q8_K, }, [GGML_TYPE_Q5_K] = { - .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q5_K, - .quantize_row_q = quantize_row_q5_K, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q5_K_reference, - .quantize_row_q_dot = quantize_row_q8_K, - .vec_dot_q = ggml_vec_dot_q5_K_q8_K, + .type_name = "q5_K", + .blck_size = QK_K, + .type_size = sizeof(block_q5_K), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q5_K, + .from_float = quantize_row_q5_K, + .from_float_reference = (ggml_from_float_t) quantize_row_q5_K_reference, + .vec_dot = ggml_vec_dot_q5_K_q8_K, .vec_dot_type = GGML_TYPE_Q8_K, }, [GGML_TYPE_Q6_K] = { - .dequantize_row_q = (dequantize_row_q_t) dequantize_row_q6_K, - .quantize_row_q = quantize_row_q6_K, - .quantize_row_q_reference = (quantize_row_q_t) quantize_row_q6_K_reference, - .quantize_row_q_dot = quantize_row_q8_K, - .vec_dot_q = ggml_vec_dot_q6_K_q8_K, + .type_name = "q6_K", + .blck_size = QK_K, + .type_size = sizeof(block_q6_K), + .is_quantized = true, + .to_float = (ggml_to_float_t) dequantize_row_q6_K, + .from_float = quantize_row_q6_K, + .from_float_reference = (ggml_from_float_t) quantize_row_q6_K_reference, + .vec_dot = ggml_vec_dot_q6_K_q8_K, .vec_dot_type = GGML_TYPE_Q8_K, }, + [GGML_TYPE_Q8_K] = { + .type_name = "q8_K", + .blck_size = QK_K, + .type_size = sizeof(block_q8_K), + .is_quantized = true, + .from_float = quantize_row_q8_K, + } #endif }; // For internal test use -quantize_fns_t ggml_internal_get_quantize_fn(size_t i) { - GGML_ASSERT(i < GGML_TYPE_COUNT); - return quantize_fns[i]; +ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type) { + GGML_ASSERT(type < GGML_TYPE_COUNT); + return type_traits[type]; } @@ -2275,7 +2356,7 @@ inline static void ggml_vec_neg_f32 (const int n, float * y, const float * x) inline static void ggml_vec_mul_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i]*y[i]; } inline static void ggml_vec_div_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i] = x[i]/y[i]; } -inline static void ggml_vec_dot_f32(const int n, float * restrict s, const float * restrict x, const float * restrict y) { +static void ggml_vec_dot_f32(const int n, float * restrict s, const float * restrict x, const float * restrict y) { #ifdef GGML_SIMD float sumf = 0.0f; const int np = (n & ~(GGML_F32_STEP - 1)); @@ -2312,7 +2393,7 @@ inline static void ggml_vec_dot_f32(const int n, float * restrict s, const float *s = sumf; } -inline static void ggml_vec_dot_f16(const int n, float * restrict s, ggml_fp16_t * restrict x, ggml_fp16_t * restrict y) { +static void ggml_vec_dot_f16(const int n, float * restrict s, ggml_fp16_t * restrict x, ggml_fp16_t * restrict y) { ggml_float sumf = 0.0; #if defined(GGML_SIMD) @@ -2353,7 +2434,6 @@ static void ggml_vec_dot_q4_0_q8_0(const int n, float * restrict s, const void * const int nb = n / qk; assert(n % qk == 0); - assert(nb % 2 == 0); const block_q4_0 * restrict x = vx; const block_q8_0 * restrict y = vy; @@ -2362,6 +2442,7 @@ static void ggml_vec_dot_q4_0_q8_0(const int n, float * restrict s, const void * float32x4_t sumv0 = vdupq_n_f32(0.0f); float32x4_t sumv1 = vdupq_n_f32(0.0f); + GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb for (int i = 0; i < nb; i += 2) { const block_q4_0 * restrict x0 = &x[i + 0]; const block_q4_0 * restrict x1 = &x[i + 1]; @@ -2540,6 +2621,7 @@ static void ggml_vec_dot_q4_0_q8_0(const int n, float * restrict s, const void * } // Main loop + GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb for (int i = 2; i < nb; i+=2) { _mm_prefetch(&x[i] + sizeof(block_q4_0), _MM_HINT_T0); _mm_prefetch(&y[i] + sizeof(block_q8_0), _MM_HINT_T0); @@ -2623,7 +2705,6 @@ static void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * const int nb = n / qk; assert(n % qk == 0); - assert(nb % 2 == 0); const block_q4_1 * restrict x = vx; const block_q8_1 * restrict y = vy; @@ -2635,6 +2716,7 @@ static void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * float summs = 0; + GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb for (int i = 0; i < nb; i += 2) { const block_q4_1 * restrict x0 = &x[i + 0]; const block_q4_1 * restrict x1 = &x[i + 1]; @@ -2749,7 +2831,6 @@ static void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * const int nb = n / qk; assert(n % qk == 0); - assert(nb % 2 == 0); assert(qk == QK5_0); const block_q5_0 * restrict x = vx; @@ -2765,6 +2846,7 @@ static void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * uint64_t tmp0[4]; uint64_t tmp1[4]; + GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb for (int i = 0; i < nb; i += 2) { const block_q5_0 * restrict x0 = &x[i]; const block_q5_0 * restrict x1 = &x[i + 1]; @@ -2989,7 +3071,6 @@ static void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * const int nb = n / qk; assert(n % qk == 0); - assert(nb % 2 == 0); assert(qk == QK5_1); const block_q5_1 * restrict x = vx; @@ -3008,6 +3089,7 @@ static void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * uint64_t tmp0[4]; uint64_t tmp1[4]; + GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb for (int i = 0; i < nb; i += 2) { const block_q5_1 * restrict x0 = &x[i]; const block_q5_1 * restrict x1 = &x[i + 1]; @@ -3245,7 +3327,6 @@ static void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * const int nb = n / qk; assert(n % qk == 0); - assert(nb % 2 == 0); const block_q8_0 * restrict x = vx; const block_q8_0 * restrict y = vy; @@ -3254,6 +3335,7 @@ static void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * float32x4_t sumv0 = vdupq_n_f32(0.0f); float32x4_t sumv1 = vdupq_n_f32(0.0f); + GGML_ASSERT(nb % 2 == 0); // TODO: handle odd nb for (int i = 0; i < nb; i += 2) { const block_q8_0 * restrict x0 = &x[i + 0]; const block_q8_0 * restrict x1 = &x[i + 1]; @@ -3430,7 +3512,9 @@ inline static void ggml_vec_mad_f32(const int n, float * restrict y, const float //inline static void ggml_vec_scale_f32(const int n, float * y, const float v) { for (int i = 0; i < n; ++i) y[i] *= v; } inline static void ggml_vec_scale_f32(const int n, float * y, const float v) { -#if defined(GGML_SIMD) +#if defined(GGML_USE_ACCELERATE) + vDSP_vsmul(y, 1, &v, y, 1, n); +#elif defined(GGML_SIMD) const int np = (n & ~(GGML_F32_STEP - 1)); GGML_F32_VEC vx = GGML_F32_VEC_SET1(v); @@ -3469,9 +3553,9 @@ inline static void ggml_vec_tanh_f32 (const int n, float * y, const float * x) { inline static void ggml_vec_elu_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? x[i] : expf(x[i])-1; } inline static void ggml_vec_relu_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? x[i] : 0.f; } -static const float GELU_COEF_A = 0.044715f; -static const float GELU_QUICK_COEF = -1.702f; -static const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f; +static const float GELU_COEF_A = 0.044715f; +static const float GELU_QUICK_COEF = -1.702f; +static const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f; inline static float ggml_gelu_f32(float x) { return 0.5f*x*(1.0f + tanhf(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x))); @@ -3593,7 +3677,7 @@ inline static void ggml_vec_sum_f32(const int n, float * s, const float * x) { #endif } -inline static void ggml_vec_sum_ggf(const int n, ggml_float * s, const float * x) { +inline static void ggml_vec_sum_f32_ggf(const int n, ggml_float * s, const float * x) { ggml_float sum = 0.0; for (int i = 0; i < n; ++i) { sum += (ggml_float)x[i]; @@ -3601,6 +3685,14 @@ inline static void ggml_vec_sum_ggf(const int n, ggml_float * s, const float * x *s = sum; } +inline static void ggml_vec_sum_f16_ggf(const int n, float * s, const ggml_fp16_t * x) { + float sum = 0.0f; + for (int i = 0; i < n; ++i) { + sum += GGML_FP16_TO_FP32(x[i]); + } + *s = sum; +} + inline static void ggml_vec_max_f32(const int n, float * s, const float * x) { #ifndef GGML_USE_ACCELERATE float max = -INFINITY; @@ -3632,95 +3724,6 @@ inline static void ggml_vec_argmax_f32(const int n, int * s, const float * x) { // data types // -static const int GGML_BLCK_SIZE[GGML_TYPE_COUNT] = { - [GGML_TYPE_F32] = 1, - [GGML_TYPE_F16] = 1, - [GGML_TYPE_Q4_0] = QK4_0, - [GGML_TYPE_Q4_1] = QK4_1, - [GGML_TYPE_Q5_0] = QK5_0, - [GGML_TYPE_Q5_1] = QK5_1, - [GGML_TYPE_Q8_0] = QK8_0, - [GGML_TYPE_Q8_1] = QK8_1, -#ifdef GGML_USE_K_QUANTS - [GGML_TYPE_Q2_K] = QK_K, - [GGML_TYPE_Q3_K] = QK_K, - [GGML_TYPE_Q4_K] = QK_K, - [GGML_TYPE_Q5_K] = QK_K, - [GGML_TYPE_Q6_K] = QK_K, - [GGML_TYPE_Q8_K] = QK_K, -#endif - [GGML_TYPE_I8] = 1, - [GGML_TYPE_I16] = 1, - [GGML_TYPE_I32] = 1, -}; -static_assert(GGML_TYPE_COUNT == 19, "GGML_BLCK_SIZE is outdated"); - -static const size_t GGML_TYPE_SIZE[GGML_TYPE_COUNT] = { - [GGML_TYPE_F32] = sizeof(float), - [GGML_TYPE_F16] = sizeof(ggml_fp16_t), - [GGML_TYPE_Q4_0] = sizeof(block_q4_0), - [GGML_TYPE_Q4_1] = sizeof(block_q4_1), - [GGML_TYPE_Q5_0] = sizeof(block_q5_0), - [GGML_TYPE_Q5_1] = sizeof(block_q5_1), - [GGML_TYPE_Q8_0] = sizeof(block_q8_0), - [GGML_TYPE_Q8_1] = sizeof(block_q8_1), -#ifdef GGML_USE_K_QUANTS - [GGML_TYPE_Q2_K] = sizeof(block_q2_K), - [GGML_TYPE_Q3_K] = sizeof(block_q3_K), - [GGML_TYPE_Q4_K] = sizeof(block_q4_K), - [GGML_TYPE_Q5_K] = sizeof(block_q5_K), - [GGML_TYPE_Q6_K] = sizeof(block_q6_K), - [GGML_TYPE_Q8_K] = sizeof(block_q8_K), -#endif - [GGML_TYPE_I8] = sizeof(int8_t), - [GGML_TYPE_I16] = sizeof(int16_t), - [GGML_TYPE_I32] = sizeof(int32_t), -}; -static_assert(GGML_TYPE_COUNT == 19, "GGML_TYPE_SIZE is outdated"); - - -static const char * GGML_TYPE_NAME[GGML_TYPE_COUNT] = { - [GGML_TYPE_F32] = "f32", - [GGML_TYPE_F16] = "f16", - [GGML_TYPE_Q4_0] = "q4_0", - [GGML_TYPE_Q4_1] = "q4_1", - [GGML_TYPE_Q5_0] = "q5_0", - [GGML_TYPE_Q5_1] = "q5_1", - [GGML_TYPE_Q8_0] = "q8_0", - [GGML_TYPE_Q8_1] = "q8_1", - [GGML_TYPE_Q2_K] = "q2_K", - [GGML_TYPE_Q3_K] = "q3_K", - [GGML_TYPE_Q4_K] = "q4_K", - [GGML_TYPE_Q5_K] = "q5_K", - [GGML_TYPE_Q6_K] = "q6_K", - [GGML_TYPE_Q8_K] = "q8_K", - [GGML_TYPE_I8] = "i8", - [GGML_TYPE_I16] = "i16", - [GGML_TYPE_I32] = "i32", -}; -static_assert(GGML_TYPE_COUNT == 19, "GGML_TYPE_NAME is outdated"); - -static bool GGML_IS_QUANTIZED[GGML_TYPE_COUNT] = { - [GGML_TYPE_F32] = false, - [GGML_TYPE_F16] = false, - [GGML_TYPE_Q4_0] = true, - [GGML_TYPE_Q4_1] = true, - [GGML_TYPE_Q5_0] = true, - [GGML_TYPE_Q5_1] = true, - [GGML_TYPE_Q8_0] = true, - [GGML_TYPE_Q8_1] = true, - [GGML_TYPE_Q2_K] = true, - [GGML_TYPE_Q3_K] = true, - [GGML_TYPE_Q4_K] = true, - [GGML_TYPE_Q5_K] = true, - [GGML_TYPE_Q6_K] = true, - [GGML_TYPE_Q8_K] = true, - [GGML_TYPE_I8] = false, - [GGML_TYPE_I16] = false, - [GGML_TYPE_I32] = false, -}; -static_assert(GGML_TYPE_COUNT == 19, "GGML_IS_QUANTIZED is outdated"); - static const char * GGML_OP_NAME[GGML_OP_COUNT] = { "NONE", @@ -3740,20 +3743,12 @@ static const char * GGML_OP_NAME[GGML_OP_COUNT] = { "ARGMAX", "REPEAT", "REPEAT_BACK", - "ABS", - "SGN", - "NEG", - "STEP", - "TANH", - "ELU", - "RELU", - "GELU", - "GELU_QUICK", - "SILU", + "CONCAT", "SILU_BACK", "NORM", "RMS_NORM", "RMS_NORM_BACK", + "GROUP_NORM", "MUL_MAT", "OUT_PROD", @@ -3779,16 +3774,28 @@ static const char * GGML_OP_NAME[GGML_OP_COUNT] = { "CLAMP", "CONV_1D", "CONV_2D", + "CONV_TRANSPOSE_2D", + "POOL_1D", + "POOL_2D", + "UPSCALE", "FLASH_ATTN", "FLASH_FF", "FLASH_ATTN_BACK", "WIN_PART", "WIN_UNPART", + "GET_REL_POS", + "ADD_REL_POS", + + "UNARY", "MAP_UNARY", "MAP_BINARY", + "MAP_CUSTOM1_F32", + "MAP_CUSTOM2_F32", + "MAP_CUSTOM3_F32", + "MAP_CUSTOM1", "MAP_CUSTOM2", "MAP_CUSTOM3", @@ -3797,7 +3804,7 @@ static const char * GGML_OP_NAME[GGML_OP_COUNT] = { "CROSS_ENTROPY_LOSS_BACK", }; -static_assert(GGML_OP_COUNT == 66, "GGML_OP_COUNT != 66"); +static_assert(GGML_OP_COUNT == 68, "GGML_OP_COUNT != 68"); static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "none", @@ -3818,20 +3825,12 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "argmax(x)", "repeat(x)", "repeat_back(x)", - "abs(x)", - "sgn(x)", - "-x", - "step(x)", - "tanh(x)", - "elu(x)", - "relu(x)", - "gelu(x)", - "gelu_quick(x)", - "silu(x)", + "concat(x, y)", "silu_back(x)", "norm(x)", "rms_norm(x)", "rms_norm_back(x)", + "group_norm(x)", "X*Y", "X*Y", @@ -3857,16 +3856,28 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "clamp(x)", "conv_1d(x)", "conv_2d(x)", + "conv_transpose_2d(x)", + "pool_1d(x)", + "pool_2d(x)", + "upscale(x)", "flash_attn(x)", "flash_ff(x)", "flash_attn_back(x)", "win_part(x)", "win_unpart(x)", + "get_rel_pos(x)", + "add_rel_pos(x)", + + "unary(x)", "f(x)", "f(x,y)", + "custom_f32(x)", + "custom_f32(x,y)", + "custom_f32(x,y,z)", + "custom(x)", "custom(x,y)", "custom(x,y,z)", @@ -3875,7 +3886,9 @@ static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = { "cross_entropy_loss_back(x,y)", }; -static_assert(GGML_OP_COUNT == 66, "GGML_OP_COUNT != 66"); +static_assert(GGML_OP_COUNT == 68, "GGML_OP_COUNT != 68"); + +static_assert(GGML_OP_POOL_COUNT == 2, "GGML_OP_POOL_COUNT != 2"); static_assert(sizeof(struct ggml_object)%GGML_MEM_ALIGN == 0, "ggml_object size must be a multiple of GGML_MEM_ALIGN"); static_assert(sizeof(struct ggml_tensor)%GGML_MEM_ALIGN == 0, "ggml_tensor size must be a multiple of GGML_MEM_ALIGN"); @@ -3903,8 +3916,10 @@ static void ggml_setup_op_has_task_pass(void) { p[GGML_OP_DIAG_MASK_ZERO ] = true; p[GGML_OP_CONV_1D ] = true; p[GGML_OP_CONV_2D ] = true; + p[GGML_OP_CONV_TRANSPOSE_2D ] = true; p[GGML_OP_FLASH_ATTN_BACK ] = true; p[GGML_OP_CROSS_ENTROPY_LOSS ] = true; + p[GGML_OP_ADD_REL_POS ] = true; } { // FINALIZE @@ -4061,8 +4076,8 @@ bool ggml_is_numa(void) { //////////////////////////////////////////////////////////////////////////////// void ggml_print_object(const struct ggml_object * obj) { - GGML_PRINT(" - ggml_object: offset = %zu, size = %zu, next = %p\n", - obj->offs, obj->size, (const void *) obj->next); + GGML_PRINT(" - ggml_object: type = %d, offset = %zu, size = %zu, next = %p\n", + obj->type, obj->offs, obj->size, (const void *) obj->next); } void ggml_print_objects(const struct ggml_context * ctx) { @@ -4100,37 +4115,49 @@ size_t ggml_nbytes(const struct ggml_tensor * tensor) { // // is enough, but just in case, adding the second part - return MAX(tensor->ne[3]*tensor->nb[3], (ggml_nelements(tensor)*GGML_TYPE_SIZE[tensor->type])/GGML_BLCK_SIZE[tensor->type]); + return MAX(tensor->ne[3]*tensor->nb[3], (ggml_nelements(tensor)*ggml_type_size(tensor->type))/ggml_blck_size(tensor->type)); +} + +size_t ggml_nbytes_pad(const struct ggml_tensor * tensor) { + return GGML_PAD(ggml_nbytes(tensor), GGML_MEM_ALIGN); } size_t ggml_nbytes_split(const struct ggml_tensor * tensor, int nrows_split) { static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - return (nrows_split*tensor->ne[0]*GGML_TYPE_SIZE[tensor->type])/GGML_BLCK_SIZE[tensor->type]; + return (nrows_split*tensor->ne[0]*ggml_type_size(tensor->type))/ggml_blck_size(tensor->type); } int ggml_blck_size(enum ggml_type type) { - return GGML_BLCK_SIZE[type]; + return type_traits[type].blck_size; } size_t ggml_type_size(enum ggml_type type) { - return GGML_TYPE_SIZE[type]; + return type_traits[type].type_size; } float ggml_type_sizef(enum ggml_type type) { - return ((float)(GGML_TYPE_SIZE[type]))/GGML_BLCK_SIZE[type]; + return ((float)(type_traits[type].type_size))/type_traits[type].blck_size; } const char * ggml_type_name(enum ggml_type type) { - return GGML_TYPE_NAME[type]; + return type_traits[type].type_name; +} + +bool ggml_is_quantized(enum ggml_type type) { + return type_traits[type].is_quantized; } const char * ggml_op_name(enum ggml_op op) { return GGML_OP_NAME[op]; } +const char * ggml_op_symbol(enum ggml_op op) { + return GGML_OP_SYMBOL[op]; +} + size_t ggml_element_size(const struct ggml_tensor * tensor) { - return GGML_TYPE_SIZE[tensor->type]; + return ggml_type_size(tensor->type); } static inline bool ggml_is_scalar(const struct ggml_tensor * tensor) { @@ -4154,10 +4181,9 @@ static inline bool ggml_is_matrix(const struct ggml_tensor * tensor) { static inline bool ggml_can_mul_mat(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - return - (t0->ne[0] == t1->ne[0]) && - (t0->ne[2] == t1->ne[2]) && - (t0->ne[3] == t1->ne[3]); + return (t0->ne[0] == t1->ne[0]) && + (t1->ne[2]%t0->ne[2] == 0) && // verify t0 is broadcastable + (t1->ne[3]%t0->ne[3] == 0); } static inline bool ggml_can_out_prod(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { @@ -4169,10 +4195,6 @@ static inline bool ggml_can_out_prod(const struct ggml_tensor * t0, const struct (t0->ne[3] == t1->ne[3]); } -bool ggml_is_quantized(enum ggml_type type) { - return GGML_IS_QUANTIZED[type]; -} - enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype) { enum ggml_type wtype = GGML_TYPE_COUNT; @@ -4199,7 +4221,7 @@ enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype) { } size_t ggml_tensor_overhead(void) { - return GGML_OBJECT_SIZE + GGML_TENSOR_SIZE + 16; + return GGML_OBJECT_SIZE + GGML_TENSOR_SIZE; } bool ggml_is_transposed(const struct ggml_tensor * tensor) { @@ -4210,8 +4232,17 @@ bool ggml_is_contiguous(const struct ggml_tensor * tensor) { static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); return - tensor->nb[0] == GGML_TYPE_SIZE[tensor->type] && - tensor->nb[1] == (tensor->nb[0]*tensor->ne[0])/GGML_BLCK_SIZE[tensor->type] && + tensor->nb[0] == ggml_type_size(tensor->type) && + tensor->nb[1] == (tensor->nb[0]*tensor->ne[0])/ggml_blck_size(tensor->type) && + tensor->nb[2] == tensor->nb[1]*tensor->ne[1] && + tensor->nb[3] == tensor->nb[2]*tensor->ne[2]; +} + +static inline bool ggml_is_contiguous_except_dim_1(const struct ggml_tensor * tensor) { + static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); + + return + tensor->nb[0] == ggml_type_size(tensor->type) && tensor->nb[2] == tensor->nb[1]*tensor->ne[1] && tensor->nb[3] == tensor->nb[2]*tensor->ne[2]; } @@ -4226,12 +4257,12 @@ static inline bool ggml_is_padded_1d(const struct ggml_tensor * tensor) { static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); return - tensor->nb[0] == GGML_TYPE_SIZE[tensor->type] && + tensor->nb[0] == ggml_type_size(tensor->type) && tensor->nb[2] == tensor->nb[1]*tensor->ne[1] && tensor->nb[3] == tensor->nb[2]*tensor->ne[2]; } -static inline bool ggml_are_same_shape(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { +bool ggml_are_same_shape(const struct ggml_tensor * t0, const struct ggml_tensor * t1) { static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); return @@ -4361,7 +4392,7 @@ struct ggml_context * ggml_init(struct ggml_init_params params) { return NULL; } - const size_t mem_size = (params.mem_size + GGML_MEM_ALIGN - 1) & ~(GGML_MEM_ALIGN - 1); + const size_t mem_size = params.mem_buffer ? params.mem_size : GGML_PAD(params.mem_size, GGML_MEM_ALIGN); *ctx = (struct ggml_context) { /*.mem_size =*/ mem_size, @@ -4397,8 +4428,8 @@ void ggml_free(struct ggml_context * ctx) { if (&g_state.contexts[i].context == ctx) { g_state.contexts[i].used = false; - GGML_PRINT_DEBUG("%s: context %d with %d objects has been freed. memory used = %zu\n", - __func__, i, ctx->n_objects, ctx->objects_end->offs + ctx->objects_end->size); + GGML_PRINT_DEBUG("%s: context %d has been freed. memory used = %zu\n", + __func__, i, ggml_used_mem(ctx)); if (ctx->mem_buffer_owned) { GGML_ALIGNED_FREE(ctx->mem_buffer); @@ -4428,6 +4459,10 @@ size_t ggml_set_scratch(struct ggml_context * ctx, struct ggml_scratch scratch) return result; } +bool ggml_get_no_alloc(struct ggml_context * ctx) { + return ctx->no_alloc; +} + void ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc) { ctx->no_alloc = no_alloc; } @@ -4446,12 +4481,14 @@ size_t ggml_get_max_tensor_size(const struct ggml_context * ctx) { struct ggml_object * obj = ctx->objects_begin; while (obj != NULL) { - struct ggml_tensor * tensor = (struct ggml_tensor *) ((char *) ctx->mem_buffer + obj->offs); + if (obj->type == GGML_OBJECT_TENSOR) { + struct ggml_tensor * tensor = (struct ggml_tensor *) ((char *) ctx->mem_buffer + obj->offs); - const size_t size = ggml_nbytes(tensor); + const size_t size = ggml_nbytes(tensor); - if (max_size < size) { - max_size = size; + if (max_size < size) { + max_size = size; + } } obj = obj->next; @@ -4465,7 +4502,7 @@ size_t ggml_get_max_tensor_size(const struct ggml_context * ctx) { // this is an error prone process, but it is necessary to support inplace // operators when using scratch buffers // TODO: implement a better way -void ggml_scratch_save(struct ggml_context * ctx) { +static void ggml_scratch_save(struct ggml_context * ctx) { // this is needed to allow opt tensors to store their data // TODO: again, need to find a better way ctx->no_alloc_save = ctx->no_alloc; @@ -4475,7 +4512,7 @@ void ggml_scratch_save(struct ggml_context * ctx) { ctx->scratch.data = NULL; } -void ggml_scratch_load(struct ggml_context * ctx) { +static void ggml_scratch_load(struct ggml_context * ctx) { ctx->no_alloc = ctx->no_alloc_save; ctx->scratch = ctx->scratch_save; @@ -4483,12 +4520,7 @@ void ggml_scratch_load(struct ggml_context * ctx) { //////////////////////////////////////////////////////////////////////////////// -struct ggml_tensor * ggml_new_tensor_impl( - struct ggml_context * ctx, - enum ggml_type type, - int n_dims, - const int64_t* ne, - void* data) { +static struct ggml_object * ggml_new_object(struct ggml_context * ctx, enum ggml_object_type type, size_t size) { // always insert objects at the end of the context's memory pool struct ggml_object * obj_cur = ctx->objects_end; @@ -4496,63 +4528,28 @@ struct ggml_tensor * ggml_new_tensor_impl( const size_t cur_size = obj_cur == NULL ? 0 : obj_cur->size; const size_t cur_end = cur_offs + cur_size; - size_t size_needed = 0; - - if (data == NULL && !ctx->no_alloc) { - size_needed += GGML_TYPE_SIZE[type]*(ne[0]/GGML_BLCK_SIZE[type]); - for (int i = 1; i < n_dims; i++) { - size_needed *= ne[i]; - } - // align to GGML_MEM_ALIGN - size_needed = ((size_needed + GGML_MEM_ALIGN - 1)/GGML_MEM_ALIGN)*GGML_MEM_ALIGN; - } + // align to GGML_MEM_ALIGN + size_t size_needed = GGML_PAD(size, GGML_MEM_ALIGN); char * const mem_buffer = ctx->mem_buffer; struct ggml_object * const obj_new = (struct ggml_object *)(mem_buffer + cur_end); - if (ctx->scratch.data == NULL || data != NULL) { - size_needed += GGML_TENSOR_SIZE; - - if (cur_end + size_needed + GGML_OBJECT_SIZE > ctx->mem_size) { - GGML_PRINT("%s: not enough space in the context's memory pool (needed %zu, available %zu)\n", - __func__, cur_end + size_needed + GGML_OBJECT_SIZE, ctx->mem_size); - assert(false); - return NULL; - } - - *obj_new = (struct ggml_object) { - .offs = cur_end + GGML_OBJECT_SIZE, - .size = size_needed, - .next = NULL, - }; - } else { - if (ctx->scratch.offs + size_needed > ctx->scratch.size) { - GGML_PRINT("%s: not enough space in the scratch memory pool (needed %zu, available %zu)\n", - __func__, ctx->scratch.offs + size_needed, ctx->scratch.size); - assert(false); - return NULL; - } - - if (cur_end + GGML_TENSOR_SIZE + GGML_OBJECT_SIZE > ctx->mem_size) { - GGML_PRINT("%s: not enough space in the context's memory pool (needed %zu, available %zu)\n", - __func__, cur_end + GGML_TENSOR_SIZE + GGML_OBJECT_SIZE, ctx->mem_size); - assert(false); - return NULL; - } - - data = (char * const) ctx->scratch.data + ctx->scratch.offs; - - *obj_new = (struct ggml_object) { - .offs = cur_end + GGML_OBJECT_SIZE, - .size = GGML_TENSOR_SIZE, - .next = NULL, - }; - - //printf("scratch offs = %zu, size_needed = %zu\n", ctx->scratch.offs, size_needed); - - ctx->scratch.offs += size_needed; + if (cur_end + size_needed + GGML_OBJECT_SIZE > ctx->mem_size) { + GGML_PRINT("%s: not enough space in the context's memory pool (needed %zu, available %zu)\n", + __func__, cur_end + size_needed, ctx->mem_size); + assert(false); + return NULL; } + *obj_new = (struct ggml_object) { + .offs = cur_end + GGML_OBJECT_SIZE, + .size = size_needed, + .next = NULL, + .type = type, + }; + + ggml_assert_aligned(mem_buffer + obj_new->offs); + if (obj_cur != NULL) { obj_cur->next = obj_new; } else { @@ -4564,9 +4561,48 @@ struct ggml_tensor * ggml_new_tensor_impl( //printf("%s: inserted new object at %zu, size = %zu\n", __func__, cur_end, obj_new->size); - struct ggml_tensor * const result = (struct ggml_tensor *)(mem_buffer + obj_new->offs); + return obj_new; +} - ggml_assert_aligned(result); +static struct ggml_tensor * ggml_new_tensor_impl( + struct ggml_context * ctx, + enum ggml_type type, + int n_dims, + const int64_t * ne, + void * data) { + + assert(n_dims >= 1 && n_dims <= GGML_MAX_DIMS); + + size_t data_size = 0; + + if (data == NULL && !ctx->no_alloc) { + data_size += ggml_type_size(type)*(ne[0]/ggml_blck_size(type)); + for (int i = 1; i < n_dims; i++) { + data_size *= ne[i]; + } + } + + if (ctx->scratch.data != NULL && data == NULL) { + // allocate tensor data in the scratch buffer + if (ctx->scratch.offs + data_size > ctx->scratch.size) { + GGML_PRINT("%s: not enough space in the scratch memory pool (needed %zu, available %zu)\n", + __func__, ctx->scratch.offs + data_size, ctx->scratch.size); + assert(false); + return NULL; + } + + data = (char * const) ctx->scratch.data + ctx->scratch.offs; + + ctx->scratch.offs += data_size; + + data_size = 0; + } + + struct ggml_object * const obj_new = ggml_new_object(ctx, GGML_OBJECT_TENSOR, GGML_TENSOR_SIZE + data_size); + + // TODO: for recoverable errors, we would need to free the data allocated from the scratch buffer here + + struct ggml_tensor * const result = (struct ggml_tensor *)((char *)ctx->mem_buffer + obj_new->offs); *result = (struct ggml_tensor) { /*.type =*/ type, @@ -4575,19 +4611,17 @@ struct ggml_tensor * ggml_new_tensor_impl( /*.ne =*/ { 1, 1, 1, 1 }, /*.nb =*/ { 0, 0, 0, 0 }, /*.op =*/ GGML_OP_NONE, + /*.op_params =*/ { 0 }, /*.is_param =*/ false, /*.grad =*/ NULL, - /*.src0 =*/ NULL, - /*.src1 =*/ NULL, - /*.opt =*/ { NULL }, - /*.n_tasks =*/ 0, + /*.src =*/ { NULL }, /*.perf_runs =*/ 0, /*.perf_cycles =*/ 0, /*.perf_time_us =*/ 0, /*.data =*/ (data == NULL && !ctx->no_alloc) ? (void *)(result + 1) : data, /*.name =*/ { 0 }, /*.extra =*/ NULL, - /*.pad =*/ { 0 }, + /*.padding =*/ { 0 }, }; // TODO: this should not be needed as long as we don't rely on aligned SIMD loads @@ -4597,8 +4631,8 @@ struct ggml_tensor * ggml_new_tensor_impl( result->ne[i] = ne[i]; } - result->nb[0] = GGML_TYPE_SIZE[type]; - result->nb[1] = result->nb[0]*(result->ne[0]/GGML_BLCK_SIZE[type]); + result->nb[0] = ggml_type_size(type); + result->nb[1] = result->nb[0]*(result->ne[0]/ggml_blck_size(type)); for (int i = 2; i < GGML_MAX_DIMS; i++) { result->nb[i] = result->nb[i - 1]*result->ne[i - 1]; } @@ -4608,24 +4642,40 @@ struct ggml_tensor * ggml_new_tensor_impl( return result; } +static void ggml_set_op_params(struct ggml_tensor * tensor, const void * params, size_t params_size) { + GGML_ASSERT(tensor != NULL); // silence -Warray-bounds warnings + assert(params_size <= GGML_MAX_OP_PARAMS); + memcpy(tensor->op_params, params, params_size); +} + +static int32_t ggml_get_op_params_i32(const struct ggml_tensor * tensor, uint32_t i) { + assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t)); + return ((const int32_t *)(tensor->op_params))[i]; +} + +static void ggml_set_op_params_i32(struct ggml_tensor * tensor, uint32_t i, int32_t value) { + assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t)); + ((int32_t *)(tensor->op_params))[i] = value; +} + struct ggml_tensor * ggml_new_tensor( struct ggml_context * ctx, - enum ggml_type type, - int n_dims, - const int64_t * ne) { + enum ggml_type type, + int n_dims, + const int64_t * ne) { return ggml_new_tensor_impl(ctx, type, n_dims, ne, NULL); } struct ggml_tensor * ggml_new_tensor_1d( struct ggml_context * ctx, - enum ggml_type type, + enum ggml_type type, int64_t ne0) { return ggml_new_tensor(ctx, type, 1, &ne0); } struct ggml_tensor * ggml_new_tensor_2d( struct ggml_context * ctx, - enum ggml_type type, + enum ggml_type type, int64_t ne0, int64_t ne1) { const int64_t ne[2] = { ne0, ne1 }; @@ -4634,7 +4684,7 @@ struct ggml_tensor * ggml_new_tensor_2d( struct ggml_tensor * ggml_new_tensor_3d( struct ggml_context * ctx, - enum ggml_type type, + enum ggml_type type, int64_t ne0, int64_t ne1, int64_t ne2) { @@ -4719,7 +4769,7 @@ struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value) { { assert(tensor->nb[0] == sizeof(ggml_fp16_t)); for (int i = 0; i < n; i++) { - ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), value); + ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), GGML_FP32_TO_FP16(value)); } } break; case GGML_TYPE_F32: @@ -4771,7 +4821,7 @@ struct ggml_tensor * ggml_set_f32(struct ggml_tensor * tensor, float value) { { assert(tensor->nb[0] == sizeof(ggml_fp16_t)); for (int i = 0; i < n; i++) { - ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), value); + ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), GGML_FP32_TO_FP16(value)); } } break; case GGML_TYPE_F32: @@ -4939,6 +4989,11 @@ float * ggml_get_data_f32(const struct ggml_tensor * tensor) { return (float *)(tensor->data); } +enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor) { + GGML_ASSERT(tensor->op == GGML_OP_UNARY); + return (enum ggml_unary_op) ggml_get_op_params_i32(tensor, 0); +} + const char * ggml_get_name(const struct ggml_tensor * tensor) { return tensor->name; } @@ -4984,9 +5039,11 @@ struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * nam char * const mem_buffer = ctx->mem_buffer; while (obj != NULL) { - struct ggml_tensor * cur = (struct ggml_tensor *)(mem_buffer + obj->offs); - if (strcmp(cur->name, name) == 0) { - return cur; + if (obj->type == GGML_OBJECT_TENSOR) { + struct ggml_tensor * cur = (struct ggml_tensor *)(mem_buffer + obj->offs); + if (strcmp(cur->name, name) == 0) { + return cur; + } } obj = obj->next; @@ -4999,7 +5056,7 @@ struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * nam // ggml_dup -struct ggml_tensor * ggml_dup_impl( +static struct ggml_tensor * ggml_dup_impl( struct ggml_context * ctx, struct ggml_tensor * a, bool inplace) { @@ -5013,8 +5070,7 @@ struct ggml_tensor * ggml_dup_impl( result->op = GGML_OP_DUP; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -5033,16 +5089,20 @@ struct ggml_tensor * ggml_dup_inplace( // ggml_add -struct ggml_tensor * ggml_add_impl( +static struct ggml_tensor * ggml_add_impl( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, bool inplace) { - GGML_ASSERT(ggml_are_same_shape(a, b)); + // TODO: support less-strict constraint + // GGML_ASSERT(ggml_can_repeat(b, a)); + GGML_ASSERT(ggml_can_repeat_rows(b, a)); bool is_node = false; - if (a->grad || b->grad) { + if (!inplace && (a->grad || b->grad)) { + // TODO: support backward pass for broadcasting + GGML_ASSERT(ggml_are_same_shape(a, b)); is_node = true; } @@ -5050,8 +5110,8 @@ struct ggml_tensor * ggml_add_impl( result->op = GGML_OP_ADD; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -5072,7 +5132,7 @@ struct ggml_tensor * ggml_add_inplace( // ggml_add1 -struct ggml_tensor * ggml_add1_impl( +static struct ggml_tensor * ggml_add1_impl( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -5090,8 +5150,8 @@ struct ggml_tensor * ggml_add1_impl( result->op = GGML_OP_ADD1; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -5112,7 +5172,7 @@ struct ggml_tensor * ggml_add1_inplace( // ggml_acc -struct ggml_tensor * ggml_acc_impl( +static struct ggml_tensor * ggml_acc_impl( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -5134,23 +5194,13 @@ struct ggml_tensor * ggml_acc_impl( struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); - - struct ggml_tensor * c = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 5); - - ((int32_t *) c->data)[0] = nb1; - ((int32_t *) c->data)[1] = nb2; - ((int32_t *) c->data)[2] = nb3; - ((int32_t *) c->data)[3] = offset; - ((int32_t *) c->data)[4] = inplace ? 1 : 0; - - ggml_scratch_load(ctx); + int32_t params[] = { nb1, nb2, nb3, offset, inplace ? 1 : 0 }; + ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_ACC; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; - result->opt[0] = c; + result->src[0] = a; + result->src[1] = b; return result; } @@ -5179,7 +5229,7 @@ struct ggml_tensor * ggml_acc_inplace( // ggml_sub -struct ggml_tensor * ggml_sub_impl( +static struct ggml_tensor * ggml_sub_impl( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -5196,8 +5246,8 @@ struct ggml_tensor * ggml_sub_impl( result->op = GGML_OP_SUB; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -5218,7 +5268,7 @@ struct ggml_tensor * ggml_sub_inplace( // ggml_mul -struct ggml_tensor * ggml_mul_impl( +static struct ggml_tensor * ggml_mul_impl( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -5243,8 +5293,8 @@ struct ggml_tensor * ggml_mul_impl( result->op = GGML_OP_MUL; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -5265,7 +5315,7 @@ struct ggml_tensor * ggml_mul_inplace( // ggml_div -struct ggml_tensor * ggml_div_impl( +static struct ggml_tensor * ggml_div_impl( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -5286,8 +5336,8 @@ struct ggml_tensor * ggml_div_impl( result->op = GGML_OP_DIV; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -5308,7 +5358,7 @@ struct ggml_tensor * ggml_div_inplace( // ggml_sqr -struct ggml_tensor * ggml_sqr_impl( +static struct ggml_tensor * ggml_sqr_impl( struct ggml_context * ctx, struct ggml_tensor * a, bool inplace) { @@ -5322,8 +5372,7 @@ struct ggml_tensor * ggml_sqr_impl( result->op = GGML_OP_SQR; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -5342,7 +5391,7 @@ struct ggml_tensor * ggml_sqr_inplace( // ggml_sqrt -struct ggml_tensor * ggml_sqrt_impl( +static struct ggml_tensor * ggml_sqrt_impl( struct ggml_context * ctx, struct ggml_tensor * a, bool inplace) { @@ -5356,8 +5405,7 @@ struct ggml_tensor * ggml_sqrt_impl( result->op = GGML_OP_SQRT; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -5377,7 +5425,7 @@ struct ggml_tensor * ggml_sqrt_inplace( // ggml_log -struct ggml_tensor * ggml_log_impl( +static struct ggml_tensor * ggml_log_impl( struct ggml_context * ctx, struct ggml_tensor * a, bool inplace) { @@ -5391,8 +5439,7 @@ struct ggml_tensor * ggml_log_impl( result->op = GGML_OP_LOG; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -5424,8 +5471,7 @@ struct ggml_tensor * ggml_sum( result->op = GGML_OP_SUM; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -5451,8 +5497,7 @@ struct ggml_tensor * ggml_sum_rows( result->op = GGML_OP_SUM_ROWS; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -5474,8 +5519,7 @@ struct ggml_tensor * ggml_mean( result->op = GGML_OP_MEAN; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -5498,8 +5542,7 @@ struct ggml_tensor * ggml_argmax( result->op = GGML_OP_ARGMAX; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -5518,16 +5561,12 @@ struct ggml_tensor * ggml_repeat( is_node = true; } - if (ggml_are_same_shape(a, b) && !is_node) { - return a; - } - struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, b->n_dims, b->ne); result->op = GGML_OP_REPEAT; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -5554,351 +5593,174 @@ struct ggml_tensor * ggml_repeat_back( result->op = GGML_OP_REPEAT_BACK; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; + + return result; +} + +// ggml_concat + +struct ggml_tensor* ggml_concat( + struct ggml_context* ctx, + struct ggml_tensor* a, + struct ggml_tensor* b) { + GGML_ASSERT(a->ne[0] == b->ne[0] && a->ne[1] == b->ne[1] && a->ne[3] == b->ne[3]); + + bool is_node = false; + + if (a->grad || b->grad) { + is_node = true; + } + + struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type, a->ne[0], a->ne[1], a->ne[2] + b->ne[2], a->ne[3]); + + result->op = GGML_OP_CONCAT; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + result->src[1] = b; return result; } // ggml_abs -struct ggml_tensor * ggml_abs_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_ABS; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - - return result; -} - struct ggml_tensor * ggml_abs( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_abs_impl(ctx, a, false); + return ggml_unary(ctx, a, GGML_UNARY_OP_ABS); } struct ggml_tensor * ggml_abs_inplace( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_abs_impl(ctx, a, true); + return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_ABS); } - // ggml_sgn -struct ggml_tensor * ggml_sgn_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_SGN; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - - return result; -} - struct ggml_tensor * ggml_sgn( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_sgn_impl(ctx, a, false); + return ggml_unary(ctx, a, GGML_UNARY_OP_SGN); } struct ggml_tensor * ggml_sgn_inplace( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_sgn_impl(ctx, a, true); + return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_SGN); } // ggml_neg -struct ggml_tensor * ggml_neg_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_NEG; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - - return result; -} - struct ggml_tensor * ggml_neg( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_neg_impl(ctx, a, false); + return ggml_unary(ctx, a, GGML_UNARY_OP_NEG); } struct ggml_tensor * ggml_neg_inplace( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_neg_impl(ctx, a, true); + return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_NEG); } // ggml_step -struct ggml_tensor * ggml_step_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_STEP; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - - return result; -} - struct ggml_tensor * ggml_step( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_step_impl(ctx, a, false); + return ggml_unary(ctx, a, GGML_UNARY_OP_STEP); } struct ggml_tensor * ggml_step_inplace( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_step_impl(ctx, a, true); + return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_STEP); } // ggml_tanh -struct ggml_tensor * ggml_tanh_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_TANH; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - - return result; -} - struct ggml_tensor * ggml_tanh( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_tanh_impl(ctx, a, false); + return ggml_unary(ctx, a, GGML_UNARY_OP_TANH); } struct ggml_tensor * ggml_tanh_inplace( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_tanh_impl(ctx, a, true); + return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_TANH); } // ggml_elu -struct ggml_tensor * ggml_elu_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_ELU; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - - return result; -} - struct ggml_tensor * ggml_elu( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_elu_impl(ctx, a, false); + return ggml_unary(ctx, a, GGML_UNARY_OP_ELU); } struct ggml_tensor * ggml_elu_inplace( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_elu_impl(ctx, a, true); + return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_ELU); } // ggml_relu -struct ggml_tensor * ggml_relu_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_RELU; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - - return result; -} - struct ggml_tensor * ggml_relu( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_relu_impl(ctx, a, false); + return ggml_unary(ctx, a, GGML_UNARY_OP_RELU); } struct ggml_tensor * ggml_relu_inplace( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_relu_impl(ctx, a, true); + return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_RELU); } // ggml_gelu -struct ggml_tensor * ggml_gelu_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_GELU; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - - return result; -} - struct ggml_tensor * ggml_gelu( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_gelu_impl(ctx, a, false); + return ggml_unary(ctx, a, GGML_UNARY_OP_GELU); } struct ggml_tensor * ggml_gelu_inplace( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_gelu_impl(ctx, a, true); + return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_GELU); } // ggml_gelu_quick -struct ggml_tensor * ggml_gelu_quick_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_GELU_QUICK; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - - return result; -} - struct ggml_tensor * ggml_gelu_quick( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_gelu_quick_impl(ctx, a, false); + return ggml_unary(ctx, a, GGML_UNARY_OP_GELU_QUICK); } struct ggml_tensor * ggml_gelu_quick_inplace( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_gelu_quick_impl(ctx, a, true); + return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_GELU_QUICK); } // ggml_silu -struct ggml_tensor * ggml_silu_impl( - struct ggml_context * ctx, - struct ggml_tensor * a, - bool inplace) { - bool is_node = false; - - if (!inplace && (a->grad)) { - is_node = true; - } - - struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - - result->op = GGML_OP_SILU; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - - return result; -} - struct ggml_tensor * ggml_silu( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_silu_impl(ctx, a, false); + return ggml_unary(ctx, a, GGML_UNARY_OP_SILU); } struct ggml_tensor * ggml_silu_inplace( struct ggml_context * ctx, struct ggml_tensor * a) { - return ggml_silu_impl(ctx, a, true); + return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_SILU); } // ggml_silu_back @@ -5918,17 +5780,18 @@ struct ggml_tensor * ggml_silu_back( result->op = GGML_OP_SILU_BACK; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } // ggml_norm -struct ggml_tensor * ggml_norm_impl( +static struct ggml_tensor * ggml_norm_impl( struct ggml_context * ctx, struct ggml_tensor * a, + float eps, bool inplace) { bool is_node = false; @@ -5939,29 +5802,35 @@ struct ggml_tensor * ggml_norm_impl( struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + ggml_set_op_params(result, &eps, sizeof(eps)); + result->op = GGML_OP_NORM; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; // TODO: maybe store epsilon here? + result->src[0] = a; return result; } struct ggml_tensor * ggml_norm( struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_norm_impl(ctx, a, false); + struct ggml_tensor * a, + float eps) { + return ggml_norm_impl(ctx, a, eps, false); } struct ggml_tensor * ggml_norm_inplace( struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_norm_impl(ctx, a, true); + struct ggml_tensor * a, + float eps) { + return ggml_norm_impl(ctx, a, eps, true); } -struct ggml_tensor * ggml_rms_norm_impl( +// ggml_rms_norm + +static struct ggml_tensor * ggml_rms_norm_impl( struct ggml_context * ctx, struct ggml_tensor * a, + float eps, bool inplace) { bool is_node = false; @@ -5971,26 +5840,31 @@ struct ggml_tensor * ggml_rms_norm_impl( struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + ggml_set_op_params(result, &eps, sizeof(eps)); + result->op = GGML_OP_RMS_NORM; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; // TODO: maybe store epsilon here? + result->src[0] = a; return result; } struct ggml_tensor * ggml_rms_norm( struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_rms_norm_impl(ctx, a, false); + struct ggml_tensor * a, + float eps) { + return ggml_rms_norm_impl(ctx, a, eps, false); } struct ggml_tensor * ggml_rms_norm_inplace( struct ggml_context * ctx, - struct ggml_tensor * a) { - return ggml_rms_norm_impl(ctx, a, true); + struct ggml_tensor * a, + float eps) { + return ggml_rms_norm_impl(ctx, a, eps, true); } +// ggml_rms_norm_back + struct ggml_tensor * ggml_rms_norm_back( struct ggml_context * ctx, struct ggml_tensor * a, @@ -6006,12 +5880,50 @@ struct ggml_tensor * ggml_rms_norm_back( result->op = GGML_OP_RMS_NORM_BACK; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } +// ggml_group_norm + +static struct ggml_tensor * ggml_group_norm_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups, + bool inplace) { + + bool is_node = false; + if (!inplace && (a->grad)) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + result->op = GGML_OP_GROUP_NORM; + result->op_params[0] = n_groups; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + result->src[1] = NULL; // TODO: maybe store epsilon here? + + return result; +} + +struct ggml_tensor * ggml_group_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups) { + return ggml_group_norm_impl(ctx, a, n_groups, false); +} + +struct ggml_tensor * ggml_group_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups) { + return ggml_group_norm_impl(ctx, a, n_groups, true); +} // ggml_mul_mat @@ -6028,13 +5940,13 @@ struct ggml_tensor * ggml_mul_mat( is_node = true; } - const int64_t ne[4] = { a->ne[1], b->ne[1], a->ne[2], b->ne[3] }; - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, MIN(a->n_dims, b->n_dims), ne); + const int64_t ne[4] = { a->ne[1], b->ne[1], b->ne[2], b->ne[3] }; + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, MAX(a->n_dims, b->n_dims), ne); result->op = GGML_OP_MUL_MAT; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -6059,15 +5971,15 @@ struct ggml_tensor * ggml_out_prod( result->op = GGML_OP_OUT_PROD; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } // ggml_scale -struct ggml_tensor * ggml_scale_impl( +static struct ggml_tensor * ggml_scale_impl( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -6085,8 +5997,8 @@ struct ggml_tensor * ggml_scale_impl( result->op = GGML_OP_SCALE; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -6107,7 +6019,7 @@ struct ggml_tensor * ggml_scale_inplace( // ggml_set -struct ggml_tensor * ggml_set_impl( +static struct ggml_tensor * ggml_set_impl( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -6127,23 +6039,13 @@ struct ggml_tensor * ggml_set_impl( // make a view of the destination struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); - - struct ggml_tensor * c = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 5); - - (( int32_t * ) c->data)[0] = nb1; - (( int32_t * ) c->data)[1] = nb2; - (( int32_t * ) c->data)[2] = nb3; - (( int32_t * ) c->data)[3] = offset; - (( int32_t * ) c->data)[4] = inplace ? 1 : 0; - - ggml_scratch_load(ctx); + int32_t params[] = { nb1, nb2, nb3, offset, inplace ? 1 : 0 }; + ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_SET; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; - result->opt[0] = c; + result->src[0] = a; + result->src[1] = b; return result; } @@ -6207,7 +6109,7 @@ struct ggml_tensor * ggml_set_2d_inplace( // ggml_cpy -struct ggml_tensor * ggml_cpy_impl( +static struct ggml_tensor * ggml_cpy_impl( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -6230,8 +6132,8 @@ struct ggml_tensor * ggml_cpy_impl( result->op = GGML_OP_CPY; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -6252,7 +6154,7 @@ struct ggml_tensor * ggml_cpy_inplace( // ggml_cont -struct ggml_tensor * ggml_cont_impl( +static struct ggml_tensor * ggml_cont_impl( struct ggml_context * ctx, struct ggml_tensor * a, bool inplace) { @@ -6267,8 +6169,7 @@ struct ggml_tensor * ggml_cont_impl( result->op = GGML_OP_CONT; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -6311,8 +6212,7 @@ struct ggml_tensor * ggml_reshape( result->op = GGML_OP_RESHAPE; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -6336,8 +6236,7 @@ struct ggml_tensor * ggml_reshape_1d( result->op = GGML_OP_RESHAPE; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -6362,8 +6261,7 @@ struct ggml_tensor * ggml_reshape_2d( result->op = GGML_OP_RESHAPE; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -6389,8 +6287,7 @@ struct ggml_tensor * ggml_reshape_3d( result->op = GGML_OP_RESHAPE; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -6418,14 +6315,34 @@ struct ggml_tensor * ggml_reshape_4d( result->op = GGML_OP_RESHAPE; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } // ggml_view_1d +static struct ggml_tensor * ggml_view_tensor_offset( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_dims, + const int64_t * ne, + size_t offset) { + // don't calculate an offset from an unallocated tensor + void * data = NULL; + if (a->data != NULL) { + data = (char *) a->data + offset; + } + + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, n_dims, ne, data); + + ggml_format_name(result, "%s (view)", a->name); + + ggml_set_op_params(result, &offset, sizeof(offset)); + + return result; +} + struct ggml_tensor * ggml_view_1d( struct ggml_context * ctx, struct ggml_tensor * a, @@ -6438,22 +6355,11 @@ struct ggml_tensor * ggml_view_1d( is_node = true; } - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 1, &ne0, (char *) a->data + offset); - ggml_format_name(result, "%s (view)", a->name); - - ggml_scratch_save(ctx); - - struct ggml_tensor * offs = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2); - ggml_set_name(offs, "offset"); - memcpy(offs->data, &offset, 2*sizeof(int32_t)); - - ggml_scratch_load(ctx); + struct ggml_tensor * result = ggml_view_tensor_offset(ctx, a, 1, &ne0, offset); result->op = GGML_OP_VIEW; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - result->opt[0] = offs; + result->src[0] = a; return result; } @@ -6476,16 +6382,7 @@ struct ggml_tensor * ggml_view_2d( const int64_t ne[GGML_MAX_DIMS] = { ne0, ne1, 1, 1 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 2, ne, (char *) a->data + offset); - ggml_format_name(result, "%s (view)", a->name); - - ggml_scratch_save(ctx); - - struct ggml_tensor * offs = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2); - ggml_set_name(offs, "offset"); - memcpy(offs->data, &offset, 2*sizeof(int32_t)); - - ggml_scratch_load(ctx); + struct ggml_tensor * result = ggml_view_tensor_offset(ctx, a, 2, ne, offset); result->nb[1] = nb1; result->nb[2] = result->nb[1]*ne1; @@ -6493,9 +6390,7 @@ struct ggml_tensor * ggml_view_2d( result->op = GGML_OP_VIEW; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - result->opt[0] = offs; + result->src[0] = a; return result; } @@ -6520,16 +6415,7 @@ struct ggml_tensor * ggml_view_3d( const int64_t ne[GGML_MAX_DIMS] = { ne0, ne1, ne2, 1 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, (char *) a->data + offset); - ggml_format_name(result, "%s (view)", a->name); - - ggml_scratch_save(ctx); - - struct ggml_tensor * offs = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2); - ggml_set_name(offs, "offset"); - memcpy(offs->data, &offset, 2*sizeof(int32_t)); - - ggml_scratch_load(ctx); + struct ggml_tensor * result = ggml_view_tensor_offset(ctx, a, 3, ne, offset); result->nb[1] = nb1; result->nb[2] = nb2; @@ -6537,9 +6423,7 @@ struct ggml_tensor * ggml_view_3d( result->op = GGML_OP_VIEW; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - result->opt[0] = offs; + result->src[0] = a; return result; } @@ -6566,16 +6450,7 @@ struct ggml_tensor * ggml_view_4d( const int64_t ne[GGML_MAX_DIMS] = { ne0, ne1, ne2, ne3 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 4, ne, (char *) a->data + offset); - ggml_format_name(result, "%s (view)", a->name); - - ggml_scratch_save(ctx); - - struct ggml_tensor * offs = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2); - ggml_set_name(offs, "offset"); - memcpy(offs->data, &offset, 2*sizeof(int32_t)); - - ggml_scratch_load(ctx); + struct ggml_tensor * result = ggml_view_tensor_offset(ctx, a, 4, ne, offset); result->nb[1] = nb1; result->nb[2] = nb2; @@ -6583,9 +6458,7 @@ struct ggml_tensor * ggml_view_4d( result->op = GGML_OP_VIEW; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - result->opt[0] = offs; + result->src[0] = a; return result; } @@ -6645,23 +6518,10 @@ struct ggml_tensor * ggml_permute( result->op = GGML_OP_PERMUTE; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; - if (is_node) { - ggml_scratch_save(ctx); - - struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 4); - - ((int32_t *) b->data)[0] = axis0; - ((int32_t *) b->data)[1] = axis1; - ((int32_t *) b->data)[2] = axis2; - ((int32_t *) b->data)[3] = axis3; - - ggml_scratch_load(ctx); - - result->opt[0] = b; - } + int32_t params[] = { axis0, axis1, axis2, axis3 }; + ggml_set_op_params(result, params, sizeof(params)); return result; } @@ -6688,8 +6548,7 @@ struct ggml_tensor * ggml_transpose( result->op = GGML_OP_TRANSPOSE; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -6714,8 +6573,8 @@ struct ggml_tensor * ggml_get_rows( result->op = GGML_OP_GET_ROWS; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -6742,9 +6601,9 @@ struct ggml_tensor * ggml_get_rows_back( result->op = GGML_OP_GET_ROWS_BACK; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; - result->opt[0] = c; + result->src[0] = a; + result->src[1] = b; + result->src[2] = c; return result; } @@ -6766,8 +6625,7 @@ struct ggml_tensor * ggml_diag( result->op = GGML_OP_DIAG; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -6775,7 +6633,7 @@ struct ggml_tensor * ggml_diag( // ggml_diag_mask_inf -struct ggml_tensor * ggml_diag_mask_inf_impl( +static struct ggml_tensor * ggml_diag_mask_inf_impl( struct ggml_context * ctx, struct ggml_tensor * a, int n_past, @@ -6788,19 +6646,12 @@ struct ggml_tensor * ggml_diag_mask_inf_impl( struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); - - struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2); - - ((int32_t *) b->data)[0] = n_past; - ((int32_t *) b->data)[1] = inplace ? 1 : 0; - - ggml_scratch_load(ctx); + int32_t params[] = { n_past, inplace ? 1 : 0 }; + ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_DIAG_MASK_INF; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; return result; } @@ -6822,7 +6673,7 @@ struct ggml_tensor * ggml_diag_mask_inf_inplace( // ggml_diag_mask_zero -struct ggml_tensor * ggml_diag_mask_zero_impl( +static struct ggml_tensor * ggml_diag_mask_zero_impl( struct ggml_context * ctx, struct ggml_tensor * a, int n_past, @@ -6835,20 +6686,12 @@ struct ggml_tensor * ggml_diag_mask_zero_impl( struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); - - struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 2); - ggml_set_name(b, "n_past, inplace"); - - ((int32_t *) b->data)[0] = n_past; - ((int32_t *) b->data)[1] = inplace ? 1 : 0; - - ggml_scratch_load(ctx); + int32_t params[] = { n_past, inplace ? 1 : 0 }; + ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_DIAG_MASK_ZERO; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; return result; } @@ -6869,7 +6712,7 @@ struct ggml_tensor * ggml_diag_mask_zero_inplace( // ggml_soft_max -struct ggml_tensor * ggml_soft_max_impl( +static struct ggml_tensor * ggml_soft_max_impl( struct ggml_context * ctx, struct ggml_tensor * a, bool inplace) { @@ -6883,8 +6726,7 @@ struct ggml_tensor * ggml_soft_max_impl( result->op = GGML_OP_SOFT_MAX; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; + result->src[0] = a; return result; } @@ -6904,7 +6746,7 @@ struct ggml_tensor * ggml_soft_max_inplace( // ggml_soft_max_back -struct ggml_tensor * ggml_soft_max_back_impl( +static struct ggml_tensor * ggml_soft_max_back_impl( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -6919,8 +6761,8 @@ struct ggml_tensor * ggml_soft_max_back_impl( result->op = GGML_OP_SOFT_MAX_BACK; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -6941,13 +6783,17 @@ struct ggml_tensor * ggml_soft_max_back_inplace( // ggml_rope -struct ggml_tensor * ggml_rope_impl( +static struct ggml_tensor * ggml_rope_impl( struct ggml_context * ctx, struct ggml_tensor * a, int n_past, int n_dims, int mode, int n_ctx, + float freq_base, + float freq_scale, + float xpos_base, + bool xpos_down, bool inplace) { GGML_ASSERT(n_past >= 0); bool is_node = false; @@ -6958,21 +6804,16 @@ struct ggml_tensor * ggml_rope_impl( struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); - - struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 4); - - ((int32_t *) b->data)[0] = n_past; - ((int32_t *) b->data)[1] = n_dims; - ((int32_t *) b->data)[2] = mode; - ((int32_t *) b->data)[3] = n_ctx; - - ggml_scratch_load(ctx); + int32_t params[8] = { n_past, n_dims, mode, n_ctx }; + memcpy(params + 4, &freq_base, sizeof(float)); + memcpy(params + 5, &freq_scale, sizeof(float)); + memcpy(params + 6, &xpos_base, sizeof(float)); + memcpy(params + 7, &xpos_down, sizeof(bool)); + ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_ROPE; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; return result; } @@ -6984,7 +6825,7 @@ struct ggml_tensor * ggml_rope( int n_dims, int mode, int n_ctx) { - return ggml_rope_impl(ctx, a, n_past, n_dims, mode, n_ctx, false); + return ggml_rope_impl(ctx, a, n_past, n_dims, mode, n_ctx, 10000.0f, 1.0f, 0.0f, false, false); } struct ggml_tensor * ggml_rope_inplace( @@ -6994,7 +6835,41 @@ struct ggml_tensor * ggml_rope_inplace( int n_dims, int mode, int n_ctx) { - return ggml_rope_impl(ctx, a, n_past, n_dims, mode, n_ctx, true); + return ggml_rope_impl(ctx, a, n_past, n_dims, mode, n_ctx, 10000.0f, 1.0f, 0.0f, false, true); +} + +struct ggml_tensor * ggml_rope_custom( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode, + int n_ctx, + float freq_base, + float freq_scale) { + return ggml_rope_impl(ctx, a, n_past, n_dims, mode, n_ctx, freq_base, freq_scale, 0.0f, false, false); +} + +struct ggml_tensor * ggml_rope_custom_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode, + int n_ctx, + float freq_base, + float freq_scale) { + return ggml_rope_impl(ctx, a, n_past, n_dims, mode, n_ctx, freq_base, freq_scale, 0.0f, false, true); +} + +struct ggml_tensor * ggml_rope_xpos_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + float base, + bool down) { + return ggml_rope_impl(ctx, a, n_past, n_dims, 0, 0, 10000.0f, 1.0f, base, down, true); } // ggml_rope_back @@ -7004,7 +6879,12 @@ struct ggml_tensor * ggml_rope_back( struct ggml_tensor * a, int n_past, int n_dims, - int mode) { + int mode, + int n_ctx, + float freq_base, + float freq_scale, + float xpos_base, + bool xpos_down) { GGML_ASSERT(n_past >= 0); GGML_ASSERT((mode & 4) == 0 && "ggml_rope_back() for ChatGLM not implemented yet"); @@ -7016,21 +6896,16 @@ struct ggml_tensor * ggml_rope_back( struct ggml_tensor * result = ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); - - struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 3); - ggml_set_name(b, "n_past, n_dims, mode"); - - ((int32_t *) b->data)[0] = n_past; - ((int32_t *) b->data)[1] = n_dims; - ((int32_t *) b->data)[2] = mode; - - ggml_scratch_load(ctx); + int32_t params[8] = { n_past, n_dims, mode, n_ctx }; + memcpy(params + 4, &freq_base, sizeof(float)); + memcpy(params + 5, &freq_scale, sizeof(float)); + memcpy(params + 6, &xpos_base, sizeof(float)); + memcpy(params + 7, &xpos_down, sizeof(bool)); + ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_ROPE_BACK; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; return result; } @@ -7055,21 +6930,13 @@ struct ggml_tensor * ggml_alibi( //struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); struct ggml_tensor * result = ggml_view_tensor(ctx, a); - ggml_scratch_save(ctx); - - struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 3); - - ((int32_t *) b->data)[0] = n_past; - ((int32_t *) b->data)[1] = n_head; - GGML_ASSERT(sizeof(float) == sizeof(int32_t)); - (((float *) b->data)[2]) = bias_max; - - ggml_scratch_load(ctx); + int32_t op_params[3] = { n_past, n_head }; + memcpy(op_params + 2, &bias_max, sizeof(float)); + ggml_set_op_params(result, op_params, sizeof(op_params)); result->op = GGML_OP_ALIBI; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; return result; } @@ -7091,19 +6958,12 @@ struct ggml_tensor * ggml_clamp( // TODO: when implement backward, fix this: struct ggml_tensor * result = ggml_view_tensor(ctx, a); - ggml_scratch_save(ctx); - - struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 2); - - ((float *) b->data)[0] = min; - ((float *) b->data)[1] = max; - - ggml_scratch_load(ctx); + float params[] = { min, max }; + ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_CLAMP; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; return result; } @@ -7134,73 +6994,19 @@ GGML_API struct ggml_tensor * ggml_conv_1d( ggml_calc_conv_output_size(b->ne[0], a->ne[0], s0, p0, d0), a->ne[2], 1, 1, }; - struct ggml_tensor* result = ggml_new_tensor(ctx, GGML_TYPE_F32, 2, ne); + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 2, ne); - ggml_scratch_save(ctx); - struct ggml_tensor* c = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 3); - ((int32_t*)c->data)[0] = s0; - ((int32_t*)c->data)[1] = p0; - ((int32_t*)c->data)[2] = d0; - ggml_scratch_load(ctx); + int32_t params[] = { s0, p0, d0 }; + ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_CONV_1D; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; - result->opt[0] = c; + result->src[0] = a; + result->src[1] = b; return result; } -// ggml_conv_2d - -struct ggml_tensor* ggml_conv_2d( - struct ggml_context* ctx, - struct ggml_tensor * a, - struct ggml_tensor * b, - int s0, - int s1, - int p0, - int p1, - int d0, - int d1) { - - GGML_ASSERT(b->ne[3] == 1); - GGML_ASSERT(a->ne[2] == b->ne[2]); - bool is_node = false; - - if (a->grad || b->grad) { - GGML_ASSERT(false); // TODO: implement backward - is_node = true; - } - - const int64_t ne[4] = { - ggml_calc_conv_output_size(b->ne[0], a->ne[0], s0, p0, d0), - ggml_calc_conv_output_size(b->ne[1], a->ne[1], s1, p1, d1), - a->ne[3], 1, - }; - struct ggml_tensor* result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); - - ggml_scratch_save(ctx); - struct ggml_tensor* c = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 6); - ((int32_t*)c->data)[0] = s0; - ((int32_t*)c->data)[1] = s1; - ((int32_t*)c->data)[2] = p0; - ((int32_t*)c->data)[3] = p1; - ((int32_t*)c->data)[4] = d0; - ((int32_t*)c->data)[5] = d1; - ggml_scratch_load(ctx); - - result->op = GGML_OP_CONV_2D; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; - result->opt[0] = c; - - return result; - -} - // ggml_conv_1d_ph struct ggml_tensor* ggml_conv_1d_ph( @@ -7212,6 +7018,212 @@ struct ggml_tensor* ggml_conv_1d_ph( return ggml_conv_1d(ctx, a, b, s, a->ne[0] / 2, d); } +// ggml_conv_2d + +struct ggml_tensor * ggml_conv_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int s0, + int s1, + int p0, + int p1, + int d0, + int d1) { + + GGML_ASSERT(a->ne[2] == b->ne[2]); + bool is_node = false; + + if (a->grad || b->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + const int64_t ne[4] = { + ggml_calc_conv_output_size(b->ne[0], a->ne[0], s0, p0, d0), + ggml_calc_conv_output_size(b->ne[1], a->ne[1], s1, p1, d1), + a->ne[3], b->ne[3], + }; + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); + + int32_t params[] = { s0, s1, p0, p1, d0, d1 }; + ggml_set_op_params(result, params, sizeof(params)); + + result->op = GGML_OP_CONV_2D; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + result->src[1] = b; + + return result; + +} + +// ggml_conv_2d_sk_p0 + +struct ggml_tensor * ggml_conv_2d_sk_p0( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_conv_2d(ctx, a, b, a->ne[0], a->ne[1], 0, 0, 1, 1); +} + +// ggml_conv_2d_s1_ph + +struct ggml_tensor * ggml_conv_2d_s1_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b) { + return ggml_conv_2d(ctx, a, b, 1, 1, a->ne[0] / 2, a->ne[1] / 2, 1, 1); +} + +// ggml_conv_transpose_2d_p0 + +static int64_t ggml_calc_conv_transpose_output_size(int64_t ins, int64_t ks, int s, int p) { + return (ins - 1) * s - 2 * p + ks; +} + +struct ggml_tensor * ggml_conv_transpose_2d_p0( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int stride) { + GGML_ASSERT(a->ne[3] == b->ne[2]); + + bool is_node = false; + + if (a->grad || b->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + const int64_t ne[4] = { + ggml_calc_conv_transpose_output_size(b->ne[0], a->ne[0], stride, 0 /*p0*/), + ggml_calc_conv_transpose_output_size(b->ne[1], a->ne[1], stride, 0 /*p1*/), + a->ne[2], b->ne[3], + }; + + struct ggml_tensor* result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); + + ggml_set_op_params_i32(result, 0, stride); + + result->op = GGML_OP_CONV_TRANSPOSE_2D; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + result->src[1] = b; + + return result; +} + +// ggml_pool_* + +static int64_t ggml_calc_pool_output_size(int64_t ins, int ks, int s, int p) { + return (ins + 2 * p - ks) / s + 1; +} + +// ggml_pool_1d + +struct ggml_tensor * ggml_pool_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_op_pool op, + int k0, + int s0, + int p0) { + + bool is_node = false; + + if (a->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + const int64_t ne[3] = { + ggml_calc_pool_output_size(a->ne[0], k0, s0, p0), + a->ne[1], + }; + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 2, ne); + + int32_t params[] = { op, k0, s0, p0 }; + ggml_set_op_params(result, params, sizeof(params)); + + result->op = GGML_OP_POOL_1D; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + + return result; +} + +// ggml_pool_2d + +struct ggml_tensor * ggml_pool_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_op_pool op, + int k0, + int k1, + int s0, + int s1, + int p0, + int p1) { + + bool is_node = false; + + if (a->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + const int64_t ne[3] = { + ggml_calc_pool_output_size(a->ne[0], k0, s0, p0), + ggml_calc_pool_output_size(a->ne[1], k1, s1, p1), + a->ne[2], + }; + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 3, ne); + + int32_t params[] = { op, k0, k1, s0, s1, p0, p1 }; + ggml_set_op_params(result, params, sizeof(params)); + + result->op = GGML_OP_POOL_2D; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + + return result; +} + +// ggml_upscale + +static struct ggml_tensor * ggml_upscale_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + int scale_factor) { + bool is_node = false; + + if (a->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type, + a->ne[0] * scale_factor, + a->ne[1] * scale_factor, + a->ne[2], a->ne[3]); + + result->op = GGML_OP_UPSCALE; + result->op_params[0] = scale_factor; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + result->src[1] = NULL; + + return result; +} + +struct ggml_tensor * ggml_upscale( + struct ggml_context * ctx, + struct ggml_tensor * a, + int scale_factor) { + return ggml_upscale_impl(ctx, a, scale_factor); +} + // ggml_flash_attn struct ggml_tensor * ggml_flash_attn( @@ -7230,14 +7242,16 @@ struct ggml_tensor * ggml_flash_attn( } //struct ggml_tensor * result = ggml_dup_tensor(ctx, q); - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, q->ne); + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, q->n_dims, q->ne); + + int32_t t = masked ? 1 : 0; + ggml_set_op_params(result, &t, sizeof(t)); result->op = GGML_OP_FLASH_ATTN; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = q; - result->src1 = k; - result->opt[0] = v; - result->opt[1] = ggml_new_i32(ctx, masked ? 1 : 0); + result->src[0] = q; + result->src[1] = k; + result->src[2] = v; return result; } @@ -7261,15 +7275,15 @@ struct ggml_tensor * ggml_flash_ff( } //struct ggml_tensor * result = ggml_dup_tensor(ctx, a); - struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, a->ne); + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, a->n_dims, a->ne); result->op = GGML_OP_FLASH_FF; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b0; - result->opt[0] = b1; - result->opt[1] = c0; - result->opt[2] = c1; + result->src[0] = a; + result->src[1] = b0; + result->src[2] = b1; + result->src[3] = c0; + result->src[4] = c1; return result; } @@ -7327,13 +7341,15 @@ struct ggml_tensor * ggml_flash_attn_back( struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); + int32_t masked_i = masked ? 1 : 0; + ggml_set_op_params(result, &masked_i, sizeof(masked_i)); + result->op = GGML_OP_FLASH_ATTN_BACK; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = q; - result->src1 = k; - result->opt[0] = v; - result->opt[1] = d; - result->opt[2] = ggml_new_i32(ctx, masked ? 1 : 0); + result->src[0] = q; + result->src[1] = k; + result->src[2] = v; + result->src[3] = d; return result; } @@ -7366,21 +7382,12 @@ struct ggml_tensor * ggml_win_part( struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne); - ggml_scratch_save(ctx); - - struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 3); - - ((int32_t *) b->data)[0] = npx; - ((int32_t *) b->data)[1] = npy; - ((int32_t *) b->data)[2] = w; - - ggml_scratch_load(ctx); + int32_t params[] = { npx, npy, w }; + ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_WIN_PART; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - result->opt[0] = b; + result->src[0] = a; return result; } @@ -7405,26 +7412,136 @@ struct ggml_tensor * ggml_win_unpart( const int64_t ne[4] = { a->ne[0], w0, h0, 1, }; struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 3, ne); - ggml_scratch_save(ctx); - - struct ggml_tensor * b = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 1); - - ((int32_t *) b->data)[0] = w; - - ggml_scratch_load(ctx); + int32_t params[] = { w }; + ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_WIN_UNPART; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = NULL; - result->opt[0] = b; + result->src[0] = a; return result; } +// ggml_get_rel_pos + +struct ggml_tensor * ggml_get_rel_pos( + struct ggml_context * ctx, + struct ggml_tensor * a, + int qh, + int kh) { + GGML_ASSERT(qh == kh); + GGML_ASSERT(2*MAX(qh, kh) - 1 == a->ne[1]); + + bool is_node = false; + + if (a->grad) { + GGML_ASSERT(false); // TODO: implement backward + is_node = true; + } + + const int64_t ne[4] = { a->ne[0], kh, qh, 1, }; + struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F16, 3, ne); + + result->op = GGML_OP_GET_REL_POS; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + result->src[1] = NULL; + + return result; +} + +// ggml_add_rel_pos + +static struct ggml_tensor * ggml_add_rel_pos_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph, + bool inplace) { + GGML_ASSERT(ggml_are_same_shape(pw, ph)); + GGML_ASSERT(ggml_is_contiguous(a)); + GGML_ASSERT(ggml_is_contiguous(pw)); + GGML_ASSERT(ggml_is_contiguous(ph)); + GGML_ASSERT(ph->type == GGML_TYPE_F32); + GGML_ASSERT(pw->type == GGML_TYPE_F32); + GGML_ASSERT(pw->ne[3] == a->ne[2]); + GGML_ASSERT(pw->ne[0]*pw->ne[0] == a->ne[0]); + GGML_ASSERT(pw->ne[1]*pw->ne[2] == a->ne[1]); + + bool is_node = false; + + if (!inplace && (a->grad || pw->grad || ph->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + result->op = GGML_OP_ADD_REL_POS; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + result->src[1] = pw; + result->src[2] = ph; + + return result; +} + + +struct ggml_tensor * ggml_add_rel_pos( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph) { + return ggml_add_rel_pos_impl(ctx, a, pw, ph, false); +} + +struct ggml_tensor * ggml_add_rel_pos_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph) { + return ggml_add_rel_pos_impl(ctx, a, pw, ph, true); +} + +// gmml_unary + +static struct ggml_tensor * ggml_unary_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op, + bool inplace) { + bool is_node = false; + + if (!inplace && (a->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + ggml_set_op_params_i32(result, 0, (int32_t) op); + + result->op = GGML_OP_UNARY; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + + return result; +} + +struct ggml_tensor * ggml_unary( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op) { + return ggml_unary_impl(ctx, a, op, false); +} + +struct ggml_tensor * ggml_unary_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op) { + return ggml_unary_impl(ctx, a, op, true); +} + // ggml_map_unary -struct ggml_tensor * ggml_map_unary_impl_f32( +static struct ggml_tensor * ggml_map_unary_impl_f32( struct ggml_context * ctx, struct ggml_tensor * a, const ggml_unary_op_f32_t fun, @@ -7435,19 +7552,13 @@ struct ggml_tensor * ggml_map_unary_impl_f32( is_node = true; } - struct ggml_tensor *result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); - - struct ggml_tensor * addr_tensor = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(void *) / sizeof(int32_t)); - *((void (**)(void))addr_tensor->data) = (void (*)(void))fun; - - ggml_scratch_load(ctx); + ggml_set_op_params(result, (const void *) &fun, sizeof(fun)); result->op = GGML_OP_MAP_UNARY; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->opt[0] = addr_tensor; + result->src[0] = a; return result; } @@ -7468,7 +7579,7 @@ struct ggml_tensor * ggml_map_unary_inplace_f32( // ggml_map_binary -struct ggml_tensor * ggml_map_binary_impl_f32( +static struct ggml_tensor * ggml_map_binary_impl_f32( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -7482,20 +7593,14 @@ struct ggml_tensor * ggml_map_binary_impl_f32( is_node = true; } - struct ggml_tensor *result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); - - struct ggml_tensor * addr_tensor = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(void *) / sizeof(int32_t)); - *((void (**)(void))addr_tensor->data) = (void (*)(void))fun; - - ggml_scratch_load(ctx); + ggml_set_op_params(result, (const void *) &fun, sizeof(fun)); result->op = GGML_OP_MAP_BINARY; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; - result->opt[0] = addr_tensor; + result->src[0] = a; + result->src[1] = b; return result; } @@ -7516,9 +7621,9 @@ struct ggml_tensor * ggml_map_binary_inplace_f32( return ggml_map_binary_impl_f32(ctx, a, b, fun, true); } -// ggml_map_custom1 +// ggml_map_custom1_f32 -struct ggml_tensor * ggml_map_custom1_impl_f32( +static struct ggml_tensor * ggml_map_custom1_impl_f32( struct ggml_context * ctx, struct ggml_tensor * a, const ggml_custom1_op_f32_t fun, @@ -7529,19 +7634,13 @@ struct ggml_tensor * ggml_map_custom1_impl_f32( is_node = true; } - struct ggml_tensor *result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); + ggml_set_op_params(result, (const void *) &fun, sizeof(fun)); - struct ggml_tensor * addr_tensor = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(void *) / sizeof(int32_t)); - *((void (**)(void))addr_tensor->data) = (void (*)(void))fun; - - ggml_scratch_load(ctx); - - result->op = GGML_OP_MAP_CUSTOM1; + result->op = GGML_OP_MAP_CUSTOM1_F32; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->opt[0] = addr_tensor; + result->src[0] = a; return result; } @@ -7560,9 +7659,9 @@ struct ggml_tensor * ggml_map_custom1_inplace_f32( return ggml_map_custom1_impl_f32(ctx, a, fun, true); } -// ggml_map_custom2 +// ggml_map_custom2_f32 -struct ggml_tensor * ggml_map_custom2_impl_f32( +static struct ggml_tensor * ggml_map_custom2_impl_f32( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -7574,20 +7673,14 @@ struct ggml_tensor * ggml_map_custom2_impl_f32( is_node = true; } - struct ggml_tensor *result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); + ggml_set_op_params(result, (const void *) &fun, sizeof(fun)); - struct ggml_tensor * addr_tensor = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(void *) / sizeof(int32_t)); - *((void (**)(void))addr_tensor->data) = (void (*)(void))fun; - - ggml_scratch_load(ctx); - - result->op = GGML_OP_MAP_CUSTOM2; + result->op = GGML_OP_MAP_CUSTOM2_F32; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; - result->opt[0] = addr_tensor; + result->src[0] = a; + result->src[1] = b; return result; } @@ -7608,9 +7701,9 @@ struct ggml_tensor * ggml_map_custom2_inplace_f32( return ggml_map_custom2_impl_f32(ctx, a, b, fun, true); } -// ggml_map_custom3 +// ggml_map_custom3_f32 -struct ggml_tensor * ggml_map_custom3_impl_f32( +static struct ggml_tensor * ggml_map_custom3_impl_f32( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, @@ -7623,21 +7716,15 @@ struct ggml_tensor * ggml_map_custom3_impl_f32( is_node = true; } - struct ggml_tensor *result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - ggml_scratch_save(ctx); + ggml_set_op_params(result, (const void *) &fun, sizeof(fun)); - struct ggml_tensor * addr_tensor = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(void *) / sizeof(int32_t)); - *((void (**)(void))addr_tensor->data) = (void (*)(void))fun; - - ggml_scratch_load(ctx); - - result->op = GGML_OP_MAP_CUSTOM3; + result->op = GGML_OP_MAP_CUSTOM3_F32; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; - result->opt[0] = addr_tensor; - result->opt[1] = c; + result->src[0] = a; + result->src[1] = b; + result->src[2] = c; return result; } @@ -7660,6 +7747,190 @@ struct ggml_tensor * ggml_map_custom3_inplace_f32( return ggml_map_custom3_impl_f32(ctx, a, b, c, fun, true); } +// ggml_map_custom1 +struct ggml_map_custom1_op_params { + ggml_custom1_op_t fun; + int n_tasks; + void * userdata; +}; + +static struct ggml_tensor * ggml_map_custom1_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + const ggml_custom1_op_t fun, + int n_tasks, + void * userdata, + bool inplace) { + GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0); + + bool is_node = false; + + if (!inplace && a->grad) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + struct ggml_map_custom1_op_params params = { + /*.fun =*/ fun, + /*.n_tasks =*/ n_tasks, + /*.userdata =*/ userdata + }; + ggml_set_op_params(result, (const void *) ¶ms, sizeof(params)); + + result->op = GGML_OP_MAP_CUSTOM1; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + + return result; +} + +struct ggml_tensor * ggml_map_custom1( + struct ggml_context * ctx, + struct ggml_tensor * a, + const ggml_custom1_op_t fun, + int n_tasks, + void * userdata) { + return ggml_map_custom1_impl(ctx, a, fun, n_tasks, userdata, false); +} + +struct ggml_tensor * ggml_map_custom1_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + const ggml_custom1_op_t fun, + int n_tasks, + void * userdata) { + return ggml_map_custom1_impl(ctx, a, fun, n_tasks, userdata, true); +} + +// ggml_map_custom2 + +struct ggml_map_custom2_op_params { + ggml_custom2_op_t fun; + int n_tasks; + void * userdata; +}; + +static struct ggml_tensor * ggml_map_custom2_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + const ggml_custom2_op_t fun, + int n_tasks, + void * userdata, + bool inplace) { + GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + struct ggml_map_custom2_op_params params = { + /*.fun =*/ fun, + /*.n_tasks =*/ n_tasks, + /*.userdata =*/ userdata + }; + ggml_set_op_params(result, (const void *) ¶ms, sizeof(params)); + + result->op = GGML_OP_MAP_CUSTOM2; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + result->src[1] = b; + + return result; +} + +struct ggml_tensor * ggml_map_custom2( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + const ggml_custom2_op_t fun, + int n_tasks, + void * userdata) { + return ggml_map_custom2_impl(ctx, a, b, fun, n_tasks, userdata, false); +} + +struct ggml_tensor * ggml_map_custom2_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + const ggml_custom2_op_t fun, + int n_tasks, + void * userdata) { + return ggml_map_custom2_impl(ctx, a, b, fun, n_tasks, userdata, true); +} + +// ggml_map_custom3 + +struct ggml_map_custom3_op_params { + ggml_custom3_op_t fun; + int n_tasks; + void * userdata; +}; + +static struct ggml_tensor * ggml_map_custom3_impl( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + const ggml_custom3_op_t fun, + int n_tasks, + void * userdata, + bool inplace) { + GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0); + + bool is_node = false; + + if (!inplace && (a->grad || b->grad || c->grad)) { + is_node = true; + } + + struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + + struct ggml_map_custom3_op_params params = { + /*.fun =*/ fun, + /*.n_tasks =*/ n_tasks, + /*.userdata =*/ userdata + }; + ggml_set_op_params(result, (const void *) ¶ms, sizeof(params)); + + result->op = GGML_OP_MAP_CUSTOM3; + result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; + result->src[0] = a; + result->src[1] = b; + result->src[2] = c; + + return result; +} + +struct ggml_tensor * ggml_map_custom3( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + const ggml_custom3_op_t fun, + int n_tasks, + void * userdata) { + return ggml_map_custom3_impl(ctx, a, b, c, fun, n_tasks, userdata, false); +} + +struct ggml_tensor * ggml_map_custom3_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + const ggml_custom3_op_t fun, + int n_tasks, + void * userdata) { + return ggml_map_custom3_impl(ctx, a, b, c, fun, n_tasks, userdata, true); +} + + + // ggml_cross_entropy_loss struct ggml_tensor * ggml_cross_entropy_loss( @@ -7677,8 +7948,8 @@ struct ggml_tensor * ggml_cross_entropy_loss( result->op = GGML_OP_CROSS_ENTROPY_LOSS; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src0 = a; - result->src1 = b; + result->src[0] = a; + result->src[1] = b; return result; } @@ -7697,9 +7968,9 @@ struct ggml_tensor * ggml_cross_entropy_loss_back( result->op = GGML_OP_CROSS_ENTROPY_LOSS_BACK; result->grad = NULL; - result->src0 = a; - result->src1 = b; - result->opt[0] = c; + result->src[0] = a; + result->src[1] = b; + result->src[2] = c; return result; } @@ -7745,7 +8016,7 @@ static void ggml_compute_forward_dup_same_cont( memcpy( ((char *) dst->data + ie0*nb0), ((char *) src0->data + ie0*nb00), - (ie1 - ie0) * GGML_TYPE_SIZE[src0->type]); + (ie1 - ie0) * ggml_type_size(src0->type)); } } @@ -7779,7 +8050,7 @@ static void ggml_compute_forward_dup_f16( if (src0->type == dst->type && ne00 == ne0 && - nb00 == GGML_TYPE_SIZE[src0->type] && nb0 == GGML_TYPE_SIZE[dst->type]) { + nb00 == ggml_type_size(src0->type) && nb0 == ggml_type_size(dst->type)) { // copy by rows const size_t rs = ne00*nb00; for (int64_t i03 = 0; i03 < ne03; i03++) { @@ -7832,12 +8103,12 @@ static void ggml_compute_forward_dup_f16( id += ne00 * (ne01 - ir1); } } - } else if (ggml_is_quantized(dst->type)) { - quantize_row_q_t const quantize_row_q = quantize_fns[dst->type].quantize_row_q; + } else if (type_traits[dst->type].from_float) { + ggml_from_float_t const quantize_row_q = type_traits[dst->type].from_float; float * src0_f32 = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith; size_t id = 0; - size_t rs = nb0 * (ne00 / GGML_BLCK_SIZE[dst->type]); + size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type)); char * dst_ptr = (char *) dst->data; for (int i03 = 0; i03 < ne03; i03++) { @@ -8050,7 +8321,7 @@ static void ggml_compute_forward_dup_f32( if (src0->type == dst->type && ne00 == ne0 && - nb00 == GGML_TYPE_SIZE[src0->type] && nb0 == GGML_TYPE_SIZE[dst->type]) { + nb00 == ggml_type_size(src0->type) && nb0 == ggml_type_size(dst->type)) { // copy by rows const size_t rs = ne00*nb00; for (int64_t i03 = 0; i03 < ne03; i03++) { @@ -8085,29 +8356,11 @@ static void ggml_compute_forward_dup_f32( id += rs * (ne01 - ir1); } } - } else if (dst->type == GGML_TYPE_F16) { - size_t id = 0; - ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data; - - for (int i03 = 0; i03 < ne03; i03++) { - for (int i02 = 0; i02 < ne02; i02++) { - id += ne00 * ir0; - for (int i01 = ir0; i01 < ir1; i01++) { - for (int i00 = 0; i00 < ne00; i00++) { - const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03); - - dst_ptr[id] = GGML_FP32_TO_FP16(*src0_ptr); - id++; - } - } - id += ne00 * (ne01 - ir1); - } - } - } else if (ggml_is_quantized(dst->type)) { - quantize_row_q_t const quantize_row_q = quantize_fns[dst->type].quantize_row_q; + } else if (type_traits[dst->type].from_float) { + ggml_from_float_t const quantize_row_q = type_traits[dst->type].from_float; size_t id = 0; - size_t rs = nb0 * (ne00 / GGML_BLCK_SIZE[dst->type]); + size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type)); char * dst_ptr = (char *) dst->data; for (int i03 = 0; i03 < ne03; i03++) { @@ -8318,7 +8571,7 @@ static void ggml_compute_forward_add_f32( const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { - GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst)); + GGML_ASSERT(ggml_can_repeat_rows(src1, src0) && ggml_are_same_shape(src0, dst)); if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return; @@ -8343,23 +8596,23 @@ static void ggml_compute_forward_add_f32( if (nb10 == sizeof(float)) { for (int ir = ir0; ir < ir1; ++ir) { - // src0, src1 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + // src1 is broadcastable across src0 and dst in i1, i2, i3 + const int64_t i03 = ir/(ne02*ne01); + const int64_t i02 = (ir - i03*ne02*ne01)/ne01; + const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); + const int64_t i13 = i03 % ne13; + const int64_t i12 = i02 % ne12; + const int64_t i11 = i01 % ne11; + + float * dst_ptr = (float *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); + float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); + float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11); #ifdef GGML_USE_ACCELERATE - vDSP_vadd( - (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1, - (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1, - (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), 1, - ne0); + vDSP_vadd(src0_ptr, 1, src1_ptr, 1, dst_ptr, 1, ne00); #else - ggml_vec_add_f32(ne0, - (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ), - (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), - (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11)); + ggml_vec_add_f32(ne00, dst_ptr, src0_ptr, src1_ptr); #endif // } // } @@ -8367,15 +8620,20 @@ static void ggml_compute_forward_add_f32( } else { // src1 is not contiguous for (int ir = ir0; ir < ir1; ++ir) { - // src0, src1 and dst are same shape => same indices - const int i3 = ir/(ne2*ne1); - const int i2 = (ir - i3*ne2*ne1)/ne1; - const int i1 = (ir - i3*ne2*ne1 - i2*ne1); + // src1 is broadcastable across src0 and dst in i1, i2, i3 + const int64_t i03 = ir/(ne02*ne01); + const int64_t i02 = (ir - i03*ne02*ne01)/ne01; + const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01); + + const int64_t i13 = i03 % ne13; + const int64_t i12 = i02 % ne12; + const int64_t i11 = i01 % ne11; + + float * dst_ptr = (float *) ((char *) dst->data + i03*nb3 + i02*nb2 + i01*nb1 ); + float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01); - float * dst_ptr = (float *) ((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 ); - float * src0_ptr = (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); for (int i0 = 0; i0 < ne0; i0++) { - float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11 + i0*nb10); + float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i0*nb10); dst_ptr[i0] = src0_ptr[i0] + *src1_ptr; } @@ -8510,11 +8768,11 @@ static void ggml_compute_forward_add_q_f32( const int nth = params->nth; const enum ggml_type type = src0->type; - dequantize_row_q_t const dequantize_row_q = quantize_fns[type].dequantize_row_q; - quantize_row_q_t const quantize_row_q = quantize_fns[type].quantize_row_q; + ggml_to_float_t const dequantize_row_q = type_traits[type].to_float; + ggml_from_float_t const quantize_row_q = type_traits[type].from_float; // we don't support permuted src0 or src1 - GGML_ASSERT(nb00 == GGML_TYPE_SIZE[type]); + GGML_ASSERT(nb00 == ggml_type_size(type)); GGML_ASSERT(nb10 == sizeof(float)); // dst cannot be transposed or permuted @@ -8784,11 +9042,11 @@ static void ggml_compute_forward_add1_q_f32( GGML_TENSOR_UNARY_OP_LOCALS; const enum ggml_type type = src0->type; - dequantize_row_q_t const dequantize_row_q = quantize_fns[type].dequantize_row_q; - quantize_row_q_t const quantize_row_q = quantize_fns[type].quantize_row_q; + ggml_to_float_t const dequantize_row_q = type_traits[type].to_float; + ggml_from_float_t const quantize_row_q = type_traits[type].from_float; // we don't support permuted src0 - GGML_ASSERT(nb00 == GGML_TYPE_SIZE[type]); + GGML_ASSERT(nb00 == ggml_type_size(type)); // dst cannot be transposed or permuted GGML_ASSERT(nb0 <= nb1); @@ -8878,21 +9136,17 @@ static void ggml_compute_forward_acc_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, const struct ggml_tensor * src1, - const struct ggml_tensor * opt0, struct ggml_tensor * dst) { GGML_ASSERT(ggml_are_same_shape(src0, dst)); GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0)); - GGML_ASSERT(opt0->type == GGML_TYPE_I32); - GGML_ASSERT(ggml_nelements(opt0) == 5); - // view src0 and dst with these strides and data offset inbytes during acc // nb0 is implicitely element_size because src0 and dst are contiguous - size_t nb1 = ((int32_t *) opt0->data)[0]; - size_t nb2 = ((int32_t *) opt0->data)[1]; - size_t nb3 = ((int32_t *) opt0->data)[2]; - size_t offset = ((int32_t *) opt0->data)[3]; - bool inplace = (bool) ((int32_t *) opt0->data)[4]; + size_t nb1 = ((int32_t *) dst->op_params)[0]; + size_t nb2 = ((int32_t *) dst->op_params)[1]; + size_t nb3 = ((int32_t *) dst->op_params)[2]; + size_t offset = ((int32_t *) dst->op_params)[3]; + bool inplace = (bool) ((int32_t *) dst->op_params)[4]; if (!inplace && (params->type == GGML_TASK_INIT)) { // memcpy needs to be synchronized across threads to avoid race conditions. @@ -8961,13 +9215,12 @@ static void ggml_compute_forward_acc( const struct ggml_compute_params * params, const struct ggml_tensor * src0, const struct ggml_tensor * src1, - const struct ggml_tensor * opt0, struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F32: { - ggml_compute_forward_acc_f32(params, src0, src1, opt0, dst); + ggml_compute_forward_acc_f32(params, src0, src1, dst); } break; case GGML_TYPE_F16: case GGML_TYPE_Q4_0: @@ -9155,6 +9408,8 @@ static void ggml_compute_forward_mul( const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst) { + GGML_ASSERT(src1->type == GGML_TYPE_F32 && "only f32 src1 supported for now"); + switch (src0->type) { case GGML_TYPE_F32: { @@ -9399,7 +9654,7 @@ static void ggml_compute_forward_sum_f32( for (int64_t i03 = 0; i03 < ne03; i03++) { for (int64_t i02 = 0; i02 < ne02; i02++) { for (int64_t i01 = 0; i01 < ne01; i01++) { - ggml_vec_sum_ggf(ne00, + ggml_vec_sum_f32_ggf(ne00, &row_sum, (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03)); sum += row_sum; @@ -9409,6 +9664,38 @@ static void ggml_compute_forward_sum_f32( ((float *) dst->data)[0] = sum; } +static void ggml_compute_forward_sum_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + assert(params->ith == 0); + assert(ggml_is_scalar(dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + assert(src0->nb[0] == sizeof(ggml_fp16_t)); + + GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne); + GGML_TENSOR_LOCALS(size_t, nb0, src0, nb); + + float sum = 0; + float row_sum = 0; + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + ggml_vec_sum_f16_ggf(ne00, + &row_sum, + (ggml_fp16_t *) ((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03)); + sum += row_sum; + } + } + } + ((ggml_fp16_t *) dst->data)[0] = GGML_FP32_TO_FP16(sum); +} + static void ggml_compute_forward_sum( const struct ggml_compute_params * params, const struct ggml_tensor * src0, @@ -9418,6 +9705,10 @@ static void ggml_compute_forward_sum( { ggml_compute_forward_sum_f32(params, src0, dst); } break; + case GGML_TYPE_F16: + { + ggml_compute_forward_sum_f16(params, src0, dst); + } break; default: { GGML_ASSERT(false); @@ -9450,8 +9741,8 @@ static void ggml_compute_forward_sum_rows_f32( for (int64_t i3 = 0; i3 < ne03; i3++) { for (int64_t i2 = 0; i2 < ne02; i2++) { for (int64_t i1 = 0; i1 < ne01; i1++) { - float* src_row = (float *) ((char *) src0->data + i1*nb01 + i2*nb02 + i3*nb03); - float* dst_row = (float *) ((char *) dst->data + i1*nb1 + i2*nb2 + i3*nb3); + float * src_row = (float *) ((char *) src0->data + i1*nb01 + i2*nb02 + i3*nb03); + float * dst_row = (float *) ((char *) dst->data + i1*nb1 + i2*nb2 + i3*nb3); float row_sum = 0; ggml_vec_sum_f32(ne00, &row_sum, src_row); dst_row[0] = row_sum; @@ -9713,6 +10004,72 @@ static void ggml_compute_forward_repeat_back( } } +// ggml_compute_forward_concat + +static void ggml_compute_forward_concat_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + GGML_ASSERT(src0->nb[0] == sizeof(float)); + + const int ith = params->ith; + + GGML_TENSOR_BINARY_OP_LOCALS; + + // TODO: support for transposed / permuted tensors + GGML_ASSERT(nb0 == sizeof(float)); + GGML_ASSERT(nb00 == sizeof(float)); + GGML_ASSERT(nb10 == sizeof(float)); + + for (int i3 = 0; i3 < ne3; i3++) { + for (int i2 = ith; i2 < ne2; i2++) { + if (i2 < ne02) { // src0 + for (int i1 = 0; i1 < ne1; i1++) { + for (int i0 = 0; i0 < ne0; i0++) { + const float * x = (float *)((char *) src0->data + i0 * nb00 + i1 * nb01 + i2 * nb02 + i3 * nb03); + + float * y = (float *)((char *)dst->data + i0 * nb0 + i1 * nb1 + i2 * nb2 + i3 * nb3); + *y = *x; + } + } + } // src1 + else { + for (int i1 = 0; i1 < ne1; i1++) { + for (int i0 = 0; i0 < ne0; i0++) { + const float * x = (float *)((char *) src1->data + i0 * nb10 + i1 * nb11 + (i2 - ne02) * nb12 + i3 * nb13); + + float * y = (float *)((char *)dst->data + i0 * nb0 + i1 * nb1 + i2 * nb2 + i3 * nb3); + *y = *x; + } + } + } + } + } +} + +static void ggml_compute_forward_concat( + const struct ggml_compute_params* params, + const struct ggml_tensor* src0, + const struct ggml_tensor* src1, + struct ggml_tensor* dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_concat_f32(params, src0, src1, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + // ggml_compute_forward_abs static void ggml_compute_forward_abs_f32( @@ -10013,8 +10370,8 @@ static void ggml_compute_forward_gelu_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, struct ggml_tensor * dst) { - GGML_ASSERT(ggml_is_contiguous(src0)); - GGML_ASSERT(ggml_is_contiguous(dst)); + GGML_ASSERT(ggml_is_contiguous_except_dim_1(src0)); + GGML_ASSERT(ggml_is_contiguous_except_dim_1(dst)); GGML_ASSERT(ggml_are_same_shape(src0, dst)); if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { @@ -10072,8 +10429,8 @@ static void ggml_compute_forward_gelu_quick_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, struct ggml_tensor * dst) { - GGML_ASSERT(ggml_is_contiguous(src0)); - GGML_ASSERT(ggml_is_contiguous(dst)); + GGML_ASSERT(ggml_is_contiguous_except_dim_1(src0)); + GGML_ASSERT(ggml_is_contiguous_except_dim_1(dst)); GGML_ASSERT(ggml_are_same_shape(src0, dst)); if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { @@ -10131,8 +10488,8 @@ static void ggml_compute_forward_silu_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, struct ggml_tensor * dst) { - GGML_ASSERT(ggml_is_contiguous(src0)); - GGML_ASSERT(ggml_is_contiguous(dst)); + GGML_ASSERT(ggml_is_contiguous_except_dim_1(src0)); + GGML_ASSERT(ggml_is_contiguous_except_dim_1(dst)); GGML_ASSERT(ggml_are_same_shape(src0, dst)); if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { @@ -10184,7 +10541,6 @@ static void ggml_compute_forward_silu( } } - // ggml_compute_forward_silu_back static void ggml_compute_forward_silu_back_f32( @@ -10192,9 +10548,9 @@ static void ggml_compute_forward_silu_back_f32( const struct ggml_tensor * src0, const struct ggml_tensor * grad, struct ggml_tensor * dst) { - GGML_ASSERT(ggml_is_contiguous(grad)); - GGML_ASSERT(ggml_is_contiguous(src0)); - GGML_ASSERT(ggml_is_contiguous(dst)); + GGML_ASSERT(ggml_is_contiguous_except_dim_1(grad)); + GGML_ASSERT(ggml_is_contiguous_except_dim_1(src0)); + GGML_ASSERT(ggml_is_contiguous_except_dim_1(dst)); GGML_ASSERT(ggml_are_same_shape(src0, dst)); GGML_ASSERT(ggml_are_same_shape(src0, grad)); @@ -10268,7 +10624,8 @@ static void ggml_compute_forward_norm_f32( GGML_TENSOR_UNARY_OP_LOCALS; - const float eps = 1e-5f; // TODO: make this a parameter + float eps; + memcpy(&eps, dst->op_params, sizeof(float)); // TODO: optimize for (int64_t i03 = 0; i03 < ne03; i03++) { @@ -10317,6 +10674,8 @@ static void ggml_compute_forward_norm( } } +// ggml_compute_forward_group_rms_norm + static void ggml_compute_forward_rms_norm_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, @@ -10334,7 +10693,8 @@ static void ggml_compute_forward_rms_norm_f32( GGML_TENSOR_UNARY_OP_LOCALS; - const float eps = 1e-6f; // TODO: make this a parameter + float eps; + memcpy(&eps, dst->op_params, sizeof(float)); // TODO: optimize for (int64_t i03 = 0; i03 < ne03; i03++) { @@ -10380,7 +10740,6 @@ static void ggml_compute_forward_rms_norm( } } - static void ggml_compute_forward_rms_norm_back_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, @@ -10554,6 +10913,95 @@ static void ggml_compute_forward_rms_norm_back( } } +// ggml_compute_forward_group_norm + +static void ggml_compute_forward_group_norm_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + GGML_ASSERT(src0->nb[0] == sizeof(float)); + + const int ith = params->ith; + const int nth = params->nth; + + GGML_TENSOR_UNARY_OP_LOCALS; + + const float eps = 1e-6f; // TODO: make this a parameter + + // TODO: optimize + + int n_channels = src0->ne[2]; + int n_groups = dst->op_params[0]; + int n_channels_per_group = (n_channels + n_groups - 1) / n_groups; + for (int i = ith; i < n_groups; i+=nth) { + int start = i * n_channels_per_group; + int end = start + n_channels_per_group; + if (end > n_channels) { + end = n_channels; + } + int step = end - start; + + for (int64_t i03 = 0; i03 < ne03; i03++) { + ggml_float sum = 0.0; + for (int64_t i02 = start; i02 < end; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + const float * x = (float *)((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03); + + for (int64_t i00 = 0; i00 < ne00; i00++) { + sum += (ggml_float)x[i00]; + } + } + } + float mean = sum / (ne00 * ne01 * step); + ggml_float sum2 = 0.0; + + for (int64_t i02 = start; i02 < end; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + const float * x = (float *)((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03); + + float * y = (float *)((char *) dst->data + i01 * nb1 + i02 * nb2 + i03 * nb3); + + for (int64_t i00 = 0; i00 < ne00; i00++) { + float v = x[i00] - mean; + y[i00] = v; + sum2 += (ggml_float)(v * v); + } + } + } + float variance = sum2 / (ne00 * ne01 * step); + const float scale = 1.0f / sqrtf(variance + eps); + + for (int64_t i02 = start; i02 < end; i02++) { + for (int64_t i01 = 0; i01 < ne01; i01++) { + float * y = (float *)((char *) dst->data + i01 * nb1 + i02 * nb2 + i03 * nb3); + ggml_vec_scale_f32(ne00, y, scale); + } + } + } + } +} + +static void ggml_compute_forward_group_norm( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_group_norm_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} // ggml_compute_forward_mul_mat @@ -10585,7 +11033,7 @@ static bool ggml_compute_forward_mul_mat_use_blas( } #endif -static void ggml_compute_forward_mul_mat_f32( +static void ggml_compute_forward_mul_mat( const struct ggml_compute_params * params, const struct ggml_tensor * src0, const struct ggml_tensor * src1, @@ -10598,328 +11046,21 @@ static void ggml_compute_forward_mul_mat_f32( const int ith = params->ith; const int nth = params->nth; - assert(ne02 == ne12); - assert(ne03 == ne13); - assert(ne2 == ne12); - assert(ne3 == ne13); + const enum ggml_type type = src0->type; - // we don't support permuted src0 or src1 - assert(nb00 == sizeof(float)); - assert(nb10 == sizeof(float)); + const bool src1_cont = ggml_is_contiguous(src1); - // dst cannot be transposed or permuted - assert(nb0 == sizeof(float)); - assert(nb0 <= nb1); - assert(nb1 <= nb2); - assert(nb2 <= nb3); - - assert(ne0 == ne01); - assert(ne1 == ne11); - assert(ne2 == ne02); - assert(ne3 == ne03); - - // nb01 >= nb00 - src0 is not transposed - // compute by src0 rows - -#if defined(GGML_USE_CLBLAST) - if (ggml_cl_can_mul_mat(src0, src1, dst)) { - if (params->ith == 0 && params->type == GGML_TASK_COMPUTE) { - ggml_cl_mul_mat(src0, src1, dst, params->wdata, params->wsize); - } - return; - } -#endif - -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) - if (ggml_compute_forward_mul_mat_use_blas(src0, src1, dst)) { - if (params->ith != 0) { - return; - } - - if (params->type == GGML_TASK_INIT) { - return; - } - - if (params->type == GGML_TASK_FINALIZE) { - return; - } - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - const float * x = (float *) ((char *) src0->data + i02*nb02 + i03*nb03); - const float * y = (float *) ((char *) src1->data + i02*nb12 + i03*nb13); - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); - - cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, - ne11, ne01, ne10, - 1.0f, y, ne10, - x, ne00, - 0.0f, d, ne01); - } - } - //printf("CBLAS F32 = %f ms, %d x %d x %d x %d\n", (ggml_perf_time_us() - t0)/1000.0, ne0, ne1, ne2, ne3); - - return; - } -#endif - - if (params->type == GGML_TASK_INIT) { - return; - } - - if (params->type == GGML_TASK_FINALIZE) { - return; - } - - // parallelize by src0 rows using ggml_vec_dot_f32 - - // total rows in src0 - const int nr = ne01*ne02*ne03; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - for (int ir = ir0; ir < ir1; ++ir) { - // src0 indices - const int i03 = ir/(ne02*ne01); - const int i02 = (ir - i03*ne02*ne01)/ne01; - const int i01 = (ir - i03*ne02*ne01 - i02*ne01); - - for (int64_t ic = 0; ic < ne11; ++ic) { - // src1 indices - const int i13 = i03; - const int i12 = i02; - const int i11 = ic; - - // dst indices - const int i0 = i01; - const int i1 = i11; - const int i2 = i02; - const int i3 = i03; - - ggml_vec_dot_f32(ne00, - (float *) ((char *) dst->data + (i0*nb0 + i1*nb1 + i2*nb2 + i3*nb3)), - (float *) ((char *) src0->data + (i01*nb01 + i02*nb02 + i03*nb03)), - (float *) ((char *) src1->data + (i11*nb11 + i12*nb12 + i13*nb13))); - } - } - - //int64_t t1 = ggml_perf_time_us(); - //static int64_t acc = 0; - //acc += t1 - t0; - //if (t1 - t0 > 10) { - // printf("\n"); - // printf("ne00 = %5d, ne01 = %5d, ne02 = %5d, ne03 = %5d\n", ne00, ne01, ne02, ne03); - // printf("nb00 = %5d, nb01 = %5d, nb02 = %5d, nb03 = %5d\n", nb00, nb01, nb02, nb03); - // printf("ne10 = %5d, ne11 = %5d, ne12 = %5d, ne13 = %5d\n", ne10, ne11, ne12, ne13); - // printf("nb10 = %5d, nb11 = %5d, nb12 = %5d, nb13 = %5d\n", nb10, nb11, nb12, nb13); - - // printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX task %d/%d: %d us, acc = %d\n", ith, nth, (int) (t1 - t0), (int) acc); - //} -} - -static void ggml_compute_forward_mul_mat_f16_f32( - const struct ggml_compute_params * params, - const struct ggml_tensor * src0, - const struct ggml_tensor * src1, - struct ggml_tensor * dst) { - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_BINARY_OP_LOCALS; - - //const int64_t ne = ne0*ne1*ne2*ne3; - - const int ith = params->ith; - const int nth = params->nth; - - GGML_ASSERT(ne02 == ne12); - GGML_ASSERT(ne03 == ne13); - GGML_ASSERT(ne2 == ne12); - GGML_ASSERT(ne3 == ne13); - - // TODO: we don't support permuted src0 - GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); - - // dst cannot be transposed or permuted - GGML_ASSERT(nb0 == sizeof(float)); - GGML_ASSERT(nb0 <= nb1); - GGML_ASSERT(nb1 <= nb2); - GGML_ASSERT(nb2 <= nb3); + ggml_vec_dot_t const vec_dot = type_traits[type].vec_dot; + enum ggml_type const vec_dot_type = type_traits[type].vec_dot_type; + ggml_from_float_t const from_float_to_vec_dot = type_traits[vec_dot_type].from_float; GGML_ASSERT(ne0 == ne01); GGML_ASSERT(ne1 == ne11); - GGML_ASSERT(ne2 == ne02); - GGML_ASSERT(ne3 == ne03); - - // nb01 >= nb00 - src0 is not transposed - // compute by src0 rows - -#if defined(GGML_USE_CLBLAST) - if (ggml_cl_can_mul_mat(src0, src1, dst)) { - if (params->ith == 0 && params->type == GGML_TASK_COMPUTE) { - ggml_cl_mul_mat(src0, src1, dst, params->wdata, params->wsize); - } - return; - } -#endif - -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) - if (ggml_compute_forward_mul_mat_use_blas(src0, src1, dst)) { - GGML_ASSERT(nb10 == sizeof(float)); - - if (params->ith != 0) { - return; - } - - if (params->type == GGML_TASK_INIT) { - return; - } - - if (params->type == GGML_TASK_FINALIZE) { - return; - } - - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - float * const wdata = params->wdata; - { - size_t id = 0; - for (int64_t i01 = 0; i01 < ne01; ++i01) { - for (int64_t i00 = 0; i00 < ne00; ++i00) { - wdata[id++] = GGML_FP16_TO_FP32(*(ggml_fp16_t *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00)); - } - } - - assert(id*sizeof(float) <= params->wsize); - } - - const float * x = wdata; - const float * y = (float *) ((char *) src1->data + i02*nb12 + i03*nb13); - - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); - - // zT = y * xT - cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, - ne11, ne01, ne10, - 1.0f, y, ne10, - x, ne00, - 0.0f, d, ne01); - } - } - - /*printf("CBLAS F16 = %f ms, %d x %d x %d x %d\n", (ggml_perf_time_us() - t0)/1000.0, ne0, ne1, ne2, ne3);*/ - - return; - } -#endif - - if (params->type == GGML_TASK_INIT) { - ggml_fp16_t * const wdata = params->wdata; - - size_t id = 0; - for (int64_t i13 = 0; i13 < ne13; ++i13) { - for (int64_t i12 = 0; i12 < ne12; ++i12) { - for (int64_t i11 = 0; i11 < ne11; ++i11) { - for (int64_t i10 = 0; i10 < ne10; ++i10) { - wdata[id++] = GGML_FP32_TO_FP16(*(float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10)); - } - } - } - } - - GGML_ASSERT(id*sizeof(ggml_fp16_t) <= params->wsize); - - return; - } - - if (params->type == GGML_TASK_FINALIZE) { - return; - } - - // fp16 -> half the size, so divide by 2 - // TODO: do not support transposed src1 - assert(nb10/2 == sizeof(ggml_fp16_t)); - - // parallelize by src0 rows using ggml_vec_dot_f16 - - // total rows in src0 - const int nr = ne01*ne02*ne03; - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - ggml_fp16_t * wdata = params->wdata; - - for (int ir = ir0; ir < ir1; ++ir) { - // src0 indices - const int i03 = ir/(ne02*ne01); - const int i02 = (ir - i03*ne02*ne01)/ne01; - const int i01 = (ir - i03*ne02*ne01 - i02*ne01); - - const int i13 = i03; - const int i12 = i02; - - const int i0 = i01; - const int i2 = i02; - const int i3 = i03; - - ggml_fp16_t * src0_row = (ggml_fp16_t *) ((char *) src0->data + (i01*nb01 + i02*nb02 + i03*nb03)); - ggml_fp16_t * src1_col = wdata + ( 0 + i12*ne11 + i13*ne12*ne11)*ne00; - - float * dst_col = (float *) ((char *) dst->data + (i0*nb0 + 0*nb1 + i2*nb2 + i3*nb3)); - - for (int64_t ic = 0; ic < ne11; ++ic) { - ggml_vec_dot_f16(ne00, &dst_col[ic*ne0], src0_row, src1_col + ic*ne00); - } - } - - //int64_t t1 = ggml_time_us(); - //static int64_t acc = 0; - //acc += t1 - t0; - //if (t1 - t0 > 10) { - // printf("\n"); - // printf("ne00 = %5d, ne01 = %5d, ne02 = %5d, ne03 = %5d\n", ne00, ne01, ne02, ne03); - // printf("nb00 = %5d, nb01 = %5d, nb02 = %5d, nb03 = %5d\n", nb00, nb01, nb02, nb03); - // printf("ne10 = %5d, ne11 = %5d, ne12 = %5d, ne13 = %5d\n", ne10, ne11, ne12, ne13); - - // printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX task %d/%d: %d us, acc = %d\n", ith, nth, (int) (t1 - t0), (int) acc); - //} -} - -static void ggml_compute_forward_mul_mat_q_f32( - const struct ggml_compute_params * params, - const struct ggml_tensor * src0, - const struct ggml_tensor * src1, - struct ggml_tensor * dst) { - int64_t t0 = ggml_perf_time_us(); - UNUSED(t0); - - GGML_TENSOR_BINARY_OP_LOCALS; - - const int ith = params->ith; - const int nth = params->nth; - - GGML_ASSERT(ne02 == ne12); - GGML_ASSERT(ne03 == ne13); - GGML_ASSERT(ne2 == ne12); - GGML_ASSERT(ne3 == ne13); - - const enum ggml_type type = src0->type; - quantize_row_q_t const quantize_row_q_dot = quantize_fns[type].quantize_row_q_dot; - vec_dot_q_t const vec_dot_q = quantize_fns[type].vec_dot_q; - enum ggml_type const vec_dot_type = quantize_fns[type].vec_dot_type; + GGML_ASSERT(ne2 == ne12); + GGML_ASSERT(ne3 == ne13); // we don't support permuted src0 or src1 - GGML_ASSERT(nb00 == GGML_TYPE_SIZE[type]); + GGML_ASSERT(nb00 == ggml_type_size(type)); GGML_ASSERT(nb10 == sizeof(float)); // dst cannot be transposed or permuted @@ -10928,16 +11069,20 @@ static void ggml_compute_forward_mul_mat_q_f32( GGML_ASSERT(nb1 <= nb2); GGML_ASSERT(nb2 <= nb3); - GGML_ASSERT(ne0 == ne01); - GGML_ASSERT(ne1 == ne11); - GGML_ASSERT(ne2 == ne02); - GGML_ASSERT(ne3 == ne03); + // broadcast factors + const int64_t r2 = ne12/ne02; + const int64_t r3 = ne13/ne03; // nb01 >= nb00 - src0 is not transposed // compute by src0 rows #if defined(GGML_USE_CLBLAST) if (ggml_cl_can_mul_mat(src0, src1, dst)) { + // TODO: handle case when src0 is broadcast-able into src1 across 2nd,3rd dimension + // ref: https://github.com/ggerganov/ggml/pull/224 + GGML_ASSERT(ne02 == ne12); + GGML_ASSERT(ne03 == ne13); + if (params->ith == 0 && params->type == GGML_TASK_COMPUTE) { ggml_cl_mul_mat(src0, src1, dst, params->wdata, params->wsize); } @@ -10959,27 +11104,31 @@ static void ggml_compute_forward_mul_mat_q_f32( return; } - float * const wdata = params->wdata; - dequantize_row_q_t const dequantize_row_q = quantize_fns[type].dequantize_row_q; + for (int64_t i13 = 0; i13 < ne13; i13++) { + for (int64_t i12 = 0; i12 < ne12; i12++) { + // broadcast src0 into src1 across 2nd,3rd dimension + const int64_t i03 = i13/r3; + const int64_t i02 = i12/r2; - for (int64_t i03 = 0; i03 < ne03; i03++) { - for (int64_t i02 = 0; i02 < ne02; i02++) { - const float * y = (float *) ((char *) src1->data + i02*nb12 + i03*nb13); + const void * x = (char *) src0->data + i02*nb02 + i03*nb03; + const float * y = (float *) ((char *) src1->data + i12*nb12 + i13*nb13); - float * d = (float *) ((char *) dst->data + i02*nb2 + i03*nb3); + float * d = (float *) ((char *) dst->data + i12*nb2 + i13*nb3); + + if (type != GGML_TYPE_F32) { + float * const wdata = params->wdata; + ggml_to_float_t const to_float = type_traits[type].to_float; - { size_t id = 0; for (int64_t i01 = 0; i01 < ne01; ++i01) { - dequantize_row_q((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01, wdata + id, ne00); + to_float((const char *) x + i01*nb01, wdata + id, ne00); id += ne00; } assert(id*sizeof(float) <= params->wsize); + x = wdata; } - const float * x = wdata; - cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, ne11, ne01, ne10, 1.0f, y, ne10, @@ -10995,14 +11144,16 @@ static void ggml_compute_forward_mul_mat_q_f32( #endif if (params->type == GGML_TASK_INIT) { - char * wdata = params->wdata; - const size_t row_size = ne10*GGML_TYPE_SIZE[vec_dot_type]/GGML_BLCK_SIZE[vec_dot_type]; + if (src1->type != vec_dot_type) { + char * wdata = params->wdata; + const size_t row_size = ne10*ggml_type_size(vec_dot_type)/ggml_blck_size(vec_dot_type); - for (int64_t i13 = 0; i13 < ne13; ++i13) { - for (int64_t i12 = 0; i12 < ne12; ++i12) { - for (int64_t i11 = 0; i11 < ne11; ++i11) { - quantize_row_q_dot((float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11), (void *) wdata, ne10); - wdata += row_size; + for (int64_t i13 = 0; i13 < ne13; ++i13) { + for (int64_t i12 = 0; i12 < ne12; ++i12) { + for (int64_t i11 = 0; i11 < ne11; ++i11) { + from_float_to_vec_dot((float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11), (void *) wdata, ne10); + wdata += row_size; + } } } } @@ -11014,97 +11165,92 @@ static void ggml_compute_forward_mul_mat_q_f32( return; } - // parallelize by src0 rows using ggml_vec_dot_q + const void * wdata = (src1->type == vec_dot_type) ? src1->data : params->wdata; + const size_t row_size = ne10*ggml_type_size(vec_dot_type)/ggml_blck_size(vec_dot_type); - // total rows in src0 - const int nr = ne01*ne02*ne03; + const int64_t nr0 = ne01; // src0 rows + const int64_t nr1 = ne11*ne12*ne13; // src1 rows - // rows per thread - const int dr = (nr + nth - 1)/nth; + //printf("nr0 = %lld, nr1 = %lld\n", nr0, nr1); - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); + // distribute the thread work across the inner or outer loop based on which one is larger - void * wdata = params->wdata; - const size_t row_size = ne00*GGML_TYPE_SIZE[vec_dot_type]/GGML_BLCK_SIZE[vec_dot_type]; + const int64_t nth0 = nr0 > nr1 ? nth : 1; // parallelize by src0 rows + const int64_t nth1 = nr0 > nr1 ? 1 : nth; // parallelize by src1 rows - for (int ir = ir0; ir < ir1; ++ir) { - // src0 indices - const int i03 = ir/(ne02*ne01); - const int i02 = (ir - i03*ne02*ne01)/ne01; - const int i01 = (ir - i03*ne02*ne01 - i02*ne01); + const int64_t ith0 = ith % nth0; + const int64_t ith1 = ith / nth0; - const int i13 = i03; - const int i12 = i02; + const int64_t dr0 = (nr0 + nth0 - 1)/nth0; + const int64_t dr1 = (nr1 + nth1 - 1)/nth1; - const int i0 = i01; - const int i2 = i02; - const int i3 = i03; + const int64_t ir010 = dr0*ith0; + const int64_t ir011 = MIN(ir010 + dr0, nr0); - void * src0_row = (void *) ((char *) src0->data + (i01*nb01 + i02*nb02 + i03*nb03)); - char * src1_col = ((char *) wdata + ( (0 + i12*ne11 + i13*ne12*ne11)*row_size)); + const int64_t ir110 = dr1*ith1; + const int64_t ir111 = MIN(ir110 + dr1, nr1); - float * dst_col = (float *) ((char *) dst->data + (i0*nb0 + 0*nb1 + i2*nb2 + i3*nb3)); + //printf("ir010 = %6lld, ir011 = %6lld, ir110 = %6lld, ir111 = %6lld\n", ir010, ir011, ir110, ir111); - assert(ne00 % 32 == 0); - - for (int64_t ic = 0; ic < ne11; ++ic) { - vec_dot_q(ne00, &dst_col[ic*ne0], src0_row, (void *) (src1_col + ic*row_size)); - } + // threads with no work simply yield (not sure if it helps) + if (ir010 >= ir011 || ir110 >= ir111) { + sched_yield(); + return; } - //int64_t t1 = ggml_time_us(); - //static int64_t acc = 0; - //acc += t1 - t0; - //if (t1 - t0 > 10) { - // printf("\n"); - // printf("ne00 = %5d, ne01 = %5d, ne02 = %5d, ne03 = %5d\n", ne00, ne01, ne02, ne03); - // printf("nb00 = %5d, nb01 = %5d, nb02 = %5d, nb03 = %5d\n", nb00, nb01, nb02, nb03); - // printf("ne10 = %5d, ne11 = %5d, ne12 = %5d, ne13 = %5d\n", ne10, ne11, ne12, ne13); + assert(ne12 % ne02 == 0); + assert(ne13 % ne03 == 0); - // printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX task %d/%d: %d us, acc = %d\n", ith, nth, (int) (t1 - t0), (int) acc); - //} -} + // block-tiling attempt + const int64_t blck_0 = 16; + const int64_t blck_1 = 16; -static void ggml_compute_forward_mul_mat( - const struct ggml_compute_params * params, - const struct ggml_tensor * src0, - const struct ggml_tensor * src1, - struct ggml_tensor * dst) { - switch (src0->type) { - case GGML_TYPE_Q4_0: - case GGML_TYPE_Q4_1: - case GGML_TYPE_Q5_0: - case GGML_TYPE_Q5_1: - case GGML_TYPE_Q8_0: - case GGML_TYPE_Q8_1: - case GGML_TYPE_Q2_K: - case GGML_TYPE_Q3_K: - case GGML_TYPE_Q4_K: - case GGML_TYPE_Q5_K: - case GGML_TYPE_Q6_K: - { - ggml_compute_forward_mul_mat_q_f32(params, src0, src1, dst); - } break; - case GGML_TYPE_F16: - { - ggml_compute_forward_mul_mat_f16_f32(params, src0, src1, dst); - } break; - case GGML_TYPE_F32: - { - ggml_compute_forward_mul_mat_f32(params, src0, src1, dst); - } break; - default: - { - GGML_ASSERT(false); - } break; + // attempt to reduce false-sharing (does not seem to make a difference) + float tmp[16]; + + for (int64_t iir1 = ir110; iir1 < ir111; iir1 += blck_1) { + for (int64_t iir0 = ir010; iir0 < ir011; iir0 += blck_0) { + for (int64_t ir1 = iir1; ir1 < iir1 + blck_1 && ir1 < ir111; ++ir1) { + const int64_t i13 = (ir1/(ne12*ne11)); + const int64_t i12 = (ir1 - i13*ne12*ne11)/ne11; + const int64_t i11 = (ir1 - i13*ne12*ne11 - i12*ne11); + + // broadcast src0 into src1 + const int64_t i03 = i13/r3; + const int64_t i02 = i12/r2; + + const int64_t i1 = i11; + const int64_t i2 = i12; + const int64_t i3 = i13; + + const char * src0_row = (const char *) src0->data + (0 + i02*nb02 + i03*nb03); + + // desc: when src1 is not a contiguous memory block we have to calculate the offset using the strides + // if it is, then we have either copied the data to params->wdata and made it contiguous or we are using + // the original src1 data pointer, so we should index using the indices directly + // TODO: this is a bit of a hack, we should probably have a better way to handle this + const char * src1_col = (const char *) wdata + + (src1_cont || src1->type != vec_dot_type + ? (i11 + i12*ne11 + i13*ne12*ne11)*row_size + : (i11*nb11 + i12*nb12 + i13*nb13)); + + float * dst_col = (float *) ((char *) dst->data + (i1*nb1 + i2*nb2 + i3*nb3)); + + //for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir011; ++ir0) { + // vec_dot(ne00, &dst_col[ir0], src0_row + ir0*nb01, src1_col); + //} + + for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir011; ++ir0) { + vec_dot(ne00, &tmp[ir0 - iir0], src0_row + ir0*nb01, src1_col); + } + memcpy(&dst_col[iir0], tmp, (MIN(iir0 + blck_0, ir011) - iir0)*sizeof(float)); + } + } } } // ggml_compute_forward_out_prod - static void ggml_compute_forward_out_prod_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, @@ -11313,21 +11459,17 @@ static void ggml_compute_forward_set_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, const struct ggml_tensor * src1, - const struct ggml_tensor * opt0, struct ggml_tensor * dst) { GGML_ASSERT(ggml_are_same_shape(src0, dst)); GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0)); - GGML_ASSERT(opt0->type == GGML_TYPE_I32); - GGML_ASSERT(ggml_nelements(opt0) == 5); - // view src0 and dst with these strides and data offset inbytes during set // nb0 is implicitely element_size because src0 and dst are contiguous - size_t nb1 = ((int32_t *) opt0->data)[0]; - size_t nb2 = ((int32_t *) opt0->data)[1]; - size_t nb3 = ((int32_t *) opt0->data)[2]; - size_t offset = ((int32_t *) opt0->data)[3]; - bool inplace = (bool) ((int32_t *) opt0->data)[4]; + size_t nb1 = ((int32_t *) dst->op_params)[0]; + size_t nb2 = ((int32_t *) dst->op_params)[1]; + size_t nb3 = ((int32_t *) dst->op_params)[2]; + size_t offset = ((int32_t *) dst->op_params)[3]; + bool inplace = (bool) ((int32_t *) dst->op_params)[4]; if (!inplace && (params->type == GGML_TASK_INIT)) { // memcpy needs to be synchronized across threads to avoid race conditions. @@ -11387,13 +11529,12 @@ static void ggml_compute_forward_set( const struct ggml_compute_params * params, const struct ggml_tensor * src0, const struct ggml_tensor * src1, - const struct ggml_tensor * opt0, struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F32: { - ggml_compute_forward_set_f32(params, src0, src1, opt0, dst); + ggml_compute_forward_set_f32(params, src0, src1, dst); } break; case GGML_TYPE_F16: case GGML_TYPE_Q4_0: @@ -11490,11 +11631,11 @@ static void ggml_compute_forward_get_rows_q( const int nc = src0->ne[0]; const int nr = ggml_nelements(src1); const enum ggml_type type = src0->type; - dequantize_row_q_t const dequantize_row_q = quantize_fns[type].dequantize_row_q; + ggml_to_float_t const dequantize_row_q = type_traits[type].to_float; assert( dst->ne[0] == nc); assert( dst->ne[1] == nr); - assert(src0->nb[0] == GGML_TYPE_SIZE[type]); + assert(src0->nb[0] == ggml_type_size(type)); for (int i = 0; i < nr; ++i) { const int r = ((int32_t *) src1->data)[i]; @@ -11789,17 +11930,14 @@ static void ggml_compute_forward_diag( static void ggml_compute_forward_diag_mask_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst, const float value) { - GGML_ASSERT(src1->type == GGML_TYPE_I32); - GGML_ASSERT(ggml_nelements(src1) == 2); const int ith = params->ith; const int nth = params->nth; - const int n_past = ((int32_t *) src1->data)[0]; - const bool inplace = (bool)((int32_t *) src1->data)[1]; + const int n_past = ((int32_t *) dst->op_params)[0]; + const bool inplace = (bool)((int32_t *) dst->op_params)[1]; GGML_ASSERT(n_past >= 0); @@ -11842,12 +11980,11 @@ static void ggml_compute_forward_diag_mask_f32( static void ggml_compute_forward_diag_mask_inf( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F32: { - ggml_compute_forward_diag_mask_f32(params, src0, src1, dst, -INFINITY); + ggml_compute_forward_diag_mask_f32(params, src0, dst, -INFINITY); } break; default: { @@ -11859,12 +11996,11 @@ static void ggml_compute_forward_diag_mask_inf( static void ggml_compute_forward_diag_mask_zero( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F32: { - ggml_compute_forward_diag_mask_f32(params, src0, src1, dst, 0); + ggml_compute_forward_diag_mask_f32(params, src0, dst, 0); } break; default: { @@ -12062,26 +12198,23 @@ static void ggml_compute_forward_soft_max_back( static void ggml_compute_forward_alibi_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { assert(params->ith == 0); - GGML_ASSERT(src1->type == GGML_TYPE_I32); - GGML_ASSERT(ggml_nelements(src1) == 3); - if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return; } - const int n_past = ((int32_t *) src1->data)[0]; - const int n_head = ((int32_t *) src1->data)[1]; - const float max_bias = ((float *) src1->data)[2]; + const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_head = ((int32_t *) dst->op_params)[1]; + float max_bias; + memcpy(&max_bias, (int32_t *) dst->op_params + 2, sizeof(float)); assert(n_past >= 0); const int ne0 = src0->ne[0]; // all_seq_len = n_past + ne1 const int ne1 = src0->ne[1]; // seq_len_without_past - //const int ne2 = src0->ne[2]; // n_head -> this is k + const int ne2 = src0->ne[2]; // n_head -> this is k //const int ne3 = src0->ne[3]; // 1 -> bsz const int n = ggml_nrows(src0); @@ -12092,8 +12225,9 @@ static void ggml_compute_forward_alibi_f32( const int nb2 = src0->nb[2]; //const int nb3 = src0->nb[3]; - assert(nb0 == sizeof(float)); - assert(ne1 + n_past == ne0); (void) n_past; + GGML_ASSERT(nb0 == sizeof(float)); + GGML_ASSERT(ne1 + n_past == ne0); + GGML_ASSERT(n_head == ne2); // add alibi to src0 (KQ_scaled) const int n_heads_log2_floor = 1 << (int) floor(log2(n_head)); @@ -12117,7 +12251,7 @@ static void ggml_compute_forward_alibi_f32( m_k = powf(m1, 2 * (k - n_heads_log2_floor) + 1); } - pdst[0] = (i-ne0+1) * m_k + src[0]; + pdst[0] = i * m_k + src[0]; } } @@ -12127,26 +12261,23 @@ static void ggml_compute_forward_alibi_f32( static void ggml_compute_forward_alibi_f16( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { assert(params->ith == 0); - GGML_ASSERT(src1->type == GGML_TYPE_I32); - GGML_ASSERT(ggml_nelements(src1) == 3); - if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return; } - const int n_past = ((int32_t *) src1->data)[0]; - const int n_head = ((int32_t *) src1->data)[1]; - const float max_bias = ((float *) src1->data)[2]; + const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_head = ((int32_t *) dst->op_params)[1]; + float max_bias; + memcpy(&max_bias, (int32_t *) dst->op_params + 2, sizeof(float)); assert(n_past >= 0); const int ne0 = src0->ne[0]; // all_seq_len = n_past + ne1 const int ne1 = src0->ne[1]; // seq_len_without_past - //const int ne2 = src0->ne[2]; // n_head -> this is k + const int ne2 = src0->ne[2]; // n_head -> this is k //const int ne3 = src0->ne[3]; // 1 -> bsz const int n = ggml_nrows(src0); @@ -12157,8 +12288,9 @@ static void ggml_compute_forward_alibi_f16( const int nb2 = src0->nb[2]; //const int nb3 = src0->nb[3]; - assert(nb0 == sizeof(ggml_fp16_t)); - assert(ne1 + n_past == ne0); (void) n_past; + GGML_ASSERT(nb0 == sizeof(ggml_fp16_t)); + GGML_ASSERT(ne1 + n_past == ne0); (void) n_past; + GGML_ASSERT(n_head == ne2); // add alibi to src0 (KQ_scaled) const int n_heads_log2_floor = 1 << (int) floor(log2(n_head)); @@ -12183,7 +12315,7 @@ static void ggml_compute_forward_alibi_f16( } // we return F32 - pdst[0] = (i-ne0+1) * m_k + GGML_FP16_TO_FP32(src[0]); + pdst[0] = i * m_k + GGML_FP16_TO_FP32(src[0]); } } } @@ -12192,16 +12324,15 @@ static void ggml_compute_forward_alibi_f16( static void ggml_compute_forward_alibi( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F16: { - ggml_compute_forward_alibi_f16(params, src0, src1, dst); + ggml_compute_forward_alibi_f16(params, src0, dst); } break; case GGML_TYPE_F32: { - ggml_compute_forward_alibi_f32(params, src0, src1, dst); + ggml_compute_forward_alibi_f32(params, src0, dst); } break; case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: @@ -12225,25 +12356,22 @@ static void ggml_compute_forward_alibi( } } - // ggml_compute_forward_clamp static void ggml_compute_forward_clamp_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { assert(params->ith == 0); - GGML_ASSERT(src1->type == GGML_TYPE_F32); - GGML_ASSERT(ggml_nelements(src1) == 2); - if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return; } - const float min = ((float *) src1->data)[0]; - const float max = ((float *) src1->data)[1]; + float min; + float max; + memcpy(&min, (float *) dst->op_params + 0, sizeof(float)); + memcpy(&max, (float *) dst->op_params + 1, sizeof(float)); const int ith = params->ith; const int nth = params->nth; @@ -12273,12 +12401,11 @@ static void ggml_compute_forward_clamp_f32( static void ggml_compute_forward_clamp( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F32: { - ggml_compute_forward_clamp_f32(params, src0, src1, dst); + ggml_compute_forward_clamp_f32(params, src0, dst); } break; case GGML_TYPE_F16: case GGML_TYPE_Q4_0: @@ -12308,19 +12435,27 @@ static void ggml_compute_forward_clamp( static void ggml_compute_forward_rope_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { - GGML_ASSERT(src1->type == GGML_TYPE_I32); - GGML_ASSERT(ggml_nelements(src1) == 4); if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return; } - const int n_past = ((int32_t *) src1->data)[0]; - const int n_dims = ((int32_t *) src1->data)[1]; - const int mode = ((int32_t *) src1->data)[2]; - const int n_ctx = ((int32_t *) src1->data)[3]; + float freq_base; + float freq_scale; + + // these two only relevant for xPos RoPE: + float xpos_base; + bool xpos_down; + + const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_dims = ((int32_t *) dst->op_params)[1]; + const int mode = ((int32_t *) dst->op_params)[2]; + const int n_ctx = ((int32_t *) dst->op_params)[3]; + memcpy(&freq_base, (int32_t *) dst->op_params + 4, sizeof(float)); + memcpy(&freq_scale, (int32_t *) dst->op_params + 5, sizeof(float)); + memcpy(&xpos_base, (int32_t *) dst->op_params + 6, sizeof(float)); + memcpy(&xpos_down, (int32_t *) dst->op_params + 7, sizeof(bool)); assert(n_past >= 0); @@ -12349,7 +12484,7 @@ static void ggml_compute_forward_rope_f32( // row index used to determine which thread to use int ir = 0; - const float theta_scale = powf(10000.0, -2.0f/n_dims); + const float theta_scale = powf(freq_base, -2.0f/n_dims); const bool is_neox = mode & 2; const bool is_glm = mode & 4; @@ -12361,7 +12496,7 @@ static void ggml_compute_forward_rope_f32( if (ir++ < ir0) continue; if (ir > ir1) break; - float theta = (float)p; + float theta = freq_scale * (float)p; if (is_glm) { theta = MIN(p, n_ctx - 2); @@ -12392,6 +12527,9 @@ static void ggml_compute_forward_rope_f32( for (int64_t i0 = 0; i0 < ne0; i0 += 2) { const float cos_theta = cosf(theta); const float sin_theta = sinf(theta); + // zeta scaling for xPos only: + float zeta = xpos_base != 0.0f ? powf((i0 + 0.4f * ne0) / (1.4f * ne0), (n_past + i2) / xpos_base) : 1.0f; + if (xpos_down) zeta = 1.0f / zeta; theta *= theta_scale; @@ -12401,11 +12539,11 @@ static void ggml_compute_forward_rope_f32( const float x0 = src[0]; const float x1 = src[1]; - dst_data[0] = x0*cos_theta - x1*sin_theta; - dst_data[1] = x0*sin_theta + x1*cos_theta; + dst_data[0] = x0*cos_theta*zeta - x1*sin_theta*zeta; + dst_data[1] = x0*sin_theta*zeta + x1*cos_theta*zeta; } } else { - // TODO: this is probably wrong, but I can't figure it out .. + // TODO: this might be wrong for ne0 != n_dims - need double check // ref: https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt_neox/modeling_gpt_neox.py#LL251C1-L294C28 for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { for (int64_t ic = 0; ic < n_dims; ic += 2) { @@ -12435,19 +12573,21 @@ static void ggml_compute_forward_rope_f32( static void ggml_compute_forward_rope_f16( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { - GGML_ASSERT(src1->type == GGML_TYPE_I32); - GGML_ASSERT(ggml_nelements(src1) == 4); if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return; } - const int n_past = ((int32_t *) src1->data)[0]; - const int n_dims = ((int32_t *) src1->data)[1]; - const int mode = ((int32_t *) src1->data)[2]; - const int n_ctx = ((int32_t *) src1->data)[3]; + float freq_base; + float freq_scale; + + const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_dims = ((int32_t *) dst->op_params)[1]; + const int mode = ((int32_t *) dst->op_params)[2]; + const int n_ctx = ((int32_t *) dst->op_params)[3]; + memcpy(&freq_base, (int32_t *) dst->op_params + 4, sizeof(float)); + memcpy(&freq_scale, (int32_t *) dst->op_params + 5, sizeof(float)); assert(n_past >= 0); @@ -12476,7 +12616,7 @@ static void ggml_compute_forward_rope_f16( // row index used to determine which thread to use int ir = 0; - const float theta_scale = powf(10000.0, -2.0f/n_dims); + const float theta_scale = powf(freq_base, -2.0f/n_dims); const bool is_neox = mode & 2; const bool is_glm = mode & 4; @@ -12488,7 +12628,7 @@ static void ggml_compute_forward_rope_f16( if (ir++ < ir0) continue; if (ir > ir1) break; - float theta = (float)p; + float theta = freq_scale * (float)p; if (is_glm) { theta = MIN(p, n_ctx - 2); @@ -12532,7 +12672,7 @@ static void ggml_compute_forward_rope_f16( dst_data[1] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); } } else { - // TODO: this is probably wrong, but I can't figure it out .. + // TODO: this might be wrong for ne0 != n_dims - need double check // ref: https://github.com/huggingface/transformers/blob/main/src/transformers/models/gpt_neox/modeling_gpt_neox.py#LL251C1-L294C28 for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { for (int64_t ic = 0; ic < n_dims; ic += 2) { @@ -12549,7 +12689,7 @@ static void ggml_compute_forward_rope_f16( const float x0 = GGML_FP16_TO_FP32(src[0]); const float x1 = GGML_FP16_TO_FP32(src[n_dims/2]); - dst_data[0] = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); + dst_data[0] = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); dst_data[n_dims/2] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); } } @@ -12562,16 +12702,15 @@ static void ggml_compute_forward_rope_f16( static void ggml_compute_forward_rope( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F16: { - ggml_compute_forward_rope_f16(params, src0, src1, dst); + ggml_compute_forward_rope_f16(params, src0, dst); } break; case GGML_TYPE_F32: { - ggml_compute_forward_rope_f32(params, src0, src1, dst); + ggml_compute_forward_rope_f32(params, src0, dst); } break; default: { @@ -12585,10 +12724,7 @@ static void ggml_compute_forward_rope( static void ggml_compute_forward_rope_back_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { - assert(src1->type == GGML_TYPE_I32); - assert(ggml_nelements(src1) == 3); if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return; @@ -12598,9 +12734,21 @@ static void ggml_compute_forward_rope_back_f32( // dx = rope_back(dy, src1) // src0 is dy, src1 contains options - const int n_past = ((int32_t *) src1->data)[0]; - const int n_dims = ((int32_t *) src1->data)[1]; - const int mode = ((int32_t *) src1->data)[2]; + float freq_base; + float freq_scale; + + // these two only relevant for xPos RoPE: + float xpos_base; + bool xpos_down; + + const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_dims = ((int32_t *) dst->op_params)[1]; + const int mode = ((int32_t *) dst->op_params)[2]; + const int n_ctx = ((int32_t *) dst->op_params)[3]; UNUSED(n_ctx); + memcpy(&freq_base, (int32_t *) dst->op_params + 4, sizeof(float)); + memcpy(&freq_scale, (int32_t *) dst->op_params + 5, sizeof(float)); + memcpy(&xpos_base, (int32_t *) dst->op_params + 6, sizeof(float)); + memcpy(&xpos_down, (int32_t *) dst->op_params + 7, sizeof(bool)); assert(n_past >= 0); @@ -12626,7 +12774,7 @@ static void ggml_compute_forward_rope_back_f32( // row index used to determine which thread to use int ir = 0; - const float theta_scale = powf(10000.0, -2.0f/n_dims); + const float theta_scale = powf(freq_base, -2.0f/n_dims); const bool is_neox = mode & 2; @@ -12637,12 +12785,15 @@ static void ggml_compute_forward_rope_back_f32( if (ir++ < ir0) continue; if (ir > ir1) break; - float theta = (float)p; + float theta = freq_scale * (float)p; if (!is_neox) { for (int64_t i0 = 0; i0 < ne0; i0 += 2) { const float cos_theta = cosf(theta); const float sin_theta = sinf(theta); + // zeta scaling for xPos only: + float zeta = xpos_base != 0.0f ? powf((i0 + 0.4f * ne0) / (1.4f * ne0), (n_past + i2) / xpos_base) : 1.0f; + if (xpos_down) zeta = 1.0f / zeta; theta *= theta_scale; @@ -12652,8 +12803,8 @@ static void ggml_compute_forward_rope_back_f32( const float dy0 = dy[0]; const float dy1 = dy[1]; - dx[0] = dy0*cos_theta + dy1*sin_theta; - dx[1] = - dy0*sin_theta + dy1*cos_theta; + dx[0] = dy0*cos_theta*zeta + dy1*sin_theta*zeta; + dx[1] = - dy0*sin_theta*zeta + dy1*cos_theta*zeta; } } else { for (int64_t ib = 0; ib < ne0/n_dims; ++ib) { @@ -12684,10 +12835,7 @@ static void ggml_compute_forward_rope_back_f32( static void ggml_compute_forward_rope_back_f16( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { - assert(src1->type == GGML_TYPE_I32); - assert(ggml_nelements(src1) == 3); if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return; @@ -12697,9 +12845,9 @@ static void ggml_compute_forward_rope_back_f16( // dx = rope_back(dy, src1) // src0 is dy, src1 contains options - const int n_past = ((int32_t *) src1->data)[0]; - const int n_dims = ((int32_t *) src1->data)[1]; - const int mode = ((int32_t *) src1->data)[2]; + const int n_past = ((int32_t *) dst->op_params)[0]; + const int n_dims = ((int32_t *) dst->op_params)[1]; + const int mode = ((int32_t *) dst->op_params)[2]; assert(n_past >= 0); @@ -12783,16 +12931,15 @@ static void ggml_compute_forward_rope_back_f16( static void ggml_compute_forward_rope_back( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * src1, struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F16: { - ggml_compute_forward_rope_back_f16(params, src0, src1, dst); + ggml_compute_forward_rope_back_f16(params, src0, dst); } break; case GGML_TYPE_F32: { - ggml_compute_forward_rope_back_f32(params, src0, src1, dst); + ggml_compute_forward_rope_back_f32(params, src0, dst); } break; default: { @@ -12989,7 +13136,7 @@ static void ggml_compute_forward_conv_1d_s1_ph( const struct ggml_compute_params * params, const struct ggml_tensor * src0, const struct ggml_tensor * src1, - struct ggml_tensor * dst) { + struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F16: { @@ -13192,7 +13339,7 @@ static void ggml_compute_forward_conv_1d_s2_ph( const struct ggml_compute_params * params, const struct ggml_tensor * src0, const struct ggml_tensor * src1, - struct ggml_tensor * dst) { + struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F16: { @@ -13212,14 +13359,13 @@ static void ggml_compute_forward_conv_1d_s2_ph( // ggml_compute_forward_conv_1d static void ggml_compute_forward_conv_1d( - const struct ggml_compute_params * params, - const struct ggml_tensor * src0, - const struct ggml_tensor * src1, - const struct ggml_tensor * opt0, - struct ggml_tensor * dst) { - const int32_t s0 = ((const int32_t*)(opt0->data))[0]; - const int32_t p0 = ((const int32_t*)(opt0->data))[1]; - const int32_t d0 = ((const int32_t*)(opt0->data))[2]; + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + const int32_t s0 = ((const int32_t*)(dst->op_params))[0]; + const int32_t p0 = ((const int32_t*)(dst->op_params))[1]; + const int32_t d0 = ((const int32_t*)(dst->op_params))[2]; GGML_ASSERT(d0 == 1); // dilation not supported GGML_ASSERT(p0 == src0->ne[0]/2); // only half padding supported if (s0 == 1) { @@ -13231,9 +13377,9 @@ static void ggml_compute_forward_conv_1d( }; } -// ggml_compute_forward_conv_2d_sk_p0 +// ggml_compute_forward_conv_2d -static void ggml_compute_forward_conv_2d_sk_p0_f16_f32( +static void ggml_compute_forward_conv_2d_f16_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, const struct ggml_tensor * src1, @@ -13256,11 +13402,17 @@ static void ggml_compute_forward_conv_2d_sk_p0_f16_f32( // size of the convolution row - the kernel size unrolled across all channels const int ew0 = nk0*nk1*ne02; + const int32_t s0 = ((const int32_t*)(dst->op_params))[0]; + const int32_t s1 = ((const int32_t*)(dst->op_params))[1]; + const int32_t p0 = ((const int32_t*)(dst->op_params))[2]; + const int32_t p1 = ((const int32_t*)(dst->op_params))[3]; + const int32_t d0 = ((const int32_t*)(dst->op_params))[4]; + const int32_t d1 = ((const int32_t*)(dst->op_params))[5]; + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); GGML_ASSERT(nb10 == sizeof(float)); if (params->type == GGML_TASK_INIT) { - // TODO: fix this memset (wsize is overestimated) memset(params->wdata, 0, params->wsize); // prepare source data (src1) @@ -13275,8 +13427,13 @@ static void ggml_compute_forward_conv_2d_sk_p0_f16_f32( for (int i0 = 0; i0 < ne0; i0++) { for (int ik1 = 0; ik1 < nk1; ik1++) { for (int ik0 = 0; ik0 < nk0; ik0++) { - dst_data[(i1*ne0 + i0)*ew0 + i12*(nk0*nk1) + ik1*nk0 + ik0] = - GGML_FP32_TO_FP16(src[(i1*nk1 + ik1)*ne10 + (i0*nk0 + ik0)]); + const int idx0 = i0*s0 + ik0*d0 - p0; + const int idx1 = i1*s1 + ik1*d1 - p1; + + if (!(idx1 < 0 || idx1 >= ne11 || idx0 < 0 || idx0 >= ne10)) { + dst_data[(i1*ne0 + i0)*ew0 + i12*(nk0*nk1) + ik1*nk0 + ik0] = + GGML_FP32_TO_FP16(src[idx1*ne10 + idx0]); + } } } } @@ -13303,32 +13460,34 @@ static void ggml_compute_forward_conv_2d_sk_p0_f16_f32( ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; - for (int i2 = ip0; i2 < ip1; i2++) { - float * dst_data = (float *)((char *) dst->data + i2*nb2); + for (int i3 = 0; i3 < ne3; i3++) { + for (int i2 = ip0; i2 < ip1; i2++) { + float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2); - for (int i1 = 0; i1 < ne1; ++i1) { - for (int i0 = 0; i0 < ne0; ++i0) { - ggml_vec_dot_f16(ew0, dst_data + i1*ne0 + i0, - (ggml_fp16_t *) ((char *) src0->data + i2*nb03), - (ggml_fp16_t *) wdata + (i1*ne0 + i0)*ew0); + for (int i1 = 0; i1 < ne1; ++i1) { + for (int i0 = 0; i0 < ne0; ++i0) { + ggml_vec_dot_f16(ew0, dst_data + i1*ne0 + i0, + (ggml_fp16_t *) ((char *) src0->data + i2*nb03), + (ggml_fp16_t *) wdata + i3*nb3 + (i1*ne0 + i0)*ew0); + } } } } } -static void ggml_compute_forward_conv_2d_sk_p0( +static void ggml_compute_forward_conv_2d( const struct ggml_compute_params * params, const struct ggml_tensor * src0, const struct ggml_tensor * src1, - struct ggml_tensor * dst) { + struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F16: { - ggml_compute_forward_conv_2d_sk_p0_f16_f32(params, src0, src1, dst); + ggml_compute_forward_conv_2d_f16_f32(params, src0, src1, dst); } break; case GGML_TYPE_F32: { - //ggml_compute_forward_conv_2d_sk_p0_f32(params, src0, src1, dst); + //ggml_compute_forward_conv_2d_f32(params, src0, src1, dst); GGML_ASSERT(false); } break; default: @@ -13338,33 +13497,318 @@ static void ggml_compute_forward_conv_2d_sk_p0( } } -// ggml_compute_forward_conv_2d +// ggml_compute_forward_conv_transpose_2d -static void ggml_compute_forward_conv_2d( - const struct ggml_compute_params* params, - const struct ggml_tensor* src0, - const struct ggml_tensor* src1, - const struct ggml_tensor* opt0, - struct ggml_tensor* dst) { - const int32_t s0 = ((const int32_t*)(opt0->data))[0]; - const int32_t s1 = ((const int32_t*)(opt0->data))[1]; - const int32_t p0 = ((const int32_t*)(opt0->data))[2]; - const int32_t p1 = ((const int32_t*)(opt0->data))[3]; - const int32_t d0 = ((const int32_t*)(opt0->data))[4]; - const int32_t d1 = ((const int32_t*)(opt0->data))[5]; - GGML_ASSERT(d0 == 1); // dilation not supported - GGML_ASSERT(d1 == 1); - GGML_ASSERT(p0 == 0); // padding not supported - GGML_ASSERT(p1 == 0); +static void ggml_compute_forward_conv_transpose_2d( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + struct ggml_tensor * dst) { + GGML_ASSERT(src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_F32); + GGML_ASSERT( dst->type == GGML_TYPE_F32); - if (s0 == src0->ne[0] && s1 == src0->ne[1]) { - ggml_compute_forward_conv_2d_sk_p0(params, src0, src1, dst); + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + GGML_TENSOR_BINARY_OP_LOCALS; + + const int ith = params->ith; + const int nth = params->nth; + + const int nk = ne00*ne01*ne02*ne03; + + GGML_ASSERT(nb00 == sizeof(ggml_fp16_t)); + GGML_ASSERT(nb10 == sizeof(float)); + + if (params->type == GGML_TASK_INIT) { + memset(params->wdata, 0, params->wsize); + + // permute kernel data (src0) from (Kw x Kh x Cout x Cin) to (Cin x Kw x Kh x Cout) + { + ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; + + for (int64_t i03 = 0; i03 < ne03; i03++) { + for (int64_t i02 = 0; i02 < ne02; i02++) { + const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i03*nb03 + i02*nb02); + ggml_fp16_t * dst_data = wdata + i02*ne01*ne00*ne03; + for (int64_t i01 = 0; i01 < ne01; i01++) { + for (int64_t i00 = 0; i00 < ne00; i00++) { + dst_data[i01*ne00*ne03 + i00*ne03 + i03] = src[i01 * ne00 + i00]; + } + } + } + } + } + + // permute source data (src1) from (Sw x Sh x Cin) to (Cin x Sw x Sh) + { + ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + nk; + for (int i12 = 0; i12 < ne12; i12++) { + for (int i11 = 0; i11 < ne11; i11++) { + const float * const src = (float *)((char *) src1->data + i12*nb12 + i11*nb11); + ggml_fp16_t * dst_data = wdata + i11*ne10*ne12; + for (int i10 = 0; i10 < ne10; i10++) { + dst_data[i10*ne12 + i12] = GGML_FP32_TO_FP16(src[i10]); + } + } + } + } + + return; + } + + if (params->type == GGML_TASK_FINALIZE) { + return; + } + + const int32_t stride = ggml_get_op_params_i32(dst, 0); + + // total patches in dst + const int np = ne2; + + // patches per thread + const int dp = (np + nth - 1)/nth; + + // patch range for this thread + const int ip0 = dp*ith; + const int ip1 = MIN(ip0 + dp, np); + + ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0; + ggml_fp16_t * const wdata_src = wdata + nk; + + for (int i2 = ip0; i2 < ip1; i2++) { // Cout + float * dst_data = (float *)((char *) dst->data + i2*nb2); + ggml_fp16_t * wdata_kernel = wdata + i2*ne01*ne00*ne03; + for (int i11 = 0; i11 < ne11; i11++) { + for (int i10 = 0; i10 < ne10; i10++) { + const int i1n = i11*ne10*ne12 + i10*ne12; + for (int i01 = 0; i01 < ne01; i01++) { + for (int i00 = 0; i00 < ne00; i00++) { + float v = 0; + ggml_vec_dot_f16(ne03, &v, + wdata_src + i1n, + wdata_kernel + i01*ne00*ne03 + i00*ne03); + dst_data[(i11*stride + i01)*ne0 + i10*stride + i00] += v; + } + } + } + } } - else { - GGML_ASSERT(false); // only stride equal to kernel size is supported - }; } +// ggml_compute_forward_pool_1d_sk_p0 + +static void ggml_compute_forward_pool_1d_sk_p0( + const struct ggml_compute_params * params, + const enum ggml_op_pool op, + const struct ggml_tensor * src, + const int k, + struct ggml_tensor * dst) { + assert(src->type == GGML_TYPE_F32); + assert(params->ith == 0); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const char * cdata = (const char *)src->data; + const char * const data_end = cdata + ggml_nbytes(src); + float * drow = (float *)dst->data; + + const int64_t rs = dst->ne[0]; + + while (cdata < data_end) { + const float * const srow = (const float *)cdata; + + int j = 0; + + for (int64_t i = 0; i < rs; ++i) { + switch (op) { + case GGML_OP_POOL_AVG: drow[i] = 0; break; + case GGML_OP_POOL_MAX: drow[i] = -FLT_MAX; break; + case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; + } + for (int ki = 0; ki < k; ++ki) { + switch (op) { + case GGML_OP_POOL_AVG: drow[i] += srow[j]; break; + case GGML_OP_POOL_MAX: if (srow[j] > drow[i]) drow[i] = srow[j]; break; + case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; + } + ++j; + } + switch (op) { + case GGML_OP_POOL_AVG: drow[i] /= k; break; + case GGML_OP_POOL_MAX: break; + case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; + } + } + + cdata += src->nb[1]; + drow += rs; + } +} + +// ggml_compute_forward_pool_1d + +static void ggml_compute_forward_pool_1d( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + + const int32_t * opts = (const int32_t *)dst->op_params; + enum ggml_op_pool op = opts[0]; + const int k0 = opts[1]; + const int s0 = opts[2]; + const int p0 = opts[3]; + GGML_ASSERT(p0 == 0); // padding not supported + GGML_ASSERT(k0 == s0); // only s = k supported + + ggml_compute_forward_pool_1d_sk_p0(params, op, src0, k0, dst); +} + +// ggml_compute_forward_pool_2d_sk_p0 + +static void ggml_compute_forward_pool_2d_sk_p0( + const struct ggml_compute_params * params, + const enum ggml_op_pool op, + const struct ggml_tensor * src, + const int k0, + const int k1, + struct ggml_tensor * dst) { + assert(src->type == GGML_TYPE_F32); + assert(params->ith == 0); + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + const char * cdata = (const char*)src->data; + const char * const data_end = cdata + ggml_nbytes(src); + + const int64_t px = dst->ne[0]; + const int64_t py = dst->ne[1]; + const int64_t pa = px * py; + + float * dplane = (float *)dst->data; + + const int ka = k0 * k1; + + while (cdata < data_end) { + for (int oy = 0; oy < py; ++oy) { + float * const drow = dplane + oy * px; + for (int ox = 0; ox < px; ++ox) { + float * const out = drow + ox; + switch (op) { + case GGML_OP_POOL_AVG: *out = 0; break; + case GGML_OP_POOL_MAX: *out = -FLT_MAX; break; + case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; + } + + const int ix = ox * k0; + const int iy = oy * k1; + + for (int ky = 0; ky < k1; ++ky) { + const float * const srow = (const float *)(cdata + src->nb[1] * (iy + ky)); + for (int kx = 0; kx < k0; ++kx) { + int j = ix + kx; + switch (op) { + case GGML_OP_POOL_AVG: *out += srow[j]; break; + case GGML_OP_POOL_MAX: if (srow[j] > *out) *out = srow[j]; break; + case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; + } + } + } + switch (op) { + case GGML_OP_POOL_AVG: *out /= ka; break; + case GGML_OP_POOL_MAX: break; + case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break; + } + } + } + + cdata += src->nb[2]; + dplane += pa; + } +} + +// ggml_compute_forward_pool_2d + +static void ggml_compute_forward_pool_2d( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + + const int32_t * opts = (const int32_t *)dst->op_params; + enum ggml_op_pool op = opts[0]; + const int k0 = opts[1]; + const int k1 = opts[2]; + const int s0 = opts[3]; + const int s1 = opts[4]; + const int p0 = opts[5]; + const int p1 = opts[6]; + GGML_ASSERT(p0 == 0); + GGML_ASSERT(p1 == 0); // padding not supported + GGML_ASSERT(k0 == s0); + GGML_ASSERT(k1 == s1); // only s = k supported + + ggml_compute_forward_pool_2d_sk_p0(params, op, src0, k0, k1, dst); +} + +// ggml_compute_forward_upscale + +static void ggml_compute_forward_upscale_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + GGML_ASSERT(src0->nb[0] == sizeof(float)); + + const int ith = params->ith; + + GGML_TENSOR_UNARY_OP_LOCALS; + + const int scale_factor = dst->op_params[0]; + + // TODO: optimize + + for (int i03 = 0; i03 < ne03; i03++) { + for (int i02 = ith; i02 < ne02; i02++) { + for (int m = 0; m < dst->ne[1]; m++) { + int i01 = m / scale_factor; + for (int n = 0; n < dst->ne[0]; n++) { + int i00 = n / scale_factor; + + const float * x = (float *)((char *) src0->data + i00 * nb00 +i01 * nb01 + i02 * nb02 + i03 * nb03); + + float * y = (float *)((char *) dst->data + n * dst->nb[0] + m * dst->nb[1] + i02 * dst->nb[2] + i03 * dst->nb[3]); + + *y = *x; + } + } + } + } +} + +static void ggml_compute_forward_upscale( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_upscale_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} // ggml_compute_forward_flash_attn @@ -13374,7 +13818,7 @@ static void ggml_compute_forward_flash_attn_f32( const struct ggml_tensor * k, const struct ggml_tensor * v, const bool masked, - struct ggml_tensor * dst) { + struct ggml_tensor * dst) { int64_t t0 = ggml_perf_time_us(); UNUSED(t0); @@ -13552,7 +13996,7 @@ static void ggml_compute_forward_flash_attn_f16( const struct ggml_tensor * k, const struct ggml_tensor * v, const bool masked, - struct ggml_tensor * dst) { + struct ggml_tensor * dst) { int64_t t0 = ggml_perf_time_us(); UNUSED(t0); @@ -14317,7 +14761,6 @@ static void ggml_compute_forward_flash_attn_back( static void ggml_compute_forward_win_part_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * opt0, struct ggml_tensor * dst) { if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return; @@ -14326,9 +14769,9 @@ static void ggml_compute_forward_win_part_f32( GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne); GGML_TENSOR_LOCALS(int64_t, ne, dst, ne); - const int32_t nep0 = ((const int32_t *)(opt0->data))[0]; - const int32_t nep1 = ((const int32_t *)(opt0->data))[1]; - const int32_t w = ((const int32_t *)(opt0->data))[2]; + const int32_t nep0 = ((const int32_t *)(dst->op_params))[0]; + const int32_t nep1 = ((const int32_t *)(dst->op_params))[1]; + const int32_t w = ((const int32_t *)(dst->op_params))[2]; assert(ne00 == ne0); assert(ne3 == nep0*nep1); @@ -14362,12 +14805,11 @@ static void ggml_compute_forward_win_part_f32( static void ggml_compute_forward_win_part( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * opt0, struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F32: { - ggml_compute_forward_win_part_f32(params, src0, opt0, dst); + ggml_compute_forward_win_part_f32(params, src0, dst); } break; default: { @@ -14381,7 +14823,6 @@ static void ggml_compute_forward_win_part( static void ggml_compute_forward_win_unpart_f32( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * opt0, struct ggml_tensor * dst) { if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { return; @@ -14390,7 +14831,7 @@ static void ggml_compute_forward_win_unpart_f32( GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne); GGML_TENSOR_LOCALS(int64_t, ne, dst, ne); - const int32_t w = ((const int32_t *)(opt0->data))[0]; + const int32_t w = ((const int32_t *)(dst->op_params))[0]; // padding const int px = (w - ne1%w)%w; @@ -14424,12 +14865,201 @@ static void ggml_compute_forward_win_unpart_f32( static void ggml_compute_forward_win_unpart( const struct ggml_compute_params * params, const struct ggml_tensor * src0, - const struct ggml_tensor * opt0, struct ggml_tensor * dst) { switch (src0->type) { case GGML_TYPE_F32: { - ggml_compute_forward_win_unpart_f32(params, src0, opt0, dst); + ggml_compute_forward_win_unpart_f32(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +//gmml_compute_forward_unary + +static void ggml_compute_forward_unary( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + const enum ggml_unary_op op = ggml_get_unary_op(dst); + + switch (op) { + case GGML_UNARY_OP_ABS: + { + ggml_compute_forward_abs(params, src0, dst); + } break; + case GGML_UNARY_OP_SGN: + { + ggml_compute_forward_sgn(params, src0, dst); + } break; + case GGML_UNARY_OP_NEG: + { + ggml_compute_forward_neg(params, src0, dst); + } break; + case GGML_UNARY_OP_STEP: + { + ggml_compute_forward_step(params, src0, dst); + } break; + case GGML_UNARY_OP_TANH: + { + ggml_compute_forward_tanh(params, src0, dst); + } break; + case GGML_UNARY_OP_ELU: + { + ggml_compute_forward_elu(params, src0, dst); + } break; + case GGML_UNARY_OP_RELU: + { + ggml_compute_forward_relu(params, src0, dst); + } break; + case GGML_UNARY_OP_GELU: + { + ggml_compute_forward_gelu(params, src0, dst); + } break; + case GGML_UNARY_OP_GELU_QUICK: + { + ggml_compute_forward_gelu_quick(params, src0, dst); + } break; + case GGML_UNARY_OP_SILU: + { + ggml_compute_forward_silu(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_get_rel_pos + +static void ggml_compute_forward_get_rel_pos_f16( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + // ref: https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/modeling/image_encoder.py#L292-L322 + + GGML_TENSOR_UNARY_OP_LOCALS; + + const int64_t w = ne1; + + ggml_fp16_t * src0_data = (ggml_fp16_t *) src0->data; + ggml_fp16_t * dst_data = (ggml_fp16_t *) dst->data; + + for (int64_t i2 = 0; i2 < ne2; ++i2) { + for (int64_t i1 = 0; i1 < ne1; ++i1) { + const int64_t pos = (w - i1 - 1) + i2; + for (int64_t i0 = 0; i0 < ne0; ++i0) { + dst_data[i2*ne1*ne0 + i1*ne0 + i0] = src0_data[pos*ne00 + i0]; + } + } + } +} + +static void ggml_compute_forward_get_rel_pos( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F16: + { + ggml_compute_forward_get_rel_pos_f16(params, src0, dst); + } break; + default: + { + GGML_ASSERT(false); + } break; + } +} + +// ggml_compute_forward_add_rel_pos + +static void ggml_compute_forward_add_rel_pos_f32( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + const struct ggml_tensor * src2, + struct ggml_tensor * dst) { + GGML_ASSERT(ggml_are_same_shape(src0, dst)); + GGML_ASSERT(src0->nb[0] == dst->nb[0] && src0->nb[1] == dst->nb[1] + && src0->nb[2] == dst->nb[2] && src0->nb[3] == dst->nb[3]); + + const bool inplace = dst->data == src0->data; + if (!inplace && params->type == GGML_TASK_INIT) { + memcpy((char *) dst->data, (char *) src0->data, ggml_nbytes(dst)); + return; + } + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + int64_t t0 = ggml_perf_time_us(); + UNUSED(t0); + + // ref: https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/modeling/image_encoder.py#L357-L359 + + float * src1_data = (float *) src1->data; + float * src2_data = (float *) src2->data; + float * dst_data = (float *) dst->data; + + const int64_t ne10 = src1->ne[0]; + const int64_t ne11 = src1->ne[1]; + const int64_t ne12 = src1->ne[2]; + const int64_t ne13 = src1->ne[3]; + + const int ith = params->ith; + const int nth = params->nth; + + // total patches in dst + const int np = ne13; + + // patches per thread + const int dp = (np + nth - 1)/nth; + + // patch range for this thread + const int ip0 = dp*ith; + const int ip1 = MIN(ip0 + dp, np); + + + for (int64_t i13 = ip0; i13 < ip1; ++i13) { + for (int64_t i12 = 0; i12 < ne12; ++i12) { + for (int64_t i11 = 0; i11 < ne11; ++i11) { + const int64_t jp1 = i13*ne12*ne11*ne10 + i12*ne11*ne10 + i11*ne10; + for (int64_t i10 = 0; i10 < ne10; ++i10) { + const int64_t jp0 = jp1 + i10; + const float src1_e = src1_data[jp0]; + const float src2_e = src2_data[jp0]; + + const int64_t jdh = jp0 * ne10; + const int64_t jdw = jdh - (ne10 - 1) * i10; + + for (int64_t j = 0; j < ne10; ++j) { + dst_data[jdh + j ] += src2_e; + dst_data[jdw + j*ne10] += src1_e; + } + } + } + } + } +} + +static void ggml_compute_forward_add_rel_pos( + const struct ggml_compute_params * params, + const struct ggml_tensor * src0, + const struct ggml_tensor * src1, + const struct ggml_tensor * src2, + struct ggml_tensor * dst) { + switch (src0->type) { + case GGML_TYPE_F32: + { + ggml_compute_forward_add_rel_pos_f32(params, src0, src1, src2, dst); } break; default: { @@ -14547,24 +15177,6 @@ static void ggml_compute_forward_map_custom1_f32( fun(dst, a); } - -static void ggml_compute_forward_map_custom1( - const struct ggml_compute_params * params, - const struct ggml_tensor * a, - struct ggml_tensor * dst, - const ggml_custom1_op_f32_t fun) { - switch (a->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_map_custom1_f32(params, a, dst, fun); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - // ggml_compute_forward_map_custom2 static void ggml_compute_forward_map_custom2_f32( @@ -14583,24 +15195,6 @@ static void ggml_compute_forward_map_custom2_f32( } -static void ggml_compute_forward_map_custom2( - const struct ggml_compute_params * params, - const struct ggml_tensor * a, - const struct ggml_tensor * b, - struct ggml_tensor * dst, - const ggml_custom2_op_f32_t fun) { - switch (a->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_map_custom2_f32(params, a, b, dst, fun); - } break; - default: - { - GGML_ASSERT(false); - } break; - } -} - // ggml_compute_forward_map_custom3 static void ggml_compute_forward_map_custom3_f32( @@ -14619,24 +15213,52 @@ static void ggml_compute_forward_map_custom3_f32( fun(dst, a, b, c); } +// ggml_compute_forward_map_custom1 + +static void ggml_compute_forward_map_custom1( + const struct ggml_compute_params * params, + const struct ggml_tensor * a, + struct ggml_tensor * dst) { + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + struct ggml_map_custom1_op_params * p = (struct ggml_map_custom1_op_params *) dst->op_params; + + p->fun(dst, a, params->ith, params->nth, p->userdata); +} + +// ggml_compute_forward_map_custom2 + +static void ggml_compute_forward_map_custom2( + const struct ggml_compute_params * params, + const struct ggml_tensor * a, + const struct ggml_tensor * b, + struct ggml_tensor * dst) { + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; + } + + struct ggml_map_custom2_op_params * p = (struct ggml_map_custom2_op_params *) dst->op_params; + + p->fun(dst, a, b, params->ith, params->nth, p->userdata); +} + +// ggml_compute_forward_map_custom3 static void ggml_compute_forward_map_custom3( const struct ggml_compute_params * params, const struct ggml_tensor * a, const struct ggml_tensor * b, const struct ggml_tensor * c, - struct ggml_tensor * dst, - const ggml_custom3_op_f32_t fun) { - switch (a->type) { - case GGML_TYPE_F32: - { - ggml_compute_forward_map_custom3_f32(params, a, b, c, dst, fun); - } break; - default: - { - GGML_ASSERT(false); - } break; + struct ggml_tensor * dst) { + if (params->type == GGML_TASK_INIT || params->type == GGML_TASK_FINALIZE) { + return; } + + struct ggml_map_custom3_op_params * p = (struct ggml_map_custom3_op_params *) dst->op_params; + + p->fun(dst, a, b, c, params->ith, params->nth, p->userdata); } // ggml_compute_forward_cross_entropy_loss @@ -14929,287 +15551,303 @@ static void ggml_compute_forward(struct ggml_compute_params * params, struct ggm if (skip_cpu) { return; } - GGML_ASSERT(tensor->src0 == NULL || tensor->src0->backend == GGML_BACKEND_CPU); - GGML_ASSERT(tensor->src1 == NULL || tensor->src1->backend == GGML_BACKEND_CPU); + GGML_ASSERT(tensor->src[0] == NULL || tensor->src[0]->backend == GGML_BACKEND_CPU); + GGML_ASSERT(tensor->src[1] == NULL || tensor->src[1]->backend == GGML_BACKEND_CPU); #endif // GGML_USE_CUBLAS switch (tensor->op) { case GGML_OP_DUP: { - ggml_compute_forward_dup(params, tensor->src0, tensor); + ggml_compute_forward_dup(params, tensor->src[0], tensor); } break; case GGML_OP_ADD: { - ggml_compute_forward_add(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_add(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_ADD1: { - ggml_compute_forward_add1(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_add1(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_ACC: { - ggml_compute_forward_acc(params, tensor->src0, tensor->src1, tensor->opt[0], tensor); + ggml_compute_forward_acc(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_SUB: { - ggml_compute_forward_sub(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_sub(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_MUL: { - ggml_compute_forward_mul(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_mul(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_DIV: { - ggml_compute_forward_div(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_div(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_SQR: { - ggml_compute_forward_sqr(params, tensor->src0, tensor); + ggml_compute_forward_sqr(params, tensor->src[0], tensor); } break; case GGML_OP_SQRT: { - ggml_compute_forward_sqrt(params, tensor->src0, tensor); + ggml_compute_forward_sqrt(params, tensor->src[0], tensor); } break; case GGML_OP_LOG: { - ggml_compute_forward_log(params, tensor->src0, tensor); + ggml_compute_forward_log(params, tensor->src[0], tensor); } break; case GGML_OP_SUM: { - ggml_compute_forward_sum(params, tensor->src0, tensor); + ggml_compute_forward_sum(params, tensor->src[0], tensor); } break; case GGML_OP_SUM_ROWS: { - ggml_compute_forward_sum_rows(params, tensor->src0, tensor); + ggml_compute_forward_sum_rows(params, tensor->src[0], tensor); } break; case GGML_OP_MEAN: { - ggml_compute_forward_mean(params, tensor->src0, tensor); + ggml_compute_forward_mean(params, tensor->src[0], tensor); } break; case GGML_OP_ARGMAX: { - ggml_compute_forward_argmax(params, tensor->src0, tensor); + ggml_compute_forward_argmax(params, tensor->src[0], tensor); } break; case GGML_OP_REPEAT: { - ggml_compute_forward_repeat(params, tensor->src0, tensor); + ggml_compute_forward_repeat(params, tensor->src[0], tensor); } break; case GGML_OP_REPEAT_BACK: { - ggml_compute_forward_repeat_back(params, tensor->src0, tensor); + ggml_compute_forward_repeat_back(params, tensor->src[0], tensor); } break; - case GGML_OP_ABS: + case GGML_OP_CONCAT: { - ggml_compute_forward_abs(params, tensor->src0, tensor); - } break; - case GGML_OP_SGN: - { - ggml_compute_forward_sgn(params, tensor->src0, tensor); - } break; - case GGML_OP_NEG: - { - ggml_compute_forward_neg(params, tensor->src0, tensor); - } break; - case GGML_OP_STEP: - { - ggml_compute_forward_step(params, tensor->src0, tensor); - } break; - case GGML_OP_TANH: - { - ggml_compute_forward_tanh(params, tensor->src0, tensor); - } break; - case GGML_OP_ELU: - { - ggml_compute_forward_elu(params, tensor->src0, tensor); - } break; - case GGML_OP_RELU: - { - ggml_compute_forward_relu(params, tensor->src0, tensor); - } break; - case GGML_OP_GELU: - { - ggml_compute_forward_gelu(params, tensor->src0, tensor); - } break; - case GGML_OP_GELU_QUICK: - { - ggml_compute_forward_gelu_quick(params, tensor->src0, tensor); - } break; - case GGML_OP_SILU: - { - ggml_compute_forward_silu(params, tensor->src0, tensor); + ggml_compute_forward_concat(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_SILU_BACK: { - ggml_compute_forward_silu_back(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_silu_back(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_NORM: { - ggml_compute_forward_norm(params, tensor->src0, tensor); + ggml_compute_forward_norm(params, tensor->src[0], tensor); } break; case GGML_OP_RMS_NORM: { - ggml_compute_forward_rms_norm(params, tensor->src0, tensor); + ggml_compute_forward_rms_norm(params, tensor->src[0], tensor); } break; case GGML_OP_RMS_NORM_BACK: { - ggml_compute_forward_rms_norm_back(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_rms_norm_back(params, tensor->src[0], tensor->src[1], tensor); + } break; + case GGML_OP_GROUP_NORM: + { + ggml_compute_forward_group_norm(params, tensor->src[0], tensor); } break; case GGML_OP_MUL_MAT: { - ggml_compute_forward_mul_mat(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_mul_mat(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_OUT_PROD: { - ggml_compute_forward_out_prod(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_out_prod(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_SCALE: { - ggml_compute_forward_scale(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_scale(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_SET: { - ggml_compute_forward_set(params, tensor->src0, tensor->src1, tensor->opt[0], tensor); + ggml_compute_forward_set(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_CPY: { - ggml_compute_forward_cpy(params, tensor->src0, tensor); + ggml_compute_forward_cpy(params, tensor->src[0], tensor); } break; case GGML_OP_CONT: { - ggml_compute_forward_cont(params, tensor->src0, tensor); + ggml_compute_forward_cont(params, tensor->src[0], tensor); } break; case GGML_OP_RESHAPE: { - ggml_compute_forward_reshape(params, tensor->src0, tensor); + ggml_compute_forward_reshape(params, tensor->src[0], tensor); } break; case GGML_OP_VIEW: { - ggml_compute_forward_view(params, tensor->src0); + ggml_compute_forward_view(params, tensor->src[0]); } break; case GGML_OP_PERMUTE: { - ggml_compute_forward_permute(params, tensor->src0); + ggml_compute_forward_permute(params, tensor->src[0]); } break; case GGML_OP_TRANSPOSE: { - ggml_compute_forward_transpose(params, tensor->src0); + ggml_compute_forward_transpose(params, tensor->src[0]); } break; case GGML_OP_GET_ROWS: { - ggml_compute_forward_get_rows(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_get_rows(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_GET_ROWS_BACK: { - ggml_compute_forward_get_rows_back(params, tensor->src0, tensor->src1, tensor->opt[0], tensor); + ggml_compute_forward_get_rows_back(params, tensor->src[0], tensor->src[1], tensor->src[2], tensor); } break; case GGML_OP_DIAG: { - ggml_compute_forward_diag(params, tensor->src0, tensor); + ggml_compute_forward_diag(params, tensor->src[0], tensor); } break; case GGML_OP_DIAG_MASK_INF: { - ggml_compute_forward_diag_mask_inf(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_diag_mask_inf(params, tensor->src[0], tensor); } break; case GGML_OP_DIAG_MASK_ZERO: { - ggml_compute_forward_diag_mask_zero(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_diag_mask_zero(params, tensor->src[0], tensor); } break; case GGML_OP_SOFT_MAX: { - ggml_compute_forward_soft_max(params, tensor->src0, tensor); + ggml_compute_forward_soft_max(params, tensor->src[0], tensor); } break; case GGML_OP_SOFT_MAX_BACK: { - ggml_compute_forward_soft_max_back(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_soft_max_back(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_ROPE: { - ggml_compute_forward_rope(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_rope(params, tensor->src[0], tensor); } break; case GGML_OP_ROPE_BACK: { - ggml_compute_forward_rope_back(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_rope_back(params, tensor->src[0], tensor); } break; case GGML_OP_ALIBI: { - ggml_compute_forward_alibi(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_alibi(params, tensor->src[0], tensor); } break; case GGML_OP_CLAMP: { - ggml_compute_forward_clamp(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_clamp(params, tensor->src[0], tensor); } break; case GGML_OP_CONV_1D: { - ggml_compute_forward_conv_1d(params, tensor->src0, tensor->src1, tensor->opt[0], tensor); + ggml_compute_forward_conv_1d(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_CONV_2D: { - ggml_compute_forward_conv_2d(params, tensor->src0, tensor->src1, tensor->opt[0], tensor); + ggml_compute_forward_conv_2d(params, tensor->src[0], tensor->src[1], tensor); + } break; + case GGML_OP_CONV_TRANSPOSE_2D: + { + ggml_compute_forward_conv_transpose_2d(params, tensor->src[0], tensor->src[1], tensor); + } break; + case GGML_OP_POOL_1D: + { + ggml_compute_forward_pool_1d(params, tensor->src[0], tensor); + } break; + case GGML_OP_POOL_2D: + { + ggml_compute_forward_pool_2d(params, tensor->src[0], tensor); + } break; + case GGML_OP_UPSCALE: + { + ggml_compute_forward_upscale(params, tensor->src[0], tensor); } break; case GGML_OP_FLASH_ATTN: { - const int32_t t = ggml_get_i32_1d(tensor->opt[1], 0); + const int32_t t = ggml_get_op_params_i32(tensor, 0); GGML_ASSERT(t == 0 || t == 1); const bool masked = t != 0; - ggml_compute_forward_flash_attn(params, tensor->src0, tensor->src1, tensor->opt[0], masked, tensor); + ggml_compute_forward_flash_attn(params, tensor->src[0], tensor->src[1], tensor->src[2], masked, tensor); } break; case GGML_OP_FLASH_FF: { - ggml_compute_forward_flash_ff(params, tensor->src0, tensor->src1, tensor->opt[0], tensor->opt[1], tensor->opt[2], tensor); + ggml_compute_forward_flash_ff(params, tensor->src[0], tensor->src[1], tensor->src[2], tensor->src[3], tensor->src[4], tensor); } break; case GGML_OP_FLASH_ATTN_BACK: { - int32_t t = ggml_get_i32_1d(tensor->opt[2], 0); + int32_t t = ggml_get_op_params_i32(tensor, 0); GGML_ASSERT(t == 0 || t == 1); bool masked = t != 0; - ggml_compute_forward_flash_attn_back(params, tensor->src0, tensor->src1, tensor->opt[0], tensor->opt[1], masked, tensor); + ggml_compute_forward_flash_attn_back(params, tensor->src[0], tensor->src[1], tensor->src[2], tensor->src[3], masked, tensor); } break; case GGML_OP_WIN_PART: { - ggml_compute_forward_win_part(params, tensor->src0, tensor->opt[0], tensor); + ggml_compute_forward_win_part(params, tensor->src[0], tensor); } break; case GGML_OP_WIN_UNPART: { - ggml_compute_forward_win_unpart(params, tensor->src0, tensor->opt[0], tensor); + ggml_compute_forward_win_unpart(params, tensor->src[0], tensor); + } break; + case GGML_OP_UNARY: + { + ggml_compute_forward_unary(params, tensor->src[0], tensor); + } break; + case GGML_OP_GET_REL_POS: + { + ggml_compute_forward_get_rel_pos(params, tensor->src[0], tensor); + } break; + case GGML_OP_ADD_REL_POS: + { + ggml_compute_forward_add_rel_pos(params, tensor->src[0], tensor->src[1], tensor->src[2], tensor); } break; case GGML_OP_MAP_UNARY: { - const ggml_unary_op_f32_t fun = *((ggml_unary_op_f32_t *)tensor->opt[0]->data); - ggml_compute_forward_map_unary(params, tensor->src0, tensor, fun); + ggml_unary_op_f32_t fun; + memcpy(&fun, tensor->op_params, sizeof(fun)); + ggml_compute_forward_map_unary(params, tensor->src[0], tensor, fun); } break; case GGML_OP_MAP_BINARY: { - const ggml_binary_op_f32_t fun = *((ggml_binary_op_f32_t *)tensor->opt[0]->data); - ggml_compute_forward_map_binary(params, tensor->src0, tensor->src1, tensor, fun); + ggml_binary_op_f32_t fun; + memcpy(&fun, tensor->op_params, sizeof(fun)); + ggml_compute_forward_map_binary(params, tensor->src[0], tensor->src[1], tensor, fun); + } + break; + case GGML_OP_MAP_CUSTOM1_F32: + { + ggml_custom1_op_f32_t fun; + memcpy(&fun, tensor->op_params, sizeof(fun)); + ggml_compute_forward_map_custom1_f32(params, tensor->src[0], tensor, fun); + } + break; + case GGML_OP_MAP_CUSTOM2_F32: + { + ggml_custom2_op_f32_t fun; + memcpy(&fun, tensor->op_params, sizeof(fun)); + ggml_compute_forward_map_custom2_f32(params, tensor->src[0], tensor->src[1], tensor, fun); + } + break; + case GGML_OP_MAP_CUSTOM3_F32: + { + ggml_custom3_op_f32_t fun; + memcpy(&fun, tensor->op_params, sizeof(fun)); + ggml_compute_forward_map_custom3_f32(params, tensor->src[0], tensor->src[1], tensor->src[2], tensor, fun); } break; case GGML_OP_MAP_CUSTOM1: { - const ggml_custom1_op_f32_t fun = *((ggml_custom1_op_f32_t *)tensor->opt[0]->data); - ggml_compute_forward_map_custom1(params, tensor->src0, tensor, fun); + ggml_compute_forward_map_custom1(params, tensor->src[0], tensor); } break; case GGML_OP_MAP_CUSTOM2: { - const ggml_custom2_op_f32_t fun = *((ggml_custom2_op_f32_t *)tensor->opt[0]->data); - ggml_compute_forward_map_custom2(params, tensor->src0, tensor->src1, tensor, fun); + ggml_compute_forward_map_custom2(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_MAP_CUSTOM3: { - const ggml_custom3_op_f32_t fun = *((ggml_custom3_op_f32_t *)tensor->opt[0]->data); - ggml_compute_forward_map_custom3(params, tensor->src0, tensor->src1, tensor->opt[1], tensor, fun); + ggml_compute_forward_map_custom3(params, tensor->src[0], tensor->src[1], tensor->src[2], tensor); } break; case GGML_OP_CROSS_ENTROPY_LOSS: { - ggml_compute_forward_cross_entropy_loss(params, tensor->src0, tensor->src1, tensor); + ggml_compute_forward_cross_entropy_loss(params, tensor->src[0], tensor->src[1], tensor); } break; case GGML_OP_CROSS_ENTROPY_LOSS_BACK: { - ggml_compute_forward_cross_entropy_loss_back(params, tensor->src0, tensor->src1, tensor->opt[0], tensor); + ggml_compute_forward_cross_entropy_loss_back(params, tensor->src[0], tensor->src[1], tensor->src[2], tensor); } break; case GGML_OP_NONE: @@ -15226,8 +15864,8 @@ static void ggml_compute_forward(struct ggml_compute_params * params, struct ggm //////////////////////////////////////////////////////////////////////////////// static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor * tensor, bool inplace) { - struct ggml_tensor * src0 = tensor->src0; - struct ggml_tensor * src1 = tensor->src1; + struct ggml_tensor * src0 = tensor->src[0]; + struct ggml_tensor * src1 = tensor->src[1]; switch (tensor->op) { case GGML_OP_DUP: @@ -15263,12 +15901,10 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor src0->grad = ggml_add_impl(ctx, src0->grad, tensor->grad, inplace); } if (src1->grad) { - GGML_ASSERT(ggml_nelements(tensor->opt[0]) == 5); - GGML_ASSERT(tensor->opt[0]->type == GGML_TYPE_I32); - const size_t nb1 = (( int32_t * ) tensor->opt[0]->data)[0]; - const size_t nb2 = (( int32_t * ) tensor->opt[0]->data)[1]; - const size_t nb3 = (( int32_t * ) tensor->opt[0]->data)[2]; - const size_t offset = (( int32_t * ) tensor->opt[0]->data)[3]; + const size_t nb1 = ((int32_t *) tensor->op_params)[0]; + const size_t nb2 = ((int32_t *) tensor->op_params)[1]; + const size_t nb3 = ((int32_t *) tensor->op_params)[2]; + const size_t offset = ((int32_t *) tensor->op_params)[3]; struct ggml_tensor * tensor_grad_view = ggml_view_4d(ctx, tensor->grad, @@ -15417,72 +16053,9 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor inplace); } } break; - case GGML_OP_ABS: + case GGML_OP_CONCAT: { - if (src0->grad) { - src0->grad = - ggml_add_impl(ctx, - src0->grad, - ggml_mul(ctx, - ggml_sgn(ctx, src0), - tensor->grad), - inplace); - } - } break; - case GGML_OP_SGN: - { - if (src0->grad) { - // noop - } - } break; - case GGML_OP_NEG: - { - if (src0->grad) { - src0->grad = ggml_sub_impl(ctx, src0->grad, tensor->grad, inplace); - } - } break; - case GGML_OP_STEP: - { - if (src0->grad) { - // noop - } - } break; - case GGML_OP_TANH: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_ELU: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_RELU: - { - if (src0->grad) { - src0->grad = ggml_sub_impl(ctx, - src0->grad, - ggml_mul(ctx, - ggml_step(ctx, src0), - tensor->grad), - inplace); - } - } break; - case GGML_OP_GELU: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_GELU_QUICK: - { - GGML_ASSERT(false); // TODO: not implemented - } break; - case GGML_OP_SILU: - { - // necessary for llama - if (src0->grad) { - src0->grad = ggml_add_impl(ctx, - src0->grad, - ggml_silu_back(ctx, src0, tensor->grad), - inplace); - } + GGML_ASSERT(false); // TODO: implement } break; case GGML_OP_SILU_BACK: { @@ -15506,6 +16079,10 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor { GGML_ASSERT(false); // TODO: not implemented } break; + case GGML_OP_GROUP_NORM: + { + GGML_ASSERT(false); // TODO: not implemented + } break; case GGML_OP_MUL_MAT: { // https://cs231n.github.io/optimization-2/#staged @@ -15576,12 +16153,10 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor } break; case GGML_OP_SET: { - GGML_ASSERT(ggml_nelements(tensor->opt[0]) == 5); - GGML_ASSERT(tensor->opt[0]->type == GGML_TYPE_I32); - const size_t nb1 = (( int32_t * ) tensor->opt[0]->data)[0]; - const size_t nb2 = (( int32_t * ) tensor->opt[0]->data)[1]; - const size_t nb3 = (( int32_t * ) tensor->opt[0]->data)[2]; - const size_t offset = (( int32_t * ) tensor->opt[0]->data)[3]; + const size_t nb1 = ((int32_t *) tensor->op_params)[0]; + const size_t nb2 = ((int32_t *) tensor->op_params)[1]; + const size_t nb3 = ((int32_t *) tensor->op_params)[2]; + const size_t offset = ((int32_t *) tensor->op_params)[3]; struct ggml_tensor * tensor_grad_view = NULL; @@ -15658,8 +16233,7 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor if (src0->grad) { size_t offset; - GGML_ASSERT(sizeof(offset) <= ggml_nbytes(tensor->opt[0])); - memcpy(&offset, tensor->opt[0]->data, sizeof(offset)); + memcpy(&offset, tensor->op_params, sizeof(offset)); size_t nb1 = tensor->nb[1]; size_t nb2 = tensor->nb[2]; @@ -15686,7 +16260,7 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor { // necessary for llama if (src0->grad) { - int32_t * axes = (int32_t *) tensor->opt[0]->data; + int32_t * axes = (int32_t *) tensor->op_params; int axis0 = axes[0] & 0x3; int axis1 = axes[1] & 0x3; int axis2 = axes[2] & 0x3; @@ -15742,33 +16316,23 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor { // necessary for llama if (src0->grad) { - assert(src1->type == GGML_TYPE_I32); - assert(ggml_nelements(src1) == 2); - const int n_past = ((int32_t *) src1->data)[0]; + const int n_past = ((int32_t *) tensor->op_params)[0]; src0->grad = ggml_add_impl(ctx, src0->grad, ggml_diag_mask_zero_impl(ctx, tensor->grad, n_past, false), inplace); } - if (src1->grad) { - // noop - } } break; case GGML_OP_DIAG_MASK_ZERO: { // necessary for llama if (src0->grad) { - assert(src1->type == GGML_TYPE_I32); - assert(ggml_nelements(src1) == 2); - const int n_past = ((int32_t *) src1->data)[0]; + const int n_past = ((int32_t *) tensor->op_params)[0]; src0->grad = ggml_add_impl(ctx, src0->grad, ggml_diag_mask_zero_impl(ctx, tensor->grad, n_past, false), inplace); } - if (src1->grad) { - // noop - } } break; case GGML_OP_SOFT_MAX: { @@ -15789,46 +16353,65 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor { // necessary for llama if (src0->grad) { - assert(src1->type == GGML_TYPE_I32); - assert(ggml_nelements(src1) == 4); - const int n_past = ((int32_t *) src1->data)[0]; - const int n_dims = ((int32_t *) src1->data)[1]; - const int mode = ((int32_t *) src1->data)[2]; + const int n_past = ((int32_t *) tensor->op_params)[0]; + const int n_dims = ((int32_t *) tensor->op_params)[1]; + const int mode = ((int32_t *) tensor->op_params)[2]; + const int n_ctx = ((int32_t *) tensor->op_params)[3]; + float freq_base; + float freq_scale; + float xpos_base; + bool xpos_down; + memcpy(&freq_base, (int32_t *) tensor->op_params + 4, sizeof(float)); + memcpy(&freq_scale, (int32_t *) tensor->op_params + 5, sizeof(float)); + memcpy(&xpos_base, (int32_t *) tensor->op_params + 6, sizeof(float)); + memcpy(&xpos_down, (int32_t *) tensor->op_params + 7, sizeof(bool)); + src0->grad = ggml_add_impl(ctx, src0->grad, ggml_rope_back(ctx, tensor->grad, n_past, n_dims, - mode), + mode, + n_ctx, + freq_base, + freq_scale, + xpos_base, + xpos_down), inplace); } - if (src1->grad) { - // noop - } } break; case GGML_OP_ROPE_BACK: { if (src0->grad) { - assert(src1->type == GGML_TYPE_I32); - assert(ggml_nelements(src1) == 4); - const int n_past = ((int32_t *) src1->data)[0]; - const int n_dims = ((int32_t *) src1->data)[1]; - const int mode = ((int32_t *) src1->data)[2]; - const int n_ctx = ((int32_t *) src1->data)[3]; + const int n_past = ((int32_t *) tensor->op_params)[0]; + const int n_dims = ((int32_t *) tensor->op_params)[1]; + const int mode = ((int32_t *) tensor->op_params)[2]; + const int n_ctx = ((int32_t *) tensor->op_params)[3]; + float freq_base; + float freq_scale; + float xpos_base; + bool xpos_down; + memcpy(&freq_base, (int32_t *) tensor->op_params + 4, sizeof(float)); + memcpy(&freq_scale, (int32_t *) tensor->op_params + 5, sizeof(float)); + memcpy(&xpos_base, (int32_t *) tensor->op_params + 6, sizeof(float)); + memcpy(&xpos_down, (int32_t *) tensor->op_params + 7, sizeof(bool)); + src0->grad = ggml_add_impl(ctx, src0->grad, - ggml_rope(ctx, + ggml_rope_impl(ctx, tensor->grad, n_past, n_dims, mode, - n_ctx), + n_ctx, + freq_base, + freq_scale, + xpos_base, + xpos_down, + false), inplace); } - if (src1->grad) { - // noop - } } break; case GGML_OP_ALIBI: { @@ -15846,18 +16429,34 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor { GGML_ASSERT(false); // TODO: not implemented } break; + case GGML_OP_CONV_TRANSPOSE_2D: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_POOL_1D: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_POOL_2D: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_OP_UPSCALE: + { + GGML_ASSERT(false); // TODO: not implemented + } break; case GGML_OP_FLASH_ATTN: { struct ggml_tensor * flash_grad = NULL; - if (src0->grad || src1->grad || tensor->opt[0]->grad) { - int32_t t = ggml_get_i32_1d(tensor->opt[1], 0); + if (src0->grad || src1->grad || tensor->src[2]->grad) { + int32_t t = ggml_get_op_params_i32(tensor, 0); GGML_ASSERT(t == 0 || t == 1); bool masked = t != 0; flash_grad = ggml_flash_attn_back(ctx, src0, src1, - tensor->opt[0], + tensor->src[2], tensor->grad, masked); } @@ -15954,7 +16553,7 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor inplace); } - struct ggml_tensor * opt0 = tensor->opt[0]; + struct ggml_tensor * opt0 = tensor->src[2]; if (opt0->grad) { struct ggml_tensor * grad_v = NULL; @@ -16013,8 +16612,87 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor } break; case GGML_OP_WIN_PART: case GGML_OP_WIN_UNPART: + case GGML_OP_UNARY: + { + switch (ggml_get_unary_op(tensor)) { + case GGML_UNARY_OP_ABS: + { + if (src0->grad) { + src0->grad = + ggml_add_impl(ctx, + src0->grad, + ggml_mul(ctx, + ggml_sgn(ctx, src0), + tensor->grad), + inplace); + } + } break; + case GGML_UNARY_OP_SGN: + { + if (src0->grad) { + // noop + } + } break; + case GGML_UNARY_OP_NEG: + { + if (src0->grad) { + src0->grad = ggml_sub_impl(ctx, src0->grad, tensor->grad, inplace); + } + } break; + case GGML_UNARY_OP_STEP: + { + if (src0->grad) { + // noop + } + } break; + case GGML_UNARY_OP_TANH: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_UNARY_OP_ELU: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_UNARY_OP_RELU: + { + if (src0->grad) { + src0->grad = ggml_add_impl(ctx, + src0->grad, + ggml_mul(ctx, + ggml_step(ctx, src0), + tensor->grad), + inplace); + } + } break; + case GGML_UNARY_OP_GELU: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_UNARY_OP_GELU_QUICK: + { + GGML_ASSERT(false); // TODO: not implemented + } break; + case GGML_UNARY_OP_SILU: + { + // necessary for llama + if (src0->grad) { + src0->grad = ggml_add_impl(ctx, + src0->grad, + ggml_silu_back(ctx, src0, tensor->grad), + inplace); + } + } break; + default: + GGML_ASSERT(false); + } + } break; + case GGML_OP_GET_REL_POS: + case GGML_OP_ADD_REL_POS: case GGML_OP_MAP_UNARY: case GGML_OP_MAP_BINARY: + case GGML_OP_MAP_CUSTOM1_F32: + case GGML_OP_MAP_CUSTOM2_F32: + case GGML_OP_MAP_CUSTOM3_F32: case GGML_OP_MAP_CUSTOM1: case GGML_OP_MAP_CUSTOM2: case GGML_OP_MAP_CUSTOM3: @@ -16048,6 +16726,34 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor } } +static_assert(GGML_GRAPH_HASHTABLE_SIZE > GGML_MAX_NODES * 2, "GGML_GRAPH_HT_SIZE is too small"); + +static size_t hash(void * p) { + return (size_t)p % GGML_GRAPH_HASHTABLE_SIZE; +} + +static bool hash_insert(void * hash_table[], void * p) { + size_t h = hash(p); + + // linear probing + size_t i = h; + while (hash_table[i] != NULL && hash_table[i] != p) { + i = (i + 1) % GGML_GRAPH_HASHTABLE_SIZE; + if (i == h) { + // hash table is full + GGML_ASSERT(false); + } + } + + if (hash_table[i] == p) { + return true; + } + + // insert + hash_table[i] = p; + return false; +} + static void ggml_visit_parents(struct ggml_cgraph * cgraph, struct ggml_tensor * node) { if (node->grad == NULL) { // this usually happens when we generate intermediate nodes from constants in the backward pass @@ -16058,29 +16764,13 @@ static void ggml_visit_parents(struct ggml_cgraph * cgraph, struct ggml_tensor * } // check if already visited - for (int i = 0; i < cgraph->n_nodes; i++) { - if (cgraph->nodes[i] == node) { - return; - } + if (hash_insert(cgraph->visited_hash_table, node)) { + return; } - for (int i = 0; i < cgraph->n_leafs; i++) { - if (cgraph->leafs[i] == node) { - return; - } - } - - if (node->src0) { - ggml_visit_parents(cgraph, node->src0); - } - - if (node->src1) { - ggml_visit_parents(cgraph, node->src1); - } - - for (int i = 0; i < GGML_MAX_OPT; ++i) { - if (node->opt[i]) { - ggml_visit_parents(cgraph, node->opt[i]); + for (int i = 0; i < GGML_MAX_SRC; ++i) { + if (node->src[i]) { + ggml_visit_parents(cgraph, node->src[i]); } } @@ -16135,12 +16825,10 @@ struct ggml_cgraph ggml_build_forward(struct ggml_tensor * tensor) { struct ggml_cgraph result = { /*.n_nodes =*/ 0, /*.n_leafs =*/ 0, - /*.n_threads =*/ GGML_DEFAULT_N_THREADS, - /*.work_size =*/ 0, - /*.work =*/ NULL, /*.nodes =*/ { NULL }, /*.grads =*/ { NULL }, /*.leafs =*/ { NULL }, + /*.hash_table =*/ { NULL }, /*.perf_runs =*/ 0, /*.perf_cycles =*/ 0, /*.perf_time_us =*/ 0, @@ -16182,13 +16870,42 @@ struct ggml_cgraph ggml_build_backward(struct ggml_context * ctx, struct ggml_cg if (node->is_param) { GGML_PRINT_DEBUG("%s: found root node %p\n", __func__, (void *) node); - ggml_build_forward_impl(&result, node->grad, true); + ggml_build_forward_expand(&result, node->grad); } } return result; } +struct ggml_cgraph * ggml_new_graph(struct ggml_context * ctx) { + struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_GRAPH, GGML_GRAPH_SIZE); + struct ggml_cgraph * cgraph = (struct ggml_cgraph *) ((char *) ctx->mem_buffer + obj->offs); + + *cgraph = (struct ggml_cgraph) { + /*.n_nodes =*/ 0, + /*.n_leafs =*/ 0, + /*.nodes =*/ { NULL }, + /*.grads =*/ { NULL }, + /*.leafs =*/ { NULL }, + /*.hash_table =*/ { NULL }, + /*.perf_runs =*/ 0, + /*.perf_cycles =*/ 0, + /*.perf_time_us =*/ 0, + }; + + return cgraph; +} + +struct ggml_cgraph * ggml_build_forward_ctx(struct ggml_context * ctx, struct ggml_tensor * tensor) { + struct ggml_cgraph * cgraph = ggml_new_graph(ctx); + ggml_build_forward_impl(cgraph, tensor, false); + return cgraph; +} + +size_t ggml_graph_overhead(void) { + return GGML_OBJECT_SIZE + GGML_PAD(GGML_GRAPH_SIZE, GGML_MEM_ALIGN); +} + // // thread data // @@ -16254,7 +16971,7 @@ typedef pthread_t ggml_thread_t; // Android's libc implementation "bionic" does not support setting affinity #if defined(__linux__) && !defined(__BIONIC__) -void set_numa_thread_affinity(int thread_n, int n_threads) { +static void set_numa_thread_affinity(int thread_n, int n_threads) { if (!ggml_is_numa()) { return; } @@ -16279,7 +16996,7 @@ void set_numa_thread_affinity(int thread_n, int n_threads) { CPU_FREE(cpus); } -void clear_numa_thread_affinity(void) { +static void clear_numa_thread_affinity(void) { if (!ggml_is_numa()) { return; } @@ -16303,21 +17020,25 @@ void clear_numa_thread_affinity(void) { #else // TODO: Windows etc. // (the linux implementation may also work on BSD, someone should test) -void set_numa_thread_affinity(int thread_n, int n_threads) { UNUSED(thread_n); UNUSED(n_threads); } -void clear_numa_thread_affinity(void) {} +static void set_numa_thread_affinity(int thread_n, int n_threads) { UNUSED(thread_n); UNUSED(n_threads); } +static void clear_numa_thread_affinity(void) {} #endif struct ggml_compute_state_shared { - struct ggml_cgraph * cgraph; + const struct ggml_cgraph * cgraph; + const struct ggml_cplan * cplan; int64_t perf_node_start_cycles; int64_t perf_node_start_time_us; - int n_threads; + const int n_threads; // synchronization primitives atomic_int n_active; // num active threads atomic_int node_n; // active graph node + + bool (*abort_callback)(void * data); // abort ggml_graph_compute when true + void * abort_callback_data; }; struct ggml_compute_state { @@ -16337,14 +17058,22 @@ static void ggml_graph_compute_perf_stats_node(struct ggml_tensor * node, const static thread_ret_t ggml_graph_compute_thread(void * data) { struct ggml_compute_state * state = (struct ggml_compute_state *) data; - struct ggml_cgraph * cgraph = state->shared->cgraph; - const int n_threads = state->shared->n_threads; + const struct ggml_cgraph * cgraph = state->shared->cgraph; + const struct ggml_cplan * cplan = state->shared->cplan; + + const int * n_tasks_arr = cplan->n_tasks; + const int n_threads = state->shared->n_threads; + set_numa_thread_affinity(state->ith, n_threads); int node_n = -1; while (true) { + if (cplan->abort_callback && cplan->abort_callback(cplan->abort_callback_data)) { + state->shared->node_n += 1; + return (thread_ret_t) GGML_EXIT_ABORTED; + } if (atomic_fetch_sub(&state->shared->n_active, 1) == 1) { // all other threads are finished and spinning // do finalize and init here so we don't have synchronize again @@ -16352,18 +17081,18 @@ static thread_ret_t ggml_graph_compute_thread(void * data) { /*.type =*/ GGML_TASK_FINALIZE, /*.ith =*/ 0, /*.nth =*/ 0, - /*.wsize =*/ cgraph->work ? ggml_nbytes(cgraph->work) : 0, - /*.wdata =*/ cgraph->work ? cgraph->work->data : NULL, + /*.wsize =*/ cplan->work_size, + /*.wdata =*/ cplan->work_data, }; if (node_n != -1) { /* FINALIZE */ struct ggml_tensor * node = state->shared->cgraph->nodes[node_n]; if (GGML_OP_HAS_FINALIZE[node->op]) { - params.nth = node->n_tasks; + params.nth = n_tasks_arr[node_n]; ggml_compute_forward(¶ms, node); - ggml_graph_compute_perf_stats_node(node, state->shared); } + ggml_graph_compute_perf_stats_node(node, state->shared); } // distribute new work or execute it direct if 1T @@ -16371,11 +17100,12 @@ static thread_ret_t ggml_graph_compute_thread(void * data) { GGML_PRINT_DEBUG_5("%s: %d/%d\n", __func__, node_n, cgraph->n_nodes); struct ggml_tensor * node = cgraph->nodes[node_n]; + const int n_tasks = n_tasks_arr[node_n]; state->shared->perf_node_start_cycles = ggml_perf_cycles(); state->shared->perf_node_start_time_us = ggml_perf_time_us(); - params.nth = node->n_tasks; + params.nth = n_tasks; /* INIT */ if (GGML_OP_HAS_INIT[node->op]) { @@ -16383,7 +17113,7 @@ static thread_ret_t ggml_graph_compute_thread(void * data) { ggml_compute_forward(¶ms, node); } - if (node->n_tasks == 1) { + if (n_tasks == 1) { // TODO: maybe push node_n to the atomic but if other threads see n_tasks is 1, // they do something more efficient than spinning (?) params.type = GGML_TASK_COMPUTE; @@ -16392,11 +17122,16 @@ static thread_ret_t ggml_graph_compute_thread(void * data) { if (GGML_OP_HAS_FINALIZE[node->op]) { params.type = GGML_TASK_FINALIZE; ggml_compute_forward(¶ms, node); - ggml_graph_compute_perf_stats_node(node, state->shared); } + + ggml_graph_compute_perf_stats_node(node, state->shared); } else { break; } + + if (cplan->abort_callback && cplan->abort_callback(cplan->abort_callback_data)) { + break; + } } atomic_store(&state->shared->n_active, n_threads); @@ -16405,7 +17140,7 @@ static thread_ret_t ggml_graph_compute_thread(void * data) { // wait for other threads to finish const int last = node_n; do { - sched_yield(); + //sched_yield(); node_n = atomic_load(&state->shared->node_n); } while (node_n == last); } @@ -16415,384 +17150,465 @@ static thread_ret_t ggml_graph_compute_thread(void * data) { /* COMPUTE */ struct ggml_tensor * node = cgraph->nodes[node_n]; + const int n_tasks = n_tasks_arr[node_n]; struct ggml_compute_params params = { /*.type =*/ GGML_TASK_COMPUTE, /*.ith =*/ state->ith, - /*.nth =*/ node->n_tasks, - /*.wsize =*/ cgraph->work ? ggml_nbytes(cgraph->work) : 0, - /*.wdata =*/ cgraph->work ? cgraph->work->data : NULL, + /*.nth =*/ n_tasks, + /*.wsize =*/ cplan->work_size, + /*.wdata =*/ cplan->work_data, }; - if (state->ith < node->n_tasks) { + if (state->ith < n_tasks) { ggml_compute_forward(¶ms, node); } } - return 0; + return GGML_EXIT_SUCCESS; } -void ggml_graph_compute(struct ggml_context * ctx, struct ggml_cgraph * cgraph) { - const int n_threads = cgraph->n_threads; +struct ggml_cplan ggml_graph_plan(struct ggml_cgraph * cgraph, int n_threads) { + if (n_threads <= 0) { + n_threads = GGML_DEFAULT_N_THREADS; + } + + size_t work_size = 0; + + struct ggml_cplan cplan; + memset(&cplan, 0, sizeof(struct ggml_cplan)); + + // thread scheduling for the different operations + work buffer size estimation + for (int i = 0; i < cgraph->n_nodes; i++) { + int n_tasks = 1; + + struct ggml_tensor * node = cgraph->nodes[i]; + + switch (node->op) { + case GGML_OP_CPY: + case GGML_OP_DUP: + { + n_tasks = n_threads; + + size_t cur = 0; + if (ggml_is_quantized(node->type)) { + cur = ggml_type_size(GGML_TYPE_F32) * node->ne[0] * n_tasks; + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_ADD: + case GGML_OP_ADD1: + { + n_tasks = n_threads; + + size_t cur = 0; + + if (ggml_is_quantized(node->src[0]->type)) { + cur = ggml_type_size(GGML_TYPE_F32) * node->src[0]->ne[0] * n_tasks; + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_ACC: + { + n_tasks = n_threads; + + size_t cur = 0; + + if (ggml_is_quantized(node->src[0]->type)) { + cur = ggml_type_size(GGML_TYPE_F32) * node->src[1]->ne[0] * n_tasks; + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_SUB: + case GGML_OP_DIV: + case GGML_OP_SQR: + case GGML_OP_SQRT: + case GGML_OP_LOG: + case GGML_OP_SUM: + case GGML_OP_SUM_ROWS: + case GGML_OP_MEAN: + case GGML_OP_ARGMAX: + case GGML_OP_REPEAT: + case GGML_OP_REPEAT_BACK: + { + n_tasks = 1; + } break; + + case GGML_OP_UNARY: + { + switch (ggml_get_unary_op(node)) { + case GGML_UNARY_OP_ABS: + case GGML_UNARY_OP_SGN: + case GGML_UNARY_OP_NEG: + case GGML_UNARY_OP_STEP: + case GGML_UNARY_OP_TANH: + case GGML_UNARY_OP_ELU: + case GGML_UNARY_OP_RELU: + { + n_tasks = 1; + } break; + + case GGML_UNARY_OP_GELU: + case GGML_UNARY_OP_GELU_QUICK: + case GGML_UNARY_OP_SILU: + { + n_tasks = n_threads; + } break; + } + } break; + case GGML_OP_SILU_BACK: + case GGML_OP_MUL: + case GGML_OP_NORM: + case GGML_OP_RMS_NORM: + case GGML_OP_RMS_NORM_BACK: + case GGML_OP_GROUP_NORM: + { + n_tasks = n_threads; + } break; + case GGML_OP_CONCAT: + case GGML_OP_MUL_MAT: + case GGML_OP_OUT_PROD: + { + n_tasks = n_threads; + + // TODO: use different scheduling for different matrix sizes + //const int nr0 = ggml_nrows(node->src[0]); + //const int nr1 = ggml_nrows(node->src[1]); + + //n_tasks = MIN(n_threads, MAX(1, nr0/128)); + //printf("nr0 = %8d, nr1 = %8d, nr0*nr1 = %8d, n_tasks%d\n", nr0, nr1, nr0*nr1, n_tasks); + + size_t cur = 0; + const enum ggml_type vec_dot_type = type_traits[node->src[0]->type].vec_dot_type; + +#if defined(GGML_USE_CUBLAS) + if (ggml_cuda_can_mul_mat(node->src[0], node->src[1], node)) { + n_tasks = 1; // TODO: this actually is doing nothing + // the threads are still spinning + } else +#elif defined(GGML_USE_CLBLAST) + if (ggml_cl_can_mul_mat(node->src[0], node->src[1], node)) { + n_tasks = 1; // TODO: this actually is doing nothing + // the threads are still spinning + cur = ggml_cl_mul_mat_get_wsize(node->src[0], node->src[1], node); + } else +#endif +#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) + if (ggml_compute_forward_mul_mat_use_blas(node->src[0], node->src[1], node)) { + n_tasks = 1; // TODO: this actually is doing nothing + // the threads are still spinning + if (node->src[0]->type != GGML_TYPE_F32) { + // here we need memory just for single 2D matrix from src0 + cur = ggml_type_size(GGML_TYPE_F32)*(node->src[0]->ne[0]*node->src[0]->ne[1]); + } + } else +#endif + if (node->src[1]->type != vec_dot_type) { + cur = ggml_type_size(vec_dot_type)*ggml_nelements(node->src[1])/ggml_blck_size(vec_dot_type); + } else { + cur = 0; + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_SCALE: + { + n_tasks = 1; + } break; + case GGML_OP_SET: + case GGML_OP_CONT: + case GGML_OP_RESHAPE: + case GGML_OP_VIEW: + case GGML_OP_PERMUTE: + case GGML_OP_TRANSPOSE: + case GGML_OP_GET_ROWS: + case GGML_OP_GET_ROWS_BACK: + case GGML_OP_DIAG: + { + n_tasks = 1; + } break; + case GGML_OP_DIAG_MASK_ZERO: + case GGML_OP_DIAG_MASK_INF: + case GGML_OP_SOFT_MAX: + case GGML_OP_SOFT_MAX_BACK: + case GGML_OP_ROPE: + case GGML_OP_ROPE_BACK: + case GGML_OP_ADD_REL_POS: + { + n_tasks = n_threads; + } break; + case GGML_OP_ALIBI: + { + n_tasks = 1; //TODO + } break; + case GGML_OP_CLAMP: + { + n_tasks = 1; //TODO + } break; + case GGML_OP_CONV_1D: + { + n_tasks = n_threads; + + GGML_ASSERT(node->src[0]->ne[3] == 1); + GGML_ASSERT(node->src[1]->ne[2] == 1); + GGML_ASSERT(node->src[1]->ne[3] == 1); + + size_t cur = 0; + const int nk = node->src[0]->ne[0]; + + if (node->src[0]->type == GGML_TYPE_F16 && + node->src[1]->type == GGML_TYPE_F32) { + cur = sizeof(ggml_fp16_t)*( + nk*ggml_up32(node->src[0]->ne[1])*node->src[0]->ne[2] + + ( 2*(nk/2) + node->src[1]->ne[0])*node->src[1]->ne[1] + ); + } else if (node->src[0]->type == GGML_TYPE_F32 && + node->src[1]->type == GGML_TYPE_F32) { + cur = sizeof(float)*( + nk*ggml_up32(node->src[0]->ne[1])*node->src[0]->ne[2] + + ( 2*(nk/2) + node->src[1]->ne[0])*node->src[1]->ne[1] + ); + } else { + GGML_ASSERT(false); + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_CONV_2D: + { + n_tasks = n_threads; + + const int64_t ne00 = node->src[0]->ne[0]; // W + const int64_t ne01 = node->src[0]->ne[1]; // H + const int64_t ne02 = node->src[0]->ne[2]; // C + const int64_t ne03 = node->src[0]->ne[3]; // N + + const int64_t ne10 = node->src[1]->ne[0]; // W + const int64_t ne11 = node->src[1]->ne[1]; // H + const int64_t ne12 = node->src[1]->ne[2]; // C + + const int64_t ne0 = node->ne[0]; + const int64_t ne1 = node->ne[1]; + const int64_t ne2 = node->ne[2]; + const int64_t nk = ne00*ne01; + const int64_t ew0 = nk * ne02; + + UNUSED(ne03); + UNUSED(ne2); + + size_t cur = 0; + + if (node->src[0]->type == GGML_TYPE_F16 && + node->src[1]->type == GGML_TYPE_F32) { + cur = sizeof(ggml_fp16_t)*(ne0*ne1*ew0); + } else if (node->src[0]->type == GGML_TYPE_F32 && + node->src[1]->type == GGML_TYPE_F32) { + cur = sizeof(float)* (ne10*ne11*ne12); + } else { + GGML_ASSERT(false); + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_CONV_TRANSPOSE_2D: + { + n_tasks = n_threads; + + const int64_t ne00 = node->src[0]->ne[0]; // W + const int64_t ne01 = node->src[0]->ne[1]; // H + const int64_t ne02 = node->src[0]->ne[2]; // Channels Out + const int64_t ne03 = node->src[0]->ne[3]; // Channels In + + const int64_t ne10 = node->src[1]->ne[0]; // W + const int64_t ne11 = node->src[1]->ne[1]; // H + const int64_t ne12 = node->src[1]->ne[2]; // Channels In + + size_t cur = 0; + cur += sizeof(ggml_fp16_t)*ne00*ne01*ne02*ne03; + cur += sizeof(ggml_fp16_t)*ne10*ne11*ne12; + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_POOL_1D: + case GGML_OP_POOL_2D: + { + n_tasks = 1; + } break; + case GGML_OP_UPSCALE: + { + n_tasks = n_threads; + } break; + case GGML_OP_FLASH_ATTN: + { + n_tasks = n_threads; + + size_t cur = 0; + + const int64_t ne11 = ggml_up(node->src[1]->ne[1], GGML_SOFT_MAX_UNROLL); + + if (node->src[1]->type == GGML_TYPE_F32) { + cur = sizeof(float)*ne11*n_tasks; // TODO: this can become (n_tasks-1) + cur += sizeof(float)*ne11*n_tasks; // this is overestimated by x2 + } + + if (node->src[1]->type == GGML_TYPE_F16) { + cur = sizeof(float)*ne11*n_tasks; // TODO: this can become (n_tasks-1) + cur += sizeof(float)*ne11*n_tasks; // this is overestimated by x2 + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_FLASH_FF: + { + n_tasks = n_threads; + + size_t cur = 0; + + if (node->src[1]->type == GGML_TYPE_F32) { + cur = sizeof(float)*node->src[1]->ne[1]*n_tasks; // TODO: this can become (n_tasks-1) + cur += sizeof(float)*node->src[1]->ne[1]*n_tasks; // this is overestimated by x2 + } + + if (node->src[1]->type == GGML_TYPE_F16) { + cur = sizeof(float)*node->src[1]->ne[1]*n_tasks; // TODO: this can become (n_tasks-1) + cur += sizeof(float)*node->src[1]->ne[1]*n_tasks; // this is overestimated by x2 + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_FLASH_ATTN_BACK: + { + n_tasks = n_threads; + + size_t cur = 0; + + const int64_t D = node->src[0]->ne[0]; + const int64_t ne11 = ggml_up(node->src[1]->ne[1], GGML_SOFT_MAX_UNROLL); + const int64_t mxDn = MAX(D, ne11) * 2; // *2 because of S and SM in ggml_compute_forward_flash_attn_back + if (node->src[1]->type == GGML_TYPE_F32) { + cur = sizeof(float)*mxDn*n_tasks; // TODO: this can become (n_tasks-1) + cur += sizeof(float)*mxDn*n_tasks; // this is overestimated by x2 + } + + if (node->src[1]->type == GGML_TYPE_F16) { + cur = sizeof(float)*mxDn*n_tasks; // TODO: this can become (n_tasks-1) + cur += sizeof(float)*mxDn*n_tasks; // this is overestimated by x2 + } + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_WIN_PART: + case GGML_OP_WIN_UNPART: + case GGML_OP_GET_REL_POS: + case GGML_OP_MAP_UNARY: + case GGML_OP_MAP_BINARY: + case GGML_OP_MAP_CUSTOM1_F32: + case GGML_OP_MAP_CUSTOM2_F32: + case GGML_OP_MAP_CUSTOM3_F32: + { + n_tasks = 1; + } break; + case GGML_OP_MAP_CUSTOM1: + { + struct ggml_map_custom1_op_params * p = (struct ggml_map_custom1_op_params *) node->op_params; + if (p->n_tasks == GGML_N_TASKS_MAX) { + n_tasks = n_threads; + } else { + n_tasks = MIN(p->n_tasks, n_threads); + } + } break; + case GGML_OP_MAP_CUSTOM2: + { + struct ggml_map_custom2_op_params * p = (struct ggml_map_custom2_op_params *) node->op_params; + if (p->n_tasks == GGML_N_TASKS_MAX) { + n_tasks = n_threads; + } else { + n_tasks = MIN(p->n_tasks, n_threads); + } + } break; + case GGML_OP_MAP_CUSTOM3: + { + struct ggml_map_custom3_op_params * p = (struct ggml_map_custom3_op_params *) node->op_params; + if (p->n_tasks == GGML_N_TASKS_MAX) { + n_tasks = n_threads; + } else { + n_tasks = MIN(p->n_tasks, n_threads); + } + } break; + case GGML_OP_CROSS_ENTROPY_LOSS: + { + n_tasks = n_threads; + + size_t cur = ggml_type_size(node->type)*(n_tasks + node->src[0]->ne[0]*n_tasks); + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_CROSS_ENTROPY_LOSS_BACK: + { + n_tasks = n_threads; + + size_t cur = ggml_type_size(node->type)*node->src[0]->ne[0]*n_tasks; + + work_size = MAX(work_size, cur); + } break; + case GGML_OP_NONE: + { + n_tasks = 1; + } break; + case GGML_OP_COUNT: + { + GGML_ASSERT(false); + } break; + } + + cplan.n_tasks[i] = n_tasks; + } + + if (work_size > 0) { + work_size += CACHE_LINE_SIZE*(n_threads - 1); + } + + cplan.n_threads = n_threads; + cplan.work_size = work_size; + cplan.work_data = NULL; + + return cplan; +} + +int ggml_graph_compute(struct ggml_cgraph * cgraph, struct ggml_cplan * cplan) { + { + GGML_ASSERT(cplan); + GGML_ASSERT(cplan->n_threads > 0); + + if (cplan->work_size > 0) { + GGML_ASSERT(cplan->work_data); + } + + for (int i = 0; i < cgraph->n_nodes; ++i) { + if (cgraph->nodes[i]->op != GGML_OP_NONE) { + GGML_ASSERT(cplan->n_tasks[i] > 0); + } + } + } + + const int n_threads = cplan->n_threads; struct ggml_compute_state_shared state_shared = { /*.cgraph =*/ cgraph, + /*.cgraph_plan =*/ cplan, /*.perf_node_start_cycles =*/ 0, /*.perf_node_start_time_us =*/ 0, /*.n_threads =*/ n_threads, /*.n_active =*/ n_threads, /*.node_n =*/ -1, + /*.abort_callback =*/ NULL, + /*.abort_callback_data =*/ NULL, }; struct ggml_compute_state * workers = alloca(sizeof(struct ggml_compute_state)*n_threads); - // initialize tasks + work buffer - { - size_t work_size = 0; - - // thread scheduling for the different operations - for (int i = 0; i < cgraph->n_nodes; i++) { - struct ggml_tensor * node = cgraph->nodes[i]; - - switch (node->op) { - case GGML_OP_CPY: - case GGML_OP_DUP: - { - node->n_tasks = n_threads; - - size_t cur = 0; - if (ggml_is_quantized(node->type)) { - cur = GGML_TYPE_SIZE[GGML_TYPE_F32] * node->ne[0] * n_threads; - } - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_ADD: - case GGML_OP_ADD1: - { - node->n_tasks = n_threads; - - size_t cur = 0; - - if (ggml_is_quantized(node->src0->type)) { - cur = GGML_TYPE_SIZE[GGML_TYPE_F32] * node->src0->ne[0] * n_threads; - } - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_ACC: - { - node->n_tasks = n_threads; - - size_t cur = 0; - - if (ggml_is_quantized(node->src0->type)) { - cur = GGML_TYPE_SIZE[GGML_TYPE_F32] * node->src1->ne[0] * n_threads; - } - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_SUB: - case GGML_OP_DIV: - case GGML_OP_SQR: - case GGML_OP_SQRT: - case GGML_OP_LOG: - case GGML_OP_SUM: - case GGML_OP_SUM_ROWS: - case GGML_OP_MEAN: - case GGML_OP_ARGMAX: - case GGML_OP_REPEAT: - case GGML_OP_REPEAT_BACK: - case GGML_OP_ABS: - case GGML_OP_SGN: - case GGML_OP_NEG: - case GGML_OP_STEP: - case GGML_OP_TANH: - case GGML_OP_ELU: - case GGML_OP_RELU: - { - node->n_tasks = 1; - } break; - case GGML_OP_MUL: - case GGML_OP_GELU: - case GGML_OP_GELU_QUICK: - case GGML_OP_SILU: - case GGML_OP_SILU_BACK: - case GGML_OP_NORM: - case GGML_OP_RMS_NORM: - case GGML_OP_RMS_NORM_BACK: - { - node->n_tasks = n_threads; - } break; - case GGML_OP_MUL_MAT: - case GGML_OP_OUT_PROD: - { - node->n_tasks = n_threads; - - // TODO: use different scheduling for different matrix sizes - //const int nr0 = ggml_nrows(node->src0); - //const int nr1 = ggml_nrows(node->src1); - - //node->n_tasks = MIN(n_threads, MAX(1, nr0/128)); - //printf("nr0 = %8d, nr1 = %8d, nr0*nr1 = %8d, n_tasks = %d\n", nr0, nr1, nr0*nr1, node->n_tasks); - - size_t cur = 0; - -#if defined(GGML_USE_CUBLAS) - if (ggml_cuda_can_mul_mat(node->src0, node->src1, node)) { - node->n_tasks = 1; // TODO: this actually is doing nothing - // the threads are still spinning - } - else -#elif defined(GGML_USE_CLBLAST) - if (ggml_cl_can_mul_mat(node->src0, node->src1, node)) { - node->n_tasks = 1; // TODO: this actually is doing nothing - // the threads are still spinning - cur = ggml_cl_mul_mat_get_wsize(node->src0, node->src1, node); - } - else -#endif - if (node->src0->type == GGML_TYPE_F16 && node->src1->type == GGML_TYPE_F32) { -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) - if (ggml_compute_forward_mul_mat_use_blas(node->src0, node->src1, node)) { - node->n_tasks = 1; // TODO: this actually is doing nothing - // the threads are still spinning - // here we need memory just for single 2D matrix from src0 - cur = GGML_TYPE_SIZE[GGML_TYPE_F32]*(node->src0->ne[0]*node->src0->ne[1]); - } else { - cur = GGML_TYPE_SIZE[GGML_TYPE_F16]*ggml_nelements(node->src1); - } -#else - cur = GGML_TYPE_SIZE[GGML_TYPE_F16]*ggml_nelements(node->src1); -#endif - } else if (node->src0->type == GGML_TYPE_F32 && node->src1->type == GGML_TYPE_F32) { - cur = 0; -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) - if (ggml_compute_forward_mul_mat_use_blas(node->src0, node->src1, node)) { - node->n_tasks = 1; - } -#endif - } else if (ggml_is_quantized(node->src0->type) && node->src1->type == GGML_TYPE_F32) { -#if defined(GGML_USE_ACCELERATE) || defined(GGML_USE_OPENBLAS) - if (ggml_compute_forward_mul_mat_use_blas(node->src0, node->src1, node)) { - node->n_tasks = 1; - cur = GGML_TYPE_SIZE[GGML_TYPE_F32]*(node->src0->ne[0]*node->src0->ne[1]); - } else -#endif - { - const enum ggml_type type_q = quantize_fns[node->src0->type].vec_dot_type; - cur = GGML_TYPE_SIZE[type_q]*ggml_nelements(node->src1)/GGML_BLCK_SIZE[type_q]; - } - } else { - GGML_ASSERT(false); - } - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_SCALE: - { - node->n_tasks = 1; - } break; - case GGML_OP_SET: - case GGML_OP_CONT: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - case GGML_OP_GET_ROWS: - case GGML_OP_GET_ROWS_BACK: - case GGML_OP_DIAG: - case GGML_OP_DIAG_MASK_ZERO: - { - node->n_tasks = 1; - } break; - case GGML_OP_DIAG_MASK_INF: - case GGML_OP_SOFT_MAX: - case GGML_OP_SOFT_MAX_BACK: - case GGML_OP_ROPE: - case GGML_OP_ROPE_BACK: - { - node->n_tasks = n_threads; - } break; - case GGML_OP_ALIBI: - { - node->n_tasks = 1; //TODO - } break; - case GGML_OP_CLAMP: - { - node->n_tasks = 1; //TODO - } break; - case GGML_OP_CONV_1D: - { - node->n_tasks = n_threads; - - GGML_ASSERT(node->src0->ne[3] == 1); - GGML_ASSERT(node->src1->ne[2] == 1); - GGML_ASSERT(node->src1->ne[3] == 1); - - size_t cur = 0; - const int nk = node->src0->ne[0]; - - if (node->src0->type == GGML_TYPE_F16 && - node->src1->type == GGML_TYPE_F32) { - cur = sizeof(ggml_fp16_t)*( - nk*ggml_up32(node->src0->ne[1])*node->src0->ne[2] + - ( 2*(nk/2) + node->src1->ne[0])*node->src1->ne[1] - ); - } else if (node->src0->type == GGML_TYPE_F32 && - node->src1->type == GGML_TYPE_F32) { - cur = sizeof(float)*( - nk*ggml_up32(node->src0->ne[1])*node->src0->ne[2] + - ( 2*(nk/2) + node->src1->ne[0])*node->src1->ne[1] - ); - } else { - GGML_ASSERT(false); - } - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_CONV_2D: - { - node->n_tasks = n_threads; - - GGML_ASSERT(node->src1->ne[3] == 1); - - const int64_t ne00 = node->src0->ne[0]; // W - const int64_t ne01 = node->src0->ne[1]; // H - const int64_t ne02 = node->src0->ne[2]; // C - const int64_t ne03 = node->src0->ne[3]; // N - - const int64_t ne10 = node->src1->ne[0]; // W - const int64_t ne11 = node->src1->ne[1]; // H - const int64_t ne12 = node->src1->ne[2]; // C - - const int64_t nk = ne00*ne01; - - UNUSED(ne02); - UNUSED(ne03); - UNUSED(nk); - - size_t cur = 0; - - if (node->src0->type == GGML_TYPE_F16 && - node->src1->type == GGML_TYPE_F32) { - cur = sizeof(ggml_fp16_t)*(ne10*ne11*ne12); - } else if (node->src0->type == GGML_TYPE_F32 && - node->src1->type == GGML_TYPE_F32) { - cur = sizeof(float)* (ne10*ne11*ne12); - } else { - GGML_ASSERT(false); - } - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_FLASH_ATTN: - { - node->n_tasks = n_threads; - - size_t cur = 0; - - const int64_t ne11 = ggml_up(node->src1->ne[1], GGML_SOFT_MAX_UNROLL); - - if (node->src1->type == GGML_TYPE_F32) { - cur = sizeof(float)*ne11*node->n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*ne11*node->n_tasks; // this is overestimated by x2 - } - - if (node->src1->type == GGML_TYPE_F16) { - cur = sizeof(float)*ne11*node->n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*ne11*node->n_tasks; // this is overestimated by x2 - } - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_FLASH_FF: - { - node->n_tasks = n_threads; - - size_t cur = 0; - - if (node->src1->type == GGML_TYPE_F32) { - cur = sizeof(float)*node->src1->ne[1]*node->n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*node->src1->ne[1]*node->n_tasks; // this is overestimated by x2 - } - - if (node->src1->type == GGML_TYPE_F16) { - cur = sizeof(float)*node->src1->ne[1]*node->n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*node->src1->ne[1]*node->n_tasks; // this is overestimated by x2 - } - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_FLASH_ATTN_BACK: - { - node->n_tasks = n_threads; - - size_t cur = 0; - - const int64_t D = node->src0->ne[0]; - const int64_t ne11 = ggml_up(node->src1->ne[1], GGML_SOFT_MAX_UNROLL); - const int64_t mxDn = MAX(D, ne11) * 2; // *2 because of S and SM in ggml_compute_forward_flash_attn_back - if (node->src1->type == GGML_TYPE_F32) { - cur = sizeof(float)*mxDn*node->n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*mxDn*node->n_tasks; // this is overestimated by x2 - } - - if (node->src1->type == GGML_TYPE_F16) { - cur = sizeof(float)*mxDn*node->n_tasks; // TODO: this can become (n_tasks-1) - cur += sizeof(float)*mxDn*node->n_tasks; // this is overestimated by x2 - } - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_WIN_PART: - case GGML_OP_WIN_UNPART: - case GGML_OP_MAP_UNARY: - case GGML_OP_MAP_BINARY: - case GGML_OP_MAP_CUSTOM1: - case GGML_OP_MAP_CUSTOM2: - case GGML_OP_MAP_CUSTOM3: - { - node->n_tasks = 1; - } break; - case GGML_OP_CROSS_ENTROPY_LOSS: - { - node->n_tasks = n_threads; - - size_t cur = ggml_type_size(node->type)*(node->n_tasks + node->src0->ne[0]*node->n_tasks); - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_CROSS_ENTROPY_LOSS_BACK: - { - node->n_tasks = n_threads; - - size_t cur = ggml_type_size(node->type)*node->src0->ne[0]*node->n_tasks; - - work_size = MAX(work_size, cur); - } break; - case GGML_OP_NONE: - { - node->n_tasks = 1; - } break; - case GGML_OP_COUNT: - { - GGML_ASSERT(false); - } break; - } - } - - if (cgraph->work != NULL && work_size > cgraph->work_size) { - GGML_ASSERT(false); // TODO: better handling - } - - if (work_size > 0 && cgraph->work == NULL) { - cgraph->work_size = work_size + CACHE_LINE_SIZE*(n_threads - 1); - - GGML_PRINT_DEBUG("%s: allocating work buffer for graph (%zu bytes)\n", __func__, cgraph->work_size); - cgraph->work = ggml_new_tensor_1d(ctx, GGML_TYPE_I8, cgraph->work_size); - } - } - // create thread pool if (n_threads > 1) { for (int j = 1; j < n_threads; ++j) { @@ -16804,8 +17620,10 @@ void ggml_graph_compute(struct ggml_context * ctx, struct ggml_cgraph * cgraph) const int rc = ggml_thread_create(&workers[j].thrd, NULL, ggml_graph_compute_thread, &workers[j]); GGML_ASSERT(rc == 0); + UNUSED(rc); } } + workers[0].ith = 0; workers[0].shared = &state_shared; @@ -16813,12 +17631,12 @@ void ggml_graph_compute(struct ggml_context * ctx, struct ggml_cgraph * cgraph) const int64_t perf_start_time_us = ggml_perf_time_us(); // this is a work thread too - ggml_graph_compute_thread(&workers[0]); + int compute_status = (size_t) ggml_graph_compute_thread(&workers[0]); // don't leave affinity set on the main thread clear_numa_thread_affinity(); - // join thread pool + // join or kill thread pool if (n_threads > 1) { for (int j = 1; j < n_threads; j++) { const int rc = ggml_thread_join(workers[j].thrd, NULL); @@ -16842,6 +17660,8 @@ void ggml_graph_compute(struct ggml_context * ctx, struct ggml_cgraph * cgraph) (double) perf_time_us_cur / 1000.0, (double) cgraph->perf_time_us / 1000.0 / cgraph->perf_runs); } + + return compute_status; } void ggml_graph_reset(struct ggml_cgraph * cgraph) { @@ -16854,6 +17674,16 @@ void ggml_graph_reset(struct ggml_cgraph * cgraph) { } } +void ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads) { + struct ggml_cplan cplan = ggml_graph_plan(cgraph, n_threads); + + struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_WORK_BUFFER, cplan.work_size); + + cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs; + + ggml_graph_compute(cgraph, &cplan); +} + struct ggml_tensor * ggml_graph_get_tensor(struct ggml_cgraph * cgraph, const char * name) { for (int i = 0; i < cgraph->n_leafs; i++) { struct ggml_tensor * leaf = cgraph->leafs[i]; @@ -16892,28 +17722,24 @@ static void ggml_graph_export_node(const struct ggml_tensor * tensor, const char const int64_t * ne = tensor->ne; const size_t * nb = tensor->nb; - fprintf(fout, "%-6s %-6s %-12s %8d %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %16zu %16zu %16zu %16zu %8d %16p %32s\n", + fprintf(fout, "%-6s %-6s %-12s %8d %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %16zu %16zu %16zu %16zu %16p %32s\n", arg, ggml_type_name(tensor->type), ggml_op_name (tensor->op), tensor->n_dims, ne[0], ne[1], ne[2], ne[3], nb[0], nb[1], nb[2], nb[3], - tensor->n_tasks, tensor->data, tensor->name); } void ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname) { - //assert(cgraph->work == NULL); - //assert(cgraph->work_size == 0); - uint64_t size_eval = 0; // compute size of intermediate results // TODO: does not take into account scratch buffers !!!! for (int i = 0; i < cgraph->n_nodes; ++i) { - size_eval += ggml_nbytes(cgraph->nodes[i]); + size_eval += ggml_nbytes_pad(cgraph->nodes[i]); } // print @@ -16936,8 +17762,8 @@ void ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname) { ggml_graph_export_leaf(cgraph->leafs[i], fout); GGML_ASSERT(cgraph->leafs[i]->op == GGML_OP_NONE); - GGML_ASSERT(cgraph->leafs[i]->src0 == NULL); - GGML_ASSERT(cgraph->leafs[i]->src1 == NULL); + GGML_ASSERT(cgraph->leafs[i]->src[0] == NULL); + GGML_ASSERT(cgraph->leafs[i]->src[1] == NULL); } // header @@ -16948,17 +17774,9 @@ void ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname) { for (int i = 0; i < cgraph->n_nodes; ++i) { ggml_graph_export_node(cgraph->nodes[i], "DST", fout); - if (cgraph->nodes[i]->src0) { - ggml_graph_export_node(cgraph->nodes[i]->src0, "SRC0", fout); - } - - if (cgraph->nodes[i]->src1) { - ggml_graph_export_node(cgraph->nodes[i]->src1, "SRC1", fout); - } - - for (int j = 0; j < GGML_MAX_OPT; ++j) { - if (cgraph->nodes[i]->opt[j]) { - ggml_graph_export_node(cgraph->nodes[i]->opt[j], "OPT", fout); + for (int j = 0; j < GGML_MAX_SRC; ++j) { + if (cgraph->nodes[i]->src[j]) { + ggml_graph_export_node(cgraph->nodes[i]->src[j], "SRC", fout); } } @@ -17012,7 +17830,8 @@ void ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname) { fwrite(&nb, sizeof(uint64_t), 1, fout); } - fwrite(tensor->name, sizeof(char), GGML_MAX_NAME, fout); + fwrite(tensor->name, sizeof(char), GGML_MAX_NAME, fout); + fwrite(tensor->op_params, sizeof(char), GGML_MAX_OP_PARAMS, fout); // dump the data // TODO: pad this to 32 byte boundary @@ -17045,20 +17864,18 @@ void ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname) { fwrite(&nb, sizeof(uint64_t), 1, fout); } - fwrite(tensor->name, sizeof(char), GGML_MAX_NAME, fout); + fwrite(tensor->name, sizeof(char), GGML_MAX_NAME, fout); + fwrite(tensor->op_params, sizeof(char), GGML_MAX_OP_PARAMS, fout); // output the op arguments { - struct ggml_tensor * args[2 + GGML_MAX_OPT] = { NULL }; + struct ggml_tensor * args[GGML_MAX_SRC] = { NULL }; - args[0] = tensor->src0; - args[1] = tensor->src1; - - for (int j = 0; j < GGML_MAX_OPT; ++j) { - args[2 + j] = tensor->opt[j]; + for (int j = 0; j < GGML_MAX_SRC; ++j) { + args[j] = tensor->src[j]; } - for (int j = 0; j < 2 + GGML_MAX_OPT; ++j) { + for (int j = 0; j < GGML_MAX_SRC; ++j) { if (args[j]) { int32_t idx = -1; @@ -17229,7 +18046,8 @@ struct ggml_cgraph ggml_graph_import(const char * fname, struct ggml_context ** tensor->op = (enum ggml_op) op; - memcpy(tensor->name, ptr, GGML_MAX_NAME); ptr += GGML_MAX_NAME; + memcpy(tensor->name, ptr, GGML_MAX_NAME); ptr += GGML_MAX_NAME; + memcpy(tensor->op_params, ptr, GGML_MAX_OP_PARAMS); ptr += GGML_MAX_OP_PARAMS; tensor->data = (void *) ptr; @@ -17274,14 +18092,15 @@ struct ggml_cgraph ggml_graph_import(const char * fname, struct ggml_context ** nb[j] = nb_cur; } - const char * ptr_name = ptr; ptr += GGML_MAX_NAME; + const char * ptr_name = ptr; ptr += GGML_MAX_NAME; + const char * ptr_op_params = ptr; ptr += GGML_MAX_OP_PARAMS; - const int32_t * ptr_arg_idx = (const int32_t *) ptr; ptr += (2 + GGML_MAX_OPT)*sizeof(int32_t); + const int32_t * ptr_arg_idx = (const int32_t *) ptr; ptr += GGML_MAX_SRC*sizeof(int32_t); - struct ggml_tensor * args[2 + GGML_MAX_OPT] = { NULL }; + struct ggml_tensor * args[GGML_MAX_SRC] = { NULL }; // parse args - for (int j = 0; j < 2 + GGML_MAX_OPT; ++j) { + for (int j = 0; j < GGML_MAX_SRC; ++j) { const int32_t arg_idx = ptr_arg_idx[j]; if (arg_idx == -1) { @@ -17311,8 +18130,8 @@ struct ggml_cgraph ggml_graph_import(const char * fname, struct ggml_context ** { tensor = ggml_view_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3], 0, 0, 0, 0); - uint64_t offs; - memcpy(&offs, args[2]->data, sizeof(offs)); + size_t offs; + memcpy(&offs, ptr_op_params, sizeof(offs)); tensor->data = ((char *) tensor->data) + offs; } break; @@ -17332,17 +18151,15 @@ struct ggml_cgraph ggml_graph_import(const char * fname, struct ggml_context ** } break; } - memcpy(tensor->name, ptr_name, GGML_MAX_NAME); + memcpy(tensor->name, ptr_name, GGML_MAX_NAME); + memcpy(tensor->op_params, ptr_op_params, GGML_MAX_OP_PARAMS); for (int j = 0; j < GGML_MAX_DIMS; ++j) { tensor->nb[j] = nb[j]; } - tensor->src0 = args[0]; - tensor->src1 = args[1]; - - for (int j = 0; j < GGML_MAX_OPT; ++j) { - tensor->opt[j] = args[2 + j]; + for (int j = 0; j < GGML_MAX_SRC; ++j) { + tensor->src[j] = args[j]; } result.nodes[i] = tensor; @@ -17360,9 +18177,6 @@ void ggml_graph_print(const struct ggml_cgraph * cgraph) { GGML_PRINT("=== GRAPH ===\n"); - GGML_PRINT_DEBUG("n_threads = %d\n", cgraph->n_threads); - GGML_PRINT_DEBUG("total work size = %zu bytes\n", cgraph->work_size); - GGML_PRINT("n_nodes = %d\n", cgraph->n_nodes); for (int i = 0; i < cgraph->n_nodes; i++) { struct ggml_tensor * node = cgraph->nodes[i]; @@ -17372,7 +18186,7 @@ void ggml_graph_print(const struct ggml_cgraph * cgraph) { GGML_PRINT(" - %3d: [ %5" PRId64 ", %5" PRId64 ", %5" PRId64 "] %16s %s (%3d) cpu = %7.3f / %7.3f ms, wall = %7.3f / %7.3f ms\n", i, node->ne[0], node->ne[1], node->ne[2], - GGML_OP_NAME[node->op], node->is_param ? "x" : node->grad ? "g" : " ", node->perf_runs, + ggml_op_name(node->op), node->is_param ? "x" : node->grad ? "g" : " ", node->perf_runs, (double) node->perf_cycles / (double) ggml_cycles_per_ms(), (double) node->perf_cycles / (double) ggml_cycles_per_ms() / (double) node->perf_runs, (double) node->perf_time_us / 1000.0, @@ -17386,7 +18200,7 @@ void ggml_graph_print(const struct ggml_cgraph * cgraph) { GGML_PRINT(" - %3d: [ %5" PRId64 ", %5" PRId64 "] %8s\n", i, node->ne[0], node->ne[1], - GGML_OP_NAME[node->op]); + ggml_op_name(node->op)); } for (int i = 0; i < GGML_OP_COUNT; i++) { @@ -17394,7 +18208,7 @@ void ggml_graph_print(const struct ggml_cgraph * cgraph) { continue; } - GGML_PRINT("perf_total_per_op_us[%16s] = %7.3f ms\n", GGML_OP_NAME[i], (double) perf_total_per_op_us[i] / 1000.0); + GGML_PRINT("perf_total_per_op_us[%16s] = %7.3f ms\n", ggml_op_name(i), (double) perf_total_per_op_us[i] / 1000.0); } GGML_PRINT("========================================\n"); @@ -17488,13 +18302,13 @@ void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph } if (node->n_dims == 2) { - fprintf(fp, "%d [%" PRId64 ", %" PRId64 "] | %s", i, node->ne[0], node->ne[1], GGML_OP_SYMBOL[node->op]); + fprintf(fp, "%d [%" PRId64 ", %" PRId64 "] | %s", i, node->ne[0], node->ne[1], ggml_op_symbol(node->op)); } else { - fprintf(fp, "%d [%" PRId64 ", %" PRId64 ", %" PRId64 "] | %s", i, node->ne[0], node->ne[1], node->ne[2], GGML_OP_SYMBOL[node->op]); + fprintf(fp, "%d [%" PRId64 ", %" PRId64 ", %" PRId64 "] | %s", i, node->ne[0], node->ne[1], node->ne[2], ggml_op_symbol(node->op)); } if (node->grad) { - fprintf(fp, " | %s\"; ]\n", GGML_OP_SYMBOL[node->grad->op]); + fprintf(fp, " | %s\"; ]\n", ggml_op_symbol(node->grad->op)); } else { fprintf(fp, "\"; ]\n"); } @@ -17541,19 +18355,11 @@ void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph for (int i = 0; i < gb->n_nodes; i++) { struct ggml_tensor * node = gb->nodes[i]; - if (node->src0) { - ggml_graph_dump_dot_node_edge(fp, gb, node, node->src0, "x"); - } - - if (node->src1) { - ggml_graph_dump_dot_node_edge(fp, gb, node, node->src1, "y"); - } - - for (int j = 0; j < GGML_MAX_OPT; j++) { - if (node->opt[j]) { + for (int j = 0; j < GGML_MAX_SRC; j++) { + if (node->src[j]) { char label[16]; - snprintf(label, sizeof(label), "opt %d", j); - ggml_graph_dump_dot_node_edge(fp, gb, node, node->opt[j], label); + snprintf(label, sizeof(label), "src %d", j); + ggml_graph_dump_dot_node_edge(fp, gb, node, node->src[j], label); } } } @@ -17561,19 +18367,11 @@ void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph for (int i = 0; i < gb->n_leafs; i++) { struct ggml_tensor * node = gb->leafs[i]; - if (node->src0) { - ggml_graph_dump_dot_leaf_edge(fp, node, node->src0, "x"); - } - - if (node->src1) { - ggml_graph_dump_dot_leaf_edge(fp, node, node->src1, "y"); - } - - for (int j = 0; j < GGML_MAX_OPT; j++) { - if (node->opt[j]) { + for (int j = 0; j < GGML_MAX_SRC; j++) { + if (node->src[j]) { char label[16]; - snprintf(label, sizeof(label), "opt %d", j); - ggml_graph_dump_dot_leaf_edge(fp, node, node->opt[j], label); + snprintf(label, sizeof(label), "src %d", j); + ggml_graph_dump_dot_leaf_edge(fp, node, node->src[j], label); } } } @@ -17635,9 +18433,6 @@ static enum ggml_opt_result ggml_opt_adam( struct ggml_cgraph * gb) { GGML_ASSERT(ggml_is_scalar(f)); - gf->n_threads = params.n_threads; - gb->n_threads = params.n_threads; - // these will store the parameters we want to optimize struct ggml_tensor * ps[GGML_MAX_PARAMS]; @@ -17684,7 +18479,8 @@ static enum ggml_opt_result ggml_opt_adam( // compute the function value ggml_graph_reset (gf); ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute(ctx, gb); + + ggml_graph_compute_with_ctx(ctx, gb, params.n_threads); opt->adam.fx_prev = ggml_get_f32_1d(f, 0); opt->adam.fx_best = opt->adam.fx_prev; @@ -17764,7 +18560,8 @@ static enum ggml_opt_result ggml_opt_adam( ggml_graph_reset (gf); ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute(ctx, gb); + + ggml_graph_compute_with_ctx(ctx, gb, params.n_threads); const float fx = ggml_get_f32_1d(f, 0); @@ -17886,7 +18683,8 @@ static enum ggml_opt_result linesearch_backtracking( ggml_graph_reset (gf); ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute(ctx, gb); + + ggml_graph_compute_with_ctx(ctx, gb, params->n_threads); ggml_opt_get_grad(np, ps, g); @@ -17954,9 +18752,6 @@ static enum ggml_opt_result ggml_opt_lbfgs( } } - gf->n_threads = params.n_threads; - gb->n_threads = params.n_threads; - const int m = params.lbfgs.m; // these will store the parameters we want to optimize @@ -18008,7 +18803,8 @@ static enum ggml_opt_result ggml_opt_lbfgs( ggml_graph_reset (gf); ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute(ctx, gb); + + ggml_graph_compute_with_ctx(ctx, gb, params.n_threads); ggml_opt_get_grad(np, ps, g); @@ -18344,8 +19140,8 @@ enum ggml_opt_result ggml_opt_resume( struct ggml_tensor * f) { // build forward + backward compute graphs - struct ggml_tensor * gfbuf = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(struct ggml_cgraph) / GGML_TYPE_SIZE[GGML_TYPE_I32]+ (sizeof(struct ggml_cgraph) % GGML_TYPE_SIZE[GGML_TYPE_I32] ? 1 : 0)); - struct ggml_tensor * gbbuf = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(struct ggml_cgraph) / GGML_TYPE_SIZE[GGML_TYPE_I32]+ (sizeof(struct ggml_cgraph) % GGML_TYPE_SIZE[GGML_TYPE_I32] ? 1 : 0)); + struct ggml_tensor * gfbuf = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(struct ggml_cgraph) / ggml_type_size(GGML_TYPE_I32)+ (sizeof(struct ggml_cgraph) % ggml_type_size(GGML_TYPE_I32) ? 1 : 0)); + struct ggml_tensor * gbbuf = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, sizeof(struct ggml_cgraph) / ggml_type_size(GGML_TYPE_I32)+ (sizeof(struct ggml_cgraph) % ggml_type_size(GGML_TYPE_I32) ? 1 : 0)); struct ggml_cgraph * gf = (struct ggml_cgraph *) gfbuf->data; struct ggml_cgraph * gb = (struct ggml_cgraph *) gbbuf->data; @@ -18604,6 +19400,1106 @@ size_t ggml_quantize_chunk(enum ggml_type type, const float * src, void * dst, i //////////////////////////////////////////////////////////////////////////////// +struct gguf_str { + uint64_t n; // GGUFv2 + char * data; +}; + +static const size_t GGUF_TYPE_SIZE[GGUF_TYPE_COUNT] = { + [GGUF_TYPE_UINT8] = sizeof(uint8_t), + [GGUF_TYPE_INT8] = sizeof(int8_t), + [GGUF_TYPE_UINT16] = sizeof(uint16_t), + [GGUF_TYPE_INT16] = sizeof(int16_t), + [GGUF_TYPE_UINT32] = sizeof(uint32_t), + [GGUF_TYPE_INT32] = sizeof(int32_t), + [GGUF_TYPE_FLOAT32] = sizeof(float), + [GGUF_TYPE_BOOL] = sizeof(bool), + [GGUF_TYPE_STRING] = sizeof(struct gguf_str), + [GGUF_TYPE_UINT64] = sizeof(uint64_t), + [GGUF_TYPE_INT64] = sizeof(int64_t), + [GGUF_TYPE_FLOAT64] = sizeof(double), + [GGUF_TYPE_ARRAY] = 0, // undefined +}; +static_assert(GGUF_TYPE_COUNT == 13, "GGUF_TYPE_COUNT != 13"); + +static const char * GGUF_TYPE_NAME[GGUF_TYPE_COUNT] = { + [GGUF_TYPE_UINT8] = "u8", + [GGUF_TYPE_INT8] = "i8", + [GGUF_TYPE_UINT16] = "u16", + [GGUF_TYPE_INT16] = "i16", + [GGUF_TYPE_UINT32] = "u32", + [GGUF_TYPE_INT32] = "i32", + [GGUF_TYPE_FLOAT32] = "f32", + [GGUF_TYPE_BOOL] = "bool", + [GGUF_TYPE_STRING] = "str", + [GGUF_TYPE_ARRAY] = "arr", + [GGUF_TYPE_UINT64] = "u64", + [GGUF_TYPE_INT64] = "i64", + [GGUF_TYPE_FLOAT64] = "f64", +}; +static_assert(GGUF_TYPE_COUNT == 13, "GGUF_TYPE_COUNT != 13"); + +union gguf_value { + uint8_t uint8; + int8_t int8; + uint16_t uint16; + int16_t int16; + uint32_t uint32; + int32_t int32; + float float32; + uint64_t uint64; + int64_t int64; + double float64; + bool bool_; + + struct gguf_str str; + + struct { + enum gguf_type type; + + uint64_t n; // GGUFv2 + void * data; + } arr; +}; + +struct gguf_kv { + struct gguf_str key; + + enum gguf_type type; + union gguf_value value; +}; + +struct gguf_header { + uint32_t magic; + uint32_t version; + uint64_t n_tensors; // GGUFv2 + uint64_t n_kv; // GGUFv2 +}; + +struct gguf_tensor_info { + struct gguf_str name; + + uint32_t n_dims; + uint64_t ne[GGML_MAX_DIMS]; + + enum ggml_type type; + + uint64_t offset; // offset from start of `data`, must be a multiple of `ALIGNMENT` + + // for writing API + const void * data; + size_t size; +}; + +struct gguf_context { + struct gguf_header header; + + struct gguf_kv * kv; + struct gguf_tensor_info * infos; + + size_t alignment; + size_t offset; // offset of `data` from beginning of file + size_t size; // size of `data` in bytes + + //uint8_t * padding; + void * data; +}; + +static bool gguf_fread_el(FILE * file, void * dst, size_t size, size_t * offset) { + const size_t n = fread(dst, 1, size, file); + *offset += n; + return n == size; +} + +// NOTE: temporary handling of GGUFv1 >> remove after Oct 2023 +static bool gguf_fread_str_cur(FILE * file, struct gguf_str * p, size_t * offset) { + p->n = 0; + p->data = NULL; + + bool ok = true; + + ok = ok && gguf_fread_el(file, &p->n, sizeof(p->n), offset); p->data = calloc(p->n + 1, 1); + ok = ok && gguf_fread_el(file, p->data, p->n, offset); + + return ok; +} + +static bool gguf_fread_str_v1(FILE * file, struct gguf_str * p, size_t * offset) { + p->n = 0; + p->data = NULL; + + bool ok = true; + + uint32_t n = 0; + ok = ok && gguf_fread_el(file, &n, sizeof(n), offset); p->data = calloc(n + 1, 1); p->n = n; + ok = ok && gguf_fread_el(file, p->data, p->n, offset); + + return ok; +} + +struct gguf_context * gguf_init_empty(void) { + struct gguf_context * ctx = GGML_ALIGNED_MALLOC(sizeof(struct gguf_context)); + + ctx->header.magic = GGUF_MAGIC; + ctx->header.version = GGUF_VERSION; + ctx->header.n_tensors = 0; + ctx->header.n_kv = 0; + + ctx->kv = NULL; + ctx->infos = NULL; + + ctx->alignment = GGUF_DEFAULT_ALIGNMENT; + ctx->offset = 0; + ctx->size = 0; + + ctx->data = NULL; + + return ctx; +} + +struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params) { + FILE * file = fopen(fname, "rb"); + if (!file) { + return NULL; + } + + // offset from start of file + size_t offset = 0; + + uint32_t magic = 0; + + // check the magic before making allocations + { + gguf_fread_el(file, &magic, sizeof(magic), &offset); + + if (magic != GGUF_MAGIC) { + fprintf(stderr, "%s: invalid magic number %08x\n", __func__, magic); + fclose(file); + return NULL; + } + } + + bool ok = true; + + struct gguf_context * ctx = GGML_ALIGNED_MALLOC(sizeof(struct gguf_context)); + + // read the header + { + ctx->header.magic = magic; + + ctx->kv = NULL; + ctx->infos = NULL; + ctx->data = NULL; + + ok = ok && gguf_fread_el(file, &ctx->header.version, sizeof(ctx->header.version), &offset); + + if (ctx->header.version == 1) { + // NOTE: temporary handling of GGUFv1 >> remove after Oct 2023 + uint32_t n_tensors = 0; + uint32_t n_kv = 0; + + ok = ok && gguf_fread_el(file, &n_tensors, sizeof(n_tensors), &offset); + ok = ok && gguf_fread_el(file, &n_kv, sizeof(n_kv), &offset); + + ctx->header.n_tensors = n_tensors; + ctx->header.n_kv = n_kv; + } else { + ok = ok && gguf_fread_el(file, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors), &offset); + ok = ok && gguf_fread_el(file, &ctx->header.n_kv, sizeof(ctx->header.n_kv), &offset); + } + + if (!ok) { + fprintf(stderr, "%s: failed to read header\n", __func__); + fclose(file); + gguf_free(ctx); + return NULL; + } + } + + // NOTE: temporary handling of GGUFv1 >> remove after Oct 2023 + bool (* gguf_fread_str)(FILE *, struct gguf_str *, size_t *) = gguf_fread_str_cur; + if (ctx->header.version == 1) { + gguf_fread_str = gguf_fread_str_v1; + } + + // read the kv pairs + { + ctx->kv = GGML_ALIGNED_MALLOC(ctx->header.n_kv * sizeof(struct gguf_kv)); + + for (uint32_t i = 0; i < ctx->header.n_kv; ++i) { + struct gguf_kv * kv = &ctx->kv[i]; + + //fprintf(stderr, "%s: reading kv %d\n", __func__, i); + + ok = ok && gguf_fread_str(file, &kv->key, &offset); + ok = ok && gguf_fread_el (file, &kv->type, sizeof(kv->type), &offset); + + //fprintf(stderr, "%s: reading kv with key %s\n", __func__, kv->key.data); + + switch (kv->type) { + case GGUF_TYPE_UINT8: ok = ok && gguf_fread_el (file, &kv->value.uint8, sizeof(kv->value.uint8), &offset); break; + case GGUF_TYPE_INT8: ok = ok && gguf_fread_el (file, &kv->value.int8, sizeof(kv->value.int8), &offset); break; + case GGUF_TYPE_UINT16: ok = ok && gguf_fread_el (file, &kv->value.uint16, sizeof(kv->value.uint16), &offset); break; + case GGUF_TYPE_INT16: ok = ok && gguf_fread_el (file, &kv->value.int16, sizeof(kv->value.int16), &offset); break; + case GGUF_TYPE_UINT32: ok = ok && gguf_fread_el (file, &kv->value.uint32, sizeof(kv->value.uint32), &offset); break; + case GGUF_TYPE_INT32: ok = ok && gguf_fread_el (file, &kv->value.int32, sizeof(kv->value.int32), &offset); break; + case GGUF_TYPE_FLOAT32: ok = ok && gguf_fread_el (file, &kv->value.float32, sizeof(kv->value.float32), &offset); break; + case GGUF_TYPE_UINT64: ok = ok && gguf_fread_el (file, &kv->value.uint64, sizeof(kv->value.uint64), &offset); break; + case GGUF_TYPE_INT64: ok = ok && gguf_fread_el (file, &kv->value.int64, sizeof(kv->value.int64), &offset); break; + case GGUF_TYPE_FLOAT64: ok = ok && gguf_fread_el (file, &kv->value.float64, sizeof(kv->value.float64), &offset); break; + case GGUF_TYPE_BOOL: ok = ok && gguf_fread_el (file, &kv->value.bool_, sizeof(kv->value.bool_), &offset); break; + case GGUF_TYPE_STRING: ok = ok && gguf_fread_str(file, &kv->value.str, &offset); break; + case GGUF_TYPE_ARRAY: + { + ok = ok && gguf_fread_el(file, &kv->value.arr.type, sizeof(kv->value.arr.type), &offset); + + if (ctx->header.version == 1) { + // NOTE: temporary handling of GGUFv1 >> remove after Oct 2023 + uint32_t n = 0; + ok = ok && gguf_fread_el(file, &n, sizeof(n), &offset); + kv->value.arr.n = n; + } else { + ok = ok && gguf_fread_el(file, &kv->value.arr.n, sizeof(kv->value.arr.n), &offset); + } + + switch (kv->value.arr.type) { + case GGUF_TYPE_UINT8: + case GGUF_TYPE_INT8: + case GGUF_TYPE_UINT16: + case GGUF_TYPE_INT16: + case GGUF_TYPE_UINT32: + case GGUF_TYPE_INT32: + case GGUF_TYPE_FLOAT32: + case GGUF_TYPE_UINT64: + case GGUF_TYPE_INT64: + case GGUF_TYPE_FLOAT64: + case GGUF_TYPE_BOOL: + { + kv->value.arr.data = malloc(kv->value.arr.n * GGUF_TYPE_SIZE[kv->value.arr.type]); + ok = ok && gguf_fread_el(file, kv->value.arr.data, kv->value.arr.n * GGUF_TYPE_SIZE[kv->value.arr.type], &offset); + } break; + case GGUF_TYPE_STRING: + { + kv->value.arr.data = malloc(kv->value.arr.n * sizeof(struct gguf_str)); + for (uint32_t j = 0; j < kv->value.arr.n; ++j) { + ok = ok && gguf_fread_str(file, &((struct gguf_str *) kv->value.arr.data)[j], &offset); + } + } break; + case GGUF_TYPE_ARRAY: + case GGUF_TYPE_COUNT: GGML_ASSERT(false && "invalid type"); break; + }; + } break; + case GGUF_TYPE_COUNT: GGML_ASSERT(false && "invalid type"); + }; + + if (!ok) { + break; + } + } + + if (!ok) { + fprintf(stderr, "%s: failed to read key-value pairs\n", __func__); + fclose(file); + gguf_free(ctx); + return NULL; + } + } + + // read the tensor infos + { + ctx->infos = GGML_ALIGNED_MALLOC(ctx->header.n_tensors * sizeof(struct gguf_tensor_info)); + + for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) { + struct gguf_tensor_info * info = &ctx->infos[i]; + + for (int j = 0; j < GGML_MAX_DIMS; ++j) { + info->ne[j] = 1; + } + + ok = ok && gguf_fread_str(file, &info->name, &offset); + ok = ok && gguf_fread_el (file, &info->n_dims, sizeof(info->n_dims), &offset); + for (uint32_t j = 0; j < info->n_dims; ++j) { + if (ctx->header.version == 1) { + // NOTE: temporary handling of GGUFv1 >> remove after Oct 2023 + uint32_t t = 0; + ok = ok && gguf_fread_el(file, &t, sizeof(t), &offset); + info->ne[j] = t; + } else { + ok = ok && gguf_fread_el(file, &info->ne[j], sizeof(info->ne[j]), &offset); + } + } + ok = ok && gguf_fread_el (file, &info->type, sizeof(info->type), &offset); + ok = ok && gguf_fread_el (file, &info->offset, sizeof(info->offset), &offset); + + if (!ok) { + fprintf(stderr, "%s: failed to read tensor info\n", __func__); + fclose(file); + gguf_free(ctx); + return NULL; + } + } + } + + ctx->alignment = GGUF_DEFAULT_ALIGNMENT; + + int alignment_idx = gguf_find_key(ctx, "general.alignment"); + if (alignment_idx != -1) { + ctx->alignment = gguf_get_val_u32(ctx, alignment_idx); + } + + // we require the data section to be aligned, so take into account any padding + { + const size_t offset_pad = offset % ctx->alignment; + + if (offset_pad != 0) { + offset += ctx->alignment - offset_pad; + fseek(file, offset, SEEK_SET); + } + } + + // store the current file offset - this is where the data section starts + ctx->offset = offset; + + // compute the total size of the data section, taking into account the alignment + { + ctx->size = 0; + for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) { + struct gguf_tensor_info * info = &ctx->infos[i]; + + const int64_t ne = + (int64_t) info->ne[0] * + (int64_t) info->ne[1] * + (int64_t) info->ne[2] * + (int64_t) info->ne[3]; + + if (ne % ggml_blck_size(info->type) != 0) { + fprintf(stderr, "%s: tensor '%s' number of elements (%" PRId64 ") is not a multiple of block size (%d)\n", + __func__, info->name.data, ne, ggml_blck_size(info->type)); + fclose(file); + gguf_free(ctx); + return NULL; + } + + const size_t size_cur = (ne*ggml_type_size(info->type))/ggml_blck_size(info->type); + + ctx->size += GGML_PAD(size_cur, ctx->alignment); + } + } + + // load the tensor data only if requested + if (params.ctx != NULL) { + // if the provided gguf_context is no_alloc, then we create "empty" tensors and do not read the binary blob + // otherwise, we load the binary blob into the created ggml_context as well, and point the "data" members of + // the ggml_tensor structs to the appropriate locations in the binary blob + + // compute the exact size needed for the new ggml_context + const size_t mem_size = + params.no_alloc ? + (ctx->header.n_tensors )*ggml_tensor_overhead() : + (ctx->header.n_tensors + 1)*ggml_tensor_overhead() + ctx->size; + + struct ggml_init_params pdata = { + .mem_size = mem_size, + .mem_buffer = NULL, + .no_alloc = params.no_alloc, + }; + + *params.ctx = ggml_init(pdata); + + struct ggml_context * ctx_data = *params.ctx; + + struct ggml_tensor * data = NULL; + + if (params.no_alloc == false) { + data = ggml_new_tensor_1d(ctx_data, GGML_TYPE_I8, ctx->size); + + ok = ok && data != NULL; + + // read the binary blob with the tensor data + ok = ok && gguf_fread_el(file, data->data, ctx->size, &offset); + + if (!ok) { + fprintf(stderr, "%s: failed to read tensor data\n", __func__); + fclose(file); + ggml_free(ctx_data); + gguf_free(ctx); + return NULL; + } + + ctx->data = data->data; + } + + ggml_set_no_alloc(ctx_data, true); + + // create the tensors + for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) { + const int64_t ne[GGML_MAX_DIMS] = { + ctx->infos[i].ne[0], + ctx->infos[i].ne[1], + ctx->infos[i].ne[2], + ctx->infos[i].ne[3], + }; + + struct ggml_tensor * cur = ggml_new_tensor(ctx_data, ctx->infos[i].type, ctx->infos[i].n_dims, ne); + + ok = ok && cur != NULL; + + ggml_set_name(cur, ctx->infos[i].name.data); + + if (!ok) { + break; + } + + // point the data member to the appropriate location in the binary blob using the tensor infos + if (params.no_alloc == false) { + //cur->data = (char *) data->data + ctx->infos[i].offset - ctx->offset; // offset from start of file + cur->data = (char *) data->data + ctx->infos[i].offset; // offset from data + } + } + + if (!ok) { + fprintf(stderr, "%s: failed to read the tensor data\n", __func__); + fclose(file); + ggml_free(ctx_data); + gguf_free(ctx); + return NULL; + } + + ggml_set_no_alloc(ctx_data, params.no_alloc); + } + + fclose(file); + + return ctx; +} + +void gguf_free(struct gguf_context * ctx) { + if (ctx == NULL) { + return; + } + + if (ctx->kv) { + // free string memory - not great.. + for (uint32_t i = 0; i < ctx->header.n_kv; ++i) { + struct gguf_kv * kv = &ctx->kv[i]; + + if (kv->key.data) { + free(kv->key.data); + } + + if (kv->type == GGUF_TYPE_STRING) { + if (kv->value.str.data) { + free(kv->value.str.data); + } + } + + if (kv->type == GGUF_TYPE_ARRAY) { + if (kv->value.arr.data) { + if (kv->value.arr.type == GGUF_TYPE_STRING) { + for (uint32_t j = 0; j < kv->value.arr.n; ++j) { + struct gguf_str * str = &((struct gguf_str *) kv->value.arr.data)[j]; + if (str->data) { + free(str->data); + } + } + } + free(kv->value.arr.data); + } + } + } + + GGML_ALIGNED_FREE(ctx->kv); + } + + if (ctx->infos) { + for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) { + struct gguf_tensor_info * info = &ctx->infos[i]; + + if (info->name.data) { + free(info->name.data); + } + } + + GGML_ALIGNED_FREE(ctx->infos); + } + + GGML_ALIGNED_FREE(ctx); +} + +const char * gguf_type_name(enum gguf_type type) { + return GGUF_TYPE_NAME[type]; +} + +int gguf_get_version(struct gguf_context * ctx) { + return ctx->header.version; +} + +size_t gguf_get_alignment(struct gguf_context * ctx) { + return ctx->alignment; +} + +size_t gguf_get_data_offset(struct gguf_context * ctx) { + return ctx->offset; +} + +void * gguf_get_data(struct gguf_context * ctx) { + return ctx->data; +} + +int gguf_get_n_kv(struct gguf_context * ctx) { + return ctx->header.n_kv; +} + +int gguf_find_key(struct gguf_context * ctx, const char * key) { + // return -1 if key not found + int keyfound = -1; + + const int n_kv = gguf_get_n_kv(ctx); + + for (int i = 0; i < n_kv; ++i) { + if (strcmp(key, gguf_get_key(ctx, i)) == 0) { + keyfound = i; + break; + } + } + + return keyfound; +} + +const char * gguf_get_key(struct gguf_context * ctx, int i) { + return ctx->kv[i].key.data; +} + +enum gguf_type gguf_get_kv_type(struct gguf_context * ctx, int i) { + return ctx->kv[i].type; +} + +enum gguf_type gguf_get_arr_type(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.arr.type; +} + +const void * gguf_get_arr_data(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.arr.data; +} + +const char * gguf_get_arr_str(struct gguf_context * ctx, int key_id, int i) { + struct gguf_kv * kv = &ctx->kv[key_id]; + struct gguf_str * str = &((struct gguf_str *) kv->value.arr.data)[i]; + return str->data; +} + +int gguf_get_arr_n(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.arr.n; +} + +uint8_t gguf_get_val_u8(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.uint8; +} + +int8_t gguf_get_val_i8(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.int8; +} + +uint16_t gguf_get_val_u16(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.uint16; +} + +int16_t gguf_get_val_i16(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.int16; +} + +uint32_t gguf_get_val_u32(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.uint32; +} + +int32_t gguf_get_val_i32(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.int32; +} + +float gguf_get_val_f32(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.float32; +} + +uint64_t gguf_get_val_u64(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.uint64; +} + +int64_t gguf_get_val_i64(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.int64; +} + +double gguf_get_val_f64(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.float64; +} + +bool gguf_get_val_bool(struct gguf_context * ctx, int i) { + return ctx->kv[i].value.bool_; +} + +const char * gguf_get_val_str (struct gguf_context * ctx, int i) { + return ctx->kv[i].value.str.data; +} + +int gguf_get_n_tensors(struct gguf_context * ctx) { + return ctx->header.n_tensors; +} + +int gguf_find_tensor(struct gguf_context * ctx, const char * name) { + // return -1 if tensor not found + int tensorfound = -1; + + const int n_tensors = gguf_get_n_tensors(ctx); + + for (int i = 0; i < n_tensors; ++i) { + if (strcmp(name, gguf_get_tensor_name(ctx, i)) == 0) { + tensorfound = i; + break; + } + } + + return tensorfound; +} + +size_t gguf_get_tensor_offset(struct gguf_context * ctx, int i) { + return ctx->infos[i].offset; +} + +char * gguf_get_tensor_name(struct gguf_context * ctx, int i) { + return ctx->infos[i].name.data; +} + +// returns the index +static int gguf_get_or_add_key(struct gguf_context * ctx, const char * key) { + const int idx = gguf_find_key(ctx, key); + if (idx >= 0) { + return idx; + } + + const int n_kv = gguf_get_n_kv(ctx); + + ctx->kv = realloc(ctx->kv, (n_kv + 1) * sizeof(struct gguf_kv)); + ctx->kv[n_kv].key.n = strlen(key); + ctx->kv[n_kv].key.data = strdup(key); + ctx->header.n_kv++; + + return n_kv; +} + +void gguf_set_val_u8(struct gguf_context * ctx, const char * key, uint8_t val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_UINT8; + ctx->kv[idx].value.uint8 = val; +} + +void gguf_set_val_i8(struct gguf_context * ctx, const char * key, int8_t val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_INT8; + ctx->kv[idx].value.int8 = val; +} + +void gguf_set_val_u16(struct gguf_context * ctx, const char * key, uint16_t val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_UINT16; + ctx->kv[idx].value.uint16 = val; +} + +void gguf_set_val_i16(struct gguf_context * ctx, const char * key, int16_t val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_INT16; + ctx->kv[idx].value.int16 = val; +} + +void gguf_set_val_u32(struct gguf_context * ctx, const char * key, uint32_t val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_UINT32; + ctx->kv[idx].value.uint32 = val; +} + +void gguf_set_val_i32(struct gguf_context * ctx, const char * key, int32_t val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_INT32; + ctx->kv[idx].value.int32 = val; +} + +void gguf_set_val_f32(struct gguf_context * ctx, const char * key, float val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_FLOAT32; + ctx->kv[idx].value.float32 = val; +} + +void gguf_set_val_u64(struct gguf_context * ctx, const char * key, uint64_t val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_UINT64; + ctx->kv[idx].value.uint64 = val; +} + +void gguf_set_val_i64(struct gguf_context * ctx, const char * key, int64_t val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_INT64; + ctx->kv[idx].value.int64 = val; +} + +void gguf_set_val_f64(struct gguf_context * ctx, const char * key, double val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_FLOAT64; + ctx->kv[idx].value.float64 = val; +} + +void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_BOOL; + ctx->kv[idx].value.bool_ = val; +} + +void gguf_set_val_str(struct gguf_context * ctx, const char * key, const char * val) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_STRING; + ctx->kv[idx].value.str.n = strlen(val); + ctx->kv[idx].value.str.data = strdup(val); +} + +void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, int n) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_ARRAY; + ctx->kv[idx].value.arr.type = type; + ctx->kv[idx].value.arr.n = n; + ctx->kv[idx].value.arr.data = malloc(n*GGUF_TYPE_SIZE[type]); + memcpy(ctx->kv[idx].value.arr.data, data, n*GGUF_TYPE_SIZE[type]); +} + +void gguf_set_arr_str(struct gguf_context * ctx, const char * key, const char ** data, int n) { + const int idx = gguf_get_or_add_key(ctx, key); + + ctx->kv[idx].type = GGUF_TYPE_ARRAY; + ctx->kv[idx].value.arr.type = GGUF_TYPE_STRING; + ctx->kv[idx].value.arr.n = n; + ctx->kv[idx].value.arr.data = malloc(n*sizeof(struct gguf_str)); + for (int i = 0; i < n; i++) { + struct gguf_str * str = &((struct gguf_str *)ctx->kv[idx].value.arr.data)[i]; + str->n = strlen(data[i]); + str->data = strdup(data[i]); + } +} + +// set or add KV pairs from another context +void gguf_set_kv(struct gguf_context * ctx, struct gguf_context * src) { + for (uint32_t i = 0; i < src->header.n_kv; i++) { + switch (src->kv[i].type) { + case GGUF_TYPE_UINT8: gguf_set_val_u8 (ctx, src->kv[i].key.data, src->kv[i].value.uint8); break; + case GGUF_TYPE_INT8: gguf_set_val_i8 (ctx, src->kv[i].key.data, src->kv[i].value.int8); break; + case GGUF_TYPE_UINT16: gguf_set_val_u16 (ctx, src->kv[i].key.data, src->kv[i].value.uint16); break; + case GGUF_TYPE_INT16: gguf_set_val_i16 (ctx, src->kv[i].key.data, src->kv[i].value.int16); break; + case GGUF_TYPE_UINT32: gguf_set_val_u32 (ctx, src->kv[i].key.data, src->kv[i].value.uint32); break; + case GGUF_TYPE_INT32: gguf_set_val_i32 (ctx, src->kv[i].key.data, src->kv[i].value.int32); break; + case GGUF_TYPE_FLOAT32: gguf_set_val_f32 (ctx, src->kv[i].key.data, src->kv[i].value.float32); break; + case GGUF_TYPE_UINT64: gguf_set_val_u64 (ctx, src->kv[i].key.data, src->kv[i].value.uint64); break; + case GGUF_TYPE_INT64: gguf_set_val_i64 (ctx, src->kv[i].key.data, src->kv[i].value.int64); break; + case GGUF_TYPE_FLOAT64: gguf_set_val_f64 (ctx, src->kv[i].key.data, src->kv[i].value.float64); break; + case GGUF_TYPE_BOOL: gguf_set_val_bool(ctx, src->kv[i].key.data, src->kv[i].value.bool_); break; + case GGUF_TYPE_STRING: gguf_set_val_str (ctx, src->kv[i].key.data, src->kv[i].value.str.data); break; + case GGUF_TYPE_ARRAY: + { + if (src->kv[i].value.arr.type == GGUF_TYPE_STRING) { + const char ** data = malloc(src->kv[i].value.arr.n*sizeof(char *)); + for (uint32_t j = 0; j < src->kv[i].value.arr.n; j++) { + data[j] = ((struct gguf_str *)src->kv[i].value.arr.data)[j].data; + } + gguf_set_arr_str(ctx, src->kv[i].key.data, data, src->kv[i].value.arr.n); + free(data); + } else if (src->kv[i].value.arr.type == GGUF_TYPE_ARRAY) { + GGML_ASSERT(false && "nested arrays not supported"); + } else { + gguf_set_arr_data(ctx, src->kv[i].key.data, src->kv[i].value.arr.type, src->kv[i].value.arr.data, src->kv[i].value.arr.n); + } + } break; + case GGUF_TYPE_COUNT: GGML_ASSERT(false && "invalid type"); break; + } + } +} + +void gguf_add_tensor( + struct gguf_context * ctx, + const struct ggml_tensor * tensor) { + const int idx = ctx->header.n_tensors; + ctx->infos = realloc(ctx->infos, (idx + 1)*sizeof(struct gguf_tensor_info)); + + ctx->infos[idx].name.n = strlen(tensor->name); + ctx->infos[idx].name.data = strdup(tensor->name); + + for (int i = 0; i < GGML_MAX_DIMS; ++i) { + ctx->infos[idx].ne[i] = 1; + } + + ctx->infos[idx].n_dims = tensor->n_dims; + for (int i = 0; i < tensor->n_dims; i++) { + ctx->infos[idx].ne[i] = tensor->ne[i]; + } + + ctx->infos[idx].type = tensor->type; + ctx->infos[idx].offset = 0; + ctx->infos[idx].data = tensor->data; + ctx->infos[idx].size = ggml_nbytes(tensor); + + if (ctx->header.n_tensors > 0) { + ctx->infos[idx].offset = ctx->infos[idx - 1].offset + GGML_PAD(ctx->infos[idx - 1].size, ctx->alignment); + } + + ctx->header.n_tensors++; +} + +void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type) { + const int idx = gguf_find_tensor(ctx, name); + if (idx < 0) { + GGML_ASSERT(false && "tensor not found"); + } + + ctx->infos[idx].type = type; +} + +void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data, size_t size) { + const int idx = gguf_find_tensor(ctx, name); + if (idx < 0) { + GGML_ASSERT(false && "tensor not found"); + } + + ctx->infos[idx].data = data; + ctx->infos[idx].size = size; + + // update offsets + for (uint32_t i = idx + 1; i < ctx->header.n_tensors; ++i) { + ctx->infos[i].offset = ctx->infos[i - 1].offset + GGML_PAD(ctx->infos[i - 1].size, ctx->alignment); + } +} + +//static void gguf_fwrite_str(FILE * file, const struct gguf_str * val) { +// fwrite(&val->n, sizeof(val->n), 1, file); +// fwrite(val->data, sizeof(char), val->n, file); +//} +// +//static void gguf_fwrite_el(FILE * file, const void * val, size_t size) { +// fwrite(val, sizeof(char), size, file); +//} + +struct gguf_buf { + void * data; + size_t size; + size_t offset; +}; + +static struct gguf_buf gguf_buf_init(size_t size) { + struct gguf_buf buf = { + /*buf.data =*/ size == 0 ? NULL : malloc(size), + /*buf.size =*/ size, + /*buf.offset =*/ 0, + }; + + return buf; +} + +static void gguf_buf_free(struct gguf_buf buf) { + if (buf.data) { + free(buf.data); + } +} + +static void gguf_buf_grow(struct gguf_buf * buf, size_t size) { + if (buf->offset + size > buf->size) { + buf->size = 1.5*(buf->offset + size); + if (buf->data) { + buf->data = realloc(buf->data, buf->size); + } + } +} + +static void gguf_bwrite_str(struct gguf_buf * buf, const struct gguf_str * val) { + gguf_buf_grow(buf, sizeof(val->n) + val->n); + + if (buf->data) { + memcpy((char *) buf->data + buf->offset, &val->n, sizeof(val->n)); + } + buf->offset += sizeof(val->n); + + if (buf->data) { + memcpy((char *) buf->data + buf->offset, val->data, val->n); + } + buf->offset += val->n; +} + +static void gguf_bwrite_el(struct gguf_buf * buf, const void * val, size_t el_size) { + gguf_buf_grow(buf, el_size); + + if (buf->data) { + memcpy((char *) buf->data + buf->offset, val, el_size); + } + buf->offset += el_size; +} + +static void gguf_write_to_buf(struct gguf_context * ctx, struct gguf_buf * buf, bool only_meta) { + // write header + gguf_bwrite_el(buf, &ctx->header.magic, sizeof(ctx->header.magic)); + gguf_bwrite_el(buf, &ctx->header.version, sizeof(ctx->header.version)); + gguf_bwrite_el(buf, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors)); + gguf_bwrite_el(buf, &ctx->header.n_kv, sizeof(ctx->header.n_kv)); + + // write key-value pairs + for (uint32_t i = 0; i < ctx->header.n_kv; ++i) { + struct gguf_kv * kv = &ctx->kv[i]; + + gguf_bwrite_str(buf, &kv->key); + gguf_bwrite_el (buf, &kv->type, sizeof(kv->type)); + + switch (kv->type) { + case GGUF_TYPE_UINT8: gguf_bwrite_el( buf, &kv->value.uint8, sizeof(kv->value.uint8) ); break; + case GGUF_TYPE_INT8: gguf_bwrite_el (buf, &kv->value.int8, sizeof(kv->value.int8) ); break; + case GGUF_TYPE_UINT16: gguf_bwrite_el (buf, &kv->value.uint16, sizeof(kv->value.uint16) ); break; + case GGUF_TYPE_INT16: gguf_bwrite_el (buf, &kv->value.int16, sizeof(kv->value.int16) ); break; + case GGUF_TYPE_UINT32: gguf_bwrite_el (buf, &kv->value.uint32, sizeof(kv->value.uint32) ); break; + case GGUF_TYPE_INT32: gguf_bwrite_el (buf, &kv->value.int32, sizeof(kv->value.int32) ); break; + case GGUF_TYPE_FLOAT32: gguf_bwrite_el (buf, &kv->value.float32, sizeof(kv->value.float32)); break; + case GGUF_TYPE_UINT64: gguf_bwrite_el (buf, &kv->value.uint64, sizeof(kv->value.uint64) ); break; + case GGUF_TYPE_INT64: gguf_bwrite_el (buf, &kv->value.int64, sizeof(kv->value.int64) ); break; + case GGUF_TYPE_FLOAT64: gguf_bwrite_el (buf, &kv->value.float64, sizeof(kv->value.float64)); break; + case GGUF_TYPE_BOOL: gguf_bwrite_el (buf, &kv->value.bool_, sizeof(kv->value.bool_) ); break; + case GGUF_TYPE_STRING: gguf_bwrite_str(buf, &kv->value.str ); break; + case GGUF_TYPE_ARRAY: + { + gguf_bwrite_el(buf, &kv->value.arr.type, sizeof(kv->value.arr.type)); + gguf_bwrite_el(buf, &kv->value.arr.n, sizeof(kv->value.arr.n) ); + + switch (kv->value.arr.type) { + case GGUF_TYPE_UINT8: + case GGUF_TYPE_INT8: + case GGUF_TYPE_UINT16: + case GGUF_TYPE_INT16: + case GGUF_TYPE_UINT32: + case GGUF_TYPE_INT32: + case GGUF_TYPE_FLOAT32: + case GGUF_TYPE_UINT64: + case GGUF_TYPE_INT64: + case GGUF_TYPE_FLOAT64: + case GGUF_TYPE_BOOL: + { + gguf_bwrite_el(buf, kv->value.arr.data, kv->value.arr.n * GGUF_TYPE_SIZE[kv->value.arr.type]); + } break; + case GGUF_TYPE_STRING: + { + for (uint32_t j = 0; j < kv->value.arr.n; ++j) { + gguf_bwrite_str(buf, &((struct gguf_str *) kv->value.arr.data)[j]); + } + } break; + case GGUF_TYPE_ARRAY: + case GGUF_TYPE_COUNT: GGML_ASSERT(false && "invalid type"); break; + }; + } break; + case GGUF_TYPE_COUNT: GGML_ASSERT(false && "invalid type"); + }; + } + + // write tensor infos + for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) { + struct gguf_tensor_info * info = &ctx->infos[i]; + + gguf_bwrite_str(buf, &info->name); + gguf_bwrite_el (buf, &info->n_dims, sizeof(info->n_dims)); + for (uint32_t j = 0; j < info->n_dims; ++j) { + gguf_bwrite_el(buf, &info->ne[j], sizeof(info->ne[j])); + } + gguf_bwrite_el(buf, &info->type, sizeof(info->type)); + gguf_bwrite_el(buf, &info->offset, sizeof(info->offset)); + } + + // we require the data section to be aligned, so take into account any padding + { + const size_t offset = buf->offset; + const size_t offset_pad = GGML_PAD(offset, ctx->alignment); + + if (offset_pad != offset) { + uint8_t pad = 0; + for (size_t i = 0; i < offset_pad - offset; ++i) { + gguf_bwrite_el(buf, &pad, sizeof(pad)); + } + } + } + + if (only_meta) { + return; + } + + size_t offset = 0; + + // write tensor data + for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) { + struct gguf_tensor_info * info = &ctx->infos[i]; + + const size_t size = info->size; + const size_t size_pad = GGML_PAD(size, ctx->alignment); + + gguf_bwrite_el(buf, info->data, size); + + if (size_pad != size) { + uint8_t pad = 0; + for (size_t j = 0; j < size_pad - size; ++j) { + gguf_bwrite_el(buf, &pad, sizeof(pad)); + } + } + + GGML_ASSERT(offset == info->offset); + + offset += size_pad; + } +} + +void gguf_write_to_file(struct gguf_context * ctx, const char * fname, bool only_meta) { + FILE * file = fopen(fname, "wb"); + if (!file) { + GGML_ASSERT(false && "failed to open file for writing"); + } + + struct gguf_buf buf = gguf_buf_init(16*1024); + + gguf_write_to_buf(ctx, &buf, only_meta); + + fwrite(buf.data, 1, buf.offset, file); + + gguf_buf_free(buf); + + fclose(file); +} + +size_t gguf_get_meta_size(struct gguf_context * ctx) { + // no allocs - only compute size + struct gguf_buf buf = gguf_buf_init(0); + + gguf_write_to_buf(ctx, &buf, true); + + return buf.offset; +} + +void gguf_get_meta_data(struct gguf_context * ctx, void * data) { + struct gguf_buf buf = gguf_buf_init(16*1024); + + gguf_write_to_buf(ctx, &buf, true); + + memcpy(data, buf.data, buf.offset); + + gguf_buf_free(buf); +} + +//////////////////////////////////////////////////////////////////////////////// + int ggml_cpu_has_avx(void) { #if defined(__AVX__) return 1; diff --git a/ggml.h b/ggml.h index 29884166..4ef3d525 100644 --- a/ggml.h +++ b/ggml.h @@ -65,7 +65,7 @@ // ggml_set_f32(a, 3.0f); // ggml_set_f32(b, 4.0f); // -// ggml_graph_compute(ctx0, &gf); +// ggml_graph_compute_with_ctx(ctx, &gf, n_threads); // // printf("f = %f\n", ggml_get_f32_1d(f, 0)); // @@ -130,13 +130,16 @@ // The data of the tensor is accessed via the "data" pointer. For example: // // { -// struct ggml_tensor * a = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 2, 3); +// const int nx = 2; +// const int ny = 3; // -// // a[1, 2] = 1.0f; -// *(float *) ((char *) a->data + 2*a->nb[1] + 1*a->nb[0]) = 1.0f; +// struct ggml_tensor * a = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, nx, ny); // -// // a[2, 0] = 2.0f; -// *(float *) ((char *) a->data + 0*a->nb[1] + 2*a->nb[0]) = 2.0f; +// for (int y = 0; y < ny; y++) { +// for (int x = 0; x < nx; x++) { +// *(float *) ((char *) a->data + y*a->nb[1] + x*a->nb[0]) = x + y; +// } +// } // // ... // } @@ -183,6 +186,15 @@ # define GGML_API #endif +// TODO: support for clang +#ifdef __GNUC__ +# define GGML_DEPRECATED(func, hint) func __attribute__((deprecated(hint))) +#elif defined(_MSC_VER) +# define GGML_DEPRECATED(func, hint) __declspec(deprecated(hint)) func +#else +# define GGML_DEPRECATED(func, hint) func +#endif + #include #include #include @@ -197,12 +209,29 @@ #define GGML_MAX_NODES 4096 #define GGML_MAX_PARAMS 256 #define GGML_MAX_CONTEXTS 64 -#define GGML_MAX_OPT 4 -#define GGML_MAX_NAME 48 +#define GGML_MAX_SRC 6 +#define GGML_MAX_NAME 64 +#define GGML_MAX_OP_PARAMS 32 #define GGML_DEFAULT_N_THREADS 4 +#if UINTPTR_MAX == 0xFFFFFFFF + #define GGML_MEM_ALIGN 4 +#else + #define GGML_MEM_ALIGN 16 +#endif + +#define GGML_EXIT_SUCCESS 0 +#define GGML_EXIT_ABORTED 1 + +#define GGUF_MAGIC 0x46554747 // "GGUF" +#define GGUF_VERSION 2 + +#define GGUF_DEFAULT_ALIGNMENT 32 + #define GGML_UNUSED(x) (void)(x) +#define GGML_PAD(x, n) (((x) + (n) - 1) & ~((n) - 1)) + #define GGML_ASSERT(x) \ do { \ if (!(x)) { \ @@ -239,8 +268,9 @@ extern "C" { #endif -#ifdef __ARM_NEON - // we use the built-in 16-bit float type +#if defined(__ARM_NEON) && defined(__CUDACC__) + typedef half ggml_fp16_t; +#elif defined(__ARM_NEON) typedef __fp16 ggml_fp16_t; #else typedef uint16_t ggml_fp16_t; @@ -250,8 +280,8 @@ extern "C" { GGML_API float ggml_fp16_to_fp32(ggml_fp16_t x); GGML_API ggml_fp16_t ggml_fp32_to_fp16(float x); - GGML_API void ggml_fp16_to_fp32_row(const ggml_fp16_t * x, float * y, size_t n); - GGML_API void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, size_t n); + GGML_API void ggml_fp16_to_fp32_row(const ggml_fp16_t * x, float * y, int n); + GGML_API void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, int n); struct ggml_object; struct ggml_context; @@ -324,20 +354,12 @@ extern "C" { GGML_OP_ARGMAX, GGML_OP_REPEAT, GGML_OP_REPEAT_BACK, - GGML_OP_ABS, - GGML_OP_SGN, - GGML_OP_NEG, - GGML_OP_STEP, - GGML_OP_TANH, - GGML_OP_ELU, - GGML_OP_RELU, - GGML_OP_GELU, - GGML_OP_GELU_QUICK, - GGML_OP_SILU, + GGML_OP_CONCAT, GGML_OP_SILU_BACK, GGML_OP_NORM, // normalize GGML_OP_RMS_NORM, GGML_OP_RMS_NORM_BACK, + GGML_OP_GROUP_NORM, GGML_OP_MUL_MAT, GGML_OP_OUT_PROD, @@ -363,16 +385,29 @@ extern "C" { GGML_OP_CLAMP, GGML_OP_CONV_1D, GGML_OP_CONV_2D, + GGML_OP_CONV_TRANSPOSE_2D, + GGML_OP_POOL_1D, + GGML_OP_POOL_2D, + + GGML_OP_UPSCALE, // nearest interpolate GGML_OP_FLASH_ATTN, GGML_OP_FLASH_FF, GGML_OP_FLASH_ATTN_BACK, GGML_OP_WIN_PART, GGML_OP_WIN_UNPART, + GGML_OP_GET_REL_POS, + GGML_OP_ADD_REL_POS, + + GGML_OP_UNARY, GGML_OP_MAP_UNARY, GGML_OP_MAP_BINARY, + GGML_OP_MAP_CUSTOM1_F32, + GGML_OP_MAP_CUSTOM2_F32, + GGML_OP_MAP_CUSTOM3_F32, + GGML_OP_MAP_CUSTOM1, GGML_OP_MAP_CUSTOM2, GGML_OP_MAP_CUSTOM3, @@ -383,6 +418,24 @@ extern "C" { GGML_OP_COUNT, }; + enum ggml_unary_op { + GGML_UNARY_OP_ABS, + GGML_UNARY_OP_SGN, + GGML_UNARY_OP_NEG, + GGML_UNARY_OP_STEP, + GGML_UNARY_OP_TANH, + GGML_UNARY_OP_ELU, + GGML_UNARY_OP_RELU, + GGML_UNARY_OP_GELU, + GGML_UNARY_OP_GELU_QUICK, + GGML_UNARY_OP_SILU, + }; + + enum ggml_object_type { + GGML_OBJECT_TENSOR, + GGML_OBJECT_GRAPH, + GGML_OBJECT_WORK_BUFFER + }; // ggml object struct ggml_object { @@ -391,7 +444,9 @@ extern "C" { struct ggml_object * next; - char padding[8]; + enum ggml_object_type type; + + char padding[4]; }; static const size_t GGML_OBJECT_SIZE = sizeof(struct ggml_object); @@ -411,15 +466,13 @@ extern "C" { // compute data enum ggml_op op; + // op params - allocated as int32_t for alignment + int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)]; + bool is_param; struct ggml_tensor * grad; - struct ggml_tensor * src0; - struct ggml_tensor * src1; - struct ggml_tensor * opt[GGML_MAX_OPT]; - - // thread scheduling - int n_tasks; + struct ggml_tensor * src[GGML_MAX_SRC]; // performance int perf_runs; @@ -437,25 +490,46 @@ extern "C" { static const size_t GGML_TENSOR_SIZE = sizeof(struct ggml_tensor); + // the compute plan that needs to be prepared for ggml_graph_compute() + // since https://github.com/ggerganov/ggml/issues/287 + struct ggml_cplan { + size_t work_size; // size of work buffer, calculated by `ggml_graph_plan()` + uint8_t * work_data; // work buffer, to be allocated by caller before calling to `ggml_graph_compute()` + + int n_threads; + + // the `n_tasks` of nodes, 1:1 mapping to cgraph nodes + int n_tasks[GGML_MAX_NODES]; + + // abort ggml_graph_compute when true + bool (*abort_callback)(void * data); + void * abort_callback_data; + }; + + // next prime after GGML_MAX_NODES + // #define GGML_GRAPH_HASHTABLE_SIZE 4099 + // next prime after GGML_MAX_NODES * 2 (nodes + leafs) + #define GGML_GRAPH_HASHTABLE_SIZE 8273 + // computation graph struct ggml_cgraph { int n_nodes; int n_leafs; - int n_threads; - - size_t work_size; - struct ggml_tensor * work; struct ggml_tensor * nodes[GGML_MAX_NODES]; struct ggml_tensor * grads[GGML_MAX_NODES]; struct ggml_tensor * leafs[GGML_MAX_NODES]; + void * visited_hash_table[GGML_GRAPH_HASHTABLE_SIZE]; + // performance int perf_runs; int64_t perf_cycles; int64_t perf_time_us; }; + static const size_t GGML_GRAPH_SIZE = sizeof(struct ggml_cgraph); + // scratch buffer struct ggml_scratch { size_t offs; @@ -509,6 +583,7 @@ extern "C" { GGML_API int64_t ggml_nelements (const struct ggml_tensor * tensor); GGML_API int64_t ggml_nrows (const struct ggml_tensor * tensor); GGML_API size_t ggml_nbytes (const struct ggml_tensor * tensor); + GGML_API size_t ggml_nbytes_pad (const struct ggml_tensor * tensor); // same as ggml_nbytes() but padded to GGML_MEM_ALIGN GGML_API size_t ggml_nbytes_split(const struct ggml_tensor * tensor, int nrows_split); GGML_API int ggml_blck_size (enum ggml_type type); @@ -517,6 +592,7 @@ extern "C" { GGML_API const char * ggml_type_name(enum ggml_type type); GGML_API const char * ggml_op_name (enum ggml_op op); + GGML_API const char * ggml_op_symbol(enum ggml_op op); GGML_API size_t ggml_element_size(const struct ggml_tensor * tensor); @@ -529,6 +605,8 @@ extern "C" { GGML_API bool ggml_is_contiguous(const struct ggml_tensor * tensor); GGML_API bool ggml_is_permuted (const struct ggml_tensor * tensor); + GGML_API bool ggml_are_same_shape(const struct ggml_tensor * t0, const struct ggml_tensor * t1); + // use this to compute the memory overhead of a tensor GGML_API size_t ggml_tensor_overhead(void); @@ -540,6 +618,7 @@ extern "C" { GGML_API size_t ggml_used_mem(const struct ggml_context * ctx); GGML_API size_t ggml_set_scratch (struct ggml_context * ctx, struct ggml_scratch scratch); + GGML_API bool ggml_get_no_alloc(struct ggml_context * ctx); GGML_API void ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc); GGML_API void * ggml_get_mem_buffer (const struct ggml_context * ctx); @@ -599,9 +678,11 @@ extern "C" { GGML_API void * ggml_get_data (const struct ggml_tensor * tensor); GGML_API float * ggml_get_data_f32(const struct ggml_tensor * tensor); - GGML_API const char * ggml_get_name(const struct ggml_tensor * tensor); - GGML_API struct ggml_tensor * ggml_set_name(struct ggml_tensor * tensor, const char * name); - GGML_API struct ggml_tensor * ggml_format_name(struct ggml_tensor * tensor, const char * fmt, ...); + GGML_API enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor); + + GGML_API const char * ggml_get_name (const struct ggml_tensor * tensor); + GGML_API struct ggml_tensor * ggml_set_name ( struct ggml_tensor * tensor, const char * name); + GGML_API struct ggml_tensor * ggml_format_name( struct ggml_tensor * tensor, const char * fmt, ...); // // operations on tensors with backpropagation @@ -611,6 +692,11 @@ extern "C" { struct ggml_context * ctx, struct ggml_tensor * a); + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_dup_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + GGML_API struct ggml_tensor * ggml_add( struct ggml_context * ctx, struct ggml_tensor * a, @@ -735,6 +821,13 @@ extern "C" { struct ggml_tensor * a, struct ggml_tensor * b); + // concat a and b on dim 2 + // used in stable-diffusion + GGML_API struct ggml_tensor * ggml_concat( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + GGML_API struct ggml_tensor * ggml_abs( struct ggml_context * ctx, struct ggml_tensor * a); @@ -824,25 +917,42 @@ extern "C" { struct ggml_tensor * b); // normalize along rows - // TODO: eps is hardcoded to 1e-5 for now GGML_API struct ggml_tensor * ggml_norm( struct ggml_context * ctx, - struct ggml_tensor * a); + struct ggml_tensor * a, + float eps); GGML_API struct ggml_tensor * ggml_norm_inplace( struct ggml_context * ctx, - struct ggml_tensor * a); + struct ggml_tensor * a, + float eps); GGML_API struct ggml_tensor * ggml_rms_norm( struct ggml_context * ctx, - struct ggml_tensor * a); + struct ggml_tensor * a, + float eps); GGML_API struct ggml_tensor * ggml_rms_norm_inplace( struct ggml_context * ctx, - struct ggml_tensor * a); + struct ggml_tensor * a, + float eps); + + // group normalize along ne0*ne1*n_groups + // used in stable-diffusion + // TODO: eps is hardcoded to 1e-6 for now + GGML_API struct ggml_tensor * ggml_group_norm( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups); + + GGML_API struct ggml_tensor * ggml_group_norm_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_groups); // a - x // b - dy + // TODO: update with configurable eps GGML_API struct ggml_tensor * ggml_rms_norm_back( struct ggml_context * ctx, struct ggml_tensor * a, @@ -934,11 +1044,22 @@ extern "C" { struct ggml_tensor * a, struct ggml_tensor * b); + // a -> b, in-place, return view(b) + GGML_API struct ggml_tensor * ggml_cpy_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + // make contiguous GGML_API struct ggml_tensor * ggml_cont( struct ggml_context * ctx, struct ggml_tensor * a); + // make contiguous, in-place + GGML_API struct ggml_tensor * ggml_cont_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a); + // return view(a), b specifies the new shape // TODO: when we start computing gradient, make a copy instead of view GGML_API struct ggml_tensor * ggml_reshape( @@ -1107,6 +1228,37 @@ extern "C" { int mode, int n_ctx); + // custom RoPE + GGML_API struct ggml_tensor * ggml_rope_custom( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode, + int n_ctx, + float freq_base, + float freq_scale); + + // in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_rope_custom_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + int mode, + int n_ctx, + float freq_base, + float freq_scale); + + // xPos RoPE, in-place, returns view(a) + GGML_API struct ggml_tensor * ggml_rope_xpos_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + int n_past, + int n_dims, + float base, + bool down); + // rotary position embedding backward, i.e compute dx from dy // a - dy GGML_API struct ggml_tensor * ggml_rope_back( @@ -1114,7 +1266,12 @@ extern "C" { struct ggml_tensor * a, int n_past, int n_dims, - int mode); + int mode, + int n_ctx, + float freq_base, + float freq_scale, + float xpos_base, + bool xpos_down); // alibi position embedding // in-place, returns view(a) @@ -1141,6 +1298,15 @@ extern "C" { int p0, // padding int d0); // dilation + // conv_1d with padding = half + // alias for ggml_conv_1d(a, b, s, a->ne[0]/2, d) + GGML_API struct ggml_tensor* ggml_conv_1d_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + int s, + int d); + GGML_API struct ggml_tensor * ggml_conv_2d( struct ggml_context * ctx, struct ggml_tensor * a, @@ -1152,14 +1318,70 @@ extern "C" { int d0, int d1); - // conv_1d with padding = half - // alias for ggml_conv_1d(a, b, s, a->ne[0]/2, d) - GGML_API struct ggml_tensor* ggml_conv_1d_ph( + + // kernel size is a->ne[0] x a->ne[1] + // stride is equal to kernel size + // padding is zero + // example: + // a: 16 16 3 768 + // b: 1024 1024 3 1 + // res: 64 64 768 1 + // used in sam + GGML_API struct ggml_tensor * ggml_conv_2d_sk_p0( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + // kernel size is a->ne[0] x a->ne[1] + // stride is 1 + // padding is half + // example: + // a: 3 3 256 256 + // b: 64 64 256 1 + // res: 64 64 256 1 + // used in sam + GGML_API struct ggml_tensor * ggml_conv_2d_s1_ph( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b); + + GGML_API struct ggml_tensor * ggml_conv_transpose_2d_p0( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, - int s, - int d); + int stride); + + enum ggml_op_pool { + GGML_OP_POOL_MAX, + GGML_OP_POOL_AVG, + GGML_OP_POOL_COUNT, + }; + + GGML_API struct ggml_tensor * ggml_pool_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_op_pool op, + int k0, // kernel size + int s0, // stride + int p0); // padding + + GGML_API struct ggml_tensor * ggml_pool_2d( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_op_pool op, + int k0, + int k1, + int s0, + int s1, + int p0, + int p1); + + // nearest interpolate + // used in stable-diffusion + GGML_API struct ggml_tensor * ggml_upscale( + struct ggml_context * ctx, + struct ggml_tensor * a, + int scale_factor); GGML_API struct ggml_tensor * ggml_flash_attn( struct ggml_context * ctx, @@ -1204,6 +1426,37 @@ extern "C" { int h0, int w); + GGML_API struct ggml_tensor * ggml_unary( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op); + + GGML_API struct ggml_tensor * ggml_unary_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + enum ggml_unary_op op); + + // used in sam + GGML_API struct ggml_tensor * ggml_get_rel_pos( + struct ggml_context * ctx, + struct ggml_tensor * a, + int qh, + int kh); + + // used in sam + + GGML_API struct ggml_tensor * ggml_add_rel_pos( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph); + + GGML_API struct ggml_tensor * ggml_add_rel_pos_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * pw, + struct ggml_tensor * ph); + // custom operators typedef void (*ggml_unary_op_f32_t) (const int, float *, const float *); @@ -1213,63 +1466,129 @@ extern "C" { typedef void (*ggml_custom2_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *); typedef void (*ggml_custom3_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *); - GGML_API struct ggml_tensor * ggml_map_unary_f32( + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_unary_f32( struct ggml_context * ctx, struct ggml_tensor * a, - ggml_unary_op_f32_t fun); + ggml_unary_op_f32_t fun), + "use ggml_map_custom1 instead"); - GGML_API struct ggml_tensor * ggml_map_unary_inplace_f32( + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_unary_inplace_f32( struct ggml_context * ctx, struct ggml_tensor * a, - ggml_unary_op_f32_t fun); + ggml_unary_op_f32_t fun), + "use ggml_map_custom1_inplace instead"); - GGML_API struct ggml_tensor * ggml_map_binary_f32( + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_binary_f32( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, - ggml_binary_op_f32_t fun); + ggml_binary_op_f32_t fun), + "use ggml_map_custom2 instead"); - GGML_API struct ggml_tensor * ggml_map_binary_inplace_f32( + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_binary_inplace_f32( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, - ggml_binary_op_f32_t fun); + ggml_binary_op_f32_t fun), + "use ggml_map_custom2_inplace instead"); - GGML_API struct ggml_tensor * ggml_map_custom1_f32( + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom1_f32( struct ggml_context * ctx, struct ggml_tensor * a, - ggml_custom1_op_f32_t fun); + ggml_custom1_op_f32_t fun), + "use ggml_map_custom1 instead"); - GGML_API struct ggml_tensor * ggml_map_custom1_inplace_f32( + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom1_inplace_f32( struct ggml_context * ctx, struct ggml_tensor * a, - ggml_custom1_op_f32_t fun); + ggml_custom1_op_f32_t fun), + "use ggml_map_custom1_inplace instead"); - GGML_API struct ggml_tensor * ggml_map_custom2_f32( + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom2_f32( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, - ggml_custom2_op_f32_t fun); + ggml_custom2_op_f32_t fun), + "use ggml_map_custom2 instead"); - GGML_API struct ggml_tensor * ggml_map_custom2_inplace_f32( + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom2_inplace_f32( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, - ggml_custom2_op_f32_t fun); + ggml_custom2_op_f32_t fun), + "use ggml_map_custom2_inplace instead"); - GGML_API struct ggml_tensor * ggml_map_custom3_f32( + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom3_f32( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_tensor * c, - ggml_custom3_op_f32_t fun); + ggml_custom3_op_f32_t fun), + "use ggml_map_custom3 instead"); - GGML_API struct ggml_tensor * ggml_map_custom3_inplace_f32( + GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom3_inplace_f32( struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_tensor * c, - ggml_custom3_op_f32_t fun); + ggml_custom3_op_f32_t fun), + "use ggml_map_custom3_inplace instead"); + + // custom operators v2 + + typedef void (*ggml_custom1_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, int ith, int nth, void * userdata); + typedef void (*ggml_custom2_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, int ith, int nth, void * userdata); + typedef void (*ggml_custom3_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, const struct ggml_tensor * c, int ith, int nth, void * userdata); + + #define GGML_N_TASKS_MAX -1 + + GGML_API struct ggml_tensor * ggml_map_custom1( + struct ggml_context * ctx, + struct ggml_tensor * a, + ggml_custom1_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom1_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + ggml_custom1_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom2( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + ggml_custom2_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom2_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + ggml_custom2_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom3( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + ggml_custom3_op_t fun, + int n_tasks, + void * userdata); + + GGML_API struct ggml_tensor * ggml_map_custom3_inplace( + struct ggml_context * ctx, + struct ggml_tensor * a, + struct ggml_tensor * b, + struct ggml_tensor * c, + ggml_custom3_op_t fun, + int n_tasks, + void * userdata); // loss function @@ -1290,15 +1609,28 @@ extern "C" { GGML_API void ggml_set_param( struct ggml_context * ctx, - struct ggml_tensor * tensor); + struct ggml_tensor * tensor); + GGML_API void ggml_build_forward_expand(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); GGML_API struct ggml_cgraph ggml_build_forward (struct ggml_tensor * tensor); GGML_API struct ggml_cgraph ggml_build_backward(struct ggml_context * ctx, struct ggml_cgraph * gf, bool keep); - GGML_API void ggml_graph_compute(struct ggml_context * ctx, struct ggml_cgraph * cgraph); - GGML_API void ggml_graph_reset (struct ggml_cgraph * cgraph); + // graph allocation in a context + GGML_API struct ggml_cgraph * ggml_new_graph (struct ggml_context * ctx); + GGML_API struct ggml_cgraph * ggml_build_forward_ctx(struct ggml_context * ctx, struct ggml_tensor * tensor); + GGML_API size_t ggml_graph_overhead(void); + + // ggml_graph_plan() has to be called before ggml_graph_compute() + // when plan.work_size > 0, caller must allocate memory for plan.work_data + GGML_API struct ggml_cplan ggml_graph_plan (struct ggml_cgraph * cgraph, int n_threads /*= GGML_DEFAULT_N_THREADS*/); + GGML_API int ggml_graph_compute(struct ggml_cgraph * cgraph, struct ggml_cplan * cplan); + GGML_API void ggml_graph_reset (struct ggml_cgraph * cgraph); + + // same as ggml_graph_compute() but the work data is allocated as a part of the context + // note: the drawback of this API is that you must have ensured that the context has enough memory for the work data + GGML_API void ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads); GGML_API struct ggml_tensor * ggml_graph_get_tensor(struct ggml_cgraph * cgraph, const char * name); @@ -1488,6 +1820,127 @@ extern "C" { GGML_API size_t ggml_quantize_chunk(enum ggml_type type, const float * src, void * dst, int start, int n, int64_t * hist); + // + // gguf + // + + enum gguf_type { + GGUF_TYPE_UINT8 = 0, + GGUF_TYPE_INT8 = 1, + GGUF_TYPE_UINT16 = 2, + GGUF_TYPE_INT16 = 3, + GGUF_TYPE_UINT32 = 4, + GGUF_TYPE_INT32 = 5, + GGUF_TYPE_FLOAT32 = 6, + GGUF_TYPE_BOOL = 7, + GGUF_TYPE_STRING = 8, + GGUF_TYPE_ARRAY = 9, + GGUF_TYPE_UINT64 = 10, + GGUF_TYPE_INT64 = 11, + GGUF_TYPE_FLOAT64 = 12, + GGUF_TYPE_COUNT, // marks the end of the enum + }; + + struct gguf_context; + + struct gguf_init_params { + bool no_alloc; + + // if not NULL, create a ggml_context and allocate the tensor data in it + struct ggml_context ** ctx; + }; + + GGML_API struct gguf_context * gguf_init_empty(void); + GGML_API struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params); + //GGML_API struct gguf_context * gguf_init_from_buffer(..); + + GGML_API void gguf_free(struct gguf_context * ctx); + + GGML_API const char * gguf_type_name(enum gguf_type type); + + GGML_API int gguf_get_version (struct gguf_context * ctx); + GGML_API size_t gguf_get_alignment (struct gguf_context * ctx); + GGML_API size_t gguf_get_data_offset(struct gguf_context * ctx); + GGML_API void * gguf_get_data (struct gguf_context * ctx); + + GGML_API int gguf_get_n_kv(struct gguf_context * ctx); + GGML_API int gguf_find_key(struct gguf_context * ctx, const char * key); + GGML_API const char * gguf_get_key (struct gguf_context * ctx, int i); + + GGML_API enum gguf_type gguf_get_kv_type (struct gguf_context * ctx, int i); + GGML_API enum gguf_type gguf_get_arr_type(struct gguf_context * ctx, int i); + + // results are undefined if the wrong type is used for the key + GGML_API uint8_t gguf_get_val_u8 (struct gguf_context * ctx, int i); + GGML_API int8_t gguf_get_val_i8 (struct gguf_context * ctx, int i); + GGML_API uint16_t gguf_get_val_u16 (struct gguf_context * ctx, int i); + GGML_API int16_t gguf_get_val_i16 (struct gguf_context * ctx, int i); + GGML_API uint32_t gguf_get_val_u32 (struct gguf_context * ctx, int i); + GGML_API int32_t gguf_get_val_i32 (struct gguf_context * ctx, int i); + GGML_API float gguf_get_val_f32 (struct gguf_context * ctx, int i); + GGML_API uint64_t gguf_get_val_u64 (struct gguf_context * ctx, int i); + GGML_API int64_t gguf_get_val_i64 (struct gguf_context * ctx, int i); + GGML_API double gguf_get_val_f64 (struct gguf_context * ctx, int i); + GGML_API bool gguf_get_val_bool(struct gguf_context * ctx, int i); + GGML_API const char * gguf_get_val_str (struct gguf_context * ctx, int i); + GGML_API int gguf_get_arr_n (struct gguf_context * ctx, int i); + GGML_API const void * gguf_get_arr_data(struct gguf_context * ctx, int i); + GGML_API const char * gguf_get_arr_str (struct gguf_context * ctx, int key_id, int i); + + GGML_API int gguf_get_n_tensors (struct gguf_context * ctx); + GGML_API int gguf_find_tensor (struct gguf_context * ctx, const char * name); + GGML_API size_t gguf_get_tensor_offset(struct gguf_context * ctx, int i); + GGML_API char * gguf_get_tensor_name (struct gguf_context * ctx, int i); + + // overrides existing values or adds a new one + GGML_API void gguf_set_val_u8 (struct gguf_context * ctx, const char * key, uint8_t val); + GGML_API void gguf_set_val_i8 (struct gguf_context * ctx, const char * key, int8_t val); + GGML_API void gguf_set_val_u16 (struct gguf_context * ctx, const char * key, uint16_t val); + GGML_API void gguf_set_val_i16 (struct gguf_context * ctx, const char * key, int16_t val); + GGML_API void gguf_set_val_u32 (struct gguf_context * ctx, const char * key, uint32_t val); + GGML_API void gguf_set_val_i32 (struct gguf_context * ctx, const char * key, int32_t val); + GGML_API void gguf_set_val_f32 (struct gguf_context * ctx, const char * key, float val); + GGML_API void gguf_set_val_u64 (struct gguf_context * ctx, const char * key, uint64_t val); + GGML_API void gguf_set_val_i64 (struct gguf_context * ctx, const char * key, int64_t val); + GGML_API void gguf_set_val_f64 (struct gguf_context * ctx, const char * key, double val); + GGML_API void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool val); + GGML_API void gguf_set_val_str (struct gguf_context * ctx, const char * key, const char * val); + GGML_API void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, int n); + GGML_API void gguf_set_arr_str (struct gguf_context * ctx, const char * key, const char ** data, int n); + + // set or add KV pairs from another context + GGML_API void gguf_set_kv(struct gguf_context * ctx, struct gguf_context * src); + + // manage tensor info + GGML_API void gguf_add_tensor(struct gguf_context * ctx, const struct ggml_tensor * tensor); + GGML_API void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type); + GGML_API void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data, size_t size); + + // writing gguf files can be done in 2 ways: + // + // - write the entire gguf_context to a binary file in a single pass: + // + // gguf_write_to_file(ctx, fname); + // + // - first prepare a file with a placeholder for the meta data, write the tensor data, then write the meta data: + // + // FILE * f = fopen(fname, "wb"); + // fseek(f, gguf_get_meta_size(ctx), SEEK_SET); + // fwrite(f, ...); + // void * data = gguf_meta_get_meta_data(ctx); + // fseek(f, 0, SEEK_SET); + // fwrite(f, data, gguf_get_meta_size(ctx)); + // free(data); + // fclose(f); + // + + // write the entire context to a binary file + GGML_API void gguf_write_to_file(struct gguf_context * ctx, const char * fname, bool only_meta); + + // get the size in bytes of the meta data (header, kv pairs, tensor info) including padding + GGML_API size_t gguf_get_meta_size(struct gguf_context * ctx); + GGML_API void gguf_get_meta_data(struct gguf_context * ctx, void * data); + // // system info // @@ -1516,25 +1969,28 @@ extern "C" { // #ifdef __cplusplus - // restrict not standard in C++ +// restrict not standard in C++ #define GGML_RESTRICT #else #define GGML_RESTRICT restrict #endif - typedef void (*dequantize_row_q_t)(const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int k); - typedef void (*quantize_row_q_t) (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int k); - typedef void (*vec_dot_q_t) (const int n, float * GGML_RESTRICT s, const void * GGML_RESTRICT x, const void * GGML_RESTRICT y); + typedef void (*ggml_to_float_t) (const void * GGML_RESTRICT x, float * GGML_RESTRICT y, int k); + typedef void (*ggml_from_float_t)(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int k); + typedef void (*ggml_vec_dot_t) (const int n, float * GGML_RESTRICT s, const void * GGML_RESTRICT x, const void * GGML_RESTRICT y); typedef struct { - dequantize_row_q_t dequantize_row_q; - quantize_row_q_t quantize_row_q; - quantize_row_q_t quantize_row_q_reference; - quantize_row_q_t quantize_row_q_dot; - vec_dot_q_t vec_dot_q; - enum ggml_type vec_dot_type; - } quantize_fns_t; + const char * type_name; + int blck_size; + size_t type_size; + bool is_quantized; + ggml_to_float_t to_float; + ggml_from_float_t from_float; + ggml_from_float_t from_float_reference; + ggml_vec_dot_t vec_dot; + enum ggml_type vec_dot_type; + } ggml_type_traits_t; - quantize_fns_t ggml_internal_get_quantize_fn(size_t i); + ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type); #ifdef __cplusplus } diff --git a/whisper.cpp b/whisper.cpp index 1f4f8a06..3192fbc6 100644 --- a/whisper.cpp +++ b/whisper.cpp @@ -441,6 +441,7 @@ struct whisper_hparams { int32_t n_text_layer = 4; int32_t n_mels = 80; int32_t ftype = 1; + float eps = 1e-5f; }; // audio encoding layer @@ -1578,7 +1579,7 @@ static bool whisper_encode_internal( { wstate.use_buf(ctx0, 0); - cur = ggml_norm(ctx0, inpL); + cur = ggml_norm(ctx0, inpL, hparams.eps); // cur = ln_0_w*cur + ln_0_b cur = ggml_add(ctx0, @@ -1725,7 +1726,7 @@ static bool whisper_encode_internal( { wstate.use_buf(ctx0, 0); - cur = ggml_norm(ctx0, inpFF); + cur = ggml_norm(ctx0, inpFF, hparams.eps); wstate.use_buf(ctx0, 1); @@ -1788,7 +1789,7 @@ static bool whisper_encode_internal( { wstate.use_buf(ctx0, 0); - cur = ggml_norm(ctx0, cur); + cur = ggml_norm(ctx0, cur, hparams.eps); wstate.use_buf(ctx0, 1); @@ -1805,10 +1806,9 @@ static bool whisper_encode_internal( // run the computation { struct ggml_cgraph gf = {}; - gf.n_threads = n_threads; - ggml_build_forward_expand(&gf, cur); - ggml_graph_compute(ctx0, &gf); + ggml_build_forward_expand (&gf, cur); + ggml_graph_compute_with_ctx(ctx0, &gf, n_threads); //ggml_graph_print(&gf); } @@ -1851,12 +1851,11 @@ static bool whisper_encode_internal( // pre-compute cross-attention memory { struct ggml_cgraph gf = {}; - gf.n_threads = n_threads; // TODO: hack to disconnect the encoded features from the previous graph cur->op = GGML_OP_NONE; - cur->src0 = nullptr; - cur->src1 = nullptr; + cur->src[0] = nullptr; + cur->src[1] = nullptr; for (int il = 0; il < model.hparams.n_text_layer; ++il) { auto& layer = model.layers_decoder[il]; @@ -1894,7 +1893,7 @@ static bool whisper_encode_internal( ggml_build_forward_expand(&gf, ggml_cpy(ctx0, Vcross, v)); } - ggml_graph_compute(ctx0, &gf); + ggml_graph_compute_with_ctx(ctx0, &gf, n_threads); //ggml_graph_print(&gf); } @@ -1965,7 +1964,6 @@ static bool whisper_decode_internal( struct ggml_context * ctx0 = ggml_init(params); struct ggml_cgraph gf = {}; - gf.n_threads = n_threads; struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, N); memcpy(embd->data, tokens, N*ggml_element_size(embd)); @@ -1992,7 +1990,7 @@ static bool whisper_decode_internal( { wstate.use_buf(ctx0, 0); - cur = ggml_norm(ctx0, inpL); + cur = ggml_norm(ctx0, inpL, hparams.eps); // cur = ln_0_w*cur + ln_0_b cur = ggml_add(ctx0, @@ -2119,7 +2117,7 @@ static bool whisper_decode_internal( { wstate.use_buf(ctx0, 0); - cur = ggml_norm(ctx0, inpCA); // note: we use inpCA here + cur = ggml_norm(ctx0, inpCA, hparams.eps); // note: we use inpCA here // cur = ln_0_w*cur + ln_0_b cur = ggml_add(ctx0, @@ -2229,7 +2227,7 @@ static bool whisper_decode_internal( { wstate.use_buf(ctx0, 0); - cur = ggml_norm(ctx0, inpFF); + cur = ggml_norm(ctx0, inpFF, hparams.eps); wstate.use_buf(ctx0, 1); @@ -2284,7 +2282,7 @@ static bool whisper_decode_internal( { wstate.use_buf(ctx0, 0); - cur = ggml_norm(ctx0, cur); + cur = ggml_norm(ctx0, cur, hparams.eps); wstate.use_buf(ctx0, 1); @@ -2308,8 +2306,8 @@ static bool whisper_decode_internal( // run the computation { - ggml_build_forward_expand(&gf, logits); - ggml_graph_compute (ctx0, &gf); + ggml_build_forward_expand (&gf, logits); + ggml_graph_compute_with_ctx(ctx0, &gf, n_threads); } // extract logits for all N tokens @@ -2358,7 +2356,7 @@ static std::string to_timestamp(int64_t t, bool comma = false) { static float sin_vals[SIN_COS_N_COUNT]; static float cos_vals[SIN_COS_N_COUNT]; -// In FFT, we frequently use sine and cosine operations with the same values. +// In FFT, we frequently use sine and cosine operations with the same values. // We can use precalculated values to speed up the process. static void fill_sin_cos_table() { static bool is_filled = false; @@ -5165,17 +5163,15 @@ WHISPER_API const char * whisper_bench_ggml_mul_mat_str(int n_threads) { struct ggml_cgraph gf = ggml_build_forward(c); - gf.n_threads = n_threads; - double tsum = 0.0; // heat-up - ggml_graph_compute(ctx0, &gf); + ggml_graph_compute_with_ctx(ctx0, &gf, n_threads); for (int i = 0; i < n_max; ++i) { const int64_t t0 = ggml_time_us(); - ggml_graph_compute(ctx0, &gf); + ggml_graph_compute_with_ctx(ctx0, &gf, n_threads); const int64_t t1 = ggml_time_us(); From ba3c333611c4a825ae30ea97484b937e88b88778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Pawe=C5=82czyk?= Date: Tue, 5 Sep 2023 13:58:47 +0200 Subject: [PATCH 5/6] make : improve cpuinfo handling on x86 hosts (#1238) * make : simplify and correct x86 ISA extensions detection on the host It got broken in commit c5f9acf4b797 for Haiku and Mac OS (Intel), which report CPU features in upper case. Now we're finding the names in case-insensitive manner and as words. SSE3 detection has been corrected for Linux, which uses PNI for that (Prescott New Instructions). * make : use dmesg.boot in FreeBSD/DragonFlyBSD to detect x86 ISA extensions on the host * make : enable x86 ISA extensions on the host both in CFLAGS and CXXFLAGS * make : correct AVX x86 ISA extension detection on macOS (Intel) host It got broken in commit c5f9acf4b797. macOS calls it AVX1.0. --- Makefile | 60 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index a2631011..d775b74b 100644 --- a/Makefile +++ b/Makefile @@ -65,57 +65,57 @@ endif # Architecture specific # TODO: probably these flags need to be tweaked on some architectures # feel free to update the Makefile for your architecture and send a pull request or issue -ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686)) +ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686 amd64)) ifeq ($(UNAME_S),Darwin) CPUINFO_CMD := sysctl machdep.cpu.features else ifeq ($(UNAME_S),Linux) CPUINFO_CMD := cat /proc/cpuinfo else ifneq (,$(filter MINGW32_NT% MINGW64_NT%,$(UNAME_S))) CPUINFO_CMD := cat /proc/cpuinfo + else ifneq (,$(filter DragonFly FreeBSD,$(UNAME_S))) + CPUINFO_CMD := grep Features /var/run/dmesg.boot else ifeq ($(UNAME_S),Haiku) CPUINFO_CMD := sysinfo -cpu endif - ifdef CPUINFO_CMD - AVX_M := $(shell $(CPUINFO_CMD) | grep -m 1 "avx ") - ifneq (,$(findstring avx,$(AVX_M))) - CFLAGS += -mavx - endif - - AVX2_M := $(shell $(CPUINFO_CMD) | grep -m 1 "avx2 ") - ifneq (,$(findstring avx2,$(AVX2_M))) - CFLAGS += -mavx2 + ifdef CPUINFO_CMD + AVX_M := $(shell $(CPUINFO_CMD) | grep -iwE 'AVX|AVX1.0') + ifneq (,$(AVX_M)) + CFLAGS += -mavx + CXXFLAGS += -mavx endif - FMA_M := $(shell $(CPUINFO_CMD) | grep -m 1 "fma ") - ifneq (,$(findstring fma,$(FMA_M))) - CFLAGS += -mfma + AVX2_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX2') + ifneq (,$(AVX2_M)) + CFLAGS += -mavx2 + CXXFLAGS += -mavx2 endif - F16C_M := $(shell $(CPUINFO_CMD) | grep -m 1 "f16c ") - ifneq (,$(findstring f16c,$(F16C_M))) - CFLAGS += -mf16c - - AVX1_M := $(shell $(CPUINFO_CMD) | grep -m 1 "avx ") - ifneq (,$(findstring avx,$(AVX1_M))) - CFLAGS += -mavx - endif + FMA_M := $(shell $(CPUINFO_CMD) | grep -iw 'FMA') + ifneq (,$(FMA_M)) + CFLAGS += -mfma + CXXFLAGS += -mfma endif - SSE3_M := $(shell $(CPUINFO_CMD) | grep -m 1 "sse3 ") - ifneq (,$(findstring sse3,$(SSE3_M))) - CFLAGS += -msse3 + F16C_M := $(shell $(CPUINFO_CMD) | grep -iw 'F16C') + ifneq (,$(F16C_M)) + CFLAGS += -mf16c + CXXFLAGS += -mf16c endif - SSSE3_M := $(shell $(CPUINFO_CMD) | grep -m 1 "ssse3 ") - ifneq (,$(findstring ssse3,$(SSSE3_M))) - CFLAGS += -mssse3 + SSE3_M := $(shell $(CPUINFO_CMD) | grep -iwE 'PNI|SSE3') + ifneq (,$(SSE3_M)) + CFLAGS += -msse3 + CXXFLAGS += -msse3 + endif + + SSSE3_M := $(shell $(CPUINFO_CMD) | grep -iw 'SSSE3') + ifneq (,$(SSSE3_M)) + CFLAGS += -mssse3 + CXXFLAGS += -mssse3 endif endif endif -ifeq ($(UNAME_M),amd64) - CFLAGS += -mavx -mavx2 -mfma -mf16c -endif ifneq ($(filter ppc64%,$(UNAME_M)),) POWER9_M := $(shell grep "POWER9" /proc/cpuinfo) From c3f319d7c2953a5abec4ac513818b4e2daa1dc55 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Tue, 5 Sep 2023 20:57:27 +0300 Subject: [PATCH 6/6] ggml : sync latest llama.cpp (view_src + alloc improvements) (#1247) * ggml : sync latest llama.cpp (view_src + alloc improvements) * ggml : fix build --- ggml-cuda.cu | 107 ++++-- ggml-metal.m | 133 +++++--- ggml-metal.metal | 238 ++++++++----- ggml-opencl.cpp | 14 +- ggml.c | 868 ++++++++++++++++++++++++++++------------------- ggml.h | 34 +- 6 files changed, 865 insertions(+), 529 deletions(-) diff --git a/ggml-cuda.cu b/ggml-cuda.cu index 391e6318..d2dbf824 100644 --- a/ggml-cuda.cu +++ b/ggml-cuda.cu @@ -81,12 +81,29 @@ #if defined(GGML_USE_HIPBLAS) #define __CUDA_ARCH__ 1300 +#ifndef __has_builtin + #define __has_builtin(x) 0 +#endif + typedef int8_t int8x4_t __attribute__((ext_vector_type(4))); static __device__ __forceinline__ int __vsubss4(const int a, const int b) { const int8x4_t va = reinterpret_cast(a); const int8x4_t vb = reinterpret_cast(b); +#if __has_builtin(__builtin_elementwise_sub_sat) const int8x4_t c = __builtin_elementwise_sub_sat(va, vb); return reinterpret_cast(c); +#else + int8x4_t c; + int16_t tmp; +#pragma unroll + for (int i = 0; i < 4; i++) { + tmp = va[i] - vb[i]; + if(tmp > std::numeric_limits::max()) tmp = std::numeric_limits::max(); + if(tmp < std::numeric_limits::min()) tmp = std::numeric_limits::min(); + c[i] = tmp; + } + return reinterpret_cast(c); +#endif // __has_builtin(__builtin_elementwise_sub_sat) } static __device__ __forceinline__ int __dp4a(const int a, const int b, int c) { @@ -447,58 +464,91 @@ static __global__ void silu_f32(const float * x, float * dst, const int k) { dst[i] = x[i] / (1.0f + expf(-x[i])); } +static __device__ __forceinline__ float2 warp_reduce_sum(float2 a) { +#pragma unroll + for (int mask = 16; mask > 0; mask >>= 1) { + a.x += __shfl_xor_sync(0xffffffff, a.x, mask, 32); + a.y += __shfl_xor_sync(0xffffffff, a.y, mask, 32); + } + return a; +} + +template static __global__ void norm_f32(const float * x, float * dst, const int ncols) { const int row = blockIdx.x*blockDim.y + threadIdx.y; const int tid = threadIdx.x; const float eps = 1e-5f; - float mean = 0.0f; - float var = 0.0f; + float2 mean_var = make_float2(0.f, 0.f); - for (int col = tid; col < ncols; col += WARP_SIZE) { + for (int col = tid; col < ncols; col += block_size) { const float xi = x[row*ncols + col]; - mean += xi; - var += xi * xi; + mean_var.x += xi; + mean_var.y += xi * xi; } // sum up partial sums -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - mean += __shfl_xor_sync(0xffffffff, mean, mask, 32); - var += __shfl_xor_sync(0xffffffff, var, mask, 32); + mean_var = warp_reduce_sum(mean_var); + if (block_size > WARP_SIZE) { + __shared__ float2 s_sum[32]; + int warp_id = threadIdx.x / WARP_SIZE; + int lane_id = threadIdx.x % WARP_SIZE; + if (lane_id == 0) { + s_sum[warp_id] = mean_var; + } + __syncthreads(); + mean_var = s_sum[lane_id]; + mean_var = warp_reduce_sum(mean_var); } - mean /= ncols; - var = var / ncols - mean * mean; - const float inv_var = rsqrtf(var + eps); + const float mean = mean_var.x / ncols; + const float var = mean_var.y / ncols - mean * mean; + const float inv_std = rsqrtf(var + eps); - for (int col = tid; col < ncols; col += WARP_SIZE) { - dst[row*ncols + col] = (x[row*ncols + col] - mean) * inv_var; + for (int col = tid; col < ncols; col += block_size) { + dst[row*ncols + col] = (x[row*ncols + col] - mean) * inv_std; } } +static __device__ __forceinline__ float warp_reduce_sum(float x) { +#pragma unroll + for (int mask = 16; mask > 0; mask >>= 1) { + x += __shfl_xor_sync(0xffffffff, x, mask, 32); + } + return x; +} + +template static __global__ void rms_norm_f32(const float * x, float * dst, const int ncols, const float eps) { const int row = blockIdx.x*blockDim.y + threadIdx.y; const int tid = threadIdx.x; float tmp = 0.0f; // partial sum for thread in warp - for (int col = tid; col < ncols; col += WARP_SIZE) { + for (int col = tid; col < ncols; col += block_size) { const float xi = x[row*ncols + col]; tmp += xi * xi; } // sum up partial sums -#pragma unroll - for (int mask = 16; mask > 0; mask >>= 1) { - tmp += __shfl_xor_sync(0xffffffff, tmp, mask, 32); + tmp = warp_reduce_sum(tmp); + if (block_size > WARP_SIZE) { + __shared__ float s_sum[32]; + int warp_id = threadIdx.x / WARP_SIZE; + int lane_id = threadIdx.x % WARP_SIZE; + if (lane_id == 0) { + s_sum[warp_id] = tmp; + } + __syncthreads(); + tmp = s_sum[lane_id]; + tmp = warp_reduce_sum(tmp); } const float mean = tmp / ncols; const float scale = rsqrtf(mean + eps); - for (int col = tid; col < ncols; col += WARP_SIZE) { + for (int col = tid; col < ncols; col += block_size) { dst[row*ncols + col] = scale * x[row*ncols + col]; } } @@ -4186,14 +4236,24 @@ static void silu_f32_cuda(const float * x, float * dst, const int k, cudaStream_ static void norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, cudaStream_t stream) { GGML_ASSERT(ncols % WARP_SIZE == 0); - const dim3 block_dims(WARP_SIZE, 1, 1); - norm_f32<<>>(x, dst, ncols); + if (ncols < 1024) { + const dim3 block_dims(WARP_SIZE, 1, 1); + norm_f32<<>>(x, dst, ncols); + } else { + const dim3 block_dims(1024, 1, 1); + norm_f32<1024><<>>(x, dst, ncols); + } } static void rms_norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float eps, cudaStream_t stream) { GGML_ASSERT(ncols % WARP_SIZE == 0); - const dim3 block_dims(WARP_SIZE, 1, 1); - rms_norm_f32<<>>(x, dst, ncols, eps); + if (ncols < 1024) { + const dim3 block_dims(WARP_SIZE, 1, 1); + rms_norm_f32<<>>(x, dst, ncols, eps); + } else { + const dim3 block_dims(1024, 1, 1); + rms_norm_f32<1024><<>>(x, dst, ncols, eps); + } } static void quantize_row_q8_1_cuda(const float * x, void * vy, const int kx, const int ky, const int kx_padded, cudaStream_t stream) { @@ -5721,7 +5781,6 @@ inline void ggml_cuda_op_alibi( (void) src1; (void) src0_ddq_i; (void) src1_ddf_i; - (void) i02; (void) i1; } diff --git a/ggml-metal.m b/ggml-metal.m index ad2ee8cf..d0d23442 100644 --- a/ggml-metal.m +++ b/ggml-metal.m @@ -11,6 +11,7 @@ #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) +// TODO: temporary - reuse llama.cpp logging #ifdef GGML_METAL_NDEBUG #define metal_printf(...) #else @@ -75,6 +76,7 @@ struct ggml_metal_context { GGML_METAL_DECL_KERNEL(rms_norm); GGML_METAL_DECL_KERNEL(norm); GGML_METAL_DECL_KERNEL(mul_mat_f16_f32); + GGML_METAL_DECL_KERNEL(mul_mat_f16_f32_1row); GGML_METAL_DECL_KERNEL(mul_mat_q4_0_f32); GGML_METAL_DECL_KERNEL(mul_mat_q4_1_f32); GGML_METAL_DECL_KERNEL(mul_mat_q8_0_f32); @@ -113,12 +115,26 @@ static NSString * const msl_library_source = @"see metal.metal"; @end struct ggml_metal_context * ggml_metal_init(int n_cb) { - fprintf(stderr, "%s: allocating\n", __func__); + metal_printf("%s: allocating\n", __func__); + // Show all the Metal device instances in the system + NSArray * devices = MTLCopyAllDevices(); + id device; + NSString * s; + for (device in devices) { + s = [device name]; + metal_printf("%s: found device: %s\n", __func__, [s UTF8String]); + } + + // Pick and show default Metal device + device = MTLCreateSystemDefaultDevice(); + s = [device name]; + metal_printf("%s: picking default device: %s\n", __func__, [s UTF8String]); + + // Configure context struct ggml_metal_context * ctx = malloc(sizeof(struct ggml_metal_context)); - + ctx->device = device; ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS); - ctx->device = MTLCreateSystemDefaultDevice(); ctx->queue = [ctx->device newCommandQueue]; ctx->n_buffers = 0; ctx->concur_list_len = 0; @@ -132,7 +148,7 @@ struct ggml_metal_context * ggml_metal_init(int n_cb) { ctx->library = [ctx->device newLibraryWithSource:msl_library_source options:nil error:&error]; if (error) { - fprintf(stderr, "%s: error: %s\n", __func__, [[error description] UTF8String]); + metal_printf("%s: error: %s\n", __func__, [[error description] UTF8String]); return NULL; } } @@ -146,11 +162,11 @@ struct ggml_metal_context * ggml_metal_init(int n_cb) { //NSString * path = [[NSBundle mainBundle] pathForResource:@"../../examples/metal/metal" ofType:@"metal"]; NSBundle * bundle = [NSBundle bundleForClass:[GGMLMetalClass class]]; NSString * path = [bundle pathForResource:@"ggml-metal" ofType:@"metal"]; - fprintf(stderr, "%s: loading '%s'\n", __func__, [path UTF8String]); + metal_printf("%s: loading '%s'\n", __func__, [path UTF8String]); NSString * src = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; if (error) { - fprintf(stderr, "%s: error: %s\n", __func__, [[error description] UTF8String]); + metal_printf("%s: error: %s\n", __func__, [[error description] UTF8String]); return NULL; } @@ -162,7 +178,7 @@ struct ggml_metal_context * ggml_metal_init(int n_cb) { ctx->library = [ctx->device newLibraryWithSource:src options:nil error:&error]; #endif if (error) { - fprintf(stderr, "%s: error: %s\n", __func__, [[error description] UTF8String]); + metal_printf("%s: error: %s\n", __func__, [[error description] UTF8String]); return NULL; } } @@ -174,11 +190,11 @@ struct ggml_metal_context * ggml_metal_init(int n_cb) { #define GGML_METAL_ADD_KERNEL(name) \ ctx->function_##name = [ctx->library newFunctionWithName:@"kernel_"#name]; \ ctx->pipeline_##name = [ctx->device newComputePipelineStateWithFunction:ctx->function_##name error:&error]; \ - fprintf(stderr, "%s: loaded %-32s %16p | th_max = %4d | th_width = %4d\n", __func__, "kernel_"#name, (void *) ctx->pipeline_##name, \ + metal_printf("%s: loaded %-32s %16p | th_max = %4d | th_width = %4d\n", __func__, "kernel_"#name, (void *) ctx->pipeline_##name, \ (int) ctx->pipeline_##name.maxTotalThreadsPerThreadgroup, \ (int) ctx->pipeline_##name.threadExecutionWidth); \ if (error) { \ - fprintf(stderr, "%s: load pipeline error: %s\n", __func__, [[error description] UTF8String]); \ + metal_printf("%s: load pipeline error: %s\n", __func__, [[error description] UTF8String]); \ return NULL; \ } @@ -204,6 +220,7 @@ struct ggml_metal_context * ggml_metal_init(int n_cb) { GGML_METAL_ADD_KERNEL(rms_norm); GGML_METAL_ADD_KERNEL(norm); GGML_METAL_ADD_KERNEL(mul_mat_f16_f32); + GGML_METAL_ADD_KERNEL(mul_mat_f16_f32_1row); GGML_METAL_ADD_KERNEL(mul_mat_q4_0_f32); GGML_METAL_ADD_KERNEL(mul_mat_q4_1_f32); GGML_METAL_ADD_KERNEL(mul_mat_q8_0_f32); @@ -230,19 +247,19 @@ struct ggml_metal_context * ggml_metal_init(int n_cb) { #undef GGML_METAL_ADD_KERNEL } - fprintf(stderr, "%s: recommendedMaxWorkingSetSize = %8.2f MB\n", __func__, ctx->device.recommendedMaxWorkingSetSize / 1024.0 / 1024.0); - fprintf(stderr, "%s: hasUnifiedMemory = %s\n", __func__, ctx->device.hasUnifiedMemory ? "true" : "false"); + metal_printf("%s: recommendedMaxWorkingSetSize = %8.2f MB\n", __func__, ctx->device.recommendedMaxWorkingSetSize / 1024.0 / 1024.0); + metal_printf("%s: hasUnifiedMemory = %s\n", __func__, ctx->device.hasUnifiedMemory ? "true" : "false"); if (ctx->device.maxTransferRate != 0) { - fprintf(stderr, "%s: maxTransferRate = %8.2f MB/s\n", __func__, ctx->device.maxTransferRate / 1024.0 / 1024.0); + metal_printf("%s: maxTransferRate = %8.2f MB/s\n", __func__, ctx->device.maxTransferRate / 1024.0 / 1024.0); } else { - fprintf(stderr, "%s: maxTransferRate = built-in GPU\n", __func__); + metal_printf("%s: maxTransferRate = built-in GPU\n", __func__); } return ctx; } void ggml_metal_free(struct ggml_metal_context * ctx) { - fprintf(stderr, "%s: deallocating\n", __func__); + metal_printf("%s: deallocating\n", __func__); #define GGML_METAL_DEL_KERNEL(name) \ [ctx->function_##name release]; \ [ctx->pipeline_##name release]; @@ -269,6 +286,7 @@ void ggml_metal_free(struct ggml_metal_context * ctx) { GGML_METAL_DEL_KERNEL(rms_norm); GGML_METAL_DEL_KERNEL(norm); GGML_METAL_DEL_KERNEL(mul_mat_f16_f32); + GGML_METAL_DEL_KERNEL(mul_mat_f16_f32_1row); GGML_METAL_DEL_KERNEL(mul_mat_q4_0_f32); GGML_METAL_DEL_KERNEL(mul_mat_q4_1_f32); GGML_METAL_DEL_KERNEL(mul_mat_q8_0_f32); @@ -311,7 +329,7 @@ void * ggml_metal_host_malloc(size_t n) { void * data = NULL; const int result = posix_memalign((void **) &data, getpagesize(), n); if (result != 0) { - fprintf(stderr, "%s: error: posix_memalign failed\n", __func__); + metal_printf("%s: error: posix_memalign failed\n", __func__); return NULL; } @@ -339,7 +357,7 @@ int * ggml_metal_get_concur_list(struct ggml_metal_context * ctx) { // Metal buffer based on the host memory pointer // static id ggml_metal_get_buffer(struct ggml_metal_context * ctx, struct ggml_tensor * t, size_t * offs) { - //fprintf(stderr, "%s: data tensor '%16s', offs_data = %8ld, offs_eval = %8ld, offs_cach = %8ld\n", __func__, t->name, offs_data, offs_eval, offs_cach); + //metal_printf("%s: data tensor '%16s', offs_data = %8ld, offs_eval = %8ld, offs_cach = %8ld\n", __func__, t->name, offs_data, offs_eval, offs_cach); const int64_t tsize = ggml_nbytes(t); @@ -350,13 +368,13 @@ static id ggml_metal_get_buffer(struct ggml_metal_context * ctx, stru if (ioffs >= 0 && ioffs + tsize <= (int64_t) ctx->buffers[i].size) { *offs = (size_t) ioffs; - //fprintf(stderr, "%s: '%s' tensor '%16s', offs = %8ld\n", __func__, ctx->buffers[i].name, t->name, *offs); + //metal_printf("%s: '%s' tensor '%16s', offs = %8ld\n", __func__, ctx->buffers[i].name, t->name, *offs); return ctx->buffers[i].metal; } } - fprintf(stderr, "%s: error: buffer is nil\n", __func__); + metal_printf("%s: error: buffer is nil\n", __func__); return nil; } @@ -368,7 +386,7 @@ bool ggml_metal_add_buffer( size_t size, size_t max_size) { if (ctx->n_buffers >= GGML_METAL_MAX_BUFFERS) { - fprintf(stderr, "%s: too many buffers\n", __func__); + metal_printf("%s: too many buffers\n", __func__); return false; } @@ -378,7 +396,7 @@ bool ggml_metal_add_buffer( const int64_t ioffs = (int64_t) data - (int64_t) ctx->buffers[i].data; if (ioffs >= 0 && ioffs < (int64_t) ctx->buffers[i].size) { - fprintf(stderr, "%s: error: buffer '%s' overlaps with '%s'\n", __func__, name, ctx->buffers[i].name); + metal_printf("%s: error: buffer '%s' overlaps with '%s'\n", __func__, name, ctx->buffers[i].name); return false; } } @@ -399,11 +417,11 @@ bool ggml_metal_add_buffer( ctx->buffers[ctx->n_buffers].metal = [ctx->device newBufferWithBytesNoCopy:data length:size_aligned options:MTLResourceStorageModeShared deallocator:nil]; if (ctx->buffers[ctx->n_buffers].metal == nil) { - fprintf(stderr, "%s: failed to allocate '%-16s' buffer, size = %8.2f MB\n", __func__, name, size_aligned / 1024.0 / 1024.0); + metal_printf("%s: failed to allocate '%-16s' buffer, size = %8.2f MB\n", __func__, name, size_aligned / 1024.0 / 1024.0); return false; } - fprintf(stderr, "%s: allocated '%-16s' buffer, size = %8.2f MB", __func__, name, size_aligned / 1024.0 / 1024.0); + metal_printf("%s: allocated '%-16s' buffer, size = %8.2f MB", __func__, name, size_aligned / 1024.0 / 1024.0); ++ctx->n_buffers; } else { @@ -423,27 +441,27 @@ bool ggml_metal_add_buffer( ctx->buffers[ctx->n_buffers].metal = [ctx->device newBufferWithBytesNoCopy:(void *) ((uint8_t *) data + i) length:size_step_aligned options:MTLResourceStorageModeShared deallocator:nil]; if (ctx->buffers[ctx->n_buffers].metal == nil) { - fprintf(stderr, "%s: failed to allocate '%-16s' buffer, size = %8.2f MB\n", __func__, name, size_step_aligned / 1024.0 / 1024.0); + metal_printf("%s: failed to allocate '%-16s' buffer, size = %8.2f MB\n", __func__, name, size_step_aligned / 1024.0 / 1024.0); return false; } - fprintf(stderr, "%s: allocated '%-16s' buffer, size = %8.2f MB, offs = %12ld", __func__, name, size_step_aligned / 1024.0 / 1024.0, i); + metal_printf("%s: allocated '%-16s' buffer, size = %8.2f MB, offs = %12ld", __func__, name, size_step_aligned / 1024.0 / 1024.0, i); if (i + size_step < size) { - fprintf(stderr, "\n"); + metal_printf("\n"); } ++ctx->n_buffers; } } - fprintf(stderr, ", (%8.2f / %8.2f)", + metal_printf(", (%8.2f / %8.2f)", ctx->device.currentAllocatedSize / 1024.0 / 1024.0, ctx->device.recommendedMaxWorkingSetSize / 1024.0 / 1024.0); if (ctx->device.currentAllocatedSize > ctx->device.recommendedMaxWorkingSetSize) { - fprintf(stderr, ", warning: current allocated size is greater than the recommended max working set size\n"); + metal_printf(", warning: current allocated size is greater than the recommended max working set size\n"); } else { - fprintf(stderr, "\n"); + metal_printf("\n"); } } @@ -453,8 +471,6 @@ bool ggml_metal_add_buffer( void ggml_metal_set_tensor( struct ggml_metal_context * ctx, struct ggml_tensor * t) { - metal_printf("%s: set input for tensor '%s'\n", __func__, t->name); - size_t offs; id id_dst = ggml_metal_get_buffer(ctx, t, &offs); @@ -464,8 +480,6 @@ void ggml_metal_set_tensor( void ggml_metal_get_tensor( struct ggml_metal_context * ctx, struct ggml_tensor * t) { - metal_printf("%s: extract results for tensor '%s'\n", __func__, t->name); - size_t offs; id id_src = ggml_metal_get_buffer(ctx, t, &offs); @@ -560,15 +574,13 @@ void ggml_metal_graph_find_concurrency( } if (ctx->concur_list_len > GGML_MAX_CONCUR) { - fprintf(stderr, "%s: too many elements for metal ctx->concur_list!\n", __func__); + metal_printf("%s: too many elements for metal ctx->concur_list!\n", __func__); } } void ggml_metal_graph_compute( struct ggml_metal_context * ctx, struct ggml_cgraph * gf) { - metal_printf("%s: evaluating graph\n", __func__); - @autoreleasepool { // if there is ctx->concur_list, dispatch concurrently @@ -616,7 +628,7 @@ void ggml_metal_graph_compute( continue; } - metal_printf("%s: encoding node %3d, op = %8s\n", __func__, i, ggml_op_name(gf->nodes[i]->op)); + //metal_printf("%s: encoding node %3d, op = %8s\n", __func__, i, ggml_op_name(gf->nodes[i]->op)); struct ggml_tensor * src0 = gf->nodes[i]->src[0]; struct ggml_tensor * src1 = gf->nodes[i]->src[1]; @@ -685,6 +697,12 @@ void ggml_metal_graph_compute( } break; case GGML_OP_ADD: { + GGML_ASSERT(ggml_is_contiguous(src0)); + + // utilize float4 + GGML_ASSERT(ne00 % 4 == 0); + const int64_t nb = ne00/4; + if (ggml_nelements(src1) == ne10) { // src1 is a row [encoder setComputePipelineState:ctx->pipeline_add_row]; @@ -694,14 +712,20 @@ void ggml_metal_graph_compute( [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3]; + [encoder setBytes:&nb length:sizeof(nb) atIndex:3]; - const int64_t n = ggml_nelements(dst); + const int64_t n = ggml_nelements(dst)/4; [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; } break; case GGML_OP_MUL: { + GGML_ASSERT(ggml_is_contiguous(src0)); + + // utilize float4 + GGML_ASSERT(ne00 % 4 == 0); + const int64_t nb = ne00/4; + if (ggml_nelements(src1) == ne10) { // src1 is a row [encoder setComputePipelineState:ctx->pipeline_mul_row]; @@ -711,9 +735,9 @@ void ggml_metal_graph_compute( [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0]; [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1]; [encoder setBuffer:id_dst offset:offs_dst atIndex:2]; - [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3]; + [encoder setBytes:&nb length:sizeof(nb) atIndex:3]; - const int64_t n = ggml_nelements(dst); + const int64_t n = ggml_nelements(dst)/4; [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)]; } break; @@ -764,7 +788,7 @@ void ggml_metal_graph_compute( } break; default: { - fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); + metal_printf("%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); GGML_ASSERT(false); } } break; @@ -845,9 +869,13 @@ void ggml_metal_graph_compute( switch (src0t) { case GGML_TYPE_F16: { - nth0 = 64; + nth0 = 32; nth1 = 1; - [encoder setComputePipelineState:ctx->pipeline_mul_mat_f16_f32]; + if (ne11 * ne12 < 4) { + [encoder setComputePipelineState:ctx->pipeline_mul_mat_f16_f32_1row]; + } else { + [encoder setComputePipelineState:ctx->pipeline_mul_mat_f16_f32]; + } } break; case GGML_TYPE_Q4_0: { @@ -899,8 +927,8 @@ void ggml_metal_graph_compute( GGML_ASSERT(ne02 == 1); GGML_ASSERT(ne12 == 1); - nth0 = 2; - nth1 = 32; + nth0 = 4; //1; + nth1 = 8; //32; [encoder setComputePipelineState:ctx->pipeline_mul_mat_q4_K_f32]; } break; case GGML_TYPE_Q5_K: @@ -923,7 +951,7 @@ void ggml_metal_graph_compute( } break; default: { - fprintf(stderr, "Asserting on type %d\n",(int)src0t); + metal_printf("Asserting on type %d\n",(int)src0t); GGML_ASSERT(false && "not implemented"); } }; @@ -948,9 +976,12 @@ void ggml_metal_graph_compute( [encoder setBytes:&gqa length:sizeof(gqa) atIndex:17]; if (src0t == GGML_TYPE_Q4_0 || src0t == GGML_TYPE_Q4_1 || src0t == GGML_TYPE_Q8_0 || - src0t == GGML_TYPE_Q2_K || src0t == GGML_TYPE_Q4_K) { + src0t == GGML_TYPE_Q2_K) {// || src0t == GGML_TYPE_Q4_K) { [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; } + else if (src0t == GGML_TYPE_Q4_K) { + [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; + } else if (src0t == GGML_TYPE_Q3_K) { #ifdef GGML_QKK_64 [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; @@ -964,8 +995,8 @@ void ggml_metal_graph_compute( else if (src0t == GGML_TYPE_Q6_K) { [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; } else { - [encoder setThreadgroupMemoryLength:nth0*sizeof(float) atIndex:0]; - [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne11, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; + int64_t ny = (ne11 + 3)/4; + [encoder dispatchThreadgroups:MTLSizeMake(ne01, ny, ne12) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)]; } } } break; @@ -1161,7 +1192,7 @@ void ggml_metal_graph_compute( } break; default: { - fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); + metal_printf("%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op)); GGML_ASSERT(false); } } @@ -1186,7 +1217,7 @@ void ggml_metal_graph_compute( MTLCommandBufferStatus status = (MTLCommandBufferStatus) [ctx->command_buffers[i] status]; if (status != MTLCommandBufferStatusCompleted) { - fprintf(stderr, "%s: command buffer %d failed with status %lu\n", __func__, i, status); + metal_printf("%s: command buffer %d failed with status %lu\n", __func__, i, status); GGML_ASSERT(false); } } diff --git a/ggml-metal.metal b/ggml-metal.metal index 82e1a0c7..119fcbeb 100644 --- a/ggml-metal.metal +++ b/ggml-metal.metal @@ -25,9 +25,9 @@ typedef struct { } block_q8_0; kernel void kernel_add( - device const float * src0, - device const float * src1, - device float * dst, + device const float4 * src0, + device const float4 * src1, + device float4 * dst, uint tpig[[thread_position_in_grid]]) { dst[tpig] = src0[tpig] + src1[tpig]; } @@ -35,18 +35,18 @@ kernel void kernel_add( // assumption: src1 is a row // broadcast src1 into src0 kernel void kernel_add_row( - device const float * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, + device const float4 * src0, + device const float4 * src1, + device float4 * dst, + constant int64_t & nb, uint tpig[[thread_position_in_grid]]) { - dst[tpig] = src0[tpig] + src1[tpig % ne00]; + dst[tpig] = src0[tpig] + src1[tpig % nb]; } kernel void kernel_mul( - device const float * src0, - device const float * src1, - device float * dst, + device const float4 * src0, + device const float4 * src1, + device float4 * dst, uint tpig[[thread_position_in_grid]]) { dst[tpig] = src0[tpig] * src1[tpig]; } @@ -54,12 +54,12 @@ kernel void kernel_mul( // assumption: src1 is a row // broadcast src1 into src0 kernel void kernel_mul_row( - device const float * src0, - device const float * src1, - device float * dst, - constant int64_t & ne00, + device const float4 * src0, + device const float4 * src1, + device float4 * dst, + constant int64_t & nb, uint tpig[[thread_position_in_grid]]) { - dst[tpig] = src0[tpig] * src1[tpig % ne00]; + dst[tpig] = src0[tpig] * src1[tpig % nb]; } kernel void kernel_scale( @@ -133,19 +133,24 @@ kernel void kernel_soft_max( threadgroup_barrier(mem_flags::mem_threadgroup); } - // broadcast - if (tpitg[0] == 0) { - buf[0] = buf[0]; - } + //// broadcast - not needed. There is a threadgroup barrier above in the last iteration of + // the loop, and when that is done, buf[0] has the correct (synchronized) value + //if (tpitg[0] == 0) { + // buf[0] = buf[0]; + //} - threadgroup_barrier(mem_flags::mem_threadgroup); + //threadgroup_barrier(mem_flags::mem_threadgroup); const float max = buf[0]; // parallel sum buf[tpitg[0]] = 0.0f; for (int i00 = tpitg[0]; i00 < ne00; i00 += ntg[0]) { - buf[tpitg[0]] += exp(psrc0[i00] - max); + const float exp_psrc0 = exp(psrc0[i00] - max); + buf[tpitg[0]] += exp_psrc0; + // Remember the result of exp here. exp is expensive, so we really do not + // whish to compute it twice. + pdst[i00] = exp_psrc0; } // reduce @@ -157,17 +162,18 @@ kernel void kernel_soft_max( threadgroup_barrier(mem_flags::mem_threadgroup); } - // broadcast - if (tpitg[0] == 0) { - buf[0] = buf[0]; - } + // broadcast - not needed, see above + //// broadcast + //if (tpitg[0] == 0) { + // buf[0] = buf[0]; + //} - threadgroup_barrier(mem_flags::mem_threadgroup); + //threadgroup_barrier(mem_flags::mem_threadgroup); const float sum = buf[0]; for (int i00 = tpitg[0]; i00 < ne00; i00 += ntg[0]) { - pdst[i00] = exp(psrc0[i00] - max) / sum; + pdst[i00] /= sum; } } @@ -214,25 +220,27 @@ kernel void kernel_norm( } threadgroup_barrier(mem_flags::mem_threadgroup); } - // broadcast - if (tpitg == 0) { - sum[0] /= ne00; - } - threadgroup_barrier(mem_flags::mem_threadgroup); + //// broadcast + //if (tpitg == 0) { + // sum[0] /= ne00; + //} + //threadgroup_barrier(mem_flags::mem_threadgroup); const float mean = sum[0]; - // recenter + // recenter and VARIANCE device float * y = dst + tgpig*ne00; - for (int i00 = tpitg; i00 < ne00; i00 += ntg) { - y[i00] = x[i00] - mean; - } - - // VARIANCE - // parallel sum sum[tpitg] = 0.0f; for (int i00 = tpitg; i00 < ne00; i00 += ntg) { + y[i00] = x[i00] - mean; sum[tpitg] += y[i00] * y[i00]; } + + //// VARIANCE + //// parallel sum + //sum[tpitg] = 0.0f; + //for (int i00 = tpitg; i00 < ne00; i00 += ntg) { + // sum[tpitg] += y[i00] * y[i00]; + //} // reduce threadgroup_barrier(mem_flags::mem_threadgroup); for (uint i = ntg/2; i > 0; i /= 2) { @@ -241,11 +249,11 @@ kernel void kernel_norm( } threadgroup_barrier(mem_flags::mem_threadgroup); } - // broadcast - if (tpitg == 0) { - sum[0] /= ne00; - } - threadgroup_barrier(mem_flags::mem_threadgroup); + //// broadcast + //if (tpitg == 0) { + // sum[0] /= ne00; + //} + //threadgroup_barrier(mem_flags::mem_threadgroup); const float variance = sum[0]; const float scale = 1.0f/sqrt(variance + eps); @@ -435,6 +443,8 @@ kernel void kernel_mul_mat_q4_1_f32( mul_vec_q_n_f32(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,gqa,tgpig,tiisg,sgitg); } +#define NB_Q8_0 8 + kernel void kernel_mul_mat_q8_0_f32( device const void * src0, device const float * src1, @@ -463,30 +473,30 @@ kernel void kernel_mul_mat_q8_0_f32( device const block_q8_0 * x = (device const block_q8_0 *) src0 + offset0; device const float * y = (device const float *) src1 + r1*ne10 + im*ne00*ne1; - float yl[16]; + float yl[NB_Q8_0]; float sumf[nr]={0.f}; - const int ix = tiisg/2; - const int il = tiisg%2; + const int ix = tiisg/4; + const int il = tiisg%4; - device const float * yb = y + ix * QK8_0 + 16*il; + device const float * yb = y + ix * QK8_0 + NB_Q8_0*il; - // each thread in a SIMD group deals with half a block. - for (int ib = ix; ib < nb; ib += nw/2) { - for (int i = 0; i < 16; ++i) { + // each thread in a SIMD group deals with NB_Q8_0 quants at a time + for (int ib = ix; ib < nb; ib += nw/4) { + for (int i = 0; i < NB_Q8_0; ++i) { yl[i] = yb[i]; } for (int row = 0; row < nr; row++) { - device const int8_t * qs = x[ib+row*nb].qs + 16*il; + device const int8_t * qs = x[ib+row*nb].qs + NB_Q8_0*il; float sumq = 0.f; - for (int iq = 0; iq < 16; ++iq) { + for (int iq = 0; iq < NB_Q8_0; ++iq) { sumq += qs[iq] * yl[iq]; } sumf[row] += sumq*x[ib+row*nb].d; } - yb += QK8_0 * 16; + yb += NB_Q8_0 * nw; } for (int row = 0; row < nr; ++row) { @@ -497,6 +507,60 @@ kernel void kernel_mul_mat_q8_0_f32( } } +kernel void kernel_mul_mat_f16_f32_1row( + device const char * src0, + device const char * src1, + device float * dst, + constant int64_t & ne00, + constant int64_t & ne01, + constant int64_t & ne02, + constant uint64_t & nb00, + constant uint64_t & nb01, + constant uint64_t & nb02, + constant int64_t & ne10, + constant int64_t & ne11, + constant int64_t & ne12, + constant uint64_t & nb10, + constant uint64_t & nb11, + constant uint64_t & nb12, + constant int64_t & ne0, + constant int64_t & ne1, + uint3 tgpig[[threadgroup_position_in_grid]], + uint tiisg[[thread_index_in_simdgroup]]) { + + const int64_t r0 = tgpig.x; + const int64_t r1 = tgpig.y; + const int64_t im = tgpig.z; + + device const half * x = (device const half *) (src0 + r0*nb01 + im/(ne12/ne02)*nb02); + device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12); + + float sumf = 0; + if (ne00 < 128) { + for (int i = tiisg; i < ne00; i += 32) { + sumf += (float) x[i] * (float) y[i]; + } + float all_sum = simd_sum(sumf); + if (tiisg == 0) { + dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; + } + } else { + device const half4 * x4 = (device const half4 *) x; + device const float4 * y4 = (device const float4 *) y; + for (int i = tiisg; i < ne00/4; i += 32) { + for (int k = 0; k < 4; ++k) sumf += (float)x4[i][k] * y4[i][k]; + } + float all_sum = simd_sum(sumf); + if (tiisg == 0) { + for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i]; + dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; + } + } + +} + +#define N_F16_F32 4 + kernel void kernel_mul_mat_f16_f32( device const char * src0, device const char * src1, @@ -515,37 +579,58 @@ kernel void kernel_mul_mat_f16_f32( constant uint64_t & nb12, constant int64_t & ne0, constant int64_t & ne1, - threadgroup float * sum [[threadgroup(0)]], uint3 tgpig[[threadgroup_position_in_grid]], - uint3 tpig[[thread_position_in_grid]], - uint3 tpitg[[thread_position_in_threadgroup]], - uint3 tptg[[threads_per_threadgroup]]) { + uint tiisg[[thread_index_in_simdgroup]]) { const int64_t r0 = tgpig.x; - const int64_t r1 = tgpig.y; + const int64_t rb = tgpig.y*N_F16_F32; const int64_t im = tgpig.z; - device const half * x = (device const half *) (src0 + r0*nb01 + im/(ne12/ne02)*nb02); - device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12); + device const half * x = (device const half *) (src0 + r0*nb01 + im/(ne12/ne02)*nb02); - sum[tpitg.x] = 0.0f; + if (ne00 < 128) { + for (int row = 0; row < N_F16_F32; ++row) { + int r1 = rb + row; + if (r1 >= ne11) { + break; + } - for (int i = tpitg.x; i < ne00; i += tptg.x) { - sum[tpitg.x] += (float) x[i] * (float) y[i]; - } + device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12); - // accumulate the sum from all threads in the threadgroup - threadgroup_barrier(mem_flags::mem_threadgroup); - for (uint i = tptg.x/2; i > 0; i /= 2) { - if (tpitg.x < i) { - sum[tpitg.x] += sum[tpitg.x + i]; + float sumf = 0; + for (int i = tiisg; i < ne00; i += 32) { + sumf += (float) x[i] * (float) y[i]; + } + + float all_sum = simd_sum(sumf); + if (tiisg == 0) { + dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; + } + } + } else { + device const half4 * x4 = (device const half4 *)x; + for (int row = 0; row < N_F16_F32; ++row) { + int r1 = rb + row; + if (r1 >= ne11) { + break; + } + + device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12); + device const float4 * y4 = (device const float4 *) y; + + float sumf = 0; + for (int i = tiisg; i < ne00/4; i += 32) { + for (int k = 0; k < 4; ++k) sumf += (float) x4[i][k] * y4[i][k]; + } + + float all_sum = simd_sum(sumf); + if (tiisg == 0) { + for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i]; + dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum; + } } - threadgroup_barrier(mem_flags::mem_threadgroup); } - if (tpitg.x == 0) { - dst[im*ne1*ne0 + r1*ne0 + r0] = sum[0]; - } } kernel void kernel_alibi_f32( @@ -1244,7 +1329,8 @@ kernel void kernel_mul_mat_q4_K_f32( const int r0 = tgpig.x; const int r1 = tgpig.y; const int r2 = tgpig.z; - const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; + //const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST; + const int first_row = r0 * N_DST; const int ib_row = first_row * nb; const uint offset0 = r2/gqa*(nb*ne0); device const block_q4_K * x = (device const block_q4_K *) src0 + ib_row + offset0; diff --git a/ggml-opencl.cpp b/ggml-opencl.cpp index eb214a83..777048d0 100644 --- a/ggml-opencl.cpp +++ b/ggml-opencl.cpp @@ -1334,7 +1334,7 @@ void ggml_cl_free_data(const struct ggml_tensor* tensor) { return; } - cl_mem mem = (cl_mem)tensor->data; + cl_mem mem = (cl_mem)tensor->extra; clReleaseMemObject(mem); } @@ -1393,7 +1393,7 @@ static void ggml_cl_mul_f32(const ggml_tensor * src0, const ggml_tensor * src1, size_t d_size; cl_mem d_X = ggml_cl_pool_malloc(ne0 * sizeof(float), &x_size); // src0 - cl_mem d_Y = (cl_mem) src1->data; // src1 is already on device, broadcasted. + cl_mem d_Y = (cl_mem) src1->extra; // src1 is already on device, broadcasted. cl_mem d_D = ggml_cl_pool_malloc(ne0 * sizeof(float), &d_size); // dst @@ -1491,9 +1491,9 @@ static void ggml_cl_mul_mat_f32(const ggml_tensor * src0, const ggml_tensor * sr size_t d_size; cl_mem d_X; if (src0->backend == GGML_BACKEND_GPU) { // NOLINT - d_X = (cl_mem) src0->data; + d_X = (cl_mem) src0->extra; } else { - d_X = ggml_cl_pool_malloc(sizeof(ggml_fp16_t) * x_ne, &x_size); + d_X = ggml_cl_pool_malloc(sizeof(float) * x_ne, &x_size); } cl_mem d_Y = ggml_cl_pool_malloc(sizeof(float) * y_ne, &y_size); cl_mem d_D = ggml_cl_pool_malloc(sizeof(float) * d_ne, &d_size); @@ -1567,7 +1567,7 @@ static void ggml_cl_mul_mat_f16(const ggml_tensor * src0, const ggml_tensor * sr size_t d_size; cl_mem d_X; if (src0->backend == GGML_BACKEND_GPU) { // NOLINT - d_X = (cl_mem) src0->data; + d_X = (cl_mem) src0->extra; } else { d_X = ggml_cl_pool_malloc(sizeof(ggml_fp16_t) * x_ne, &x_size); } @@ -1697,7 +1697,7 @@ static void ggml_cl_mul_mat_q_f32(const ggml_tensor * src0, const ggml_tensor * events.emplace_back(); CL_CHECK(ggml_cl_h2d_tensor_2d(queue, d_Q, 0, src0, i03, i02, events.data() + ev_idx++)); } else if (src0->backend == GGML_BACKEND_GPU) { - d_Q = (cl_mem) src0->data; + d_Q = (cl_mem) src0->extra; } else { GGML_ASSERT(false); } @@ -1860,6 +1860,6 @@ void ggml_cl_transform_tensor(void * data, ggml_tensor * tensor) { CL_CHECK(clFinish(queue)); - tensor->data = dst; + tensor->extra = dst; GGML_ASSERT(tensor->backend == GGML_BACKEND_GPU); } diff --git a/ggml.c b/ggml.c index ecbc724b..63a22223 100644 --- a/ggml.c +++ b/ggml.c @@ -47,6 +47,10 @@ // disable "possible loss of data" to avoid hundreds of casts // we should just be careful :) #pragma warning(disable: 4244 4267) + +// disable POSIX deprecation warnigns +// these functions are never going away, anyway +#pragma warning(disable: 4996) #endif #if defined(_WIN32) @@ -123,6 +127,8 @@ typedef void * thread_ret_t; #define GGML_GELU_FP16 #define GGML_GELU_QUICK_FP16 #define GGML_SILU_FP16 +// #define GGML_CROSS_ENTROPY_EXP_FP16 +// #define GGML_FLASH_ATTN_EXP_FP16 #define GGML_SOFT_MAX_UNROLL 4 #define GGML_VEC_DOT_UNROLL 2 @@ -186,8 +192,8 @@ typedef void * thread_ret_t; // #if defined(_MSC_VER) || defined(__MINGW32__) -#define GGML_ALIGNED_MALLOC(size) _aligned_malloc(size, GGML_MEM_ALIGN) -#define GGML_ALIGNED_FREE(ptr) _aligned_free(ptr) +#define GGML_ALIGNED_MALLOC(size) _aligned_malloc(size, GGML_MEM_ALIGN) +#define GGML_ALIGNED_FREE(ptr) _aligned_free(ptr) #else inline static void * ggml_aligned_malloc(size_t size) { void * aligned_memory = NULL; @@ -212,8 +218,8 @@ inline static void * ggml_aligned_malloc(size_t size) { } return aligned_memory; } -#define GGML_ALIGNED_MALLOC(size) ggml_aligned_malloc(size) -#define GGML_ALIGNED_FREE(ptr) free(ptr) +#define GGML_ALIGNED_MALLOC(size) ggml_aligned_malloc(size) +#define GGML_ALIGNED_FREE(ptr) free(ptr) #endif #define UNUSED GGML_UNUSED @@ -301,6 +307,10 @@ typedef double ggml_float; #endif #endif +#ifdef __riscv_v_intrinsic +#include +#endif + #ifdef __F16C__ #ifdef _MSC_VER @@ -665,7 +675,7 @@ static inline __m256 sum_i16_pairs_float(const __m256i x) { } static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) { -#ifdef __AVXVNNI__ +#if __AVXVNNI__ const __m256i zero = _mm256_setzero_si256(); const __m256i summed_pairs = _mm256_dpbusd_epi32(zero, ax, sy); return _mm256_cvtepi32_ps(summed_pairs); @@ -678,7 +688,7 @@ static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) // multiply int8_t, add results pairwise twice and return as float vector static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) { -#ifdef __AVXVNNIINT8__ +#if __AVXVNNIINT8__ const __m256i zero = _mm256_setzero_si256(); const __m256i summed_pairs = _mm256_dpbssd_epi32(zero, x, y); return _mm256_cvtepi32_ps(summed_pairs); @@ -694,7 +704,7 @@ static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) { static inline __m128i packNibbles( __m256i bytes ) { // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh -#ifdef __AVX512F__ +#if __AVX512F__ const __m256i bytes_srli_4 = _mm256_srli_epi16(bytes, 4); // 0000_0000_abcd_0000 bytes = _mm256_or_si256(bytes, bytes_srli_4); // 0000_abcd_abcd_efgh return _mm256_cvtepi16_epi8(bytes); // abcd_efgh @@ -813,46 +823,6 @@ static inline float hsum_float_4x4(const __m128 a, const __m128 b, const __m128 #if !defined(__aarch64__) -inline static uint16_t vaddvq_u8(uint8x16_t v) { - return - (uint16_t)vgetq_lane_u8(v, 0) + (uint16_t)vgetq_lane_u8(v, 1) + - (uint16_t)vgetq_lane_u8(v, 2) + (uint16_t)vgetq_lane_u8(v, 3) + - (uint16_t)vgetq_lane_u8(v, 4) + (uint16_t)vgetq_lane_u8(v, 5) + - (uint16_t)vgetq_lane_u8(v, 6) + (uint16_t)vgetq_lane_u8(v, 7) + - (uint16_t)vgetq_lane_u8(v, 8) + (uint16_t)vgetq_lane_u8(v, 9) + - (uint16_t)vgetq_lane_u8(v, 10) + (uint16_t)vgetq_lane_u8(v, 11) + - (uint16_t)vgetq_lane_u8(v, 12) + (uint16_t)vgetq_lane_u8(v, 13) + - (uint16_t)vgetq_lane_u8(v, 14) + (uint16_t)vgetq_lane_u8(v, 15); -} - -inline static int16_t vaddvq_s8(int8x16_t v) { - return - (int16_t)vgetq_lane_s8(v, 0) + (int16_t)vgetq_lane_s8(v, 1) + - (int16_t)vgetq_lane_s8(v, 2) + (int16_t)vgetq_lane_s8(v, 3) + - (int16_t)vgetq_lane_s8(v, 4) + (int16_t)vgetq_lane_s8(v, 5) + - (int16_t)vgetq_lane_s8(v, 6) + (int16_t)vgetq_lane_s8(v, 7) + - (int16_t)vgetq_lane_s8(v, 8) + (int16_t)vgetq_lane_s8(v, 9) + - (int16_t)vgetq_lane_s8(v, 10) + (int16_t)vgetq_lane_s8(v, 11) + - (int16_t)vgetq_lane_s8(v, 12) + (int16_t)vgetq_lane_s8(v, 13) + - (int16_t)vgetq_lane_s8(v, 14) + (int16_t)vgetq_lane_s8(v, 15); -} - -inline static int32_t vaddvq_s16(int16x8_t v) { - return - (int32_t)vgetq_lane_s16(v, 0) + (int32_t)vgetq_lane_s16(v, 1) + - (int32_t)vgetq_lane_s16(v, 2) + (int32_t)vgetq_lane_s16(v, 3) + - (int32_t)vgetq_lane_s16(v, 4) + (int32_t)vgetq_lane_s16(v, 5) + - (int32_t)vgetq_lane_s16(v, 6) + (int32_t)vgetq_lane_s16(v, 7); -} - -inline static uint32_t vaddvq_u16(uint16x8_t v) { - return - (uint32_t)vgetq_lane_u16(v, 0) + (uint32_t)vgetq_lane_u16(v, 1) + - (uint32_t)vgetq_lane_u16(v, 2) + (uint32_t)vgetq_lane_u16(v, 3) + - (uint32_t)vgetq_lane_u16(v, 4) + (uint32_t)vgetq_lane_u16(v, 5) + - (uint32_t)vgetq_lane_u16(v, 6) + (uint32_t)vgetq_lane_u16(v, 7); -} - inline static int32_t vaddvq_s32(int32x4_t v) { return vgetq_lane_s32(v, 0) + vgetq_lane_s32(v, 1) + vgetq_lane_s32(v, 2) + vgetq_lane_s32(v, 3); } @@ -861,12 +831,6 @@ inline static float vaddvq_f32(float32x4_t v) { return vgetq_lane_f32(v, 0) + vgetq_lane_f32(v, 1) + vgetq_lane_f32(v, 2) + vgetq_lane_f32(v, 3); } -inline static float vminvq_f32(float32x4_t v) { - return - MIN(MIN(vgetq_lane_f32(v, 0), vgetq_lane_f32(v, 1)), - MIN(vgetq_lane_f32(v, 2), vgetq_lane_f32(v, 3))); -} - inline static float vmaxvq_f32(float32x4_t v) { return MAX(MAX(vgetq_lane_f32(v, 0), vgetq_lane_f32(v, 1)), @@ -1294,7 +1258,6 @@ static void quantize_row_q8_0(const float * restrict x, void * restrict vy, int #endif } #else - (void)nb; // scalar quantize_row_q8_0_reference(x, y, k); #endif @@ -1513,7 +1476,6 @@ static void quantize_row_q8_1(const float * restrict x, void * restrict vy, int #endif } #else - (void)nb; // scalar quantize_row_q8_1_reference(x, y, k); #endif @@ -2679,6 +2641,41 @@ static void ggml_vec_dot_q4_0_q8_0(const int n, float * restrict s, const void * } *s = hsum_float_4x4(acc_0, acc_1, acc_2, acc_3); +#elif defined(__riscv_v_intrinsic) + float sumf = 0.0; + + size_t vl = __riscv_vsetvl_e8m1(qk/2); + + for (int i = 0; i < nb; i++) { + vuint8m1_t tx = __riscv_vle8_v_u8m1(x[i].qs, vl); + + vint8m1_t y0 = __riscv_vle8_v_i8m1(y[i].qs, vl); + vint8m1_t y1 = __riscv_vle8_v_i8m1(y[i].qs+16, vl); + + vuint8m1_t x_a = __riscv_vand_vx_u8m1(tx, 0x0F, vl); + vuint8m1_t x_l = __riscv_vsrl_vx_u8m1(tx, 0x04, vl); + + vint8m1_t x_ai = __riscv_vreinterpret_v_u8m1_i8m1(x_a); + vint8m1_t x_li = __riscv_vreinterpret_v_u8m1_i8m1(x_l); + + vint8m1_t v0 = __riscv_vsub_vx_i8m1(x_ai, 8, vl); + vint8m1_t v1 = __riscv_vsub_vx_i8m1(x_li, 8, vl); + + vint16m2_t vec_mul1 = __riscv_vwmul_vv_i16m2(v0, y0, vl); + vint16m2_t vec_mul2 = __riscv_vwmul_vv_i16m2(v1, y1, vl); + + vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); + + vint32m1_t vs1 = __riscv_vwredsum_vs_i16m2_i32m1(vec_mul1, vec_zero, vl); + vint32m1_t vs2 = __riscv_vwredsum_vs_i16m2_i32m1(vec_mul2, vec_zero, vl); + + int sumi = __riscv_vmv_x_s_i32m1_i32(vs1); + sumi += __riscv_vmv_x_s_i32m1_i32(vs2); + + sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d); + } + + *s = sumf; #else // scalar float sumf = 0.0; @@ -2805,6 +2802,38 @@ static void ggml_vec_dot_q4_1_q8_1(const int n, float * restrict s, const void * } *s = hsum_float_8(acc) + summs; +#elif defined(__riscv_v_intrinsic) + float sumf = 0.0; + + size_t vl = __riscv_vsetvl_e8m1(qk/2); + + for (int i = 0; i < nb; i++) { + vuint8m1_t tx = __riscv_vle8_v_u8m1(x[i].qs, vl); + + vint8m1_t y0 = __riscv_vle8_v_i8m1(y[i].qs, vl); + vint8m1_t y1 = __riscv_vle8_v_i8m1(y[i].qs+16, vl); + + vuint8m1_t x_a = __riscv_vand_vx_u8m1(tx, 0x0F, vl); + vuint8m1_t x_l = __riscv_vsrl_vx_u8m1(tx, 0x04, vl); + + vint8m1_t v0 = __riscv_vreinterpret_v_u8m1_i8m1(x_a); + vint8m1_t v1 = __riscv_vreinterpret_v_u8m1_i8m1(x_l); + + vint16m2_t vec_mul1 = __riscv_vwmul_vv_i16m2(v0, y0, vl); + vint16m2_t vec_mul2 = __riscv_vwmul_vv_i16m2(v1, y1, vl); + + vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); + + vint32m1_t vs1 = __riscv_vwredsum_vs_i16m2_i32m1(vec_mul1, vec_zero, vl); + vint32m1_t vs2 = __riscv_vwredsum_vs_i16m2_i32m1(vec_mul2, vec_zero, vl); + + int sumi = __riscv_vmv_x_s_i32m1_i32(vs1); + sumi += __riscv_vmv_x_s_i32m1_i32(vs2); + + sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; + } + + *s = sumf; #else // scalar float sumf = 0.0; @@ -3039,6 +3068,76 @@ static void ggml_vec_dot_q5_0_q8_0(const int n, float * restrict s, const void * } *s = hsum_float_8(acc); +#elif defined(__riscv_v_intrinsic) + float sumf = 0.0; + + uint32_t qh; + + // These temp values are for masking and shift operations + uint32_t temp_1[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + uint32_t temp_2[16] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, + 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000}; + + size_t vl = __riscv_vsetvl_e8m1(qk/2); + + for (int i = 0; i < nb; i++) { + memcpy(&qh, x[i].qh, sizeof(uint32_t)); + + // temporary registers + vuint32m4_t vt_1 = __riscv_vle32_v_u32m4(temp_2, vl); + vuint32m4_t vt_2 = __riscv_vle32_v_u32m4(temp_1, vl); + vuint32m4_t vt_3 = __riscv_vsll_vx_u32m4(vt_1, 16, vl); + vuint32m4_t vt_4 = __riscv_vadd_vx_u32m4(vt_2, 12, vl); + + // ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4; + vuint32m4_t xha_0 = __riscv_vand_vx_u32m4(vt_1, qh, vl); + vuint32m4_t xhr_0 = __riscv_vsrl_vv_u32m4(xha_0, vt_2, vl); + vuint32m4_t xhl_0 = __riscv_vsll_vx_u32m4(xhr_0, 4, vl); + + // ((qh & (1u << (j + 16))) >> (j + 12)); + vuint32m4_t xha_1 = __riscv_vand_vx_u32m4(vt_3, qh, vl); + vuint32m4_t xhl_1 = __riscv_vsrl_vv_u32m4(xha_1, vt_4, vl); + + // narrowing + vuint16m2_t xhc_0 = __riscv_vncvt_x_x_w_u16m2(xhl_0, vl); + vuint8m1_t xh_0 = __riscv_vncvt_x_x_w_u8m1(xhc_0, vl); + + vuint16m2_t xhc_1 = __riscv_vncvt_x_x_w_u16m2(xhl_1, vl); + vuint8m1_t xh_1 = __riscv_vncvt_x_x_w_u8m1(xhc_1, vl); + + // load + vuint8m1_t tx = __riscv_vle8_v_u8m1(x[i].qs, vl); + + vint8m1_t y0 = __riscv_vle8_v_i8m1(y[i].qs, vl); + vint8m1_t y1 = __riscv_vle8_v_i8m1(y[i].qs+16, vl); + + vuint8m1_t x_at = __riscv_vand_vx_u8m1(tx, 0x0F, vl); + vuint8m1_t x_lt = __riscv_vsrl_vx_u8m1(tx, 0x04, vl); + + vuint8m1_t x_a = __riscv_vor_vv_u8m1(x_at, xh_0, vl); + vuint8m1_t x_l = __riscv_vor_vv_u8m1(x_lt, xh_1, vl); + + vint8m1_t x_ai = __riscv_vreinterpret_v_u8m1_i8m1(x_a); + vint8m1_t x_li = __riscv_vreinterpret_v_u8m1_i8m1(x_l); + + vint8m1_t v0 = __riscv_vsub_vx_i8m1(x_ai, 16, vl); + vint8m1_t v1 = __riscv_vsub_vx_i8m1(x_li, 16, vl); + + vint16m2_t vec_mul1 = __riscv_vwmul_vv_i16m2(v0, y0, vl); + vint16m2_t vec_mul2 = __riscv_vwmul_vv_i16m2(v1, y1, vl); + + vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); + + vint32m1_t vs1 = __riscv_vwredsum_vs_i16m2_i32m1(vec_mul1, vec_zero, vl); + vint32m1_t vs2 = __riscv_vwredsum_vs_i16m2_i32m1(vec_mul2, vec_zero, vl); + + int sumi = __riscv_vmv_x_s_i32m1_i32(vs1); + sumi += __riscv_vmv_x_s_i32m1_i32(vs2); + + sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi; + } + + *s = sumf; #else // scalar float sumf = 0.0; @@ -3295,6 +3394,72 @@ static void ggml_vec_dot_q5_1_q8_1(const int n, float * restrict s, const void * } *s = hsum_float_8(acc) + summs; +#elif defined(__riscv_v_intrinsic) + float sumf = 0.0; + + uint32_t qh; + + // These temp values are for shift operations + uint32_t temp_1[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + + size_t vl = __riscv_vsetvl_e8m1(qk/2); + + for (int i = 0; i < nb; i++) { + memcpy(&qh, x[i].qh, sizeof(uint32_t)); + + // temporary registers + vuint32m4_t vt_1 = __riscv_vle32_v_u32m4(temp_1, vl); + vuint32m4_t vt_2 = __riscv_vadd_vx_u32m4(vt_1, 12, vl); + + // load qh + vuint32m4_t vqh = __riscv_vmv_v_x_u32m4(qh, vl); + + // ((qh >> (j + 0)) << 4) & 0x10; + vuint32m4_t xhr_0 = __riscv_vsrl_vv_u32m4(vqh, vt_1, vl); + vuint32m4_t xhl_0 = __riscv_vsll_vx_u32m4(xhr_0, 4, vl); + vuint32m4_t xha_0 = __riscv_vand_vx_u32m4(xhl_0, 0x10, vl); + + // ((qh >> (j + 12)) ) & 0x10; + vuint32m4_t xhr_1 = __riscv_vsrl_vv_u32m4(vqh, vt_2, vl); + vuint32m4_t xha_1 = __riscv_vand_vx_u32m4(xhr_1, 0x10, vl); + + // narrowing + vuint16m2_t xhc_0 = __riscv_vncvt_x_x_w_u16m2(xha_0, vl); + vuint8m1_t xh_0 = __riscv_vncvt_x_x_w_u8m1(xhc_0, vl); + + vuint16m2_t xhc_1 = __riscv_vncvt_x_x_w_u16m2(xha_1, vl); + vuint8m1_t xh_1 = __riscv_vncvt_x_x_w_u8m1(xhc_1, vl); + + // load + vuint8m1_t tx = __riscv_vle8_v_u8m1(x[i].qs, vl); + + vint8m1_t y0 = __riscv_vle8_v_i8m1(y[i].qs, vl); + vint8m1_t y1 = __riscv_vle8_v_i8m1(y[i].qs+16, vl); + + vuint8m1_t x_at = __riscv_vand_vx_u8m1(tx, 0x0F, vl); + vuint8m1_t x_lt = __riscv_vsrl_vx_u8m1(tx, 0x04, vl); + + vuint8m1_t x_a = __riscv_vor_vv_u8m1(x_at, xh_0, vl); + vuint8m1_t x_l = __riscv_vor_vv_u8m1(x_lt, xh_1, vl); + + vint8m1_t v0 = __riscv_vreinterpret_v_u8m1_i8m1(x_a); + vint8m1_t v1 = __riscv_vreinterpret_v_u8m1_i8m1(x_l); + + vint16m2_t vec_mul1 = __riscv_vwmul_vv_i16m2(v0, y0, vl); + vint16m2_t vec_mul2 = __riscv_vwmul_vv_i16m2(v1, y1, vl); + + vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl); + + vint32m1_t vs1 = __riscv_vwredsum_vs_i16m2_i32m1(vec_mul1, vec_zero, vl); + vint32m1_t vs2 = __riscv_vwredsum_vs_i16m2_i32m1(vec_mul2, vec_zero, vl); + + int sumi = __riscv_vmv_x_s_i32m1_i32(vs1); + sumi += __riscv_vmv_x_s_i32m1_i32(vs2); + + sumf += (GGML_FP16_TO_FP32(x[i].d)*y[i].d)*sumi + GGML_FP16_TO_FP32(x[i].m)*y[i].s; + } + + *s = sumf; #else // scalar float sumf = 0.0; @@ -3406,6 +3571,26 @@ static void ggml_vec_dot_q8_0_q8_0(const int n, float * restrict s, const void * } *s = hsum_float_8(acc); +#elif defined(__riscv_v_intrinsic) + float sumf = 0.0; + size_t vl = __riscv_vsetvl_e8m1(qk); + + for (int i = 0; i < nb; i++) { + // load elements + vint8m1_t bx = __riscv_vle8_v_i8m1(x[i].qs, vl); + vint8m1_t by = __riscv_vle8_v_i8m1(y[i].qs, vl); + + vint16m2_t vw_mul = __riscv_vwmul_vv_i16m2(bx, by, vl); + + vint32m1_t v_zero = __riscv_vmv_v_x_i32m1(0, vl); + vint32m1_t v_sum = __riscv_vwredsum_vs_i16m2_i32m1(vw_mul, v_zero, vl); + + int sumi = __riscv_vmv_x_s_i32m1_i32(v_sum); + + sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)); + } + + *s = sumf; #else // scalar float sumf = 0.0; @@ -4106,16 +4291,11 @@ int64_t ggml_nrows(const struct ggml_tensor * tensor) { } size_t ggml_nbytes(const struct ggml_tensor * tensor) { - static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function"); - - // this should handle cases where the tensor is not contiguous in memory - // probaby just: - // - // return tensor->ne[3]*tensor->nb[3] - // - // is enough, but just in case, adding the second part - - return MAX(tensor->ne[3]*tensor->nb[3], (ggml_nelements(tensor)*ggml_type_size(tensor->type))/ggml_blck_size(tensor->type)); + size_t nbytes = tensor->ne[0]*tensor->nb[0]/ggml_blck_size(tensor->type); + for (int i = 1; i < GGML_MAX_DIMS; ++i) { + nbytes += (tensor->ne[i] - 1)*tensor->nb[i]; + } + return nbytes; } size_t ggml_nbytes_pad(const struct ggml_tensor * tensor) { @@ -4569,36 +4749,51 @@ static struct ggml_tensor * ggml_new_tensor_impl( enum ggml_type type, int n_dims, const int64_t * ne, - void * data) { + struct ggml_tensor * view_src, + size_t view_offs) { assert(n_dims >= 1 && n_dims <= GGML_MAX_DIMS); - size_t data_size = 0; + // find the base tensor and absolute offset + if (view_src != NULL && view_src->view_src != NULL) { + view_offs += view_src->view_offs; + view_src = view_src->view_src; + } - if (data == NULL && !ctx->no_alloc) { - data_size += ggml_type_size(type)*(ne[0]/ggml_blck_size(type)); - for (int i = 1; i < n_dims; i++) { - data_size *= ne[i]; + size_t data_size = ggml_type_size(type)*(ne[0]/ggml_blck_size(type)); + for (int i = 1; i < n_dims; i++) { + data_size *= ne[i]; + } + + GGML_ASSERT(view_src == NULL || data_size + view_offs <= ggml_nbytes(view_src)); + + void * data = view_src != NULL ? view_src->data : NULL; + if (data != NULL) { + data = (char *) data + view_offs; + } + + size_t obj_alloc_size = 0; + + if (view_src == NULL && ctx->no_alloc == false) { + if (ctx->scratch.data != NULL) { + // allocate tensor data in the scratch buffer + if (ctx->scratch.offs + data_size > ctx->scratch.size) { + GGML_PRINT("%s: not enough space in the scratch memory pool (needed %zu, available %zu)\n", + __func__, ctx->scratch.offs + data_size, ctx->scratch.size); + assert(false); + return NULL; + } + + data = (char * const) ctx->scratch.data + ctx->scratch.offs; + + ctx->scratch.offs += data_size; + } else { + // allocate tensor data in the context's memory pool + obj_alloc_size = data_size; } } - if (ctx->scratch.data != NULL && data == NULL) { - // allocate tensor data in the scratch buffer - if (ctx->scratch.offs + data_size > ctx->scratch.size) { - GGML_PRINT("%s: not enough space in the scratch memory pool (needed %zu, available %zu)\n", - __func__, ctx->scratch.offs + data_size, ctx->scratch.size); - assert(false); - return NULL; - } - - data = (char * const) ctx->scratch.data + ctx->scratch.offs; - - ctx->scratch.offs += data_size; - - data_size = 0; - } - - struct ggml_object * const obj_new = ggml_new_object(ctx, GGML_OBJECT_TENSOR, GGML_TENSOR_SIZE + data_size); + struct ggml_object * const obj_new = ggml_new_object(ctx, GGML_OBJECT_TENSOR, GGML_TENSOR_SIZE + obj_alloc_size); // TODO: for recoverable errors, we would need to free the data allocated from the scratch buffer here @@ -4618,7 +4813,9 @@ static struct ggml_tensor * ggml_new_tensor_impl( /*.perf_runs =*/ 0, /*.perf_cycles =*/ 0, /*.perf_time_us =*/ 0, - /*.data =*/ (data == NULL && !ctx->no_alloc) ? (void *)(result + 1) : data, + /*.view_src =*/ view_src, + /*.view_offs =*/ view_offs, + /*.data =*/ obj_alloc_size > 0 ? (void *)(result + 1) : data, /*.name =*/ { 0 }, /*.extra =*/ NULL, /*.padding =*/ { 0 }, @@ -4642,28 +4839,12 @@ static struct ggml_tensor * ggml_new_tensor_impl( return result; } -static void ggml_set_op_params(struct ggml_tensor * tensor, const void * params, size_t params_size) { - GGML_ASSERT(tensor != NULL); // silence -Warray-bounds warnings - assert(params_size <= GGML_MAX_OP_PARAMS); - memcpy(tensor->op_params, params, params_size); -} - -static int32_t ggml_get_op_params_i32(const struct ggml_tensor * tensor, uint32_t i) { - assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t)); - return ((const int32_t *)(tensor->op_params))[i]; -} - -static void ggml_set_op_params_i32(struct ggml_tensor * tensor, uint32_t i, int32_t value) { - assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t)); - ((int32_t *)(tensor->op_params))[i] = value; -} - struct ggml_tensor * ggml_new_tensor( struct ggml_context * ctx, enum ggml_type type, int n_dims, const int64_t * ne) { - return ggml_new_tensor_impl(ctx, type, n_dims, ne, NULL); + return ggml_new_tensor_impl(ctx, type, n_dims, ne, NULL, 0); } struct ggml_tensor * ggml_new_tensor_1d( @@ -4728,7 +4909,23 @@ struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value) { } struct ggml_tensor * ggml_dup_tensor(struct ggml_context * ctx, const struct ggml_tensor * src) { - return ggml_new_tensor_impl(ctx, src->type, src->n_dims, src->ne, NULL); + return ggml_new_tensor(ctx, src->type, src->n_dims, src->ne); +} + +static void ggml_set_op_params(struct ggml_tensor * tensor, const void * params, size_t params_size) { + GGML_ASSERT(tensor != NULL); // silence -Warray-bounds warnings + assert(params_size <= GGML_MAX_OP_PARAMS); + memcpy(tensor->op_params, params, params_size); +} + +static int32_t ggml_get_op_params_i32(const struct ggml_tensor * tensor, uint32_t i) { + assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t)); + return ((const int32_t *)(tensor->op_params))[i]; +} + +static void ggml_set_op_params_i32(struct ggml_tensor * tensor, uint32_t i, int32_t value) { + assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t)); + ((int32_t *)(tensor->op_params))[i] = value; } struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor) { @@ -5004,13 +5201,6 @@ struct ggml_tensor * ggml_set_name(struct ggml_tensor * tensor, const char * nam return tensor; } -#ifdef __GNUC__ -#ifdef __MINGW32__ -__attribute__((gnu_format(printf, 2, 3))) -#else -__attribute__((format(printf, 2, 3))) -#endif -#endif struct ggml_tensor * ggml_format_name(struct ggml_tensor * tensor, const char * fmt, ...) { va_list args; va_start(args, fmt); @@ -5021,14 +5211,13 @@ struct ggml_tensor * ggml_format_name(struct ggml_tensor * tensor, const char * struct ggml_tensor * ggml_view_tensor( struct ggml_context * ctx, - const struct ggml_tensor * src) { - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, src->type, src->n_dims, src->ne, src->data); + struct ggml_tensor * src) { + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, src->type, src->n_dims, src->ne, src, 0); ggml_format_name(result, "%s (view)", src->name); - result->nb[0] = src->nb[0]; - result->nb[1] = src->nb[1]; - result->nb[2] = src->nb[2]; - result->nb[3] = src->nb[3]; + for (int i = 0; i < GGML_MAX_DIMS; i++) { + result->nb[i] = src->nb[i]; + } return result; } @@ -5601,7 +5790,7 @@ struct ggml_tensor * ggml_repeat_back( // ggml_concat -struct ggml_tensor* ggml_concat( +struct ggml_tensor * ggml_concat( struct ggml_context* ctx, struct ggml_tensor* a, struct ggml_tensor* b) { @@ -5868,7 +6057,8 @@ struct ggml_tensor * ggml_rms_norm_inplace( struct ggml_tensor * ggml_rms_norm_back( struct ggml_context * ctx, struct ggml_tensor * a, - struct ggml_tensor * b) { + struct ggml_tensor * b, + float eps) { bool is_node = false; if (a->grad) { @@ -5878,6 +6068,8 @@ struct ggml_tensor * ggml_rms_norm_back( struct ggml_tensor * result = ggml_dup_tensor(ctx, a); + ggml_set_op_params(result, &eps, sizeof(eps)); + result->op = GGML_OP_RMS_NORM_BACK; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; result->src[0] = a; @@ -6207,7 +6399,7 @@ struct ggml_tensor * ggml_reshape( //GGML_ASSERT(false); } - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, b->n_dims, b->ne, a->data); + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, b->n_dims, b->ne, a, 0); ggml_format_name(result, "%s (reshaped)", a->name); result->op = GGML_OP_RESHAPE; @@ -6231,7 +6423,7 @@ struct ggml_tensor * ggml_reshape_1d( } const int64_t ne[1] = { ne0 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 1, ne, a->data); + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 1, ne, a, 0); ggml_format_name(result, "%s (reshaped)", a->name); result->op = GGML_OP_RESHAPE; @@ -6256,7 +6448,7 @@ struct ggml_tensor * ggml_reshape_2d( } const int64_t ne[2] = { ne0, ne1 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 2, ne, a->data); + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 2, ne, a, 0); ggml_format_name(result, "%s (reshaped)", a->name); result->op = GGML_OP_RESHAPE; @@ -6282,7 +6474,7 @@ struct ggml_tensor * ggml_reshape_3d( } const int64_t ne[3] = { ne0, ne1, ne2 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, a->data); + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, a, 0); ggml_format_name(result, "%s (reshaped)", a->name); result->op = GGML_OP_RESHAPE; @@ -6292,7 +6484,6 @@ struct ggml_tensor * ggml_reshape_3d( return result; } - struct ggml_tensor * ggml_reshape_4d( struct ggml_context * ctx, struct ggml_tensor * a, @@ -6310,7 +6501,7 @@ struct ggml_tensor * ggml_reshape_4d( } const int64_t ne[4] = { ne0, ne1, ne2, ne3 }; - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 4, ne, a->data); + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 4, ne, a, 0); ggml_format_name(result, "%s (reshaped)", a->name); result->op = GGML_OP_RESHAPE; @@ -6320,34 +6511,12 @@ struct ggml_tensor * ggml_reshape_4d( return result; } -// ggml_view_1d - -static struct ggml_tensor * ggml_view_tensor_offset( +static struct ggml_tensor * ggml_view_impl( struct ggml_context * ctx, struct ggml_tensor * a, int n_dims, const int64_t * ne, size_t offset) { - // don't calculate an offset from an unallocated tensor - void * data = NULL; - if (a->data != NULL) { - data = (char *) a->data + offset; - } - - struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, n_dims, ne, data); - - ggml_format_name(result, "%s (view)", a->name); - - ggml_set_op_params(result, &offset, sizeof(offset)); - - return result; -} - -struct ggml_tensor * ggml_view_1d( - struct ggml_context * ctx, - struct ggml_tensor * a, - int64_t ne0, - size_t offset) { bool is_node = false; @@ -6355,7 +6524,10 @@ struct ggml_tensor * ggml_view_1d( is_node = true; } - struct ggml_tensor * result = ggml_view_tensor_offset(ctx, a, 1, &ne0, offset); + struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, n_dims, ne, a, offset); + ggml_format_name(result, "%s (view)", a->name); + + ggml_set_op_params(result, &offset, sizeof(offset)); result->op = GGML_OP_VIEW; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; @@ -6364,6 +6536,19 @@ struct ggml_tensor * ggml_view_1d( return result; } +// ggml_view_1d + +struct ggml_tensor * ggml_view_1d( + struct ggml_context * ctx, + struct ggml_tensor * a, + int64_t ne0, + size_t offset) { + + struct ggml_tensor * result = ggml_view_impl(ctx, a, 1, &ne0, offset); + + return result; +} + // ggml_view_2d struct ggml_tensor * ggml_view_2d( @@ -6374,24 +6559,14 @@ struct ggml_tensor * ggml_view_2d( size_t nb1, size_t offset) { - bool is_node = false; + const int64_t ne[2] = { ne0, ne1 }; - if (a->grad) { - is_node = true; - } - - const int64_t ne[GGML_MAX_DIMS] = { ne0, ne1, 1, 1 }; - - struct ggml_tensor * result = ggml_view_tensor_offset(ctx, a, 2, ne, offset); + struct ggml_tensor * result = ggml_view_impl(ctx, a, 2, ne, offset); result->nb[1] = nb1; result->nb[2] = result->nb[1]*ne1; result->nb[3] = result->nb[2]; - result->op = GGML_OP_VIEW; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - return result; } @@ -6407,24 +6582,14 @@ struct ggml_tensor * ggml_view_3d( size_t nb2, size_t offset) { - bool is_node = false; + const int64_t ne[3] = { ne0, ne1, ne2 }; - if (a->grad) { - is_node = true; - } - - const int64_t ne[GGML_MAX_DIMS] = { ne0, ne1, ne2, 1 }; - - struct ggml_tensor * result = ggml_view_tensor_offset(ctx, a, 3, ne, offset); + struct ggml_tensor * result = ggml_view_impl(ctx, a, 3, ne, offset); result->nb[1] = nb1; result->nb[2] = nb2; result->nb[3] = result->nb[2]*ne2; - result->op = GGML_OP_VIEW; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - return result; } @@ -6442,24 +6607,14 @@ struct ggml_tensor * ggml_view_4d( size_t nb3, size_t offset) { - bool is_node = false; + const int64_t ne[4] = { ne0, ne1, ne2, ne3 }; - if (a->grad) { - is_node = true; - } - - const int64_t ne[GGML_MAX_DIMS] = { ne0, ne1, ne2, ne3 }; - - struct ggml_tensor * result = ggml_view_tensor_offset(ctx, a, 4, ne, offset); + struct ggml_tensor * result = ggml_view_impl(ctx, a, 4, ne, offset); result->nb[1] = nb1; result->nb[2] = nb2; result->nb[3] = nb3; - result->op = GGML_OP_VIEW; - result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; - result->src[0] = a; - return result; } @@ -6646,7 +6801,7 @@ static struct ggml_tensor * ggml_diag_mask_inf_impl( struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - int32_t params[] = { n_past, inplace ? 1 : 0 }; + int32_t params[] = { n_past }; ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_DIAG_MASK_INF; @@ -6663,7 +6818,6 @@ struct ggml_tensor * ggml_diag_mask_inf( return ggml_diag_mask_inf_impl(ctx, a, n_past, false); } - struct ggml_tensor * ggml_diag_mask_inf_inplace( struct ggml_context * ctx, struct ggml_tensor * a, @@ -6686,7 +6840,7 @@ static struct ggml_tensor * ggml_diag_mask_zero_impl( struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); - int32_t params[] = { n_past, inplace ? 1 : 0 }; + int32_t params[] = { n_past }; ggml_set_op_params(result, params, sizeof(params)); result->op = GGML_OP_DIAG_MASK_ZERO; @@ -7475,6 +7629,8 @@ static struct ggml_tensor * ggml_add_rel_pos_impl( } struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a); + ggml_set_op_params_i32(result, 0, inplace ? 1 : 0); + result->op = GGML_OP_ADD_REL_POS; result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL; result->src[0] = a; @@ -9452,6 +9608,8 @@ static void ggml_compute_forward_div_f32( #ifdef GGML_USE_ACCELERATE + UNUSED(ggml_vec_div_f32); + vDSP_vdiv( (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1, (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1, @@ -10758,7 +10916,8 @@ static void ggml_compute_forward_rms_norm_back_f32( GGML_TENSOR_BINARY_OP_LOCALS; - const float eps = 1e-6f; // TODO: make this a parameter + float eps; + memcpy(&eps, dst->op_params, sizeof(float)); // TODO: optimize for (int64_t i03 = 0; i03 < ne03; i03++) { @@ -11936,8 +12095,8 @@ static void ggml_compute_forward_diag_mask_f32( const int ith = params->ith; const int nth = params->nth; - const int n_past = ((int32_t *) dst->op_params)[0]; - const bool inplace = (bool)((int32_t *) dst->op_params)[1]; + const int n_past = ((int32_t *) dst->op_params)[0]; + const bool inplace = src0->data == dst->data; GGML_ASSERT(n_past >= 0); @@ -12148,6 +12307,7 @@ static void ggml_compute_forward_soft_max_back_f32( // dx = J * dy // dxk = sum_i(Jki * dyi) // dxk = sum_i(-yk*yi * dyi) - (-yk*yk)*dyk + (yk - yk*yk)*dyk + // dxk = sum_i(-yk*yi * dyi) + yk*yk*dyk + yk*dyk - yk*yk*dyk // dxk = sum_i(-yk*yi * dyi) + yk*dyk // dxk = -yk * sum_i(yi * dyi) + yk*dyk // dxk = -yk * dot(y, dy) + yk*dyk @@ -13938,7 +14098,7 @@ static void ggml_compute_forward_flash_attn_f32( vvexpf(S, S, &Mup); ggml_vec_sum_f32(Mup, &sum, S); #else - uint16_t scvt[GGML_SOFT_MAX_UNROLL]; + uint16_t scvt[GGML_SOFT_MAX_UNROLL]; UNUSED(scvt); ggml_float sump[GGML_SOFT_MAX_UNROLL] = { 0.0 }; for (int i = 0; i < Mup; i += GGML_SOFT_MAX_UNROLL) { @@ -13948,9 +14108,13 @@ static void ggml_compute_forward_flash_attn_f32( if (SS[j] == -INFINITY) { SS[j] = 0.0f; } else { +#ifndef GGML_FLASH_ATTN_EXP_FP16 + const float val = expf(SS[j] - max); +#else ggml_fp16_t s = GGML_FP32_TO_FP16(SS[j] - max); memcpy(&scvt[j], &s, sizeof(uint16_t)); const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt[j]]); +#endif sump[j] += (ggml_float)val; SS[j] = val; } @@ -14528,7 +14692,7 @@ static void ggml_compute_forward_flash_attn_back_f32( vvexpf(SM, SM, &Mup); ggml_vec_sum_f32(Mup, &sum, SM); #else - uint16_t scvt[GGML_SOFT_MAX_UNROLL]; + uint16_t scvt[GGML_SOFT_MAX_UNROLL]; UNUSED(scvt); ggml_float sump[GGML_SOFT_MAX_UNROLL] = { 0.0 }; for (int i = 0; i < Mup; i += GGML_SOFT_MAX_UNROLL) { @@ -14539,9 +14703,13 @@ static void ggml_compute_forward_flash_attn_back_f32( if (SR[j] == -INFINITY) { SW[j] = 0.0f; } else { +#ifndef GGML_FLASH_ATTN_EXP_FP16 + const float val = expf(SR[j] - max); +#else ggml_fp16_t s = GGML_FP32_TO_FP16(SR[j] - max); memcpy(&scvt[j], &s, sizeof(uint16_t)); const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt[j]]); +#endif sump[j] += (ggml_float)val; SW[j] = val; } @@ -14987,11 +15155,8 @@ static void ggml_compute_forward_add_rel_pos_f32( const struct ggml_tensor * src1, const struct ggml_tensor * src2, struct ggml_tensor * dst) { - GGML_ASSERT(ggml_are_same_shape(src0, dst)); - GGML_ASSERT(src0->nb[0] == dst->nb[0] && src0->nb[1] == dst->nb[1] - && src0->nb[2] == dst->nb[2] && src0->nb[3] == dst->nb[3]); - const bool inplace = dst->data == src0->data; + const bool inplace = (bool) ((int32_t *) dst->op_params)[0]; if (!inplace && params->type == GGML_TASK_INIT) { memcpy((char *) dst->data, (char *) src0->data, ggml_nbytes(dst)); return; @@ -15282,6 +15447,8 @@ static void ggml_compute_forward_cross_entropy_loss_f32( const int nc = src0->ne[0]; const int nr = ggml_nrows(src0); + GGML_ASSERT(params->wsize >= sizeof(float) * (nth + nth * nc)); + if (params->type == GGML_TASK_INIT) { if (ith == 0) { memset(sums, 0, sizeof(float) * (nth + nth * nc)); @@ -15293,7 +15460,7 @@ static void ggml_compute_forward_cross_entropy_loss_f32( if (ith == 0) { float * dp = (float *) dst->data; ggml_vec_sum_f32(nth, dp, sums); - dp[0] *= -1.0f; + dp[0] *= -1.0f / (float) nr; } return; } @@ -15310,7 +15477,7 @@ static void ggml_compute_forward_cross_entropy_loss_f32( for (int i1 = ir0; i1 < ir1; i1++) { float * s0 = (float *)((char *) src0->data + i1*src0->nb[1]); float * s1 = (float *)((char *) src1->data + i1*src1->nb[1]); - float * st = (float *) params->wdata + nth + ith*nc; + float * st = ((float *) params->wdata) + nth + ith*nc; #ifndef NDEBUG for (int i = 0; i < nc; ++i) { @@ -15325,15 +15492,19 @@ static void ggml_compute_forward_cross_entropy_loss_f32( float max = -INFINITY; ggml_vec_max_f32(nc, &max, s0); - uint16_t scvt; + uint16_t scvt; UNUSED(scvt); for (int i = 0; i < nc; i++) { if (s0[i] == -INFINITY) { st[i] = 0.0f; } else { - // const float val = (s0[i] == -INFINITY) ? 0.0 : exp(s0[i] - max); +#ifndef GGML_CROSS_ENTROPY_EXP_FP16 + const float s = s0[i] - max; + const float val = expf(s); +#else ggml_fp16_t s = GGML_FP32_TO_FP16(s0[i] - max); memcpy(&scvt, &s, sizeof(scvt)); const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt]); +#endif sum += (ggml_float)val; st[i] = val; } @@ -15349,7 +15520,9 @@ static void ggml_compute_forward_cross_entropy_loss_f32( ggml_vec_log_f32(nc, st, st); ggml_vec_mul_f32(nc, st, st, s1); - ggml_vec_sum_f32(nc, sums + ith, st); + float st_sum = 0; + ggml_vec_sum_f32(nc, &st_sum, st); + sums[ith] += st_sum; #ifndef NDEBUG for (int i = 0; i < nc; ++i) { @@ -15399,7 +15572,7 @@ static void ggml_compute_forward_cross_entropy_loss_back_f32( return; } - const float eps = 1e-9f; + const double eps = 1e-9; // TODO: handle transposed/permuted matrices const int64_t nc = src0->ne[0]; @@ -15418,7 +15591,6 @@ static void ggml_compute_forward_cross_entropy_loss_back_f32( float * ds0 = (float *)((char *) dst->data + i1*dst->nb[1]); float * s0 = (float *)((char *) src0->data + i1*src0->nb[1]); float * s1 = (float *)((char *) src1->data + i1*src1->nb[1]); - float * sm = (float *) params->wdata + ith*nc; #ifndef NDEBUG for (int i = 0; i < nc; ++i) { @@ -15427,54 +15599,6 @@ static void ggml_compute_forward_cross_entropy_loss_back_f32( assert(!isnan(s1[i])); } #endif - // step by step explanation: - { - //float * sums = (float *) params->wdata; - - // forward pass with annotated gradients from backward pass - // (built by going in reverse operation order, adding to gradients of current operation args) - // st0 = exp(s0-max(s0)) grad[st0] = grad[st1]*(1.0 - eps)/sum - // from softmax_back: grad[s0] = st1_k * (grad[st1]_k - dot(st1, grad[st1])) - // ggml_vec_scale_f32(nc, st, sum); // st1 = st0*/sum = softmax(s0) grad[st1] = grad[st2]*(1.0 - eps) - // ggml_vec_scale_f32(nc, st, (1.0f - eps)); // st2 = st1*(1.0 - eps) grad[st2] = grad[st3] - // ggml_vec_add1_f32(nc, st, st, eps); // st3 = st2 + eps grad[st3] = grad[st4]/st3 - // ggml_vec_log_f32(nc, st, st); // st4 = log(st3) grad[st4] = grad[st5] * s1 - // ggml_vec_mul_f32(nc, st, st, s1); // st5 = st4 * s1 grad[st5] = grad[sums[ith]] - // ggml_vec_sum_f32(nc, sums + ith, st); // sums[ith] = st5 grad[sums[ith]] = grad[cross_entropy_loss] = -grad[cel] - - // substitute into grad[st1], because we can reuse softmax_back from this point on - // grad[st1] = -grad[cel]*s1*(1.0 - eps)/(eps + softmax(s0)*(1.0 - eps)) - // postorder: - // grad[st1] := softmax(s0) - // grad[st1] := grad[st1]*(1.0 - eps) - // grad[st1] := grad[st1] + eps - // grad[st1] := s1 / grad[st1] - // grad[st1] := grad[st1]*(1.0-eps)*-grad[cel] - - // src0 gradients by going through softmax_back - // grad[s0] = st1_k * (grad[st1]_k - dot(st1, grad[st1])) - // from softmax_back: - // dxk = yk * (dyk - dot(y, dy)) - // dot_y_dy := dot(y, dy) - // dx := dy - // dx := dx - dot_y_dy - // dx := dx * y - // postorder: - // dot_st1_dst1 := dot(st1, grad[st1]) - // grad[s0] := grad[st1] - // grad[s0] := grad[s0] - dot_st1_dst1 - // grad[s0] := grad[s0] * st1 - - // prepend postorder from grad[st1] directly using grad[s0] as memory location, as we will grad[s0] := grad[st1] - // sm := softmax(s0) - // grad[s0] := sm*(1.0 - eps) - // grad[s0] := grad[s0] + eps - // grad[s0] := s1 / grad[s0] - // grad[s0] := grad[s0]*(1.0-eps)*-grad[cel] - // dot_st1_dst1 := dot(sm, grad[s0]) - // grad[s0] := grad[s0] - dot_st1_dst1 - // grad[s0] := grad[s0] * sm - } // soft_max ggml_float sum = 0.0; @@ -15482,39 +15606,37 @@ static void ggml_compute_forward_cross_entropy_loss_back_f32( float max = -INFINITY; ggml_vec_max_f32(nc, &max, s0); - uint16_t scvt; + uint16_t scvt; UNUSED(scvt); for (int i = 0; i < nc; i++) { if (s0[i] == -INFINITY) { - sm[i] = 0.0f; + ds0[i] = 0.0f; } else { - // const float val = (s0[i] == -INFINITY) ? 0.0 : exp(s0[i] - max); +#ifndef GGML_CROSS_ENTROPY_EXP_FP16 + const float s = s0[i] - max; + const float val = expf(s); +#else ggml_fp16_t s = GGML_FP32_TO_FP16(s0[i] - max); memcpy(&scvt, &s, sizeof(scvt)); const float val = GGML_FP16_TO_FP32(table_exp_f16[scvt]); +#endif sum += (ggml_float)val; - sm[i] = val; + ds0[i] = val; } } assert(sum > 0.0); - sum = 1.0/sum; + sum = (1.0 - eps)/sum; } - float dot_st1_dst1 = 0; - ggml_vec_scale_f32(nc, sm, sum); - ggml_vec_cpy_f32 (nc, ds0, sm); - ggml_vec_scale_f32(nc, ds0, (1.0f - eps)); - ggml_vec_add1_f32 (nc, ds0, ds0, eps); - ggml_vec_div_f32 (nc, ds0, s1, ds0); - ggml_vec_scale_f32(nc, ds0, -(1.0f - eps)*d[0]); - ggml_vec_dot_f32 (nc, &dot_st1_dst1, sm, ds0); - ggml_vec_acc1_f32 (nc, ds0, -dot_st1_dst1); - ggml_vec_mul_f32 (nc, ds0, ds0, sm); + // grad(src0) = (softmax(src0) - src1) * grad(cross_entropy_loss(src0, src1)) / nr + ggml_vec_scale_f32(nc, ds0, sum); + ggml_vec_add1_f32(nc, ds0, ds0, eps); + ggml_vec_sub_f32(nc, ds0, ds0, s1); + ggml_vec_scale_f32(nc, ds0, d[0] / (float) nr); + #ifndef NDEBUG for (int i = 0; i < nc; ++i) { - assert(!isnan(sm[i])); - assert(!isinf(sm[i])); assert(!isnan(ds0[i])); assert(!isinf(ds0[i])); } @@ -16069,9 +16191,12 @@ static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor { // necessary for llama if (src0->grad) { + float eps; + memcpy(&eps, tensor->op_params, sizeof(float)); + src0->grad = ggml_add_impl(ctx, src0->grad, - ggml_rms_norm_back(ctx, src0, tensor->grad), + ggml_rms_norm_back(ctx, src0, tensor->grad, eps), inplace); } } break; @@ -16839,9 +16964,7 @@ struct ggml_cgraph ggml_build_forward(struct ggml_tensor * tensor) { return result; } -struct ggml_cgraph ggml_build_backward(struct ggml_context * ctx, struct ggml_cgraph * gf, bool keep) { - struct ggml_cgraph result = *gf; - +void ggml_build_backward_expand(struct ggml_context * ctx, struct ggml_cgraph * gf, struct ggml_cgraph * gb, bool keep) { GGML_ASSERT(gf->n_nodes > 0); // if we are keeping the gradient graph, we have to detach the gradient nodes from the original graph @@ -16865,15 +16988,19 @@ struct ggml_cgraph ggml_build_backward(struct ggml_context * ctx, struct ggml_cg } } - for (int i = gf->n_nodes - 1; i >= 0; i--) { + for (int i = 0; i < gf->n_nodes; i++) { struct ggml_tensor * node = gf->nodes[i]; if (node->is_param) { GGML_PRINT_DEBUG("%s: found root node %p\n", __func__, (void *) node); - ggml_build_forward_expand(&result, node->grad); + ggml_build_forward_expand(gb, node->grad); } } +} +struct ggml_cgraph ggml_build_backward(struct ggml_context * ctx, struct ggml_cgraph * gf, bool keep) { + struct ggml_cgraph result = *gf; + ggml_build_backward_expand(ctx, gf, &result, keep); return result; } @@ -17549,10 +17676,6 @@ struct ggml_cplan ggml_graph_plan(struct ggml_cgraph * cgraph, int n_threads) { case GGML_OP_CROSS_ENTROPY_LOSS_BACK: { n_tasks = n_threads; - - size_t cur = ggml_type_size(node->type)*node->src[0]->ne[0]*n_tasks; - - work_size = MAX(work_size, cur); } break; case GGML_OP_NONE: { @@ -18430,14 +18553,16 @@ static enum ggml_opt_result ggml_opt_adam( struct ggml_opt_params params, struct ggml_tensor * f, struct ggml_cgraph * gf, - struct ggml_cgraph * gb) { + struct ggml_cgraph * gb, + ggml_opt_callback callback, + void * callback_data) { GGML_ASSERT(ggml_is_scalar(f)); // these will store the parameters we want to optimize struct ggml_tensor * ps[GGML_MAX_PARAMS]; int np = 0; - int nx = 0; + int64_t nx = 0; for (int i = 0; i < gf->n_nodes; ++i) { if (gf->nodes[i]->is_param) { GGML_PRINT_DEBUG("found param %d: grad->op = %d\n", np, gf->nodes[i]->grad->op); @@ -18456,31 +18581,32 @@ static enum ggml_opt_result ggml_opt_adam( } // constants - const float sched = params.adam.sched; - const float decay = params.adam.decay * sched; - const float alpha = params.adam.alpha * sched; + float sched = params.adam.sched; + const float alpha = params.adam.alpha; + const float decay = params.adam.decay * alpha; const float beta1 = params.adam.beta1; const float beta2 = params.adam.beta2; const float eps = params.adam.eps; + const float gclip = params.adam.gclip; + const int decay_min_ndim = params.adam.decay_min_ndim; - float * x = opt->adam.x->data; // view of the parameters - float * g1 = opt->adam.g1->data; // gradient - float * g2 = opt->adam.g2->data; // gradient squared float * m = opt->adam.m->data; // first moment float * v = opt->adam.v->data; // second moment - float * mh = opt->adam.mh->data; // first moment hat - float * vh = opt->adam.vh->data; // second moment hat float * pf = params.past > 0 ? opt->adam.pf->data : NULL; // past function values - // update view - ggml_opt_get_params(np, ps, x); + if (callback) { + callback(callback_data, &sched); + } // compute the function value ggml_graph_reset (gf); ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute_with_ctx(ctx, gb, params.n_threads); + struct ggml_cplan cplan = ggml_graph_plan(gb, params.n_threads); + struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_WORK_BUFFER, cplan.work_size); + cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs; + ggml_graph_compute(gb, &cplan); opt->adam.fx_prev = ggml_get_f32_1d(f, 0); opt->adam.fx_best = opt->adam.fx_prev; @@ -18488,6 +18614,9 @@ static enum ggml_opt_result ggml_opt_adam( pf[opt->iter % params.past] = opt->adam.fx_prev; } + opt->loss_before = opt->adam.fx_prev; + opt->loss_after = opt->adam.fx_prev; + // initialize if (opt->just_initialized) { opt->adam.n_no_improvement = 0; @@ -18520,50 +18649,55 @@ static enum ggml_opt_result ggml_opt_adam( UNUSED(t_start_cpu); { - // update the gradient - ggml_opt_get_grad(np, ps, g1); + float gnorm = 1.0f; + if (gclip > 0.0f) { + // gradient clipping + ggml_float sum = 0.0; + for (int p = 0; p < np; ++p) { + const int64_t ne = ggml_nelements(ps[p]); + for (int64_t j = 0; j < ne; ++j) { + float g = ggml_get_f32_1d(ps[p]->grad, j); + sum += (ggml_float)(g*g); + } + } + ggml_float norm = sqrt(sum); + if (norm > (ggml_float) gclip) { + gnorm = (float) ((ggml_float) gclip / norm); + } + } + const float beta1h = alpha*sched/(1.0f - powf(beta1, opt->iter)); + const float beta2h = 1.0f/(1.0f - powf(beta2, opt->iter)); + int64_t i = 0; + for (int p = 0; p < np; ++p) { + const int64_t ne = ggml_nelements(ps[p]); + const float p_decay = ((ps[p]->n_dims >= decay_min_ndim) ? decay : 0.0f) * sched; + for (int64_t j = 0; j < ne; ++j) { + float x = ggml_get_f32_1d(ps[p], j); + float g = ggml_get_f32_1d(ps[p]->grad, j)*gnorm; + m[i] = m[i]*beta1 + g*(1.0f - beta1); + v[i] = v[i]*beta2 + g*g*(1.0f - beta2); + float mh = m[i]*beta1h; + float vh = v[i]*beta2h; + vh = sqrtf(vh) + eps; + x = x*(1.0f - p_decay) - mh/vh; + ggml_set_f32_1d(ps[p], j, x); + ++i; + } + } + } - // m_t = beta1*m_t-1 + (1 - beta1)*g_t - ggml_vec_scale_f32(nx, m, beta1); - ggml_vec_mad_f32 (nx, m, g1, 1.0f - beta1); - - // g2 = g1^2 - ggml_vec_sqr_f32 (nx, g2, g1); - - // v_t = beta2*v_t-1 + (1 - beta2)*g_t^2 - ggml_vec_scale_f32(nx, v, beta2); - ggml_vec_mad_f32 (nx, v, g2, 1.0f - beta2); - - // m^hat = m_t / (1 - beta1^t) - // v^hat = v_t / (1 - beta2^t) - // x_t = x_t-1 - sched*(alpha*m^hat/(sqrt(v^hat) + eps) + decay*x_t-1) - // x_t = x_t-1 - sched*alpha*m^hat/(sqrt(v^hat) + eps) - sched*decay*x_t-1 - // x_t = x_t-1*(1-sched*decay) - sched*alpha*m^hat/(sqrt(v^hat) + eps) - // x_t = x_t-1*(1-sched*decay) + sched*decay*(-alpha/decay)*m^hat/(sqrt(v^hat) + eps) - // x_t = mix(x_t-1, (-alpha/decay)*m^hat/(sqrt(v^hat) + eps), sched*decay) - ggml_vec_cpy_f32 (nx, mh, m); - ggml_vec_cpy_f32 (nx, vh, v); - - ggml_vec_scale_f32(nx, mh, alpha/(1.0f - powf(beta1, opt->iter))); - ggml_vec_scale_f32(nx, vh, 1.0f/(1.0f - powf(beta2, opt->iter))); - - ggml_vec_sqrt_f32 (nx, vh, vh); - ggml_vec_acc1_f32 (nx, vh, eps); - - ggml_vec_div_f32 (nx, mh, mh, vh); - ggml_vec_scale_f32(nx, x, 1.0f - decay); - ggml_vec_sub_f32 (nx, x, x, mh); - - // update the parameters - ggml_opt_set_params(np, ps, x); + if (callback) { + callback(callback_data, &sched); } ggml_graph_reset (gf); ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute_with_ctx(ctx, gb, params.n_threads); + ggml_graph_compute(gb, &cplan); const float fx = ggml_get_f32_1d(f, 0); + opt->loss_after = fx; + // check convergence if (fabsf(fx - fx_prev[0])/fx < params.adam.eps_f) { @@ -18632,7 +18766,6 @@ struct ggml_lbfgs_iteration_data { }; static enum ggml_opt_result linesearch_backtracking( - struct ggml_context * ctx, const struct ggml_opt_params * params, int nx, float * x, @@ -18644,8 +18777,11 @@ static enum ggml_opt_result linesearch_backtracking( struct ggml_tensor * f, struct ggml_cgraph * gf, struct ggml_cgraph * gb, + struct ggml_cplan * cplan, const int np, - struct ggml_tensor * ps[]) { + struct ggml_tensor * ps[], + ggml_opt_callback callback, + void * callback_data) { int count = 0; float width = 0.0f; @@ -18674,6 +18810,12 @@ static enum ggml_opt_result linesearch_backtracking( dgtest = params->lbfgs.ftol*dginit; while (true) { + if (callback) { + // LBFG-S does not support learning rate -> ignore learning schedule + float sched = 0; + callback(callback_data, &sched); + } + ggml_vec_cpy_f32(nx, x, xp); ggml_vec_mad_f32(nx, x, d, *step); @@ -18684,7 +18826,7 @@ static enum ggml_opt_result linesearch_backtracking( ggml_graph_reset (gf); ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute_with_ctx(ctx, gb, params->n_threads); + ggml_graph_compute(gb, cplan); ggml_opt_get_grad(np, ps, g); @@ -18718,7 +18860,6 @@ static enum ggml_opt_result linesearch_backtracking( // strong Wolfe condition (GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE) return count; } - return count; } } @@ -18744,7 +18885,9 @@ static enum ggml_opt_result ggml_opt_lbfgs( struct ggml_opt_params params, struct ggml_tensor * f, struct ggml_cgraph * gf, - struct ggml_cgraph * gb) { + struct ggml_cgraph * gb, + ggml_opt_callback callback, + void * callback_data) { if (params.lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_WOLFE || params.lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE) { if (params.lbfgs.wolfe <= params.lbfgs.ftol || 1.f <= params.lbfgs.wolfe) { @@ -18776,6 +18919,10 @@ static enum ggml_opt_result ggml_opt_lbfgs( opt->iter = iter; } + struct ggml_cplan cplan = ggml_graph_plan(gb, params.n_threads); + struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_WORK_BUFFER, cplan.work_size); + cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs; + float * x = opt->lbfgs.x->data; // current parameters float * xp = opt->lbfgs.xp->data; // previous parameters float * g = opt->lbfgs.g->data; // current gradient @@ -18797,6 +18944,12 @@ static enum ggml_opt_result ggml_opt_lbfgs( float * lm_s = opt->lbfgs.lms->data; float * lm_y = opt->lbfgs.lmy->data; + if (callback) { + // LBFG-S does not support learning rate -> ignore learning schedule + float sched = 0; + callback(callback_data, &sched); + } + // evaluate the function value and its gradient { ggml_opt_set_params(np, ps, x); @@ -18804,11 +18957,14 @@ static enum ggml_opt_result ggml_opt_lbfgs( ggml_graph_reset (gf); ggml_set_f32 (f->grad, 1.0f); - ggml_graph_compute_with_ctx(ctx, gb, params.n_threads); + ggml_graph_compute(gb, &cplan); ggml_opt_get_grad(np, ps, g); fx = ggml_get_f32_1d(f, 0); + + opt->loss_before = fx; + opt->loss_after = fx; } // search direction = -gradient @@ -18863,7 +19019,7 @@ static enum ggml_opt_result ggml_opt_lbfgs( ggml_vec_cpy_f32(nx, xp, x); ggml_vec_cpy_f32(nx, gp, g); - ls = linesearch_backtracking(ctx, ¶ms, nx, x, &fx, g, d, step, xp, f, gf, gb, np, ps); + ls = linesearch_backtracking(¶ms, nx, x, &fx, g, d, step, xp, f, gf, gb, &cplan, np, ps, callback, callback_data); if (ls < 0) { // linesearch failed - go back to the previous point and return @@ -18873,6 +19029,8 @@ static enum ggml_opt_result ggml_opt_lbfgs( return ls; } + opt->loss_after = fx; + ggml_vec_norm_f32(nx, &xnorm, x); ggml_vec_norm_f32(nx, &gnorm, g); @@ -18930,7 +19088,7 @@ static enum ggml_opt_result ggml_opt_lbfgs( // ys = y^t \cdot s -> 1 / \rho. // yy = y^t \cdot y. // - ggml_vec_dot_f32(nx, &ys, &lm_y[end[0]*nx], &lm_s[end[0] *nx]); + ggml_vec_dot_f32(nx, &ys, &lm_y[end[0]*nx], &lm_s[end[0]*nx]); ggml_vec_dot_f32(nx, &yy, &lm_y[end[0]*nx], &lm_y[end[0]*nx]); lm_ys[end[0]] = ys; @@ -18993,13 +19151,15 @@ struct ggml_opt_params ggml_opt_default_params(enum ggml_opt_type type) { .adam = { .n_iter = 10000, .sched = 1.000f, - .decay = 0.001f, + .decay = 0.0f, + .decay_min_ndim = 2, .alpha = 0.001f, .beta1 = 0.9f, .beta2 = 0.999f, .eps = 1e-8f, .eps_f = 1e-5f, .eps_g = 1e-3f, + .gclip = 0.0f, }, }; } break; @@ -19049,23 +19209,13 @@ GGML_API void ggml_opt_init( switch (opt->params.type) { case GGML_OPT_ADAM: { - opt->adam.x = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx); - opt->adam.g1 = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx); - opt->adam.g2 = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx); opt->adam.m = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx); opt->adam.v = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx); - opt->adam.mh = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx); - opt->adam.vh = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nx); opt->adam.pf = params.past > 0 ? ggml_new_tensor_1d(ctx, GGML_TYPE_F32, params.past) : NULL; - ggml_set_zero(opt->adam.x); - ggml_set_zero(opt->adam.g1); - ggml_set_zero(opt->adam.g2); ggml_set_zero(opt->adam.m); ggml_set_zero(opt->adam.v); - ggml_set_zero(opt->adam.mh); - ggml_set_zero(opt->adam.vh); if (opt->adam.pf) { ggml_set_zero(opt->adam.pf); } @@ -19149,7 +19299,7 @@ enum ggml_opt_result ggml_opt_resume( *gf = ggml_build_forward (f); *gb = ggml_build_backward(ctx, gf, true); - return ggml_opt_resume_g(ctx, opt, f, gf, gb); + return ggml_opt_resume_g(ctx, opt, f, gf, gb, NULL, NULL); } enum ggml_opt_result ggml_opt_resume_g( @@ -19157,7 +19307,9 @@ enum ggml_opt_result ggml_opt_resume_g( struct ggml_opt_context * opt, struct ggml_tensor * f, struct ggml_cgraph * gf, - struct ggml_cgraph * gb) { + struct ggml_cgraph * gb, + ggml_opt_callback callback, + void * callback_data) { // build forward + backward compute graphs enum ggml_opt_result result = GGML_OPT_OK; @@ -19165,11 +19317,11 @@ enum ggml_opt_result ggml_opt_resume_g( switch (opt->params.type) { case GGML_OPT_ADAM: { - result = ggml_opt_adam(ctx, opt, opt->params, f, gf, gb); + result = ggml_opt_adam(ctx, opt, opt->params, f, gf, gb, callback, callback_data); } break; case GGML_OPT_LBFGS: { - result = ggml_opt_lbfgs(ctx, opt, opt->params, f, gf, gb); + result = ggml_opt_lbfgs(ctx, opt, opt->params, f, gf, gb, callback, callback_data); } break; } @@ -19624,7 +19776,7 @@ struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_p // read the kv pairs { - ctx->kv = GGML_ALIGNED_MALLOC(ctx->header.n_kv * sizeof(struct gguf_kv)); + ctx->kv = malloc(ctx->header.n_kv * sizeof(struct gguf_kv)); for (uint32_t i = 0; i < ctx->header.n_kv; ++i) { struct gguf_kv * kv = &ctx->kv[i]; @@ -19707,7 +19859,7 @@ struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_p // read the tensor infos { - ctx->infos = GGML_ALIGNED_MALLOC(ctx->header.n_tensors * sizeof(struct gguf_tensor_info)); + ctx->infos = malloc(ctx->header.n_tensors * sizeof(struct gguf_tensor_info)); for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) { struct gguf_tensor_info * info = &ctx->infos[i]; @@ -19908,7 +20060,7 @@ void gguf_free(struct gguf_context * ctx) { } } - GGML_ALIGNED_FREE(ctx->kv); + free(ctx->kv); } if (ctx->infos) { @@ -19920,7 +20072,7 @@ void gguf_free(struct gguf_context * ctx) { } } - GGML_ALIGNED_FREE(ctx->infos); + free(ctx->infos); } GGML_ALIGNED_FREE(ctx); diff --git a/ggml.h b/ggml.h index 4ef3d525..c936823d 100644 --- a/ggml.h +++ b/ggml.h @@ -479,6 +479,9 @@ extern "C" { int64_t perf_cycles; int64_t perf_time_us; + struct ggml_tensor * view_src; + size_t view_offs; + void * data; char name[GGML_MAX_NAME]; @@ -661,7 +664,7 @@ extern "C" { GGML_API struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value); GGML_API struct ggml_tensor * ggml_dup_tensor (struct ggml_context * ctx, const struct ggml_tensor * src); - GGML_API struct ggml_tensor * ggml_view_tensor(struct ggml_context * ctx, const struct ggml_tensor * src); + GGML_API struct ggml_tensor * ggml_view_tensor(struct ggml_context * ctx, struct ggml_tensor * src); GGML_API struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name); @@ -952,11 +955,11 @@ extern "C" { // a - x // b - dy - // TODO: update with configurable eps GGML_API struct ggml_tensor * ggml_rms_norm_back( struct ggml_context * ctx, struct ggml_tensor * a, - struct ggml_tensor * b); + struct ggml_tensor * b, + float eps); // A: n columns, m rows // B: n columns, p rows (i.e. we transpose it internally) @@ -1612,7 +1615,8 @@ extern "C" { struct ggml_tensor * tensor); - GGML_API void ggml_build_forward_expand(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); + GGML_API void ggml_build_forward_expand (struct ggml_cgraph * cgraph, struct ggml_tensor * tensor); + GGML_API void ggml_build_backward_expand(struct ggml_context * ctx, struct ggml_cgraph * gf, struct ggml_cgraph * gb, bool keep); GGML_API struct ggml_cgraph ggml_build_forward (struct ggml_tensor * tensor); GGML_API struct ggml_cgraph ggml_build_backward(struct ggml_context * ctx, struct ggml_cgraph * gf, bool keep); @@ -1677,6 +1681,8 @@ extern "C" { GGML_LINESEARCH_INVALID_PARAMETERS, }; + typedef void (*ggml_opt_callback)(void * data, float * sched); + // optimization parameters // // see ggml.c (ggml_opt_default_params) for default values @@ -1712,12 +1718,14 @@ extern "C" { float sched; // schedule multiplier (fixed, decay or warmup) float decay; // weight decay for AdamW, use 0.0f to disable + int decay_min_ndim; // minimum number of tensor dimension to apply weight decay float alpha; // learning rate float beta1; float beta2; float eps; // epsilon for numerical stability float eps_f; // epsilon for convergence test float eps_g; // epsilon for convergence test + float gclip; // gradient clipping } adam; // LBFGS parameters @@ -1745,14 +1753,12 @@ extern "C" { bool just_initialized; + float loss_before; + float loss_after; + struct { - struct ggml_tensor * x; // view of the parameters - struct ggml_tensor * g1; // gradient - struct ggml_tensor * g2; // gradient squared struct ggml_tensor * m; // first moment struct ggml_tensor * v; // second moment - struct ggml_tensor * mh; // first moment hat - struct ggml_tensor * vh; // second moment hat struct ggml_tensor * pf; // past function values float fx_best; float fx_prev; @@ -1789,10 +1795,10 @@ extern "C" { // initialize optimizer context GGML_API void ggml_opt_init( - struct ggml_context * ctx, + struct ggml_context * ctx, struct ggml_opt_context * opt, - struct ggml_opt_params params, - int64_t nx); + struct ggml_opt_params params, + int64_t nx); // continue optimizing the function defined by the tensor f GGML_API enum ggml_opt_result ggml_opt_resume( @@ -1806,7 +1812,9 @@ extern "C" { struct ggml_opt_context * opt, struct ggml_tensor * f, struct ggml_cgraph * gf, - struct ggml_cgraph * gb); + struct ggml_cgraph * gb, + ggml_opt_callback callback, + void * callback_data); // // quantization