From 41d7f2a0e5f02f8d4f4e090a850c201d54479aaa Mon Sep 17 00:00:00 2001 From: bunnie Date: Mon, 23 Nov 2020 14:55:56 +0800 Subject: [PATCH] add ScreenSize message, add hanzi test to boot screen --- services/graphics-server/src/api.rs | 14 + services/graphics-server/src/hanzi-test.bmp | Bin 0 -> 23648 bytes services/graphics-server/src/lib.rs | 9 + services/graphics-server/src/logo.rs | 334 ++++++++++---------- services/graphics-server/src/main.rs | 8 + services/shell/src/main.rs | 9 +- 6 files changed, 204 insertions(+), 170 deletions(-) create mode 100644 services/graphics-server/src/hanzi-test.bmp diff --git a/services/graphics-server/src/api.rs b/services/graphics-server/src/api.rs index d6bc0867e..3af44f5de 100644 --- a/services/graphics-server/src/api.rs +++ b/services/graphics-server/src/api.rs @@ -585,6 +585,9 @@ pub enum Opcode<'a> { /// Render the string at the (x,y) coordinates String(&'a str), + + /// Retrieve the X and Y dimensions of the screen + ScreenSize, } impl<'a> core::convert::TryFrom<&'a Message> for Opcode<'a> { @@ -610,6 +613,10 @@ impl<'a> core::convert::TryFrom<&'a Message> for Opcode<'a> { ))), _ => Err("unrecognized opcode"), }, + Message::BlockingScalar(m) => match m.id { + 8 => Ok(Opcode::ScreenSize), + _ => Err("unrecognized opcode"), + }, Message::Borrow(m) => match m.id { 1 => { let s = unsafe { @@ -681,6 +688,13 @@ impl<'a> Into for Opcode<'a> { arg3: rect.x1 as _, arg4: rect.y1 as _, }), + Opcode::ScreenSize => Message::BlockingScalar(ScalarMessage { + id: 8, + arg1: 0, + arg2: 0, + arg3: 0, + arg4: 0, + }), Opcode::String(string) => { let region = xous::carton::Carton::from_bytes(string.as_bytes()); Message::Borrow(region.into_message(1)) diff --git a/services/graphics-server/src/hanzi-test.bmp b/services/graphics-server/src/hanzi-test.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7cd42d0743c86b6683916ea2f058fdace0325861 GIT binary patch literal 23648 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 Wb=d5x*T`!gxaNUt9{BZm;C}$MZ#xqJ literal 0 HcmV?d00001 diff --git a/services/graphics-server/src/lib.rs b/services/graphics-server/src/lib.rs index 57606bae0..9f59c55ff 100644 --- a/services/graphics-server/src/lib.rs +++ b/services/graphics-server/src/lib.rs @@ -36,3 +36,12 @@ pub fn clear_region(cid: CID, x0: usize, y0: usize, x1: usize, y1: usize) -> Res pub fn draw_string(cid: CID, s: &String) -> Result<(), xous::Error> { s.lend(cid, 1).map(|_| ()) } + +pub fn screen_size(cid: CID) -> Result { + let response = send_message(cid, api::Opcode::ScreenSize.into())?; + if let xous::Result::Scalar2(x, y) = response { + Ok(Point::new(x as _, y as _)) + } else { + panic!("unexpected return value: {:#?}", response); + } +} \ No newline at end of file diff --git a/services/graphics-server/src/logo.rs b/services/graphics-server/src/logo.rs index 227e49a98..32a06cf81 100644 --- a/services/graphics-server/src/logo.rs +++ b/services/graphics-server/src/logo.rs @@ -194,173 +194,173 @@ pub const LOGO_MAP: [u32; 11 * 536] = [ 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, -0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xfe3fffff, 0xf8ffffe3, 0xfe7fff8f, 0xf9ffc719, 0xfffff1f3, 0x9fffff1f, 0xbffc7e3f, 0xffc7ffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xfe3fffff, 0xf8ffffe3, 0xfe7fff8f, 0xf8ffe738, 0xfffff9f3, 0x9ffffe3f, 0x1ffe7e3f, 0xff80ffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x00007fff, 0x0001f000, 0xfe7fc000, 0xf9ffc719, 0x01fff9f3, 0x9ff00000, 0x1ffe7f1f, 0xffc007fe, 0xffffffff, 0xffffffff, +0xffffffff, 0x00007fff, 0x0001e000, 0xfe7fc000, 0xf8ffe738, 0x01fe00f3, 0x9ff00000, 0x3f80201f, 0xfff800fc, 0xffffffff, 0xffffffff, +0xffffffff, 0x00007fff, 0x0001f000, 0x3e7fc000, 0xf9ff0000, 0x51fc00f1, 0x9ff55555, 0x7f80001f, 0xffff00f0, 0xffffffff, 0xffffffff, +0xffffffff, 0xae3fffff, 0xf8ffffe3, 0x2a2fff8f, 0xf8ff0000, 0xf9fe7c49, 0x8bffc7f1, 0xfff91c8a, 0xfffff8f0, 0xffffffff, 0xffffffff, +0xffffffff, 0x8e3fffff, 0x18ffffe3, 0x2007ff8f, 0xc01f0000, 0x01fe3c41, 0x01f00000, 0xfff188c0, 0xfffff8f9, 0xffffffff, 0xffffffff, +0xffffffff, 0x8fffffff, 0x3fffffff, 0xe007fffe, 0xc01fe738, 0x09ff3808, 0x01f00000, 0xfff388e0, 0xfffff8ff, 0xffffffff, 0xffffffff, +0xffffffff, 0x0000ffff, 0x1ffff800, 0xe667f000, 0xc99fc719, 0x51ff1104, 0x99f54551, 0xfff3cde1, 0xfffff8ff, 0xffffffff, 0xffffffff, +0xffffffff, 0x0000ffff, 0x3ffff800, 0xe667e000, 0x499fe738, 0xf9ff83cc, 0x99ffc7f1, 0xffe3fff9, 0xfffff8ff, 0xffffffff, 0xffffffff, +0xffffffff, 0xc7ffffff, 0x1fffffff, 0xe667f555, 0x499fc719, 0xf1ffc3c4, 0x99ffc001, 0x03c01009, 0xfffff8fc, 0xffffffff, 0xffffffff, +0xffffffff, 0x03ffffff, 0x3ffffffc, 0xe667fffe, 0x099fffff, 0xf9ff01cc, 0x99ffc001, 0x03e00009, 0xfe0000fc, 0xffffffff, 0xffffffff, +0xffffffff, 0x107fffff, 0x000fffc0, 0x2667f800, 0x099f0000, 0x71f81044, 0x99ff5555, 0x03fc0479, 0xfe0000fc, 0xffffffff, 0xffffffff, +0xffffffff, 0xf80fffff, 0x000ffe00, 0x2667f800, 0x499f0000, 0x39f87e0c, 0x99fe38e6, 0x7ffcfe79, 0xfe0000fc, 0xffffffff, 0xffffffff, +0xffffffff, 0xff00ffff, 0x550ffc07, 0x2667f855, 0xc99f0000, 0x31fc0004, 0x99fc71c6, 0x7ffc7e39, 0xfff1f8fc, 0xffffffff, 0xffffffff, +0xffffffff, 0xffe1ffff, 0xff8ffe7f, 0x2667f8ff, 0xc99f3f3f, 0x19fe00cc, 0x89f8f3cf, 0x7ffcff38, 0xfff1f8fc, 0xffffffff, 0xffffffff, +0xffffffff, 0x00007fff, 0x000fe000, 0x2007f800, 0xc01f1f1f, 0x01fe7c44, 0x01f1e3cf, 0x7fc00818, 0xfff1f8fc, 0xffffffff, 0xffffffff, +0xffffffff, 0x00007fff, 0x000fe000, 0x2007f800, 0xc01f3f3f, 0x99fe7ccc, 0x01fdfe7f, 0x7fc00808, 0xfff1f8fc, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xff8fff1f, 0xfe67f8ff, 0xd11fc000, 0xf9fe0044, 0x99fffc7f, 0x7ffc784f, 0xfff1f8fc, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xff8fff1f, 0xfe67f8ff, 0xf89fc000, 0x39fe00cc, 0x99f80000, 0x7ffcf8ff, 0xfff1fcfc, 0xffffffff, 0xffffffff, +0xffffffff, 0x0007ffff, 0x000fff1f, 0xf27ff800, 0xc9ffc000, 0x19fe7c44, 0x9ffc0000, 0x7ffc7ccc, 0xfff1fc7c, 0xffffffff, 0xffffffff, +0xffffffff, 0x0007ffff, 0x000fff1f, 0xe27ff800, 0xc8ffcf3c, 0x38fe7ccc, 0x9ff8fe7f, 0x7ffcfc89, 0xfff1fc5c, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fc7ffff, 0x3fffff1f, 0xe67ffffe, 0xc9ffc71c, 0x18fe0044, 0x9ffcfc7f, 0x7f800419, 0xfff1fc44, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fc7ffff, 0x3fffff1f, 0xe67ffffe, 0x88ffcf3c, 0x38fe00cc, 0x9ff80000, 0x7f800619, 0xfff1fe40, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fc7ffff, 0x0001ff1f, 0xc07fc000, 0x81ffc71c, 0x1cfe7c44, 0x1ffc0000, 0x7f800610, 0xfff1fe20, 0xffffffff, 0xffffffff, +0xffffffff, 0x0007ffff, 0x0001ff1f, 0xe003c000, 0x803fcf3c, 0xfcfe7ccc, 0x03fe3e7f, 0x3ffffe30, 0xfff1fe38, 0xffffffff, 0xffffffff, +0xffffffff, 0x0007ffff, 0x1555ff1f, 0xc403d554, 0x000fc11c, 0xfc7e7c7c, 0x00fc7c7f, 0x1ffff013, 0xfff1ff1c, 0xffffffff, 0xffffffff, +0xffffffff, 0xffc7ffff, 0x3fffff1f, 0xcf83fffe, 0x9e0fc13c, 0x067e7cfc, 0xe0f80000, 0x3faa008b, 0xfff1ff0e, 0xffffffff, 0xffffffff, +0xffffffff, 0xffc7ffff, 0x3fffff00, 0xeffffffe, 0x1ffff11c, 0x063e1c7c, 0xfdf00000, 0x7f800387, 0xfff1ff0f, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x3fffff80, 0xfffffffe, 0xffffff3f, 0x867f1cfc, 0xffe3fffa, 0xff803fe7, 0xfff1ff9f, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x7ffffff5, 0xffffffff, 0xffffff5f, 0xfffffffd, 0xffffffff, 0xffffffff, 0xfff5ffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xff1fffc7, 0x0007ff8f, 0xc7ff9ff0, 0xfffff1ff, 0xffffc7ff, 0xfffe3f07, 0xfff1ff7f, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xfe3fffe3, 0x000fff8f, 0xcfff9e30, 0xaafff1ff, 0x3fffe7fa, 0xaffe3e00, 0xfff9fe3a, 0xffffffff, 0xffffffff, +0xffffffff, 0xe0007fff, 0xfe3ffff3, 0x0007ffc7, 0x001f9e30, 0x00fff9f0, 0x01ffe3f0, 0x0fff3fc0, 0xfff9fc70, 0xffffffff, 0xffffffff, +0xffffffff, 0x20007fff, 0xfe7ff800, 0xf8fff000, 0x003f9e3f, 0x00fe0010, 0x83f80070, 0x0fe003f3, 0xff001cf8, 0xffffffff, 0xffffffff, +0xffffffff, 0x20007fff, 0x0001f800, 0x007ff000, 0x001f9e3c, 0xfcfe0010, 0xf1fc0071, 0xcfe003f1, 0xff000001, 0xffffffff, 0xffffffff, +0xffffffff, 0x3f9fffff, 0x8000f8fe, 0x001ff3fc, 0xcfff9e38, 0xa8fe3f1f, 0xf3fcfe72, 0xcfe3e203, 0xff1f8009, 0xffffffff, 0xffffffff, +0xffffffff, 0x3f9fffff, 0x0001f8f6, 0x7f07f1cc, 0x003f9e3c, 0x00ff3918, 0xf1fcf470, 0xcfe78201, 0xff1c1391, 0xffffffff, 0xffffffff, +0xffffffff, 0x3f9fffff, 0xfffff8e2, 0x3c47f384, 0x003f9e3e, 0xa8fe3018, 0xf3fce272, 0xcfe203f3, 0xff989399, 0xffffffff, 0xffffffff, +0xffffffff, 0x30007fff, 0x71c7fcc6, 0x10fff10c, 0x457f9e3f, 0xfcff211d, 0x51fc0471, 0xcfe02151, 0xff111191, 0xffffffff, 0xffffffff, +0xffffffff, 0x3000ffff, 0xe3c7fc8e, 0x83fff13c, 0xcfff9ebf, 0xa8ff231f, 0x13fc8e72, 0x8fe0e000, 0xff839998, 0xffffffff, 0xffffffff, +0xffffffff, 0x339c7fff, 0x43c7fc5e, 0xc1fff13c, 0x001f80fc, 0x00ff1710, 0x11fc5c70, 0x0fe2e000, 0xff171910, 0xffffffff, 0xffffffff, +0xffffffff, 0x339cffff, 0xc7e3fcfe, 0xf80ff1fc, 0x001f80f8, 0xa8ff3f10, 0x93fc7e72, 0x0fe3e0f3, 0xff9f9938, 0xffffffff, 0xffffffff, +0xffffffff, 0x339c7fff, 0x07f1fc0e, 0x7c07f01c, 0x001ff5fc, 0xfcff0110, 0x91fc0471, 0xcff02071, 0xff81193f, 0xffffffff, 0xffffffff, +0xffffffff, 0x339cffff, 0x8ff0fe0e, 0x00eff83c, 0xfffff800, 0x00ff831f, 0x13fe0e70, 0xcff06380, 0xff83800f, 0xffffffff, 0xffffffff, +0xffffffff, 0x339c7fff, 0x71f8ff5e, 0x007fff7c, 0x003ff800, 0x00ffd718, 0x11ffdc70, 0xcffd6300, 0xffff000f, 0xffffffff, 0xffffffff, +0xffffffff, 0x339cffff, 0xf1fffffe, 0xbcfffffc, 0x003ff9ff, 0x00ffff18, 0x93fffe70, 0xcfffe2f3, 0xffff9e7f, 0xffffffff, 0xffffffff, +0xffffffff, 0x339c7fff, 0x71e7f000, 0x1c7fc000, 0xfe3ff9ff, 0x0ffc0019, 0x91f0007c, 0x07c00271, 0xfe001c70, 0xffffffff, 0xffffffff, +0xffffffff, 0x339cffff, 0xf883f000, 0x3cffc000, 0xfe3ff8fc, 0x8ffc0019, 0x9bf00078, 0x0f800203, 0xfe001e70, 0xffffffff, 0xffffffff, +0xffffffff, 0x739c7fff, 0x7807f155, 0x7c7fc555, 0x543ffc10, 0x8ffc5559, 0x91f15571, 0x87c55703, 0xfe155c71, 0xffffffff, 0xffffffff, +0xffffffff, 0xf39cffff, 0xfc1ff3ff, 0xfcffc7ff, 0x003ffe39, 0x003c7ff8, 0x99f1ffe0, 0x87cfffab, 0xfe3fea23, 0xffffffff, 0xffffffff, +0xffffffff, 0xf39c7fff, 0xfc3ff1ff, 0x007fc7ff, 0x003f0000, 0x003c7ff8, 0x91f1ffc0, 0x87cfff81, 0xfe3fe001, 0xffffffff, 0xffffffff, +0xffffffff, 0x139cffff, 0x383ff300, 0x00ffc600, 0xfe3f8000, 0x003c0009, 0x89f10000, 0x87c80181, 0xfe200003, 0xffffffff, 0xffffffff, +0xffffffff, 0x139c7fff, 0x303ff100, 0x007fc400, 0x543f0000, 0x07fc0009, 0xc9f1001e, 0x87c00199, 0xfe001c71, 0xffffffff, 0xffffffff, +0xffffffff, 0x101cffff, 0x211ff300, 0xffffe600, 0x003f9fff, 0x07fc0008, 0xc9f9001e, 0x83c80198, 0xfe201e73, 0xffffffff, 0xffffffff, +0xffffffff, 0xf01c7fff, 0xc10ff1ff, 0xffffc7ff, 0x003f9fff, 0x43fc7ff8, 0xc9f1fffc, 0x83c7fe9c, 0xff3ffc71, 0xffffffff, 0xffffffff, +0xffffffff, 0xf89cffff, 0xe38ff1ff, 0x0003e7ff, 0xfe3f8e00, 0xe3fe7ff9, 0xc8f9fff8, 0x03c7fe1c, 0xff3ffe70, 0xffffffff, 0xffffffff, +0xffffffff, 0xff9fffff, 0xf7c3f1ff, 0x0007e3ff, 0xfe3f8e00, 0xf1fc7ff9, 0x44f9fff1, 0x13c7fe1c, 0xff1ffc70, 0xffffffff, 0xffffffff, +0xffffffff, 0xff9fffff, 0xffe1f80f, 0xffffe03f, 0xfe3f8fff, 0xf87e03f9, 0x24f8ffe3, 0x17c7ff8e, 0xff1ffe70, 0xffffffff, 0xffffffff, +0xffffffff, 0xff9fffff, 0xfff0f81f, 0xfffff03f, 0x1e3fc03f, 0xfc3e03f8, 0x24f80ff3, 0x97c07fcf, 0xff01fc7f, 0xffffffff, 0xffffffff, +0xffffffff, 0xff9fffff, 0xfff9fe3f, 0xfffff83f, 0x1e3fc07f, 0xfe7f8bf8, 0xaffc0fff, 0x9fe0ffff, 0xff83fe7f, 0xffffffff, 0xffffffff, +0xffffffff, 0xffdfffff, 0xffffffff, 0xffffffff, 0xdf7ff7ff, 0xff7fffff, 0xffffffff, 0xffffffff, 0xffffff7f, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xfffffffc, 0xffffffff, 0x5fffffff, 0xfffc7e3f, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xabfffffe, 0xffffeaaa, 0x1fffffff, 0xfffc7e3f, 0xfff0ffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x00007fff, 0x0003f000, 0x3ffffc00, 0x03fffffe, 0x007fc000, 0x1ff00000, 0xfffc7e3f, 0xfff001ff, 0xffffffff, 0xffffffff, +0xffffffff, 0x00007fff, 0x0003f000, 0x003ffc00, 0x03ffc000, 0x007fc000, 0x1ff00000, 0xfffc7e3f, 0xfff80000, 0xffffffff, 0xffffffff, +0xffffffff, 0x00007fff, 0x4557f000, 0x001ffc55, 0xe3ffc000, 0x007fc7ff, 0x1ff00000, 0xfffc7e3f, 0xffff4000, 0xffffffff, 0xffffffff, +0xffffffff, 0x8fffffff, 0xe3ffffff, 0x003ffc7f, 0xe3ffc000, 0xffffc7ff, 0x1ffffe1f, 0xfffc7e3f, 0xffffffa0, 0xffffffff, 0xffffffff, +0xffffffff, 0x8fffffff, 0xe3ffffff, 0x1ffffc7f, 0xe3ffffff, 0xffffc7ff, 0x1fffff1f, 0xfffc7e3f, 0xfffffff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x8fffffff, 0xe3ffffff, 0x9ffffc7f, 0xe3ffffff, 0xffffc7ff, 0x1fffff8f, 0xfffc7e3f, 0xfffffff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x8fc7ffff, 0xe3ffffff, 0x8ffffc7f, 0xe3ffffff, 0xffffc7ff, 0x01ffff87, 0xff800000, 0xfffffff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x0fe7ffff, 0xe3fffc00, 0x8ffffc7f, 0xe3ffffff, 0xffffc7ff, 0x01ffff83, 0xff800000, 0xfffffff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x0fc7ffff, 0xe3fffc00, 0x0007fc7f, 0x03ff0000, 0xffffc000, 0x01fff881, 0xff800000, 0xfffffff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x0fe3ffff, 0xe3fffc00, 0x0007fc7f, 0x03ff0000, 0xffffc000, 0x1fffe080, 0xfffc7e3f, 0xffaaaaa8, 0xffffffff, 0xffffffff, +0xffffffff, 0x8fe3ffff, 0xe3ffffff, 0x4557fc7f, 0x43ff5555, 0x7fffc555, 0x1fffc188, 0xfffc7e3f, 0xff800000, 0xffffffff, 0xffffffff, +0xffffffff, 0x8fe3ffff, 0xa2afffff, 0xc7fffe2a, 0xe3ffffff, 0x3fffc7ff, 0x1fff878c, 0xfffc7e3f, 0xff800000, 0xffffffff, 0xffffffff, +0xffffffff, 0x8fe3ffff, 0x0007ffff, 0xe3fffc00, 0xe3ffffff, 0x0fffc7ff, 0x1fff0f8e, 0xfffc7e3f, 0xffd45550, 0xffffffff, 0xffffffff, +0xffffffff, 0x8fe3ffff, 0x0007ffff, 0xe3fffe00, 0xe3ffffff, 0x83ffc7ff, 0x1ffe1f8f, 0xfffc7e3f, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x8fe3ffff, 0x4157ffff, 0x01fffc15, 0xe3ffe000, 0xc1ffc7ff, 0x1ffc3f8f, 0xfffc7e3f, 0xfffc7ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x0003ffff, 0xe3fff800, 0x01fffe3f, 0xe3ffe000, 0xe07fc7ff, 0x1ff87f8f, 0xfffc7e3f, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x0001ffff, 0xf1fff000, 0xfffffe3f, 0x03fff0ff, 0xf07fc000, 0x1ff0ff8f, 0xfffc003f, 0xfffc7ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x0001ffff, 0xf1fff800, 0xfffffe3f, 0x03fff87f, 0xfeffc000, 0x1ff9ff8f, 0xfffc003f, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xf1fff8ff, 0xfffffe3f, 0x03fffc3f, 0xffffc000, 0x1fffff8f, 0xfffc003f, 0xfffc7ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xf1fff8ff, 0xfffffe3f, 0xe3fffe1f, 0xffffc7ff, 0x1fffff8f, 0xffffffff, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xf1fff8ff, 0xf7fffe3f, 0xe3ffff0f, 0xffffc7ff, 0x1fffff8f, 0xffffffff, 0xfffc7ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xf1fff8ff, 0x83fffe3f, 0xe3ffff87, 0xffffc7ff, 0x1fffff8f, 0xffffffff, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xf1fff87f, 0x07fffe3f, 0xe3ffffc0, 0xffffc7ff, 0x1fffff8f, 0xffffffff, 0xfffc7ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xf9fffcff, 0x3ffffe3f, 0xe3ffffe0, 0xffffc7ff, 0x1fffffff, 0xffc00000, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x5155fc7f, 0xffffd415, 0x001fff00, 0x00780000, 0x1ff00000, 0x07c00000, 0xfe000000, 0xffffffff, 0xffffffff, +0xffffffff, 0xbfffffff, 0x0000fc3f, 0xffff8000, 0x001ffe03, 0x00780000, 0x1ff00000, 0x03c00000, 0xfe000000, 0xffffffff, 0xffffffff, +0xffffffff, 0x3fffffff, 0x0000fe00, 0xffff8000, 0x001ffc1f, 0x00780000, 0xfff00000, 0x07ffffff, 0xfe000000, 0xffffffff, 0xffffffff, +0xffffffff, 0x7fffffff, 0xffffff00, 0xffffffff, 0xfffffe7f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffd5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffbf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fffffff, 0xfffffffe, 0xfffffff8, 0x1fffffe3, 0xfffffe3f, 0xffffffff, 0xffffff1f, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fffffff, 0xfffffffe, 0xfffffff8, 0x1fffffe3, 0xfffffe3f, 0xffffffff, 0xffffff1f, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fffffff, 0xfffffffe, 0xfffffff8, 0x1fffffe3, 0xffffff1f, 0xffffffff, 0xffffff1f, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fffffff, 0xfffffffe, 0xaafffff8, 0x1fffaaa2, 0xffffff1f, 0xffffffff, 0xffffff1f, 0xffffffff, 0xffffffff, +0xffffffff, 0x1e7fffff, 0x3fffffff, 0x555ffffe, 0x007fd550, 0x1c7f0000, 0xfff0001f, 0xffffffff, 0xffffff1f, 0xffffffff, 0xffffffff, +0xffffffff, 0x1e3fffff, 0x2aabffff, 0x000feaaa, 0x00ff8000, 0x1cff8000, 0xffe0000f, 0xffffffff, 0xffffff1f, 0xffffffff, 0xffffffff, +0xffffffff, 0x1c7fffff, 0x0003ffff, 0x000fe000, 0xfc7f8000, 0x1c7f0fe3, 0xffffff87, 0xffffffff, 0xffffff1f, 0xffffffff, 0xffffffff, +0xffffffff, 0x18ffffff, 0x0003ffff, 0xffffe000, 0xf8fffff8, 0x1cff8fe3, 0xfffff9c7, 0x0ffffff9, 0xfffc0000, 0xffffffff, 0xffffffff, +0xffffffff, 0x10ffffff, 0x1543ffff, 0xffffe154, 0xfc7ffff8, 0x1c7f0fe3, 0xfffff0c3, 0x0ffffff0, 0xfffc0000, 0xffffffff, 0xffffffff, +0xffffffff, 0x11ffffff, 0x3fe3ffff, 0xffffe3fe, 0xf8fffff8, 0x1cff8fe3, 0xffffe1e3, 0xafffffe0, 0xfffc2a0a, 0xffffffff, 0xffffffff, +0xffffffff, 0x01ffffff, 0x3fe3ffff, 0xffffe3fe, 0x007ffff8, 0x1c7f0000, 0xffffc3e1, 0xffffffc1, 0xfffc7f1f, 0xffffffff, 0xffffffff, +0xffffffff, 0x1bffffff, 0x3fe3ffff, 0xffffe3fe, 0x00fffff8, 0x1cff8000, 0xffff87f0, 0xffffff07, 0xfffc7f1f, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fe3ffff, 0x001fe3fe, 0x007fc000, 0x1c7f0000, 0xffff0ffb, 0xfffffe0f, 0xfffc7f1f, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fe3ffff, 0x003fe3fe, 0xffffc000, 0x1cffffe3, 0xffff9fff, 0x3ffffc1f, 0xfffc7f8e, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fe3ffff, 0x001fe3fe, 0xffffc000, 0x1c7fffe3, 0xffffffff, 0x1ffff83f, 0xfffc7f8c, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fe3ffff, 0xffffe3fe, 0x003ffff8, 0x1cfe0000, 0xfff00007, 0x3ffff0ff, 0xfffc7f88, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fe3ffff, 0xffffe3fe, 0x007ffff8, 0x1c7e0000, 0xfff00007, 0xffffe1ff, 0xfffc7f80, 0xffffffff, 0xffffffff, +0xffffffff, 0x0fffffff, 0x0003ffff, 0xffffe000, 0x003ffff8, 0x1cfe0000, 0xfff00007, 0xffffc3ff, 0xfffc7f83, 0xffffffff, 0xffffffff, +0xffffffff, 0x01ffffff, 0x0003ffff, 0xffffe000, 0xfe3ffff8, 0x1c7e3fe3, 0xfff1e3c7, 0xffff87ff, 0xfffc7f07, 0xffffffff, 0xffffffff, +0xffffffff, 0x00ffffff, 0x0003ffff, 0xffffe000, 0xfe3ffff8, 0x1cfe3fe3, 0xfff1e3c7, 0xffffcfff, 0xfffc7e07, 0xffffffff, 0xffffffff, +0xffffffff, 0x103fffff, 0x3fe3ffff, 0x0007e3fe, 0xfe3e0000, 0x1c7e3fe3, 0xfff1e3c7, 0xffffefff, 0xfffc7803, 0xffffffff, 0xffffffff, +0xffffffff, 0x181fffff, 0x3fe3ffff, 0x0007ebfe, 0xfe3e0000, 0x1cfe3fe3, 0xfff1e3c7, 0xffffffff, 0xff7c7063, 0xffffffff, 0xffffffff, +0xffffffff, 0x1e1fffff, 0x3fffffff, 0x5557fffe, 0x003f5550, 0x1c7e0000, 0xfff1e3c7, 0xffffffff, 0xfc7c70f1, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fbfffff, 0x3fffffff, 0xfffffffe, 0x003ffff8, 0x1cfe0000, 0xfff1e3c7, 0xffffffff, 0xfe7c7bf0, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fffffff, 0xfffffffe, 0x003ffff8, 0x1c7e0000, 0xfff1e3c7, 0x7fffffff, 0xfc7c7ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fffffff, 0xfffffffe, 0xfe3ffff8, 0x1cfe3fe3, 0xfff1e3c7, 0x3fffffff, 0xfe7c7ffc, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fffffff, 0xfffffffe, 0xff7ffff8, 0x1fff7fe3, 0xfff00007, 0x1fffffff, 0xfe7c7ffc, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fffffff, 0xfffffffe, 0xfffffff8, 0x1fffffe3, 0xfff00007, 0x0fffffff, 0xfe007ffe, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fffffff, 0xfffffffe, 0xfffffff8, 0x1fffffe3, 0xfff00007, 0x83ffffff, 0xfe007fff, 0xffffffff, 0xffffffff, +0xffffffff, 0x1fffffff, 0x3fffffff, 0xfffffffe, 0xfffffff8, 0x1fffffe3, 0xfff1ffc7, 0xc7ffffff, 0xff00ffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x5fffffff, 0x7fffffff, 0xffffffff, 0xfffffffd, 0xfffffff7, 0xffffffd7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xc7ffffff, 0xf1ffffff, 0xffffffff, 0xfffff7ff, 0xffff9fff, 0xfffe1fff, 0xfffc17ff, 0xfff05fff, 0xffffffff, 0xffffffff, +0xffffffff, 0xe3ffffff, 0xf8ffffff, 0xffffffff, 0xffffe00f, 0xffff00ff, 0xfffe00bf, 0xfff8000b, 0xffe0002f, 0xffffffff, 0xffffffff, +0xffffffff, 0xe3ffffff, 0xf8ffffff, 0x005fffff, 0x05ffc000, 0x07fe0000, 0x3ffc0000, 0xfffc0000, 0xfff00000, 0xffffffff, 0xffffffff, +0xffffffff, 0x0007ffff, 0xf87ffe00, 0x001fffff, 0x007ffe00, 0x03ffe800, 0x3fffe000, 0xfffffa00, 0xffffe800, 0xffffffff, 0xffffffff, +0xffffffff, 0x0007ffff, 0xfc7fff00, 0x001fffff, 0x007ffff0, 0x03ffffd0, 0x3ffffff4, 0xfffffffe, 0xfffffff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x0007ffff, 0x003fff00, 0xffffc000, 0xfffffff8, 0xe3fffff8, 0x3fffffff, 0xfffffffe, 0xfffffff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffc7ffff, 0x001fff1f, 0xfe7fc000, 0xffffc3f0, 0xe3fffff0, 0x3fffff1f, 0xfffffffe, 0xfffffff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffc7ffff, 0x001fff1f, 0xfc7fc000, 0xffffe3f8, 0xe3fffff1, 0x3fffff1f, 0xfffffffe, 0xfffffff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffc7ffff, 0x8f0fff1f, 0xfc7fffff, 0xffffe1f0, 0xe3ffffe1, 0x3fffff1f, 0xfff55554, 0xffd55550, 0xffffffff, 0xffffffff, +0xffffffff, 0xffc7ffff, 0x8f8fff1f, 0xf8ffffff, 0xfffff1f8, 0xe3ffffe3, 0x3fffff1f, 0xffe00000, 0xff800000, 0xffffffff, 0xffffffff, +0xffffffff, 0x7fc7ffff, 0x8f87ff00, 0xf8ffffff, 0xfffff1f0, 0xf1fffff7, 0x3fffff1f, 0xffe00000, 0xff800000, 0xffffffff, 0xffffffff, +0xffffffff, 0xffc7ffff, 0x8fc3ff80, 0xf8ffffff, 0x007ff8f8, 0xf1ff8000, 0x3fffff1f, 0xffff8ffe, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffc7ffff, 0x0fe1ffc0, 0xf1fff555, 0x007ffc70, 0xf1ff0000, 0x3fffff1f, 0xffff8ffe, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffc7ffff, 0x0ff0ffff, 0xf1ffe000, 0x007ffc78, 0x00ff8000, 0x3ff00000, 0xffff8ffe, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffc7ffff, 0x0ff1ffff, 0xfdfff000, 0xfffffff0, 0x01ffc3ff, 0x3ff00000, 0xffff8ffe, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x0007ffff, 0x8ffff000, 0x0007ffff, 0xfffe0000, 0x01ffe1ff, 0x3ff00000, 0xffff8ffe, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0x0007ffff, 0x8ffff000, 0x0007ffff, 0xfffe0000, 0xfffff0ff, 0x3fffff1f, 0xffff8ffe, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xaaafffff, 0x8ffff8aa, 0x0007ffff, 0xfffe0000, 0xfffff87f, 0x3fffff1f, 0xffff8ffe, 0xfffe3ff8, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x8ffff1ff, 0xffffffff, 0xfffffff0, 0xdffffc1f, 0x15ffdf1f, 0x57d50554, 0xff541550, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x8ffff9ff, 0xffffffff, 0xfffffff8, 0x8fffff0f, 0x00ff8f1f, 0x03800000, 0xfe000000, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x0ffff1ff, 0xffffe000, 0xfffffff0, 0x87ffff83, 0x01ff1f1f, 0x07800000, 0xfe000000, 0xffffffff, 0xffffffff, +0xffffffff, 0x00007fff, 0x0ffff8c0, 0xffffe000, 0xfffffff8, 0xc3ffffe0, 0xfffe3f1f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, +0xffffffff, 0x00007fff, 0x0ffff8c0, 0xffffe000, 0x7ffffff0, 0xe3fffff0, 0xfffc3f1f, 0xfffffff3, 0xffff1fff, 0xffffffff, 0xffffffff, +0xffffffff, 0xaaaaffff, 0x8ffff8ea, 0xffffffff, 0x00fffff8, 0xe1fffffc, 0xfff87f1f, 0xffffffe1, 0xfffe0fff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x8ffff8ff, 0xffffffff, 0x007ffff0, 0xf0ffffff, 0x7ff0ff1f, 0xfffffff0, 0xfff81fff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x8ffff8ff, 0xffffffff, 0x803ffff8, 0xf87fffff, 0x3ff0ff1f, 0xfffffff8, 0xfff07fff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x8ffff8ff, 0xffffffff, 0x0e1ffff0, 0xfc395ffc, 0x0fe1ff1f, 0xfffffffc, 0xffc1ffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x8ffff879, 0xffffffff, 0x1f0ffff8, 0xfe780000, 0x03f3ff0a, 0xffffffff, 0xff83ffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x8ffffc01, 0x01ffffff, 0x7f1ffff8, 0xfffc0000, 0xc1ffff00, 0xffffffff, 0xff07ffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0x8ffffe03, 0x03ffffff, 0xffbffff8, 0xffffa80b, 0xf3ffff80, 0xffffffff, 0xff9fffff, 0xffffffff, 0xffffffff, +0xffffffff, 0xffffffff, 0xdfffffff, 0x57ffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, diff --git a/services/graphics-server/src/main.rs b/services/graphics-server/src/main.rs index c39f49e1f..66c4b7665 100644 --- a/services/graphics-server/src/main.rs +++ b/services/graphics-server/src/main.rs @@ -94,6 +94,14 @@ fn xmain() -> ! { Opcode::String(s) => { op::string_regular_left(display.native_buffer(), op::ClipRegion::screen(), s); } + Opcode::ScreenSize => { + xous::return_scalar2( + msg.sender, + 336 as usize, + 536 as usize, + ) + .expect("GFX: couldn't return ScreenSize request"); + } } } else { // info!("Couldn't convert opcode"); diff --git a/services/shell/src/main.rs b/services/shell/src/main.rs index 8b776c75c..1f57c0974 100644 --- a/services/shell/src/main.rs +++ b/services/shell/src/main.rs @@ -154,13 +154,15 @@ fn shell_main() -> ! { "SHELL: graphics and ticktimer connections are the same!" ); + let screensize = graphics_server::screen_size(graphics_conn).expect("Couldn't get screen size"); + // let mut counter: usize = 0; let mut ls = logstr::LogStr::new(); let dark = graphics_server::Color::from(0); let light = graphics_server::Color::from(!0); let mut bouncyball = Bounce::new(14, Rectangle::new(Point::new(0, 18 * 21), - Point::new(336, 536-1))); // TODO: make API call to get screen size + Point::new(screensize.x as _, screensize.y as i16 - 1))); bouncyball.update(); #[cfg(baremetal)] @@ -185,6 +187,7 @@ fn shell_main() -> ! { .expect("unable to draw to screen: {:?}"); let mut last_time: u64 = 0; + ticktimer_server::reset(ticktimer_conn).unwrap(); let mut string_buffer = String::new(4096); loop { // a message passing demo -- checking time @@ -220,8 +223,8 @@ fn shell_main() -> ! { } string_buffer.clear(); - write!(&mut string_buffer, "Elapsed time: {}ms", last_time).expect("Can't write"); - graphics_server::clear_region(graphics_conn, 0, 0, 300, 40) + write!(&mut string_buffer, "Uptime: {:2}s", last_time/1000).expect("Can't write"); + graphics_server::clear_region(graphics_conn, 0, 0, screensize.x as usize - 1, 40) .expect("unable to clear region"); info!("drawing string: {}", string_buffer); graphics_server::draw_string(graphics_conn, &string_buffer).expect("unable to draw string");