aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-23 16:10:04 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-23 16:10:04 -0500
commitb28008bc97a7fbc9d4e7b6eac2c06d8e91e1fb16 (patch)
treed4adb7e59dd66e6a1f4a68e37fc2b12debbcc4b9
parentaa346f8caf62c34ba6f45a4c99056a78b15d6651 (diff)
downloadteleterm-b28008bc97a7fbc9d4e7b6eac2c06d8e91e1fb16.tar.gz
teleterm-b28008bc97a7fbc9d4e7b6eac2c06d8e91e1fb16.zip
start working on the login flow
-rw-r--r--teleterm-web/src/lib.rs4
-rw-r--r--teleterm-web/src/model.rs22
-rw-r--r--teleterm-web/src/views.rs1
-rw-r--r--teleterm-web/src/views/login.rs5
-rw-r--r--teleterm-web/src/views/page.rs4
-rw-r--r--teleterm/src/web.rs19
-rw-r--r--teleterm/src/web/disk_session.rs99
-rw-r--r--teleterm/src/web/list.rs13
-rw-r--r--teleterm/src/web/login.rs26
-rw-r--r--teleterm/src/web/watch.rs13
-rw-r--r--teleterm/static/teleterm_web.js2
-rw-r--r--teleterm/static/teleterm_web_bg.wasmbin470845 -> 483125 bytes
12 files changed, 205 insertions, 3 deletions
diff --git a/teleterm-web/src/lib.rs b/teleterm-web/src/lib.rs
index 7b17421..4c2e366 100644
--- a/teleterm-web/src/lib.rs
+++ b/teleterm-web/src/lib.rs
@@ -10,6 +10,8 @@ use crate::prelude::*;
#[allow(clippy::large_enum_variant)]
#[derive(Clone)]
enum Msg {
+ Login,
+ LoggedIn(seed::fetch::ResponseDataResult<()>),
List(seed::fetch::ResponseDataResult<Vec<crate::protocol::Session>>),
Refresh,
StartWatching(String),
@@ -19,7 +21,7 @@ enum Msg {
fn init(_: Url, orders: &mut impl Orders<Msg>) -> Init<crate::model::Model> {
log::trace!("init");
- orders.send_msg(Msg::Refresh);
+ orders.send_msg(Msg::Login);
Init::new(crate::model::Model::new(crate::config::Config::load()))
}
diff --git a/teleterm-web/src/model.rs b/teleterm-web/src/model.rs
index e4919e4..9f28b2d 100644
--- a/teleterm-web/src/model.rs
+++ b/teleterm-web/src/model.rs
@@ -13,6 +13,7 @@ impl Drop for WatchConn {
}
pub(crate) struct Model {
+ logged_in: bool,
config: crate::config::Config,
sessions: Vec<crate::protocol::Session>,
watch_conn: Option<WatchConn>,
@@ -21,6 +22,7 @@ pub(crate) struct Model {
impl Model {
pub(crate) fn new(config: crate::config::Config) -> Self {
Self {
+ logged_in: false,
config,
sessions: vec![],
watch_conn: None,
@@ -33,6 +35,22 @@ impl Model {
orders: &mut impl Orders<crate::Msg>,
) {
match msg {
+ crate::Msg::Login => {
+ log::debug!("logging in");
+ let url = format!(
+ "http://{}/login?username=foo",
+ self.config.public_address
+ );
+ orders.perform_cmd(
+ seed::Request::new(url)
+ .fetch_json_data(crate::Msg::LoggedIn),
+ );
+ }
+ crate::Msg::LoggedIn(..) => {
+ log::debug!("logged in");
+ self.logged_in = true;
+ orders.send_msg(crate::Msg::Refresh);
+ }
crate::Msg::List(sessions) => match sessions {
Ok(sessions) => {
log::debug!("got sessions");
@@ -90,6 +108,10 @@ impl Model {
}
}
+ pub(crate) fn logged_in(&self) -> bool {
+ self.logged_in
+ }
+
pub(crate) fn title(&self) -> &str {
&self.config.title
}
diff --git a/teleterm-web/src/views.rs b/teleterm-web/src/views.rs
index 349a45c..20c4150 100644
--- a/teleterm-web/src/views.rs
+++ b/teleterm-web/src/views.rs
@@ -1,4 +1,5 @@
pub(crate) mod list;
+pub(crate) mod login;
pub(crate) mod page;
pub(crate) mod sessions;
pub(crate) mod terminal;
diff --git a/teleterm-web/src/views/login.rs b/teleterm-web/src/views/login.rs
new file mode 100644
index 0000000..4520477
--- /dev/null
+++ b/teleterm-web/src/views/login.rs
@@ -0,0 +1,5 @@
+use crate::prelude::*;
+
+pub(crate) fn render(_: &crate::model::Model) -> Vec<Node<crate::Msg>> {
+ vec![seed::p!["logging in..."]]
+}
diff --git a/teleterm-web/src/views/page.rs b/teleterm-web/src/views/page.rs
index e30e085..350e981 100644
--- a/teleterm-web/src/views/page.rs
+++ b/teleterm-web/src/views/page.rs
@@ -3,7 +3,9 @@ use crate::prelude::*;
pub(crate) fn render(model: &crate::model::Model) -> Vec<Node<crate::Msg>> {
let mut view = vec![seed::h1![model.title()]];
- if model.watching() {
+ if !model.logged_in() {
+ view.extend(super::login::render(model))
+ } else if model.watching() {
view.extend(super::watch::render(model))
} else {
view.extend(super::list::render(model))
diff --git a/teleterm/src/web.rs b/teleterm/src/web.rs
index 992b79d..07ece12 100644
--- a/teleterm/src/web.rs
+++ b/teleterm/src/web.rs
@@ -1,4 +1,6 @@
+mod disk_session;
mod list;
+mod login;
mod view;
mod watch;
mod ws;
@@ -15,6 +17,11 @@ struct Config {
public_address: String,
}
+#[derive(Default, serde::Deserialize, serde::Serialize)]
+struct SessionData {
+ username: Option<String>,
+}
+
pub struct Server {
server: Box<dyn futures::Future<Item = (), Error = ()> + Send>,
}
@@ -54,6 +61,14 @@ fn router(data: &Config) -> impl gotham::handler::NewHandler {
.add(gotham::middleware::state::StateMiddleware::new(
data.clone(),
))
+ .add(
+ gotham::middleware::session::NewSessionMiddleware::new(
+ disk_session::DiskSession,
+ )
+ .insecure()
+ .with_cookie_name("teleterm")
+ .with_session_type::<SessionData>(),
+ )
.build(),
);
gotham::router::builder::build_router(chain, pipeline, |route| {
@@ -75,6 +90,10 @@ fn router(data: &Config) -> impl gotham::handler::NewHandler {
.get("/watch")
.with_query_string_extractor::<watch::QueryParams>()
.to(watch::run);
+ route
+ .get("/login")
+ .with_query_string_extractor::<login::QueryParams>()
+ .to(login::run);
})
}
diff --git a/teleterm/src/web/disk_session.rs b/teleterm/src/web/disk_session.rs
new file mode 100644
index 0000000..423bcd0
--- /dev/null
+++ b/teleterm/src/web/disk_session.rs
@@ -0,0 +1,99 @@
+use crate::prelude::*;
+
+use std::io::Write as _;
+
+#[derive(Clone)]
+pub struct DiskSession;
+
+impl DiskSession {
+ fn file_for_id(
+ &self,
+ identifier: &gotham::middleware::session::SessionIdentifier,
+ should_exist: bool,
+ ) -> Option<std::path::PathBuf> {
+ let name = format!("web-{}", identifier.value);
+ crate::dirs::Dirs::new().data_file(&name, should_exist)
+ }
+}
+
+impl gotham::middleware::session::NewBackend for DiskSession {
+ type Instance = Self;
+
+ fn new_backend(&self) -> std::io::Result<Self::Instance> {
+ Ok(Self)
+ }
+}
+
+impl gotham::middleware::session::Backend for DiskSession {
+ fn persist_session(
+ &self,
+ identifier: gotham::middleware::session::SessionIdentifier,
+ content: &[u8],
+ ) -> std::result::Result<(), gotham::middleware::session::SessionError>
+ {
+ let filename = self.file_for_id(&identifier, false).unwrap();
+ let mut file = std::fs::File::create(filename).map_err(|e| {
+ gotham::middleware::session::SessionError::Backend(format!(
+ "{}",
+ e
+ ))
+ })?;
+ file.write_all(content).map_err(|e| {
+ gotham::middleware::session::SessionError::Backend(format!(
+ "{}",
+ e
+ ))
+ })?;
+ file.sync_all().map_err(|e| {
+ gotham::middleware::session::SessionError::Backend(format!(
+ "{}",
+ e
+ ))
+ })?;
+ Ok(())
+ }
+
+ fn read_session(
+ &self,
+ identifier: gotham::middleware::session::SessionIdentifier,
+ ) -> Box<
+ dyn futures::Future<
+ Item = Option<Vec<u8>>,
+ Error = gotham::middleware::session::SessionError,
+ > + Send,
+ > {
+ if let Some(filename) = self.file_for_id(&identifier, true) {
+ Box::new(
+ tokio::fs::File::open(filename)
+ .and_then(|file| {
+ let buf = vec![];
+ tokio::io::read_to_end(file, buf)
+ })
+ .map(|(_, v)| Some(v))
+ .map_err(|e| {
+ gotham::middleware::session::SessionError::Backend(
+ format!("{}", e),
+ )
+ }),
+ )
+ } else {
+ Box::new(futures::future::ok(None))
+ }
+ }
+
+ fn drop_session(
+ &self,
+ identifier: gotham::middleware::session::SessionIdentifier,
+ ) -> std::result::Result<(), gotham::middleware::session::SessionError>
+ {
+ if let Some(filename) = self.file_for_id(&identifier, true) {
+ std::fs::remove_file(filename).map_err(|e| {
+ gotham::middleware::session::SessionError::Backend(format!(
+ "{}",
+ e
+ ))
+ })?;
+ }
+ Ok(())
+ }
+}
diff --git a/teleterm/src/web/list.rs b/teleterm/src/web/list.rs
index 9c1bcc6..0906f82 100644
--- a/teleterm/src/web/list.rs
+++ b/teleterm/src/web/list.rs
@@ -5,6 +5,19 @@ use gotham::state::FromState as _;
pub fn run(
state: gotham::state::State,
) -> (gotham::state::State, hyper::Response<hyper::Body>) {
+ let session = gotham::middleware::session::SessionData::<
+ crate::web::SessionData,
+ >::borrow_from(&state);
+ if session.username.is_none() {
+ return (
+ state,
+ hyper::Response::builder()
+ .status(hyper::StatusCode::FORBIDDEN)
+ .body(hyper::Body::empty())
+ .unwrap(),
+ );
+ }
+
let config = crate::web::Config::borrow_from(&state);
let (_, address) = config.server_address;
diff --git a/teleterm/src/web/login.rs b/teleterm/src/web/login.rs
new file mode 100644
index 0000000..a678b95
--- /dev/null
+++ b/teleterm/src/web/login.rs
@@ -0,0 +1,26 @@
+use gotham::state::FromState as _;
+
+#[derive(
+ serde::Deserialize,
+ gotham_derive::StateData,
+ gotham_derive::StaticResponseExtender,
+)]
+pub struct QueryParams {
+ username: Option<String>,
+}
+
+pub fn run(
+ mut state: gotham::state::State,
+) -> (gotham::state::State, hyper::Response<hyper::Body>) {
+ let username = {
+ let query_params = QueryParams::borrow_from(&state);
+ query_params.username.clone()
+ };
+ let session = gotham::middleware::session::SessionData::<
+ crate::web::SessionData,
+ >::borrow_mut_from(&mut state);
+
+ session.username = username;
+
+ (state, hyper::Response::new(hyper::Body::from("{}")))
+}
diff --git a/teleterm/src/web/watch.rs b/teleterm/src/web/watch.rs
index 720e9f8..74a59dd 100644
--- a/teleterm/src/web/watch.rs
+++ b/teleterm/src/web/watch.rs
@@ -15,6 +15,19 @@ pub struct QueryParams {
pub fn run(
mut state: gotham::state::State,
) -> (gotham::state::State, hyper::Response<hyper::Body>) {
+ let session = gotham::middleware::session::SessionData::<
+ crate::web::SessionData,
+ >::borrow_from(&state);
+ if session.username.is_none() {
+ return (
+ state,
+ hyper::Response::builder()
+ .status(hyper::StatusCode::FORBIDDEN)
+ .body(hyper::Body::empty())
+ .unwrap(),
+ );
+ }
+
let body = hyper::Body::take_from(&mut state);
let headers = hyper::HeaderMap::take_from(&mut state);
let config = crate::web::Config::borrow_from(&state);
diff --git a/teleterm/static/teleterm_web.js b/teleterm/static/teleterm_web.js
index 3b01bcc..6720290 100644
--- a/teleterm/static/teleterm_web.js
+++ b/teleterm/static/teleterm_web.js
@@ -1 +1 @@
-let wasm;const heap=new Array(32);heap.fill(undefined);heap.push(undefined,null,true,false);let heap_next=heap.length;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}function __wbg_elem_binding0(arg0,arg1,arg2){wasm.__wbg_function_table.get(52)(arg0,arg1,addHeapObject(arg2))}function __wbg_elem_binding1(arg0,arg1,arg2){wasm.__wbg_function_table.get(52)(arg0,arg1,addHeapObject(arg2))}function __wbg_elem_binding2(arg0,arg1,arg2){wasm.__wbg_function_table.get(52)(arg0,arg1,addHeapObject(arg2))}function __wbg_elem_binding3(arg0,arg1,arg2){wasm.__wbg_function_table.get(51)(arg0,arg1,arg2)}function __wbg_elem_binding4(arg0,arg1,arg2){wasm.__wbg_function_table.get(52)(arg0,arg1,addHeapObject(arg2))}function __wbg_elem_binding5(arg0,arg1){wasm.__wbg_function_table.get(31)(arg0,arg1)}function __wbg_elem_binding6(arg0,arg1,arg2){wasm.__wbg_function_table.get(52)(arg0,arg1,addHeapObject(arg2))}function __wbg_elem_binding7(arg0,arg1,arg2,arg3,arg4){wasm.__wbg_function_table.get(17)(arg0,arg1,addHeapObject(arg2),arg3,addHeapObject(arg4))}function __wbg_elem_binding8(arg0,arg1,arg2,arg3){wasm.__wbg_function_table.get(21)(arg0,arg1,addHeapObject(arg2),addHeapObject(arg3))}export function start(){wasm.start()}function getObject(idx){return heap[idx]}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}function notDefined(what){return()=>{throw new Error(`${what} is not defined`)}}function isLikeNone(x){return x===undefined||x===null}function handleError(e){wasm.__wbindgen_exn_store(addHeapObject(e))}let cachedTextDecoder=new TextDecoder("utf-8",{ignoreBOM:true,fatal:true});cachedTextDecoder.decode();let cachegetUint8Memory=null;function getUint8Memory(){if(cachegetUint8Memory===null||cachegetUint8Memory.buffer!==wasm.memory.buffer){cachegetUint8Memory=new Uint8Array(wasm.memory.buffer)}return cachegetUint8Memory}function getStringFromWasm(ptr,len){return cachedTextDecoder.decode(getUint8Memory().subarray(ptr,ptr+len))}let WASM_VECTOR_LEN=0;let 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 passStringToWasm(arg){let len=arg.length;let ptr=wasm.__wbindgen_malloc(len);const mem=getUint8Memory();let offset=0;for(;offset<len;offset++){const code=arg.charCodeAt(offset);if(code>127)break;mem[ptr+offset]=code}if(offset!==len){if(offset!==0){arg=arg.slice(offset)}ptr=wasm.__wbindgen_realloc(ptr,len,len=offset+arg.length*3);const view=getUint8Memory().subarray(ptr+offset,ptr+len);const ret=encodeString(arg,view);offset+=ret.written}WASM_VECTOR_LEN=offset;return ptr}let cachegetInt32Memory=null;function getInt32Memory(){if(cachegetInt32Memory===null||cachegetInt32Memory.buffer!==wasm.memory.buffer){cachegetInt32Memory=new Int32Array(wasm.memory.buffer)}return cachegetInt32Memory}let cachegetUint32Memory=null;function getUint32Memory(){if(cachegetUint32Memory===null||cachegetUint32Memory.buffer!==wasm.memory.buffer){cachegetUint32Memory=new Uint32Array(wasm.memory.buffer)}return cachegetUint32Memory}function debugString(val){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"}}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}const builtInMatches=/\[object ([^\]]+)\]/.exec(toString.call(val));let className;if(builtInMatches.length>1){className=builtInMatches[1]}else{return toString.call(val)}if(className=="Object"){try{return"Object("+JSON.stringify(val)+")"}catch(_){return"Object"}}if(val instanceof Error){return`${val.name}: ${val.message}\n${val.stack}`}return className}function init(module){if(typeof module==="undefined"){module=import.meta.url.replace(/\.js$/,"_bg.wasm")}let result;const imports={};imports.wbg={};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_object_drop_ref=function(arg0){takeObject(arg0)};imports.wbg.__wbg_clearTimeout_42a8676f07d366c5=typeof clearTimeout=="function"?clearTimeout:notDefined("clearTimeout");imports.wbg.__widl_f_first_child_Node=function(arg0){const ret=getObject(arg0).firstChild;return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__widl_f_next_sibling_Node=function(arg0){const ret=getObject(arg0).nextSibling;return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__widl_f_remove_child_Node=function(arg0,arg1){try{const ret=getObject(arg0).removeChild(getObject(arg1));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_create_text_node_Document=function(arg0,arg1,arg2){const ret=getObject(arg0).createTextNode(getStringFromWasm(arg1,arg2));return addHeapObject(ret)};imports.wbg.__widl_instanceof_Node=function(arg0){const ret=getObject(arg0)instanceof Node;return ret};imports.wbg.__widl_f_replace_child_Node=function(arg0,arg1,arg2){try{const ret=getObject(arg0).replaceChild(getObject(arg1),getObject(arg2));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_set_text_content_Node=function(arg0,arg1,arg2){getObject(arg0).textContent=arg1===0?undefined:getStringFromWasm(arg1,arg2)};imports.wbg.__wbindgen_object_clone_ref=function(arg0){const ret=getObject(arg0);return addHeapObject(ret)};imports.wbg.__widl_instanceof_Element=function(arg0){const ret=getObject(arg0)instanceof Element;return ret};imports.wbg.__widl_f_remove_attribute_Element=function(arg0,arg1,arg2){try{getObject(arg0).removeAttribute(getStringFromWasm(arg1,arg2))}catch(e){handleError(e)}};imports.wbg.__widl_f_status_text_Response=function(arg0,arg1){const ret=getObject(arg1).statusText;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_status_Response=function(arg0){const ret=getObject(arg0).status;return ret};imports.wbg.__wbindgen_string_get=function(arg0,arg1){const obj=getObject(arg0);if(typeof obj!=="string")return 0;const ptr=passStringToWasm(obj);getUint32Memory()[arg1/4]=WASM_VECTOR_LEN;const ret=ptr;return ret};imports.wbg.__wbg_new_59cb74e423758ede=function(){const ret=new Error;return addHeapObject(ret)};imports.wbg.__wbg_stack_558ba5917b466edd=function(arg0,arg1){const ret=getObject(arg1).stack;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__wbg_error_4bb6c2a97407129a=function(arg0,arg1){const v0=getStringFromWasm(arg0,arg1).slice();wasm.__wbindgen_free(arg0,arg1*1);console.error(v0)};imports.wbg.__wbindgen_string_new=function(arg0,arg1){const ret=getStringFromWasm(arg0,arg1);return addHeapObject(ret)};imports.wbg.__wbindgen_debug_string=function(arg0,arg1){const ret=debugString(getObject(arg1));const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_location_Window=function(arg0){const ret=getObject(arg0).location;return addHeapObject(ret)};imports.wbg.__widl_f_pathname_Location=function(arg0,arg1){try{const ret=getObject(arg1).pathname;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1}catch(e){handleError(e)}};imports.wbg.__widl_f_hash_Location=function(arg0,arg1){try{const ret=getObject(arg1).hash;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1}catch(e){handleError(e)}};imports.wbg.__widl_f_search_Location=function(arg0,arg1){try{const ret=getObject(arg1).search;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1}catch(e){handleError(e)}};imports.wbg.__widl_f_set_attribute_Element=function(arg0,arg1,arg2,arg3,arg4){try{getObject(arg0).setAttribute(getStringFromWasm(arg1,arg2),getStringFromWasm(arg3,arg4))}catch(e){handleError(e)}};imports.wbg.__widl_f_node_type_Node=function(arg0){const ret=getObject(arg0).nodeType;return ret};imports.wbg.__widl_f_append_child_Node=function(arg0,arg1){try{const ret=getObject(arg0).appendChild(getObject(arg1));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_insert_before_Node=function(arg0,arg1,arg2){try{const ret=getObject(arg0).insertBefore(getObject(arg1),getObject(arg2));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_cancel_animation_frame_Window=function(arg0,arg1){try{getObject(arg0).cancelAnimationFrame(arg1)}catch(e){handleError(e)}};imports.wbg.__widl_f_document_Window=function(arg0){const ret=getObject(arg0).document;return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__widl_instanceof_HTMLInputElement=function(arg0){const ret=getObject(arg0)instanceof HTMLInputElement;return ret};imports.wbg.__widl_instanceof_HTMLTextAreaElement=function(arg0){const ret=getObject(arg0)instanceof HTMLTextAreaElement;return ret};imports.wbg.__widl_instanceof_HTMLSelectElement=function(arg0){const ret=getObject(arg0)instanceof HTMLSelectElement;return ret};imports.wbg.__widl_instanceof_HTMLProgressElement=function(arg0){const ret=getObject(arg0)instanceof HTMLProgressElement;return ret};imports.wbg.__widl_instanceof_HTMLOptionElement=function(arg0){const ret=getObject(arg0)instanceof HTMLOptionElement;return ret};imports.wbg.__widl_instanceof_HTMLButtonElement=function(arg0){const ret=getObject(arg0)instanceof HTMLButtonElement;return ret};imports.wbg.__widl_instanceof_HTMLDataElement=function(arg0){const ret=getObject(arg0)instanceof HTMLDataElement;return ret};imports.wbg.__widl_instanceof_HTMLMeterElement=function(arg0){const ret=getObject(arg0)instanceof HTMLMeterElement;return ret};imports.wbg.__widl_instanceof_HTMLLIElement=function(arg0){const ret=getObject(arg0)instanceof HTMLLIElement;return ret};imports.wbg.__widl_instanceof_HTMLOutputElement=function(arg0){const ret=getObject(arg0)instanceof HTMLOutputElement;return ret};imports.wbg.__widl_instanceof_HTMLParamElement=function(arg0){const ret=getObject(arg0)instanceof HTMLParamElement;return ret};imports.wbg.__widl_f_type_HTMLInputElement=function(arg0,arg1){const ret=getObject(arg1).type;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_set_value_HTMLInputElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLTextAreaElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLSelectElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLProgressElement=function(arg0,arg1){getObject(arg0).value=arg1};imports.wbg.__widl_f_set_value_HTMLOptionElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLButtonElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLDataElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLMeterElement=function(arg0,arg1){getObject(arg0).value=arg1};imports.wbg.__widl_f_set_value_HTMLLIElement=function(arg0,arg1){getObject(arg0).value=arg1};imports.wbg.__widl_f_set_value_HTMLOutputElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLParamElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_instanceof_HTMLMenuItemElement=function(arg0){const ret=getObject(arg0)instanceof HTMLMenuItemElement;return ret};imports.wbg.__widl_f_set_checked_HTMLInputElement=function(arg0,arg1){getObject(arg0).checked=arg1!==0};imports.wbg.__widl_f_set_checked_HTMLMenuItemElement=function(arg0,arg1){getObject(arg0).checked=arg1!==0};imports.wbg.__widl_f_abort_AbortController=function(arg0){getObject(arg0).abort()};imports.wbg.__widl_f_error_1_=function(arg0){console.error(getObject(arg0))};imports.wbg.__widl_f_add_event_listener_with_callback_EventTarget=function(arg0,arg1,arg2,arg3){try{getObject(arg0).addEventListener(getStringFromWasm(arg1,arg2),getObject(arg3))}catch(e){handleError(e)}};imports.wbg.__widl_f_remove_event_listener_with_callback_EventTarget=function(arg0,arg1,arg2,arg3){try{getObject(arg0).removeEventListener(getStringFromWasm(arg1,arg2),getObject(arg3))}catch(e){handleError(e)}};imports.wbg.__widl_f_close_WebSocket=function(arg0){try{getObject(arg0).close()}catch(e){handleError(e)}};imports.wbg.__widl_f_create_element_Document=function(arg0,arg1,arg2){try{const ret=getObject(arg0).createElement(getStringFromWasm(arg1,arg2));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_create_element_ns_Document=function(arg0,arg1,arg2,arg3,arg4){try{const ret=getObject(arg0).createElementNS(arg1===0?undefined:getStringFromWasm(arg1,arg2),getStringFromWasm(arg3,arg4));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_instanceof_HTMLElement=function(arg0){const ret=getObject(arg0)instanceof HTMLElement;return ret};imports.wbg.__widl_f_focus_HTMLElement=function(arg0){try{getObject(arg0).focus()}catch(e){handleError(e)}};imports.wbg.__wbg_resolve_04ca3cb0d333a4f0=function(arg0){const ret=Promise.resolve(getObject(arg0));return addHeapObject(ret)};imports.wbg.__widl_f_request_animation_frame_Window=function(arg0,arg1){try{const ret=getObject(arg0).requestAnimationFrame(getObject(arg1));return ret}catch(e){handleError(e)}};imports.wbg.__wbg_static_accessor_TELETERM_CONFIG_82484f76e33c0b8c=function(){const ret=TELETERM_CONFIG;return addHeapObject(ret)};imports.wbg.__wbindgen_json_serialize=function(arg0,arg1){const obj=getObject(arg1);const ret=JSON.stringify(obj===undefined?null:obj);const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_target_Event=function(arg0){const ret=getObject(arg0).target;return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__widl_f_closest_Element=function(arg0,arg1,arg2){try{const ret=getObject(arg0).closest(getStringFromWasm(arg1,arg2));return isLikeNone(ret)?0:addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_tag_name_Element=function(arg0,arg1){const ret=getObject(arg1).tagName;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_get_attribute_Element=function(arg0,arg1,arg2,arg3){const ret=getObject(arg1).getAttribute(getStringFromWasm(arg2,arg3));const ptr0=isLikeNone(ret)?0:passStringToWasm(ret);const len0=WASM_VECTOR_LEN;const ret0=ptr0;const ret1=len0;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_prevent_default_Event=function(arg0){getObject(arg0).preventDefault()};imports.wbg.__wbindgen_json_parse=function(arg0,arg1){const ret=JSON.parse(getStringFromWasm(arg0,arg1));return addHeapObject(ret)};imports.wbg.__widl_f_history_Window=function(arg0){try{const ret=getObject(arg0).history;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_push_state_with_url_History=function(arg0,arg1,arg2,arg3,arg4,arg5){try{getObject(arg0).pushState(getObject(arg1),getStringFromWasm(arg2,arg3),arg4===0?undefined:getStringFromWasm(arg4,arg5))}catch(e){handleError(e)}};imports.wbg.__widl_instanceof_PopStateEvent=function(arg0){const ret=getObject(arg0)instanceof PopStateEvent;return ret};imports.wbg.__widl_f_state_PopStateEvent=function(arg0){const ret=getObject(arg0).state;return addHeapObject(ret)};imports.wbg.__widl_instanceof_HashChangeEvent=function(arg0){const ret=getObject(arg0)instanceof HashChangeEvent;return ret};imports.wbg.__widl_f_new_url_HashChangeEvent=function(arg0,arg1){const ret=getObject(arg1).newURL;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_get_attribute_names_Element=function(arg0){const ret=getObject(arg0).getAttributeNames();return addHeapObject(ret)};imports.wbg.__wbg_forEach_e651488daf2c21cc=function(arg0,arg1,arg2){const state0={a:arg1,b:arg2};const cb0=(arg0,arg1,arg2)=>{const a=state0.a;state0.a=0;try{return __wbg_elem_binding7(a,state0.b,arg0,arg1,arg2)}finally{state0.a=a}};try{getObject(arg0).forEach(cb0)}finally{state0.a=state0.b=0}};imports.wbg.__widl_f_namespace_uri_Element=function(arg0,arg1){const ret=getObject(arg1).namespaceURI;const ptr0=isLikeNone(ret)?0:passStringToWasm(ret);const len0=WASM_VECTOR_LEN;const ret0=ptr0;const ret1=len0;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_child_nodes_Node=function(arg0){const ret=getObject(arg0).childNodes;return addHeapObject(ret)};imports.wbg.__widl_f_length_NodeList=function(arg0){const ret=getObject(arg0).length;return ret};imports.wbg.__widl_f_get_NodeList=function(arg0,arg1){const ret=getObject(arg0)[arg1>>>0];return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__widl_f_text_content_Node=function(arg0,arg1){const ret=getObject(arg1).textContent;const ptr0=isLikeNone(ret)?0:passStringToWasm(ret);const len0=WASM_VECTOR_LEN;const ret0=ptr0;const ret1=len0;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__wbg_new_de17f04ab3be4063=function(){const ret=new Object;return addHeapObject(ret)};imports.wbg.__widl_f_new_Headers=function(){try{const ret=new Headers;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbg_set_e11a72d9733dadef=function(arg0,arg1,arg2){try{const ret=Reflect.set(getObject(arg0),getObject(arg1),getObject(arg2));return ret}catch(e){handleError(e)}};imports.wbg.__widl_f_append_Headers=function(arg0,arg1,arg2,arg3,arg4){try{getObject(arg0).append(getStringFromWasm(arg1,arg2),getStringFromWasm(arg3,arg4))}catch(e){handleError(e)}};imports.wbg.__wbg_setTimeout_53c0997134972ce3=function(arg0,arg1){const ret=setTimeout(getObject(arg0),arg1);return ret};imports.wbg.__widl_f_signal_AbortController=function(arg0){const ret=getObject(arg0).signal;return addHeapObject(ret)};imports.wbg.__widl_f_fetch_with_str_and_init_Window=function(arg0,arg1,arg2,arg3){const ret=getObject(arg0).fetch(getStringFromWasm(arg1,arg2),getObject(arg3));return addHeapObject(ret)};imports.wbg.__widl_f_text_Response=function(arg0){try{const ret=getObject(arg0).text();return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_query_selector_Document=function(arg0,arg1,arg2){try{const ret=getObject(arg0).querySelector(getStringFromWasm(arg1,arg2));return isLikeNone(ret)?0:addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_get_element_by_id_Document=function(arg0,arg1,arg2){const ret=getObject(arg0).getElementById(getStringFromWasm(arg1,arg2));return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__wbindgen_cb_forget=function(arg0){takeObject(arg0)};imports.wbg.__widl_f_new_AbortController=function(){try{const ret=new AbortController;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_new_WebSocket=function(arg0,arg1){try{const ret=new WebSocket(getStringFromWasm(arg0,arg1));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_set_onopen_WebSocket=function(arg0,arg1){getObject(arg0).onopen=getObject(arg1)};imports.wbg.__widl_f_set_onclose_WebSocket=function(arg0,arg1){getObject(arg0).onclose=getObject(arg1)};imports.wbg.__widl_f_set_onmessage_WebSocket=function(arg0,arg1){getObject(arg0).onmessage=getObject(arg1)};imports.wbg.__widl_f_set_onerror_WebSocket=function(arg0,arg1){getObject(arg0).onerror=getObject(arg1)};imports.wbg.__widl_f_data_MessageEvent=function(arg0){const ret=getObject(arg0).data;return addHeapObject(ret)};imports.wbg.__wbindgen_throw=function(arg0,arg1){throw new Error(getStringFromWasm(arg0,arg1))};imports.wbg.__wbg_new_5e8d465c199e6ff3=function(arg0,arg1){const state0={a:arg0,b:arg1};const cb0=(arg0,arg1)=>{const a=state0.a;state0.a=0;try{return __wbg_elem_binding8(a,state0.b,arg0,arg1)}finally{state0.a=a}};try{const ret=new Promise(cb0);return addHeapObject(ret)}finally{state0.a=state0.b=0}};imports.wbg.__wbg_call_34f87007c5d2a397=function(arg0,arg1,arg2){try{const ret=getObject(arg0).call(getObject(arg1),getObject(arg2));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbg_then_486e2e2b1fb1bbf4=function(arg0,arg1,arg2){const ret=getObject(arg0).then(getObject(arg1),getObject(arg2));return addHeapObject(ret)};imports.wbg.__wbg_then_1fa2e92ee4bdbc93=function(arg0,arg1){const ret=getObject(arg0).then(getObject(arg1));return addHeapObject(ret)};imports.wbg.__wbg_globalThis_4fa2faeae7a7a380=function(){try{const ret=globalThis.globalThis;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbg_self_ed02073ec1d8fef4=function(){try{const ret=self.self;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbg_window_356847be61f4a80f=function(){try{const ret=window.window;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbg_global_6580a67633b0dbc1=function(){try{const ret=global.global;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbindgen_is_undefined=function(arg0){const ret=getObject(arg0)===undefined;return ret};imports.wbg.__wbg_newnoargs_0c3c518a7f7c56bf=function(arg0,arg1){const ret=new Function(getStringFromWasm(arg0,arg1));return addHeapObject(ret)};imports.wbg.__wbg_call_aa56d0132fec7569=function(arg0,arg1){try{const ret=getObject(arg0).call(getObject(arg1));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_instanceof_Window=function(arg0){const ret=getObject(arg0)instanceof Window;return ret};imports.wbg.__widl_f_debug_1_=function(arg0){console.debug(getObject(arg0))};imports.wbg.__widl_f_info_1_=function(arg0){console.info(getObject(arg0))};imports.wbg.__widl_f_log_1_=function(arg0){console.log(getObject(arg0))};imports.wbg.__widl_f_warn_1_=function(arg0){console.warn(getObject(arg0))};imports.wbg.__wbindgen_closure_wrapper693=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding0(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(32)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper669=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding3(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(32)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper502=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=()=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding5(a,state.b)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(32)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper688=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding1(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(32)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper608=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding2(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(32)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper696=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding4(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(32)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper777=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding6(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(32)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};if(typeof URL==="function"&&module instanceof URL||typeof module==="string"||typeof Request==="function"&&module instanceof Request){const response=fetch(module);if(typeof WebAssembly.instantiateStreaming==="function"){result=WebAssembly.instantiateStreaming(response,imports).catch(e=>{return response.then(r=>{if(r.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);return r.arrayBuffer()}else{throw e}}).then(bytes=>WebAssembly.instantiate(bytes,imports))})}else{result=response.then(r=>r.arrayBuffer()).then(bytes=>WebAssembly.instantiate(bytes,imports))}}else{result=WebAssembly.instantiate(module,imports).then(result=>{if(result instanceof WebAssembly.Instance){return{instance:result,module:module}}else{return result}})}return result.then(({instance:instance,module:module})=>{wasm=instance.exports;init.__wbindgen_wasm_module=module;wasm.__wbindgen_start();return wasm})}export default init;
+let wasm;const heap=new Array(32);heap.fill(undefined);heap.push(undefined,null,true,false);let heap_next=heap.length;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}function __wbg_elem_binding0(arg0,arg1,arg2){wasm.__wbg_function_table.get(53)(arg0,arg1,addHeapObject(arg2))}function __wbg_elem_binding1(arg0,arg1,arg2){wasm.__wbg_function_table.get(53)(arg0,arg1,addHeapObject(arg2))}function __wbg_elem_binding2(arg0,arg1,arg2){wasm.__wbg_function_table.get(53)(arg0,arg1,addHeapObject(arg2))}function __wbg_elem_binding3(arg0,arg1,arg2){wasm.__wbg_function_table.get(53)(arg0,arg1,addHeapObject(arg2))}function __wbg_elem_binding4(arg0,arg1,arg2){wasm.__wbg_function_table.get(53)(arg0,arg1,addHeapObject(arg2))}function __wbg_elem_binding5(arg0,arg1,arg2){wasm.__wbg_function_table.get(51)(arg0,arg1,arg2)}function __wbg_elem_binding6(arg0,arg1){wasm.__wbg_function_table.get(32)(arg0,arg1)}function __wbg_elem_binding7(arg0,arg1,arg2,arg3,arg4){wasm.__wbg_function_table.get(18)(arg0,arg1,addHeapObject(arg2),arg3,addHeapObject(arg4))}function __wbg_elem_binding8(arg0,arg1,arg2,arg3){wasm.__wbg_function_table.get(22)(arg0,arg1,addHeapObject(arg2),addHeapObject(arg3))}export function start(){wasm.start()}function getObject(idx){return heap[idx]}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}function notDefined(what){return()=>{throw new Error(`${what} is not defined`)}}function isLikeNone(x){return x===undefined||x===null}function handleError(e){wasm.__wbindgen_exn_store(addHeapObject(e))}let cachedTextDecoder=new TextDecoder("utf-8",{ignoreBOM:true,fatal:true});cachedTextDecoder.decode();let cachegetUint8Memory=null;function getUint8Memory(){if(cachegetUint8Memory===null||cachegetUint8Memory.buffer!==wasm.memory.buffer){cachegetUint8Memory=new Uint8Array(wasm.memory.buffer)}return cachegetUint8Memory}function getStringFromWasm(ptr,len){return cachedTextDecoder.decode(getUint8Memory().subarray(ptr,ptr+len))}let WASM_VECTOR_LEN=0;let 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 passStringToWasm(arg){let len=arg.length;let ptr=wasm.__wbindgen_malloc(len);const mem=getUint8Memory();let offset=0;for(;offset<len;offset++){const code=arg.charCodeAt(offset);if(code>127)break;mem[ptr+offset]=code}if(offset!==len){if(offset!==0){arg=arg.slice(offset)}ptr=wasm.__wbindgen_realloc(ptr,len,len=offset+arg.length*3);const view=getUint8Memory().subarray(ptr+offset,ptr+len);const ret=encodeString(arg,view);offset+=ret.written}WASM_VECTOR_LEN=offset;return ptr}let cachegetInt32Memory=null;function getInt32Memory(){if(cachegetInt32Memory===null||cachegetInt32Memory.buffer!==wasm.memory.buffer){cachegetInt32Memory=new Int32Array(wasm.memory.buffer)}return cachegetInt32Memory}function debugString(val){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"}}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}const builtInMatches=/\[object ([^\]]+)\]/.exec(toString.call(val));let className;if(builtInMatches.length>1){className=builtInMatches[1]}else{return toString.call(val)}if(className=="Object"){try{return"Object("+JSON.stringify(val)+")"}catch(_){return"Object"}}if(val instanceof Error){return`${val.name}: ${val.message}\n${val.stack}`}return className}let cachegetUint32Memory=null;function getUint32Memory(){if(cachegetUint32Memory===null||cachegetUint32Memory.buffer!==wasm.memory.buffer){cachegetUint32Memory=new Uint32Array(wasm.memory.buffer)}return cachegetUint32Memory}function init(module){if(typeof module==="undefined"){module=import.meta.url.replace(/\.js$/,"_bg.wasm")}let result;const imports={};imports.wbg={};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_object_drop_ref=function(arg0){takeObject(arg0)};imports.wbg.__wbg_clearTimeout_42a8676f07d366c5=typeof clearTimeout=="function"?clearTimeout:notDefined("clearTimeout");imports.wbg.__widl_f_first_child_Node=function(arg0){const ret=getObject(arg0).firstChild;return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__widl_f_next_sibling_Node=function(arg0){const ret=getObject(arg0).nextSibling;return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__widl_f_remove_child_Node=function(arg0,arg1){try{const ret=getObject(arg0).removeChild(getObject(arg1));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_create_text_node_Document=function(arg0,arg1,arg2){const ret=getObject(arg0).createTextNode(getStringFromWasm(arg1,arg2));return addHeapObject(ret)};imports.wbg.__widl_instanceof_Node=function(arg0){const ret=getObject(arg0)instanceof Node;return ret};imports.wbg.__widl_f_replace_child_Node=function(arg0,arg1,arg2){try{const ret=getObject(arg0).replaceChild(getObject(arg1),getObject(arg2));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_set_text_content_Node=function(arg0,arg1,arg2){getObject(arg0).textContent=arg1===0?undefined:getStringFromWasm(arg1,arg2)};imports.wbg.__wbindgen_object_clone_ref=function(arg0){const ret=getObject(arg0);return addHeapObject(ret)};imports.wbg.__widl_instanceof_Element=function(arg0){const ret=getObject(arg0)instanceof Element;return ret};imports.wbg.__widl_f_remove_attribute_Element=function(arg0,arg1,arg2){try{getObject(arg0).removeAttribute(getStringFromWasm(arg1,arg2))}catch(e){handleError(e)}};imports.wbg.__wbg_new_59cb74e423758ede=function(){const ret=new Error;return addHeapObject(ret)};imports.wbg.__wbg_stack_558ba5917b466edd=function(arg0,arg1){const ret=getObject(arg1).stack;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__wbg_error_4bb6c2a97407129a=function(arg0,arg1){const v0=getStringFromWasm(arg0,arg1).slice();wasm.__wbindgen_free(arg0,arg1*1);console.error(v0)};imports.wbg.__wbindgen_string_new=function(arg0,arg1){const ret=getStringFromWasm(arg0,arg1);return addHeapObject(ret)};imports.wbg.__wbindgen_debug_string=function(arg0,arg1){const ret=debugString(getObject(arg1));const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_location_Window=function(arg0){const ret=getObject(arg0).location;return addHeapObject(ret)};imports.wbg.__widl_f_pathname_Location=function(arg0,arg1){try{const ret=getObject(arg1).pathname;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1}catch(e){handleError(e)}};imports.wbg.__widl_f_hash_Location=function(arg0,arg1){try{const ret=getObject(arg1).hash;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1}catch(e){handleError(e)}};imports.wbg.__widl_f_search_Location=function(arg0,arg1){try{const ret=getObject(arg1).search;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1}catch(e){handleError(e)}};imports.wbg.__widl_f_set_attribute_Element=function(arg0,arg1,arg2,arg3,arg4){try{getObject(arg0).setAttribute(getStringFromWasm(arg1,arg2),getStringFromWasm(arg3,arg4))}catch(e){handleError(e)}};imports.wbg.__widl_f_node_type_Node=function(arg0){const ret=getObject(arg0).nodeType;return ret};imports.wbg.__widl_f_append_child_Node=function(arg0,arg1){try{const ret=getObject(arg0).appendChild(getObject(arg1));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_insert_before_Node=function(arg0,arg1,arg2){try{const ret=getObject(arg0).insertBefore(getObject(arg1),getObject(arg2));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_cancel_animation_frame_Window=function(arg0,arg1){try{getObject(arg0).cancelAnimationFrame(arg1)}catch(e){handleError(e)}};imports.wbg.__widl_f_document_Window=function(arg0){const ret=getObject(arg0).document;return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__widl_instanceof_HTMLInputElement=function(arg0){const ret=getObject(arg0)instanceof HTMLInputElement;return ret};imports.wbg.__widl_instanceof_HTMLTextAreaElement=function(arg0){const ret=getObject(arg0)instanceof HTMLTextAreaElement;return ret};imports.wbg.__widl_instanceof_HTMLSelectElement=function(arg0){const ret=getObject(arg0)instanceof HTMLSelectElement;return ret};imports.wbg.__widl_instanceof_HTMLProgressElement=function(arg0){const ret=getObject(arg0)instanceof HTMLProgressElement;return ret};imports.wbg.__widl_instanceof_HTMLOptionElement=function(arg0){const ret=getObject(arg0)instanceof HTMLOptionElement;return ret};imports.wbg.__widl_instanceof_HTMLButtonElement=function(arg0){const ret=getObject(arg0)instanceof HTMLButtonElement;return ret};imports.wbg.__widl_instanceof_HTMLDataElement=function(arg0){const ret=getObject(arg0)instanceof HTMLDataElement;return ret};imports.wbg.__widl_instanceof_HTMLMeterElement=function(arg0){const ret=getObject(arg0)instanceof HTMLMeterElement;return ret};imports.wbg.__widl_instanceof_HTMLLIElement=function(arg0){const ret=getObject(arg0)instanceof HTMLLIElement;return ret};imports.wbg.__widl_instanceof_HTMLOutputElement=function(arg0){const ret=getObject(arg0)instanceof HTMLOutputElement;return ret};imports.wbg.__widl_instanceof_HTMLParamElement=function(arg0){const ret=getObject(arg0)instanceof HTMLParamElement;return ret};imports.wbg.__widl_f_type_HTMLInputElement=function(arg0,arg1){const ret=getObject(arg1).type;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_set_value_HTMLInputElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLTextAreaElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLSelectElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLProgressElement=function(arg0,arg1){getObject(arg0).value=arg1};imports.wbg.__widl_f_set_value_HTMLOptionElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLButtonElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLDataElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLMeterElement=function(arg0,arg1){getObject(arg0).value=arg1};imports.wbg.__widl_f_set_value_HTMLLIElement=function(arg0,arg1){getObject(arg0).value=arg1};imports.wbg.__widl_f_set_value_HTMLOutputElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_f_set_value_HTMLParamElement=function(arg0,arg1,arg2){getObject(arg0).value=getStringFromWasm(arg1,arg2)};imports.wbg.__widl_instanceof_HTMLMenuItemElement=function(arg0){const ret=getObject(arg0)instanceof HTMLMenuItemElement;return ret};imports.wbg.__widl_f_set_checked_HTMLInputElement=function(arg0,arg1){getObject(arg0).checked=arg1!==0};imports.wbg.__widl_f_set_checked_HTMLMenuItemElement=function(arg0,arg1){getObject(arg0).checked=arg1!==0};imports.wbg.__widl_f_abort_AbortController=function(arg0){getObject(arg0).abort()};imports.wbg.__widl_f_new_AbortController=function(){try{const ret=new AbortController;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_add_event_listener_with_callback_EventTarget=function(arg0,arg1,arg2,arg3){try{getObject(arg0).addEventListener(getStringFromWasm(arg1,arg2),getObject(arg3))}catch(e){handleError(e)}};imports.wbg.__widl_f_remove_event_listener_with_callback_EventTarget=function(arg0,arg1,arg2,arg3){try{getObject(arg0).removeEventListener(getStringFromWasm(arg1,arg2),getObject(arg3))}catch(e){handleError(e)}};imports.wbg.__widl_f_error_1_=function(arg0){console.error(getObject(arg0))};imports.wbg.__widl_f_close_WebSocket=function(arg0){try{getObject(arg0).close()}catch(e){handleError(e)}};imports.wbg.__widl_f_create_element_Document=function(arg0,arg1,arg2){try{const ret=getObject(arg0).createElement(getStringFromWasm(arg1,arg2));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_create_element_ns_Document=function(arg0,arg1,arg2,arg3,arg4){try{const ret=getObject(arg0).createElementNS(arg1===0?undefined:getStringFromWasm(arg1,arg2),getStringFromWasm(arg3,arg4));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_instanceof_HTMLElement=function(arg0){const ret=getObject(arg0)instanceof HTMLElement;return ret};imports.wbg.__widl_f_focus_HTMLElement=function(arg0){try{getObject(arg0).focus()}catch(e){handleError(e)}};imports.wbg.__wbg_new_de17f04ab3be4063=function(){const ret=new Object;return addHeapObject(ret)};imports.wbg.__widl_f_new_Headers=function(){try{const ret=new Headers;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbg_set_e11a72d9733dadef=function(arg0,arg1,arg2){try{const ret=Reflect.set(getObject(arg0),getObject(arg1),getObject(arg2));return ret}catch(e){handleError(e)}};imports.wbg.__widl_f_append_Headers=function(arg0,arg1,arg2,arg3,arg4){try{getObject(arg0).append(getStringFromWasm(arg1,arg2),getStringFromWasm(arg3,arg4))}catch(e){handleError(e)}};imports.wbg.__wbg_setTimeout_53c0997134972ce3=function(arg0,arg1){const ret=setTimeout(getObject(arg0),arg1);return ret};imports.wbg.__widl_f_signal_AbortController=function(arg0){const ret=getObject(arg0).signal;return addHeapObject(ret)};imports.wbg.__widl_f_fetch_with_str_and_init_Window=function(arg0,arg1,arg2,arg3){const ret=getObject(arg0).fetch(getStringFromWasm(arg1,arg2),getObject(arg3));return addHeapObject(ret)};imports.wbg.__widl_f_text_Response=function(arg0){try{const ret=getObject(arg0).text();return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_status_text_Response=function(arg0,arg1){const ret=getObject(arg1).statusText;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_status_Response=function(arg0){const ret=getObject(arg0).status;return ret};imports.wbg.__wbindgen_string_get=function(arg0,arg1){const obj=getObject(arg0);if(typeof obj!=="string")return 0;const ptr=passStringToWasm(obj);getUint32Memory()[arg1/4]=WASM_VECTOR_LEN;const ret=ptr;return ret};imports.wbg.__wbg_resolve_04ca3cb0d333a4f0=function(arg0){const ret=Promise.resolve(getObject(arg0));return addHeapObject(ret)};imports.wbg.__widl_f_request_animation_frame_Window=function(arg0,arg1){try{const ret=getObject(arg0).requestAnimationFrame(getObject(arg1));return ret}catch(e){handleError(e)}};imports.wbg.__wbg_static_accessor_TELETERM_CONFIG_82484f76e33c0b8c=function(){const ret=TELETERM_CONFIG;return addHeapObject(ret)};imports.wbg.__wbindgen_json_serialize=function(arg0,arg1){const obj=getObject(arg1);const ret=JSON.stringify(obj===undefined?null:obj);const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_instanceof_PopStateEvent=function(arg0){const ret=getObject(arg0)instanceof PopStateEvent;return ret};imports.wbg.__widl_f_state_PopStateEvent=function(arg0){const ret=getObject(arg0).state;return addHeapObject(ret)};imports.wbg.__widl_instanceof_HashChangeEvent=function(arg0){const ret=getObject(arg0)instanceof HashChangeEvent;return ret};imports.wbg.__widl_f_new_url_HashChangeEvent=function(arg0,arg1){const ret=getObject(arg1).newURL;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_target_Event=function(arg0){const ret=getObject(arg0).target;return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__widl_f_closest_Element=function(arg0,arg1,arg2){try{const ret=getObject(arg0).closest(getStringFromWasm(arg1,arg2));return isLikeNone(ret)?0:addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_tag_name_Element=function(arg0,arg1){const ret=getObject(arg1).tagName;const ret0=passStringToWasm(ret);const ret1=WASM_VECTOR_LEN;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_get_attribute_Element=function(arg0,arg1,arg2,arg3){const ret=getObject(arg1).getAttribute(getStringFromWasm(arg2,arg3));const ptr0=isLikeNone(ret)?0:passStringToWasm(ret);const len0=WASM_VECTOR_LEN;const ret0=ptr0;const ret1=len0;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_prevent_default_Event=function(arg0){getObject(arg0).preventDefault()};imports.wbg.__wbindgen_json_parse=function(arg0,arg1){const ret=JSON.parse(getStringFromWasm(arg0,arg1));return addHeapObject(ret)};imports.wbg.__widl_f_history_Window=function(arg0){try{const ret=getObject(arg0).history;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_push_state_with_url_History=function(arg0,arg1,arg2,arg3,arg4,arg5){try{getObject(arg0).pushState(getObject(arg1),getStringFromWasm(arg2,arg3),arg4===0?undefined:getStringFromWasm(arg4,arg5))}catch(e){handleError(e)}};imports.wbg.__widl_f_new_WebSocket=function(arg0,arg1){try{const ret=new WebSocket(getStringFromWasm(arg0,arg1));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_set_onopen_WebSocket=function(arg0,arg1){getObject(arg0).onopen=getObject(arg1)};imports.wbg.__wbindgen_cb_forget=function(arg0){takeObject(arg0)};imports.wbg.__widl_f_set_onclose_WebSocket=function(arg0,arg1){getObject(arg0).onclose=getObject(arg1)};imports.wbg.__widl_f_set_onmessage_WebSocket=function(arg0,arg1){getObject(arg0).onmessage=getObject(arg1)};imports.wbg.__widl_f_set_onerror_WebSocket=function(arg0,arg1){getObject(arg0).onerror=getObject(arg1)};imports.wbg.__widl_f_data_MessageEvent=function(arg0){const ret=getObject(arg0).data;return addHeapObject(ret)};imports.wbg.__widl_f_get_attribute_names_Element=function(arg0){const ret=getObject(arg0).getAttributeNames();return addHeapObject(ret)};imports.wbg.__wbg_forEach_e651488daf2c21cc=function(arg0,arg1,arg2){const state0={a:arg1,b:arg2};const cb0=(arg0,arg1,arg2)=>{const a=state0.a;state0.a=0;try{return __wbg_elem_binding7(a,state0.b,arg0,arg1,arg2)}finally{state0.a=a}};try{getObject(arg0).forEach(cb0)}finally{state0.a=state0.b=0}};imports.wbg.__widl_f_namespace_uri_Element=function(arg0,arg1){const ret=getObject(arg1).namespaceURI;const ptr0=isLikeNone(ret)?0:passStringToWasm(ret);const len0=WASM_VECTOR_LEN;const ret0=ptr0;const ret1=len0;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_child_nodes_Node=function(arg0){const ret=getObject(arg0).childNodes;return addHeapObject(ret)};imports.wbg.__widl_f_length_NodeList=function(arg0){const ret=getObject(arg0).length;return ret};imports.wbg.__widl_f_get_NodeList=function(arg0,arg1){const ret=getObject(arg0)[arg1>>>0];return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__widl_f_text_content_Node=function(arg0,arg1){const ret=getObject(arg1).textContent;const ptr0=isLikeNone(ret)?0:passStringToWasm(ret);const len0=WASM_VECTOR_LEN;const ret0=ptr0;const ret1=len0;getInt32Memory()[arg0/4+0]=ret0;getInt32Memory()[arg0/4+1]=ret1};imports.wbg.__widl_f_query_selector_Document=function(arg0,arg1,arg2){try{const ret=getObject(arg0).querySelector(getStringFromWasm(arg1,arg2));return isLikeNone(ret)?0:addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_f_get_element_by_id_Document=function(arg0,arg1,arg2){const ret=getObject(arg0).getElementById(getStringFromWasm(arg1,arg2));return isLikeNone(ret)?0:addHeapObject(ret)};imports.wbg.__wbindgen_throw=function(arg0,arg1){throw new Error(getStringFromWasm(arg0,arg1))};imports.wbg.__wbg_new_5e8d465c199e6ff3=function(arg0,arg1){const state0={a:arg0,b:arg1};const cb0=(arg0,arg1)=>{const a=state0.a;state0.a=0;try{return __wbg_elem_binding8(a,state0.b,arg0,arg1)}finally{state0.a=a}};try{const ret=new Promise(cb0);return addHeapObject(ret)}finally{state0.a=state0.b=0}};imports.wbg.__wbg_call_34f87007c5d2a397=function(arg0,arg1,arg2){try{const ret=getObject(arg0).call(getObject(arg1),getObject(arg2));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbg_then_486e2e2b1fb1bbf4=function(arg0,arg1,arg2){const ret=getObject(arg0).then(getObject(arg1),getObject(arg2));return addHeapObject(ret)};imports.wbg.__wbg_then_1fa2e92ee4bdbc93=function(arg0,arg1){const ret=getObject(arg0).then(getObject(arg1));return addHeapObject(ret)};imports.wbg.__wbg_globalThis_4fa2faeae7a7a380=function(){try{const ret=globalThis.globalThis;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbg_self_ed02073ec1d8fef4=function(){try{const ret=self.self;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbg_window_356847be61f4a80f=function(){try{const ret=window.window;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbg_global_6580a67633b0dbc1=function(){try{const ret=global.global;return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__wbindgen_is_undefined=function(arg0){const ret=getObject(arg0)===undefined;return ret};imports.wbg.__wbg_newnoargs_0c3c518a7f7c56bf=function(arg0,arg1){const ret=new Function(getStringFromWasm(arg0,arg1));return addHeapObject(ret)};imports.wbg.__wbg_call_aa56d0132fec7569=function(arg0,arg1){try{const ret=getObject(arg0).call(getObject(arg1));return addHeapObject(ret)}catch(e){handleError(e)}};imports.wbg.__widl_instanceof_Window=function(arg0){const ret=getObject(arg0)instanceof Window;return ret};imports.wbg.__widl_f_debug_1_=function(arg0){console.debug(getObject(arg0))};imports.wbg.__widl_f_info_1_=function(arg0){console.info(getObject(arg0))};imports.wbg.__widl_f_log_1_=function(arg0){console.log(getObject(arg0))};imports.wbg.__widl_f_warn_1_=function(arg0){console.warn(getObject(arg0))};imports.wbg.__wbindgen_closure_wrapper793=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding3(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(33)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper686=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding0(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(33)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper703=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding1(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(33)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper691=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding4(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(33)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper589=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding2(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(33)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper494=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=()=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding6(a,state.b)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(33)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};imports.wbg.__wbindgen_closure_wrapper679=function(arg0,arg1,arg2){const state={a:arg0,b:arg1,cnt:1};const real=arg0=>{state.cnt++;const a=state.a;state.a=0;try{return __wbg_elem_binding5(a,state.b,arg0)}finally{if(--state.cnt===0)wasm.__wbg_function_table.get(33)(a,state.b);else state.a=a}};real.original=state;const ret=real;return addHeapObject(ret)};if(typeof URL==="function"&&module instanceof URL||typeof module==="string"||typeof Request==="function"&&module instanceof Request){const response=fetch(module);if(typeof WebAssembly.instantiateStreaming==="function"){result=WebAssembly.instantiateStreaming(response,imports).catch(e=>{return response.then(r=>{if(r.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);return r.arrayBuffer()}else{throw e}}).then(bytes=>WebAssembly.instantiate(bytes,imports))})}else{result=response.then(r=>r.arrayBuffer()).then(bytes=>WebAssembly.instantiate(bytes,imports))}}else{result=WebAssembly.instantiate(module,imports).then(result=>{if(result instanceof WebAssembly.Instance){return{instance:result,module:module}}else{return result}})}return result.then(({instance:instance,module:module})=>{wasm=instance.exports;init.__wbindgen_wasm_module=module;wasm.__wbindgen_start();return wasm})}export default init;
diff --git a/teleterm/static/teleterm_web_bg.wasm b/teleterm/static/teleterm_web_bg.wasm
index a82a112..ba2c61c 100644
--- a/teleterm/static/teleterm_web_bg.wasm
+++ b/teleterm/static/teleterm_web_bg.wasm
Binary files differ