diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..ce9521d
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,25 @@
+[package]
+name = "plotter"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[[bin]]
+name = "plotter_bin"
+path = "src/main.rs"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[dependencies]
+rand = "0.8"
+chrono = { version = "0.4", features = ["wasmbind"] }
+eframe = { version = "0.18", features = ["persistence"] }
+serde = { version = "1", features = ["derive"] }
+serde_json = "1"
+ehttp = "0.2.0"
+# web:
+[target.'cfg(target_arch = "wasm32")'.dependencies]
+console_error_panic_hook = "0.1.6"
+tracing-wasm = "0.2"
diff --git a/build_web.sh b/build_web.sh
new file mode 100755
index 0000000..444dd07
--- /dev/null
+++ b/build_web.sh
@@ -0,0 +1,77 @@
+#!/usr/bin/env bash
+set -eu
+script_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
+cd "$script_path"
+
+OPEN=false
+FAST=false
+
+while test $# -gt 0; do
+ case "$1" in
+ -h|--help)
+ echo "build_web.sh [--fast] [--open]"
+ echo " --fast: skip optimization step"
+ echo " --open: open the result in a browser"
+ exit 0
+ ;;
+ --fast)
+ shift
+ FAST=true
+ ;;
+ --open)
+ shift
+ OPEN=true
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+# ./setup_web.sh # <- call this first!
+
+FOLDER_NAME=${PWD##*/}
+CRATE_NAME=$FOLDER_NAME # assume crate name is the same as the folder name
+CRATE_NAME_SNAKE_CASE="${CRATE_NAME//-/_}" # for those who name crates with-kebab-case
+
+# This is required to enable the web_sys clipboard API which egui_web uses
+# https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
+# https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
+export RUSTFLAGS=--cfg=web_sys_unstable_apis
+
+# Clear output from old stuff:
+rm -f "docs/${CRATE_NAME_SNAKE_CASE}_bg.wasm"
+
+echo "Building rust…"
+BUILD=release
+cargo build -p "${CRATE_NAME}" --release --lib --target wasm32-unknown-unknown
+
+# Get the output directory (in the workspace it is in another location)
+TARGET=$(cargo metadata --format-version=1 | jq --raw-output .target_directory)
+
+echo "Generating JS bindings for wasm…"
+TARGET_NAME="${CRATE_NAME_SNAKE_CASE}.wasm"
+WASM_PATH="${TARGET}/wasm32-unknown-unknown/${BUILD}/${TARGET_NAME}"
+wasm-bindgen "${WASM_PATH}" --out-dir docs --no-modules --no-typescript
+
+if [[ "${FAST}" == false ]]; then
+ echo "Optimizing wasm…"
+ # to get wasm-opt: apt/brew/dnf install binaryen
+ wasm-opt "docs/${CRATE_NAME}_bg.wasm" -O2 --fast-math -o "docs/${CRATE_NAME}_bg.wasm" # add -g to get debug symbols
+fi
+
+echo "Finished: docs/${CRATE_NAME_SNAKE_CASE}.wasm"
+
+if [[ "${OPEN}" == true ]]; then
+ if [[ "$OSTYPE" == "linux-gnu"* ]]; then
+ # Linux, ex: Fedora
+ xdg-open http://localhost:8080/index.html
+ elif [[ "$OSTYPE" == "msys" ]]; then
+ # Windows
+ start http://localhost:8080/index.html
+ else
+ # Darwin/MacOS, or something else
+ open http://localhost:8080/index.html
+ fi
+fi
+
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..bf94f3e
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,3 @@
+This folder contains the files required for the web app.
+
+The reason the folder is called "docs" is because that is the name that GitHub requires in order to host a web page from the `master` branch of a repository. You can test the `eframe_template` at .
diff --git a/docs/favicon.ico b/docs/favicon.ico
new file mode 100755
index 0000000..61ad031
Binary files /dev/null and b/docs/favicon.ico differ
diff --git a/docs/icon-1024.png b/docs/icon-1024.png
new file mode 100644
index 0000000..1b5868a
Binary files /dev/null and b/docs/icon-1024.png differ
diff --git a/docs/icon-256.png b/docs/icon-256.png
new file mode 100644
index 0000000..ae72287
Binary files /dev/null and b/docs/icon-256.png differ
diff --git a/docs/icon_ios_touch_192.png b/docs/icon_ios_touch_192.png
new file mode 100644
index 0000000..8472802
Binary files /dev/null and b/docs/icon_ios_touch_192.png differ
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..96c36f5
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
+
+ eframe template
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/manifest.json b/docs/manifest.json
new file mode 100644
index 0000000..77df08d
--- /dev/null
+++ b/docs/manifest.json
@@ -0,0 +1,27 @@
+{
+ "name": "2b2t queue stats",
+ "short_name": "2b-queue",
+ "icons": [{
+ "src": "./icon-256.png",
+ "sizes": "256x256",
+ "type": "image/png"
+ },
+ {
+ "src": "./maskable_icon_x512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "any maskable"
+ },
+ {
+ "src": "./icon-1024.png",
+ "sizes": "1024x1024",
+ "type": "image/png"
+ }
+ ],
+ "lang": "en-US",
+ "id": "/index.html",
+ "start_url": "./index.html",
+ "display": "standalone",
+ "background_color": "black",
+ "theme_color": "black"
+ }
diff --git a/docs/maskable_icon_x512.png b/docs/maskable_icon_x512.png
new file mode 100644
index 0000000..db8df3e
Binary files /dev/null and b/docs/maskable_icon_x512.png differ
diff --git a/docs/plotter.js b/docs/plotter.js
new file mode 100644
index 0000000..4fb1bd8
--- /dev/null
+++ b/docs/plotter.js
@@ -0,0 +1,1468 @@
+let wasm_bindgen;
+(function() {
+ const __exports = {};
+ let wasm;
+
+ const heap = new Array(32).fill(undefined);
+
+ heap.push(undefined, null, true, false);
+
+function getObject(idx) { return heap[idx]; }
+
+let heap_next = heap.length;
+
+function dropObject(idx) {
+ if (idx < 36) return;
+ heap[idx] = heap_next;
+ heap_next = idx;
+}
+
+function takeObject(idx) {
+ const ret = getObject(idx);
+ dropObject(idx);
+ return ret;
+}
+
+let WASM_VECTOR_LEN = 0;
+
+let cachegetUint8Memory0 = null;
+function getUint8Memory0() {
+ if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
+ cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
+ }
+ return cachegetUint8Memory0;
+}
+
+const cachedTextEncoder = new TextEncoder('utf-8');
+
+const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
+ ? function (arg, view) {
+ return cachedTextEncoder.encodeInto(arg, view);
+}
+ : function (arg, view) {
+ const buf = cachedTextEncoder.encode(arg);
+ view.set(buf);
+ return {
+ read: arg.length,
+ written: buf.length
+ };
+});
+
+function passStringToWasm0(arg, malloc, realloc) {
+
+ if (realloc === undefined) {
+ const buf = cachedTextEncoder.encode(arg);
+ const ptr = malloc(buf.length);
+ getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);
+ WASM_VECTOR_LEN = buf.length;
+ return ptr;
+ }
+
+ let len = arg.length;
+ let ptr = malloc(len);
+
+ const mem = getUint8Memory0();
+
+ let offset = 0;
+
+ for (; offset < len; offset++) {
+ const code = arg.charCodeAt(offset);
+ if (code > 0x7F) break;
+ mem[ptr + offset] = code;
+ }
+
+ if (offset !== len) {
+ if (offset !== 0) {
+ arg = arg.slice(offset);
+ }
+ ptr = realloc(ptr, len, len = offset + arg.length * 3);
+ const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
+ const ret = encodeString(arg, view);
+
+ offset += ret.written;
+ }
+
+ WASM_VECTOR_LEN = offset;
+ return ptr;
+}
+
+function isLikeNone(x) {
+ return x === undefined || x === null;
+}
+
+let cachegetInt32Memory0 = null;
+function getInt32Memory0() {
+ if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
+ cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
+ }
+ return cachegetInt32Memory0;
+}
+
+const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
+
+cachedTextDecoder.decode();
+
+function getStringFromWasm0(ptr, len) {
+ return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
+}
+
+function addHeapObject(obj) {
+ if (heap_next === heap.length) heap.push(heap.length + 1);
+ const idx = heap_next;
+ heap_next = heap[idx];
+
+ heap[idx] = obj;
+ return idx;
+}
+
+let cachegetFloat64Memory0 = null;
+function getFloat64Memory0() {
+ if (cachegetFloat64Memory0 === null || cachegetFloat64Memory0.buffer !== wasm.memory.buffer) {
+ cachegetFloat64Memory0 = new Float64Array(wasm.memory.buffer);
+ }
+ return cachegetFloat64Memory0;
+}
+
+function debugString(val) {
+ // primitive types
+ const type = typeof val;
+ if (type == 'number' || type == 'boolean' || val == null) {
+ return `${val}`;
+ }
+ if (type == 'string') {
+ return `"${val}"`;
+ }
+ if (type == 'symbol') {
+ const description = val.description;
+ if (description == null) {
+ return 'Symbol';
+ } else {
+ return `Symbol(${description})`;
+ }
+ }
+ if (type == 'function') {
+ const name = val.name;
+ if (typeof name == 'string' && name.length > 0) {
+ return `Function(${name})`;
+ } else {
+ return 'Function';
+ }
+ }
+ // objects
+ if (Array.isArray(val)) {
+ const length = val.length;
+ let debug = '[';
+ if (length > 0) {
+ debug += debugString(val[0]);
+ }
+ for(let i = 1; i < length; i++) {
+ debug += ', ' + debugString(val[i]);
+ }
+ debug += ']';
+ return debug;
+ }
+ // Test for built-in
+ const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
+ let className;
+ if (builtInMatches.length > 1) {
+ className = builtInMatches[1];
+ } else {
+ // Failed to match the standard '[object ClassName]'
+ return toString.call(val);
+ }
+ if (className == 'Object') {
+ // we're a user defined class or Object
+ // JSON.stringify avoids problems with cycles, and is generally much
+ // easier than looping through ownProperties of `val`.
+ try {
+ return 'Object(' + JSON.stringify(val) + ')';
+ } catch (_) {
+ return 'Object';
+ }
+ }
+ // errors
+ if (val instanceof Error) {
+ return `${val.name}: ${val.message}\n${val.stack}`;
+ }
+ // TODO we could test for more things here, like `Set`s and `Map`s.
+ return className;
+}
+
+function makeMutClosure(arg0, arg1, dtor, f) {
+ const state = { a: arg0, b: arg1, cnt: 1, dtor };
+ const real = (...args) => {
+ // First up with a closure we increment the internal reference
+ // count. This ensures that the Rust closure environment won't
+ // be deallocated while we're invoking it.
+ state.cnt++;
+ const a = state.a;
+ state.a = 0;
+ try {
+ return f(a, state.b, ...args);
+ } finally {
+ if (--state.cnt === 0) {
+ wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);
+
+ } else {
+ state.a = a;
+ }
+ }
+ };
+ real.original = state;
+
+ return real;
+}
+function __wbg_adapter_28(arg0, arg1) {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h967d375e0193b703(retptr, arg0, arg1);
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
+ if (r1) {
+ throw takeObject(r0);
+ }
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ }
+}
+
+function __wbg_adapter_31(arg0, arg1, arg2) {
+ wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hef6208ccf226e817(arg0, arg1, addHeapObject(arg2));
+}
+
+function __wbg_adapter_34(arg0, arg1, arg2) {
+ wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hef6208ccf226e817(arg0, arg1, addHeapObject(arg2));
+}
+
+function __wbg_adapter_37(arg0, arg1) {
+ wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h86d9c388b30b3c2e(arg0, arg1);
+}
+
+function __wbg_adapter_40(arg0, arg1, arg2) {
+ wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd67deb37d31c7a2d(arg0, arg1, addHeapObject(arg2));
+}
+
+/**
+* @param {string} canvas_id
+*/
+__exports.start = function(canvas_id) {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ const ptr0 = passStringToWasm0(canvas_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ wasm.start(retptr, ptr0, len0);
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
+ if (r1) {
+ throw takeObject(r0);
+ }
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ }
+};
+
+function handleError(f, args) {
+ try {
+ return f.apply(this, args);
+ } catch (e) {
+ wasm.__wbindgen_exn_store(addHeapObject(e));
+ }
+}
+
+async function load(module, imports) {
+ if (typeof Response === 'function' && module instanceof Response) {
+ if (typeof WebAssembly.instantiateStreaming === 'function') {
+ try {
+ return await WebAssembly.instantiateStreaming(module, imports);
+
+ } catch (e) {
+ if (module.headers.get('Content-Type') != 'application/wasm') {
+ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
+
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ const bytes = await module.arrayBuffer();
+ return await WebAssembly.instantiate(bytes, imports);
+
+ } else {
+ const instance = await WebAssembly.instantiate(module, imports);
+
+ if (instance instanceof WebAssembly.Instance) {
+ return { instance, module };
+
+ } else {
+ return instance;
+ }
+ }
+}
+
+async function init(input) {
+ if (typeof input === 'undefined') {
+ let src;
+ if (typeof document === 'undefined') {
+ src = location.href;
+ } else {
+ src = document.currentScript.src;
+ }
+ input = src.replace(/\.js$/, '_bg.wasm');
+ }
+ const imports = {};
+ imports.wbg = {};
+ imports.wbg.__wbg_log_02e20a3c32305fb7 = function(arg0, arg1) {
+ try {
+ console.log(getStringFromWasm0(arg0, arg1));
+ } finally {
+ wasm.__wbindgen_free(arg0, arg1);
+ }
+ };
+ imports.wbg.__wbg_log_5c7513aa8c164502 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {
+ try {
+ console.log(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3), getStringFromWasm0(arg4, arg5), getStringFromWasm0(arg6, arg7));
+ } finally {
+ wasm.__wbindgen_free(arg0, arg1);
+ }
+ };
+ imports.wbg.__wbg_mark_abc7631bdced64f0 = function(arg0, arg1) {
+ performance.mark(getStringFromWasm0(arg0, arg1));
+ };
+ imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
+ takeObject(arg0);
+ };
+ imports.wbg.__wbg_measure_c528ff64085b7146 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
+ try {
+ performance.measure(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
+ } finally {
+ wasm.__wbindgen_free(arg0, arg1);
+ wasm.__wbindgen_free(arg2, arg3);
+ }
+ }, arguments) };
+ imports.wbg.__wbg_new_693216e109162396 = function() {
+ const ret = new Error();
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_stack_0ddaca5d1abfb52f = function(arg0, arg1) {
+ const ret = getObject(arg1).stack;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_error_09919627ac0992f5 = function(arg0, arg1) {
+ try {
+ console.error(getStringFromWasm0(arg0, arg1));
+ } finally {
+ wasm.__wbindgen_free(arg0, arg1);
+ }
+ };
+ imports.wbg.__wbindgen_string_get = function(arg0, arg1) {
+ const obj = getObject(arg1);
+ const ret = typeof(obj) === 'string' ? obj : undefined;
+ var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
+ const ret = getStringFromWasm0(arg0, arg1);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_cb_drop = function(arg0) {
+ const obj = takeObject(arg0).original;
+ if (obj.cnt-- == 1) {
+ obj.a = 0;
+ return true;
+ }
+ const ret = false;
+ return ret;
+ };
+ imports.wbg.__wbindgen_number_get = function(arg0, arg1) {
+ const obj = getObject(arg1);
+ const ret = typeof(obj) === 'number' ? obj : undefined;
+ getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;
+ getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
+ };
+ imports.wbg.__wbindgen_boolean_get = function(arg0) {
+ const v = getObject(arg0);
+ const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;
+ return ret;
+ };
+ imports.wbg.__wbg_instanceof_WebGl2RenderingContext_e29e70ae6c00bfdd = function(arg0) {
+ const ret = getObject(arg0) instanceof WebGL2RenderingContext;
+ return ret;
+ };
+ imports.wbg.__wbg_bindVertexArray_dfe63bf55a9f6e54 = function(arg0, arg1) {
+ getObject(arg0).bindVertexArray(getObject(arg1));
+ };
+ imports.wbg.__wbg_bufferData_8542921547008e80 = function(arg0, arg1, arg2, arg3) {
+ getObject(arg0).bufferData(arg1 >>> 0, getObject(arg2), arg3 >>> 0);
+ };
+ imports.wbg.__wbg_createVertexArray_d502151c473563b2 = function(arg0) {
+ const ret = getObject(arg0).createVertexArray();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_texImage2D_830d94fcfc70baf0 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {
+ getObject(arg0).texImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, getObject(arg9));
+ }, arguments) };
+ imports.wbg.__wbg_texSubImage2D_f5b8e6e635a5736f = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {
+ getObject(arg0).texSubImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, getObject(arg9));
+ }, arguments) };
+ imports.wbg.__wbg_texSubImage2D_b26e671fcb768c49 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {
+ getObject(arg0).texSubImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, arg9);
+ }, arguments) };
+ imports.wbg.__wbg_activeTexture_eec8b0e6c72c6814 = function(arg0, arg1) {
+ getObject(arg0).activeTexture(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_attachShader_0994bf956cb31b2b = function(arg0, arg1, arg2) {
+ getObject(arg0).attachShader(getObject(arg1), getObject(arg2));
+ };
+ imports.wbg.__wbg_bindBuffer_a5f37e5ebd81a1f6 = function(arg0, arg1, arg2) {
+ getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2));
+ };
+ imports.wbg.__wbg_bindFramebuffer_6ef149f7d398d19f = function(arg0, arg1, arg2) {
+ getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));
+ };
+ imports.wbg.__wbg_bindRenderbuffer_1974e9f4fdd0b3af = function(arg0, arg1, arg2) {
+ getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));
+ };
+ imports.wbg.__wbg_bindTexture_dbddb0b0c3efa1b9 = function(arg0, arg1, arg2) {
+ getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));
+ };
+ imports.wbg.__wbg_blendEquationSeparate_ccdda0657b246bb0 = function(arg0, arg1, arg2) {
+ getObject(arg0).blendEquationSeparate(arg1 >>> 0, arg2 >>> 0);
+ };
+ imports.wbg.__wbg_blendFuncSeparate_0aa8a7b4669fb810 = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).blendFuncSeparate(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0);
+ };
+ imports.wbg.__wbg_clear_a9fbec6b33c4e095 = function(arg0, arg1) {
+ getObject(arg0).clear(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_clearColor_3973a216e3a63c8f = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).clearColor(arg1, arg2, arg3, arg4);
+ };
+ imports.wbg.__wbg_colorMask_c92354ec3511685f = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0);
+ };
+ imports.wbg.__wbg_compileShader_4940032085b41ed2 = function(arg0, arg1) {
+ getObject(arg0).compileShader(getObject(arg1));
+ };
+ imports.wbg.__wbg_createBuffer_b6dbd62c544371ed = function(arg0) {
+ const ret = getObject(arg0).createBuffer();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createFramebuffer_f656a97f24d2caf3 = function(arg0) {
+ const ret = getObject(arg0).createFramebuffer();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createProgram_6a25e4bb5cfaad4b = function(arg0) {
+ const ret = getObject(arg0).createProgram();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createRenderbuffer_e66ea157342e02e9 = function(arg0) {
+ const ret = getObject(arg0).createRenderbuffer();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createShader_c17c7cf4768e0737 = function(arg0, arg1) {
+ const ret = getObject(arg0).createShader(arg1 >>> 0);
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createTexture_0df375980a9c46c9 = function(arg0) {
+ const ret = getObject(arg0).createTexture();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_deleteShader_b6480fae6d31ca67 = function(arg0, arg1) {
+ getObject(arg0).deleteShader(getObject(arg1));
+ };
+ imports.wbg.__wbg_deleteTexture_8c7434cb1b20f64f = function(arg0, arg1) {
+ getObject(arg0).deleteTexture(getObject(arg1));
+ };
+ imports.wbg.__wbg_detachShader_a3e090b94d09c8a2 = function(arg0, arg1, arg2) {
+ getObject(arg0).detachShader(getObject(arg1), getObject(arg2));
+ };
+ imports.wbg.__wbg_disable_ec8402e41edbe277 = function(arg0, arg1) {
+ getObject(arg0).disable(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_disableVertexAttribArray_8da45bfa7fa5a02d = function(arg0, arg1) {
+ getObject(arg0).disableVertexAttribArray(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_drawElements_a192faf49b4975d6 = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4);
+ };
+ imports.wbg.__wbg_enable_51cc5ea7d16e475c = function(arg0, arg1) {
+ getObject(arg0).enable(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_enableVertexAttribArray_85c507778523db86 = function(arg0, arg1) {
+ getObject(arg0).enableVertexAttribArray(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_framebufferRenderbuffer_d73f3cb3e5a605a2 = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4));
+ };
+ imports.wbg.__wbg_framebufferTexture2D_e07b69d4972eccfd = function(arg0, arg1, arg2, arg3, arg4, arg5) {
+ getObject(arg0).framebufferTexture2D(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4), arg5);
+ };
+ imports.wbg.__wbg_getAttribLocation_ae4109e1d8e7050f = function(arg0, arg1, arg2, arg3) {
+ const ret = getObject(arg0).getAttribLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));
+ return ret;
+ };
+ imports.wbg.__wbg_getError_cc18cbef4864f62f = function(arg0) {
+ const ret = getObject(arg0).getError();
+ return ret;
+ };
+ imports.wbg.__wbg_getExtension_22c72750813222f6 = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = getObject(arg0).getExtension(getStringFromWasm0(arg1, arg2));
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_getParameter_00a3d89e6e005c2f = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg0).getParameter(arg1 >>> 0);
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_getProgramInfoLog_234b1b9dbbc9282f = function(arg0, arg1, arg2) {
+ const ret = getObject(arg1).getProgramInfoLog(getObject(arg2));
+ var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_getProgramParameter_4100b1077a68e2ec = function(arg0, arg1, arg2) {
+ const ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_getShaderInfoLog_a680dbc6e8440e5b = function(arg0, arg1, arg2) {
+ const ret = getObject(arg1).getShaderInfoLog(getObject(arg2));
+ var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_getShaderParameter_87e97ffc5dc7fb05 = function(arg0, arg1, arg2) {
+ const ret = getObject(arg0).getShaderParameter(getObject(arg1), arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_getSupportedExtensions_f7eec3b83ce8c78d = function(arg0) {
+ const ret = getObject(arg0).getSupportedExtensions();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_getUniformLocation_201fd94276e7dc6f = function(arg0, arg1, arg2, arg3) {
+ const ret = getObject(arg0).getUniformLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_linkProgram_edd275997033948d = function(arg0, arg1) {
+ getObject(arg0).linkProgram(getObject(arg1));
+ };
+ imports.wbg.__wbg_pixelStorei_db7d39661916037c = function(arg0, arg1, arg2) {
+ getObject(arg0).pixelStorei(arg1 >>> 0, arg2);
+ };
+ imports.wbg.__wbg_renderbufferStorage_6ded6b343c662a60 = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).renderbufferStorage(arg1 >>> 0, arg2 >>> 0, arg3, arg4);
+ };
+ imports.wbg.__wbg_scissor_3ea2048f24928f06 = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).scissor(arg1, arg2, arg3, arg4);
+ };
+ imports.wbg.__wbg_shaderSource_bbfeb057b5f88df5 = function(arg0, arg1, arg2, arg3) {
+ getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3));
+ };
+ imports.wbg.__wbg_texParameteri_7414cf15f83e1d52 = function(arg0, arg1, arg2, arg3) {
+ getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);
+ };
+ imports.wbg.__wbg_uniform1i_22f9e77ed65e1503 = function(arg0, arg1, arg2) {
+ getObject(arg0).uniform1i(getObject(arg1), arg2);
+ };
+ imports.wbg.__wbg_uniform2f_fa5841b64e0ac5e9 = function(arg0, arg1, arg2, arg3) {
+ getObject(arg0).uniform2f(getObject(arg1), arg2, arg3);
+ };
+ imports.wbg.__wbg_useProgram_039f85866d3a975b = function(arg0, arg1) {
+ getObject(arg0).useProgram(getObject(arg1));
+ };
+ imports.wbg.__wbg_vertexAttribPointer_4375ff065dcf90ed = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
+ getObject(arg0).vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6);
+ };
+ imports.wbg.__wbg_viewport_06c29be651af660a = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).viewport(arg1, arg2, arg3, arg4);
+ };
+ imports.wbg.__wbg_instanceof_Window_0e6c0f1096d66c3c = function(arg0) {
+ const ret = getObject(arg0) instanceof Window;
+ return ret;
+ };
+ imports.wbg.__wbg_document_99eddbbc11ec831e = function(arg0) {
+ const ret = getObject(arg0).document;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_location_fa9019d2eb2195e8 = function(arg0) {
+ const ret = getObject(arg0).location;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_navigator_1f72d7edb7b4c387 = function(arg0) {
+ const ret = getObject(arg0).navigator;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_innerWidth_aebdd1c86de7b6aa = function() { return handleError(function (arg0) {
+ const ret = getObject(arg0).innerWidth;
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_innerHeight_67ea5ab43c3043ad = function() { return handleError(function (arg0) {
+ const ret = getObject(arg0).innerHeight;
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_devicePixelRatio_cac0b66c0e1e056b = function(arg0) {
+ const ret = getObject(arg0).devicePixelRatio;
+ return ret;
+ };
+ imports.wbg.__wbg_performance_71eb0d14ca622227 = function(arg0) {
+ const ret = getObject(arg0).performance;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_localStorage_6e9ba4e9a3771427 = function() { return handleError(function (arg0) {
+ const ret = getObject(arg0).localStorage;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_matchMedia_7a04497c9cd2fc1e = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = getObject(arg0).matchMedia(getStringFromWasm0(arg1, arg2));
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_open_fd57bd436de42549 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
+ const ret = getObject(arg0).open(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_requestAnimationFrame_8e3c7028c69ebaef = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg0).requestAnimationFrame(getObject(arg1));
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_fetch_ef7a6623d1fcd3b8 = function(arg0, arg1) {
+ const ret = getObject(arg0).fetch(getObject(arg1));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_setInterval_00dcd6d9b783b38f = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = getObject(arg0).setInterval(getObject(arg1), arg2);
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbg_setTimeout_a100c5fd6f7b2032 = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = getObject(arg0).setTimeout(getObject(arg1), arg2);
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
+ const ret = getObject(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_dataTransfer_a9eebb31aa4055f2 = function(arg0) {
+ const ret = getObject(arg0).dataTransfer;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_instanceof_Response_ccfeb62399355bcd = function(arg0) {
+ const ret = getObject(arg0) instanceof Response;
+ return ret;
+ };
+ imports.wbg.__wbg_url_06c0f822d68d195c = function(arg0, arg1) {
+ const ret = getObject(arg1).url;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_status_600fd8b881393898 = function(arg0) {
+ const ret = getObject(arg0).status;
+ return ret;
+ };
+ imports.wbg.__wbg_ok_1538f4695dab1792 = function(arg0) {
+ const ret = getObject(arg0).ok;
+ return ret;
+ };
+ imports.wbg.__wbg_statusText_750d3bf8e134b8f8 = function(arg0, arg1) {
+ const ret = getObject(arg1).statusText;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_headers_9e7f2c05a9b962ea = function(arg0) {
+ const ret = getObject(arg0).headers;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_arrayBuffer_5a99283a3954c850 = function() { return handleError(function (arg0) {
+ const ret = getObject(arg0).arrayBuffer();
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_writeText_df83b2c8a773a84a = function(arg0, arg1, arg2) {
+ const ret = getObject(arg0).writeText(getStringFromWasm0(arg1, arg2));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_addEventListener_78d3aa7e06ee5b73 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
+ getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));
+ }, arguments) };
+ imports.wbg.__wbg_matches_7809d58d7a13e2eb = function(arg0) {
+ const ret = getObject(arg0).matches;
+ return ret;
+ };
+ imports.wbg.__wbg_identifier_efb4abe3a00599c1 = function(arg0) {
+ const ret = getObject(arg0).identifier;
+ return ret;
+ };
+ imports.wbg.__wbg_pageX_20e9ef69ae98e6ca = function(arg0) {
+ const ret = getObject(arg0).pageX;
+ return ret;
+ };
+ imports.wbg.__wbg_pageY_8e273493fff14cd6 = function(arg0) {
+ const ret = getObject(arg0).pageY;
+ return ret;
+ };
+ imports.wbg.__wbg_force_8c0adc9011c40238 = function(arg0) {
+ const ret = getObject(arg0).force;
+ return ret;
+ };
+ imports.wbg.__wbg_instanceof_HtmlInputElement_750fccab172eab35 = function(arg0) {
+ const ret = getObject(arg0) instanceof HTMLInputElement;
+ return ret;
+ };
+ imports.wbg.__wbg_setautofocus_ce657398d4bfbbb0 = function(arg0, arg1) {
+ getObject(arg0).autofocus = arg1 !== 0;
+ };
+ imports.wbg.__wbg_setsize_1d5b32171e4916c6 = function(arg0, arg1) {
+ getObject(arg0).size = arg1 >>> 0;
+ };
+ imports.wbg.__wbg_value_14b43f7df5bd6160 = function(arg0, arg1) {
+ const ret = getObject(arg1).value;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_setvalue_649eb7de76d4a493 = function(arg0, arg1, arg2) {
+ getObject(arg0).value = getStringFromWasm0(arg1, arg2);
+ };
+ imports.wbg.__wbg_items_ab2c5110450d2c6a = function(arg0) {
+ const ret = getObject(arg0).items;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_files_506106b5b79463d5 = function(arg0) {
+ const ret = getObject(arg0).files;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_getData_18bfc326d2fcc5fc = function() { return handleError(function (arg0, arg1, arg2, arg3) {
+ const ret = getObject(arg1).getData(getStringFromWasm0(arg2, arg3));
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_now_20d2aadcf3cc17f7 = function(arg0) {
+ const ret = getObject(arg0).now();
+ return ret;
+ };
+ imports.wbg.__wbg_headers_0a71906114661592 = function(arg0) {
+ const ret = getObject(arg0).headers;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithstrandinit_fd99688f189f053e = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_length_37d5aa06d94e029d = function(arg0) {
+ const ret = getObject(arg0).length;
+ return ret;
+ };
+ imports.wbg.__wbg_get_a2af1e42e8d6d040 = function(arg0, arg1) {
+ const ret = getObject(arg0)[arg1 >>> 0];
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_preventDefault_747982fd5fe3b6d0 = function(arg0) {
+ getObject(arg0).preventDefault();
+ };
+ imports.wbg.__wbg_stopPropagation_63abc0c04280af82 = function(arg0) {
+ getObject(arg0).stopPropagation();
+ };
+ imports.wbg.__wbg_length_86a84abd1008e3f0 = function(arg0) {
+ const ret = getObject(arg0).length;
+ return ret;
+ };
+ imports.wbg.__wbg_item_5cffd6d67fb3a3a3 = function(arg0, arg1) {
+ const ret = getObject(arg0).item(arg1 >>> 0);
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_get_8a239117b507dd81 = function(arg0, arg1) {
+ const ret = getObject(arg0)[arg1 >>> 0];
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_clipboardData_a95ca12e53577c09 = function(arg0) {
+ const ret = getObject(arg0).clipboardData;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_name_705e027681939ce2 = function(arg0, arg1) {
+ const ret = getObject(arg1).name;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_lastModified_578207da4ec8a735 = function(arg0) {
+ const ret = getObject(arg0).lastModified;
+ return ret;
+ };
+ imports.wbg.__wbg_length_ced2607e299e48b0 = function(arg0) {
+ const ret = getObject(arg0).length;
+ return ret;
+ };
+ imports.wbg.__wbg_get_bbde85c2e4ce9183 = function(arg0, arg1) {
+ const ret = getObject(arg0)[arg1 >>> 0];
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_instanceof_HtmlCanvasElement_b94545433bb4d2ef = function(arg0) {
+ const ret = getObject(arg0) instanceof HTMLCanvasElement;
+ return ret;
+ };
+ imports.wbg.__wbg_width_20b7a9ebdd5f4232 = function(arg0) {
+ const ret = getObject(arg0).width;
+ return ret;
+ };
+ imports.wbg.__wbg_setwidth_654d8adcd4979eed = function(arg0, arg1) {
+ getObject(arg0).width = arg1 >>> 0;
+ };
+ imports.wbg.__wbg_height_57f43816c2227a89 = function(arg0) {
+ const ret = getObject(arg0).height;
+ return ret;
+ };
+ imports.wbg.__wbg_setheight_2b662384bfacb65c = function(arg0, arg1) {
+ getObject(arg0).height = arg1 >>> 0;
+ };
+ imports.wbg.__wbg_getContext_0c19ba5c037e057f = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_keyCode_9bdbab45f06fb085 = function(arg0) {
+ const ret = getObject(arg0).keyCode;
+ return ret;
+ };
+ imports.wbg.__wbg_altKey_4c4f9abf8a09e7c7 = function(arg0) {
+ const ret = getObject(arg0).altKey;
+ return ret;
+ };
+ imports.wbg.__wbg_ctrlKey_37d7587cf9229e4c = function(arg0) {
+ const ret = getObject(arg0).ctrlKey;
+ return ret;
+ };
+ imports.wbg.__wbg_shiftKey_94c9fa9845182d9e = function(arg0) {
+ const ret = getObject(arg0).shiftKey;
+ return ret;
+ };
+ imports.wbg.__wbg_metaKey_ecd5174305b25455 = function(arg0) {
+ const ret = getObject(arg0).metaKey;
+ return ret;
+ };
+ imports.wbg.__wbg_isComposing_fa3e456916264d71 = function(arg0) {
+ const ret = getObject(arg0).isComposing;
+ return ret;
+ };
+ imports.wbg.__wbg_key_a8ae33ddc6ff786b = function(arg0, arg1) {
+ const ret = getObject(arg1).key;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_clipboard_e99151dcef87806f = function(arg0) {
+ const ret = getObject(arg0).clipboard;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_userAgent_e5954dbb033ddef9 = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg1).userAgent;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_body_2a1ff14b05042a51 = function(arg0) {
+ const ret = getObject(arg0).body;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createElement_3c9b5f3aa42457a1 = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_getElementById_f83c5de20dc455d6 = function(arg0, arg1, arg2) {
+ const ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_instanceof_WebGlRenderingContext_b0885da52b151d86 = function(arg0) {
+ const ret = getObject(arg0) instanceof WebGLRenderingContext;
+ return ret;
+ };
+ imports.wbg.__wbg_bufferData_282e5d315f5503eb = function(arg0, arg1, arg2, arg3) {
+ getObject(arg0).bufferData(arg1 >>> 0, getObject(arg2), arg3 >>> 0);
+ };
+ imports.wbg.__wbg_texImage2D_ca7055ca4feee279 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {
+ getObject(arg0).texImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, getObject(arg9));
+ }, arguments) };
+ imports.wbg.__wbg_texSubImage2D_fe76e590b3e3fa85 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {
+ getObject(arg0).texSubImage2D(arg1 >>> 0, arg2, arg3, arg4, arg5, arg6, arg7 >>> 0, arg8 >>> 0, getObject(arg9));
+ }, arguments) };
+ imports.wbg.__wbg_activeTexture_1ba5758f0a8358b6 = function(arg0, arg1) {
+ getObject(arg0).activeTexture(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_attachShader_0867104b37cae2d6 = function(arg0, arg1, arg2) {
+ getObject(arg0).attachShader(getObject(arg1), getObject(arg2));
+ };
+ imports.wbg.__wbg_bindBuffer_28e62f648e99e251 = function(arg0, arg1, arg2) {
+ getObject(arg0).bindBuffer(arg1 >>> 0, getObject(arg2));
+ };
+ imports.wbg.__wbg_bindFramebuffer_b7a06305d2823b34 = function(arg0, arg1, arg2) {
+ getObject(arg0).bindFramebuffer(arg1 >>> 0, getObject(arg2));
+ };
+ imports.wbg.__wbg_bindRenderbuffer_0fe389ab46c4d00d = function(arg0, arg1, arg2) {
+ getObject(arg0).bindRenderbuffer(arg1 >>> 0, getObject(arg2));
+ };
+ imports.wbg.__wbg_bindTexture_27a724e7303eec67 = function(arg0, arg1, arg2) {
+ getObject(arg0).bindTexture(arg1 >>> 0, getObject(arg2));
+ };
+ imports.wbg.__wbg_blendEquationSeparate_ffbed0120340f7d5 = function(arg0, arg1, arg2) {
+ getObject(arg0).blendEquationSeparate(arg1 >>> 0, arg2 >>> 0);
+ };
+ imports.wbg.__wbg_blendFuncSeparate_c750720abdc9d54e = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).blendFuncSeparate(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0);
+ };
+ imports.wbg.__wbg_clear_786a8deca6672a9d = function(arg0, arg1) {
+ getObject(arg0).clear(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_clearColor_2c1d714dee770474 = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).clearColor(arg1, arg2, arg3, arg4);
+ };
+ imports.wbg.__wbg_colorMask_0cfe7588f073be4e = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).colorMask(arg1 !== 0, arg2 !== 0, arg3 !== 0, arg4 !== 0);
+ };
+ imports.wbg.__wbg_compileShader_1b371763cfd802f7 = function(arg0, arg1) {
+ getObject(arg0).compileShader(getObject(arg1));
+ };
+ imports.wbg.__wbg_createBuffer_48c0376fc0746386 = function(arg0) {
+ const ret = getObject(arg0).createBuffer();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createFramebuffer_f6f4aff3c462de89 = function(arg0) {
+ const ret = getObject(arg0).createFramebuffer();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createProgram_c2675d2cc83435a6 = function(arg0) {
+ const ret = getObject(arg0).createProgram();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createRenderbuffer_5f8fcf55de2b35f5 = function(arg0) {
+ const ret = getObject(arg0).createRenderbuffer();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createShader_8d2a55e7777bbea7 = function(arg0, arg1) {
+ const ret = getObject(arg0).createShader(arg1 >>> 0);
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_createTexture_23de5d8f7988e663 = function(arg0) {
+ const ret = getObject(arg0).createTexture();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_deleteShader_d39446753b2fa1e7 = function(arg0, arg1) {
+ getObject(arg0).deleteShader(getObject(arg1));
+ };
+ imports.wbg.__wbg_deleteTexture_bf4ea3b750a15992 = function(arg0, arg1) {
+ getObject(arg0).deleteTexture(getObject(arg1));
+ };
+ imports.wbg.__wbg_detachShader_e2c6cb7c2c469a33 = function(arg0, arg1, arg2) {
+ getObject(arg0).detachShader(getObject(arg1), getObject(arg2));
+ };
+ imports.wbg.__wbg_disable_ada50e27543b1ebd = function(arg0, arg1) {
+ getObject(arg0).disable(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_disableVertexAttribArray_e1c513cfd55355c9 = function(arg0, arg1) {
+ getObject(arg0).disableVertexAttribArray(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_drawElements_efa6c15e2787a58c = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).drawElements(arg1 >>> 0, arg2, arg3 >>> 0, arg4);
+ };
+ imports.wbg.__wbg_enable_981a414a11bbed87 = function(arg0, arg1) {
+ getObject(arg0).enable(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_enableVertexAttribArray_1d5f3ff6e7da7095 = function(arg0, arg1) {
+ getObject(arg0).enableVertexAttribArray(arg1 >>> 0);
+ };
+ imports.wbg.__wbg_framebufferRenderbuffer_ed95c4854179b4ac = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).framebufferRenderbuffer(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4));
+ };
+ imports.wbg.__wbg_framebufferTexture2D_3bb72a24d7618de9 = function(arg0, arg1, arg2, arg3, arg4, arg5) {
+ getObject(arg0).framebufferTexture2D(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, getObject(arg4), arg5);
+ };
+ imports.wbg.__wbg_getAttribLocation_f875dcf14748b9d4 = function(arg0, arg1, arg2, arg3) {
+ const ret = getObject(arg0).getAttribLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));
+ return ret;
+ };
+ imports.wbg.__wbg_getError_447f4b8abb16917e = function(arg0) {
+ const ret = getObject(arg0).getError();
+ return ret;
+ };
+ imports.wbg.__wbg_getExtension_bea19db80bdbefef = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = getObject(arg0).getExtension(getStringFromWasm0(arg1, arg2));
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_getParameter_f511b92ebf87c44e = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg0).getParameter(arg1 >>> 0);
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_getProgramInfoLog_e70b0120bda14895 = function(arg0, arg1, arg2) {
+ const ret = getObject(arg1).getProgramInfoLog(getObject(arg2));
+ var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_getProgramParameter_e4fe54d806806081 = function(arg0, arg1, arg2) {
+ const ret = getObject(arg0).getProgramParameter(getObject(arg1), arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_getShaderInfoLog_95d068aeccc5dbb3 = function(arg0, arg1, arg2) {
+ const ret = getObject(arg1).getShaderInfoLog(getObject(arg2));
+ var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_getShaderParameter_2972af1cb850aeb7 = function(arg0, arg1, arg2) {
+ const ret = getObject(arg0).getShaderParameter(getObject(arg1), arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_getSupportedExtensions_0d5d24aad2788aec = function(arg0) {
+ const ret = getObject(arg0).getSupportedExtensions();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_getUniformLocation_776a1f58e7904d81 = function(arg0, arg1, arg2, arg3) {
+ const ret = getObject(arg0).getUniformLocation(getObject(arg1), getStringFromWasm0(arg2, arg3));
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_linkProgram_b98c8967f45a44fd = function(arg0, arg1) {
+ getObject(arg0).linkProgram(getObject(arg1));
+ };
+ imports.wbg.__wbg_pixelStorei_707653d2f29a6c67 = function(arg0, arg1, arg2) {
+ getObject(arg0).pixelStorei(arg1 >>> 0, arg2);
+ };
+ imports.wbg.__wbg_renderbufferStorage_56e5cf7c10bbc044 = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).renderbufferStorage(arg1 >>> 0, arg2 >>> 0, arg3, arg4);
+ };
+ imports.wbg.__wbg_scissor_056d185c74d7c0ad = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).scissor(arg1, arg2, arg3, arg4);
+ };
+ imports.wbg.__wbg_shaderSource_daca520f63ef8fca = function(arg0, arg1, arg2, arg3) {
+ getObject(arg0).shaderSource(getObject(arg1), getStringFromWasm0(arg2, arg3));
+ };
+ imports.wbg.__wbg_texParameteri_1298d8804b59bbc0 = function(arg0, arg1, arg2, arg3) {
+ getObject(arg0).texParameteri(arg1 >>> 0, arg2 >>> 0, arg3);
+ };
+ imports.wbg.__wbg_uniform1i_42b99e992f794a51 = function(arg0, arg1, arg2) {
+ getObject(arg0).uniform1i(getObject(arg1), arg2);
+ };
+ imports.wbg.__wbg_uniform2f_3a04be03a4c69f62 = function(arg0, arg1, arg2, arg3) {
+ getObject(arg0).uniform2f(getObject(arg1), arg2, arg3);
+ };
+ imports.wbg.__wbg_useProgram_022d72a653706891 = function(arg0, arg1) {
+ getObject(arg0).useProgram(getObject(arg1));
+ };
+ imports.wbg.__wbg_vertexAttribPointer_a75ea424ba9fa4e8 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
+ getObject(arg0).vertexAttribPointer(arg1 >>> 0, arg2, arg3 >>> 0, arg4 !== 0, arg5, arg6);
+ };
+ imports.wbg.__wbg_viewport_6c864379ded67e8a = function(arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).viewport(arg1, arg2, arg3, arg4);
+ };
+ imports.wbg.__wbg_setid_ea9f00ecb5da9dde = function(arg0, arg1, arg2) {
+ getObject(arg0).id = getStringFromWasm0(arg1, arg2);
+ };
+ imports.wbg.__wbg_scrollLeft_9aba28808f857e36 = function(arg0) {
+ const ret = getObject(arg0).scrollLeft;
+ return ret;
+ };
+ imports.wbg.__wbg_clientWidth_11f72beceb108bff = function(arg0) {
+ const ret = getObject(arg0).clientWidth;
+ return ret;
+ };
+ imports.wbg.__wbg_clientHeight_205d93d6eadff351 = function(arg0) {
+ const ret = getObject(arg0).clientHeight;
+ return ret;
+ };
+ imports.wbg.__wbg_getBoundingClientRect_ab935d65fdd23c25 = function(arg0) {
+ const ret = getObject(arg0).getBoundingClientRect();
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_scrollTop_f1031b88f039d8df = function(arg0) {
+ const ret = getObject(arg0).scrollTop;
+ return ret;
+ };
+ imports.wbg.__wbg_hidden_809625377ca6c4a3 = function(arg0) {
+ const ret = getObject(arg0).hidden;
+ return ret;
+ };
+ imports.wbg.__wbg_sethidden_7a120b754b048503 = function(arg0, arg1) {
+ getObject(arg0).hidden = arg1 !== 0;
+ };
+ imports.wbg.__wbg_style_dd3ba68ea919f1b0 = function(arg0) {
+ const ret = getObject(arg0).style;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_offsetTop_c8f74f82dc787ed0 = function(arg0) {
+ const ret = getObject(arg0).offsetTop;
+ return ret;
+ };
+ imports.wbg.__wbg_offsetLeft_3b3b09bce24322ef = function(arg0) {
+ const ret = getObject(arg0).offsetLeft;
+ return ret;
+ };
+ imports.wbg.__wbg_offsetWidth_3afb80444bdcabce = function(arg0) {
+ const ret = getObject(arg0).offsetWidth;
+ return ret;
+ };
+ imports.wbg.__wbg_blur_685fb8c8baa471a1 = function() { return handleError(function (arg0) {
+ getObject(arg0).blur();
+ }, arguments) };
+ imports.wbg.__wbg_focus_42ad8e77a7a0b22a = function() { return handleError(function (arg0) {
+ getObject(arg0).focus();
+ }, arguments) };
+ imports.wbg.__wbg_width_a260098679e33e90 = function(arg0) {
+ const ret = getObject(arg0).width;
+ return ret;
+ };
+ imports.wbg.__wbg_height_1f8574470ebe45c9 = function(arg0) {
+ const ret = getObject(arg0).height;
+ return ret;
+ };
+ imports.wbg.__wbg_top_da39668ed41161c4 = function(arg0) {
+ const ret = getObject(arg0).top;
+ return ret;
+ };
+ imports.wbg.__wbg_left_a1624a1a425102f3 = function(arg0) {
+ const ret = getObject(arg0).left;
+ return ret;
+ };
+ imports.wbg.__wbg_appendChild_a86c0da8d152eae4 = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg0).appendChild(getObject(arg1));
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_touches_d4869a7500017809 = function(arg0) {
+ const ret = getObject(arg0).touches;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_changedTouches_21bd59fbbc482ad7 = function(arg0) {
+ const ret = getObject(arg0).changedTouches;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_size_e8d6777bbbbd2991 = function(arg0) {
+ const ret = getObject(arg0).size;
+ return ret;
+ };
+ imports.wbg.__wbg_arrayBuffer_781cc81e507364b8 = function(arg0) {
+ const ret = getObject(arg0).arrayBuffer();
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_setProperty_ae9adf5d00216c03 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
+ }, arguments) };
+ imports.wbg.__wbg_href_ee02b91ff794f1c0 = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg1).href;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_origin_890e8002c9eeba35 = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg1).origin;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_protocol_8a7c3a0ad0534fb9 = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg1).protocol;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_host_5a60711dad652364 = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg1).host;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_hostname_52b243e8e2ba0022 = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg1).hostname;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_port_91ba722f8d346400 = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg1).port;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_search_083c5449552cf16e = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg1).search;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_hash_d124cf237fe7b7c1 = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg1).hash;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_getItem_eb6e17b18b890a47 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
+ const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
+ var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ }, arguments) };
+ imports.wbg.__wbg_setItem_ed2ea572329ab721 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
+ }, arguments) };
+ imports.wbg.__wbg_data_ccaf50f3288b08c5 = function(arg0, arg1) {
+ const ret = getObject(arg1).data;
+ var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_type_d73ca5f20cbe175f = function(arg0, arg1) {
+ const ret = getObject(arg1).type;
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_set_6884dcc6cdd65022 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
+ getObject(arg0).set(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
+ }, arguments) };
+ imports.wbg.__wbg_clientX_83648828186ba19f = function(arg0) {
+ const ret = getObject(arg0).clientX;
+ return ret;
+ };
+ imports.wbg.__wbg_clientY_ba9e5549993281e3 = function(arg0) {
+ const ret = getObject(arg0).clientY;
+ return ret;
+ };
+ imports.wbg.__wbg_ctrlKey_e4aeb9366ca88d41 = function(arg0) {
+ const ret = getObject(arg0).ctrlKey;
+ return ret;
+ };
+ imports.wbg.__wbg_shiftKey_42596574095ad5e2 = function(arg0) {
+ const ret = getObject(arg0).shiftKey;
+ return ret;
+ };
+ imports.wbg.__wbg_metaKey_ad377163d8beff50 = function(arg0) {
+ const ret = getObject(arg0).metaKey;
+ return ret;
+ };
+ imports.wbg.__wbg_button_78dae8616402469e = function(arg0) {
+ const ret = getObject(arg0).button;
+ return ret;
+ };
+ imports.wbg.__wbg_bindVertexArrayOES_35d97084dfc5f6f4 = function(arg0, arg1) {
+ getObject(arg0).bindVertexArrayOES(getObject(arg1));
+ };
+ imports.wbg.__wbg_createVertexArrayOES_69c38b2b74e927fa = function(arg0) {
+ const ret = getObject(arg0).createVertexArrayOES();
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_deltaX_692299f5e35cfb0d = function(arg0) {
+ const ret = getObject(arg0).deltaX;
+ return ret;
+ };
+ imports.wbg.__wbg_deltaY_f78bae9413139a24 = function(arg0) {
+ const ret = getObject(arg0).deltaY;
+ return ret;
+ };
+ imports.wbg.__wbg_deltaMode_08c2fcea70146506 = function(arg0) {
+ const ret = getObject(arg0).deltaMode;
+ return ret;
+ };
+ imports.wbg.__wbg_get_590a2cd912f2ae46 = function(arg0, arg1) {
+ const ret = getObject(arg0)[arg1 >>> 0];
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_length_2cd798326f2cc4c1 = function(arg0) {
+ const ret = getObject(arg0).length;
+ return ret;
+ };
+ imports.wbg.__wbindgen_is_function = function(arg0) {
+ const ret = typeof(getObject(arg0)) === 'function';
+ return ret;
+ };
+ imports.wbg.__wbg_newnoargs_e23b458e372830de = function(arg0, arg1) {
+ const ret = new Function(getStringFromWasm0(arg0, arg1));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_is_object = function(arg0) {
+ const val = getObject(arg0);
+ const ret = typeof(val) === 'object' && val !== null;
+ return ret;
+ };
+ imports.wbg.__wbg_next_cabb70b365520721 = function(arg0) {
+ const ret = getObject(arg0).next;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_next_bf3d83fc18df496e = function() { return handleError(function (arg0) {
+ const ret = getObject(arg0).next();
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_done_040f966faa9a72b3 = function(arg0) {
+ const ret = getObject(arg0).done;
+ return ret;
+ };
+ imports.wbg.__wbg_value_419afbd9b9574c4c = function(arg0) {
+ const ret = getObject(arg0).value;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_iterator_4832ef1f15b0382b = function() {
+ const ret = Symbol.iterator;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_get_a9cab131e3152c49 = function() { return handleError(function (arg0, arg1) {
+ const ret = Reflect.get(getObject(arg0), getObject(arg1));
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_call_ae78342adc33730a = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg0).call(getObject(arg1));
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_new_36359baae5a47e27 = function() {
+ const ret = new Object();
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_self_99737b4dcdf6f0d8 = function() { return handleError(function () {
+ const ret = self.self;
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_window_9b61fbbf3564c4fb = function() { return handleError(function () {
+ const ret = window.window;
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_globalThis_8e275ef40caea3a3 = function() { return handleError(function () {
+ const ret = globalThis.globalThis;
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_global_5de1e0f82bddcd27 = function() { return handleError(function () {
+ const ret = global.global;
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbindgen_is_undefined = function(arg0) {
+ const ret = getObject(arg0) === undefined;
+ return ret;
+ };
+ imports.wbg.__wbg_resolve_a9a87bdd64e9e62c = function(arg0) {
+ const ret = Promise.resolve(getObject(arg0));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_then_ce526c837d07b68f = function(arg0, arg1) {
+ const ret = getObject(arg0).then(getObject(arg1));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_then_842e65b843962f56 = function(arg0, arg1, arg2) {
+ const ret = getObject(arg0).then(getObject(arg1), getObject(arg2));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_buffer_7af23f65f6c64548 = function(arg0) {
+ const ret = getObject(arg0).buffer;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithbyteoffsetandlength_293152433089cf24 = function(arg0, arg1, arg2) {
+ const ret = new Int8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithbyteoffsetandlength_20bd70cc8d50ee94 = function(arg0, arg1, arg2) {
+ const ret = new Int16Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithbyteoffsetandlength_0d4e0750590b10dd = function(arg0, arg1, arg2) {
+ const ret = new Int32Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithbyteoffsetandlength_ce1e75f0ce5f7974 = function(arg0, arg1, arg2) {
+ const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_new_cc9018bd6f283b6f = function(arg0) {
+ const ret = new Uint8Array(getObject(arg0));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_set_f25e869e4565d2a2 = function(arg0, arg1, arg2) {
+ getObject(arg0).set(getObject(arg1), arg2 >>> 0);
+ };
+ imports.wbg.__wbg_length_0acb1cf9bbaf8519 = function(arg0) {
+ const ret = getObject(arg0).length;
+ return ret;
+ };
+ imports.wbg.__wbg_newwithbyteoffsetandlength_729246f395bbffc0 = function(arg0, arg1, arg2) {
+ const ret = new Uint16Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithbyteoffsetandlength_bbdb045c2c009495 = function(arg0, arg1, arg2) {
+ const ret = new Uint32Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithbyteoffsetandlength_3f554978d8793b14 = function(arg0, arg1, arg2) {
+ const ret = new Float32Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_set_93b1c87ee2af852e = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
+ return ret;
+ }, arguments) };
+ imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {
+ const ret = debugString(getObject(arg1));
+ const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ const len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbindgen_throw = function(arg0, arg1) {
+ throw new Error(getStringFromWasm0(arg0, arg1));
+ };
+ imports.wbg.__wbindgen_memory = function() {
+ const ret = wasm.memory;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_closure_wrapper903 = function(arg0, arg1, arg2) {
+ const ret = makeMutClosure(arg0, arg1, 225, __wbg_adapter_28);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_closure_wrapper905 = function(arg0, arg1, arg2) {
+ const ret = makeMutClosure(arg0, arg1, 225, __wbg_adapter_31);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_closure_wrapper907 = function(arg0, arg1, arg2) {
+ const ret = makeMutClosure(arg0, arg1, 225, __wbg_adapter_34);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_closure_wrapper909 = function(arg0, arg1, arg2) {
+ const ret = makeMutClosure(arg0, arg1, 225, __wbg_adapter_37);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_closure_wrapper1121 = function(arg0, arg1, arg2) {
+ const ret = makeMutClosure(arg0, arg1, 345, __wbg_adapter_40);
+ return addHeapObject(ret);
+ };
+
+ if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
+ input = fetch(input);
+ }
+
+
+
+ const { instance, module } = await load(await input, imports);
+
+ wasm = instance.exports;
+ init.__wbindgen_wasm_module = module;
+
+ return wasm;
+}
+
+wasm_bindgen = Object.assign(init, __exports);
+
+})();
diff --git a/docs/plotter_bg.wasm b/docs/plotter_bg.wasm
new file mode 100644
index 0000000..52ceb6c
Binary files /dev/null and b/docs/plotter_bg.wasm differ
diff --git a/docs/sw.js b/docs/sw.js
new file mode 100644
index 0000000..7ecd229
--- /dev/null
+++ b/docs/sw.js
@@ -0,0 +1,25 @@
+var cacheName = 'egui-template-pwa';
+var filesToCache = [
+ './',
+ './index.html',
+ './eframe_template.js',
+ './eframe_template_bg.wasm',
+];
+
+/* Start the service worker and cache all of the app's content */
+self.addEventListener('install', function (e) {
+ e.waitUntil(
+ caches.open(cacheName).then(function (cache) {
+ return cache.addAll(filesToCache);
+ })
+ );
+});
+
+/* Serve cached content when offline */
+self.addEventListener('fetch', function (e) {
+ e.respondWith(
+ caches.match(e.request).then(function (response) {
+ return response || fetch(e.request);
+ })
+ );
+});
diff --git a/src/app/datasource.rs b/src/app/datasource.rs
new file mode 100644
index 0000000..3712a7a
--- /dev/null
+++ b/src/app/datasource.rs
@@ -0,0 +1,143 @@
+use std::sync::{Arc, Mutex};
+use rand::Rng;
+use chrono::{DateTime, Utc};
+use serde::{Deserialize, Serialize};
+use eframe::egui::plot::Value;
+
+struct DataSource {
+ data : Arc>>,
+}
+
+impl DataSource {
+ fn new() -> Self {
+ Self{ data: Arc::new(Mutex::new(Vec::new())) }
+ }
+
+ fn view(&self) -> Vec { // TODO handle errors
+ return self.data.lock().unwrap().clone();
+ }
+}
+
+pub trait Data {
+ fn load(&mut self, url:&str);
+ fn view(&self) -> Vec;
+}
+
+pub struct TpsData {
+ ds: DataSource,
+ load_interval : i64,
+ last_load : DateTime,
+}
+
+#[derive(Serialize, Deserialize)]
+struct TpsResponseData {
+ tps: f64
+}
+
+impl TpsData {
+ pub fn new(load_interval:i64) -> Self {
+ Self { ds: DataSource::new() , last_load: Utc::now(), load_interval }
+ }
+}
+
+impl Data for TpsData{
+ fn load(&mut self, url:&str) {
+ if (Utc::now() - self.last_load).num_seconds() < self.load_interval { return; }
+ self.last_load = Utc::now();
+ let ds_data = self.ds.data.clone();
+ let request = ehttp::Request::get(format!("{}/tps", url));
+ ehttp::fetch(request, move |result: ehttp::Result| {
+ let data : TpsResponseData = serde_json::from_slice(result.unwrap().bytes.as_slice()).unwrap();
+ ds_data.lock().unwrap().push(Value {x:Utc::now().timestamp() as f64, y:data.tps});
+ });
+ }
+
+ fn view(&self) -> Vec { self.ds.view() }
+}
+
+pub struct ChatData {
+ ds : DataSource,
+ load_interval : i64,
+ last_load : DateTime,
+}
+
+#[derive(Serialize, Deserialize)]
+struct ChatResponseData {
+ volume: f64
+}
+
+impl ChatData {
+ pub fn new(load_interval:i64) -> Self {
+ Self { ds: DataSource::new() , last_load: Utc::now(), load_interval }
+ }
+}
+
+impl Data for ChatData{
+ fn load(&mut self, url:&str) {
+ if (Utc::now() - self.last_load).num_seconds() < self.load_interval { return; }
+ self.last_load = Utc::now();
+ let ds_data = self.ds.data.clone();
+ let request = ehttp::Request::get(format!("{}/chat_activity", url));
+ ehttp::fetch(request, move |result: ehttp::Result| {
+ let data : ChatResponseData = serde_json::from_slice(result.unwrap().bytes.as_slice()).unwrap();
+ ds_data.lock().unwrap().push(Value {x:Utc::now().timestamp() as f64, y:data.volume});
+ });
+ }
+
+ fn view(&self) -> Vec { self.ds.view() }
+}
+
+pub struct PlayerCountData {
+ ds : DataSource,
+ load_interval : i64,
+ last_load : DateTime,
+}
+
+#[derive(Serialize, Deserialize)]
+struct PlayerCountResponseData {
+ count: i32
+}
+
+impl PlayerCountData {
+ pub fn new(load_interval:i64) -> Self {
+ Self { ds: DataSource::new() , last_load: Utc::now(), load_interval }
+ }
+}
+
+impl Data for PlayerCountData{
+ fn load(&mut self, url:&str) {
+ if (Utc::now() - self.last_load).num_seconds() < self.load_interval { return; }
+ self.last_load = Utc::now();
+ let ds_data = self.ds.data.clone();
+ let request = ehttp::Request::get(format!("{}/chat_activity", url));
+ ehttp::fetch(request, move |result: ehttp::Result| {
+ let data : PlayerCountResponseData = serde_json::from_slice(result.unwrap().bytes.as_slice()).unwrap();
+ ds_data.lock().unwrap().push(Value {x:Utc::now().timestamp() as f64, y:data.count as f64});
+ });
+ }
+
+ fn view(&self) -> Vec { self.ds.view() }
+}
+
+pub struct RandomData {
+ ds : DataSource,
+ load_interval : i64,
+ last_load : DateTime,
+ rng: rand::rngs::ThreadRng,
+}
+
+impl RandomData {
+ pub fn new(load_interval:i64) -> Self {
+ Self { ds: DataSource::new() , last_load: Utc::now(), load_interval, rng : rand::thread_rng() }
+ }
+}
+
+impl Data for RandomData{
+ fn load(&mut self, _url:&str) {
+ if (Utc::now() - self.last_load).num_seconds() < self.load_interval { return; }
+ self.last_load = Utc::now();
+ self.ds.data.lock().unwrap().push(Value {x:Utc::now().timestamp() as f64, y:self.rng.gen()});
+ }
+
+ fn view(&self) -> Vec { self.ds.view() }
+}
\ No newline at end of file
diff --git a/src/app/mod.rs b/src/app/mod.rs
new file mode 100644
index 0000000..a3b6158
--- /dev/null
+++ b/src/app/mod.rs
@@ -0,0 +1,70 @@
+mod datasource;
+
+use chrono::{DateTime, NaiveDateTime, Utc};
+use datasource::{ChatData, PlayerCountData, TpsData, Data, RandomData};
+use eframe::egui;
+use eframe::egui::plot::{Line, Plot, Value, Values};
+
+
+pub struct App {
+ player_count: PlayerCountData,
+ tps: TpsData,
+ chat: ChatData,
+ rand: RandomData,
+ sync_time:bool,
+}
+
+impl App {
+ pub fn new(_cc: &eframe::CreationContext) -> Self {
+ Self {
+ player_count: PlayerCountData::new(60),
+ tps: TpsData::new(30),
+ chat: ChatData::new(15),
+ rand: RandomData::new(1),
+ sync_time: false,
+ }
+ }
+}
+
+impl eframe::App for App {
+ fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
+ self.rand.load("");
+ egui::TopBottomPanel::top("??? wtf").show(ctx, |ui| {
+ ui.horizontal(|ui| {
+ egui::widgets::global_dark_light_mode_switch(ui);
+ ui.heading("nnbot dashboard");
+ ui.checkbox(&mut self.sync_time, "Lock X to now");
+ ui.with_layout(egui::Layout::top_down(egui::Align::RIGHT), |ui| {
+ if ui.button("x").clicked() {
+ frame.quit();
+ }
+ });
+ });
+ });
+ egui::CentralPanel::default().show(ctx, |ui| {
+ let mut p = Plot::new("test").x_axis_formatter(|x, _range| {
+ format!(
+ "{}",
+ DateTime::::from_utc(NaiveDateTime::from_timestamp(x as i64, 0), Utc)
+ .format("%Y/%m/%d %H:%M:%S")
+ )
+ }).center_x_axis(false);
+
+ if self.sync_time {
+ p = p.include_x(Utc::now().timestamp() as f64);
+ }
+
+ p.show(ui, |plot_ui| {
+ plot_ui.line(
+ Line::new(Values::from_values(self.player_count.view())).name("Player Count"),
+ );
+ plot_ui.line(Line::new(Values::from_values(self.tps.view())).name("TPS over 15s"));
+ plot_ui.line(Line::new(Values::from_values(self.rand.view())).name("Random Data"));
+ plot_ui.line(
+ Line::new(Values::from_values(self.chat.view()))
+ .name("Chat messages per minute"),
+ );
+ });
+ });
+ }
+}
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..4cdb633
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,20 @@
+mod app;
+
+pub use app::App;
+
+// When compiling for web:
+
+#[cfg(target_arch = "wasm32")]
+use eframe::wasm_bindgen::{self, prelude::*};
+
+#[cfg(target_arch = "wasm32")]
+#[wasm_bindgen]
+pub fn start(canvas_id: &str) -> Result<(), eframe::wasm_bindgen::JsValue> {
+ // Make sure panics are logged using `console.error`.
+ console_error_panic_hook::set_once();
+
+ // Redirect tracing to console.log and friends:
+ tracing_wasm::set_as_global_default();
+
+ eframe::start_web(canvas_id, Box::new(|cc| Box::new(App::new(cc))))
+}
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..8f94d92
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,15 @@
+mod app;
+
+use app::App;
+
+// When compiling natively:
+#[cfg(not(target_arch = "wasm32"))]
+fn main() {
+ let native_options = eframe::NativeOptions::default();
+
+ eframe::run_native(
+ "2b2t queue stats",
+ native_options,
+ Box::new(|cc| Box::new(App::new(cc))),
+ );
+}