diff options
author | Vijay Marcel <vijaymarcel@outlook.com> | 2024-04-29 20:57:31 +0700 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2024-05-04 21:44:58 +0700 |
commit | 5fbc3b11a3b55d855334502ad1ff4755f152667f (patch) | |
tree | 87c414bb012b46dae5c238c878fe26c4d4c75ddc /multimedia | |
parent | 9e64d7870d8a9689c374cacde46d29ee423038e4 (diff) |
multimedia/shine: Updated for version ab5e352_20230101.
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'multimedia')
-rw-r--r-- | multimedia/shine/fix-bugs.patch | 12394 | ||||
-rw-r--r-- | multimedia/shine/shine.SlackBuild | 14 | ||||
-rw-r--r-- | multimedia/shine/shine.info | 6 |
3 files changed, 11 insertions, 12403 deletions
diff --git a/multimedia/shine/fix-bugs.patch b/multimedia/shine/fix-bugs.patch deleted file mode 100644 index 8e97a12bce918..0000000000000 --- a/multimedia/shine/fix-bugs.patch +++ /dev/null @@ -1,12394 +0,0 @@ -diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml -new file mode 100644 -index 0000000..500a5f6 ---- /dev/null -+++ b/.github/workflows/ci.yml -@@ -0,0 +1,73 @@ -+name: Build and install -+ -+on: -+ push: -+ branches: [ "main" ] -+ pull_request: -+ -+concurrency: -+ group: ${{ github.workflow }}-${{ github.ref }} -+ cancel-in-progress: true -+ -+jobs: -+ build: -+ runs-on: ${{ matrix.os }} -+ strategy: -+ fail-fast: false -+ matrix: -+ os: [macos-latest, ubuntu-latest] -+ steps: -+ - uses: actions/checkout@v3 -+ - name: Install required packages on macos -+ if: matrix.os == 'macos-latest' -+ run: brew install autoconf automake pkg-config -+ - name: Install required packages on ubuntu -+ if: matrix.os == 'ubuntu-latest' -+ run: sudo apt-get -y install automake autoconf pkg-config -+ - name: bootstrap -+ run: ./bootstrap -+ - name: configure -+ run: ./configure -+ - name: make -+ run: make -+ - name: make install on macos -+ if: matrix.os == 'macos-latest' -+ run: make install -+ - name: make install on ubuntu -+ if: matrix.os == 'ubuntu-latest' -+ run: sudo make install -+ - name: Test pkg-config setup -+ run: pkg-config --libs shine -+ -+ android_build: -+ runs-on: ubuntu-latest -+ steps: -+ - uses: actions/checkout@v3 -+ - uses: nttld/setup-ndk@v1 -+ with: -+ ndk-version: r25b -+ local-cache: true -+ - name: Install autoconf/automake -+ run: sudo apt-get -y install automake autoconf -+ - name: bootstrap -+ run: ./bootstrap -+ - name: configure -+ run: ./configure -+ - name: make android -+ run: make android -+ -+ js_build: -+ runs-on: ubuntu-latest -+ steps: -+ - uses: actions/checkout@v3 -+ - uses: mymindstorm/setup-emsdk@v11 -+ - name: JS build -+ run: | -+ cd js -+ make -+ - uses: actions/setup-node@v3 -+ - name: Run node test -+ run: | -+ cd js/test/node -+ npm install -+ npm run test -diff --git a/.gitignore b/.gitignore -index aa76abe..ffdd74d 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -2,9 +2,9 @@ - obj - libs - compile --android/lib --android/include --android/bin -+android/ -+js/src/post-node.js -+!android/*.mk - shine - shine.pc - m4 -@@ -82,6 +82,6 @@ src/lib/reservoir.o - src/lib/tables.lo - src/lib/tables.o - shine-*.tar.gz --*.bc -+*.o - *.mp3 - node_modules -diff --git a/ChangeLog b/ChangeLog -index 122dae5..0713282 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -1,3 +1,8 @@ -+x.y.z () -+===== -+* Be more specific when enabling MIPS assembly routines. -+* Fix wave header reading on big endian machines (#34) -+ - 3.1.1 (2017-07-28) - ===== - * Remove invalid MPEG 2.5 bitrates. -diff --git a/Makefile.am b/Makefile.am -index bebf32d..538256c 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -26,14 +26,14 @@ pkgconfigdir = $(libdir)/pkgconfig - pkgconfig_DATA = shine.pc - - android: -- [ -d android/bin ] || mkdir android/bin - [ -d android/include ] || mkdir android/include -- [ -d android/lib ] || mkdir android/lib -- NDK_PROJECT_PATH=$(shell pwd) ndk-build APP_BUILD_SCRIPT=$(shell pwd)/android/Library.mk -- cp libs/armeabi/libshine.so android/lib -+ [ -d android/lib ] || mkdir android/lib -+ [ -d android/bin ] || mkdir android/bin - cp src/lib/layer3.h android/include -+ NDK_PROJECT_PATH=$(shell pwd) ndk-build APP_BUILD_SCRIPT=$(shell pwd)/android/Library.mk -+ mv libs/* android/lib - NDK_PROJECT_PATH=$(shell pwd) ndk-build APP_BUILD_SCRIPT=$(shell pwd)/android/Binary.mk -- cp libs/armeabi/shineenc android/bin -+ mv libs/* android/bin - - clean-local: - -rm -rf obj libs android/lib android/bin android/include -diff --git a/README.md b/README.md -index 1d30cbd..e9b781a 100644 ---- a/README.md -+++ b/README.md -@@ -2,15 +2,15 @@ Shine: fast fixed-point mp3 encoding - ==================================== - - [shine](https://github.com/savonet/shine) is a blazing fast mp3 encoding library implemented in --fixed-point arithmetic. The library can thus be used to performe super fast mp3 encoding on architectures --without a FPU, such as `armel`, etc.. It is also, however, also super fast on architectures with a FPU! -+fixed-point arithmetic. The library can thus be used to perform super fast mp3 encoding on architectures -+without a FPU, such as `armel`, etc.. It is also super fast on architectures with a FPU! - - How to use? - ----------- - - The encoding API should be quite straight forward: - --``` -+```c - #include <shine/layer3.h> - - (...) -@@ -42,46 +42,47 @@ shine_close(s); - How fast is it? - --------------- - --On a [Raspberry Pi](http://www.raspberrypi.org/) (`ARM`, `FPU`): -+On a macbook pro (`arm64`/M1 pro, `FPU`, December 30, 2022): - --Lame, `3m06s`, `1.8x` realtime: --``` --pi@raspberrypi ~ $ lame bla.wav bla.mp3 --LAME 3.99.5 32bits (http://lame.sf.net) -+Lame, `88.7x` realtime: -+```bash -+LAME 3.100 64bits (http://lame.sf.net) - Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz --Encoding bla.wav to bla.mp3 -+Encoding /tmp/decoded.wav to /tmp/lame.mp3 - Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3 - Frame | CPU time/estim | REAL time/estim | play/CPU | ETA -- 12987/12987 (100%)| 3:06/ 3:06| 3:06/ 3:06| 1.8216x| 0:00 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -+ 12203/12203 (100%)| 0:03/ 0:03| 0:04/ 0:04| 88.773x| 0:00 -+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - kbps LR MS % long switch short % -- 128.0 0.1 99.9 89.1 6.1 4.9 -+ 128.0 32.6 67.4 96.4 1.9 1.7 - Writing LAME Tag...done --ReplayGain: -10.5dB -+ReplayGain: -9.3dB -+lame -b 128 /tmp/decoded.wav /tmp/lame.mp3 3.55s user 0.05s system 99% cpu 3.609 total - ``` - --Shine, `1m35s`, `3.6x` realtime: -+Shine, `318.0x` realtime: - ``` --pi@raspberrypi ~ $ shineenc bla.wav bla.mp3 - shineenc (Liquidsoap version) --WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:39 -+WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:18 - MPEG-I layer III, stereo Psychoacoustic Model: Shine - Bitrate: 128 kbps De-emphasis: none Original --Encoding "bla.wav" to "bla.mp3" --Finished in 00:01:35 (3.6x realtime) -+Encoding "/tmp/bla.wav" to "/tmp/shine.mp3" -+Finished in 00:00:01 (318.0x realtime) - ``` - --Now, on a mac airbook (`x86_64`, `FPU`): -+### ⚠ The following are outdated tests ⚠ - --Lame, `15s`, `22x` realtime: --``` --toots@zulu tmp % lame bla.wav bla.mp3 --LAME 3.99.5 64bits (http://lame.sf.net) -+On a [Raspberry Pi](http://www.raspberrypi.org/) (`ARM`, `FPU`): -+ -+Lame, `1.8x` realtime: -+```bash -+pi@raspberrypi ~ $ lame bla.wav bla.mp3 -+LAME 3.99.5 32bits (http://lame.sf.net) - Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz - Encoding bla.wav to bla.mp3 - Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3 - Frame | CPU time/estim | REAL time/estim | play/CPU | ETA -- 12987/12987 (100%)| 0:15/ 0:15| 0:17/ 0:17| 22.087x| 0:00 -+ 12987/12987 (100%)| 3:06/ 3:06| 3:06/ 3:06| 1.8216x| 0:00 - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - kbps LR MS % long switch short % - 128.0 0.1 99.9 89.1 6.1 4.9 -@@ -89,20 +90,21 @@ Writing LAME Tag...done - ReplayGain: -10.5dB - ``` - --Shine, `9s`, `37.7x` realtime: --``` -+Shine, `3.6x` realtime: -+```bash -+pi@raspberrypi ~ $ shineenc bla.wav bla.mp3 - shineenc (Liquidsoap version) - WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:39 - MPEG-I layer III, stereo Psychoacoustic Model: Shine - Bitrate: 128 kbps De-emphasis: none Original --Encoding "/tmp/bla.wav" to "/tmp/bla.mp3" --Finished in 00:00:09 (37.7x realtime) -+Encoding "bla.wav" to "bla.mp3" -+Finished in 00:01:35 (3.6x realtime) - ``` - - On a Google Nexus 5 (`ARM`, `FPU`): - - Shine, `14s`, `24.2x` realtime: --``` -+```bash - u0_a65@hammerhead:/mnt/sdcard $ shineenc bla.wav bla.mp3 - shineenc (Liquidsoap version) - WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:39 -@@ -128,7 +130,7 @@ A bit of history - This code was dug out from the dusty crates of those times before internet - and github. It apparently was created by Gabriel Bouvigne sometime around - the end of the 20th century. The encoder was converted circa 2001 by Pete --Everett to fixed-point arithmetic for the RISC OS. Latest we know, Patrick -+Everett to fixed-point arithmetic for the RISC OS. Last we know, Patrick - Roberts had worked on the code to make it multi-platform and more library - oriented. That was around 2006. - -diff --git a/configure.ac b/configure.ac -index 87a5f68..6d6cb23 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1,6 +1,7 @@ --AC_INIT([shine],[3.1.0],[savonet-users@lists.sourceforge.net]) -+AC_INIT([shine],[3.1.1],[toots@rastageeks.org]) - AM_INIT_AUTOMAKE([subdir-objects]) - LT_INIT - AC_CONFIG_MACRO_DIR([m4]) - AC_C_BIGENDIAN([CFLAGS="$CFLAGS -DSHINE_BIG_ENDIAN"]) -+AC_CHECK_HEADER([byteswap.h],[CFLAGS="$CFLAGS -DSHINE_HAVE_BSWAP_H"]) - AC_OUTPUT([Makefile shine.pc]) -diff --git a/js/.npmignore b/js/.npmignore -new file mode 100644 -index 0000000..f1b84a5 ---- /dev/null -+++ b/js/.npmignore -@@ -0,0 +1,4 @@ -+test/ -+src/ -+Makefile -+.* -diff --git a/js/.prettierignore b/js/.prettierignore -new file mode 100644 -index 0000000..1b64941 ---- /dev/null -+++ b/js/.prettierignore -@@ -0,0 +1,5 @@ -+.next/ -+dist/ -+stubs/ -+public/audio -+__ENV.js -diff --git a/js/.prettierrc b/js/.prettierrc -new file mode 100644 -index 0000000..a995c49 ---- /dev/null -+++ b/js/.prettierrc -@@ -0,0 +1,12 @@ -+{ -+ "singleQuote": false, -+ "quoteProps": "as-needed", -+ "arrowParens": "avoid", -+ "tabWidth": 2, -+ "trailingComma": "es5", -+ "semi": true, -+ "jsxSingleQuote": true, -+ "bracketSameLine": false, -+ "printWidth": 120, -+ "parser": "typescript" -+} -diff --git a/js/Makefile b/js/Makefile -index 465ffde..3781b6e 100644 ---- a/js/Makefile -+++ b/js/Makefile -@@ -1,24 +1,37 @@ - # Emscriptem compilation - - EMCC:=emcc --EXPORTED_FUNCTIONS:='["_shine_check_config", "_shine_js_init",\ -+EXPORTED_FUNCTIONS:='["_malloc", "_free", "_shine_check_config", "_shine_js_init",\ -+ "_shine_js_int16_len", "_shine_js_ptr_len", \ - "_shine_samples_per_pass", "_shine_encode_buffer",\ -- "_shine_flush", "_shine_close"]' -+ "_shine_flush", "_shine_close"]' - CFLAGS:=-O3 --LINKFLAGS:=-s EXPORTED_FUNCTIONS=$(EXPORTED_FUNCTIONS) --memory-init-file 0 $(CFLAGS) -+LINKFLAGS:=-s EXPORTED_FUNCTIONS=$(EXPORTED_FUNCTIONS) -s SINGLE_FILE=1 -s EXPORTED_RUNTIME_METHODS=setValue,getValue --memory-init-file 0 $(CFLAGS) -+WEB_LINKFLAGS:=$(LINKFLAGS) -s ENVIRONMENT='web' -s EXPORT_NAME='createModule' -s USE_ES6_IMPORT_META=0 - - C_FILES:=$(wildcard ../src/lib/*.c) src/wrapper.c - HEADER_FILES:=$(wildcard ../src/lib/*.h) - SOURCES:=$(C_FILES) $(HEADER_FILES) --OBJECTS:=$(C_FILES:%.c=%.bc) -+OBJECTS:=$(C_FILES:%.c=%.o) - --all: dist/libshine.js -+all: dist/libshine_node.js dist/libshine_browser.js - --dist/libshine.js: $(SOURCES) $(OBJECTS) src/pre.js src/post.js -- $(EMCC) $(LINKFLAGS) --pre-js src/pre.js --post-js src/post.js $(OBJECTS) -o $@ -+src/post-node.js: src/libshine_class.js src/libshine_node_wrapper.js -+ rm -f src/post-node.js -+ cat src/libshine_class.js src/libshine_node_wrapper.js > src/post-node.js - --%.bc: %.c -+dist/libshine_node.js: $(SOURCES) $(OBJECTS) src/post-node.js -+ $(EMCC) $(LINKFLAGS) --post-js src/post-node.js $(OBJECTS) -o dist/libshine_node.js -+ -+dist/libshine_browser_stubs.js: $(SOURCES) $(OBJECTS) -+ $(EMCC) $(WEB_LINKFLAGS) $(OBJECTS) -o dist/libshine_browser_stubs.mjs -+ mv dist/libshine_browser_stubs.mjs dist/libshine_browser_stubs.js -+ -+dist/libshine_browser.js: src/libshine_class.js src/libshine_browser_wrapper.js dist/libshine_browser_stubs.js -+ cat src/libshine_class.js src/libshine_browser_wrapper.js > dist/libshine_browser.js -+ -+%.o: %.c - $(EMCC) $(CFLAGS) -I../src/lib -c $< -o $@ - - clean: -- rm -f *.bc ../src/lib/*.bc -+ rm -rf *.o ../src/lib/*.o dist/libshine*js -diff --git a/js/README.md b/js/README.md -index 49ca3f6..d521d4b 100644 ---- a/js/README.md -+++ b/js/README.md -@@ -1,112 +1,156 @@ - Shine encoder library for Javascript - ==================================== - --This directory contains a build of shine for Javascript using --[kripken/emscripten](https://github.com/kripken/emscripten) and --located in `dist/libshine.js` -+This package contains a build of the [shine](https://github.com/toots/shine) fixed-point -+mp3 encoder compiled for Javascript and wasm using [emscripten-core/emscripten](https://github.com/emscripten-core/emscripten). -+ -+Install -+------- -+ -+Using `npm`: -+ -+```shell -+npm install @toots/shine.js -+``` -+ -+Using `yarn`: -+ -+```shell -+yarn add @toots/shine.js -+``` -+ -+Using `pnpm`: -+ -+```shell -+pnpm install @toots/shine.js -+``` -+ -+In a HTML page: -+ -+When using `webpack`, the package should point to the correct -+`libshine_browser.js` file automatically. -+ -+When using directly as a script, you can load the `libshine_node.js` -+file as: -+ -+```html -+<script src="libshine_node.js"></script> -+``` -+ -+See: [test/browser](https://github.com/toots/shine/tree/main/js/test/browser) for an example. - - How to use? - ----------- - - The encoding API should be quite straight forward: - --``` --shine = new Shine({ -- samplerate: 44100, -- bitrate: 128, -- channels: 2, -- mode: Shine.STEREO --}); -+```js -+import { Shine, StereoModel } from "@toots/shine.js"; -+ -+const exec = async () => { -+ await Shine.initialized; -+ -+ shine = new Shine({ -+ samplerate: 44100, -+ bitrate: 128, -+ channels: 2, -+ stereoModel: StereoModel.STEREO -+ }); - --// All the magic happens here --while (..) { -- // data here is an array of channels. -- // Channels must have the same number of samples -- // and both be either Int16Array or Float32Array. -- encoded = shine.encode(data); -+ // All the magic happens here -+ while (..) { -+ // data here is an array of channels. -+ // Channels must have the same number of samples -+ // and both be either Int16Array or Float32Array. -+ encoded = shine.encode(data); -+ ... -+ } -+ -+ // Close and get remaining data. -+ flushed = shine.close(); -+ - ... - } - --// Close and get remaining data. --flushed = shine.close(); --... -+exec(); - ``` - - How fast is it? - --------------- - --You can run the test suite located in `test/`. As of now (26/07/2014), only firefox --and seems to show performances decent enough for real-time encoding while Google Chrome --can encode between 1X and 2X. -+You can run the test suite located in `test/`. Encoding rate above `1X` means that -+the browser should be suitable for real-time encoding. -+ -+Results, as of December 30, 2022: - --Chrome: -+Chrome (`108.0.5359.124`): - ``` - Executing encoding test - Got WAV file. - Encoding.. - Done encoding. - File duration: 5.57 seconds --Encoding time: 5.18 seconds --Encoding rate: 1.08X -+Encoding time: 0.08 seconds -+Encoding rate: 67.96X - - Executing rounds test - Encoding 50 buffers of 4096 samples - Done encoding - Total duration: 4.64 --Encoding time: 2.73 --Encoding rate: 1.70X -+Encoding time: 0.03 -+Encoding rate: 160.00X - ``` - --Firefox: -+Firefox (`108.0.1`): - ``` - Executing encoding test - Got WAV file. - Encoding.. - Done encoding. - File duration: 5.57 seconds --Encoding time: 1.48 seconds --Encoding rate: 3.76X -+Encoding time: 0.06 seconds -+Encoding rate: 99.52X - - Executing rounds test - Encoding 50 buffers of 4096 samples - Done encoding - Total duration: 4.64 --Encoding time: 0.98 --Encoding rate: 4.72X -+Encoding time: 0.03 -+Encoding rate: 178.46X - ``` - --Safari: -+Safari (`16.2`): - ``` - Executing encoding test - Got WAV file. - Encoding.. - Done encoding. - File duration: 5.57 seconds --Encoding time: 11.77 seconds --Encoding rate: 0.47X -+Encoding time: 0.12 seconds -+Encoding rate: 46.44X - - Executing rounds test - Encoding 50 buffers of 4096 samples - Done encoding - Total duration: 4.64 --Encoding time: 6.93 --Encoding rate: 0.67X -+Encoding time: 0.02 -+Encoding rate: 210.91X - ``` - --NodeJS, v0.10.24: -+NodeJS (`v19.3.0`): - ``` - Executing encoding test - Got WAV file. - Encoding.. - Done encoding. - File duration: 5.57 seconds --Encoding time: 22.57 seconds --Encoding rate: 0.25X -+Encoding time: 0.06 seconds -+Encoding rate: 94.45X - - Executing rounds test - Encoding 50 buffers of 4096 samples - Done encoding - Total duration: 4.64 --Encoding time: 11.46 --Encoding rate: 0.40X -+Encoding time: 0.03 -+Encoding rate: 178.46X - ``` -diff --git a/js/dist/libshine.js b/js/dist/libshine.js -deleted file mode 100644 -index c44f119..0000000 ---- a/js/dist/libshine.js -+++ /dev/null -@@ -1,16 +0,0 @@ --var Shine=(function(){var context={};return(function(){var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=console.log;if(!Module["printErr"])Module["printErr"]=console.warn;var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function shell_read(){throw"no read() available"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function shell_print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function shell_printErr(x){console.warn(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}if(!Module["quit"]){Module["quit"]=(function(status,toThrow){throw toThrow})}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var Runtime={setTempRet0:(function(value){tempRet0=value;return value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i<Runtime.functionPointers.length;i++){if(!Runtime.functionPointers[i]){Runtime.functionPointers[i]=func;return 2*(1+i)}}throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}),removeFunction:(function(index){Runtime.functionPointers[(index-2)/2]=null}),warnOnce:(function(text){if(!Runtime.warnOnce.shown)Runtime.warnOnce.shown={};if(!Runtime.warnOnce.shown[text]){Runtime.warnOnce.shown[text]=1;Module.printErr(text)}}),funcWrappers:{},getFuncWrapper:(function(func,sig){assert(sig);if(!Runtime.funcWrappers[sig]){Runtime.funcWrappers[sig]={}}var sigCache=Runtime.funcWrappers[sig];if(!sigCache[func]){if(sig.length===1){sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func)}}else if(sig.length===2){sigCache[func]=function dynCall_wrapper(arg){return Runtime.dynCall(sig,func,[arg])}}else{sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func,Array.prototype.slice.call(arguments))}}}return sigCache[func]}),getCompilerSetting:(function(name){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"}),stackAlloc:(function(size){var ret=STACKTOP;STACKTOP=STACKTOP+size|0;STACKTOP=STACKTOP+15&-16;return ret}),staticAlloc:(function(size){var ret=STATICTOP;STATICTOP=STATICTOP+size|0;STATICTOP=STATICTOP+15&-16;return ret}),dynamicAlloc:(function(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=(ret+size+15|0)&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=Runtime.stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=Runtime.stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);if(returnType==="string")ret=Pointer_stringify(ret);if(stack!==0){if(opts&&opts.async){EmterpreterAsync.asyncFinalizers.push((function(){Runtime.stackRestore(stack)}));return}Runtime.stackRestore(stack)}return ret};var sourceRegex=/^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function parseJSFunc(jsfunc){var parsed=jsfunc.toString().match(sourceRegex).slice(1);return{arguments:parsed[0],body:parsed[1],returnValue:parsed[2]}}var JSsource=null;function ensureJSsource(){if(!JSsource){JSsource={};for(var fun in JSfuncs){if(JSfuncs.hasOwnProperty(fun)){JSsource[fun]=parseJSFunc(JSfuncs[fun])}}}}cwrap=function cwrap(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident);var numericArgs=argTypes.every((function(type){return type==="number"}));var numericRet=returnType!=="string";if(numericRet&&numericArgs){return cfunc}var argNames=argTypes.map((function(x,i){return"$"+i}));var funcstr="(function("+argNames.join(",")+") {";var nargs=argTypes.length;if(!numericArgs){ensureJSsource();funcstr+="var stack = "+JSsource["stackSave"].body+";";for(var i=0;i<nargs;i++){var arg=argNames[i],type=argTypes[i];if(type==="number")continue;var convertCode=JSsource[type+"ToC"];funcstr+="var "+convertCode.arguments+" = "+arg+";";funcstr+=convertCode.body+";";funcstr+=arg+"=("+convertCode.returnValue+");"}}var cfuncname=parseJSFunc((function(){return cfunc})).returnValue;funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");";if(!numericRet){var strgfy=parseJSFunc((function(){return Pointer_stringify})).returnValue;funcstr+="ret = "+strgfy+"(ret);"}if(!numericArgs){ensureJSsource();funcstr+=JSsource["stackRestore"].body.replace("()","(stack)")+";"}funcstr+="return ret})";return eval(funcstr)}}))();Module["ccall"]=ccall;Module["cwrap"]=cwrap;function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];if(typeof curr==="function"){curr=Runtime.getFunctionIndex(curr)}type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=Runtime.getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}Module["allocate"]=allocate;function getMemory(size){if(!staticSealed)return Runtime.staticAlloc(size);if(!runtimeInitialized)return Runtime.dynamicAlloc(size);return _malloc(size)}Module["getMemory"]=getMemory;function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){var __cxa_demangle_func=Module["___cxa_demangle"]||Module["__cxa_demangle"];if(__cxa_demangle_func){try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}return func}Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}Module["stackTrace"]=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)Module.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{{buffer=new ArrayBuffer(TOTAL_MEMORY)}}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY}HEAP32[0]=1668509029;HEAP16[1]=25459;if(HEAPU8[2]!==115||HEAPU8[3]!==99)throw"Runtime error: expected the system to be little-endian!";Module["HEAP"]=HEAP;Module["buffer"]=buffer;Module["HEAP8"]=HEAP8;Module["HEAP16"]=HEAP16;Module["HEAP32"]=HEAP32;Module["HEAPU8"]=HEAPU8;Module["HEAPU16"]=HEAPU16;Module["HEAPU32"]=HEAPU32;Module["HEAPF32"]=HEAPF32;Module["HEAPF64"]=HEAPF64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;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 ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){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)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;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}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end]=lastChar}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;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()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var ASM_CONSTS=[];STATIC_BASE=Runtime.GLOBAL_BASE;STATICTOP=STATIC_BASE+10560;__ATINIT__.push();allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,104,18,0,0,108,29,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,112,18,0,0,112,29,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,130,18,0,0,121,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,148,18,0,0,130,29,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,180,18,0,0,146,29,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,212,18,0,0,162,29,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,28,19,0,0,198,29,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,100,19,0,0,234,29,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,172,19,0,0,14,30,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,44,20,0,0,78,30,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,172,20,0,0,142,30,0,0,16,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,44,21,0,0,206,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,44,23,0,0,206,31,0,0,16,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,2,0,0,0,3,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,3,0,0,0,7,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,4,0,0,0,15,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,6,0,0,0,63,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,8,0,0,0,255,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,10,0,0,0,255,3,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,13,0,0,0,255,31,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,4,0,0,0,15,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,5,0,0,0,31,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,6,0,0,0,63,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,7,0,0,0,127,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,8,0,0,0,255,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,9,0,0,0,255,1,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,11,0,0,0,255,7,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,13,0,0,0,255,31,0,0,44,27,0,0,206,33,0,0,1,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,44,29,0,0,206,34,0,0,1,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,76,29,0,0,222,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,7,0,0,0,6,0,0,0,7,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,6,0,0,0,11,0,0,0,16,0,0,0,21,0,0,0,1,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,68,172,0,0,128,187,0,0,0,125,0,0,34,86,0,0,192,93,0,0,128,62,0,0,17,43,0,0,224,46,0,0,64,31,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,8,0,0,0,255,255,255,255,8,0,0,0,32,0,0,0,16,0,0,0,255,255,255,255,16,0,0,0,40,0,0,0,24,0,0,0,255,255,255,255,24,0,0,0,48,0,0,0,32,0,0,0,255,255,255,255,32,0,0,0,56,0,0,0,40,0,0,0,255,255,255,255,40,0,0,0,64,0,0,0,48,0,0,0,255,255,255,255,48,0,0,0,80,0,0,0,56,0,0,0,255,255,255,255,56,0,0,0,96,0,0,0,64,0,0,0,255,255,255,255,64,0,0,0,112,0,0,0,255,255,255,255,255,255,255,255,80,0,0,0,128,0,0,0,255,255,255,255,255,255,255,255,96,0,0,0,160,0,0,0,255,255,255,255,255,255,255,255,112,0,0,0,192,0,0,0,255,255,255,255,255,255,255,255,128,0,0,0,224,0,0,0,255,255,255,255,255,255,255,255,144,0,0,0,0,1,0,0,255,255,255,255,255,255,255,255,160,0,0,0,64,1,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,4,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,52,0,0,0,62,0,0,0,74,0,0,0,90,0,0,0,110,0,0,0,134,0,0,0,162,0,0,0,196,0,0,0,238,0,0,0,32,1,0,0,86,1,0,0,162,1,0,0,64,2,0,0,0,0,0,0,4,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,42,0,0,0,50,0,0,0,60,0,0,0,72,0,0,0,88,0,0,0,106,0,0,0,128,0,0,0,156,0,0,0,190,0,0,0,230,0,0,0,20,1,0,0,74,1,0,0,128,1,0,0,64,2,0,0,0,0,0,0,4,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,82,0,0,0,102,0,0,0,126,0,0,0,156,0,0,0,194,0,0,0,240,0,0,0,40,1,0,0,108,1,0,0,192,1,0,0,38,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,28,1,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,114,0,0,0,136,0,0,0,162,0,0,0,194,0,0,0,232,0,0,0,22,1,0,0,74,1,0,0,138,1,0,0,208,1,0,0,28,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,45,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,248,0,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,28,1,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,28,1,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,12,0,0,0,24,0,0,0,36,0,0,0,48,0,0,0,60,0,0,0,72,0,0,0,88,0,0,0,108,0,0,0,132,0,0,0,160,0,0,0,192,0,0,0,232,0,0,0,24,1,0,0,80,1,0,0,144,1,0,0,220,1,0,0,54,2,0,0,56,2,0,0,58,2,0,0,60,2,0,0,62,2,0,0,64,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,247,255,255,157,247,255,255,157,247,255,255,157,247,255,255,157,247,255,255,157,247,255,255,58,239,255,255,58,239,255,255,58,239,255,255,58,239,255,255,214,230,255,255,214,230,255,255,214,230,255,255,115,222,255,255,115,222,255,255,15,214,255,255,15,214,255,255,172,205,255,255,72,197,255,255,229,188,255,255,229,188,255,255,129,180,255,255,30,172,255,255,186,163,255,255,87,155,255,255,144,138,255,255,44,130,255,255,101,113,255,255,2,105,255,255,59,88,255,255,215,79,255,255,16,63,255,255,73,46,255,255,31,21,255,255,88,4,255,255,145,243,254,255,103,218,254,255,60,193,254,255,18,168,254,255,75,151,254,255,32,126,254,255,146,92,254,255,104,67,254,255,61,42,254,255,175,8,254,255,133,239,253,255,91,214,253,255,205,180,253,255,162,155,253,255,20,122,253,255,134,88,253,255,92,63,253,255,49,38,253,255,163,4,253,255,221,243,252,255,178,218,252,255,136,193,252,255,163,87,3,0,106,104,3,0,49,121,3,0,148,129,3,0,248,137,3,0,91,146,3,0,91,146,3,0,248,137,3,0,148,129,3,0,205,112,3,0,6,96,3,0,120,62,3,0,234,28,3,0,249,242,2,0,164,192,2,0,79,142,2,0,51,75,2,0,180,255,1,0,209,171,1,0,139,79,1,0,126,226,0,0,112,117,0,0,157,247,255,255,101,113,255,255,202,226,254,255,104,67,254,255,162,155,253,255,121,235,252,255,236,50,252,255,153,105,251,255,226,151,250,255,199,189,249,255,230,210,248,255,4,232,247,255,92,236,246,255,80,232,245,255,68,228,244,255,212,215,243,255,1,195,242,255,203,165,241,255,49,128,240,255,250,98,239,255,96,61,238,255,198,23,237,255,45,242,235,255,147,204,234,255,92,175,233,255,137,154,232,255,182,133,231,255,71,121,230,255,59,117,229,255,246,129,228,255,120,159,227,255,93,197,226,255,109,4,226,255,68,84,225,255,69,189,224,255,113,63,224,255,199,218,223,255,171,151,223,255,186,109,223,255,86,101,223,255,129,126,223,255,157,193,223,255,86,209,31,0,187,66,31,0,203,129,30,0,233,150,29,0,179,121,28,0,39,42,27,0,171,176,25,0,118,252,23,0,235,21,22,0,13,253,19,0,117,169,17,0,236,43,15,0,72,107,12,0,235,111,9,0,156,74,6,0,50,226,2,0,215,79,255,255,195,130,251,255,247,122,247,255,57,73,243,255,38,229,238,255,190,78,234,255,101,142,229,255,27,164,224,255,66,152,219,255,120,98,214,255,132,19,209,255,2,163,203,255,85,25,198,255,69,135,192,255,10,220,186,255,207,48,181,255,49,125,175,255,147,201,169,255,188,38,164,255,72,140,158,255,255,10,153,255,224,162,147,255,179,100,142,255,19,72,137,255,44,102,132,255,254,190,127,255,135,82,123,255,144,49,119,255,124,100,115,255,174,243,111,255,39,223,108,255,16,64,106,255,163,5,104,255,11,73,102,255,170,18,101,255,129,98,100,255,86,73,100,255,42,199,100,255,97,228,101,255,93,169,103,255,130,30,106,255,52,76,109,255,115,50,113,255,5,226,117,255,135,82,123,255,93,140,129,255,78,160,136,255,245,133,144,255,73,186,102,0,9,24,93,0,17,164,82,0,56,69,71,0,226,3,59,0,13,224,45,0,86,209,31,0,133,232,16,0,210,20,1,0,6,103,240,255,187,214,222,255,85,108,204,255,213,39,185,255,1,26,165,255,118,58,144,255,151,145,122,255,200,39,100,255,109,5,77,255,232,50,53,255,58,176,28,255,142,150,3,255,227,229,233,254,156,166,207,254,130,233,180,254,90,191,153,254,37,40,126,254,169,52,98,254,18,254,69,254,251,123,41,254,243,207,12,254,92,2,240,253,255,35,211,253,63,61,182,253,226,94,153,253,19,162,124,253,209,6,96,253,172,174,67,253,163,153,39,253,67,233,11,253,141,157,240,252,171,207,213,252,1,136,187,252,86,215,161,252,212,214,136,252,223,142,112,252,218,7,89,252,239,90,66,252,130,144,44,252,247,176,23,252,120,213,3,252,105,6,241,251,44,76,223,251,38,175,206,251,29,64,191,251,117,7,177,251,145,13,164,251,214,90,152,251,165,247,141,251,0,228,132,251,174,48,125,251,173,221,118,251,255,234,113,251,7,97,110,251,197,63,108,251,200,120,148,4,59,192,147,4,249,158,145,4,1,21,142,4,83,34,137,4,82,207,130,4,0,28,123,4,91,8,114,4,42,165,103,4,111,242,91,4,139,248,78,4,227,191,64,4,218,80,49,4,212,179,32,4,151,249,14,4,136,42,252,3,9,79,232,3,126,111,211,3,17,165,189,3,38,248,166,3,33,113,143,3,44,41,119,3,170,40,94,3,255,119,68,3,85,48,42,3,115,98,15,3,189,22,244,2,93,102,216,2,84,81,188,2,47,249,159,2,237,93,131,2,30,161,102,2,193,194,73,2,1,220,44,2,164,253,15,2,13,48,243,1,5,132,214,1,238,1,186,1,87,203,157,1,219,215,129,1,166,64,102,1,126,22,75,1,100,89,48,1,29,26,22,1,114,105,252,0,198,79,227,0,24,205,202,0,147,250,178,0,56,216,155,0,105,110,133,0,138,197,111,0,255,229,90,0,43,216,70,0,171,147,51,0,69,41,33,0,250,152,15,0,46,235,254,255,123,23,239,255,170,46,224,255,243,31,210,255,30,252,196,255,200,186,184,255,239,91,173,255,247,231,162,255,73,186,102,0,11,122,111,0,178,95,119,0,163,115,126,0,121,173,132,0,251,29,138,0,141,205,142,0,204,179,146,0,126,225,149,0,163,86,152,0,159,27,154,0,214,56,155,0,170,182,155,0,127,157,155,0,86,237,154,0,245,182,153,0,93,250,151,0,240,191,149,0,217,32,147,0,82,12,144,0,132,155,140,0,112,206,136,0,121,173,132,0,2,65,128,0,212,153,123,0,237,183,118,0,77,155,113,0,32,93,108,0,1,245,102,0,184,115,97,0,68,217,91,0,109,54,86,0,207,130,80,0,49,207,74,0,246,35,69,0,187,120,63,0,171,230,57,0,254,92,52,0,124,236,46,0,136,157,41,0,190,103,36,0,229,91,31,0,155,113,26,0,66,177,21,0,218,26,17,0,199,182,12,0,9,133,8,0,61,125,4,0,41,176,0,0,206,29,253,255,100,181,249,255,21,144,246,255,184,148,243,255,20,212,240,255,139,86,238,255,243,2,236,255,21,234,233,255,138,3,232,255,85,79,230,255,217,213,228,255,77,134,227,255,23,105,226,255,53,126,225,255,69,189,224,255,86,209,31,0,99,62,32,0,127,129,32,0,170,154,32,0,70,146,32,0,85,104,32,0,57,37,32,0,143,192,31,0,187,66,31,0,188,171,30,0,147,251,29,0,163,58,29,0,136,96,28,0,10,126,27,0,197,138,26,0,185,134,25,0,74,122,24,0,119,101,23,0,164,80,22,0,109,51,21,0,211,13,20,0,58,232,18,0,160,194,17,0,6,157,16,0,207,127,15,0,53,90,14,0,255,60,13,0,44,40,12,0,188,27,11,0,176,23,10,0,164,19,9,0,252,23,8,0,26,45,7,0,57,66,6,0,30,104,5,0,103,150,4,0,20,205,3,0,135,20,3,0,94,100,2,0,152,188,1,0,54,29,1,0,155,142,0,0,99,8,0,0,144,138,255,255,130,29,255,255,117,176,254,255,47,84,254,255,76,0,254,255,205,180,253,255,177,113,253,255,92,63,253,255,7,13,253,255,22,227,252,255,136,193,252,255,250,159,252,255,51,143,252,255,108,126,252,255,8,118,252,255,165,109,252,255,165,109,252,255,8,118,252,255,108,126,252,255,207,134,252,255,150,151,252,255,163,87,3,0,120,62,3,0,78,37,3,0,35,12,3,0,93,251,2,0,207,217,2,0,164,192,2,0,122,167,2,0,236,133,2,0,94,100,2,0,51,75,2,0,165,41,2,0,123,16,2,0,81,247,1,0,195,213,1,0,152,188,1,0,110,163,1,0,224,129,1,0,181,104,1,0,238,87,1,0,196,62,1,0,153,37,1,0,111,12,1,0,168,251,0,0,225,234,0,0,183,209,0,0,240,192,0,0,41,176,0,0,197,167,0,0,254,150,0,0,155,142,0,0,212,125,0,0,112,117,0,0,169,100,0,0,70,92,0,0,226,83,0,0,127,75,0,0,27,67,0,0,27,67,0,0,184,58,0,0,84,50,0,0,241,41,0,0,241,41,0,0,141,33,0,0,141,33,0,0,42,25,0,0,42,25,0,0,42,25,0,0,198,16,0,0,198,16,0,0,198,16,0,0,198,16,0,0,99,8,0,0,99,8,0,0,99,8,0,0,99,8,0,0,99,8,0,0,99,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,52,37,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,17,0,0,1,0,1,0,1,0,0,0,1,0,2,0,1,0,3,0,1,0,1,0,3,0,2,0,0,0,3,0,2,0,1,0,1,0,1,0,1,0,3,0,2,0,0,0,1,0,2,0,6,0,5,0,3,0,1,0,4,0,4,0,7,0,5,0,7,0,1,0,6,0,1,0,1,0,0,0,7,0,3,0,5,0,1,0,6,0,2,0,3,0,2,0,5,0,4,0,4,0,1,0,3,0,3,0,2,0,0,0,1,0,2,0,10,0,19,0,16,0,10,0,3,0,3,0,7,0,10,0,5,0,3,0,11,0,4,0,13,0,17,0,8,0,4,0,12,0,11,0,18,0,15,0,11,0,2,0,7,0,6,0,9,0,14,0,3,0,1,0,6,0,4,0,5,0,3,0,2,0,0,0,3,0,4,0,6,0,18,0,12,0,5,0,5,0,1,0,2,0,16,0,9,0,3,0,7,0,3,0,5,0,14,0,7,0,3,0,19,0,17,0,15,0,13,0,10,0,4,0,13,0,5,0,8,0,11,0,5,0,1,0,12,0,4,0,4,0,1,0,1,0,0,0,7,0,5,0,9,0,14,0,15,0,7,0,6,0,4,0,5,0,5,0,6,0,7,0,7,0,6,0,8,0,8,0,8,0,5,0,15,0,6,0,9,0,10,0,5,0,1,0,11,0,7,0,9,0,6,0,4,0,1,0,14,0,4,0,6,0,2,0,6,0,0,0,1,0,2,0,10,0,23,0,35,0,30,0,12,0,17,0,3,0,3,0,8,0,12,0,18,0,21,0,12,0,7,0,11,0,9,0,15,0,21,0,32,0,40,0,19,0,6,0,14,0,13,0,22,0,34,0,46,0,23,0,18,0,7,0,20,0,19,0,33,0,47,0,27,0,22,0,9,0,3,0,31,0,22,0,41,0,26,0,21,0,20,0,5,0,3,0,14,0,13,0,10,0,11,0,16,0,6,0,5,0,1,0,9,0,8,0,7,0,8,0,4,0,4,0,2,0,0,0,3,0,4,0,10,0,24,0,34,0,33,0,21,0,15,0,5,0,3,0,4,0,10,0,32,0,17,0,11,0,10,0,11,0,7,0,13,0,18,0,30,0,31,0,20,0,5,0,25,0,11,0,19,0,59,0,27,0,18,0,12,0,5,0,35,0,33,0,31,0,58,0,30,0,16,0,7,0,5,0,28,0,26,0,32,0,19,0,17,0,15,0,8,0,14,0,14,0,12,0,9,0,13,0,14,0,9,0,4,0,1,0,11,0,4,0,6,0,6,0,6,0,3,0,2,0,0,0,9,0,6,0,16,0,33,0,41,0,39,0,38,0,26,0,7,0,5,0,6,0,9,0,23,0,16,0,26,0,11,0,17,0,7,0,11,0,14,0,21,0,30,0,10,0,7,0,17,0,10,0,15,0,12,0,18,0,28,0,14,0,5,0,32,0,13,0,22,0,19,0,18,0,16,0,9,0,5,0,40,0,17,0,31,0,29,0,17,0,13,0,4,0,2,0,27,0,12,0,11,0,15,0,10,0,7,0,4,0,1,0,27,0,12,0,8,0,12,0,6,0,3,0,1,0,0,0,1,0,5,0,14,0,21,0,34,0,51,0,46,0,71,0,42,0,52,0,68,0,52,0,67,0,44,0,43,0,19,0,3,0,4,0,12,0,19,0,31,0,26,0,44,0,33,0,31,0,24,0,32,0,24,0,31,0,35,0,22,0,14,0,15,0,13,0,23,0,36,0,59,0,49,0,77,0,65,0,29,0,40,0,30,0,40,0,27,0,33,0,42,0,16,0,22,0,20,0,37,0,61,0,56,0,79,0,73,0,64,0,43,0,76,0,56,0,37,0,26,0,31,0,25,0,14,0,35,0,16,0,60,0,57,0,97,0,75,0,114,0,91,0,54,0,73,0,55,0,41,0,48,0,53,0,23,0,24,0,58,0,27,0,50,0,96,0,76,0,70,0,93,0,84,0,77,0,58,0,79,0,29,0,74,0,49,0,41,0,17,0,47,0,45,0,78,0,74,0,115,0,94,0,90,0,79,0,69,0,83,0,71,0,50,0,59,0,38,0,36,0,15,0,72,0,34,0,56,0,95,0,92,0,85,0,91,0,90,0,86,0,73,0,77,0,65,0,51,0,44,0,43,0,42,0,43,0,20,0,30,0,44,0,55,0,78,0,72,0,87,0,78,0,61,0,46,0,54,0,37,0,30,0,20,0,16,0,53,0,25,0,41,0,37,0,44,0,59,0,54,0,81,0,66,0,76,0,57,0,54,0,37,0,18,0,39,0,11,0,35,0,33,0,31,0,57,0,42,0,82,0,72,0,80,0,47,0,58,0,55,0,21,0,22,0,26,0,38,0,22,0,53,0,25,0,23,0,38,0,70,0,60,0,51,0,36,0,55,0,26,0,34,0,23,0,27,0,14,0,9,0,7,0,34,0,32,0,28,0,39,0,49,0,75,0,30,0,52,0,48,0,40,0,52,0,28,0,18,0,17,0,9,0,5,0,45,0,21,0,34,0,64,0,56,0,50,0,49,0,45,0,31,0,19,0,12,0,15,0,10,0,7,0,6,0,3,0,48,0,23,0,20,0,39,0,36,0,35,0,53,0,21,0,16,0,23,0,13,0,10,0,6,0,1,0,4,0,2,0,16,0,15,0,17,0,27,0,25,0,20,0,29,0,11,0,17,0,12,0,16,0,8,0,1,0,1,0,0,0,1,0,7,0,12,0,18,0,53,0,47,0,76,0,124,0,108,0,89,0,123,0,108,0,119,0,107,0,81,0,122,0,63,0,13,0,5,0,16,0,27,0,46,0,36,0,61,0,51,0,42,0,70,0,52,0,83,0,65,0,41,0,59,0,36,0,19,0,17,0,15,0,24,0,41,0,34,0,59,0,48,0,40,0,64,0,50,0,78,0,62,0,80,0,56,0,33,0,29,0,28,0,25,0,43,0,39,0,63,0,55,0,93,0,76,0,59,0,93,0,72,0,54,0,75,0,50,0,29,0,52,0,22,0,42,0,40,0,67,0,57,0,95,0,79,0,72,0,57,0,89,0,69,0,49,0,66,0,46,0,27,0,77,0,37,0,35,0,66,0,58,0,52,0,91,0,74,0,62,0,48,0,79,0,63,0,90,0,62,0,40,0,38,0,125,0,32,0,60,0,56,0,50,0,92,0,78,0,65,0,55,0,87,0,71,0,51,0,73,0,51,0,70,0,30,0,109,0,53,0,49,0,94,0,88,0,75,0,66,0,122,0,91,0,73,0,56,0,42,0,64,0,44,0,21,0,25,0,90,0,43,0,41,0,77,0,73,0,63,0,56,0,92,0,77,0,66,0,47,0,67,0,48,0,53,0,36,0,20,0,71,0,34,0,67,0,60,0,58,0,49,0,88,0,76,0,67,0,106,0,71,0,54,0,38,0,39,0,23,0,15,0,109,0,53,0,51,0,47,0,90,0,82,0,58,0,57,0,48,0,72,0,57,0,41,0,23,0,27,0,62,0,9,0,86,0,42,0,40,0,37,0,70,0,64,0,52,0,43,0,70,0,55,0,42,0,25,0,29,0,18,0,11,0,11,0,118,0,68,0,30,0,55,0,50,0,46,0,74,0,65,0,49,0,39,0,24,0,16,0,22,0,13,0,14,0,7,0,91,0,44,0,39,0,38,0,34,0,63,0,52,0,45,0,31,0,52,0,28,0,19,0,14,0,8,0,9,0,3,0,123,0,60,0,58,0,53,0,47,0,43,0,32,0,22,0,37,0,24,0,17,0,12,0,15,0,10,0,2,0,1,0,71,0,37,0,34,0,30,0,28,0,20,0,17,0,26,0,21,0,16,0,10,0,6,0,8,0,6,0,2,0,0,0,1,0,5,0,14,0,44,0,74,0,63,0,110,0,93,0,172,0,149,0,138,0,242,0,225,0,195,0,120,1,17,0,3,0,4,0,12,0,20,0,35,0,62,0,53,0,47,0,83,0,75,0,68,0,119,0,201,0,107,0,207,0,9,0,15,0,13,0,23,0,38,0,67,0,58,0,103,0,90,0,161,0,72,0,127,0,117,0,110,0,209,0,206,0,16,0,45,0,21,0,39,0,69,0,64,0,114,0,99,0,87,0,158,0,140,0,252,0,212,0,199,0,131,1,109,1,26,0,75,0,36,0,68,0,65,0,115,0,101,0,179,0,164,0,155,0,8,1,246,0,226,0,139,1,126,1,106,1,9,0,66,0,30,0,59,0,56,0,102,0,185,0,173,0,9,1,142,0,253,0,232,0,144,1,132,1,122,1,189,1,16,0,111,0,54,0,52,0,100,0,184,0,178,0,160,0,133,0,1,1,244,0,228,0,217,0,129,1,110,1,203,2,10,0,98,0,48,0,91,0,88,0,165,0,157,0,148,0,5,1,248,0,151,1,141,1,116,1,124,1,121,3,116,3,8,0,85,0,84,0,81,0,159,0,156,0,143,0,4,1,249,0,171,1,145,1,136,1,127,1,215,2,201,2,196,2,7,0,154,0,76,0,73,0,141,0,131,0,0,1,245,0,170,1,150,1,138,1,128,1,223,2,103,1,198,2,96,1,11,0,139,0,129,0,67,0,125,0,247,0,233,0,229,0,219,0,137,1,231,2,225,2,208,2,117,3,114,3,183,1,4,0,243,0,120,0,118,0,115,0,227,0,223,0,140,1,234,2,230,2,224,2,209,2,200,2,194,2,223,0,180,1,6,0,202,0,224,0,222,0,218,0,216,0,133,1,130,1,125,1,108,1,120,3,187,1,195,2,184,1,181,1,192,6,4,0,235,2,211,0,210,0,208,0,114,1,123,1,222,2,211,2,202,2,199,6,115,3,109,3,108,3,131,13,97,3,2,0,121,1,113,1,102,0,187,0,214,2,210,2,102,1,199,2,197,2,98,3,198,6,103,3,130,13,102,3,178,1,0,0,12,0,10,0,7,0,11,0,10,0,17,0,11,0,9,0,13,0,12,0,10,0,7,0,5,0,3,0,1,0,3,0,15,0,13,0,46,0,80,0,146,0,6,1,248,0,178,1,170,1,157,2,141,2,137,2,109,2,5,2,8,4,88,0,14,0,12,0,21,0,38,0,71,0,130,0,122,0,216,0,209,0,198,0,71,1,89,1,63,1,41,1,23,1,42,0,47,0,22,0,41,0,74,0,68,0,128,0,120,0,221,0,207,0,194,0,182,0,84,1,59,1,39,1,29,2,18,0,81,0,39,0,75,0,70,0,134,0,125,0,116,0,220,0,204,0,190,0,178,0,69,1,55,1,37,1,15,1,16,0,147,0,72,0,69,0,135,0,127,0,118,0,112,0,210,0,200,0,188,0,96,1,67,1,50,1,29,1,28,2,14,0,7,1,66,0,129,0,126,0,119,0,114,0,214,0,202,0,192,0,180,0,85,1,61,1,45,1,25,1,6,1,12,0,249,0,123,0,121,0,117,0,113,0,215,0,206,0,195,0,185,0,91,1,74,1,52,1,35,1,16,1,8,2,10,0,179,1,115,0,111,0,109,0,211,0,203,0,196,0,187,0,97,1,76,1,57,1,42,1,27,1,19,2,125,1,17,0,171,1,212,0,208,0,205,0,201,0,193,0,186,0,177,0,169,0,64,1,47,1,30,1,12,1,2,2,121,1,16,0,79,1,199,0,197,0,191,0,189,0,181,0,174,0,77,1,65,1,49,1,33,1,19,1,9,2,123,1,115,1,11,0,156,2,184,0,183,0,179,0,175,0,88,1,75,1,58,1,48,1,34,1,21,1,18,2,127,1,117,1,110,1,10,0,140,2,90,1,171,0,168,0,164,0,62,1,53,1,43,1,31,1,20,1,7,1,1,2,119,1,112,1,106,1,6,0,136,2,66,1,60,1,56,1,51,1,46,1,36,1,28,1,13,1,5,1,0,2,120,1,114,1,108,1,103,1,4,0,108,2,44,1,40,1,38,1,32,1,26,1,17,1,10,1,3,2,124,1,118,1,113,1,109,1,105,1,101,1,2,0,9,4,24,1,22,1,18,1,11,1,8,1,3,1,126,1,122,1,116,1,111,1,107,1,104,1,102,1,100,1,0,0,43,0,20,0,19,0,17,0,15,0,13,0,11,0,9,0,7,0,6,0,4,0,7,0,5,0,3,0,1,0,3,0,1,0,5,0,4,0,5,0,6,0,5,0,4,0,4,0,7,0,3,0,6,0,0,0,7,0,2,0,3,0,1,0,15,0,14,0,13,0,12,0,11,0,10,0,9,0,8,0,7,0,6,0,5,0,4,0,3,0,2,0,1,0,0,0,1,3,2,3,1,3,6,3,3,5,5,5,6,2,2,6,3,2,5,5,5,6,1,3,6,7,3,3,6,7,6,6,7,8,7,6,7,8,3,3,5,7,3,2,4,5,4,4,5,6,6,5,6,7,1,3,6,8,8,9,3,4,6,7,7,8,6,5,7,8,8,9,7,7,8,9,9,9,7,7,8,9,9,10,8,8,9,10,10,10,2,3,6,8,8,9,3,2,4,8,8,8,6,4,6,8,8,9,8,8,8,9,9,10,8,7,8,9,10,10,9,8,9,9,11,11,3,3,5,6,8,9,3,3,4,5,6,8,4,4,5,6,7,8,6,5,6,7,7,8,7,6,7,7,8,9,8,7,8,8,9,9,1,3,6,8,9,9,9,10,3,4,6,7,8,9,8,8,6,6,7,8,9,10,9,9,7,7,8,9,10,10,9,10,8,8,9,10,10,10,10,10,9,9,10,10,11,11,10,11,8,8,9,10,10,10,11,11,9,8,9,10,10,11,11,11,2,3,5,7,8,9,8,9,3,3,4,6,8,8,7,8,5,5,6,7,8,9,8,8,7,6,7,9,8,10,8,9,8,8,8,9,9,10,9,10,8,8,9,10,10,11,10,11,8,7,7,8,9,10,10,10,8,7,8,9,10,10,10,10,4,3,5,7,8,9,9,9,3,3,4,5,7,7,8,8,5,4,5,6,7,8,7,8,6,5,6,6,7,8,8,8,7,6,7,7,8,8,8,9,8,7,8,8,8,9,8,9,8,7,7,8,8,9,9,10,9,8,8,9,9,9,9,10,1,4,6,7,8,9,9,10,9,10,11,11,12,12,13,13,3,4,6,7,8,8,9,9,9,9,10,10,11,12,12,12,6,6,7,8,9,9,10,10,9,10,10,11,11,12,13,13,7,7,8,9,9,10,10,10,10,11,11,11,11,12,13,13,8,7,9,9,10,10,11,11,10,11,11,12,12,13,13,14,9,8,9,10,10,10,11,11,11,11,12,11,13,13,14,14,9,9,10,10,11,11,11,11,11,12,12,12,13,13,14,14,10,9,10,11,11,11,12,12,12,12,13,13,13,14,16,16,9,8,9,10,10,11,11,12,12,12,12,13,13,14,15,15,10,9,10,10,11,11,11,13,12,13,13,14,14,14,16,15,10,10,10,11,11,12,12,13,12,13,14,13,14,15,16,17,11,10,10,11,12,12,12,12,13,13,13,14,15,15,15,16,11,11,11,12,12,13,12,13,14,14,15,15,15,16,16,16,12,11,12,13,13,13,14,14,14,14,14,15,16,15,16,16,13,12,12,13,13,13,15,14,14,17,15,15,15,17,16,16,12,12,13,14,14,14,15,14,15,15,16,16,19,18,19,16,3,4,5,7,7,8,9,9,9,10,10,11,11,11,12,13,4,3,5,6,7,7,8,8,8,9,9,10,10,10,11,11,5,5,5,6,7,7,8,8,8,9,9,10,10,11,11,11,6,6,6,7,7,8,8,9,9,9,10,10,10,11,11,11,7,6,7,7,8,8,9,9,9,9,10,10,10,11,11,11,8,7,7,8,8,8,9,9,9,9,10,10,11,11,11,12,9,7,8,8,8,9,9,9,9,10,10,10,11,11,12,12,9,8,8,9,9,9,9,10,10,10,10,10,11,11,11,12,9,8,8,9,9,9,9,10,10,10,10,11,11,12,12,12,9,8,9,9,9,9,10,10,10,11,11,11,11,12,12,12,10,9,9,9,10,10,10,10,10,11,11,11,11,12,13,12,10,9,9,9,10,10,10,10,11,11,11,11,12,12,12,13,11,10,9,10,10,10,11,11,11,11,11,11,12,12,13,13,11,10,10,10,10,11,11,11,11,12,12,12,12,12,13,13,12,11,11,11,11,11,11,11,12,12,12,12,13,13,12,13,12,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13,1,4,6,8,9,9,10,10,11,11,11,12,12,12,13,9,3,4,6,7,8,9,9,9,10,10,10,11,12,11,12,8,6,6,7,8,9,9,10,10,11,10,11,11,11,12,12,9,8,7,8,9,9,10,10,10,11,11,12,12,12,13,13,10,9,8,9,9,10,10,11,11,11,12,12,12,13,13,13,9,9,8,9,9,10,11,11,12,11,12,12,13,13,13,14,10,10,9,9,10,11,11,11,11,12,12,12,12,13,13,14,10,10,9,10,10,11,11,11,12,12,13,13,13,13,15,15,10,10,10,10,11,11,11,12,12,13,13,13,13,14,14,14,10,11,10,10,11,11,12,12,13,13,13,13,14,13,14,13,11,11,11,10,11,12,12,12,12,13,14,14,14,15,15,14,10,12,11,11,11,12,12,13,14,14,14,14,14,14,13,14,11,12,12,12,12,12,13,13,13,13,15,14,14,14,14,16,11,14,12,12,12,13,13,14,14,14,16,15,15,15,17,15,11,13,13,11,12,14,14,13,14,14,15,16,15,17,15,14,11,9,8,8,9,9,10,10,10,11,11,11,11,11,11,11,8,4,4,6,7,8,9,9,10,10,11,11,11,11,11,12,9,4,4,5,6,7,8,8,9,9,9,10,10,10,10,10,8,6,5,6,7,7,8,8,9,9,9,9,10,10,10,11,7,7,6,7,7,8,8,8,9,9,9,9,10,10,10,10,7,8,7,7,8,8,8,8,9,9,9,10,10,10,10,11,7,9,7,8,8,8,8,9,9,9,9,10,10,10,10,10,7,9,8,8,8,8,9,9,9,9,10,10,10,10,10,11,7,10,8,8,8,9,9,9,9,10,10,10,10,10,11,11,8,10,9,9,9,9,9,9,9,9,10,10,10,10,11,11,8,10,9,9,9,9,9,9,10,10,10,10,10,11,11,11,8,11,9,9,9,9,10,10,10,10,10,10,11,11,11,11,8,11,10,9,9,9,10,10,10,10,10,10,11,11,11,11,8,11,10,10,10,10,10,10,10,10,10,11,11,11,11,11,8,11,10,10,10,10,10,10,10,11,11,11,11,11,11,11,8,12,10,10,10,10,10,10,11,11,11,11,11,11,11,11,8,8,7,7,7,7,7,7,7,7,7,7,8,8,8,8,4,1,4,4,5,4,6,5,6,4,5,5,6,5,6,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;Module["_i64Add"]=_i64Add;function _llvm_exp2_f32(x){return Math.pow(2,x)}function _llvm_exp2_f64(){return _llvm_exp2_f32.apply(null,arguments)}Module["_memset"]=_memset;Module["_bitshift64Lshr"]=_bitshift64Lshr;function _abort(){Module["abort"]()}function ___lock(){}function ___unlock(){}var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___muldsi3"]=___muldsi3;Module["___muldi3"]=___muldi3;function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}Module["_sbrk"]=_sbrk;function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;Module["_llvm_bswap_i32"]=_llvm_bswap_i32;function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffer){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j<len;j++){___syscall146.printChar(stream,HEAPU8[ptr+j])}ret+=len}return ret}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}__ATEXIT__.push((function(){var fflush=Module["_fflush"];if(fflush)fflush(0);var printChar=___syscall146.printChar;if(!printChar)return;var buffers=___syscall146.buffers;if(buffers[1].length)printChar(1,10);if(buffers[2].length)printChar(2,10)}));DYNAMICTOP_PTR=allocate(1,"i32",ALLOC_STATIC);STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=Runtime.alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;function invoke_ii(index,a1){try{return Module["dynCall_ii"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_iiii(index,a1,a2,a3){try{return Module["dynCall_iiii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity};Module.asmLibraryArg={"abort":abort,"assert":assert,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"invoke_ii":invoke_ii,"invoke_iiii":invoke_iiii,"_llvm_exp2_f64":_llvm_exp2_f64,"___lock":___lock,"_llvm_exp2_f32":_llvm_exp2_f32,"_abort":_abort,"___setErrNo":___setErrNo,"___syscall6":___syscall6,"___syscall140":___syscall140,"_emscripten_memcpy_big":_emscripten_memcpy_big,"___syscall54":___syscall54,"___unlock":___unlock,"___syscall146":___syscall146,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX};// EMSCRIPTEN_START_ASM --var asm=(function(global,env,buffer) { --"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.DYNAMICTOP_PTR|0;var j=env.tempDoublePtr|0;var k=env.ABORT|0;var l=env.STACKTOP|0;var m=env.STACK_MAX|0;var n=0;var o=0;var p=0;var q=0;var r=global.NaN,s=global.Infinity;var t=0,u=0,v=0,w=0,x=0.0;var y=0;var z=global.Math.floor;var A=global.Math.abs;var B=global.Math.sqrt;var C=global.Math.pow;var D=global.Math.cos;var E=global.Math.sin;var F=global.Math.tan;var G=global.Math.acos;var H=global.Math.asin;var I=global.Math.atan;var J=global.Math.atan2;var K=global.Math.exp;var L=global.Math.log;var M=global.Math.ceil;var N=global.Math.imul;var O=global.Math.min;var P=global.Math.max;var Q=global.Math.clz32;var R=env.abort;var S=env.assert;var T=env.enlargeMemory;var U=env.getTotalMemory;var V=env.abortOnCannotGrowMemory;var W=env.invoke_ii;var X=env.invoke_iiii;var Y=env._llvm_exp2_f64;var Z=env.___lock;var _=env._llvm_exp2_f32;var $=env._abort;var aa=env.___setErrNo;var ba=env.___syscall6;var ca=env.___syscall140;var da=env._emscripten_memcpy_big;var ea=env.___syscall54;var fa=env.___unlock;var ga=env.___syscall146;var ha=0.0; --// EMSCRIPTEN_START_FUNCS --function ka(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function la(){return l|0}function ma(a){a=a|0;l=a}function na(a,b){a=a|0;b=b|0;l=a;m=b}function oa(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function pa(a){a=a|0;y=a}function qa(){return y|0}function ra(a,b){a=a|0;b=b|0;c[a>>2]=gb(b)|0;c[a+4>>2]=b;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=32;return}function sa(a){a=a|0;a=c[a>>2]|0;if(!a)return;hb(a);return}function ta(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=a+16|0;i=c[k>>2]|0;if(i>>>0>d>>>0){d=i-d|0;c[k>>2]=d;k=a+12|0;c[k>>2]=c[k>>2]|b<<d;return}j=a+8|0;e=c[j>>2]|0;g=a+4|0;h=c[g>>2]|0;f=c[a>>2]|0;if((e+4|0)>>>0<h>>>0)g=i;else{f=jb(f,((h|0)/2|0)+h|0)|0;c[a>>2]=f;e=c[g>>2]|0;c[g>>2]=((e|0)/2|0)+e;g=c[k>>2]|0;e=c[j>>2]|0}i=d-g|0;d=a+12|0;c[f+e>>2]=ub(b>>>i|c[d>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+4;j=32-i|0;c[k>>2]=j;c[d>>2]=(i|0)==0?0:b<<j;return}function ua(a){a=a|0;return (c[a+8>>2]<<3)+32-(c[a+16>>2]|0)|0}function va(a){a=a|0;var b=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;C=l;l=l+416|0;B=C;if((c[a>>2]|0)>0){j=a+16|0;g=0;b=c[j>>2]|0;do{if((b|0)>0){f=0;do{b=0;do{if((c[a+25264+(g*4608|0)+(f*2304|0)+(b<<2)>>2]|0)<0?(h=a+2224+(g*4608|0)+(f*2304|0)+(b<<2)|0,i=c[h>>2]|0,(i|0)>0):0)c[h>>2]=0-i;b=b+1|0}while((b|0)!=576);f=f+1|0;b=c[j>>2]|0}while((f|0)<(b|0))}g=g+1|0}while((g|0)<(c[a>>2]|0))}j=a+116|0;tb(B|0,j|0,408)|0;z=a+96|0;ta(z,2047,11);i=a+8|0;ta(z,c[i>>2]|0,2);ta(z,c[a+12>>2]|0,2);ta(z,(c[a+76>>2]|0)==0&1,1);ta(z,c[a+68>>2]|0,4);A=a+72|0;ta(z,(c[A>>2]|0)%3|0,2);ta(z,c[a+32>>2]|0,1);ta(z,c[a+80>>2]|0,1);ta(z,c[a+20>>2]|0,2);ta(z,c[a+84>>2]|0,2);ta(z,c[a+88>>2]|0,1);ta(z,c[a+92>>2]|0,1);ta(z,c[a+28>>2]|0,2);do if((c[i>>2]|0)==3){ta(z,0,9);b=c[B>>2]|0;if((c[a>>2]|0)==2){ta(z,b,3);break}else{ta(z,b,5);break}}else{ta(z,0,8);b=c[B>>2]|0;if((c[a>>2]|0)==2){ta(z,b,2);break}else{ta(z,b,1);break}}while(0);if((c[i>>2]|0)==3?(c[a>>2]|0)>0:0){b=0;do{ta(z,c[B+8+(b<<4)>>2]|0,1);ta(z,c[B+8+(b<<4)+4>>2]|0,1);ta(z,c[B+8+(b<<4)+8>>2]|0,1);ta(z,c[B+8+(b<<4)+12>>2]|0,1);b=b+1|0}while((b|0)<(c[a>>2]|0))}y=a+16|0;b=c[y>>2]|0;if((b|0)>0){h=0;g=c[a>>2]|0;do{if((g|0)>0){f=0;do{ta(z,c[B+40+(h*184|0)+(f*92|0)>>2]|0,12);ta(z,c[B+40+(h*184|0)+(f*92|0)+4>>2]|0,9);ta(z,c[B+40+(h*184|0)+(f*92|0)+12>>2]|0,8);b=c[B+40+(h*184|0)+(f*92|0)+16>>2]|0;if((c[i>>2]|0)==3)ta(z,b,4);else ta(z,b,9);ta(z,0,1);ta(z,c[B+40+(h*184|0)+(f*92|0)+20>>2]|0,5);ta(z,c[B+40+(h*184|0)+(f*92|0)+24>>2]|0,5);ta(z,c[B+40+(h*184|0)+(f*92|0)+28>>2]|0,5);ta(z,c[B+40+(h*184|0)+(f*92|0)+32>>2]|0,4);ta(z,c[B+40+(h*184|0)+(f*92|0)+36>>2]|0,3);if((c[i>>2]|0)==3)ta(z,c[B+40+(h*184|0)+(f*92|0)+40>>2]|0,1);ta(z,c[B+40+(h*184|0)+(f*92|0)+44>>2]|0,1);ta(z,c[B+40+(h*184|0)+(f*92|0)+48>>2]|0,1);f=f+1|0;g=c[a>>2]|0}while((f|0)<(g|0));b=c[y>>2]|0}h=h+1|0}while((h|0)<(b|0))}tb(B|0,j|0,408)|0;if((b|0)<=0){l=C;return}x=0;f=c[a>>2]|0;do{if((f|0)>0){w=(x|0)==0;v=0;do{f=c[B+40+(x*184|0)+(v*92|0)+16>>2]|0;b=c[1044+(f<<2)>>2]|0;f=c[1108+(f<<2)>>2]|0;if(!w?(c[B+8+(v<<4)>>2]|0)!=0:0)t=39;else{ta(z,c[a+1208+(x*176|0)+(v*88|0)>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+4>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+8>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+12>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+16>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+20>>2]|0,b);if(w)t=40;else t=39}if((t|0)==39)if(!(c[B+8+(v<<4)+4>>2]|0))t=40;else t=41;if((t|0)==40){ta(z,c[a+1208+(x*176|0)+(v*88|0)+24>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+28>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+32>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+36>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+40>>2]|0,b);if(w)t=42;else t=41}if((t|0)==41)if(!(c[B+8+(v<<4)+8>>2]|0))t=42;else t=43;if((t|0)==42){ta(z,c[a+1208+(x*176|0)+(v*88|0)+44>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+48>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+52>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+56>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+60>>2]|0,f);if(w)t=44;else t=43}if((t|0)==43?(t=0,(c[B+8+(v<<4)+12>>2]|0)==0):0)t=44;if((t|0)==44){t=0;ta(z,c[a+1208+(x*176|0)+(v*88|0)+64>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+68>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+72>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+76>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+80>>2]|0,f)}q=c[A>>2]|0;u=ua(z)|0;b=c[B+40+(x*184|0)+(v*92|0)+4>>2]<<1;s=c[B+40+(x*184|0)+(v*92|0)+32>>2]|0;r=c[1464+(q*92|0)+(s+1<<2)>>2]|0;s=c[1464+(q*92|0)+(s+2+(c[B+40+(x*184|0)+(v*92|0)+36>>2]|0)<<2)>>2]|0;if((b|0)>0){q=0;do{g=c[B+40+(x*184|0)+(v*92|0)+20+(((q|0)>=(r|0)&1)+((q|0)>=(s|0)&1)<<2)>>2]|0;do if(g|0){h=c[a+2224+(v*4608|0)+(x*2304|0)+(q<<2)>>2]|0;k=c[a+2224+(v*4608|0)+(x*2304|0)+((q|1)<<2)>>2]|0;i=(h|0)>0;h=i?h:0-h|0;i=(i^1)&1;o=(k|0)>0;k=o?k:0-k|0;o=(o^1)&1;f=c[8+(g*24|0)+4>>2]|0;if((g|0)<=15){p=(N(f,h)|0)+k|0;j=e[(c[8+(g*24|0)+16>>2]|0)+(p<<1)>>1]|0;n=(h|0)==0;j=n?j:j<<1|i;m=(k|0)==0;ta(z,m?j:j<<1|o,((m^1)&1)+((n^1)&1)+(d[(c[8+(g*24|0)+20>>2]|0)+p>>0]|0)|0);break}m=c[8+(g*24|0)+8>>2]|0;E=(h|0)>14;F=E?15:h;D=(k|0)>14;j=D?15:k;n=(N(F,f)|0)+j|0;p=e[(c[8+(g*24|0)+16>>2]|0)+(n<<1)>>1]|0;n=d[(c[8+(g*24|0)+20>>2]|0)+n>>0]|0;f=E?h+-15|0:0;g=(F|0)==0;f=g?f:f<<1|i;g=(E?m:0)+((g^1)&1)|0;if(!D){if(j)t=51}else{g=g+m|0;f=f<<m|k+2147483633;t=51}if((t|0)==51){t=0;g=g+1|0;f=f<<1|o}ta(z,p,n);ta(z,f,g)}while(0);q=q+2|0}while((q|0)<(b|0))}f=(c[B+40+(x*184|0)+(v*92|0)+48>>2]|0)+32|0;h=(c[B+40+(x*184|0)+(v*92|0)+8>>2]<<2)+b|0;if((b|0)<(h|0)){g=c[8+(f*24|0)+16>>2]|0;f=c[8+(f*24|0)+20>>2]|0;do{E=c[a+2224+(v*4608|0)+(x*2304|0)+(b<<2)>>2]|0;D=c[a+2224+(v*4608|0)+(x*2304|0)+((b|1)<<2)>>2]|0;t=c[a+2224+(v*4608|0)+(x*2304|0)+(b+2<<2)>>2]|0;F=c[a+2224+(v*4608|0)+(x*2304|0)+(b+3<<2)>>2]|0;p=(E|0)>0;E=p?E:0-E|0;q=(D|0)>0;D=q?D:0-D|0;r=(t|0)>0;t=r?t:0-t|0;s=(F|0)>0;F=s?F:0-F|0;o=(D<<1)+E+(t<<2)+(F<<3)|0;ta(z,e[g+(o<<1)>>1]|0,d[f+o>>0]|0);E=(E|0)==0;p=((p|E)^1)&1;D=(D|0)==0;q=D?p:p<<1|(q^1)&1;t=(t|0)==0;r=t?q:q<<1|(r^1)&1;F=(F|0)==0;ta(z,F?r:r<<1|(s^1)&1,((t^1)&1)+(D?(E^1)&1:E?1:2)+((F^1)&1)|0);b=b+4|0}while((b|0)<(h|0))}b=ua(z)|0;b=(c[B+40+(x*184|0)+(v*92|0)>>2]|0)-(c[B+40+(x*184|0)+(v*92|0)+52>>2]|0)+(u-b)|0;if(b|0){f=(b|0)%32|0;if((b+31|0)>>>0>=63){b=(b|0)/32|0;do{b=b+-1|0;ta(z,-1,32)}while((b|0)!=0)}if(f|0)ta(z,(1<<f)+-1|0,f)}v=v+1|0;f=c[a>>2]|0}while((v|0)<(f|0));b=c[y>>2]|0}x=x+1|0}while((x|0)<(b|0));l=C;return}function wa(a,b,e,f,g,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,O=0,P=0;J=e+72|0;if((b|0)<0)c[J>>2]=(c[J>>2]|0)+-1;v=i+39100|0;w=i+34488|0;x=e+8|0;z=e+4|0;A=e+48|0;C=e+32|0;D=e+36|0;E=e+20|0;F=e+24|0;G=e+28|0;H=e+60|0;I=e+64|0;r=e+68|0;s=i+72|0;t=c[199]|0;u=c[205]|0;do{while(1){f=c[J>>2]|0;c[J>>2]=f+1;f=f+128|0;l=c[i+40480+(f<<2)>>2]|0;q=c[v>>2]|0;m=((l|0)<0)<<31>>31;q=rb(q|0,((q|0)<0)<<31>>31|0,l|0,m|0)|0;nb(q|0,y|0,-2147483648,0)|0;if((y|0)>165140)continue;k=i+39456+(f<<3)|0;j=c[w>>2]|0;g=0;e=0;do{f=c[j+(e<<2)>>2]|0;f=(f|0)>-1?f:0-f|0;f=rb(f|0,((f|0)<0)<<31>>31|0,l|0,m|0)|0;nb(f|0,y|0,-2147483648,0)|0;f=y;if((f|0)<1e4)f=c[i+40992+(f<<2)>>2]|0;else{K=+h[k>>3]*+(c[i+36796+(e<<2)>>2]|0)*4.656612875e-10;f=~~+B(+(+B(+K)*K))}c[a+(e<<2)>>2]=f;g=(g|0)<(f|0)?f:g;e=e+1|0}while((e|0)!=576);if((g|0)<=8192){g=576;break}}while(1){if((g|0)<=1){n=13;break}if(c[a+(g+-1<<2)>>2]|0){n=16;break}f=g+-2|0;if(!(c[a+(f<<2)>>2]|0))g=f;else{n=16;break}}do if((n|0)==13){c[x>>2]=0;n=23}else if((n|0)==16){c[x>>2]=0;if((g|0)>3){j=0;while(1){if((c[a+(g+-1<<2)>>2]|0)>=2){n=24;break}if((c[a+(g+-2<<2)>>2]|0)>=2){n=24;break}if((c[a+(g+-3<<2)>>2]|0)>=2){n=24;break}f=g+-4|0;e=j+1|0;if((c[a+(f<<2)>>2]|0)>=2){n=24;break}c[x>>2]=e;if((f|0)>3){g=f;j=e}else{n=18;break}}if((n|0)==18){n=0;q=f>>1;c[z>>2]=q;g=f;f=q}else if((n|0)==24){n=0;f=g>>>1;c[z>>2]=f;if(!j){k=0;j=0;break}else e=j}j=0;l=g;m=0;k=0;while(1){o=c[a+(l<<2)>>2]|0;L=c[a+((l|1)<<2)>>2]|0;M=c[a+(l+2<<2)>>2]|0;p=c[a+(l+3<<2)>>2]|0;q=(L<<1)+o+(M<<2)+(p<<3)|0;o=(o|0)!=0;p=((M|0)!=0&1)+((L|0)==0?o&1:o?2:1)+((p|0)!=0&1)|0;j=(d[t+q>>0]|0)+j+p|0;k=p+k+(d[u+q>>0]|0)|0;m=m+1|0;if((m|0)==(e|0))break;else l=l+4|0}}else n=23}while(0);if((n|0)==23){f=g>>1;c[z>>2]=f;k=0;j=0}M=(j|0)<(k|0);q=M?j:k;c[A>>2]=(M^1)&1;if(!f){c[C>>2]=0;c[D>>2]=0;j=c[H>>2]|0}else{j=c[s>>2]|0;e=0;while(1)if((c[1464+(j*92|0)+(e<<2)>>2]|0)<(g|0))e=e+1|0;else break;f=c[824+(e<<3)>>2]|0;while(1){k=1464+(j*92|0)+(f+1<<2)|0;l=c[k>>2]|0;if((f|0)!=0&(l|0)>(g|0))f=f+-1|0;else break}c[C>>2]=f;c[H>>2]=l;f=c[824+(e<<3)+4>>2]|0;while(1){e=c[k+(f+1<<2)>>2]|0;if((f|0)!=0&(e|0)>(g|0))f=f+-1|0;else break}c[D>>2]=f;c[I>>2]=e;c[r>>2]=g;j=l}c[E>>2]=0;c[F>>2]=0;c[G>>2]=0;if(!j)k=0;else{k=xa(a,0,j)|0;c[E>>2]=k}e=c[I>>2]|0;n=e>>>0>j>>>0;if(n){o=xa(a,j,e)|0;c[F>>2]=o}else o=0;if(g>>>0>e>>>0){p=xa(a,e,g)|0;c[G>>2]=p}else p=0;do if(k){m=c[8+(k*24|0)+4>>2]|0;l=c[8+(k*24|0)+8>>2]|0;f=(j|0)!=0;if(k>>>0>15){if(!f){f=0;break}k=c[8+(k*24|0)+20>>2]|0;f=0;g=0;do{L=c[a+(g<<2)>>2]|0;M=c[a+((g|1)<<2)>>2]|0;P=(L|0)>14;L=P?15:L;O=(M|0)>14;M=O?15:M;f=(P?l:0)+f+(O?l:0)+(d[k+((N(L,m)|0)+M)>>0]|0)+((L|0)!=0&1)+((M|0)!=0&1)|0;g=g+2|0}while(g>>>0<j>>>0)}else{if(!f){f=0;break}k=c[8+(k*24|0)+20>>2]|0;g=0;f=0;do{O=c[a+(g<<2)>>2]|0;P=c[a+((g|1)<<2)>>2]|0;f=((O|0)!=0&1)+f+((P|0)!=0&1)+(d[k+((N(O,m)|0)+P)>>0]|0)|0;g=g+2|0}while(g>>>0<j>>>0)}}else f=0;while(0);if(o){m=c[8+(o*24|0)+4>>2]|0;l=c[8+(o*24|0)+8>>2]|0;if(o>>>0>15)if(n){k=c[8+(o*24|0)+20>>2]|0;g=0;do{O=c[a+(j<<2)>>2]|0;P=c[a+(j+1<<2)>>2]|0;L=(O|0)>14;O=L?15:O;M=(P|0)>14;P=M?15:P;g=(L?l:0)+g+(M?l:0)+(d[k+((N(O,m)|0)+P)>>0]|0)+((O|0)!=0&1)+((P|0)!=0&1)|0;j=j+2|0}while(j>>>0<e>>>0)}else g=0;else if(n){k=c[8+(o*24|0)+20>>2]|0;g=0;do{O=c[a+(j<<2)>>2]|0;P=c[a+(j+1<<2)>>2]|0;g=((O|0)!=0&1)+g+((P|0)!=0&1)+(d[k+((N(O,m)|0)+P)>>0]|0)|0;j=j+2|0}while(j>>>0<e>>>0)}else g=0;f=g+f|0}if(p){l=c[r>>2]|0;m=c[8+(p*24|0)+4>>2]|0;k=c[8+(p*24|0)+8>>2]|0;g=e>>>0<l>>>0;if(p>>>0>15)if(g){j=c[8+(p*24|0)+20>>2]|0;g=0;do{O=c[a+(e<<2)>>2]|0;P=c[a+(e+1<<2)>>2]|0;L=(O|0)>14;O=L?15:O;M=(P|0)>14;P=M?15:P;g=(L?k:0)+g+(M?k:0)+(d[j+((N(O,m)|0)+P)>>0]|0)+((O|0)!=0&1)+((P|0)!=0&1)|0;e=e+2|0}while(e>>>0<l>>>0)}else g=0;else if(g){j=c[8+(p*24|0)+20>>2]|0;g=0;do{O=c[a+(e<<2)>>2]|0;P=c[a+(e+1<<2)>>2]|0;g=((O|0)!=0&1)+g+((P|0)!=0&1)+(d[j+((N(O,m)|0)+P)>>0]|0)|0;e=e+2|0}while(e>>>0<l>>>0)}else g=0;f=g+f|0}f=f+q|0}while((f|0)>(b|0));return f|0}function xa(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(b>>>0<e>>>0){f=b;g=0}else{e=0;return e|0}do{m=c[a+(f<<2)>>2]|0;g=(g|0)<(m|0)?m:g;f=f+1|0}while((f|0)!=(e|0));if(!g){e=0;return e|0}if((g|0)>=15){f=g+-15|0;if((c[95]|0)>>>0<f>>>0)if((c[101]|0)>>>0<f>>>0)if((c[107]|0)>>>0<f>>>0)if((c[113]|0)>>>0<f>>>0)if((c[119]|0)>>>0<f>>>0)if((c[125]|0)>>>0<f>>>0)if((c[131]|0)>>>0<f>>>0)if((c[137]|0)>>>0<f>>>0)m=(c[143]|0)>>>0<f>>>0?0:23;else m=22;else m=21;else m=20;else m=19;else m=18;else m=17;else m=16;else m=15;if((c[149]|0)>>>0<f>>>0)if((c[155]|0)>>>0<f>>>0)if((c[161]|0)>>>0<f>>>0)if((c[167]|0)>>>0<f>>>0)if((c[173]|0)>>>0<f>>>0)if((c[179]|0)>>>0<f>>>0)if((c[185]|0)>>>0<f>>>0)l=(c[191]|0)>>>0<f>>>0?0:31;else l=30;else l=29;else l=28;else l=27;else l=26;else l=25;else l=24;if(m){i=c[8+(m*24|0)+4>>2]|0;h=c[8+(m*24|0)+8>>2]|0;j=c[8+(m*24|0)+20>>2]|0;if(m>>>0>15){f=0;g=b;do{n=c[a+(g<<2)>>2]|0;k=c[a+(g+1<<2)>>2]|0;p=(n|0)>14;n=p?15:n;o=(k|0)>14;k=o?15:k;f=(p?h:0)+f+(o?h:0)+(d[j+((N(n,i)|0)+k)>>0]|0)+((n|0)!=0&1)+((k|0)!=0&1)|0;g=g+2|0}while(g>>>0<e>>>0);k=f}else{g=b;f=0;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;f=((o|0)!=0&1)+f+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;g=g+2|0}while(g>>>0<e>>>0);k=f}}else k=0;if(!l){p=0;p=(p|0)<(k|0);p=p?l:m;return p|0}i=c[8+(l*24|0)+4>>2]|0;h=c[8+(l*24|0)+8>>2]|0;j=c[8+(l*24|0)+20>>2]|0;if(l>>>0>15){f=0;g=b;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;b=(o|0)>14;o=b?15:o;n=(p|0)>14;p=n?15:p;f=(b?h:0)+f+(n?h:0)+(d[j+((N(o,i)|0)+p)>>0]|0)+((o|0)!=0&1)+((p|0)!=0&1)|0;g=g+2|0}while(g>>>0<e>>>0);p=(f|0)<(k|0);p=p?l:m;return p|0}else{g=b;f=0;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;f=((o|0)!=0&1)+f+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;g=g+2|0}while(g>>>0<e>>>0);p=(f|0)<(k|0);p=p?l:m;return p|0}}else k=14;while(1){l=k+-1|0;if(!k){f=0;h=44;break}if((c[8+(l*24|0)>>2]|0)>>>0>g>>>0)break;else k=l}if((h|0)==44)return f|0;if(!l){p=0;return p|0}i=c[8+(l*24|0)+4>>2]|0;h=c[8+(l*24|0)+8>>2]|0;j=c[8+(l*24|0)+20>>2]|0;if(l>>>0>15){f=0;g=b;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;m=(o|0)>14;o=m?15:o;n=(p|0)>14;p=n?15:p;f=(m?h:0)+f+(n?h:0)+(d[j+((N(o,i)|0)+p)>>0]|0)+((o|0)!=0&1)+((p|0)!=0&1)|0;g=g+2|0}while(g>>>0<e>>>0);j=f}else{g=b;f=0;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;f=((o|0)!=0&1)+f+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;g=g+2|0}while(g>>>0<e>>>0);j=f}switch(k|0){case 3:{h=c[21]|0;i=c[25]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[i+((N(o,h)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(j|0)?l:3;return p|0}case 6:{h=c[39]|0;i=c[43]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[i+((N(o,h)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(j|0)?l:6;return p|0}case 8:{g=c[51]|0;h=c[55]|0;f=b;i=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;i=((o|0)!=0&1)+i+((p|0)!=0&1)+(d[h+((N(o,g)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);h=(i|0)>(j|0);k=h?l:8;h=h?j:i;i=c[57]|0;j=c[61]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);return ((g|0)>(h|0)?k:9)|0}case 11:{g=c[69]|0;h=c[73]|0;f=b;i=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;i=((o|0)!=0&1)+i+((p|0)!=0&1)+(d[h+((N(o,g)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);h=(i|0)>(j|0);k=h?l:11;h=h?j:i;i=c[75]|0;j=c[79]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(h|0)?k:12;return p|0}case 14:{h=c[93]|0;i=c[97]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[i+((N(o,h)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(j|0)?l:15;return p|0}default:{p=l;return p|0}}return 0}function ya(a,b,e,f,g,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0;K=i+39100|0;L=i+34488|0;M=i+156+(f*184|0)+(g*92|0)+8|0;O=i+156+(f*184|0)+(g*92|0)+4|0;u=i+156+(f*184|0)+(g*92|0)+48|0;v=i+156+(f*184|0)+(g*92|0)+32|0;w=i+156+(f*184|0)+(g*92|0)+36|0;x=i+156+(f*184|0)+(g*92|0)+20|0;z=i+156+(f*184|0)+(g*92|0)+24|0;A=i+156+(f*184|0)+(g*92|0)+28|0;C=i+156+(f*184|0)+(g*92|0)+60|0;D=i+156+(f*184|0)+(g*92|0)+64|0;E=i+156+(f*184|0)+(g*92|0)+68|0;F=i+72|0;G=c[199]|0;H=c[205]|0;t=120;P=-120;do{I=(t|0)/2|0;J=I+P|0;b=J+127|0;n=c[i+40480+(b<<2)>>2]|0;s=c[K>>2]|0;o=((n|0)<0)<<31>>31;s=rb(s|0,((s|0)<0)<<31>>31|0,n|0,o|0)|0;nb(s|0,y|0,-2147483648,0)|0;if((y|0)<=165140){m=i+39456+(b<<3)|0;l=c[L>>2]|0;j=0;k=0;do{b=c[l+(k<<2)>>2]|0;b=(b|0)>-1?b:0-b|0;b=rb(b|0,((b|0)<0)<<31>>31|0,n|0,o|0)|0;nb(b|0,y|0,-2147483648,0)|0;b=y;if((b|0)<1e4)b=c[i+40992+(b<<2)>>2]|0;else{Q=+h[m>>3]*+(c[i+36796+(k<<2)>>2]|0)*4.656612875e-10;b=~~+B(+(+B(+Q)*Q))}c[e+(k<<2)>>2]=b;j=(j|0)<(b|0)?b:j;k=k+1|0}while((k|0)!=576);if((j|0)<=8192){j=576;while(1){if((j|0)<=1){n=10;break}if(c[e+(j+-1<<2)>>2]|0){n=13;break}b=j+-2|0;if(!(c[e+(b<<2)>>2]|0))j=b;else{n=13;break}}do if((n|0)==10){c[M>>2]=0;n=20}else if((n|0)==13){c[M>>2]=0;if((j|0)>3){l=0;while(1){if((c[e+(j+-1<<2)>>2]|0)>=2){n=21;break}if((c[e+(j+-2<<2)>>2]|0)>=2){n=21;break}if((c[e+(j+-3<<2)>>2]|0)>=2){n=21;break}b=j+-4|0;k=l+1|0;if((c[e+(b<<2)>>2]|0)>=2){n=21;break}c[M>>2]=k;if((b|0)>3){j=b;l=k}else{n=15;break}}if((n|0)==15){s=b>>1;c[O>>2]=s;j=b;b=s}else if((n|0)==21){b=j>>>1;c[O>>2]=b;if(!l){c[u>>2]=1;b=0;n=27;break}else k=l}l=0;n=j;o=0;m=0;while(1){q=c[e+(n<<2)>>2]|0;p=c[e+((n|1)<<2)>>2]|0;R=c[e+(n+2<<2)>>2]|0;r=c[e+(n+3<<2)>>2]|0;s=(p<<1)+q+(R<<2)+(r<<3)|0;q=(q|0)!=0;r=((R|0)!=0&1)+((p|0)==0?q&1:q?2:1)+((r|0)!=0&1)|0;l=(d[G+s>>0]|0)+l+r|0;m=r+m+(d[H+s>>0]|0)|0;o=o+1|0;if((o|0)==(k|0)){k=b;n=25;break}else n=n+4|0}}else n=20}while(0);if((n|0)==20){k=j>>1;c[O>>2]=k;m=0;l=0;n=25}if((n|0)==25){n=0;R=(l|0)<(m|0);b=R?l:m;c[u>>2]=(R^1)&1;if(!k){c[v>>2]=0;c[w>>2]=0;s=b;l=c[C>>2]|0}else n=27}if((n|0)==27){m=c[F>>2]|0;l=0;while(1)if((c[1464+(m*92|0)+(l<<2)>>2]|0)<(j|0))l=l+1|0;else break;k=c[824+(l<<3)>>2]|0;while(1){n=1464+(m*92|0)+(k+1<<2)|0;o=c[n>>2]|0;if((k|0)!=0&(o|0)>(j|0))k=k+-1|0;else break}c[v>>2]=k;c[C>>2]=o;k=c[824+(l<<3)+4>>2]|0;while(1){l=c[n+(k+1<<2)>>2]|0;if((k|0)!=0&(l|0)>(j|0))k=k+-1|0;else break}c[w>>2]=k;c[D>>2]=l;c[E>>2]=j;s=b;l=o}c[x>>2]=0;c[z>>2]=0;c[A>>2]=0;if(!l)m=0;else{m=xa(e,0,l)|0;c[x>>2]=m}k=c[D>>2]|0;p=k>>>0>l>>>0;if(p){q=xa(e,l,k)|0;c[z>>2]=q}else q=0;if(j>>>0>k>>>0){r=xa(e,k,j)|0;c[A>>2]=r}else r=0;do if(m){o=c[8+(m*24|0)+4>>2]|0;n=c[8+(m*24|0)+8>>2]|0;b=(l|0)!=0;if(m>>>0>15){if(!b){b=0;break}m=c[8+(m*24|0)+20>>2]|0;b=0;j=0;do{S=c[e+(j<<2)>>2]|0;R=c[e+((j|1)<<2)>>2]|0;U=(S|0)>14;S=U?15:S;T=(R|0)>14;R=T?15:R;b=(U?n:0)+b+(T?n:0)+(d[m+((N(S,o)|0)+R)>>0]|0)+((S|0)!=0&1)+((R|0)!=0&1)|0;j=j+2|0}while(j>>>0<l>>>0)}else{if(!b){b=0;break}m=c[8+(m*24|0)+20>>2]|0;j=0;b=0;do{T=c[e+(j<<2)>>2]|0;U=c[e+((j|1)<<2)>>2]|0;b=((T|0)!=0&1)+b+((U|0)!=0&1)+(d[m+((N(T,o)|0)+U)>>0]|0)|0;j=j+2|0}while(j>>>0<l>>>0)}}else b=0;while(0);if(q){o=c[8+(q*24|0)+4>>2]|0;n=c[8+(q*24|0)+8>>2]|0;if(q>>>0>15)if(p){m=c[8+(q*24|0)+20>>2]|0;j=0;do{T=c[e+(l<<2)>>2]|0;U=c[e+(l+1<<2)>>2]|0;R=(T|0)>14;T=R?15:T;S=(U|0)>14;U=S?15:U;j=(R?n:0)+j+(S?n:0)+(d[m+((N(T,o)|0)+U)>>0]|0)+((T|0)!=0&1)+((U|0)!=0&1)|0;l=l+2|0}while(l>>>0<k>>>0)}else j=0;else if(p){m=c[8+(q*24|0)+20>>2]|0;j=0;do{T=c[e+(l<<2)>>2]|0;U=c[e+(l+1<<2)>>2]|0;j=((T|0)!=0&1)+j+((U|0)!=0&1)+(d[m+((N(T,o)|0)+U)>>0]|0)|0;l=l+2|0}while(l>>>0<k>>>0)}else j=0;b=j+b|0}if(r){n=c[E>>2]|0;o=c[8+(r*24|0)+4>>2]|0;m=c[8+(r*24|0)+8>>2]|0;j=k>>>0<n>>>0;if(r>>>0>15)if(j){l=c[8+(r*24|0)+20>>2]|0;j=0;do{T=c[e+(k<<2)>>2]|0;U=c[e+(k+1<<2)>>2]|0;R=(T|0)>14;T=R?15:T;S=(U|0)>14;U=S?15:U;j=(R?m:0)+j+(S?m:0)+(d[l+((N(T,o)|0)+U)>>0]|0)+((T|0)!=0&1)+((U|0)!=0&1)|0;k=k+2|0}while(k>>>0<n>>>0)}else j=0;else if(j){l=c[8+(r*24|0)+20>>2]|0;j=0;do{T=c[e+(k<<2)>>2]|0;U=c[e+(k+1<<2)>>2]|0;j=((T|0)!=0&1)+j+((U|0)!=0&1)+(d[l+((N(T,o)|0)+U)>>0]|0)|0;k=k+2|0}while(k>>>0<n>>>0)}else j=0;b=j+b|0}b=b+s|0}else b=1e5}else b=1e5;U=(b|0)<(a|0);P=U?P:J;t=U?I:t-I|0}while((t|0)>1);l=i+156+(f*184|0)+(g*92|0)|0;c[i+156+(f*184|0)+(g*92|0)+72>>2]=P;b=c[i+156+(f*184|0)+(g*92|0)+16>>2]|0;k=c[1044+(b<<2)>>2]|0;b=c[1108+(b<<2)>>2]|0;if(f){j=b*5|0;b=((c[i+124+(g<<4)+4>>2]|0)==0?k*5|0:0)+((c[i+124+(g<<4)>>2]|0)==0?k*6|0:0)+((c[i+124+(g<<4)+8>>2]|0)==0?j:0)|0;if(c[i+124+(g<<4)+12>>2]|0){U=b;T=i+156+(f*184|0)+(g*92|0)+52|0;c[T>>2]=U;U=a-U|0;U=wa(e,U,l,0,0,i)|0;T=c[T>>2]|0;U=T+U|0;c[l>>2]=U;return U|0}}else{j=b*5|0;b=j+(k*11|0)|0}U=b+j|0;T=i+156+(f*184|0)+(g*92|0)+52|0;c[T>>2]=U;U=a-U|0;U=wa(e,U,l,0,0,i)|0;T=c[T>>2]|0;U=T+U|0;c[l>>2]=U;return U|0}function za(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=l;l=l+672|0;t=F;b=c[a>>2]|0;if(!b){Pa(a);l=F;return}z=a+16|0;A=a+34488|0;B=a+39100|0;C=a+8|0;D=a+72|0;E=a+39452|0;u=a+39448|0;v=a+39104|0;w=a+39108|0;x=b*23|0;d=c[z>>2]|0;s=0;while(1){r=x+(N(s,-23)|0)|0;b=b+-1|0;if((d|0)>0){q=a+((b<<4)+124)|0;p=0;while(1){o=a+140+(r+(p*46|0)<<2)|0;c[A>>2]=a+25264+(b*4608|0)+(p*2304|0);d=576;e=0;a:while(1){c[B>>2]=e;while(1){f=d+-1|0;if(!d)break a;n=c[(c[A>>2]|0)+(f<<2)>>2]|0;e=((n|0)<0)<<31>>31;e=rb(n|0,e|0,n|0,e|0)|0;e=nb(e|0,y|0,1073741824,0)|0;e=pb(e|0,y|0,31)|0;c[a+34492+(f<<2)>>2]=e;e=c[(c[A>>2]|0)+(f<<2)>>2]|0;e=(e|0)>-1?e:0-e|0;c[a+36796+(f<<2)>>2]=e;if((e|0)>(c[B>>2]|0)){d=f;continue a}else d=f}}m=a+2224+(b*4608|0)+(p*2304|0)|0;n=a+156+(p*184|0)+(b*92|0)|0;c[a+156+(p*184|0)+(b*92|0)+56>>2]=21;ob(t+(p*336|0)+(b*168|0)|0,0,168)|0;b:do if((c[C>>2]|0)==3){k=c[D>>2]|0;c[a+39448+(p<<2)>>2]=c[B>>2];d=0;e=575;while(1){d=(c[a+34492+(e<<2)>>2]>>10)+d|0;if(!e)break;else e=e+-1|0}if(!d)d=0;else d=~~(+L(+(+(d|0)*4.768371584e-07))/.69314718);c[a+39104+(p<<2)>>2]=d;i=20;j=c[1464+(k*92|0)+84>>2]|0;while(1){f=j;j=c[1464+(k*92|0)+(i<<2)>>2]|0;if((j|0)<(f|0)){d=0;e=j;do{d=(c[a+34492+(e<<2)>>2]>>10)+d|0;e=e+1|0}while((e|0)!=(f|0));if(d)d=~~(+L(+(+(d|0)*4.768371584e-07))/.69314718);else d=0}else d=0;c[a+39112+(p*84|0)+(i<<2)>>2]=d;g=+h[t+(p*336|0)+(b*168|0)+(i<<3)>>3];if(g!=0.0)d=~~(+L(+g)/.69314718);else d=0;c[a+39280+(p*84|0)+(i<<2)>>2]=d;if(!i)break;else i=i+-1|0}if((p|0)==1){j=(c[u>>2]|0)!=0;e=c[E>>2]|0?3:2;i=(c[v>>2]|0)-(c[w>>2]|0)|0;i=(((i|0)>-1?i:0-i|0)|0)<10;d=0;f=20;while(1){k=(c[a+39112+(f<<2)>>2]|0)-(c[a+39196+(f<<2)>>2]|0)|0;d=((k|0)>-1?k:0-k|0)+d|0;if(!f)break;else f=f+-1|0}if(((j&1)+e+(i&1)+((d|0)<100&1)|0)==6){d=0;e=0}else{c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;break}do{while(1){k=a+124+(b<<4)+(d<<2)|0;c[k>>2]=0;d=d+1|0;j=e;e=c[1008+(d<<2)>>2]|0;if((j|0)<(e|0)){f=0;i=0;do{G=(c[a+39112+(j<<2)>>2]|0)-(c[a+39196+(j<<2)>>2]|0)|0;f=((G|0)>-1?G:0-G|0)+f|0;G=(c[a+39280+(j<<2)>>2]|0)-(c[a+39364+(j<<2)>>2]|0)|0;i=((G|0)>-1?G:0-G|0)+i|0;j=j+1|0}while((j|0)!=(e|0))}else{i=0;f=0}if((f|0)<10&(i|0)<10)break;c[k>>2]=0;if((d|0)>=4)break b}c[k>>2]=1}while((d|0)<4)}}while(0);d=Na(a+2192+(b<<4)+(p<<3)|0,a)|0;e=a+1208+(p*176|0)+(b*88|0)|0;f=e+88|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));ob(a+1560+(p*312|0)+(b*156|0)|0,0,156)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[n>>2]=0;c[a+156+(p*184|0)+(b*92|0)+4>>2]=0;c[a+156+(p*184|0)+(b*92|0)+8>>2]=0;e=a+156+(p*184|0)+(b*92|0)+16|0;f=e+40|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));if(c[B>>2]|0)c[n>>2]=ya(d,0,m,p,b,a)|0;Oa(n,a);c[a+156+(p*184|0)+(b*92|0)+12>>2]=(c[a+156+(p*184|0)+(b*92|0)+72>>2]|0)+210;p=p+1|0;d=c[z>>2]|0;if((p|0)>=(d|0))break}}if(!b)break;else s=s+1|0}Pa(a);l=F;return}function Aa(a){a=a|0;var b=0,d=0,e=0.0;b=128;d=127;while(1){e=+Y(+(+(128-b|0)*.25));h[a+39456+(d<<3)>>3]=e;e=e*2.0;c[a+40480+(d<<2)>>2]=e>2147483647.0?2147483647:~~(e+.5);if(!d){b=9999;break}else{b=d;d=d+-1|0}}while(1){e=+(b|0);c[a+40992+(b<<2)>>2]=~~(+B(+(e*+B(+e)))+-.0946+.5);if(!b)break;else b=b+-1|0}return}function Ba(a){a=a|0;var b=0,d=0.0,e=0;b=17;while(1){d=+(b<<1|1|0);e=35;while(1){c[a+80992+(b*144|0)+(e<<2)>>2]=~~(+E(+((+(e|0)+.5)*.087266462599717))*+D(+(d*(+((e<<1)+19|0)*.043633231299858195)))*2147483647.0);if(!e)break;else e=e+-1|0}if(!b)break;else b=b+-1|0}return}function Ca(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;s=l;l=l+144|0;p=s;d=c[a>>2]|0;if(!d){l=s;return}q=a+16|0;r=p+140|0;do{d=d+-1|0;e=c[q>>2]|0;if((e|0)>0){o=a+2184+(d<<2)|0;n=0;do{m=a+25264+(d*4608|0)+(n*2304|0)|0;k=n;n=n+1|0;e=0;do{Ea(o,a+11440+(d*6912|0)+(n*2304|0)+(e<<7)|0,d,a,b);j=e|1;Ea(o,a+11440+(d*6912|0)+(n*2304|0)+(j<<7)|0,d,a,b);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+4|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+12|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+20|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+28|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+36|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+44|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+52|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+60|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+68|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+76|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+84|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+92|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+100|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+108|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+116|0;c[i>>2]=0-(c[i>>2]|0);j=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+124|0;c[j>>2]=0-(c[j>>2]|0);e=e+2|0}while((e|0)<18);j=0;while(1){e=18;f=17;while(1){c[p+(f<<2)>>2]=c[a+11440+(d*6912|0)+(k*2304|0)+(f<<7)+(j<<2)>>2];c[p+(e+17<<2)>>2]=c[a+11440+(d*6912|0)+(n*2304|0)+(f<<7)+(j<<2)>>2];if(!f)break;else{e=f;f=f+-1|0}}g=c[r>>2]|0;h=((g|0)<0)<<31>>31;i=17;while(1){e=c[a+80992+(i*144|0)+140>>2]|0;rb(e|0,((e|0)<0)<<31>>31|0,g|0,h|0)|0;e=35;f=y;do{v=e+-1|0;t=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,t|0,((t|0)<0)<<31>>31|0)|0;t=y+f|0;v=e+-2|0;u=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;t=t+y|0;u=e+-3|0;v=c[p+(u<<2)>>2]|0;u=c[a+80992+(i*144|0)+(u<<2)>>2]|0;rb(u|0,((u|0)<0)<<31>>31|0,v|0,((v|0)<0)<<31>>31|0)|0;t=t+y|0;v=e+-4|0;u=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;t=t+y|0;u=e+-5|0;v=c[p+(u<<2)>>2]|0;u=c[a+80992+(i*144|0)+(u<<2)>>2]|0;rb(u|0,((u|0)<0)<<31>>31|0,v|0,((v|0)<0)<<31>>31|0)|0;t=t+y|0;v=e+-6|0;u=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;t=t+y|0;e=e+-7|0;u=c[p+(e<<2)>>2]|0;v=c[a+80992+(i*144|0)+(e<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;f=t+y|0}while((e|0)!=0);c[m+(j*72|0)+(i<<2)>>2]=f;if(!i)break;else i=i+-1|0}if(!j){j=1;continue}v=m+(j*72|0)|0;e=c[v>>2]|0;u=((e|0)<0)<<31>>31;w=rb(e|0,u|0,1841452035,0)|0;i=y;t=j+-1|0;h=m+(t*72|0)+68|0;g=c[h>>2]|0;f=((g|0)<0)<<31>>31;x=rb(g|0,f|0,1104871221,0)|0;i=nb(x|0,y|0,w|0,i|0)|0;i=pb(i|0,y|0,31)|0;u=rb(e|0,u|0,-1104871221,-1)|0;e=y;f=rb(g|0,f|0,1841452035,0)|0;e=nb(f|0,y|0,u|0,e|0)|0;e=pb(e|0,y|0,31)|0;c[h>>2]=e;c[v>>2]=i;v=m+(j*72|0)+4|0;i=c[v>>2]|0;h=((i|0)<0)<<31>>31;e=rb(i|0,h|0,1893526520,0)|0;u=y;f=m+(t*72|0)+64|0;g=c[f>>2]|0;w=((g|0)<0)<<31>>31;x=rb(g|0,w|0,1013036688,0)|0;u=nb(x|0,y|0,e|0,u|0)|0;u=pb(u|0,y|0,31)|0;h=rb(i|0,h|0,-1013036688,-1)|0;i=y;w=rb(g|0,w|0,1893526520,0)|0;i=nb(w|0,y|0,h|0,i|0)|0;i=pb(i|0,y|0,31)|0;c[f>>2]=i;c[v>>2]=u;v=m+(j*72|0)+8|0;u=c[v>>2]|0;f=((u|0)<0)<<31>>31;i=rb(u|0,f|0,2039311994,0)|0;h=y;w=m+(t*72|0)+60|0;g=c[w>>2]|0;e=((g|0)<0)<<31>>31;x=rb(g|0,e|0,672972958,0)|0;h=nb(x|0,y|0,i|0,h|0)|0;h=pb(h|0,y|0,31)|0;f=rb(u|0,f|0,-672972958,-1)|0;u=y;e=rb(g|0,e|0,2039311994,0)|0;u=nb(e|0,y|0,f|0,u|0)|0;u=pb(u|0,y|0,31)|0;c[w>>2]=u;c[v>>2]=h;v=m+(j*72|0)+12|0;h=c[v>>2]|0;w=((h|0)<0)<<31>>31;u=rb(h|0,w|0,2111652007,0)|0;f=y;e=m+(t*72|0)+56|0;g=c[e>>2]|0;i=((g|0)<0)<<31>>31;x=rb(g|0,i|0,390655621,0)|0;f=nb(x|0,y|0,u|0,f|0)|0;f=pb(f|0,y|0,31)|0;w=rb(h|0,w|0,-390655621,-1)|0;h=y;i=rb(g|0,i|0,2111652007,0)|0;h=nb(i|0,y|0,w|0,h|0)|0;h=pb(h|0,y|0,31)|0;c[e>>2]=h;c[v>>2]=f;v=m+(j*72|0)+16|0;f=c[v>>2]|0;e=((f|0)<0)<<31>>31;h=rb(f|0,e|0,2137858230,0)|0;w=y;i=m+(t*72|0)+52|0;g=c[i>>2]|0;u=((g|0)<0)<<31>>31;x=rb(g|0,u|0,203096531,0)|0;w=nb(x|0,y|0,h|0,w|0)|0;w=pb(w|0,y|0,31)|0;e=rb(f|0,e|0,-203096531,-1)|0;f=y;u=rb(g|0,u|0,2137858230,0)|0;f=nb(u|0,y|0,e|0,f|0)|0;f=pb(f|0,y|0,31)|0;c[i>>2]=f;c[v>>2]=w;v=m+(j*72|0)+20|0;w=c[v>>2]|0;i=((w|0)<0)<<31>>31;f=rb(w|0,i|0,2145680959,0)|0;e=y;u=m+(t*72|0)+48|0;g=c[u>>2]|0;h=((g|0)<0)<<31>>31;x=rb(g|0,h|0,87972919,0)|0;e=nb(x|0,y|0,f|0,e|0)|0;e=pb(e|0,y|0,31)|0;i=rb(w|0,i|0,-87972919,-1)|0;w=y;h=rb(g|0,h|0,2145680959,0)|0;w=nb(h|0,y|0,i|0,w|0)|0;w=pb(w|0,y|0,31)|0;c[u>>2]=w;c[v>>2]=e;v=m+(j*72|0)+24|0;e=c[v>>2]|0;u=((e|0)<0)<<31>>31;w=rb(e|0,u|0,2147267170,0)|0;i=y;h=m+(t*72|0)+44|0;g=c[h>>2]|0;f=((g|0)<0)<<31>>31;x=rb(g|0,f|0,30491193,0)|0;i=nb(x|0,y|0,w|0,i|0)|0;i=pb(i|0,y|0,31)|0;u=rb(e|0,u|0,-30491193,-1)|0;e=y;f=rb(g|0,f|0,2147267170,0)|0;e=nb(f|0,y|0,u|0,e|0)|0;e=pb(e|0,y|0,31)|0;c[h>>2]=e;c[v>>2]=i;v=m+(j*72|0)+28|0;i=c[v>>2]|0;h=((i|0)<0)<<31>>31;e=rb(i|0,h|0,2147468947,0)|0;u=y;t=m+(t*72|0)+40|0;f=c[t>>2]|0;g=((f|0)<0)<<31>>31;w=rb(f|0,g|0,7945635,0)|0;u=nb(w|0,y|0,e|0,u|0)|0;u=pb(u|0,y|0,31)|0;h=rb(i|0,h|0,-7945635,-1)|0;i=y;g=rb(f|0,g|0,2147468947,0)|0;i=nb(g|0,y|0,h|0,i|0)|0;i=pb(i|0,y|0,31)|0;c[t>>2]=i;c[v>>2]=u;j=j+1|0;if((j|0)==32)break}e=c[q>>2]|0}while((n|0)<(e|0))}tb(a+11440+(d*6912|0)|0,a+11440+(d*6912|0)+(e*2304|0)|0,2304)|0}while((d|0)!=0);l=s;return}function Da(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+16|0;e=j;c[a+83588>>2]=0;c[a+83584>>2]=0;ob(a+91784|0,0,4096)|0;g=31;while(1){i=g<<1|1;b=64;f=63;while(1){d=+D(+(+(N(17-b|0,i)|0)*.049087385212))*1.0e9;h[e>>3]=d;if(!(d>=0.0))+bb(d+-.5,e);else+bb(d+.5,e);c[a+83592+(g<<8)+(f<<2)>>2]=~~(+h[e>>3]*2.147483647);if(!f)break;else{b=f;f=f+-1|0}}if(!g)break;else g=g+-1|0}l=j;return}function Ea(a,b,d,f,g){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+256|0;o=p;j=c[a>>2]|0;n=f+83584+(d<<2)|0;k=g<<5;h=j;i=31;m=c[n>>2]|0;while(1){c[f+91784+(d<<11)+(i+m<<2)>>2]=(e[h>>1]|0)<<16;m=c[n>>2]|0;if(!i)break;else{h=h+(g<<1)|0;i=i+-1|0}}c[a>>2]=j+(k<<1);h=64;a=63;while(1){j=a+m|0;k=c[f+91784+(d<<11)+((j&511)<<2)>>2]|0;g=c[2292+(a<<2)>>2]|0;rb(g|0,((g|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;k=y;g=c[f+91784+(d<<11)+((j+64&511)<<2)>>2]|0;i=c[2292+(h+63<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=y+k|0;g=c[f+91784+(d<<11)+((j+128&511)<<2)>>2]|0;i=c[2292+(h+127<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+192&511)<<2)>>2]|0;i=c[2292+(h+191<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+256&511)<<2)>>2]|0;i=c[2292+(h+255<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+320&511)<<2)>>2]|0;i=c[2292+(h+319<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+384&511)<<2)>>2]|0;i=c[2292+(h+383<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;j=c[f+91784+(d<<11)+((j+448&511)<<2)>>2]|0;g=c[2292+(h+447<<2)>>2]|0;rb(g|0,((g|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;c[o+(a<<2)>>2]=k+y;if(!a)break;else{h=a;a=a+-1|0}}c[n>>2]=m+480&511;i=c[o+252>>2]|0;g=((i|0)<0)<<31>>31;j=31;while(1){h=c[f+83592+(j<<8)+252>>2]|0;rb(i|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;h=y;a=63;do{m=a+-1|0;n=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;n=y+h|0;m=a+-2|0;d=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;n=n+y|0;d=a+-3|0;m=c[f+83592+(j<<8)+(d<<2)>>2]|0;d=c[o+(d<<2)>>2]|0;rb(d|0,((d|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;n=n+y|0;m=a+-4|0;d=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;n=n+y|0;d=a+-5|0;m=c[f+83592+(j<<8)+(d<<2)>>2]|0;d=c[o+(d<<2)>>2]|0;rb(d|0,((d|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;n=n+y|0;m=a+-6|0;d=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;n=n+y|0;a=a+-7|0;d=c[f+83592+(j<<8)+(a<<2)>>2]|0;m=c[o+(a<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;h=n+y|0}while((a|0)!=0);c[b+(j<<2)>>2]=h;if(!j)break;else j=j+-1|0}l=p;return}function Fa(a){a=a|0;c[a+4>>2]=128;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=1;return}function Ga(a,b){a=a|0;b=b|0;if((c[1208+(b<<2)>>2]|0)==(a|0)){b=0;return b|0}if((c[1224+(b<<2)>>2]|0)==(a|0)){b=1;return b|0}if((c[1240+(b<<2)>>2]|0)==(a|0)){b=2;return b|0}if((c[1256+(b<<2)>>2]|0)==(a|0)){b=3;return b|0}if((c[1272+(b<<2)>>2]|0)==(a|0)){b=4;return b|0}if((c[1288+(b<<2)>>2]|0)==(a|0)){b=5;return b|0}if((c[1304+(b<<2)>>2]|0)==(a|0)){b=6;return b|0}if((c[1320+(b<<2)>>2]|0)==(a|0)){b=7;return b|0}if((c[1336+(b<<2)>>2]|0)==(a|0)){b=8;return b|0}if((c[1352+(b<<2)>>2]|0)==(a|0)){b=9;return b|0}if((c[1368+(b<<2)>>2]|0)==(a|0)){b=10;return b|0}if((c[1384+(b<<2)>>2]|0)==(a|0)){b=11;return b|0}if((c[1400+(b<<2)>>2]|0)==(a|0)){b=12;return b|0}if((c[1416+(b<<2)>>2]|0)==(a|0)){b=13;return b|0}if((c[1432+(b<<2)>>2]|0)==(a|0)){b=14;return b|0}else return ((c[1448+(b<<2)>>2]|0)==(a|0)?15:-1)|0;return 0}function Ha(a,b){a=a|0;b=b|0;if((c[293]|0)!=(a|0))if((c[294]|0)!=(a|0))if((c[295]|0)!=(a|0))if((c[296]|0)!=(a|0))if((c[297]|0)!=(a|0))if((c[298]|0)!=(a|0))if((c[299]|0)!=(a|0))if((c[300]|0)!=(a|0))if((c[301]|0)==(a|0))a=8;else{b=-1;return b|0}else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;a=a>>>0<3?3:a>>>0<6?2:0;b=(Ga(b,a)|0)<0;b=b?-1:a;return b|0}function Ia(a){a=a|0;return (c[a+16>>2]|0)*576|0}function Ja(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;e=a+4|0;b=c[e>>2]|0;i=a+12|0;d=c[i>>2]|0;j=c[293]|0;if((j|0)!=(b|0))if((c[294]|0)!=(b|0))if((c[295]|0)!=(b|0))if((c[296]|0)!=(b|0))if((c[297]|0)!=(b|0))if((c[298]|0)!=(b|0))if((c[299]|0)!=(b|0))if((c[300]|0)!=(b|0))if((c[301]|0)==(b|0))b=8;else{j=0;return j|0}else b=7;else b=6;else b=5;else b=4;else b=3;else b=2;else b=1;else b=0;if((Ga(d,b>>>0<3?3:b>>>0<6?2:0)|0)<0){j=0;return j|0}g=ib(1,95880)|0;if(!g){j=g;return j|0}Da(g);Ba(g);Aa(g);c[g>>2]=c[a>>2];f=c[e>>2]|0;c[g+4>>2]=f;d=g+8|0;c[g+20>>2]=c[a+8>>2];e=c[i>>2]|0;c[g+24>>2]=e;c[g+28>>2]=c[a+16>>2];c[g+88>>2]=c[a+20>>2];c[g+92>>2]=c[a+24>>2];c[g+34484>>2]=0;c[g+34480>>2]=0;c[g+12>>2]=1;c[g+76>>2]=0;c[g+80>>2]=0;c[g+84>>2]=0;c[g+40>>2]=8;if((j|0)!=(f|0))if((c[294]|0)!=(f|0))if((c[295]|0)!=(f|0))if((c[296]|0)!=(f|0))if((c[297]|0)!=(f|0))if((c[298]|0)!=(f|0))if((c[299]|0)!=(f|0))if((c[300]|0)==(f|0))b=7;else b=(c[301]|0)==(f|0)?8:-1;else b=6;else b=5;else b=4;else b=3;else b=2;else b=1;else b=0;c[g+72>>2]=b;j=(b|0)<3?3:(b|0)<6?2:0;c[d>>2]=j;c[g+68>>2]=Ga(e,j)|0;j=c[1028+(j<<2)>>2]|0;b=g+16|0;c[b>>2]=j;k=+(j|0)*576.0/+(f|0)*(+(e|0)*1.0e3*.125);j=~~k;c[g+64>>2]=j;k=k-+(j|0);h[g+48>>3]=k;h[g+56>>3]=-k;if(k==0.0)c[g+32>>2]=0;ra(g+96|0,4096);ob(g+116|0,0,408)|0;j=(c[g>>2]|0)==1;c[g+524>>2]=(c[b>>2]|0)==2?(j?168:288):j?104:168;j=g;return j|0}function Ka(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0;c[a+2184>>2]=c[b>>2];if((c[a>>2]|0)==2)c[a+2188>>2]=c[b+4>>2];e=+h[a+48>>3];if(e!=0.0){f=a+56|0;i=+h[f>>3];g=i<=e+-1.0;b=g&1;c[a+32>>2]=b;h[f>>3]=i+(+(g&1)-e)}else b=c[a+32>>2]|0;g=(c[a+64>>2]|0)+b<<3;c[a+36>>2]=g;c[a+528>>2]=(g-(c[a+524>>2]|0)|0)/(c[a+16>>2]|0)|0;Ca(a,1);za(a);va(a);g=a+104|0;c[d>>2]=c[g>>2];c[g>>2]=0;return c[a+96>>2]|0}function La(a,b){a=a|0;b=b|0;var d=0;d=a+104|0;c[b>>2]=c[d>>2];c[d>>2]=0;return c[a+96>>2]|0}function Ma(a){a=a|0;sa(a+96|0);hb(a);return}function Na(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=(c[b+528>>2]|0)/(c[b>>2]|0)|0;e=(d|0)<4095?d:4095;f=c[b+34484>>2]|0;if(!f){f=e;return f|0}a=~~(+h[a>>3]*3.1-+(d|0));d=c[b+34480>>2]|0;if((a|0)>100){b=(d*6|0)/10|0;a=(b|0)<(a|0)?b:a}else a=0;f=d-((f<<3|0)/10|0)|0;f=((f|0)>(a|0)?f:a)+e|0;f=(f|0)<4095?f:4095;return f|0}function Oa(a,b){a=a|0;b=b|0;var d=0;d=b+34480|0;c[d>>2]=((c[b+528>>2]|0)/(c[b>>2]|0)|0)-(c[a>>2]|0)+(c[d>>2]|0);return}function Pa(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=c[a>>2]|0;if((f|0)==2?c[a+528>>2]&1|0:0){h=a+34480|0;c[h>>2]=(c[h>>2]|0)+1}h=a+34480|0;e=c[h>>2]|0;b=e-(c[a+34484>>2]|0)|0;b=(b|0)>0?b:0;e=e-b|0;g=(e|0)%8|0;b=g+b|0;c[h>>2]=e-g;if(!b)return;d=a+156|0;e=(c[d>>2]|0)+b|0;if(e>>>0<4095){c[d>>2]=e;return}h=a+16|0;d=c[h>>2]|0;if((d|0)>0){g=0;e=f;do{if((e|0)>0){f=0;d=e;while(1){if(!b){b=0;e=d;break}e=a+156+(g*184|0)+(f*92|0)|0;i=c[e>>2]|0;d=4095-i|0;d=(d|0)<(b|0)?d:b;c[e>>2]=d+i;b=b-d|0;f=f+1|0;d=c[a>>2]|0;if((f|0)>=(d|0)){e=d;break}}d=c[h>>2]|0}g=g+1|0}while((g|0)<(d|0))}c[a+120>>2]=b;return}function Qa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+32|0;g=f;c[g>>2]=a;c[g+4>>2]=b;b=g+8|0;Fa(b);c[b>>2]=d;c[g+12>>2]=e;e=Ja(g)|0;l=f;return e|0}function Ra(){return 8944}function Sa(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Za(c[a+60>>2]|0)|0;a=Va(ba(6,d|0)|0)|0;l=b;return a|0}function Ta(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=Va(ga(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=(o<<31>>31)+b|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=Va(ga(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function Ua(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((Va(ca(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function Va(a){a=a|0;if(a>>>0>4294963200){c[(Wa()|0)>>2]=0-a;a=-1}return a|0}function Wa(){return (Xa()|0)+64|0}function Xa(){return Ya()|0}function Ya(){return 4340}function Za(a){a=a|0;return a|0}function _a(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,ea(54,f|0)|0):0)a[b+75>>0]=-1;f=Ta(b,d,e)|0;l=g;return f|0}function $a(a){a=a|0;return 0}function ab(a){a=a|0;return}function bb(a,b){a=+a;b=b|0;var d=0,e=0,f=0,g=0,i=0.0;h[j>>3]=a;f=c[j>>2]|0;g=c[j+4>>2]|0;d=pb(f|0,g|0,52)|0;d=d&2047;e=d+-1023|0;if((e|0)>51){h[b>>3]=a;c[j>>2]=0;c[j+4>>2]=g&-2147483648;return +((f|0)==0&(g&1048575|0)==0|(e|0)!=1024?+h[j>>3]:a)}do if(d>>>0>=1023){d=pb(-1,1048575,e|0)|0;e=y;if((d&f|0)==0&(e&g|0)==0){h[b>>3]=a;c[j>>2]=0;c[j+4>>2]=g&-2147483648;a=+h[j>>3];break}else{d=f&~d;f=g&~e;c[j>>2]=d;c[j+4>>2]=f;i=+h[j>>3];g=b;c[g>>2]=d;c[g+4>>2]=f;a=a-i;break}}else{f=b;c[f>>2]=0;c[f+4>>2]=g&-2147483648}while(0);return +a}function cb(){Z(9008);return 9016}function db(){fa(9008);return}function eb(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=fb(a)|0;break}d=($a(a)|0)==0;b=fb(a)|0;if(!d)ab(a)}else{if(!(c[1177]|0))b=0;else b=eb(c[1177]|0)|0;a=c[(cb()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=$a(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=fb(a)|0|b;if(d|0)ab(a);a=c[a+56>>2]|0}while((a|0)!=0);db()}while(0);return b|0}function fb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(ja[c[a+36>>2]&3](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0<g>>>0)ja[c[a+40>>2]&3](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function gb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=l;l=l+16|0;o=K;do if(a>>>0<245){p=a>>>0<11?16:a+11&-8;a=p>>>3;t=c[2255]|0;d=t>>>a;if(d&3|0){a=(d&1^1)+a|0;d=9060+(a<<1<<2)|0;e=d+8|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[2259]|0)>>>0)$();b=h+12|0;if((c[b>>2]|0)==(f|0)){c[b>>2]=d;c[e>>2]=h;break}else $()}else c[2255]=t&~(1<<a);while(0);J=a<<3;c[f+4>>2]=J|3;J=f+J+4|0;c[J>>2]=c[J>>2]|1;J=g;l=K;return J|0}s=c[2257]|0;if(p>>>0>s>>>0){if(d|0){i=2<<a;a=d<<a&(i|0-i);a=(a&0-a)+-1|0;i=a>>>12&16;a=a>>>i;e=a>>>5&8;a=a>>>e;g=a>>>2&4;a=a>>>g;d=a>>>1&2;a=a>>>d;b=a>>>1&1;b=(e|i|g|d|b)+(a>>>b)|0;a=9060+(b<<1<<2)|0;d=a+8|0;g=c[d>>2]|0;i=g+8|0;e=c[i>>2]|0;do if((a|0)!=(e|0)){if(e>>>0<(c[2259]|0)>>>0)$();f=e+12|0;if((c[f>>2]|0)==(g|0)){c[f>>2]=a;c[d>>2]=e;j=t;break}else $()}else{j=t&~(1<<b);c[2255]=j}while(0);h=(b<<3)-p|0;c[g+4>>2]=p|3;e=g+p|0;c[e+4>>2]=h|1;c[e+h>>2]=h;if(s|0){f=c[2260]|0;b=s>>>3;d=9060+(b<<1<<2)|0;b=1<<b;if(j&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{k=a;m=b}}else{c[2255]=j|b;k=d;m=d+8|0}c[m>>2]=f;c[k+12>>2]=f;c[f+8>>2]=k;c[f+12>>2]=d}c[2257]=h;c[2260]=e;J=i;l=K;return J|0}k=c[2256]|0;if(k){a=(k&0-k)+-1|0;I=a>>>12&16;a=a>>>I;H=a>>>5&8;a=a>>>H;J=a>>>2&4;a=a>>>J;d=a>>>1&2;a=a>>>d;b=a>>>1&1;b=c[9324+((H|I|J|d|b)+(a>>>b)<<2)>>2]|0;a=(c[b+4>>2]&-8)-p|0;d=c[b+16+(((c[b+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){j=b;h=a}else{do{I=(c[d+4>>2]&-8)-p|0;J=I>>>0<a>>>0;a=J?I:a;b=J?d:b;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0}while((d|0)!=0);j=b;h=a}f=c[2259]|0;if(j>>>0<f>>>0)$();i=j+p|0;if(j>>>0>=i>>>0)$();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0<f>>>0)$();else{c[a>>2]=0;n=b;break}}else{e=c[j+8>>2]|0;if(e>>>0<f>>>0)$();b=e+12|0;if((c[b>>2]|0)!=(j|0))$();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;n=d;break}else $()}while(0);a:do if(g|0){b=c[j+28>>2]|0;a=9324+(b<<2)|0;do if((j|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[2256]=k&~(1<<b);break a}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=n;if(!n)break a;else break}else $();while(0);a=c[2259]|0;if(n>>>0<a>>>0)$();c[n+24>>2]=g;b=c[j+16>>2]|0;do if(b|0)if(b>>>0<a>>>0)$();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[j+20>>2]|0;if(b|0)if(b>>>0<(c[2259]|0)>>>0)$();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(h>>>0<16){J=h+p|0;c[j+4>>2]=J|3;J=j+J+4|0;c[J>>2]=c[J>>2]|1}else{c[j+4>>2]=p|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(s|0){e=c[2260]|0;b=s>>>3;d=9060+(b<<1<<2)|0;b=1<<b;if(t&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{q=a;r=b}}else{c[2255]=t|b;q=d;r=d+8|0}c[r>>2]=e;c[q+12>>2]=e;c[e+8>>2]=q;c[e+12>>2]=d}c[2257]=h;c[2260]=i}J=j+8|0;l=K;return J|0}}}else if(a>>>0<=4294967231){a=a+11|0;p=a&-8;k=c[2256]|0;if(k){e=0-p|0;a=a>>>8;if(a)if(p>>>0>16777215)i=31;else{r=(a+1048320|0)>>>16&8;C=a<<r;q=(C+520192|0)>>>16&4;C=C<<q;i=(C+245760|0)>>>16&2;i=14-(q|r|i)+(C<<i>>>15)|0;i=p>>>(i+7|0)&1|i<<1}else i=0;d=c[9324+(i<<2)>>2]|0;b:do if(!d){d=0;a=0;C=81}else{a=0;h=p<<((i|0)==31?0:25-(i>>>1)|0);g=0;while(1){f=(c[d+4>>2]&-8)-p|0;if(f>>>0<e>>>0)if(!f){a=d;e=0;f=d;C=85;break b}else{a=d;e=f}f=c[d+20>>2]|0;d=c[d+16+(h>>>31<<2)>>2]|0;g=(f|0)==0|(f|0)==(d|0)?g:f;f=(d|0)==0;if(f){d=g;C=81;break}else h=h<<((f^1)&1)}}while(0);if((C|0)==81){if((d|0)==0&(a|0)==0){a=2<<i;a=k&(a|0-a);if(!a)break;r=(a&0-a)+-1|0;m=r>>>12&16;r=r>>>m;j=r>>>5&8;r=r>>>j;n=r>>>2&4;r=r>>>n;q=r>>>1&2;r=r>>>q;d=r>>>1&1;a=0;d=c[9324+((j|m|n|q|d)+(r>>>d)<<2)>>2]|0}if(!d){j=a;i=e}else{f=d;C=85}}if((C|0)==85)while(1){C=0;d=(c[f+4>>2]&-8)-p|0;r=d>>>0<e>>>0;d=r?d:e;a=r?f:a;f=c[f+16+(((c[f+16>>2]|0)==0&1)<<2)>>2]|0;if(!f){j=a;i=d;break}else{e=d;C=85}}if((j|0)!=0?i>>>0<((c[2257]|0)-p|0)>>>0:0){f=c[2259]|0;if(j>>>0<f>>>0)$();h=j+p|0;if(j>>>0>=h>>>0)$();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){s=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0<f>>>0)$();else{c[a>>2]=0;s=b;break}}else{e=c[j+8>>2]|0;if(e>>>0<f>>>0)$();b=e+12|0;if((c[b>>2]|0)!=(j|0))$();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;s=d;break}else $()}while(0);c:do if(g){b=c[j+28>>2]|0;a=9324+(b<<2)|0;do if((j|0)==(c[a>>2]|0)){c[a>>2]=s;if(!s){t=k&~(1<<b);c[2256]=t;break c}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=s;if(!s){t=k;break c}else break}else $();while(0);a=c[2259]|0;if(s>>>0<a>>>0)$();c[s+24>>2]=g;b=c[j+16>>2]|0;do if(b|0)if(b>>>0<a>>>0)$();else{c[s+16>>2]=b;c[b+24>>2]=s;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[2259]|0)>>>0)$();else{c[s+20>>2]=b;c[b+24>>2]=s;t=k;break}else t=k}else t=k;while(0);do if(i>>>0>=16){c[j+4>>2]=p|3;c[h+4>>2]=i|1;c[h+i>>2]=i;b=i>>>3;if(i>>>0<256){d=9060+(b<<1<<2)|0;a=c[2255]|0;b=1<<b;if(a&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{x=a;y=b}}else{c[2255]=a|b;x=d;y=d+8|0}c[y>>2]=h;c[x+12>>2]=h;c[h+8>>2]=x;c[h+12>>2]=d;break}b=i>>>8;if(b)if(i>>>0>16777215)b=31;else{I=(b+1048320|0)>>>16&8;J=b<<I;H=(J+520192|0)>>>16&4;J=J<<H;b=(J+245760|0)>>>16&2;b=14-(H|I|b)+(J<<b>>>15)|0;b=i>>>(b+7|0)&1|b<<1}else b=0;d=9324+(b<<2)|0;c[h+28>>2]=b;a=h+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<<b;if(!(t&a)){c[2256]=t|a;c[d>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}a=i<<((b|0)==31?0:25-(b>>>1)|0);e=c[d>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(i|0)){C=139;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=136;break}else{a=a<<1;e=b}}if((C|0)==136)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;break}else if((C|0)==139){b=e+8|0;a=c[b>>2]|0;J=c[2259]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=e;c[h+24>>2]=0;break}else $()}}else{J=i+p|0;c[j+4>>2]=J|3;J=j+J+4|0;c[J>>2]=c[J>>2]|1}while(0);J=j+8|0;l=K;return J|0}}}else p=-1;while(0);d=c[2257]|0;if(d>>>0>=p>>>0){b=d-p|0;a=c[2260]|0;if(b>>>0>15){J=a+p|0;c[2260]=J;c[2257]=b;c[J+4>>2]=b|1;c[J+b>>2]=b;c[a+4>>2]=p|3}else{c[2257]=0;c[2260]=0;c[a+4>>2]=d|3;J=a+d+4|0;c[J>>2]=c[J>>2]|1}J=a+8|0;l=K;return J|0}h=c[2258]|0;if(h>>>0>p>>>0){H=h-p|0;c[2258]=H;J=c[2261]|0;I=J+p|0;c[2261]=I;c[I+4>>2]=H|1;c[J+4>>2]=p|3;J=J+8|0;l=K;return J|0}if(!(c[2373]|0)){c[2375]=4096;c[2374]=4096;c[2376]=-1;c[2377]=-1;c[2378]=0;c[2366]=0;a=o&-16^1431655768;c[o>>2]=a;c[2373]=a;a=4096}else a=c[2375]|0;i=p+48|0;j=p+47|0;g=a+j|0;f=0-a|0;k=g&f;if(k>>>0<=p>>>0){J=0;l=K;return J|0}a=c[2365]|0;if(a|0?(x=c[2363]|0,y=x+k|0,y>>>0<=x>>>0|y>>>0>a>>>0):0){J=0;l=K;return J|0}d:do if(!(c[2366]&4)){d=c[2261]|0;e:do if(d){e=9468;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(w=e+4|0,(a+(c[w>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){C=163;break e}else e=a}b=g-h&f;if(b>>>0<2147483647){a=sb(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[w>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;C=180;break d}}else{e=a;C=171}}else b=0}else C=163;while(0);do if((C|0)==163){d=sb(0)|0;if((d|0)!=(-1|0)?(b=d,u=c[2374]|0,v=u+-1|0,b=((v&b|0)==0?0:(v+b&0-u)-b|0)+k|0,u=c[2363]|0,v=b+u|0,b>>>0>p>>>0&b>>>0<2147483647):0){y=c[2365]|0;if(y|0?v>>>0<=u>>>0|v>>>0>y>>>0:0){b=0;break}a=sb(b|0)|0;if((a|0)==(d|0)){h=b;g=d;C=180;break d}else{e=a;C=171}}else b=0}while(0);do if((C|0)==171){d=0-b|0;if(!(i>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;C=180;break d}a=c[2375]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;C=180;break d}if((sb(a|0)|0)==(-1|0)){sb(d|0)|0;b=0;break}else{h=a+b|0;g=e;C=180;break d}}while(0);c[2366]=c[2366]|4;C=178}else{b=0;C=178}while(0);if(((C|0)==178?k>>>0<2147483647:0)?(B=sb(k|0)|0,y=sb(0)|0,z=y-B|0,A=z>>>0>(p+40|0)>>>0,!((B|0)==(-1|0)|A^1|B>>>0<y>>>0&((B|0)!=(-1|0)&(y|0)!=(-1|0))^1)):0){h=A?z:b;g=B;C=180}if((C|0)==180){b=(c[2363]|0)+h|0;c[2363]=b;if(b>>>0>(c[2364]|0)>>>0)c[2364]=b;k=c[2261]|0;do if(k){b=9468;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){C=190;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((C|0)==190?(c[b+12>>2]&8|0)==0:0)?k>>>0<g>>>0&k>>>0>=a>>>0:0){c[d>>2]=e+h;J=k+8|0;J=(J&7|0)==0?0:0-J&7;I=k+J|0;J=(c[2258]|0)+(h-J)|0;c[2261]=I;c[2258]=J;c[I+4>>2]=J|1;c[I+J+4>>2]=40;c[2262]=c[2377];break}b=c[2259]|0;if(g>>>0<b>>>0){c[2259]=g;i=g}else i=b;d=g+h|0;b=9468;while(1){if((c[b>>2]|0)==(d|0)){C=198;break}a=c[b+8>>2]|0;if(!a)break;else b=a}if((C|0)==198?(c[b+12>>2]&8|0)==0:0){c[b>>2]=g;n=b+4|0;c[n>>2]=(c[n>>2]|0)+h;n=g+8|0;n=g+((n&7|0)==0?0:0-n&7)|0;b=d+8|0;b=d+((b&7|0)==0?0:0-b&7)|0;m=n+p|0;j=b-n-p|0;c[n+4>>2]=p|3;do if((b|0)!=(k|0)){if((b|0)==(c[2260]|0)){J=(c[2257]|0)+j|0;c[2257]=J;c[2260]=m;c[m+4>>2]=J|1;c[m+J>>2]=J;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;f=a>>>3;f:do if(a>>>0>=256){g=c[b+24>>2]|0;e=c[b+12>>2]|0;do if((e|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){H=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}if(d>>>0<i>>>0)$();else{c[d>>2]=0;H=a;break}}else{f=c[b+8>>2]|0;if(f>>>0<i>>>0)$();a=f+12|0;if((c[a>>2]|0)!=(b|0))$();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;H=e;break}else $()}while(0);if(!g)break;a=c[b+28>>2]|0;d=9324+(a<<2)|0;do if((b|0)!=(c[d>>2]|0))if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=H;if(!H)break f;else break}else $();else{c[d>>2]=H;if(H|0)break;c[2256]=c[2256]&~(1<<a);break f}while(0);e=c[2259]|0;if(H>>>0<e>>>0)$();c[H+24>>2]=g;a=b+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0<e>>>0)$();else{c[H+16>>2]=d;c[d+24>>2]=H;break}while(0);a=c[a+4>>2]|0;if(!a)break;if(a>>>0<(c[2259]|0)>>>0)$();else{c[H+20>>2]=a;c[a+24>>2]=H;break}}else{d=c[b+8>>2]|0;e=c[b+12>>2]|0;a=9060+(f<<1<<2)|0;do if((d|0)!=(a|0)){if(d>>>0<i>>>0)$();if((c[d+12>>2]|0)==(b|0))break;$()}while(0);if((e|0)==(d|0)){c[2255]=c[2255]&~(1<<f);break}do if((e|0)==(a|0))E=e+8|0;else{if(e>>>0<i>>>0)$();a=e+8|0;if((c[a>>2]|0)==(b|0)){E=a;break}$()}while(0);c[d+12>>2]=e;c[E>>2]=d}while(0);b=b+h|0;f=h+j|0}else f=j;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[m+4>>2]=f|1;c[m+f>>2]=f;b=f>>>3;if(f>>>0<256){d=9060+(b<<1<<2)|0;a=c[2255]|0;b=1<<b;do if(!(a&b)){c[2255]=a|b;I=d;J=d+8|0}else{b=d+8|0;a=c[b>>2]|0;if(a>>>0>=(c[2259]|0)>>>0){I=a;J=b;break}$()}while(0);c[J>>2]=m;c[I+12>>2]=m;c[m+8>>2]=I;c[m+12>>2]=d;break}b=f>>>8;do if(!b)b=0;else{if(f>>>0>16777215){b=31;break}I=(b+1048320|0)>>>16&8;J=b<<I;H=(J+520192|0)>>>16&4;J=J<<H;b=(J+245760|0)>>>16&2;b=14-(H|I|b)+(J<<b>>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=9324+(b<<2)|0;c[m+28>>2]=b;a=m+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[2256]|0;d=1<<b;if(!(a&d)){c[2256]=a|d;c[e>>2]=m;c[m+24>>2]=e;c[m+12>>2]=m;c[m+8>>2]=m;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){C=265;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=262;break}else{a=a<<1;e=b}}if((C|0)==262)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=m;c[m+24>>2]=e;c[m+12>>2]=m;c[m+8>>2]=m;break}else if((C|0)==265){b=e+8|0;a=c[b>>2]|0;J=c[2259]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=m;c[b>>2]=m;c[m+8>>2]=a;c[m+12>>2]=e;c[m+24>>2]=0;break}else $()}}else{J=(c[2258]|0)+j|0;c[2258]=J;c[2261]=m;c[m+4>>2]=J|1}while(0);J=n+8|0;l=K;return J|0}b=9468;while(1){a=c[b>>2]|0;if(a>>>0<=k>>>0?(D=a+(c[b+4>>2]|0)|0,D>>>0>k>>>0):0)break;b=c[b+8>>2]|0}f=D+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=k+16|0;a=a>>>0<f>>>0?k:a;b=a+8|0;d=g+8|0;d=(d&7|0)==0?0:0-d&7;J=g+d|0;d=h+-40-d|0;c[2261]=J;c[2258]=d;c[J+4>>2]=d|1;c[J+d+4>>2]=40;c[2262]=c[2377];d=a+4|0;c[d>>2]=27;c[b>>2]=c[2367];c[b+4>>2]=c[2368];c[b+8>>2]=c[2369];c[b+12>>2]=c[2370];c[2367]=g;c[2368]=h;c[2370]=0;c[2369]=b;b=a+24|0;do{J=b;b=b+4|0;c[b>>2]=7}while((J+8|0)>>>0<D>>>0);if((a|0)!=(k|0)){g=a-k|0;c[d>>2]=c[d>>2]&-2;c[k+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=9060+(b<<1<<2)|0;a=c[2255]|0;b=1<<b;if(a&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{F=a;G=b}}else{c[2255]=a|b;F=d;G=d+8|0}c[G>>2]=k;c[F+12>>2]=k;c[k+8>>2]=F;c[k+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)d=31;else{I=(b+1048320|0)>>>16&8;J=b<<I;H=(J+520192|0)>>>16&4;J=J<<H;d=(J+245760|0)>>>16&2;d=14-(H|I|d)+(J<<d>>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=9324+(d<<2)|0;c[k+28>>2]=d;c[k+20>>2]=0;c[f>>2]=0;b=c[2256]|0;a=1<<d;if(!(b&a)){c[2256]=b|a;c[e>>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(g|0)){C=292;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=289;break}else{a=a<<1;e=b}}if((C|0)==289)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((C|0)==292){b=e+8|0;a=c[b>>2]|0;J=c[2259]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=k;c[b>>2]=k;c[k+8>>2]=a;c[k+12>>2]=e;c[k+24>>2]=0;break}else $()}}}else{J=c[2259]|0;if((J|0)==0|g>>>0<J>>>0)c[2259]=g;c[2367]=g;c[2368]=h;c[2370]=0;c[2264]=c[2373];c[2263]=-1;b=0;do{J=9060+(b<<1<<2)|0;c[J+12>>2]=J;c[J+8>>2]=J;b=b+1|0}while((b|0)!=32);J=g+8|0;J=(J&7|0)==0?0:0-J&7;I=g+J|0;J=h+-40-J|0;c[2261]=I;c[2258]=J;c[I+4>>2]=J|1;c[I+J+4>>2]=40;c[2262]=c[2377]}while(0);b=c[2258]|0;if(b>>>0>p>>>0){H=b-p|0;c[2258]=H;J=c[2261]|0;I=J+p|0;c[2261]=I;c[I+4>>2]=H|1;c[J+4>>2]=p|3;J=J+8|0;l=K;return J|0}}c[(Wa()|0)>>2]=12;J=0;l=K;return J|0}function hb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(!a)return;d=a+-8|0;h=c[2259]|0;if(d>>>0<h>>>0)$();a=c[a+-4>>2]|0;b=a&3;if((b|0)==1)$();e=a&-8;o=d+e|0;a:do if(!(a&1)){a=c[d>>2]|0;if(!b)return;k=d+(0-a)|0;j=a+e|0;if(k>>>0<h>>>0)$();if((k|0)==(c[2260]|0)){a=o+4|0;b=c[a>>2]|0;if((b&3|0)!=3){r=k;f=j;m=k;break}c[2257]=j;c[a>>2]=b&-2;c[k+4>>2]=j|1;c[k+j>>2]=j;return}e=a>>>3;if(a>>>0<256){b=c[k+8>>2]|0;d=c[k+12>>2]|0;a=9060+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0<h>>>0)$();if((c[b+12>>2]|0)!=(k|0))$()}if((d|0)==(b|0)){c[2255]=c[2255]&~(1<<e);r=k;f=j;m=k;break}if((d|0)!=(a|0)){if(d>>>0<h>>>0)$();a=d+8|0;if((c[a>>2]|0)==(k|0))g=a;else $()}else g=d+8|0;c[b+12>>2]=d;c[g>>2]=b;r=k;f=j;m=k;break}g=c[k+24>>2]|0;d=c[k+12>>2]|0;do if((d|0)==(k|0)){d=k+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){i=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<h>>>0)$();else{c[b>>2]=0;i=a;break}}else{e=c[k+8>>2]|0;if(e>>>0<h>>>0)$();a=e+12|0;if((c[a>>2]|0)!=(k|0))$();b=d+8|0;if((c[b>>2]|0)==(k|0)){c[a>>2]=d;c[b>>2]=e;i=d;break}else $()}while(0);if(g){a=c[k+28>>2]|0;b=9324+(a<<2)|0;do if((k|0)==(c[b>>2]|0)){c[b>>2]=i;if(!i){c[2256]=c[2256]&~(1<<a);r=k;f=j;m=k;break a}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(k|0)&1)<<2)>>2]=i;if(!i){r=k;f=j;m=k;break a}else break}else $();while(0);d=c[2259]|0;if(i>>>0<d>>>0)$();c[i+24>>2]=g;a=k+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0<d>>>0)$();else{c[i+16>>2]=b;c[b+24>>2]=i;break}while(0);a=c[a+4>>2]|0;if(a)if(a>>>0<(c[2259]|0)>>>0)$();else{c[i+20>>2]=a;c[a+24>>2]=i;r=k;f=j;m=k;break}else{r=k;f=j;m=k}}else{r=k;f=j;m=k}}else{r=d;f=e;m=d}while(0);if(m>>>0>=o>>>0)$();a=o+4|0;b=c[a>>2]|0;if(!(b&1))$();if(!(b&2)){a=c[2260]|0;if((o|0)==(c[2261]|0)){q=(c[2258]|0)+f|0;c[2258]=q;c[2261]=r;c[r+4>>2]=q|1;if((r|0)!=(a|0))return;c[2260]=0;c[2257]=0;return}if((o|0)==(a|0)){q=(c[2257]|0)+f|0;c[2257]=q;c[2260]=m;c[r+4>>2]=q|1;c[m+q>>2]=q;return}f=(b&-8)+f|0;e=b>>>3;b:do if(b>>>0>=256){g=c[o+24>>2]|0;a=c[o+12>>2]|0;do if((a|0)==(o|0)){d=o+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){n=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<(c[2259]|0)>>>0)$();else{c[b>>2]=0;n=a;break}}else{b=c[o+8>>2]|0;if(b>>>0<(c[2259]|0)>>>0)$();d=b+12|0;if((c[d>>2]|0)!=(o|0))$();e=a+8|0;if((c[e>>2]|0)==(o|0)){c[d>>2]=a;c[e>>2]=b;n=a;break}else $()}while(0);if(g|0){a=c[o+28>>2]|0;b=9324+(a<<2)|0;do if((o|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[2256]=c[2256]&~(1<<a);break b}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(o|0)&1)<<2)>>2]=n;if(!n)break b;else break}else $();while(0);d=c[2259]|0;if(n>>>0<d>>>0)$();c[n+24>>2]=g;a=o+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0<d>>>0)$();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);a=c[a+4>>2]|0;if(a|0)if(a>>>0<(c[2259]|0)>>>0)$();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{b=c[o+8>>2]|0;d=c[o+12>>2]|0;a=9060+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0<(c[2259]|0)>>>0)$();if((c[b+12>>2]|0)!=(o|0))$()}if((d|0)==(b|0)){c[2255]=c[2255]&~(1<<e);break}if((d|0)!=(a|0)){if(d>>>0<(c[2259]|0)>>>0)$();a=d+8|0;if((c[a>>2]|0)==(o|0))l=a;else $()}else l=d+8|0;c[b+12>>2]=d;c[l>>2]=b}while(0);c[r+4>>2]=f|1;c[m+f>>2]=f;if((r|0)==(c[2260]|0)){c[2257]=f;return}}else{c[a>>2]=b&-2;c[r+4>>2]=f|1;c[m+f>>2]=f}a=f>>>3;if(f>>>0<256){d=9060+(a<<1<<2)|0;b=c[2255]|0;a=1<<a;if(b&a){a=d+8|0;b=c[a>>2]|0;if(b>>>0<(c[2259]|0)>>>0)$();else{p=b;q=a}}else{c[2255]=b|a;p=d;q=d+8|0}c[q>>2]=r;c[p+12>>2]=r;c[r+8>>2]=p;c[r+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{p=(a+1048320|0)>>>16&8;q=a<<p;o=(q+520192|0)>>>16&4;q=q<<o;a=(q+245760|0)>>>16&2;a=14-(o|p|a)+(q<<a>>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=9324+(a<<2)|0;c[r+28>>2]=a;c[r+20>>2]=0;c[r+16>>2]=0;b=c[2256]|0;d=1<<a;do if(b&d){b=f<<((a|0)==31?0:25-(a>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){a=124;break}d=e+16+(b>>>31<<2)|0;a=c[d>>2]|0;if(!a){a=121;break}else{b=b<<1;e=a}}if((a|0)==121)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;break}else if((a|0)==124){a=e+8|0;b=c[a>>2]|0;q=c[2259]|0;if(b>>>0>=q>>>0&e>>>0>=q>>>0){c[b+12>>2]=r;c[a>>2]=r;c[r+8>>2]=b;c[r+12>>2]=e;c[r+24>>2]=0;break}else $()}}else{c[2256]=b|d;c[e>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r}while(0);r=(c[2263]|0)+-1|0;c[2263]=r;if(!r)a=9476;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[2263]=-1;return}function ib(a,b){a=a|0;b=b|0;var d=0;if(a){d=N(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=gb(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;ob(a|0,0,d|0)|0;return a|0}function jb(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=gb(b)|0;return b|0}if(b>>>0>4294967231){c[(Wa()|0)>>2]=12;b=0;return b|0}d=kb(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=gb(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;tb(d|0,a|0,(e>>>0<b>>>0?e:b)|0)|0;hb(a);b=d;return b|0}function kb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=a+4|0;n=c[o>>2]|0;d=n&-8;k=a+d|0;i=c[2259]|0;e=n&3;if(!((e|0)!=1&a>>>0>=i>>>0&a>>>0<k>>>0))$();f=c[k+4>>2]|0;if(!(f&1))$();if(!e){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[2375]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;m=a+b|0;c[o>>2]=n&1|b|2;c[m+4>>2]=d|3;o=m+d+4|0;c[o>>2]=c[o>>2]|1;lb(m,d);return a|0}if((k|0)==(c[2261]|0)){m=(c[2258]|0)+d|0;d=m-b|0;e=a+b|0;if(m>>>0<=b>>>0){a=0;return a|0}c[o>>2]=n&1|b|2;c[e+4>>2]=d|1;c[2261]=e;c[2258]=d;return a|0}if((k|0)==(c[2260]|0)){f=(c[2257]|0)+d|0;if(f>>>0<b>>>0){a=0;return a|0}d=f-b|0;e=n&1;if(d>>>0>15){n=a+b|0;m=n+d|0;c[o>>2]=e|b|2;c[n+4>>2]=d|1;c[m>>2]=d;e=m+4|0;c[e>>2]=c[e>>2]&-2;e=n}else{c[o>>2]=e|f|2;e=a+f+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[2257]=d;c[2260]=e;return a|0}if(f&2|0){a=0;return a|0}l=(f&-8)+d|0;if(l>>>0<b>>>0){a=0;return a|0}m=l-b|0;g=f>>>3;a:do if(f>>>0>=256){h=c[k+24>>2]|0;f=c[k+12>>2]|0;do if((f|0)==(k|0)){f=k+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){j=0;break}else e=f}while(1){f=d+20|0;g=c[f>>2]|0;if(g|0){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0<i>>>0)$();else{c[e>>2]=0;j=d;break}}else{g=c[k+8>>2]|0;if(g>>>0<i>>>0)$();d=g+12|0;if((c[d>>2]|0)!=(k|0))$();e=f+8|0;if((c[e>>2]|0)==(k|0)){c[d>>2]=f;c[e>>2]=g;j=f;break}else $()}while(0);if(h|0){d=c[k+28>>2]|0;e=9324+(d<<2)|0;do if((k|0)==(c[e>>2]|0)){c[e>>2]=j;if(!j){c[2256]=c[2256]&~(1<<d);break a}}else if(h>>>0>=(c[2259]|0)>>>0){c[h+16+(((c[h+16>>2]|0)!=(k|0)&1)<<2)>>2]=j;if(!j)break a;else break}else $();while(0);f=c[2259]|0;if(j>>>0<f>>>0)$();c[j+24>>2]=h;d=k+16|0;e=c[d>>2]|0;do if(e|0)if(e>>>0<f>>>0)$();else{c[j+16>>2]=e;c[e+24>>2]=j;break}while(0);d=c[d+4>>2]|0;if(d|0)if(d>>>0<(c[2259]|0)>>>0)$();else{c[j+20>>2]=d;c[d+24>>2]=j;break}}}else{e=c[k+8>>2]|0;f=c[k+12>>2]|0;d=9060+(g<<1<<2)|0;if((e|0)!=(d|0)){if(e>>>0<i>>>0)$();if((c[e+12>>2]|0)!=(k|0))$()}if((f|0)==(e|0)){c[2255]=c[2255]&~(1<<g);break}if((f|0)!=(d|0)){if(f>>>0<i>>>0)$();d=f+8|0;if((c[d>>2]|0)==(k|0))h=d;else $()}else h=f+8|0;c[e+12>>2]=f;c[h>>2]=e}while(0);d=n&1;if(m>>>0<16){c[o>>2]=l|d|2;o=a+l+4|0;c[o>>2]=c[o>>2]|1;return a|0}else{n=a+b|0;c[o>>2]=d|b|2;c[n+4>>2]=m|3;o=n+m+4|0;c[o>>2]=c[o>>2]|1;lb(n,m);return a|0}return 0}function lb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=a+b|0;d=c[a+4>>2]|0;a:do if(!(d&1)){g=c[a>>2]|0;if(!(d&3))return;l=a+(0-g)|0;k=g+b|0;i=c[2259]|0;if(l>>>0<i>>>0)$();if((l|0)==(c[2260]|0)){a=o+4|0;d=c[a>>2]|0;if((d&3|0)!=3){r=l;f=k;break}c[2257]=k;c[a>>2]=d&-2;c[l+4>>2]=k|1;c[l+k>>2]=k;return}e=g>>>3;if(g>>>0<256){d=c[l+8>>2]|0;b=c[l+12>>2]|0;a=9060+(e<<1<<2)|0;if((d|0)!=(a|0)){if(d>>>0<i>>>0)$();if((c[d+12>>2]|0)!=(l|0))$()}if((b|0)==(d|0)){c[2255]=c[2255]&~(1<<e);r=l;f=k;break}if((b|0)!=(a|0)){if(b>>>0<i>>>0)$();a=b+8|0;if((c[a>>2]|0)==(l|0))h=a;else $()}else h=b+8|0;c[d+12>>2]=b;c[h>>2]=d;r=l;f=k;break}g=c[l+24>>2]|0;b=c[l+12>>2]|0;do if((b|0)==(l|0)){b=l+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){j=0;break}else d=b}while(1){b=a+20|0;e=c[b>>2]|0;if(e|0){a=e;d=b;continue}b=a+16|0;e=c[b>>2]|0;if(!e)break;else{a=e;d=b}}if(d>>>0<i>>>0)$();else{c[d>>2]=0;j=a;break}}else{e=c[l+8>>2]|0;if(e>>>0<i>>>0)$();a=e+12|0;if((c[a>>2]|0)!=(l|0))$();d=b+8|0;if((c[d>>2]|0)==(l|0)){c[a>>2]=b;c[d>>2]=e;j=b;break}else $()}while(0);if(g){a=c[l+28>>2]|0;d=9324+(a<<2)|0;do if((l|0)==(c[d>>2]|0)){c[d>>2]=j;if(!j){c[2256]=c[2256]&~(1<<a);r=l;f=k;break a}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(l|0)&1)<<2)>>2]=j;if(!j){r=l;f=k;break a}else break}else $();while(0);b=c[2259]|0;if(j>>>0<b>>>0)$();c[j+24>>2]=g;a=l+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0<b>>>0)$();else{c[j+16>>2]=d;c[d+24>>2]=j;break}while(0);a=c[a+4>>2]|0;if(a)if(a>>>0<(c[2259]|0)>>>0)$();else{c[j+20>>2]=a;c[a+24>>2]=j;r=l;f=k;break}else{r=l;f=k}}else{r=l;f=k}}else{r=a;f=b}while(0);h=c[2259]|0;if(o>>>0<h>>>0)$();a=o+4|0;d=c[a>>2]|0;if(!(d&2)){a=c[2260]|0;if((o|0)==(c[2261]|0)){q=(c[2258]|0)+f|0;c[2258]=q;c[2261]=r;c[r+4>>2]=q|1;if((r|0)!=(a|0))return;c[2260]=0;c[2257]=0;return}if((o|0)==(a|0)){q=(c[2257]|0)+f|0;c[2257]=q;c[2260]=r;c[r+4>>2]=q|1;c[r+q>>2]=q;return}f=(d&-8)+f|0;e=d>>>3;b:do if(d>>>0>=256){g=c[o+24>>2]|0;b=c[o+12>>2]|0;do if((b|0)==(o|0)){b=o+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){n=0;break}else d=b}while(1){b=a+20|0;e=c[b>>2]|0;if(e|0){a=e;d=b;continue}b=a+16|0;e=c[b>>2]|0;if(!e)break;else{a=e;d=b}}if(d>>>0<h>>>0)$();else{c[d>>2]=0;n=a;break}}else{e=c[o+8>>2]|0;if(e>>>0<h>>>0)$();a=e+12|0;if((c[a>>2]|0)!=(o|0))$();d=b+8|0;if((c[d>>2]|0)==(o|0)){c[a>>2]=b;c[d>>2]=e;n=b;break}else $()}while(0);if(g|0){a=c[o+28>>2]|0;d=9324+(a<<2)|0;do if((o|0)==(c[d>>2]|0)){c[d>>2]=n;if(!n){c[2256]=c[2256]&~(1<<a);break b}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(o|0)&1)<<2)>>2]=n;if(!n)break b;else break}else $();while(0);b=c[2259]|0;if(n>>>0<b>>>0)$();c[n+24>>2]=g;a=o+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0<b>>>0)$();else{c[n+16>>2]=d;c[d+24>>2]=n;break}while(0);a=c[a+4>>2]|0;if(a|0)if(a>>>0<(c[2259]|0)>>>0)$();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{d=c[o+8>>2]|0;b=c[o+12>>2]|0;a=9060+(e<<1<<2)|0;if((d|0)!=(a|0)){if(d>>>0<h>>>0)$();if((c[d+12>>2]|0)!=(o|0))$()}if((b|0)==(d|0)){c[2255]=c[2255]&~(1<<e);break}if((b|0)!=(a|0)){if(b>>>0<h>>>0)$();a=b+8|0;if((c[a>>2]|0)==(o|0))m=a;else $()}else m=b+8|0;c[d+12>>2]=b;c[m>>2]=d}while(0);c[r+4>>2]=f|1;c[r+f>>2]=f;if((r|0)==(c[2260]|0)){c[2257]=f;return}}else{c[a>>2]=d&-2;c[r+4>>2]=f|1;c[r+f>>2]=f}a=f>>>3;if(f>>>0<256){b=9060+(a<<1<<2)|0;d=c[2255]|0;a=1<<a;if(d&a){a=b+8|0;d=c[a>>2]|0;if(d>>>0<(c[2259]|0)>>>0)$();else{p=d;q=a}}else{c[2255]=d|a;p=b;q=b+8|0}c[q>>2]=r;c[p+12>>2]=r;c[r+8>>2]=p;c[r+12>>2]=b;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{p=(a+1048320|0)>>>16&8;q=a<<p;o=(q+520192|0)>>>16&4;q=q<<o;a=(q+245760|0)>>>16&2;a=14-(o|p|a)+(q<<a>>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=9324+(a<<2)|0;c[r+28>>2]=a;c[r+20>>2]=0;c[r+16>>2]=0;d=c[2256]|0;b=1<<a;if(!(d&b)){c[2256]=d|b;c[e>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}d=f<<((a|0)==31?0:25-(a>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){a=121;break}b=e+16+(d>>>31<<2)|0;a=c[b>>2]|0;if(!a){a=118;break}else{d=d<<1;e=a}}if((a|0)==118){if(b>>>0<(c[2259]|0)>>>0)$();c[b>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}else if((a|0)==121){a=e+8|0;d=c[a>>2]|0;q=c[2259]|0;if(!(d>>>0>=q>>>0&e>>>0>=q>>>0))$();c[d+12>>2]=r;c[a>>2]=r;c[r+8>>2]=d;c[r+12>>2]=e;c[r+24>>2]=0;return}}function mb(){}function nb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (y=b+d+(c>>>0<a>>>0|0)>>>0,c|0)|0}function ob(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;g=f-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function pb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}y=0;return b>>>c-32|0}function qb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=N(e,f)|0;d=a>>>16;a=(c>>>16)+(N(e,d)|0)|0;e=b>>>16;b=N(e,f)|0;return (y=(a>>>16)+(N(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function rb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=qb(e,f)|0;a=y;return (y=(N(b,f)|0)+(N(d,e)|0)+a|a&0,c|0|0)|0}function sb(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){V()|0;aa(12);return -1}c[i>>2]=a;if((a|0)>(U()|0)?(T()|0)==0:0){c[i>>2]=b;aa(12);return -1}return b|0}function tb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return da(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function ub(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function vb(a,b){a=a|0;b=b|0;return ia[a&1](b|0)|0}function wb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ja[a&3](b|0,c|0,d|0)|0}function xb(a){a=a|0;R(0);return 0}function yb(a,b,c){a=a|0;b=b|0;c=c|0;R(1);return 0} -- --// EMSCRIPTEN_END_FUNCS --var ia=[xb,Sa];var ja=[yb,_a,Ua,Ta];return{_llvm_bswap_i32:ub,_shine_check_config:Ha,_shine_flush:La,setThrew:oa,_bitshift64Lshr:pb,_shine_samples_per_pass:Ia,_fflush:eb,_shine_js_init:Qa,_memset:ob,_sbrk:sb,_memcpy:tb,___errno_location:Wa,_shine_encode_buffer:Ka,_shine_close:Ma,stackAlloc:ka,getTempRet0:qa,___muldi3:rb,setTempRet0:pa,_i64Add:nb,_emscripten_get_global_libc:Ra,stackSave:la,___muldsi3:qb,_free:hb,runPostSets:mb,establishStackSpace:na,stackRestore:ma,_malloc:gb,stackAlloc:ka,stackSave:la,stackRestore:ma,establishStackSpace:na,setThrew:oa,setTempRet0:pa,getTempRet0:qa,dynCall_ii:vb,dynCall_iiii:wb}}) -- -- --// EMSCRIPTEN_END_ASM --(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _shine_check_config=Module["_shine_check_config"]=asm["_shine_check_config"];var _shine_flush=Module["_shine_flush"]=asm["_shine_flush"];var setThrew=Module["setThrew"]=asm["setThrew"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _shine_samples_per_pass=Module["_shine_samples_per_pass"]=asm["_shine_samples_per_pass"];var _fflush=Module["_fflush"]=asm["_fflush"];var _shine_js_init=Module["_shine_js_init"]=asm["_shine_js_init"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var _shine_encode_buffer=Module["_shine_encode_buffer"]=asm["_shine_encode_buffer"];var _shine_close=Module["_shine_close"]=asm["_shine_close"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=asm["_emscripten_get_global_libc"];var stackSave=Module["stackSave"]=asm["stackSave"];var ___muldsi3=Module["___muldsi3"]=asm["___muldsi3"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var _malloc=Module["_malloc"]=asm["_malloc"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];Runtime.stackAlloc=Module["stackAlloc"];Runtime.stackSave=Module["stackSave"];Runtime.stackRestore=Module["stackRestore"];Runtime.establishStackSpace=Module["establishStackSpace"];Runtime.setTempRet0=Module["setTempRet0"];Runtime.getTempRet0=Module["getTempRet0"];Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i<argc-1;i=i+1){argv.push(allocate(intArrayFromString(args[i]),"i8",ALLOC_NORMAL));pad()}argv.push(0);argv=allocate(argv,"i32",ALLOC_NORMAL);try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}Module.printErr("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(preloadStartTime===null)preloadStartTime=Date.now();if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run();var isNode=typeof process==="object"&&typeof require==="function";var int16Len=Module.HEAP16.BYTES_PER_ELEMENT;var ptrLen=Module.HEAP32.BYTES_PER_ELEMENT;function Shine(args){if(_shine_check_config(args.samplerate,args.bitrate)<0)throw"Invalid configuration";var mode;if(!args.mode){if(args.channels===1){mode=Shine.MONO}else{mode=Shine.JOINT_STEREO}}else{mode=args.mode}this._handle=_shine_js_init(args.channels,args.samplerate,mode,args.bitrate);this._channels=args.channels;this._samples_per_pass=_shine_samples_per_pass(this._handle);this._buffer=_malloc(this._channels*ptrLen);this._pcm=new Array(this._channels);this._rem=new Array(this._channels);this._written=_malloc(int16Len);var _tmp,chan;for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array;_tmp=_malloc(this._samples_per_pass*int16Len);setValue(this._buffer+chan*ptrLen,_tmp,"*");this._pcm[chan]=Module.HEAP16.subarray(_tmp/int16Len,_tmp/int16Len+this._samples_per_pass)}return this}Shine.STEREO=0;Shine.JOINT_STEREO=1;Shine.DUAL_CHANNEL=2;Shine.MONO=3;Shine.prototype._encodePass=(function(data){if(!this._handle)throw"Closed";var chan;for(chan=0;chan<this._channels;chan++)this._pcm[chan].set(data[chan]);var _buf=_shine_encode_buffer(this._handle,this._buffer,this._written);var written=getValue(this._written,"i16");return Module.HEAPU8.subarray(_buf,_buf+written)});function concat(ctr,a,b){if(typeof b==="undefined"){return a}var ret=new ctr(a.length+b.length);ret.set(a);ret.subarray(a.length).set(b);return ret}function clip(x){return x>1?1:x<-1?-1:x}function convertFloat32(buf){var ret=new Array(buf.length);var samples=buf[0].length;var chan,i;for(chan=0;chan<buf.length;chan++){ret[chan]=new Int16Array(samples);for(i=0;i<samples;i++){ret[chan][i]=parseInt(clip(buf[chan][i])*32767)}}return ret}Shine.prototype.encode=(function(data){if(data.length!=this._channels)throw"Invalid data";var encoded=new Uint8Array;var tmp=new Array(this._channels);if(data[0]instanceof Float32Array){data=convertFloat32(data)}var chan;for(chan=0;chan<this._channels;chan++){tmp[chan]=new Float32Array;this._rem[chan]=concat(Int16Array,this._rem[chan],data[chan])}var i,enc;for(i=0;i<this._rem[0].length;i+=this._samples_per_pass){for(chan=0;chan<this._channels;chan++){tmp[chan]=this._rem[chan].subarray(i,i+this._samples_per_pass)}if(tmp[0].length<this._samples_per_pass){break}else{enc=this._encodePass(tmp);if(enc.length>0){encoded=concat(Uint8Array,encoded,enc)}}}if(tmp[0].length<this._samples_per_pass){this._rem=tmp}else{for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array}}return encoded});Shine.prototype.close=(function(){if(!this._handle){throw"Closed"}var _buf=_shine_flush(this._handle,this._written);var written=getValue(this._written,"i16");var encoded=new Uint8Array(written);encoded.set(Module.HEAPU8.subarray(_buf,_buf+written));_free(this._written);_shine_close(this._handle);this._handle=null;var chan;for(chan=0;chan<this._channels;chan++){_free(getValue(this._buffer+chan*ptrLen,"*"))}_free(this._buffer);return encoded});if(isNode){module.exports=Shine}return Shine}).call(context)})() -- -- -- -- -diff --git a/js/dist/libshine_browser.js b/js/dist/libshine_browser.js -new file mode 100644 -index 0000000..5e8cd74 ---- /dev/null -+++ b/js/dist/libshine_browser.js -@@ -0,0 +1,183 @@ -+// libshine function wrappers -+ -+var StereoMode = { -+ '0': 'STEREO', -+ '1': 'JOINT_STEREO', -+ '2': 'DUAL_CHANNEL', -+ '3': 'MONO', -+ STEREO: 0, -+ JOINT_STEREO: 1, -+ DUAL_CHANNEL: 2, -+ MONO: 3 -+}; -+ -+var ShineModule; -+var int16Len; -+var ptrLen; -+ -+function shineInit() { -+ int16Len = ShineModule._shine_js_int16_len(); -+ ptrLen = ShineModule._shine_js_ptr_len(); -+}; -+ -+function Shine(args) { -+ if (ShineModule._shine_check_config(args.samplerate, args.bitrate) < 0) -+ throw "Invalid configuration"; -+ -+ var stereoMode; -+ if (!args.stereoMode) { -+ if (args.channels === 1) { -+ stereoMode = Shine.MONO; -+ } else { -+ stereoMode = Shine.JOINT_STEREO; -+ } -+ } else { -+ stereoMode = args.stereoMode; -+ } -+ -+ this._handle = ShineModule._shine_js_init(args.channels, args.samplerate, stereoMode, args.bitrate); -+ -+ this._channels = args.channels; -+ this._samples_per_pass = ShineModule._shine_samples_per_pass(this._handle); -+ -+ this._buffer = ShineModule._malloc(this._channels * ptrLen); -+ this._pcm = new Array(this._channels); -+ this._rem = new Array(this._channels); -+ this._written = ShineModule._malloc(int16Len); -+ -+ var _tmp, chan; -+ for (chan=0; chan<this._channels; chan++) { -+ this._rem[chan] = new Int16Array; -+ _tmp = ShineModule._malloc(this._samples_per_pass * int16Len); -+ ShineModule.setValue(this._buffer + chan*ptrLen, _tmp, "*") -+ this._pcm[chan] = ShineModule.HEAP16.subarray(_tmp/int16Len, _tmp/int16Len+this._samples_per_pass) -+ } -+ -+ return this; -+}; -+ -+Shine.checkConfig = function (samplerate, bitrate) { -+ return ShineModule._shine_check_config(samplerate, bitrate) >= 0; -+}; -+ -+Shine.prototype._encodePass = function (data) { -+ if (!this._handle) -+ throw "Closed"; -+ -+ var chan; -+ for (chan=0;chan<this._channels;chan++) -+ this._pcm[chan].set(data[chan]); -+ -+ var _buf = ShineModule._shine_encode_buffer(this._handle, this._buffer, this._written); -+ -+ var written = ShineModule.getValue(this._written, "i16"); -+ -+ return ShineModule.HEAPU8.subarray(_buf, _buf+written); -+}; -+ -+function concat(ctr, a, b) { -+ if (typeof b === "undefined") { -+ return a; -+ } -+ var ret = new ctr(a.length+b.length); -+ ret.set(a); -+ ret.subarray(a.length).set(b); -+ return ret; -+} -+ -+function clip(x) { -+ return (x > 1 ? 1 : (x < -1 ? -1 : x)); -+} -+ -+function convertFloat32(buf) { -+ var ret = new Array(buf.length); -+ var samples = buf[0].length; -+ var chan, i; -+ -+ for (chan=0;chan<buf.length;chan++) { -+ ret[chan] = new Int16Array(samples); -+ for (i=0;i<samples;i++) { -+ ret[chan][i] = parseInt(clip(buf[chan][i]) * 32767); -+ } -+ } -+ return ret; -+} -+ -+Shine.prototype.encode = function (data) { -+ if (data.length != this._channels) -+ throw "Invalid data"; -+ -+ var encoded = new Uint8Array; -+ var tmp = new Array(this._channels); -+ -+ if (data[0] instanceof Float32Array) { -+ data = convertFloat32(data); -+ } -+ -+ var chan; -+ for (chan=0;chan<this._channels; chan++) { -+ tmp[chan] = new Float32Array; -+ this._rem[chan] = concat(Int16Array, this._rem[chan], data[chan]); -+ } -+ -+ var i, enc; -+ for (i=0;i<this._rem[0].length;i+=this._samples_per_pass) { -+ for (chan=0; chan<this._channels; chan++) { -+ tmp[chan] = this._rem[chan].subarray(i, i+this._samples_per_pass); -+ } -+ -+ if (tmp[0].length < this._samples_per_pass) { -+ break; -+ } else { -+ enc = this._encodePass(tmp); -+ if (enc.length > 0) { -+ encoded = concat(Uint8Array, encoded, enc); -+ } -+ } -+ } -+ -+ if (tmp[0].length < this._samples_per_pass) { -+ this._rem = tmp; -+ } else { -+ for (chan=0; chan<this._channels; chan++) { -+ this._rem[chan] = new Int16Array; -+ } -+ } -+ -+ return encoded; -+}; -+ -+Shine.prototype.close = function () { -+ if (!this._handle) { -+ throw "Closed"; -+ } -+ -+ var _buf = ShineModule._shine_flush(this._handle, this._written); -+ -+ var written = ShineModule.getValue(this._written, "i16"); -+ var encoded = new Uint8Array(written); -+ -+ encoded.set(ShineModule.HEAPU8.subarray(_buf, _buf + written)); -+ -+ ShineModule._free(this._written); -+ ShineModule._shine_close(this._handle); -+ this._handle = null; -+ -+ var chan; -+ for (chan=0; chan<this._channels; chan++) { -+ ShineModule._free(ShineModule.getValue(this._buffer + chan*ptrLen, "*")); -+ } -+ ShineModule._free(this._buffer); -+ -+ return encoded; -+}; -+var createModule = require("./libshine_browser_stubs").default; -+ -+Shine.initialized = (createModule()).then(function (Module) { -+ ShineModule = Module; -+ shineInit(); -+}); -+ -+module.exports.Shine = Shine; -+ -+module.exports.StereoMode = StereoMode; -diff --git a/js/dist/libshine_browser_stubs.js b/js/dist/libshine_browser_stubs.js -new file mode 100644 -index 0000000..23863a3 ---- /dev/null -+++ b/js/dist/libshine_browser_stubs.js -@@ -0,0 +1,16 @@ -+ -+var createModule = (() => { -+ var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; -+ -+ return ( -+function(createModule) { -+ createModule = createModule || {}; -+ -+var Module=typeof createModule!="undefined"?createModule:{};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=true;var ENVIRONMENT_IS_WORKER=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_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=""}{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{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);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 ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;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;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;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;callRuntimeCallbacks(__ATINIT__)}function postRun(){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 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)}var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,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/LECIAMoAtCyAmsiBiAGQR91IgZzIAZraiADKAL4sQIiBiADKALMsgJrIgggCEEfdSIIcyAIa2ogAygC9LECIAMoAsiyAiIIayIKIApBH3UiCnMgCmtqIAMoAvCxAiADKALEsgIiCmsiByAHQR91IgdzIAdraiADKALssQIgAygCwLICayIHIAdBH3UiB3MgB2tqIAMoAuixAiIHIAMoAryyAmsiCyALQR91IgtzIAtramogAygC4LECIAMoArSyAiILayIOIA5BH3UiDnMgDmtqIAMoAtyxAiADKAKwsgIiDmsiEiASQR91IhJzIBJraiADKALYsQIiEiADKAKssgJrIhMgE0EfdSITcyATa2pqaiADKALMsQIgAygCoLICIhNrIhQgFEEfdSIUcyAUa2ogAygCyLECIhQgAygCnLICayIWIBZBH3UiFnMgFmtqQeQASWpBBkcEQCAMQgA3AnwgDEIANwKEAQwBCyAMQQA2AnwgDCAAIAFqIAMoAtyxAiAOayIAIABBH3UiAHMgAGtqIBIgAygCrLICayIAIABBH3UiAHMgAGtqIAMoAsyxAiATayIAIABBH3UiAHMgAGtqIBQgAygCnLICayIAIABBH3UiAHMgAGtqQQpJIAMoAoCzAiADKALUswJrIgAgAEEfdSIAcyAAayADKAKEswIgAygC2LMCayIAIABBH3UiAHMgAGtqIAMoAvyyAiADKALQswJrIgAgAEEfdSIAcyAAa2ogAygC+LICIAMoAsyzAmsiACAAQR91IgBzIABraiADKAL0sgIgAygCyLMCayIAIABBH3UiAHMgAGtqIAMoAvCyAiADKALEswJrIgAgAEEfdSIAcyAAa2pBCklxNgJ8IAxBADYCgAEgDCADKALwsQIgCmsiACAAQR91IgBzIABrIARqIAMoAuyxAiADKALAsgJrIgAgAEEfdSIAcyAAa2ogByADKAK8sgJrIgAgAEEfdSIAcyAAa2ogAygC4LECIAtrIgAgAEEfdSIAcyAAa2pBCkkgAygClLMCIAMoAuizAmsiACAAQR91IgBzIABrIAMoApizAiADKALsswJrIgAgAEEfdSIAcyAAa2ogAygCkLMCIAMoAuSzAmsiACAAQR91IgBzIABraiADKAKMswIgAygC4LMCayIAIABBH3UiAHMgAGtqIAMoAoizAiADKALcswJrIgAgAEEfdSIAcyAAa2pBCklxNgKAASAMQQA2AoQBIAwgAygCgLICIAMoAtSyAmsiACAAQR91IgBzIABrIAMoAoSyAiAFayIAIABBH3UiAHMgAGtqIAMoAvyxAiADKALQsgJrIgAgAEEfdSIAcyAAa2ogBiADKALMsgJrIgAgAEEfdSIAcyAAa2ogAygC9LECIAhrIgAgAEEfdSIAcyAAa2pBCkkgAygCqLMCIAMoAvyzAmsiACAAQR91IgBzIABrIAMoAqyzAiADKAKAtAJrIgAgAEEfdSIAcyAAa2ogAygCpLMCIAMoAvizAmsiACAAQR91IgBzIABraiADKAKgswIgAygC9LMCayIAIABBH3UiAHMgAGtqIAMoApyzAiADKALwswJrIgAgAEEfdSIAcyAAa2pBCklxNgKEASAMQQA2AogBIAwgAygClLICIAMoAuiyAmsiACAAQR91IgBzIABrIAMoApiyAiADKALssgJrIgAgAEEfdSIAcyAAa2ogAygCkLICIAMoAuSyAmsiACAAQR91IgBzIABraiADKAKMsgIgAygC4LICayIAIABBH3UiAHMgAGtqIAMoAoiyAiADKALcsgJrIgAgAEEfdSIAcyAAa2pBCkkgAygCvLMCIAMoApC0AmsiACAAQR91IgBzIABrIAMoAsCzAiADKAKUtAJrIgAgAEEfdSIAcyAAa2ogAygCuLMCIAMoAoy0AmsiACAAQR91IgBzIABraiADKAK0swIgAygCiLQCayIAIABBH3UiAHMgAGtqIAMoArCzAiADKAKEtAJrIgAgAEEfdSIAcyAAa2pBCklxNgKIAQtB/x8gAygCkAQgAygCAG0iBCAEQf8fThshACADKAK0jQIiBQRAQQAhAUH/HyAAISMgAygCsI0CIgYgBUEDdEF2bWoiBSEiAn8gDCANQQN0akGQEWorAwBEzczMzMzMCECiIAS3oSJImUQAAAAAAADgQWMEQCBIqgwBC0GAgICAeAsiBEHlAE4EQCAGQQZsQQptIgEgBCABIARIGyEBCyAjICIgASABIAVIG2oiACAAQf8fThshAAsgGSANQbABbGogEEHYAGxqQdgAEAcgAyANQbgCbGogEEGcAWxqQZgMakGcARAHIAlCADcCCCAJQgA3AgAgEUIANwKsASARQQA2AqQBIBFCADcCnAEgEUIA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BQAHAAEABgABAAEAAAABAwYHAwMGBwYGBwgHBgcIBwADAAUAAQAGAAIAAwACAAUABAAEAAEAAwADAAIAAAADAwUHAwIEBQQEBQYGBQYHAQACAAoAEwAQAAoAAwADAAcACgAFAAMACwAEAA0AEQAIAAQADAALABIADwALAAIABwAGAAkADgADAAEABgAEAAUAAwACAEGACgskAQMGCAgJAwQGBwcIBgUHCAgJBwcICQkJBwcICQkKCAgJCgoKAEGwCgtFAwAEAAYAEgAMAAUABQABAAIAEAAJAAMABwADAAUADgAHAAMAEwARAA8ADQAKAAQADQAFAAgACwAFAAEADAAEAAQAAQABAEGACwskAgMGCAgJAwIECAgIBgQGCAgJCAgICQkKCAcICQoKCQgJCQsLAEGwCwtFBwAFAAkADgAPAAcABgAEAAUABQAGAAcABwAGAAgACAAIAAUADwAGAAkACgAFAAEACwAHAAkABgAEAAEADgAEAAYAAgAGAEGADAskAwMFBggJAwMEBQYIBAQFBgcIBgUGBwcIBwYHBwgJCAcICAkJAEGwDAugHQEAAgAKABcAIwAeAAwAEQADAAMACAAMABIAFQAMAAcACwAJAA8AFQAgACgAEwAGAA4ADQAWACIALgAXABIABwAUABMAIQAvABsAFgAJAAMAHwAWACkAGgAVABQABQADAA4ADQAKAAsAEAAGAAUAAQAJAAgABwAIAAQABAACAAAAAQMGCAkJCQoDBAYHCAkICAYGBwgJCgkJBwcICQoKCQoICAkKCgoKCgkJCgoLCwoLCAgJCgoKCwsJCAkKCgsLCwMABAAKABgAIgAhABUADwAFAAMABAAKACAAEQALAAoACwAHAA0AEgAeAB8AFAAFABkACwATADsAGwASAAwABQAjACEAHwA6AB4AEAAHAAUAHAAaACAAEwARAA8ACAAOAA4ADAAJAA0ADgAJAAQAAQALAAQABgAGAAYAAwACAAAAAgMFBwgJCAkDAwQGCAgHCAUFBgcICQgIBwYHCQgKCAkICAgJCQoJCggICQoKCwoLCAcHCAkKCgoIBwgJCgoKCgkABgAQACEAKQAnACYAGgAHAAUABgAJABcAEAAaAAsAEQAHAAsADgAVAB4ACgAHABEACgAPAAwAEgAcAA4ABQAgAA0AFgATABIAEAAJAAUAKAARAB8AHQARAA0ABAACABsADAALAA8ACgAHAAQAAQAbAAwACAAMAAYAAwABAAAABAMFBwgJCQkDAwQFBwcICAUEBQYHCAcIBgUGBgcICAgHBgcHCAgICQgHCAgICQgJCAcHCAgJCQoJCAgJCQkJCgEABQAOABUAIgAzAC4ARwAqADQARAA0AEMALAArABMAAwAEAAwAEwAfABoALAAhAB8AGAAgABgAHwAjABYADgAPAA0AFwAkADsAMQBNAEEAHQAoAB4AKAAbACEAKgAQABYAFAAlAD0AOABPAEkAQAArAEwAOAAlABoAHwAZAA4AIwAQADwAOQBhAEsAcgBbADYASQA3ACkAMAA1ABcAGAA6ABsAMgBgAEwARgBdAFQATQA6AE8AHQBKADEAKQARAC8ALQBOAEoAcwBeAFoATwBFAFMARwAyADsAJgAkAA8ASAAiADgAXwBcAFUAWwBaAFYASQBNAEEAMwAsACsAKgArABQAHgAsADcATgBIAFcATgA9AC4ANgAlAB4AFAAQADUAGQApACUALAA7ADYAUQBCAEwAOQA2ACUAEgAnAAsAIwAhAB8AOQAqAFIASABQAC8AOgA3ABUAFgAaACYAFgA1ABkAFwAmAEYAPAAzACQANwAaACIAFwAbAA4ACQAHACIAIAAcACcAMQBLAB4ANAAwACgANAAcABIAEQAJAAUALQAVACIAQAA4ADIAMQAtAB8AEwAMAA8ACgAHAAYAAwAwABcAFAAnACQAIwA1ABUAEAAXAA0ACgAGAAEABAACABAADwARABsAGQAUAB0ACwARAAwAEAAIAAEAAQAAAAEAAQQGBwgJCQoJCgsLDAwNDQMEBgcICAkJCQkKCgsMDAwGBgcICQkKCgkKCgsLDA0NBwcICQkKCgoKCwsLCwwNDQgHCQkKCgsLCgsLDAwNDQ4JCAkKCgoLCwsLDAsNDQ4OCQkKCgsLCwsLDAwMDQ0ODgoJCgsLCwwMDAwNDQ0OEBAJCAkKCgsLDAwMDA0NDg8PCgkKCgsLCw0MDQ0ODg4QDwoKCgsLDAwNDA0ODQ4PEBELCgoLDAwMDA0NDQ4PDw8QCwsLDAwNDA0ODg8PDxAQEAwLDA0NDQ4ODg4ODxAPEBANDAwNDQ0PDg4RDw8PERAQDAwNDg4ODw4PDxAQExITEAcADAASADUALwBMAHwAbABZAHsAbAB3AGsAUQB6AD8ADQAFABAAGwAuACQAPQAzACoARgA0AFMAQQApADsAJAATABEADwAYACkAIgA7ADAAKABAADIATgA+AFAAOAAhAB0AHAAZACsAJwA/ADcAXQBMADsAXQBIADYASwAyAB0ANAAWACoAKABDADkAXwBPAEgAOQBZAEUAMQBCAC4AGwBNACUAIwBCADoANABbAEoAPgAwAE8APwBaAD4AKAAmAH0AIAA8ADgAMgBcAE4AQQA3AFcARwAzAEkAMwBGAB4AbQA1ADEAXgBYAEsAQgB6AFsASQA4ACoAQAAsABUAGQBaACsAKQBNAEkAPwA4AFwATQBCAC8AQwAwADUAJAAUAEcAIgBDADwAOgAxAFgATABDAGoARwA2ACYAJwAXAA8AbQA1ADMALwBaAFIAOgA5ADAASAA5ACkAFwAbAD4ACQBWACoAKAAlAEYAQAA0ACsARgA3ACoAGQAdABIACwALAHYARAAeADcAMgAuAEoAQQAxACcAGAAQABYADQAOAAcAWwAsACcAJgAiAD8ANAAtAB8ANAAcABMADgAIAAkAAwB7ADwAOgA1AC8AKwAgABYAJQAYABEADAAPAAoAAgABAEcAJQAiAB4AHAAUABEAGgAVABAACgAGAAgABgACAAAAAwQFBwcICQkJCgoLCwsMDQQDBQYHBwgICAkJCgoKCwsFBQUGBwcICAgJCQoKCwsLBgYGBwcICAkJCQoKCgsLCwcGBwcICAkJCQkKCgoLCwsIBwcICAgJCQkJCgoLCwsMCQcICAgJCQkJCgoKCwsMDAkICAkJCQkKCgoKCgsLCwwJCAgJCQkJCgoKCgsLDAwMCQgJCQkJCgoKCwsLCwwMDAoJCQkKCgoKCgsLCwsMDQwKCQkJCgoKCgsLCwsMDAwNCwoJCgoKCwsLCwsLDAwNDQsKCgoKCwsLCwwMDAwMDQ0MCwsLCwsLCwwMDAwNDQwNDAsLCwsLCwwMDAwMDQ0NDQEABQAOACwASgA/AG4AXQCsAJUAigDyAOEAwwB4AREAAwAEAAwAFAAjAD4ANQAvAFMASwBEAHcAyQBrAM8ACQAPAA0AFwAmAEMAOgBnAFoAoQBIAH8AdQBuANEAzgAQAC0AFQAnAEUAQAByAGMAVwCeAIwA/ADUAMcAgwFtARoASwAkAEQAQQBzAGUAswCkAJsACAH2AOIAiwF+AWoBCQBCAB4AOwA4AGYAuQCtAAkBjgD9AOgAkAGEAXoBvQEQAG8ANgA0AGQAuACyAKAAhQABAfQA5ADZAIEBbgHLAgoAYgAwAFsAWAClAJ0AlAAFAfgAlwGNAXQBfAF5A3QDCABVAFQAUQCfAJwAjwAEAfkAqwGRAYgBfwHXAskCxAIHAJoATABJAI0AgwAAAfUAqgGWAYoBgAHfAmcBxgJgAQsAiwCBAEMAfQD3AOkA5QDbAIkB5wLhAtACdQNyA7cBBADzAHgAdgBzAOMA3wCMAeoC5gLgAtECyALCAt8AtAEGAMoA4ADeANoA2ACFAYIBfQFsAXgDuwHDArgBtQHABgQA6wLTANIA0AByAXsB3gLTAsoCxwZzA20DbAODDWEDAgB5AXEBZgC7ANYC0gJmAccCxQJiA8YGZwOCDWYDsgEAAAwACgAHAAsACgARAAsACQANAAwACgAHAAUAAwABAAMAAQQGCAkJCgoLCwsMDAwNCQMEBgcICQkJCgoKCwwLDAgGBgcICQkKCgsKCwsLDAwJCAcICQkKCgoLCwwMDA0NCgkICQkKCgsLCwwMDA0NDQkJCAkJCgsLDAsMDA0NDQ4KCgkJCgsLCwsMDAwMDQ0OCgoJCgoLCwsMDA0NDQ0PDwoKCgoLCwsMDA0NDQ0ODg4KCwoKCwsMDA0NDQ0ODQ4NCwsLCgsMDAwMDQ4ODg8PDgoMCwsLDAwNDg4ODg4ODQ4LDAwMDAwNDQ0NDw4ODg4QCw4MDAwNDQ4ODhAPDw8RDwsNDQsMDg4NDg4PEA8RDw4LCQgICQkKCgoLCwsLCwsLCA8ADQAuAFAAkgAGAfgAsgGqAZ0CjQKJAm0CBQIIBFgADgAMABUAJgBHAIIAegDYANEAxgBHAVkBPwEpARcBKgAvABYAKQBKAEQAgAB4AN0AzwDCALYAVAE7AScBHQISAFEAJwBLAEYAhgB9AHQA3ADMAL4AsgBFATcBJQEPARAAkwBIAEUAhwB/AHYAcADSAMgAvABgAUMBMgEdARwCDgAHAUIAgQB+AHcAcgDWAMoAwAC0AFUBPQEtARkBBgEMAPkAewB5AHUAcQDXAM4AwwC5AFsBSgE0ASMBEAEIAgoAswFzAG8AbQDTAMsAxAC7AGEBTAE5ASoBGwETAn0BEQCrAdQA0ADNAMkAwQC6ALEAqQBAAS8BHgEMAQICeQEQAE8BxwDFAL8AvQC1AK4ATQFBATEBIQETAQkCewFzAQsAnAK4ALcAswCvAFgBSwE6ATABIgEVARICfwF1AW4BCgCMAloBqwCoAKQAPgE1ASsBHwEUAQcBAQJ3AXABagEGAIgCQgE8ATgBMwEuASQBHAENAQUBAAJ4AXIBbAFnAQQAbAIsASgBJgEgARoBEQEKAQMCfAF2AXEBbQFpAWUBAgAJBBgBFgESAQsBCAEDAX4BegF0AW8BawFoAWYBZAEAACsAFAATABEADwANAAsACQAHAAYABAAHAAUAAwABAAMABAQGBwgJCQoKCwsLCwsMCQQEBQYHCAgJCQkKCgoKCggGBQYHBwgICQkJCQoKCgsHBwYHBwgICAkJCQkKCgoKBwgHBwgICAgJCQkKCgoKCwcJBwgICAgJCQkJCgoKCgoHCQgICAgJCQkJCgoKCgoLBwoICAgJCQkJCgoKCgoLCwgKCQkJCQkJCQkKCgoKCwsICgkJCQkJCQoKCgoKCwsLCAsJCQkJCgoKCgoKCwsLCwgLCgkJCQoKCgoKCgsLCwsICwoKCgoKCgoKCgsLCwsLCAsKCgoKCgoKCwsLCwsLCwgMCgoKCgoKCwsLCwsLCwsICAcHBwcHBwcHBwcICAgIBAEABQAEAAUABgAFAAQABAAHAAMABgAAAAcAAgADAAEAAQQEBQQGBQYEBQUGBQYGBg8ADgANAAwACwAKAAkACAAHAAYABQAEAAMAAgABAAAABAQEBAQEBAQEBAQEBAQEBABB6CkLBQIAAAACAEH5KQsMBAAACAQAAAMAAAADAEGQKgsNEAQAACIEAAADAAAAAwBBqCoLBjAEAABCBABByCoLBQQAAAAEAEHYKgsNUAQAAHAEAAAEAAAABABB8CoLDYAEAACgBAAABgAAAAYAQYgrCw2wBAAAAAUAAAYAAAAGAEGgKwsNMAUAAIAFAAAGAAAABgBBuCsLDbAFAAAABgAACAAAAAgAQdArCw0wBgAAsAYAAAgAAAAIAEHoKwsN8AYAAHAHAAAIAAAACABBgCwLDbAHAAAwCAAAEAAAABAAQZgsCwZwCAAAcAoAQbgsCwUQAAAAEABByCwLjQNwCwAAcA0AABAAAAAQAAAAAQAAAAEAAABwDgAAcBAAABAAAAAQAAAAAgAAAAMAAABwDgAAcBAAABAAAAAQAAAAAwAAAAcAAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwDgAAcBAAABAAAAAQAAAABgAAAD8AAABwDgAAcBAAABAAAAAQAAAACAAAAP8AAABwDgAAcBAAABAAAAAQAAAACgAAAP8DAABwDgAAcBAAABAAAAAQAAAADQAAAP8fAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwEQAAcBMAABAAAAAQAAAABQAAAB8AAABwEQAAcBMAABAAAAAQAAAABgAAAD8AAABwEQAAcBMAABAAAAAQAAAABwAAAH8AAABwEQAAcBMAABAAAAAQAAAACAAAAP8AAABwEQAAcBMAABAAAAAQAAAACQAAAP8BAABwEQAAcBMAABAAAAAQAAAACwAAAP8HAABwEQAAcBMAABAAAAAQAAAADQAAAP8fAABwEQAAcBMAAAEAAAAQAEHgLwsNcBQAAJAUAAABAAAAEABB+C8LBqAUAADAFABBrDALiQEBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAMAAAAEAAAABAAAAAUAAAAEAAAABQAAAAQAAAAGAAAABQAAAAYAAAAFAAAABgAAAAUAAAAHAAAABgAAAAcAAAAGAAAABwBBwDELDQEAAAD/////AQAAAAIAQeAxC5IBAwAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAAAwAAAAQAAAAEAAAAAAAAAAEAAAACAAAAAwAAAAAAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAACAAAAAwAAAESsAACAuwAAAH0AACJWAADAXQAAgD4AABErAADgLgAAQB8AQYAzC7oI/////////////////////wgAAAD/////CAAAACAAAAAQAAAA/////xAAAAAoAAAAGAAAAP////8YAAAAMAAAACAAAAD/////IAAAADgAAAAoAAAA/////ygAAABAAAAAMAAAAP////8wAAAAUAAAADgAAAD/////OAAAAGAAAABAAAAA/////0AAAABwAAAA//////////9QAAAAgAAAAP//////////YAAAAKAAAAD//////////3AAAADAAAAA//////////+AAAAA4AAAAP//////////kAAAAAABAAD//////////6AAAABAAQAA/////////////////////wAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAeAAAAJAAAACwAAAA0AAAAPgAAAEoAAABaAAAAbgAAAIYAAACiAAAAxAAAAO4AAAAgAQAAVgEAAKIBAABAAgAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAB4AAAAkAAAAKgAAADIAAAA8AAAASAAAAFgAAABqAAAAgAAAAJwAAAC+AAAA5gAAABQBAABKAQAAgAEAAEACAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABSAAAAZgAAAH4AAACcAAAAwgAAAPAAAAAoAQAAbAEAAMABAAAmAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAcgAAAIgAAACiAAAAwgAAAOgAAAAWAQAASgEAAIoBAADQAQAAHAIAAEACAAAAAAAABgAAAAwAAAASAAAAGAAAAB4AAAAkAAAALAAAAC0AAABCAAAAUAAAAGAAAAB0AAAAjAAAAKgAAADIAAAA7gAAAPgAAABQAQAAjAEAANABAAAKAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAdAAAAIwAAACoAAAAyAAAAO4AAAAcAQAAUAEAAIwBAADQAQAACgIAAEACAAAAAAAADAAAABgAAAAkAAAAMAAAADwAAABIAAAAWAAAAGwAAACEAAAAoAAAAMAAAADoAAAAGAEAAFABAACQAQAA3AEAADYCAAA4AgAAOgIAADwCAAA+AgAAQAIAQdw7C8oPnff//533//+d9///nff//533//+d9///Ou///zrv//86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";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"){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)})}}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;wasmMemory=Module["asm"]["c"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["o"];addOnInit(Module["asm"]["d"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}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)&&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;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort("invalid type for getValue: "+type)}return null}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){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("")}function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort("invalid type for setValue: "+type)}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}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(i<input.length);return output};function intArrayFromBase64(s){try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}var asmLibraryArg={"b":_emscripten_memcpy_big,"a":_emscripten_resize_heap};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["d"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["e"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["f"]).apply(null,arguments)};var _shine_check_config=Module["_shine_check_config"]=function(){return(_shine_check_config=Module["_shine_check_config"]=Module["asm"]["g"]).apply(null,arguments)};var _shine_samples_per_pass=Module["_shine_samples_per_pass"]=function(){return(_shine_samples_per_pass=Module["_shine_samples_per_pass"]=Module["asm"]["h"]).apply(null,arguments)};var _shine_encode_buffer=Module["_shine_encode_buffer"]=function(){return(_shine_encode_buffer=Module["_shine_encode_buffer"]=Module["asm"]["i"]).apply(null,arguments)};var _shine_flush=Module["_shine_flush"]=function(){return(_shine_flush=Module["_shine_flush"]=Module["asm"]["j"]).apply(null,arguments)};var _shine_close=Module["_shine_close"]=function(){return(_shine_close=Module["_shine_close"]=Module["asm"]["k"]).apply(null,arguments)};var _shine_js_int16_len=Module["_shine_js_int16_len"]=function(){return(_shine_js_int16_len=Module["_shine_js_int16_len"]=Module["asm"]["l"]).apply(null,arguments)};var _shine_js_ptr_len=Module["_shine_js_ptr_len"]=function(){return(_shine_js_ptr_len=Module["_shine_js_ptr_len"]=Module["asm"]["m"]).apply(null,arguments)};var _shine_js_init=Module["_shine_js_init"]=function(){return(_shine_js_init=Module["_shine_js_init"]=Module["asm"]["n"]).apply(null,arguments)};Module["setValue"]=setValue;Module["getValue"]=getValue;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){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 createModule.ready -+} -+); -+})(); -+export default createModule; -\ No newline at end of file -diff --git a/js/dist/libshine_node.js b/js/dist/libshine_node.js -new file mode 100644 -index 0000000..02d7990 ---- /dev/null -+++ b/js/dist/libshine_node.js -@@ -0,0 +1 @@ -+var Module=typeof Module!="undefined"?Module:{};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 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);if(typeof module!="undefined"){module["exports"]=Module}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]"}}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(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{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{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);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 ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;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;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;callRuntimeCallbacks(__ATINIT__)}function postRun(){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 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);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,AGFzbQEAAAABVg9gAX8Bf2ADf39/AGACf38Bf2AEf39/fwF/YAN/f38Bf2ACf38AYAF/AGABfAF8YAABf2ADfHx/AXxgAnx8AXxgAnx/AXxgAABgBH9/f38AYAJ8fwF/Ag0CAWEBYQAAAWEBYgABAxsaAQMBAAQFAAkKBgsCBwwNBQcOAgQAAgMICAYEBQFwAQEBBQYBAYACgAIGCAF/AUHglwULBzUNAWMCAAFkAA8BZQAIAWYACwFnABcBaAAWAWkAFQFqABQBawAbAWwAGgFtABkBbgAYAW8BAArC+gEahQoBDX8gAiAAKAIQIgRJBEAgACAEIAJrIgI2AhAgACAAKAIMIAEgAnRyNgIMDwsgACgCACEKIAAoAgQiBSAAKAIIIgNBBGpNBEAgAAJ/IAVBAm0gBWohCyAKRQRAIAsQCAwBCyALQUBPBEBB5JMBQTA2AgBBAAwBCwJ/QRAgC0ELakF4cSALQQtJGyEHQQAhAyAKQQhrIgUoAgQiDEF4cSEGAkAgDEEDcUUEQEEAIAdBgAJJDQIaIAdBBGogBk0EQCAFIQMgBiAHa0HIlwEoAgBBAXRNDQILQQAMAgsgBSAGaiEIAkAgBiAHTwRAIAYgB2siBEEQSQ0BIAUgDEEBcSAHckECcjYCBCAFIAdqIgMgBEEDcjYCBCAIIAgoAgRBAXI2AgQgAyAEEBEMAQtBgJQBKAIAIAhGBEBB9JMBKAIAIAZqIgYgB00NAiAFIAxBAXEgB3JBAnI2AgQgBSAHaiIEIAYgB2siA0EBcjYCBEH0kwEgAzYCAEGAlAEgBDYCAAwBC0H8kwEoAgAgCEYEQEHwkwEoAgAgBmoiBCAHSQ0CAkAgBCAHayIDQRBPBEAgBSAMQQFxIAdyQQJyNgIEIAUgB2oiBiADQQFyNgIEIAQgBWoiBCADNgIAIAQgBCgCBEF+cTYCBAwBCyAFIAxBAXEgBHJBAnI2AgQgBCAFaiIDIAMoAgRBAXI2AgRBACEDQQAhBgtB/JMBIAY2AgBB8JMBIAM2AgAMAQsgCCgCBCIEQQJxDQEgBEF4cSAGaiINIAdJDQEgDSAHayEPAkAgBEH/AU0EQCAIKAIIIgYgBEEDdiIDQQN0QZCUAWpGGiAGIAgoAgwiBEYEQEHokwFB6JMBKAIAQX4gA3dxNgIADAILIAYgBDYCDCAEIAY2AggMAQsgCCgCGCEOAkAgCCAIKAIMIglHBEAgCCgCCCIDQfiTASgCAEkaIAMgCTYCDCAJIAM2AggMAQsCQCAIQRRqIgYoAgAiAw0AIAhBEGoiBigCACIDDQBBACEJDAELA0AgBiEEIAMiCUEUaiIGKAIAIgMNACAJQRBqIQYgCSgCECIDDQALIARBADYCAAsgDkUNAAJAIAgoAhwiBEECdEGYlgFqIgMoAgAgCEYEQCADIAk2AgAgCQ0BQeyTAUHskwEoAgBBfiAEd3E2AgAMAgsgDkEQQRQgDigCECAIRhtqIAk2AgAgCUUNAQsgCSAONgIYIAgoAhAiAwRAIAkgAzYCECADIAk2AhgLIAgoAhQiA0UNACAJIAM2AhQgAyAJNgIYCyAPQQ9NBEAgBSAMQQFxIA1yQQJyNgIEIAUgDWoiAyADKAIEQQFyNgIEDAELIAUgDEEBcSAHckECcjYCBCAFIAdqIgQgD0EDcjYCBCAFIA1qIgMgAygCBEEBcjYCBCAEIA8QEQsgBSEDCyADCyIDBEAgA0EIagwBC0EAIAsQCCIFRQ0AGiAFIApBfEF4IApBBGsoAgAiA0EDcRsgA0F4cWoiAyALIAMgC0kbEAQgChALIAULIgo2AgAgACAAKAIEIgNBAm0gA2o2AgQgACgCECEEIAAoAgghAwsgAyAKaiAAKAIMIAEgAiAEayIDdnIiBUEYdCAFQYD+A3FBCHRyIAVBCHZBgP4DcSAFQRh2cnI2AgAgAEEgIANrIgM2AhAgACAAKAIIQQRqNgIIIAIgBEcEQCAAIAEgA3Q2AgwPCyAAQQA2AgwLgQIBBn8CQCADRQ0AIANBGGxB0ClqIgUoAgQhByADQQ9NBEAgASACTw0BIANBGGxB0ClqKAIUIQMDQCAEIAAgAUECdGoiBSgCACIGQQBHaiAFKAIEIgRBAEdqIAMgBiAHbCAEamotAABqIQQgAUECaiIBIAJJDQALDAELIAEgAk8NACAFKAIIIQUgA0EYbEHQKWooAhQhAwNAIAQgBUEAIAAgAUECdGoiBCgCACIGQQ5KIggbaiAFQQAgBCgCBCIEQQ5KIgkbaiADQQ8gBCAJGyIEQQ8gBiAIGyIGIAdsamotAABqIAZBAEdqIARBAEdqIQQgAUECaiIBIAJJDQALCyAEC/wDAQJ/IAJBgARPBEAgACABIAIQAQ8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCAAQQNxRQRAIAAhAgwBCyACRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAkEDcUUNASACIANJDQALCwJAIANBfHEiAEHAAEkNACACIABBQGoiBEsNAANAIAIgASgCADYCACACIAEoAgQ2AgQgAiABKAIINgIIIAIgASgCDDYCDCACIAEoAhA2AhAgAiABKAIUNgIUIAIgASgCGDYCGCACIAEoAhw2AhwgAiABKAIgNgIgIAIgASgCJDYCJCACIAEoAig2AiggAiABKAIsNgIsIAIgASgCMDYCMCACIAEoAjQ2AjQgAiABKAI4NgI4IAIgASgCPDYCPCABQUBrIQEgAkFAayICIARNDQALCyAAIAJNDQEDQCACIAEoAgA2AgAgAUEEaiEBIAJBBGoiAiAASQ0ACwwBCyADQQRJBEAgACECDAELIAAgA0EEayIESwRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAiABLQABOgABIAIgAS0AAjoAAiACIAEtAAM6AAMgAUEEaiEBIAJBBGoiAiAETQ0ACwsgAiADSQRAA0AgAiABLQAAOgAAIAFBAWohASACQQFqIgIgA0cNAAsLC1IBAn9B4JMBKAIAIgEgAEEHakF4cSICaiEAAkAgAkEAIAAgAU0bDQAgAD8AQRB0SwRAIAAQAEUNAQtB4JMBIAA2AgAgAQ8LQeSTAUEwNgIAQX8L0gsBCH8CQCABIAJJBH8gAiABayIFQQNxIQYgASEEIAFBf3MgAmpBA08EQCAFQXxxIQkDQCADIAAgBEECdGoiBSgCACIKIAMgCkobIgMgBSgCBCIKIAMgCkobIgMgBSgCCCIKIAMgCkobIgMgBSgCDCIFIAMgBUobIQMgBEEEaiEEIAhBBGoiCCAJRw0ACwsgBgRAA0AgAyAAIARBAnRqKAIAIgUgAyAFShshAyAEQQFqIQQgB0EBaiIHIAZHDQALCyADRQRAQQAPCyADQQ5MBEAgA0GILCgCAE8EQEEMIQQCQAJAAkACQAJAQfArKAIAIANLDQBBCyEEQdgrKAIAIANLDQBBwCsoAgAgA0sNBEEJIQRBqCsoAgAgA0sNAEEIIQRBkCsoAgAgA0sNAEH4KigCACADSw0DQQYhBEHgKigCACADSw0AQcgqKAIAIANLDQJBBCEEQbAqKAIAIANLDQBBAyEEQZgqKAIAIANLDQBBgCooAgAgA0sNAUEBIQRB6CkoAgAgA0sNAEEAIQRB0CkoAgAgA00NCAsgACABIAIgBBADGiAEDwtBrCooAgAhBEGcKigCACEFIAAgASACQQIQAyEGQQAhAwNAIAMgACABQQJ0aiIHKAIAIghBAEdqIAcoAgQiA0EAR2ogBCAFIAhsIANqai0AAGohAyABQQJqIgEgAkkNAAtBAkEDIAMgBkobDwtB9CooAgAhBEHkKigCACEFIAAgASACQQUQAyEGQQAhAwNAIAMgACABQQJ0aiIHKAIAIghBAEdqIAcoAgQiA0EAR2ogBCAFIAhsIANqai0AAGohAyABQQJqIgEgAkkNAAtBBUEGIAMgBkobDwtBpCsoAgAhBkGUKygCACEHIAAgASACQQcQAyEFQQAhBCABIQMDQCAEIAAgA0ECdGoiCCgCACIJQQBHaiAIKAIEIgRBAEdqIAYgByAJbCAEamotAABqIQQgA0ECaiIDIAJJDQALIAQgBSAEIAVIGyEGQQdBCCAEIAVKGyEEQbwrKAIAIQVBrCsoAgAhB0EAIQMDQCADIAAgAUECdGoiCCgCACIJQQBHaiAIKAIEIgNBAEdqIAUgByAJbCADamotAABqIQMgAUECaiIBIAJJDQALQQkgBCADIAZMGw8LQewrKAIAIQZB3CsoAgAhByAAIAEgAkEKEAMhBUEAIQQgASEDA0AgBCAAIANBAnRqIggoAgAiCUEAR2ogCCgCBCIEQQBHaiAGIAcgCWwgBGpqLQAAaiEEIANBAmoiAyACSQ0ACyAEIAUgBCAFSBshBkEKQQsgBCAFShshBEGELCgCACEFQfQrKAIAIQdBACEDA0AgAyAAIAFBAnRqIggoAgAiCUEAR2ogCCgCBCIDQQBHaiAFIAcgCWwgA2pqLQAAaiEDIAFBAmoiASACSQ0AC0EMIAQgAyAGTBsPC0HMLCgCACEEQbwsKAIAIQUgACABIAJBDRADIQZBACEDA0AgAyAAIAFBAnRqIgcoAgAiCEEAR2ogBygCBCIDQQBHaiAEIAUgCGwgA2pqLQAAaiEDIAFBAmoiASACSQ0AC0ENQQ8gAyAGShsPCwJ/QQ8gA0EPayIFQcQsKAIATQ0AGkEQQdwsKAIAIAVPDQAaQRFB9CwoAgAgBU8NABpBEkGMLSgCACAFTw0AGkETQaQtKAIAIAVPDQAaQRRBvC0oAgAgBU8NABpBFUHULSgCACAFTw0AGkEWQewtKAIAIAVPDQAaQRdBAEGELigCACAFTxsLIQQCf0EYQZwuKAIAIAVPDQAaQRlBtC4oAgAgBU8NABpBGkHMLigCACAFTw0AGkEbQeQuKAIAIAVPDQAaQRxB/C4oAgAgBU8NABpBHUGULygCACAFTw0AGkEeQawvKAIAIAVPDQAaQR9BAEHELygCACAFTxsLIQMgACABIAIgBBADIQUgAyAEIAAgASACIAMQAyAFSBsFQQALDwsgACABIAJBABADGkEAC9YCAQF/AkAgAUUNACAAQQA6AAAgACABaiICQQFrQQA6AAAgAUEDSQ0AIABBADoAAiAAQQA6AAEgAkEDa0EAOgAAIAJBAmtBADoAACABQQdJDQAgAEEAOgADIAJBBGtBADoAACABQQlJDQAgAEEAIABrQQNxIgJqIgBBADYCACAAIAEgAmtBfHEiAmoiAUEEa0EANgIAIAJBCUkNACAAQQA2AgggAEEANgIEIAFBCGtBADYCACABQQxrQQA2AgAgAkEZSQ0AIABBADYCGCAAQQA2AhQgAEEANgIQIABBADYCDCABQRBrQQA2AgAgAUEUa0EANgIAIAFBGGtBADYCACABQRxrQQA2AgAgAiAAQQRxQRhyIgJrIgFBIEkNACAAIAJqIQADQCAAQgA3AxggAEIANwMQIABCADcDCCAAQgA3AwAgAEEgaiEAIAFBIGsiAUEfSw0ACwsLtykBC38jAEEQayILJAACQAJAAkACQAJAAkACQAJAAkAgAEH0AU0EQEHokwEoAgAiBkEQIABBC2pBeHEgAEELSRsiBUEDdiIAdiIBQQNxBEACQCABQX9zQQFxIABqIgJBA3QiAUGQlAFqIgAgAUGYlAFqKAIAIgEoAggiBEYEQEHokwEgBkF+IAJ3cTYCAAwBCyAEIAA2AgwgACAENgIICyABQQhqIQAgASACQQN0IgJBA3I2AgQgASACaiIBIAEoAgRBAXI2AgQMCgsgBUHwkwEoAgAiB00NASABBEACQEECIAB0IgJBACACa3IgASAAdHEiAEEAIABrcWgiAUEDdCIAQZCUAWoiAiAAQZiUAWooAgAiACgCCCIERgRAQeiTASAGQX4gAXdxIgY2AgAMAQsgBCACNgIMIAIgBDYCCAsgACAFQQNyNgIEIAAgBWoiCCABQQN0IgEgBWsiBEEBcjYCBCAAIAFqIAQ2AgAgBwRAIAdBeHFBkJQBaiEBQfyTASgCACECAn8gBkEBIAdBA3Z0IgNxRQRAQeiTASADIAZyNgIAIAEMAQsgASgCCAshAyABIAI2AgggAyACNgIMIAIgATYCDCACIAM2AggLIABBCGohAEH8kwEgCDYCAEHwkwEgBDYCAAwKC0HskwEoAgAiCkUNASAKQQAgCmtxaEECdEGYlgFqKAIAIgIoAgRBeHEgBWshAyACIQEDQAJAIAEoAhAiAEUEQCABKAIUIgBFDQELIAAoAgRBeHEgBWsiASADIAEgA0kiARshAyAAIAIgARshAiAAIQEMAQsLIAIoAhghCSACIAIoAgwiBEcEQCACKAIIIgBB+JMBKAIASRogACAENgIMIAQgADYCCAwJCyACQRRqIgEoAgAiAEUEQCACKAIQIgBFDQMgAkEQaiEBCwNAIAEhCCAAIgRBFGoiASgCACIADQAgBEEQaiEBIAQoAhAiAA0ACyAIQQA2AgAMCAtBfyEFIABBv39LDQAgAEELaiIAQXhxIQVB7JMBKAIAIghFDQBBACAFayEDAkACQAJAAn9BACAFQYACSQ0AGkEfIAVB////B0sNABogBUEmIABBCHZnIgBrdkEBcSAAQQF0a0E+agsiB0ECdEGYlgFqKAIAIgFFBEBBACEADAELQQAhACAFQRkgB0EBdmtBACAHQR9HG3QhAgNAAkAgASgCBEF4cSAFayIGIANPDQAgASEEIAYiAw0AQQAhAyABIQAMAwsgACABKAIUIgYgBiABIAJBHXZBBHFqKAIQIgFGGyAAIAYbIQAgAkEBdCECIAENAAsLIAAgBHJFBEBBACEEQQIgB3QiAEEAIABrciAIcSIARQ0DIABBACAAa3FoQQJ0QZiWAWooAgAhAAsgAEUNAQsDQCAAKAIEQXhxIAVrIgIgA0khASACIAMgARshAyAAIAQgARshBCAAKAIQIgEEfyABBSAAKAIUCyIADQALCyAERQ0AIANB8JMBKAIAIAVrTw0AIAQoAhghByAEIAQoAgwiAkcEQCAEKAIIIgBB+JMBKAIASRogACACNgIMIAIgADYCCAwHCyAEQRRqIgEoAgAiAEUEQCAEKAIQIgBFDQMgBEEQaiEBCwNAIAEhBiAAIgJBFGoiASgCACIADQAgAkEQaiEBIAIoAhAiAA0ACyAGQQA2AgAMBgsgBUHwkwEoAgAiAU0EQEH8kwEoAgAhAAJAIAEgBWsiAkEQTwRAQfCTASACNgIAQfyTASAAIAVqIgQ2AgAgBCACQQFyNgIEIAAgAWogAjYCACAAIAVBA3I2AgQMAQtB/JMBQQA2AgBB8JMBQQA2AgAgACABQQNyNgIEIAAgAWoiASABKAIEQQFyNgIECyAAQQhqIQAMCAsgBUH0kwEoAgAiAkkEQEH0kwEgAiAFayIBNgIAQYCUAUGAlAEoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEADAgLQQAhACAFQS9qIgMCf0HAlwEoAgAEQEHIlwEoAgAMAQtBzJcBQn83AgBBxJcBQoCggICAgAQ3AgBBwJcBIAtBDGpBcHFB2KrVqgVzNgIAQdSXAUEANgIAQaSXAUEANgIAQYAgCyIBaiIGQQAgAWsiCHEiASAFTQ0HQaCXASgCACIEBEBBmJcBKAIAIgcgAWoiCSAHTQ0IIAQgCUkNCAsCQEGklwEtAABBBHFFBEACQAJAAkACQEGAlAEoAgAiBARAQaiXASEAA0AgBCAAKAIAIgdPBEAgByAAKAIEaiAESw0DCyAAKAIIIgANAAsLQQAQBSICQX9GDQMgASEGQcSXASgCACIAQQFrIgQgAnEEQCABIAJrIAIgBGpBACAAa3FqIQYLIAUgBk8NA0GglwEoAgAiAARAQZiXASgCACIEIAZqIgggBE0NBCAAIAhJDQQLIAYQBSIAIAJHDQEMBQsgBiACayAIcSIGEAUiAiAAKAIAIAAoAgRqRg0BIAIhAAsgAEF/Rg0BIAYgBUEwak8EQCAAIQIMBAtByJcBKAIAIgIgAyAGa2pBACACa3EiAhAFQX9GDQEgAiAGaiEGIAAhAgwDCyACQX9HDQILQaSXAUGklwEoAgBBBHI2AgALIAEQBSECQQAQBSEAIAJBf0YNBSAAQX9GDQUgACACTQ0FIAAgAmsiBiAFQShqTQ0FC0GYlwFBmJcBKAIAIAZqIgA2AgBBnJcBKAIAIABJBEBBnJcBIAA2AgALAkBBgJQBKAIAIgMEQEGolwEhAANAIAIgACgCACIBIAAoAgQiBGpGDQIgACgCCCIADQALDAQLQfiTASgCACIAQQAgACACTRtFBEBB+JMBIAI2AgALQQAhAEGslwEgBjYCAEGolwEgAjYCAEGIlAFBfzYCAEGMlAFBwJcBKAIANgIAQbSXAUEANgIAA0AgAEEDdCIBQZiUAWogAUGQlAFqIgQ2AgAgAUGclAFqIAQ2AgAgAEEBaiIAQSBHDQALQfSTASAGQShrIgBBeCACa0EHcUEAIAJBCGpBB3EbIgFrIgQ2AgBBgJQBIAEgAmoiATYCACABIARBAXI2AgQgACACakEoNgIEQYSUAUHQlwEoAgA2AgAMBAsgAC0ADEEIcQ0CIAEgA0sNAiACIANNDQIgACAEIAZqNgIEQYCUASADQXggA2tBB3FBACADQQhqQQdxGyIAaiIBNgIAQfSTAUH0kwEoAgAgBmoiAiAAayIANgIAIAEgAEEBcjYCBCACIANqQSg2AgRBhJQBQdCXASgCADYCAAwDC0EAIQQMBQtBACECDAMLQfiTASgCACACSwRAQfiTASACNgIACyACIAZqIQFBqJcBIQACQAJAAkACQAJAAkADQCABIAAoAgBHBEAgACgCCCIADQEMAgsLIAAtAAxBCHFFDQELQaiXASEAA0AgAyAAKAIAIgFPBEAgASAAKAIEaiIEIANLDQMLIAAoAgghAAwACwALIAAgAjYCACAAIAAoAgQgBmo2AgQgAkF4IAJrQQdxQQAgAkEIakEHcRtqIgcgBUEDcjYCBCABQXggAWtBB3FBACABQQhqQQdxG2oiBiAFIAdqIgVrIQAgAyAGRgRAQYCUASAFNgIAQfSTAUH0kwEoAgAgAGoiADYCACAFIABBAXI2AgQMAwtB/JMBKAIAIAZGBEBB/JMBIAU2AgBB8JMBQfCTASgCACAAaiIANgIAIAUgAEEBcjYCBCAAIAVqIAA2AgAMAwsgBigCBCIDQQNxQQFGBEAgA0F4cSEJAkAgA0H/AU0EQCAGKAIIIgEgA0EDdiIEQQN0QZCUAWpGGiABIAYoAgwiAkYEQEHokwFB6JMBKAIAQX4gBHdxNgIADAILIAEgAjYCDCACIAE2AggMAQsgBigCGCEIAkAgBiAGKAIMIgJHBEAgBigCCCIBIAI2AgwgAiABNgIIDAELAkAgBkEUaiIDKAIAIgENACAGQRBqIgMoAgAiAQ0AQQAhAgwBCwNAIAMhBCABIgJBFGoiAygCACIBDQAgAkEQaiEDIAIoAhAiAQ0ACyAEQQA2AgALIAhFDQACQCAGKAIcIgFBAnRBmJYBaiIEKAIAIAZGBEAgBCACNgIAIAINAUHskwFB7JMBKAIAQX4gAXdxNgIADAILIAhBEEEUIAgoAhAgBkYbaiACNgIAIAJFDQELIAIgCDYCGCAGKAIQIgEEQCACIAE2AhAgASACNgIYCyAGKAIUIgFFDQAgAiABNgIUIAEgAjYCGAsgBiAJaiIGKAIEIQMgACAJaiEACyAGIANBfnE2AgQgBSAAQQFyNgIEIAAgBWogADYCACAAQf8BTQRAIABBeHFBkJQBaiEBAn9B6JMBKAIAIgJBASAAQQN2dCIAcUUEQEHokwEgACACcjYCACABDAELIAEoAggLIQAgASAFNgIIIAAgBTYCDCAFIAE2AgwgBSAANgIIDAMLQR8hAyAAQf///wdNBEAgAEEmIABBCHZnIgFrdkEBcSABQQF0a0E+aiEDCyAFIAM2AhwgBUIANwIQIANBAnRBmJYBaiEBAkBB7JMBKAIAIgJBASADdCIEcUUEQEHskwEgAiAEcjYCACABIAU2AgAMAQsgAEEZIANBAXZrQQAgA0EfRxt0IQMgASgCACECA0AgAiIBKAIEQXhxIABGDQMgA0EddiECIANBAXQhAyABIAJBBHFqIgQoAhAiAg0ACyAEIAU2AhALIAUgATYCGCAFIAU2AgwgBSAFNgIIDAILQfSTASAGQShrIgBBeCACa0EHcUEAIAJBCGpBB3EbIgFrIgg2AgBBgJQBIAEgAmoiATYCACABIAhBAXI2AgQgACACakEoNgIEQYSUAUHQlwEoAgA2AgAgAyAEQScgBGtBB3FBACAEQSdrQQdxG2pBL2siACAAIANBEGpJGyIBQRs2AgQgAUGwlwEpAgA3AhAgAUGolwEpAgA3AghBsJcBIAFBCGo2AgBBrJcBIAY2AgBBqJcBIAI2AgBBtJcBQQA2AgAgAUEYaiEAA0AgAEEHNgIEIABBCGohAiAAQQRqIQAgAiAESQ0ACyABIANGDQMgASABKAIEQX5xNgIEIAMgASADayICQQFyNgIEIAEgAjYCACACQf8BTQRAIAJBeHFBkJQBaiEAAn9B6JMBKAIAIgFBASACQQN2dCICcUUEQEHokwEgASACcjYCACAADAELIAAoAggLIQEgACADNgIIIAEgAzYCDCADIAA2AgwgAyABNgIIDAQLQR8hACACQf///wdNBEAgAkEmIAJBCHZnIgBrdkEBcSAAQQF0a0E+aiEACyADIAA2AhwgA0IANwIQIABBAnRBmJYBaiEBAkBB7JMBKAIAIgRBASAAdCIGcUUEQEHskwEgBCAGcjYCACABIAM2AgAMAQsgAkEZIABBAXZrQQAgAEEfRxt0IQAgASgCACEEA0AgBCIBKAIEQXhxIAJGDQQgAEEddiEEIABBAXQhACABIARBBHFqIgYoAhAiBA0ACyAGIAM2AhALIAMgATYCGCADIAM2AgwgAyADNgIIDAMLIAEoAggiACAFNgIMIAEgBTYCCCAFQQA2AhggBSABNgIMIAUgADYCCAsgB0EIaiEADAULIAEoAggiACADNgIMIAEgAzYCCCADQQA2AhggAyABNgIMIAMgADYCCAtB9JMBKAIAIgAgBU0NAEH0kwEgACAFayIBNgIAQYCUAUGAlAEoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEADAMLQeSTAUEwNgIAQQAhAAwCCwJAIAdFDQACQCAEKAIcIgBBAnRBmJYBaiIBKAIAIARGBEAgASACNgIAIAINAUHskwEgCEF+IAB3cSIINgIADAILIAdBEEEUIAcoAhAgBEYbaiACNgIAIAJFDQELIAIgBzYCGCAEKAIQIgAEQCACIAA2AhAgACACNgIYCyAEKAIUIgBFDQAgAiAANgIUIAAgAjYCGAsCQCADQQ9NBEAgBCADIAVqIgBBA3I2AgQgACAEaiIAIAAoAgRBAXI2AgQMAQsgBCAFQQNyNgIEIAQgBWoiAiADQQFyNgIEIAIgA2ogAzYCACADQf8BTQRAIANBeHFBkJQBaiEAAn9B6JMBKAIAIgFBASADQQN2dCIDcUUEQEHokwEgASADcjYCACAADAELIAAoAggLIQEgACACNgIIIAEgAjYCDCACIAA2AgwgAiABNgIIDAELQR8hACADQf///wdNBEAgA0EmIANBCHZnIgBrdkEBcSAAQQF0a0E+aiEACyACIAA2AhwgAkIANwIQIABBAnRBmJYBaiEBAkACQCAIQQEgAHQiBnFFBEBB7JMBIAYgCHI2AgAgASACNgIADAELIANBGSAAQQF2a0EAIABBH0cbdCEAIAEoAgAhBQNAIAUiASgCBEF4cSADRg0CIABBHXYhBiAAQQF0IQAgASAGQQRxaiIGKAIQIgUNAAsgBiACNgIQCyACIAE2AhggAiACNgIMIAIgAjYCCAwBCyABKAIIIgAgAjYCDCABIAI2AgggAkEANgIYIAIgATYCDCACIAA2AggLIARBCGohAAwBCwJAIAlFDQACQCACKAIcIgBBAnRBmJYBaiIBKAIAIAJGBEAgASAENgIAIAQNAUHskwEgCkF+IAB3cTYCAAwCCyAJQRBBFCAJKAIQIAJGG2ogBDYCACAERQ0BCyAEIAk2AhggAigCECIABEAgBCAANgIQIAAgBDYCGAsgAigCFCIARQ0AIAQgADYCFCAAIAQ2AhgLAkAgA0EPTQRAIAIgAyAFaiIAQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDAELIAIgBUEDcjYCBCACIAVqIgQgA0EBcjYCBCADIARqIAM2AgAgBwRAIAdBeHFBkJQBaiEAQfyTASgCACEBAn9BASAHQQN2dCIFIAZxRQRAQeiTASAFIAZyNgIAIAAMAQsgACgCCAshBiAAIAE2AgggBiABNgIMIAEgADYCDCABIAY2AggLQfyTASAENgIAQfCTASADNgIACyACQQhqIQALIAtBEGokACAAC5kBAQN8IAAgAKIiAyADIAOioiADRHzVz1o62eU9okTrnCuK5uVavqCiIAMgA0R9/rFX4x3HPqJE1WHBGaABKr+gokSm+BARERGBP6CgIQUgAyAAoiEEIAJFBEAgBCADIAWiRElVVVVVVcW/oKIgAKAPCyAAIAMgAUQAAAAAAADgP6IgBSAEoqGiIAGhIARESVVVVVVVxT+ioKELkgEBA3xEAAAAAAAA8D8gACAAoiICRAAAAAAAAOA/oiIDoSIERAAAAAAAAPA/IAShIAOhIAIgAiACIAJEkBXLGaAB+j6iRHdRwRZswVa/oKJETFVVVVVVpT+goiACIAKiIgMgA6IgAiACRNQ4iL7p+qi9okTEsbS9nu4hPqCiRK1SnIBPfpK+oKKgoiAAIAGioaCgC4kMAQd/AkAgAEUNACAAQQhrIgIgAEEEaygCACIBQXhxIgBqIQUCQCABQQFxDQAgAUEDcUUNASACIAIoAgAiAWsiAkH4kwEoAgBJDQEgACABaiEAQfyTASgCACACRwRAIAFB/wFNBEAgAigCCCIEIAFBA3YiAUEDdEGQlAFqRhogBCACKAIMIgNGBEBB6JMBQeiTASgCAEF+IAF3cTYCAAwDCyAEIAM2AgwgAyAENgIIDAILIAIoAhghBgJAIAIgAigCDCIBRwRAIAIoAggiAyABNgIMIAEgAzYCCAwBCwJAIAJBFGoiBCgCACIDDQAgAkEQaiIEKAIAIgMNAEEAIQEMAQsDQCAEIQcgAyIBQRRqIgQoAgAiAw0AIAFBEGohBCABKAIQIgMNAAsgB0EANgIACyAGRQ0BAkAgAigCHCIEQQJ0QZiWAWoiAygCACACRgRAIAMgATYCACABDQFB7JMBQeyTASgCAEF+IAR3cTYCAAwDCyAGQRBBFCAGKAIQIAJGG2ogATYCACABRQ0CCyABIAY2AhggAigCECIDBEAgASADNgIQIAMgATYCGAsgAigCFCIDRQ0BIAEgAzYCFCADIAE2AhgMAQsgBSgCBCIBQQNxQQNHDQBB8JMBIAA2AgAgBSABQX5xNgIEIAIgAEEBcjYCBCAAIAJqIAA2AgAPCyACIAVPDQAgBSgCBCIBQQFxRQ0AAkAgAUECcUUEQEGAlAEoAgAgBUYEQEGAlAEgAjYCAEH0kwFB9JMBKAIAIABqIgA2AgAgAiAAQQFyNgIEIAJB/JMBKAIARw0DQfCTAUEANgIAQfyTAUEANgIADwtB/JMBKAIAIAVGBEBB/JMBIAI2AgBB8JMBQfCTASgCACAAaiIANgIAIAIgAEEBcjYCBCAAIAJqIAA2AgAPCyABQXhxIABqIQACQCABQf8BTQRAIAUoAggiBCABQQN2IgFBA3RBkJQBakYaIAQgBSgCDCIDRgRAQeiTAUHokwEoAgBBfiABd3E2AgAMAgsgBCADNgIMIAMgBDYCCAwBCyAFKAIYIQYCQCAFIAUoAgwiAUcEQCAFKAIIIgNB+JMBKAIASRogAyABNgIMIAEgAzYCCAwBCwJAIAVBFGoiBCgCACIDDQAgBUEQaiIEKAIAIgMNAEEAIQEMAQsDQCAEIQcgAyIBQRRqIgQoAgAiAw0AIAFBEGohBCABKAIQIgMNAAsgB0EANgIACyAGRQ0AAkAgBSgCHCIEQQJ0QZiWAWoiAygCACAFRgRAIAMgATYCACABDQFB7JMBQeyTASgCAEF+IAR3cTYCAAwCCyAGQRBBFCAGKAIQIAVGG2ogATYCACABRQ0BCyABIAY2AhggBSgCECIDBEAgASADNgIQIAMgATYCGAsgBSgCFCIDRQ0AIAEgAzYCFCADIAE2AhgLIAIgAEEBcjYCBCAAIAJqIAA2AgAgAkH8kwEoAgBHDQFB8JMBIAA2AgAPCyAFIAFBfnE2AgQgAiAAQQFyNgIEIAAgAmogADYCAAsgAEH/AU0EQCAAQXhxQZCUAWohAQJ/QeiTASgCACIDQQEgAEEDdnQiAHFFBEBB6JMBIAAgA3I2AgAgAQwBCyABKAIICyEAIAEgAjYCCCAAIAI2AgwgAiABNgIMIAIgADYCCA8LQR8hBCAAQf///wdNBEAgAEEmIABBCHZnIgFrdkEBcSABQQF0a0E+aiEECyACIAQ2AhwgAkIANwIQIARBAnRBmJYBaiEHAkACQAJAQeyTASgCACIDQQEgBHQiAXFFBEBB7JMBIAEgA3I2AgAgByACNgIAIAIgBzYCGAwBCyAAQRkgBEEBdmtBACAEQR9HG3QhBCAHKAIAIQEDQCABIgMoAgRBeHEgAEYNAiAEQR12IQEgBEEBdCEEIAMgAUEEcWoiB0EQaigCACIBDQALIAcgAjYCECACIAM2AhgLIAIgAjYCDCACIAI2AggMAQsgAygCCCIAIAI2AgwgAyACNgIIIAJBADYCGCACIAM2AgwgAiAANgIIC0GIlAFBiJQBKAIAQQFrIgBBfyAAGzYCAAsLqAEAAkAgAUGACE4EQCAARAAAAAAAAOB/oiEAIAFB/w9JBEAgAUH/B2shAQwCCyAARAAAAAAAAOB/oiEAQf0XIAEgAUH9F04bQf4PayEBDAELIAFBgXhKDQAgAEQAAAAAAABgA6IhACABQbhwSwRAIAFByQdqIQEMAQsgAEQAAAAAAABgA6IhAEHwaCABIAFB8GhMG0GSD2ohAQsgACABQf8Haq1CNIa/ogu8AgEBfwJ/QQAgAUECdEGAM2oiAigCACAARg0AGkEBIAIoAhAgAEYNABpBAiABQQJ0QaAzaigCACAARg0AGkEDIAFBAnQiAkGwM2ooAgAgAEYNABpBBCACQcAzaigCACAARg0AGkEFIAFBAnQiAkHQM2ooAgAgAEYNABpBBiACQeAzaigCACAARg0AGkEHIAFBAnQiAkHwM2ooAgAgAEYNABpBCCACQYA0aigCACAARg0AGkEJIAFBAnQiAkGQNGooAgAgAEYNABpBCiACQaA0aigCACAARg0AGkELIAFBAnQiAkGwNGooAgAgAEYNABpBDCACQcA0aigCACAARg0AGkENIAFBAnQiAkHQNGooAgAgAEYNABpBDiACQeA0aigCACAARg0AGkEPQX8gAUECdEHwNGooAgAgAEYbCwvoBAMBfwZ8An4gAL0iCEIwiKchASAIQoCAgICAgID3P31C//////+fwgFYBEAgCEKAgICAgICA+D9RBEBEAAAAAAAAAAAPCyAARAAAAAAAAPC/oCIAIAAgAEQAAAAAAACgQaIiAqAgAqEiAiACokGI8wArAwAiBaIiBqAiByAAIAAgAKIiA6IiBCAEIAQgBEHY8wArAwCiIANB0PMAKwMAoiAAQcjzACsDAKJBwPMAKwMAoKCgoiADQbjzACsDAKIgAEGw8wArAwCiQajzACsDAKCgoKIgA0Gg8wArAwCiIABBmPMAKwMAokGQ8wArAwCgoKCiIAAgAqEgBaIgACACoKIgBiAAIAehoKCgoA8LAkAgAUHw/wFrQZ+Afk0EQCAIQv///////////wCDUARAIwBBEGsiAUQAAAAAAADwvzkDCCABKwMIRAAAAAAAAAAAow8LIAhCgICAgICAgPj/AFENASABQYCAAnFFIAFB8P8BcUHw/wFHcUUEQCAAIAChIgAgAKMPCyAARAAAAAAAADBDor1CgICAgICAgKADfSEICyAIQoCAgICAgIDzP30iCUI0h6e3IgNB0PIAKwMAoiAJQi2Ip0H/AHFBBHQiAUHo8wBqKwMAoCIEIAFB4PMAaisDACAIIAlCgICAgICAgHiDfb8gAUHggwFqKwMAoSABQeiDAWorAwChoiIAoCIFIAAgACAAoiICoiACIABBgPMAKwMAokH48gArAwCgoiAAQfDyACsDAKJB6PIAKwMAoKCiIAJB4PIAKwMAoiADQdjyACsDAKIgACAEIAWhoKCgoKAhAAsgAAsDAAELkwwCB38BfiMAQYACayIHJAAgA0GAjQVqIgQgAkECdGoiBSgCAEECdCAEIAJBC3QiCGpBiMAAaiICaiAAKAIAIgQvAQBBEHQ2AnwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AnggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AnQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AnAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AmAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AlAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AkwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AkggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AkQgBSgCAEECdCACakFAayAEQQJqIgQvAQBBEHQ2AgAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AjAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AiAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhQgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AhAgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AgwgBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AgggBSgCAEECdCACaiAEQQJqIgQvAQBBEHQ2AgQgAiAFKAIAQQJ0aiAEQQJqIgIvAQBBEHQ2AgAgACACQQJqNgIAIAUoAgAhCUHAACECA0AgByACQQFrIgBBAnQiCmogAkECdEHAO2oiBjQC/AEgAyAIakGIzQVqIgIgACAJaiIEQUBrQf8DcUECdGo0AgB+QiCIpyAKQcA7ajQCACACIARB/wNxQQJ0ajQCAH5CIIinaiAGNAL8AyACIARBgAFqQf8DcUECdGo0AgB+QiCIp2ogBjQC/AUgAiAEQcABakH/A3FBAnRqNAIAfkIgiKdqIAY0AvwHIAIgBEGAAmpB/wNxQQJ0ajQCAH5CIIinaiAGQfwJajQCACACIARBwAJqQf8DcUECdGo0AgB+QiCIp2ogBkH8C2o0AgAgAiAEQYADakH/A3FBAnRqNAIAfkIgiKdqIAZB/A1qNAIAIAIgBEHAA2pB/wNxQQJ0ajQCAH5CIIinajYCACAAIgINAAsgBSAFKAIAQeADakH/A3E2AgBBHyECIAc0AvwBIQsDQCALIAMgAiIFQQh0aiIIQYSPBWo0AgB+QiCIpyEGQT8hAANAIAYgByAAQQJ0IgRBBGsiCWo0AgAgCSAIQYiNBWoiAmo0AgB+QiCIp2ogByAEQQhrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQQxrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQRBrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQRRrIgZqNAIAIAIgBmo0AgB+QiCIp2ogByAEQRhrIgRqNAIAIAIgBGo0AgB+QiCIp2ogByAAQQdrIgBBAnQiBGo0AgAgAiAEajQCAH5CIIinaiEGIAANAAsgASAFQQJ0aiAGNgIAIAVBAWshAiAFDQALIAdBgAJqJAALyAsBBn8gACABaiEFAkACQCAAKAIEIgJBAXENACACQQNxRQ0BIAAoAgAiAiABaiEBAkAgACACayIAQfyTASgCAEcEQCACQf8BTQRAIAAoAggiBCACQQN2IgJBA3RBkJQBakYaIAAoAgwiAyAERw0CQeiTAUHokwEoAgBBfiACd3E2AgAMAwsgACgCGCEGAkAgACAAKAIMIgJHBEAgACgCCCIDQfiTASgCAEkaIAMgAjYCDCACIAM2AggMAQsCQCAAQRRqIgQoAgAiAw0AIABBEGoiBCgCACIDDQBBACECDAELA0AgBCEHIAMiAkEUaiIEKAIAIgMNACACQRBqIQQgAigCECIDDQALIAdBADYCAAsgBkUNAgJAIAAoAhwiBEECdEGYlgFqIgMoAgAgAEYEQCADIAI2AgAgAg0BQeyTAUHskwEoAgBBfiAEd3E2AgAMBAsgBkEQQRQgBigCECAARhtqIAI2AgAgAkUNAwsgAiAGNgIYIAAoAhAiAwRAIAIgAzYCECADIAI2AhgLIAAoAhQiA0UNAiACIAM2AhQgAyACNgIYDAILIAUoAgQiAkEDcUEDRw0BQfCTASABNgIAIAUgAkF+cTYCBCAAIAFBAXI2AgQgBSABNgIADwsgBCADNgIMIAMgBDYCCAsCQCAFKAIEIgJBAnFFBEBBgJQBKAIAIAVGBEBBgJQBIAA2AgBB9JMBQfSTASgCACABaiIBNgIAIAAgAUEBcjYCBCAAQfyTASgCAEcNA0HwkwFBADYCAEH8kwFBADYCAA8LQfyTASgCACAFRgRAQfyTASAANgIAQfCTAUHwkwEoAgAgAWoiATYCACAAIAFBAXI2AgQgACABaiABNgIADwsgAkF4cSABaiEBAkAgAkH/AU0EQCAFKAIIIgQgAkEDdiICQQN0QZCUAWpGGiAEIAUoAgwiA0YEQEHokwFB6JMBKAIAQX4gAndxNgIADAILIAQgAzYCDCADIAQ2AggMAQsgBSgCGCEGAkAgBSAFKAIMIgJHBEAgBSgCCCIDQfiTASgCAEkaIAMgAjYCDCACIAM2AggMAQsCQCAFQRRqIgMoAgAiBA0AIAVBEGoiAygCACIEDQBBACECDAELA0AgAyEHIAQiAkEUaiIDKAIAIgQNACACQRBqIQMgAigCECIEDQALIAdBADYCAAsgBkUNAAJAIAUoAhwiBEECdEGYlgFqIgMoAgAgBUYEQCADIAI2AgAgAg0BQeyTAUHskwEoAgBBfiAEd3E2AgAMAgsgBkEQQRQgBigCECAFRhtqIAI2AgAgAkUNAQsgAiAGNgIYIAUoAhAiAwRAIAIgAzYCECADIAI2AhgLIAUoAhQiA0UNACACIAM2AhQgAyACNgIYCyAAIAFBAXI2AgQgACABaiABNgIAIABB/JMBKAIARw0BQfCTASABNgIADwsgBSACQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFB/wFNBEAgAUF4cUGQlAFqIQICf0HokwEoAgAiA0EBIAFBA3Z0IgFxRQRAQeiTASABIANyNgIAIAIMAQsgAigCCAshASACIAA2AgggASAANgIMIAAgAjYCDCAAIAE2AggPC0EfIQQgAUH///8HTQRAIAFBJiABQQh2ZyICa3ZBAXEgAkEBdGtBPmohBAsgACAENgIcIABCADcCECAEQQJ0QZiWAWohBwJAAkBB7JMBKAIAIgNBASAEdCICcUUEQEHskwEgAiADcjYCACAHIAA2AgAgACAHNgIYDAELIAFBGSAEQQF2a0EAIARBH0cbdCEEIAcoAgAhAgNAIAIiAygCBEF4cSABRg0CIARBHXYhAiAEQQF0IQQgAyACQQRxaiIHQRBqKAIAIgINAAsgByAANgIQIAAgAzYCGAsgACAANgIMIAAgADYCCA8LIAMoAggiASAANgIMIAMgADYCCCAAQQA2AhggACADNgIMIAAgATYCCAsLwQEBAn8jAEEQayIBJAACfCAAvUIgiKdB/////wdxIgJB+8Ok/wNNBEBEAAAAAAAA8D8gAkGewZryA0kNARogAEQAAAAAAAAAABAKDAELIAAgAKEgAkGAgMD/B08NABoCQAJAAkACQCAAIAEQE0EDcQ4DAAECAwsgASsDACABKwMIEAoMAwsgASsDACABKwMIQQEQCZoMAgsgASsDACABKwMIEAqaDAELIAErAwAgASsDCEEBEAkLIQAgAUEQaiQAIAALzxgDFH8EfAF+IwBBMGsiCSQAAkACQAJAIAC9IhpCIIinIgNB/////wdxIgZB+tS9gARNBEAgA0H//z9xQfvDJEYNASAGQfyyi4AETQRAIBpCAFkEQCABIABEAABAVPsh+b+gIgBEMWNiGmG00L2gIhY5AwAgASAAIBahRDFjYhphtNC9oDkDCEEBIQMMBQsgASAARAAAQFT7Ifk/oCIARDFjYhphtNA9oCIWOQMAIAEgACAWoUQxY2IaYbTQPaA5AwhBfyEDDAQLIBpCAFkEQCABIABEAABAVPshCcCgIgBEMWNiGmG04L2gIhY5AwAgASAAIBahRDFjYhphtOC9oDkDCEECIQMMBAsgASAARAAAQFT7IQlAoCIARDFjYhphtOA9oCIWOQMAIAEgACAWoUQxY2IaYbTgPaA5AwhBfiEDDAMLIAZBu4zxgARNBEAgBkG8+9eABE0EQCAGQfyyy4AERg0CIBpCAFkEQCABIABEAAAwf3zZEsCgIgBEypSTp5EO6b2gIhY5AwAgASAAIBahRMqUk6eRDum9oDkDCEEDIQMMBQsgASAARAAAMH982RJAoCIARMqUk6eRDuk9oCIWOQMAIAEgACAWoUTKlJOnkQ7pPaA5AwhBfSEDDAQLIAZB+8PkgARGDQEgGkIAWQRAIAEgAEQAAEBU+yEZwKAiAEQxY2IaYbTwvaAiFjkDACABIAAgFqFEMWNiGmG08L2gOQMIQQQhAwwECyABIABEAABAVPshGUCgIgBEMWNiGmG08D2gIhY5AwAgASAAIBahRDFjYhphtPA9oDkDCEF8IQMMAwsgBkH6w+SJBEsNAQsgACAARIPIyW0wX+Q/okQAAAAAAAA4Q6BEAAAAAAAAOMOgIhdEAABAVPsh+b+ioCIWIBdEMWNiGmG00D2iIhihIhlEGC1EVPsh6b9jIQICfyAXmUQAAAAAAADgQWMEQCAXqgwBC0GAgICAeAshAwJAIAIEQCADQQFrIQMgF0QAAAAAAADwv6AiF0QxY2IaYbTQPaIhGCAAIBdEAABAVPsh+b+ioCEWDAELIBlEGC1EVPsh6T9kRQ0AIANBAWohAyAXRAAAAAAAAPA/oCIXRDFjYhphtNA9oiEYIAAgF0QAAEBU+yH5v6KgIRYLIAEgFiAYoSIAOQMAAkAgBkEUdiICIAC9QjSIp0H/D3FrQRFIDQAgASAWIBdEAABgGmG00D2iIgChIhkgF0RzcAMuihmjO6IgFiAZoSAAoaEiGKEiADkDACACIAC9QjSIp0H/D3FrQTJIBEAgGSEWDAELIAEgGSAXRAAAAC6KGaM7oiIAoSIWIBdEwUkgJZqDezmiIBkgFqEgAKGhIhihIgA5AwALIAEgFiAAoSAYoTkDCAwBCyAGQYCAwP8HTwRAIAEgACAAoSIAOQMAIAEgADkDCEEAIQMMAQsgGkL/////////B4NCgICAgICAgLDBAIS/IQBBACEDQQEhAgNAIAlBEGogA0EDdGoCfyAAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAu3IhY5AwAgACAWoUQAAAAAAABwQaIhAEEBIQMgAiEEQQAhAiAEDQALIAkgADkDIEECIQMDQCADIgJBAWshAyAJQRBqIAJBA3RqKwMARAAAAAAAAAAAYQ0ACyAJQRBqIQ5BACEEIwBBsARrIgUkACAGQRR2QZYIayIDQQNrQRhtIgZBACAGQQBKGyIPQWhsIANqIQZBxMsAKAIAIgggAkEBaiIKQQFrIgdqQQBOBEAgCCAKaiEDIA8gB2shAgNAIAVBwAJqIARBA3RqIAJBAEgEfEQAAAAAAAAAAAUgAkECdEHQywBqKAIAtws5AwAgAkEBaiECIARBAWoiBCADRw0ACwsgBkEYayELQQAhAyAIQQAgCEEAShshBCAKQQBMIQwDQAJAIAwEQEQAAAAAAAAAACEADAELIAMgB2ohDUEAIQJEAAAAAAAAAAAhAANAIA4gAkEDdGorAwAgBUHAAmogDSACa0EDdGorAwCiIACgIQAgAkEBaiICIApHDQALCyAFIANBA3RqIAA5AwAgAyAERiECIANBAWohAyACRQ0AC0EvIAZrIRJBMCAGayEQIAZBGWshEyAIIQMCQANAIAUgA0EDdGorAwAhAEEAIQIgAyEEIANBAEwiB0UEQANAIAVB4ANqIAJBAnRqAn8CfyAARAAAAAAAAHA+oiIWmUQAAAAAAADgQWMEQCAWqgwBC0GAgICAeAu3IhZEAAAAAAAAcMGiIACgIgCZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4CzYCACAFIARBAWsiBEEDdGorAwAgFqAhACACQQFqIgIgA0cNAAsLAn8gACALEAwiACAARAAAAAAAAMA/opxEAAAAAAAAIMCioCIAmUQAAAAAAADgQWMEQCAAqgwBC0GAgICAeAshDCAAIAy3oSEAAkACQAJAAn8gC0EATCIURQRAIANBAnQgBWoiAiACKALcAyICIAIgEHUiAiAQdGsiBDYC3AMgAiAMaiEMIAQgEnUMAQsgCw0BIANBAnQgBWooAtwDQRd1CyINQQBMDQIMAQtBAiENIABEAAAAAAAA4D9mDQBBACENDAELQQAhAkEAIQQgB0UEQANAIAVB4ANqIAJBAnRqIhUoAgAhEUH///8HIQcCfwJAIAQNAEGAgIAIIQcgEQ0AQQAMAQsgFSAHIBFrNgIAQQELIQQgAkEBaiICIANHDQALCwJAIBQNAEH///8DIQICQAJAIBMOAgEAAgtB////ASECCyADQQJ0IAVqIgcgBygC3AMgAnE2AtwDCyAMQQFqIQwgDUECRw0ARAAAAAAAAPA/IAChIQBBAiENIARFDQAgAEQAAAAAAADwPyALEAyhIQALIABEAAAAAAAAAABhBEBBACEEIAMhAgJAIAMgCEwNAANAIAVB4ANqIAJBAWsiAkECdGooAgAgBHIhBCACIAhKDQALIARFDQAgCyEGA0AgBkEYayEGIAVB4ANqIANBAWsiA0ECdGooAgBFDQALDAMLQQEhAgNAIAIiBEEBaiECIAVB4ANqIAggBGtBAnRqKAIARQ0ACyADIARqIQQDQCAFQcACaiADIApqIgdBA3RqIANBAWoiAyAPakECdEHQywBqKAIAtzkDAEEAIQJEAAAAAAAAAAAhACAKQQBKBEADQCAOIAJBA3RqKwMAIAVBwAJqIAcgAmtBA3RqKwMAoiAAoCEAIAJBAWoiAiAKRw0ACwsgBSADQQN0aiAAOQMAIAMgBEgNAAsgBCEDDAELCwJAIABBGCAGaxAMIgBEAAAAAAAAcEFmBEAgBUHgA2ogA0ECdGoCfwJ/IABEAAAAAAAAcD6iIhaZRAAAAAAAAOBBYwRAIBaqDAELQYCAgIB4CyICt0QAAAAAAABwwaIgAKAiAJlEAAAAAAAA4EFjBEAgAKoMAQtBgICAgHgLNgIAIANBAWohAwwBCwJ/IACZRAAAAAAAAOBBYwRAIACqDAELQYCAgIB4CyECIAshBgsgBUHgA2ogA0ECdGogAjYCAAtEAAAAAAAA8D8gBhAMIQACQCADQQBIDQAgAyECA0AgBSACIgRBA3RqIAAgBUHgA2ogAkECdGooAgC3ojkDACACQQFrIQIgAEQAAAAAAABwPqIhACAEDQALQQAhByADQQBIDQAgCEEAIAhBAEobIQYgAyEEA0AgBiAHIAYgB0kbIQsgAyAEayEIQQAhAkQAAAAAAAAAACEAA0AgAkEDdEGg4QBqKwMAIAUgAiAEakEDdGorAwCiIACgIQAgAiALRyEKIAJBAWohAiAKDQALIAVBoAFqIAhBA3RqIAA5AwAgBEEBayEEIAMgB0chAiAHQQFqIQcgAg0ACwtEAAAAAAAAAAAhACADQQBOBEAgAyECA0AgAiIEQQFrIQIgACAFQaABaiAEQQN0aisDAKAhACAEDQALCyAJIACaIAAgDRs5AwAgBSsDoAEgAKEhAEEBIQIgA0EASgRAA0AgACAFQaABaiACQQN0aisDAKAhACACIANHIQQgAkEBaiECIAQNAAsLIAkgAJogACANGzkDCCAFQbAEaiQAIAxBB3EhAyAJKwMAIQAgGkIAUwRAIAEgAJo5AwAgASAJKwMImjkDCEEAIANrIQMMAQsgASAAOQMAIAEgCSsDCDkDCAsgCUEwaiQAIAMLGAAgASAAKAJoNgIAIABBADYCaCAAKAJgC7xUAyF/JH4CfCAAIAEoAgA2AogRIAAoAgBBAkYEQCAAQYwRaiABKAIENgIACwJAIAArAzAiSEQAAAAAAAAAAGEEQCAAKAIgIQEMAQsgACAAKwM4IkkgSEQAAAAAAADwv6BlIgE2AiAgACBJRAAAAAAAAPA/RAAAAAAAAAAAIAEbIEihoDkDOAsgACAAQUBrKAIAIAFqQQN0IgE2AiQgACABIAAoAowEayAAKAIQbTYCkAQCQCAAIgEoAgAiBUUNACAFQQFrIQAgASgCECIEQQBKBEAgAUHg+ARqIQcDQCAAIQMgBEEASgRAIAEgA0ECdGpBiBFqIQpBACEFA0AgBUEBaiEGQQAhAANAIAogASADQYA2bGoiCSAGQYASbCIQakGw2QBqIgQgAEEHdCIIaiADIAEQECAKIAQgCEGAAXJqIgQgAyABEBAgBEEAIAQoAgRrNgIEIARBACAEKAIMazYCDCAEQQAgBCgCFGs2AhQgBEEAIAQoAhxrNgIcIARBACAEKAIkazYCJCAEQQAgBCgCLGs2AiwgBEEAIAQoAjRrNgI0IARBACAEKAI8azYCPCAEQQAgBCgCRGs2AkQgBEEAIAQoAkxrNgJMIARBACAEKAJUazYCVCAEQQAgBCgCXGs2AlwgBEEAIAQoAmRrNgJkIARBACAEKAJsazYCbCAEQQAgBCgCdGs2AnQgBEEAIAQoAnxrNgJ8IABBEEkhBCAAQQJqIQAgBA0ACyAFQYASbCINIAEgA0GAJGxqakGwxQFqIQxBACEFA0AgBUECdCIEIAlBsNkAaiIIIA1qaiIANAIAISQgCCAQaiAEaiIENAIAISUgADQCgAEhJiAANAKAAiEnIAA0AoADISggADQCgAQhKSAANAKABSEqIAA0AoAGISsgADQCgAchLCAAQYAIajQCACEtIABBgAlqNAIAIS4gAEGACmo0AgAhLyAAQYALajQCACEwIABBgAxqNAIAITEgAEGADWo0AgAhMiAAQYAOajQCACEzIABBgA9qNAIAITQgAEGAEGo0AgAhNSAAQYARajQCACE2IAQ0AoABITcgBDQCgAIhOCAENAKAAyE5IAQ0AoAEITogBDQCgAUhOyAENAKABiE8IAQ0AoAHIT0gBEGACGo0AgAhPiAEQYAJajQCACE/IARBgApqNAIAIUAgBEGAC2o0AgAhQSAEQYAMajQCACFCIARBgA1qNAIAIUMgBEGADmo0AgAhRCAEQYAPajQCACFFIARBgBBqNAIAIUYgBEGAEWo0AgAhR0ERIQQDQCAMIAVByABsaiIIIAQiAEECdGogByAAQZABbGoiBDQCjAEgR35CIIinIAQ0AogBIEZ+QiCIp2ogBDQChAEgRX5CIIinaiAENAKAASBEfkIgiKdqIAQ0AnwgQ35CIIinaiAENAJ4IEJ+QiCIp2ogBDQCdCBBfkIgiKdqIAQ0AnAgQH5CIIinaiAENAJsID9+QiCIp2ogBDQCaCA+fkIgiKdqIAQ0AmQgPX5CIIinaiAENAJgIDx+QiCIp2ogBDQCXCA7fkIgiKdqIAQ0AlggOn5CIIinaiAENAJUIDl+QiCIp2ogBDQCUCA4fkIgiKdqIAQ0AkwgN35CIIinaiAENAJIICV+QiCIp2ogBDQCRCA2fkIgiKdqIAQ0AkAgNX5CIIinaiAENAI8IDR+QiCIp2ogBDQCOCAzfkIgiKdqIAQ0AjQgMn5CIIinaiAENAIwIDF+QiCIp2ogBDQCLCAwfkIgiKdqIAQ0AiggL35CIIinaiAENAIkIC5+QiCIp2ogBDQCICAtfkIgiKdqIAQ0AhwgLH5CIIinaiAENAIYICt+QiCIp2ogBDQCFCAqfkIgiKdqIAQ0AhAgKX5CIIinaiAENAIMICh+QiCIp2ogBDQCCCAnfkIgiKdqIAQ0AgQgJn5CIIinaiAENAIAICR+QiCIp2o2AgAgAEEBayEEIAANAAsgBQRAIAhByABrIgAgADQCRCIkQoOoie4GfiAINAIAIiVCy4GU8fv/////AH58Qh+IPgJEIAggADQCQCImQpDthuMDfiAINAIEIidC+Nfzhgd+fEIfiD4CBCAIICRCtf7rjgR+ICVCg6iJ7gZ+fEIfiD4CACAAICZC+Nfzhgd+ICdC8JL5nPz/////AH58Qh+IPgJAIAggADQCPCIkQp6B88ACfiAINAIIIiVC+ty1zAd+fEIfiD4CCCAAICRC+ty1zAd+ICVC4v6Mv/3/////AH58Qh+IPgI8IAAgADQCOCIkQqeB9e4HfiAINAIMIiVC+6Lcxf7/////AH58Qh+IPgI4IAggJEKF3aO6AX4gJUKngfXuB358Qh+IPgIMIAAgADQCNCIkQrbBtPsHfiAINAIQIiVCrfyTn///////AH58Qh+IPgI0IAggJELTg+zgAH4gJUK2wbT7B358Qh+IPgIQIAAgADQCMCIkQr/8kf8HfiAINAIUIiVCyceG1v//////AH58Qh+IPgIwIAggJEK3uPkpfiAlQr/8kf8HfnxCH4g+AhQgACAANAIsIiRC4uTy/wd+IAg0AhgiJULH+7rx//////8AfnxCH4g+AiwgCCAkQrmExQ5+ICVC4uTy/wd+fEIfiD4CGCAIIAA0AigiJEKj++QDfiAINAIcIiVCk43//wd+fEIfiD4CHCAAICRCk43//wd+ICVC3YSb/P//////AH58Qh+IPgIoCyAFQQFqIgVBIEcNAAsgASgCECIEIAYiBUoNAAsLIAEgA0GANmxqQbDZAGoiACAAIARBgBJsakGAEhAEIANBAWshACADDQALDAELIAVBA3EiAwRAA0AgASAAQYA2bGpBsNkAaiIIIAggBEGAEmxqQYASEAQgAEEBayEAIAZBAWoiBiADRw0ACwsgBUEESQ0AA0AgASAAQYA2bGoiBUGw2QBqIgYgBiAEQYASbCIDakGAEhAEIAVBsCNqIgYgAyAGakGAEhAEIAVB0BJrIgYgAyAGakGAEhAEIAVB0MgAayIFIAMgBWpBgBIQBCAAQQNGIQUgAEEEayEAIAVFDQALCyMAQaAFayIVJAACQCABIgMoAgAiEEUNACADKAIQIgFBAEwNACADQbgJaiEZIBBB3ABsQYwBaiEaA0AgEEEBayEQIAFBAEoEQCAaIBdBpH9saiEdIBBBqAFsIRggAyAQQQR0aiEMQQAhDQNAIANBADYCvLECIAMgAyAQQYAkbGogDUGAEmxqIg9BsMUBaiIFNgK4jQIgAyAdIA1BuAFsIghqaiEJQb8EIQADQCADIAAiAUECdCIAaiIGQbyfAmogACAFaigCACIEIARBH3UiAHMgAGsiADYCACAGQbyNAmogBKwiJCAkfkKAgICABHxCH4g+AgAgAygCvLECIgYgAEgEQCADIAA2AryxAiAAIQYLIAFBAWshACABDQALIAMgCGogEEHcAGxqIhFBFTYC1AEgFSANQdACbCISIBhqakGoARAHAkAgAygCCEEDRw0AIAMoAkghBCADIA1BAnRqIghBmLQCaiAGNgIAQcAEIQFBACEFA0AgAUECdCEAIANBvI0CaiIGIAFBBGsiAUECdGooAgBBCnUgACAGaiIAQQxrKAIAQQp1IABBBGsoAgBBCnUgBWogAEEIaygCAEEKdWpqaiEFIAENAAsgBEHcAGxBgDVqIQsgCEHAsQJqAn9BACAFRQ0AGiAFt0RoXxwAAACgPqIQDkScRK3+Qi7mP6MiSJlEAAAAAAAA4EFjBEAgSKoMAQtBgICAgHgLNgIAIAsoAlQhBUEUIQADQEEAIQoCf0EAIAUgCyAAIghBAnQiE2ooAgAiBEwNABogBSAEayIHQQNxIQ5BACEGQQAhACAFIAQiAUF/c2pBA08EQCAHQXxxIRRBACEFA0AgAyABQQJ0aiIHQciNAmooAgBBCnUgB0G8jQJqKAIAQQp1IABqIAdBwI0CaigCAEEKdWogB0HEjQJqKAIAQQp1amohACABQQRqIQEgBUEEaiIFIBRHDQALCyAOBEADQCADIAFBAnRqQbyNAmooAgBBCnUgAGohACABQQFqIQEgBkEBaiIGIA5HDQALC0EAIABFDQAaIAC3RGhfHAAAAKA+ohAORJxErf5CLuY/oyJImUQAAAAAAADgQWMEQCBIqgwBC0GAgICAeAshACADIA1B1ABsaiATaiIBQcixAmogADYCAAJAIBIgFWogGGogCEEDdGorAwAiSEQAAAAAAAAAAGENACBIEA5EnESt/kIu5j+jIkiZRAAAAAAAAOBBYwRAIEiqIQoMAQtBgICAgHghCgsgAUHwsgJqIAo2AgAgCEEBayEAIAQhBSAIDQALIA1BAUcNACADKAKYtAJBAEdBA0ECIAMoApy0AhtqIAMoAsCxAiADKALEsQJrIgAgAEEfdSIAcyAAa0EKSWogAygC0LECIAMoAqSyAmsiACAAQR91IgBzIABrIgAgAygC1LECIAMoAqiyAmsiASABQR91IgFzIAFrIgEgAygC5LECIAMoAriyAmsiBCAEQR91IgRzIARrIgQgAygClLICIAMoAuiyAmsiBSAFQR91IgVzIAVrIAMoApiyAiADKALssgJrIgUgBUEfdSIFcyAFa2ogAygCkLICIAMoAuSyAmsiBSAFQR91IgVzIAVraiADKAKMsgIgAygC4LICayIFIAVBH3UiBXMgBWtqIAMoAoiyAiADKALcsgJrIgUgBUEfdSIFcyAFa2ogAygChLICIAMoAtiyAiIFayIGIAZBH3UiBnMgBmtqIAMoAoCyAiADKALUsgJrIgYgBkEfdSIGcyAGa2ogAygC/LECIAMoAtCyAmsiBiAGQR91IgZzIAZraiADKAL4sQIiBiADKALMsgJrIgggCEEfdSIIcyAIa2ogAygC9LECIAMoAsiyAiIIayIKIApBH3UiCnMgCmtqIAMoAvCxAiADKALEsgIiCmsiByAHQR91IgdzIAdraiADKALssQIgAygCwLICayIHIAdBH3UiB3MgB2tqIAMoAuixAiIHIAMoAryyAmsiCyALQR91IgtzIAtramogAygC4LECIAMoArSyAiILayIOIA5BH3UiDnMgDmtqIAMoAtyxAiADKAKwsgIiDmsiEiASQR91IhJzIBJraiADKALYsQIiEiADKAKssgJrIhMgE0EfdSITcyATa2pqaiADKALMsQIgAygCoLICIhNrIhQgFEEfdSIUcyAUa2ogAygCyLECIhQgAygCnLICayIWIBZBH3UiFnMgFmtqQeQASWpBBkcEQCAMQgA3AnwgDEIANwKEAQwBCyAMQQA2AnwgDCAAIAFqIAMoAtyxAiAOayIAIABBH3UiAHMgAGtqIBIgAygCrLICayIAIABBH3UiAHMgAGtqIAMoAsyxAiATayIAIABBH3UiAHMgAGtqIBQgAygCnLICayIAIABBH3UiAHMgAGtqQQpJIAMoAoCzAiADKALUswJrIgAgAEEfdSIAcyAAayADKAKEswIgAygC2LMCayIAIABBH3UiAHMgAGtqIAMoAvyyAiADKALQswJrIgAgAEEfdSIAcyAAa2ogAygC+LICIAMoAsyzAmsiACAAQR91IgBzIABraiADKAL0sgIgAygCyLMCayIAIABBH3UiAHMgAGtqIAMoAvCyAiADKALEswJrIgAgAEEfdSIAcyAAa2pBCklxNgJ8IAxBADYCgAEgDCADKALwsQIgCmsiACAAQR91IgBzIABrIARqIAMoAuyxAiADKALAsgJrIgAgAEEfdSIAcyAAa2ogByADKAK8sgJrIgAgAEEfdSIAcyAAa2ogAygC4LECIAtrIgAgAEEfdSIAcyAAa2pBCkkgAygClLMCIAMoAuizAmsiACAAQR91IgBzIABrIAMoApizAiADKALsswJrIgAgAEEfdSIAcyAAa2ogAygCkLMCIAMoAuSzAmsiACAAQR91IgBzIABraiADKAKMswIgAygC4LMCayIAIABBH3UiAHMgAGtqIAMoAoizAiADKALcswJrIgAgAEEfdSIAcyAAa2pBCklxNgKAASAMQQA2AoQBIAwgAygCgLICIAMoAtSyAmsiACAAQR91IgBzIABrIAMoAoSyAiAFayIAIABBH3UiAHMgAGtqIAMoAvyxAiADKALQsgJrIgAgAEEfdSIAcyAAa2ogBiADKALMsgJrIgAgAEEfdSIAcyAAa2ogAygC9LECIAhrIgAgAEEfdSIAcyAAa2pBCkkgAygCqLMCIAMoAvyzAmsiACAAQR91IgBzIABrIAMoAqyzAiADKAKAtAJrIgAgAEEfdSIAcyAAa2ogAygCpLMCIAMoAvizAmsiACAAQR91IgBzIABraiADKAKgswIgAygC9LMCayIAIABBH3UiAHMgAGtqIAMoApyzAiADKALwswJrIgAgAEEfdSIAcyAAa2pBCklxNgKEASAMQQA2AogBIAwgAygClLICIAMoAuiyAmsiACAAQR91IgBzIABrIAMoApiyAiADKALssgJrIgAgAEEfdSIAcyAAa2ogAygCkLICIAMoAuSyAmsiACAAQR91IgBzIABraiADKAKMsgIgAygC4LICayIAIABBH3UiAHMgAGtqIAMoAoiyAiADKALcsgJrIgAgAEEfdSIAcyAAa2pBCkkgAygCvLMCIAMoApC0AmsiACAAQR91IgBzIABrIAMoAsCzAiADKAKUtAJrIgAgAEEfdSIAcyAAa2ogAygCuLMCIAMoAoy0AmsiACAAQR91IgBzIABraiADKAK0swIgAygCiLQCayIAIABBH3UiAHMgAGtqIAMoArCzAiADKAKEtAJrIgAgAEEfdSIAcyAAa2pBCklxNgKIAQtB/x8gAygCkAQgAygCAG0iBCAEQf8fThshACADKAK0jQIiBQRAQQAhAUH/HyAAISMgAygCsI0CIgYgBUEDdEF2bWoiBSEiAn8gDCANQQN0akGQEWorAwBEzczMzMzMCECiIAS3oSJImUQAAAAAAADgQWMEQCBIqgwBC0GAgICAeAsiBEHlAE4EQCAGQQZsQQptIgEgBCABIARIGyEBCyAjICIgASABIAVIG2oiACAAQf8fThshAAsgGSANQbABbGogEEHYAGxqQdgAEAcgAyANQbgCbGogEEGcAWxqQZgMakGcARAHIAlCADcCCCAJQgA3AgAgEUIANwKsASARQQA2AqQBIBFCADcCnAEgEUIA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BQAHAAEABgABAAEAAAABAwYHAwMGBwYGBwgHBgcIBwADAAUAAQAGAAIAAwACAAUABAAEAAEAAwADAAIAAAADAwUHAwIEBQQEBQYGBQYHAQACAAoAEwAQAAoAAwADAAcACgAFAAMACwAEAA0AEQAIAAQADAALABIADwALAAIABwAGAAkADgADAAEABgAEAAUAAwACAEGACgskAQMGCAgJAwQGBwcIBgUHCAgJBwcICQkJBwcICQkKCAgJCgoKAEGwCgtFAwAEAAYAEgAMAAUABQABAAIAEAAJAAMABwADAAUADgAHAAMAEwARAA8ADQAKAAQADQAFAAgACwAFAAEADAAEAAQAAQABAEGACwskAgMGCAgJAwIECAgIBgQGCAgJCAgICQkKCAcICQoKCQgJCQsLAEGwCwtFBwAFAAkADgAPAAcABgAEAAUABQAGAAcABwAGAAgACAAIAAUADwAGAAkACgAFAAEACwAHAAkABgAEAAEADgAEAAYAAgAGAEGADAskAwMFBggJAwMEBQYIBAQFBgcIBgUGBwcIBwYHBwgJCAcICAkJAEGwDAugHQEAAgAKABcAIwAeAAwAEQADAAMACAAMABIAFQAMAAcACwAJAA8AFQAgACgAEwAGAA4ADQAWACIALgAXABIABwAUABMAIQAvABsAFgAJAAMAHwAWACkAGgAVABQABQADAA4ADQAKAAsAEAAGAAUAAQAJAAgABwAIAAQABAACAAAAAQMGCAkJCQoDBAYHCAkICAYGBwgJCgkJBwcICQoKCQoICAkKCgoKCgkJCgoLCwoLCAgJCgoKCwsJCAkKCgsLCwMABAAKABgAIgAhABUADwAFAAMABAAKACAAEQALAAoACwAHAA0AEgAeAB8AFAAFABkACwATADsAGwASAAwABQAjACEAHwA6AB4AEAAHAAUAHAAaACAAEwARAA8ACAAOAA4ADAAJAA0ADgAJAAQAAQALAAQABgAGAAYAAwACAAAAAgMFBwgJCAkDAwQGCAgHCAUFBgcICQgIBwYHCQgKCAkICAgJCQoJCggICQoKCwoLCAcHCAkKCgoIBwgJCgoKCgkABgAQACEAKQAnACYAGgAHAAUABgAJABcAEAAaAAsAEQAHAAsADgAVAB4ACgAHABEACgAPAAwAEgAcAA4ABQAgAA0AFgATABIAEAAJAAUAKAARAB8AHQARAA0ABAACABsADAALAA8ACgAHAAQAAQAbAAwACAAMAAYAAwABAAAABAMFBwgJCQkDAwQFBwcICAUEBQYHCAcIBgUGBgcICAgHBgcHCAgICQgHCAgICQgJCAcHCAgJCQoJCAgJCQkJCgEABQAOABUAIgAzAC4ARwAqADQARAA0AEMALAArABMAAwAEAAwAEwAfABoALAAhAB8AGAAgABgAHwAjABYADgAPAA0AFwAkADsAMQBNAEEAHQAoAB4AKAAbACEAKgAQABYAFAAlAD0AOABPAEkAQAArAEwAOAAlABoAHwAZAA4AIwAQADwAOQBhAEsAcgBbADYASQA3ACkAMAA1ABcAGAA6ABsAMgBgAEwARgBdAFQATQA6AE8AHQBKADEAKQARAC8ALQBOAEoAcwBeAFoATwBFAFMARwAyADsAJgAkAA8ASAAiADgAXwBcAFUAWwBaAFYASQBNAEEAMwAsACsAKgArABQAHgAsADcATgBIAFcATgA9AC4ANgAlAB4AFAAQADUAGQApACUALAA7ADYAUQBCAEwAOQA2ACUAEgAnAAsAIwAhAB8AOQAqAFIASABQAC8AOgA3ABUAFgAaACYAFgA1ABkAFwAmAEYAPAAzACQANwAaACIAFwAbAA4ACQAHACIAIAAcACcAMQBLAB4ANAAwACgANAAcABIAEQAJAAUALQAVACIAQAA4ADIAMQAtAB8AEwAMAA8ACgAHAAYAAwAwABcAFAAnACQAIwA1ABUAEAAXAA0ACgAGAAEABAACABAADwARABsAGQAUAB0ACwARAAwAEAAIAAEAAQAAAAEAAQQGBwgJCQoJCgsLDAwNDQMEBgcICAkJCQkKCgsMDAwGBgcICQkKCgkKCgsLDA0NBwcICQkKCgoKCwsLCwwNDQgHCQkKCgsLCgsLDAwNDQ4JCAkKCgoLCwsLDAsNDQ4OCQkKCgsLCwsLDAwMDQ0ODgoJCgsLCwwMDAwNDQ0OEBAJCAkKCgsLDAwMDA0NDg8PCgkKCgsLCw0MDQ0ODg4QDwoKCgsLDAwNDA0ODQ4PEBELCgoLDAwMDA0NDQ4PDw8QCwsLDAwNDA0ODg8PDxAQEAwLDA0NDQ4ODg4ODxAPEBANDAwNDQ0PDg4RDw8PERAQDAwNDg4ODw4PDxAQExITEAcADAASADUALwBMAHwAbABZAHsAbAB3AGsAUQB6AD8ADQAFABAAGwAuACQAPQAzACoARgA0AFMAQQApADsAJAATABEADwAYACkAIgA7ADAAKABAADIATgA+AFAAOAAhAB0AHAAZACsAJwA/ADcAXQBMADsAXQBIADYASwAyAB0ANAAWACoAKABDADkAXwBPAEgAOQBZAEUAMQBCAC4AGwBNACUAIwBCADoANABbAEoAPgAwAE8APwBaAD4AKAAmAH0AIAA8ADgAMgBcAE4AQQA3AFcARwAzAEkAMwBGAB4AbQA1ADEAXgBYAEsAQgB6AFsASQA4ACoAQAAsABUAGQBaACsAKQBNAEkAPwA4AFwATQBCAC8AQwAwADUAJAAUAEcAIgBDADwAOgAxAFgATABDAGoARwA2ACYAJwAXAA8AbQA1ADMALwBaAFIAOgA5ADAASAA5ACkAFwAbAD4ACQBWACoAKAAlAEYAQAA0ACsARgA3ACoAGQAdABIACwALAHYARAAeADcAMgAuAEoAQQAxACcAGAAQABYADQAOAAcAWwAsACcAJgAiAD8ANAAtAB8ANAAcABMADgAIAAkAAwB7ADwAOgA1AC8AKwAgABYAJQAYABEADAAPAAoAAgABAEcAJQAiAB4AHAAUABEAGgAVABAACgAGAAgABgACAAAAAwQFBwcICQkJCgoLCwsMDQQDBQYHBwgICAkJCgoKCwsFBQUGBwcICAgJCQoKCwsLBgYGBwcICAkJCQoKCgsLCwcGBwcICAkJCQkKCgoLCwsIBwcICAgJCQkJCgoLCwsMCQcICAgJCQkJCgoKCwsMDAkICAkJCQkKCgoKCgsLCwwJCAgJCQkJCgoKCgsLDAwMCQgJCQkJCgoKCwsLCwwMDAoJCQkKCgoKCgsLCwsMDQwKCQkJCgoKCgsLCwsMDAwNCwoJCgoKCwsLCwsLDAwNDQsKCgoKCwsLCwwMDAwMDQ0MCwsLCwsLCwwMDAwNDQwNDAsLCwsLCwwMDAwMDQ0NDQEABQAOACwASgA/AG4AXQCsAJUAigDyAOEAwwB4AREAAwAEAAwAFAAjAD4ANQAvAFMASwBEAHcAyQBrAM8ACQAPAA0AFwAmAEMAOgBnAFoAoQBIAH8AdQBuANEAzgAQAC0AFQAnAEUAQAByAGMAVwCeAIwA/ADUAMcAgwFtARoASwAkAEQAQQBzAGUAswCkAJsACAH2AOIAiwF+AWoBCQBCAB4AOwA4AGYAuQCtAAkBjgD9AOgAkAGEAXoBvQEQAG8ANgA0AGQAuACyAKAAhQABAfQA5ADZAIEBbgHLAgoAYgAwAFsAWAClAJ0AlAAFAfgAlwGNAXQBfAF5A3QDCABVAFQAUQCfAJwAjwAEAfkAqwGRAYgBfwHXAskCxAIHAJoATABJAI0AgwAAAfUAqgGWAYoBgAHfAmcBxgJgAQsAiwCBAEMAfQD3AOkA5QDbAIkB5wLhAtACdQNyA7cBBADzAHgAdgBzAOMA3wCMAeoC5gLgAtECyALCAt8AtAEGAMoA4ADeANoA2ACFAYIBfQFsAXgDuwHDArgBtQHABgQA6wLTANIA0AByAXsB3gLTAsoCxwZzA20DbAODDWEDAgB5AXEBZgC7ANYC0gJmAccCxQJiA8YGZwOCDWYDsgEAAAwACgAHAAsACgARAAsACQANAAwACgAHAAUAAwABAAMAAQQGCAkJCgoLCwsMDAwNCQMEBgcICQkJCgoKCwwLDAgGBgcICQkKCgsKCwsLDAwJCAcICQkKCgoLCwwMDA0NCgkICQkKCgsLCwwMDA0NDQkJCAkJCgsLDAsMDA0NDQ4KCgkJCgsLCwsMDAwMDQ0OCgoJCgoLCwsMDA0NDQ0PDwoKCgoLCwsMDA0NDQ0ODg4KCwoKCwsMDA0NDQ0ODQ4NCwsLCgsMDAwMDQ4ODg8PDgoMCwsLDAwNDg4ODg4ODQ4LDAwMDAwNDQ0NDw4ODg4QCw4MDAwNDQ4ODhAPDw8RDwsNDQsMDg4NDg4PEA8RDw4LCQgICQkKCgoLCwsLCwsLCA8ADQAuAFAAkgAGAfgAsgGqAZ0CjQKJAm0CBQIIBFgADgAMABUAJgBHAIIAegDYANEAxgBHAVkBPwEpARcBKgAvABYAKQBKAEQAgAB4AN0AzwDCALYAVAE7AScBHQISAFEAJwBLAEYAhgB9AHQA3ADMAL4AsgBFATcBJQEPARAAkwBIAEUAhwB/AHYAcADSAMgAvABgAUMBMgEdARwCDgAHAUIAgQB+AHcAcgDWAMoAwAC0AFUBPQEtARkBBgEMAPkAewB5AHUAcQDXAM4AwwC5AFsBSgE0ASMBEAEIAgoAswFzAG8AbQDTAMsAxAC7AGEBTAE5ASoBGwETAn0BEQCrAdQA0ADNAMkAwQC6ALEAqQBAAS8BHgEMAQICeQEQAE8BxwDFAL8AvQC1AK4ATQFBATEBIQETAQkCewFzAQsAnAK4ALcAswCvAFgBSwE6ATABIgEVARICfwF1AW4BCgCMAloBqwCoAKQAPgE1ASsBHwEUAQcBAQJ3AXABagEGAIgCQgE8ATgBMwEuASQBHAENAQUBAAJ4AXIBbAFnAQQAbAIsASgBJgEgARoBEQEKAQMCfAF2AXEBbQFpAWUBAgAJBBgBFgESAQsBCAEDAX4BegF0AW8BawFoAWYBZAEAACsAFAATABEADwANAAsACQAHAAYABAAHAAUAAwABAAMABAQGBwgJCQoKCwsLCwsMCQQEBQYHCAgJCQkKCgoKCggGBQYHBwgICQkJCQoKCgsHBwYHBwgICAkJCQkKCgoKBwgHBwgICAgJCQkKCgoKCwcJBwgICAgJCQkJCgoKCgoHCQgICAgJCQkJCgoKCgoLBwoICAgJCQkJCgoKCgoLCwgKCQkJCQkJCQkKCgoKCwsICgkJCQkJCQoKCgoKCwsLCAsJCQkJCgoKCgoKCwsLCwgLCgkJCQoKCgoKCgsLCwsICwoKCgoKCgoKCgsLCwsLCAsKCgoKCgoKCwsLCwsLCwgMCgoKCgoKCwsLCwsLCwsICAcHBwcHBwcHBwcICAgIBAEABQAEAAUABgAFAAQABAAHAAMABgAAAAcAAgADAAEAAQQEBQQGBQYEBQUGBQYGBg8ADgANAAwACwAKAAkACAAHAAYABQAEAAMAAgABAAAABAQEBAQEBAQEBAQEBAQEBABB6CkLBQIAAAACAEH5KQsMBAAACAQAAAMAAAADAEGQKgsNEAQAACIEAAADAAAAAwBBqCoLBjAEAABCBABByCoLBQQAAAAEAEHYKgsNUAQAAHAEAAAEAAAABABB8CoLDYAEAACgBAAABgAAAAYAQYgrCw2wBAAAAAUAAAYAAAAGAEGgKwsNMAUAAIAFAAAGAAAABgBBuCsLDbAFAAAABgAACAAAAAgAQdArCw0wBgAAsAYAAAgAAAAIAEHoKwsN8AYAAHAHAAAIAAAACABBgCwLDbAHAAAwCAAAEAAAABAAQZgsCwZwCAAAcAoAQbgsCwUQAAAAEABByCwLjQNwCwAAcA0AABAAAAAQAAAAAQAAAAEAAABwDgAAcBAAABAAAAAQAAAAAgAAAAMAAABwDgAAcBAAABAAAAAQAAAAAwAAAAcAAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwDgAAcBAAABAAAAAQAAAABgAAAD8AAABwDgAAcBAAABAAAAAQAAAACAAAAP8AAABwDgAAcBAAABAAAAAQAAAACgAAAP8DAABwDgAAcBAAABAAAAAQAAAADQAAAP8fAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwEQAAcBMAABAAAAAQAAAABQAAAB8AAABwEQAAcBMAABAAAAAQAAAABgAAAD8AAABwEQAAcBMAABAAAAAQAAAABwAAAH8AAABwEQAAcBMAABAAAAAQAAAACAAAAP8AAABwEQAAcBMAABAAAAAQAAAACQAAAP8BAABwEQAAcBMAABAAAAAQAAAACwAAAP8HAABwEQAAcBMAABAAAAAQAAAADQAAAP8fAABwEQAAcBMAAAEAAAAQAEHgLwsNcBQAAJAUAAABAAAAEABB+C8LBqAUAADAFABBrDALiQEBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAMAAAAEAAAABAAAAAUAAAAEAAAABQAAAAQAAAAGAAAABQAAAAYAAAAFAAAABgAAAAUAAAAHAAAABgAAAAcAAAAGAAAABwBBwDELDQEAAAD/////AQAAAAIAQeAxC5IBAwAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAAAwAAAAQAAAAEAAAAAAAAAAEAAAACAAAAAwAAAAAAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAACAAAAAwAAAESsAACAuwAAAH0AACJWAADAXQAAgD4AABErAADgLgAAQB8AQYAzC7oI/////////////////////wgAAAD/////CAAAACAAAAAQAAAA/////xAAAAAoAAAAGAAAAP////8YAAAAMAAAACAAAAD/////IAAAADgAAAAoAAAA/////ygAAABAAAAAMAAAAP////8wAAAAUAAAADgAAAD/////OAAAAGAAAABAAAAA/////0AAAABwAAAA//////////9QAAAAgAAAAP//////////YAAAAKAAAAD//////////3AAAADAAAAA//////////+AAAAA4AAAAP//////////kAAAAAABAAD//////////6AAAABAAQAA/////////////////////wAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAeAAAAJAAAACwAAAA0AAAAPgAAAEoAAABaAAAAbgAAAIYAAACiAAAAxAAAAO4AAAAgAQAAVgEAAKIBAABAAgAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAB4AAAAkAAAAKgAAADIAAAA8AAAASAAAAFgAAABqAAAAgAAAAJwAAAC+AAAA5gAAABQBAABKAQAAgAEAAEACAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABSAAAAZgAAAH4AAACcAAAAwgAAAPAAAAAoAQAAbAEAAMABAAAmAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAcgAAAIgAAACiAAAAwgAAAOgAAAAWAQAASgEAAIoBAADQAQAAHAIAAEACAAAAAAAABgAAAAwAAAASAAAAGAAAAB4AAAAkAAAALAAAAC0AAABCAAAAUAAAAGAAAAB0AAAAjAAAAKgAAADIAAAA7gAAAPgAAABQAQAAjAEAANABAAAKAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAdAAAAIwAAACoAAAAyAAAAO4AAAAcAQAAUAEAAIwBAADQAQAACgIAAEACAAAAAAAADAAAABgAAAAkAAAAMAAAADwAAABIAAAAWAAAAGwAAACEAAAAoAAAAMAAAADoAAAAGAEAAFABAACQAQAA3AEAADYCAAA4AgAAOgIAADwCAAA+AgAAQAIAQdw7C8oPnff//533//+d9///nff//533//+d9///Ou///zrv//86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";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;wasmMemory=Module["asm"]["c"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["o"];addOnInit(Module["asm"]["d"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}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);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort("invalid type for getValue: "+type)}return null}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){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("")}function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort("invalid type for setValue: "+type)}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}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(i<input.length);return output};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE=="boolean"&&ENVIRONMENT_IS_NODE){var buf=Buffer.from(s,"base64");return new Uint8Array(buf["buffer"],buf["byteOffset"],buf["byteLength"])}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}var asmLibraryArg={"b":_emscripten_memcpy_big,"a":_emscripten_resize_heap};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["d"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["e"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["f"]).apply(null,arguments)};var _shine_check_config=Module["_shine_check_config"]=function(){return(_shine_check_config=Module["_shine_check_config"]=Module["asm"]["g"]).apply(null,arguments)};var _shine_samples_per_pass=Module["_shine_samples_per_pass"]=function(){return(_shine_samples_per_pass=Module["_shine_samples_per_pass"]=Module["asm"]["h"]).apply(null,arguments)};var _shine_encode_buffer=Module["_shine_encode_buffer"]=function(){return(_shine_encode_buffer=Module["_shine_encode_buffer"]=Module["asm"]["i"]).apply(null,arguments)};var _shine_flush=Module["_shine_flush"]=function(){return(_shine_flush=Module["_shine_flush"]=Module["asm"]["j"]).apply(null,arguments)};var _shine_close=Module["_shine_close"]=function(){return(_shine_close=Module["_shine_close"]=Module["asm"]["k"]).apply(null,arguments)};var _shine_js_int16_len=Module["_shine_js_int16_len"]=function(){return(_shine_js_int16_len=Module["_shine_js_int16_len"]=Module["asm"]["l"]).apply(null,arguments)};var _shine_js_ptr_len=Module["_shine_js_ptr_len"]=function(){return(_shine_js_ptr_len=Module["_shine_js_ptr_len"]=Module["asm"]["m"]).apply(null,arguments)};var _shine_js_init=Module["_shine_js_init"]=function(){return(_shine_js_init=Module["_shine_js_init"]=Module["asm"]["n"]).apply(null,arguments)};Module["setValue"]=setValue;Module["getValue"]=getValue;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();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();var ShineModule;var int16Len;var ptrLen;function shineInit(){int16Len=ShineModule._shine_js_int16_len();ptrLen=ShineModule._shine_js_ptr_len()}function Shine(args){if(ShineModule._shine_check_config(args.samplerate,args.bitrate)<0)throw"Invalid configuration";var stereoMode;if(!args.stereoMode){if(args.channels===1){stereoMode=Shine.MONO}else{stereoMode=Shine.JOINT_STEREO}}else{stereoMode=args.stereoMode}this._handle=ShineModule._shine_js_init(args.channels,args.samplerate,stereoMode,args.bitrate);this._channels=args.channels;this._samples_per_pass=ShineModule._shine_samples_per_pass(this._handle);this._buffer=ShineModule._malloc(this._channels*ptrLen);this._pcm=new Array(this._channels);this._rem=new Array(this._channels);this._written=ShineModule._malloc(int16Len);var _tmp,chan;for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array;_tmp=ShineModule._malloc(this._samples_per_pass*int16Len);ShineModule.setValue(this._buffer+chan*ptrLen,_tmp,"*");this._pcm[chan]=ShineModule.HEAP16.subarray(_tmp/int16Len,_tmp/int16Len+this._samples_per_pass)}return this}Shine.checkConfig=function(samplerate,bitrate){return ShineModule._shine_check_config(samplerate,bitrate)>=0};Shine.prototype._encodePass=function(data){if(!this._handle)throw"Closed";var chan;for(chan=0;chan<this._channels;chan++)this._pcm[chan].set(data[chan]);var _buf=ShineModule._shine_encode_buffer(this._handle,this._buffer,this._written);var written=ShineModule.getValue(this._written,"i16");return ShineModule.HEAPU8.subarray(_buf,_buf+written)};function concat(ctr,a,b){if(typeof b==="undefined"){return a}var ret=new ctr(a.length+b.length);ret.set(a);ret.subarray(a.length).set(b);return ret}function clip(x){return x>1?1:x<-1?-1:x}function convertFloat32(buf){var ret=new Array(buf.length);var samples=buf[0].length;var chan,i;for(chan=0;chan<buf.length;chan++){ret[chan]=new Int16Array(samples);for(i=0;i<samples;i++){ret[chan][i]=parseInt(clip(buf[chan][i])*32767)}}return ret}Shine.prototype.encode=function(data){if(data.length!=this._channels)throw"Invalid data";var encoded=new Uint8Array;var tmp=new Array(this._channels);if(data[0]instanceof Float32Array){data=convertFloat32(data)}var chan;for(chan=0;chan<this._channels;chan++){tmp[chan]=new Float32Array;this._rem[chan]=concat(Int16Array,this._rem[chan],data[chan])}var i,enc;for(i=0;i<this._rem[0].length;i+=this._samples_per_pass){for(chan=0;chan<this._channels;chan++){tmp[chan]=this._rem[chan].subarray(i,i+this._samples_per_pass)}if(tmp[0].length<this._samples_per_pass){break}else{enc=this._encodePass(tmp);if(enc.length>0){encoded=concat(Uint8Array,encoded,enc)}}}if(tmp[0].length<this._samples_per_pass){this._rem=tmp}else{for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array}}return encoded};Shine.prototype.close=function(){if(!this._handle){throw"Closed"}var _buf=ShineModule._shine_flush(this._handle,this._written);var written=ShineModule.getValue(this._written,"i16");var encoded=new Uint8Array(written);encoded.set(ShineModule.HEAPU8.subarray(_buf,_buf+written));ShineModule._free(this._written);ShineModule._shine_close(this._handle);this._handle=null;var chan;for(chan=0;chan<this._channels;chan++){ShineModule._free(ShineModule.getValue(this._buffer+chan*ptrLen,"*"))}ShineModule._free(this._buffer);return encoded};Shine.initialized=new Promise(function(resolve){Module["onRuntimeInitialized"]=function(){ShineModule=Module;shineInit();resolve()}});Module["Shine"]=Shine;Module["StereoMode"]={0:"STEREO",1:"JOINT_STEREO",2:"DUAL_CHANNEL",3:"MONO",STEREO:0,JOINT_STEREO:1,DUAL_CHANNEL:2,MONO:3}; -diff --git a/js/libshine.d.ts b/js/libshine.d.ts -new file mode 100644 -index 0000000..8f00edc ---- /dev/null -+++ b/js/libshine.d.ts -@@ -0,0 +1,19 @@ -+export type Data = Int16Array | Float32Array; -+export declare enum StereoMode { -+ STEREO = 0, -+ JOINT_STEREO = 1, -+ DUAL_CHANNEL = 2, -+ MONO = 3 -+} -+export class Shine { -+ static initialized: Promise<void>; -+ static checkConfig(samplerate: number, bitrate: number): boolean; -+ constructor(args: { -+ samplerate: number; -+ bitrate: number; -+ channels: number; -+ stereoMode?: StereoMode; -+ }); -+ encode(data: Data[]): Uint8Array; -+ close(): Uint8Array; -+} -diff --git a/js/package-lock.json b/js/package-lock.json -new file mode 100644 -index 0000000..38b374d ---- /dev/null -+++ b/js/package-lock.json -@@ -0,0 +1,18 @@ -+{ -+ "name": "@toots/shine.js", -+ "version": "1.0.1", -+ "lockfileVersion": 3, -+ "requires": true, -+ "packages": { -+ "": { -+ "name": "@toots/shine.js", -+ "version": "1.0.1", -+ "license": "LGPL-2.0-only" -+ }, -+ "stubs": { -+ "version": "1.0.0", -+ "extraneous": true, -+ "license": "ISC" -+ } -+ } -+} -diff --git a/js/package.json b/js/package.json -new file mode 100644 -index 0000000..0c83619 ---- /dev/null -+++ b/js/package.json -@@ -0,0 +1,24 @@ -+{ -+ "name": "@toots/shine.js", -+ "version": "1.0.3", -+ "description": "Shine fixed-point mp3 encoder", -+ "main": "dist/libshine_node.js", -+ "browser": "dist/libshine_browser.js", -+ "types": "libshine.d.ts", -+ "repository": { -+ "type": "git", -+ "url": "git+https://github.com/toots/shine.git" -+ }, -+ "keywords": [ -+ "mp3", -+ "encoder", -+ "wasm", -+ "fixed-point" -+ ], -+ "author": "Romain Beauxis <toots@rastageeks.org>", -+ "license": "LGPL-2.0-only", -+ "bugs": { -+ "url": "https://github.com/toots/shine/issues" -+ }, -+ "homepage": "https://github.com/toots/shine#readme" -+} -diff --git a/js/src/libshine_browser_wrapper.js b/js/src/libshine_browser_wrapper.js -new file mode 100644 -index 0000000..f0ef04e ---- /dev/null -+++ b/js/src/libshine_browser_wrapper.js -@@ -0,0 +1,10 @@ -+var createModule = require("./libshine_browser_stubs").default; -+ -+Shine.initialized = (createModule()).then(function (Module) { -+ ShineModule = Module; -+ shineInit(); -+}); -+ -+module.exports.Shine = Shine; -+ -+module.exports.StereoMode = StereoMode; -diff --git a/js/src/post.js b/js/src/libshine_class.js -similarity index 57% -rename from js/src/post.js -rename to js/src/libshine_class.js -index f6a07e6..5d88d9e 100644 ---- a/js/src/post.js -+++ b/js/src/libshine_class.js -@@ -1,50 +1,64 @@ - // libshine function wrappers - --var isNode = typeof process === "object" && typeof require === "function"; -+var StereoMode = { -+ '0': 'STEREO', -+ '1': 'JOINT_STEREO', -+ '2': 'DUAL_CHANNEL', -+ '3': 'MONO', -+ STEREO: 0, -+ JOINT_STEREO: 1, -+ DUAL_CHANNEL: 2, -+ MONO: 3 -+}; -+ -+var ShineModule; -+var int16Len; -+var ptrLen; - --var int16Len = Module.HEAP16.BYTES_PER_ELEMENT; --var ptrLen = Module.HEAP32.BYTES_PER_ELEMENT; -+function shineInit() { -+ int16Len = ShineModule._shine_js_int16_len(); -+ ptrLen = ShineModule._shine_js_ptr_len(); -+}; - - function Shine(args) { -- if (_shine_check_config(args.samplerate, args.bitrate) < 0) -+ if (ShineModule._shine_check_config(args.samplerate, args.bitrate) < 0) - throw "Invalid configuration"; - -- var mode; -- if (!args.mode) { -+ var stereoMode; -+ if (!args.stereoMode) { - if (args.channels === 1) { -- mode = Shine.MONO; -+ stereoMode = Shine.MONO; - } else { -- mode = Shine.JOINT_STEREO; -+ stereoMode = Shine.JOINT_STEREO; - } - } else { -- mode = args.mode; -+ stereoMode = args.stereoMode; - } - -- this._handle = _shine_js_init(args.channels, args.samplerate, mode, args.bitrate); -+ this._handle = ShineModule._shine_js_init(args.channels, args.samplerate, stereoMode, args.bitrate); - - this._channels = args.channels; -- this._samples_per_pass = _shine_samples_per_pass(this._handle); -+ this._samples_per_pass = ShineModule._shine_samples_per_pass(this._handle); - -- this._buffer = _malloc(this._channels * ptrLen); -+ this._buffer = ShineModule._malloc(this._channels * ptrLen); - this._pcm = new Array(this._channels); - this._rem = new Array(this._channels); -- this._written = _malloc(int16Len); -+ this._written = ShineModule._malloc(int16Len); - - var _tmp, chan; - for (chan=0; chan<this._channels; chan++) { - this._rem[chan] = new Int16Array; -- _tmp = _malloc(this._samples_per_pass * int16Len); -- setValue(this._buffer + chan*ptrLen, _tmp, "*") -- this._pcm[chan] = Module.HEAP16.subarray(_tmp/int16Len, _tmp/int16Len+this._samples_per_pass) -+ _tmp = ShineModule._malloc(this._samples_per_pass * int16Len); -+ ShineModule.setValue(this._buffer + chan*ptrLen, _tmp, "*") -+ this._pcm[chan] = ShineModule.HEAP16.subarray(_tmp/int16Len, _tmp/int16Len+this._samples_per_pass) - } - - return this; - }; - --Shine.STEREO = 0; --Shine.JOINT_STEREO = 1; --Shine.DUAL_CHANNEL = 2; --Shine.MONO = 3; -+Shine.checkConfig = function (samplerate, bitrate) { -+ return ShineModule._shine_check_config(samplerate, bitrate) >= 0; -+}; - - Shine.prototype._encodePass = function (data) { - if (!this._handle) -@@ -54,11 +68,11 @@ Shine.prototype._encodePass = function (data) { - for (chan=0;chan<this._channels;chan++) - this._pcm[chan].set(data[chan]); - -- var _buf = _shine_encode_buffer(this._handle, this._buffer, this._written); -+ var _buf = ShineModule._shine_encode_buffer(this._handle, this._buffer, this._written); - -- var written = getValue(this._written, "i16"); -+ var written = ShineModule.getValue(this._written, "i16"); - -- return Module.HEAPU8.subarray(_buf, _buf+written); -+ return ShineModule.HEAPU8.subarray(_buf, _buf+written); - }; - - function concat(ctr, a, b) { -@@ -138,30 +152,22 @@ Shine.prototype.close = function () { - throw "Closed"; - } - -- var _buf = _shine_flush(this._handle, this._written); -+ var _buf = ShineModule._shine_flush(this._handle, this._written); - -- var written = getValue(this._written, "i16"); -+ var written = ShineModule.getValue(this._written, "i16"); - var encoded = new Uint8Array(written); - -- encoded.set(Module.HEAPU8.subarray(_buf, _buf + written)); -+ encoded.set(ShineModule.HEAPU8.subarray(_buf, _buf + written)); - -- _free(this._written); -- _shine_close(this._handle); -+ ShineModule._free(this._written); -+ ShineModule._shine_close(this._handle); - this._handle = null; - - var chan; - for (chan=0; chan<this._channels; chan++) { -- _free(getValue(this._buffer + chan*ptrLen, "*")); -+ ShineModule._free(ShineModule.getValue(this._buffer + chan*ptrLen, "*")); - } -- _free(this._buffer); -+ ShineModule._free(this._buffer); - - return encoded; - }; -- --if (isNode) { -- module.exports = Shine; --} -- --return Shine; -- --}).call(context)})(); -diff --git a/js/src/libshine_node_wrapper.js b/js/src/libshine_node_wrapper.js -new file mode 100644 -index 0000000..aaaf28c ---- /dev/null -+++ b/js/src/libshine_node_wrapper.js -@@ -0,0 +1,10 @@ -+Shine.initialized = new Promise(function (resolve) { -+ Module['onRuntimeInitialized'] = function () { -+ ShineModule = Module; -+ shineInit(); -+ resolve(); -+ } -+}) -+ -+Module["Shine"] = Shine; -+Module["StereoMode"] = StereoMode; -diff --git a/js/src/pre.js b/js/src/pre.js -deleted file mode 100644 -index 8078b87..0000000 ---- a/js/src/pre.js -+++ /dev/null -@@ -1,9 +0,0 @@ --// libshine.js - port of libshine to JavaScript using emscripten --// by Romain Beauxis <toots@rastageeks.org> from code by --// Andreas Krennmair <ak@synflood.at> -- -- --var Shine = (function() { -- var Module; -- var context = {}; -- return (function() { -diff --git a/js/src/wrapper.c b/js/src/wrapper.c -index 506570d..375b35c 100644 ---- a/js/src/wrapper.c -+++ b/js/src/wrapper.c -@@ -1,7 +1,16 @@ -+#include "layer3.h" -+#include "types.h" - #include <stdlib.h> - #include <string.h> --#include "types.h" --#include "layer3.h" -+#include <stdint.h> -+ -+size_t shine_js_int16_len() { -+ return sizeof(int16_t); -+} -+ -+size_t shine_js_ptr_len() { -+ return sizeof(void*); -+} - - shine_t shine_js_init(int channels, int samplerate, int mode, int bitr) { - shine_config_t config; -@@ -13,4 +22,4 @@ shine_t shine_js_init(int channels, int samplerate, int mode, int bitr) { - config.mpeg.bitr = bitr; - - return shine_initialise(&config); --} -+} -diff --git a/js/test/browser/Makefile b/js/test/browser/Makefile -index b3eedc8..befc1ce 100644 ---- a/js/test/browser/Makefile -+++ b/js/test/browser/Makefile -@@ -1,2 +1,2 @@ - all: -- python -m SimpleHTTPServer -+ python -m http.server -diff --git a/js/test/browser/encode.js b/js/test/browser/encode.js -index 65e009d..af17116 100644 ---- a/js/test/browser/encode.js -+++ b/js/test/browser/encode.js -@@ -4,24 +4,22 @@ function runEncodeTest(log, callback) { - var samplerate = 44100; - var channels = 2; - var bitrate = 128; -- var mode = Shine.STEREO; - - var shine = new Shine({ - samplerate: samplerate, - channels: channels, - bitrate: bitrate, -- mode: mode - }); - -- var started = new Date; -+ var started = new Date(); - var duration = 0.0; - var encoded = []; - - var xhr = new XMLHttpRequest(); - xhr.open("GET", "encode.wav", true); - xhr.responseType = "arraybuffer"; -- xhr.onload = function() { -- var samples = xhr.response.byteLength / (2*channels); -+ xhr.onload = function () { -+ var samples = xhr.response.byteLength / (2 * channels); - var data = new Int16Array(xhr.response); - var buf = convertInterleavedBuffer(data, channels, samples); - duration += parseFloat(samples) / samplerate; -@@ -33,12 +31,12 @@ function runEncodeTest(log, callback) { - xhr.addEventListener("load", function () { - encoded.push(shine.close()); - -- var ended = new Date -- var encodingTime = (ended.getTime() - started.getTime())/1000 -+ var ended = new Date(); -+ var encodingTime = (ended.getTime() - started.getTime()) / 1000; - log("Done encoding."); - log("File duration: " + duration.toFixed(2) + " seconds"); - log("Encoding time: " + encodingTime.toFixed(2) + " seconds"); -- log("Encoding rate: " + (duration/encodingTime).toFixed(2) + "X"); -+ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X"); - callback(new Blob(encoded)); - }); - -@@ -48,10 +46,10 @@ function runEncodeTest(log, callback) { - function convertInterleavedBuffer(buf, channels, samples) { - var chan, i; - ret = new Array(channels); -- for (chan=0; chan<channels; chan++) { -+ for (chan = 0; chan < channels; chan++) { - ret[chan] = new Int16Array(samples); -- for (i=0; i<samples; i++) { -- ret[chan][i] = buf[i*channels + chan]; -+ for (i = 0; i < samples; i++) { -+ ret[chan][i] = buf[i * channels + chan]; - } - } - return ret; -diff --git a/js/test/browser/index.html b/js/test/browser/index.html -index b3a4ee3..6496e46 100644 ---- a/js/test/browser/index.html -+++ b/js/test/browser/index.html -@@ -1,4 +1,4 @@ --<script src="libshine.js"></script> -+<script src="libshine_node.js"></script> - <script src="encode.js"></script> - <script src="rounds.js"></script> - <script> -@@ -7,20 +7,21 @@ - el.innerHTML = el.innerHTML + "<br>" + msg; - }; - -- var load = function() { -- runEncodeTest(log, function (blob) { -- if (typeof window.URL !== "undefined") { -- var link = document.getElementById("download-link"); -- link.href = URL.createObjectURL(blob); -- link.download = "encoded.mp3"; -- } -+ function onLoad() { -+ Shine.initialized.then(function () { -+ runEncodeTest(log, function (blob) { -+ if (typeof window.URL !== "undefined") { -+ var link = document.getElementById("download-link"); -+ link.href = URL.createObjectURL(blob); -+ link.download = "encoded.mp3"; -+ } - -- log(""); -- runRoundsTest(Shine, log); -+ log(""); -+ runRoundsTest(Shine, log); -+ }); - }); - }; -- -- window.addEventListener("load", load, false); -+ window.addEventListener("load", onLoad, false); - </script> - <a href="#" id="download-link">Download encoded file</a> - <div id="output"></div> -diff --git a/js/test/browser/libshine.js b/js/test/browser/libshine.js -deleted file mode 120000 -index fb57470..0000000 ---- a/js/test/browser/libshine.js -+++ /dev/null -@@ -1 +0,0 @@ --../../dist/libshine.js -\ No newline at end of file -diff --git a/js/test/browser/libshine_node.js b/js/test/browser/libshine_node.js -new file mode 120000 -index 0000000..07f07a4 ---- /dev/null -+++ b/js/test/browser/libshine_node.js -@@ -0,0 +1 @@ -+../../dist/libshine_node.js -\ No newline at end of file -diff --git a/js/test/lib/rounds.js b/js/test/lib/rounds.js -index f76410a..1b388b5 100644 ---- a/js/test/lib/rounds.js -+++ b/js/test/lib/rounds.js -@@ -1,39 +1,35 @@ - var channels = 2; // test.wav is stereo - var samplerate = 44100; // ditto - --var runRoundsTest = function(Shine, log) { -+var runRoundsTest = function (Shine, log) { - log("Executing rounds test"); - - var nPasses = 50; - var frameSize = 4096; - var data = new Array(channels); - var chan; -- for (chan=0; chan<channels; chan++) -- data[chan] = new Int16Array(frameSize); -+ for (chan = 0; chan < channels; chan++) data[chan] = new Int16Array(frameSize); - - log("Encoding " + nPasses + " buffers of " + frameSize + " samples"); -- var started = new Date; -+ var started = new Date(); - - var shine = new Shine({ - samplerate: samplerate, - bitrate: 128, - channels: channels, -- model: Shine.STEREO - }); - - var i; -- for (i=0; i < nPasses; i++) -- shine.encode(data); -+ for (i = 0; i < nPasses; i++) shine.encode(data); - shine.close(); - -- var ended = new Date; -- var duration = (parseFloat(nPasses*frameSize) / parseFloat(samplerate)).toFixed(2); -- var encodingTime = (ended.getTime() - started.getTime())/1000; -+ var ended = new Date(); -+ var duration = (parseFloat(nPasses * frameSize) / parseFloat(samplerate)).toFixed(2); -+ var encodingTime = (ended.getTime() - started.getTime()) / 1000; - log("Done encoding"); - log("Total duration: " + duration); - log("Encoding time: " + encodingTime.toFixed(2)); -- log("Encoding rate: " + (duration/encodingTime).toFixed(2) + "X"); -+ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X"); - }; - --if (typeof process === "object" && typeof require === "function") -- module.exports = runRoundsTest; -+if (typeof process === "object" && typeof require === "function") module.exports = runRoundsTest; -diff --git a/js/test/nextjs/.eslintrc.json b/js/test/nextjs/.eslintrc.json -new file mode 100644 -index 0000000..bffb357 ---- /dev/null -+++ b/js/test/nextjs/.eslintrc.json -@@ -0,0 +1,3 @@ -+{ -+ "extends": "next/core-web-vitals" -+} -diff --git a/js/test/nextjs/.gitignore b/js/test/nextjs/.gitignore -new file mode 100644 -index 0000000..c87c9b3 ---- /dev/null -+++ b/js/test/nextjs/.gitignore -@@ -0,0 +1,36 @@ -+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. -+ -+# dependencies -+/node_modules -+/.pnp -+.pnp.js -+ -+# testing -+/coverage -+ -+# next.js -+/.next/ -+/out/ -+ -+# production -+/build -+ -+# misc -+.DS_Store -+*.pem -+ -+# debug -+npm-debug.log* -+yarn-debug.log* -+yarn-error.log* -+.pnpm-debug.log* -+ -+# local env files -+.env*.local -+ -+# vercel -+.vercel -+ -+# typescript -+*.tsbuildinfo -+next-env.d.ts -diff --git a/js/test/nextjs/.prettierignore b/js/test/nextjs/.prettierignore -new file mode 100644 -index 0000000..799a1ca ---- /dev/null -+++ b/js/test/nextjs/.prettierignore -@@ -0,0 +1,4 @@ -+.next/ -+out/ -+public/audio -+__ENV.js -diff --git a/js/test/nextjs/.prettierrc b/js/test/nextjs/.prettierrc -new file mode 100644 -index 0000000..a36a92f ---- /dev/null -+++ b/js/test/nextjs/.prettierrc -@@ -0,0 +1,12 @@ -+{ -+ "singleQuote": false, -+ "quoteProps": "as-needed", -+ "arrowParens": "avoid", -+ "tabWidth": 2, -+ "trailingComma": "es5", -+ "semi": false, -+ "jsxSingleQuote": true, -+ "bracketSameLine": false, -+ "printWidth": 120, -+ "parser": "typescript" -+} -diff --git a/js/test/nextjs/README.md b/js/test/nextjs/README.md -new file mode 100644 -index 0000000..fb9bcc9 ---- /dev/null -+++ b/js/test/nextjs/README.md -@@ -0,0 +1,36 @@ -+This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). -+ -+## Getting Started -+ -+First, run the development server: -+ -+```bash -+npm run dev -+# or -+yarn dev -+``` -+ -+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. -+ -+You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. -+ -+[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. -+ -+The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. -+ -+This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. -+ -+## Learn More -+ -+To learn more about Next.js, take a look at the following resources: -+ -+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. -+ -+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! -+ -+## Deploy on Vercel -+ -+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. -+ -+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. -diff --git a/js/test/nextjs/lib/encode.ts b/js/test/nextjs/lib/encode.ts -new file mode 100644 -index 0000000..6e1ef2d ---- /dev/null -+++ b/js/test/nextjs/lib/encode.ts -@@ -0,0 +1,59 @@ -+import { Shine } from "@toots/shine.js" -+ -+const convertInterleavedBuffer = (buf: Int16Array, channels: number, samples: number) => { -+ const ret = new Array(channels) -+ for (let chan = 0; chan < channels; chan++) { -+ ret[chan] = new Int16Array(samples) -+ for (let i = 0; i < samples; i++) { -+ ret[chan][i] = buf[i * channels + chan] -+ } -+ } -+ return ret -+} -+ -+export const runEncodeTest = (log: (_: string) => void, callback: (_: Blob) => void) => { -+ log("Executing encoding test") -+ -+ const samplerate = 44100 -+ const channels = 2 -+ const bitrate = 128 -+ //const stereoMode = StereoMode.STEREO -+ -+ const shine = new Shine({ -+ samplerate: samplerate, -+ channels: channels, -+ bitrate: bitrate, -+ // stereoMode: stereoMode, -+ }) -+ -+ const started = new Date() -+ let duration = 0.0 -+ const encoded: Uint8Array[] = [] -+ -+ const xhr = new XMLHttpRequest() -+ xhr.open("GET", "encode.wav", true) -+ xhr.responseType = "arraybuffer" -+ xhr.onload = () => { -+ const samples = xhr.response.byteLength / (2 * channels) -+ const data = new Int16Array(xhr.response) -+ const buf = convertInterleavedBuffer(data, channels, samples) -+ duration += samples / samplerate -+ encoded.push(shine.encode(buf)) -+ } -+ -+ log("Got WAV file.") -+ log("Encoding..") -+ xhr.addEventListener("load", () => { -+ encoded.push(shine.close()) -+ -+ const ended = new Date() -+ const encodingTime = (ended.getTime() - started.getTime()) / 1000 -+ log("Done encoding.") -+ log("File duration: " + duration.toFixed(2) + " seconds") -+ log("Encoding time: " + encodingTime.toFixed(2) + " seconds") -+ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X") -+ callback(new Blob(encoded)) -+ }) -+ -+ xhr.send() -+} -diff --git a/js/test/nextjs/lib/encode.wav b/js/test/nextjs/lib/encode.wav -new file mode 100644 -index 0000000..c8cd595 -Binary files /dev/null and b/js/test/nextjs/lib/encode.wav differ -diff --git a/js/test/nextjs/lib/rounds.ts b/js/test/nextjs/lib/rounds.ts -new file mode 100644 -index 0000000..fab9b7c ---- /dev/null -+++ b/js/test/nextjs/lib/rounds.ts -@@ -0,0 +1,34 @@ -+import { Shine, StereoMode } from "@toots/shine.js" -+ -+const channels = 2 // test.wav is stereo -+const samplerate = 44100 // ditto -+ -+export const runRoundsTest = (log: (_: string) => void) => { -+ log("Executing rounds test") -+ -+ const nPasses = 50 -+ const frameSize = 4096 -+ const data = new Array(channels) -+ for (let chan = 0; chan < channels; chan++) data[chan] = new Int16Array(frameSize) -+ -+ log("Encoding " + nPasses + " buffers of " + frameSize + " samples") -+ const started = new Date() -+ -+ const shine = new Shine({ -+ samplerate: samplerate, -+ bitrate: 128, -+ channels: channels, -+ stereoMode: StereoMode.STEREO, -+ }) -+ -+ for (let i = 0; i < nPasses; i++) shine.encode(data) -+ shine.close() -+ -+ const ended = new Date() -+ const duration = (nPasses * frameSize) / samplerate -+ const encodingTime = (ended.getTime() - started.getTime()) / 1000 -+ log("Done encoding") -+ log("Total duration: " + duration.toFixed(2)) -+ log("Encoding time: " + encodingTime.toFixed(2)) -+ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X") -+} -diff --git a/js/test/nextjs/next.config.js b/js/test/nextjs/next.config.js -new file mode 100644 -index 0000000..a843cbe ---- /dev/null -+++ b/js/test/nextjs/next.config.js -@@ -0,0 +1,6 @@ -+/** @type {import('next').NextConfig} */ -+const nextConfig = { -+ reactStrictMode: true, -+} -+ -+module.exports = nextConfig -diff --git a/js/test/nextjs/package-lock.json b/js/test/nextjs/package-lock.json -new file mode 100644 -index 0000000..02208b0 ---- /dev/null -+++ b/js/test/nextjs/package-lock.json -@@ -0,0 +1,3084 @@ -+{ -+ "name": "shine-nextjs-test-app", -+ "version": "0.1.0", -+ "lockfileVersion": 3, -+ "requires": true, -+ "packages": { -+ "": { -+ "name": "shine-nextjs-test-app", -+ "version": "0.1.0", -+ "dependencies": { -+ "@next/font": "13.1.1", -+ "@toots/shine.js": "file:../..", -+ "@types/node": "18.11.18", -+ "@types/react": "18.0.26", -+ "@types/react-dom": "18.0.10", -+ "eslint": "8.31.0", -+ "eslint-config-next": "13.1.1", -+ "next": "13.1.1", -+ "react": "18.2.0", -+ "react-dom": "18.2.0", -+ "typescript": "4.9.4" -+ }, -+ "devDependencies": { -+ "prettier": "^2.8.1" -+ } -+ }, -+ "node_modules/@babel/runtime": { -+ "version": "7.20.7", -+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", -+ "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", -+ "dependencies": { -+ "regenerator-runtime": "^0.13.11" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ } -+ }, -+ "node_modules/@babel/runtime-corejs3": { -+ "version": "7.20.7", -+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.7.tgz", -+ "integrity": "sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==", -+ "dependencies": { -+ "core-js-pure": "^3.25.1", -+ "regenerator-runtime": "^0.13.11" -+ }, -+ "engines": { -+ "node": ">=6.9.0" -+ } -+ }, -+ "node_modules/@eslint/eslintrc": { -+ "version": "1.4.1", -+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", -+ "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", -+ "dependencies": { -+ "ajv": "^6.12.4", -+ "debug": "^4.3.2", -+ "espree": "^9.4.0", -+ "globals": "^13.19.0", -+ "ignore": "^5.2.0", -+ "import-fresh": "^3.2.1", -+ "js-yaml": "^4.1.0", -+ "minimatch": "^3.1.2", -+ "strip-json-comments": "^3.1.1" -+ }, -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/eslint" -+ } -+ }, -+ "node_modules/@humanwhocodes/config-array": { -+ "version": "0.11.8", -+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", -+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", -+ "dependencies": { -+ "@humanwhocodes/object-schema": "^1.2.1", -+ "debug": "^4.1.1", -+ "minimatch": "^3.0.5" -+ }, -+ "engines": { -+ "node": ">=10.10.0" -+ } -+ }, -+ "node_modules/@humanwhocodes/module-importer": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", -+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", -+ "engines": { -+ "node": ">=12.22" -+ }, -+ "funding": { -+ "type": "github", -+ "url": "https://github.com/sponsors/nzakas" -+ } -+ }, -+ "node_modules/@humanwhocodes/object-schema": { -+ "version": "1.2.1", -+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", -+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" -+ }, -+ "node_modules/@next/env": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.1.tgz", -+ "integrity": "sha512-vFMyXtPjSAiOXOywMojxfKIqE3VWN5RCAx+tT3AS3pcKjMLFTCJFUWsKv8hC+87Z1F4W3r68qTwDFZIFmd5Xkw==" -+ }, -+ "node_modules/@next/eslint-plugin-next": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.1.tgz", -+ "integrity": "sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ==", -+ "dependencies": { -+ "glob": "7.1.7" -+ } -+ }, -+ "node_modules/@next/font": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.1.tgz", -+ "integrity": "sha512-amygRorS05hYK1/XQRZo5qBl7l2fpHnezeKU/cNveWU5QJg+sg8gMGkUXHtvesNKpiKIJshBRH1TzvO+2sKpvQ==" -+ }, -+ "node_modules/@next/swc-android-arm-eabi": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.1.tgz", -+ "integrity": "sha512-qnFCx1kT3JTWhWve4VkeWuZiyjG0b5T6J2iWuin74lORCupdrNukxkq9Pm+Z7PsatxuwVJMhjUoYz7H4cWzx2A==", -+ "cpu": [ -+ "arm" -+ ], -+ "optional": true, -+ "os": [ -+ "android" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-android-arm64": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.1.tgz", -+ "integrity": "sha512-eCiZhTzjySubNqUnNkQCjU3Fh+ep3C6b5DCM5FKzsTH/3Gr/4Y7EiaPZKILbvnXmhWtKPIdcY6Zjx51t4VeTfA==", -+ "cpu": [ -+ "arm64" -+ ], -+ "optional": true, -+ "os": [ -+ "android" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-darwin-arm64": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.1.tgz", -+ "integrity": "sha512-9zRJSSIwER5tu9ADDkPw5rIZ+Np44HTXpYMr0rkM656IvssowPxmhK0rTreC1gpUCYwFsRbxarUJnJsTWiutPg==", -+ "cpu": [ -+ "arm64" -+ ], -+ "optional": true, -+ "os": [ -+ "darwin" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-darwin-x64": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.1.tgz", -+ "integrity": "sha512-qWr9qEn5nrnlhB0rtjSdR00RRZEtxg4EGvicIipqZWEyayPxhUu6NwKiG8wZiYZCLfJ5KWr66PGSNeDMGlNaiA==", -+ "cpu": [ -+ "x64" -+ ], -+ "optional": true, -+ "os": [ -+ "darwin" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-freebsd-x64": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.1.tgz", -+ "integrity": "sha512-UwP4w/NcQ7V/VJEj3tGVszgb4pyUCt3lzJfUhjDMUmQbzG9LDvgiZgAGMYH6L21MoyAATJQPDGiAMWAPKsmumA==", -+ "cpu": [ -+ "x64" -+ ], -+ "optional": true, -+ "os": [ -+ "freebsd" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-linux-arm-gnueabihf": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.1.tgz", -+ "integrity": "sha512-CnsxmKHco9sosBs1XcvCXP845Db+Wx1G0qouV5+Gr+HT/ZlDYEWKoHVDgnJXLVEQzq4FmHddBNGbXvgqM1Gfkg==", -+ "cpu": [ -+ "arm" -+ ], -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-linux-arm64-gnu": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.1.tgz", -+ "integrity": "sha512-JfDq1eri5Dif+VDpTkONRd083780nsMCOKoFG87wA0sa4xL8LGcXIBAkUGIC1uVy9SMsr2scA9CySLD/i+Oqiw==", -+ "cpu": [ -+ "arm64" -+ ], -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-linux-arm64-musl": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.1.tgz", -+ "integrity": "sha512-GA67ZbDq2AW0CY07zzGt07M5b5Yaq5qUpFIoW3UFfjOPgb0Sqf3DAW7GtFMK1sF4ROHsRDMGQ9rnT0VM2dVfKA==", -+ "cpu": [ -+ "arm64" -+ ], -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-linux-x64-gnu": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.1.tgz", -+ "integrity": "sha512-nnjuBrbzvqaOJaV+XgT8/+lmXrSCOt1YYZn/irbDb2fR2QprL6Q7WJNgwsZNxiLSfLdv+2RJGGegBx9sLBEzGA==", -+ "cpu": [ -+ "x64" -+ ], -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-linux-x64-musl": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.1.tgz", -+ "integrity": "sha512-CM9xnAQNIZ8zf/igbIT/i3xWbQZYaF397H+JroF5VMOCUleElaMdQLL5riJml8wUfPoN3dtfn2s4peSr3azz/g==", -+ "cpu": [ -+ "x64" -+ ], -+ "optional": true, -+ "os": [ -+ "linux" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-win32-arm64-msvc": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.1.tgz", -+ "integrity": "sha512-pzUHOGrbgfGgPlOMx9xk3QdPJoRPU+om84hqVoe6u+E0RdwOG0Ho/2UxCgDqmvpUrMab1Deltlt6RqcXFpnigQ==", -+ "cpu": [ -+ "arm64" -+ ], -+ "optional": true, -+ "os": [ -+ "win32" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-win32-ia32-msvc": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.1.tgz", -+ "integrity": "sha512-WeX8kVS46aobM9a7Xr/kEPcrTyiwJqQv/tbw6nhJ4fH9xNZ+cEcyPoQkwPo570dCOLz3Zo9S2q0E6lJ/EAUOBg==", -+ "cpu": [ -+ "ia32" -+ ], -+ "optional": true, -+ "os": [ -+ "win32" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@next/swc-win32-x64-msvc": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.1.tgz", -+ "integrity": "sha512-mVF0/3/5QAc5EGVnb8ll31nNvf3BWpPY4pBb84tk+BfQglWLqc5AC9q1Ht/YMWiEgs8ALNKEQ3GQnbY0bJF2Gg==", -+ "cpu": [ -+ "x64" -+ ], -+ "optional": true, -+ "os": [ -+ "win32" -+ ], -+ "engines": { -+ "node": ">= 10" -+ } -+ }, -+ "node_modules/@nodelib/fs.scandir": { -+ "version": "2.1.5", -+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", -+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", -+ "dependencies": { -+ "@nodelib/fs.stat": "2.0.5", -+ "run-parallel": "^1.1.9" -+ }, -+ "engines": { -+ "node": ">= 8" -+ } -+ }, -+ "node_modules/@nodelib/fs.stat": { -+ "version": "2.0.5", -+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", -+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", -+ "engines": { -+ "node": ">= 8" -+ } -+ }, -+ "node_modules/@nodelib/fs.walk": { -+ "version": "1.2.8", -+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", -+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", -+ "dependencies": { -+ "@nodelib/fs.scandir": "2.1.5", -+ "fastq": "^1.6.0" -+ }, -+ "engines": { -+ "node": ">= 8" -+ } -+ }, -+ "node_modules/@pkgr/utils": { -+ "version": "2.3.1", -+ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", -+ "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", -+ "dependencies": { -+ "cross-spawn": "^7.0.3", -+ "is-glob": "^4.0.3", -+ "open": "^8.4.0", -+ "picocolors": "^1.0.0", -+ "tiny-glob": "^0.2.9", -+ "tslib": "^2.4.0" -+ }, -+ "engines": { -+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/unts" -+ } -+ }, -+ "node_modules/@rushstack/eslint-patch": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", -+ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" -+ }, -+ "node_modules/@swc/helpers": { -+ "version": "0.4.14", -+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", -+ "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", -+ "dependencies": { -+ "tslib": "^2.4.0" -+ } -+ }, -+ "node_modules/@toots/shine.js": { -+ "version": "1.0.1", -+ "resolved": "file:../..", -+ "license": "LGPL-2.0-only" -+ }, -+ "node_modules/@types/json5": { -+ "version": "0.0.29", -+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", -+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" -+ }, -+ "node_modules/@types/node": { -+ "version": "18.11.18", -+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", -+ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" -+ }, -+ "node_modules/@types/prop-types": { -+ "version": "15.7.5", -+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", -+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" -+ }, -+ "node_modules/@types/react": { -+ "version": "18.0.26", -+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", -+ "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", -+ "dependencies": { -+ "@types/prop-types": "*", -+ "@types/scheduler": "*", -+ "csstype": "^3.0.2" -+ } -+ }, -+ "node_modules/@types/react-dom": { -+ "version": "18.0.10", -+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", -+ "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", -+ "dependencies": { -+ "@types/react": "*" -+ } -+ }, -+ "node_modules/@types/scheduler": { -+ "version": "0.16.2", -+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", -+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" -+ }, -+ "node_modules/@typescript-eslint/parser": { -+ "version": "5.47.1", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.47.1.tgz", -+ "integrity": "sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==", -+ "dependencies": { -+ "@typescript-eslint/scope-manager": "5.47.1", -+ "@typescript-eslint/types": "5.47.1", -+ "@typescript-eslint/typescript-estree": "5.47.1", -+ "debug": "^4.3.4" -+ }, -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "type": "opencollective", -+ "url": "https://opencollective.com/typescript-eslint" -+ }, -+ "peerDependencies": { -+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" -+ }, -+ "peerDependenciesMeta": { -+ "typescript": { -+ "optional": true -+ } -+ } -+ }, -+ "node_modules/@typescript-eslint/scope-manager": { -+ "version": "5.47.1", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.47.1.tgz", -+ "integrity": "sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw==", -+ "dependencies": { -+ "@typescript-eslint/types": "5.47.1", -+ "@typescript-eslint/visitor-keys": "5.47.1" -+ }, -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "type": "opencollective", -+ "url": "https://opencollective.com/typescript-eslint" -+ } -+ }, -+ "node_modules/@typescript-eslint/types": { -+ "version": "5.47.1", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.1.tgz", -+ "integrity": "sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A==", -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "type": "opencollective", -+ "url": "https://opencollective.com/typescript-eslint" -+ } -+ }, -+ "node_modules/@typescript-eslint/typescript-estree": { -+ "version": "5.47.1", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.1.tgz", -+ "integrity": "sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA==", -+ "dependencies": { -+ "@typescript-eslint/types": "5.47.1", -+ "@typescript-eslint/visitor-keys": "5.47.1", -+ "debug": "^4.3.4", -+ "globby": "^11.1.0", -+ "is-glob": "^4.0.3", -+ "semver": "^7.3.7", -+ "tsutils": "^3.21.0" -+ }, -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "type": "opencollective", -+ "url": "https://opencollective.com/typescript-eslint" -+ }, -+ "peerDependenciesMeta": { -+ "typescript": { -+ "optional": true -+ } -+ } -+ }, -+ "node_modules/@typescript-eslint/visitor-keys": { -+ "version": "5.47.1", -+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.1.tgz", -+ "integrity": "sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig==", -+ "dependencies": { -+ "@typescript-eslint/types": "5.47.1", -+ "eslint-visitor-keys": "^3.3.0" -+ }, -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "type": "opencollective", -+ "url": "https://opencollective.com/typescript-eslint" -+ } -+ }, -+ "node_modules/acorn": { -+ "version": "8.8.1", -+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", -+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", -+ "bin": { -+ "acorn": "bin/acorn" -+ }, -+ "engines": { -+ "node": ">=0.4.0" -+ } -+ }, -+ "node_modules/acorn-jsx": { -+ "version": "5.3.2", -+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", -+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", -+ "peerDependencies": { -+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" -+ } -+ }, -+ "node_modules/ajv": { -+ "version": "6.12.6", -+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", -+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", -+ "dependencies": { -+ "fast-deep-equal": "^3.1.1", -+ "fast-json-stable-stringify": "^2.0.0", -+ "json-schema-traverse": "^0.4.1", -+ "uri-js": "^4.2.2" -+ }, -+ "funding": { -+ "type": "github", -+ "url": "https://github.com/sponsors/epoberezkin" -+ } -+ }, -+ "node_modules/ansi-regex": { -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", -+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/ansi-styles": { -+ "version": "4.3.0", -+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", -+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", -+ "dependencies": { -+ "color-convert": "^2.0.1" -+ }, -+ "engines": { -+ "node": ">=8" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/ansi-styles?sponsor=1" -+ } -+ }, -+ "node_modules/argparse": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", -+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" -+ }, -+ "node_modules/aria-query": { -+ "version": "4.2.2", -+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", -+ "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", -+ "dependencies": { -+ "@babel/runtime": "^7.10.2", -+ "@babel/runtime-corejs3": "^7.10.2" -+ }, -+ "engines": { -+ "node": ">=6.0" -+ } -+ }, -+ "node_modules/array-includes": { -+ "version": "3.1.6", -+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", -+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4", -+ "get-intrinsic": "^1.1.3", -+ "is-string": "^1.0.7" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/array-union": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", -+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/array.prototype.flat": { -+ "version": "1.3.1", -+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", -+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4", -+ "es-shim-unscopables": "^1.0.0" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/array.prototype.flatmap": { -+ "version": "1.3.1", -+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", -+ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4", -+ "es-shim-unscopables": "^1.0.0" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/array.prototype.tosorted": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", -+ "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4", -+ "es-shim-unscopables": "^1.0.0", -+ "get-intrinsic": "^1.1.3" -+ } -+ }, -+ "node_modules/ast-types-flow": { -+ "version": "0.0.7", -+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", -+ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" -+ }, -+ "node_modules/axe-core": { -+ "version": "4.6.1", -+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.1.tgz", -+ "integrity": "sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w==", -+ "engines": { -+ "node": ">=4" -+ } -+ }, -+ "node_modules/axobject-query": { -+ "version": "2.2.0", -+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", -+ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" -+ }, -+ "node_modules/balanced-match": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", -+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" -+ }, -+ "node_modules/brace-expansion": { -+ "version": "1.1.11", -+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", -+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", -+ "dependencies": { -+ "balanced-match": "^1.0.0", -+ "concat-map": "0.0.1" -+ } -+ }, -+ "node_modules/braces": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", -+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", -+ "dependencies": { -+ "fill-range": "^7.0.1" -+ }, -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/call-bind": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", -+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", -+ "dependencies": { -+ "function-bind": "^1.1.1", -+ "get-intrinsic": "^1.0.2" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/callsites": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", -+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", -+ "engines": { -+ "node": ">=6" -+ } -+ }, -+ "node_modules/caniuse-lite": { -+ "version": "1.0.30001441", -+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", -+ "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==", -+ "funding": [ -+ { -+ "type": "opencollective", -+ "url": "https://opencollective.com/browserslist" -+ }, -+ { -+ "type": "tidelift", -+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite" -+ } -+ ] -+ }, -+ "node_modules/chalk": { -+ "version": "4.1.2", -+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", -+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", -+ "dependencies": { -+ "ansi-styles": "^4.1.0", -+ "supports-color": "^7.1.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/chalk/chalk?sponsor=1" -+ } -+ }, -+ "node_modules/client-only": { -+ "version": "0.0.1", -+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", -+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" -+ }, -+ "node_modules/color-convert": { -+ "version": "2.0.1", -+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", -+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", -+ "dependencies": { -+ "color-name": "~1.1.4" -+ }, -+ "engines": { -+ "node": ">=7.0.0" -+ } -+ }, -+ "node_modules/color-name": { -+ "version": "1.1.4", -+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", -+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" -+ }, -+ "node_modules/concat-map": { -+ "version": "0.0.1", -+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", -+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" -+ }, -+ "node_modules/core-js-pure": { -+ "version": "3.27.1", -+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.1.tgz", -+ "integrity": "sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==", -+ "hasInstallScript": true, -+ "funding": { -+ "type": "opencollective", -+ "url": "https://opencollective.com/core-js" -+ } -+ }, -+ "node_modules/cross-spawn": { -+ "version": "7.0.3", -+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", -+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", -+ "dependencies": { -+ "path-key": "^3.1.0", -+ "shebang-command": "^2.0.0", -+ "which": "^2.0.1" -+ }, -+ "engines": { -+ "node": ">= 8" -+ } -+ }, -+ "node_modules/csstype": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", -+ "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" -+ }, -+ "node_modules/damerau-levenshtein": { -+ "version": "1.0.8", -+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", -+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" -+ }, -+ "node_modules/debug": { -+ "version": "4.3.4", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", -+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", -+ "dependencies": { -+ "ms": "2.1.2" -+ }, -+ "engines": { -+ "node": ">=6.0" -+ }, -+ "peerDependenciesMeta": { -+ "supports-color": { -+ "optional": true -+ } -+ } -+ }, -+ "node_modules/deep-is": { -+ "version": "0.1.4", -+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", -+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" -+ }, -+ "node_modules/define-lazy-prop": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", -+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/define-properties": { -+ "version": "1.1.4", -+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", -+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", -+ "dependencies": { -+ "has-property-descriptors": "^1.0.0", -+ "object-keys": "^1.1.1" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/dir-glob": { -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", -+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", -+ "dependencies": { -+ "path-type": "^4.0.0" -+ }, -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/doctrine": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", -+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", -+ "dependencies": { -+ "esutils": "^2.0.2" -+ }, -+ "engines": { -+ "node": ">=6.0.0" -+ } -+ }, -+ "node_modules/emoji-regex": { -+ "version": "9.2.2", -+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", -+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" -+ }, -+ "node_modules/enhanced-resolve": { -+ "version": "5.12.0", -+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", -+ "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", -+ "dependencies": { -+ "graceful-fs": "^4.2.4", -+ "tapable": "^2.2.0" -+ }, -+ "engines": { -+ "node": ">=10.13.0" -+ } -+ }, -+ "node_modules/es-abstract": { -+ "version": "1.20.5", -+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz", -+ "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "es-to-primitive": "^1.2.1", -+ "function-bind": "^1.1.1", -+ "function.prototype.name": "^1.1.5", -+ "get-intrinsic": "^1.1.3", -+ "get-symbol-description": "^1.0.0", -+ "gopd": "^1.0.1", -+ "has": "^1.0.3", -+ "has-property-descriptors": "^1.0.0", -+ "has-symbols": "^1.0.3", -+ "internal-slot": "^1.0.3", -+ "is-callable": "^1.2.7", -+ "is-negative-zero": "^2.0.2", -+ "is-regex": "^1.1.4", -+ "is-shared-array-buffer": "^1.0.2", -+ "is-string": "^1.0.7", -+ "is-weakref": "^1.0.2", -+ "object-inspect": "^1.12.2", -+ "object-keys": "^1.1.1", -+ "object.assign": "^4.1.4", -+ "regexp.prototype.flags": "^1.4.3", -+ "safe-regex-test": "^1.0.0", -+ "string.prototype.trimend": "^1.0.6", -+ "string.prototype.trimstart": "^1.0.6", -+ "unbox-primitive": "^1.0.2" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/es-shim-unscopables": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", -+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", -+ "dependencies": { -+ "has": "^1.0.3" -+ } -+ }, -+ "node_modules/es-to-primitive": { -+ "version": "1.2.1", -+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", -+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", -+ "dependencies": { -+ "is-callable": "^1.1.4", -+ "is-date-object": "^1.0.1", -+ "is-symbol": "^1.0.2" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/escape-string-regexp": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", -+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/eslint": { -+ "version": "8.31.0", -+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", -+ "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", -+ "dependencies": { -+ "@eslint/eslintrc": "^1.4.1", -+ "@humanwhocodes/config-array": "^0.11.8", -+ "@humanwhocodes/module-importer": "^1.0.1", -+ "@nodelib/fs.walk": "^1.2.8", -+ "ajv": "^6.10.0", -+ "chalk": "^4.0.0", -+ "cross-spawn": "^7.0.2", -+ "debug": "^4.3.2", -+ "doctrine": "^3.0.0", -+ "escape-string-regexp": "^4.0.0", -+ "eslint-scope": "^7.1.1", -+ "eslint-utils": "^3.0.0", -+ "eslint-visitor-keys": "^3.3.0", -+ "espree": "^9.4.0", -+ "esquery": "^1.4.0", -+ "esutils": "^2.0.2", -+ "fast-deep-equal": "^3.1.3", -+ "file-entry-cache": "^6.0.1", -+ "find-up": "^5.0.0", -+ "glob-parent": "^6.0.2", -+ "globals": "^13.19.0", -+ "grapheme-splitter": "^1.0.4", -+ "ignore": "^5.2.0", -+ "import-fresh": "^3.0.0", -+ "imurmurhash": "^0.1.4", -+ "is-glob": "^4.0.0", -+ "is-path-inside": "^3.0.3", -+ "js-sdsl": "^4.1.4", -+ "js-yaml": "^4.1.0", -+ "json-stable-stringify-without-jsonify": "^1.0.1", -+ "levn": "^0.4.1", -+ "lodash.merge": "^4.6.2", -+ "minimatch": "^3.1.2", -+ "natural-compare": "^1.4.0", -+ "optionator": "^0.9.1", -+ "regexpp": "^3.2.0", -+ "strip-ansi": "^6.0.1", -+ "strip-json-comments": "^3.1.0", -+ "text-table": "^0.2.0" -+ }, -+ "bin": { -+ "eslint": "bin/eslint.js" -+ }, -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/eslint" -+ } -+ }, -+ "node_modules/eslint-config-next": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.1.1.tgz", -+ "integrity": "sha512-/5S2XGWlGaiqrRhzpn51ux5JUSLwx8PVK2keLi5xk7QmhfYB8PqE6R6SlVw6hgnf/VexvUXSrlNJ/su00NhtHQ==", -+ "dependencies": { -+ "@next/eslint-plugin-next": "13.1.1", -+ "@rushstack/eslint-patch": "^1.1.3", -+ "@typescript-eslint/parser": "^5.42.0", -+ "eslint-import-resolver-node": "^0.3.6", -+ "eslint-import-resolver-typescript": "^3.5.2", -+ "eslint-plugin-import": "^2.26.0", -+ "eslint-plugin-jsx-a11y": "^6.5.1", -+ "eslint-plugin-react": "^7.31.7", -+ "eslint-plugin-react-hooks": "^4.5.0" -+ }, -+ "peerDependencies": { -+ "eslint": "^7.23.0 || ^8.0.0", -+ "typescript": ">=3.3.1" -+ }, -+ "peerDependenciesMeta": { -+ "typescript": { -+ "optional": true -+ } -+ } -+ }, -+ "node_modules/eslint-import-resolver-node": { -+ "version": "0.3.6", -+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", -+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", -+ "dependencies": { -+ "debug": "^3.2.7", -+ "resolve": "^1.20.0" -+ } -+ }, -+ "node_modules/eslint-import-resolver-node/node_modules/debug": { -+ "version": "3.2.7", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", -+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", -+ "dependencies": { -+ "ms": "^2.1.1" -+ } -+ }, -+ "node_modules/eslint-import-resolver-typescript": { -+ "version": "3.5.2", -+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz", -+ "integrity": "sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==", -+ "dependencies": { -+ "debug": "^4.3.4", -+ "enhanced-resolve": "^5.10.0", -+ "get-tsconfig": "^4.2.0", -+ "globby": "^13.1.2", -+ "is-core-module": "^2.10.0", -+ "is-glob": "^4.0.3", -+ "synckit": "^0.8.4" -+ }, -+ "engines": { -+ "node": "^14.18.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" -+ }, -+ "peerDependencies": { -+ "eslint": "*", -+ "eslint-plugin-import": "*" -+ } -+ }, -+ "node_modules/eslint-import-resolver-typescript/node_modules/globby": { -+ "version": "13.1.3", -+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", -+ "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", -+ "dependencies": { -+ "dir-glob": "^3.0.1", -+ "fast-glob": "^3.2.11", -+ "ignore": "^5.2.0", -+ "merge2": "^1.4.1", -+ "slash": "^4.0.0" -+ }, -+ "engines": { -+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/eslint-import-resolver-typescript/node_modules/slash": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", -+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/eslint-module-utils": { -+ "version": "2.7.4", -+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", -+ "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", -+ "dependencies": { -+ "debug": "^3.2.7" -+ }, -+ "engines": { -+ "node": ">=4" -+ }, -+ "peerDependenciesMeta": { -+ "eslint": { -+ "optional": true -+ } -+ } -+ }, -+ "node_modules/eslint-module-utils/node_modules/debug": { -+ "version": "3.2.7", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", -+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", -+ "dependencies": { -+ "ms": "^2.1.1" -+ } -+ }, -+ "node_modules/eslint-plugin-import": { -+ "version": "2.26.0", -+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", -+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", -+ "dependencies": { -+ "array-includes": "^3.1.4", -+ "array.prototype.flat": "^1.2.5", -+ "debug": "^2.6.9", -+ "doctrine": "^2.1.0", -+ "eslint-import-resolver-node": "^0.3.6", -+ "eslint-module-utils": "^2.7.3", -+ "has": "^1.0.3", -+ "is-core-module": "^2.8.1", -+ "is-glob": "^4.0.3", -+ "minimatch": "^3.1.2", -+ "object.values": "^1.1.5", -+ "resolve": "^1.22.0", -+ "tsconfig-paths": "^3.14.1" -+ }, -+ "engines": { -+ "node": ">=4" -+ }, -+ "peerDependencies": { -+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" -+ } -+ }, -+ "node_modules/eslint-plugin-import/node_modules/debug": { -+ "version": "2.6.9", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", -+ "dependencies": { -+ "ms": "2.0.0" -+ } -+ }, -+ "node_modules/eslint-plugin-import/node_modules/doctrine": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", -+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", -+ "dependencies": { -+ "esutils": "^2.0.2" -+ }, -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/eslint-plugin-import/node_modules/ms": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" -+ }, -+ "node_modules/eslint-plugin-jsx-a11y": { -+ "version": "6.6.1", -+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", -+ "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", -+ "dependencies": { -+ "@babel/runtime": "^7.18.9", -+ "aria-query": "^4.2.2", -+ "array-includes": "^3.1.5", -+ "ast-types-flow": "^0.0.7", -+ "axe-core": "^4.4.3", -+ "axobject-query": "^2.2.0", -+ "damerau-levenshtein": "^1.0.8", -+ "emoji-regex": "^9.2.2", -+ "has": "^1.0.3", -+ "jsx-ast-utils": "^3.3.2", -+ "language-tags": "^1.0.5", -+ "minimatch": "^3.1.2", -+ "semver": "^6.3.0" -+ }, -+ "engines": { -+ "node": ">=4.0" -+ }, -+ "peerDependencies": { -+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" -+ } -+ }, -+ "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { -+ "version": "6.3.0", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "bin": { -+ "semver": "bin/semver.js" -+ } -+ }, -+ "node_modules/eslint-plugin-react": { -+ "version": "7.31.11", -+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz", -+ "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==", -+ "dependencies": { -+ "array-includes": "^3.1.6", -+ "array.prototype.flatmap": "^1.3.1", -+ "array.prototype.tosorted": "^1.1.1", -+ "doctrine": "^2.1.0", -+ "estraverse": "^5.3.0", -+ "jsx-ast-utils": "^2.4.1 || ^3.0.0", -+ "minimatch": "^3.1.2", -+ "object.entries": "^1.1.6", -+ "object.fromentries": "^2.0.6", -+ "object.hasown": "^1.1.2", -+ "object.values": "^1.1.6", -+ "prop-types": "^15.8.1", -+ "resolve": "^2.0.0-next.3", -+ "semver": "^6.3.0", -+ "string.prototype.matchall": "^4.0.8" -+ }, -+ "engines": { -+ "node": ">=4" -+ }, -+ "peerDependencies": { -+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" -+ } -+ }, -+ "node_modules/eslint-plugin-react-hooks": { -+ "version": "4.6.0", -+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", -+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", -+ "engines": { -+ "node": ">=10" -+ }, -+ "peerDependencies": { -+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" -+ } -+ }, -+ "node_modules/eslint-plugin-react/node_modules/doctrine": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", -+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", -+ "dependencies": { -+ "esutils": "^2.0.2" -+ }, -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/eslint-plugin-react/node_modules/resolve": { -+ "version": "2.0.0-next.4", -+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", -+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", -+ "dependencies": { -+ "is-core-module": "^2.9.0", -+ "path-parse": "^1.0.7", -+ "supports-preserve-symlinks-flag": "^1.0.0" -+ }, -+ "bin": { -+ "resolve": "bin/resolve" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/eslint-plugin-react/node_modules/semver": { -+ "version": "6.3.0", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", -+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", -+ "bin": { -+ "semver": "bin/semver.js" -+ } -+ }, -+ "node_modules/eslint-scope": { -+ "version": "7.1.1", -+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", -+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", -+ "dependencies": { -+ "esrecurse": "^4.3.0", -+ "estraverse": "^5.2.0" -+ }, -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ } -+ }, -+ "node_modules/eslint-utils": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", -+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", -+ "dependencies": { -+ "eslint-visitor-keys": "^2.0.0" -+ }, -+ "engines": { -+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/mysticatea" -+ }, -+ "peerDependencies": { -+ "eslint": ">=5" -+ } -+ }, -+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", -+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", -+ "engines": { -+ "node": ">=10" -+ } -+ }, -+ "node_modules/eslint-visitor-keys": { -+ "version": "3.3.0", -+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", -+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ } -+ }, -+ "node_modules/espree": { -+ "version": "9.4.1", -+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", -+ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", -+ "dependencies": { -+ "acorn": "^8.8.0", -+ "acorn-jsx": "^5.3.2", -+ "eslint-visitor-keys": "^3.3.0" -+ }, -+ "engines": { -+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/eslint" -+ } -+ }, -+ "node_modules/esquery": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", -+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", -+ "dependencies": { -+ "estraverse": "^5.1.0" -+ }, -+ "engines": { -+ "node": ">=0.10" -+ } -+ }, -+ "node_modules/esrecurse": { -+ "version": "4.3.0", -+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", -+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", -+ "dependencies": { -+ "estraverse": "^5.2.0" -+ }, -+ "engines": { -+ "node": ">=4.0" -+ } -+ }, -+ "node_modules/estraverse": { -+ "version": "5.3.0", -+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", -+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", -+ "engines": { -+ "node": ">=4.0" -+ } -+ }, -+ "node_modules/esutils": { -+ "version": "2.0.3", -+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", -+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/fast-deep-equal": { -+ "version": "3.1.3", -+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", -+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" -+ }, -+ "node_modules/fast-glob": { -+ "version": "3.2.12", -+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", -+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", -+ "dependencies": { -+ "@nodelib/fs.stat": "^2.0.2", -+ "@nodelib/fs.walk": "^1.2.3", -+ "glob-parent": "^5.1.2", -+ "merge2": "^1.3.0", -+ "micromatch": "^4.0.4" -+ }, -+ "engines": { -+ "node": ">=8.6.0" -+ } -+ }, -+ "node_modules/fast-glob/node_modules/glob-parent": { -+ "version": "5.1.2", -+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", -+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", -+ "dependencies": { -+ "is-glob": "^4.0.1" -+ }, -+ "engines": { -+ "node": ">= 6" -+ } -+ }, -+ "node_modules/fast-json-stable-stringify": { -+ "version": "2.1.0", -+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", -+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" -+ }, -+ "node_modules/fast-levenshtein": { -+ "version": "2.0.6", -+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", -+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" -+ }, -+ "node_modules/fastq": { -+ "version": "1.14.0", -+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", -+ "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", -+ "dependencies": { -+ "reusify": "^1.0.4" -+ } -+ }, -+ "node_modules/file-entry-cache": { -+ "version": "6.0.1", -+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", -+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", -+ "dependencies": { -+ "flat-cache": "^3.0.4" -+ }, -+ "engines": { -+ "node": "^10.12.0 || >=12.0.0" -+ } -+ }, -+ "node_modules/fill-range": { -+ "version": "7.0.1", -+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", -+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", -+ "dependencies": { -+ "to-regex-range": "^5.0.1" -+ }, -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/find-up": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", -+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", -+ "dependencies": { -+ "locate-path": "^6.0.0", -+ "path-exists": "^4.0.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/flat-cache": { -+ "version": "3.0.4", -+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", -+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", -+ "dependencies": { -+ "flatted": "^3.1.0", -+ "rimraf": "^3.0.2" -+ }, -+ "engines": { -+ "node": "^10.12.0 || >=12.0.0" -+ } -+ }, -+ "node_modules/flatted": { -+ "version": "3.2.7", -+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", -+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" -+ }, -+ "node_modules/fs.realpath": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", -+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" -+ }, -+ "node_modules/function-bind": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", -+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" -+ }, -+ "node_modules/function.prototype.name": { -+ "version": "1.1.5", -+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", -+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.3", -+ "es-abstract": "^1.19.0", -+ "functions-have-names": "^1.2.2" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/functions-have-names": { -+ "version": "1.2.3", -+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", -+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/get-intrinsic": { -+ "version": "1.1.3", -+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", -+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", -+ "dependencies": { -+ "function-bind": "^1.1.1", -+ "has": "^1.0.3", -+ "has-symbols": "^1.0.3" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/get-symbol-description": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", -+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "get-intrinsic": "^1.1.1" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/get-tsconfig": { -+ "version": "4.2.0", -+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.2.0.tgz", -+ "integrity": "sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==", -+ "funding": { -+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" -+ } -+ }, -+ "node_modules/glob": { -+ "version": "7.1.7", -+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", -+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", -+ "dependencies": { -+ "fs.realpath": "^1.0.0", -+ "inflight": "^1.0.4", -+ "inherits": "2", -+ "minimatch": "^3.0.4", -+ "once": "^1.3.0", -+ "path-is-absolute": "^1.0.0" -+ }, -+ "engines": { -+ "node": "*" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/glob-parent": { -+ "version": "6.0.2", -+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", -+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", -+ "dependencies": { -+ "is-glob": "^4.0.3" -+ }, -+ "engines": { -+ "node": ">=10.13.0" -+ } -+ }, -+ "node_modules/globals": { -+ "version": "13.19.0", -+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", -+ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", -+ "dependencies": { -+ "type-fest": "^0.20.2" -+ }, -+ "engines": { -+ "node": ">=8" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/globalyzer": { -+ "version": "0.1.0", -+ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", -+ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" -+ }, -+ "node_modules/globby": { -+ "version": "11.1.0", -+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", -+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", -+ "dependencies": { -+ "array-union": "^2.1.0", -+ "dir-glob": "^3.0.1", -+ "fast-glob": "^3.2.9", -+ "ignore": "^5.2.0", -+ "merge2": "^1.4.1", -+ "slash": "^3.0.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/globrex": { -+ "version": "0.1.2", -+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", -+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" -+ }, -+ "node_modules/gopd": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", -+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", -+ "dependencies": { -+ "get-intrinsic": "^1.1.3" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/graceful-fs": { -+ "version": "4.2.10", -+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", -+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" -+ }, -+ "node_modules/grapheme-splitter": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", -+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" -+ }, -+ "node_modules/has": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", -+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", -+ "dependencies": { -+ "function-bind": "^1.1.1" -+ }, -+ "engines": { -+ "node": ">= 0.4.0" -+ } -+ }, -+ "node_modules/has-bigints": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", -+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/has-flag": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", -+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/has-property-descriptors": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", -+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", -+ "dependencies": { -+ "get-intrinsic": "^1.1.1" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/has-symbols": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", -+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/has-tostringtag": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", -+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", -+ "dependencies": { -+ "has-symbols": "^1.0.2" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/ignore": { -+ "version": "5.2.4", -+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", -+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", -+ "engines": { -+ "node": ">= 4" -+ } -+ }, -+ "node_modules/import-fresh": { -+ "version": "3.3.0", -+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", -+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", -+ "dependencies": { -+ "parent-module": "^1.0.0", -+ "resolve-from": "^4.0.0" -+ }, -+ "engines": { -+ "node": ">=6" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/imurmurhash": { -+ "version": "0.1.4", -+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", -+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", -+ "engines": { -+ "node": ">=0.8.19" -+ } -+ }, -+ "node_modules/inflight": { -+ "version": "1.0.6", -+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", -+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", -+ "dependencies": { -+ "once": "^1.3.0", -+ "wrappy": "1" -+ } -+ }, -+ "node_modules/inherits": { -+ "version": "2.0.4", -+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", -+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" -+ }, -+ "node_modules/internal-slot": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", -+ "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", -+ "dependencies": { -+ "get-intrinsic": "^1.1.3", -+ "has": "^1.0.3", -+ "side-channel": "^1.0.4" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ } -+ }, -+ "node_modules/is-bigint": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", -+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", -+ "dependencies": { -+ "has-bigints": "^1.0.1" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-boolean-object": { -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", -+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "has-tostringtag": "^1.0.0" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-callable": { -+ "version": "1.2.7", -+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", -+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-core-module": { -+ "version": "2.11.0", -+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", -+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", -+ "dependencies": { -+ "has": "^1.0.3" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-date-object": { -+ "version": "1.0.5", -+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", -+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", -+ "dependencies": { -+ "has-tostringtag": "^1.0.0" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-docker": { -+ "version": "2.2.1", -+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", -+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", -+ "bin": { -+ "is-docker": "cli.js" -+ }, -+ "engines": { -+ "node": ">=8" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/is-extglob": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", -+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/is-glob": { -+ "version": "4.0.3", -+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", -+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", -+ "dependencies": { -+ "is-extglob": "^2.1.1" -+ }, -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/is-negative-zero": { -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", -+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-number": { -+ "version": "7.0.0", -+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", -+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", -+ "engines": { -+ "node": ">=0.12.0" -+ } -+ }, -+ "node_modules/is-number-object": { -+ "version": "1.0.7", -+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", -+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", -+ "dependencies": { -+ "has-tostringtag": "^1.0.0" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-path-inside": { -+ "version": "3.0.3", -+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", -+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/is-regex": { -+ "version": "1.1.4", -+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", -+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "has-tostringtag": "^1.0.0" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-shared-array-buffer": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", -+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", -+ "dependencies": { -+ "call-bind": "^1.0.2" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-string": { -+ "version": "1.0.7", -+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", -+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", -+ "dependencies": { -+ "has-tostringtag": "^1.0.0" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-symbol": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", -+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", -+ "dependencies": { -+ "has-symbols": "^1.0.2" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-weakref": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", -+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", -+ "dependencies": { -+ "call-bind": "^1.0.2" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/is-wsl": { -+ "version": "2.2.0", -+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", -+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", -+ "dependencies": { -+ "is-docker": "^2.0.0" -+ }, -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/isexe": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", -+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" -+ }, -+ "node_modules/js-sdsl": { -+ "version": "4.2.0", -+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", -+ "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", -+ "funding": { -+ "type": "opencollective", -+ "url": "https://opencollective.com/js-sdsl" -+ } -+ }, -+ "node_modules/js-tokens": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", -+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" -+ }, -+ "node_modules/js-yaml": { -+ "version": "4.1.0", -+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", -+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", -+ "dependencies": { -+ "argparse": "^2.0.1" -+ }, -+ "bin": { -+ "js-yaml": "bin/js-yaml.js" -+ } -+ }, -+ "node_modules/json-schema-traverse": { -+ "version": "0.4.1", -+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", -+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" -+ }, -+ "node_modules/json-stable-stringify-without-jsonify": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", -+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" -+ }, -+ "node_modules/json5": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", -+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", -+ "dependencies": { -+ "minimist": "^1.2.0" -+ }, -+ "bin": { -+ "json5": "lib/cli.js" -+ } -+ }, -+ "node_modules/jsx-ast-utils": { -+ "version": "3.3.3", -+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", -+ "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", -+ "dependencies": { -+ "array-includes": "^3.1.5", -+ "object.assign": "^4.1.3" -+ }, -+ "engines": { -+ "node": ">=4.0" -+ } -+ }, -+ "node_modules/language-subtag-registry": { -+ "version": "0.3.22", -+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", -+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" -+ }, -+ "node_modules/language-tags": { -+ "version": "1.0.7", -+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.7.tgz", -+ "integrity": "sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw==", -+ "dependencies": { -+ "language-subtag-registry": "^0.3.20" -+ } -+ }, -+ "node_modules/levn": { -+ "version": "0.4.1", -+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", -+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", -+ "dependencies": { -+ "prelude-ls": "^1.2.1", -+ "type-check": "~0.4.0" -+ }, -+ "engines": { -+ "node": ">= 0.8.0" -+ } -+ }, -+ "node_modules/locate-path": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", -+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", -+ "dependencies": { -+ "p-locate": "^5.0.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/lodash.merge": { -+ "version": "4.6.2", -+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", -+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" -+ }, -+ "node_modules/loose-envify": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", -+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", -+ "dependencies": { -+ "js-tokens": "^3.0.0 || ^4.0.0" -+ }, -+ "bin": { -+ "loose-envify": "cli.js" -+ } -+ }, -+ "node_modules/lru-cache": { -+ "version": "6.0.0", -+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", -+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", -+ "dependencies": { -+ "yallist": "^4.0.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ } -+ }, -+ "node_modules/merge2": { -+ "version": "1.4.1", -+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", -+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", -+ "engines": { -+ "node": ">= 8" -+ } -+ }, -+ "node_modules/micromatch": { -+ "version": "4.0.5", -+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", -+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", -+ "dependencies": { -+ "braces": "^3.0.2", -+ "picomatch": "^2.3.1" -+ }, -+ "engines": { -+ "node": ">=8.6" -+ } -+ }, -+ "node_modules/minimatch": { -+ "version": "3.1.2", -+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", -+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", -+ "dependencies": { -+ "brace-expansion": "^1.1.7" -+ }, -+ "engines": { -+ "node": "*" -+ } -+ }, -+ "node_modules/minimist": { -+ "version": "1.2.7", -+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", -+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/ms": { -+ "version": "2.1.2", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", -+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" -+ }, -+ "node_modules/nanoid": { -+ "version": "3.3.4", -+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", -+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", -+ "bin": { -+ "nanoid": "bin/nanoid.cjs" -+ }, -+ "engines": { -+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" -+ } -+ }, -+ "node_modules/natural-compare": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", -+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" -+ }, -+ "node_modules/next": { -+ "version": "13.1.1", -+ "resolved": "https://registry.npmjs.org/next/-/next-13.1.1.tgz", -+ "integrity": "sha512-R5eBAaIa3X7LJeYvv1bMdGnAVF4fVToEjim7MkflceFPuANY3YyvFxXee/A+acrSYwYPvOvf7f6v/BM/48ea5w==", -+ "dependencies": { -+ "@next/env": "13.1.1", -+ "@swc/helpers": "0.4.14", -+ "caniuse-lite": "^1.0.30001406", -+ "postcss": "8.4.14", -+ "styled-jsx": "5.1.1" -+ }, -+ "bin": { -+ "next": "dist/bin/next" -+ }, -+ "engines": { -+ "node": ">=14.6.0" -+ }, -+ "optionalDependencies": { -+ "@next/swc-android-arm-eabi": "13.1.1", -+ "@next/swc-android-arm64": "13.1.1", -+ "@next/swc-darwin-arm64": "13.1.1", -+ "@next/swc-darwin-x64": "13.1.1", -+ "@next/swc-freebsd-x64": "13.1.1", -+ "@next/swc-linux-arm-gnueabihf": "13.1.1", -+ "@next/swc-linux-arm64-gnu": "13.1.1", -+ "@next/swc-linux-arm64-musl": "13.1.1", -+ "@next/swc-linux-x64-gnu": "13.1.1", -+ "@next/swc-linux-x64-musl": "13.1.1", -+ "@next/swc-win32-arm64-msvc": "13.1.1", -+ "@next/swc-win32-ia32-msvc": "13.1.1", -+ "@next/swc-win32-x64-msvc": "13.1.1" -+ }, -+ "peerDependencies": { -+ "fibers": ">= 3.1.0", -+ "node-sass": "^6.0.0 || ^7.0.0", -+ "react": "^18.2.0", -+ "react-dom": "^18.2.0", -+ "sass": "^1.3.0" -+ }, -+ "peerDependenciesMeta": { -+ "fibers": { -+ "optional": true -+ }, -+ "node-sass": { -+ "optional": true -+ }, -+ "sass": { -+ "optional": true -+ } -+ } -+ }, -+ "node_modules/object-assign": { -+ "version": "4.1.1", -+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", -+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/object-inspect": { -+ "version": "1.12.2", -+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", -+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/object-keys": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", -+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", -+ "engines": { -+ "node": ">= 0.4" -+ } -+ }, -+ "node_modules/object.assign": { -+ "version": "4.1.4", -+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", -+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "has-symbols": "^1.0.3", -+ "object-keys": "^1.1.1" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/object.entries": { -+ "version": "1.1.6", -+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", -+ "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ } -+ }, -+ "node_modules/object.fromentries": { -+ "version": "2.0.6", -+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", -+ "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/object.hasown": { -+ "version": "1.1.2", -+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", -+ "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", -+ "dependencies": { -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/object.values": { -+ "version": "1.1.6", -+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", -+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/once": { -+ "version": "1.4.0", -+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", -+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", -+ "dependencies": { -+ "wrappy": "1" -+ } -+ }, -+ "node_modules/open": { -+ "version": "8.4.0", -+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", -+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", -+ "dependencies": { -+ "define-lazy-prop": "^2.0.0", -+ "is-docker": "^2.1.1", -+ "is-wsl": "^2.2.0" -+ }, -+ "engines": { -+ "node": ">=12" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/optionator": { -+ "version": "0.9.1", -+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", -+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", -+ "dependencies": { -+ "deep-is": "^0.1.3", -+ "fast-levenshtein": "^2.0.6", -+ "levn": "^0.4.1", -+ "prelude-ls": "^1.2.1", -+ "type-check": "^0.4.0", -+ "word-wrap": "^1.2.3" -+ }, -+ "engines": { -+ "node": ">= 0.8.0" -+ } -+ }, -+ "node_modules/p-limit": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", -+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", -+ "dependencies": { -+ "yocto-queue": "^0.1.0" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/p-locate": { -+ "version": "5.0.0", -+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", -+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", -+ "dependencies": { -+ "p-limit": "^3.0.2" -+ }, -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/parent-module": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", -+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", -+ "dependencies": { -+ "callsites": "^3.0.0" -+ }, -+ "engines": { -+ "node": ">=6" -+ } -+ }, -+ "node_modules/path-exists": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", -+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/path-is-absolute": { -+ "version": "1.0.1", -+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", -+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/path-key": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", -+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/path-parse": { -+ "version": "1.0.7", -+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", -+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" -+ }, -+ "node_modules/path-type": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", -+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/picocolors": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", -+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" -+ }, -+ "node_modules/picomatch": { -+ "version": "2.3.1", -+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", -+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", -+ "engines": { -+ "node": ">=8.6" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/jonschlinkert" -+ } -+ }, -+ "node_modules/postcss": { -+ "version": "8.4.14", -+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", -+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", -+ "funding": [ -+ { -+ "type": "opencollective", -+ "url": "https://opencollective.com/postcss/" -+ }, -+ { -+ "type": "tidelift", -+ "url": "https://tidelift.com/funding/github/npm/postcss" -+ } -+ ], -+ "dependencies": { -+ "nanoid": "^3.3.4", -+ "picocolors": "^1.0.0", -+ "source-map-js": "^1.0.2" -+ }, -+ "engines": { -+ "node": "^10 || ^12 || >=14" -+ } -+ }, -+ "node_modules/prelude-ls": { -+ "version": "1.2.1", -+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", -+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", -+ "engines": { -+ "node": ">= 0.8.0" -+ } -+ }, -+ "node_modules/prettier": { -+ "version": "2.8.1", -+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", -+ "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", -+ "dev": true, -+ "bin": { -+ "prettier": "bin-prettier.js" -+ }, -+ "engines": { -+ "node": ">=10.13.0" -+ }, -+ "funding": { -+ "url": "https://github.com/prettier/prettier?sponsor=1" -+ } -+ }, -+ "node_modules/prop-types": { -+ "version": "15.8.1", -+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", -+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", -+ "dependencies": { -+ "loose-envify": "^1.4.0", -+ "object-assign": "^4.1.1", -+ "react-is": "^16.13.1" -+ } -+ }, -+ "node_modules/punycode": { -+ "version": "2.1.1", -+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", -+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", -+ "engines": { -+ "node": ">=6" -+ } -+ }, -+ "node_modules/queue-microtask": { -+ "version": "1.2.3", -+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", -+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", -+ "funding": [ -+ { -+ "type": "github", -+ "url": "https://github.com/sponsors/feross" -+ }, -+ { -+ "type": "patreon", -+ "url": "https://www.patreon.com/feross" -+ }, -+ { -+ "type": "consulting", -+ "url": "https://feross.org/support" -+ } -+ ] -+ }, -+ "node_modules/react": { -+ "version": "18.2.0", -+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", -+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", -+ "dependencies": { -+ "loose-envify": "^1.1.0" -+ }, -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/react-dom": { -+ "version": "18.2.0", -+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", -+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", -+ "dependencies": { -+ "loose-envify": "^1.1.0", -+ "scheduler": "^0.23.0" -+ }, -+ "peerDependencies": { -+ "react": "^18.2.0" -+ } -+ }, -+ "node_modules/react-is": { -+ "version": "16.13.1", -+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", -+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" -+ }, -+ "node_modules/regenerator-runtime": { -+ "version": "0.13.11", -+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", -+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" -+ }, -+ "node_modules/regexp.prototype.flags": { -+ "version": "1.4.3", -+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", -+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.3", -+ "functions-have-names": "^1.2.2" -+ }, -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/regexpp": { -+ "version": "3.2.0", -+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", -+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", -+ "engines": { -+ "node": ">=8" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/mysticatea" -+ } -+ }, -+ "node_modules/resolve": { -+ "version": "1.22.1", -+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", -+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", -+ "dependencies": { -+ "is-core-module": "^2.9.0", -+ "path-parse": "^1.0.7", -+ "supports-preserve-symlinks-flag": "^1.0.0" -+ }, -+ "bin": { -+ "resolve": "bin/resolve" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/resolve-from": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", -+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", -+ "engines": { -+ "node": ">=4" -+ } -+ }, -+ "node_modules/reusify": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", -+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", -+ "engines": { -+ "iojs": ">=1.0.0", -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/rimraf": { -+ "version": "3.0.2", -+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", -+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", -+ "dependencies": { -+ "glob": "^7.1.3" -+ }, -+ "bin": { -+ "rimraf": "bin.js" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/isaacs" -+ } -+ }, -+ "node_modules/run-parallel": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", -+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", -+ "funding": [ -+ { -+ "type": "github", -+ "url": "https://github.com/sponsors/feross" -+ }, -+ { -+ "type": "patreon", -+ "url": "https://www.patreon.com/feross" -+ }, -+ { -+ "type": "consulting", -+ "url": "https://feross.org/support" -+ } -+ ], -+ "dependencies": { -+ "queue-microtask": "^1.2.2" -+ } -+ }, -+ "node_modules/safe-regex-test": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", -+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "get-intrinsic": "^1.1.3", -+ "is-regex": "^1.1.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/scheduler": { -+ "version": "0.23.0", -+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", -+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", -+ "dependencies": { -+ "loose-envify": "^1.1.0" -+ } -+ }, -+ "node_modules/semver": { -+ "version": "7.3.8", -+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", -+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", -+ "dependencies": { -+ "lru-cache": "^6.0.0" -+ }, -+ "bin": { -+ "semver": "bin/semver.js" -+ }, -+ "engines": { -+ "node": ">=10" -+ } -+ }, -+ "node_modules/shebang-command": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", -+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", -+ "dependencies": { -+ "shebang-regex": "^3.0.0" -+ }, -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/shebang-regex": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", -+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/side-channel": { -+ "version": "1.0.4", -+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", -+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", -+ "dependencies": { -+ "call-bind": "^1.0.0", -+ "get-intrinsic": "^1.0.2", -+ "object-inspect": "^1.9.0" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/slash": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", -+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/source-map-js": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", -+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/string.prototype.matchall": { -+ "version": "4.0.8", -+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", -+ "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4", -+ "get-intrinsic": "^1.1.3", -+ "has-symbols": "^1.0.3", -+ "internal-slot": "^1.0.3", -+ "regexp.prototype.flags": "^1.4.3", -+ "side-channel": "^1.0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/string.prototype.trimend": { -+ "version": "1.0.6", -+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", -+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/string.prototype.trimstart": { -+ "version": "1.0.6", -+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", -+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "define-properties": "^1.1.4", -+ "es-abstract": "^1.20.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/strip-ansi": { -+ "version": "6.0.1", -+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", -+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", -+ "dependencies": { -+ "ansi-regex": "^5.0.1" -+ }, -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/strip-bom": { -+ "version": "3.0.0", -+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", -+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", -+ "engines": { -+ "node": ">=4" -+ } -+ }, -+ "node_modules/strip-json-comments": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", -+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", -+ "engines": { -+ "node": ">=8" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/styled-jsx": { -+ "version": "5.1.1", -+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", -+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", -+ "dependencies": { -+ "client-only": "0.0.1" -+ }, -+ "engines": { -+ "node": ">= 12.0.0" -+ }, -+ "peerDependencies": { -+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" -+ }, -+ "peerDependenciesMeta": { -+ "@babel/core": { -+ "optional": true -+ }, -+ "babel-plugin-macros": { -+ "optional": true -+ } -+ } -+ }, -+ "node_modules/supports-color": { -+ "version": "7.2.0", -+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", -+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", -+ "dependencies": { -+ "has-flag": "^4.0.0" -+ }, -+ "engines": { -+ "node": ">=8" -+ } -+ }, -+ "node_modules/supports-preserve-symlinks-flag": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", -+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", -+ "engines": { -+ "node": ">= 0.4" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/synckit": { -+ "version": "0.8.4", -+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz", -+ "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==", -+ "dependencies": { -+ "@pkgr/utils": "^2.3.1", -+ "tslib": "^2.4.0" -+ }, -+ "engines": { -+ "node": "^14.18.0 || >=16.0.0" -+ }, -+ "funding": { -+ "url": "https://opencollective.com/unts" -+ } -+ }, -+ "node_modules/tapable": { -+ "version": "2.2.1", -+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", -+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", -+ "engines": { -+ "node": ">=6" -+ } -+ }, -+ "node_modules/text-table": { -+ "version": "0.2.0", -+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", -+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" -+ }, -+ "node_modules/tiny-glob": { -+ "version": "0.2.9", -+ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", -+ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", -+ "dependencies": { -+ "globalyzer": "0.1.0", -+ "globrex": "^0.1.2" -+ } -+ }, -+ "node_modules/to-regex-range": { -+ "version": "5.0.1", -+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", -+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", -+ "dependencies": { -+ "is-number": "^7.0.0" -+ }, -+ "engines": { -+ "node": ">=8.0" -+ } -+ }, -+ "node_modules/tsconfig-paths": { -+ "version": "3.14.1", -+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", -+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", -+ "dependencies": { -+ "@types/json5": "^0.0.29", -+ "json5": "^1.0.1", -+ "minimist": "^1.2.6", -+ "strip-bom": "^3.0.0" -+ } -+ }, -+ "node_modules/tslib": { -+ "version": "2.4.1", -+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", -+ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" -+ }, -+ "node_modules/tsutils": { -+ "version": "3.21.0", -+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", -+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", -+ "dependencies": { -+ "tslib": "^1.8.1" -+ }, -+ "engines": { -+ "node": ">= 6" -+ }, -+ "peerDependencies": { -+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" -+ } -+ }, -+ "node_modules/tsutils/node_modules/tslib": { -+ "version": "1.14.1", -+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", -+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" -+ }, -+ "node_modules/type-check": { -+ "version": "0.4.0", -+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", -+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", -+ "dependencies": { -+ "prelude-ls": "^1.2.1" -+ }, -+ "engines": { -+ "node": ">= 0.8.0" -+ } -+ }, -+ "node_modules/type-fest": { -+ "version": "0.20.2", -+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", -+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ }, -+ "node_modules/typescript": { -+ "version": "4.9.4", -+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", -+ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", -+ "bin": { -+ "tsc": "bin/tsc", -+ "tsserver": "bin/tsserver" -+ }, -+ "engines": { -+ "node": ">=4.2.0" -+ } -+ }, -+ "node_modules/unbox-primitive": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", -+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", -+ "dependencies": { -+ "call-bind": "^1.0.2", -+ "has-bigints": "^1.0.2", -+ "has-symbols": "^1.0.3", -+ "which-boxed-primitive": "^1.0.2" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/uri-js": { -+ "version": "4.4.1", -+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", -+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", -+ "dependencies": { -+ "punycode": "^2.1.0" -+ } -+ }, -+ "node_modules/which": { -+ "version": "2.0.2", -+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", -+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", -+ "dependencies": { -+ "isexe": "^2.0.0" -+ }, -+ "bin": { -+ "node-which": "bin/node-which" -+ }, -+ "engines": { -+ "node": ">= 8" -+ } -+ }, -+ "node_modules/which-boxed-primitive": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", -+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", -+ "dependencies": { -+ "is-bigint": "^1.0.1", -+ "is-boolean-object": "^1.1.0", -+ "is-number-object": "^1.0.4", -+ "is-string": "^1.0.5", -+ "is-symbol": "^1.0.3" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/ljharb" -+ } -+ }, -+ "node_modules/word-wrap": { -+ "version": "1.2.3", -+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", -+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", -+ "engines": { -+ "node": ">=0.10.0" -+ } -+ }, -+ "node_modules/wrappy": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", -+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" -+ }, -+ "node_modules/yallist": { -+ "version": "4.0.0", -+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", -+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" -+ }, -+ "node_modules/yocto-queue": { -+ "version": "0.1.0", -+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", -+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", -+ "engines": { -+ "node": ">=10" -+ }, -+ "funding": { -+ "url": "https://github.com/sponsors/sindresorhus" -+ } -+ } -+ } -+} -diff --git a/js/test/nextjs/package.json b/js/test/nextjs/package.json -new file mode 100644 -index 0000000..f57e111 ---- /dev/null -+++ b/js/test/nextjs/package.json -@@ -0,0 +1,28 @@ -+{ -+ "name": "shine-nextjs-test-app", -+ "version": "0.1.0", -+ "private": true, -+ "scripts": { -+ "dev": "next dev", -+ "lint": "next lint --fix", -+ "build": "next build && next export && touch out/.nojekyll", -+ "format": "prettier '**/*.{ts,tsx,js,jsx}' --write", -+ "typecheck": "tsc --noEmit" -+ }, -+ "dependencies": { -+ "@next/font": "13.1.1", -+ "@toots/shine.js": "file:../..", -+ "@types/node": "18.11.18", -+ "@types/react": "18.0.26", -+ "@types/react-dom": "18.0.10", -+ "eslint": "8.31.0", -+ "eslint-config-next": "13.1.1", -+ "next": "13.1.1", -+ "react": "18.2.0", -+ "react-dom": "18.2.0", -+ "typescript": "4.9.4" -+ }, -+ "devDependencies": { -+ "prettier": "^2.8.1" -+ } -+} -diff --git a/js/test/nextjs/pages/index.tsx b/js/test/nextjs/pages/index.tsx -new file mode 100644 -index 0000000..4bf771a ---- /dev/null -+++ b/js/test/nextjs/pages/index.tsx -@@ -0,0 +1,50 @@ -+import { Fragment, useEffect, useState, useCallback } from "react" -+import { runEncodeTest } from "@shine/lib/encode" -+import { runRoundsTest } from "@shine/lib/rounds" -+ -+const logEntries: string[] = [] -+let encoderStarted = false -+ -+export default function Home() { -+ const [logs, setLogs] = useState(logEntries) -+ const [encodedBlobUrl, setEncodedBlobUrl] = useState<string | undefined>() -+ -+ const log = useCallback( -+ (entry: string) => { -+ logEntries.push(entry) -+ setLogs(logEntries) -+ }, -+ [setLogs] -+ ) -+ -+ useEffect(() => { -+ if (encoderStarted) return -+ -+ runEncodeTest(log, blob => { -+ if (!encodedBlobUrl) setEncodedBlobUrl(URL.createObjectURL(blob)) -+ -+ log("") -+ runRoundsTest(log) -+ }) -+ -+ encoderStarted = true -+ }, [log, encodedBlobUrl, setEncodedBlobUrl]) -+ -+ return ( -+ <> -+ {encodedBlobUrl && ( -+ <a href={encodedBlobUrl} download='encoded.mp3'> -+ Download encoded file -+ </a> -+ )} -+ <div> -+ {logs.map(entry => ( -+ <Fragment key={entry}> -+ {entry} -+ <br /> -+ </Fragment> -+ ))} -+ </div> -+ </> -+ ) -+} -diff --git a/js/test/nextjs/pnpm-lock.yaml b/js/test/nextjs/pnpm-lock.yaml -new file mode 100644 -index 0000000..562cc68 ---- /dev/null -+++ b/js/test/nextjs/pnpm-lock.yaml -@@ -0,0 +1,2032 @@ -+lockfileVersion: 5.4 -+ -+specifiers: -+ '@next/font': 13.1.1 -+ '@toots/shine.js': file:../.. -+ '@types/node': 18.11.18 -+ '@types/react': 18.0.26 -+ '@types/react-dom': 18.0.10 -+ eslint: 8.31.0 -+ eslint-config-next: 13.1.1 -+ next: 13.1.1 -+ prettier: ^2.8.1 -+ react: 18.2.0 -+ react-dom: 18.2.0 -+ typescript: 4.9.4 -+ -+dependencies: -+ '@next/font': 13.1.1 -+ '@toots/shine.js': file:../.. -+ '@types/node': 18.11.18 -+ '@types/react': 18.0.26 -+ '@types/react-dom': 18.0.10 -+ eslint: 8.31.0 -+ eslint-config-next: 13.1.1_iukboom6ndih5an6iafl45j2fe -+ next: 13.1.1_biqbaboplfbrettd7655fr4n2y -+ react: 18.2.0 -+ react-dom: 18.2.0_react@18.2.0 -+ typescript: 4.9.4 -+ -+devDependencies: -+ prettier: 2.8.1 -+ -+packages: -+ -+ /@babel/runtime-corejs3/7.20.7: -+ resolution: {integrity: sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==} -+ engines: {node: '>=6.9.0'} -+ dependencies: -+ core-js-pure: 3.27.1 -+ regenerator-runtime: 0.13.11 -+ dev: false -+ -+ /@babel/runtime/7.20.7: -+ resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==} -+ engines: {node: '>=6.9.0'} -+ dependencies: -+ regenerator-runtime: 0.13.11 -+ dev: false -+ -+ /@eslint/eslintrc/1.4.1: -+ resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} -+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} -+ dependencies: -+ ajv: 6.12.6 -+ debug: 4.3.4 -+ espree: 9.4.1 -+ globals: 13.19.0 -+ ignore: 5.2.4 -+ import-fresh: 3.3.0 -+ js-yaml: 4.1.0 -+ minimatch: 3.1.2 -+ strip-json-comments: 3.1.1 -+ transitivePeerDependencies: -+ - supports-color -+ dev: false -+ -+ /@humanwhocodes/config-array/0.11.8: -+ resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} -+ engines: {node: '>=10.10.0'} -+ dependencies: -+ '@humanwhocodes/object-schema': 1.2.1 -+ debug: 4.3.4 -+ minimatch: 3.1.2 -+ transitivePeerDependencies: -+ - supports-color -+ dev: false -+ -+ /@humanwhocodes/module-importer/1.0.1: -+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} -+ engines: {node: '>=12.22'} -+ dev: false -+ -+ /@humanwhocodes/object-schema/1.2.1: -+ resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} -+ dev: false -+ -+ /@next/env/13.1.1: -+ resolution: {integrity: sha512-vFMyXtPjSAiOXOywMojxfKIqE3VWN5RCAx+tT3AS3pcKjMLFTCJFUWsKv8hC+87Z1F4W3r68qTwDFZIFmd5Xkw==} -+ dev: false -+ -+ /@next/eslint-plugin-next/13.1.1: -+ resolution: {integrity: sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ==} -+ dependencies: -+ glob: 7.1.7 -+ dev: false -+ -+ /@next/font/13.1.1: -+ resolution: {integrity: sha512-amygRorS05hYK1/XQRZo5qBl7l2fpHnezeKU/cNveWU5QJg+sg8gMGkUXHtvesNKpiKIJshBRH1TzvO+2sKpvQ==} -+ dev: false -+ -+ /@next/swc-android-arm-eabi/13.1.1: -+ resolution: {integrity: sha512-qnFCx1kT3JTWhWve4VkeWuZiyjG0b5T6J2iWuin74lORCupdrNukxkq9Pm+Z7PsatxuwVJMhjUoYz7H4cWzx2A==} -+ engines: {node: '>= 10'} -+ cpu: [arm] -+ os: [android] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-android-arm64/13.1.1: -+ resolution: {integrity: sha512-eCiZhTzjySubNqUnNkQCjU3Fh+ep3C6b5DCM5FKzsTH/3Gr/4Y7EiaPZKILbvnXmhWtKPIdcY6Zjx51t4VeTfA==} -+ engines: {node: '>= 10'} -+ cpu: [arm64] -+ os: [android] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-darwin-arm64/13.1.1: -+ resolution: {integrity: sha512-9zRJSSIwER5tu9ADDkPw5rIZ+Np44HTXpYMr0rkM656IvssowPxmhK0rTreC1gpUCYwFsRbxarUJnJsTWiutPg==} -+ engines: {node: '>= 10'} -+ cpu: [arm64] -+ os: [darwin] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-darwin-x64/13.1.1: -+ resolution: {integrity: sha512-qWr9qEn5nrnlhB0rtjSdR00RRZEtxg4EGvicIipqZWEyayPxhUu6NwKiG8wZiYZCLfJ5KWr66PGSNeDMGlNaiA==} -+ engines: {node: '>= 10'} -+ cpu: [x64] -+ os: [darwin] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-freebsd-x64/13.1.1: -+ resolution: {integrity: sha512-UwP4w/NcQ7V/VJEj3tGVszgb4pyUCt3lzJfUhjDMUmQbzG9LDvgiZgAGMYH6L21MoyAATJQPDGiAMWAPKsmumA==} -+ engines: {node: '>= 10'} -+ cpu: [x64] -+ os: [freebsd] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-linux-arm-gnueabihf/13.1.1: -+ resolution: {integrity: sha512-CnsxmKHco9sosBs1XcvCXP845Db+Wx1G0qouV5+Gr+HT/ZlDYEWKoHVDgnJXLVEQzq4FmHddBNGbXvgqM1Gfkg==} -+ engines: {node: '>= 10'} -+ cpu: [arm] -+ os: [linux] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-linux-arm64-gnu/13.1.1: -+ resolution: {integrity: sha512-JfDq1eri5Dif+VDpTkONRd083780nsMCOKoFG87wA0sa4xL8LGcXIBAkUGIC1uVy9SMsr2scA9CySLD/i+Oqiw==} -+ engines: {node: '>= 10'} -+ cpu: [arm64] -+ os: [linux] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-linux-arm64-musl/13.1.1: -+ resolution: {integrity: sha512-GA67ZbDq2AW0CY07zzGt07M5b5Yaq5qUpFIoW3UFfjOPgb0Sqf3DAW7GtFMK1sF4ROHsRDMGQ9rnT0VM2dVfKA==} -+ engines: {node: '>= 10'} -+ cpu: [arm64] -+ os: [linux] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-linux-x64-gnu/13.1.1: -+ resolution: {integrity: sha512-nnjuBrbzvqaOJaV+XgT8/+lmXrSCOt1YYZn/irbDb2fR2QprL6Q7WJNgwsZNxiLSfLdv+2RJGGegBx9sLBEzGA==} -+ engines: {node: '>= 10'} -+ cpu: [x64] -+ os: [linux] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-linux-x64-musl/13.1.1: -+ resolution: {integrity: sha512-CM9xnAQNIZ8zf/igbIT/i3xWbQZYaF397H+JroF5VMOCUleElaMdQLL5riJml8wUfPoN3dtfn2s4peSr3azz/g==} -+ engines: {node: '>= 10'} -+ cpu: [x64] -+ os: [linux] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-win32-arm64-msvc/13.1.1: -+ resolution: {integrity: sha512-pzUHOGrbgfGgPlOMx9xk3QdPJoRPU+om84hqVoe6u+E0RdwOG0Ho/2UxCgDqmvpUrMab1Deltlt6RqcXFpnigQ==} -+ engines: {node: '>= 10'} -+ cpu: [arm64] -+ os: [win32] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-win32-ia32-msvc/13.1.1: -+ resolution: {integrity: sha512-WeX8kVS46aobM9a7Xr/kEPcrTyiwJqQv/tbw6nhJ4fH9xNZ+cEcyPoQkwPo570dCOLz3Zo9S2q0E6lJ/EAUOBg==} -+ engines: {node: '>= 10'} -+ cpu: [ia32] -+ os: [win32] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@next/swc-win32-x64-msvc/13.1.1: -+ resolution: {integrity: sha512-mVF0/3/5QAc5EGVnb8ll31nNvf3BWpPY4pBb84tk+BfQglWLqc5AC9q1Ht/YMWiEgs8ALNKEQ3GQnbY0bJF2Gg==} -+ engines: {node: '>= 10'} -+ cpu: [x64] -+ os: [win32] -+ requiresBuild: true -+ dev: false -+ optional: true -+ -+ /@nodelib/fs.scandir/2.1.5: -+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} -+ engines: {node: '>= 8'} -+ dependencies: -+ '@nodelib/fs.stat': 2.0.5 -+ run-parallel: 1.2.0 -+ dev: false -+ -+ /@nodelib/fs.stat/2.0.5: -+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} -+ engines: {node: '>= 8'} -+ dev: false -+ -+ /@nodelib/fs.walk/1.2.8: -+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} -+ engines: {node: '>= 8'} -+ dependencies: -+ '@nodelib/fs.scandir': 2.1.5 -+ fastq: 1.14.0 -+ dev: false -+ -+ /@pkgr/utils/2.3.1: -+ resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} -+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} -+ dependencies: -+ cross-spawn: 7.0.3 -+ is-glob: 4.0.3 -+ open: 8.4.0 -+ picocolors: 1.0.0 -+ tiny-glob: 0.2.9 -+ tslib: 2.4.1 -+ dev: false -+ -+ /@rushstack/eslint-patch/1.2.0: -+ resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} -+ dev: false -+ -+ /@swc/helpers/0.4.14: -+ resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} -+ dependencies: -+ tslib: 2.4.1 -+ dev: false -+ -+ /@types/json5/0.0.29: -+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} -+ dev: false -+ -+ /@types/node/18.11.18: -+ resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} -+ dev: false -+ -+ /@types/prop-types/15.7.5: -+ resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} -+ dev: false -+ -+ /@types/react-dom/18.0.10: -+ resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==} -+ dependencies: -+ '@types/react': 18.0.26 -+ dev: false -+ -+ /@types/react/18.0.26: -+ resolution: {integrity: sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==} -+ dependencies: -+ '@types/prop-types': 15.7.5 -+ '@types/scheduler': 0.16.2 -+ csstype: 3.1.1 -+ dev: false -+ -+ /@types/scheduler/0.16.2: -+ resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} -+ dev: false -+ -+ /@typescript-eslint/parser/5.47.1_iukboom6ndih5an6iafl45j2fe: -+ resolution: {integrity: sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==} -+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} -+ peerDependencies: -+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 -+ typescript: '*' -+ peerDependenciesMeta: -+ typescript: -+ optional: true -+ dependencies: -+ '@typescript-eslint/scope-manager': 5.47.1 -+ '@typescript-eslint/types': 5.47.1 -+ '@typescript-eslint/typescript-estree': 5.47.1_typescript@4.9.4 -+ debug: 4.3.4 -+ eslint: 8.31.0 -+ typescript: 4.9.4 -+ transitivePeerDependencies: -+ - supports-color -+ dev: false -+ -+ /@typescript-eslint/scope-manager/5.47.1: -+ resolution: {integrity: sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw==} -+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} -+ dependencies: -+ '@typescript-eslint/types': 5.47.1 -+ '@typescript-eslint/visitor-keys': 5.47.1 -+ dev: false -+ -+ /@typescript-eslint/types/5.47.1: -+ resolution: {integrity: sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A==} -+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} -+ dev: false -+ -+ /@typescript-eslint/typescript-estree/5.47.1_typescript@4.9.4: -+ resolution: {integrity: sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA==} -+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} -+ peerDependencies: -+ typescript: '*' -+ peerDependenciesMeta: -+ typescript: -+ optional: true -+ dependencies: -+ '@typescript-eslint/types': 5.47.1 -+ '@typescript-eslint/visitor-keys': 5.47.1 -+ debug: 4.3.4 -+ globby: 11.1.0 -+ is-glob: 4.0.3 -+ semver: 7.3.8 -+ tsutils: 3.21.0_typescript@4.9.4 -+ typescript: 4.9.4 -+ transitivePeerDependencies: -+ - supports-color -+ dev: false -+ -+ /@typescript-eslint/visitor-keys/5.47.1: -+ resolution: {integrity: sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig==} -+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} -+ dependencies: -+ '@typescript-eslint/types': 5.47.1 -+ eslint-visitor-keys: 3.3.0 -+ dev: false -+ -+ /acorn-jsx/5.3.2_acorn@8.8.1: -+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} -+ peerDependencies: -+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 -+ dependencies: -+ acorn: 8.8.1 -+ dev: false -+ -+ /acorn/8.8.1: -+ resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} -+ engines: {node: '>=0.4.0'} -+ hasBin: true -+ dev: false -+ -+ /ajv/6.12.6: -+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} -+ dependencies: -+ fast-deep-equal: 3.1.3 -+ fast-json-stable-stringify: 2.1.0 -+ json-schema-traverse: 0.4.1 -+ uri-js: 4.4.1 -+ dev: false -+ -+ /ansi-regex/5.0.1: -+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /ansi-styles/4.3.0: -+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} -+ engines: {node: '>=8'} -+ dependencies: -+ color-convert: 2.0.1 -+ dev: false -+ -+ /argparse/2.0.1: -+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} -+ dev: false -+ -+ /aria-query/4.2.2: -+ resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} -+ engines: {node: '>=6.0'} -+ dependencies: -+ '@babel/runtime': 7.20.7 -+ '@babel/runtime-corejs3': 7.20.7 -+ dev: false -+ -+ /array-includes/3.1.6: -+ resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ get-intrinsic: 1.1.3 -+ is-string: 1.0.7 -+ dev: false -+ -+ /array-union/2.1.0: -+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /array.prototype.flat/1.3.1: -+ resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ es-shim-unscopables: 1.0.0 -+ dev: false -+ -+ /array.prototype.flatmap/1.3.1: -+ resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ es-shim-unscopables: 1.0.0 -+ dev: false -+ -+ /array.prototype.tosorted/1.1.1: -+ resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ es-shim-unscopables: 1.0.0 -+ get-intrinsic: 1.1.3 -+ dev: false -+ -+ /ast-types-flow/0.0.7: -+ resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} -+ dev: false -+ -+ /axe-core/4.6.1: -+ resolution: {integrity: sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w==} -+ engines: {node: '>=4'} -+ dev: false -+ -+ /axobject-query/2.2.0: -+ resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} -+ dev: false -+ -+ /balanced-match/1.0.2: -+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} -+ dev: false -+ -+ /brace-expansion/1.1.11: -+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} -+ dependencies: -+ balanced-match: 1.0.2 -+ concat-map: 0.0.1 -+ dev: false -+ -+ /braces/3.0.2: -+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} -+ engines: {node: '>=8'} -+ dependencies: -+ fill-range: 7.0.1 -+ dev: false -+ -+ /call-bind/1.0.2: -+ resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} -+ dependencies: -+ function-bind: 1.1.1 -+ get-intrinsic: 1.1.3 -+ dev: false -+ -+ /callsites/3.1.0: -+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} -+ engines: {node: '>=6'} -+ dev: false -+ -+ /caniuse-lite/1.0.30001441: -+ resolution: {integrity: sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==} -+ dev: false -+ -+ /chalk/4.1.2: -+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} -+ engines: {node: '>=10'} -+ dependencies: -+ ansi-styles: 4.3.0 -+ supports-color: 7.2.0 -+ dev: false -+ -+ /client-only/0.0.1: -+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} -+ dev: false -+ -+ /color-convert/2.0.1: -+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} -+ engines: {node: '>=7.0.0'} -+ dependencies: -+ color-name: 1.1.4 -+ dev: false -+ -+ /color-name/1.1.4: -+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} -+ dev: false -+ -+ /concat-map/0.0.1: -+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} -+ dev: false -+ -+ /core-js-pure/3.27.1: -+ resolution: {integrity: sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==} -+ requiresBuild: true -+ dev: false -+ -+ /cross-spawn/7.0.3: -+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} -+ engines: {node: '>= 8'} -+ dependencies: -+ path-key: 3.1.1 -+ shebang-command: 2.0.0 -+ which: 2.0.2 -+ dev: false -+ -+ /csstype/3.1.1: -+ resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} -+ dev: false -+ -+ /damerau-levenshtein/1.0.8: -+ resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} -+ dev: false -+ -+ /debug/2.6.9: -+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} -+ peerDependencies: -+ supports-color: '*' -+ peerDependenciesMeta: -+ supports-color: -+ optional: true -+ dependencies: -+ ms: 2.0.0 -+ dev: false -+ -+ /debug/3.2.7: -+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} -+ peerDependencies: -+ supports-color: '*' -+ peerDependenciesMeta: -+ supports-color: -+ optional: true -+ dependencies: -+ ms: 2.1.3 -+ dev: false -+ -+ /debug/4.3.4: -+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} -+ engines: {node: '>=6.0'} -+ peerDependencies: -+ supports-color: '*' -+ peerDependenciesMeta: -+ supports-color: -+ optional: true -+ dependencies: -+ ms: 2.1.2 -+ dev: false -+ -+ /deep-is/0.1.4: -+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} -+ dev: false -+ -+ /define-lazy-prop/2.0.0: -+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /define-properties/1.1.4: -+ resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ has-property-descriptors: 1.0.0 -+ object-keys: 1.1.1 -+ dev: false -+ -+ /dir-glob/3.0.1: -+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} -+ engines: {node: '>=8'} -+ dependencies: -+ path-type: 4.0.0 -+ dev: false -+ -+ /doctrine/2.1.0: -+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} -+ engines: {node: '>=0.10.0'} -+ dependencies: -+ esutils: 2.0.3 -+ dev: false -+ -+ /doctrine/3.0.0: -+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} -+ engines: {node: '>=6.0.0'} -+ dependencies: -+ esutils: 2.0.3 -+ dev: false -+ -+ /emoji-regex/9.2.2: -+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} -+ dev: false -+ -+ /enhanced-resolve/5.12.0: -+ resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} -+ engines: {node: '>=10.13.0'} -+ dependencies: -+ graceful-fs: 4.2.10 -+ tapable: 2.2.1 -+ dev: false -+ -+ /es-abstract/1.20.5: -+ resolution: {integrity: sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ es-to-primitive: 1.2.1 -+ function-bind: 1.1.1 -+ function.prototype.name: 1.1.5 -+ get-intrinsic: 1.1.3 -+ get-symbol-description: 1.0.0 -+ gopd: 1.0.1 -+ has: 1.0.3 -+ has-property-descriptors: 1.0.0 -+ has-symbols: 1.0.3 -+ internal-slot: 1.0.4 -+ is-callable: 1.2.7 -+ is-negative-zero: 2.0.2 -+ is-regex: 1.1.4 -+ is-shared-array-buffer: 1.0.2 -+ is-string: 1.0.7 -+ is-weakref: 1.0.2 -+ object-inspect: 1.12.2 -+ object-keys: 1.1.1 -+ object.assign: 4.1.4 -+ regexp.prototype.flags: 1.4.3 -+ safe-regex-test: 1.0.0 -+ string.prototype.trimend: 1.0.6 -+ string.prototype.trimstart: 1.0.6 -+ unbox-primitive: 1.0.2 -+ dev: false -+ -+ /es-shim-unscopables/1.0.0: -+ resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} -+ dependencies: -+ has: 1.0.3 -+ dev: false -+ -+ /es-to-primitive/1.2.1: -+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ is-callable: 1.2.7 -+ is-date-object: 1.0.5 -+ is-symbol: 1.0.4 -+ dev: false -+ -+ /escape-string-regexp/4.0.0: -+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} -+ engines: {node: '>=10'} -+ dev: false -+ -+ /eslint-config-next/13.1.1_iukboom6ndih5an6iafl45j2fe: -+ resolution: {integrity: sha512-/5S2XGWlGaiqrRhzpn51ux5JUSLwx8PVK2keLi5xk7QmhfYB8PqE6R6SlVw6hgnf/VexvUXSrlNJ/su00NhtHQ==} -+ peerDependencies: -+ eslint: ^7.23.0 || ^8.0.0 -+ typescript: '>=3.3.1' -+ peerDependenciesMeta: -+ typescript: -+ optional: true -+ dependencies: -+ '@next/eslint-plugin-next': 13.1.1 -+ '@rushstack/eslint-patch': 1.2.0 -+ '@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe -+ eslint: 8.31.0 -+ eslint-import-resolver-node: 0.3.6 -+ eslint-import-resolver-typescript: 3.5.2_ol7jqilc3wemtdbq3nzhywgxq4 -+ eslint-plugin-import: 2.26.0_bpx4furzt4ibermwbsj75osuwi -+ eslint-plugin-jsx-a11y: 6.6.1_eslint@8.31.0 -+ eslint-plugin-react: 7.31.11_eslint@8.31.0 -+ eslint-plugin-react-hooks: 4.6.0_eslint@8.31.0 -+ typescript: 4.9.4 -+ transitivePeerDependencies: -+ - eslint-import-resolver-webpack -+ - supports-color -+ dev: false -+ -+ /eslint-import-resolver-node/0.3.6: -+ resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} -+ dependencies: -+ debug: 3.2.7 -+ resolve: 1.22.1 -+ transitivePeerDependencies: -+ - supports-color -+ dev: false -+ -+ /eslint-import-resolver-typescript/3.5.2_ol7jqilc3wemtdbq3nzhywgxq4: -+ resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==} -+ engines: {node: ^14.18.0 || >=16.0.0} -+ peerDependencies: -+ eslint: '*' -+ eslint-plugin-import: '*' -+ dependencies: -+ debug: 4.3.4 -+ enhanced-resolve: 5.12.0 -+ eslint: 8.31.0 -+ eslint-plugin-import: 2.26.0_bpx4furzt4ibermwbsj75osuwi -+ get-tsconfig: 4.2.0 -+ globby: 13.1.3 -+ is-core-module: 2.11.0 -+ is-glob: 4.0.3 -+ synckit: 0.8.4 -+ transitivePeerDependencies: -+ - supports-color -+ dev: false -+ -+ /eslint-module-utils/2.7.4_of6uaipqaoaobv57tu2gvxhnhu: -+ resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} -+ engines: {node: '>=4'} -+ peerDependencies: -+ '@typescript-eslint/parser': '*' -+ eslint: '*' -+ eslint-import-resolver-node: '*' -+ eslint-import-resolver-typescript: '*' -+ eslint-import-resolver-webpack: '*' -+ peerDependenciesMeta: -+ '@typescript-eslint/parser': -+ optional: true -+ eslint: -+ optional: true -+ eslint-import-resolver-node: -+ optional: true -+ eslint-import-resolver-typescript: -+ optional: true -+ eslint-import-resolver-webpack: -+ optional: true -+ dependencies: -+ '@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe -+ debug: 3.2.7 -+ eslint: 8.31.0 -+ eslint-import-resolver-node: 0.3.6 -+ eslint-import-resolver-typescript: 3.5.2_ol7jqilc3wemtdbq3nzhywgxq4 -+ transitivePeerDependencies: -+ - supports-color -+ dev: false -+ -+ /eslint-plugin-import/2.26.0_bpx4furzt4ibermwbsj75osuwi: -+ resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} -+ engines: {node: '>=4'} -+ peerDependencies: -+ '@typescript-eslint/parser': '*' -+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 -+ peerDependenciesMeta: -+ '@typescript-eslint/parser': -+ optional: true -+ dependencies: -+ '@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe -+ array-includes: 3.1.6 -+ array.prototype.flat: 1.3.1 -+ debug: 2.6.9 -+ doctrine: 2.1.0 -+ eslint: 8.31.0 -+ eslint-import-resolver-node: 0.3.6 -+ eslint-module-utils: 2.7.4_of6uaipqaoaobv57tu2gvxhnhu -+ has: 1.0.3 -+ is-core-module: 2.11.0 -+ is-glob: 4.0.3 -+ minimatch: 3.1.2 -+ object.values: 1.1.6 -+ resolve: 1.22.1 -+ tsconfig-paths: 3.14.1 -+ transitivePeerDependencies: -+ - eslint-import-resolver-typescript -+ - eslint-import-resolver-webpack -+ - supports-color -+ dev: false -+ -+ /eslint-plugin-jsx-a11y/6.6.1_eslint@8.31.0: -+ resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} -+ engines: {node: '>=4.0'} -+ peerDependencies: -+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 -+ dependencies: -+ '@babel/runtime': 7.20.7 -+ aria-query: 4.2.2 -+ array-includes: 3.1.6 -+ ast-types-flow: 0.0.7 -+ axe-core: 4.6.1 -+ axobject-query: 2.2.0 -+ damerau-levenshtein: 1.0.8 -+ emoji-regex: 9.2.2 -+ eslint: 8.31.0 -+ has: 1.0.3 -+ jsx-ast-utils: 3.3.3 -+ language-tags: 1.0.7 -+ minimatch: 3.1.2 -+ semver: 6.3.0 -+ dev: false -+ -+ /eslint-plugin-react-hooks/4.6.0_eslint@8.31.0: -+ resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} -+ engines: {node: '>=10'} -+ peerDependencies: -+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 -+ dependencies: -+ eslint: 8.31.0 -+ dev: false -+ -+ /eslint-plugin-react/7.31.11_eslint@8.31.0: -+ resolution: {integrity: sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==} -+ engines: {node: '>=4'} -+ peerDependencies: -+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 -+ dependencies: -+ array-includes: 3.1.6 -+ array.prototype.flatmap: 1.3.1 -+ array.prototype.tosorted: 1.1.1 -+ doctrine: 2.1.0 -+ eslint: 8.31.0 -+ estraverse: 5.3.0 -+ jsx-ast-utils: 3.3.3 -+ minimatch: 3.1.2 -+ object.entries: 1.1.6 -+ object.fromentries: 2.0.6 -+ object.hasown: 1.1.2 -+ object.values: 1.1.6 -+ prop-types: 15.8.1 -+ resolve: 2.0.0-next.4 -+ semver: 6.3.0 -+ string.prototype.matchall: 4.0.8 -+ dev: false -+ -+ /eslint-scope/7.1.1: -+ resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} -+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} -+ dependencies: -+ esrecurse: 4.3.0 -+ estraverse: 5.3.0 -+ dev: false -+ -+ /eslint-utils/3.0.0_eslint@8.31.0: -+ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} -+ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} -+ peerDependencies: -+ eslint: '>=5' -+ dependencies: -+ eslint: 8.31.0 -+ eslint-visitor-keys: 2.1.0 -+ dev: false -+ -+ /eslint-visitor-keys/2.1.0: -+ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} -+ engines: {node: '>=10'} -+ dev: false -+ -+ /eslint-visitor-keys/3.3.0: -+ resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} -+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} -+ dev: false -+ -+ /eslint/8.31.0: -+ resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} -+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} -+ hasBin: true -+ dependencies: -+ '@eslint/eslintrc': 1.4.1 -+ '@humanwhocodes/config-array': 0.11.8 -+ '@humanwhocodes/module-importer': 1.0.1 -+ '@nodelib/fs.walk': 1.2.8 -+ ajv: 6.12.6 -+ chalk: 4.1.2 -+ cross-spawn: 7.0.3 -+ debug: 4.3.4 -+ doctrine: 3.0.0 -+ escape-string-regexp: 4.0.0 -+ eslint-scope: 7.1.1 -+ eslint-utils: 3.0.0_eslint@8.31.0 -+ eslint-visitor-keys: 3.3.0 -+ espree: 9.4.1 -+ esquery: 1.4.0 -+ esutils: 2.0.3 -+ fast-deep-equal: 3.1.3 -+ file-entry-cache: 6.0.1 -+ find-up: 5.0.0 -+ glob-parent: 6.0.2 -+ globals: 13.19.0 -+ grapheme-splitter: 1.0.4 -+ ignore: 5.2.4 -+ import-fresh: 3.3.0 -+ imurmurhash: 0.1.4 -+ is-glob: 4.0.3 -+ is-path-inside: 3.0.3 -+ js-sdsl: 4.2.0 -+ js-yaml: 4.1.0 -+ json-stable-stringify-without-jsonify: 1.0.1 -+ levn: 0.4.1 -+ lodash.merge: 4.6.2 -+ minimatch: 3.1.2 -+ natural-compare: 1.4.0 -+ optionator: 0.9.1 -+ regexpp: 3.2.0 -+ strip-ansi: 6.0.1 -+ strip-json-comments: 3.1.1 -+ text-table: 0.2.0 -+ transitivePeerDependencies: -+ - supports-color -+ dev: false -+ -+ /espree/9.4.1: -+ resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} -+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} -+ dependencies: -+ acorn: 8.8.1 -+ acorn-jsx: 5.3.2_acorn@8.8.1 -+ eslint-visitor-keys: 3.3.0 -+ dev: false -+ -+ /esquery/1.4.0: -+ resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} -+ engines: {node: '>=0.10'} -+ dependencies: -+ estraverse: 5.3.0 -+ dev: false -+ -+ /esrecurse/4.3.0: -+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} -+ engines: {node: '>=4.0'} -+ dependencies: -+ estraverse: 5.3.0 -+ dev: false -+ -+ /estraverse/5.3.0: -+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} -+ engines: {node: '>=4.0'} -+ dev: false -+ -+ /esutils/2.0.3: -+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} -+ engines: {node: '>=0.10.0'} -+ dev: false -+ -+ /fast-deep-equal/3.1.3: -+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} -+ dev: false -+ -+ /fast-glob/3.2.12: -+ resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} -+ engines: {node: '>=8.6.0'} -+ dependencies: -+ '@nodelib/fs.stat': 2.0.5 -+ '@nodelib/fs.walk': 1.2.8 -+ glob-parent: 5.1.2 -+ merge2: 1.4.1 -+ micromatch: 4.0.5 -+ dev: false -+ -+ /fast-json-stable-stringify/2.1.0: -+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} -+ dev: false -+ -+ /fast-levenshtein/2.0.6: -+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} -+ dev: false -+ -+ /fastq/1.14.0: -+ resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==} -+ dependencies: -+ reusify: 1.0.4 -+ dev: false -+ -+ /file-entry-cache/6.0.1: -+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ dependencies: -+ flat-cache: 3.0.4 -+ dev: false -+ -+ /fill-range/7.0.1: -+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} -+ engines: {node: '>=8'} -+ dependencies: -+ to-regex-range: 5.0.1 -+ dev: false -+ -+ /find-up/5.0.0: -+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} -+ engines: {node: '>=10'} -+ dependencies: -+ locate-path: 6.0.0 -+ path-exists: 4.0.0 -+ dev: false -+ -+ /flat-cache/3.0.4: -+ resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} -+ engines: {node: ^10.12.0 || >=12.0.0} -+ dependencies: -+ flatted: 3.2.7 -+ rimraf: 3.0.2 -+ dev: false -+ -+ /flatted/3.2.7: -+ resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} -+ dev: false -+ -+ /fs.realpath/1.0.0: -+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} -+ dev: false -+ -+ /function-bind/1.1.1: -+ resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} -+ dev: false -+ -+ /function.prototype.name/1.1.5: -+ resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ functions-have-names: 1.2.3 -+ dev: false -+ -+ /functions-have-names/1.2.3: -+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} -+ dev: false -+ -+ /get-intrinsic/1.1.3: -+ resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} -+ dependencies: -+ function-bind: 1.1.1 -+ has: 1.0.3 -+ has-symbols: 1.0.3 -+ dev: false -+ -+ /get-symbol-description/1.0.0: -+ resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ get-intrinsic: 1.1.3 -+ dev: false -+ -+ /get-tsconfig/4.2.0: -+ resolution: {integrity: sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==} -+ dev: false -+ -+ /glob-parent/5.1.2: -+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} -+ engines: {node: '>= 6'} -+ dependencies: -+ is-glob: 4.0.3 -+ dev: false -+ -+ /glob-parent/6.0.2: -+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} -+ engines: {node: '>=10.13.0'} -+ dependencies: -+ is-glob: 4.0.3 -+ dev: false -+ -+ /glob/7.1.7: -+ resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} -+ dependencies: -+ fs.realpath: 1.0.0 -+ inflight: 1.0.6 -+ inherits: 2.0.4 -+ minimatch: 3.1.2 -+ once: 1.4.0 -+ path-is-absolute: 1.0.1 -+ dev: false -+ -+ /glob/7.2.3: -+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} -+ dependencies: -+ fs.realpath: 1.0.0 -+ inflight: 1.0.6 -+ inherits: 2.0.4 -+ minimatch: 3.1.2 -+ once: 1.4.0 -+ path-is-absolute: 1.0.1 -+ dev: false -+ -+ /globals/13.19.0: -+ resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} -+ engines: {node: '>=8'} -+ dependencies: -+ type-fest: 0.20.2 -+ dev: false -+ -+ /globalyzer/0.1.0: -+ resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} -+ dev: false -+ -+ /globby/11.1.0: -+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} -+ engines: {node: '>=10'} -+ dependencies: -+ array-union: 2.1.0 -+ dir-glob: 3.0.1 -+ fast-glob: 3.2.12 -+ ignore: 5.2.4 -+ merge2: 1.4.1 -+ slash: 3.0.0 -+ dev: false -+ -+ /globby/13.1.3: -+ resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} -+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} -+ dependencies: -+ dir-glob: 3.0.1 -+ fast-glob: 3.2.12 -+ ignore: 5.2.4 -+ merge2: 1.4.1 -+ slash: 4.0.0 -+ dev: false -+ -+ /globrex/0.1.2: -+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} -+ dev: false -+ -+ /gopd/1.0.1: -+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} -+ dependencies: -+ get-intrinsic: 1.1.3 -+ dev: false -+ -+ /graceful-fs/4.2.10: -+ resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} -+ dev: false -+ -+ /grapheme-splitter/1.0.4: -+ resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} -+ dev: false -+ -+ /has-bigints/1.0.2: -+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} -+ dev: false -+ -+ /has-flag/4.0.0: -+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /has-property-descriptors/1.0.0: -+ resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} -+ dependencies: -+ get-intrinsic: 1.1.3 -+ dev: false -+ -+ /has-symbols/1.0.3: -+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} -+ engines: {node: '>= 0.4'} -+ dev: false -+ -+ /has-tostringtag/1.0.0: -+ resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ has-symbols: 1.0.3 -+ dev: false -+ -+ /has/1.0.3: -+ resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} -+ engines: {node: '>= 0.4.0'} -+ dependencies: -+ function-bind: 1.1.1 -+ dev: false -+ -+ /ignore/5.2.4: -+ resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} -+ engines: {node: '>= 4'} -+ dev: false -+ -+ /import-fresh/3.3.0: -+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} -+ engines: {node: '>=6'} -+ dependencies: -+ parent-module: 1.0.1 -+ resolve-from: 4.0.0 -+ dev: false -+ -+ /imurmurhash/0.1.4: -+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} -+ engines: {node: '>=0.8.19'} -+ dev: false -+ -+ /inflight/1.0.6: -+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} -+ dependencies: -+ once: 1.4.0 -+ wrappy: 1.0.2 -+ dev: false -+ -+ /inherits/2.0.4: -+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} -+ dev: false -+ -+ /internal-slot/1.0.4: -+ resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ get-intrinsic: 1.1.3 -+ has: 1.0.3 -+ side-channel: 1.0.4 -+ dev: false -+ -+ /is-bigint/1.0.4: -+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} -+ dependencies: -+ has-bigints: 1.0.2 -+ dev: false -+ -+ /is-boolean-object/1.1.2: -+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ has-tostringtag: 1.0.0 -+ dev: false -+ -+ /is-callable/1.2.7: -+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} -+ engines: {node: '>= 0.4'} -+ dev: false -+ -+ /is-core-module/2.11.0: -+ resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} -+ dependencies: -+ has: 1.0.3 -+ dev: false -+ -+ /is-date-object/1.0.5: -+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ has-tostringtag: 1.0.0 -+ dev: false -+ -+ /is-docker/2.2.1: -+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} -+ engines: {node: '>=8'} -+ hasBin: true -+ dev: false -+ -+ /is-extglob/2.1.1: -+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} -+ engines: {node: '>=0.10.0'} -+ dev: false -+ -+ /is-glob/4.0.3: -+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} -+ engines: {node: '>=0.10.0'} -+ dependencies: -+ is-extglob: 2.1.1 -+ dev: false -+ -+ /is-negative-zero/2.0.2: -+ resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} -+ engines: {node: '>= 0.4'} -+ dev: false -+ -+ /is-number-object/1.0.7: -+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ has-tostringtag: 1.0.0 -+ dev: false -+ -+ /is-number/7.0.0: -+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} -+ engines: {node: '>=0.12.0'} -+ dev: false -+ -+ /is-path-inside/3.0.3: -+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /is-regex/1.1.4: -+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ has-tostringtag: 1.0.0 -+ dev: false -+ -+ /is-shared-array-buffer/1.0.2: -+ resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} -+ dependencies: -+ call-bind: 1.0.2 -+ dev: false -+ -+ /is-string/1.0.7: -+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ has-tostringtag: 1.0.0 -+ dev: false -+ -+ /is-symbol/1.0.4: -+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ has-symbols: 1.0.3 -+ dev: false -+ -+ /is-weakref/1.0.2: -+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} -+ dependencies: -+ call-bind: 1.0.2 -+ dev: false -+ -+ /is-wsl/2.2.0: -+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} -+ engines: {node: '>=8'} -+ dependencies: -+ is-docker: 2.2.1 -+ dev: false -+ -+ /isexe/2.0.0: -+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} -+ dev: false -+ -+ /js-sdsl/4.2.0: -+ resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} -+ dev: false -+ -+ /js-tokens/4.0.0: -+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} -+ dev: false -+ -+ /js-yaml/4.1.0: -+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} -+ hasBin: true -+ dependencies: -+ argparse: 2.0.1 -+ dev: false -+ -+ /json-schema-traverse/0.4.1: -+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} -+ dev: false -+ -+ /json-stable-stringify-without-jsonify/1.0.1: -+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} -+ dev: false -+ -+ /json5/1.0.2: -+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} -+ hasBin: true -+ dependencies: -+ minimist: 1.2.7 -+ dev: false -+ -+ /jsx-ast-utils/3.3.3: -+ resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} -+ engines: {node: '>=4.0'} -+ dependencies: -+ array-includes: 3.1.6 -+ object.assign: 4.1.4 -+ dev: false -+ -+ /language-subtag-registry/0.3.22: -+ resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} -+ dev: false -+ -+ /language-tags/1.0.7: -+ resolution: {integrity: sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw==} -+ dependencies: -+ language-subtag-registry: 0.3.22 -+ dev: false -+ -+ /levn/0.4.1: -+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} -+ engines: {node: '>= 0.8.0'} -+ dependencies: -+ prelude-ls: 1.2.1 -+ type-check: 0.4.0 -+ dev: false -+ -+ /locate-path/6.0.0: -+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} -+ engines: {node: '>=10'} -+ dependencies: -+ p-locate: 5.0.0 -+ dev: false -+ -+ /lodash.merge/4.6.2: -+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} -+ dev: false -+ -+ /loose-envify/1.4.0: -+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} -+ hasBin: true -+ dependencies: -+ js-tokens: 4.0.0 -+ dev: false -+ -+ /lru-cache/6.0.0: -+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} -+ engines: {node: '>=10'} -+ dependencies: -+ yallist: 4.0.0 -+ dev: false -+ -+ /merge2/1.4.1: -+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} -+ engines: {node: '>= 8'} -+ dev: false -+ -+ /micromatch/4.0.5: -+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} -+ engines: {node: '>=8.6'} -+ dependencies: -+ braces: 3.0.2 -+ picomatch: 2.3.1 -+ dev: false -+ -+ /minimatch/3.1.2: -+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} -+ dependencies: -+ brace-expansion: 1.1.11 -+ dev: false -+ -+ /minimist/1.2.7: -+ resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} -+ dev: false -+ -+ /ms/2.0.0: -+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} -+ dev: false -+ -+ /ms/2.1.2: -+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} -+ dev: false -+ -+ /ms/2.1.3: -+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} -+ dev: false -+ -+ /nanoid/3.3.4: -+ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} -+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} -+ hasBin: true -+ dev: false -+ -+ /natural-compare/1.4.0: -+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} -+ dev: false -+ -+ /next/13.1.1_biqbaboplfbrettd7655fr4n2y: -+ resolution: {integrity: sha512-R5eBAaIa3X7LJeYvv1bMdGnAVF4fVToEjim7MkflceFPuANY3YyvFxXee/A+acrSYwYPvOvf7f6v/BM/48ea5w==} -+ engines: {node: '>=14.6.0'} -+ hasBin: true -+ peerDependencies: -+ fibers: '>= 3.1.0' -+ node-sass: ^6.0.0 || ^7.0.0 -+ react: ^18.2.0 -+ react-dom: ^18.2.0 -+ sass: ^1.3.0 -+ peerDependenciesMeta: -+ fibers: -+ optional: true -+ node-sass: -+ optional: true -+ sass: -+ optional: true -+ dependencies: -+ '@next/env': 13.1.1 -+ '@swc/helpers': 0.4.14 -+ caniuse-lite: 1.0.30001441 -+ postcss: 8.4.14 -+ react: 18.2.0 -+ react-dom: 18.2.0_react@18.2.0 -+ styled-jsx: 5.1.1_react@18.2.0 -+ optionalDependencies: -+ '@next/swc-android-arm-eabi': 13.1.1 -+ '@next/swc-android-arm64': 13.1.1 -+ '@next/swc-darwin-arm64': 13.1.1 -+ '@next/swc-darwin-x64': 13.1.1 -+ '@next/swc-freebsd-x64': 13.1.1 -+ '@next/swc-linux-arm-gnueabihf': 13.1.1 -+ '@next/swc-linux-arm64-gnu': 13.1.1 -+ '@next/swc-linux-arm64-musl': 13.1.1 -+ '@next/swc-linux-x64-gnu': 13.1.1 -+ '@next/swc-linux-x64-musl': 13.1.1 -+ '@next/swc-win32-arm64-msvc': 13.1.1 -+ '@next/swc-win32-ia32-msvc': 13.1.1 -+ '@next/swc-win32-x64-msvc': 13.1.1 -+ transitivePeerDependencies: -+ - '@babel/core' -+ - babel-plugin-macros -+ dev: false -+ -+ /object-assign/4.1.1: -+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} -+ engines: {node: '>=0.10.0'} -+ dev: false -+ -+ /object-inspect/1.12.2: -+ resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} -+ dev: false -+ -+ /object-keys/1.1.1: -+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} -+ engines: {node: '>= 0.4'} -+ dev: false -+ -+ /object.assign/4.1.4: -+ resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ has-symbols: 1.0.3 -+ object-keys: 1.1.1 -+ dev: false -+ -+ /object.entries/1.1.6: -+ resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ dev: false -+ -+ /object.fromentries/2.0.6: -+ resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ dev: false -+ -+ /object.hasown/1.1.2: -+ resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} -+ dependencies: -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ dev: false -+ -+ /object.values/1.1.6: -+ resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ dev: false -+ -+ /once/1.4.0: -+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} -+ dependencies: -+ wrappy: 1.0.2 -+ dev: false -+ -+ /open/8.4.0: -+ resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} -+ engines: {node: '>=12'} -+ dependencies: -+ define-lazy-prop: 2.0.0 -+ is-docker: 2.2.1 -+ is-wsl: 2.2.0 -+ dev: false -+ -+ /optionator/0.9.1: -+ resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} -+ engines: {node: '>= 0.8.0'} -+ dependencies: -+ deep-is: 0.1.4 -+ fast-levenshtein: 2.0.6 -+ levn: 0.4.1 -+ prelude-ls: 1.2.1 -+ type-check: 0.4.0 -+ word-wrap: 1.2.3 -+ dev: false -+ -+ /p-limit/3.1.0: -+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} -+ engines: {node: '>=10'} -+ dependencies: -+ yocto-queue: 0.1.0 -+ dev: false -+ -+ /p-locate/5.0.0: -+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} -+ engines: {node: '>=10'} -+ dependencies: -+ p-limit: 3.1.0 -+ dev: false -+ -+ /parent-module/1.0.1: -+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} -+ engines: {node: '>=6'} -+ dependencies: -+ callsites: 3.1.0 -+ dev: false -+ -+ /path-exists/4.0.0: -+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /path-is-absolute/1.0.1: -+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} -+ engines: {node: '>=0.10.0'} -+ dev: false -+ -+ /path-key/3.1.1: -+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /path-parse/1.0.7: -+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} -+ dev: false -+ -+ /path-type/4.0.0: -+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /picocolors/1.0.0: -+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} -+ dev: false -+ -+ /picomatch/2.3.1: -+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} -+ engines: {node: '>=8.6'} -+ dev: false -+ -+ /postcss/8.4.14: -+ resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} -+ engines: {node: ^10 || ^12 || >=14} -+ dependencies: -+ nanoid: 3.3.4 -+ picocolors: 1.0.0 -+ source-map-js: 1.0.2 -+ dev: false -+ -+ /prelude-ls/1.2.1: -+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} -+ engines: {node: '>= 0.8.0'} -+ dev: false -+ -+ /prettier/2.8.1: -+ resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} -+ engines: {node: '>=10.13.0'} -+ hasBin: true -+ dev: true -+ -+ /prop-types/15.8.1: -+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} -+ dependencies: -+ loose-envify: 1.4.0 -+ object-assign: 4.1.1 -+ react-is: 16.13.1 -+ dev: false -+ -+ /punycode/2.1.1: -+ resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} -+ engines: {node: '>=6'} -+ dev: false -+ -+ /queue-microtask/1.2.3: -+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} -+ dev: false -+ -+ /react-dom/18.2.0_react@18.2.0: -+ resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} -+ peerDependencies: -+ react: ^18.2.0 -+ dependencies: -+ loose-envify: 1.4.0 -+ react: 18.2.0 -+ scheduler: 0.23.0 -+ dev: false -+ -+ /react-is/16.13.1: -+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} -+ dev: false -+ -+ /react/18.2.0: -+ resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} -+ engines: {node: '>=0.10.0'} -+ dependencies: -+ loose-envify: 1.4.0 -+ dev: false -+ -+ /regenerator-runtime/0.13.11: -+ resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} -+ dev: false -+ -+ /regexp.prototype.flags/1.4.3: -+ resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} -+ engines: {node: '>= 0.4'} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ functions-have-names: 1.2.3 -+ dev: false -+ -+ /regexpp/3.2.0: -+ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /resolve-from/4.0.0: -+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} -+ engines: {node: '>=4'} -+ dev: false -+ -+ /resolve/1.22.1: -+ resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} -+ hasBin: true -+ dependencies: -+ is-core-module: 2.11.0 -+ path-parse: 1.0.7 -+ supports-preserve-symlinks-flag: 1.0.0 -+ dev: false -+ -+ /resolve/2.0.0-next.4: -+ resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} -+ hasBin: true -+ dependencies: -+ is-core-module: 2.11.0 -+ path-parse: 1.0.7 -+ supports-preserve-symlinks-flag: 1.0.0 -+ dev: false -+ -+ /reusify/1.0.4: -+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} -+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'} -+ dev: false -+ -+ /rimraf/3.0.2: -+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} -+ hasBin: true -+ dependencies: -+ glob: 7.2.3 -+ dev: false -+ -+ /run-parallel/1.2.0: -+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} -+ dependencies: -+ queue-microtask: 1.2.3 -+ dev: false -+ -+ /safe-regex-test/1.0.0: -+ resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} -+ dependencies: -+ call-bind: 1.0.2 -+ get-intrinsic: 1.1.3 -+ is-regex: 1.1.4 -+ dev: false -+ -+ /scheduler/0.23.0: -+ resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} -+ dependencies: -+ loose-envify: 1.4.0 -+ dev: false -+ -+ /semver/6.3.0: -+ resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} -+ hasBin: true -+ dev: false -+ -+ /semver/7.3.8: -+ resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} -+ engines: {node: '>=10'} -+ hasBin: true -+ dependencies: -+ lru-cache: 6.0.0 -+ dev: false -+ -+ /shebang-command/2.0.0: -+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} -+ engines: {node: '>=8'} -+ dependencies: -+ shebang-regex: 3.0.0 -+ dev: false -+ -+ /shebang-regex/3.0.0: -+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /side-channel/1.0.4: -+ resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} -+ dependencies: -+ call-bind: 1.0.2 -+ get-intrinsic: 1.1.3 -+ object-inspect: 1.12.2 -+ dev: false -+ -+ /slash/3.0.0: -+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /slash/4.0.0: -+ resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} -+ engines: {node: '>=12'} -+ dev: false -+ -+ /source-map-js/1.0.2: -+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} -+ engines: {node: '>=0.10.0'} -+ dev: false -+ -+ /string.prototype.matchall/4.0.8: -+ resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ get-intrinsic: 1.1.3 -+ has-symbols: 1.0.3 -+ internal-slot: 1.0.4 -+ regexp.prototype.flags: 1.4.3 -+ side-channel: 1.0.4 -+ dev: false -+ -+ /string.prototype.trimend/1.0.6: -+ resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ dev: false -+ -+ /string.prototype.trimstart/1.0.6: -+ resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} -+ dependencies: -+ call-bind: 1.0.2 -+ define-properties: 1.1.4 -+ es-abstract: 1.20.5 -+ dev: false -+ -+ /strip-ansi/6.0.1: -+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} -+ engines: {node: '>=8'} -+ dependencies: -+ ansi-regex: 5.0.1 -+ dev: false -+ -+ /strip-bom/3.0.0: -+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} -+ engines: {node: '>=4'} -+ dev: false -+ -+ /strip-json-comments/3.1.1: -+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} -+ engines: {node: '>=8'} -+ dev: false -+ -+ /styled-jsx/5.1.1_react@18.2.0: -+ resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} -+ engines: {node: '>= 12.0.0'} -+ peerDependencies: -+ '@babel/core': '*' -+ babel-plugin-macros: '*' -+ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' -+ peerDependenciesMeta: -+ '@babel/core': -+ optional: true -+ babel-plugin-macros: -+ optional: true -+ dependencies: -+ client-only: 0.0.1 -+ react: 18.2.0 -+ dev: false -+ -+ /supports-color/7.2.0: -+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} -+ engines: {node: '>=8'} -+ dependencies: -+ has-flag: 4.0.0 -+ dev: false -+ -+ /supports-preserve-symlinks-flag/1.0.0: -+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} -+ engines: {node: '>= 0.4'} -+ dev: false -+ -+ /synckit/0.8.4: -+ resolution: {integrity: sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==} -+ engines: {node: ^14.18.0 || >=16.0.0} -+ dependencies: -+ '@pkgr/utils': 2.3.1 -+ tslib: 2.4.1 -+ dev: false -+ -+ /tapable/2.2.1: -+ resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} -+ engines: {node: '>=6'} -+ dev: false -+ -+ /text-table/0.2.0: -+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} -+ dev: false -+ -+ /tiny-glob/0.2.9: -+ resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} -+ dependencies: -+ globalyzer: 0.1.0 -+ globrex: 0.1.2 -+ dev: false -+ -+ /to-regex-range/5.0.1: -+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} -+ engines: {node: '>=8.0'} -+ dependencies: -+ is-number: 7.0.0 -+ dev: false -+ -+ /tsconfig-paths/3.14.1: -+ resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} -+ dependencies: -+ '@types/json5': 0.0.29 -+ json5: 1.0.2 -+ minimist: 1.2.7 -+ strip-bom: 3.0.0 -+ dev: false -+ -+ /tslib/1.14.1: -+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} -+ dev: false -+ -+ /tslib/2.4.1: -+ resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} -+ dev: false -+ -+ /tsutils/3.21.0_typescript@4.9.4: -+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} -+ engines: {node: '>= 6'} -+ peerDependencies: -+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' -+ dependencies: -+ tslib: 1.14.1 -+ typescript: 4.9.4 -+ dev: false -+ -+ /type-check/0.4.0: -+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} -+ engines: {node: '>= 0.8.0'} -+ dependencies: -+ prelude-ls: 1.2.1 -+ dev: false -+ -+ /type-fest/0.20.2: -+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} -+ engines: {node: '>=10'} -+ dev: false -+ -+ /typescript/4.9.4: -+ resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} -+ engines: {node: '>=4.2.0'} -+ hasBin: true -+ dev: false -+ -+ /unbox-primitive/1.0.2: -+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} -+ dependencies: -+ call-bind: 1.0.2 -+ has-bigints: 1.0.2 -+ has-symbols: 1.0.3 -+ which-boxed-primitive: 1.0.2 -+ dev: false -+ -+ /uri-js/4.4.1: -+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} -+ dependencies: -+ punycode: 2.1.1 -+ dev: false -+ -+ /which-boxed-primitive/1.0.2: -+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} -+ dependencies: -+ is-bigint: 1.0.4 -+ is-boolean-object: 1.1.2 -+ is-number-object: 1.0.7 -+ is-string: 1.0.7 -+ is-symbol: 1.0.4 -+ dev: false -+ -+ /which/2.0.2: -+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} -+ engines: {node: '>= 8'} -+ hasBin: true -+ dependencies: -+ isexe: 2.0.0 -+ dev: false -+ -+ /word-wrap/1.2.3: -+ resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} -+ engines: {node: '>=0.10.0'} -+ dev: false -+ -+ /wrappy/1.0.2: -+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} -+ dev: false -+ -+ /yallist/4.0.0: -+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} -+ dev: false -+ -+ /yocto-queue/0.1.0: -+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} -+ engines: {node: '>=10'} -+ dev: false -+ -+ file:../..: -+ resolution: {directory: ../.., type: directory} -+ name: '@toots/shine.js' -+ version: 1.0.1 -+ dev: false -diff --git a/js/test/nextjs/public/encode.wav b/js/test/nextjs/public/encode.wav -new file mode 120000 -index 0000000..0f5f127 ---- /dev/null -+++ b/js/test/nextjs/public/encode.wav -@@ -0,0 +1 @@ -+../lib/encode.wav -\ No newline at end of file -diff --git a/js/test/nextjs/tsconfig.json b/js/test/nextjs/tsconfig.json -new file mode 100644 -index 0000000..66151f2 ---- /dev/null -+++ b/js/test/nextjs/tsconfig.json -@@ -0,0 +1,23 @@ -+{ -+ "compilerOptions": { -+ "target": "es5", -+ "lib": ["dom", "dom.iterable", "esnext"], -+ "allowJs": true, -+ "skipLibCheck": true, -+ "strict": true, -+ "forceConsistentCasingInFileNames": true, -+ "noEmit": true, -+ "esModuleInterop": true, -+ "module": "esnext", -+ "moduleResolution": "node", -+ "resolveJsonModule": true, -+ "isolatedModules": true, -+ "jsx": "preserve", -+ "incremental": true, -+ "paths": { -+ "@shine/*": ["./*"] -+ } -+ }, -+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], -+ "exclude": ["node_modules"] -+} -diff --git a/js/test/node/encode.coffee b/js/test/node/encode.coffee -deleted file mode 100644 -index 3e1ba72..0000000 ---- a/js/test/node/encode.coffee -+++ /dev/null -@@ -1,58 +0,0 @@ --Shine = require "../../dist/libshine.js" --{Reader} = require "wav" --fs = require "fs" -- --console.log "" --console.log "Executing encoding test" -- --bitrate = 128 --str = fs.createReadStream "../lib/encode.wav" --fd = fs.openSync "./encode.mp3", "w" --reader = new Reader -- --str.pipe reader -- --write = (encoded) -> -- return unless encoded.length > 0 -- buf = new Buffer encoded -- fs.writeSync fd, buf, 0, buf.length -- --reader.on "format", (format) -> -- console.log "Got WAV file." -- -- shine = new Shine -- bitrate: bitrate -- samplerate: format.sampleRate -- channels: format.channels -- -- console.log "Encoding.." -- started = new Date -- duration = 0.0 -- samplerate = parseFloat format.sampleRate -- -- reader.on "data", (buf) -> -- samples = buf.length/(2*format.channels) -- -- duration += parseFloat(samples) / samplerate -- -- write shine.encode(convertInterleavedBuffer(buf, format.channels, samples)) -- -- reader.on "end", -> -- write shine.close() -- -- ended = new Date -- encodingTime = (ended.getTime() - started.getTime())/1000 -- console.log "Done encoding." -- console.log "File duration: #{duration.toFixed(2)} seconds" -- console.log "Encoding time: #{encodingTime.toFixed(2)} seconds" -- console.log "Encoding rate: #{(duration/encodingTime).toFixed(2)}X" -- process.exit 0 -- --convertInterleavedBuffer = (buf, channels, samples) -> -- ret = new Array channels -- for chan in [0..channels-1] -- ret[chan] = new Int16Array samples -- for i in [0..samples-1] -- ret[chan][i] = buf.readInt16LE 2*(i*channels + chan) -- -- ret -diff --git a/js/test/node/encode.ts b/js/test/node/encode.ts -new file mode 100644 -index 0000000..cc971e1 ---- /dev/null -+++ b/js/test/node/encode.ts -@@ -0,0 +1,73 @@ -+import { Shine } from "@toots/shine.js"; -+import { Reader } from "wav"; -+import fs from "fs"; -+ -+const convertInterleavedBuffer = (buf, channels, samples) => { -+ const ret = new Array(channels); -+ for (let chan = 0; chan < channels; chan++) { -+ ret[chan] = new Int16Array(samples); -+ for (let i = 0; i < samples; i++) { -+ ret[chan][i] = buf.readInt16LE(2 * (i * channels + chan)); -+ } -+ } -+ -+ return ret; -+}; -+ -+const exec = async () => { -+ await Shine.initialized; -+ -+ console.log(""); -+ console.log("Executing encoding test"); -+ -+ const bitrate = 128; -+ const str = fs.createReadStream("../lib/encode.wav"); -+ const fd = fs.openSync("./encode.mp3", "w"); -+ const reader = new Reader(); -+ -+ str.pipe(reader); -+ -+ const write = encoded => { -+ if (encoded.length <= 0) return; -+ -+ const buf = Buffer.from(encoded); -+ fs.writeSync(fd, buf, 0, buf.length); -+ }; -+ -+ reader.on("format", format => { -+ console.log("Got WAV file."); -+ -+ const shine = new Shine({ -+ bitrate: bitrate, -+ samplerate: format.sampleRate, -+ channels: format.channels, -+ }); -+ -+ console.log("Encoding.."); -+ const started = new Date(); -+ let duration = 0.0; -+ const samplerate = format.sampleRate; -+ -+ reader.on("data", buf => { -+ const samples = buf.length / (2 * format.channels); -+ -+ duration += samples / samplerate; -+ -+ write(shine.encode(convertInterleavedBuffer(buf, format.channels, samples))); -+ }); -+ -+ reader.on("end", () => { -+ write(shine.close()); -+ -+ const ended = new Date(); -+ const encodingTime = (ended.getTime() - started.getTime()) / 1000; -+ console.log("Done encoding."); -+ console.log(`File duration: ${duration.toFixed(2)} seconds`); -+ console.log(`Encoding time: ${encodingTime.toFixed(2)} seconds`); -+ console.log(`Encoding rate: ${(duration / encodingTime).toFixed(2)}X`); -+ process.exit(0); -+ }); -+ }); -+}; -+ -+exec(); -diff --git a/js/test/node/package-lock.json b/js/test/node/package-lock.json -index 0096742..752a7c7 100644 ---- a/js/test/node/package-lock.json -+++ b/js/test/node/package-lock.json -@@ -1,49 +1,493 @@ - { - "name": "shine-js-test", - "version": "0.0.1", -- "lockfileVersion": 1, -+ "lockfileVersion": 2, - "requires": true, -+ "packages": { -+ "": { -+ "name": "shine-js-test", -+ "version": "0.0.1", -+ "dependencies": { -+ "@toots/shine.js": "file:../..", -+ "@types/node": "^18.11.18", -+ "ts-node": "^10.9.1", -+ "typescript": "^4.9.4", -+ "wav": "^1.0.2" -+ } -+ }, -+ "../..": { -+ "name": "@toots/shine.js", -+ "version": "1.0.1", -+ "license": "LGPL-2.0-only" -+ }, -+ "node_modules/@cspotcode/source-map-support": { -+ "version": "0.8.1", -+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", -+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", -+ "dependencies": { -+ "@jridgewell/trace-mapping": "0.3.9" -+ }, -+ "engines": { -+ "node": ">=12" -+ } -+ }, -+ "node_modules/@jridgewell/resolve-uri": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", -+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", -+ "engines": { -+ "node": ">=6.0.0" -+ } -+ }, -+ "node_modules/@jridgewell/sourcemap-codec": { -+ "version": "1.4.14", -+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", -+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" -+ }, -+ "node_modules/@jridgewell/trace-mapping": { -+ "version": "0.3.9", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", -+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", -+ "dependencies": { -+ "@jridgewell/resolve-uri": "^3.0.3", -+ "@jridgewell/sourcemap-codec": "^1.4.10" -+ } -+ }, -+ "node_modules/@toots/shine.js": { -+ "resolved": "../..", -+ "link": true -+ }, -+ "node_modules/@tsconfig/node10": { -+ "version": "1.0.9", -+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", -+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" -+ }, -+ "node_modules/@tsconfig/node12": { -+ "version": "1.0.11", -+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", -+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" -+ }, -+ "node_modules/@tsconfig/node14": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", -+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" -+ }, -+ "node_modules/@tsconfig/node16": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", -+ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" -+ }, -+ "node_modules/@types/node": { -+ "version": "18.11.18", -+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", -+ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" -+ }, -+ "node_modules/acorn": { -+ "version": "8.8.1", -+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", -+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", -+ "bin": { -+ "acorn": "bin/acorn" -+ }, -+ "engines": { -+ "node": ">=0.4.0" -+ } -+ }, -+ "node_modules/acorn-walk": { -+ "version": "8.2.0", -+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", -+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", -+ "engines": { -+ "node": ">=0.4.0" -+ } -+ }, -+ "node_modules/arg": { -+ "version": "4.1.3", -+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", -+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" -+ }, -+ "node_modules/buffer-alloc": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", -+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", -+ "dependencies": { -+ "buffer-alloc-unsafe": "^1.1.0", -+ "buffer-fill": "^1.0.0" -+ } -+ }, -+ "node_modules/buffer-alloc-unsafe": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", -+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" -+ }, -+ "node_modules/buffer-fill": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", -+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" -+ }, -+ "node_modules/buffer-from": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", -+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" -+ }, -+ "node_modules/core-util-is": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", -+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" -+ }, -+ "node_modules/create-require": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", -+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" -+ }, -+ "node_modules/debug": { -+ "version": "2.6.9", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", -+ "dependencies": { -+ "ms": "2.0.0" -+ } -+ }, -+ "node_modules/diff": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", -+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", -+ "engines": { -+ "node": ">=0.3.1" -+ } -+ }, -+ "node_modules/inherits": { -+ "version": "2.0.3", -+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", -+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" -+ }, -+ "node_modules/isarray": { -+ "version": "0.0.1", -+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", -+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" -+ }, -+ "node_modules/make-error": { -+ "version": "1.3.6", -+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", -+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" -+ }, -+ "node_modules/ms": { -+ "version": "2.0.0", -+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", -+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" -+ }, -+ "node_modules/readable-stream": { -+ "version": "1.1.14", -+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", -+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", -+ "dependencies": { -+ "core-util-is": "~1.0.0", -+ "inherits": "~2.0.1", -+ "isarray": "0.0.1", -+ "string_decoder": "~0.10.x" -+ } -+ }, -+ "node_modules/stream-parser": { -+ "version": "0.3.1", -+ "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", -+ "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", -+ "dependencies": { -+ "debug": "2" -+ } -+ }, -+ "node_modules/string_decoder": { -+ "version": "0.10.31", -+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", -+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" -+ }, -+ "node_modules/ts-node": { -+ "version": "10.9.1", -+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", -+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", -+ "dependencies": { -+ "@cspotcode/source-map-support": "^0.8.0", -+ "@tsconfig/node10": "^1.0.7", -+ "@tsconfig/node12": "^1.0.7", -+ "@tsconfig/node14": "^1.0.0", -+ "@tsconfig/node16": "^1.0.2", -+ "acorn": "^8.4.1", -+ "acorn-walk": "^8.1.1", -+ "arg": "^4.1.0", -+ "create-require": "^1.1.0", -+ "diff": "^4.0.1", -+ "make-error": "^1.1.1", -+ "v8-compile-cache-lib": "^3.0.1", -+ "yn": "3.1.1" -+ }, -+ "bin": { -+ "ts-node": "dist/bin.js", -+ "ts-node-cwd": "dist/bin-cwd.js", -+ "ts-node-esm": "dist/bin-esm.js", -+ "ts-node-script": "dist/bin-script.js", -+ "ts-node-transpile-only": "dist/bin-transpile.js", -+ "ts-script": "dist/bin-script-deprecated.js" -+ }, -+ "peerDependencies": { -+ "@swc/core": ">=1.2.50", -+ "@swc/wasm": ">=1.2.50", -+ "@types/node": "*", -+ "typescript": ">=2.7" -+ }, -+ "peerDependenciesMeta": { -+ "@swc/core": { -+ "optional": true -+ }, -+ "@swc/wasm": { -+ "optional": true -+ } -+ } -+ }, -+ "node_modules/typescript": { -+ "version": "4.9.4", -+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", -+ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", -+ "bin": { -+ "tsc": "bin/tsc", -+ "tsserver": "bin/tsserver" -+ }, -+ "engines": { -+ "node": ">=4.2.0" -+ } -+ }, -+ "node_modules/v8-compile-cache-lib": { -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", -+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" -+ }, -+ "node_modules/wav": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz", -+ "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==", -+ "dependencies": { -+ "buffer-alloc": "^1.1.0", -+ "buffer-from": "^1.0.0", -+ "debug": "^2.2.0", -+ "readable-stream": "^1.1.14", -+ "stream-parser": "^0.3.1" -+ } -+ }, -+ "node_modules/yn": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", -+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", -+ "engines": { -+ "node": ">=6" -+ } -+ } -+ }, - "dependencies": { -- "coffee-script": { -- "version": "1.6.3", -- "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.3.tgz", -- "integrity": "sha1-Y1XTLPGwTN/2tITl5xF4Ky8MOb4=" -+ "@cspotcode/source-map-support": { -+ "version": "0.8.1", -+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", -+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", -+ "requires": { -+ "@jridgewell/trace-mapping": "0.3.9" -+ } -+ }, -+ "@jridgewell/resolve-uri": { -+ "version": "3.1.0", -+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", -+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" -+ }, -+ "@jridgewell/sourcemap-codec": { -+ "version": "1.4.14", -+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", -+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" -+ }, -+ "@jridgewell/trace-mapping": { -+ "version": "0.3.9", -+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", -+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", -+ "requires": { -+ "@jridgewell/resolve-uri": "^3.0.3", -+ "@jridgewell/sourcemap-codec": "^1.4.10" -+ } -+ }, -+ "@toots/shine.js": { -+ "version": "file:../.." -+ }, -+ "@tsconfig/node10": { -+ "version": "1.0.9", -+ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", -+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" -+ }, -+ "@tsconfig/node12": { -+ "version": "1.0.11", -+ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", -+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" -+ }, -+ "@tsconfig/node14": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", -+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" -+ }, -+ "@tsconfig/node16": { -+ "version": "1.0.3", -+ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", -+ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" -+ }, -+ "@types/node": { -+ "version": "18.11.18", -+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", -+ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" -+ }, -+ "acorn": { -+ "version": "8.8.1", -+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", -+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" -+ }, -+ "acorn-walk": { -+ "version": "8.2.0", -+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", -+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" -+ }, -+ "arg": { -+ "version": "4.1.3", -+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", -+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" -+ }, -+ "buffer-alloc": { -+ "version": "1.2.0", -+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", -+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", -+ "requires": { -+ "buffer-alloc-unsafe": "^1.1.0", -+ "buffer-fill": "^1.0.0" -+ } -+ }, -+ "buffer-alloc-unsafe": { -+ "version": "1.1.0", -+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", -+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" -+ }, -+ "buffer-fill": { -+ "version": "1.0.0", -+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", -+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" -+ }, -+ "buffer-from": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", -+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" -+ }, -+ "core-util-is": { -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", -+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" -+ }, -+ "create-require": { -+ "version": "1.1.1", -+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", -+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "debug": { -- "version": "2.6.8", -- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", -- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", -+ "version": "2.6.9", -+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", -+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, -+ "diff": { -+ "version": "4.0.2", -+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", -+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" -+ }, -+ "inherits": { -+ "version": "2.0.3", -+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", -+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" -+ }, -+ "isarray": { -+ "version": "0.0.1", -+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", -+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" -+ }, -+ "make-error": { -+ "version": "1.3.6", -+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", -+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" -+ }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "readable-stream": { -- "version": "0.0.4", -- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz", -- "integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40=" -+ "version": "1.1.14", -+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", -+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", -+ "requires": { -+ "core-util-is": "~1.0.0", -+ "inherits": "~2.0.1", -+ "isarray": "0.0.1", -+ "string_decoder": "~0.10.x" -+ } - }, - "stream-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", - "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", - "requires": { -- "debug": "2.6.8" -+ "debug": "2" - } - }, -+ "string_decoder": { -+ "version": "0.10.31", -+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", -+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" -+ }, -+ "ts-node": { -+ "version": "10.9.1", -+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", -+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", -+ "requires": { -+ "@cspotcode/source-map-support": "^0.8.0", -+ "@tsconfig/node10": "^1.0.7", -+ "@tsconfig/node12": "^1.0.7", -+ "@tsconfig/node14": "^1.0.0", -+ "@tsconfig/node16": "^1.0.2", -+ "acorn": "^8.4.1", -+ "acorn-walk": "^8.1.1", -+ "arg": "^4.1.0", -+ "create-require": "^1.1.0", -+ "diff": "^4.0.1", -+ "make-error": "^1.1.1", -+ "v8-compile-cache-lib": "^3.0.1", -+ "yn": "3.1.1" -+ } -+ }, -+ "typescript": { -+ "version": "4.9.4", -+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", -+ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" -+ }, -+ "v8-compile-cache-lib": { -+ "version": "3.0.1", -+ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", -+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" -+ }, - "wav": { -- "version": "0.1.0", -- "resolved": "https://registry.npmjs.org/wav/-/wav-0.1.0.tgz", -- "integrity": "sha1-5wTSp2nqIz858tZ5Xout1l9YsAk=", -+ "version": "1.0.2", -+ "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz", -+ "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==", - "requires": { -- "debug": "2.6.8", -- "readable-stream": "0.0.4", -- "stream-parser": "0.3.1" -+ "buffer-alloc": "^1.1.0", -+ "buffer-from": "^1.0.0", -+ "debug": "^2.2.0", -+ "readable-stream": "^1.1.14", -+ "stream-parser": "^0.3.1" - } -+ }, -+ "yn": { -+ "version": "3.1.1", -+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", -+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - } - } - } -diff --git a/js/test/node/package.json b/js/test/node/package.json -index 5160dab..650299c 100644 ---- a/js/test/node/package.json -+++ b/js/test/node/package.json -@@ -2,26 +2,16 @@ - "name": "shine-js-test", - "description": "Test encoder for libshine.js", - "version": "0.0.1", -- "homepage": "https://github.com/savonet/shine", - "author": "Romain Beauxis <toots@rastageeks.org", -- "repository": { -- "type": "git", -- "url": "git://github.com/savonet/shine" -- }, -- "bugs": { -- "mail": "toots@rastageeks.org", -- "url": "http://github.com/savonet/shine/issues" -- }, -- "main": "test.coffee", - "scripts": { -- "test": "coffee ./encode.coffee && coffee ./rounds.coffee" -- }, -- "engine": { -- "node": ">= 0.10.7", -- "npm": "1" -+ "test": "ts-node ./encode.ts && ts-node ./rounds.ts" - }, - "dependencies": { -- "coffee-script": "1.6.3", -- "wav": "0.1.0" -+ "@toots/shine.js": "file:../..", -+ "@types/node": "^18.11.18", -+ "@types/wav": "^1.0.1", -+ "ts-node": "^10.9.1", -+ "typescript": "^4.9.4", -+ "wav": "^1.0.2" - } - } -diff --git a/js/test/node/pnpm-lock.yaml b/js/test/node/pnpm-lock.yaml -new file mode 100644 -index 0000000..58a8b69 ---- /dev/null -+++ b/js/test/node/pnpm-lock.yaml -@@ -0,0 +1,227 @@ -+lockfileVersion: 5.4 -+ -+specifiers: -+ '@toots/shine.js': file:../.. -+ '@types/node': ^18.11.18 -+ '@types/wav': ^1.0.1 -+ ts-node: ^10.9.1 -+ typescript: ^4.9.4 -+ wav: ^1.0.2 -+ -+dependencies: -+ '@toots/shine.js': file:../.. -+ '@types/node': 18.11.18 -+ '@types/wav': 1.0.1 -+ ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq -+ typescript: 4.9.4 -+ wav: 1.0.2 -+ -+packages: -+ -+ /@cspotcode/source-map-support/0.8.1: -+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} -+ engines: {node: '>=12'} -+ dependencies: -+ '@jridgewell/trace-mapping': 0.3.9 -+ dev: false -+ -+ /@jridgewell/resolve-uri/3.1.0: -+ resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} -+ engines: {node: '>=6.0.0'} -+ dev: false -+ -+ /@jridgewell/sourcemap-codec/1.4.14: -+ resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} -+ dev: false -+ -+ /@jridgewell/trace-mapping/0.3.9: -+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} -+ dependencies: -+ '@jridgewell/resolve-uri': 3.1.0 -+ '@jridgewell/sourcemap-codec': 1.4.14 -+ dev: false -+ -+ /@tsconfig/node10/1.0.9: -+ resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} -+ dev: false -+ -+ /@tsconfig/node12/1.0.11: -+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} -+ dev: false -+ -+ /@tsconfig/node14/1.0.3: -+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} -+ dev: false -+ -+ /@tsconfig/node16/1.0.3: -+ resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} -+ dev: false -+ -+ /@types/node/18.11.18: -+ resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} -+ dev: false -+ -+ /@types/wav/1.0.1: -+ resolution: {integrity: sha512-AKJeM5mqO1pdR2/HaTUQzSCm12No36KUM1larivXUmsLx+4JmMuC2Tv0kCdZzTx66h7IH2Xr92DGc9NQsXxa9Q==} -+ dependencies: -+ '@types/node': 18.11.18 -+ dev: false -+ -+ /acorn-walk/8.2.0: -+ resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} -+ engines: {node: '>=0.4.0'} -+ dev: false -+ -+ /acorn/8.8.1: -+ resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} -+ engines: {node: '>=0.4.0'} -+ hasBin: true -+ dev: false -+ -+ /arg/4.1.3: -+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} -+ dev: false -+ -+ /buffer-alloc-unsafe/1.1.0: -+ resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} -+ dev: false -+ -+ /buffer-alloc/1.2.0: -+ resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} -+ dependencies: -+ buffer-alloc-unsafe: 1.1.0 -+ buffer-fill: 1.0.0 -+ dev: false -+ -+ /buffer-fill/1.0.0: -+ resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} -+ dev: false -+ -+ /buffer-from/1.1.2: -+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} -+ dev: false -+ -+ /core-util-is/1.0.3: -+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} -+ dev: false -+ -+ /create-require/1.1.1: -+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} -+ dev: false -+ -+ /debug/2.6.9: -+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} -+ peerDependencies: -+ supports-color: '*' -+ peerDependenciesMeta: -+ supports-color: -+ optional: true -+ dependencies: -+ ms: 2.0.0 -+ dev: false -+ -+ /diff/4.0.2: -+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} -+ engines: {node: '>=0.3.1'} -+ dev: false -+ -+ /inherits/2.0.4: -+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} -+ dev: false -+ -+ /isarray/0.0.1: -+ resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} -+ dev: false -+ -+ /make-error/1.3.6: -+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} -+ dev: false -+ -+ /ms/2.0.0: -+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} -+ dev: false -+ -+ /readable-stream/1.1.14: -+ resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} -+ dependencies: -+ core-util-is: 1.0.3 -+ inherits: 2.0.4 -+ isarray: 0.0.1 -+ string_decoder: 0.10.31 -+ dev: false -+ -+ /stream-parser/0.3.1: -+ resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==} -+ dependencies: -+ debug: 2.6.9 -+ transitivePeerDependencies: -+ - supports-color -+ dev: false -+ -+ /string_decoder/0.10.31: -+ resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} -+ dev: false -+ -+ /ts-node/10.9.1_awa2wsr5thmg3i7jqycphctjfq: -+ resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} -+ hasBin: true -+ peerDependencies: -+ '@swc/core': '>=1.2.50' -+ '@swc/wasm': '>=1.2.50' -+ '@types/node': '*' -+ typescript: '>=2.7' -+ peerDependenciesMeta: -+ '@swc/core': -+ optional: true -+ '@swc/wasm': -+ optional: true -+ dependencies: -+ '@cspotcode/source-map-support': 0.8.1 -+ '@tsconfig/node10': 1.0.9 -+ '@tsconfig/node12': 1.0.11 -+ '@tsconfig/node14': 1.0.3 -+ '@tsconfig/node16': 1.0.3 -+ '@types/node': 18.11.18 -+ acorn: 8.8.1 -+ acorn-walk: 8.2.0 -+ arg: 4.1.3 -+ create-require: 1.1.1 -+ diff: 4.0.2 -+ make-error: 1.3.6 -+ typescript: 4.9.4 -+ v8-compile-cache-lib: 3.0.1 -+ yn: 3.1.1 -+ dev: false -+ -+ /typescript/4.9.4: -+ resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} -+ engines: {node: '>=4.2.0'} -+ hasBin: true -+ dev: false -+ -+ /v8-compile-cache-lib/3.0.1: -+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} -+ dev: false -+ -+ /wav/1.0.2: -+ resolution: {integrity: sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==} -+ dependencies: -+ buffer-alloc: 1.2.0 -+ buffer-from: 1.1.2 -+ debug: 2.6.9 -+ readable-stream: 1.1.14 -+ stream-parser: 0.3.1 -+ transitivePeerDependencies: -+ - supports-color -+ dev: false -+ -+ /yn/3.1.1: -+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} -+ engines: {node: '>=6'} -+ dev: false -+ -+ file:../..: -+ resolution: {directory: ../.., type: directory} -+ name: '@toots/shine.js' -+ version: 1.0.3 -+ dev: false -diff --git a/js/test/node/rounds.coffee b/js/test/node/rounds.coffee -deleted file mode 100644 -index 7be6690..0000000 ---- a/js/test/node/rounds.coffee -+++ /dev/null -@@ -1,6 +0,0 @@ --Shine = require "../../dist/libshine.js" --runRoundsTest = require "../lib/rounds.js" -- --console.log "" --runRoundsTest Shine, (s) -> -- console.log s -diff --git a/js/test/node/rounds.ts b/js/test/node/rounds.ts -new file mode 100644 -index 0000000..6f3e664 ---- /dev/null -+++ b/js/test/node/rounds.ts -@@ -0,0 +1,11 @@ -+import { Shine } from "@toots/shine.js"; -+import runRoundsTest from "../lib/rounds"; -+ -+const exec = async () => { -+ await Shine.initialized; -+ -+ console.log(""); -+ runRoundsTest(Shine, s => console.log(s)); -+}; -+ -+exec(); -diff --git a/js/test/node/tsconfig.json b/js/test/node/tsconfig.json -new file mode 100644 -index 0000000..d1045e4 ---- /dev/null -+++ b/js/test/node/tsconfig.json -@@ -0,0 +1,8 @@ -+{ -+ "include": ["**/*.ts"], -+ "compilerOptions": { -+ "allowJs": true, -+ "skipLibCheck": true, -+ "esModuleInterop": true -+ } -+} -diff --git a/src/bin/main.c b/src/bin/main.c -index ab16fea..b7b70a4 100644 ---- a/src/bin/main.c -+++ b/src/bin/main.c -@@ -35,32 +35,25 @@ int _verbose = 0; - int stereo = STEREO; - int force_mono = 0; - --int verbose() --{ -- return _verbose; --} -+int verbose() { return _verbose; } - - /* Write out the MP3 file */ --int write_mp3(long bytes, void *buffer, void *config) --{ -- return fwrite(buffer, sizeof(unsigned char), bytes, outfile) / sizeof(unsigned char); -+int write_mp3(long bytes, void *buffer, void *config) { -+ return fwrite(buffer, sizeof(unsigned char), bytes, outfile) / -+ sizeof(unsigned char); - } - - /* Output error message and exit */ --void error(char *s) --{ -+void error(char *s) { - fprintf(stderr, "Error: %s\n", s); - exit(1); - } - --static void print_name() --{ -- printf("shineenc (Liquidsoap version)\n"); --} -+static void print_name() { printf("shineenc (Liquidsoap version)\n"); } - --static void print_usage() --{ -+static void print_usage() { - printf("Usage: shineenc [options] <infile> <outfile>\n\n"); -+ printf("Use \"-\" for standard input or output.\n\n"); - printf("Options:\n"); - printf(" -h this help message\n"); - printf(" -b <bitrate> set the bitrate [8-320], default 128kbit\n"); -@@ -73,88 +66,88 @@ static void print_usage() - } - - /* Use these default settings, can be overridden */ --static void set_defaults(shine_config_t *config) --{ -+static void set_defaults(shine_config_t *config) { - shine_set_config_mpeg_defaults(&config->mpeg); - } - - /* Parse command line arguments */ --static int parse_command(int argc, char** argv, shine_config_t *config) --{ -+static int parse_command(int argc, char **argv, shine_config_t *config) { - int i = 0; - -- if(argc < 3) return 0; -+ if (argc < 3) -+ return 0; - - while (argv[++i][0] == '-' && argv[i][1] != '\000' && argv[i][1] != ' ') - switch (argv[i][1]) { -- case 'b': -- config->mpeg.bitr = atoi(argv[++i]); -- break; -- -- case 'm': -- force_mono = 1; -- break; -- -- case 'j': -- stereo = JOINT_STEREO; -- break; -- -- case 'd': -- stereo = DUAL_CHANNEL; -- break; -- -- case 'c': -- config->mpeg.copyright = 1; -- break; -- -- case 'q': -- quiet = 1; -- _verbose = 0; -- break; -- -- case 'v': -- _verbose = 1; -- quiet = 0; -- break; -- -- case 'h': -- default : -- return 0; -+ case 'b': -+ config->mpeg.bitr = atoi(argv[++i]); -+ break; -+ -+ case 'm': -+ force_mono = 1; -+ break; -+ -+ case 'j': -+ stereo = JOINT_STEREO; -+ break; -+ -+ case 'd': -+ stereo = DUAL_CHANNEL; -+ break; -+ -+ case 'c': -+ config->mpeg.copyright = 1; -+ break; -+ -+ case 'q': -+ quiet = 1; -+ _verbose = 0; -+ break; -+ -+ case 'v': -+ _verbose = 1; -+ quiet = 0; -+ break; -+ -+ case 'h': -+ default: -+ return 0; - } - -- if (argc - i != 2) return 0; -+ if (argc - i != 2) -+ return 0; - infname = argv[i++]; - outfname = argv[i]; - return 1; - } - - /* Print some info about what we're going to encode */ --static void check_config(shine_config_t *config) --{ -- static char *version_names[4] = { "2.5", "reserved", "II", "I" }; -- static char *mode_names[4] = { "stereo", "joint-stereo", "dual-channel", "mono" }; -- static char *demp_names[4] = { "none", "50/15us", "", "CITT" }; -+static void check_config(shine_config_t *config) { -+ static char *version_names[4] = {"2.5", "reserved", "II", "I"}; -+ static char *mode_names[4] = {"stereo", "joint-stereo", "dual-channel", -+ "mono"}; -+ static char *demp_names[4] = {"none", "50/15us", "", "CITT"}; - - printf("MPEG-%s layer III, %s Psychoacoustic Model: Shine\n", -- version_names[shine_check_config(config->wave.samplerate, config->mpeg.bitr)], -- mode_names[config->mpeg.mode]); -+ version_names[shine_check_config(config->wave.samplerate, -+ config->mpeg.bitr)], -+ mode_names[config->mpeg.mode]); - printf("Bitrate: %d kbps ", config->mpeg.bitr); -- printf("De-emphasis: %s %s %s\n", -- demp_names[config->mpeg.emph], -- ((config->mpeg.original) ? "Original" : ""), -- ((config->mpeg.copyright) ? "(C)" : "")); -+ printf("De-emphasis: %s %s %s\n", demp_names[config->mpeg.emph], -+ ((config->mpeg.original) ? "Original" : ""), -+ ((config->mpeg.copyright) ? "(C)" : "")); - printf("Encoding \"%s\" to \"%s\"\n", infname, outfname); - } - --int main(int argc, char **argv) --{ -- wave_t wave; -- time_t start_time, end_time; -- int16_t buffer[2*SHINE_MAX_SAMPLES]; -+int main(int argc, char **argv) { -+ wave_t wave; -+ time_t start_time, end_time; -+ int16_t buffer[2 * SHINE_MAX_SAMPLES]; - shine_config_t config; -- shine_t s; -- int written; -- unsigned char *data; -+ shine_t s; -+ int written; -+ unsigned char *data; -+ int samples_per_pass; - - time(&start_time); - -@@ -168,7 +161,8 @@ int main(int argc, char **argv) - - quiet = quiet || !strcmp(outfname, "-"); - -- if (!quiet) print_name(); -+ if (!quiet) -+ print_name(); - - /* Open the input file and fill the config shine_wave_t header */ - if (!wave_open(infname, &wave, &config, quiet)) -@@ -205,17 +199,17 @@ int main(int argc, char **argv) - // assert(s != NULL); - - /* Print some info about the file about to be created (optional) */ -- if (!quiet) check_config(&config); -+ if (!quiet) -+ check_config(&config); - -- int samples_per_pass = shine_samples_per_pass(s); -+ samples_per_pass = shine_samples_per_pass(s); - - /* All the magic happens here */ - while (wave_get(buffer, &wave, samples_per_pass)) { - data = shine_encode_buffer_interleaved(s, buffer, &written); -- if ( write_mp3(written, data, &config) != written ) -- { -- fprintf(stderr, "shineenc: write error\n"); -- return 1; -+ if (write_mp3(written, data, &config) != written) { -+ fprintf(stderr, "shineenc: write error\n"); -+ return 1; - } - } - -@@ -235,7 +229,9 @@ int main(int argc, char **argv) - time(&end_time); - end_time -= start_time; - if (!quiet) -- printf("Finished in %02ld:%02ld:%02ld (%01.1fx realtime)\n", end_time / 3600, (end_time / 60) % 60, end_time % 60, (float)wave.duration / (float)end_time); -+ printf("Finished in %02ld:%02ld:%02ld (%01.1fx realtime)\n", -+ end_time / 3600, (end_time / 60) % 60, end_time % 60, -+ (float)wave.duration / (float)end_time); - - return 0; - } -diff --git a/src/bin/main.h b/src/bin/main.h -index 52fbbb2..7ab9691 100644 ---- a/src/bin/main.h -+++ b/src/bin/main.h -@@ -2,6 +2,6 @@ - #define MAIN_H - - void error(char *s); --int verbose(); -+int verbose(); - - #endif -diff --git a/src/bin/wave.c b/src/bin/wave.c -index 5d19004..3c7ab81 100644 ---- a/src/bin/wave.c -+++ b/src/bin/wave.c -@@ -9,17 +9,32 @@ - #include "layer3.h" - - /* Local header */ --#include <stdint.h> --#include <string.h> - #include "main.h" - #include "wave.h" -+#include <stdint.h> -+#include <string.h> - - /* RISC OS specifics */ --#define WAVE 0xfb1 /* Wave filetype */ --#define DATA 0xffd /* Data filetype */ -+#define WAVE 0xfb1 /* Wave filetype */ -+#define DATA 0xffd /* Data filetype */ - - #define MODE_MONO 3 - -+#ifdef SHINE_BIG_ENDIAN -+#if defined(SHINE_HAVE_BSWAP_H) -+#include <byteswap.h> -+#elif defined(__GNUC__) && \ -+ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)) -+#define bswap_16(x) __builtin_bswap16(x) -+#define bswap_32(x) __builtin_bswap32(x) -+#else -+#define bswap_16(x) ((((x) >> 8) & 0xff) | (((x)&0xff) << 8)) -+#define bswap_32(x) \ -+ ((((x)&0xFF) << 24) | (((x) >> 24) & 0xFF) | (((x)&0x0000FF00) << 8) | \ -+ (((x)&0x00FF0000) >> 8)) -+#endif -+#endif -+ - typedef struct { - char id[4]; - uint32_t length; -@@ -32,14 +47,28 @@ typedef struct { - - typedef struct { - riff_chunk_header_t header; -- uint16_t format; /* MS PCM = 1 */ -- uint16_t channels; /* channels, mono = 1, stereo = 2 */ -- uint32_t sample_rate; /* samples per second = 44100 */ -- uint32_t byte_rate; /* bytes per second = samp_rate * byte_samp = 176400 */ -- uint16_t frame_size; /* block align (bytes per sample) = channels * bits_per_sample / 8 = 4 */ -- uint16_t depth; /* bits per sample = 16 for MS PCM (format specific) */ -+ uint16_t format; /* MS PCM = 1 */ -+ uint16_t channels; /* channels, mono = 1, stereo = 2 */ -+ uint32_t sample_rate; /* samples per second = 44100 */ -+ uint32_t byte_rate; /* bytes per second = samp_rate * byte_samp = 176400 */ -+ uint16_t frame_size; /* block align (bytes per sample) = channels * -+ bits_per_sample / 8 = 4 */ -+ uint16_t depth; /* bits per sample = 16 for MS PCM (format specific) */ - } fmt_chunk_t; - -+#ifdef SHINE_BIG_ENDIAN -+#define native_fmt_chunk(fmt) \ -+ { \ -+ fmt.header.length = bswap_32(fmt.header.length); \ -+ fmt.format = bswap_16(fmt.format); \ -+ fmt.channels = bswap_16(fmt.channels); \ -+ fmt.sample_rate = bswap_32(fmt.sample_rate); \ -+ fmt.byte_rate = bswap_32(fmt.byte_rate); \ -+ fmt.frame_size = bswap_16(fmt.frame_size); \ -+ fmt.depth = bswap_16(fmt.depth); \ -+ } -+#endif -+ - void wave_seek(FILE *file, int has_seek, uint32_t bytes) { - uint32_t i; - if (has_seek == 1) -@@ -50,15 +79,15 @@ void wave_seek(FILE *file, int has_seek, uint32_t bytes) { - } - } - --unsigned char wave_get_chunk_header(FILE *file, int has_seek, const char id[4], riff_chunk_header_t *header) --{ -+unsigned char wave_get_chunk_header(FILE *file, int has_seek, const char id[4], -+ riff_chunk_header_t *header) { - unsigned char found = 0; - uint32_t chunk_length; - - if (verbose()) - fprintf(stderr, "Looking for chunk '%s'\n", id); - -- while(!found) { -+ while (!found) { - if (fread(header, sizeof(riff_chunk_header_t), 1, file) != 1) { - if (feof(file)) - return 0; -@@ -69,24 +98,20 @@ unsigned char wave_get_chunk_header(FILE *file, int has_seek, const char id[4], - /* chunks must be word-aligned, chunk data doesn't need to */ - chunk_length = header->length + header->length % 2; - if (verbose()) { -- fprintf(stderr, "Found chunk '%.4s', length: %u\n", header->id, header->length); -+ fprintf(stderr, "Found chunk '%.4s', length: %u\n", header->id, -+ header->length); - } - - if (strncmp(header->id, id, 4) == 0) - return 1; -- -+ - wave_seek(file, has_seek, chunk_length); - } - - return 1; - } - -- --void wave_close(wave_t *wave) --{ -- fclose(wave->file); --} -- -+void wave_close(wave_t *wave) { fclose(wave->file); } - - /* - * wave_open: -@@ -94,16 +119,17 @@ void wave_close(wave_t *wave) - * Opens and verifies the header of the Input Wave file. The file pointer is - * left pointing to the start of the samples. - */ --unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config, int quiet) --{ -- static char *channel_mappings[] = { NULL, "mono", "stereo" }; -+unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config, -+ int quiet) { -+ static char *channel_mappings[] = {NULL, "mono", "stereo"}; - wave_chunk_t wave_chunk; - fmt_chunk_t fmt_chunk; - riff_chunk_header_t data_chunk; - uint32_t fmt_data, fmt_length; - - if (!strcmp(fname, "-")) { -- /* TODO: support raw PCM stream with commandline parameters specifying format */ -+ /* TODO: support raw PCM stream with commandline parameters specifying -+ * format */ - wave->file = stdin; - wave->has_seek = 0; - } else { -@@ -124,14 +150,19 @@ unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config, - error("Not a WAVE audio file"); - - /* Check the fmt chunk */ -- if (!wave_get_chunk_header(wave->file, wave->has_seek, "fmt ", (riff_chunk_header_t *)&fmt_chunk)) -+ if (!wave_get_chunk_header(wave->file, wave->has_seek, "fmt ", -+ (riff_chunk_header_t *)&fmt_chunk)) - error("WAVE fmt chunk not found"); - - fmt_data = sizeof(fmt_chunk_t) - sizeof(riff_chunk_header_t); - -- if(fread(&fmt_chunk.format, fmt_data, 1, wave->file) != 1) -+ if (fread(&fmt_chunk.format, fmt_data, 1, wave->file) != 1) - error("Read error"); - -+#ifdef SHINE_BIG_ENDIAN -+ native_fmt_chunk(fmt_chunk); -+#endif -+ - if (verbose()) - fprintf(stderr, "WAVE format: %u\n", fmt_chunk.format); - -@@ -153,34 +184,31 @@ unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config, - if (!wave_get_chunk_header(wave->file, wave->has_seek, "data", &data_chunk)) - error("WAVE data chunk not found"); - -- config->wave.channels = fmt_chunk.channels; -+ config->wave.channels = fmt_chunk.channels; - config->wave.samplerate = fmt_chunk.sample_rate; - - wave->channels = fmt_chunk.channels; -- wave->length = data_chunk.length; -+ wave->length = data_chunk.length; - wave->duration = data_chunk.length / fmt_chunk.byte_rate; - - if (!quiet) - printf("%s, %s %ldHz %ldbit, duration: %02ld:%02ld:%02ld\n", -- "WAVE PCM Data", channel_mappings[fmt_chunk.channels], (long)fmt_chunk.sample_rate, (long)fmt_chunk.depth, -- (long)wave->duration / 3600, (long)(wave->duration / 60) % 60, (long)wave->duration % 60); -+ "WAVE PCM Data", channel_mappings[fmt_chunk.channels], -+ (long)fmt_chunk.sample_rate, (long)fmt_chunk.depth, -+ (long)wave->duration / 3600, (long)(wave->duration / 60) % 60, -+ (long)wave->duration % 60); - return 1; - } - - #ifdef SHINE_BIG_ENDIAN --#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)) --#define bswap_16(x) __builtin_bswap16(x) --#else --#define bswap_16(x) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) --#endif -- --void swap_buffer(int16_t *sample_buffer, int length) --{ -+void swap_buffer(int16_t *sample_buffer, int length) { - int16_t *end = sample_buffer + length; - - if (length >= 2 * sizeof(long) / sizeof(int16_t)) { -- const unsigned long mask = (~0UL / 0xffff) * 0xff; /* 0x00ff00ff or 0x00ff00ff00ff00ff */ -- unsigned long *long_ptr = (unsigned long *)((unsigned long)sample_buffer & -sizeof(long)); -+ const unsigned long mask = -+ (~0UL / 0xffff) * 0xff; /* 0x00ff00ff or 0x00ff00ff00ff00ff */ -+ unsigned long *long_ptr = -+ (unsigned long *)((unsigned long)sample_buffer & -sizeof(long)); - - /* make sample_buffer aligned on word boundary */ - if ((int16_t *)long_ptr != sample_buffer) { -@@ -212,18 +240,19 @@ void swap_buffer(int16_t *sample_buffer, int length) - */ - - /* TODO: respect data chunk length */ --int read_samples(int16_t *sample_buffer, int frame_size, FILE *file) --{ -- int samples_read=0; -+int read_samples(int16_t *sample_buffer, int frame_size, FILE *file) { -+ int samples_read = 0; - -- samples_read = fread(sample_buffer,sizeof(int16_t),frame_size, file); -+ samples_read = fread(sample_buffer, sizeof(int16_t), frame_size, file); - - #ifdef SHINE_BIG_ENDIAN - swap_buffer(sample_buffer, samples_read); - #endif - -- if(samples_read<frame_size && samples_read>0) { /* Pad sample with zero's */ -- memset(sample_buffer + samples_read, 0, (frame_size - samples_read) * sizeof(int16_t)); -+ if (samples_read < frame_size && -+ samples_read > 0) { /* Pad sample with zero's */ -+ memset(sample_buffer + samples_read, 0, -+ (frame_size - samples_read) * sizeof(int16_t)); - samples_read = frame_size; - } - -@@ -236,8 +265,6 @@ int read_samples(int16_t *sample_buffer, int frame_size, FILE *file) - * Expects an interleaved 16bit pcm stream from read_samples, which it - * reads into the given buffer. - */ --int wave_get(int16_t *buffer, wave_t *wave, int samp_per_pass) --{ -- return read_samples(buffer,samp_per_pass*wave->channels, wave->file); -+int wave_get(int16_t *buffer, wave_t *wave, int samp_per_pass) { -+ return read_samples(buffer, samp_per_pass * wave->channels, wave->file); - } -- -diff --git a/src/bin/wave.h b/src/bin/wave.h -index 5a290a0..b77f0b5 100644 ---- a/src/bin/wave.h -+++ b/src/bin/wave.h -@@ -4,15 +4,16 @@ - #include <stdio.h> - - typedef struct { -- FILE *file; -- int has_seek; -- int channels; -- long length; -- long duration; -+ FILE *file; -+ int has_seek; -+ int channels; -+ long length; -+ long duration; - } wave_t; - --unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config, int quiet); --int wave_get(int16_t *buffer, wave_t *wave, int samp_per_frame); -+unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config, -+ int quiet); -+int wave_get(int16_t *buffer, wave_t *wave, int samp_per_frame); - void wave_close(wave_t *wave); - - #endif -diff --git a/src/lib/bitstream.c b/src/lib/bitstream.c -index 29afcb1..9408f2c 100644 ---- a/src/lib/bitstream.c -+++ b/src/lib/bitstream.c -@@ -7,17 +7,16 @@ - * Removed unused functions. Feb 2001 P.Everett - */ - --#include "types.h" - #include "bitstream.h" -+#include "types.h" - --#if !defined(__APPLE__) -+#if !defined(__APPLE__) && !defined(__FreeBSD__) - #include <malloc.h> - #endif - - /* open the device to write the bit stream into it */ --void shine_open_bit_stream(bitstream_t *bs, int size) --{ -- bs->data = (unsigned char *)malloc(size*sizeof(unsigned char)); -+void shine_open_bit_stream(bitstream_t *bs, int size) { -+ bs->data = (unsigned char *)malloc(size * sizeof(unsigned char)); - bs->data_size = size; - bs->data_position = 0; - bs->cache = 0; -@@ -25,8 +24,7 @@ void shine_open_bit_stream(bitstream_t *bs, int size) - } - - /*close the device containing the bit stream */ --void shine_close_bit_stream(bitstream_t *bs) --{ -+void shine_close_bit_stream(bitstream_t *bs) { - if (bs->data) - free(bs->data); - } -@@ -39,42 +37,40 @@ void shine_close_bit_stream(bitstream_t *bs) - * val = value to write into the buffer - * N = number of bits of val - */ --void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N) --{ -+void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N) { - #ifdef DEBUG -- if (N > 32) -- printf("Cannot write more than 32 bits at a time.\n"); -- if (N < 32 && (val >> N) != 0) -- printf("Upper bits (higher than %d) are not all zeros.\n", N); -+ if (N > 32) -+ printf("Cannot write more than 32 bits at a time.\n"); -+ if (N < 32 && (val >> N) != 0) -+ printf("Upper bits (higher than %d) are not all zeros.\n", N); - #endif - -- if (bs->cache_bits > N) { -- bs->cache_bits -= N; -- bs->cache |= val << bs->cache_bits; -- } else { -- if (bs->data_position + sizeof(unsigned int) >= bs->data_size) { -- bs->data = (unsigned char *)realloc(bs->data, bs->data_size + (bs->data_size / 2)); -- bs->data_size += (bs->data_size / 2); -- } -+ if (bs->cache_bits > N) { -+ bs->cache_bits -= N; -+ bs->cache |= val << bs->cache_bits; -+ } else { -+ if (bs->data_position + sizeof(unsigned int) >= bs->data_size) { -+ bs->data = (unsigned char *)realloc(bs->data, -+ bs->data_size + (bs->data_size / 2)); -+ bs->data_size += (bs->data_size / 2); -+ } - -- N -= bs->cache_bits; -- bs->cache |= val >> N; -+ N -= bs->cache_bits; -+ bs->cache |= val >> N; - #ifdef SHINE_BIG_ENDIAN -- *(unsigned int*)(bs->data + bs->data_position) = bs->cache; -+ *(unsigned int *)(bs->data + bs->data_position) = bs->cache; - #else -- *(unsigned int*)(bs->data + bs->data_position) = SWAB32(bs->cache); -+ *(unsigned int *)(bs->data + bs->data_position) = SWAB32(bs->cache); - #endif -- bs->data_position += sizeof(unsigned int); -- bs->cache_bits = 32 - N; -- if (N != 0) -- bs->cache = val << bs->cache_bits; -- else -- bs->cache = 0; -- } -+ bs->data_position += sizeof(unsigned int); -+ bs->cache_bits = 32 - N; -+ if (N != 0) -+ bs->cache = val << bs->cache_bits; -+ else -+ bs->cache = 0; -+ } - } - --int shine_get_bits_count(bitstream_t *bs) --{ -- return bs->data_position * 8 + 32 - bs->cache_bits; -+int shine_get_bits_count(bitstream_t *bs) { -+ return bs->data_position * 8 + 32 - bs->cache_bits; - } -- -diff --git a/src/lib/bitstream.h b/src/lib/bitstream.h -index d910ef9..4f7efb6 100644 ---- a/src/lib/bitstream.h -+++ b/src/lib/bitstream.h -@@ -1,28 +1,29 @@ - #ifndef BITSTREAM_H - #define BITSTREAM_H - --typedef struct bit_stream_struc { -- unsigned char *data; /* Processed data */ -- int data_size; /* Total data size */ -- int data_position; /* Data position */ -- unsigned int cache; /* bit stream cache */ -- int cache_bits; /* free bits in cache */ -+typedef struct bit_stream_struc { -+ unsigned char *data; /* Processed data */ -+ int data_size; /* Total data size */ -+ int data_position; /* Data position */ -+ unsigned int cache; /* bit stream cache */ -+ int cache_bits; /* free bits in cache */ - } bitstream_t; - - /* "bit_stream.h" Definitions */ - --#define MINIMUM 4 /* Minimum size of the buffer in bytes */ --#define MAX_LENGTH 32 /* Maximum length of word written or -- read from bit stream */ -+#define MINIMUM 4 /* Minimum size of the buffer in bytes */ -+#define MAX_LENGTH \ -+ 32 /* Maximum length of word written or \ -+ read from bit stream */ - --#define BUFFER_SIZE 4096 -+#define BUFFER_SIZE 4096 - --#define MIN(A, B) ((A) < (B) ? (A) : (B)) --#define MAX(A, B) ((A) > (B) ? (A) : (B)) -+#define MIN(A, B) ((A) < (B) ? (A) : (B)) -+#define MAX(A, B) ((A) > (B) ? (A) : (B)) - --void shine_open_bit_stream(bitstream_t *bs,const int size); -+void shine_open_bit_stream(bitstream_t *bs, const int size); - void shine_close_bit_stream(bitstream_t *bs); --void shine_putbits(bitstream_t *bs,unsigned int val, unsigned int N); --int shine_get_bits_count(bitstream_t *bs); -+void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N); -+int shine_get_bits_count(bitstream_t *bs); - - #endif -diff --git a/src/lib/huffman.c b/src/lib/huffman.c -index d4bd6aa..854ae41 100644 ---- a/src/lib/huffman.c -+++ b/src/lib/huffman.c -@@ -1,120 +1,248 @@ - /* huffman.c */ - --#include "types.h" - #include "huffman.h" - #include "bitstream.h" - #include "l3bitstream.h" -+#include "types.h" - --const HUFFBITS dmask = 1 << (((sizeof(HUFFBITS))<<3)-1); --const unsigned int hs = sizeof(HUFFBITS)<<3; -+const HUFFBITS dmask = 1 << (((sizeof(HUFFBITS)) << 3) - 1); -+const unsigned int hs = sizeof(HUFFBITS) << 3; - --static const HUFFBITS t1HB[] = {1, 1, 1, 0}; --static const HUFFBITS t2HB[] = {1, 2, 1, 3, 1, 1, 3, 2, 0}; --static const HUFFBITS t3HB[] = {3, 2, 1, 1, 1, 1, 3, 2, 0}; --static const HUFFBITS t5HB[] = {1, 2, 6, 5, 3, 1, 4, 4, 7, 5, 7, 1, 6, 1, 1, 0}; --static const HUFFBITS t6HB[] = {7, 3, 5, 1, 6, 2, 3, 2, 5, 4, 4, 1, 3, 3, 2, 0}; --static const HUFFBITS t7HB[] = {1, 2, 10, 19, 16, 10, 3, 3, 7, 10, 5, 3, 11, 4, 13, 17, 8, 4, 12, 11, 18, 15, 11, 2, 7, 6, 9, 14, 3, 1, 6, 4, 5, 3, 2, 0}; --static const HUFFBITS t8HB[] = {3, 4, 6, 18, 12, 5, 5, 1, 2, 16, 9, 3, 7, 3, 5, 14, 7, 3, 19, 17, 15, 13, 10, 4, 13, 5, 8, 11, 5, 1, 12, 4, 4, 1, 1, 0}; --static const HUFFBITS t9HB[] = {7, 5, 9, 14, 15, 7, 6, 4, 5, 5, 6, 7, 7, 6, 8, 8, 8, 5, 15, 6, 9, 10, 5, 1, 11, 7, 9, 6, 4, 1, 14, 4, 6, 2, 6, 0}; --static const HUFFBITS t10HB[] = {1, 2, 10, 23, 35, 30, 12, 17, 3, 3, 8, 12, 18, 21, 12, 7, 11, 9, 15, 21, 32, 40, 19, 6, 14, 13, 22, 34, 46, 23, 18, 7, 20, 19, 33, 47, 27, 22, 9, 3, 31, 22, 41, 26, 21, 20, 5, 3, 14, 13, 10, 11, 16, 6, 5, 1, 9, 8, 7, 8, 4 , 4, 2, 0}; --static const HUFFBITS t11HB[] = {3, 4, 10, 24, 34, 33, 21, 15, 5, 3, 4, 10, 32, 17, 11, 10, 11, 7, 13, 18, 30, 31, 20, 5, 25, 11, 19, 59, 27, 18, 12, 5, 35, 33, 31, 58, 30, 16, 7, 5, 28, 26, 32, 19, 17, 15, 8, 14, 14, 12, 9, 13, 14, 9, 4, 1, 11, 4, 6, 6, 6, 3, 2, 0}; --static const HUFFBITS t12HB[] = {9, 6, 16, 33, 41, 39, 38, 26, 7, 5, 6, 9, 23, 16, 26, 11, 17, 7, 11, 14, 21, 30, 10, 7, 17, 10, 15, 12, 18, 28, 14, 5, 32, 13, 22, 19, 18, 16, 9, 5, 40, 17, 31, 29, 17, 13, 4, 2, 27, 12, 11, 15, 10, 7, 4, 1, 27, 12, 8, 12 , 6, 3, 1, 0}; --static const HUFFBITS t13HB[] = {1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19, 3, 4, 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14, 15, 13, 23, 36, 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16, 22, -- 20, 37, 61, 56, 79, 73, 64, 43, 76, 56, 37, 26, 31, 25, 14, 35, 16, 60, 57, 97, 75, 114, 91, 54, 73, 55, 41, 48, 53, 23, 24, 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, 79, 29, 74, 49, 41, 17, 47, -- 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, 59, 38, 36, 15, 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, 43, 42, 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16, 53, -- 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11, 35, 33, 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22, 53, 25, 23, 38, 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7, 34, 32, -- 28, 39, 49, 75, 30, 52, 48, 40, 52, 28, 18, 17, 9, 5, 45, 21, 34, 64, 56, 50, 49, 45, 31, 19, 12, 15, 10, 7, 6, 3, 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, 13, 10, 6, 1, 4, 2, 16, 15, 17, 27, 25, -- 20, 29, 11, 17, 12, 16, 8, 1, 1, 0, 1}; --static const HUFFBITS t15HB[] = {7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63, 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36, 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, -- 33, 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29, 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27, 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38, -- 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30, 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25, 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20, -- 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15, 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9, 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11, -- 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7, 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3, 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1, 71, -- 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0}; --static const HUFFBITS t16HB[] = {1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, 376, 17, 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, 201, 107, 207, 9, 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, 127, 117, -- 110, 209, 206, 16, 45, 21, 39, 69, 64, 114, 99, 87, 158, 140, 252, 212, 199, 387, 365, 26, 75, 36, 68, 65, 115, 101, 179, 164, 155, 264, 246, 226, 395, 382, 362, 9, 66, 30, 59, 56, 102, -- 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16, 111, 54, 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10, 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, -- 380, 889, 884, 8, 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, 727, 713, 708, 7, 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, 384, 735, 359, 710, 352, 11, 139, 129, 67, 125, -- 247, 233, 229, 219, 393, 743, 737, 720, 885, 882, 439, 4, 243, 120, 118, 115, 227, 223, 396, 746, 742, 736, 721, 712, 706, 223, 436, 6, 202, 224, 222, 218, 216, 389, 386, 381, 364, 888, -- 443, 707, 440, 437, 1728, 4, 747, 211, 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2, 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, 434, -- 0, 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, 5, 3, 1, 3}; --static const HUFFBITS t24HB[] = {15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, 88, 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, 279, 42, 47, 22, 41, 74, 68, 128, 120, 221, -- 207, 194, 182, 340, 315, 295, 541, 18, 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, 311, 293, 271, 16, 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, 323, 306, 285, -- 540, 14, 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, 341, 317, 301, 281, 262, 12, 249, 123, 121, 117, 113, 215, 206, 195, 185, 347, 330, 308, 291, 272, 520, 10, 435, 115, 111, -- 109, 211, 203, 196, 187, 353, 332, 313, 298, 283, 531, 381, 17, 427, 212, 208, 205, 201, 193, 186, 177, 169, 320, 303, 286, 268, 514, 377, 16, 335, 199, 197, 191, 189, 181, 174, 333, -- 321, 305, 289, 275, 521, 379, 371, 11, 668, 184, 183, 179, 175, 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10, 652, 346, 171, 168, 164, 318, 309, 299, 287, 276, 263, 513, 375, -- 368, 362, 6, 648, 322, 316, 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4, 620, 300, 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2, 1033, 280, 278, -- 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0, 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, 3}; --static const HUFFBITS t32HB[] = {1, 5, 4, 5, 6, 5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1}; --static const HUFFBITS t33HB[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; -+static const HUFFBITS t1HB[] = {1, 1, 1, 0}; -+static const HUFFBITS t2HB[] = {1, 2, 1, 3, 1, 1, 3, 2, 0}; -+static const HUFFBITS t3HB[] = {3, 2, 1, 1, 1, 1, 3, 2, 0}; -+static const HUFFBITS t5HB[] = {1, 2, 6, 5, 3, 1, 4, 4, 7, 5, 7, 1, 6, 1, 1, 0}; -+static const HUFFBITS t6HB[] = {7, 3, 5, 1, 6, 2, 3, 2, 5, 4, 4, 1, 3, 3, 2, 0}; -+static const HUFFBITS t7HB[] = {1, 2, 10, 19, 16, 10, 3, 3, 7, 10, 5, 3, -+ 11, 4, 13, 17, 8, 4, 12, 11, 18, 15, 11, 2, -+ 7, 6, 9, 14, 3, 1, 6, 4, 5, 3, 2, 0}; -+static const HUFFBITS t8HB[] = {3, 4, 6, 18, 12, 5, 5, 1, 2, 16, 9, 3, -+ 7, 3, 5, 14, 7, 3, 19, 17, 15, 13, 10, 4, -+ 13, 5, 8, 11, 5, 1, 12, 4, 4, 1, 1, 0}; -+static const HUFFBITS t9HB[] = {7, 5, 9, 14, 15, 7, 6, 4, 5, 5, 6, 7, -+ 7, 6, 8, 8, 8, 5, 15, 6, 9, 10, 5, 1, -+ 11, 7, 9, 6, 4, 1, 14, 4, 6, 2, 6, 0}; -+static const HUFFBITS t10HB[] = { -+ 1, 2, 10, 23, 35, 30, 12, 17, 3, 3, 8, 12, 18, 21, 12, 7, -+ 11, 9, 15, 21, 32, 40, 19, 6, 14, 13, 22, 34, 46, 23, 18, 7, -+ 20, 19, 33, 47, 27, 22, 9, 3, 31, 22, 41, 26, 21, 20, 5, 3, -+ 14, 13, 10, 11, 16, 6, 5, 1, 9, 8, 7, 8, 4, 4, 2, 0}; -+static const HUFFBITS t11HB[] = { -+ 3, 4, 10, 24, 34, 33, 21, 15, 5, 3, 4, 10, 32, 17, 11, 10, -+ 11, 7, 13, 18, 30, 31, 20, 5, 25, 11, 19, 59, 27, 18, 12, 5, -+ 35, 33, 31, 58, 30, 16, 7, 5, 28, 26, 32, 19, 17, 15, 8, 14, -+ 14, 12, 9, 13, 14, 9, 4, 1, 11, 4, 6, 6, 6, 3, 2, 0}; -+static const HUFFBITS t12HB[] = { -+ 9, 6, 16, 33, 41, 39, 38, 26, 7, 5, 6, 9, 23, 16, 26, 11, -+ 17, 7, 11, 14, 21, 30, 10, 7, 17, 10, 15, 12, 18, 28, 14, 5, -+ 32, 13, 22, 19, 18, 16, 9, 5, 40, 17, 31, 29, 17, 13, 4, 2, -+ 27, 12, 11, 15, 10, 7, 4, 1, 27, 12, 8, 12, 6, 3, 1, 0}; -+static const HUFFBITS t13HB[] = { -+ 1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19, 3, 4, -+ 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14, 15, 13, 23, 36, -+ 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16, 22, 20, 37, 61, 56, 79, -+ 73, 64, 43, 76, 56, 37, 26, 31, 25, 14, 35, 16, 60, 57, 97, 75, 114, 91, -+ 54, 73, 55, 41, 48, 53, 23, 24, 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, -+ 79, 29, 74, 49, 41, 17, 47, 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, -+ 59, 38, 36, 15, 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, -+ 43, 42, 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16, -+ 53, 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11, 35, 33, -+ 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22, 53, 25, 23, 38, -+ 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7, 34, 32, 28, 39, 49, 75, -+ 30, 52, 48, 40, 52, 28, 18, 17, 9, 5, 45, 21, 34, 64, 56, 50, 49, 45, -+ 31, 19, 12, 15, 10, 7, 6, 3, 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, -+ 13, 10, 6, 1, 4, 2, 16, 15, 17, 27, 25, 20, 29, 11, 17, 12, 16, 8, -+ 1, 1, 0, 1}; -+static const HUFFBITS t15HB[] = { -+ 7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63, -+ 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36, -+ 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, 33, -+ 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29, -+ 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27, -+ 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38, -+ 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30, -+ 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25, -+ 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20, -+ 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15, -+ 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9, -+ 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11, -+ 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7, -+ 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3, -+ 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1, -+ 71, 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0}; -+static const HUFFBITS t16HB[] = { -+ 1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, -+ 376, 17, 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, -+ 201, 107, 207, 9, 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, -+ 127, 117, 110, 209, 206, 16, 45, 21, 39, 69, 64, 114, 99, 87, -+ 158, 140, 252, 212, 199, 387, 365, 26, 75, 36, 68, 65, 115, 101, -+ 179, 164, 155, 264, 246, 226, 395, 382, 362, 9, 66, 30, 59, 56, -+ 102, 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16, 111, 54, -+ 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10, -+ 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, 380, 889, -+ 884, 8, 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, -+ 727, 713, 708, 7, 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, -+ 384, 735, 359, 710, 352, 11, 139, 129, 67, 125, 247, 233, 229, 219, -+ 393, 743, 737, 720, 885, 882, 439, 4, 243, 120, 118, 115, 227, 223, -+ 396, 746, 742, 736, 721, 712, 706, 223, 436, 6, 202, 224, 222, 218, -+ 216, 389, 386, 381, 364, 888, 443, 707, 440, 437, 1728, 4, 747, 211, -+ 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2, -+ 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, -+ 434, 0, 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, -+ 5, 3, 1, 3}; -+static const HUFFBITS t24HB[] = { -+ 15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, -+ 88, 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, -+ 279, 42, 47, 22, 41, 74, 68, 128, 120, 221, 207, 194, 182, 340, 315, -+ 295, 541, 18, 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, -+ 311, 293, 271, 16, 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, -+ 323, 306, 285, 540, 14, 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, -+ 341, 317, 301, 281, 262, 12, 249, 123, 121, 117, 113, 215, 206, 195, 185, -+ 347, 330, 308, 291, 272, 520, 10, 435, 115, 111, 109, 211, 203, 196, 187, -+ 353, 332, 313, 298, 283, 531, 381, 17, 427, 212, 208, 205, 201, 193, 186, -+ 177, 169, 320, 303, 286, 268, 514, 377, 16, 335, 199, 197, 191, 189, 181, -+ 174, 333, 321, 305, 289, 275, 521, 379, 371, 11, 668, 184, 183, 179, 175, -+ 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10, 652, 346, 171, 168, -+ 164, 318, 309, 299, 287, 276, 263, 513, 375, 368, 362, 6, 648, 322, 316, -+ 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4, 620, 300, -+ 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2, 1033, -+ 280, 278, 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0, -+ 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, -+ 3}; -+static const HUFFBITS t32HB[] = {1, 5, 4, 5, 6, 5, 4, 4, -+ 7, 3, 6, 0, 7, 2, 3, 1}; -+static const HUFFBITS t33HB[] = {15, 14, 13, 12, 11, 10, 9, 8, -+ 7, 6, 5, 4, 3, 2, 1, 0}; - --static const unsigned char t1l[] = {1, 3, 2, 3}; --static const unsigned char t2l[] = {1, 3, 6, 3, 3, 5, 5, 5, 6}; --static const unsigned char t3l[] = {2, 2, 6, 3, 2, 5, 5, 5, 6}; --static const unsigned char t5l[] = {1, 3, 6, 7, 3, 3, 6, 7, 6, 6, 7, 8, 7, 6, 7, 8}; --static const unsigned char t6l[] = {3, 3, 5, 7, 3, 2, 4, 5, 4, 4, 5, 6, 6, 5, 6, 7}; --static const unsigned char t7l[] = {1, 3, 6, 8, 8, 9, 3, 4, 6, 7, 7, 8, 6, 5, 7, 8, 8, 9, 7, 7, 8, 9, 9, 9, 7, 7, 8, 9, 9, 10, 8, 8, 9, 10, 10, 10}; --static const unsigned char t8l[] = {2, 3, 6, 8, 8, 9, 3, 2, 4, 8, 8, 8, 6, 4, 6, 8, 8, 9, 8, 8, 8, 9, 9, 10, 8, 7, 8, 9, 10, 10, 9, 8, 9, 9, 11, 11}; --static const unsigned char t9l[] = {3, 3, 5, 6, 8, 9, 3, 3, 4, 5, 6, 8, 4, 4, 5, 6, 7, 8, 6, 5, 6, 7, 7, 8, 7, 6, 7, 7, 8, 9, 8, 7, 8, 8, 9, 9}; --static const unsigned char t10l[] = {1, 3, 6, 8, 9, 9, 9, 10, 3, 4, 6, 7, 8, 9, 8, 8, 6, 6, 7, 8, 9, 10, 9, 9, 7, 7, 8, 9, 10, 10, 9, 10, 8, 8, 9, 10, 10, 10, 10, 10, 9, 9, 10, 10, 11, 11, 10, 11, 8, 8, 9, 10, 10, 10, 11, 11, 9, 8, 9, 10, 10, 11, 11, 11}; --static const unsigned char t11l[] = {2, 3, 5, 7, 8, 9, 8, 9, 3, 3, 4, 6, 8, 8, 7, 8, 5, 5, 6, 7, 8, 9, 8, 8, 7, 6, 7, 9, 8, 10, 8, 9, 8, 8, 8, 9, 9, 10, 9, 10, 8, 8, 9, 10, 10, 11, 10, 11, 8, 7, 7, 8, 9, 10, 10, 10, 8, 7, 8, 9, 10, 10, 10, 10}; --static const unsigned char t12l[] = {4, 3, 5, 7, 8, 9, 9, 9, 3, 3, 4, 5, 7, 7, 8, 8, 5, 4, 5, 6, 7, 8, 7, 8, 6, 5, 6, 6, 7, 8, 8, 8, 7, 6, 7, 7, 8, 8, 8, 9, 8, 7, 8, 8, 8, 9, 8, 9, 8, 7, 7, 8, 8, 9, 9, 10, 9, 8, 8, 9, 9, 9, 9, 10}; --static const unsigned char t13l[] = {1, 4, 6, 7, 8, 9, 9, 10, 9, 10, 11, 11, 12, 12, 13, 13, 3, 4, 6, 7, 8, 8, 9, 9, 9, 9, 10, 10, 11, 12, 12, 12, 6, 6, 7, 8, 9, 9, 10, 10, 9, 10, 10, 11, 11, 12, 13, 13, 7, 7, 8, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 13, 13, --8, 7, 9, 9, 10, 10, 11, 11, 10, 11, 11, 12, 12, 13, 13, 14, 9, 8, 9, 10, 10, 10, 11, 11, 11, 11, 12, 11, 13, 13, 14, 14, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 10, 9, 10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 16, 16, 9, 8, 9, 10, --10, 11, 11, 12, 12, 12, 12, 13, 13, 14, 15, 15, 10, 9, 10, 10, 11, 11, 11, 13, 12, 13, 13, 14, 14, 14, 16, 15, 10, 10, 10, 11, 11, 12, 12, 13, 12, 13, 14, 13, 14, 15, 16, 17, 11, 10, 10, 11, 12, 12, 12, 12, 13, 13, 13, 14, 15, 15, 15, 16, 11, 11, 11, 12, 12, --13, 12, 13, 14, 14, 15, 15, 15, 16, 16, 16, 12, 11, 12, 13, 13, 13, 14, 14, 14, 14, 14, 15, 16, 15, 16, 16, 13, 12, 12, 13, 13, 13, 15, 14, 14, 17, 15, 15, 15, 17, 16, 16, 12, 12, 13, 14, 14, 14, 15, 14, 15, 15, 16, 16, 19, 18, 19, 16}; --static const unsigned char t15l[] = {3, 4, 5, 7, 7, 8, 9, 9, 9, 10, 10, 11, 11, 11, 12, 13, 4, 3, 5, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 5, 5, 5, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 11, 11, 11, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 7, 6, 7, -- 7, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 11, 8, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 11, 12, 9, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 9, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 12, 9, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, -- 12, 12, 12, 9, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 10, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 13, 12, 10, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 11, 10, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 13, 13, --11, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 12, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 12, 13, 12, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13}; --static const unsigned char t16l[] = {1, 4, 6, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 9, 3, 4, 6, 7, 8, 9, 9, 9, 10, 10, 10, 11, 12, 11, 12, 8, 6, 6, 7, 8, 9, 9, 10, 10, 11, 10, 11, 11, 11, 12, 12, 9, 8, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, -- 10, 9, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 9, 9, 8, 9, 9, 10, 11, 11, 12, 11, 12, 12, 13, 13, 13, 14, 10, 10, 9, 9, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 10, 10, 9, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 15, 15, 10, 10, 10, -- 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 10, 11, 10, 10, 11, 11, 12, 12, 13, 13, 13, 13, 14, 13, 14, 13, 11, 11, 11, 10, 11, 12, 12, 12, 12, 13, 14, 14, 14, 15, 15, 14, 10, 12, 11, 11, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 13, 14, 11, 12, 12, -- 12, 12, 12, 13, 13, 13, 13, 15, 14, 14, 14, 14, 16, 11, 14, 12, 12, 12, 13, 13, 14, 14, 14, 16, 15, 15, 15, 17, 15, 11, 13, 13, 11, 12, 14, 14, 13, 14, 14, 15, 16, 15, 17, 15, 14, 11, 9, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 8}; --static const unsigned char t24l[] = {4, 4, 6, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 9, 4, 4, 5, 6, 7, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10, 8, 6, 5, 6, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 7, 7, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 7, 8, 7, 7, 8, -- 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 7, 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 7, 9, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 7, 10, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 8, 10, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, --8, 10, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 8, 11, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 8, 11, 10, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 8, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 8, 11, 10, 10, -- 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 8, 12, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 4}; --static const unsigned char t32l[] = {1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6}; --static const unsigned char t33l[] = {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}; -+static const unsigned char t1l[] = {1, 3, 2, 3}; -+static const unsigned char t2l[] = {1, 3, 6, 3, 3, 5, 5, 5, 6}; -+static const unsigned char t3l[] = {2, 2, 6, 3, 2, 5, 5, 5, 6}; -+static const unsigned char t5l[] = {1, 3, 6, 7, 3, 3, 6, 7, -+ 6, 6, 7, 8, 7, 6, 7, 8}; -+static const unsigned char t6l[] = {3, 3, 5, 7, 3, 2, 4, 5, -+ 4, 4, 5, 6, 6, 5, 6, 7}; -+static const unsigned char t7l[] = {1, 3, 6, 8, 8, 9, 3, 4, 6, 7, 7, 8, -+ 6, 5, 7, 8, 8, 9, 7, 7, 8, 9, 9, 9, -+ 7, 7, 8, 9, 9, 10, 8, 8, 9, 10, 10, 10}; -+static const unsigned char t8l[] = {2, 3, 6, 8, 8, 9, 3, 2, 4, 8, 8, 8, -+ 6, 4, 6, 8, 8, 9, 8, 8, 8, 9, 9, 10, -+ 8, 7, 8, 9, 10, 10, 9, 8, 9, 9, 11, 11}; -+static const unsigned char t9l[] = {3, 3, 5, 6, 8, 9, 3, 3, 4, 5, 6, 8, -+ 4, 4, 5, 6, 7, 8, 6, 5, 6, 7, 7, 8, -+ 7, 6, 7, 7, 8, 9, 8, 7, 8, 8, 9, 9}; -+static const unsigned char t10l[] = { -+ 1, 3, 6, 8, 9, 9, 9, 10, 3, 4, 6, 7, 8, 9, 8, 8, -+ 6, 6, 7, 8, 9, 10, 9, 9, 7, 7, 8, 9, 10, 10, 9, 10, -+ 8, 8, 9, 10, 10, 10, 10, 10, 9, 9, 10, 10, 11, 11, 10, 11, -+ 8, 8, 9, 10, 10, 10, 11, 11, 9, 8, 9, 10, 10, 11, 11, 11}; -+static const unsigned char t11l[] = { -+ 2, 3, 5, 7, 8, 9, 8, 9, 3, 3, 4, 6, 8, 8, 7, 8, -+ 5, 5, 6, 7, 8, 9, 8, 8, 7, 6, 7, 9, 8, 10, 8, 9, -+ 8, 8, 8, 9, 9, 10, 9, 10, 8, 8, 9, 10, 10, 11, 10, 11, -+ 8, 7, 7, 8, 9, 10, 10, 10, 8, 7, 8, 9, 10, 10, 10, 10}; -+static const unsigned char t12l[] = { -+ 4, 3, 5, 7, 8, 9, 9, 9, 3, 3, 4, 5, 7, 7, 8, 8, 5, 4, 5, 6, 7, 8, -+ 7, 8, 6, 5, 6, 6, 7, 8, 8, 8, 7, 6, 7, 7, 8, 8, 8, 9, 8, 7, 8, 8, -+ 8, 9, 8, 9, 8, 7, 7, 8, 8, 9, 9, 10, 9, 8, 8, 9, 9, 9, 9, 10}; -+static const unsigned char t13l[] = { -+ 1, 4, 6, 7, 8, 9, 9, 10, 9, 10, 11, 11, 12, 12, 13, 13, 3, 4, 6, -+ 7, 8, 8, 9, 9, 9, 9, 10, 10, 11, 12, 12, 12, 6, 6, 7, 8, 9, 9, -+ 10, 10, 9, 10, 10, 11, 11, 12, 13, 13, 7, 7, 8, 9, 9, 10, 10, 10, 10, -+ 11, 11, 11, 11, 12, 13, 13, 8, 7, 9, 9, 10, 10, 11, 11, 10, 11, 11, 12, -+ 12, 13, 13, 14, 9, 8, 9, 10, 10, 10, 11, 11, 11, 11, 12, 11, 13, 13, 14, -+ 14, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 10, 9, -+ 10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 16, 16, 9, 8, 9, 10, 10, -+ 11, 11, 12, 12, 12, 12, 13, 13, 14, 15, 15, 10, 9, 10, 10, 11, 11, 11, 13, -+ 12, 13, 13, 14, 14, 14, 16, 15, 10, 10, 10, 11, 11, 12, 12, 13, 12, 13, 14, -+ 13, 14, 15, 16, 17, 11, 10, 10, 11, 12, 12, 12, 12, 13, 13, 13, 14, 15, 15, -+ 15, 16, 11, 11, 11, 12, 12, 13, 12, 13, 14, 14, 15, 15, 15, 16, 16, 16, 12, -+ 11, 12, 13, 13, 13, 14, 14, 14, 14, 14, 15, 16, 15, 16, 16, 13, 12, 12, 13, -+ 13, 13, 15, 14, 14, 17, 15, 15, 15, 17, 16, 16, 12, 12, 13, 14, 14, 14, 15, -+ 14, 15, 15, 16, 16, 19, 18, 19, 16}; -+static const unsigned char t15l[] = { -+ 3, 4, 5, 7, 7, 8, 9, 9, 9, 10, 10, 11, 11, 11, 12, 13, 4, 3, 5, -+ 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 5, 5, 5, 6, 7, 7, -+ 8, 8, 8, 9, 9, 10, 10, 11, 11, 11, 6, 6, 6, 7, 7, 8, 8, 9, 9, -+ 9, 10, 10, 10, 11, 11, 11, 7, 6, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10, -+ 10, 11, 11, 11, 8, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 11, -+ 12, 9, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 9, 8, -+ 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 12, 9, 8, 8, 9, 9, -+ 9, 9, 10, 10, 10, 10, 11, 11, 12, 12, 12, 9, 8, 9, 9, 9, 9, 10, 10, -+ 10, 11, 11, 11, 11, 12, 12, 12, 10, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, -+ 11, 11, 12, 13, 12, 10, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, -+ 12, 13, 11, 10, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 13, 13, 11, -+ 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 12, 11, 11, 11, -+ 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 12, 13, 12, 11, 11, 11, 11, 11, 11, -+ 12, 12, 12, 12, 12, 13, 13, 13, 13}; -+static const unsigned char t16l[] = { -+ 1, 4, 6, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 9, 3, 4, 6, -+ 7, 8, 9, 9, 9, 10, 10, 10, 11, 12, 11, 12, 8, 6, 6, 7, 8, 9, 9, -+ 10, 10, 11, 10, 11, 11, 11, 12, 12, 9, 8, 7, 8, 9, 9, 10, 10, 10, 11, -+ 11, 12, 12, 12, 13, 13, 10, 9, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, -+ 13, 13, 13, 9, 9, 8, 9, 9, 10, 11, 11, 12, 11, 12, 12, 13, 13, 13, 14, -+ 10, 10, 9, 9, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 10, 10, 9, -+ 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 15, 15, 10, 10, 10, 10, 11, 11, -+ 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 10, 11, 10, 10, 11, 11, 12, 12, 13, -+ 13, 13, 13, 14, 13, 14, 13, 11, 11, 11, 10, 11, 12, 12, 12, 12, 13, 14, 14, -+ 14, 15, 15, 14, 10, 12, 11, 11, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 13, -+ 14, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 15, 14, 14, 14, 14, 16, 11, 14, -+ 12, 12, 12, 13, 13, 14, 14, 14, 16, 15, 15, 15, 17, 15, 11, 13, 13, 11, 12, -+ 14, 14, 13, 14, 14, 15, 16, 15, 17, 15, 14, 11, 9, 8, 8, 9, 9, 10, 10, -+ 10, 11, 11, 11, 11, 11, 11, 11, 8}; -+static const unsigned char t24l[] = { -+ 4, 4, 6, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 9, 4, 4, 5, -+ 6, 7, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10, 8, 6, 5, 6, 7, 7, 8, -+ 8, 9, 9, 9, 9, 10, 10, 10, 11, 7, 7, 6, 7, 7, 8, 8, 8, 9, 9, -+ 9, 9, 10, 10, 10, 10, 7, 8, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, -+ 10, 10, 11, 7, 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, -+ 7, 9, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 7, 10, 8, -+ 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 8, 10, 9, 9, 9, 9, -+ 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 8, 10, 9, 9, 9, 9, 9, 9, 10, -+ 10, 10, 10, 10, 11, 11, 11, 8, 11, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, -+ 11, 11, 11, 11, 8, 11, 10, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, -+ 11, 8, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 8, 11, -+ 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 8, 12, 10, 10, 10, -+ 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 8, 8, 7, 7, 7, 7, 7, 7, -+ 7, 7, 7, 7, 8, 8, 8, 8, 4}; -+static const unsigned char t32l[] = {1, 4, 4, 5, 4, 6, 5, 6, -+ 4, 5, 5, 6, 5, 6, 6, 6}; -+static const unsigned char t33l[] = {4, 4, 4, 4, 4, 4, 4, 4, -+ 4, 4, 4, 4, 4, 4, 4, 4}; - - #define NOREF -1 --const struct huffcodetab shine_huffman_table[HTN] = --{ --{ 0, 0, 0, 0,NULL,NULL}, --{ 2, 2, 0, 0,t1HB, t1l}, --{ 3, 3, 0, 0,t2HB, t2l}, --{ 3, 3, 0, 0,t3HB, t3l}, --{ 0, 0, 0, 0,NULL,NULL},/* Apparently not used*/ --{ 4, 4, 0, 0,t5HB, t5l}, --{ 4, 4, 0, 0,t6HB, t6l}, --{ 6, 6, 0, 0,t7HB, t7l}, --{ 6, 6, 0, 0,t8HB, t8l}, --{ 6, 6, 0, 0,t9HB, t9l}, --{ 8, 8, 0, 0,t10HB, t10l}, --{ 8, 8, 0, 0,t11HB, t11l}, --{ 8, 8, 0, 0,t12HB, t12l}, --{16,16, 0, 0,t13HB, t13l}, --{ 0, 0, 0, 0,NULL,NULL},/* Apparently not used*/ --{16,16, 0, 0,t15HB, t15l}, --{16,16, 1, 1,t16HB, t16l}, --{16,16, 2, 3,t16HB, t16l}, --{16,16, 3, 7,t16HB, t16l}, --{16,16, 4, 15,t16HB, t16l}, --{16,16, 6, 63,t16HB, t16l}, --{16,16, 8, 255,t16HB, t16l}, --{16,16,10,1023,t16HB, t16l}, --{16,16,13,8191,t16HB, t16l}, --{16,16, 4, 15,t24HB, t24l}, --{16,16, 5, 31,t24HB, t24l}, --{16,16, 6, 63,t24HB, t24l}, --{16,16, 7, 127,t24HB, t24l}, --{16,16, 8, 255,t24HB, t24l}, --{16,16, 9, 511,t24HB, t24l}, --{16,16,11,2047,t24HB, t24l}, --{16,16,13,8191,t24HB, t24l}, --{ 1,16, 0, 0,t32HB, t32l}, --{ 1,16, 0, 0,t33HB, t33l}, -+const struct huffcodetab shine_huffman_table[HTN] = { -+ {0, 0, 0, 0, NULL, NULL}, -+ {2, 2, 0, 0, t1HB, t1l}, -+ {3, 3, 0, 0, t2HB, t2l}, -+ {3, 3, 0, 0, t3HB, t3l}, -+ {0, 0, 0, 0, NULL, NULL}, /* Apparently not used*/ -+ {4, 4, 0, 0, t5HB, t5l}, -+ {4, 4, 0, 0, t6HB, t6l}, -+ {6, 6, 0, 0, t7HB, t7l}, -+ {6, 6, 0, 0, t8HB, t8l}, -+ {6, 6, 0, 0, t9HB, t9l}, -+ {8, 8, 0, 0, t10HB, t10l}, -+ {8, 8, 0, 0, t11HB, t11l}, -+ {8, 8, 0, 0, t12HB, t12l}, -+ {16, 16, 0, 0, t13HB, t13l}, -+ {0, 0, 0, 0, NULL, NULL}, /* Apparently not used*/ -+ {16, 16, 0, 0, t15HB, t15l}, -+ {16, 16, 1, 1, t16HB, t16l}, -+ {16, 16, 2, 3, t16HB, t16l}, -+ {16, 16, 3, 7, t16HB, t16l}, -+ {16, 16, 4, 15, t16HB, t16l}, -+ {16, 16, 6, 63, t16HB, t16l}, -+ {16, 16, 8, 255, t16HB, t16l}, -+ {16, 16, 10, 1023, t16HB, t16l}, -+ {16, 16, 13, 8191, t16HB, t16l}, -+ {16, 16, 4, 15, t24HB, t24l}, -+ {16, 16, 5, 31, t24HB, t24l}, -+ {16, 16, 6, 63, t24HB, t24l}, -+ {16, 16, 7, 127, t24HB, t24l}, -+ {16, 16, 8, 255, t24HB, t24l}, -+ {16, 16, 9, 511, t24HB, t24l}, -+ {16, 16, 11, 2047, t24HB, t24l}, -+ {16, 16, 13, 8191, t24HB, t24l}, -+ {1, 16, 0, 0, t32HB, t32l}, -+ {1, 16, 0, 0, t33HB, t33l}, - }; -- -- -diff --git a/src/lib/huffman.h b/src/lib/huffman.h -index d2d5b51..6a341c7 100644 ---- a/src/lib/huffman.h -+++ b/src/lib/huffman.h -@@ -1,6 +1,8 @@ -+#include <stdint.h> -+ - #define HUFFBITS uint16_t --#define HTN 34 --#define MXOFF 250 -+#define HTN 34 -+#define MXOFF 250 - - struct huffcodetab { - unsigned int xlen; /*max. x-index+ */ -@@ -11,9 +13,8 @@ struct huffcodetab { - const unsigned char *hlen; /*pointer to array[xlen][ylen] */ - }; - --extern const struct huffcodetab shine_huffman_table[HTN];/* global memory block */ -- /* array of all huffcodtable headers */ -- /* 0..31 Huffman code table 0..31 */ -- /* 32,33 count1-tables */ -- -- -+extern const struct huffcodetab -+ shine_huffman_table[HTN]; /* global memory block */ -+ /* array of all huffcodtable headers */ -+ /* 0..31 Huffman code table 0..31 */ -+ /* 32,33 count1-tables */ -diff --git a/src/lib/l3bitstream.c b/src/lib/l3bitstream.c -index ba788e6..1b2849e 100644 ---- a/src/lib/l3bitstream.c -+++ b/src/lib/l3bitstream.c -@@ -1,20 +1,22 @@ - /* l3bitstrea.c */ - --#include "types.h" --#include "l3mdct.h" -+#include "l3bitstream.h" /* the public interface */ -+#include "bitstream.h" -+#include "huffman.h" - #include "l3loop.h" -+#include "l3mdct.h" - #include "layer3.h" --#include "huffman.h" --#include "bitstream.h" - #include "tables.h" --#include "l3bitstream.h" /* the public interface */ -+#include "types.h" - - static void shine_HuffmanCode(bitstream_t *bs, int table_select, int x, int y); --static void shine_huffman_coder_count1(bitstream_t *bs, const struct huffcodetab *h, int v, int w, int x, int y); -+static void shine_huffman_coder_count1(bitstream_t *bs, -+ const struct huffcodetab *h, int v, -+ int w, int x, int y); - --static void encodeSideInfo( shine_global_config *config ); --static void encodeMainData( shine_global_config *config ); --static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi); -+static void encodeSideInfo(shine_global_config *config); -+static void encodeMainData(shine_global_config *config); -+static void Huffmancodebits(shine_global_config *config, int *ix, gr_info *gi); - - /* - shine_format_bitstream() -@@ -27,130 +29,121 @@ static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi); - in the IS). - */ - --void --shine_format_bitstream(shine_global_config *config) --{ -+void shine_format_bitstream(shine_global_config *config) { - int gr, ch, i; - -- for ( ch = 0; ch < config->wave.channels; ch++ ) -- for ( gr = 0; gr < config->mpeg.granules_per_frame; gr++ ) -- { -- int *pi = &config->l3_enc[ch][gr][0]; -- int32_t *pr = &config->mdct_freq[ch][gr][0]; -- for ( i = 0; i < GRANULE_SIZE; i++ ) -- { -- if ( (pr[i] < 0) && (pi[i] > 0) ) -- pi[i] *= -1; -- } -+ for (ch = 0; ch < config->wave.channels; ch++) -+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) { -+ int *pi = &config->l3_enc[ch][gr][0]; -+ int32_t *pr = &config->mdct_freq[ch][gr][0]; -+ for (i = 0; i < GRANULE_SIZE; i++) { -+ if ((pr[i] < 0) && (pi[i] > 0)) -+ pi[i] *= -1; - } -+ } - -- encodeSideInfo( config ); -- encodeMainData( config ); -+ encodeSideInfo(config); -+ encodeMainData(config); - } - --static void encodeMainData(shine_global_config *config) --{ -+static void encodeMainData(shine_global_config *config) { - int gr, ch, sfb; -- shine_side_info_t si = config->side_info; -- -- for ( gr = 0; gr < config->mpeg.granules_per_frame; gr++ ) -- { -- for ( ch = 0; ch < config->wave.channels; ch++ ) -- { -- gr_info *gi = &(si.gr[gr].ch[ch].tt); -- unsigned slen1 = shine_slen1_tab[ gi->scalefac_compress ]; -- unsigned slen2 = shine_slen2_tab[ gi->scalefac_compress ]; -- int *ix = &config->l3_enc[ch][gr][0]; -- -- if ( gr == 0 || si.scfsi[ch][0] == 0 ) -- for ( sfb = 0; sfb < 6; sfb++ ) -- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen1 ); -- if ( gr == 0 || si.scfsi[ch][1] == 0 ) -- for ( sfb = 6; sfb < 11; sfb++ ) -- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen1 ); -- if ( gr == 0 || si.scfsi[ch][2] == 0 ) -- for ( sfb = 11; sfb < 16; sfb++ ) -- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen2 ); -- if ( gr == 0 || si.scfsi[ch][3] == 0 ) -- for ( sfb = 16; sfb < 21; sfb++ ) -- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen2 ); -- -- Huffmancodebits( config, ix, gi ); -- } -+ shine_side_info_t si = config->side_info; -+ -+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) { -+ for (ch = 0; ch < config->wave.channels; ch++) { -+ gr_info *gi = &(si.gr[gr].ch[ch].tt); -+ unsigned slen1 = shine_slen1_tab[gi->scalefac_compress]; -+ unsigned slen2 = shine_slen2_tab[gi->scalefac_compress]; -+ int *ix = &config->l3_enc[ch][gr][0]; -+ -+ if (gr == 0 || si.scfsi[ch][0] == 0) -+ for (sfb = 0; sfb < 6; sfb++) -+ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen1); -+ if (gr == 0 || si.scfsi[ch][1] == 0) -+ for (sfb = 6; sfb < 11; sfb++) -+ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen1); -+ if (gr == 0 || si.scfsi[ch][2] == 0) -+ for (sfb = 11; sfb < 16; sfb++) -+ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen2); -+ if (gr == 0 || si.scfsi[ch][3] == 0) -+ for (sfb = 16; sfb < 21; sfb++) -+ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen2); -+ -+ Huffmancodebits(config, ix, gi); - } -+ } - } - --static void encodeSideInfo( shine_global_config *config ) --{ -+static void encodeSideInfo(shine_global_config *config) { - int gr, ch, scfsi_band, region; -- shine_side_info_t si = config->side_info; -- -- shine_putbits( &config->bs, 0x7ff, 11 ); -- shine_putbits( &config->bs, config->mpeg.version, 2 ); -- shine_putbits( &config->bs, config->mpeg.layer, 2 ); -- shine_putbits( &config->bs, !config->mpeg.crc, 1 ); -- shine_putbits( &config->bs, config->mpeg.bitrate_index, 4 ); -- shine_putbits( &config->bs, config->mpeg.samplerate_index % 3, 2 ); -- shine_putbits( &config->bs, config->mpeg.padding, 1 ); -- shine_putbits( &config->bs, config->mpeg.ext, 1 ); -- shine_putbits( &config->bs, config->mpeg.mode, 2 ); -- shine_putbits( &config->bs, config->mpeg.mode_ext, 2 ); -- shine_putbits( &config->bs, config->mpeg.copyright, 1 ); -- shine_putbits( &config->bs, config->mpeg.original, 1 ); -- shine_putbits( &config->bs, config->mpeg.emph, 2 ); -- -- if ( config->mpeg.version == MPEG_I ) { -- shine_putbits( &config->bs, 0, 9 ); -- if ( config->wave.channels == 2 ) -- shine_putbits( &config->bs, si.private_bits, 3 ); -+ shine_side_info_t si = config->side_info; -+ -+ shine_putbits(&config->bs, 0x7ff, 11); -+ shine_putbits(&config->bs, config->mpeg.version, 2); -+ shine_putbits(&config->bs, config->mpeg.layer, 2); -+ shine_putbits(&config->bs, !config->mpeg.crc, 1); -+ shine_putbits(&config->bs, config->mpeg.bitrate_index, 4); -+ shine_putbits(&config->bs, config->mpeg.samplerate_index % 3, 2); -+ shine_putbits(&config->bs, config->mpeg.padding, 1); -+ shine_putbits(&config->bs, config->mpeg.ext, 1); -+ shine_putbits(&config->bs, config->mpeg.mode, 2); -+ shine_putbits(&config->bs, config->mpeg.mode_ext, 2); -+ shine_putbits(&config->bs, config->mpeg.copyright, 1); -+ shine_putbits(&config->bs, config->mpeg.original, 1); -+ shine_putbits(&config->bs, config->mpeg.emph, 2); -+ -+ if (config->mpeg.version == MPEG_I) { -+ shine_putbits(&config->bs, 0, 9); -+ if (config->wave.channels == 2) -+ shine_putbits(&config->bs, si.private_bits, 3); - else -- shine_putbits( &config->bs, si.private_bits, 5 ); -+ shine_putbits(&config->bs, si.private_bits, 5); - } else { -- shine_putbits( &config->bs, 0, 8 ); -- if ( config->wave.channels == 2 ) -- shine_putbits( &config->bs, si.private_bits, 2 ); -+ shine_putbits(&config->bs, 0, 8); -+ if (config->wave.channels == 2) -+ shine_putbits(&config->bs, si.private_bits, 2); - else -- shine_putbits( &config->bs, si.private_bits, 1 ); -+ shine_putbits(&config->bs, si.private_bits, 1); - } - -- if ( config->mpeg.version == MPEG_I ) -- for ( ch = 0; ch < config->wave.channels; ch++ ) { -- for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ ) -- shine_putbits( &config->bs, si.scfsi[ch][scfsi_band], 1 ); -+ if (config->mpeg.version == MPEG_I) -+ for (ch = 0; ch < config->wave.channels; ch++) { -+ for (scfsi_band = 0; scfsi_band < 4; scfsi_band++) -+ shine_putbits(&config->bs, si.scfsi[ch][scfsi_band], 1); - } - -- for ( gr = 0; gr < config->mpeg.granules_per_frame; gr++ ) -- for ( ch = 0; ch < config->wave.channels ; ch++ ) -- { -- gr_info *gi = &(si.gr[gr].ch[ch].tt); -- -- shine_putbits( &config->bs, gi->part2_3_length, 12 ); -- shine_putbits( &config->bs, gi->big_values, 9 ); -- shine_putbits( &config->bs, gi->global_gain, 8 ); -- if ( config->mpeg.version == MPEG_I ) -- shine_putbits( &config->bs, gi->scalefac_compress, 4 ); -- else -- shine_putbits( &config->bs, gi->scalefac_compress, 9 ); -- shine_putbits( &config->bs, 0, 1 ); -- -- for ( region = 0; region < 3; region++ ) -- shine_putbits( &config->bs, gi->table_select[region], 5 ); -- -- shine_putbits( &config->bs, gi->region0_count, 4 ); -- shine_putbits( &config->bs, gi->region1_count, 3 ); -- -- if ( config->mpeg.version == MPEG_I ) -- shine_putbits( &config->bs, gi->preflag, 1 ); -- shine_putbits( &config->bs, gi->scalefac_scale, 1 ); -- shine_putbits( &config->bs, gi->count1table_select, 1 ); -- } -+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) -+ for (ch = 0; ch < config->wave.channels; ch++) { -+ gr_info *gi = &(si.gr[gr].ch[ch].tt); -+ -+ shine_putbits(&config->bs, gi->part2_3_length, 12); -+ shine_putbits(&config->bs, gi->big_values, 9); -+ shine_putbits(&config->bs, gi->global_gain, 8); -+ if (config->mpeg.version == MPEG_I) -+ shine_putbits(&config->bs, gi->scalefac_compress, 4); -+ else -+ shine_putbits(&config->bs, gi->scalefac_compress, 9); -+ shine_putbits(&config->bs, 0, 1); -+ -+ for (region = 0; region < 3; region++) -+ shine_putbits(&config->bs, gi->table_select[region], 5); -+ -+ shine_putbits(&config->bs, gi->region0_count, 4); -+ shine_putbits(&config->bs, gi->region1_count, 3); -+ -+ if (config->mpeg.version == MPEG_I) -+ shine_putbits(&config->bs, gi->preflag, 1); -+ shine_putbits(&config->bs, gi->scalefac_scale, 1); -+ shine_putbits(&config->bs, gi->count1table_select, 1); -+ } - } - - /* Note the discussion of huffmancodebits() on pages 28 and 29 of the IS, as - well as the definitions of the side information on pages 26 and 27. */ --static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi ) --{ -- const int *scalefac = &shine_scale_fact_band_index[config->mpeg.samplerate_index][0]; -+static void Huffmancodebits(shine_global_config *config, int *ix, gr_info *gi) { -+ const int *scalefac = -+ &shine_scale_fact_band_index[config->mpeg.samplerate_index][0]; - unsigned scalefac_index; - int region1Start, region2Start; - int i, bigvalues, count1End; -@@ -164,168 +157,153 @@ static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi ) - bigvalues = gi->big_values << 1; - - scalefac_index = gi->region0_count + 1; -- region1Start = scalefac[ scalefac_index ]; -+ region1Start = scalefac[scalefac_index]; - scalefac_index += gi->region1_count + 1; -- region2Start = scalefac[ scalefac_index ]; -- -- for ( i = 0; i < bigvalues; i += 2 ) -- { -- /* get table pointer */ -- int idx = (i >= region1Start) + (i >= region2Start); -- unsigned tableindex = gi->table_select[idx]; -- /* get huffman code */ -- if ( tableindex ) -- { -- x = ix[i]; -- y = ix[i + 1]; -- shine_HuffmanCode( &config->bs, tableindex, x, y ); -- } -+ region2Start = scalefac[scalefac_index]; -+ -+ for (i = 0; i < bigvalues; i += 2) { -+ /* get table pointer */ -+ int idx = (i >= region1Start) + (i >= region2Start); -+ unsigned tableindex = gi->table_select[idx]; -+ /* get huffman code */ -+ if (tableindex) { -+ x = ix[i]; -+ y = ix[i + 1]; -+ shine_HuffmanCode(&config->bs, tableindex, x, y); - } -+ } - - /* 2: Write count1 area */ - h = &shine_huffman_table[gi->count1table_select + 32]; -- count1End = bigvalues + (gi->count1 <<2); -- for ( i = bigvalues; i < count1End; i += 4 ) -- { -- v = ix[i]; -- w = ix[i+1]; -- x = ix[i+2]; -- y = ix[i+3]; -- shine_huffman_coder_count1( &config->bs, h, v, w, x, y ); -- } -+ count1End = bigvalues + (gi->count1 << 2); -+ for (i = bigvalues; i < count1End; i += 4) { -+ v = ix[i]; -+ w = ix[i + 1]; -+ x = ix[i + 2]; -+ y = ix[i + 3]; -+ shine_huffman_coder_count1(&config->bs, h, v, w, x, y); -+ } - - bits = shine_get_bits_count(&config->bs) - bits; - bits = gi->part2_3_length - gi->part2_length - bits; -- if (bits) -- { -- int stuffingWords = bits / 32; -- int remainingBits = bits % 32; -- -- /* Due to the nature of the Huffman code tables, we will pad with ones */ -- while ( stuffingWords-- ) -- shine_putbits( &config->bs, ~0, 32 ); -- if ( remainingBits ) -- shine_putbits( &config->bs, (1UL << remainingBits) - 1, remainingBits ); -- } -+ if (bits) { -+ int stuffingWords = bits / 32; -+ int remainingBits = bits % 32; -+ -+ /* Due to the nature of the Huffman code tables, we will pad with ones */ -+ while (stuffingWords--) -+ shine_putbits(&config->bs, ~0, 32); -+ if (remainingBits) -+ shine_putbits(&config->bs, (1UL << remainingBits) - 1, remainingBits); -+ } - } - --static inline int shine_abs_and_sign( int *x ) --{ -- if ( *x > 0 ) return 0; -+static inline int shine_abs_and_sign(int *x) { -+ if (*x > 0) -+ return 0; - *x *= -1; - return 1; - } - --static void shine_huffman_coder_count1( bitstream_t *bs, const struct huffcodetab *h, int v, int w, int x, int y ) --{ -+static void shine_huffman_coder_count1(bitstream_t *bs, -+ const struct huffcodetab *h, int v, -+ int w, int x, int y) { - unsigned int signv, signw, signx, signy; - unsigned int code = 0; - int p, cbits = 0; - -- signv = shine_abs_and_sign( &v ); -- signw = shine_abs_and_sign( &w ); -- signx = shine_abs_and_sign( &x ); -- signy = shine_abs_and_sign( &y ); -+ signv = shine_abs_and_sign(&v); -+ signw = shine_abs_and_sign(&w); -+ signx = shine_abs_and_sign(&x); -+ signy = shine_abs_and_sign(&y); - - p = v + (w << 1) + (x << 2) + (y << 3); -- shine_putbits( bs, h->table[p], h->hlen[p] ); -+ shine_putbits(bs, h->table[p], h->hlen[p]); - -- if ( v ) { -+ if (v) { - code = signv; - cbits = 1; - } -- if ( w ) { -+ if (w) { - code = (code << 1) | signw; - cbits++; - } -- if ( x ) { -+ if (x) { - code = (code << 1) | signx; - cbits++; - } -- if ( y ) { -+ if (y) { - code = (code << 1) | signy; - cbits++; - } -- shine_putbits( bs, code, cbits ); -+ shine_putbits(bs, code, cbits); - } - - /* Implements the pseudocode of page 98 of the IS */ --static void shine_HuffmanCode(bitstream_t *bs, int table_select, int x, int y) --{ -+static void shine_HuffmanCode(bitstream_t *bs, int table_select, int x, int y) { - int cbits = 0, xbits = 0; - unsigned int code = 0, ext = 0; - unsigned signx, signy, ylen, idx; - const struct huffcodetab *h; - -- signx = shine_abs_and_sign( &x ); -- signy = shine_abs_and_sign( &y ); -+ signx = shine_abs_and_sign(&x); -+ signy = shine_abs_and_sign(&y); - - h = &(shine_huffman_table[table_select]); - ylen = h->ylen; - -- if ( table_select > 15 ) -- { /* ESC-table is used */ -- unsigned linbitsx = 0, linbitsy = 0, linbits = h->linbits; -- -- if ( x > 14 ) -- { -- linbitsx = x - 15; -- x = 15; -- } -- if ( y > 14 ) -- { -- linbitsy = y - 15; -- y = 15; -- } -- -- idx = (x * ylen) + y; -- code = h->table[idx]; -- cbits = h->hlen [idx]; -- if ( x > 14 ) -- { -- ext |= linbitsx; -- xbits += linbits; -- } -- if ( x != 0 ) -- { -- ext <<= 1; -- ext |= signx; -- xbits += 1; -- } -- if ( y > 14 ) -- { -- ext <<= linbits; -- ext |= linbitsy; -- xbits += linbits; -- } -- if ( y != 0 ) -- { -- ext <<= 1; -- ext |= signy; -- xbits += 1; -- } -- -- shine_putbits( bs, code, cbits); -- shine_putbits( bs, ext, xbits); -+ if (table_select > 15) { /* ESC-table is used */ -+ unsigned linbitsx = 0, linbitsy = 0, linbits = h->linbits; -+ -+ if (x > 14) { -+ linbitsx = x - 15; -+ x = 15; -+ } -+ if (y > 14) { -+ linbitsy = y - 15; -+ y = 15; -+ } -+ -+ idx = (x * ylen) + y; -+ code = h->table[idx]; -+ cbits = h->hlen[idx]; -+ if (x > 14) { -+ ext |= linbitsx; -+ xbits += linbits; - } -- else -- { /* No ESC-words */ -- idx = (x * ylen) + y; -- code = h->table[idx]; -- cbits = h->hlen[idx]; -- if ( x != 0 ) -- { -- code <<= 1; -- code |= signx; -- cbits += 1; -- } -- if ( y != 0 ) -- { -- code <<= 1; -- code |= signy; -- cbits += 1; -- } -- -- shine_putbits( bs, code, cbits); -+ if (x != 0) { -+ ext <<= 1; -+ ext |= signx; -+ xbits += 1; - } -+ if (y > 14) { -+ ext <<= linbits; -+ ext |= linbitsy; -+ xbits += linbits; -+ } -+ if (y != 0) { -+ ext <<= 1; -+ ext |= signy; -+ xbits += 1; -+ } -+ -+ shine_putbits(bs, code, cbits); -+ shine_putbits(bs, ext, xbits); -+ } else { /* No ESC-words */ -+ idx = (x * ylen) + y; -+ code = h->table[idx]; -+ cbits = h->hlen[idx]; -+ if (x != 0) { -+ code <<= 1; -+ code |= signx; -+ cbits += 1; -+ } -+ if (y != 0) { -+ code <<= 1; -+ code |= signy; -+ cbits += 1; -+ } -+ -+ shine_putbits(bs, code, cbits); -+ } - } -diff --git a/src/lib/l3bitstream.h b/src/lib/l3bitstream.h -index 6e165f5..fa61899 100644 ---- a/src/lib/l3bitstream.h -+++ b/src/lib/l3bitstream.h -@@ -1,6 +1,8 @@ - #ifndef shine_BITSTREAM_H - #define shine_BITSTREAM_H - -+#include "types.h" -+ - void shine_format_bitstream(shine_global_config *config); - - #endif -diff --git a/src/lib/l3loop.c b/src/lib/l3loop.c -index 609c2b2..d3799fb 100644 ---- a/src/lib/l3loop.c -+++ b/src/lib/l3loop.c -@@ -1,34 +1,40 @@ - /* l3loop.c */ - --#include "types.h" --#include "tables.h" - #include "l3loop.h" --#include "layer3.h" --#include "huffman.h" - #include "bitstream.h" -+#include "huffman.h" - #include "l3bitstream.h" -+#include "layer3.h" - #include "reservoir.h" -+#include "tables.h" -+#include "types.h" - --#define e 2.71828182845 --#define CBLIMIT 21 -+#define e 2.71828182845 -+#define CBLIMIT 21 - #define SFB_LMAX 22 - #define en_tot_krit 10 - #define en_dif_krit 100 - #define en_scfsi_band_krit 10 - #define xm_scfsi_band_krit 10 - --static void calc_scfsi(shine_psy_xmin_t *l3_xmin, int ch, int gr, shine_global_config *config); -+static void calc_scfsi(shine_psy_xmin_t *l3_xmin, int ch, int gr, -+ shine_global_config *config); - static int part2_length(int gr, int ch, shine_global_config *config); --static int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE], gr_info * cod_info, shine_global_config *config); --static int count_bit(int ix[GRANULE_SIZE], unsigned int start, unsigned int end, unsigned int table ); -+static int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE], -+ gr_info *cod_info, shine_global_config *config); -+static int count_bit(int ix[GRANULE_SIZE], unsigned int start, unsigned int end, -+ unsigned int table); - static int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi); --static int new_choose_table( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end ); --static void bigv_tab_select( int ix[GRANULE_SIZE], gr_info *cod_info ); --static void subdivide(gr_info *cod_info, shine_global_config *config ); --static int count1_bitcount( int ix[ GRANULE_SIZE ], gr_info *cod_info ); --static void calc_runlen( int ix[GRANULE_SIZE], gr_info *cod_info ); --static void calc_xmin(shine_psy_ratio_t *ratio, gr_info *cod_info, shine_psy_xmin_t *l3_xmin, int gr, int ch ); --static int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config); -+static int new_choose_table(int ix[GRANULE_SIZE], unsigned int begin, -+ unsigned int end); -+static void bigv_tab_select(int ix[GRANULE_SIZE], gr_info *cod_info); -+static void subdivide(gr_info *cod_info, shine_global_config *config); -+static int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info); -+static void calc_runlen(int ix[GRANULE_SIZE], gr_info *cod_info); -+static void calc_xmin(shine_psy_ratio_t *ratio, gr_info *cod_info, -+ shine_psy_xmin_t *l3_xmin, int gr, int ch); -+static int quantize(int ix[GRANULE_SIZE], int stepsize, -+ shine_global_config *config); - - /* - * shine_inner_loop: -@@ -36,25 +42,22 @@ static int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *con - * The code selects the best quantizerStepSize for a particular set - * of scalefacs. - */ --int shine_inner_loop(int ix[GRANULE_SIZE], -- int max_bits, gr_info *cod_info, int gr, int ch, -- shine_global_config *config ) --{ -+int shine_inner_loop(int ix[GRANULE_SIZE], int max_bits, gr_info *cod_info, -+ int gr, int ch, shine_global_config *config) { - int bits, c1bits, bvbits; - -- if(max_bits<0) -+ if (max_bits < 0) - cod_info->quantizerStepSize--; -- do -- { -- while(quantize(ix,++cod_info->quantizerStepSize,config) > 8192); /* within table range? */ -- -- calc_runlen(ix,cod_info); /* rzero,count1,big_values*/ -- bits = c1bits = count1_bitcount(ix,cod_info); /* count1_table selection*/ -- subdivide(cod_info, config); /* bigvalues sfb division */ -- bigv_tab_select(ix,cod_info); /* codebook selection*/ -- bits += bvbits = bigv_bitcount( ix, cod_info ); /* bit count */ -- } -- while(bits>max_bits); -+ do { -+ while (quantize(ix, ++cod_info->quantizerStepSize, config) > 8192) -+ ; /* within table range? */ -+ -+ calc_runlen(ix, cod_info); /* rzero,count1,big_values*/ -+ bits = c1bits = count1_bitcount(ix, cod_info); /* count1_table selection*/ -+ subdivide(cod_info, config); /* bigvalues sfb division */ -+ bigv_tab_select(ix, cod_info); /* codebook selection*/ -+ bits += bvbits = bigv_bitcount(ix, cod_info); /* bit count */ -+ } while (bits > max_bits); - return bits; - } - -@@ -66,21 +69,22 @@ int shine_inner_loop(int ix[GRANULE_SIZE], - * global gain. This module calls the inner iteration loop. - */ - --int shine_outer_loop( int max_bits, -- shine_psy_xmin_t *l3_xmin, /* the allowed distortion of the scalefactor */ -- int ix[GRANULE_SIZE], /* vector of quantized values ix(0..575) */ -- int gr, int ch, shine_global_config *config) --{ -+int shine_outer_loop( -+ int max_bits, -+ shine_psy_xmin_t *l3_xmin, /* the allowed distortion of the scalefactor */ -+ int ix[GRANULE_SIZE], /* vector of quantized values ix(0..575) */ -+ int gr, int ch, shine_global_config *config) { - int bits, huff_bits; -- shine_side_info_t *side_info = &config->side_info; -+ shine_side_info_t *side_info = &config->side_info; - gr_info *cod_info = &side_info->gr[gr].ch[ch].tt; - -- cod_info->quantizerStepSize = bin_search_StepSize(max_bits,ix,cod_info, config); -+ cod_info->quantizerStepSize = -+ bin_search_StepSize(max_bits, ix, cod_info, config); - -- cod_info->part2_length = part2_length(gr,ch,config); -+ cod_info->part2_length = part2_length(gr, ch, config); - huff_bits = max_bits - cod_info->part2_length; - -- bits = shine_inner_loop(ix, huff_bits, cod_info, gr, ch, config ); -+ bits = shine_inner_loop(ix, huff_bits, cod_info, gr, ch, config); - cod_info->part2_3_length = cod_info->part2_length + bits; - - return cod_info->part2_3_length; -@@ -90,18 +94,15 @@ int shine_outer_loop( int max_bits, - * shine_iteration_loop: - * ------------------ - */ --void shine_iteration_loop(shine_global_config *config) --{ -+void shine_iteration_loop(shine_global_config *config) { - shine_psy_xmin_t l3_xmin; - gr_info *cod_info; - int max_bits; - int ch, gr, i; - int *ix; - -- for(ch=config->wave.channels; ch--; ) -- { -- for(gr=0; gr<config->mpeg.granules_per_frame; gr++) -- { -+ for (ch = config->wave.channels; ch--;) { -+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) { - /* setup pointers */ - ix = config->l3_enc[ch][gr]; - config->l3loop.xr = config->mdct_freq[ch][gr]; -@@ -109,56 +110,58 @@ void shine_iteration_loop(shine_global_config *config) - /* Precalculate the square, abs, and maximum, - * for use later on. - */ -- for (i=GRANULE_SIZE, config->l3loop.xrmax=0; i--;) -- { -- config->l3loop.xrsq[i] = mulsr(config->l3loop.xr[i],config->l3loop.xr[i]); -+ for (i = GRANULE_SIZE, config->l3loop.xrmax = 0; i--;) { -+ config->l3loop.xrsq[i] = -+ mulsr(config->l3loop.xr[i], config->l3loop.xr[i]); - config->l3loop.xrabs[i] = labs(config->l3loop.xr[i]); -- if(config->l3loop.xrabs[i]>config->l3loop.xrmax) -- config->l3loop.xrmax=config->l3loop.xrabs[i]; -+ if (config->l3loop.xrabs[i] > config->l3loop.xrmax) -+ config->l3loop.xrmax = config->l3loop.xrabs[i]; - } - -- cod_info = (gr_info *) &(config->side_info.gr[gr].ch[ch]); -+ cod_info = (gr_info *)&(config->side_info.gr[gr].ch[ch]); - cod_info->sfb_lmax = SFB_LMAX - 1; /* gr_deco */ - -- calc_xmin(&config->ratio, cod_info, &l3_xmin, gr, ch ); -+ calc_xmin(&config->ratio, cod_info, &l3_xmin, gr, ch); - -- if ( config->mpeg.version == MPEG_I ) -- calc_scfsi(&l3_xmin,ch,gr,config); -+ if (config->mpeg.version == MPEG_I) -+ calc_scfsi(&l3_xmin, ch, gr, config); - - /* calculation of number of available bit( per granule ) */ -- max_bits = shine_max_reservoir_bits(&config->pe[ch][gr],config); -+ max_bits = shine_max_reservoir_bits(&config->pe[ch][gr], config); - - /* reset of iteration variables */ -- memset(config->scalefactor.l[gr][ch],0,sizeof(config->scalefactor.l[gr][ch])); -- memset(config->scalefactor.s[gr][ch],0,sizeof(config->scalefactor.s[gr][ch])); -+ memset(config->scalefactor.l[gr][ch], 0, -+ sizeof(config->scalefactor.l[gr][ch])); -+ memset(config->scalefactor.s[gr][ch], 0, -+ sizeof(config->scalefactor.s[gr][ch])); - -- for ( i=4; i--; ) -+ for (i = 4; i--;) - cod_info->slen[i] = 0; - -- cod_info->part2_3_length = 0; -- cod_info->big_values = 0; -- cod_info->count1 = 0; -+ cod_info->part2_3_length = 0; -+ cod_info->big_values = 0; -+ cod_info->count1 = 0; - cod_info->scalefac_compress = 0; -- cod_info->table_select[0] = 0; -- cod_info->table_select[1] = 0; -- cod_info->table_select[2] = 0; -- cod_info->region0_count = 0; -- cod_info->region1_count = 0; -- cod_info->part2_length = 0; -- cod_info->preflag = 0; -- cod_info->scalefac_scale = 0; -- cod_info->count1table_select= 0; -+ cod_info->table_select[0] = 0; -+ cod_info->table_select[1] = 0; -+ cod_info->table_select[2] = 0; -+ cod_info->region0_count = 0; -+ cod_info->region1_count = 0; -+ cod_info->part2_length = 0; -+ cod_info->preflag = 0; -+ cod_info->scalefac_scale = 0; -+ cod_info->count1table_select = 0; - - /* all spectral values zero ? */ -- if(config->l3loop.xrmax) -- cod_info->part2_3_length = shine_outer_loop(max_bits,&l3_xmin,ix, -- gr,ch,config); -+ if (config->l3loop.xrmax) -+ cod_info->part2_3_length = -+ shine_outer_loop(max_bits, &l3_xmin, ix, gr, ch, config); - -- shine_ResvAdjust(cod_info, config ); -- cod_info->global_gain = cod_info->quantizerStepSize+210; -+ shine_ResvAdjust(cod_info, config); -+ cod_info->global_gain = cod_info->quantizerStepSize + 210; - - } /* for gr */ -- } /* for ch */ -+ } /* for ch */ - - shine_ResvFrameEnd(config); - } -@@ -168,21 +171,20 @@ void shine_iteration_loop(shine_global_config *config) - * ----------- - * calculation of the scalefactor select information ( scfsi ). - */ --void calc_scfsi( shine_psy_xmin_t *l3_xmin, int ch, int gr, -- shine_global_config *config ) --{ -+void calc_scfsi(shine_psy_xmin_t *l3_xmin, int ch, int gr, -+ shine_global_config *config) { - shine_side_info_t *l3_side = &config->side_info; - /* This is the scfsi_band table from 2.4.2.7 of the IS */ -- static const int scfsi_band_long[5] = { 0, 6, 11, 16, 21 }; -+ static const int scfsi_band_long[5] = {0, 6, 11, 16, 21}; - - int scfsi_band; -- unsigned scfsi_set; - - int sfb, start, end, i; - int condition = 0; - int temp; - -- const int *scalefac_band_long = &shine_scale_fact_band_index[config->mpeg.samplerate_index][0]; -+ const int *scalefac_band_long = -+ &shine_scale_fact_band_index[config->mpeg.samplerate_index][0]; - - /* note. it goes quite a bit faster if you uncomment the next bit and exit - early from scfsi, but you then loose the advantage of common scale factors. -@@ -194,82 +196,75 @@ void calc_scfsi( shine_psy_xmin_t *l3_xmin, int ch, int gr, - */ - - config->l3loop.xrmaxl[gr] = config->l3loop.xrmax; -- scfsi_set = 0; - - /* the total energy of the granule */ -- for ( temp = 0, i =GRANULE_SIZE; i--; ) -- temp += config->l3loop.xrsq[i]>>10; /* a bit of scaling to avoid overflow, (not very good) */ -- if ( temp ) -- config->l3loop.en_tot[gr] = log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */ -+ for (temp = 0, i = GRANULE_SIZE; i--;) -+ temp += config->l3loop.xrsq[i] >> -+ 10; /* a bit of scaling to avoid overflow, (not very good) */ -+ if (temp) -+ config->l3loop.en_tot[gr] = -+ log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */ - else - config->l3loop.en_tot[gr] = 0; - - /* the energy of each scalefactor band, en */ - /* the allowed distortion of each scalefactor band, xm */ - -- for(sfb=21; sfb--; ) -- { -- start = scalefac_band_long[ sfb ]; -- end = scalefac_band_long[ sfb+1 ]; -+ for (sfb = 21; sfb--;) { -+ start = scalefac_band_long[sfb]; -+ end = scalefac_band_long[sfb + 1]; - -- for ( temp = 0, i = start; i < end; i++ ) -- temp += config->l3loop.xrsq[i]>>10; -- if ( temp ) -- config->l3loop.en[gr][sfb] = log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */ -+ for (temp = 0, i = start; i < end; i++) -+ temp += config->l3loop.xrsq[i] >> 10; -+ if (temp) -+ config->l3loop.en[gr][sfb] = -+ log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */ - else - config->l3loop.en[gr][sfb] = 0; - -- if ( l3_xmin->l[gr][ch][sfb]) -- config->l3loop.xm[gr][sfb] = log( l3_xmin->l[gr][ch][sfb] ) / LN2; -+ if (l3_xmin->l[gr][ch][sfb]) -+ config->l3loop.xm[gr][sfb] = log(l3_xmin->l[gr][ch][sfb]) / LN2; - else - config->l3loop.xm[gr][sfb] = 0; - } - -- if(gr==1) -- { -+ if (gr == 1) { - int gr2, tp; - -- for(gr2=2; gr2--; ) -- { -+ for (gr2 = 2; gr2--;) { - /* The spectral values are not all zero */ -- if(config->l3loop.xrmaxl[gr2]) -+ if (config->l3loop.xrmaxl[gr2]) - condition++; - - condition++; - } -- if(abs(config->l3loop.en_tot[0]-config->l3loop.en_tot[1]) < en_tot_krit) -+ if (abs(config->l3loop.en_tot[0] - config->l3loop.en_tot[1]) < en_tot_krit) - condition++; -- for(tp=0,sfb=21; sfb--; ) -- tp += abs(config->l3loop.en[0][sfb]-config->l3loop.en[1][sfb]); -+ for (tp = 0, sfb = 21; sfb--;) -+ tp += abs(config->l3loop.en[0][sfb] - config->l3loop.en[1][sfb]); - if (tp < en_dif_krit) - condition++; - -- if(condition==6) -- { -- for(scfsi_band=0;scfsi_band<4;scfsi_band++) -- { -+ if (condition == 6) { -+ for (scfsi_band = 0; scfsi_band < 4; scfsi_band++) { - int sum0 = 0, sum1 = 0; - l3_side->scfsi[ch][scfsi_band] = 0; - start = scfsi_band_long[scfsi_band]; -- end = scfsi_band_long[scfsi_band+1]; -- for ( sfb = start; sfb < end; sfb++ ) -- { -- sum0 += abs( config->l3loop.en[0][sfb] - config->l3loop.en[1][sfb] ); -- sum1 += abs( config->l3loop.xm[0][sfb] - config->l3loop.xm[1][sfb] ); -+ end = scfsi_band_long[scfsi_band + 1]; -+ for (sfb = start; sfb < end; sfb++) { -+ sum0 += abs(config->l3loop.en[0][sfb] - config->l3loop.en[1][sfb]); -+ sum1 += abs(config->l3loop.xm[0][sfb] - config->l3loop.xm[1][sfb]); - } - -- if(sum0<en_scfsi_band_krit && sum1<xm_scfsi_band_krit) -- { -+ if (sum0 < en_scfsi_band_krit && sum1 < xm_scfsi_band_krit) { - l3_side->scfsi[ch][scfsi_band] = 1; -- scfsi_set |= (1 << scfsi_band); -- } -- else -+ } else - l3_side->scfsi[ch][scfsi_band] = 0; - } /* for scfsi_band */ -- } /* if condition == 6 */ -+ } /* if condition == 6 */ - else -- for(scfsi_band=0;scfsi_band<4;scfsi_band++) -- l3_side->scfsi[ch][scfsi_band] = 0; -+ for (scfsi_band = 0; scfsi_band < 4; scfsi_band++) -+ l3_side->scfsi[ch][scfsi_band] = 0; - } /* if gr == 1 */ - } - -@@ -279,27 +274,26 @@ void calc_scfsi( shine_psy_xmin_t *l3_xmin, int ch, int gr, - * calculates the number of bits needed to encode the scalefacs in the - * main data block. - */ --int part2_length(int gr, int ch, shine_global_config *config) --{ -+int part2_length(int gr, int ch, shine_global_config *config) { - int slen1, slen2, bits; - gr_info *gi = &config->side_info.gr[gr].ch[ch].tt; - - bits = 0; - - { -- slen1 = shine_slen1_tab[ gi->scalefac_compress ]; -- slen2 = shine_slen2_tab[ gi->scalefac_compress ]; -+ slen1 = shine_slen1_tab[gi->scalefac_compress]; -+ slen2 = shine_slen2_tab[gi->scalefac_compress]; - -- if ( !gr || !(config->side_info.scfsi[ch][0]) ) -+ if (!gr || !(config->side_info.scfsi[ch][0])) - bits += (6 * slen1); - -- if ( !gr || !(config->side_info.scfsi[ch][1]) ) -+ if (!gr || !(config->side_info.scfsi[ch][1])) - bits += (5 * slen1); - -- if ( !gr || !(config->side_info.scfsi[ch][2]) ) -+ if (!gr || !(config->side_info.scfsi[ch][2])) - bits += (5 * slen2); - -- if ( !gr || !(config->side_info.scfsi[ch][3]) ) -+ if (!gr || !(config->side_info.scfsi[ch][3])) - bits += (5 * slen2); - } - return bits; -@@ -312,26 +306,22 @@ int part2_length(int gr, int ch, shine_global_config *config) - * as determined by the psychoacoustic model. - * xmin(sb) = ratio(sb) * en(sb) / bw(sb) - */ --void calc_xmin(shine_psy_ratio_t *ratio, -- gr_info *cod_info, -- shine_psy_xmin_t *l3_xmin, -- int gr, int ch ) --{ -+void calc_xmin(shine_psy_ratio_t *ratio, gr_info *cod_info, -+ shine_psy_xmin_t *l3_xmin, int gr, int ch) { - int sfb; - -- for ( sfb = cod_info->sfb_lmax; sfb--; ) -- { --/* note. xmin will always be zero with no psychoacoustic model -+ for (sfb = cod_info->sfb_lmax; sfb--;) { -+ /* note. xmin will always be zero with no psychoacoustic model - -- start = scalefac_band_long[ sfb ]; -- end = scalefac_band_long[ sfb+1 ]; -- bw = end - start; -+ start = scalefac_band_long[ sfb ]; -+ end = scalefac_band_long[ sfb+1 ]; -+ bw = end - start; - -- for ( en = 0, l = start; l < end; l++ ) -- en += config->l3loop.xrsq[l]; -+ for ( en = 0, l = start; l < end; l++ ) -+ en += config->l3loop.xrsq[l]; - -- l3_xmin->l[gr][ch][sfb] = ratio->l[gr][ch][sfb] * en / bw; --*/ -+ l3_xmin->l[gr][ch][sfb] = ratio->l[gr][ch][sfb] * en / bw; -+ */ - l3_xmin->l[gr][ch][sfb] = 0; - } - } -@@ -341,8 +331,7 @@ void calc_xmin(shine_psy_ratio_t *ratio, - * ------------------- - * Calculates the look up tables used by the iteration loop. - */ --void shine_loop_initialise(shine_global_config *config) --{ -+void shine_loop_initialise(shine_global_config *config) { - int i; - - /* quantize: stepsize conversion, fourth root of 2 table. -@@ -350,24 +339,26 @@ void shine_loop_initialise(shine_global_config *config) - * in the spec because it is quicker to do x*y than x/y. - * The 0.5 is for rounding. - */ -- for(i=128; i--;) -- { -- config->l3loop.steptab[i] = pow(2.0,(double)(127-i)/4); -- if((config->l3loop.steptab[i]*2)>0x7fffffff) /* MAXINT = 2**31 = 2**(124/4) */ -- config->l3loop.steptabi[i]=0x7fffffff; -+ for (i = 128; i--;) { -+ config->l3loop.steptab[i] = pow(2.0, (double)(127 - i) / 4); -+ if ((config->l3loop.steptab[i] * 2) > -+ 0x7fffffff) /* MAXINT = 2**31 = 2**(124/4) */ -+ config->l3loop.steptabi[i] = 0x7fffffff; - else - /* The table is multiplied by 2 to give an extra bit of accuracy. - * In quantize, the long multiply does not shift it's result left one - * bit to compensate. - */ -- config->l3loop.steptabi[i] = (int32_t)((config->l3loop.steptab[i]*2) + 0.5); -+ config->l3loop.steptabi[i] = -+ (int32_t)((config->l3loop.steptab[i] * 2) + 0.5); - } - - /* quantize: vector conversion, three quarter power table. - * The 0.5 is for rounding, the .0946 comes from the spec. - */ -- for(i=10000; i--;) -- config->l3loop.int2idx[i] = (int)(sqrt(sqrt((double)i)*(double)i) - 0.0946 + 0.5); -+ for (i = 10000; i--;) -+ config->l3loop.int2idx[i] = -+ (int)(sqrt(sqrt((double)i) * (double)i) - 0.0946 + 0.5); - } - - /* -@@ -376,39 +367,37 @@ void shine_loop_initialise(shine_global_config *config) - * Function: Quantization of the vector xr ( -> ix). - * Returns maximum value of ix. - */ --int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config ) --{ -+int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config) { - int i, max, ln; - int32_t scalei; - double scale, dbl; - -- scalei = config->l3loop.steptabi[stepsize+127]; /* 2**(-stepsize/4) */ -+ scalei = config->l3loop.steptabi[stepsize + 127]; /* 2**(-stepsize/4) */ - - /* a quick check to see if ixmax will be less than 8192 */ - /* this speeds up the early calls to bin_search_StepSize */ -- if((mulr(config->l3loop.xrmax,scalei)) > 165140) /* 8192**(4/3) */ -+ if ((mulr(config->l3loop.xrmax, scalei)) > 165140) /* 8192**(4/3) */ - max = 16384; /* no point in continuing, stepsize not big enough */ - else -- for(i=0, max=0;i<GRANULE_SIZE;i++) -- { -+ for (i = 0, max = 0; i < GRANULE_SIZE; i++) { - /* This calculation is very sensitive. The multiply must round it's - * result or bad things happen to the quality. - */ -- ln = mulr(labs(config->l3loop.xr[i]),scalei); -+ ln = mulr(labs(config->l3loop.xr[i]), scalei); - -- if(ln<10000) /* ln < 10000 catches most values */ -+ if (ln < 10000) /* ln < 10000 catches most values */ - ix[i] = config->l3loop.int2idx[ln]; /* quick look up method */ -- else -- { -+ else { - /* outside table range so have to do it using floats */ -- scale = config->l3loop.steptab[stepsize+127]; /* 2**(-stepsize/4) */ -- dbl = ((double)config->l3loop.xrabs[i]) * scale * 4.656612875e-10; /* 0x7fffffff */ -- ix[i] = (int)sqrt(sqrt(dbl)*dbl); /* dbl**(3/4) */ -+ scale = config->l3loop.steptab[stepsize + 127]; /* 2**(-stepsize/4) */ -+ dbl = ((double)config->l3loop.xrabs[i]) * scale * -+ 4.656612875e-10; /* 0x7fffffff */ -+ ix[i] = (int)sqrt(sqrt(dbl) * dbl); /* dbl**(3/4) */ - } - - /* calculate ixmax while we're here */ - /* note. ix cannot be negative */ -- if(max < ix[i]) -+ if (max < ix[i]) - max = ix[i]; - } - -@@ -420,13 +409,13 @@ int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config ) - * ------- - * Function: Calculate the maximum of ix from 0 to 575 - */ --static inline int ix_max( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end ) --{ -+static inline int ix_max(int ix[GRANULE_SIZE], unsigned int begin, -+ unsigned int end) { - register int i; - register int max = 0; - -- for(i=begin;i<end;i++) -- if(max < ix[i]) -+ for (i = begin; i < end; i++) -+ if (max < ix[i]) - max = ix[i]; - return max; - } -@@ -437,28 +426,24 @@ static inline int ix_max( int ix[GRANULE_SIZE], unsigned int begin, unsigned int - * Function: Calculation of rzero, count1, big_values - * (Partitions ix into big values, quadruples and zeros). - */ --void calc_runlen( int ix[GRANULE_SIZE], gr_info *cod_info ) --{ -+void calc_runlen(int ix[GRANULE_SIZE], gr_info *cod_info) { - int i; - int rzero = 0; - -- for ( i = GRANULE_SIZE; i > 1; i -= 2 ) -- if ( !ix[i-1] && !ix[i-2] ) -+ for (i = GRANULE_SIZE; i > 1; i -= 2) -+ if (!ix[i - 1] && !ix[i - 2]) - rzero++; - else - break; - -- cod_info->count1 = 0 ; -- for ( ; i > 3; i -= 4 ) -- if ( ix[i-1] <= 1 -- && ix[i-2] <= 1 -- && ix[i-3] <= 1 -- && ix[i-4] <= 1 ) -+ cod_info->count1 = 0; -+ for (; i > 3; i -= 4) -+ if (ix[i - 1] <= 1 && ix[i - 2] <= 1 && ix[i - 3] <= 1 && ix[i - 4] <= 1) - cod_info->count1++; - else - break; - -- cod_info->big_values = i>>1; -+ cod_info->big_values = i >> 1; - } - - /* -@@ -466,27 +451,29 @@ void calc_runlen( int ix[GRANULE_SIZE], gr_info *cod_info ) - * ---------------- - * Determines the number of bits to encode the quadruples. - */ --int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info) --{ -+int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info) { - int p, i, k; - int v, w, x, y, signbits; -- int sum0 = 0, -- sum1 = 0; -+ int sum0 = 0, sum1 = 0; - -- for(i=cod_info->big_values<<1, k=0; k<cod_info->count1; i+=4, k++) -- { -+ for (i = cod_info->big_values << 1, k = 0; k < cod_info->count1; -+ i += 4, k++) { - v = ix[i]; -- w = ix[i+1]; -- x = ix[i+2]; -- y = ix[i+3]; -+ w = ix[i + 1]; -+ x = ix[i + 2]; -+ y = ix[i + 3]; - -- p = v + (w<<1) + (x<<2) + (y<<3); -+ p = v + (w << 1) + (x << 2) + (y << 3); - - signbits = 0; -- if(v!=0) signbits++; -- if(w!=0) signbits++; -- if(x!=0) signbits++; -- if(y!=0) signbits++; -+ if (v != 0) -+ signbits++; -+ if (w != 0) -+ signbits++; -+ if (x != 0) -+ signbits++; -+ if (y != 0) -+ signbits++; - - sum0 += signbits; - sum1 += signbits; -@@ -495,13 +482,10 @@ int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info) - sum1 += shine_huffman_table[33].hlen[p]; - } - -- if(sum0<sum1) -- { -+ if (sum0 < sum1) { - cod_info->count1table_select = 0; - return sum0; -- } -- else -- { -+ } else { - cod_info->count1table_select = 1; - return sum1; - } -@@ -510,59 +494,56 @@ int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info) - /* - * subdivide: - * ---------- -- * presumable subdivides the bigvalue region which will use separate Huffman tables. -+ * presumable subdivides the bigvalue region which will use separate Huffman -+ * tables. - */ --void subdivide(gr_info *cod_info, shine_global_config *config) --{ -- static const struct -- { -+void subdivide(gr_info *cod_info, shine_global_config *config) { -+ static const struct { - unsigned region0_count; - unsigned region1_count; -- } subdv_table[ 23 ] = -- { -- {0, 0}, /* 0 bands */ -- {0, 0}, /* 1 bands */ -- {0, 0}, /* 2 bands */ -- {0, 0}, /* 3 bands */ -- {0, 0}, /* 4 bands */ -- {0, 1}, /* 5 bands */ -- {1, 1}, /* 6 bands */ -- {1, 1}, /* 7 bands */ -- {1, 2}, /* 8 bands */ -- {2, 2}, /* 9 bands */ -- {2, 3}, /* 10 bands */ -- {2, 3}, /* 11 bands */ -- {3, 4}, /* 12 bands */ -- {3, 4}, /* 13 bands */ -- {3, 4}, /* 14 bands */ -- {4, 5}, /* 15 bands */ -- {4, 5}, /* 16 bands */ -- {4, 6}, /* 17 bands */ -- {5, 6}, /* 18 bands */ -- {5, 6}, /* 19 bands */ -- {5, 7}, /* 20 bands */ -- {6, 7}, /* 21 bands */ -- {6, 7}, /* 22 bands */ -+ } subdv_table[23] = { -+ {0, 0}, /* 0 bands */ -+ {0, 0}, /* 1 bands */ -+ {0, 0}, /* 2 bands */ -+ {0, 0}, /* 3 bands */ -+ {0, 0}, /* 4 bands */ -+ {0, 1}, /* 5 bands */ -+ {1, 1}, /* 6 bands */ -+ {1, 1}, /* 7 bands */ -+ {1, 2}, /* 8 bands */ -+ {2, 2}, /* 9 bands */ -+ {2, 3}, /* 10 bands */ -+ {2, 3}, /* 11 bands */ -+ {3, 4}, /* 12 bands */ -+ {3, 4}, /* 13 bands */ -+ {3, 4}, /* 14 bands */ -+ {4, 5}, /* 15 bands */ -+ {4, 5}, /* 16 bands */ -+ {4, 6}, /* 17 bands */ -+ {5, 6}, /* 18 bands */ -+ {5, 6}, /* 19 bands */ -+ {5, 7}, /* 20 bands */ -+ {6, 7}, /* 21 bands */ -+ {6, 7}, /* 22 bands */ - }; - -- if (!cod_info->big_values) -- { /* no big_values region */ -+ if (!cod_info->big_values) { /* no big_values region */ - cod_info->region0_count = 0; - cod_info->region1_count = 0; -- } -- else -- { -- const int *scalefac_band_long = &shine_scale_fact_band_index[config->mpeg.samplerate_index][0]; -+ } else { -+ const int *scalefac_band_long = -+ &shine_scale_fact_band_index[config->mpeg.samplerate_index][0]; - int bigvalues_region, scfb_anz, thiscount; - - bigvalues_region = 2 * cod_info->big_values; - - /* Calculate scfb_anz */ - scfb_anz = 0; -- while ( scalefac_band_long[scfb_anz] < bigvalues_region ) -+ while (scalefac_band_long[scfb_anz] < bigvalues_region) - scfb_anz++; - -- for (thiscount = subdv_table[scfb_anz].region0_count; thiscount; thiscount--) { -+ for (thiscount = subdv_table[scfb_anz].region0_count; thiscount; -+ thiscount--) { - if (scalefac_band_long[thiscount + 1] <= bigvalues_region) - break; - } -@@ -571,7 +552,8 @@ void subdivide(gr_info *cod_info, shine_global_config *config) - - scalefac_band_long += cod_info->region0_count + 1; - -- for (thiscount = subdv_table[scfb_anz].region1_count; thiscount; thiscount--) { -+ for (thiscount = subdv_table[scfb_anz].region1_count; thiscount; -+ thiscount--) { - if (scalefac_band_long[thiscount + 1] <= bigvalues_region) - break; - } -@@ -587,21 +569,22 @@ void subdivide(gr_info *cod_info, shine_global_config *config) - * ---------------- - * Function: Select huffman code tables for bigvalues regions - */ --void bigv_tab_select( int ix[GRANULE_SIZE], gr_info *cod_info ) --{ -+void bigv_tab_select(int ix[GRANULE_SIZE], gr_info *cod_info) { - cod_info->table_select[0] = 0; - cod_info->table_select[1] = 0; - cod_info->table_select[2] = 0; - - { -- if ( cod_info->address1 > 0 ) -- cod_info->table_select[0] = new_choose_table( ix, 0, cod_info->address1 ); -+ if (cod_info->address1 > 0) -+ cod_info->table_select[0] = new_choose_table(ix, 0, cod_info->address1); - -- if ( cod_info->address2 > cod_info->address1 ) -- cod_info->table_select[1] = new_choose_table( ix, cod_info->address1, cod_info->address2 ); -+ if (cod_info->address2 > cod_info->address1) -+ cod_info->table_select[1] = -+ new_choose_table(ix, cod_info->address1, cod_info->address2); - -- if ( cod_info->big_values<<1 > cod_info->address2 ) -- cod_info->table_select[2] = new_choose_table( ix, cod_info->address2, cod_info->big_values<<1 ); -+ if (cod_info->big_values << 1 > cod_info->address2) -+ cod_info->table_select[2] = -+ new_choose_table(ix, cod_info->address2, cod_info->big_values << 1); - } - } - -@@ -614,98 +597,89 @@ void bigv_tab_select( int ix[GRANULE_SIZE], gr_info *cod_info ) - * of the Huffman tables as defined in the IS (Table B.7), and will not work - * with any arbitrary tables. - */ --int new_choose_table( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end ) --{ -+int new_choose_table(int ix[GRANULE_SIZE], unsigned int begin, -+ unsigned int end) { - int i, max; - int choice[2]; - int sum[2]; - -- max = ix_max(ix,begin,end); -- if(!max) -+ max = ix_max(ix, begin, end); -+ if (!max) - return 0; - - choice[0] = 0; - choice[1] = 0; - -- if(max<15) -- { -+ if (max < 15) { - /* try tables with no linbits */ -- for ( i =14; i--; ) -- if ( shine_huffman_table[i].xlen > max ) -- { -+ for (i = 14; i--;) -+ if (shine_huffman_table[i].xlen > max) { - choice[0] = i; - break; - } - -- sum[0] = count_bit( ix, begin, end, choice[0] ); -+ sum[0] = count_bit(ix, begin, end, choice[0]); - -- switch (choice[0]) -- { -- case 2: -- sum[1] = count_bit( ix, begin, end, 3 ); -- if ( sum[1] <= sum[0] ) -- choice[0] = 3; -- break; -+ switch (choice[0]) { -+ case 2: -+ sum[1] = count_bit(ix, begin, end, 3); -+ if (sum[1] <= sum[0]) -+ choice[0] = 3; -+ break; - -- case 5: -- sum[1] = count_bit( ix, begin, end, 6 ); -- if ( sum[1] <= sum[0] ) -- choice[0] = 6; -- break; -+ case 5: -+ sum[1] = count_bit(ix, begin, end, 6); -+ if (sum[1] <= sum[0]) -+ choice[0] = 6; -+ break; - -- case 7: -- sum[1] = count_bit( ix, begin, end, 8 ); -- if ( sum[1] <= sum[0] ) -- { -- choice[0] = 8; -- sum[0] = sum[1]; -- } -- sum[1] = count_bit( ix, begin, end, 9 ); -- if ( sum[1] <= sum[0] ) -- choice[0] = 9; -- break; -+ case 7: -+ sum[1] = count_bit(ix, begin, end, 8); -+ if (sum[1] <= sum[0]) { -+ choice[0] = 8; -+ sum[0] = sum[1]; -+ } -+ sum[1] = count_bit(ix, begin, end, 9); -+ if (sum[1] <= sum[0]) -+ choice[0] = 9; -+ break; - -- case 10: -- sum[1] = count_bit( ix, begin, end, 11 ); -- if ( sum[1] <= sum[0] ) -- { -- choice[0] = 11; -- sum[0] = sum[1]; -- } -- sum[1] = count_bit( ix, begin, end, 12 ); -- if ( sum[1] <= sum[0] ) -- choice[0] = 12; -- break; -+ case 10: -+ sum[1] = count_bit(ix, begin, end, 11); -+ if (sum[1] <= sum[0]) { -+ choice[0] = 11; -+ sum[0] = sum[1]; -+ } -+ sum[1] = count_bit(ix, begin, end, 12); -+ if (sum[1] <= sum[0]) -+ choice[0] = 12; -+ break; - -- case 13: -- sum[1] = count_bit( ix, begin, end, 15 ); -- if ( sum[1] <= sum[0] ) -- choice[0] = 15; -- break; -+ case 13: -+ sum[1] = count_bit(ix, begin, end, 15); -+ if (sum[1] <= sum[0]) -+ choice[0] = 15; -+ break; - } -- } -- else -- { -+ } else { - /* try tables with linbits */ - max -= 15; - -- for(i=15;i<24;i++) -- if(shine_huffman_table[i].linmax>=max) -- { -+ for (i = 15; i < 24; i++) -+ if (shine_huffman_table[i].linmax >= max) { - choice[0] = i; - break; - } - -- for(i=24;i<32;i++) -- if(shine_huffman_table[i].linmax>=max) -- { -+ for (i = 24; i < 32; i++) -+ if (shine_huffman_table[i].linmax >= max) { - choice[1] = i; - break; - } - -- sum[0] = count_bit(ix,begin,end,choice[0]); -- sum[1] = count_bit(ix,begin,end,choice[1]); -- if (sum[1]<sum[0]) -+ sum[0] = count_bit(ix, begin, end, choice[0]); -+ sum[1] = count_bit(ix, begin, end, choice[1]); -+ if (sum[1] < sum[0]) - choice[0] = choice[1]; - } - return choice[0]; -@@ -716,17 +690,16 @@ int new_choose_table( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end - * -------------- - * Function: Count the number of bits necessary to code the bigvalues region. - */ --int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi) --{ -+int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi) { - int bits = 0; - unsigned int table; - -- if( (table=gi->table_select[0])) /* region0 */ -- bits += count_bit(ix, 0, gi->address1, table ); -- if( (table=gi->table_select[1])) /* region1 */ -- bits += count_bit(ix, gi->address1, gi->address2, table ); -- if( (table=gi->table_select[2])) /* region2 */ -- bits += count_bit(ix, gi->address2, gi->address3, table ); -+ if ((table = gi->table_select[0])) /* region0 */ -+ bits += count_bit(ix, 0, gi->address1, table); -+ if ((table = gi->table_select[1])) /* region1 */ -+ bits += count_bit(ix, gi->address1, gi->address2, table); -+ if ((table = gi->table_select[2])) /* region2 */ -+ bits += count_bit(ix, gi->address2, gi->address3, table); - return bits; - } - -@@ -735,61 +708,51 @@ int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi) - * ---------- - * Function: Count the number of bits necessary to code the subregion. - */ --int count_bit(int ix[GRANULE_SIZE], -- unsigned int start, -- unsigned int end, -- unsigned int table ) --{ -- unsigned linbits, ylen; -- register int i, sum; -- register int x,y; -+int count_bit(int ix[GRANULE_SIZE], unsigned int start, unsigned int end, -+ unsigned int table) { -+ unsigned linbits, ylen; -+ register int i, sum; -+ register int x, y; - const struct huffcodetab *h; - -- if(!table) -+ if (!table) - return 0; - -- h = &(shine_huffman_table[table]); -+ h = &(shine_huffman_table[table]); - sum = 0; - -- ylen = h->ylen; -+ ylen = h->ylen; - linbits = h->linbits; - -- if(table>15) -- { /* ESC-table is used */ -- for(i=start;i<end;i+=2) -- { -+ if (table > 15) { /* ESC-table is used */ -+ for (i = start; i < end; i += 2) { - x = ix[i]; -- y = ix[i+1]; -- if(x>14) -- { -+ y = ix[i + 1]; -+ if (x > 14) { - x = 15; - sum += linbits; - } -- if(y>14) -- { -+ if (y > 14) { - y = 15; - sum += linbits; - } - -- sum += h->hlen[(x*ylen)+y]; -- if(x) -+ sum += h->hlen[(x * ylen) + y]; -+ if (x) - sum++; -- if(y) -+ if (y) - sum++; - } -- } -- else -- { /* No ESC-words */ -- for(i=start;i<end;i+=2) -- { -+ } else { /* No ESC-words */ -+ for (i = start; i < end; i += 2) { - x = ix[i]; -- y = ix[i+1]; -+ y = ix[i + 1]; - -- sum += h->hlen[(x*ylen)+y]; -+ sum += h->hlen[(x * ylen) + y]; - -- if(x!=0) -+ if (x != 0) - sum++; -- if(y!=0) -+ if (y != 0) - sum++; - } - } -@@ -809,20 +772,18 @@ int count_bit(int ix[GRANULE_SIZE], - * returns a good starting quantizerStepSize. - */ - int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE], -- gr_info * cod_info, shine_global_config *config) --{ -+ gr_info *cod_info, shine_global_config *config) { - int bit, next, count; - -- next = -120; -+ next = -120; - count = 120; - - do { - int half = count / 2; - - if (quantize(ix, next + half, config) > 8192) -- bit = 100000; /* fail */ -- else -- { -+ bit = 100000; /* fail */ -+ else { - calc_runlen(ix, cod_info); /* rzero,count1,big_values */ - bit = count1_bitcount(ix, cod_info); /* count1_table selection */ - subdivide(cod_info, config); /* bigvalues sfb division */ -@@ -832,8 +793,7 @@ int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE], - - if (bit < desired_rate) - count = half; -- else -- { -+ else { - next += half; - count -= half; - } -diff --git a/src/lib/l3loop.h b/src/lib/l3loop.h -index 0e71a91..94ecea3 100644 ---- a/src/lib/l3loop.h -+++ b/src/lib/l3loop.h -@@ -1,9 +1,10 @@ - #ifndef L3LOOP_H - #define L3LOOP_H - -+#include "types.h" -+ - void shine_loop_initialise(shine_global_config *config); - - void shine_iteration_loop(shine_global_config *config); - - #endif -- -diff --git a/src/lib/l3mdct.c b/src/lib/l3mdct.c -index 7553a54..a76b702 100644 ---- a/src/lib/l3mdct.c -+++ b/src/lib/l3mdct.c -@@ -1,88 +1,87 @@ - /* L3mdct */ - --#include "types.h" - #include "l3mdct.h" - #include "l3subband.h" -+#include "types.h" - - /* This is table B.9: coefficients for aliasing reduction */ --#define MDCT_CA(coef) (int32_t)(coef / sqrt(1.0 + (coef * coef)) * 0x7fffffff) --#define MDCT_CS(coef) (int32_t)(1.0 / sqrt(1.0 + (coef * coef)) * 0x7fffffff) -+#define MDCT_CA(coef) (int32_t)(coef / sqrt(1.0 + (coef * coef)) * 0x7fffffff) -+#define MDCT_CS(coef) (int32_t)(1.0 / sqrt(1.0 + (coef * coef)) * 0x7fffffff) - --#define MDCT_CA0 MDCT_CA(-0.6) --#define MDCT_CA1 MDCT_CA(-0.535) --#define MDCT_CA2 MDCT_CA(-0.33) --#define MDCT_CA3 MDCT_CA(-0.185) --#define MDCT_CA4 MDCT_CA(-0.095) --#define MDCT_CA5 MDCT_CA(-0.041) --#define MDCT_CA6 MDCT_CA(-0.0142) --#define MDCT_CA7 MDCT_CA(-0.0037) -+#define MDCT_CA0 MDCT_CA(-0.6) -+#define MDCT_CA1 MDCT_CA(-0.535) -+#define MDCT_CA2 MDCT_CA(-0.33) -+#define MDCT_CA3 MDCT_CA(-0.185) -+#define MDCT_CA4 MDCT_CA(-0.095) -+#define MDCT_CA5 MDCT_CA(-0.041) -+#define MDCT_CA6 MDCT_CA(-0.0142) -+#define MDCT_CA7 MDCT_CA(-0.0037) - --#define MDCT_CS0 MDCT_CS(-0.6) --#define MDCT_CS1 MDCT_CS(-0.535) --#define MDCT_CS2 MDCT_CS(-0.33) --#define MDCT_CS3 MDCT_CS(-0.185) --#define MDCT_CS4 MDCT_CS(-0.095) --#define MDCT_CS5 MDCT_CS(-0.041) --#define MDCT_CS6 MDCT_CS(-0.0142) --#define MDCT_CS7 MDCT_CS(-0.0037) -+#define MDCT_CS0 MDCT_CS(-0.6) -+#define MDCT_CS1 MDCT_CS(-0.535) -+#define MDCT_CS2 MDCT_CS(-0.33) -+#define MDCT_CS3 MDCT_CS(-0.185) -+#define MDCT_CS4 MDCT_CS(-0.095) -+#define MDCT_CS5 MDCT_CS(-0.041) -+#define MDCT_CS6 MDCT_CS(-0.0142) -+#define MDCT_CS7 MDCT_CS(-0.0037) - - /* - * shine_mdct_initialise: - * ------------------- - */ --void shine_mdct_initialise(shine_global_config *config) --{ -- int m,k; -+void shine_mdct_initialise(shine_global_config *config) { -+ int m, k; - - /* prepare the mdct coefficients */ -- for(m=18; m--; ) -- for(k=36; k--; ) -+ for (m = 18; m--;) -+ for (k = 36; k--;) - /* combine window and mdct coefficients into a single table */ - /* scale and convert to fixed point before storing */ -- config->mdct.cos_l[m][k] = (int32_t)(sin(PI36*(k+0.5)) -- * cos((PI/72)*(2*k+19)*(2*m+1)) * 0x7fffffff); -+ config->mdct.cos_l[m][k] = -+ (int32_t)(sin(PI36 * (k + 0.5)) * -+ cos((PI / 72) * (2 * k + 19) * (2 * m + 1)) * 0x7fffffff); - } - - /* - * shine_mdct_sub: - * ------------ - */ --void shine_mdct_sub(shine_global_config *config, int stride) --{ -+void shine_mdct_sub(shine_global_config *config, int stride) { - /* note. we wish to access the array 'config->mdct_freq[2][2][576]' as - * [2][2][32][18]. (32*18=576), - */ -- int32_t (*mdct_enc)[18]; -+ int32_t(*mdct_enc)[18]; - -- int ch,gr,band,j,k; -+ int ch, gr, band, j, k; - int32_t mdct_in[36]; - -- for(ch=config->wave.channels; ch--; ) -- { -- for(gr=0; gr<config->mpeg.granules_per_frame; gr++) -- { -+ for (ch = config->wave.channels; ch--;) { -+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) { - /* set up pointer to the part of config->mdct_freq we're using */ -- mdct_enc = (int32_t (*)[18]) config->mdct_freq[ch][gr]; -+ mdct_enc = (int32_t(*)[18])config->mdct_freq[ch][gr]; - - /* polyphase filtering */ -- for(k=0; k<18; k+=2) -- { -- shine_window_filter_subband(&config->buffer[ch], &config->l3_sb_sample[ch][gr+1][k ][0], ch, config, stride); -- shine_window_filter_subband(&config->buffer[ch], &config->l3_sb_sample[ch][gr+1][k+1][0], ch, config, stride); -+ for (k = 0; k < 18; k += 2) { -+ shine_window_filter_subband(&config->buffer[ch], -+ &config->l3_sb_sample[ch][gr + 1][k][0], ch, -+ config, stride); -+ shine_window_filter_subband(&config->buffer[ch], -+ &config->l3_sb_sample[ch][gr + 1][k + 1][0], -+ ch, config, stride); - /* Compensate for inversion in the analysis filter - * (every odd index of band AND k) - */ -- for(band=1; band<32; band+=2) -- config->l3_sb_sample[ch][gr+1][k+1][band] *= -1; -+ for (band = 1; band < 32; band += 2) -+ config->l3_sb_sample[ch][gr + 1][k + 1][band] *= -1; - } - -- /* Perform imdct of 18 previous subband samples + 18 current subband samples */ -- for(band=0; band<32; band++) -- { -- for(k=18; k--; ) -- { -- mdct_in[k ] = config->l3_sb_sample[ch][gr ][k][band]; -- mdct_in[k+18] = config->l3_sb_sample[ch][gr+1][k][band]; -+ /* Perform imdct of 18 previous subband samples + 18 current subband -+ * samples */ -+ for (band = 0; band < 32; band++) { -+ for (k = 18; k--;) { -+ mdct_in[k] = config->l3_sb_sample[ch][gr][k][band]; -+ mdct_in[k + 18] = config->l3_sb_sample[ch][gr + 1][k][band]; - } - - /* Calculation of the MDCT -@@ -90,41 +89,61 @@ void shine_mdct_sub(shine_global_config *config, int stride) - * 36 coefficients in the time domain and 18 in the frequency - * domain. - */ -- for(k=18; k--; ) -- { -+ for (k = 18; k--;) { - int32_t vm; -+#ifdef __BORLANDC__ -+ uint32_t vm_lo; -+#else - uint32_t vm_lo __attribute__((unused)); -+#endif - - mul0(vm, vm_lo, mdct_in[35], config->mdct.cos_l[k][35]); -- for(j=35; j; j-=7) { -- muladd(vm, vm_lo, mdct_in[j-1], config->mdct.cos_l[k][j-1]); -- muladd(vm, vm_lo, mdct_in[j-2], config->mdct.cos_l[k][j-2]); -- muladd(vm, vm_lo, mdct_in[j-3], config->mdct.cos_l[k][j-3]); -- muladd(vm, vm_lo, mdct_in[j-4], config->mdct.cos_l[k][j-4]); -- muladd(vm, vm_lo, mdct_in[j-5], config->mdct.cos_l[k][j-5]); -- muladd(vm, vm_lo, mdct_in[j-6], config->mdct.cos_l[k][j-6]); -- muladd(vm, vm_lo, mdct_in[j-7], config->mdct.cos_l[k][j-7]); -+ for (j = 35; j; j -= 7) { -+ muladd(vm, vm_lo, mdct_in[j - 1], config->mdct.cos_l[k][j - 1]); -+ muladd(vm, vm_lo, mdct_in[j - 2], config->mdct.cos_l[k][j - 2]); -+ muladd(vm, vm_lo, mdct_in[j - 3], config->mdct.cos_l[k][j - 3]); -+ muladd(vm, vm_lo, mdct_in[j - 4], config->mdct.cos_l[k][j - 4]); -+ muladd(vm, vm_lo, mdct_in[j - 5], config->mdct.cos_l[k][j - 5]); -+ muladd(vm, vm_lo, mdct_in[j - 6], config->mdct.cos_l[k][j - 6]); -+ muladd(vm, vm_lo, mdct_in[j - 7], config->mdct.cos_l[k][j - 7]); - } - mulz(vm, vm_lo); - mdct_enc[band][k] = vm; - } - - /* Perform aliasing reduction butterfly */ -- if (band != 0) -- { -- cmuls(mdct_enc[band][0], mdct_enc[band-1][17-0], mdct_enc[band][0], mdct_enc[band-1][17-0], MDCT_CS0, MDCT_CA0); -- cmuls(mdct_enc[band][1], mdct_enc[band-1][17-1], mdct_enc[band][1], mdct_enc[band-1][17-1], MDCT_CS1, MDCT_CA1); -- cmuls(mdct_enc[band][2], mdct_enc[band-1][17-2], mdct_enc[band][2], mdct_enc[band-1][17-2], MDCT_CS2, MDCT_CA2); -- cmuls(mdct_enc[band][3], mdct_enc[band-1][17-3], mdct_enc[band][3], mdct_enc[band-1][17-3], MDCT_CS3, MDCT_CA3); -- cmuls(mdct_enc[band][4], mdct_enc[band-1][17-4], mdct_enc[band][4], mdct_enc[band-1][17-4], MDCT_CS4, MDCT_CA4); -- cmuls(mdct_enc[band][5], mdct_enc[band-1][17-5], mdct_enc[band][5], mdct_enc[band-1][17-5], MDCT_CS5, MDCT_CA5); -- cmuls(mdct_enc[band][6], mdct_enc[band-1][17-6], mdct_enc[band][6], mdct_enc[band-1][17-6], MDCT_CS6, MDCT_CA6); -- cmuls(mdct_enc[band][7], mdct_enc[band-1][17-7], mdct_enc[band][7], mdct_enc[band-1][17-7], MDCT_CS7, MDCT_CA7); -+ if (band != 0) { -+ cmuls(mdct_enc[band][0], mdct_enc[band - 1][17 - 0], -+ mdct_enc[band][0], mdct_enc[band - 1][17 - 0], MDCT_CS0, -+ MDCT_CA0); -+ cmuls(mdct_enc[band][1], mdct_enc[band - 1][17 - 1], -+ mdct_enc[band][1], mdct_enc[band - 1][17 - 1], MDCT_CS1, -+ MDCT_CA1); -+ cmuls(mdct_enc[band][2], mdct_enc[band - 1][17 - 2], -+ mdct_enc[band][2], mdct_enc[band - 1][17 - 2], MDCT_CS2, -+ MDCT_CA2); -+ cmuls(mdct_enc[band][3], mdct_enc[band - 1][17 - 3], -+ mdct_enc[band][3], mdct_enc[band - 1][17 - 3], MDCT_CS3, -+ MDCT_CA3); -+ cmuls(mdct_enc[band][4], mdct_enc[band - 1][17 - 4], -+ mdct_enc[band][4], mdct_enc[band - 1][17 - 4], MDCT_CS4, -+ MDCT_CA4); -+ cmuls(mdct_enc[band][5], mdct_enc[band - 1][17 - 5], -+ mdct_enc[band][5], mdct_enc[band - 1][17 - 5], MDCT_CS5, -+ MDCT_CA5); -+ cmuls(mdct_enc[band][6], mdct_enc[band - 1][17 - 6], -+ mdct_enc[band][6], mdct_enc[band - 1][17 - 6], MDCT_CS6, -+ MDCT_CA6); -+ cmuls(mdct_enc[band][7], mdct_enc[band - 1][17 - 7], -+ mdct_enc[band][7], mdct_enc[band - 1][17 - 7], MDCT_CS7, -+ MDCT_CA7); - } - } - } - - /* Save latest granule's subband samples to be used in the next mdct call */ -- memcpy(config->l3_sb_sample[ch][0], config->l3_sb_sample[ch][config->mpeg.granules_per_frame], sizeof(config->l3_sb_sample[0][0])); -+ memcpy(config->l3_sb_sample[ch][0], -+ config->l3_sb_sample[ch][config->mpeg.granules_per_frame], -+ sizeof(config->l3_sb_sample[0][0])); - } - } -diff --git a/src/lib/l3mdct.h b/src/lib/l3mdct.h -index 1288259..3018eb9 100644 ---- a/src/lib/l3mdct.h -+++ b/src/lib/l3mdct.h -@@ -1,7 +1,9 @@ - #ifndef shine_MDCT_H - #define shine_MDCT_H - --void shine_mdct_initialise(); -+#include "types.h" -+ -+void shine_mdct_initialise(shine_global_config *config); - void shine_mdct_sub(shine_global_config *config, int stride); - - #endif -diff --git a/src/lib/l3subband.c b/src/lib/l3subband.c -index 58abf5f..78f428e 100644 ---- a/src/lib/l3subband.c -+++ b/src/lib/l3subband.c -@@ -1,8 +1,8 @@ - /* L3SubBand */ - --#include "types.h" --#include "tables.h" - #include "l3subband.h" -+#include "tables.h" -+#include "types.h" - - /* - * shine_subband_initialise: -@@ -11,23 +11,21 @@ - * 9th decimal place accuracy of the filterbank tables in the ISO - * document. The coefficients are stored in #filter# - */ --void shine_subband_initialise(shine_global_config *config) --{ -- int i,j; -+void shine_subband_initialise(shine_global_config *config) { -+ int i, j; - double filter; - -- for(i=MAX_CHANNELS; i-- ; ) { -+ for (i = MAX_CHANNELS; i--;) { - config->subband.off[i] = 0; - memset(config->subband.x[i], 0, sizeof(config->subband.x[i])); - } - -- for (i=SBLIMIT; i--; ) -- for (j=64; j--; ) -- { -- if ((filter = 1e9*cos((double)((2*i+1)*(16-j)*PI64))) >= 0) -- modf(filter+0.5, &filter); -+ for (i = SBLIMIT; i--;) -+ for (j = 64; j--;) { -+ if ((filter = 1e9 * cos((double)((2 * i + 1) * (16 - j) * PI64))) >= 0) -+ modf(filter + 0.5, &filter); - else -- modf(filter-0.5, &filter); -+ modf(filter - 0.5, &filter); - /* scale and convert to fixed point before storing */ - config->subband.fl[i][j] = (int32_t)(filter * (0x7fffffff * 1e-9)); - } -@@ -39,58 +37,90 @@ void shine_subband_initialise(shine_global_config *config) - * Overlapping window on PCM samples - * 32 16-bit pcm samples are scaled to fractional 2's complement and - * concatenated to the end of the window buffer #x#. The updated window -- * buffer #x# is then windowed by the analysis window #shine_enwindow# to produce -- * the windowed sample #z# -- * Calculates the analysis filter bank coefficients -- * The windowed samples #z# is filtered by the digital filter matrix #filter# -- * to produce the subband samples #s#. This done by first selectively -- * picking out values from the windowed samples, and then multiplying -- * them by the filter matrix, producing 32 subband samples. -+ * buffer #x# is then windowed by the analysis window #shine_enwindow# to -+ * produce the windowed sample #z# Calculates the analysis filter bank -+ * coefficients The windowed samples #z# is filtered by the digital filter -+ * matrix #filter# to produce the subband samples #s#. This done by first -+ * selectively picking out values from the windowed samples, and then -+ * multiplying them by the filter matrix, producing 32 subband samples. - */ --void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int ch, shine_global_config *config, int stride) --{ -+void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int ch, -+ shine_global_config *config, int stride) { - int32_t y[64]; -- int i,j; -+ int i, j; - int16_t *ptr = *buffer; - - /* replace 32 oldest samples with 32 new samples */ -- for (i=32;i--;) { -- config->subband.x[ch][i+config->subband.off[ch]] = ((int32_t)*ptr) << 16; -+ for (i = 32; i--;) { -+ config->subband.x[ch][i + config->subband.off[ch]] = ((int32_t)*ptr) << 16; - ptr += stride; - } - *buffer = ptr; - -- for (i=64; i--; ) { -+ for (i = 64; i--;) { - int32_t s_value; -+#ifdef __BORLANDC__ -+ uint32_t s_value_lo; -+#else - uint32_t s_value_lo __attribute__((unused)); -+#endif - -- mul0 (s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (0<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (0<<6)]); -- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (1<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (1<<6)]); -- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (2<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (2<<6)]); -- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (3<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (3<<6)]); -- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (4<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (4<<6)]); -- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (5<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (5<<6)]); -- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (6<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (6<<6)]); -- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (7<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (7<<6)]); -- mulz (s_value, s_value_lo); -+ mul0(s_value, s_value_lo, -+ config->subband -+ .x[ch][(config->subband.off[ch] + i + (0 << 6)) & (HAN_SIZE - 1)], -+ shine_enwindow[i + (0 << 6)]); -+ muladd(s_value, s_value_lo, -+ config->subband.x[ch][(config->subband.off[ch] + i + (1 << 6)) & -+ (HAN_SIZE - 1)], -+ shine_enwindow[i + (1 << 6)]); -+ muladd(s_value, s_value_lo, -+ config->subband.x[ch][(config->subband.off[ch] + i + (2 << 6)) & -+ (HAN_SIZE - 1)], -+ shine_enwindow[i + (2 << 6)]); -+ muladd(s_value, s_value_lo, -+ config->subband.x[ch][(config->subband.off[ch] + i + (3 << 6)) & -+ (HAN_SIZE - 1)], -+ shine_enwindow[i + (3 << 6)]); -+ muladd(s_value, s_value_lo, -+ config->subband.x[ch][(config->subband.off[ch] + i + (4 << 6)) & -+ (HAN_SIZE - 1)], -+ shine_enwindow[i + (4 << 6)]); -+ muladd(s_value, s_value_lo, -+ config->subband.x[ch][(config->subband.off[ch] + i + (5 << 6)) & -+ (HAN_SIZE - 1)], -+ shine_enwindow[i + (5 << 6)]); -+ muladd(s_value, s_value_lo, -+ config->subband.x[ch][(config->subband.off[ch] + i + (6 << 6)) & -+ (HAN_SIZE - 1)], -+ shine_enwindow[i + (6 << 6)]); -+ muladd(s_value, s_value_lo, -+ config->subband.x[ch][(config->subband.off[ch] + i + (7 << 6)) & -+ (HAN_SIZE - 1)], -+ shine_enwindow[i + (7 << 6)]); -+ mulz(s_value, s_value_lo); - y[i] = s_value; - } - -- config->subband.off[ch] = (config->subband.off[ch] + 480) & (HAN_SIZE-1); /* offset is modulo (HAN_SIZE)*/ -+ config->subband.off[ch] = (config->subband.off[ch] + 480) & -+ (HAN_SIZE - 1); /* offset is modulo (HAN_SIZE)*/ - -- for (i=SBLIMIT; i--; ) { -+ for (i = SBLIMIT; i--;) { - int32_t s_value; -+#ifdef __BORLANDC__ -+ uint32_t s_value_lo; -+#else - uint32_t s_value_lo __attribute__((unused)); -+#endif - - mul0(s_value, s_value_lo, config->subband.fl[i][63], y[63]); -- for (j=63; j; j-=7) { -- muladd(s_value, s_value_lo, config->subband.fl[i][j-1], y[j-1]); -- muladd(s_value, s_value_lo, config->subband.fl[i][j-2], y[j-2]); -- muladd(s_value, s_value_lo, config->subband.fl[i][j-3], y[j-3]); -- muladd(s_value, s_value_lo, config->subband.fl[i][j-4], y[j-4]); -- muladd(s_value, s_value_lo, config->subband.fl[i][j-5], y[j-5]); -- muladd(s_value, s_value_lo, config->subband.fl[i][j-6], y[j-6]); -- muladd(s_value, s_value_lo, config->subband.fl[i][j-7], y[j-7]); -+ for (j = 63; j; j -= 7) { -+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 1], y[j - 1]); -+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 2], y[j - 2]); -+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 3], y[j - 3]); -+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 4], y[j - 4]); -+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 5], y[j - 5]); -+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 6], y[j - 6]); -+ muladd(s_value, s_value_lo, config->subband.fl[i][j - 7], y[j - 7]); - } - mulz(s_value, s_value_lo); - s[i] = s_value; -diff --git a/src/lib/l3subband.h b/src/lib/l3subband.h -index 9bfe861..5cfbef5 100644 ---- a/src/lib/l3subband.h -+++ b/src/lib/l3subband.h -@@ -1,9 +1,11 @@ - #ifndef L3SUBBAND_H - #define L3SUBBAND_H - -+#include "types.h" - #include <stdint.h> - --void shine_subband_initialise( shine_global_config *config ); --void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int k, shine_global_config *config, int stride); -+void shine_subband_initialise(shine_global_config *config); -+void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int k, -+ shine_global_config *config, int stride); - - #endif -diff --git a/src/lib/layer3.c b/src/lib/layer3.c -index 0b574ad..f3d1ecd 100644 ---- a/src/lib/layer3.c -+++ b/src/lib/layer3.c -@@ -1,28 +1,27 @@ - /* layer3.c */ - --#include "types.h" --#include "tables.h" - #include "layer3.h" --#include "l3subband.h" --#include "l3mdct.h" --#include "l3loop.h" - #include "bitstream.h" - #include "l3bitstream.h" -+#include "l3loop.h" -+#include "l3mdct.h" -+#include "l3subband.h" -+#include "tables.h" -+#include "types.h" - - static int granules_per_frame[4] = { - 1, /* MPEG 2.5 */ -- -1, /* Reserved */ -+ -1, /* Reserved */ - 1, /* MPEG II */ -- 2 /* MPEG I */ -+ 2 /* MPEG I */ - }; - - /* Set default values for important vars */ --void shine_set_config_mpeg_defaults(shine_mpeg_t *mpeg) --{ -+void shine_set_config_mpeg_defaults(shine_mpeg_t *mpeg) { - mpeg->bitr = 128; - mpeg->emph = NONE; - mpeg->copyright = 0; -- mpeg->original = 1; -+ mpeg->original = 1; - } - - int shine_mpeg_version(int samplerate_index) { -@@ -38,56 +37,56 @@ int shine_mpeg_version(int samplerate_index) { - return MPEG_25; - } - --int shine_find_samplerate_index(int freq) --{ -+int shine_find_samplerate_index(int freq) { - int i; - -- for(i=0;i<9;i++) -- if(freq==samplerates[i]) return i; -+ for (i = 0; i < 9; i++) -+ if (freq == samplerates[i]) -+ return i; - - return -1; /* error - not a valid samplerate for encoder */ - } - --int shine_find_bitrate_index(int bitr, int mpeg_version) --{ -+int shine_find_bitrate_index(int bitr, int mpeg_version) { - int i; - -- for(i=0;i<16;i++) -- if(bitr==bitrates[i][mpeg_version]) return i; -+ for (i = 0; i < 16; i++) -+ if (bitr == bitrates[i][mpeg_version]) -+ return i; - - return -1; /* error - not a valid samplerate for encoder */ - } - --int shine_check_config(int freq, int bitr) --{ -+int shine_check_config(int freq, int bitr) { - int samplerate_index, bitrate_index, mpeg_version; - - samplerate_index = shine_find_samplerate_index(freq); -- if (samplerate_index < 0) return -1; -+ if (samplerate_index < 0) -+ return -1; - - mpeg_version = shine_mpeg_version(samplerate_index); - - bitrate_index = shine_find_bitrate_index(bitr, mpeg_version); -- if (bitrate_index < 0) return -1; -+ if (bitrate_index < 0) -+ return -1; - - return mpeg_version; - } - --int shine_samples_per_pass(shine_t s) --{ -+int shine_samples_per_pass(shine_t s) { - return s->mpeg.granules_per_frame * GRANULE_SIZE; - } - - /* Compute default encoding values. */ --shine_global_config *shine_initialise(shine_config_t *pub_config) --{ -+shine_global_config *shine_initialise(shine_config_t *pub_config) { - double avg_slots_per_frame; - shine_global_config *config; - -- if (shine_check_config(pub_config->wave.samplerate, pub_config->mpeg.bitr) < 0) -+ if (shine_check_config(pub_config->wave.samplerate, pub_config->mpeg.bitr) < -+ 0) - return NULL; - -- config = calloc(1,sizeof(shine_global_config)); -+ config = calloc(1, sizeof(shine_global_config)); - if (config == NULL) - return config; - -@@ -96,65 +95,71 @@ shine_global_config *shine_initialise(shine_config_t *pub_config) - shine_loop_initialise(config); - - /* Copy public config. */ -- config->wave.channels = pub_config->wave.channels; -- config->wave.samplerate = pub_config->wave.samplerate; -- config->mpeg.mode = pub_config->mpeg.mode; -- config->mpeg.bitr = pub_config->mpeg.bitr; -- config->mpeg.emph = pub_config->mpeg.emph; -- config->mpeg.copyright = pub_config->mpeg.copyright; -- config->mpeg.original = pub_config->mpeg.original; -+ config->wave.channels = pub_config->wave.channels; -+ config->wave.samplerate = pub_config->wave.samplerate; -+ config->mpeg.mode = pub_config->mpeg.mode; -+ config->mpeg.bitr = pub_config->mpeg.bitr; -+ config->mpeg.emph = pub_config->mpeg.emph; -+ config->mpeg.copyright = pub_config->mpeg.copyright; -+ config->mpeg.original = pub_config->mpeg.original; - - /* Set default values. */ -- config->ResvMax = 0; -- config->ResvSize = 0; -- config->mpeg.layer = LAYER_III; -- config->mpeg.crc = 0; -- config->mpeg.ext = 0; -- config->mpeg.mode_ext = 0; -- config->mpeg.bits_per_slot = 8; -- -- config->mpeg.samplerate_index = shine_find_samplerate_index(config->wave.samplerate); -- config->mpeg.version = shine_mpeg_version(config->mpeg.samplerate_index); -- config->mpeg.bitrate_index = shine_find_bitrate_index(config->mpeg.bitr, config->mpeg.version); -+ config->ResvMax = 0; -+ config->ResvSize = 0; -+ config->mpeg.layer = LAYER_III; -+ config->mpeg.crc = 0; -+ config->mpeg.ext = 0; -+ config->mpeg.mode_ext = 0; -+ config->mpeg.bits_per_slot = 8; -+ -+ config->mpeg.samplerate_index = -+ shine_find_samplerate_index(config->wave.samplerate); -+ config->mpeg.version = shine_mpeg_version(config->mpeg.samplerate_index); -+ config->mpeg.bitrate_index = -+ shine_find_bitrate_index(config->mpeg.bitr, config->mpeg.version); - config->mpeg.granules_per_frame = granules_per_frame[config->mpeg.version]; - - /* Figure average number of 'slots' per frame. */ -- avg_slots_per_frame = ((double)config->mpeg.granules_per_frame * GRANULE_SIZE / -- ((double)config->wave.samplerate)) * -- (1000*(double)config->mpeg.bitr / -- (double)config->mpeg.bits_per_slot); -+ avg_slots_per_frame = -+ ((double)config->mpeg.granules_per_frame * GRANULE_SIZE / -+ ((double)config->wave.samplerate)) * -+ (1000 * (double)config->mpeg.bitr / (double)config->mpeg.bits_per_slot); - -- config->mpeg.whole_slots_per_frame = (int)avg_slots_per_frame; -+ config->mpeg.whole_slots_per_frame = (int)avg_slots_per_frame; - -- config->mpeg.frac_slots_per_frame = avg_slots_per_frame - (double)config->mpeg.whole_slots_per_frame; -- config->mpeg.slot_lag = -config->mpeg.frac_slots_per_frame; -+ config->mpeg.frac_slots_per_frame = -+ avg_slots_per_frame - (double)config->mpeg.whole_slots_per_frame; -+ config->mpeg.slot_lag = -config->mpeg.frac_slots_per_frame; - -- if(config->mpeg.frac_slots_per_frame==0) -+ if (config->mpeg.frac_slots_per_frame == 0) - config->mpeg.padding = 0; - - shine_open_bit_stream(&config->bs, BUFFER_SIZE); - -- memset((char *)&config->side_info,0,sizeof(shine_side_info_t)); -+ memset((char *)&config->side_info, 0, sizeof(shine_side_info_t)); - - /* determine the mean bitrate for main data */ - if (config->mpeg.granules_per_frame == 2) /* MPEG 1 */ -- config->sideinfo_len = 8 * ((config->wave.channels==1) ? 4 + 17 : 4 + 32); -- else /* MPEG 2 */ -- config->sideinfo_len = 8 * ((config->wave.channels==1) ? 4 + 9 : 4 + 17); -+ config->sideinfo_len = 8 * ((config->wave.channels == 1) ? 4 + 17 : 4 + 32); -+ else /* MPEG 2 */ -+ config->sideinfo_len = 8 * ((config->wave.channels == 1) ? 4 + 9 : 4 + 17); - - return config; - } - --static unsigned char *shine_encode_buffer_internal(shine_global_config *config, int *written, int stride) --{ -- if(config->mpeg.frac_slots_per_frame) -- { -- config->mpeg.padding = (config->mpeg.slot_lag <= (config->mpeg.frac_slots_per_frame - 1.0)); -- config->mpeg.slot_lag += (config->mpeg.padding - config->mpeg.frac_slots_per_frame); -+static unsigned char *shine_encode_buffer_internal(shine_global_config *config, -+ int *written, int stride) { -+ if (config->mpeg.frac_slots_per_frame) { -+ config->mpeg.padding = -+ (config->mpeg.slot_lag <= (config->mpeg.frac_slots_per_frame - 1.0)); -+ config->mpeg.slot_lag += -+ (config->mpeg.padding - config->mpeg.frac_slots_per_frame); - } - -- config->mpeg.bits_per_frame = 8*(config->mpeg.whole_slots_per_frame + config->mpeg.padding); -- config->mean_bits = (config->mpeg.bits_per_frame - config->sideinfo_len)/config->mpeg.granules_per_frame; -+ config->mpeg.bits_per_frame = -+ 8 * (config->mpeg.whole_slots_per_frame + config->mpeg.padding); -+ config->mean_bits = (config->mpeg.bits_per_frame - config->sideinfo_len) / -+ config->mpeg.granules_per_frame; - - /* apply mdct to the polyphase output */ - shine_mdct_sub(config, stride); -@@ -172,8 +177,8 @@ static unsigned char *shine_encode_buffer_internal(shine_global_config *config, - return config->bs.data; - } - --unsigned char *shine_encode_buffer(shine_global_config *config, int16_t **data, int *written) --{ -+unsigned char *shine_encode_buffer(shine_global_config *config, int16_t **data, -+ int *written) { - config->buffer[0] = data[0]; - if (config->wave.channels == 2) - config->buffer[1] = data[1]; -@@ -181,8 +186,8 @@ unsigned char *shine_encode_buffer(shine_global_config *config, int16_t **data, - return shine_encode_buffer_internal(config, written, 1); - } - --unsigned char *shine_encode_buffer_interleaved(shine_global_config *config, int16_t *data, int *written) --{ -+unsigned char *shine_encode_buffer_interleaved(shine_global_config *config, -+ int16_t *data, int *written) { - config->buffer[0] = data; - if (config->wave.channels == 2) - config->buffer[1] = data + 1; -@@ -197,7 +202,6 @@ unsigned char *shine_flush(shine_global_config *config, int *written) { - return config->bs.data; - } - -- - void shine_close(shine_global_config *config) { - shine_close_bit_stream(&config->bs); - free(config); -diff --git a/src/lib/layer3.h b/src/lib/layer3.h -index 7fb11e0..d72b6a4 100644 ---- a/src/lib/layer3.h -+++ b/src/lib/layer3.h -@@ -5,48 +5,31 @@ - - /* This is the struct used to tell the encoder about the input PCM */ - --enum channels { -- PCM_MONO = 1, -- PCM_STEREO = 2 --}; -+enum channels { PCM_MONO = 1, PCM_STEREO = 2 }; - --enum mpeg_versions { -- MPEG_I = 3, -- MPEG_II = 2, -- MPEG_25 = 0 --}; -+enum mpeg_versions { MPEG_I = 3, MPEG_II = 2, MPEG_25 = 0 }; - - /* Only Layer III currently implemented. */ --enum mpeg_layers { -- LAYER_III = 1 --}; -+enum mpeg_layers { LAYER_III = 1 }; - - typedef struct { -- enum channels channels; -- int samplerate; -+ enum channels channels; -+ int samplerate; - } shine_wave_t; - --/* This is the struct the encoder uses to tell the encoder about the output MP3 */ -+/* This is the struct the encoder uses to tell the encoder about the output MP3 -+ */ - --enum modes { -- STEREO = 0, -- JOINT_STEREO = 1, -- DUAL_CHANNEL = 2, -- MONO = 3 --}; -+enum modes { STEREO = 0, JOINT_STEREO = 1, DUAL_CHANNEL = 2, MONO = 3 }; - --enum emph { -- NONE = 0, -- MU50_15 = 1, -- CITT = 3 --}; -+enum emph { NONE = 0, MU50_15 = 1, CITT = 3 }; - - typedef struct { -- enum modes mode; /* Stereo mode */ -- int bitr; /* Must conform to known bitrate */ -- enum emph emph; /* De-emphasis */ -- int copyright; -- int original; -+ enum modes mode; /* Stereo mode */ -+ int bitr; /* Must conform to known bitrate */ -+ enum emph emph; /* De-emphasis */ -+ int copyright; -+ int original; - } shine_mpeg_t; - - typedef struct { -@@ -60,7 +43,7 @@ typedef struct { - * const int samplerates[9] = { - * 44100, 48000, 32000, // MPEG-I - * 22050, 24000, 16000, // MPEG-II -- * 11025, 12000, 8000 // MPEG-2.5 -+ * 11025, 12000, 8000 // MPEG-2.5 - * }; - * - * const int bitrates[16][4] = { -@@ -92,37 +75,37 @@ typedef struct shine_global_flags *shine_t; - /* Fill in a `mpeg_t` structure with default values. */ - void shine_set_config_mpeg_defaults(shine_mpeg_t *mpeg); - --/* Check if a given bitrate is supported by the encoder (see `bitrates` above for a list -- * of acceptable values. */ -+/* Check if a given bitrate is supported by the encoder (see `bitrates` above -+ * for a list of acceptable values. */ - int shine_find_bitrate_index(int bitr, int mpeg_version); - --/* Check if a given samplerate is supported by the encoder (see `samplerates` above for a list -- * of acceptable values. */ -+/* Check if a given samplerate is supported by the encoder (see `samplerates` -+ * above for a list of acceptable values. */ - int shine_find_samplerate_index(int freq); - - /* Returns the MPEG version used for the given samplerate index. See above -- * `mpeg_versions` for a list of possible values. */ -+ * `mpeg_versions` for a list of possible values. */ - int shine_mpeg_version(int samplerate_index); - --/* Check if a given bitrate and samplerate is supported by the encoder (see `samplerates` -- * and `bitrates` above for a list of acceptable values). -+/* Check if a given bitrate and samplerate is supported by the encoder (see -+ * `samplerates` and `bitrates` above for a list of acceptable values). - * - * Returns -1 on error, mpeg_version on success. */ - int shine_check_config(int freq, int bitr); - - /* Pass a pointer to a `config_t` structure and returns an initialized -- * encoder. -+ * encoder. - * - * Configuration data is copied over to the encoder. It is not possible - * to change its values after initializing the encoder at the moment. - * -- * Checking for valid configuration values is left for the application to -- * implement. You can use the `shine_find_bitrate_index` and -- * `shine_find_samplerate_index` functions or the `bitrates` and -- * `samplerates` arrays above to check those parameters. Mone and stereo -+ * Checking for valid configuration values is left for the application to -+ * implement. You can use the `shine_find_bitrate_index` and -+ * `shine_find_samplerate_index` functions or the `bitrates` and -+ * `samplerates` arrays above to check those parameters. Mone and stereo - * mode for wave and mpeg should also be consistent with each other. - * -- * This function returns NULL if it was not able to allocate memory data for -+ * This function returns NULL if it was not able to allocate memory data for - * the encoder. */ - shine_t shine_initialise(shine_config_t *config); - -@@ -132,26 +115,28 @@ shine_t shine_initialise(shine_config_t *config); - /* Returns audio samples expected in each frame. */ - int shine_samples_per_pass(shine_t s); - --/* Encode audio data. Source data must have `shine_samples_per_pass(s)` audio samples per -- * channels. Mono encoder only expect one channel. -+/* Encode audio data. Source data must have `shine_samples_per_pass(s)` audio -+ * samples per channels. Mono encoder only expect one channel. - * -- * Returns a pointer to freshly encoded data while `written` contains the size of -- * available data. This pointer's memory is handled by the library and is only valid -- * until the next call to `shine_encode_buffer` or `shine_close` and may be NULL if no data -- * was written. */ -+ * Returns a pointer to freshly encoded data while `written` contains the size -+ * of available data. This pointer's memory is handled by the library and is -+ * only valid until the next call to `shine_encode_buffer` or `shine_close` and -+ * may be NULL if no data was written. */ - unsigned char *shine_encode_buffer(shine_t s, int16_t **data, int *written); - --/* Encode interleaved audio data. Source data must have `shine_samples_per_pass(s)` audio samples per -- * channels. Mono encoder only expect one channel. -+/* Encode interleaved audio data. Source data must have -+ * `shine_samples_per_pass(s)` audio samples per channels. Mono encoder only -+ * expect one channel. - * -- * Returns a pointer to freshly encoded data while `written` contains the size of -- * available data. This pointer's memory is handled by the library and is only valid -- * until the next call to `shine_encode_buffer` or `shine_close` and may be NULL if no data -- * was written. */ --unsigned char *shine_encode_buffer_interleaved(shine_t s, int16_t *data, int *written); -- --/* Flush all data currently in the encoding buffer. Should be used before closing -- * the encoder, to make all encoded data has been written. */ -+ * Returns a pointer to freshly encoded data while `written` contains the size -+ * of available data. This pointer's memory is handled by the library and is -+ * only valid until the next call to `shine_encode_buffer` or `shine_close` and -+ * may be NULL if no data was written. */ -+unsigned char *shine_encode_buffer_interleaved(shine_t s, int16_t *data, -+ int *written); -+ -+/* Flush all data currently in the encoding buffer. Should be used before -+ * closing the encoder, to make all encoded data has been written. */ - unsigned char *shine_flush(shine_t s, int *written); - - /* Close an encoder, freeing all associated memory. Encoder handler is not -diff --git a/src/lib/mult_mips_gcc.h b/src/lib/mult_mips_gcc.h -index 092ed84..d49d215 100644 ---- a/src/lib/mult_mips_gcc.h -+++ b/src/lib/mult_mips_gcc.h -@@ -1,51 +1,50 @@ - #include <stdint.h> - --#define mul(a,b) \ --({ \ -- register int32_t res; \ -- __asm__ __volatile__("mult %0, %1" : : "r" (a), "r" (b)); \ -- __asm__ __volatile__("mfhi %0" : "=r" (res)); \ -- res; \ --}) -+#define mul(a, b) \ -+ ({ \ -+ register int32_t res; \ -+ __asm__ __volatile__("mult %0, %1" : : "r"(a), "r"(b)); \ -+ __asm__ __volatile__("mfhi %0" : "=r"(res)); \ -+ res; \ -+ }) - --#define mul0(hi,lo,a,b) \ -- __asm__ __volatile__("mult %0, %1" : : "r" (a), "r" (b)) -+#define mul0(hi, lo, a, b) \ -+ __asm__ __volatile__("mult %0, %1" : : "r"(a), "r"(b)) - --#define muladd(hi,lo,a,b) \ -- __asm__ __volatile__("madd %0, %1" : : "r" (a), "r" (b)) -+#define muladd(hi, lo, a, b) \ -+ __asm__ __volatile__("madd %0, %1" : : "r"(a), "r"(b)) - --#define mulsub(hi,lo,a,b) \ -- __asm__ __volatile__("msub %0, %1" : : "r" (a), "r" (b)) -+#define mulsub(hi, lo, a, b) \ -+ __asm__ __volatile__("msub %0, %1" : : "r"(a), "r"(b)) - --#define mulz(hi,lo) \ --do { \ -- register int32_t t; \ -- __asm__ __volatile__("mfhi %0" : "=r" (t)); \ -- (hi) = t; \ --} while (0) -+#define mulz(hi, lo) \ -+ do { \ -+ register int32_t t; \ -+ __asm__ __volatile__("mfhi %0" : "=r"(t)); \ -+ (hi) = t; \ -+ } while (0) - --#define cmuls(dre, dim, are, aim, bre, bim) \ --do { \ -- register int32_t t1, t2, tre; \ -- __asm__ __volatile__("mult %0, %1" : : "r" (are), "r" (bre)); \ -- __asm__ __volatile__("msub %0, %1" : : "r" (aim), "r" (bim)); \ -- __asm__ __volatile__("mfhi %0; mflo %1" : "=r" (t1), "=r" (t2)); \ -- tre = (t1 << 1) | ((uint32_t)t2 >> 31); \ -- __asm__ __volatile__("mult %0, %1" : : "r" (are), "r" (bim)); \ -- __asm__ __volatile__("madd %0, %1" : : "r" (bre), "r" (aim)); \ -- dre = tre; \ -- __asm__ __volatile__("mfhi %0; mflo %1" : "=r" (t1), "=r" (t2)); \ -- dim = (t1 << 1) | ((uint32_t)t2 >> 31); \ --} while (0) -+#define cmuls(dre, dim, are, aim, bre, bim) \ -+ do { \ -+ register int32_t t1, t2, tre; \ -+ __asm__ __volatile__("mult %0, %1" : : "r"(are), "r"(bre)); \ -+ __asm__ __volatile__("msub %0, %1" : : "r"(aim), "r"(bim)); \ -+ __asm__ __volatile__("mfhi %0; mflo %1" : "=r"(t1), "=r"(t2)); \ -+ tre = (t1 << 1) | ((uint32_t)t2 >> 31); \ -+ __asm__ __volatile__("mult %0, %1" : : "r"(are), "r"(bim)); \ -+ __asm__ __volatile__("madd %0, %1" : : "r"(bre), "r"(aim)); \ -+ dre = tre; \ -+ __asm__ __volatile__("mfhi %0; mflo %1" : "=r"(t1), "=r"(t2)); \ -+ dim = (t1 << 1) | ((uint32_t)t2 >> 31); \ -+ } while (0) - - #if __mips_isa_rev >= 2 --static inline uint32_t SWAB32(uint32_t x) --{ -- __asm__( -- " wsbh %0, %1 \n" -- " rotr %0, %0, 16 \n" -- : "=r" (x) : "r" (x)); -- return x; -+static inline uint32_t SWAB32(uint32_t x) { -+ __asm__(" wsbh %0, %1 \n" -+ " rotr %0, %0, 16 \n" -+ : "=r"(x) -+ : "r"(x)); -+ return x; - } - #define SWAB32 SWAB32 - #endif -diff --git a/src/lib/mult_noarch_gcc.h b/src/lib/mult_noarch_gcc.h -index 516e66c..2ee207e 100644 ---- a/src/lib/mult_noarch_gcc.h -+++ b/src/lib/mult_noarch_gcc.h -@@ -1,34 +1,40 @@ - #include <stdint.h> - - #ifndef mul --#define mul(a,b) (int32_t) ( ( ((int64_t) a) * ((int64_t) b) ) >>32 ) -+#define mul(a, b) (int32_t)((((int64_t)a) * ((int64_t)b)) >> 32) - #endif - - #ifndef muls --#define muls(a,b) (int32_t) ( ( ((int64_t) a) * ((int64_t) b) ) >>31 ) -+#define muls(a, b) (int32_t)((((int64_t)a) * ((int64_t)b)) >> 31) - #endif - - #ifndef mulr --#define mulr(a,b) (int32_t) ( ( ( ((int64_t) a) * ((int64_t) b)) + 0x80000000LL ) >>32 ) -+#define mulr(a, b) \ -+ (int32_t)(((((int64_t)a) * ((int64_t)b)) + 0x80000000LL) >> 32) - #endif - - #ifndef mulsr --#define mulsr(a,b) (int32_t) ( ( ( ((int64_t) a) * ((int64_t) b)) + 0x40000000LL ) >>31 ) -+#define mulsr(a, b) \ -+ (int32_t)(((((int64_t)a) * ((int64_t)b)) + 0x40000000LL) >> 31) - #endif - - #ifndef mul0 --#define mul0(hi,lo,a,b) ((hi) = mul((a), (b))) --#define muladd(hi,lo,a,b) ((hi) += mul((a), (b))) --#define mulsub(hi,lo,a,b) ((hi) -= mul((a), (b))) --#define mulz(hi,lo) -+#define mul0(hi, lo, a, b) ((hi) = mul((a), (b))) -+#define muladd(hi, lo, a, b) ((hi) += mul((a), (b))) -+#define mulsub(hi, lo, a, b) ((hi) -= mul((a), (b))) -+#define mulz(hi, lo) - #endif - - #ifndef cmuls --#define cmuls(dre, dim, are, aim, bre, bim) \ --do { \ -- int32_t tre; \ -- (tre) = (int32_t) (((int64_t) (are) * (int64_t) (bre) - (int64_t) (aim) * (int64_t) (bim)) >> 31); \ -- (dim) = (int32_t) (((int64_t) (are) * (int64_t) (bim) + (int64_t) (aim) * (int64_t) (bre)) >> 31); \ -- (dre) = tre; \ --} while (0) -+#define cmuls(dre, dim, are, aim, bre, bim) \ -+ do { \ -+ int32_t tre; \ -+ (tre) = (int32_t)(((int64_t)(are) * (int64_t)(bre) - \ -+ (int64_t)(aim) * (int64_t)(bim)) >> \ -+ 31); \ -+ (dim) = (int32_t)(((int64_t)(are) * (int64_t)(bim) + \ -+ (int64_t)(aim) * (int64_t)(bre)) >> \ -+ 31); \ -+ (dre) = tre; \ -+ } while (0) - #endif -diff --git a/src/lib/mult_sarm_gcc.h b/src/lib/mult_sarm_gcc.h -index d229eff..0cf8e08 100644 ---- a/src/lib/mult_sarm_gcc.h -+++ b/src/lib/mult_sarm_gcc.h -@@ -2,108 +2,102 @@ - - /* Fractional multiply */ - #if __ARM_ARCH >= 6 --#define mul(x,y) \ --({ \ -- register int32_t result; \ -- asm ("smmul %0, %2, %1" : "=r" (result) : "r" (x), "r" (y)); \ -- result ;\ --}) -+#define mul(x, y) \ -+ ({ \ -+ register int32_t result; \ -+ asm("smmul %0, %2, %1" : "=r"(result) : "r"(x), "r"(y)); \ -+ result; \ -+ }) - #else --#define mul(x,y) \ --({ \ -- register int32_t result; \ -- asm ("smull r3, %0, %2, %1" : "=r" (result) : "r" (x), "r" (y) : "r3"); \ -- result ; \ --}) -+#define mul(x, y) \ -+ ({ \ -+ register int32_t result; \ -+ asm("smull r3, %0, %2, %1" : "=r"(result) : "r"(x), "r"(y) : "r3"); \ -+ result; \ -+ }) - #endif - - /* Fractional multiply with single bit left shift. */ --#define muls(x,y) \ --({ \ -- register int32_t result; \ -- asm ( \ -- "smull r3, %0, %2, %1\n\t" \ -- "movs r3, r3, lsl #1\n\t" \ -- "adc %0, %0, %0" \ -- : "=r" (result) : "r" (x), "r" (y) : "r3", "cc" \ -- ); \ -- result; \ --}) -- -+#define muls(x, y) \ -+ ({ \ -+ register int32_t result; \ -+ asm("smull r3, %0, %2, %1\n\t" \ -+ "movs r3, r3, lsl #1\n\t" \ -+ "adc %0, %0, %0" \ -+ : "=r"(result) \ -+ : "r"(x), "r"(y) \ -+ : "r3", "cc"); \ -+ result; \ -+ }) - - #if __ARM_ARCH >= 6 --#define mulr(x,y) \ --({ \ -- register int32_t result; \ -- asm ( \ -- "smmulr %0, %2, %1" : "=r" (result) : "r" (x), "r" (y) \ -- ); \ -- result; \ --}) -+#define mulr(x, y) \ -+ ({ \ -+ register int32_t result; \ -+ asm("smmulr %0, %2, %1" : "=r"(result) : "r"(x), "r"(y)); \ -+ result; \ -+ }) - #else --#define mulr(x,y) \ --({ \ -- register int32_t result; \ -- asm ( \ -- "smull r3, %0, %2, %1\n\t" \ -- "adds r3, r3, #0x80000000\n\t" \ -- "adc %0, %0, #0" \ -- : "=r" (result) : "r" (x), "r" (y) : "r3", "cc" \ -- ); \ -- result; \ --}) -+#define mulr(x, y) \ -+ ({ \ -+ register int32_t result; \ -+ asm("smull r3, %0, %2, %1\n\t" \ -+ "adds r3, r3, #0x80000000\n\t" \ -+ "adc %0, %0, #0" \ -+ : "=r"(result) \ -+ : "r"(x), "r"(y) \ -+ : "r3", "cc"); \ -+ result; \ -+ }) - #endif - --#define mulsr(x,y) \ --({ \ -- register int32_t result; \ -- asm ( \ -- "smull r3, %0, %1, %2\n\t" \ -- "movs r3, r3, lsl #1\n\t" \ -- "adc %0, %0, %0\n\t" \ -- "adds r3, r3, #0x80000000\n\t" \ -- "adc %0, %0, #0" \ -- : "=r" (result) : "r" (x), "r" (y) : "r3", "cc" \ -- ); \ -- result; \ --}) -+#define mulsr(x, y) \ -+ ({ \ -+ register int32_t result; \ -+ asm("smull r3, %0, %1, %2\n\t" \ -+ "movs r3, r3, lsl #1\n\t" \ -+ "adc %0, %0, %0\n\t" \ -+ "adds r3, r3, #0x80000000\n\t" \ -+ "adc %0, %0, #0" \ -+ : "=r"(result) \ -+ : "r"(x), "r"(y) \ -+ : "r3", "cc"); \ -+ result; \ -+ }) - --#define mul0(hi,lo,a,b) \ -- asm ("smull %0, %1, %2, %3" : "=r" (lo), "=r" (hi) : "r" (a), "r" (b)) -+#define mul0(hi, lo, a, b) \ -+ asm("smull %0, %1, %2, %3" : "=r"(lo), "=r"(hi) : "r"(a), "r"(b)) - --#define muladd(hi,lo,a,b) \ -- asm ("smlal %0, %1, %2, %3" : "+r" (lo), "+r" (hi) : "r" (a), "r" (b)) -+#define muladd(hi, lo, a, b) \ -+ asm("smlal %0, %1, %2, %3" : "+r"(lo), "+r"(hi) : "r"(a), "r"(b)) - --#define mulsub(hi,lo,a,b) \ -- asm ("smlal %0, %1, %2, %3" : "+r" (lo), "+r" (hi) : "r" (a), "r" (-(b))) -+#define mulsub(hi, lo, a, b) \ -+ asm("smlal %0, %1, %2, %3" : "+r"(lo), "+r"(hi) : "r"(a), "r"(-(b))) - --#define mulz(hi,lo) -+#define mulz(hi, lo) - --#define cmuls(dre, dim, are, aim, bre, bim) \ --do { \ -- register int32_t tre, tim; \ -- asm ( \ -- "smull r3, %0, %2, %4\n\t" \ -- "smlal r3, %0, %3, %5\n\t" \ -- "movs r3, r3, lsl #1\n\t" \ -- "adc %0, %0, %0\n\t" \ -- "smull r3, %1, %2, %6\n\t" \ -- "smlal r3, %1, %4, %3\n\t" \ -- "movs r3, r3, lsl #1\n\t" \ -- "adc %1, %1, %1\n\t" \ -- : "=&r" (tre), "=&r" (tim) \ -- : "r" (are), "r" (aim), "r" (bre), "r" (-(bim)), "r" (bim) \ -- : "r3", "cc" \ -- ); \ -- dre = tre; \ -- dim = tim; \ --} while (0) -+#define cmuls(dre, dim, are, aim, bre, bim) \ -+ do { \ -+ register int32_t tre, tim; \ -+ asm("smull r3, %0, %2, %4\n\t" \ -+ "smlal r3, %0, %3, %5\n\t" \ -+ "movs r3, r3, lsl #1\n\t" \ -+ "adc %0, %0, %0\n\t" \ -+ "smull r3, %1, %2, %6\n\t" \ -+ "smlal r3, %1, %4, %3\n\t" \ -+ "movs r3, r3, lsl #1\n\t" \ -+ "adc %1, %1, %1\n\t" \ -+ : "=&r"(tre), "=&r"(tim) \ -+ : "r"(are), "r"(aim), "r"(bre), "r"(-(bim)), "r"(bim) \ -+ : "r3", "cc"); \ -+ dre = tre; \ -+ dim = tim; \ -+ } while (0) - - #if __ARM_ARCH >= 6 --static inline uint32_t SWAB32(uint32_t x) --{ -- asm ("rev %0, %1" : "=r" (x) : "r" (x)); -- return x; -+static inline uint32_t SWAB32(uint32_t x) { -+ asm("rev %0, %1" : "=r"(x) : "r"(x)); -+ return x; - } - #define SWAB32 SWAB32 - #endif -diff --git a/src/lib/reservoir.c b/src/lib/reservoir.c -index ca84f3d..cea0a9b 100644 ---- a/src/lib/reservoir.c -+++ b/src/lib/reservoir.c -@@ -2,13 +2,13 @@ - * Layer3 bit reservoir: Described in C.1.5.4.2.2 of the IS - */ - --#include "types.h" --#include "layer3.h" --#include "l3loop.h" --#include "huffman.h" -+#include "reservoir.h" - #include "bitstream.h" -+#include "huffman.h" - #include "l3bitstream.h" --#include "reservoir.h" -+#include "l3loop.h" -+#include "layer3.h" -+#include "types.h" - - /* - * shine_max_reservoir_bits: -@@ -17,36 +17,34 @@ - * allowance for the current granule based on reservoir size - * and perceptual entropy. - */ --int shine_max_reservoir_bits (double *pe, shine_global_config *config ) --{ -+int shine_max_reservoir_bits(double *pe, shine_global_config *config) { - int more_bits, max_bits, add_bits, over_bits; - int mean_bits = config->mean_bits; - - mean_bits /= config->wave.channels; - max_bits = mean_bits; - -- if(max_bits>4095) -+ if (max_bits > 4095) - max_bits = 4095; -- if(!config->ResvMax) -+ if (!config->ResvMax) - return max_bits; - - more_bits = *pe * 3.1 - mean_bits; - add_bits = 0; -- if(more_bits>100) -- { -+ if (more_bits > 100) { - int frac = (config->ResvSize * 6) / 10; - -- if(frac<more_bits) -+ if (frac < more_bits) - add_bits = frac; - else - add_bits = more_bits; - } -- over_bits = config->ResvSize - ((config->ResvMax <<3) / 10) - add_bits; -- if (over_bits>0) -+ over_bits = config->ResvSize - ((config->ResvMax << 3) / 10) - add_bits; -+ if (over_bits > 0) - add_bits += over_bits; - - max_bits += add_bits; -- if(max_bits>4095) -+ if (max_bits > 4095) - max_bits = 4095; - return max_bits; - } -@@ -57,9 +55,9 @@ int shine_max_reservoir_bits (double *pe, shine_global_config *config ) - * Called after a granule's bit allocation. Readjusts the size of - * the reservoir to reflect the granule's usage. - */ --void shine_ResvAdjust(gr_info *gi, shine_global_config *config ) --{ -- config->ResvSize += (config->mean_bits / config->wave.channels) - gi->part2_3_length; -+void shine_ResvAdjust(gr_info *gi, shine_global_config *config) { -+ config->ResvSize += -+ (config->mean_bits / config->wave.channels) - gi->part2_3_length; - } - - /* -@@ -71,8 +69,7 @@ void shine_ResvAdjust(gr_info *gi, shine_global_config *config ) - * part2_3_length. The bitstream formatter will detect this and write the - * appropriate stuffing bits to the bitstream. - */ --void shine_ResvFrameEnd(shine_global_config *config ) --{ -+void shine_ResvFrameEnd(shine_global_config *config) { - gr_info *gi; - int gr, ch, ancillary_pad, stuffingBits; - int over_bits; -@@ -81,42 +78,38 @@ void shine_ResvFrameEnd(shine_global_config *config ) - ancillary_pad = 0; - - /* just in case mean_bits is odd, this is necessary... */ -- if((config->wave.channels==2) && (config->mean_bits & 1)) -+ if ((config->wave.channels == 2) && (config->mean_bits & 1)) - config->ResvSize += 1; - - over_bits = config->ResvSize - config->ResvMax; -- if(over_bits<0) -+ if (over_bits < 0) - over_bits = 0; - - config->ResvSize -= over_bits; - stuffingBits = over_bits + ancillary_pad; - - /* we must be byte aligned */ -- if((over_bits = config->ResvSize % 8)) -- { -+ if ((over_bits = config->ResvSize % 8)) { - stuffingBits += over_bits; - config->ResvSize -= over_bits; - } - -- if(stuffingBits) -- { -+ if (stuffingBits) { - /* - * plan a: put all into the first granule - * This was preferred by someone designing a - * real-time decoder... - */ -- gi = (gr_info *) &(l3_side->gr[0].ch[0]); -+ gi = (gr_info *)&(l3_side->gr[0].ch[0]); - -- if ( gi->part2_3_length + stuffingBits < 4095 ) -+ if (gi->part2_3_length + stuffingBits < 4095) - gi->part2_3_length += stuffingBits; -- else -- { -+ else { - /* plan b: distribute throughout the granules */ -- for (gr = 0; gr < config->mpeg.granules_per_frame; gr++ ) -- for (ch = 0; ch < config->wave.channels; ch++ ) -- { -+ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) -+ for (ch = 0; ch < config->wave.channels; ch++) { - int extraBits, bitsThisGr; -- gr_info *gi = (gr_info *) &(l3_side->gr[gr].ch[ch]); -+ gr_info *gi = (gr_info *)&(l3_side->gr[gr].ch[ch]); - if (!stuffingBits) - break; - extraBits = 4095 - gi->part2_3_length; -@@ -133,5 +126,3 @@ void shine_ResvFrameEnd(shine_global_config *config ) - } - } - } -- -- -diff --git a/src/lib/reservoir.h b/src/lib/reservoir.h -index 2f1ffa5..2245778 100644 ---- a/src/lib/reservoir.h -+++ b/src/lib/reservoir.h -@@ -1,9 +1,11 @@ - #ifndef RESERVOIR_H - #define RESERVOIR_H - -+#include "types.h" -+ - void shine_ResvFrameBegin(int frameLength, shine_global_config *config); --int shine_max_reservoir_bits (double *pe, shine_global_config *config); --void shine_ResvAdjust (gr_info *gi, shine_global_config *config ); --void shine_ResvFrameEnd (shine_global_config *config ); -+int shine_max_reservoir_bits(double *pe, shine_global_config *config); -+void shine_ResvAdjust(gr_info *gi, shine_global_config *config); -+void shine_ResvFrameEnd(shine_global_config *config); - - #endif -diff --git a/src/lib/tables.c b/src/lib/tables.c -index ff7e374..3c63b4f 100644 ---- a/src/lib/tables.c -+++ b/src/lib/tables.c -@@ -7,120 +7,171 @@ - - #include "tables.h" - --const int shine_slen1_tab[16] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }; --const int shine_slen2_tab[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 }; -+const int shine_slen1_tab[16] = {0, 0, 0, 0, 3, 1, 1, 1, -+ 2, 2, 2, 3, 3, 3, 4, 4}; -+const int shine_slen2_tab[16] = {0, 1, 2, 3, 0, 1, 2, 3, -+ 1, 2, 3, 1, 2, 3, 2, 3}; - - /* Valid samplerates and bitrates. */ - const int samplerates[9] = { -- 44100, 48000, 32000, /* MPEG-I */ -- 22050, 24000, 16000, /* MPEG-II */ -- 11025, 12000, 8000 /* MPEG-2.5 */ -+ 44100, 48000, 32000, /* MPEG-I */ -+ 22050, 24000, 16000, /* MPEG-II */ -+ 11025, 12000, 8000 /* MPEG-2.5 */ - }; - - const int bitrates[16][4] = { -- /* MPEG version: -- * 2.5, reserved, II, I */ -- { -1, -1, -1, -1}, -- { 8, -1, 8, 32}, -- { 16, -1, 16, 40}, -- { 24, -1, 24, 48}, -- { 32, -1, 32, 56}, -- { 40, -1, 40, 64}, -- { 48, -1, 48, 80}, -- { 56, -1, 56, 96}, -- { 64, -1, 64, 112}, -- { -1, -1, 80, 128}, -- { -1, -1, 96, 160}, -- { -1, -1, 112, 192}, -- { -1, -1, 128, 224}, -- { -1, -1, 144, 256}, -- { -1, -1, 160, 320}, -- { -1, -1, -1, -1} --}; -+ /* MPEG version: -+ * 2.5, reserved, II, I */ -+ {-1, -1, -1, -1}, {8, -1, 8, 32}, {16, -1, 16, 40}, -+ {24, -1, 24, 48}, {32, -1, 32, 56}, {40, -1, 40, 64}, -+ {48, -1, 48, 80}, {56, -1, 56, 96}, {64, -1, 64, 112}, -+ {-1, -1, 80, 128}, {-1, -1, 96, 160}, {-1, -1, 112, 192}, -+ {-1, -1, 128, 224}, {-1, -1, 144, 256}, {-1, -1, 160, 320}, -+ {-1, -1, -1, -1}}; - --const int shine_scale_fact_band_index[9][23] = --{ -- /* MPEG-I */ -+const int shine_scale_fact_band_index[9][23] = { -+ /* MPEG-I */ - /* Table B.8.b: 44.1 kHz */ -- {0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576}, -+ {0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, -+ 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, 576}, - /* Table B.8.c: 48 kHz */ -- {0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576}, -+ {0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, -+ 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, 576}, - /* Table B.8.a: 32 kHz */ -- {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576}, -- /* MPEG-II */ -+ {0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, -+ 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, 576}, -+ /* MPEG-II */ - /* Table B.2.b: 22.05 kHz */ -- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, -+ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, -+ 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576}, - /* Table B.2.c: 24 kHz */ -- {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576}, -+ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, -+ 114, 136, 162, 194, 232, 278, 330, 394, 464, 540, 576}, - /* Table B.2.a: 16 kHz */ -- {0,6,12,18,24,30,36,44,45,66,80,96,116,140,168,200,238,248,336,396,464,522,576}, -+ {0, 6, 12, 18, 24, 30, 36, 44, 45, 66, 80, 96, -+ 116, 140, 168, 200, 238, 248, 336, 396, 464, 522, 576}, - -- /* MPEG-2.5 */ -+ /* MPEG-2.5 */ - /* 11.025 kHz */ -- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, -+ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, -+ 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576}, - /* 12 kHz */ -- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, -+ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, -+ 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576}, - /* MPEG-2.5 8 kHz */ -- {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576}, -+ {0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192, -+ 232, 280, 336, 400, 476, 566, 568, 570, 572, 574, 576}, - }; - - /* note. 0.035781 is shine_enwindow maximum value */ - /* scale and convert to fixed point before storing */ --#define SHINE_EW(x) (int32_t)((double)(x) * 0x7fffffff) --#define SHINE_EW2(a,b) SHINE_EW(a), SHINE_EW(b) --#define SHINE_EW10(a,b,c,d,e,f,g,h,i,j) SHINE_EW2(a,b), SHINE_EW2(c,d), SHINE_EW2(e,f), SHINE_EW2(g,h), SHINE_EW2(i,j) -+#define SHINE_EW(x) (int32_t)((double)(x)*0x7fffffff) -+#define SHINE_EW2(a, b) SHINE_EW(a), SHINE_EW(b) -+#define SHINE_EW10(a, b, c, d, e, f, g, h, i, j) \ -+ SHINE_EW2(a, b), SHINE_EW2(c, d), SHINE_EW2(e, f), SHINE_EW2(g, h), \ -+ SHINE_EW2(i, j) - - const int32_t shine_enwindow[] = { --SHINE_EW10( 0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000001, -0.000001, -0.000001), --SHINE_EW10( -0.000001, -0.000001, -0.000001, -0.000002, -0.000002, -0.000002, -0.000002, -0.000003, -0.000003, -0.000003), --SHINE_EW10( -0.000004, -0.000004, -0.000005, -0.000005, -0.000006, -0.000007, -0.000008, -0.000008, -0.000009, -0.000010), --SHINE_EW10( -0.000011, -0.000012, -0.000014, -0.000015, -0.000017, -0.000018, -0.000020, -0.000021, -0.000023, -0.000025), --SHINE_EW10( -0.000028, -0.000030, -0.000032, -0.000035, -0.000038, -0.000041, -0.000043, -0.000046, -0.000050, -0.000053), --SHINE_EW10( -0.000056, -0.000060, -0.000063, -0.000066, -0.000070, -0.000073, -0.000077, -0.000081, -0.000084, -0.000087), --SHINE_EW10( -0.000091, -0.000093, -0.000096, -0.000099, 0.000102, 0.000104, 0.000106, 0.000107, 0.000108, 0.000109), --SHINE_EW10( 0.000109, 0.000108, 0.000107, 0.000105, 0.000103, 0.000099, 0.000095, 0.000090, 0.000084, 0.000078), --SHINE_EW10( 0.000070, 0.000061, 0.000051, 0.000040, 0.000027, 0.000014, -0.000001, -0.000017, -0.000034, -0.000053), --SHINE_EW10( -0.000073, -0.000094, -0.000116, -0.000140, -0.000165, -0.000191, -0.000219, -0.000247, -0.000277, -0.000308), --SHINE_EW10( -0.000339, -0.000371, -0.000404, -0.000438, -0.000473, -0.000507, -0.000542, -0.000577, -0.000612, -0.000647), --SHINE_EW10( -0.000681, -0.000714, -0.000747, -0.000779, -0.000810, -0.000839, -0.000866, -0.000892, -0.000915, -0.000936), --SHINE_EW10( -0.000954, -0.000969, -0.000981, -0.000989, -0.000994, -0.000995, -0.000992, -0.000984, 0.000971, 0.000954), --SHINE_EW10( 0.000931, 0.000903, 0.000869, 0.000829, 0.000784, 0.000732, 0.000674, 0.000610, 0.000539, 0.000463), --SHINE_EW10( 0.000379, 0.000288, 0.000192, 0.000088, -0.000021, -0.000137, -0.000260, -0.000388, -0.000522, -0.000662), --SHINE_EW10( -0.000807, -0.000957, -0.001111, -0.001270, -0.001432, -0.001598, -0.001767, -0.001937, -0.002110, -0.002283), --SHINE_EW10( -0.002457, -0.002631, -0.002803, -0.002974, -0.003142, -0.003307, -0.003467, -0.003623, -0.003772, -0.003914), --SHINE_EW10( -0.004049, -0.004175, -0.004291, -0.004396, -0.004490, -0.004570, -0.004638, -0.004691, -0.004728, -0.004749), --SHINE_EW10( -0.004752, -0.004737, -0.004703, -0.004649, -0.004574, -0.004477, -0.004358, -0.004215, -0.004049, -0.003859), --SHINE_EW10( -0.003643, -0.003402, 0.003135, 0.002841, 0.002522, 0.002175, 0.001801, 0.001400, 0.000971, 0.000516), --SHINE_EW10( 0.000033, -0.000476, -0.001012, -0.001574, -0.002162, -0.002774, -0.003411, -0.004072, -0.004756, -0.005462), --SHINE_EW10( -0.006189, -0.006937, -0.007703, -0.008487, -0.009288, -0.010104, -0.010933, -0.011775, -0.012628, -0.013489), --SHINE_EW10( -0.014359, -0.015234, -0.016113, -0.016994, -0.017876, -0.018757, -0.019634, -0.020507, -0.021372, -0.022229), --SHINE_EW10( -0.023074, -0.023907, -0.024725, -0.025527, -0.026311, -0.027074, -0.027815, -0.028533, -0.029225, -0.029890), --SHINE_EW10( -0.030527, -0.031133, -0.031707, -0.032248, -0.032755, -0.033226, -0.033660, -0.034056, -0.034413, -0.034730), --SHINE_EW10( -0.035007, -0.035242, -0.035435, -0.035586, -0.035694, -0.035759, 0.035781, 0.035759, 0.035694, 0.035586), --SHINE_EW10( 0.035435, 0.035242, 0.035007, 0.034730, 0.034413, 0.034056, 0.033660, 0.033226, 0.032755, 0.032248), --SHINE_EW10( 0.031707, 0.031133, 0.030527, 0.029890, 0.029225, 0.028533, 0.027815, 0.027074, 0.026311, 0.025527), --SHINE_EW10( 0.024725, 0.023907, 0.023074, 0.022229, 0.021372, 0.020507, 0.019634, 0.018757, 0.017876, 0.016994), --SHINE_EW10( 0.016113, 0.015234, 0.014359, 0.013489, 0.012628, 0.011775, 0.010933, 0.010104, 0.009288, 0.008487), --SHINE_EW10( 0.007703, 0.006937, 0.006189, 0.005462, 0.004756, 0.004072, 0.003411, 0.002774, 0.002162, 0.001574), --SHINE_EW10( 0.001012, 0.000476, -0.000033, -0.000516, -0.000971, -0.001400, -0.001801, -0.002175, -0.002522, -0.002841), --SHINE_EW10( 0.003135, 0.003402, 0.003643, 0.003859, 0.004049, 0.004215, 0.004358, 0.004477, 0.004574, 0.004649), --SHINE_EW10( 0.004703, 0.004737, 0.004752, 0.004749, 0.004728, 0.004691, 0.004638, 0.004570, 0.004490, 0.004396), --SHINE_EW10( 0.004291, 0.004175, 0.004049, 0.003914, 0.003772, 0.003623, 0.003467, 0.003307, 0.003142, 0.002974), --SHINE_EW10( 0.002803, 0.002631, 0.002457, 0.002283, 0.002110, 0.001937, 0.001767, 0.001598, 0.001432, 0.001270), --SHINE_EW10( 0.001111, 0.000957, 0.000807, 0.000662, 0.000522, 0.000388, 0.000260, 0.000137, 0.000021, -0.000088), --SHINE_EW10( -0.000192, -0.000288, -0.000379, -0.000463, -0.000539, -0.000610, -0.000674, -0.000732, -0.000784, -0.000829), --SHINE_EW10( -0.000869, -0.000903, -0.000931, -0.000954, 0.000971, 0.000984, 0.000992, 0.000995, 0.000994, 0.000989), --SHINE_EW10( 0.000981, 0.000969, 0.000954, 0.000936, 0.000915, 0.000892, 0.000866, 0.000839, 0.000810, 0.000779), --SHINE_EW10( 0.000747, 0.000714, 0.000681, 0.000647, 0.000612, 0.000577, 0.000542, 0.000507, 0.000473, 0.000438), --SHINE_EW10( 0.000404, 0.000371, 0.000339, 0.000308, 0.000277, 0.000247, 0.000219, 0.000191, 0.000165, 0.000140), --SHINE_EW10( 0.000116, 0.000094, 0.000073, 0.000053, 0.000034, 0.000017, 0.000001, -0.000014, -0.000027, -0.000040), --SHINE_EW10( -0.000051, -0.000061, -0.000070, -0.000078, -0.000084, -0.000090, -0.000095, -0.000099, -0.000103, -0.000105), --SHINE_EW10( -0.000107, -0.000108, -0.000109, -0.000109, -0.000108, -0.000107, -0.000106, -0.000104, 0.000102, 0.000099), --SHINE_EW10( 0.000096, 0.000093, 0.000091, 0.000087, 0.000084, 0.000081, 0.000077, 0.000073, 0.000070, 0.000066), --SHINE_EW10( 0.000063, 0.000060, 0.000056, 0.000053, 0.000050, 0.000046, 0.000043, 0.000041, 0.000038, 0.000035), --SHINE_EW10( 0.000032, 0.000030, 0.000028, 0.000025, 0.000023, 0.000021, 0.000020, 0.000018, 0.000017, 0.000015), --SHINE_EW10( 0.000014, 0.000012, 0.000011, 0.000010, 0.000009, 0.000008, 0.000008, 0.000007, 0.000006, 0.000005), --SHINE_EW10( 0.000005, 0.000004, 0.000004, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002), --SHINE_EW10( 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000), --SHINE_EW2 ( 0.000000, 0.000000) --}; -+ SHINE_EW10(0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -+ -0.000000, -0.000001, -0.000001, -0.000001), -+ SHINE_EW10(-0.000001, -0.000001, -0.000001, -0.000002, -0.000002, -0.000002, -+ -0.000002, -0.000003, -0.000003, -0.000003), -+ SHINE_EW10(-0.000004, -0.000004, -0.000005, -0.000005, -0.000006, -0.000007, -+ -0.000008, -0.000008, -0.000009, -0.000010), -+ SHINE_EW10(-0.000011, -0.000012, -0.000014, -0.000015, -0.000017, -0.000018, -+ -0.000020, -0.000021, -0.000023, -0.000025), -+ SHINE_EW10(-0.000028, -0.000030, -0.000032, -0.000035, -0.000038, -0.000041, -+ -0.000043, -0.000046, -0.000050, -0.000053), -+ SHINE_EW10(-0.000056, -0.000060, -0.000063, -0.000066, -0.000070, -0.000073, -+ -0.000077, -0.000081, -0.000084, -0.000087), -+ SHINE_EW10(-0.000091, -0.000093, -0.000096, -0.000099, 0.000102, 0.000104, -+ 0.000106, 0.000107, 0.000108, 0.000109), -+ SHINE_EW10(0.000109, 0.000108, 0.000107, 0.000105, 0.000103, 0.000099, -+ 0.000095, 0.000090, 0.000084, 0.000078), -+ SHINE_EW10(0.000070, 0.000061, 0.000051, 0.000040, 0.000027, 0.000014, -+ -0.000001, -0.000017, -0.000034, -0.000053), -+ SHINE_EW10(-0.000073, -0.000094, -0.000116, -0.000140, -0.000165, -0.000191, -+ -0.000219, -0.000247, -0.000277, -0.000308), -+ SHINE_EW10(-0.000339, -0.000371, -0.000404, -0.000438, -0.000473, -0.000507, -+ -0.000542, -0.000577, -0.000612, -0.000647), -+ SHINE_EW10(-0.000681, -0.000714, -0.000747, -0.000779, -0.000810, -0.000839, -+ -0.000866, -0.000892, -0.000915, -0.000936), -+ SHINE_EW10(-0.000954, -0.000969, -0.000981, -0.000989, -0.000994, -0.000995, -+ -0.000992, -0.000984, 0.000971, 0.000954), -+ SHINE_EW10(0.000931, 0.000903, 0.000869, 0.000829, 0.000784, 0.000732, -+ 0.000674, 0.000610, 0.000539, 0.000463), -+ SHINE_EW10(0.000379, 0.000288, 0.000192, 0.000088, -0.000021, -0.000137, -+ -0.000260, -0.000388, -0.000522, -0.000662), -+ SHINE_EW10(-0.000807, -0.000957, -0.001111, -0.001270, -0.001432, -0.001598, -+ -0.001767, -0.001937, -0.002110, -0.002283), -+ SHINE_EW10(-0.002457, -0.002631, -0.002803, -0.002974, -0.003142, -0.003307, -+ -0.003467, -0.003623, -0.003772, -0.003914), -+ SHINE_EW10(-0.004049, -0.004175, -0.004291, -0.004396, -0.004490, -0.004570, -+ -0.004638, -0.004691, -0.004728, -0.004749), -+ SHINE_EW10(-0.004752, -0.004737, -0.004703, -0.004649, -0.004574, -0.004477, -+ -0.004358, -0.004215, -0.004049, -0.003859), -+ SHINE_EW10(-0.003643, -0.003402, 0.003135, 0.002841, 0.002522, 0.002175, -+ 0.001801, 0.001400, 0.000971, 0.000516), -+ SHINE_EW10(0.000033, -0.000476, -0.001012, -0.001574, -0.002162, -0.002774, -+ -0.003411, -0.004072, -0.004756, -0.005462), -+ SHINE_EW10(-0.006189, -0.006937, -0.007703, -0.008487, -0.009288, -0.010104, -+ -0.010933, -0.011775, -0.012628, -0.013489), -+ SHINE_EW10(-0.014359, -0.015234, -0.016113, -0.016994, -0.017876, -0.018757, -+ -0.019634, -0.020507, -0.021372, -0.022229), -+ SHINE_EW10(-0.023074, -0.023907, -0.024725, -0.025527, -0.026311, -0.027074, -+ -0.027815, -0.028533, -0.029225, -0.029890), -+ SHINE_EW10(-0.030527, -0.031133, -0.031707, -0.032248, -0.032755, -0.033226, -+ -0.033660, -0.034056, -0.034413, -0.034730), -+ SHINE_EW10(-0.035007, -0.035242, -0.035435, -0.035586, -0.035694, -0.035759, -+ 0.035781, 0.035759, 0.035694, 0.035586), -+ SHINE_EW10(0.035435, 0.035242, 0.035007, 0.034730, 0.034413, 0.034056, -+ 0.033660, 0.033226, 0.032755, 0.032248), -+ SHINE_EW10(0.031707, 0.031133, 0.030527, 0.029890, 0.029225, 0.028533, -+ 0.027815, 0.027074, 0.026311, 0.025527), -+ SHINE_EW10(0.024725, 0.023907, 0.023074, 0.022229, 0.021372, 0.020507, -+ 0.019634, 0.018757, 0.017876, 0.016994), -+ SHINE_EW10(0.016113, 0.015234, 0.014359, 0.013489, 0.012628, 0.011775, -+ 0.010933, 0.010104, 0.009288, 0.008487), -+ SHINE_EW10(0.007703, 0.006937, 0.006189, 0.005462, 0.004756, 0.004072, -+ 0.003411, 0.002774, 0.002162, 0.001574), -+ SHINE_EW10(0.001012, 0.000476, -0.000033, -0.000516, -0.000971, -0.001400, -+ -0.001801, -0.002175, -0.002522, -0.002841), -+ SHINE_EW10(0.003135, 0.003402, 0.003643, 0.003859, 0.004049, 0.004215, -+ 0.004358, 0.004477, 0.004574, 0.004649), -+ SHINE_EW10(0.004703, 0.004737, 0.004752, 0.004749, 0.004728, 0.004691, -+ 0.004638, 0.004570, 0.004490, 0.004396), -+ SHINE_EW10(0.004291, 0.004175, 0.004049, 0.003914, 0.003772, 0.003623, -+ 0.003467, 0.003307, 0.003142, 0.002974), -+ SHINE_EW10(0.002803, 0.002631, 0.002457, 0.002283, 0.002110, 0.001937, -+ 0.001767, 0.001598, 0.001432, 0.001270), -+ SHINE_EW10(0.001111, 0.000957, 0.000807, 0.000662, 0.000522, 0.000388, -+ 0.000260, 0.000137, 0.000021, -0.000088), -+ SHINE_EW10(-0.000192, -0.000288, -0.000379, -0.000463, -0.000539, -0.000610, -+ -0.000674, -0.000732, -0.000784, -0.000829), -+ SHINE_EW10(-0.000869, -0.000903, -0.000931, -0.000954, 0.000971, 0.000984, -+ 0.000992, 0.000995, 0.000994, 0.000989), -+ SHINE_EW10(0.000981, 0.000969, 0.000954, 0.000936, 0.000915, 0.000892, -+ 0.000866, 0.000839, 0.000810, 0.000779), -+ SHINE_EW10(0.000747, 0.000714, 0.000681, 0.000647, 0.000612, 0.000577, -+ 0.000542, 0.000507, 0.000473, 0.000438), -+ SHINE_EW10(0.000404, 0.000371, 0.000339, 0.000308, 0.000277, 0.000247, -+ 0.000219, 0.000191, 0.000165, 0.000140), -+ SHINE_EW10(0.000116, 0.000094, 0.000073, 0.000053, 0.000034, 0.000017, -+ 0.000001, -0.000014, -0.000027, -0.000040), -+ SHINE_EW10(-0.000051, -0.000061, -0.000070, -0.000078, -0.000084, -0.000090, -+ -0.000095, -0.000099, -0.000103, -0.000105), -+ SHINE_EW10(-0.000107, -0.000108, -0.000109, -0.000109, -0.000108, -0.000107, -+ -0.000106, -0.000104, 0.000102, 0.000099), -+ SHINE_EW10(0.000096, 0.000093, 0.000091, 0.000087, 0.000084, 0.000081, -+ 0.000077, 0.000073, 0.000070, 0.000066), -+ SHINE_EW10(0.000063, 0.000060, 0.000056, 0.000053, 0.000050, 0.000046, -+ 0.000043, 0.000041, 0.000038, 0.000035), -+ SHINE_EW10(0.000032, 0.000030, 0.000028, 0.000025, 0.000023, 0.000021, -+ 0.000020, 0.000018, 0.000017, 0.000015), -+ SHINE_EW10(0.000014, 0.000012, 0.000011, 0.000010, 0.000009, 0.000008, -+ 0.000008, 0.000007, 0.000006, 0.000005), -+ SHINE_EW10(0.000005, 0.000004, 0.000004, 0.000003, 0.000003, 0.000003, -+ 0.000002, 0.000002, 0.000002, 0.000002), -+ SHINE_EW10(0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, -+ 0.000000, 0.000000, 0.000000, 0.000000), -+ SHINE_EW2(0.000000, 0.000000)}; -diff --git a/src/lib/tables.h b/src/lib/tables.h -index 5c94228..fe06502 100644 ---- a/src/lib/tables.h -+++ b/src/lib/tables.h -@@ -9,8 +9,7 @@ extern const int shine_slen2_tab[16]; - extern const int samplerates[9]; - extern const int bitrates[16][4]; - --extern const int shine_scale_fact_band_index[9][23]; -+extern const int shine_scale_fact_band_index[9][23]; - extern const int32_t shine_enwindow[]; - - #endif -- -diff --git a/src/lib/types.h b/src/lib/types.h -index f3def1a..11a05fc 100644 ---- a/src/lib/types.h -+++ b/src/lib/types.h -@@ -2,18 +2,18 @@ - #define PRIV_TYPES_H - - #include <stdio.h> --#include <string.h> - #include <stdlib.h> -+#include <string.h> - - #include <math.h> - --#define GRANULE_SIZE 576 -+#define GRANULE_SIZE 576 - - #include "bitstream.h" - - /* Include arch-specific instructions, - * when defined. */ --#if defined(__mips__) && (__mips != 64) -+#if defined(__mips__) && (__mips == 32) - #include "mult_mips_gcc.h" - #elif defined(__arm__) && !defined(__thumb__) - #include "mult_sarm_gcc.h" -@@ -24,29 +24,32 @@ - #include "mult_noarch_gcc.h" - - #ifndef SWAB32 --#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)) --#define SWAB32(x) __builtin_bswap32(x) -+#if defined(__GNUC__) && \ -+ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)) -+#define SWAB32(x) __builtin_bswap32(x) - #else --#define SWAB32(x) (((unsigned int)(x) >> 24) | (((unsigned int)(x) >> 8) & 0xff00) | (((unsigned int)(x) & 0xff00) << 8) | ((unsigned int)(x) << 24)) -+#define SWAB32(x) \ -+ (((unsigned int)(x) >> 24) | (((unsigned int)(x) >> 8) & 0xff00) | \ -+ (((unsigned int)(x)&0xff00) << 8) | ((unsigned int)(x) << 24)) - #endif - #endif - - /* #define DEBUG if you want the library to dump info to stdout */ - --#define PI 3.14159265358979 --#define PI4 0.78539816339745 --#define PI12 0.26179938779915 --#define PI36 0.087266462599717 --#define PI64 0.049087385212 --#define SQRT2 1.41421356237 --#define LN2 0.69314718 -+#define PI 3.14159265358979 -+#define PI4 0.78539816339745 -+#define PI12 0.26179938779915 -+#define PI36 0.087266462599717 -+#define PI64 0.049087385212 -+#define SQRT2 1.41421356237 -+#define LN2 0.69314718 - #define LN_TO_LOG10 0.2302585093 --#define BLKSIZE 1024 --#define HAN_SIZE 512 /* for loop unrolling, require that HAN_SIZE%8==0 */ -+#define BLKSIZE 1024 -+#define HAN_SIZE 512 /* for loop unrolling, require that HAN_SIZE%8==0 */ - #define SCALE_BLOCK 12 - #define SCALE_RANGE 64 --#define SCALE 32768 --#define SBLIMIT 32 -+#define SCALE 32768 -+#define SBLIMIT 32 - - #ifndef MAX_CHANNELS - #define MAX_CHANNELS 2 -@@ -57,44 +60,44 @@ - #endif - - typedef struct { -- int channels; -- int samplerate; -+ int channels; -+ int samplerate; - } priv_shine_wave_t; - - typedef struct { -- int version; -- int layer; -- int granules_per_frame; -- int mode; /* + */ /* Stereo mode */ -- int bitr; /* + */ /* Must conform to known bitrate - see Main.c */ -- int emph; /* + */ /* De-emphasis */ -- int padding; -- int bits_per_frame; -- int bits_per_slot; -- double frac_slots_per_frame; -- double slot_lag; -- int whole_slots_per_frame; -- int bitrate_index; /* + */ /* See Main.c and Layer3.c */ -- int samplerate_index; /* + */ /* See Main.c and Layer3.c */ -- int crc; -- int ext; -- int mode_ext; -- int copyright; /* + */ -- int original; /* + */ -+ int version; -+ int layer; -+ int granules_per_frame; -+ int mode; /* + */ /* Stereo mode */ -+ int bitr; /* + */ /* Must conform to known bitrate - see Main.c */ -+ int emph; /* + */ /* De-emphasis */ -+ int padding; -+ int bits_per_frame; -+ int bits_per_slot; -+ double frac_slots_per_frame; -+ double slot_lag; -+ int whole_slots_per_frame; -+ int bitrate_index; /* + */ /* See Main.c and Layer3.c */ -+ int samplerate_index; /* + */ /* See Main.c and Layer3.c */ -+ int crc; -+ int ext; -+ int mode_ext; -+ int copyright; /* + */ -+ int original; /* + */ - } priv_shine_mpeg_t; - - typedef struct { -- int32_t *xr; /* magnitudes of the spectral values */ -- int32_t xrsq[GRANULE_SIZE]; /* xr squared */ -- int32_t xrabs[GRANULE_SIZE]; /* xr absolute */ -- int32_t xrmax; /* maximum of xrabs array */ -- int32_t en_tot[MAX_GRANULES]; /* gr */ -+ int32_t *xr; /* magnitudes of the spectral values */ -+ int32_t xrsq[GRANULE_SIZE]; /* xr squared */ -+ int32_t xrabs[GRANULE_SIZE]; /* xr absolute */ -+ int32_t xrmax; /* maximum of xrabs array */ -+ int32_t en_tot[MAX_GRANULES]; /* gr */ - int32_t en[MAX_GRANULES][21]; - int32_t xm[MAX_GRANULES][21]; - int32_t xrmaxl[MAX_GRANULES]; -- double steptab[128]; /* 2**(-x/4) for x = -127..0 */ -- int32_t steptabi[128]; /* 2**(-x/4) for x = -127..0 */ -- int int2idx[10000]; /* x**(3/4) for x = 0..9999 */ -+ double steptab[128]; /* 2**(-x/4) for x = -127..0 */ -+ int32_t steptabi[128]; /* 2**(-x/4) for x = -127..0 */ -+ int int2idx[10000]; /* x**(3/4) for x = 0..9999 */ - } l3loop_t; - - typedef struct { -@@ -105,7 +108,7 @@ typedef struct { - int off[MAX_CHANNELS]; - int32_t fl[SBLIMIT][64]; - int32_t x[MAX_CHANNELS][HAN_SIZE]; --} subband_t; -+} subband_t; - - /* Side information */ - typedef struct { -@@ -130,49 +133,48 @@ typedef struct { - } gr_info; - - typedef struct { -- unsigned private_bits; -- int resvDrain; -- unsigned scfsi[MAX_CHANNELS][4]; -+ unsigned private_bits; -+ int resvDrain; -+ unsigned scfsi[MAX_CHANNELS][4]; -+ struct { - struct { -- struct { -- gr_info tt; -- } ch[MAX_CHANNELS]; -- } gr[MAX_GRANULES]; -+ gr_info tt; -+ } ch[MAX_CHANNELS]; -+ } gr[MAX_GRANULES]; - } shine_side_info_t; - - typedef struct { -- double l[MAX_GRANULES][MAX_CHANNELS][21]; -+ double l[MAX_GRANULES][MAX_CHANNELS][21]; - } shine_psy_ratio_t; - - typedef struct { -- double l[MAX_GRANULES][MAX_CHANNELS][21]; -+ double l[MAX_GRANULES][MAX_CHANNELS][21]; - } shine_psy_xmin_t; - - typedef struct { -- int32_t l[MAX_GRANULES][MAX_CHANNELS][22]; /* [cb] */ -- int32_t s[MAX_GRANULES][MAX_CHANNELS][13][3]; /* [window][cb] */ -+ int32_t l[MAX_GRANULES][MAX_CHANNELS][22]; /* [cb] */ -+ int32_t s[MAX_GRANULES][MAX_CHANNELS][13][3]; /* [window][cb] */ - } shine_scalefac_t; - -- --typedef struct shine_global_flags { -- priv_shine_wave_t wave; -- priv_shine_mpeg_t mpeg; -- bitstream_t bs; -+typedef struct shine_global_flags { -+ priv_shine_wave_t wave; -+ priv_shine_mpeg_t mpeg; -+ bitstream_t bs; - shine_side_info_t side_info; -- int sideinfo_len; -- int mean_bits; -+ int sideinfo_len; -+ int mean_bits; - shine_psy_ratio_t ratio; -- shine_scalefac_t scalefactor; -- int16_t *buffer[MAX_CHANNELS]; -- double pe[MAX_CHANNELS][MAX_GRANULES]; -- int l3_enc[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE]; -- int32_t l3_sb_sample[MAX_CHANNELS][MAX_GRANULES+1][18][SBLIMIT]; -- int32_t mdct_freq[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE]; -- int ResvSize; -- int ResvMax; -- l3loop_t l3loop; -- mdct_t mdct; -- subband_t subband; -+ shine_scalefac_t scalefactor; -+ int16_t *buffer[MAX_CHANNELS]; -+ double pe[MAX_CHANNELS][MAX_GRANULES]; -+ int l3_enc[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE]; -+ int32_t l3_sb_sample[MAX_CHANNELS][MAX_GRANULES + 1][18][SBLIMIT]; -+ int32_t mdct_freq[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE]; -+ int ResvSize; -+ int ResvMax; -+ l3loop_t l3loop; -+ mdct_t mdct; -+ subband_t subband; - } shine_global_config; - - #endif diff --git a/multimedia/shine/shine.SlackBuild b/multimedia/shine/shine.SlackBuild index 81d701d8f3b55..14cac1b0cb066 100644 --- a/multimedia/shine/shine.SlackBuild +++ b/multimedia/shine/shine.SlackBuild @@ -25,10 +25,12 @@ cd $(dirname $0) ; CWD=$(pwd) PRGNAM=shine -VERSION=${VERSION:-3.1.1} +VERSION=${VERSION:-ab5e352_20230101} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} +COMMIT=${COMMIT:-ab5e3526b64af1a2eaa43aa6f441a7312e013519} +COMMITDATE=${COMMITDATE:-20230101} if [ -z "$ARCH" ]; then case "$( uname -m )" in @@ -67,9 +69,9 @@ trap 'echo "$0 FAILED at line $LINENO!" | tee -a $OUTPUT/error-${PRGNAM}.log' ER rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP -rm -rf $PRGNAM-$VERSION -tar xvf $CWD/$PRGNAM-$VERSION.tar.gz -cd $PRGNAM-$VERSION +rm -rf $PRGNAM-$COMMIT +tar xvf $CWD/$PRGNAM-$COMMIT.tar.gz +cd $PRGNAM-$COMMIT chown -R root:root . find -L . \ @@ -78,8 +80,6 @@ find -L . \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; -patch -p1 --verbose --unified < $CWD/fix-bugs.patch - ./bootstrap CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ @@ -90,6 +90,8 @@ CXXFLAGS="$SLKCFLAGS" \ --localstatedir=/var \ --mandir=/usr/man \ --docdir=/usr/doc/$PRGNAM-$VERSION \ + --enable-shared \ + --disable-static \ --build=$ARCH-slackware-linux make diff --git a/multimedia/shine/shine.info b/multimedia/shine/shine.info index 401505a28320e..32ae886033cf9 100644 --- a/multimedia/shine/shine.info +++ b/multimedia/shine/shine.info @@ -1,8 +1,8 @@ PRGNAM="shine" -VERSION="3.1.1" +VERSION="ab5e352_20230101" HOMEPAGE="https://github.com/toots/shine" -DOWNLOAD="https://github.com/toots/shine/archive/3.1.1/shine-3.1.1.tar.gz" -MD5SUM="ff41cb139c25470f2d9c9acc9f97cc8d" +DOWNLOAD="https://github.com/toots/shine/archive/ab5e352/shine-ab5e3526b64af1a2eaa43aa6f441a7312e013519.tar.gz" +MD5SUM="1f8ac33d4819acf526b5de4a9a5c1bec" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" |