Revamp webui

This commit is contained in:
Austen Adler 2022-07-05 19:39:41 -04:00
parent 0403048e7b
commit e3641381a1
7 changed files with 144 additions and 136 deletions

2
Cargo.lock generated
View File

@ -635,6 +635,7 @@ dependencies = [
"env_logger",
"futures",
"log",
"mime",
"rocket",
"ructe",
"serde",
@ -1165,6 +1166,7 @@ dependencies = [
"bytecount",
"itertools",
"md5",
"mime",
"nom",
]

View File

@ -16,6 +16,7 @@ serde_json = "1"
futures = "0.3"
strum_macros = "0.24"
strum = { version = "0.24", features = ["derive"] }
mime = "0.3"
[build-dependencies]
ructe = "0.14"
ructe = {version = "0.14", features = ["mime03"]}

View File

@ -16,18 +16,18 @@ use tokio::time;
type AppResult<T> = Result<T, Box<dyn std::error::Error + Send + Sync>>;
struct Options {
// device: DeviceType,
}
// struct Options {
// // device: DeviceType,
// }
#[tokio::main]
async fn main() -> AppResult<()> {
env_logger::Builder::from_env(Env::default().default_filter_or("info")).init();
info!("Starting ir remote");
let options = Arc::new(Options {
// device: DeviceType::Samsung,
});
// let options = Arc::new(Options {
// // device: DeviceType::Samsung,
// });
let (outbound_serial_tx, outbound_serial_rx) = channel(100);
let (inbound_serial_tx, inbound_serial_rx) = channel(100);
@ -37,6 +37,8 @@ async fn main() -> AppResult<()> {
serial_agent::serialport_agent(inbound_serial_tx, outbound_serial_rx).await
});
// TODO: Consume inbound_serial_rx, otherwise it will fill up and eventually be dropped
// let (agent_shutdown_tx, agent_handle): (Sender<()>, JoinHandle<AppResult<()>>) = {
// let (shutdown_tx, shutdown_rx) = channel(1);
// (
@ -48,29 +50,6 @@ async fn main() -> AppResult<()> {
// )
// };
// info!("Starting debugging");
// let debugging_handle: JoinHandle<AppResult<()>> = {
// let outbound_serial_tx = outbound_serial_tx.clone();
// tokio::task::spawn(async move {
// info!("In debugging handle");
// time::sleep(Duration::from_secs(10)).await;
// info!("Done waiting");
// let msg = format!(
// "{},{},{}\n",
// options.device.device_code(),
// options.device.function_code(&Function::Power),
// 3
// );
// outbound_serial_tx.send(msg).await?;
// info!("Done with debugging handle");
// Ok(())
// })
// };
info!("Starting webui");
let webui_handle: rocket::Shutdown = webui::launch(webui::Settings {
outbound_serial_tx: outbound_serial_tx.clone(),
@ -78,9 +57,9 @@ async fn main() -> AppResult<()> {
.await?;
tokio::select!(
r = agent_handle => {
error!("Agent handle ended: {r:?}");
}
// r = agent_handle => {
// error!("Agent handle ended: {r:?}");
// }
r = webui_handle => {
// agent_shutdown_tx.send(()).await?;
error!("Webserver handle ended: {r:?}");
@ -97,5 +76,6 @@ async fn main() -> AppResult<()> {
// }),
// );
// TODO: Graceful exit
panic!("Ending program");
}

View File

@ -7,16 +7,22 @@ use log::error;
use log::info;
use log::warn;
use rocket::form::Form;
use rocket::fs::relative;
use rocket::fs::FileServer;
use rocket::get;
use rocket::launch;
use rocket::post;
use rocket::response::Flash;
use rocket::response::Redirect;
use rocket::response::Responder;
use rocket::routes;
use rocket::uri;
use rocket::FromForm;
use rocket::Response;
use rocket::State;
use template_responder::StaticResponder;
use template_responder::TemplateResponder;
use templates::statics::StaticFile;
use tokio::sync::mpsc::Sender;
pub struct Settings {
@ -27,9 +33,6 @@ struct WebuiState {
outbound_serial_tx: Sender<String>,
}
// Static files
// use templates::statics::StaticFile;
#[derive(FromForm, Debug)]
struct FunctionForm {
function: Function,
@ -111,17 +114,20 @@ async fn index() -> Result<TemplateResponder, std::io::Error> {
Ok(TemplateResponder::from(buf))
}
#[get("/static/<name>")]
async fn static_get(name: &str) -> impl Responder + '_ {
Some(StaticResponder(StaticFile::get(name)?))
}
pub async fn launch(settings: Settings) -> AppResult<rocket::Shutdown> {
let state = WebuiState {
outbound_serial_tx: settings.outbound_serial_tx,
};
let rocket = rocket::build()
// let _rocket = rocket::build()
// .mount("/", routes![index, function, power])
// .manage(state)
// .launch()
// .await?;
.mount("/", routes![index, function_get, function_post, power])
.mount(
"/",
routes![index, static_get, function_get, function_post, power],
)
.manage(state)
.ignite()
.await?;
@ -130,6 +136,4 @@ pub async fn launch(settings: Settings) -> AppResult<rocket::Shutdown> {
tokio::task::spawn(rocket.launch());
Ok(shutdown_handle)
// Ok(())
}

View File

@ -1,5 +1,8 @@
use rocket::{http::ContentType, response::Responder, Request, Response};
use super::templates::statics::StaticFile;
use rocket::http::Header;
use rocket::{http::ContentType, response, response::Responder, Request, Response};
use std::io::Cursor;
use log::info;
pub struct TemplateResponder(pub Vec<u8>);
@ -18,3 +21,16 @@ impl<'r> Responder<'r, 'static> for TemplateResponder {
.ok()
}
}
pub struct StaticResponder<'o>(pub &'o StaticFile);
#[rocket::async_trait]
impl<'r, 'o: 'r> Responder<'r, 'o> for StaticResponder<'o> {
fn respond_to(self, _: &'r Request<'_>) -> response::Result<'o> {
info!("Mime type: {:?}", self.0.mime.type_().as_str());
Response::build()
.header(Header::new("Content-Type", self.0.mime.type_().as_str()))
.sized_body(self.0.content.len(), Cursor::new(self.0.content))
.ok()
}
}

View File

@ -1007,49 +1007,49 @@ kl+J8KhFCNZFmyirVvZisdfPLEpgomBYkopyNgQ+rv8A/9k=
y="989.05127" />
</g>
<g inkscape:groupmode="layer" inkscape:label="Image" id="g70">
<a xlink:href="function?function=AddSubtract"><path id="rect464" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 285.83203 L 30.033203 285.83203 L 30.033203 343.02148 L 110.61719 343.02148 L 110.61719 285.83203 z " onclick="minus" /></a>
<a xlink:href="function?function=Button7"><path id="path1492" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 228.64062 L 30.033203 285.83203 L 110.61719 285.83203 L 110.61719 228.64062 L 30.033203 228.64062 z " onclick="7" /></a>
<a xlink:href="function?function=Button4"><path id="path1483" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 171.44922 L 30.033203 228.64062 L 110.61719 228.64062 L 110.61719 171.44922 L 30.033203 171.44922 z " onclick="4" /></a>
<a xlink:href="function?function=Button1"><path id="path1480" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 114.25977 L 30.033203 171.44922 L 110.61719 171.44922 L 110.61719 114.25977 L 30.033203 114.25977 z " onclick="1" /></a>
<a xlink:href="function?function=Button0"><path id="path997" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 285.83203 L 110.61719 285.83203 L 110.61719 343.02148 L 191.20117 343.02148 L 191.20117 285.83203 z " onclick="0" /></a>
<a xlink:href="function?function=Button8"><path id="path1495" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 228.64062 L 110.61719 285.83203 L 191.20117 285.83203 L 191.20117 228.64062 L 110.61719 228.64062 z " onclick="8" /></a>
<a xlink:href="function?function=Button5"><path id="path1489" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 171.44922 L 110.61719 228.64062 L 191.20117 228.64062 L 191.20117 171.44922 L 110.61719 171.44922 z " onclick="5" /></a>
<a xlink:href="function?function=Button2"><path id="path1477" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 114.25977 L 110.61719 171.44922 L 191.20117 171.44922 L 191.20117 114.25977 L 110.61719 114.25977 z " onclick="2" /></a>
<a xlink:href="function?function=Last"><path id="path994" style="fill:rgba(0,0,0,0);stroke:none;" d="M 271.78516 285.83203 L 191.20117 285.83203 L 191.20117 343.02148 L 271.78516 343.02148 L 271.78516 285.83203 z " onclick="prech" /></a>
<a xlink:href="function?function=Button9"><path id="path1498" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 228.64062 L 191.20117 285.83203 L 271.78516 285.83203 L 271.78516 228.64062 L 191.20117 228.64062 z " onclick="9" /></a>
<a xlink:href="function?function=Button6"><path id="path1486" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 171.44922 L 191.20117 228.64062 L 271.78516 228.64062 L 271.78516 171.44922 L 191.20117 171.44922 z " onclick="6" /></a>
<a xlink:href="function?function=Button3"><path id="path1474" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 114.25977 L 191.20117 171.44922 L 271.78516 171.44922 L 271.78516 114.25977 L 191.20117 114.25977 z " onclick="3" /></a>
<a xlink:href="function?function=InputSource"><path id="path1501" style="fill:rgba(0,0,0,0);stroke:none;" d="m 189.20117,43.019996 v 65.239774 h 80.58399 V 43.019996 Z" onclick="source" /></a>
<a xlink:href="function?function=Power"><path id="path1503" style="fill:rgba(0,0,0,0);stroke:none;" d="m 34.0332,36.135788 v 76.123982 h 80.58399 V 36.135788 Z" onclick="power" /></a>
<a xlink:href="function?function=Mute"><path id="path1505" style="fill:rgba(0,0,0,0);stroke:none;" d="m 188.06799,345.97684 h -71.90271 v 80.58111 h 71.90271 z" onclick="mute" /></a>
<a xlink:href="function?function=ChannelList"><path id="path1507" style="fill:rgba(0,0,0,0);stroke:none;" d="m 187.07236,430.38414 h -65.84819 v 70.95271 h 65.84819 z" onclick="channellist" /></a>
<a xlink:href="function?function=ChannelDown"><path id="path1509" style="fill:rgba(0,0,0,0);stroke:none;" d="M 273.67188 436.94336 L 189.32422 436.94336 L 189.32422 517.69336 L 273.67188 517.69336 L 273.67188 436.94336 z " onclick="channeldown" /></a>
<a xlink:href="function?function=ChannelUp"><path id="path3698" style="fill:rgba(0,0,0,0);stroke:none;" d="M 189.32422 347.51172 L 189.32422 436.94336 L 273.67188 436.94336 L 273.67188 347.51172 L 189.32422 347.51172 z " onclick="channelup" /></a>
<a xlink:href="function?function=VolumeDown"><path id="path1511" style="fill:rgba(0,0,0,0);stroke:none;" d="M 115.93164 436.94336 L 28.308594 436.94336 L 28.308594 518.10352 L 115.93164 518.10352 L 115.93164 436.94336 z " onclick="volumedown" /></a>
<a xlink:href="function?function=VolumeUp"><path id="path3695" style="fill:rgba(0,0,0,0);stroke:none;" d="M 28.308594 347.92383 L 28.308594 436.94336 L 115.93164 436.94336 L 115.93164 347.92383 L 28.308594 347.92383 z " onclick="volumeup" /></a>
<a xlink:href="function?function=SmartHub"><path id="path1513" style="fill:rgba(0,0,0,0);stroke:none;" d="m 183.07236,513.22443 h -65.84819 v 70.95271 h 65.84819 z" onclick="smarthub" /></a>
<a xlink:href="function?function=Guide"><path id="path1515" style="fill:rgba(0,0,0,0);stroke:none;" d="m 267.44021,523.24455 h -79.35424 v 64.46748 h 79.35424 z" onclick="guide" /></a>
<a xlink:href="function?function=Menu"><path id="path1517" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.82824,523.24455 H 34.474003 v 64.46748 h 79.354237 z" onclick="menu" /></a>
<a xlink:href="function?function=Tools"><path id="path1519" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.82824,587.71203 H 34.474003 v 64.46748 h 79.354237 z" onclick="tools" /></a>
<a xlink:href="function?function=Info"><path id="path1521" style="fill:rgba(0,0,0,0);stroke:none;" d="m 267.44021,587.71203 h -79.35424 v 64.46748 h 79.35424 z" onclick="info" /></a>
<a xlink:href="function?function=CursorUp"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1545" width="74.184525" height="71.952538" x="113.86485" y="587.74866" onclick="up" /></a>
<a xlink:href="function?function=CursorDown"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1627" width="74.184525" height="71.952538" x="113.17372" y="725.35107" onclick="down" /></a>
<a xlink:href="function?function=CursorRight"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1629" width="81.755196" height="71.884422" x="188.08344" y="659.73523" onclick="right" /></a>
<a xlink:href="function?function=CursorLeft"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1631" width="85.428856" height="71.852524" x="28.386009" y="659.75116" onclick="left" /></a>
<a xlink:href="function?function=Exit"><path id="path1633" style="fill:rgba(0,0,0,0);stroke:none;" d="m 269.83862,731.61963 h -79.35424 v 64.46748 h 79.35424 z" onclick="exit" /></a>
<a xlink:href="function?function=Return"><path id="path1635" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.81487,731.6037 H 34.460625 v 64.46748 h 79.354245 z" onclick="return" /></a>
<a xlink:href="function?function=Rewind"><path id="rect1659" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 898.05859 L 33.228516 898.05859 L 33.228516 949.05273 L 92.380859 949.05273 L 92.380859 898.05859 z " onclick="rewind" /></a>
<a xlink:href="function?function=Play"><path id="path2351" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 898.05859 L 92.380859 949.05273 L 151.5332 949.05273 L 151.5332 898.05859 L 92.380859 898.05859 z " onclick="play" /></a>
<a xlink:href="function?function=Pause"><path id="path2348" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 898.05859 L 151.5332 949.05273 L 210.68555 949.05273 L 210.68555 898.05859 L 151.5332 898.05859 z " onclick="pause" /></a>
<a xlink:href="function?function=Fastforward"><path id="path2345" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 898.05859 L 210.68555 949.05273 L 269.83789 949.05273 L 269.83789 898.05859 L 210.68555 898.05859 z " onclick="fastforward" /></a>
<a xlink:href="function?function=EManual"><path id="path2324" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 847.06445 L 33.228516 847.06445 L 33.228516 898.05859 L 92.380859 898.05859 L 92.380859 847.06445 z " onclick="EManual" /></a>
<a xlink:href="function?function=Sports"><path id="path2336" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 847.06445 L 92.380859 847.06445 L 92.380859 898.05859 L 151.5332 898.05859 L 151.5332 847.06445 z " onclick="sports" /></a>
<a xlink:href="function?function=CC"><path id="path2339" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 847.06445 L 151.5332 847.06445 L 151.5332 898.05859 L 210.68555 898.05859 L 210.68555 847.06445 z " onclick="CC" /></a>
<a xlink:href="function?function=Stop"><path id="path2342" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 847.06445 L 210.68555 898.05859 L 269.83789 898.05859 L 269.83789 847.06445 L 210.68555 847.06445 z " onclick="stop" /></a>
<a xlink:href="function?function=A"><path id="path2321" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 796.08789 L 33.228516 796.08789 L 33.228516 847.06445 L 92.380859 847.06445 L 92.380859 796.08789 z " onclick="a" /></a>
<a xlink:href="function?function=B"><path id="path2327" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 796.08789 L 92.380859 796.08789 L 92.380859 847.06445 L 151.5332 847.06445 L 151.5332 796.08789 z " onclick="b" /></a>
<a xlink:href="function?function=C"><path id="path2330" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 796.08789 L 151.5332 796.08789 L 151.5332 847.06445 L 210.68555 847.06445 L 210.68555 796.08789 z " onclick="c" /></a>
<a xlink:href="function?function=D"><path id="path2333" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 796.08789 L 210.68555 847.06445 L 269.83789 847.06445 L 269.83789 796.08789 L 210.68555 796.08789 z " onclick="d" /></a>
<a xlink:href="function?function=Enter"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect3842" width="73.543381" height="65.599915" x="113.81487" y="659.75116" onclick="enter" /></a>
<a xlink:href="/function?function=AddSubtract"><path id="rect464" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 285.83203 L 30.033203 285.83203 L 30.033203 343.02148 L 110.61719 343.02148 L 110.61719 285.83203 z " /></a>
<a xlink:href="/function?function=Button7"><path id="path1492" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 228.64062 L 30.033203 285.83203 L 110.61719 285.83203 L 110.61719 228.64062 L 30.033203 228.64062 z " /></a>
<a xlink:href="/function?function=Button4"><path id="path1483" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 171.44922 L 30.033203 228.64062 L 110.61719 228.64062 L 110.61719 171.44922 L 30.033203 171.44922 z " /></a>
<a xlink:href="/function?function=Button1"><path id="path1480" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 114.25977 L 30.033203 171.44922 L 110.61719 171.44922 L 110.61719 114.25977 L 30.033203 114.25977 z " /></a>
<a xlink:href="/function?function=Button0"><path id="path997" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 285.83203 L 110.61719 285.83203 L 110.61719 343.02148 L 191.20117 343.02148 L 191.20117 285.83203 z " /></a>
<a xlink:href="/function?function=Button8"><path id="path1495" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 228.64062 L 110.61719 285.83203 L 191.20117 285.83203 L 191.20117 228.64062 L 110.61719 228.64062 z " /></a>
<a xlink:href="/function?function=Button5"><path id="path1489" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 171.44922 L 110.61719 228.64062 L 191.20117 228.64062 L 191.20117 171.44922 L 110.61719 171.44922 z " /></a>
<a xlink:href="/function?function=Button2"><path id="path1477" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 114.25977 L 110.61719 171.44922 L 191.20117 171.44922 L 191.20117 114.25977 L 110.61719 114.25977 z " /></a>
<a xlink:href="/function?function=Last"><path id="path994" style="fill:rgba(0,0,0,0);stroke:none;" d="M 271.78516 285.83203 L 191.20117 285.83203 L 191.20117 343.02148 L 271.78516 343.02148 L 271.78516 285.83203 z " /></a>
<a xlink:href="/function?function=Button9"><path id="path1498" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 228.64062 L 191.20117 285.83203 L 271.78516 285.83203 L 271.78516 228.64062 L 191.20117 228.64062 z " /></a>
<a xlink:href="/function?function=Button6"><path id="path1486" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 171.44922 L 191.20117 228.64062 L 271.78516 228.64062 L 271.78516 171.44922 L 191.20117 171.44922 z " /></a>
<a xlink:href="/function?function=Button3"><path id="path1474" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 114.25977 L 191.20117 171.44922 L 271.78516 171.44922 L 271.78516 114.25977 L 191.20117 114.25977 z " /></a>
<a xlink:href="/function?function=InputSource"><path id="path1501" style="fill:rgba(0,0,0,0);stroke:none;" d="m 189.20117,43.019996 v 65.239774 h 80.58399 V 43.019996 Z" /></a>
<a xlink:href="/function?function=Power"><path id="path1503" style="fill:rgba(0,0,0,0);stroke:none;" d="m 34.0332,36.135788 v 76.123982 h 80.58399 V 36.135788 Z" /></a>
<a xlink:href="/function?function=Mute"><path id="path1505" style="fill:rgba(0,0,0,0);stroke:none;" d="m 188.06799,345.97684 h -71.90271 v 80.58111 h 71.90271 z" /></a>
<a xlink:href="/function?function=ChannelList"><path id="path1507" style="fill:rgba(0,0,0,0);stroke:none;" d="m 187.07236,430.38414 h -65.84819 v 70.95271 h 65.84819 z" /></a>
<a xlink:href="/function?function=ChannelDown"><path id="path1509" style="fill:rgba(0,0,0,0);stroke:none;" d="M 273.67188 436.94336 L 189.32422 436.94336 L 189.32422 517.69336 L 273.67188 517.69336 L 273.67188 436.94336 z " /></a>
<a xlink:href="/function?function=ChannelUp"><path id="path3698" style="fill:rgba(0,0,0,0);stroke:none;" d="M 189.32422 347.51172 L 189.32422 436.94336 L 273.67188 436.94336 L 273.67188 347.51172 L 189.32422 347.51172 z " /></a>
<a xlink:href="/function?function=VolumeDown"><path id="path1511" style="fill:rgba(0,0,0,0);stroke:none;" d="M 115.93164 436.94336 L 28.308594 436.94336 L 28.308594 518.10352 L 115.93164 518.10352 L 115.93164 436.94336 z " /></a>
<a xlink:href="/function?function=VolumeUp"><path id="path3695" style="fill:rgba(0,0,0,0);stroke:none;" d="M 28.308594 347.92383 L 28.308594 436.94336 L 115.93164 436.94336 L 115.93164 347.92383 L 28.308594 347.92383 z " /></a>
<a xlink:href="/function?function=SmartHub"><path id="path1513" style="fill:rgba(0,0,0,0);stroke:none;" d="m 183.07236,513.22443 h -65.84819 v 70.95271 h 65.84819 z" /></a>
<a xlink:href="/function?function=Guide"><path id="path1515" style="fill:rgba(0,0,0,0);stroke:none;" d="m 267.44021,523.24455 h -79.35424 v 64.46748 h 79.35424 z" /></a>
<a xlink:href="/function?function=Menu"><path id="path1517" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.82824,523.24455 H 34.474003 v 64.46748 h 79.354237 z" /></a>
<a xlink:href="/function?function=Tools"><path id="path1519" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.82824,587.71203 H 34.474003 v 64.46748 h 79.354237 z" /></a>
<a xlink:href="/function?function=Info"><path id="path1521" style="fill:rgba(0,0,0,0);stroke:none;" d="m 267.44021,587.71203 h -79.35424 v 64.46748 h 79.35424 z" /></a>
<a xlink:href="/function?function=CursorUp"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1545" width="74.184525" height="71.952538" x="113.86485" y="587.74866" /></a>
<a xlink:href="/function?function=CursorDown"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1627" width="74.184525" height="71.952538" x="113.17372" y="725.35107" /></a>
<a xlink:href="/function?function=CursorRight"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1629" width="81.755196" height="71.884422" x="188.08344" y="659.73523" /></a>
<a xlink:href="/function?function=CursorLeft"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1631" width="85.428856" height="71.852524" x="28.386009" y="659.75116" /></a>
<a xlink:href="/function?function=Exit"><path id="path1633" style="fill:rgba(0,0,0,0);stroke:none;" d="m 269.83862,731.61963 h -79.35424 v 64.46748 h 79.35424 z" /></a>
<a xlink:href="/function?function=Return"><path id="path1635" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.81487,731.6037 H 34.460625 v 64.46748 h 79.354245 z" /></a>
<a xlink:href="/function?function=Rewind"><path id="rect1659" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 898.05859 L 33.228516 898.05859 L 33.228516 949.05273 L 92.380859 949.05273 L 92.380859 898.05859 z " /></a>
<a xlink:href="/function?function=Play"><path id="path2351" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 898.05859 L 92.380859 949.05273 L 151.5332 949.05273 L 151.5332 898.05859 L 92.380859 898.05859 z " /></a>
<a xlink:href="/function?function=Pause"><path id="path2348" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 898.05859 L 151.5332 949.05273 L 210.68555 949.05273 L 210.68555 898.05859 L 151.5332 898.05859 z " /></a>
<a xlink:href="/function?function=Fastforward"><path id="path2345" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 898.05859 L 210.68555 949.05273 L 269.83789 949.05273 L 269.83789 898.05859 L 210.68555 898.05859 z " /></a>
<a xlink:href="/function?function=EManual"><path id="path2324" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 847.06445 L 33.228516 847.06445 L 33.228516 898.05859 L 92.380859 898.05859 L 92.380859 847.06445 z " /></a>
<a xlink:href="/function?function=Sports"><path id="path2336" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 847.06445 L 92.380859 847.06445 L 92.380859 898.05859 L 151.5332 898.05859 L 151.5332 847.06445 z " /></a>
<a xlink:href="/function?function=CC"><path id="path2339" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 847.06445 L 151.5332 847.06445 L 151.5332 898.05859 L 210.68555 898.05859 L 210.68555 847.06445 z " /></a>
<a xlink:href="/function?function=Stop"><path id="path2342" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 847.06445 L 210.68555 898.05859 L 269.83789 898.05859 L 269.83789 847.06445 L 210.68555 847.06445 z " /></a>
<a xlink:href="/function?function=A"><path id="path2321" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 796.08789 L 33.228516 796.08789 L 33.228516 847.06445 L 92.380859 847.06445 L 92.380859 796.08789 z " /></a>
<a xlink:href="/function?function=B"><path id="path2327" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 796.08789 L 92.380859 796.08789 L 92.380859 847.06445 L 151.5332 847.06445 L 151.5332 796.08789 z " /></a>
<a xlink:href="/function?function=C"><path id="path2330" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 796.08789 L 151.5332 796.08789 L 151.5332 847.06445 L 210.68555 847.06445 L 210.68555 796.08789 z " /></a>
<a xlink:href="/function?function=D"><path id="path2333" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 796.08789 L 210.68555 847.06445 L 269.83789 847.06445 L 269.83789 796.08789 L 210.68555 796.08789 z " /></a>
<a xlink:href="/function?function=Enter"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect3842" width="73.543381" height="65.599915" x="113.81487" y="659.75116" /></a>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -8,14 +8,13 @@
<head>
<title>Unknown Title</title>
<link rel="stylesheet" href="/static/@tacit_css_min_css.name"/>
<!-- <link rel="stylesheet" href="/static/@tacit_css_min_css.name"/> -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
@ -1026,54 +1025,59 @@ kl+J8KhFCNZFmyirVvZisdfPLEpgomBYkopyNgQ+rv8A/9k=
y="989.05127" />
</g>
<g inkscape:groupmode="layer" inkscape:label="Image" id="g70">
<a xlink:href="function?function=AddSubtract"><path id="rect464" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 285.83203 L 30.033203 285.83203 L 30.033203 343.02148 L 110.61719 343.02148 L 110.61719 285.83203 z " onclick="minus" /></a>
<a xlink:href="function?function=Button7"><path id="path1492" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 228.64062 L 30.033203 285.83203 L 110.61719 285.83203 L 110.61719 228.64062 L 30.033203 228.64062 z " onclick="7" /></a>
<a xlink:href="function?function=Button4"><path id="path1483" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 171.44922 L 30.033203 228.64062 L 110.61719 228.64062 L 110.61719 171.44922 L 30.033203 171.44922 z " onclick="4" /></a>
<a xlink:href="function?function=Button1"><path id="path1480" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 114.25977 L 30.033203 171.44922 L 110.61719 171.44922 L 110.61719 114.25977 L 30.033203 114.25977 z " onclick="1" /></a>
<a xlink:href="function?function=Button0"><path id="path997" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 285.83203 L 110.61719 285.83203 L 110.61719 343.02148 L 191.20117 343.02148 L 191.20117 285.83203 z " onclick="0" /></a>
<a xlink:href="function?function=Button8"><path id="path1495" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 228.64062 L 110.61719 285.83203 L 191.20117 285.83203 L 191.20117 228.64062 L 110.61719 228.64062 z " onclick="8" /></a>
<a xlink:href="function?function=Button5"><path id="path1489" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 171.44922 L 110.61719 228.64062 L 191.20117 228.64062 L 191.20117 171.44922 L 110.61719 171.44922 z " onclick="5" /></a>
<a xlink:href="function?function=Button2"><path id="path1477" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 114.25977 L 110.61719 171.44922 L 191.20117 171.44922 L 191.20117 114.25977 L 110.61719 114.25977 z " onclick="2" /></a>
<a xlink:href="function?function=Last"><path id="path994" style="fill:rgba(0,0,0,0);stroke:none;" d="M 271.78516 285.83203 L 191.20117 285.83203 L 191.20117 343.02148 L 271.78516 343.02148 L 271.78516 285.83203 z " onclick="prech" /></a>
<a xlink:href="function?function=Button9"><path id="path1498" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 228.64062 L 191.20117 285.83203 L 271.78516 285.83203 L 271.78516 228.64062 L 191.20117 228.64062 z " onclick="9" /></a>
<a xlink:href="function?function=Button6"><path id="path1486" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 171.44922 L 191.20117 228.64062 L 271.78516 228.64062 L 271.78516 171.44922 L 191.20117 171.44922 z " onclick="6" /></a>
<a xlink:href="function?function=Button3"><path id="path1474" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 114.25977 L 191.20117 171.44922 L 271.78516 171.44922 L 271.78516 114.25977 L 191.20117 114.25977 z " onclick="3" /></a>
<a xlink:href="function?function=InputSource"><path id="path1501" style="fill:rgba(0,0,0,0);stroke:none;" d="m 189.20117,43.019996 v 65.239774 h 80.58399 V 43.019996 Z" onclick="source" /></a>
<a xlink:href="function?function=Power"><path id="path1503" style="fill:rgba(0,0,0,0);stroke:none;" d="m 34.0332,36.135788 v 76.123982 h 80.58399 V 36.135788 Z" onclick="power" /></a>
<a xlink:href="function?function=Mute"><path id="path1505" style="fill:rgba(0,0,0,0);stroke:none;" d="m 188.06799,345.97684 h -71.90271 v 80.58111 h 71.90271 z" onclick="mute" /></a>
<a xlink:href="function?function=ChannelList"><path id="path1507" style="fill:rgba(0,0,0,0);stroke:none;" d="m 187.07236,430.38414 h -65.84819 v 70.95271 h 65.84819 z" onclick="channellist" /></a>
<a xlink:href="function?function=ChannelDown"><path id="path1509" style="fill:rgba(0,0,0,0);stroke:none;" d="M 273.67188 436.94336 L 189.32422 436.94336 L 189.32422 517.69336 L 273.67188 517.69336 L 273.67188 436.94336 z " onclick="channeldown" /></a>
<a xlink:href="function?function=ChannelUp"><path id="path3698" style="fill:rgba(0,0,0,0);stroke:none;" d="M 189.32422 347.51172 L 189.32422 436.94336 L 273.67188 436.94336 L 273.67188 347.51172 L 189.32422 347.51172 z " onclick="channelup" /></a>
<a xlink:href="function?function=VolumeDown"><path id="path1511" style="fill:rgba(0,0,0,0);stroke:none;" d="M 115.93164 436.94336 L 28.308594 436.94336 L 28.308594 518.10352 L 115.93164 518.10352 L 115.93164 436.94336 z " onclick="volumedown" /></a>
<a xlink:href="function?function=VolumeUp"><path id="path3695" style="fill:rgba(0,0,0,0);stroke:none;" d="M 28.308594 347.92383 L 28.308594 436.94336 L 115.93164 436.94336 L 115.93164 347.92383 L 28.308594 347.92383 z " onclick="volumeup" /></a>
<a xlink:href="function?function=SmartHub"><path id="path1513" style="fill:rgba(0,0,0,0);stroke:none;" d="m 183.07236,513.22443 h -65.84819 v 70.95271 h 65.84819 z" onclick="smarthub" /></a>
<a xlink:href="function?function=Guide"><path id="path1515" style="fill:rgba(0,0,0,0);stroke:none;" d="m 267.44021,523.24455 h -79.35424 v 64.46748 h 79.35424 z" onclick="guide" /></a>
<a xlink:href="function?function=Menu"><path id="path1517" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.82824,523.24455 H 34.474003 v 64.46748 h 79.354237 z" onclick="menu" /></a>
<a xlink:href="function?function=Tools"><path id="path1519" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.82824,587.71203 H 34.474003 v 64.46748 h 79.354237 z" onclick="tools" /></a>
<a xlink:href="function?function=Info"><path id="path1521" style="fill:rgba(0,0,0,0);stroke:none;" d="m 267.44021,587.71203 h -79.35424 v 64.46748 h 79.35424 z" onclick="info" /></a>
<a xlink:href="function?function=CursorUp"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1545" width="74.184525" height="71.952538" x="113.86485" y="587.74866" onclick="up" /></a>
<a xlink:href="function?function=CursorDown"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1627" width="74.184525" height="71.952538" x="113.17372" y="725.35107" onclick="down" /></a>
<a xlink:href="function?function=CursorRight"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1629" width="81.755196" height="71.884422" x="188.08344" y="659.73523" onclick="right" /></a>
<a xlink:href="function?function=CursorLeft"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1631" width="85.428856" height="71.852524" x="28.386009" y="659.75116" onclick="left" /></a>
<a xlink:href="function?function=Exit"><path id="path1633" style="fill:rgba(0,0,0,0);stroke:none;" d="m 269.83862,731.61963 h -79.35424 v 64.46748 h 79.35424 z" onclick="exit" /></a>
<a xlink:href="function?function=Return"><path id="path1635" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.81487,731.6037 H 34.460625 v 64.46748 h 79.354245 z" onclick="return" /></a>
<a xlink:href="function?function=Rewind"><path id="rect1659" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 898.05859 L 33.228516 898.05859 L 33.228516 949.05273 L 92.380859 949.05273 L 92.380859 898.05859 z " onclick="rewind" /></a>
<a xlink:href="function?function=Play"><path id="path2351" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 898.05859 L 92.380859 949.05273 L 151.5332 949.05273 L 151.5332 898.05859 L 92.380859 898.05859 z " onclick="play" /></a>
<a xlink:href="function?function=Pause"><path id="path2348" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 898.05859 L 151.5332 949.05273 L 210.68555 949.05273 L 210.68555 898.05859 L 151.5332 898.05859 z " onclick="pause" /></a>
<a xlink:href="function?function=Fastforward"><path id="path2345" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 898.05859 L 210.68555 949.05273 L 269.83789 949.05273 L 269.83789 898.05859 L 210.68555 898.05859 z " onclick="fastforward" /></a>
<a xlink:href="function?function=EManual"><path id="path2324" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 847.06445 L 33.228516 847.06445 L 33.228516 898.05859 L 92.380859 898.05859 L 92.380859 847.06445 z " onclick="EManual" /></a>
<a xlink:href="function?function=Sports"><path id="path2336" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 847.06445 L 92.380859 847.06445 L 92.380859 898.05859 L 151.5332 898.05859 L 151.5332 847.06445 z " onclick="sports" /></a>
<a xlink:href="function?function=CC"><path id="path2339" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 847.06445 L 151.5332 847.06445 L 151.5332 898.05859 L 210.68555 898.05859 L 210.68555 847.06445 z " onclick="CC" /></a>
<a xlink:href="function?function=Stop"><path id="path2342" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 847.06445 L 210.68555 898.05859 L 269.83789 898.05859 L 269.83789 847.06445 L 210.68555 847.06445 z " onclick="stop" /></a>
<a xlink:href="function?function=A"><path id="path2321" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 796.08789 L 33.228516 796.08789 L 33.228516 847.06445 L 92.380859 847.06445 L 92.380859 796.08789 z " onclick="a" /></a>
<a xlink:href="function?function=B"><path id="path2327" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 796.08789 L 92.380859 796.08789 L 92.380859 847.06445 L 151.5332 847.06445 L 151.5332 796.08789 z " onclick="b" /></a>
<a xlink:href="function?function=C"><path id="path2330" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 796.08789 L 151.5332 796.08789 L 151.5332 847.06445 L 210.68555 847.06445 L 210.68555 796.08789 z " onclick="c" /></a>
<a xlink:href="function?function=D"><path id="path2333" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 796.08789 L 210.68555 847.06445 L 269.83789 847.06445 L 269.83789 796.08789 L 210.68555 796.08789 z " onclick="d" /></a>
<a xlink:href="function?function=Enter"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect3842" width="73.543381" height="65.599915" x="113.81487" y="659.75116" onclick="enter" /></a>
<a xlink:href="function?function=AddSubtract"><path id="rect464" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 285.83203 L 30.033203 285.83203 L 30.033203 343.02148 L 110.61719 343.02148 L 110.61719 285.83203 z " /></a>
<a xlink:href="function?function=Button7"><path id="path1492" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 228.64062 L 30.033203 285.83203 L 110.61719 285.83203 L 110.61719 228.64062 L 30.033203 228.64062 z " /></a>
<a xlink:href="function?function=Button4"><path id="path1483" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 171.44922 L 30.033203 228.64062 L 110.61719 228.64062 L 110.61719 171.44922 L 30.033203 171.44922 z " /></a>
<a xlink:href="function?function=Button1"><path id="path1480" style="fill:rgba(0,0,0,0);stroke:none;" d="M 30.033203 114.25977 L 30.033203 171.44922 L 110.61719 171.44922 L 110.61719 114.25977 L 30.033203 114.25977 z " /></a>
<a xlink:href="function?function=Button0"><path id="path997" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 285.83203 L 110.61719 285.83203 L 110.61719 343.02148 L 191.20117 343.02148 L 191.20117 285.83203 z " /></a>
<a xlink:href="function?function=Button8"><path id="path1495" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 228.64062 L 110.61719 285.83203 L 191.20117 285.83203 L 191.20117 228.64062 L 110.61719 228.64062 z " /></a>
<a xlink:href="function?function=Button5"><path id="path1489" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 171.44922 L 110.61719 228.64062 L 191.20117 228.64062 L 191.20117 171.44922 L 110.61719 171.44922 z " /></a>
<a xlink:href="function?function=Button2"><path id="path1477" style="fill:rgba(0,0,0,0);stroke:none;" d="M 110.61719 114.25977 L 110.61719 171.44922 L 191.20117 171.44922 L 191.20117 114.25977 L 110.61719 114.25977 z " /></a>
<a xlink:href="function?function=Last"><path id="path994" style="fill:rgba(0,0,0,0);stroke:none;" d="M 271.78516 285.83203 L 191.20117 285.83203 L 191.20117 343.02148 L 271.78516 343.02148 L 271.78516 285.83203 z " /></a>
<a xlink:href="function?function=Button9"><path id="path1498" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 228.64062 L 191.20117 285.83203 L 271.78516 285.83203 L 271.78516 228.64062 L 191.20117 228.64062 z " /></a>
<a xlink:href="function?function=Button6"><path id="path1486" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 171.44922 L 191.20117 228.64062 L 271.78516 228.64062 L 271.78516 171.44922 L 191.20117 171.44922 z " /></a>
<a xlink:href="function?function=Button3"><path id="path1474" style="fill:rgba(0,0,0,0);stroke:none;" d="M 191.20117 114.25977 L 191.20117 171.44922 L 271.78516 171.44922 L 271.78516 114.25977 L 191.20117 114.25977 z " /></a>
<a xlink:href="function?function=InputSource"><path id="path1501" style="fill:rgba(0,0,0,0);stroke:none;" d="m 189.20117,43.019996 v 65.239774 h 80.58399 V 43.019996 Z" /></a>
<a xlink:href="function?function=Power"><path id="path1503" style="fill:rgba(0,0,0,0);stroke:none;" d="m 34.0332,36.135788 v 76.123982 h 80.58399 V 36.135788 Z" /></a>
<a xlink:href="function?function=Mute"><path id="path1505" style="fill:rgba(0,0,0,0);stroke:none;" d="m 188.06799,345.97684 h -71.90271 v 80.58111 h 71.90271 z" /></a>
<a xlink:href="function?function=ChannelList"><path id="path1507" style="fill:rgba(0,0,0,0);stroke:none;" d="m 187.07236,430.38414 h -65.84819 v 70.95271 h 65.84819 z" /></a>
<a xlink:href="function?function=ChannelDown"><path id="path1509" style="fill:rgba(0,0,0,0);stroke:none;" d="M 273.67188 436.94336 L 189.32422 436.94336 L 189.32422 517.69336 L 273.67188 517.69336 L 273.67188 436.94336 z " /></a>
<a xlink:href="function?function=ChannelUp"><path id="path3698" style="fill:rgba(0,0,0,0);stroke:none;" d="M 189.32422 347.51172 L 189.32422 436.94336 L 273.67188 436.94336 L 273.67188 347.51172 L 189.32422 347.51172 z " /></a>
<a xlink:href="function?function=VolumeDown"><path id="path1511" style="fill:rgba(0,0,0,0);stroke:none;" d="M 115.93164 436.94336 L 28.308594 436.94336 L 28.308594 518.10352 L 115.93164 518.10352 L 115.93164 436.94336 z " /></a>
<a xlink:href="function?function=VolumeUp"><path id="path3695" style="fill:rgba(0,0,0,0);stroke:none;" d="M 28.308594 347.92383 L 28.308594 436.94336 L 115.93164 436.94336 L 115.93164 347.92383 L 28.308594 347.92383 z " /></a>
<a xlink:href="function?function=SmartHub"><path id="path1513" style="fill:rgba(0,0,0,0);stroke:none;" d="m 183.07236,513.22443 h -65.84819 v 70.95271 h 65.84819 z" /></a>
<a xlink:href="function?function=Guide"><path id="path1515" style="fill:rgba(0,0,0,0);stroke:none;" d="m 267.44021,523.24455 h -79.35424 v 64.46748 h 79.35424 z" /></a>
<a xlink:href="function?function=Menu"><path id="path1517" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.82824,523.24455 H 34.474003 v 64.46748 h 79.354237 z" /></a>
<a xlink:href="function?function=Tools"><path id="path1519" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.82824,587.71203 H 34.474003 v 64.46748 h 79.354237 z" /></a>
<a xlink:href="function?function=Info"><path id="path1521" style="fill:rgba(0,0,0,0);stroke:none;" d="m 267.44021,587.71203 h -79.35424 v 64.46748 h 79.35424 z" /></a>
<a xlink:href="function?function=CursorUp"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1545" width="74.184525" height="71.952538" x="113.86485" y="587.74866" /></a>
<a xlink:href="function?function=CursorDown"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1627" width="74.184525" height="71.952538" x="113.17372" y="725.35107" /></a>
<a xlink:href="function?function=CursorRight"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1629" width="81.755196" height="71.884422" x="188.08344" y="659.73523" /></a>
<a xlink:href="function?function=CursorLeft"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect1631" width="85.428856" height="71.852524" x="28.386009" y="659.75116" /></a>
<a xlink:href="function?function=Exit"><path id="path1633" style="fill:rgba(0,0,0,0);stroke:none;" d="m 269.83862,731.61963 h -79.35424 v 64.46748 h 79.35424 z" /></a>
<a xlink:href="function?function=Return"><path id="path1635" style="fill:rgba(0,0,0,0);stroke:none;" d="M 113.81487,731.6037 H 34.460625 v 64.46748 h 79.354245 z" /></a>
<a xlink:href="function?function=Rewind"><path id="rect1659" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 898.05859 L 33.228516 898.05859 L 33.228516 949.05273 L 92.380859 949.05273 L 92.380859 898.05859 z " /></a>
<a xlink:href="function?function=Play"><path id="path2351" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 898.05859 L 92.380859 949.05273 L 151.5332 949.05273 L 151.5332 898.05859 L 92.380859 898.05859 z " /></a>
<a xlink:href="function?function=Pause"><path id="path2348" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 898.05859 L 151.5332 949.05273 L 210.68555 949.05273 L 210.68555 898.05859 L 151.5332 898.05859 z " /></a>
<a xlink:href="function?function=Fastforward"><path id="path2345" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 898.05859 L 210.68555 949.05273 L 269.83789 949.05273 L 269.83789 898.05859 L 210.68555 898.05859 z " /></a>
<a xlink:href="function?function=EManual"><path id="path2324" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 847.06445 L 33.228516 847.06445 L 33.228516 898.05859 L 92.380859 898.05859 L 92.380859 847.06445 z " /></a>
<a xlink:href="function?function=Sports"><path id="path2336" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 847.06445 L 92.380859 847.06445 L 92.380859 898.05859 L 151.5332 898.05859 L 151.5332 847.06445 z " /></a>
<a xlink:href="function?function=CC"><path id="path2339" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 847.06445 L 151.5332 847.06445 L 151.5332 898.05859 L 210.68555 898.05859 L 210.68555 847.06445 z " /></a>
<a xlink:href="function?function=Stop"><path id="path2342" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 847.06445 L 210.68555 898.05859 L 269.83789 898.05859 L 269.83789 847.06445 L 210.68555 847.06445 z " /></a>
<a xlink:href="function?function=A"><path id="path2321" style="fill:rgba(0,0,0,0);stroke:none;" d="M 92.380859 796.08789 L 33.228516 796.08789 L 33.228516 847.06445 L 92.380859 847.06445 L 92.380859 796.08789 z " /></a>
<a xlink:href="function?function=B"><path id="path2327" style="fill:rgba(0,0,0,0);stroke:none;" d="M 151.5332 796.08789 L 92.380859 796.08789 L 92.380859 847.06445 L 151.5332 847.06445 L 151.5332 796.08789 z " /></a>
<a xlink:href="function?function=C"><path id="path2330" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 796.08789 L 151.5332 796.08789 L 151.5332 847.06445 L 210.68555 847.06445 L 210.68555 796.08789 z " /></a>
<a xlink:href="function?function=D"><path id="path2333" style="fill:rgba(0,0,0,0);stroke:none;" d="M 210.68555 796.08789 L 210.68555 847.06445 L 269.83789 847.06445 L 269.83789 796.08789 L 210.68555 796.08789 z " /></a>
<a xlink:href="function?function=Enter"><rect style="fill:rgba(0,0,0,0);stroke:none;" id="rect3842" width="73.543381" height="65.599915" x="113.81487" y="659.75116" /></a>
</g>
</svg>
<!--
<object data="/static/@remote2_svg.name">
</object>
-->
<!--
<form method="POST" action="/function">
<select name="function">
@for function in Function::iter() {
@ -1082,5 +1086,6 @@ kl+J8KhFCNZFmyirVvZisdfPLEpgomBYkopyNgQ+rv8A/9k=
</select>
<button>Submit</button>
</form>
-->
</body>
</html>