diff --git a/Cargo.lock b/Cargo.lock index ab7093a..9ce977d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,10 +88,14 @@ version = "3.0.0-beta.2" dependencies = [ "anyhow", "avt", + "axum", "clap", "config", + "futures-util", + "mime_guess", "nix", "reqwest", + "rust-embed", "rustyline", "scraper", "serde", @@ -99,6 +103,9 @@ dependencies = [ "signal-hook", "tempfile", "termion", + "tokio", + "tokio-stream", + "tower-http", "uuid", "which", ] @@ -143,6 +150,64 @@ dependencies = [ "serde", ] +[[package]] +name = "axum" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e" +dependencies = [ + "async-trait", + "axum-core", + "base64", + "bytes", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.1.0", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sha1", + "sync_wrapper", + "tokio", + "tokio-tungstenite", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "backtrace" version = "0.3.69" @@ -176,6 +241,15 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "bumpalo" version = "3.14.0" @@ -307,6 +381,15 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.3.2" @@ -316,6 +399,16 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "cssparser" version = "0.29.6" @@ -343,6 +436,12 @@ dependencies = [ "syn 2.0.38", ] +[[package]] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" + [[package]] name = "derive_more" version = "0.99.17" @@ -356,6 +455,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "dlv-list" version = "0.3.0" @@ -489,36 +598,49 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-io" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] [[package]] name = "futures-sink" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", "futures-io", + "futures-macro", + "futures-sink", "futures-task", "memchr", "pin-project-lite", @@ -535,6 +657,16 @@ dependencies = [ "byteorder", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -574,7 +706,26 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.11", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31d030e59af851932b72ceebadf4a2b5986dba4c3b99dd2493f8273a0f151943" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 1.0.0", "indexmap", "slab", "tokio", @@ -643,6 +794,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -650,7 +812,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.11", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.0.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" +dependencies = [ + "bytes", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", "pin-project-lite", ] @@ -676,9 +861,9 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2", - "http", - "http-body", + "h2 0.3.24", + "http 0.2.11", + "http-body 0.4.6", "httparse", "httpdate", "itoa", @@ -690,6 +875,25 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5aa53871fc917b1a9ed87b683a5d86db645e23acb32c2e0785a353e522fb75" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.2", + "http 1.0.0", + "http-body 1.0.0", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "tokio", +] + [[package]] name = "hyper-rustls" version = "0.24.2" @@ -697,13 +901,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http", - "hyper", + "http 0.2.11", + "hyper 0.14.28", "rustls", "tokio", "tokio-rustls", ] +[[package]] +name = "hyper-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdea9aac0dbe5a9240d68cfd9501e2db94222c6dc06843e06640b9e07f0fdc67" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.0.0", + "http-body 1.0.0", + "hyper 1.1.0", + "pin-project-lite", + "socket2", + "tokio", + "tracing", +] + [[package]] name = "idna" version = "0.5.0" @@ -805,6 +1027,12 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + [[package]] name = "memchr" version = "2.6.4" @@ -844,9 +1072,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", @@ -1063,6 +1291,26 @@ dependencies = [ "siphasher", ] +[[package]] +name = "pin-project" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "pin-project-lite" version = "0.2.13" @@ -1241,10 +1489,10 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", - "http", - "http-body", - "hyper", + "h2 0.3.24", + "http 0.2.11", + "http-body 0.4.6", + "hyper 0.14.28", "hyper-rustls", "ipnet", "js-sys", @@ -1295,6 +1543,40 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "rust-embed" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82c0bbc10308ed323529fd3c1dce8badda635aa319a5ff0e6466f33b8101e3f" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6227c01b1783cdfee1bcf844eb44594cd16ec71c35305bf1c9fb5aade2735e16" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.38", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cb0a25bfbb2d4b4402179c2cf030387d9990857ce08a32592c6238db9fa8665" +dependencies = [ + "sha2", + "walkdir", +] + [[package]] name = "rust-ini" version = "0.18.0" @@ -1364,6 +1646,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + [[package]] name = "rustyline" version = "13.0.0" @@ -1392,6 +1680,15 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -1478,6 +1775,16 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335" +dependencies = [ + "itoa", + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -1500,6 +1807,28 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "signal-hook" version = "0.3.17" @@ -1616,6 +1945,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "system-configuration" version = "0.5.1" @@ -1673,6 +2008,26 @@ dependencies = [ "redox_termios", ] +[[package]] +name = "thiserror" +version = "1.0.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e3de26b0965292219b4287ff031fcba86837900fe9cd2b34ea8ad893c0953d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "268026685b2be38d7103e9e507c938a1fcb3d7e6eb15e87870b617bf37b6d581" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -1690,20 +2045,34 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.33.0" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ "backtrace", "bytes", "libc", "mio", "num_cpus", + "parking_lot", "pin-project-lite", + "signal-hook-registry", "socket2", + "tokio-macros", "windows-sys 0.48.0", ] +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.38", +] + [[package]] name = "tokio-rustls" version = "0.24.1" @@ -1714,6 +2083,30 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-stream" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + [[package]] name = "tokio-util" version = "0.7.10" @@ -1737,6 +2130,44 @@ dependencies = [ "serde", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0da193277a4e2c33e59e09b5861580c33dd0a637c3883d0fa74ba40c0374af2e" +dependencies = [ + "bitflags 2.4.1", + "bytes", + "http 1.0.0", + "http-body 1.0.0", + "http-body-util", + "pin-project-lite", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -1749,6 +2180,7 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", "tracing-core", ] @@ -1768,6 +2200,31 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 1.0.0", + "httparse", + "log", + "rand 0.8.5", + "sha1", + "thiserror", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + [[package]] name = "unicase" version = "2.7.0" @@ -1854,6 +2311,16 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -1986,6 +2453,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index 3b2df63..2584bd4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,3 +26,10 @@ which = "5.0.0" tempfile = "3.9.0" scraper = { version = "0.15.0", default-features = false } avt = "0.9.0" +axum = { version = "0.7.4", features = ["ws"] } +tokio = { version = "1.35.1", features = ["full"] } +futures-util = "0.3.30" +tokio-stream = { version = "0.1.14", features = ["sync"] } +rust-embed = "8.2.0" +mime_guess = "2.0.4" +tower-http = "0.5.1" diff --git a/assets/asciinema-player.css b/assets/asciinema-player.css new file mode 100644 index 0000000..e7b48cb --- /dev/null +++ b/assets/asciinema-player.css @@ -0,0 +1,2835 @@ +div.ap-wrapper { + outline: none; + height: 100%; + display: flex; + justify-content: center; +} +div.ap-wrapper .title-bar { + display: none; + top: -78px; + transition: top 0.15s linear; + position: absolute; + left: 0; + right: 0; + box-sizing: content-box; + font-size: 20px; + line-height: 1em; + padding: 15px; + font-family: sans-serif; + color: white; + background-color: rgba(0, 0, 0, 0.8); +} +div.ap-wrapper .title-bar img { + vertical-align: middle; + height: 48px; + margin-right: 16px; +} +div.ap-wrapper .title-bar a { + color: white; + text-decoration: underline; +} +div.ap-wrapper .title-bar a:hover { + text-decoration: none; +} +div.ap-wrapper:fullscreen { + background-color: #000; + width: 100%; + align-items: center; +} +div.ap-wrapper:fullscreen div.ap-player { + position: static; +} +div.ap-wrapper:fullscreen .title-bar { + display: initial; +} +div.ap-wrapper:fullscreen.hud .title-bar { + top: 0; +} +div.ap-wrapper div.ap-player { + text-align: left; + display: inline-block; + padding: 0px; + position: relative; + box-sizing: content-box; + overflow: hidden; + max-width: 100%; + border-radius: 4px; + font-size: 15px; +} +pre.ap-terminal { + box-sizing: content-box; + overflow: hidden; + padding: 0; + margin: 0px; + display: block; + white-space: pre; + word-wrap: normal; + word-break: normal; + border-radius: 0; + border-style: solid; + cursor: text; + border-width: 0.75em; + font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols'; + font-variant-ligatures: none; +} +pre.ap-terminal .ap-line { + letter-spacing: normal; + overflow: hidden; +} +pre.ap-terminal .ap-line span { + padding: 0; + display: inline-block; + height: 100%; +} +pre.ap-terminal .ap-line { + display: block; + width: 200%; +} +pre.ap-terminal .ap-line .ap-cursor-a { + display: inline-block; +} +pre.ap-terminal .ap-line .ap-cursor-b { + display: none; + border-radius: 0.05em; +} +pre.ap-terminal .ap-line .ap-blink { + visibility: hidden; +} +pre.ap-terminal.ap-cursor .ap-line .ap-cursor-a { + display: none; +} +pre.ap-terminal.ap-cursor .ap-line .ap-cursor-b { + display: inline-block; +} +pre.ap-terminal.ap-blink .ap-line .ap-blink { + visibility: visible; +} +pre.ap-terminal .ap-bright { + font-weight: bold; +} +pre.ap-terminal .ap-faint { + opacity: 0.5; +} +pre.ap-terminal .ap-underline { + text-decoration: underline; +} +pre.ap-terminal .ap-italic { + font-style: italic; +} +pre.ap-terminal .ap-strikethrough { + text-decoration: line-through; +} +div.ap-player div.ap-control-bar { + width: 100%; + height: 32px; + display: flex; + justify-content: space-between; + align-items: stretch; + background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5) 0%, #000000 25%, #000000 100%); + color: #bbb; + box-sizing: content-box; + line-height: 1; + position: absolute; + bottom: 0; + left: 0; + opacity: 0; + transition: opacity 0.15s linear; + user-select: none; + z-index: 30; +} +div.ap-player div.ap-control-bar * { + box-sizing: inherit; + font-size: 0; + font-family: Helvetica, Arial, sans-serif; + font-weight: bold; +} +div.ap-control-bar svg.ap-icon path { + fill: #bbb; +} +div.ap-control-bar span.ap-playback-button { + display: block; + flex: 0 0 auto; + cursor: pointer; + height: 12px; + width: 12px; + padding: 10px; +} +div.ap-control-bar span.ap-playback-button svg { + height: 12px; + width: 12px; +} +div.ap-control-bar span.ap-timer { + display: block; + flex: 0 0 auto; + min-width: 50px; + margin: 0 10px; + height: 100%; + text-align: center; + font-size: 11px; + line-height: 34px; + cursor: default; +} +div.ap-control-bar span.ap-timer span { + display: inline-block; + font-size: inherit; +} +div.ap-control-bar span.ap-timer .ap-time-remaining { + display: none; +} +div.ap-control-bar span.ap-timer:hover .ap-time-elapsed { + display: none; +} +div.ap-control-bar span.ap-timer:hover .ap-time-remaining { + display: inline; +} +div.ap-control-bar .ap-progressbar { + display: block; + flex: 1 1 auto; + height: 100%; + padding: 0 10px; +} +div.ap-control-bar .ap-progressbar .ap-bar { + display: block; + position: relative; + cursor: default; + height: 100%; + font-size: 0; +} +div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter { + display: block; + position: absolute; + top: 15px; + left: 0; + right: 0; + height: 3px; + background-color: #333; +} +div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter .ap-gutter-fill { + display: inline-block; + height: 100%; + background-color: #bbb; + border-radius: 3px; + z-index: 10; +} +div.ap-control-bar.ap-seekable .ap-progressbar .ap-bar { + cursor: pointer; +} +div.ap-control-bar .ap-fullscreen-button { + display: block; + flex: 0 0 auto; + width: 14px; + height: 14px; + padding: 9px; + cursor: pointer; +} +div.ap-control-bar .ap-fullscreen-button svg { + width: 14px; + height: 14px; +} +div.ap-control-bar .ap-fullscreen-button svg:first-child { + display: inline; +} +div.ap-control-bar .ap-fullscreen-button svg:last-child { + display: none; +} +div.ap-wrapper.ap-hud .ap-control-bar { + opacity: 1; +} +div.ap-wrapper:fullscreen .ap-fullscreen-button svg:first-child { + display: none; +} +div.ap-wrapper:fullscreen .ap-fullscreen-button svg:last-child { + display: inline; +} +span.ap-progressbar span.ap-marker-container { + display: block; + top: 0; + bottom: 0; + width: 21px; + position: absolute; + margin-left: -10px; + z-index: 9; +} +span.ap-marker-container span.ap-marker { + display: block; + top: 13px; + bottom: 12px; + left: 7px; + right: 7px; + background-color: #555; + position: absolute; + transition: top 0.1s, bottom 0.1s, left 0.1s, right 0.1s, background-color 0.1s; + border-radius: 50%; +} +span.ap-marker-container span.ap-marker.ap-marker-past { + background-color: #bbb; +} +span.ap-marker-container span.ap-marker:hover, +span.ap-marker-container:hover span.ap-marker { + background-color: #bbb; + top: 11px; + bottom: 10px; + left: 5px; + right: 5px; +} +span.ap-marker-container span.ap-marker-tooltip { + visibility: hidden; + background-color: #333; + color: #bbb; + text-align: center; + padding: 2px 8px 0px 8px; + border-radius: 4px; + position: absolute; + z-index: 1; + white-space: nowrap; + /* Prevents the text from wrapping and makes sure the tooltip width adapts to the text length */ + font-size: 11px; + line-height: 2em; + bottom: 100%; + left: 50%; + transform: translateX(-50%); +} +span.ap-marker-container:hover span.ap-marker-tooltip { + visibility: visible; +} +.ap-player .ap-overlay { + z-index: 10; + background-repeat: no-repeat; + background-position: center; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + justify-content: center; + align-items: center; +} +.ap-player .ap-overlay-start { + cursor: pointer; +} +.ap-player .ap-overlay-start .ap-play-button { + font-size: 0px; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + text-align: center; + color: white; + height: 80px; + max-height: 66%; + margin: auto; +} +.ap-player .ap-overlay-start .ap-play-button div { + height: 100%; +} +.ap-player .ap-overlay-start .ap-play-button div span { + height: 100%; + display: block; +} +.ap-player .ap-overlay-start .ap-play-button div span svg { + height: 100%; +} +.ap-player .ap-overlay-loading .ap-loader { + width: 48px; + height: 48px; + border-radius: 50%; + display: inline-block; + position: relative; + border: 10px solid; + border-color: rgba(255, 255, 255, 0.15) rgba(255, 255, 255, 0.25) rgba(255, 255, 255, 0.35) rgba(255, 255, 255, 0.5); + box-sizing: border-box; + animation: ap-loader-rotation 1s linear infinite; +} +.ap-player .ap-overlay-offline span { + font-family: Consolas, Menlo, 'Bitstream Vera Sans Mono', monospace, 'Powerline Symbols'; + font-variant-ligatures: none; + font-size: 2em; +} +.ap-player .ap-overlay-offline span .ap-line { + letter-spacing: normal; + overflow: hidden; +} +.ap-player .ap-overlay-offline span .ap-line span { + padding: 0; + display: inline-block; + height: 100%; +} +.ap-player .ap-overlay-error span { + font-size: 8em; +} +@keyframes ap-loader-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.ap-terminal .fg-16 { + color: #000000; +} +.ap-terminal .bg-16 { + background-color: #000000; +} +.ap-terminal .fg-17 { + color: #00005f; +} +.ap-terminal .bg-17 { + background-color: #00005f; +} +.ap-terminal .fg-18 { + color: #000087; +} +.ap-terminal .bg-18 { + background-color: #000087; +} +.ap-terminal .fg-19 { + color: #0000af; +} +.ap-terminal .bg-19 { + background-color: #0000af; +} +.ap-terminal .fg-20 { + color: #0000d7; +} +.ap-terminal .bg-20 { + background-color: #0000d7; +} +.ap-terminal .fg-21 { + color: #0000ff; +} +.ap-terminal .bg-21 { + background-color: #0000ff; +} +.ap-terminal .fg-22 { + color: #005f00; +} +.ap-terminal .bg-22 { + background-color: #005f00; +} +.ap-terminal .fg-23 { + color: #005f5f; +} +.ap-terminal .bg-23 { + background-color: #005f5f; +} +.ap-terminal .fg-24 { + color: #005f87; +} +.ap-terminal .bg-24 { + background-color: #005f87; +} +.ap-terminal .fg-25 { + color: #005faf; +} +.ap-terminal .bg-25 { + background-color: #005faf; +} +.ap-terminal .fg-26 { + color: #005fd7; +} +.ap-terminal .bg-26 { + background-color: #005fd7; +} +.ap-terminal .fg-27 { + color: #005fff; +} +.ap-terminal .bg-27 { + background-color: #005fff; +} +.ap-terminal .fg-28 { + color: #008700; +} +.ap-terminal .bg-28 { + background-color: #008700; +} +.ap-terminal .fg-29 { + color: #00875f; +} +.ap-terminal .bg-29 { + background-color: #00875f; +} +.ap-terminal .fg-30 { + color: #008787; +} +.ap-terminal .bg-30 { + background-color: #008787; +} +.ap-terminal .fg-31 { + color: #0087af; +} +.ap-terminal .bg-31 { + background-color: #0087af; +} +.ap-terminal .fg-32 { + color: #0087d7; +} +.ap-terminal .bg-32 { + background-color: #0087d7; +} +.ap-terminal .fg-33 { + color: #0087ff; +} +.ap-terminal .bg-33 { + background-color: #0087ff; +} +.ap-terminal .fg-34 { + color: #00af00; +} +.ap-terminal .bg-34 { + background-color: #00af00; +} +.ap-terminal .fg-35 { + color: #00af5f; +} +.ap-terminal .bg-35 { + background-color: #00af5f; +} +.ap-terminal .fg-36 { + color: #00af87; +} +.ap-terminal .bg-36 { + background-color: #00af87; +} +.ap-terminal .fg-37 { + color: #00afaf; +} +.ap-terminal .bg-37 { + background-color: #00afaf; +} +.ap-terminal .fg-38 { + color: #00afd7; +} +.ap-terminal .bg-38 { + background-color: #00afd7; +} +.ap-terminal .fg-39 { + color: #00afff; +} +.ap-terminal .bg-39 { + background-color: #00afff; +} +.ap-terminal .fg-40 { + color: #00d700; +} +.ap-terminal .bg-40 { + background-color: #00d700; +} +.ap-terminal .fg-41 { + color: #00d75f; +} +.ap-terminal .bg-41 { + background-color: #00d75f; +} +.ap-terminal .fg-42 { + color: #00d787; +} +.ap-terminal .bg-42 { + background-color: #00d787; +} +.ap-terminal .fg-43 { + color: #00d7af; +} +.ap-terminal .bg-43 { + background-color: #00d7af; +} +.ap-terminal .fg-44 { + color: #00d7d7; +} +.ap-terminal .bg-44 { + background-color: #00d7d7; +} +.ap-terminal .fg-45 { + color: #00d7ff; +} +.ap-terminal .bg-45 { + background-color: #00d7ff; +} +.ap-terminal .fg-46 { + color: #00ff00; +} +.ap-terminal .bg-46 { + background-color: #00ff00; +} +.ap-terminal .fg-47 { + color: #00ff5f; +} +.ap-terminal .bg-47 { + background-color: #00ff5f; +} +.ap-terminal .fg-48 { + color: #00ff87; +} +.ap-terminal .bg-48 { + background-color: #00ff87; +} +.ap-terminal .fg-49 { + color: #00ffaf; +} +.ap-terminal .bg-49 { + background-color: #00ffaf; +} +.ap-terminal .fg-50 { + color: #00ffd7; +} +.ap-terminal .bg-50 { + background-color: #00ffd7; +} +.ap-terminal .fg-51 { + color: #00ffff; +} +.ap-terminal .bg-51 { + background-color: #00ffff; +} +.ap-terminal .fg-52 { + color: #5f0000; +} +.ap-terminal .bg-52 { + background-color: #5f0000; +} +.ap-terminal .fg-53 { + color: #5f005f; +} +.ap-terminal .bg-53 { + background-color: #5f005f; +} +.ap-terminal .fg-54 { + color: #5f0087; +} +.ap-terminal .bg-54 { + background-color: #5f0087; +} +.ap-terminal .fg-55 { + color: #5f00af; +} +.ap-terminal .bg-55 { + background-color: #5f00af; +} +.ap-terminal .fg-56 { + color: #5f00d7; +} +.ap-terminal .bg-56 { + background-color: #5f00d7; +} +.ap-terminal .fg-57 { + color: #5f00ff; +} +.ap-terminal .bg-57 { + background-color: #5f00ff; +} +.ap-terminal .fg-58 { + color: #5f5f00; +} +.ap-terminal .bg-58 { + background-color: #5f5f00; +} +.ap-terminal .fg-59 { + color: #5f5f5f; +} +.ap-terminal .bg-59 { + background-color: #5f5f5f; +} +.ap-terminal .fg-60 { + color: #5f5f87; +} +.ap-terminal .bg-60 { + background-color: #5f5f87; +} +.ap-terminal .fg-61 { + color: #5f5faf; +} +.ap-terminal .bg-61 { + background-color: #5f5faf; +} +.ap-terminal .fg-62 { + color: #5f5fd7; +} +.ap-terminal .bg-62 { + background-color: #5f5fd7; +} +.ap-terminal .fg-63 { + color: #5f5fff; +} +.ap-terminal .bg-63 { + background-color: #5f5fff; +} +.ap-terminal .fg-64 { + color: #5f8700; +} +.ap-terminal .bg-64 { + background-color: #5f8700; +} +.ap-terminal .fg-65 { + color: #5f875f; +} +.ap-terminal .bg-65 { + background-color: #5f875f; +} +.ap-terminal .fg-66 { + color: #5f8787; +} +.ap-terminal .bg-66 { + background-color: #5f8787; +} +.ap-terminal .fg-67 { + color: #5f87af; +} +.ap-terminal .bg-67 { + background-color: #5f87af; +} +.ap-terminal .fg-68 { + color: #5f87d7; +} +.ap-terminal .bg-68 { + background-color: #5f87d7; +} +.ap-terminal .fg-69 { + color: #5f87ff; +} +.ap-terminal .bg-69 { + background-color: #5f87ff; +} +.ap-terminal .fg-70 { + color: #5faf00; +} +.ap-terminal .bg-70 { + background-color: #5faf00; +} +.ap-terminal .fg-71 { + color: #5faf5f; +} +.ap-terminal .bg-71 { + background-color: #5faf5f; +} +.ap-terminal .fg-72 { + color: #5faf87; +} +.ap-terminal .bg-72 { + background-color: #5faf87; +} +.ap-terminal .fg-73 { + color: #5fafaf; +} +.ap-terminal .bg-73 { + background-color: #5fafaf; +} +.ap-terminal .fg-74 { + color: #5fafd7; +} +.ap-terminal .bg-74 { + background-color: #5fafd7; +} +.ap-terminal .fg-75 { + color: #5fafff; +} +.ap-terminal .bg-75 { + background-color: #5fafff; +} +.ap-terminal .fg-76 { + color: #5fd700; +} +.ap-terminal .bg-76 { + background-color: #5fd700; +} +.ap-terminal .fg-77 { + color: #5fd75f; +} +.ap-terminal .bg-77 { + background-color: #5fd75f; +} +.ap-terminal .fg-78 { + color: #5fd787; +} +.ap-terminal .bg-78 { + background-color: #5fd787; +} +.ap-terminal .fg-79 { + color: #5fd7af; +} +.ap-terminal .bg-79 { + background-color: #5fd7af; +} +.ap-terminal .fg-80 { + color: #5fd7d7; +} +.ap-terminal .bg-80 { + background-color: #5fd7d7; +} +.ap-terminal .fg-81 { + color: #5fd7ff; +} +.ap-terminal .bg-81 { + background-color: #5fd7ff; +} +.ap-terminal .fg-82 { + color: #5fff00; +} +.ap-terminal .bg-82 { + background-color: #5fff00; +} +.ap-terminal .fg-83 { + color: #5fff5f; +} +.ap-terminal .bg-83 { + background-color: #5fff5f; +} +.ap-terminal .fg-84 { + color: #5fff87; +} +.ap-terminal .bg-84 { + background-color: #5fff87; +} +.ap-terminal .fg-85 { + color: #5fffaf; +} +.ap-terminal .bg-85 { + background-color: #5fffaf; +} +.ap-terminal .fg-86 { + color: #5fffd7; +} +.ap-terminal .bg-86 { + background-color: #5fffd7; +} +.ap-terminal .fg-87 { + color: #5fffff; +} +.ap-terminal .bg-87 { + background-color: #5fffff; +} +.ap-terminal .fg-88 { + color: #870000; +} +.ap-terminal .bg-88 { + background-color: #870000; +} +.ap-terminal .fg-89 { + color: #87005f; +} +.ap-terminal .bg-89 { + background-color: #87005f; +} +.ap-terminal .fg-90 { + color: #870087; +} +.ap-terminal .bg-90 { + background-color: #870087; +} +.ap-terminal .fg-91 { + color: #8700af; +} +.ap-terminal .bg-91 { + background-color: #8700af; +} +.ap-terminal .fg-92 { + color: #8700d7; +} +.ap-terminal .bg-92 { + background-color: #8700d7; +} +.ap-terminal .fg-93 { + color: #8700ff; +} +.ap-terminal .bg-93 { + background-color: #8700ff; +} +.ap-terminal .fg-94 { + color: #875f00; +} +.ap-terminal .bg-94 { + background-color: #875f00; +} +.ap-terminal .fg-95 { + color: #875f5f; +} +.ap-terminal .bg-95 { + background-color: #875f5f; +} +.ap-terminal .fg-96 { + color: #875f87; +} +.ap-terminal .bg-96 { + background-color: #875f87; +} +.ap-terminal .fg-97 { + color: #875faf; +} +.ap-terminal .bg-97 { + background-color: #875faf; +} +.ap-terminal .fg-98 { + color: #875fd7; +} +.ap-terminal .bg-98 { + background-color: #875fd7; +} +.ap-terminal .fg-99 { + color: #875fff; +} +.ap-terminal .bg-99 { + background-color: #875fff; +} +.ap-terminal .fg-100 { + color: #878700; +} +.ap-terminal .bg-100 { + background-color: #878700; +} +.ap-terminal .fg-101 { + color: #87875f; +} +.ap-terminal .bg-101 { + background-color: #87875f; +} +.ap-terminal .fg-102 { + color: #878787; +} +.ap-terminal .bg-102 { + background-color: #878787; +} +.ap-terminal .fg-103 { + color: #8787af; +} +.ap-terminal .bg-103 { + background-color: #8787af; +} +.ap-terminal .fg-104 { + color: #8787d7; +} +.ap-terminal .bg-104 { + background-color: #8787d7; +} +.ap-terminal .fg-105 { + color: #8787ff; +} +.ap-terminal .bg-105 { + background-color: #8787ff; +} +.ap-terminal .fg-106 { + color: #87af00; +} +.ap-terminal .bg-106 { + background-color: #87af00; +} +.ap-terminal .fg-107 { + color: #87af5f; +} +.ap-terminal .bg-107 { + background-color: #87af5f; +} +.ap-terminal .fg-108 { + color: #87af87; +} +.ap-terminal .bg-108 { + background-color: #87af87; +} +.ap-terminal .fg-109 { + color: #87afaf; +} +.ap-terminal .bg-109 { + background-color: #87afaf; +} +.ap-terminal .fg-110 { + color: #87afd7; +} +.ap-terminal .bg-110 { + background-color: #87afd7; +} +.ap-terminal .fg-111 { + color: #87afff; +} +.ap-terminal .bg-111 { + background-color: #87afff; +} +.ap-terminal .fg-112 { + color: #87d700; +} +.ap-terminal .bg-112 { + background-color: #87d700; +} +.ap-terminal .fg-113 { + color: #87d75f; +} +.ap-terminal .bg-113 { + background-color: #87d75f; +} +.ap-terminal .fg-114 { + color: #87d787; +} +.ap-terminal .bg-114 { + background-color: #87d787; +} +.ap-terminal .fg-115 { + color: #87d7af; +} +.ap-terminal .bg-115 { + background-color: #87d7af; +} +.ap-terminal .fg-116 { + color: #87d7d7; +} +.ap-terminal .bg-116 { + background-color: #87d7d7; +} +.ap-terminal .fg-117 { + color: #87d7ff; +} +.ap-terminal .bg-117 { + background-color: #87d7ff; +} +.ap-terminal .fg-118 { + color: #87ff00; +} +.ap-terminal .bg-118 { + background-color: #87ff00; +} +.ap-terminal .fg-119 { + color: #87ff5f; +} +.ap-terminal .bg-119 { + background-color: #87ff5f; +} +.ap-terminal .fg-120 { + color: #87ff87; +} +.ap-terminal .bg-120 { + background-color: #87ff87; +} +.ap-terminal .fg-121 { + color: #87ffaf; +} +.ap-terminal .bg-121 { + background-color: #87ffaf; +} +.ap-terminal .fg-122 { + color: #87ffd7; +} +.ap-terminal .bg-122 { + background-color: #87ffd7; +} +.ap-terminal .fg-123 { + color: #87ffff; +} +.ap-terminal .bg-123 { + background-color: #87ffff; +} +.ap-terminal .fg-124 { + color: #af0000; +} +.ap-terminal .bg-124 { + background-color: #af0000; +} +.ap-terminal .fg-125 { + color: #af005f; +} +.ap-terminal .bg-125 { + background-color: #af005f; +} +.ap-terminal .fg-126 { + color: #af0087; +} +.ap-terminal .bg-126 { + background-color: #af0087; +} +.ap-terminal .fg-127 { + color: #af00af; +} +.ap-terminal .bg-127 { + background-color: #af00af; +} +.ap-terminal .fg-128 { + color: #af00d7; +} +.ap-terminal .bg-128 { + background-color: #af00d7; +} +.ap-terminal .fg-129 { + color: #af00ff; +} +.ap-terminal .bg-129 { + background-color: #af00ff; +} +.ap-terminal .fg-130 { + color: #af5f00; +} +.ap-terminal .bg-130 { + background-color: #af5f00; +} +.ap-terminal .fg-131 { + color: #af5f5f; +} +.ap-terminal .bg-131 { + background-color: #af5f5f; +} +.ap-terminal .fg-132 { + color: #af5f87; +} +.ap-terminal .bg-132 { + background-color: #af5f87; +} +.ap-terminal .fg-133 { + color: #af5faf; +} +.ap-terminal .bg-133 { + background-color: #af5faf; +} +.ap-terminal .fg-134 { + color: #af5fd7; +} +.ap-terminal .bg-134 { + background-color: #af5fd7; +} +.ap-terminal .fg-135 { + color: #af5fff; +} +.ap-terminal .bg-135 { + background-color: #af5fff; +} +.ap-terminal .fg-136 { + color: #af8700; +} +.ap-terminal .bg-136 { + background-color: #af8700; +} +.ap-terminal .fg-137 { + color: #af875f; +} +.ap-terminal .bg-137 { + background-color: #af875f; +} +.ap-terminal .fg-138 { + color: #af8787; +} +.ap-terminal .bg-138 { + background-color: #af8787; +} +.ap-terminal .fg-139 { + color: #af87af; +} +.ap-terminal .bg-139 { + background-color: #af87af; +} +.ap-terminal .fg-140 { + color: #af87d7; +} +.ap-terminal .bg-140 { + background-color: #af87d7; +} +.ap-terminal .fg-141 { + color: #af87ff; +} +.ap-terminal .bg-141 { + background-color: #af87ff; +} +.ap-terminal .fg-142 { + color: #afaf00; +} +.ap-terminal .bg-142 { + background-color: #afaf00; +} +.ap-terminal .fg-143 { + color: #afaf5f; +} +.ap-terminal .bg-143 { + background-color: #afaf5f; +} +.ap-terminal .fg-144 { + color: #afaf87; +} +.ap-terminal .bg-144 { + background-color: #afaf87; +} +.ap-terminal .fg-145 { + color: #afafaf; +} +.ap-terminal .bg-145 { + background-color: #afafaf; +} +.ap-terminal .fg-146 { + color: #afafd7; +} +.ap-terminal .bg-146 { + background-color: #afafd7; +} +.ap-terminal .fg-147 { + color: #afafff; +} +.ap-terminal .bg-147 { + background-color: #afafff; +} +.ap-terminal .fg-148 { + color: #afd700; +} +.ap-terminal .bg-148 { + background-color: #afd700; +} +.ap-terminal .fg-149 { + color: #afd75f; +} +.ap-terminal .bg-149 { + background-color: #afd75f; +} +.ap-terminal .fg-150 { + color: #afd787; +} +.ap-terminal .bg-150 { + background-color: #afd787; +} +.ap-terminal .fg-151 { + color: #afd7af; +} +.ap-terminal .bg-151 { + background-color: #afd7af; +} +.ap-terminal .fg-152 { + color: #afd7d7; +} +.ap-terminal .bg-152 { + background-color: #afd7d7; +} +.ap-terminal .fg-153 { + color: #afd7ff; +} +.ap-terminal .bg-153 { + background-color: #afd7ff; +} +.ap-terminal .fg-154 { + color: #afff00; +} +.ap-terminal .bg-154 { + background-color: #afff00; +} +.ap-terminal .fg-155 { + color: #afff5f; +} +.ap-terminal .bg-155 { + background-color: #afff5f; +} +.ap-terminal .fg-156 { + color: #afff87; +} +.ap-terminal .bg-156 { + background-color: #afff87; +} +.ap-terminal .fg-157 { + color: #afffaf; +} +.ap-terminal .bg-157 { + background-color: #afffaf; +} +.ap-terminal .fg-158 { + color: #afffd7; +} +.ap-terminal .bg-158 { + background-color: #afffd7; +} +.ap-terminal .fg-159 { + color: #afffff; +} +.ap-terminal .bg-159 { + background-color: #afffff; +} +.ap-terminal .fg-160 { + color: #d70000; +} +.ap-terminal .bg-160 { + background-color: #d70000; +} +.ap-terminal .fg-161 { + color: #d7005f; +} +.ap-terminal .bg-161 { + background-color: #d7005f; +} +.ap-terminal .fg-162 { + color: #d70087; +} +.ap-terminal .bg-162 { + background-color: #d70087; +} +.ap-terminal .fg-163 { + color: #d700af; +} +.ap-terminal .bg-163 { + background-color: #d700af; +} +.ap-terminal .fg-164 { + color: #d700d7; +} +.ap-terminal .bg-164 { + background-color: #d700d7; +} +.ap-terminal .fg-165 { + color: #d700ff; +} +.ap-terminal .bg-165 { + background-color: #d700ff; +} +.ap-terminal .fg-166 { + color: #d75f00; +} +.ap-terminal .bg-166 { + background-color: #d75f00; +} +.ap-terminal .fg-167 { + color: #d75f5f; +} +.ap-terminal .bg-167 { + background-color: #d75f5f; +} +.ap-terminal .fg-168 { + color: #d75f87; +} +.ap-terminal .bg-168 { + background-color: #d75f87; +} +.ap-terminal .fg-169 { + color: #d75faf; +} +.ap-terminal .bg-169 { + background-color: #d75faf; +} +.ap-terminal .fg-170 { + color: #d75fd7; +} +.ap-terminal .bg-170 { + background-color: #d75fd7; +} +.ap-terminal .fg-171 { + color: #d75fff; +} +.ap-terminal .bg-171 { + background-color: #d75fff; +} +.ap-terminal .fg-172 { + color: #d78700; +} +.ap-terminal .bg-172 { + background-color: #d78700; +} +.ap-terminal .fg-173 { + color: #d7875f; +} +.ap-terminal .bg-173 { + background-color: #d7875f; +} +.ap-terminal .fg-174 { + color: #d78787; +} +.ap-terminal .bg-174 { + background-color: #d78787; +} +.ap-terminal .fg-175 { + color: #d787af; +} +.ap-terminal .bg-175 { + background-color: #d787af; +} +.ap-terminal .fg-176 { + color: #d787d7; +} +.ap-terminal .bg-176 { + background-color: #d787d7; +} +.ap-terminal .fg-177 { + color: #d787ff; +} +.ap-terminal .bg-177 { + background-color: #d787ff; +} +.ap-terminal .fg-178 { + color: #d7af00; +} +.ap-terminal .bg-178 { + background-color: #d7af00; +} +.ap-terminal .fg-179 { + color: #d7af5f; +} +.ap-terminal .bg-179 { + background-color: #d7af5f; +} +.ap-terminal .fg-180 { + color: #d7af87; +} +.ap-terminal .bg-180 { + background-color: #d7af87; +} +.ap-terminal .fg-181 { + color: #d7afaf; +} +.ap-terminal .bg-181 { + background-color: #d7afaf; +} +.ap-terminal .fg-182 { + color: #d7afd7; +} +.ap-terminal .bg-182 { + background-color: #d7afd7; +} +.ap-terminal .fg-183 { + color: #d7afff; +} +.ap-terminal .bg-183 { + background-color: #d7afff; +} +.ap-terminal .fg-184 { + color: #d7d700; +} +.ap-terminal .bg-184 { + background-color: #d7d700; +} +.ap-terminal .fg-185 { + color: #d7d75f; +} +.ap-terminal .bg-185 { + background-color: #d7d75f; +} +.ap-terminal .fg-186 { + color: #d7d787; +} +.ap-terminal .bg-186 { + background-color: #d7d787; +} +.ap-terminal .fg-187 { + color: #d7d7af; +} +.ap-terminal .bg-187 { + background-color: #d7d7af; +} +.ap-terminal .fg-188 { + color: #d7d7d7; +} +.ap-terminal .bg-188 { + background-color: #d7d7d7; +} +.ap-terminal .fg-189 { + color: #d7d7ff; +} +.ap-terminal .bg-189 { + background-color: #d7d7ff; +} +.ap-terminal .fg-190 { + color: #d7ff00; +} +.ap-terminal .bg-190 { + background-color: #d7ff00; +} +.ap-terminal .fg-191 { + color: #d7ff5f; +} +.ap-terminal .bg-191 { + background-color: #d7ff5f; +} +.ap-terminal .fg-192 { + color: #d7ff87; +} +.ap-terminal .bg-192 { + background-color: #d7ff87; +} +.ap-terminal .fg-193 { + color: #d7ffaf; +} +.ap-terminal .bg-193 { + background-color: #d7ffaf; +} +.ap-terminal .fg-194 { + color: #d7ffd7; +} +.ap-terminal .bg-194 { + background-color: #d7ffd7; +} +.ap-terminal .fg-195 { + color: #d7ffff; +} +.ap-terminal .bg-195 { + background-color: #d7ffff; +} +.ap-terminal .fg-196 { + color: #ff0000; +} +.ap-terminal .bg-196 { + background-color: #ff0000; +} +.ap-terminal .fg-197 { + color: #ff005f; +} +.ap-terminal .bg-197 { + background-color: #ff005f; +} +.ap-terminal .fg-198 { + color: #ff0087; +} +.ap-terminal .bg-198 { + background-color: #ff0087; +} +.ap-terminal .fg-199 { + color: #ff00af; +} +.ap-terminal .bg-199 { + background-color: #ff00af; +} +.ap-terminal .fg-200 { + color: #ff00d7; +} +.ap-terminal .bg-200 { + background-color: #ff00d7; +} +.ap-terminal .fg-201 { + color: #ff00ff; +} +.ap-terminal .bg-201 { + background-color: #ff00ff; +} +.ap-terminal .fg-202 { + color: #ff5f00; +} +.ap-terminal .bg-202 { + background-color: #ff5f00; +} +.ap-terminal .fg-203 { + color: #ff5f5f; +} +.ap-terminal .bg-203 { + background-color: #ff5f5f; +} +.ap-terminal .fg-204 { + color: #ff5f87; +} +.ap-terminal .bg-204 { + background-color: #ff5f87; +} +.ap-terminal .fg-205 { + color: #ff5faf; +} +.ap-terminal .bg-205 { + background-color: #ff5faf; +} +.ap-terminal .fg-206 { + color: #ff5fd7; +} +.ap-terminal .bg-206 { + background-color: #ff5fd7; +} +.ap-terminal .fg-207 { + color: #ff5fff; +} +.ap-terminal .bg-207 { + background-color: #ff5fff; +} +.ap-terminal .fg-208 { + color: #ff8700; +} +.ap-terminal .bg-208 { + background-color: #ff8700; +} +.ap-terminal .fg-209 { + color: #ff875f; +} +.ap-terminal .bg-209 { + background-color: #ff875f; +} +.ap-terminal .fg-210 { + color: #ff8787; +} +.ap-terminal .bg-210 { + background-color: #ff8787; +} +.ap-terminal .fg-211 { + color: #ff87af; +} +.ap-terminal .bg-211 { + background-color: #ff87af; +} +.ap-terminal .fg-212 { + color: #ff87d7; +} +.ap-terminal .bg-212 { + background-color: #ff87d7; +} +.ap-terminal .fg-213 { + color: #ff87ff; +} +.ap-terminal .bg-213 { + background-color: #ff87ff; +} +.ap-terminal .fg-214 { + color: #ffaf00; +} +.ap-terminal .bg-214 { + background-color: #ffaf00; +} +.ap-terminal .fg-215 { + color: #ffaf5f; +} +.ap-terminal .bg-215 { + background-color: #ffaf5f; +} +.ap-terminal .fg-216 { + color: #ffaf87; +} +.ap-terminal .bg-216 { + background-color: #ffaf87; +} +.ap-terminal .fg-217 { + color: #ffafaf; +} +.ap-terminal .bg-217 { + background-color: #ffafaf; +} +.ap-terminal .fg-218 { + color: #ffafd7; +} +.ap-terminal .bg-218 { + background-color: #ffafd7; +} +.ap-terminal .fg-219 { + color: #ffafff; +} +.ap-terminal .bg-219 { + background-color: #ffafff; +} +.ap-terminal .fg-220 { + color: #ffd700; +} +.ap-terminal .bg-220 { + background-color: #ffd700; +} +.ap-terminal .fg-221 { + color: #ffd75f; +} +.ap-terminal .bg-221 { + background-color: #ffd75f; +} +.ap-terminal .fg-222 { + color: #ffd787; +} +.ap-terminal .bg-222 { + background-color: #ffd787; +} +.ap-terminal .fg-223 { + color: #ffd7af; +} +.ap-terminal .bg-223 { + background-color: #ffd7af; +} +.ap-terminal .fg-224 { + color: #ffd7d7; +} +.ap-terminal .bg-224 { + background-color: #ffd7d7; +} +.ap-terminal .fg-225 { + color: #ffd7ff; +} +.ap-terminal .bg-225 { + background-color: #ffd7ff; +} +.ap-terminal .fg-226 { + color: #ffff00; +} +.ap-terminal .bg-226 { + background-color: #ffff00; +} +.ap-terminal .fg-227 { + color: #ffff5f; +} +.ap-terminal .bg-227 { + background-color: #ffff5f; +} +.ap-terminal .fg-228 { + color: #ffff87; +} +.ap-terminal .bg-228 { + background-color: #ffff87; +} +.ap-terminal .fg-229 { + color: #ffffaf; +} +.ap-terminal .bg-229 { + background-color: #ffffaf; +} +.ap-terminal .fg-230 { + color: #ffffd7; +} +.ap-terminal .bg-230 { + background-color: #ffffd7; +} +.ap-terminal .fg-231 { + color: #ffffff; +} +.ap-terminal .bg-231 { + background-color: #ffffff; +} +.ap-terminal .fg-232 { + color: #080808; +} +.ap-terminal .bg-232 { + background-color: #080808; +} +.ap-terminal .fg-233 { + color: #121212; +} +.ap-terminal .bg-233 { + background-color: #121212; +} +.ap-terminal .fg-234 { + color: #1c1c1c; +} +.ap-terminal .bg-234 { + background-color: #1c1c1c; +} +.ap-terminal .fg-235 { + color: #262626; +} +.ap-terminal .bg-235 { + background-color: #262626; +} +.ap-terminal .fg-236 { + color: #303030; +} +.ap-terminal .bg-236 { + background-color: #303030; +} +.ap-terminal .fg-237 { + color: #3a3a3a; +} +.ap-terminal .bg-237 { + background-color: #3a3a3a; +} +.ap-terminal .fg-238 { + color: #444444; +} +.ap-terminal .bg-238 { + background-color: #444444; +} +.ap-terminal .fg-239 { + color: #4e4e4e; +} +.ap-terminal .bg-239 { + background-color: #4e4e4e; +} +.ap-terminal .fg-240 { + color: #585858; +} +.ap-terminal .bg-240 { + background-color: #585858; +} +.ap-terminal .fg-241 { + color: #626262; +} +.ap-terminal .bg-241 { + background-color: #626262; +} +.ap-terminal .fg-242 { + color: #6c6c6c; +} +.ap-terminal .bg-242 { + background-color: #6c6c6c; +} +.ap-terminal .fg-243 { + color: #767676; +} +.ap-terminal .bg-243 { + background-color: #767676; +} +.ap-terminal .fg-244 { + color: #808080; +} +.ap-terminal .bg-244 { + background-color: #808080; +} +.ap-terminal .fg-245 { + color: #8a8a8a; +} +.ap-terminal .bg-245 { + background-color: #8a8a8a; +} +.ap-terminal .fg-246 { + color: #949494; +} +.ap-terminal .bg-246 { + background-color: #949494; +} +.ap-terminal .fg-247 { + color: #9e9e9e; +} +.ap-terminal .bg-247 { + background-color: #9e9e9e; +} +.ap-terminal .fg-248 { + color: #a8a8a8; +} +.ap-terminal .bg-248 { + background-color: #a8a8a8; +} +.ap-terminal .fg-249 { + color: #b2b2b2; +} +.ap-terminal .bg-249 { + background-color: #b2b2b2; +} +.ap-terminal .fg-250 { + color: #bcbcbc; +} +.ap-terminal .bg-250 { + background-color: #bcbcbc; +} +.ap-terminal .fg-251 { + color: #c6c6c6; +} +.ap-terminal .bg-251 { + background-color: #c6c6c6; +} +.ap-terminal .fg-252 { + color: #d0d0d0; +} +.ap-terminal .bg-252 { + background-color: #d0d0d0; +} +.ap-terminal .fg-253 { + color: #dadada; +} +.ap-terminal .bg-253 { + background-color: #dadada; +} +.ap-terminal .fg-254 { + color: #e4e4e4; +} +.ap-terminal .bg-254 { + background-color: #e4e4e4; +} +.ap-terminal .fg-255 { + color: #eeeeee; +} +.ap-terminal .bg-255 { + background-color: #eeeeee; +} +.asciinema-theme-asciinema { + background-color: #121314; +} +.asciinema-theme-asciinema pre.ap-terminal { + color: #CCCCCC; + background-color: #121314; + border-color: #121314; +} +.asciinema-theme-asciinema .fg-default { + color: #CCCCCC; +} +.asciinema-theme-asciinema .fg-bg { + color: #121314; +} +.asciinema-theme-asciinema .bg-default { + background-color: #121314; +} +.asciinema-theme-asciinema .bg-fg { + background-color: #CCCCCC; +} +.asciinema-theme-asciinema .fg-0 { + color: hsl(0, 0%, 0%); +} +.asciinema-theme-asciinema .bg-0 { + background-color: hsl(0, 0%, 0%); +} +.asciinema-theme-asciinema .fg-1 { + color: hsl(343, 70%, 55%); +} +.asciinema-theme-asciinema .bg-1 { + background-color: hsl(343, 70%, 55%); +} +.asciinema-theme-asciinema .fg-2 { + color: hsl(103, 70%, 44%); +} +.asciinema-theme-asciinema .bg-2 { + background-color: hsl(103, 70%, 44%); +} +.asciinema-theme-asciinema .fg-3 { + color: hsl(43, 70%, 55%); +} +.asciinema-theme-asciinema .bg-3 { + background-color: hsl(43, 70%, 55%); +} +.asciinema-theme-asciinema .fg-4 { + color: hsl(193, 70%, 49.5%); +} +.asciinema-theme-asciinema .bg-4 { + background-color: hsl(193, 70%, 49.5%); +} +.asciinema-theme-asciinema .fg-5 { + color: hsl(283, 70%, 60.5%); +} +.asciinema-theme-asciinema .bg-5 { + background-color: hsl(283, 70%, 60.5%); +} +.asciinema-theme-asciinema .fg-6 { + color: hsl(163, 70%, 60.5%); +} +.asciinema-theme-asciinema .bg-6 { + background-color: hsl(163, 70%, 60.5%); +} +.asciinema-theme-asciinema .fg-7 { + color: hsl(0, 0%, 85%); +} +.asciinema-theme-asciinema .bg-7 { + background-color: hsl(0, 0%, 85%); +} +.asciinema-theme-asciinema .fg-8 { + color: hsl(0, 0%, 30%); +} +.asciinema-theme-asciinema .bg-8 { + background-color: hsl(0, 0%, 30%); +} +.asciinema-theme-asciinema .fg-9 { + color: hsl(343, 70%, 55%); +} +.asciinema-theme-asciinema .bg-9 { + background-color: hsl(343, 70%, 55%); +} +.asciinema-theme-asciinema .fg-10 { + color: hsl(103, 70%, 44%); +} +.asciinema-theme-asciinema .bg-10 { + background-color: hsl(103, 70%, 44%); +} +.asciinema-theme-asciinema .fg-11 { + color: hsl(43, 70%, 55%); +} +.asciinema-theme-asciinema .bg-11 { + background-color: hsl(43, 70%, 55%); +} +.asciinema-theme-asciinema .fg-12 { + color: hsl(193, 70%, 49.5%); +} +.asciinema-theme-asciinema .bg-12 { + background-color: hsl(193, 70%, 49.5%); +} +.asciinema-theme-asciinema .fg-13 { + color: hsl(283, 70%, 60.5%); +} +.asciinema-theme-asciinema .bg-13 { + background-color: hsl(283, 70%, 60.5%); +} +.asciinema-theme-asciinema .fg-14 { + color: hsl(163, 70%, 60.5%); +} +.asciinema-theme-asciinema .bg-14 { + background-color: hsl(163, 70%, 60.5%); +} +.asciinema-theme-asciinema .fg-15 { + color: hsl(0, 0%, 100%); +} +.asciinema-theme-asciinema .bg-15 { + background-color: hsl(0, 0%, 100%); +} +.asciinema-theme-asciinema .ap-overlay-loading .ap-loader { + border-color: rgba(204, 204, 204, 0.3) rgba(204, 204, 204, 0.5) rgba(204, 204, 204, 0.7) #cccccc; +} +.asciinema-theme-asciinema .fg-8, +.asciinema-theme-asciinema .fg-9, +.asciinema-theme-asciinema .fg-10, +.asciinema-theme-asciinema .fg-11, +.asciinema-theme-asciinema .fg-12, +.asciinema-theme-asciinema .fg-13, +.asciinema-theme-asciinema .fg-14, +.asciinema-theme-asciinema .fg-15 { + font-weight: bold; +} +/* + Based on Dracula: https://draculatheme.com + */ +.asciinema-theme-dracula { + background-color: #282a36; +} +.asciinema-theme-dracula pre.ap-terminal { + color: #f8f8f2; + background-color: #282a36; + border-color: #282a36; +} +.asciinema-theme-dracula .fg-default { + color: #f8f8f2; +} +.asciinema-theme-dracula .fg-bg { + color: #282a36; +} +.asciinema-theme-dracula .bg-default { + background-color: #282a36; +} +.asciinema-theme-dracula .bg-fg { + background-color: #f8f8f2; +} +.asciinema-theme-dracula .fg-0 { + color: #21222c; +} +.asciinema-theme-dracula .bg-0 { + background-color: #21222c; +} +.asciinema-theme-dracula .fg-1 { + color: #ff5555; +} +.asciinema-theme-dracula .bg-1 { + background-color: #ff5555; +} +.asciinema-theme-dracula .fg-2 { + color: #50fa7b; +} +.asciinema-theme-dracula .bg-2 { + background-color: #50fa7b; +} +.asciinema-theme-dracula .fg-3 { + color: #f1fa8c; +} +.asciinema-theme-dracula .bg-3 { + background-color: #f1fa8c; +} +.asciinema-theme-dracula .fg-4 { + color: #bd93f9; +} +.asciinema-theme-dracula .bg-4 { + background-color: #bd93f9; +} +.asciinema-theme-dracula .fg-5 { + color: #ff79c6; +} +.asciinema-theme-dracula .bg-5 { + background-color: #ff79c6; +} +.asciinema-theme-dracula .fg-6 { + color: #8be9fd; +} +.asciinema-theme-dracula .bg-6 { + background-color: #8be9fd; +} +.asciinema-theme-dracula .fg-7 { + color: #f8f8f2; +} +.asciinema-theme-dracula .bg-7 { + background-color: #f8f8f2; +} +.asciinema-theme-dracula .fg-8 { + color: #6272a4; +} +.asciinema-theme-dracula .bg-8 { + background-color: #6272a4; +} +.asciinema-theme-dracula .fg-9 { + color: #ff6e6e; +} +.asciinema-theme-dracula .bg-9 { + background-color: #ff6e6e; +} +.asciinema-theme-dracula .fg-10 { + color: #69ff94; +} +.asciinema-theme-dracula .bg-10 { + background-color: #69ff94; +} +.asciinema-theme-dracula .fg-11 { + color: #ffffa5; +} +.asciinema-theme-dracula .bg-11 { + background-color: #ffffa5; +} +.asciinema-theme-dracula .fg-12 { + color: #d6acff; +} +.asciinema-theme-dracula .bg-12 { + background-color: #d6acff; +} +.asciinema-theme-dracula .fg-13 { + color: #ff92df; +} +.asciinema-theme-dracula .bg-13 { + background-color: #ff92df; +} +.asciinema-theme-dracula .fg-14 { + color: #a4ffff; +} +.asciinema-theme-dracula .bg-14 { + background-color: #a4ffff; +} +.asciinema-theme-dracula .fg-15 { + color: #ffffff; +} +.asciinema-theme-dracula .bg-15 { + background-color: #ffffff; +} +.asciinema-theme-dracula .ap-overlay-loading .ap-loader { + border-color: rgba(248, 248, 242, 0.3) rgba(248, 248, 242, 0.5) rgba(248, 248, 242, 0.7) #f8f8f2; +} +.asciinema-theme-dracula .fg-8, +.asciinema-theme-dracula .fg-9, +.asciinema-theme-dracula .fg-10, +.asciinema-theme-dracula .fg-11, +.asciinema-theme-dracula .fg-12, +.asciinema-theme-dracula .fg-13, +.asciinema-theme-dracula .fg-14, +.asciinema-theme-dracula .fg-15 { + font-weight: bold; +} +/* Based on Monokai from base16 collection - https://github.com/chriskempson/base16 */ +.asciinema-theme-monokai { + background-color: #272822; +} +.asciinema-theme-monokai pre.ap-terminal { + color: #f8f8f2; + background-color: #272822; + border-color: #272822; +} +.asciinema-theme-monokai .fg-default { + color: #f8f8f2; +} +.asciinema-theme-monokai .fg-bg { + color: #272822; +} +.asciinema-theme-monokai .bg-default { + background-color: #272822; +} +.asciinema-theme-monokai .bg-fg { + background-color: #f8f8f2; +} +.asciinema-theme-monokai .fg-0 { + color: #272822; +} +.asciinema-theme-monokai .bg-0 { + background-color: #272822; +} +.asciinema-theme-monokai .fg-1 { + color: #f92672; +} +.asciinema-theme-monokai .bg-1 { + background-color: #f92672; +} +.asciinema-theme-monokai .fg-2 { + color: #a6e22e; +} +.asciinema-theme-monokai .bg-2 { + background-color: #a6e22e; +} +.asciinema-theme-monokai .fg-3 { + color: #f4bf75; +} +.asciinema-theme-monokai .bg-3 { + background-color: #f4bf75; +} +.asciinema-theme-monokai .fg-4 { + color: #66d9ef; +} +.asciinema-theme-monokai .bg-4 { + background-color: #66d9ef; +} +.asciinema-theme-monokai .fg-5 { + color: #ae81ff; +} +.asciinema-theme-monokai .bg-5 { + background-color: #ae81ff; +} +.asciinema-theme-monokai .fg-6 { + color: #a1efe4; +} +.asciinema-theme-monokai .bg-6 { + background-color: #a1efe4; +} +.asciinema-theme-monokai .fg-7 { + color: #f8f8f2; +} +.asciinema-theme-monokai .bg-7 { + background-color: #f8f8f2; +} +.asciinema-theme-monokai .fg-8 { + color: #75715e; +} +.asciinema-theme-monokai .bg-8 { + background-color: #75715e; +} +.asciinema-theme-monokai .fg-9 { + color: #f92672; +} +.asciinema-theme-monokai .bg-9 { + background-color: #f92672; +} +.asciinema-theme-monokai .fg-10 { + color: #a6e22e; +} +.asciinema-theme-monokai .bg-10 { + background-color: #a6e22e; +} +.asciinema-theme-monokai .fg-11 { + color: #f4bf75; +} +.asciinema-theme-monokai .bg-11 { + background-color: #f4bf75; +} +.asciinema-theme-monokai .fg-12 { + color: #66d9ef; +} +.asciinema-theme-monokai .bg-12 { + background-color: #66d9ef; +} +.asciinema-theme-monokai .fg-13 { + color: #ae81ff; +} +.asciinema-theme-monokai .bg-13 { + background-color: #ae81ff; +} +.asciinema-theme-monokai .fg-14 { + color: #a1efe4; +} +.asciinema-theme-monokai .bg-14 { + background-color: #a1efe4; +} +.asciinema-theme-monokai .fg-15 { + color: #f9f8f5; +} +.asciinema-theme-monokai .bg-15 { + background-color: #f9f8f5; +} +.asciinema-theme-monokai .ap-overlay-loading .ap-loader { + border-color: rgba(248, 248, 242, 0.3) rgba(248, 248, 242, 0.5) rgba(248, 248, 242, 0.7) #f8f8f2; +} +.asciinema-theme-monokai .fg-8, +.asciinema-theme-monokai .fg-9, +.asciinema-theme-monokai .fg-10, +.asciinema-theme-monokai .fg-11, +.asciinema-theme-monokai .fg-12, +.asciinema-theme-monokai .fg-13, +.asciinema-theme-monokai .fg-14, +.asciinema-theme-monokai .fg-15 { + font-weight: bold; +} +/* + Based on Nord: https://github.com/arcticicestudio/nord + Via: https://github.com/neilotoole/asciinema-theme-nord + */ +.asciinema-theme-nord { + background-color: #2E3440; +} +.asciinema-theme-nord pre.ap-terminal { + color: #ECEFF4; + background-color: #2E3440; + border-color: #2E3440; +} +.asciinema-theme-nord .fg-default { + color: #ECEFF4; +} +.asciinema-theme-nord .fg-bg { + color: #2E3440; +} +.asciinema-theme-nord .bg-default { + background-color: #2E3440; +} +.asciinema-theme-nord .bg-fg { + background-color: #ECEFF4; +} +.asciinema-theme-nord .fg-0 { + color: #3B4252; +} +.asciinema-theme-nord .bg-0 { + background-color: #3B4252; +} +.asciinema-theme-nord .fg-1 { + color: #BF616A; +} +.asciinema-theme-nord .bg-1 { + background-color: #BF616A; +} +.asciinema-theme-nord .fg-2 { + color: #A3BE8C; +} +.asciinema-theme-nord .bg-2 { + background-color: #A3BE8C; +} +.asciinema-theme-nord .fg-3 { + color: #EBCB8B; +} +.asciinema-theme-nord .bg-3 { + background-color: #EBCB8B; +} +.asciinema-theme-nord .fg-4 { + color: #81A1C1; +} +.asciinema-theme-nord .bg-4 { + background-color: #81A1C1; +} +.asciinema-theme-nord .fg-5 { + color: #B48EAD; +} +.asciinema-theme-nord .bg-5 { + background-color: #B48EAD; +} +.asciinema-theme-nord .fg-6 { + color: #88C0D0; +} +.asciinema-theme-nord .bg-6 { + background-color: #88C0D0; +} +.asciinema-theme-nord .fg-7 { + color: #ECEFF4; +} +.asciinema-theme-nord .bg-7 { + background-color: #ECEFF4; +} +.asciinema-theme-nord .fg-8 { + color: #3B4252; +} +.asciinema-theme-nord .bg-8 { + background-color: #3B4252; +} +.asciinema-theme-nord .fg-9 { + color: #BF616A; +} +.asciinema-theme-nord .bg-9 { + background-color: #BF616A; +} +.asciinema-theme-nord .fg-10 { + color: #A3BE8C; +} +.asciinema-theme-nord .bg-10 { + background-color: #A3BE8C; +} +.asciinema-theme-nord .fg-11 { + color: #EBCB8B; +} +.asciinema-theme-nord .bg-11 { + background-color: #EBCB8B; +} +.asciinema-theme-nord .fg-12 { + color: #81A1C1; +} +.asciinema-theme-nord .bg-12 { + background-color: #81A1C1; +} +.asciinema-theme-nord .fg-13 { + color: #B48EAD; +} +.asciinema-theme-nord .bg-13 { + background-color: #B48EAD; +} +.asciinema-theme-nord .fg-14 { + color: #88C0D0; +} +.asciinema-theme-nord .bg-14 { + background-color: #88C0D0; +} +.asciinema-theme-nord .fg-15 { + color: #ECEFF4; +} +.asciinema-theme-nord .bg-15 { + background-color: #ECEFF4; +} +.asciinema-theme-nord .ap-overlay-loading .ap-loader { + border-color: rgba(236, 239, 244, 0.3) rgba(236, 239, 244, 0.5) rgba(236, 239, 244, 0.7) #eceff4; +} +.asciinema-theme-nord .fg-8, +.asciinema-theme-nord .fg-9, +.asciinema-theme-nord .fg-10, +.asciinema-theme-nord .fg-11, +.asciinema-theme-nord .fg-12, +.asciinema-theme-nord .fg-13, +.asciinema-theme-nord .fg-14, +.asciinema-theme-nord .fg-15 { + font-weight: bold; +} +.asciinema-theme-seti { + background-color: #111213; +} +.asciinema-theme-seti pre.ap-terminal { + color: #cacecd; + background-color: #111213; + border-color: #111213; +} +.asciinema-theme-seti .fg-default { + color: #cacecd; +} +.asciinema-theme-seti .fg-bg { + color: #111213; +} +.asciinema-theme-seti .bg-default { + background-color: #111213; +} +.asciinema-theme-seti .bg-fg { + background-color: #cacecd; +} +.asciinema-theme-seti .fg-0 { + color: #323232; +} +.asciinema-theme-seti .bg-0 { + background-color: #323232; +} +.asciinema-theme-seti .fg-1 { + color: #c22832; +} +.asciinema-theme-seti .bg-1 { + background-color: #c22832; +} +.asciinema-theme-seti .fg-2 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-2 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-3 { + color: #e0c64f; +} +.asciinema-theme-seti .bg-3 { + background-color: #e0c64f; +} +.asciinema-theme-seti .fg-4 { + color: #43a5d5; +} +.asciinema-theme-seti .bg-4 { + background-color: #43a5d5; +} +.asciinema-theme-seti .fg-5 { + color: #8b57b5; +} +.asciinema-theme-seti .bg-5 { + background-color: #8b57b5; +} +.asciinema-theme-seti .fg-6 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-6 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-7 { + color: #eeeeee; +} +.asciinema-theme-seti .bg-7 { + background-color: #eeeeee; +} +.asciinema-theme-seti .fg-8 { + color: #323232; +} +.asciinema-theme-seti .bg-8 { + background-color: #323232; +} +.asciinema-theme-seti .fg-9 { + color: #c22832; +} +.asciinema-theme-seti .bg-9 { + background-color: #c22832; +} +.asciinema-theme-seti .fg-10 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-10 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-11 { + color: #e0c64f; +} +.asciinema-theme-seti .bg-11 { + background-color: #e0c64f; +} +.asciinema-theme-seti .fg-12 { + color: #43a5d5; +} +.asciinema-theme-seti .bg-12 { + background-color: #43a5d5; +} +.asciinema-theme-seti .fg-13 { + color: #8b57b5; +} +.asciinema-theme-seti .bg-13 { + background-color: #8b57b5; +} +.asciinema-theme-seti .fg-14 { + color: #8ec43d; +} +.asciinema-theme-seti .bg-14 { + background-color: #8ec43d; +} +.asciinema-theme-seti .fg-15 { + color: #ffffff; +} +.asciinema-theme-seti .bg-15 { + background-color: #ffffff; +} +.asciinema-theme-seti .ap-overlay-loading .ap-loader { + border-color: rgba(202, 206, 205, 0.3) rgba(202, 206, 205, 0.5) rgba(202, 206, 205, 0.7) #cacecd; +} +.asciinema-theme-seti .fg-8, +.asciinema-theme-seti .fg-9, +.asciinema-theme-seti .fg-10, +.asciinema-theme-seti .fg-11, +.asciinema-theme-seti .fg-12, +.asciinema-theme-seti .fg-13, +.asciinema-theme-seti .fg-14, +.asciinema-theme-seti .fg-15 { + font-weight: bold; +} +.asciinema-theme-solarized-dark { + background-color: #002b36; +} +.asciinema-theme-solarized-dark pre.ap-terminal { + color: #839496; + background-color: #002b36; + border-color: #002b36; +} +.asciinema-theme-solarized-dark .fg-default { + color: #839496; +} +.asciinema-theme-solarized-dark .fg-bg { + color: #002b36; +} +.asciinema-theme-solarized-dark .bg-default { + background-color: #002b36; +} +.asciinema-theme-solarized-dark .bg-fg { + background-color: #839496; +} +.asciinema-theme-solarized-dark .fg-0 { + color: #073642; +} +.asciinema-theme-solarized-dark .bg-0 { + background-color: #073642; +} +.asciinema-theme-solarized-dark .fg-1 { + color: #dc322f; +} +.asciinema-theme-solarized-dark .bg-1 { + background-color: #dc322f; +} +.asciinema-theme-solarized-dark .fg-2 { + color: #859900; +} +.asciinema-theme-solarized-dark .bg-2 { + background-color: #859900; +} +.asciinema-theme-solarized-dark .fg-3 { + color: #b58900; +} +.asciinema-theme-solarized-dark .bg-3 { + background-color: #b58900; +} +.asciinema-theme-solarized-dark .fg-4 { + color: #268bd2; +} +.asciinema-theme-solarized-dark .bg-4 { + background-color: #268bd2; +} +.asciinema-theme-solarized-dark .fg-5 { + color: #d33682; +} +.asciinema-theme-solarized-dark .bg-5 { + background-color: #d33682; +} +.asciinema-theme-solarized-dark .fg-6 { + color: #2aa198; +} +.asciinema-theme-solarized-dark .bg-6 { + background-color: #2aa198; +} +.asciinema-theme-solarized-dark .fg-7 { + color: #eee8d5; +} +.asciinema-theme-solarized-dark .bg-7 { + background-color: #eee8d5; +} +.asciinema-theme-solarized-dark .fg-8 { + color: #002b36; +} +.asciinema-theme-solarized-dark .bg-8 { + background-color: #002b36; +} +.asciinema-theme-solarized-dark .fg-9 { + color: #cb4b16; +} +.asciinema-theme-solarized-dark .bg-9 { + background-color: #cb4b16; +} +.asciinema-theme-solarized-dark .fg-10 { + color: #586e75; +} +.asciinema-theme-solarized-dark .bg-10 { + background-color: #586e75; +} +.asciinema-theme-solarized-dark .fg-11 { + color: #657b83; +} +.asciinema-theme-solarized-dark .bg-11 { + background-color: #657b83; +} +.asciinema-theme-solarized-dark .fg-12 { + color: #839496; +} +.asciinema-theme-solarized-dark .bg-12 { + background-color: #839496; +} +.asciinema-theme-solarized-dark .fg-13 { + color: #6c71c4; +} +.asciinema-theme-solarized-dark .bg-13 { + background-color: #6c71c4; +} +.asciinema-theme-solarized-dark .fg-14 { + color: #93a1a1; +} +.asciinema-theme-solarized-dark .bg-14 { + background-color: #93a1a1; +} +.asciinema-theme-solarized-dark .fg-15 { + color: #fdf6e3; +} +.asciinema-theme-solarized-dark .bg-15 { + background-color: #fdf6e3; +} +.asciinema-theme-solarized-dark .ap-overlay-loading .ap-loader { + border-color: rgba(131, 148, 150, 0.3) rgba(131, 148, 150, 0.5) rgba(131, 148, 150, 0.7) #839496; +} +.asciinema-theme-solarized-light { + background-color: #fdf6e3; +} +.asciinema-theme-solarized-light pre.ap-terminal { + color: #657b83; + background-color: #fdf6e3; + border-color: #fdf6e3; +} +.asciinema-theme-solarized-light .fg-default { + color: #657b83; +} +.asciinema-theme-solarized-light .fg-bg { + color: #fdf6e3; +} +.asciinema-theme-solarized-light .bg-default { + background-color: #fdf6e3; +} +.asciinema-theme-solarized-light .bg-fg { + background-color: #657b83; +} +.asciinema-theme-solarized-light .fg-0 { + color: #073642; +} +.asciinema-theme-solarized-light .bg-0 { + background-color: #073642; +} +.asciinema-theme-solarized-light .fg-1 { + color: #dc322f; +} +.asciinema-theme-solarized-light .bg-1 { + background-color: #dc322f; +} +.asciinema-theme-solarized-light .fg-2 { + color: #859900; +} +.asciinema-theme-solarized-light .bg-2 { + background-color: #859900; +} +.asciinema-theme-solarized-light .fg-3 { + color: #b58900; +} +.asciinema-theme-solarized-light .bg-3 { + background-color: #b58900; +} +.asciinema-theme-solarized-light .fg-4 { + color: #268bd2; +} +.asciinema-theme-solarized-light .bg-4 { + background-color: #268bd2; +} +.asciinema-theme-solarized-light .fg-5 { + color: #d33682; +} +.asciinema-theme-solarized-light .bg-5 { + background-color: #d33682; +} +.asciinema-theme-solarized-light .fg-6 { + color: #2aa198; +} +.asciinema-theme-solarized-light .bg-6 { + background-color: #2aa198; +} +.asciinema-theme-solarized-light .fg-7 { + color: #eee8d5; +} +.asciinema-theme-solarized-light .bg-7 { + background-color: #eee8d5; +} +.asciinema-theme-solarized-light .fg-8 { + color: #002b36; +} +.asciinema-theme-solarized-light .bg-8 { + background-color: #002b36; +} +.asciinema-theme-solarized-light .fg-9 { + color: #cb4b16; +} +.asciinema-theme-solarized-light .bg-9 { + background-color: #cb4b16; +} +.asciinema-theme-solarized-light .fg-10 { + color: #586e75; +} +.asciinema-theme-solarized-light .bg-10 { + background-color: #586e75; +} +.asciinema-theme-solarized-light .fg-11 { + color: #657c83; +} +.asciinema-theme-solarized-light .bg-11 { + background-color: #657c83; +} +.asciinema-theme-solarized-light .fg-12 { + color: #839496; +} +.asciinema-theme-solarized-light .bg-12 { + background-color: #839496; +} +.asciinema-theme-solarized-light .fg-13 { + color: #6c71c4; +} +.asciinema-theme-solarized-light .bg-13 { + background-color: #6c71c4; +} +.asciinema-theme-solarized-light .fg-14 { + color: #93a1a1; +} +.asciinema-theme-solarized-light .bg-14 { + background-color: #93a1a1; +} +.asciinema-theme-solarized-light .fg-15 { + color: #fdf6e3; +} +.asciinema-theme-solarized-light .bg-15 { + background-color: #fdf6e3; +} +.asciinema-theme-solarized-light .ap-overlay-loading .ap-loader { + border-color: rgba(101, 123, 131, 0.3) rgba(101, 123, 131, 0.5) rgba(101, 123, 131, 0.7) #657b83; +} +.asciinema-theme-solarized-light .ap-overlay-start .ap-play-button svg .ap-play-btn-fill { + fill: #dc322f; +} +.asciinema-theme-solarized-light .ap-overlay-start .ap-play-button svg .ap-play-btn-stroke { + stroke: #dc322f; +} +.asciinema-theme-tango { + background-color: #121314; +} +.asciinema-theme-tango pre.ap-terminal { + color: #CCCCCC; + background-color: #121314; + border-color: #121314; +} +.asciinema-theme-tango .fg-default { + color: #CCCCCC; +} +.asciinema-theme-tango .fg-bg { + color: #121314; +} +.asciinema-theme-tango .bg-default { + background-color: #121314; +} +.asciinema-theme-tango .bg-fg { + background-color: #CCCCCC; +} +.asciinema-theme-tango .fg-0 { + color: #000000; +} +.asciinema-theme-tango .bg-0 { + background-color: #000000; +} +.asciinema-theme-tango .fg-1 { + color: #CC0000; +} +.asciinema-theme-tango .bg-1 { + background-color: #CC0000; +} +.asciinema-theme-tango .fg-2 { + color: #4E9A06; +} +.asciinema-theme-tango .bg-2 { + background-color: #4E9A06; +} +.asciinema-theme-tango .fg-3 { + color: #C4A000; +} +.asciinema-theme-tango .bg-3 { + background-color: #C4A000; +} +.asciinema-theme-tango .fg-4 { + color: #3465A4; +} +.asciinema-theme-tango .bg-4 { + background-color: #3465A4; +} +.asciinema-theme-tango .fg-5 { + color: #75507B; +} +.asciinema-theme-tango .bg-5 { + background-color: #75507B; +} +.asciinema-theme-tango .fg-6 { + color: #06989A; +} +.asciinema-theme-tango .bg-6 { + background-color: #06989A; +} +.asciinema-theme-tango .fg-7 { + color: #D3D7CF; +} +.asciinema-theme-tango .bg-7 { + background-color: #D3D7CF; +} +.asciinema-theme-tango .fg-8 { + color: #555753; +} +.asciinema-theme-tango .bg-8 { + background-color: #555753; +} +.asciinema-theme-tango .fg-9 { + color: #EF2929; +} +.asciinema-theme-tango .bg-9 { + background-color: #EF2929; +} +.asciinema-theme-tango .fg-10 { + color: #8AE234; +} +.asciinema-theme-tango .bg-10 { + background-color: #8AE234; +} +.asciinema-theme-tango .fg-11 { + color: #FCE94F; +} +.asciinema-theme-tango .bg-11 { + background-color: #FCE94F; +} +.asciinema-theme-tango .fg-12 { + color: #729FCF; +} +.asciinema-theme-tango .bg-12 { + background-color: #729FCF; +} +.asciinema-theme-tango .fg-13 { + color: #AD7FA8; +} +.asciinema-theme-tango .bg-13 { + background-color: #AD7FA8; +} +.asciinema-theme-tango .fg-14 { + color: #34E2E2; +} +.asciinema-theme-tango .bg-14 { + background-color: #34E2E2; +} +.asciinema-theme-tango .fg-15 { + color: #EEEEEC; +} +.asciinema-theme-tango .bg-15 { + background-color: #EEEEEC; +} +.asciinema-theme-tango .ap-overlay-loading .ap-loader { + border-color: rgba(204, 204, 204, 0.3) rgba(204, 204, 204, 0.5) rgba(204, 204, 204, 0.7) #cccccc; +} +.asciinema-theme-tango .fg-8, +.asciinema-theme-tango .fg-9, +.asciinema-theme-tango .fg-10, +.asciinema-theme-tango .fg-11, +.asciinema-theme-tango .fg-12, +.asciinema-theme-tango .fg-13, +.asciinema-theme-tango .fg-14, +.asciinema-theme-tango .fg-15 { + font-weight: bold; +} diff --git a/assets/asciinema-player.min.js b/assets/asciinema-player.min.js new file mode 100644 index 0000000..ff04b15 --- /dev/null +++ b/assets/asciinema-player.min.js @@ -0,0 +1 @@ +var AsciinemaPlayer=function(A){"use strict";const g={};const I=Symbol("solid-proxy"),B=Symbol("solid-track"),Q={equals:(A,g)=>A===g};let C=Y;const E=1,e=2,t={owned:null,cleanups:null,context:null,owner:null};var i=null;let o=null,s=null,n=null,r=null,a=0;function c(A,g){const I=s,B=i,Q=0===A.length,C=Q?t:{owned:null,cleanups:null,context:null,owner:void 0===g?B:g},E=Q?A:()=>A((()=>l((()=>U(C)))));i=C,s=null;try{return R(E,!0)}finally{s=I,i=B}}function D(A,g){const I={value:A,observers:null,observerSlots:null,comparator:(g=g?Object.assign({},Q,g):Q).equals||void 0};return[M.bind(I),A=>("function"==typeof A&&(A=A(I.value)),d(I,A))]}function w(A,g,I){F(f(A,g,!1,E))}function h(A,g,I){I=I?Object.assign({},Q,I):Q;const B=f(A,g,!0,0);return B.observers=null,B.observerSlots=null,B.comparator=I.equals||void 0,F(B),M.bind(B)}function y(A){return R(A,!1)}function l(A){if(null===s)return A();const g=s;s=null;try{return A()}finally{s=g}}function G(A){!function(A,g,I){C=p;const B=f(A,g,!1,E);B.user=!0,r?r.push(B):F(B)}((()=>l(A)))}function k(A){return null===i||(null===i.cleanups?i.cleanups=[A]:i.cleanups.push(A)),A}function N(){return s}function u(A){const g=h(A),I=h((()=>m(g())));return I.toArray=()=>{const A=I();return Array.isArray(A)?A:null!=A?[A]:[]},I}function M(){const A=o;if(this.sources&&(this.state||A))if(this.state===E||A)F(this);else{const A=n;n=null,R((()=>S(this)),!1),n=A}if(s){const A=this.observers?this.observers.length:0;s.sources?(s.sources.push(this),s.sourceSlots.push(A)):(s.sources=[this],s.sourceSlots=[A]),this.observers?(this.observers.push(s),this.observerSlots.push(s.sources.length-1)):(this.observers=[s],this.observerSlots=[s.sources.length-1])}return this.value}function d(A,g,I){let B=A.value;return A.comparator&&A.comparator(B,g)||(A.value=g,A.observers&&A.observers.length&&R((()=>{for(let g=0;g1e6)throw n=[],new Error}),!1)),g}function F(A){if(!A.fn)return;U(A);const g=i,I=s,B=a;s=i=A,function(A,g,I){let B;try{B=A.fn(g)}catch(g){A.pure&&(A.state=E,A.owned&&A.owned.forEach(U),A.owned=null),K(g)}(!A.updatedAt||A.updatedAt<=I)&&(null!=A.updatedAt&&"observers"in A?d(A,B):A.value=B,A.updatedAt=I)}(A,A.value,B),s=I,i=g}function f(A,g,I,B=E,Q){const C={fn:A,state:B,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:g,owner:i,context:null,pure:I};return null===i||i!==t&&(i.owned?i.owned.push(C):i.owned=[C]),C}function J(A){const g=o;if(0===A.state||g)return;if(A.state===e||g)return S(A);if(A.suspense&&l(A.suspense.inFallback))return A.suspense.effects.push(A);const I=[A];for(;(A=A.owner)&&(!A.updatedAt||A.updatedAt=0;B--)if((A=I[B]).state===E||g)F(A);else if(A.state===e||g){const g=n;n=null,R((()=>S(A,I[0])),!1),n=g}}function R(A,g){if(n)return A();let I=!1;g||(n=[]),r?I=!0:r=[],a++;try{const g=A();return function(A){n&&(Y(n),n=null);if(A)return;const g=r;r=null,g.length&&R((()=>C(g)),!1)}(I),g}catch(A){I||(r=null),n=null,K(A)}}function Y(A){for(let g=0;gA(g||{})))}function v(A){const g="fallback"in A&&{fallback:()=>A.fallback};return h(function(A,g,I={}){let Q=[],C=[],E=[],e=0,t=g.length>1?[]:null;return k((()=>b(E))),()=>{let i,o,s=A()||[];return s[B],l((()=>{let A,g,B,r,a,D,w,h,y,l=s.length;if(0===l)0!==e&&(b(E),E=[],Q=[],C=[],e=0,t&&(t=[])),I.fallback&&(Q=[H],C[0]=c((A=>(E[0]=A,I.fallback()))),e=1);else if(0===e){for(C=new Array(l),o=0;o=D&&h>=D&&Q[w]===s[h];w--,h--)B[h]=C[w],r[h]=E[w],t&&(a[h]=t[w]);for(A=new Map,g=new Array(h+1),o=h;o>=D;o--)y=s[o],i=A.get(y),g[o]=void 0===i?-1:i,A.set(y,o);for(i=D;i<=w;i++)y=Q[i],o=A.get(y),void 0!==o&&-1!==o?(B[o]=C[i],r[o]=E[i],t&&(a[o]=t[i]),o=g[o],A.set(y,o)):E[i]();for(o=D;oA.each),A.children,g||void 0))}function x(A){const g="fallback"in A&&{fallback:()=>A.fallback};return h(function(A,g,I={}){let Q,C=[],E=[],e=[],t=[],i=0;return k((()=>b(e))),()=>{const o=A()||[];return o[B],l((()=>{if(0===o.length)return 0!==i&&(b(e),e=[],C=[],E=[],i=0,t=[]),I.fallback&&(C=[H],E[0]=c((A=>(e[0]=A,I.fallback()))),i=1),E;for(C[0]===H&&(e[0](),e=[],C=[],E=[],i=0),Q=0;Qo[Q])):Q>=C.length&&(E[Q]=c(s));for(;QA.each),A.children,g||void 0))}function T(A){let g=!1;const I=A.keyed,B=h((()=>A.when),void 0,{equals:(A,I)=>g?A===I:!A==!I});return h((()=>{const Q=B();if(Q){const B=A.children,C="function"==typeof B&&B.length>0;return g=I||C,C?l((()=>B(Q))):B}return A.fallback}),void 0,void 0)}function j(A){let g=!1,I=!1;const B=u((()=>A.children)),Q=h((()=>{let A=B();Array.isArray(A)||(A=[A]);for(let g=0;gA[0]===I[0]&&(g?A[1]===I[1]:!A[1]==!I[1])&&A[2]===I[2]});return h((()=>{const[B,C,E]=Q();if(B<0)return A.fallback;const e=E.children,t="function"==typeof e&&e.length>0;return g=I||t,t?l((()=>e(C))):e}),void 0,void 0)}function W(A){return A}const Z="_$DX_DELEGATE";function X(A,g,I,B={}){let Q;return c((B=>{Q=B,g===document?A():AA(g,A(),g.firstChild?null:void 0,I)}),B.owner),()=>{Q(),g.textContent=""}}function O(A,g,I){const B=document.createElement("template");B.innerHTML=A;let Q=B.content.firstChild;return I&&(Q=Q.firstChild),Q}function V(A,g=window.document){const I=g[Z]||(g[Z]=new Set);for(let B=0,Q=A.length;BB.call(A,I[1],g))}else A.addEventListener(g,I)}function _(A,g,I){if(!g)return I?function(A,g,I){null==I?A.removeAttribute(g):A.setAttribute(g,I)}(A,"style"):g;const B=A.style;if("string"==typeof g)return B.cssText=g;let Q,C;for(C in"string"==typeof I&&(B.cssText=I=void 0),I||(I={}),g||(g={}),I)null==g[C]&&B.removeProperty(C),delete I[C];for(C in g)Q=g[C],Q!==I[C]&&(B.setProperty(C,Q),I[C]=Q);return I}function $(A,g,I){return l((()=>A(g,I)))}function AA(A,g,I,B){if(void 0===I||B||(B=[]),"function"!=typeof g)return IA(A,g,B,I);w((B=>IA(A,g(),B,I)),B)}function gA(A){const I=`$$${A.type}`;let B=A.composedPath&&A.composedPath()[0]||A.target;for(A.target!==B&&Object.defineProperty(A,"target",{configurable:!0,value:B}),Object.defineProperty(A,"currentTarget",{configurable:!0,get:()=>B||document}),g.registry&&!g.done&&(g.done=!0,document.querySelectorAll("[id^=pl-]").forEach((g=>{for(;g&&8!==g.nodeType&&g.nodeValue!=="pl-"+A;){let A=g.nextSibling;g.remove(),g=A}g&&g.remove()})));B;){const g=B[I];if(g&&!B.disabled){const Q=B[`${I}Data`];if(void 0!==Q?g.call(B,Q,A):g.call(B,A),A.cancelBubble)return}B=B._$host||B.parentNode||B.host}}function IA(A,I,B,Q,C){for(g.context&&!B&&(B=[...A.childNodes]);"function"==typeof B;)B=B();if(I===B)return B;const E=typeof I,e=void 0!==Q;if(A=e&&B[0]&&B[0].parentNode||A,"string"===E||"number"===E){if(g.context)return B;if("number"===E&&(I=I.toString()),e){let g=B[0];g&&3===g.nodeType?g.data=I:g=document.createTextNode(I),B=CA(A,B,Q,g)}else B=""!==B&&"string"==typeof B?A.firstChild.data=I:A.textContent=I}else if(null==I||"boolean"===E){if(g.context)return B;B=CA(A,B,Q)}else{if("function"===E)return w((()=>{let g=I();for(;"function"==typeof g;)g=g();B=IA(A,g,B,Q)})),()=>B;if(Array.isArray(I)){const E=[],t=B&&Array.isArray(B);if(BA(E,I,B,C))return w((()=>B=IA(A,E,B,Q,!0))),()=>B;if(g.context){if(!E.length)return B;for(let A=0;AB-e){const Q=g[E];for(;e=0;C--){const E=g[C];if(Q!==E){const g=E.parentNode===A;B||C?g&&E.remove():g?A.replaceChild(Q,E):A.insertBefore(Q,I)}else B=!0}}else A.insertBefore(Q,I);return[Q]}let EA;const eA=new Array(128).fill(void 0);function tA(A){return eA[A]}eA.push(void 0,null,!0,!1);let iA=eA.length;function oA(A){const g=tA(A);return function(A){A<132||(eA[A]=iA,iA=A)}(A),g}const sA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});sA.decode();let nA=null;function rA(){return null!==nA&&0!==nA.byteLength||(nA=new Uint8Array(EA.memory.buffer)),nA}function aA(A,g){return sA.decode(rA().subarray(A,A+g))}function cA(A){iA===eA.length&&eA.push(eA.length+1);const g=iA;return iA=eA[g],eA[g]=A,g}function DA(A){const g=typeof A;if("number"==g||"boolean"==g||null==A)return`${A}`;if("string"==g)return`"${A}"`;if("symbol"==g){const g=A.description;return null==g?"Symbol":`Symbol(${g})`}if("function"==g){const g=A.name;return"string"==typeof g&&g.length>0?`Function(${g})`:"Function"}if(Array.isArray(A)){const g=A.length;let I="[";g>0&&(I+=DA(A[0]));for(let B=1;B1))return toString.call(A);if(B=I[1],"Object"==B)try{return"Object("+JSON.stringify(A)+")"}catch(A){return"Object"}return A instanceof Error?`${A.name}: ${A.message}\n${A.stack}`:B}let wA=0;const hA=new TextEncoder("utf-8"),yA="function"==typeof hA.encodeInto?function(A,g){return hA.encodeInto(A,g)}:function(A,g){const I=hA.encode(A);return g.set(I),{read:A.length,written:I.length}};function lA(A,g,I){if(void 0===I){const I=hA.encode(A),B=g(I.length);return rA().subarray(B,B+I.length).set(I),wA=I.length,B}let B=A.length,Q=g(B);const C=rA();let E=0;for(;E127)break;C[Q+E]=g}if(E!==B){0!==E&&(A=A.slice(E)),Q=I(Q,B,B=E+3*A.length);const g=rA().subarray(Q+E,Q+B);E+=yA(A,g).written}return wA=E,Q}let GA=null;function kA(){return null!==GA&&0!==GA.byteLength||(GA=new Int32Array(EA.memory.buffer)),GA}let NA=null;function uA(A,g){return(null!==NA&&0!==NA.byteLength||(NA=new Uint32Array(EA.memory.buffer)),NA).subarray(A/4,A/4+g)}class MA{static __wrap(A){const g=Object.create(MA.prototype);return g.ptr=A,g}__destroy_into_raw(){const A=this.ptr;return this.ptr=0,A}free(){const A=this.__destroy_into_raw();EA.__wbg_vtwrapper_free(A)}feed(A){const g=lA(A,EA.__wbindgen_malloc,EA.__wbindgen_realloc),I=wA;return oA(EA.vtwrapper_feed(this.ptr,g,I))}inspect(){try{const I=EA.__wbindgen_add_to_stack_pointer(-16);EA.vtwrapper_inspect(I,this.ptr);var A=kA()[I/4+0],g=kA()[I/4+1];return aA(A,g)}finally{EA.__wbindgen_add_to_stack_pointer(16),EA.__wbindgen_free(A,g)}}get_size(){try{const B=EA.__wbindgen_add_to_stack_pointer(-16);EA.vtwrapper_get_size(B,this.ptr);var A=kA()[B/4+0],g=kA()[B/4+1],I=uA(A,g).slice();return EA.__wbindgen_free(A,4*g),I}finally{EA.__wbindgen_add_to_stack_pointer(16)}}get_line(A){return oA(EA.vtwrapper_get_line(this.ptr,A))}get_cursor(){return oA(EA.vtwrapper_get_cursor(this.ptr))}}function dA(){const A={wbg:{}};return A.wbg.__wbindgen_object_drop_ref=function(A){oA(A)},A.wbg.__wbindgen_error_new=function(A,g){return cA(new Error(aA(A,g)))},A.wbg.__wbindgen_number_new=function(A){return cA(A)},A.wbg.__wbindgen_bigint_from_u64=function(A){return cA(BigInt.asUintN(64,A))},A.wbg.__wbindgen_string_new=function(A,g){return cA(aA(A,g))},A.wbg.__wbg_set_20cbc34131e76824=function(A,g,I){tA(A)[oA(g)]=oA(I)},A.wbg.__wbg_new_b525de17f44a8943=function(){return cA(new Array)},A.wbg.__wbg_new_f841cc6f2098f4b5=function(){return cA(new Map)},A.wbg.__wbg_new_f9876326328f45ed=function(){return cA(new Object)},A.wbg.__wbindgen_is_string=function(A){return"string"==typeof tA(A)},A.wbg.__wbg_set_17224bc548dd1d7b=function(A,g,I){tA(A)[g>>>0]=oA(I)},A.wbg.__wbg_set_388c4c6422704173=function(A,g,I){return cA(tA(A).set(tA(g),tA(I)))},A.wbg.__wbindgen_debug_string=function(A,g){const I=lA(DA(tA(g)),EA.__wbindgen_malloc,EA.__wbindgen_realloc),B=wA;kA()[A/4+1]=B,kA()[A/4+0]=I},A.wbg.__wbindgen_throw=function(A,g){throw new Error(aA(A,g))},A}function FA(A,g){return EA=A.exports,fA.__wbindgen_wasm_module=g,GA=null,NA=null,nA=null,EA}async function fA(A){const g=dA();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:I,module:B}=await async function(A,g){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,g)}catch(g){if("application/wasm"==A.headers.get("Content-Type"))throw g;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",g)}const I=await A.arrayBuffer();return await WebAssembly.instantiate(I,g)}{const I=await WebAssembly.instantiate(A,g);return I instanceof WebAssembly.Instance?{instance:I,module:A}:I}}(await A,g);return FA(I,B)}var JA=Object.freeze({__proto__:null,VtWrapper:MA,create:function(A,g,I,B){const Q=EA.create(A,g,I,B);return MA.__wrap(Q)},default:fA,initSync:function(A){const g=dA();return A instanceof WebAssembly.Module||(A=new WebAssembly.Module(A)),FA(new WebAssembly.Instance(A,g),A)}});const RA=[62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function YA(A){return RA[A-43]}const pA=function(A){let g,I=A.endsWith("==")?2:A.endsWith("=")?1:0,B=A.length,Q=new Uint8Array(B/4*3);for(let I=0,C=0;I>16,Q[C+1]=g>>8&255,Q[C+2]=255&g;return Q.subarray(0,Q.length-I)}("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DSAKIAcpAwA3AgAgCCANNwIAIARBAWoiBCABRw0ACwwGCwALAAsgAEECdCEGQQAgAEEEdCIHayEIA0AgBgRAIAEhAyAGIQQDQCADIAhqIgkoAgAhCiAJIAMoAgA2AgAgAyAKNgIAIANBBGohAyAEQQFrIgQNAAsLIAEgB2ohASACIABrIgIgAE8NAAsLIAJFDQIgAA0BDAILCyABIABBBHQiA2siBCACQQR0IgZqIQcgACACSwRAIAVBIGoiACABIAYQ6AEaIAcgBCADEOYBIAQgACAGEOgBGgwBCyAFQSBqIgAgBCADEOgBGiAEIAEgBhDmASAHIAAgAxDoARoLIAVBoAFqJAALwwYCB38DfiMAQSBrIggkAAJAAkAgASgCBCICIAEoAgBHBEAgAUEUaiEHIAFBCGohBQNAIAEgAkEQajYCBAJAIAEtABQiA0EDRgRAQQRBBBDBASIDRQ0FIAMgAigCADYCACAIQRhqIgQgAkEMai8BADsBACAIIAIpAgQ3AxACQCAHLQAAQQNGDQAgBSgCAEUNACABKAIMEA8LIAFBATYCECABIAM2AgwgAUEBNgIIIAcgCCkDEDcCACAHQQhqIAQvAQA7AQAMAQtBACAFIANBA0YbIgMtAAwhBAJAAkACQAJAIAItAAQiBkECRg0AIARBAkYNACAEIAZHDQIgBkUEQCACQQVqLQAAIANBDWotAABGDQIMAwsgAkEFai0AACADQQ1qLQAARw0CIAJBBmotAAAgA0EOai0AAEcNAiACQQdqLQAAIANBD2otAABGDQEMAgsgBkECRw0BIARBAkcNAQsgA0EQai0AACEEAkACQCACQQhqLQAAIgZBAkYNACAEQQJGDQAgBCAGRw0CIAZFBEAgAkEJai0AACADQRFqLQAARg0CDAMLIAJBCWotAAAgA0ERai0AAEcNAiACQQpqLQAAIANBEmotAABHDQIgAkELai0AACADQRNqLQAARg0BDAILIAZBAkcNASAEQQJHDQELIAJBDWotAAAgA0EVai0AAEcNACACQQxqLQAAIANBFGotAABGDQELQQRBBBDBASIDRQ0FIAMgAigCADYCACAAIAUpAgA3AgAgBUEQaikCACEJIAVBCGopAgAhCiACQQxqLwEAIQUgAikCBCELIAFBATYCCCABIAM2AgwgAUEBNgIQIAdBCGogBTsB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CCEGIAJBAWtB/////wFxIgJBAWoiA0EHcSEEAn8gAkEHSQRAQQAhAyAGDAELIAZBPGohAiADQfj///8DcSEHQQAhAwNAIAIoAgAgAkEIaygCACACQRBrKAIAIAJBGGsoAgAgAkEgaygCACACQShrKAIAIAJBMGsoAgAgAkE4aygCACADampqampqamohAyACQUBrIQIgB0EIayIHDQALIAJBPGsLIQIgBARAIAJBBGohAgNAIAIoAgAgA2ohAyACQQhqIQIgBEEBayIEDQALCyABQRRqKAIABEBBASECQQAhBCADQQBIDQIgBigCBEUgA0EQSXENAiADQQF0IQMLIANFDQACQCADQQBOBEAgA0EBEMEBIgJFDQEgAyEEDAMLEIcBAAsgA0EBQejFwAAoAgAiAEHcACAAGxECAAALQQEhAkEAIQQLIABBADYCCCAAIAI2AgQgACAENgIAIAVBEGoiAkEQaiABQRBqKQIANwMAIAJBCGogAUEIaikCADcDACAFIAEpAgA3AxAgBSAANgIMIAVBDGpB0KjAACACEBYEQEGwqcAAQTMgBUEoakHkqcAAQYyqwAAQSgALIAVBMGokAAugAwEDfwJAAkACQAJAIAFBCU8EQCABQRBJDQEMAgsgABAOIQMMAgtBECEBC0HN/3sgAWsgAE0NAEEQIABBBGogAEELSRtBB2pBeHEiBCABakEMahAOIgJFDQAgAkEIayEAAkAgAUEBayIDIAJxRQRAIAAhAQwBCyAAKAIEQXhxQQAgASACIANqQQAgAWtxQQhrIgEgAGtBEEsbIAFqIgEgAGsiAmshAyAALQAEQQNxBEAgASABKAIEQQFxIANyQQJyNgIEIAEgA2oiAyADKAIEQQFyNgIEIAAgACgCBEEBcSACckECcjYCBCAAIAJqIgMgAygCBEEBcjYCBCAAIAIQGAwBCyAAKAIAIQAgASADNgIEIAEgACACajYCAAsgAS0ABEEDcUUNASABKAIEQXhxIgIgBEEQak0NASABIAEoAgRBAXEgBHJBAnI2AgQgASAEaiIAIAAoAgRBAXI2AgQgACACIARrIgQgACgCBEEBcXJBAnI2AgQgACAEaiICIAIoAgRBAXI2AgQgACAEEBgMAQsgAw8LIAEtAAQaIAFBCGoLjQgBB39BASEDAkAgASgCACIGQScgASgCBCgCECIH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QQR0IQcDQCAEKAIAIApGBEAgBCAKQQEQdQsgBCAKQQFqIgo2AgggBCgCBCAHaiIRIAIpAwA3AgAgEUEIaiACQQhqKQMANwIAIAIgBRAUIAdBEGohByACLQAMQQJHDQALCyAFEJQBIAJBEGokACAMQQhqIA8oAgA2AgAgDCABKQMINwIACyABQUBrJAAgBigCEEEEdCEBIAYoAgwhAgJAA0AgAUUNASABQRBrIQEgAigCCCACQRBqIQIgCEYNAAtBmJjAAEE3QdCYwAAQcAALIAMQeiADKAIABEAgACgCFBAPCyADIAYpAwg3AgAgA0EIaiAGQRBqKAIANgIAIAkgACgCGCIDSwRAIAAgCSADayAIEG0gACgCGCEDC0EAIQECQCAORQ0AIANBAWsiBEUNACAAKAIUQQxqIQJBACEHA0ACQCABIANHBEAgAUEBaiEBIA4gByACLQAARWoiB0sNAQwDCyADIANByJfAABBTAAsgAkEQaiECIAEgBEkNAAsLAkACQCAIIAtLDQAgASADIAEgA0sbIQQgACgCFCABQQR0akEMaiECA0AgASAERg0CIAItAABFDQEgAkEQaiECIAFBAWohASALIAhrIgsgCE8NAAsLIAsgCEEBayICIAIgC0sbIQogASAJIANraiIBQQBOIQIgAUEAIAIbIQUgCUEAIAEgAhtrIQkMAQsgBCADQdiXwAAQUwALAkACQAJAQX8gCSANRyAJIA1LG0H/AXEOAgIAAQtBACADIAlrIgEgASADSxsiAiANIAlrIgEgASACSxsiBEEAIAUgCUkbIAVqIQUgASACTQ0BIAAgASAEayAIEG0MAQsgAEEQaiEEAkAgCSANayIBIAkgBUF/c2oiAiABIAJJGyICBEAgBCADIAJrEFogACgCGCIERQ0BIAAoAhQgBEEEdGpBBGtBADoAAAsgBSABayACaiEFDAELQcCUwABBK0G4l8AAEHAACyAAQQE6ABwgACANNgIMIAAgCDYCCCASIAU2AgQgEiAKNgIAIAZBQGskACAAIBApAwg3AnQgAEHoAGohAgJAIAAoAkwiASAAQfAAaigCACIITQRAIAAgATYCcAwBCyACIAEgCGtBABBPIAAoAkwhAQsgAkEAIAEQbCAAKAJIIgEgACgCgAFNBEAgACABQQFrNgKAAQsgACgCTCIBIABBhAFqKAIATQRAIAAgAUEBazYChAELIBBBEGokAAu9AQECfyMAQSBrIgQkACAAAn9BACACIANqIgMgAkkNABogASgCACICQQF0IgUgAyADIAVJGyIDQQggA0EISxsiBUF/c0EfdiEDAkAgAgRAIARBATYCGCAEIAI2AhQgBCABKAIENgIQDAELIARBADYCGAsgBCAFIAMgBEEQahA8IAQoAgQhAyAEKAIABEAgBEEIaigCAAwBCyABIAU2AgAgASADNgIEQYGAgIB4CzYCBCAAIAM2AgAgBEEgaiQAC/ABAgR/AX4jAEEgayICJAAgASgCBEUEQCABKAIMIQMgAkEQaiIEQQhqIgVBADYCACACQoCAgIAQNwMQIAIgBDYCHCACQRxqQZymwAAgAxAWGiABQQhqIAUoAgA2AgAgASACKQMQNwIACyABKQIAIQYgAUKAgICAEDcCACACQQhqIgMgAUEIaiIBKAIANgIAIAFBADYCACACIAY3AwBBDEEEEMEBIgFFBEBBDEEEQejFwAAoAgAiAEHcACAAGxECAAALIAEgAikDADcCACABQQhqIAMoAgA2AgAgAEH4p8AANgIEIAAgATYCACACQSBqJAAL7wEBAn8jAEEgayIFJABB/MXAAEH8xcAAKAIAIgZBAWo2AgACQAJAIAZBAEgNAEHEycAAQcTJwAAoAgBBAWoiBjYCACAGQQJLDQAgBSAEOgAYIAUgAzYCFCAFIAI2AhAgBUHAqMAANgIMIAVBtKbAADYCCEHsxcAAKAIAIgJBAEgNAEHsxcAAIAJBAWo2AgBB7MXAAEH0xcAAKAIABH8gBSAAIAEoAhARAgAgBSAFKQMANwMIQfTFwAAoAgAgBUEIakH4xcAAKAIAKAIUEQIAQezFwAAoAgBBAWsFIAILNgIAIAZBAUsNACAEDQELAAsAC8QBAQF/IwBBEGsiBSQAIAUgACgCACABIAIgACgCBCgCDBEBADoACCAFIAA2AgQgBSACRToACSAFQQA2AgAgBSADIAQQJCEAIAUtAAghAQJ/IAFBAEcgACgCACICRQ0AGkEBIAENABogBSgCBCEBAkAgAkEBRw0AIAUtAAlFDQAgAS0AGEEEcQ0AQQEgASgCAEGgrsAAQQEgASgCBCgCDBEBAA0BGgsgASgCAEH8q8AAQQEgASgCBCgCDBEBAAsgBUEQaiQAC7oBAAJAIAIEQAJAAkACfwJAAkAgAUEATgRAIAMoAggNASABDQJBASECDAQLDAYLIAMoAgQiAkUEQCABRQRAQQEhAgwECyABQQEQwQEMAgsgAygCACACQQEgARC3AQwBCyABQQEQwQELIgJFDQELIAAgAjYCBCAAQQhqIAE2AgAgAEEANgIADwsgACABNgIEIABBCGpBATYCACAAQQE2AgAPCyAAIAE2AgQLIABBCGpBADYCACAAQQE2AgALxAEBAX8jAEEQayIPJAAgACgCACABIAIgACgCBCgCDBEBACEBIA9BADoADSAPIAE6AAwgDyAANgIIIA9BCGogAyAEIAUgBhAfIAcgCCAJIAoQHyALIAwgDSAOEB8hAiAPLQAMIQECfyABQQBHIA8tAA1FDQAaQQEgAQ0AGiACKAIAIgAtABhBBHFFBEAgACgCAEGbrsAAQQIgACgCBCgCDBEBAAwBCyAAKAIAQZquwABBASAAKAIEKAIMEQEACyAPQRBqJAALrwEBBH8jAEEQayICJAAgAkKAgICAwAA3AwBBCCEDA0ACQCACIAQ2AggCQCAFRQRAIAEgA0sNAQwCCyADIANBB2oiA0sNASABIANNDQELIAIoAgAgBEYEQCACIAQQciACKAIIIQQLIAIoAgQgBEECdGogAzYCAEEBIQUgAigCCEEBaiEEIANBAWohAwwBCwsgACACKQMANwIAIABBCGogAkEIaigCADYCACACQRBqJAALugEBAX8jAEEQayILJAAgACgCACABIAIgACgCBCgCDBEBACEBIAtBADoADSALIAE6AAwgCyAANgIIIAtBCGogAyAEIAUgBhAfIAcgCCAJIAoQHyECIAstAAwhAQJ/IAFBAEcgCy0ADUUNABpBASABDQAaIAIoAgAiAC0AGEEEcUUEQCAAKAIAQZuuwABBAiAAKAIEKAIMEQEADAELIAAoAgBBmq7AAEEBIAAoAgQoAgwRAQALIAtBEGokAAuwAQEBfyAAIgQCfwJAAn8CQCACBEACQAJAAkAgAUEATgRAIAMoAghFDQIgAygCBCIADQEgAQ0DDAULIARBCGpBADYCAAwGCyADKAIAIAAgAiABELcBDAQLIAFFDQILIAEgAhDBAQwCCyAEIAE2AgQgBEEIakEANgIADAILIAILIgAEQCAEIAA2AgQgBEEIaiABNgIAQQAMAgsg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IQQgAygCXARAIANB4ABqKAIAEA8LIAQgAikDMDcCACAEQQhqIAJBMGoiB0EIaiIEKAIANgIAIANBsAFqQQA2AgAgA0GsAWpBAjoAACADQQI6AKgBIANB/ABqQQE6AAAgA0IANwJ0IANBADoAuQEgA0GAgAQ2ALUBIANCADcCUCADQaQBakGAgIAINgIAIANBoAFqQQI6AAAgA0GcAWpBAjoAACADQZgBakEANgIAIANBkAFqQoCAgAg3AgAgA0GMAWpBAjoAACADQYgBakECOgAAIANCADcCgAEgAyADKAJMIgVBAWs2AlggAkEIaiAFEGsgBEEANgIAIAIgAikDCDcDMCAHIAVBARBPIAJBGGoiBSAEKAIANgIAIAIgAikDMDcDECADQegAaiEEIAMoAmgEQCADQewAaigCABAPCyAEIAIpAxA3AgAgBEEIaiAFKAIANgIAIANBADoAuwEgAkHQAGokAAwBCwJAAkAgBEEoaw4CAAECCyADQQA6ALIBDAELIAJBMEYEQCADQQE6ALMBDAELIANBADoAswELDAQLIAMgAhAdDAMLIAZBADoAGAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBkEUaigCACIERQRAIAJBQGoONgECAxIEBQYfFgcICQoLICAMICANDiAgDxAgESAgICAgHxITIBQVFhcYICAgHh0gICAgHBsaGSALIAZBEGooAgBBACAEGyEEAkACQAJAAkAgAkHsAGsOBQEjIyMDAAsgAkHoAEYNAQwiCyAEKAIAQT9HDSEgBigCCCICBEAgBigCBCEFIAJBAXQhBCADQagBaiECIANBiAFqIQcDQAJAAkAgBS8BACIIQZYITQRAAkACQAJAAkAgCEEGaw4CAQIACyAIQRlGDQIgCEEvRg0EDAULIANBADoAuQEgA0IANwJ0IANBADoAtgEMBAsgA0EAOgC3AQwDCyADQQA6AHwMAgsCQAJAIAhBlwhrDgMCAQADCyADEEcgA0EAOgC5ASADIAMpAoABNwJ0IAIgBykCADcCACACQQhqIAdBCGovAQA7AQAgAyADLwGSATsBtgEgAxAzDAILIANBADoAuQEgAyADKQKAATcCdCACIAcpAgA3AgAgAyADLwGSATsBtgEgAkEIaiAHQQhqLwEAOwEADAELIAMQRyADEDMLIAVBAmohBSAEQQJrIgQNAAsLDCELIAQoAgBBP0cNICAGKAIIIgIEQCAGKAIEIQggAkEBdCEEIANBiAFqIQcgA0GoAWohCgNAAkACQAJAIAgvAQAiAkGWCE0EQAJAAkACQAJAIAJBBmsOAgECAAsgAkEZRg0CIAJBL0YNBAwGCyADQQE6ALYBIANBADoAuQEgA0EANgJ0IAMgAygCVDYCeAwFCyADQQE6ALcBDAQLIANBAToAfAwDCwJAIAJBlwhrDgMBAgADCyADIAMoAng2AoQBIAcgCikCADcCACADIAMvAbYBOwGSASAHQQhqIApBCGovAQA7AQAgAyADKAJ0IgIgAygCSEEBayIFIAIgBUkbNgKAAQtBACECIwBBIGsiBSQAIAMtALQBRQRAIANBAToAtAEDQCACIANqIglBlAFqIgsoAgAhDCALIAlBgAFqIgkoAgA2AgAgCSAMNgIAIAJBBGoiAkEURw0AC0EAIQIDQCACIANqIglBIGoiCygCACEMIAsgCSgCADYCACAJIAw2AgAgAkEEaiICQSBHDQALIAUgAygCSCADKAJMIgJBAUEAIANBqAFqECsgA0EQaiIJEHogAygCEARAIANBFGooAgAQDwsgAyAFKQMANwIAIANBGGogBUEYaikDADcCACAJIAVBEGopAwA3AgAgA0EIaiAFQQhqKQMANwIAIANB6ABqQQAgAhBsCyAFQSBqJAAgAxAzDAELIAMgAygCeDYChAEgByAKKQIANwIAIAMgAy8BtgE7AZIBIAdBCGogCkEIai8BADsBACADIAMoAnQiAiADKAJIQQFrIgUgAiAFSRs2AoABCyAIQQJqIQggBEECayIEDQALCwwgCyAEKAIAQSFHDR8gA0EAOwC1ASADQQI6AKgBIANCADcCUCADQgA3AoABIANB/ABqQQE6AAAgA0GsAWpBAjoAACADQbABakEANgIAIANBjAFqQQI6AAAgA0GIAWpBAjoAACADQZABakGAgIAINgIAIAMgAygCTEEBazYCWAwfCyMAQRBrIgIkACAGKAIEQayawAAgBigCCBsvAQAhBSADQfgAaigCACEEIAMoAnQhByACQQxqIANBsAFqLwEAOwEAIAIgAykCqAE3AgQgAygCCCEIIAMgBEHYlcAAEHYgAkEgNgIAIAcgBUEBIAUbIgUgCCAHayIHIAUgB0kbIAIQPyADQfAAaigCACIFIARNBEAgBCAFQcCTwAAQUwALIANB7ABqKAIAIARqQQE6AAAgAkEQaiQADB4LIANBADoAuQEgAyADKAJ0IgIgAygCSEEBayIEIAIgBEkbNgJ0QQAgAygCVCICIANB+ABqIgQoAgAiBSACSRshAiAEIAIgBSAGKAIEQayawAAgBigCCBsvAQAiBEEBIAQbayIEIAIgBEobNgIADB0LIAMgBhBWDBwLIAMtALkBIQIgA0EAOgC5ASADQQAgAygCdCAGKAIEQayawAAgBigCCBsvAQAiBEEBIAQbIgRBf3NBACAEayACG2oiAiADKAJIIgRBAWsgAiAESRsgAkEASBs2AnQMGwsgA0EAOgC5ASADQQA2AnQgAygCTEEBayADKAJYIgIgA0H4AGoiBCgCACIFIAJLGyECIAQgAiAFIAYoAgRBrJrAACAGKAIIGy8BACIEQQEgBBtqIgQgAiAESRs2AgAMGgsgA0EAOgC5ASADQQA2AnRBACADKAJUIgIgA0H4AGoiBCgCACIFIAJJGyECIAQgAiAFIAYoAgRBrJrAACAGKAIIGy8BACIEQQEgBBtrIgQgAiAEShs2AgAMGQsjAEEQayICJAAgAkEIaiADQdwAaiADKAJ0IAYoAgRBrJrAACAGKAIIGy8BACIEQQEgBBsQLiACKAIMIQQgAigCCCEFIANBADoAuQEgAyAEIAMoAkgiBEEBayIHIAUbIgUgByAEIAVLGzYCdCACQRBqJAAMGAsCQAJAAkACQCAGKAIEQayawAAgBigCCBsvAQAOAwABAgMLIAMgAygCdCADQfgAaiICKAIAQQEgAyADQagBahAmIANB6ABqIAIoAgAgAygCTBBsDAILIAMgAygCdCADQfgAaiICKAIAQQIgAyADQagBahAmIANB6ABqQQAgAigCAEEBahBsDAELIANBACADKAIMIANBqAFqEEIgA0HoAGpBACADKAJMEGwLDBcLAkACQAJAAkACQCAGKAIEQayawAAgBigCCBsvAQAOAwABAgQLIAMoAgghAiADKAJ0IQUgAyADQfgAaigCACIEQZiWwAAQdiIHIAUgAiADQagBahBJIAdBADoADAwCCyADKAIIIQIgAygCdEEBaiEFIAMgA0H4AGoo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BUEURg0BDAILIANBADoAtQEMAQsgA0EAOgC4AQsgBEECaiEEIAJBAmsiAg0ACwwBCyADQQA6ALkBIAMgBigCBEGsmsAAIAYoAggbLwEAIgJBASACG0EBayICIAMoAkgiBEEBayACIARJGzYCdAsMAgsgBkEKOgAYDAELIAZBCzoAGAsgASASRw0ACwsgAy0AHARAAkAgAygCAEUNACADKAIEIgIgA0EYaigCACIBIAMoAgxrIgRPDQAgA0EUaigCACABIAQgAmsiAhCZASADQRBqIAEgAmsQWgsgA0EAOgAcCyMAQRBrIgEkACADQfAAaigCACEIIANB7ABqKAIAIQogAUEANgIIIAEgCjYCBCABIAggCmo2AgAjAEEwayIGJAAgASgCBCECIAEoAgAhBQJAAkADQCACIAVGDQEgASACQQFqIgQ2AgQgASABKAIIIgdBAWo2AgggAi0AACAEIQJFDQALIAZBCGohAkEQQQQQwQEiBEUEQEEQQQRB6MXAACgCACIAQdwAIAAbEQIAAAsgAiAENgIEIAJBBDYCACAGKAIIIQQgBigCDCIFIAc2AgAgBkEQaiICQQhqIglBATYCACAGIAU2AhQgBiAENgIQIAZBIGoiBEEIaiABQQhqKAIANgIAIAYgASkCADcDICAEKAIEIQUgBCgCACELA0ACQAJAIAUgC0cEQCAEIAVBAWoiBzYCBCAFLQAAIAQgBCgCCCIQQQFqNgIIIAchBUUNAyACKAIIIgcgAigCAEcNASACIAcQcgwBCwwBCyACIAdBAWo2AgggAigCBCAHQQJ0aiAQNgIADAELCyANQQhqIAkoAgA2AgAgDSAGKQMQNwIADAELIA1BADYCCCANQoCAgIDAADcCAAsgBkEwaiQAIA0gAy0AuwE6AAwgCARAIApBACAIEOcBCyADQQA6ALsBIAFBEGokACMAQUBqIgQkACAEQQA7ARggBEEAOgAaIARBMGogBEEYahC0AQJ/AkACQAJ/AkAgBCgCOARAIARBIGoiBUEIaiAEQThqKAIANgIAIAQgBCkDMDcDICAEQRBqIQojAEEQayIHJAAgBSgCBCEQIAdBCGohCSAFKAIIIQMjAEEwayIBJAAgDSgCBCECIAFBIGogAyANKAIIIgMQswECfwJAAkAgASgCKARAIAFBGGogAUEoaigCADYCACABIAEpAyA3AxAgA0ECdCEIA0AgCEUNAyAIQQRrIQggASACNgIgIAJBBGohAiABQQhqIQsjAEEQayIDJAAgAUEQaiIGKAIEIRIgA0EIaiAGKAIIIAFBIGooAgA1AgAQQCADKAIMIQwgAygCCCIURQRAIAYgEiAMEMsBIAYgBigCBEEBajYCBAsgCyAUNgIAIAsgDDYCBCADQRBqJAAgASgCCEUNAAsgASgCDCECIAEoAhAiA0GEAUkNASADEAAMAQsgASgCICECC0EBDAELIAFBIGoiAkEIaiABQRhqKAIANgIAIAEgASkDEDcDICABIAIoAgA2AgQgAUEANgIAIAEoAgQhAiABKAIACyEDIAkgAjYCBCAJIAM2AgAgAUEwaiQAIAcoAgwhASAHKAIIIgJFBEAgBSAQIAEQywEgBSAFKAIEQQFqNgIECyAKIAI2AgAgCiABNgIEIAdBEGokACAEKAIQRQ0BIAQoAhQMAgsgBCgCMCEBDAMLIARBCGohBSMAQRBrIgEkACAEQSBqIgIoAgQhAyACKAIIGiABQQhqIgdBggFBgwEgDUEMai0AABs2AgQgB0EANgIAIAEoAgwhByABKAIIIg1FBEAgAiADIAcQywEgAiACKAIEQQFqNgIECyAFIA02AgAgBSAHNgIEIAFBEGokACAEKAIIRQ0BIAQoAgwLIQEgBCgCICICQYQBSQ0BIAIQAAwBCyAEQTBqIgFBCGogBEEoaigCADYCACAEIAQpAyA3AzAgBCABKAIANgIEIARBADYCACAEKAIEIQEgBCgCAAwBC0EBCyECIA4gATYCBCAOIAI2AgAgBEFAayQAIA4oAgQhASAOKAIABEAgDiABNgIcQZCDwABBKyAOQRxqQbyDwABB2IPAABBKAAsgDkEIahCtASAOQSBqJAAgEQRAIBMQDwsgAEEANgIAIA9BIGokACABDwsQ4AEACxDhAQALsQQBCH8jAEEQayICJAACQCABBEAgASgCACIEQX9GDQEgASAEQQFqNgIAIwBBEGsiBCQAIARBCGogAUHoAGopAgA3AwAgBCgCDCEDIAQoAgghBUEIQQQQwQEiBkUEQEEIQQRB6MXAACgCACIAQdwAIAAbEQIAAAsgBiAFNgIAIAJBAjYCCCACIAY2AgQgAkECNgIAIAYgAzYCBCAEQRBqJAAgASABKAIAQQFrNgIAIAAhBiACKAIIIgAgAigCAEkEQCMAQRBrIgUkACAFQQhqIQgjAEEgayIDJAACQCAAIgQgAigCAE0EQCADQQhqIQACQCACKAIAIgEEQCAAQQQ2AgggACABQQJ0NgIEIAAgAigCBDYCAAwBCyAAQQA2AggLAkAgAygCECIBBEAgBEECdCEHIAMoAgwhACADKAIIIQkCfyAERQRAIAAEQCAJEA8LIAEMAQsgCSAAIAEgBxC3AQsiAEUNASACIAQ2AgAgAiAANgIEC0GBgICAeCEBCyAIIAE2AgQgCCAHNgIAIANBIGokAAwBCyADQRRqQQE2AgAgA0EcakEANgIAIANBpIDAADYCECADQYCAwAA2AhggA0EANgIIIANBCGpB+IDAABCNAQALIAUoAgwiAEGBgICAeEcEQCAFKAIIIABB6MXAACgCACIAQdwAIAAbEQIAAAsgBUEQaiQAIAIoAgghAAsgBiAANgIEIAYgAigCBDYCACACQRBqJAAPCxDgAQALEOEBAAt7AQN/AkAgAUUEQEEEIQIMAQsCfwJAAkAgAUGAgIDAAEkiAkUNACABQQR0IgNBAEgNACACQQJ0IQQgA0UNASADIAQQwQEMAgsQhwEACyAECyICDQAgAyAEQejFwAAoAgAiAEHcACAAGxECAAALIAAgAjYCBCAAIAE2AgALdgEDfyABIAAoAgAgACgCCCIDa0sEQCAAIAMgARB0IAAoAgghAwsgACgCBCIFIANqIQQCQAJAIAFBAk8EQCAEIAIgAUEBayIBEOcBIAUgASADaiIDaiEEDAELIAFFDQELIAQgAjoAACADQQFqIQMLIAAgAzYCCAuoAQEDfyMAQRBrIgYkACAGQQhqIAAgASACQYiXwAAQVyAGKAIIIQcCQCADIAIgAWsiBSADIAVJGyIDIAYoAgwiBU0EQCAFIANrIgUgByAFQQR0aiADEBIMAQtBwJ7AAEEhQeSewAAQcAALIAAgASABIANqIAQQQiABBEAgACABQQFrQZiXwAAQdkEAOgAMCyAAIAJBAWtBqJfAABB2QQA6AAwgBkEQaiQAC2kBAX8jAEEQayIBJAAgARBIIAAoAgAEQCAAKAIEEA8LIAAgASkDADcCACAAQQhqIAFBCGooAgA2AgAgACgCDARAIABBEGooAgAQDwsgAEKAgICAwAA3AgwgAEEUakEANgIAIAFBEGokAAuAAQEBfyMAQTBrIgIkACACIAE2AgQgAiAANgIAIAJBCGoiAEEMakEDNgIAIAJBHGpBAjYCACACQSBqIgFBDGpB2wA2AgAgAkH8qsAANgIQIAJBADYCCCACQdsANgIkIAIgATYCGCACIAJBBGo2AiggAiACNgIgIABBlKvAABCNAQALfQEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBCGoiAEEMakECNgIAIANBHGpBAjYCACADQSBqIgFBDGpB2wA2AgAgA0HErMAANgIQIANBADYCCCADQdsANgIkIAMgATYCGCADIAM2AiggAyADQQRqNgIgIAAgAhCNAQALqgEBA38jAEHgAWsiASQAIAFBCGohAyMAQeABayICJAACQAJAIAAEQCAAKAIADQEgAEEANgIAIAMgAiAAQdwBEOgBIgJBBHJB2AEQ6AEaIAAQDyACQeABaiQADAILEOABAAsQ4QEACyADEK0BIAFBFGoQrQEgAUE0aiIAEHogABCtASABQdQAaiIAEHogABCtASABQYABahCtASABQYwBahCtASABQeABaiQAC3UBAn8jAEEQayIEJAAgBEEIaiABKAIQIAIgAxC4ASAEKAIMIQIgBCgCCCIDRQRAAkAgASgCCEUNACABQQxqKAIAIgVBhAFJDQAgBRAACyABQQE2AgggAUEMaiACNgIACyAAIAM2AgAgACACNgIEIARBEGokAAt2AQJ/IABBADoAuQEgACAAKAJ0IgIgACgCSEEBayIDIAIgA0kbNgJ0IAAoAkxBAWsgACgCWCICIAIgAEH4AGoiAigCACIDSRshACACIAAgAyABKAIEQayawAAgASgCCBsvAQAiAUEBIAEbaiIBIAAgAUkbNgIAC2cBAX8jAEEQayIFJAAgBUEIaiABEH8CQCACIANNBEAgBSgCDCIBIANJDQEgBSgCCCEBIAAgAyACazYCBCAAIAEgAkEEdGo2AgAgBUEQaiQADwsgAiADIAQQ0QEACyADIAEgBBDQAQALcwAjAEEwayIBJABBxMXAAC0AAARAIAFBFGpBAjYCACABQRxqQQE2AgAgAUGEp8AANgIQIAFBADYCCCABQdsANgIkIAEgADYCLCABIAFBIGo2AhggASABQSxqNgIgIAFBCGpBrKfAABCNAQALIAFBMGokAAt5AQN/IwBBEGsiAiQAIAEoAgRFBEAgASgCDCEDIAJBCGoiBEEANgIAIAJCgICAgBA3AwAgAiACNgIMIAJBDGpBnKbAACADEBYaIAFBCGogBCgCADYCACABIAIpAwA3AgALIABB+KfAADYCBCAAIAE2AgAgAkEQaiQAC1oBAX8CQCAAKAIIIgIgAUkNACAAIAE2AgggASACRg0AIAIgAWshAiAAKAIEIAFBBHRqIQEDQCABKAIABEAgAUEEaigCABAPCyABQRBqIQEgAkEBayICDQALCwvyAgEEfyMAQRBrIgYkACABBEAgBiABIAMgBCAFIAIoAhARBwAgBigCCCIBIAYoAgBJBEAjAEEQayIDJAAgA0EIaiEIIwBBIGsiAiQAAkACQCAGKAIAIgQgAU8EQEGBgICAeCEFIAQNAQwCCyACQRRqQQE2AgAgAkEcakEANgIAIAJBoIfAADYCECACQfyGwAA2AhggAkEANgIIIAJBCGpB9IfAABCNAQALIARBAnQhByAGKAIEIQkCQCABRQRAQQQhByAJEA8MAQtBBCEFIAkgB0EEIAFBAnQiBBC3ASIHRQ0BCyAGIAE2AgAgBiAHNgIEQYGAgIB4IQULIAggBTYCBCAIIAQ2AgAgAkEgaiQAIAMoAgwiAUGBgICAeEcEQCADKAIIIAFB6MXAACgCACIAQdwAIAAbEQIAAAsgA0EQaiQAIAYoAgghAQsgBigCBCECIAAgATYCBCAAIAI2AgAgBkEQaiQADwtBhIjAAEEyEN8BAAtfAQJ/IwBBIGsiAiQAIAAoAgAhAyACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAIgAzYCBCACQQRqQYSmwAAgABAWIAJBIGokAAtfAQJ/IwBBIGsiAiQAIAAoAgAhAyACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAIgAzYCBCACQQRqQZymwAAgABAWIAJBIGokAAtfAQJ/IwBBIGsiAiQAIAAoAgAhAyACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAIgAzYCBCACQQRqQdCowAAgABAWIAJBIGokAAtfAQJ/IwBBIGsiAiQAIAAoAgAhAyACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAIgAzYCBCACQQRqQZywwAAgABAWIAJBIGokAAt7AQF/IwBBEGsiAiQAIAIgAEEcajYCDCABQeCYwABBBkHmmMAAQQUgAEEQakHsmMAAQfyYwABBBCAAQQhqQYCZwABBkJnAAEEEIABBDGpBgJnAAEGUmcAAQRAgAEGkmcAAQbSZwABBCyACQQxqQcCZwAAQLyACQRBqJAALhQICBH8BfiMAQSBrIgMkACADQRxqIAJBCGovAAA7AQAgAyACKQAANwIUIANBCGogARBOIAMpAwghByAAQQA2AgggACAHNwIAIANBIDYCECADQRBqIQUgASAAKAIAIAAoAggiAmtLBEAgACACIAEQdSAAKAIIIQILIAAoAgQgAkEEdGohBCABQQJPBEAgAUEBayEGA0AgBCAFKQIANwIAIARBCGogBUEIaikCADcCACAEQRBqIQQgBkEBayIGDQALIAEgAmpBAWshAgsgACABBEAgBCAFKQIANwIAIARBCGogBUEIaikCADcCACACQQFqIQILIAI2AgggAEEAOgAMIANBIGokAAt7AQF/IwBBEGsiAiQAIAIgAEETajYCDCABQeChwABBCEHoocAAQQogAEH0ocAAQYSiwABBCiAAQQRqQfShwABBjqLAAEEDIABBCGpBlKLAAEGkosAAQQsgAEESakGwosAAQcCiwABBDiACQQxqQdCiwAAQLyACQRBqJAALowEBBX8gACgCCCICRQRAQQAPCyAAKAIEQRBrIQUgAkEEdCEAIAJBAWtB/////wBxQQFqIQICQANAQQAhBAJAIAAgBWoiASgCAEEgRw0AIAEtAARBAkcNACABQQhqLQAAQQJHDQAgAUENai0AAA0AIAFBDGotAAAiAUEPcQ0AIAFBEHFFIQQLIARFDQEgA0EBaiEDIABBEGsiAA0ACyACIQMLIAMLWAEBfyMAQSBrIgIkACACIAA2AgQgAkEIaiIAQRBqIAFBEGopAgA3AwAgAEEIaiABQQhqKQIANwMAIAIgASkCADcDCCACQQRqQYSmwAAgABAWIAJBIGokAAtYAQF/IwBBIGsiAiQAIAIgADYCBCACQQhqIgBBEGogAUEQaikCADcDACAAQQhqIAFBCGopAgA3AwAgAiABKQIANwMIIAJBBGpBnLDA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IQggBigCAAshASAPIAg2AgQgDyABNgIAIAZBMGokACAJKAIMIQECQCAJKAIIRQRAIAlBEGoiBCgCCCICBEAgBCgCBCEIA0AgCBCtASAIQRhqIQggAkEBayICDQALCyAJKAIQBEAgCSgCFBAPCyAJQUBrJAAMAQsgCSABNgIgQZCDwABBKyAJQSBqQbyDwABB8IPAABBKAAsgACAAKAIAQQFrNgIAIAEPCxDgAQALEOEBAAs6AQF/IAAoAggiAQRAIAAoAgQhAANAIAAoAgAEQCAAQQRqKAIAEA8LIABBEGohACABQQFrIgENAAsLC0YBAX8gAiAAKAIAIAAoAggiA2tLBEAgACADIAIQdSAAKAIIIQMLIAAoAgQgA0EEdGogASACQQR0EOgBGiAAIAIgA2o2AggLSwAgASAAIAJBuJXAABB2IgAoAggiAk8EQCABIAJB0J/AABBTAAsgACgCBCABQQR0aiIAIAMpAgA3AgAgAEEIaiADQQhqKQIANwIAC8oEAQd/AkAgAARAIAAoAgAiAkF/Rg0BIAAgAkEBajYCACMAQTBrIgQkACAEQSBqIgFBCGogAEEEaiICQZgBaigCADYCACABIAJBkAFqKQIANwIAIARBEGoiAiABLQAIBH8gAiABKQIANwIEQQEFQQALNgIAIwBBIGsiAyQAIANBADsBGCADQQA6ABogBEEIaiEGAn8gAigCAEUEQCADQQhqIgJBADYCACACQYEBQYABIANBGGotAAAbNgIEIAMoAgwhASADKAIIDAELIANBEGohByACQQRqIQIjAEFAaiIBJAAgAUEwaiADQRhqELQBAn8CQAJAAn8CQCABKAI4BEAgAUEgaiIFQQhqIAFBOGooAgA2AgAgASABKQMwNwMgIAFBGGogBSACEGggASgCGEUNASABKAIcDAILIAEoAjAhAgwDCyABQRBqIAFBIGogAkEEahBoIAEoAhBFDQEgASgCFAshAiABKAIgIgVBhAFJDQEgBRAADAELIAFBMGoiAkEIaiABQShqKAIANgIAIAEgASkDIDcDMCABQQhqIgUgAigCADYCBCAFQQA2AgAgASgCDCECIAEoAggMAQtBAQshBSAHIAI2AgQgByAFNgIAIAFBQGskACADKAIUIQEgAygCEAshAiAGIAE2AgQgBiACNgIAIANBIGokACAEKAIMIQIgBCgCCARAIAQgAjYCIEGQg8AAQSsgBEEgakG8g8AAQYCEwAAQSgALIARBMGokACAAIAAoAgBBAWs2AgAgAg8LEOABAAsQ4QEAC0cBA38gAUEYaigCACICIAEoAgwiA2shBCACIANJBEAgBCACQeiXwAAQzwEACyAAIAM2AgQgACABQRRqKAIAIARBBHRqNgIAC0cBA38gAUEYaigCACICIAEoAgwiA2shBCACIANJBEAgBCACQfiXwAAQzwEACyAAIAM2AgQgACABQRRqKAIAIARBBHRqNgIAC0kBAX8gACgCACIAKAIIIQMgAiAAKAIAIANrSwRAIAAgAyACEDEgACgCCCEDCyAAKAIEIANqIAEgAhDoARogACACIANqNgIIQQALSQEBfyAAKAIAIgAoAgghAyACIAAoAgAgA2tLBEAgACADIAIQMiAAKAIIIQMLIAAoAgQgA2ogASACEOgBGiAAIAIgA2o2AghBAAufAQEEfyMAQRBrIgIkACACIAE2AgwgAiAAKAIEIAAoAgggAkEMahBBIAIoAgBBAUYEQCACKAIEIQQgACgCCCIDIAAoAgBGBEAgACADEHILIAAoAgQgBEECdGohBQJAIAMgBE0EQCADIARGDQEgBCADEFIACyAFQQRqIAUgAyAEa0ECdBDmAQsgBSABNgIAIAAgA0EBajYCCAsgAkEQaiQAC00BAX8jAEEQayICJAAgAiAAKAIAIgBBDGo2AgwgAUGwoMAAQQRBtKDAAEEFIABBvKDAAEHMoMAAQQcgAkEMakHUoMAAEDsgAkEQaiQAC/oBAQN/IwBBEGsiAiQAIAIgATYCDCACIAAoAgQgACgCCCACQQxqEEEgAigCAEUEQAJAIAIoAgQiASAAKAIIIgNJBEAgACgCBCABQQJ0aiIEKAIAGiAEIARBBGogAyABQX9zakECdBDmASAAIANBAWs2AggMAQsjAEEwayIAJAAgACADNgIEIAAgATYCACAAQQhqIgFBDGpBAzYCACAAQRxqQQI2AgAgAEEgaiICQQxqQdsANgIAIABBuKvAADYCECAAQQA2AgggAEHbADYCJCAAIAI2AhggACAAQQRqNgIoIAAgADYCICABQdSSwAAQjQEACwsgAkEQaiQAC0gBAX8jAEEQayICJAAgAiAAQRxqNgIMIAFBkJTAAEECQZKUwABBBiAAQZiU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EGsiBSQAIAVBCGohBiMAQSBrIgMkAAJAIAEoAgAiBCACTwRAIAYCf0GBgICAeCAERQ0AGiABKAIEIQcCQCACRQRAQQEhBCAHEA8MAQtBASAHIARBASACELcBIgRFDQEaCyABIAI2AgAgASAENgIEQYGAgIB4CzYCBCAGIAI2AgAgA0EgaiQADAELIANBFGpBATYCACADQRxqQQA2AgAgA0GgpcAANgIQIANB/KTAADYCGCADQQA2AgggA0EIakH0pcAAEI0BAAsgBSgCDCICQYGAgIB4RwRAIAUoAgggAkHoxcAAKAIAIgBB3AAgABsRAgAACyAFQRBqJAAgASgCCCECCyAAIAI2AgQgACABKAIENgIACy0BAn8gACAAKAJUIgIgACgCWEEBaiIDIAEgAEGoAWoQICAAQegAaiACIAMQbAstAQJ/IAAgACgCVCICIAAoAlhBAWoiAyABIABBqAFqEFAgAEHoAGogAiADEGwLNgACQCABLQAYQRBxQQR2RQRAIAEtABhBIHFBBXYNASAAIAEQ0gEPCyAAIAEQRQ8LIAAgARBGCxsAIABBEGoQeiAAKAIQBEAgAEEUaigCABAPCws2AAJAIAEtABhBEHFBBHZFBEAgAS0AGEEgcUEFdg0BIAAgARDTAQ8LIAAgARBEDwsgACABEEMLHgACQCAALQAMQQJGDQAgACgCAEUNACAAKAIEEA8LCyABAX8CQCAAQQRqKAIAIgFFDQAgACgCAEUNACABEA8LCyMAAkAgAUH8////B00EQCAAIAFBBCACELcBIgANAQsACyAACyUAIABFBEBBhIjAAEEyEN8BAAsgACACIAMgBCAFIAEoAhARCAALFQAgABB6IAAoAgAEQCAAKAIEEA8LCyMAIABFBEBBhIjAAEEyEN8BAAsgACACIAMgBCABKAIQERgACyMAIABFBEBBhIjAAEEyEN8BAAsgACACIAMgBCABKAIQERoACyMAIABFBEBBhIjAAEEyEN8BAAsgACACIAMgBCABKAIQEQUACyMAIABFBEBBhIjAAEEyEN8BAAsgACACIAMgBCABKAIQERwACyMAIABFBEBBhIjAAEEyEN8BAAsgACACIAMgBCABKAIQEQwACzAAIAEoAgAgAC0AAEECdCIAQYidwABqKAIAIABB0JzAAGooAgAgASgCBCgCDBEBAAswACAB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CyAALQAEBH9BAQUgACgCACIBKAIAQaKuwABBASABQQRqKAIAKAIMEQEACyAAQRBqJAALtAEBA38gACgCACIAKAIEIQIgACgCCCEDIwBBEGsiACQAIAEoAgBB/avAAEEBIAEoAgQoAgwRAQAhBCAAQQA6AAUgACAEOgAEIAAgATYCACADBEAgA0ECdCEBA0AgACACNgIMIAAgAEEMakH4i8AAENQBIAJBBGohAiABQQRrIgENAAsLIAAtAAQEf0EBBSAAKAIAIgEoAgBBoq7AAEEBIAFBBGooAgAoAgwRAQALIABBEGokAAsLACABBEAgABAPCwsZACABKAIAQcC+wABBBSABKAIEKAIMEQEACxMAIAAoAgAgASgCACACKAIAEAsLFAAgACgCACABIAAoAgQoAgwRAAALCAAgACABEBoLrwEBA38gACgCBCECIAAoAgghAyMAQRBrIgAkACABKAIAQf2rwABBASABKAIEKAIMEQEAIQQgAEEAOgAFIAAgBDoABCAAIAE2AgAgAwRAIANBBHQhAQNAIAAgAjYCDCAAIABBDGpB6IvAABDUASACQRBqIQIgAUEQayIBDQALCyAALQAEBH9BAQUgACgCACIBKAIAQaKuwABBASABQQRqKAIAKAIMEQEACyAAQRBqJAALrwEBA38gACgCBCECIAAoAgghAyMAQRBrIgAkACABKAIAQf2rwABBASABKAIEKAIMEQEAIQQgAEEAOgAFIAAgBDoABCAAIAE2AgAgAwRAIANBBHQhAQNAIAAgAjYCDCAAIABBDGpByIvAABDUASACQRBqIQIgAUEQayIBDQALCyAALQAEBH9BAQUgACgCACIBKAIAQaKuwABBASABQQRqKAIAKAIMEQEACyAAQRBqJAALEQAgACgCBCAAKAIIIAEQ5AELEAAgACgCACABIAIQhgFBAAsTACAAQYiowAA2AgQgACABNgIACxAAIAEgACgCACAAKAIEEBALEAAgASgCACABKAIEIAAQFgsNACAAIAEgAhCGAUEACw0AIAAoAgAgASACEAULDQAgACgCACABIAIQCgsMACAAKAIAEAlBAUYLoAQBBX8gACgCACEDIwBBEGsiBCQAAkAgAUH/AE0EQCADKAIIIgIgAygCAEYEQCMAQSBrIgAkAAJAAkAgAkEBaiICRQ0AIAMoAgAiBUEBdCIGIAIgAiAGSRsiAkEIIAJBCEsbIgJBf3NBH3YhBgJAIAUEQCAAQQE2AhggACAFNgIUIAAgA0EEaigCADYCEAwBCyAAQQA2AhgLIAAgAiAGIABBEGoQOCAAKAIEIQUgACgCAEUEQCADIAI2AgAgAyAFNgIEDAILIABBCGooAgAiAkGBgICAeEYNASACRQ0AIAUgAkHoxcAAKAIAIgBB3AAgABsRAgAACxCHAQALIABBIGokACADKAIIIQILIAMgAkEBajYCCCADKAIEIAJqIAE6AAAMAQsgBEEANgIMAn8gAUGAEE8EQCABQYCABE8EQCAEIAFBP3FBgAFyOgAPIAQgAUEGdkE/cUGAAXI6AA4gBCABQQx2QT9xQYABcjoADSAEIAFBEnZBB3FB8AFyOgAMQQQMAgsgBCABQT9xQYABcjoADiAEIAFBDHZB4AFyOgAMIAQgAUEGdkE/cUGAAXI6AA1BAwwBCyAEIAFBP3FBgAFyOgANIAQgAUEGdkHAAXI6AAxBAgshACAAIAMoAgAgAygCCCICa0sEQCADIAIgABAyIAMoAgghAgsgAygCBCACaiAEQQxqIAAQ6AEaIAMgACACajYCCAsgBEEQaiQAQQALDgAgACgCABoDQAwACwALfQEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBCGoiAEEMakECNgIAIANBHGpBAjYCACADQSBqIgFBDGpB2wA2AgAgA0HgscAANgIQIANBADYCCCADQdsANgIkIAMgATYCGCADIANBBGo2AiggAyADNgIgIAAgAhCNAQALfQEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBCGoiAEEMakECNgIAIANBHGpBAjYCACADQSBqIgFBDGpB2wA2AgAgA0GAssAANgIQIANBADYCCCADQdsANgIkIAMgATYCGCADIANBBGo2AiggAyADNgIgIAAgAhCNAQALfQEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBCGoiAEEMakECNgIAIANBHGpBAjYCACADQSBqIgFBDGpB2wA2AgAgA0G0ssAANgIQIANBADYCCCADQdsANgIkIAMgATYCGCADIANBBGo2AiggAyADNgIgIAAgAhCNAQALCwAgADUCACABECILCwAgADEAACABECILyQICBH8CfiMAQUBqIgMkAEEB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ZXkAAQAAAAwAAAAEAAAAAgAAAAMAAAAEAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseQAFAAAAAAAAAAEAAAAGAAAAL3J1c3RjLzkwYzU0MTgwNmYyM2ExMjcwMDJkZTViNDAzOGJlNzMxYmExNDU4Y2EvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzABwBEABLAAAA3QkAAA4AAABgdW53cmFwX3Rocm93YCBmYWlsZWQAAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlAAgAAAAEAAAABAAAAAkAAABzcmMvbGliLnJzAADMARAACgAAACIAAAAwAAAAkAEQAAAAAADMARAACgAAADEAAAAtAAAAzAEQAAoAAAA3AAAALwAAAGZnYmdmYWludAFib2xkaXRhbGljdW5kZXJsaW5lc3RyaWtldGhyb3VnaGJsaW5raW52ZXJzZXJnYigsKUYCEAAEAAAASgIQAAEAAABKAhAAAQAAAEsCEAABAAAAIGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIGEgSmF2YVNjcmlwdCBudW1iZXJsAhAAAAAAAGwCEAAsAAAADAAAAAwAAAAEAAAADQAAAA4AAAAEAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseQAPAAAAAAAAAAEAAAAGAAAAL3J1c3RjLzkwYzU0MTgwNmYyM2ExMjcwMDJkZTViNDAzOGJlNzMxYmExNDU4Y2EvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAAgDEABLAAAA3QkAAA4AAABFcnJvcgAAAA8AAAAEAAAABAAAABAAAABUcmllZCB0byBzaHJpbmsgdG8gYSBsYXJnZXIgY2FwYWNpdHl8AxAAJAAAAC9ydXN0Yy85MGM1NDE4MDZmMjNhMTI3MDAyZGU1YjQwMzhiZTczMWJhMTQ1OGNhL2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMucnOoAxAATAAAAK4BAAAJAAAAY2xvc3VyZSBpbnZva2VkIHJlY3Vyc2l2ZWx5IG9yIGFmdGVyIGJlaW5nIGRyb3BwZWRhc3NlcnRp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YWxsZWQgYE9wdGlvbjo6dW53cmFwKClgIG9uIGEgYE5vbmVgIHZhbHVlAClbAAByAAAAAAAAAAEAAABzAAAAaW5kZXggb3V0IG9mIGJvdW5kczogdGhlIGxlbiBpcyAgYnV0IHRoZSBpbmRleCBpcyAAABAWEAAgAAAAMBYQABIAAABtYXRjaGVzIT09PWFzc2VydGlvbiBmYWlsZWQ6IGAobGVmdCAgcmlnaHQpYAogIGxlZnQ6IGBgLAogcmlnaHQ6IGBgOiAAAABfFhAAGQAAAHgWEAASAAAAihYQAAwAAACWFhAAAwAAAGAAAABfFhAAGQAAAHgWEAASAAAAihYQAAwAAAC8FhAAAQAAADogAAD8FRAAAAAAAOAWEAACAAAAcgAAAAwAAAAEAAAAdAAAAHUAAAB2AAAAICAgICB7CiwKLCAgeyB9IH0oCigsCl1saWJyYXJ5L2NvcmUvc3JjL2ZtdC9udW0ucnMAACMXEAAbAAAAZQAAABQAAAAweDAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5AAByAAAABAAAAAQAAAB3AAAAeAAAAHkAAABsaWJyYXJ5L2NvcmUvc3JjL2ZtdC9tb2QucnMANBgQABsAAABcCAAACQAAAHIAAAAIAAAABAAAAG8AAAB0cnVlZmFsc2VsaWJyYXJ5L2NvcmUvc3JjL3NsaWNlL21lbWNoci5ycwAAAHkYEAAgAAAAcQAAACcAAAByYW5nZSBzdGFydCBpbmRleCAgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggrBgQABIAAAC+GBAAIgAAAHJhbmdlIGVuZCBpbmRleCDwGBAAEAAAAL4YEAAiAAAAc2xpY2UgaW5kZXggc3RhcnRzIGF0ICBidXQgZW5kcyBhdCAAEBkQABYAAAAmGRAADQAAAGxpYnJhcnkvY29yZS9zcmMv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AToBAQIBBAgBBwMKAh4BOwEBAQwBCQEoAQMBNwEBAwUDAQQHAgsCHQE6AQIBAgEDAQUCBwILAhwCOQIBAQIECAEJAQoCHQFIAQQBAgMBAQgBUQECBwwIYgECCQsHSQIbAQEBAQE3DgEFAQIFCwEkCQFmBAEGAQICAhkCBAMQBA0BAgIGAQ8BAAMAAx0CHgIeAkACAQcIAQILCQEtAwEBdQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIBMB8xBDAHAQEFASgJDAIgBAICAQM4AQECAwEBAzoIAgKYAwENAQcEAQYBAwLGQAABwyEAA40BYCAABmkCAAQBCiACUAIAAQMBBAEZAgUBlwIaEg0BJggZCy4DMAECBAICJwFDBgICAgIMAQgBLwEzAQEDAgIFAgEBKgIIAe4BAgEEAQABABAQEAACAAHiAZUFAAMBAgUEKAMEAaUCAAQAAlADRgsxBHsBNg8pAQICCgMxBAICBwE9AyQFAQg+AQwCNAkKBAIBXwMCAQECBgECAZ0BAwgVAjkCAQEBARYBDgcDBcMIAgMBARcBUQECBgEBAgEBAgEC6wECBAYCAQIbAlUIAgEBAmoBAQECBgEBZQMCBAEFAAkBAvUBCgIBAQQBkAQCAgQBIAooBgIECAEJBgIDLg0BAgAHAQYBAVIWAgcBAgECegYDAQECAQcBAUgCAwEBAQACCwI0BQUBAQEAAQYPAAU7BwABPwRRAQACAC4CFwABAQMEBQgIAgceBJQDADcEMggBDgEWBQEPAAcBEQIHAQIBBWQBoAcAAT0EAAQAB20HAGCA8AB7CXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS43MC4wICg5MGM1NDE4MDYgMjAyMy0wNS0zMSkGd2FscnVzBjAuMTkuMAx3YXNtLWJpbmRnZW4SMC4yLjg0IChjZWE4Y2MzZDIpACwPdGFyZ2V0X2ZlYXR1cmVzAisPbXV0YWJsZS1nbG9iYWxzKwhzaWduLWV4dA==");function SA(A){return"number"==typeof A?A:"string"==typeof A?A.split(":").reverse().map(parseFloat).reduce(((A,g,I)=>A+g*Math.pow(60,I))):void 0}class LA{constructor(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.speed=A,this.startTime=performance.now()}getTime(){return this.speed*(performance.now()-this.startTime)/1e3}setTime(A){this.startTime=performance.now()-A/this.speed*1e3}}class UA{constructor(){}getTime(A){}setTime(A){}}const KA=(async()=>(await fA(pA),JA))();class mA{constructor(A){this.core=A,this.driver=A.driver}onEnter(A){}init(){}play(){}pause(){}togglePlay(){}seek(A){return!1}step(){}stop(){this.driver.stop()}}class HA extends mA{async init(){try{return await this.core.initializeDriver(),this.core.setState("stopped")}catch(A){throw this.core.setState("errored"),A}}async play(){this.core.dispatchEvent("play");const A=await this.init();return await A.doPlay()}togglePlay(){return this.play()}async seek(A){const g=await this.init();return await g.seek(A)}async step(){const A=await this.init();return await A.step()}stop(){}}class bA extends mA{onEnter(A){this.core.dispatchEvent("stopped"),"paused"===A.reason?this.core.dispatchEvent("pause"):"ended"===A.reason&&this.core.dispatchEvent("ended")}play(){return this.core.dispatchEvent("play"),this.doPlay()}async doPlay(){const A=await this.driver.play();!0===A?this.core.setState("playing"):"function"==typeof A&&(this.core.setState("playing"),this.driver.stop=A)}togglePlay(){return this.play()}seek(A){return this.driver.seek(A)}step(){this.driver.step()}}class qA extends mA{onEnter(){this.core.dispatchEvent("playing")}pause(){!0===this.driver.pause()&&this.core.setState("stopped",{reason:"paused"})}togglePlay(){return this.pause()}seek(A){return this.driver.seek(A)}}class vA extends mA{onEnter(){this.core.dispatchEvent("loading")}}class xA extends mA{onEnter(){this.core.dispatchEvent("offline")}}class TA extends mA{onEnter(){this.core.dispatchEvent("errored")}}class jA{constructor(A,g){this.logger=g.logger,this.state=new HA(this),this.stateName="uninitialized",this.driver=null,this.driverFn=A,this.changedLines=new Set,this.cursor=void 0,this.duration=void 0,this.cols=g.cols,this.rows=g.rows,this.speed=g.speed??1,this.loop=g.loop,this.idleTimeLimit=g.idleTimeLimit,this.preload=g.preload,this.startAt=SA(g.startAt),this.poster=this.parsePoster(g.poster),this.markers=this.normalizeMarkers(g.markers),this.pauseOnMarkers=g.pauseOnMarkers,this.commandQueue=Promise.resolve(),this.eventHandlers=new Map([["marker",[]],["ended",[]],["errored",[]],["init",[]],["input",[]],["loading",[]],["offline",[]],["pause",[]],["play",[]],["playing",[]],["reset",[]],["resize",[]],["seeked",[]],["stopped",[]],["terminalUpdate",[]]])}addEventListener(A,g){this.eventHandlers.get(A).push(g)}dispatchEvent(A){let g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const I of this.eventHandlers.get(A))I(g)}async init(){this.wasm=await KA;const A=this.feed.bind(this),g=this.now.bind(this),I=this.resetVt.bind(this),B=this.setState.bind(this),Q="npt"===this.poster.type?this.poster.value:void 0;this.driver=this.driverFn({feed:A,onInput:A=>{this.dispatchEvent("input",{data:A})},onMarker:A=>{let{index:g,time:I,label:B}=A;this.dispatchEvent("marker",{index:g,time:I,label:B})},reset:I,now:g,setTimeout:(A,g)=>window.setTimeout(A,g/this.speed),setInterval:(A,g)=>window.setInterval(A,g/this.speed),setState:B,logger:this.logger},{cols:this.cols,rows:this.rows,idleTimeLimit:this.idleTimeLimit,startAt:this.startAt,loop:this.loop,posterTime:Q,markers:this.markers,pauseOnMarkers:this.pauseOnMarkers}),"function"==typeof this.driver&&(this.driver={play:this.driver}),(this.preload||void 0!==Q)&&this.withState((A=>A.init()));const C="text"===this.poster.type?this.renderPoster(this.poster.value):void 0,E={isPausable:!!this.driver.pause,isSeekable:!!this.driver.seek,poster:C};if(void 0===this.driver.init&&(this.driver.init=()=>({})),void 0===this.driver.pause&&(this.driver.pause=()=>{}),void 0===this.driver.seek&&(this.driver.seek=A=>!1),void 0===this.driver.step&&(this.driver.step=()=>{}),void 0===this.driver.stop&&(this.driver.stop=()=>{}),void 0===this.driver.getCurrentTime){const A=this.driver.play;let g=new UA;this.driver.play=()=>(g=new LA(this.speed),A()),this.driver.getCurrentTime=()=>g.getTime()}return E}play(){return this.withState((A=>A.play()))}pause(){return this.withState((A=>A.pause()))}togglePlay(){return this.withState((A=>A.togglePlay()))}seek(A){return this.withState((async g=>{await g.seek(A)&&this.dispatchEvent("seeked")}))}step(){return this.withState((A=>A.step()))}stop(){return this.withState((A=>A.stop()))}withState(A){return this.enqueueCommand((()=>A(this.state)))}enqueueCommand(A){return this.commandQueue=this.commandQueue.then(A),this.commandQueue}getChangedLines(){if(this.changedLines.size>0){const A=new Map,g=this.vt.rows;for(const I of this.changedLines)I1&&void 0!==arguments[1]?arguments[1]:{};if(this.stateName===A)return this.state;if(this.stateName=A,"playing"===A)this.state=new qA(this);else if("stopped"===A)this.state=new bA(this);else if("loading"===A)this.state=new vA(this);else if("offline"===A)this.state=new xA(this);else{if("errored"!==A)throw`invalid state: ${A}`;this.state=new TA(this)}return this.state.onEnter(g),this.state}feed(A){this.doFeed(A),this.dispatchEvent("terminalUpdate")}doFeed(A){const[g,I]=this.vt.feed(A);if(g.forEach((A=>this.changedLines.add(A))),this.cursor=void 0,I){const[A,g]=this.vt.get_size();this.vt.cols=A,this.vt.rows=g,this.logger.debug(`core: vt resize (${A}x${g})`),this.dispatchEvent("resize",{cols:A,rows:g})}}now(){return performance.now()*this.speed}async initializeDriver(){const A=await this.driver.init();this.cols=this.cols??A.cols??80,this.rows=this.rows??A.rows??24,this.duration=this.duration??A.duration,this.markers=this.normalizeMarkers(A.markers)??this.markers??[],this.initializeVt(this.cols,this.rows);const g=void 0!==A.poster?this.renderPoster(A.poster):void 0;this.dispatchEvent("init",{cols:this.cols,rows:this.rows,duration:this.duration,markers:this.markers,poster:g})}resetVt(A,g){let I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.cols=A,this.rows=g,this.cursor=void 0,this.initializeVt(A,g),void 0!==I&&""!==I&&this.doFeed(I),this.dispatchEvent("reset",{cols:A,rows:g})}initializeVt(A,g){this.logger.debug(`core: vt init (${A}x${g})`),this.vt=this.wasm.create(A,g,!0,100),this.vt.cols=A,this.vt.rows=g,this.changedLines.clear();for(let A=0;AB.feed(A)));const Q=B.get_cursor()??!1,C=[];for(let A=0;A"number"==typeof A?[A,""]:A))}}const WA=Symbol("store-raw"),ZA=Symbol("store-node"),XA=Symbol("store-name");function OA(A,g){let B=A[I];if(!B&&(Object.defineProperty(A,I,{value:B=new Proxy(A,gg)}),!Array.isArray(A))){const g=Object.keys(A),I=Object.getOwnPropertyDescriptors(A);for(let Q=0,C=g.length;Q!0,deleteProperty:()=>!0,ownKeys:function(A){return $A(A),Reflect.ownKeys(A)},getOwnPropertyDescriptor:function(A,g){const B=Reflect.getOwnPropertyDescriptor(A,g);return B&&!B.get&&B.configurable&&g!==I&&g!==ZA&&g!==XA?(delete B.value,delete B.writable,B.get=()=>A[I][g],B):B}};function Ig(A,g,I,B=!1){if(!B&&A[g]===I)return;const Q=A[g],C=A.length;void 0===I?delete A[g]:A[g]=I;let E,e=PA(A);(E=_A(e,g,Q))&&E.$((()=>I)),Array.isArray(A)&&A.length!==C&&(E=_A(e,"length",C))&&E.$(A.length),(E=e._)&&E.$()}function Bg(A,g){const I=Object.keys(g);for(let B=0;B1){B=g.shift();const C=typeof B,E=Array.isArray(A);if(Array.isArray(B)){for(let Q=0;Q1)return void Qg(A[B],g,[B].concat(I));Q=A[B],I=[B].concat(I)}let C=g[0];"function"==typeof C&&(C=C(Q,I),C===Q)||void 0===B&&null==C||(C=zA(C),void 0===B||VA(Q)&&VA(C)&&!Array.isArray(C)?Bg(Q,C):Ig(A,B,C))}function Cg(...[A,g]){const I=zA(A||{}),B=Array.isArray(I);return[OA(I),function(...A){y((()=>{B&&1===A.length?function(A,g){if("function"==typeof g&&(g=g(A)),g=zA(g),Array.isArray(g)){if(A===g)return;let I=0,B=g.length;for(;I=E&&t>=E&&(C[e]===A[t]||Q&&C[E]&&A[E]&&C[e][Q]===A[t][Q]);e--,t--)n[t]=C[e];if(E>t||E>e){for(I=E;I<=t;I++)Ig(C,I,A[I]);for(;IA.length&&Ig(C,"length",A.length))}for(o=new Array(t+1),I=t;I>=E;I--)i=A[I],s=Q&&i?i[Q]:i,g=r.get(s),o[I]=void 0===g?-1:g,r.set(s,I);for(g=E;g<=e;g++)i=C[g],s=Q&&i?i[Q]:i,I=r.get(s),void 0!==I&&-1!==I&&(n[I]=C[g],I=o[I],r.set(s,I));for(I=E;IA.length&&Ig(C,"length",A.length))}const E=Object.keys(A);for(let g=0,I=E.length;g{if(!VA(A)||!VA(Q))return Q;const g=eg(Q,{[Eg]:A},Eg,I,B);return void 0===g?A:g}}const ig=O("");var og=A=>(()=>{const g=ig.cloneNode(!0);return AA(g,(()=>A.text)),w((I=>{const B=function(A,g){const I=A.get("inverse")?A.has("bg")?A.get("bg"):"bg":A.get("fg"),B=A.get("inverse")?A.has("fg")?A.get("fg"):"fg":A.get("bg"),Q=sg(I,A.get("bold"),"fg-"),C=sg(B,A.get("blink"),"bg-");let E=g??"";Q&&(E+=" "+Q);C&&(E+=" "+C);A.has("bold")&&(E+=" ap-bright");A.has("faint")&&(E+=" ap-faint");A.has("italic")&&(E+=" ap-italic");A.has("underline")&&(E+=" ap-underline");A.has("blink")&&(E+=" ap-blink");return E}(A.attrs,A.extraClass),Q=function(A){const g=A.get("inverse")?A.get("bg"):A.get("fg"),I=A.get("inverse")?A.get("fg"):A.get("bg");let B={};"string"==typeof g&&(B.color=g);"string"==typeof I&&(B["background-color"]=I);return B}(A.attrs);return B!==I._v$&&z(g,I._v$=B),I._v$2=_(g,Q,I._v$2),I}),{_v$:void 0,_v$2:void 0}),g})();function sg(A,g,I){return"number"==typeof A?(g&&A<8&&(A+=8),`${I}${A}`):"fg"==A||"bg"==A?`${I}${A}`:void 0}const ng=O('');var rg=A=>(()=>{const g=ng.cloneNode(!0);return AA(g,q(x,{get each(){return(()=>{if("number"==typeof A.cursor){const g=[];let I=0,B=0;for(;B0&&g.push([Q[0].substring(0,e),Q[1]]),g.push([Q[0][e],C," ap-cursor-a"]),g.push([Q[0][e],E," ap-cursor-b"]),eq(og,{get text(){return A()[0]},get attrs(){return A()[1]},get extraClass(){return A()[2]}})})),w((()=>g.style.setProperty("height",A.height))),g})();const ag=O('
');var cg=A=>{const g=()=>A.lineHeight??1.3333333333,I=h((()=>({width:`${A.cols}ch`,height:g()*A.rows+"em","font-size":100*(A.scale||1)+"%","font-family":A.fontFamily,"line-height":`${g()}em`})));return(()=>{const B=ag.cloneNode(!0),Q=A.ref;return"function"==typeof Q?$(Q,B):A.ref=B,AA(B,q(v,{get each(){return A.lines},children:(I,B)=>q(rg,{get segments(){return I.segments},get cursor(){return h((()=>B()===A.cursor?.[1]))()?A.cursor?.[0]:null},get height(){return`${g()}em`}})})),w((g=>{const Q=!(!A.blink&&!A.cursorHold),C=!!A.blink,E=I();return Q!==g._v$&&B.classList.toggle("ap-cursor",g._v$=Q),C!==g._v$2&&B.classList.toggle("ap-blink",g._v$2=C),g._v$3=_(B,E,g._v$3),g}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),B})()};const Dg=O(''),wg=O(''),hg=O(''),yg=O(''),lg=O('
'),Gg=O('');function kg(A){let g=Math.floor(A);const I=Math.floor(g/86400);g%=86400;const B=Math.floor(g/3600);g%=3600;const Q=Math.floor(g/60);return g%=60,I>0?`${Ng(I)}:${Ng(B)}:${Ng(Q)}:${Ng(g)}`:B>0?`${Ng(B)}:${Ng(Q)}:${Ng(g)}`:`${Ng(Q)}:${Ng(g)}`}function Ng(A){return A<10?`0${A}`:A.toString()}var ug=A=>{const g=A=>g=>{g.preventDefault(),A(g)},I=()=>"number"==typeof A.currentTime?kg(A.currentTime):"--:--",B=()=>"number"==typeof A.remainingTime?"-"+kg(A.remainingTime):I(),Q=h((()=>"number"==typeof A.duration?A.markers.filter((g=>g[0]{const g=A.currentTarget.offsetWidth,I=A.currentTarget.getBoundingClientRect(),B=A.clientX-I.left;return 100*Math.max(0,B/g)+"%"},[E,e]=D(!1),t=function(A,g){let I=!0;return function(){if(I){I=!1;for(var B=arguments.length,Q=new Array(B),C=0;CI=!0),g)}}}(A.onSeekClick,50),i=g=>{g.altKey||g.shiftKey||g.metaKey||g.ctrlKey||0!==g.button||(e(!0),A.onSeekClick(C(g)))},o=A=>{A.altKey||A.shiftKey||A.metaKey||A.ctrlKey||E()&&t(C(A))},s=()=>{e(!1)},n=g((A=>{A.stopPropagation()}));return document.addEventListener("mouseup",s),k((()=>{document.removeEventListener("mouseup",s)})),(()=>{const C=lg.cloneNode(!0),E=C.firstChild,e=E.firstChild,t=e.nextSibling,s=E.nextSibling,r=A.ref;return"function"==typeof r?$(r,C):A.ref=C,AA(C,q(T,{get when(){return A.isPausable},get children(){const I=hg.cloneNode(!0);return P(I,"click",g(A.onPlayClick),!0),AA(I,q(j,{get children(){return[q(W,{get when(){return A.isPlaying},get children(){return Dg.cloneNode(!0)}}),q(W,{get when(){return!A.isPlaying},get children(){return wg.cloneNode(!0)}})]}})),I}}),E),AA(e,I),AA(t,B),AA(C,q(T,{get when(){return"number"==typeof A.progress||A.isSeekable},get children(){const I=yg.cloneNode(!0),B=I.firstChild,C=B.firstChild.firstChild;return B.$$mousemove=o,B.$$mousedown=i,AA(B,q(v,{get each(){return Q()},children:(I,B)=>(()=>{const Q=Gg.cloneNode(!0),C=Q.firstChild,E=C.nextSibling;var e;return P(Q,"mousedown",n,!0),P(Q,"click",(e=B(),g((()=>{A.onSeekClick({marker:e})}))),!0),AA(E,(()=>(A=>""===A[1]?kg(A[0]):`${kg(A[0])} - ${A[1]}`)(I))),w((g=>{const B=(g=>g[0]/A.duration*100+"%")(I),E=!!(g=>"number"==typeof A.currentTime&&g[0]<=A.currentTime)(I);return B!==g._v$&&Q.style.setProperty("left",g._v$=B),E!==g._v$2&&C.classList.toggle("ap-marker-past",g._v$2=E),g}),{_v$:void 0,_v$2:void 0}),Q})()}),null),w((g=>_(C,{width:"100%",transform:`scaleX(${A.progress||0}`,"transform-origin":"left center"},g))),I}}),s),P(s,"click",g(A.onFullscreenClick),!0),w((()=>C.classList.toggle("ap-seekable",!!A.isSeekable))),C})()};V(["click","mousedown","mousemove"]);const Mg=O('
💥
');var dg=A=>Mg.cloneNode(!0);const Fg=O('
');var fg=A=>Fg.cloneNode(!0);const Jg=O('
Stream offline
');var Rg=A=>(()=>{const g=Jg.cloneNode(!0),I=g.firstChild;return w((g=>_(I,{"font-family":A.fontFamily},g))),g})();const Yg=O('
');var pg=A=>(()=>{const g=Yg.cloneNode(!0);var I;return P(g,"click",(I=A.onClick,A=>{A.preventDefault(),I(A)}),!0),g})();V(["click"]);const Sg=O('
');var Lg=A=>{const g=A.logger,I=A.core,B=A.autoPlay,[Q,C]=Cg({coreState:"stopped",lines:[],cursor:void 0,charW:A.charW,charH:A.charH,bordersW:A.bordersW,bordersH:A.bordersH,containerW:0,containerH:0,showStartOverlay:!B,isPausable:!0,isSeekable:!0,isFullscreen:!1,currentTime:null,remainingTime:null,progress:null,blink:!0,cursorHold:!1}),[E,e]=D({cols:A.cols,rows:A.rows}),[t,i]=D(void 0),[o,s]=Cg([]),[n,r]=D(!1),a=()=>E().cols||80,c=()=>E().rows||24,l=()=>!1===A.controls?0:32;let N,u,M,d,F,f,J,R,Y;function p(){gA(),O(),V()}function S(A){A.rows{let{cols:g,rows:I,duration:B,poster:Q,markers:C}=A;S({cols:g,rows:I}),i(B),s(C),L(Q)})),I.addEventListener("play",(()=>{C("showStartOverlay",!1)})),I.addEventListener("playing",(()=>{C("coreState","playing"),K(),P(),X()})),I.addEventListener("stopped",(()=>{C("coreState","stopped"),p()})),I.addEventListener("loading",(()=>{C("coreState","loading"),p()})),I.addEventListener("offline",(()=>{C("coreState","offline"),p()})),I.addEventListener("errored",(()=>{C({coreState:"errored",showStartOverlay:!1})})),I.addEventListener("resize",S),I.addEventListener("reset",(A=>{S(A),K()})),I.addEventListener("seeked",(()=>{V()})),I.addEventListener("terminalUpdate",(()=>{void 0===N&&(N=requestAnimationFrame(K))}));const U=()=>{Y=new ResizeObserver(function(A,g){let I;return function(){for(var B=arguments.length,Q=new Array(B),C=0;CA.apply(this,Q)),g)}}((A=>{C({containerW:F.offsetWidth,containerH:F.offsetHeight}),F.dispatchEvent(new CustomEvent("resize",{detail:{el:f}}))}),10)),Y.observe(F)};G((async()=>{g.info("player mounted"),g.debug("font measurements",{charW:Q.charW,charH:Q.charH}),U();const{isPausable:A,isSeekable:E,poster:e}=await I.init();C({isPausable:A,isSeekable:E,containerW:F.offsetWidth,containerH:F.offsetHeight}),L(e),B&&I.play()})),k((()=>{I.stop(),gA(),O(),Y.disconnect()}));const K=()=>{const A=I.getChangedLines();A&&y((()=>{A.forEach(((A,g)=>{C("lines",g,tg(A))}))})),C("cursor",tg(I.getCursor())),C("cursorHold",!0),N=void 0},m=h((()=>{g.debug(`containerW = ${Q.containerW}`);const I=Q.charW*a()+Q.bordersW,B=Q.charH*c()+Q.bordersH;let C=A.fit??"width";if("both"===C||Q.isFullscreen){C=Q.containerW/(Q.containerH-l())>I/B?"height":"width"}if(!1===C||"none"===C)return{};if("width"===C){const A=Q.containerW/I;return{scale:A,width:Q.containerW,height:B*A+l()}}if("height"===C){const A=(Q.containerH-l())/B;return{scale:A,width:I*A,height:Q.containerH}}throw`unsupported fit mode: ${C}`})),H=()=>{C("isFullscreen",document.fullscreenElement??document.webkitFullscreenElement)},b=()=>{Q.isFullscreen?(document.exitFullscreen??document.webkitExitFullscreen??(()=>{})).apply(document):(F.requestFullscreen??F.webkitRequestFullscreen??(()=>{})).apply(F)},v=A=>{if(!(A.altKey||A.metaKey||A.ctrlKey))if(A.shiftKey){if("ArrowLeft"==A.key)I.seek("<<<");else{if("ArrowRight"!=A.key)return;I.seek(">>>")}A.preventDefault()}else{if(" "==A.key)I.togglePlay();else if("."==A.key)I.step(),V();else if("f"==A.key)b();else if("ArrowLeft"==A.key)I.seek("<<");else if("ArrowRight"==A.key)I.seek(">>");else if("["==A.key)I.seek({marker:"prev"});else if("]"==A.key)I.seek({marker:"next"});else{if(!(A.key.charCodeAt(0)>=48&&A.key.charCodeAt(0)<=57))return;{const g=(A.key.charCodeAt(0)-48)/10;I.seek(100*g+"%")}}A.preventDefault()}},x=()=>{Q.isFullscreen&&IA(!0)},Z=()=>{Q.isFullscreen||IA(!1)},X=()=>{M=setInterval(V,100)},O=()=>{clearInterval(M)},V=()=>{const A=I.getCurrentTime(),g=I.getRemainingTime(),B=I.getProgress();C({currentTime:A,remainingTime:g,progress:B})},P=()=>{d=setInterval((()=>{C((A=>{const g={blink:!A.blink};return g.blink&&(g.cursorHold=!1),g}))}),500)},gA=()=>{clearInterval(d),C("blink",!0)},IA=A=>{clearTimeout(u),A&&(u=setTimeout((()=>IA(!1)),2e3)),r(A)},BA=(()=>{const g=Sg.cloneNode(!0),B=g.firstChild;"function"==typeof F?$(F,g):F=g,g.addEventListener("webkitfullscreenchange",H),g.addEventListener("fullscreenchange",H),g.$$mousemove=x,g.$$keydown=v,g.addEventListener("keypress",v);return"function"==typeof f?$(f,B):f=B,B.$$mousemove=()=>IA(!0),B.addEventListener("mouseleave",Z),AA(B,q(cg,{get cols(){return a()},get rows(){return c()},get scale(){return m()?.scale},get blink(){return Q.blink},get lines(){return Q.lines},get cursor(){return Q.cursor},get cursorHold(){return Q.cursorHold},get fontFamily(){return A.terminalFontFamily},get lineHeight(){return A.terminalLineHeight},ref(A){"function"==typeof J?J(A):J=A}}),null),AA(B,q(T,{get when(){return!1!==A.controls},get children(){return q(ug,{get duration(){return t()},get currentTime(){return Q.currentTime},get remainingTime(){return Q.remainingTime},get progress(){return Q.progress},markers:o,get isPlaying(){return"playing"==Q.coreState},get isPausable(){return Q.isPausable},get isSeekable(){return Q.isSeekable},onPlayClick:()=>I.togglePlay(),onFullscreenClick:b,onSeekClick:A=>I.seek(A),ref(A){"function"==typeof R?R(A):R=A}})}}),null),AA(B,q(j,{get children(){return[q(W,{get when(){return Q.showStartOverlay},get children(){return q(pg,{onClick:()=>I.play()})}}),q(W,{get when(){return"loading"==Q.coreState},get children(){return q(fg,{})}}),q(W,{get when(){return"offline"==Q.coreState},get children(){return q(Rg,{get fontFamily(){return A.terminalFontFamily}})}}),q(W,{get when(){return"errored"==Q.coreState},get children(){return q(dg,{})}})]}}),null),w((I=>{const Q=!!(!0===A.controls||"auto"===A.controls&&n()),C=`ap-player asciinema-theme-${A.theme??"asciinema"}`,E=(()=>{const g={};!1!==A.fit&&"none"!==A.fit||void 0===A.terminalFontSize||("small"===A.terminalFontSize?g["font-size"]="12px":"medium"===A.terminalFontSize?g["font-size"]="18px":"big"===A.terminalFontSize?g["font-size"]="24px":g["font-size"]=A.terminalFontSize);const I=m();return void 0!==I.width&&(g.width=`${I.width}px`,g.height=`${I.height}px`),g})();return Q!==I._v$&&g.classList.toggle("ap-hud",I._v$=Q),C!==I._v$2&&z(B,I._v$2=C),I._v$3=_(B,E,I._v$3),I}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),g})();return BA};V(["keydown","mousemove"]);class Ug{log(){}debug(){}info(){}warn(){}error(){}}class Kg{constructor(A,g){this.logger=A,this.prefix=g}log(A){for(var g=arguments.length,I=new Array(g>1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;B1?g-1:0),B=1;BI=>{g(A(I))}}(A))}flatMap(A){return this.transform(function(A){return g=>I=>{A(I).forEach(g)}}(A))}filter(A){return this.transform(function(A){return g=>I=>{A(I)&&g(I)}}(A))}take(A){return this.transform(function(A){let g=0;return I=>B=>{gB=>{g+=1,g>A&&I(B)}}(A))}transform(A){return new mg(this.input,this.xfs.concat([A]))}multiplex(A,g){return new mg(new bg(this[Symbol.iterator](),A[Symbol.iterator](),g))}toArray(){return Array.from(this)}[Symbol.iterator](){let A=0,g=[],I=!1;const B=(Q=this.xfs,C=A=>g.push(A),Q.reverse().reduce(((A,g)=>{const I=Hg(g(A.step));return{step:I.step,flush:()=>{I.flush(),A.flush()}}}),Hg(C)));var Q,C;return{next:()=>{for(A===g.length&&(g=[],A=0);0===g.length;){const A=this.input.next();if(A.done)break;B.step(A.value)}return 0!==g.length||I||(B.flush(),I=!0),g.length>0?{done:!1,value:g[A++]}:{done:!0}}}}}function Hg(A){return"function"==typeof A?{step:A,flush:()=>{}}:A}class bg{constructor(A,g,I){this.left=A,this.right=g,this.comparator=I}[Symbol.iterator](){let A,g;return{next:()=>{if(void 0===A&&void 0!==this.left){const g=this.left.next();g.done?this.left=void 0:A=g.value}if(void 0===g&&void 0!==this.right){const A=this.right.next();A.done?this.right=void 0:g=A.value}if(void 0===A&&void 0===g)return{done:!0};if(void 0===A){const A=g;return g=void 0,{done:!1,value:A}}if(void 0===g){const g=A;return A=void 0,{done:!1,value:g}}if(this.comparator(A,g)){const g=A;return A=void 0,{done:!1,value:g}}{const A=g;return g=void 0,{done:!1,value:A}}}}}}async function qg(A){let g,I;if(A instanceof Response){const B=await A.text(),Q=function(A){const g=A.split("\n");let I;try{I=JSON.parse(g[0])}catch(A){return}const B=new mg(g).drop(1).filter((A=>"["===A[0])).map(JSON.parse).toArray();return{header:I,events:B}}(B);void 0!==Q?(g=Q.header,I=Q.events):g=JSON.parse(B)}else if("object"==typeof A&&"number"==typeof A.version)g=A;else{if(!Array.isArray(A))throw"invalid data";g=A[0],I=A.slice(1,A.length)}if(1===g.version)return function(A){let g=0;const I=new mg(A.stdout).map((A=>(g+=A[0],[g,"o",A[1]])));return{cols:A.width,rows:A.height,events:I}}(g);if(2===g.version)return function(A,g){return{cols:A.width,rows:A.height,events:g,idleTimeLimit:A.idle_time_limit}}(g,I);throw`asciicast v${g.version} format not supported`}function vg(A){if("r"===A[1]){const[g,I]=A[2].split("x");return[A[0],"o",`[8;${I};${g};t`]}return A}function xg(A){return"number"==typeof A?[A,"m",""]:[A[0],"m",A[1]]}function Tg(){let A=0;return function(g){return"m"===g[1]?[g[0],g[1],{index:A++,time:g[0],label:g[2]}]:g}}class jg{constructor(){this.items=[],this.onPush=void 0}push(A){this.items.push(A),void 0!==this.onPush&&(this.onPush(this.popAll()),this.onPush=void 0)}popAll(){if(this.items.length>0){const A=this.items;return this.items=[],A}{const A=this;return new Promise((g=>{A.onPush=g}))}}}function Wg(A,g,I,B,Q){return I>0?function(A,g,I,B){let Q=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1/60;const C=new jg,E=Zg();let e=!1,t=-Q;return setTimeout((async()=>{for(;!e;){const i=await C.popAll();if(e)return;for(const C of i){const i=C[0]-B+I;if(i-t0&&(await Xg(o),e))return;g(C[0]),A(C[2]),t=i}}}),0),{pushEvent(A){if("o"===A[1])C.push(A);else if("r"===A[1]){const[g,I]=A[2].split("x");C.push([A[0],"o",`[8;${I};${g};t`])}},pushText(A){const g=(Zg()-E)/1e3;C.push([g,"o",A])},stop(){e=!0,C.push(void 0)}}}(A,g,I,B??0,Q):function(A){return{pushEvent(g){"o"===g[1]&&A(g[2])},pushText(g){A(g)},stop(){}}}(A)}function Zg(){return(new Date).getTime()}function Xg(A){return new Promise((g=>{setTimeout(g,1e3*A)}))}function Og(A){return Math.min(500*Math.pow(2,A),5e3)}function Vg(A){if(A.length<13)return;const g=function(A){const g=zg(A.subarray(0,4)),I=zg(A.subarray(4,8));return g+I/1e6}(A.subarray(0,8)),I=zg(A.subarray(8,12));return{time:g,data:A.subarray(12,12+I),len:I+12}}function zg(A){return A[0]+256*A[1]+256*A[2]*256+256*A[3]*256*256}const Pg=new Map([["benchmark",function(A,g){let I,{url:B,iterations:Q=10}=A,{feed:C,setState:E,now:e}=g,t=0;return{async init(){const A=await qg(await fetch(B)),{cols:g,rows:Q,events:C}=A;I=Array.from(C).filter((A=>{let[g,I,B]=A;return"o"===I})).map((A=>{let[g,I,B]=A;return[g,B]}));const E=I[I.length-1][0];for(const[A,g]of I)t+=new Blob([g]).size;return{cols:g,rows:Q,duration:E}},play(){const A=e();for(let A=0;A{E("stopped",{reason:"ended"})}),0),!0}}}],["clock",function(A,g,I){let{hourColor:B=3,minuteColor:Q=4,separatorColor:C=9}=A,{feed:E}=g,{cols:e=5,rows:t=1}=I;const i=Math.floor(t/2),o=Math.floor(e/2)-2,s=`[?25l[${i}B`;let n;const r=()=>{const A=new Date,g=A.getHours(),I=A.getMinutes(),E=[];E.push("\r");for(let A=0;A{r().forEach(E)};return{init:()=>{const A=[s].concat(r());return{cols:e,rows:t,duration:1440,poster:A}},play:()=>(E(s),a(),n=setInterval(a,1e3),!0),stop:()=>{clearInterval(n)},getCurrentTime:()=>{const A=new Date;return 60*A.getHours()+A.getMinutes()}}}],["eventsource",function(A,g){let I,B,{url:Q,bufferTime:C=.1,minFrameTime:E}=A,{feed:e,reset:t,setState:i,logger:o}=g;o=new Kg(o,"eventsource: ");let s=new UA;function n(A){void 0!==B&&B.stop(),B=Wg(e,(A=>s.setTime(A)),C,A,E)}return{play:()=>{I=new EventSource(Q),I.addEventListener("open",(()=>{o.info("opened"),n()})),I.addEventListener("error",(A=>{o.info("errored"),o.debug({e:A}),i("loading")})),I.addEventListener("message",(A=>{const g=JSON.parse(A.data);if(Array.isArray(g))B.pushEvent(g);else if(void 0!==g.cols||void 0!==g.width){const A=g.cols??g.width,I=g.rows??g.height;o.debug(`vt reset (${A}x${I})`),i("playing"),n(g.time),t(A,I,g.init??void 0),s=new LA,"number"==typeof g.time&&s.setTime(g.time)}else"offline"===g.state&&(o.info("stream offline"),i("offline"),s=new UA)})),I.addEventListener("done",(()=>{o.info("closed"),I.close(),i("stopped",{reason:"ended"})}))},stop:()=>{void 0!==B&&B.stop(),void 0!==I&&I.close()},getCurrentTime:()=>s.getTime()}}],["random",function(A,g){let{feed:I,setTimeout:B}=g;const Q=" ".charCodeAt(0),C="~".charCodeAt(0)-Q;let E;const e=()=>{const A=Math.pow(5,4*Math.random());E=B(t,A)},t=()=>{e();const A=String.fromCharCode(Q+Math.floor(Math.random()*C));I(A)};return()=>(e(),()=>clearInterval(E))}],["recording",function(A,g,I){let B,Q,C,E,e,t,i,o,s,{feed:n,onInput:r,onMarker:a,now:c,setTimeout:D,setState:w,logger:h}=g,{idleTimeLimit:y,startAt:l,loop:G,posterTime:k,markers:N,pauseOnMarkers:u,cols:M,rows:d}=I,F=0,f=0,J=0;async function R(A,g){const I=await fetch(A,g);if(!I.ok)throw`failed fetching recording from ${A}: ${I.status} ${I.statusText}`;return I}function Y(){const A=C[F];A?i=D(p,function(A){let g=1e3*A-(c()-o);return g<0&&(g=0),g}(A[0])):(S(),J++,!0===G||"number"==typeof G&&J1e3*g[0]);Y()}function S(){clearTimeout(i),i=null}function L(A){const[g,I,B]=A;if("o"===I)n(B);else if("i"===I)r(B);else if("m"===I&&(a(B),u))return U(),s=1e3*g,w("stopped",{reason:"paused"}),!0;return!1}function U(){return!i||(S(),s=c()-o,!0)}function K(){o=c()-s,s=null,Y()}function m(A){const g=!!i;U();const I=(s??0)/1e3;if("string"==typeof A)"<<"===A?A=I-5:">>"===A?A=I+5:"<<<"===A?A=I-.1*e:">>>"===A?A=I+.1*e:"%"===A[A.length-1]&&(A=parseFloat(A.substring(0,A.length-1))/100*e);else if("object"==typeof A)if("prev"===A.marker)A=H(I)??0,g&&I-A<1&&(A=H(A)??0);else if("next"===A.marker)A=function(A){if(0==E.length)return;let g,I=E.length-1,B=E[I];for(;B&&B[0]>A;)g=B[0],B=E[--I];return g}(I)??e;else if("number"==typeof A.marker){const g=E[A.marker];if(void 0===g)throw`invalid marker index: ${A.marker}`;A=g[0]}const B=Math.min(Math.max(A,0),e);B[A[0],"o",A[1]])),C=new mg(I).map((A=>[A[0],"i",A[1]])),E=new mg(B).map(xg);return Q.multiplex(C,((A,g)=>A[0]A[0]1&&void 0!==arguments[1]?arguments[1]:1/60;return B=>{let Q=0,C=0;return{step:A=>{Q++,void 0!==g?A[1]===g[1]&&A[0]-g[0]{void 0!==g&&(B(g),C++),A.debug(`batched ${Q} frames to ${C} frames`)}}}}(g,C)).map(function(A,g,I){let B=0,Q=0;return function(C){const E=C[0]-B-A;return B=C[0],E>0&&(Q+=E,C[0]"m"!==A[1])).multiplex(e,((A,g)=>A[0]"i"===A[1]?[A[0]+E,A[1],A[2]]:A)),t.sort(((A,g)=>A[0]-g[0])));const o=t[t.length-1][0],s=B-i.offset;return{...A,events:t,duration:o,effectiveStartAt:s}}(await g(await function(A){let{url:g,data:I,fetchOpts:B={}}=A;if("string"==typeof g)return R(g,B);if(Array.isArray(g))return Promise.all(g.map((A=>R(A,B))));if(void 0!==I)return"function"==typeof I&&(I=I()),I instanceof Promise||(I=Promise.resolve(I)),I.then((A=>"string"==typeof A||A instanceof ArrayBuffer?new Response(A):A));throw"failed fetching recording file: url/data missing in src"}(A),{encoding:s}),h,{idleTimeLimit:y,startAt:l,minFrameTime:I,inputOffset:i,markers_:N});if(({cols:B,rows:Q,events:C,duration:e,effectiveStartAt:t}=n),M=M??B,d=d??Q,0===C.length)throw"recording is missing events";void 0!==o&&function(A,g){const I=document.createElement("a"),B=A.events.map((A=>"m"===A[1]?[A[0],A[1],A[2].label]:A)),Q=function(A){return`${JSON.stringify({version:2,width:A.cols,height:A.rows})}\n${A.events.map(JSON.stringify).join("\n")}\n`}({...A,events:B});I.href=URL.createObjectURL(new Blob([Q],{type:"text/plain"})),I.download=g,I.click()}(n,o);const r=void 0!==k?(a=k,C.filter((A=>A[0]A[2]))):void 0;var a;return E=C.filter((A=>"m"===A[1])).map((A=>[A[0],A[2].label])),{cols:B,rows:Q,duration:e,poster:r,markers:E}},play:function(){return i||(void 0===C[F]&&(t=0),null!==t&&m(t),K()),!0},pause:U,seek:m,step:function(){let A=C[F++];for(;void 0!==A&&"o"!==A[1];)A=C[F++];if(void 0===A)return;n(A[2]);const g=A[0];f=g,s=1e3*g,t=null},stop:U,getCurrentTime:function(){return i?(c()-o)/1e3:(s??0)/1e3}}}],["websocket",function(A,g){let{url:I,bufferTime:B=.1,reconnectDelay:Q=Og,minFrameTime:C}=A,{feed:E,reset:e,setState:t,logger:i}=g;i=new Kg(i,"websocket: ");const o=new TextDecoder;let s,n,r,a=new UA,c=0,D=!1;function w(A){void 0!==n&&n.stop(),n=Wg(E,(A=>a.setTime(A)),B,A,C)}function h(A){if("string"==typeof A.data)i.info("activating asciicast-compatible handler"),s.onmessage=y,y(A);else{const g=new Uint8Array(A.data);if(65==g[0]&&76==g[1]&&105==g[2]&&83==g[3])if(1==g[4]){i.info("activating ALiS v1 handler");const A=g[5];0==A?i.debug("text compression: none"):(i.error(`unsupported compression algorithm (${A})`),s.close()),s.onmessage=l}else i.warn(`unsupported ALiS version (${g[4]})`),s.close();else{i.info("activating raw text handler");const I=o.decode(g),B=function(A){const g=A.match(/\x1b\[8;(\d+);(\d+)t/);if(null!==g)return[parseInt(g[2],10),parseInt(g[1],10)]}(I)??function(A){const g=A.match(/\[.*COLUMNS="(\d{1,3})" LINES="(\d{1,3})".*\]/);if(null!==g)return[parseInt(g[1],10),parseInt(g[2],10)]}(I);if(void 0!==B){const[A,g]=B;k(A,g,0,void 0)}s.onmessage=G,G(A)}}}function y(A){const g=JSON.parse(A.data);Array.isArray(g)?n.pushEvent(g):void 0!==g.cols||void 0!==g.width?k(g.cols??g.width,g.rows??g.height,g.time,g.init??void 0):"offline"===g.status&&N()}function l(A){const g=A.data,I=new DataView(g),B=I.getUint8(0);if(1===B){const A=I.getUint16(1,!0),B=I.getUint16(3,!0),Q=I.getFloat32(5,!0),C=I.getUint32(9,!0);k(A,B,Q,C>0?o.decode(new Uint8Array(g,13,C)):void 0)}else if(111===B){const A=I.getFloat32(1,!0),B=I.getUint32(5,!0),Q=o.decode(new Uint8Array(g,9,B));n.pushEvent([A,"o",Q])}else if(114===B){const A=I.getFloat32(1,!0),g=I.getUint16(5,!0),B=I.getUint16(7,!0);n.pushEvent([A,"r",`${g}x${B}`])}else 4===B?N():i.debug(`unknown frame type: ${B}`)}function G(A){n.pushText(o.decode(A.data))}function k(A,g,I,B){i.debug(`stream reset (${A}x${g} @${I})`),t("playing"),w(I),e(A,g,B),a=new LA,"number"==typeof I&&a.setTime(I)}function N(){i.info("stream offline"),t("offline"),a=new UA}function u(){s=new WebSocket(I),s.binaryType="arraybuffer",s.onopen=()=>{i.info("opened"),w(),r=setTimeout((()=>{c=0}),1e3)},s.onmessage=h,s.onclose=A=>{if(D||1e3===A.code||1005===A.code)i.info("closed"),t("stopped",{reason:"ended"});else{clearTimeout(r);const A=Q(c++);i.info(`unclean close, reconnecting in ${A}...`),t("loading"),setTimeout(u,A)}}}return{play:()=>{u()},stop:()=>{D=!0,void 0!==n&&n.stop(),void 0!==s&&s.close()},getCurrentTime:()=>a.getTime()}}]]),_g=new Map([["asciicast",qg],["typescript",async function(A,g){let{encoding:I}=g;const B=new TextDecoder(I);let Q,C,E=(await A[0].text()).split("\n").filter((A=>A.length>0)).map((A=>A.split(" ")));E[0].length<3&&(E=E.map((A=>["O",A[0],A[1]])));const e=await A[1].arrayBuffer(),t=new Uint8Array(e),i=t.findIndex((A=>10==A))+1,o=B.decode(t.subarray(0,i)).match(/COLUMNS="(\d+)" LINES="(\d+)"/);null!==o&&(Q=parseInt(o[1],10),C=parseInt(o[2],10));const s={array:t,cursor:i};let n=s;if(void 0!==A[2]){const g=await A[2].arrayBuffer();n={array:new Uint8Array(g),cursor:i}}const r=[];let a=0;for(const A of E)if(a+=parseFloat(A[1]),"O"===A[0]){const g=parseInt(A[2],10),I=s.array.subarray(s.cursor,s.cursor+g),Q=B.decode(I);r.push([a,"o",Q]),s.cursor+=g}else if("I"===A[0]){const g=parseInt(A[2],10),I=n.array.subarray(n.cursor,n.cursor+g),Q=B.decode(I);r.push([a,"i",Q]),n.cursor+=g}else if("S"===A[0]&&"SIGWINCH"===A[2]){const g=parseInt(A[4].slice(5),10),I=parseInt(A[3].slice(5),10);r.push([a,"r",`${g}x${I}`])}else"H"===A[0]&&"COLUMNS"===A[2]?Q=parseInt(A[3],10):"H"===A[0]&&"LINES"===A[2]&&(C=parseInt(A[3],10));return Q=Q??80,C=C??24,{cols:Q,rows:C,events:r}}],["ttyrec",async function(A,g){let{encoding:I}=g;const B=new TextDecoder(I),Q=await A.arrayBuffer(),C=new Uint8Array(Q),E=Vg(C),e=E.time,t=B.decode(E.data).match(/\x1b\[8;(\d+);(\d+)t/),i=[];let o=80,s=24;null!==t&&(o=parseInt(t[2],10),s=parseInt(t[1],10));let n=0,r=Vg(C);for(;void 0!==r;){const A=r.time-e,g=B.decode(r.data);i.push([A,"o",g]),n+=r.len,r=Vg(C.subarray(n))}return{cols:o,rows:s,events:i}}]]);return A.create=function(A,g){let I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const B=I.logger??new Ug,Q=new jA(function(A){if("function"==typeof A)return A;"string"==typeof A&&(A="ws://"==A.substring(0,5)||"wss://"==A.substring(0,6)?{driver:"websocket",url:A}:"clock:"==A.substring(0,6)?{driver:"clock"}:"random:"==A.substring(0,7)?{driver:"random"}:"benchmark:"==A.substring(0,10)?{driver:"benchmark",url:A.substring(10)}:{driver:"recording",url:A});void 0===A.driver&&(A.driver="recording");if("recording"==A.driver&&(void 0===A.parser&&(A.parser="asciicast"),"string"==typeof A.parser)){if(!_g.has(A.parser))throw`unknown parser: ${A.parser}`;A.parser=_g.get(A.parser)}if(Pg.has(A.driver)){const g=Pg.get(A.driver);return(I,B)=>g(A,I,B)}throw`unsupported driver: ${JSON.stringify(A)}`}(A),{logger:B,cols:I.cols,rows:I.rows,loop:I.loop,speed:I.speed,preload:I.preload,startAt:I.startAt,poster:I.poster,markers:I.markers,pauseOnMarkers:I.pauseOnMarkers,idleTimeLimit:I.idleTimeLimit}),C=function(A,g){const I=80,B=24,Q=document.createElement("div");let C;Q.style.height="0px",Q.style.overflow="hidden",Q.style.fontSize="15px",document.body.appendChild(Q);const E=X((()=>(C=q(cg,{cols:I,rows:B,lineHeight:g,fontFamily:A,lines:[]}),C)),Q),e={charW:C.clientWidth/I,charH:C.clientHeight/B,bordersW:C.offsetWidth-C.clientWidth,bordersH:C.offsetHeight-C.clientHeight};return E(),document.body.removeChild(Q),e}(I.terminalFontFamily,I.terminalLineHeight),E={logger:B,core:Q,cols:I.cols,rows:I.rows,fit:I.fit,controls:I.controls??"auto",autoPlay:I.autoPlay??I.autoplay,terminalFontSize:I.terminalFontSize,terminalFontFamily:I.terminalFontFamily,terminalLineHeight:I.terminalLineHeight,theme:I.theme,...C};let e;const t=X((()=>(e=q(Lg,E),e)),g),i={el:e,dispose:t,getCurrentTime:()=>Q.getCurrentTime(),getDuration:()=>Q.getDuration(),play:()=>Q.play(),pause:()=>Q.pause(),seek:A=>Q.seek(A),addEventListener:(A,g)=>Q.addEventListener(A,g.bind(i))};return i},A}({}); diff --git a/assets/index.html b/assets/index.html new file mode 100644 index 0000000..17429a1 --- /dev/null +++ b/assets/index.html @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + diff --git a/src/cmd/mod.rs b/src/cmd/mod.rs index 491aec7..dd17e04 100644 --- a/src/cmd/mod.rs +++ b/src/cmd/mod.rs @@ -3,6 +3,7 @@ pub mod cat; pub mod convert; pub mod play; pub mod rec; +pub mod stream; pub mod upload; use crate::config::Config; use crate::notifier; diff --git a/src/cmd/stream.rs b/src/cmd/stream.rs new file mode 100644 index 0000000..fd2406f --- /dev/null +++ b/src/cmd/stream.rs @@ -0,0 +1,88 @@ +use crate::config::Config; +use crate::locale; +use crate::logger; +use crate::pty; +use crate::streamer::{self, KeyBindings}; +use crate::tty; +use anyhow::Result; +use clap::Args; + +#[derive(Debug, Args)] +pub struct Cli { + /// Enable input capture + #[arg(long, short = 'I', alias = "stdin")] + input: bool, + + /// Command to stream [default: $SHELL] + #[arg(short, long)] + command: Option, + + /// Override terminal size for the session + #[arg(long, value_name = "COLSxROWS")] + tty_size: Option, +} + +impl Cli { + pub fn run(self, config: &Config) -> Result<()> { + locale::check_utf8_locale()?; + + let command = self.get_command(config); + let keys = get_key_bindings(config)?; + let notifier = super::get_notifier(config); + let record_input = self.input || config.cmd_stream_input(); + let exec_command = super::build_exec_command(command.as_ref().cloned()); + let exec_extra_env = super::build_exec_extra_env(); + let mut streamer = streamer::Streamer::new(record_input, keys, notifier); + + logger::info!( + "Streaming session started, listening on {}", + "127.0.0.1:3000" // TODO + ); + + if command.is_none() { + logger::info!("Press or type 'exit' to end"); + } + + { + let mut tty: Box = if let Ok(dev_tty) = tty::DevTty::open() { + Box::new(dev_tty) + } else { + logger::info!("TTY not available, streaming in headless mode"); + Box::new(tty::NullTty::open()?) + }; + + pty::exec( + &exec_command, + &exec_extra_env, + &mut *tty, + self.tty_size, + &mut streamer, + )?; + } + + logger::info!("Streaming session ended"); + + Ok(()) + } + + fn get_command(&self, config: &Config) -> Option { + self.command + .as_ref() + .cloned() + .or(config.cmd_stream_command()) + } +} + +fn get_key_bindings(config: &Config) -> Result { + let mut keys = KeyBindings::default(); + + if let Some(key) = config.cmd_stream_prefix_key()? { + keys.prefix = key; + } + + if let Some(key) = config.cmd_stream_pause_key()? { + keys.pause = key; + } + + Ok(keys) +} diff --git a/src/config.rs b/src/config.rs index 6865095..1f95c57 100644 --- a/src/config.rs +++ b/src/config.rs @@ -31,6 +31,7 @@ pub struct Server { pub struct Cmd { rec: Rec, play: Play, + stream: Stream, } #[derive(Debug, Deserialize, Default)] @@ -55,6 +56,16 @@ pub struct Play { pub next_marker_key: Option, } +#[derive(Debug, Deserialize, Default)] +#[allow(unused)] +pub struct Stream { + pub command: Option, + pub input: bool, + pub env: Option, + pub prefix_key: Option, + pub pause_key: Option, +} + #[derive(Debug, Deserialize)] #[allow(unused)] pub struct Notifications { @@ -68,6 +79,7 @@ impl Config { .set_default("server.url", None::>)? .set_default("cmd.rec.input", false)? .set_default("cmd.play.speed", None::>)? + .set_default("cmd.stream.input", false)? .set_default("notifications.enabled", true)? .add_source(config::File::with_name("/etc/asciinema/config.toml").required(false)) .add_source( @@ -175,6 +187,32 @@ impl Config { .map(parse_key) .transpose() } + + pub fn cmd_stream_command(&self) -> Option { + self.cmd.stream.command.as_ref().cloned() + } + + pub fn cmd_stream_input(&self) -> bool { + self.cmd.stream.input + } + + pub fn cmd_stream_prefix_key(&self) -> Result> { + self.cmd + .stream + .prefix_key + .as_ref() + .map(parse_key) + .transpose() + } + + pub fn cmd_stream_pause_key(&self) -> Result> { + self.cmd + .stream + .pause_key + .as_ref() + .map(parse_key) + .transpose() + } } fn ask_for_server_url() -> Result { diff --git a/src/main.rs b/src/main.rs index 97a67de..c47982b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ mod notifier; mod player; mod pty; mod recorder; +mod streamer; mod tty; mod util; use crate::config::Config; @@ -35,6 +36,9 @@ enum Commands { /// Replay a terminal session Play(cmd::play::Cli), + /// Stream a terminal session + Stream(cmd::stream::Cli), + /// Concatenate multiple recordings Cat(cmd::cat::Cli), @@ -55,6 +59,7 @@ fn main() -> Result<()> { match cli.command { Commands::Rec(record) => record.run(&config), Commands::Play(play) => play.run(&config), + Commands::Stream(stream) => stream.run(&config), Commands::Cat(cat) => cat.run(), Commands::Convert(convert) => convert.run(), Commands::Upload(upload) => upload.run(&config), diff --git a/src/streamer/alis.rs b/src/streamer/alis.rs new file mode 100644 index 0000000..155deec --- /dev/null +++ b/src/streamer/alis.rs @@ -0,0 +1,70 @@ +use super::session; +use anyhow::Result; +use futures_util::{stream, Stream, StreamExt, TryStreamExt}; +use std::future; +use tokio::sync::mpsc; +use tokio_stream::wrappers::errors::BroadcastStreamRecvError; + +static HEADER: &str = "ALiS\x01\x00\x00\x00\x00\x00"; +static SECOND: f64 = 1_000_000.0; + +pub async fn stream( + clients_tx: &mpsc::Sender, +) -> Result, BroadcastStreamRecvError>>> { + let header = stream::once(future::ready(Ok(HEADER.into()))); + let events = session::stream(clients_tx).await?.map_ok(encode_event); + + Ok(header.chain(events)) +} + +fn encode_event(event: session::Event) -> Vec { + use session::Event::*; + + match event { + Init(size, time, init) => { + let (cols, rows): (u16, u16) = (size.0, size.1); + let cols_bytes = cols.to_le_bytes(); + let rows_bytes = rows.to_le_bytes(); + let time_bytes = ((time as f64 / SECOND) as f32).to_le_bytes(); + let init = init.unwrap_or_else(|| "".to_owned()); + let init_len = init.len() as u32; + let init_len_bytes = init_len.to_le_bytes(); + + let mut msg = vec![0x01]; // 1 byte + msg.extend_from_slice(&cols_bytes); // 2 bytes + msg.extend_from_slice(&rows_bytes); // 2 bytes + msg.extend_from_slice(&time_bytes); // 4 bytes + msg.extend_from_slice(&init_len_bytes); // 4 bytes + msg.extend_from_slice(init.as_bytes()); // init_len bytes + + msg + } + + Stdout(time, text) => { + let time_bytes = ((time as f64 / SECOND) as f32).to_le_bytes(); + let text_len = text.len() as u32; + let text_len_bytes = text_len.to_le_bytes(); + + let mut msg = vec![b'o']; // 1 byte + msg.extend_from_slice(&time_bytes); // 4 bytes + msg.extend_from_slice(&text_len_bytes); // 4 bytes + msg.extend_from_slice(text.as_bytes()); // text_len bytes + + msg + } + + Resize(time, size) => { + let (cols, rows): (u16, u16) = (size.0, size.1); + let time_bytes = ((time as f64 / SECOND) as f32).to_le_bytes(); + let cols_bytes = cols.to_le_bytes(); + let rows_bytes = rows.to_le_bytes(); + + let mut msg = vec![b'r']; // 1 byte + msg.extend_from_slice(&time_bytes); // 4 bytes + msg.extend_from_slice(&cols_bytes); // 2 bytes + msg.extend_from_slice(&rows_bytes); // 2 bytes + + msg + } + } +} diff --git a/src/streamer/mod.rs b/src/streamer/mod.rs new file mode 100644 index 0000000..5d88339 --- /dev/null +++ b/src/streamer/mod.rs @@ -0,0 +1,214 @@ +mod alis; +mod server; +mod session; +use crate::config::Key; +use crate::notifier::Notifier; +use crate::pty; +use crate::tty; +use crate::util; +use std::io; +use std::net::TcpListener; +use std::thread; +use std::time::Instant; +use tokio::sync::{mpsc, oneshot}; + +pub struct Streamer { + record_input: bool, + keys: KeyBindings, + notifier: Option>, + notifier_tx: std::sync::mpsc::Sender, + notifier_rx: Option>, + notifier_handle: Option, + pty_tx: mpsc::UnboundedSender, + pty_rx: Option>, + event_loop_handle: Option, + start_time: Instant, + paused: bool, + prefix_mode: bool, +} + +enum Event { + Output(u64, String), + Input(u64, String), + Resize(u64, tty::TtySize), +} + +impl Streamer { + pub fn new(record_input: bool, keys: KeyBindings, notifier: Box) -> Self { + let (notifier_tx, notifier_rx) = std::sync::mpsc::channel(); + let (pty_tx, pty_rx) = mpsc::unbounded_channel(); + + Self { + record_input, + keys, + notifier: Some(notifier), + notifier_tx, + notifier_rx: Some(notifier_rx), + notifier_handle: None, + pty_tx, + pty_rx: Some(pty_rx), + event_loop_handle: None, + start_time: Instant::now(), + paused: false, + prefix_mode: false, + } + } + + fn elapsed_time(&self) -> u64 { + self.start_time.elapsed().as_micros() as u64 + } + + fn notify(&self, message: S) { + self.notifier_tx + .send(message.to_string()) + .expect("notification send should succeed"); + } +} + +impl pty::Recorder for Streamer { + fn start(&mut self, tty_size: tty::TtySize) -> io::Result<()> { + let pty_rx = self.pty_rx.take().unwrap(); + let (clients_tx, mut clients_rx) = mpsc::channel(1); + let (server_shutdown_tx, server_shutdown_rx) = oneshot::channel::<()>(); + let listener = TcpListener::bind("0.0.0.0:3000")?; + let runtime = build_tokio_runtime(); + let server = runtime.spawn(server::serve(listener, clients_tx, server_shutdown_rx)); + + self.event_loop_handle = wrap_thread_handle(thread::spawn(move || { + runtime.block_on(async move { + event_loop(pty_rx, &mut clients_rx, tty_size).await; + let _ = server_shutdown_tx.send(()); + let _ = server.await; + let _ = clients_rx.recv().await; + }); + })); + + let mut notifier = self.notifier.take().unwrap(); + let notifier_rx = self.notifier_rx.take().unwrap(); + + self.notifier_handle = wrap_thread_handle(thread::spawn(move || { + for message in notifier_rx { + let _ = notifier.notify(message); + } + })); + + self.start_time = Instant::now(); + + Ok(()) + } + + fn output(&mut self, data: &[u8]) { + if self.paused { + return; + } + + let data = String::from_utf8_lossy(data).to_string(); + let event = Event::Output(self.elapsed_time(), data); + self.pty_tx.send(event).expect("output send should succeed"); + } + + fn input(&mut self, data: &[u8]) -> bool { + let prefix_key = self.keys.prefix.as_ref(); + let pause_key = self.keys.pause.as_ref(); + + if !self.prefix_mode && prefix_key.is_some_and(|key| data == key) { + self.prefix_mode = true; + return false; + } + + if self.prefix_mode || prefix_key.is_none() { + self.prefix_mode = false; + + if pause_key.is_some_and(|key| data == key) { + if self.paused { + self.paused = false; + self.notify("Resumed streaming"); + } else { + self.paused = true; + self.notify("Paused streaming"); + } + + return false; + } + } + + if self.record_input && !self.paused { + // TODO ignore OSC responses + let data = String::from_utf8_lossy(data).to_string(); + let event = Event::Input(self.elapsed_time(), data); + self.pty_tx.send(event).expect("input send should succeed"); + } + + true + } + + fn resize(&mut self, size: crate::tty::TtySize) { + let event = Event::Resize(self.elapsed_time(), size); + self.pty_tx.send(event).expect("resize send should succeed"); + } +} + +async fn event_loop( + mut events: mpsc::UnboundedReceiver, + clients: &mut mpsc::Receiver, + tty_size: tty::TtySize, +) { + let mut session = session::Session::new(tty_size); + + loop { + tokio::select! { + event = events.recv() => { + match event { + Some(Event::Output(time, data)) => { + session.output(time, data); + } + + Some(Event::Input(time, data)) => { + session.input(time, data); + } + + Some(Event::Resize(time, new_tty_size)) => { + session.resize(time, new_tty_size); + } + + None => break, + } + } + + client = clients.recv() => { + match client { + Some(client) => { + client.accept(session.subscribe()); + } + + None => break, + } + } + } + } +} + +fn build_tokio_runtime() -> tokio::runtime::Runtime { + tokio::runtime::Builder::new_current_thread() + .enable_all() + .build() + .unwrap() +} + +fn wrap_thread_handle(handle: thread::JoinHandle<()>) -> Option { + Some(util::JoinHandle::new(handle)) +} + +pub struct KeyBindings { + pub prefix: Key, + pub pause: Key, +} + +impl Default for KeyBindings { + fn default() -> Self { + Self { + prefix: None, + pause: Some(vec![0x1c]), // ^\ + } + } +} diff --git a/src/streamer/server.rs b/src/streamer/server.rs new file mode 100644 index 0000000..1e11d5f --- /dev/null +++ b/src/streamer/server.rs @@ -0,0 +1,105 @@ +use super::alis; +use super::session; +use axum::{ + extract::connect_info::ConnectInfo, + extract::ws, + extract::State, + http::{header, StatusCode, Uri}, + response::IntoResponse, + routing::get, + Router, +}; +use futures_util::{stream, StreamExt}; +use rust_embed::RustEmbed; +use std::borrow::Cow; +use std::future; +use std::io; +use std::net::SocketAddr; +use tokio::sync::{mpsc, oneshot}; +use tokio_stream::wrappers::errors::BroadcastStreamRecvError; + +#[derive(RustEmbed)] +#[folder = "assets/"] +struct Assets; + +pub async fn serve( + listener: std::net::TcpListener, + clients_tx: mpsc::Sender, + shutdown_rx: oneshot::Receiver<()>, +) -> io::Result<()> { + listener.set_nonblocking(true)?; + let listener = tokio::net::TcpListener::from_std(listener)?; + + + let app = Router::new() + .route("/ws", get(ws_handler)) + .with_state(clients_tx) + .fallback(static_handler); + + let signal = async { + let _ = shutdown_rx.await; + }; + + axum::serve( + listener, + app.into_make_service_with_connect_info::(), + ) + .with_graceful_shutdown(signal) + .await +} + +async fn static_handler(uri: Uri) -> impl IntoResponse { + let mut path = uri.path().trim_start_matches('/'); + + if path.is_empty() { + path = "index.html"; + } + + match Assets::get(path) { + Some(content) => { + let mime = mime_guess::from_path(path).first_or_octet_stream(); + + ([(header::CONTENT_TYPE, mime.as_ref())], content.data).into_response() + } + + None => (StatusCode::NOT_FOUND, "404").into_response(), + } +} + +async fn ws_handler( + ws: ws::WebSocketUpgrade, + ConnectInfo(_addr): ConnectInfo, + State(clients_tx): State>, +) -> impl IntoResponse { + ws.on_upgrade(move |socket| async move { + let _ = handle_socket(socket, clients_tx).await; + }) +} + +async fn handle_socket( + socket: ws::WebSocket, + clients_tx: mpsc::Sender, +) -> anyhow::Result<()> { + alis::stream(&clients_tx) + .await? + .map(ws_result) + .chain(stream::once(future::ready(Ok(close_message())))) + .forward(socket) + .await?; + + Ok(()) +} + +fn close_message() -> ws::Message { + ws::Message::Close(Some(ws::CloseFrame { + code: ws::close_code::NORMAL, + reason: Cow::from("ended"), + })) +} + +fn ws_result(m: Result, BroadcastStreamRecvError>) -> Result { + match m { + Ok(bytes) => Ok(ws::Message::Binary(bytes)), + Err(e) => Err(axum::Error::new(e)), + } +} diff --git a/src/streamer/session.rs b/src/streamer/session.rs new file mode 100644 index 0000000..fe0fe41 --- /dev/null +++ b/src/streamer/session.rs @@ -0,0 +1,104 @@ +use crate::tty; +use anyhow::Result; +use futures_util::{stream, Stream, StreamExt}; +use std::{future, time::Instant}; +use tokio::sync::{broadcast, mpsc, oneshot}; +use tokio_stream::wrappers::{errors::BroadcastStreamRecvError, BroadcastStream}; + +pub struct Session { + vt: avt::Vt, + broadcast_tx: broadcast::Sender, + stream_time: u64, + last_event_time: Instant, + tty_size: tty::TtySize, +} + +#[derive(Clone)] +pub enum Event { + Init(tty::TtySize, u64, Option), + Stdout(u64, String), + Resize(u64, tty::TtySize), +} + +pub struct Client(oneshot::Sender); + +pub struct Subscription { + init: Event, + broadcast_rx: broadcast::Receiver, +} + +impl Session { + pub fn new(tty_size: tty::TtySize) -> Self { + let (broadcast_tx, _) = broadcast::channel(1024); + + Self { + vt: build_vt(tty_size), + broadcast_tx, + stream_time: 0, + last_event_time: Instant::now(), + tty_size, + } + } + + pub fn output(&mut self, time: u64, data: String) { + self.vt.feed_str(&data); + let _ = self.broadcast_tx.send(Event::Stdout(time, data)); + self.stream_time = time; + self.last_event_time = Instant::now(); + } + + pub fn input(&mut self, time: u64, _data: String) { + self.stream_time = time; + self.last_event_time = Instant::now(); + } + + pub fn resize(&mut self, time: u64, tty_size: tty::TtySize) { + if tty_size != self.tty_size { + resize_vt(&mut self.vt, &tty_size); + let _ = self.broadcast_tx.send(Event::Resize(time, tty_size)); + self.stream_time = time; + self.last_event_time = Instant::now(); + self.tty_size = tty_size; + } + } + + pub fn subscribe(&self) -> Subscription { + let init = Event::Init(self.tty_size, self.elapsed_time(), Some(self.vt.dump())); + let broadcast_rx = self.broadcast_tx.subscribe(); + + Subscription { init, broadcast_rx } + } + + fn elapsed_time(&self) -> u64 { + self.stream_time + self.last_event_time.elapsed().as_micros() as u64 + } +} + +fn build_vt(tty_size: tty::TtySize) -> avt::Vt { + avt::Vt::builder() + .size(tty_size.0 as usize, tty_size.1 as usize) + .resizable(true) + .build() +} + +fn resize_vt(vt: &mut avt::Vt, tty_size: &tty::TtySize) { + vt.feed_str(&format!("\x1b[8;{};{}t", tty_size.1, tty_size.0)); +} + +impl Client { + pub fn accept(self, subscription: Subscription) { + let _ = self.0.send(subscription); + } +} + +pub async fn stream( + clients_tx: &mpsc::Sender, +) -> Result>> { + let (sub_tx, sub_rx) = oneshot::channel(); + clients_tx.send(Client(sub_tx)).await?; + let sub = sub_rx.await?; + let init = stream::once(future::ready(Ok(sub.init))); + let events = BroadcastStream::new(sub.broadcast_rx); + + Ok(init.chain(events)) +}