diff --git a/.cargo/config.toml b/.cargo/config.toml index d9de25d2..e3084b84 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -7,6 +7,12 @@ runner = "speculos -m nanox --display=headless" [target.nanosplus] runner = "speculos -m nanosp --display=headless" +[target.stax] +runner = "speculos --model stax" + +[target.flex] +runner = "speculos --model flex" + [unstable] build-std = ["core"] build-std-features = ["compiler-builtins-mem"] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b41391f..0f344312 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -100,4 +100,4 @@ jobs: uses: actions/checkout@v4 - name: Unit tests run: | - cargo +$RUST_NIGHTLY test -p ledger_device_sdk --target ${{ matrix.target }} --features speculos + cargo +$RUST_NIGHTLY test -p ledger_device_sdk --target ${{ matrix.target }} --features speculos --tests diff --git a/Cargo.lock b/Cargo.lock index 46708f39..149235e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,68 +2,75 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "anstream" -version = "0.6.5" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bindgen" @@ -84,7 +91,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.48", + "syn 2.0.66", "which", ] @@ -96,13 +103,13 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "cargo-ledger" -version = "1.3.0" +version = "1.4.0" dependencies = [ "cargo_metadata", "clap", @@ -125,12 +132,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" [[package]] name = "cexpr" @@ -149,9 +153,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clang-sys" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +checksum = "a483f3cbf7cec2e153d424d0e92329d816becc6421389bd494375c6065921b9b" dependencies = [ "glob", "libc", @@ -160,9 +164,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.13" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52bdc885e4cacc7f7c9eedc1ef6da641603180c783c41a15c264944deeaab642" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" dependencies = [ "clap_builder", "clap_derive", @@ -170,9 +174,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.12" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" dependencies = [ "anstream", "anstyle", @@ -182,21 +186,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.4.7" +version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.66", ] [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "color_quant" @@ -206,24 +210,49 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "const-zero" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c6565524986fe3225da0beb9b4aa55ebc73cd57ff8cb4ccf016ca4c8d006af" + +[[package]] +name = "crc32fast" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys", +] + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", ] [[package]] @@ -255,9 +284,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "home" @@ -265,22 +294,29 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "include_gif" -version = "1.0.1" +version = "1.1.0" dependencies = [ + "flate2", "gif", "syn 1.0.109", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "lazy_static" @@ -296,8 +332,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "ledger_device_sdk" -version = "1.8.2" +version = "1.9.0" dependencies = [ + "const-zero", "include_gif", "ledger_device_sdk", "ledger_secure_sdk_sys", @@ -310,45 +347,46 @@ dependencies = [ [[package]] name = "ledger_secure_sdk_sys" -version = "1.2.0" +version = "1.3.0" dependencies = [ "bindgen", "cc", + "glob", ] [[package]] name = "libc" -version = "0.2.152" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libloading" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ "cfg-if", - "windows-sys 0.48.0", + "windows-targets", ] [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "minimal-lexical" @@ -356,6 +394,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +dependencies = [ + "adler", +] + [[package]] name = "nom" version = "7.1.3" @@ -368,9 +415,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -401,28 +448,28 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "prettyplease" -version = "0.2.16" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.48", + "syn 2.0.66", ] [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "ec96c6a92621310b51366f1e28d05ef11489516e93be030060e5fc12024a49d6" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -435,9 +482,9 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "regex" -version = "1.10.2" +version = "1.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", @@ -447,9 +494,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", @@ -458,9 +505,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] name = "rustc-hash" @@ -470,22 +517,22 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.38.28" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.5.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "scroll" @@ -525,29 +572,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.195" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.66", ] [[package]] name = "serde_json" -version = "1.0.111" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -562,9 +609,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" @@ -579,9 +626,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ "proc-macro2", "quote", @@ -610,9 +657,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "weezl" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "which" @@ -626,140 +673,81 @@ dependencies = [ "rustix", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets", ] [[package]] name = "windows-targets" -version = "0.48.5" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" [[package]] -name = "windows_i686_msvc" -version = "0.48.5" +name = "windows_i686_gnullvm" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" [[package]] name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/cargo-ledger/Cargo.toml b/cargo-ledger/Cargo.toml index 9d159c37..a5a4c16b 100644 --- a/cargo-ledger/Cargo.toml +++ b/cargo-ledger/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "cargo-ledger" -version = "1.3.0" -authors = ["yhql"] -description = "Build and sideload Ledger Nano apps" +version = "1.4.0" +authors = ["yhql", "agrojean-ledger"] +description = "Build and sideload Ledger devices apps" categories = ["development-tools::cargo-plugins"] repository = "https://github.com/LedgerHQ/cargo-ledger" readme = "README.md" diff --git a/cargo-ledger/src/main.rs b/cargo-ledger/src/main.rs index 28905959..a9a51aef 100644 --- a/cargo-ledger/src/main.rs +++ b/cargo-ledger/src/main.rs @@ -74,6 +74,8 @@ enum Device { Nanos, Nanox, Nanosplus, + Stax, + Flex, } impl Display for Device { @@ -88,6 +90,8 @@ impl AsRef for Device { Device::Nanos => "nanos", Device::Nanox => "nanox", Device::Nanosplus => "nanosplus", + Device::Stax => "stax", + Device::Flex => "flex", } } } @@ -199,6 +203,8 @@ fn build_app( Device::Nanos => std::env::var("NANOS_SDK"), Device::Nanosplus => std::env::var("NANOSP_SDK"), Device::Nanox => std::env::var("NANOX_SDK"), + Device::Stax => std::env::var("STAX_SDK"), + Device::Flex => std::env::var("FLEX_SDK"), }; let mut args: Vec = vec![]; @@ -294,7 +300,7 @@ fn build_app( // Modify flags to enable BLE if targeting Nano X let flags = match device { Device::Nanos | Device::Nanosplus => metadata_ledger.flags, - Device::Nanox => { + Device::Nanox | Device::Stax | Device::Flex => { let base = u32::from_str_radix(metadata_ledger.flags.as_str(), 16) .unwrap_or(0); format!("0x{:x}", base | 0x200) @@ -307,6 +313,8 @@ fn build_app( Device::Nanos => String::from("0x31100004"), Device::Nanox => String::from("0x33000004"), Device::Nanosplus => String::from("0x33100004"), + Device::Stax => String::from("0x33200004"), + Device::Flex => String::from("0x33300004"), }; // create manifest diff --git a/cargo-ledger/src/setup.rs b/cargo-ledger/src/setup.rs index 88929296..7ae5c606 100644 --- a/cargo-ledger/src/setup.rs +++ b/cargo-ledger/src/setup.rs @@ -13,13 +13,13 @@ pub fn install_targets() { let sysroot_cmd = std::str::from_utf8(&sysroot_cmd).unwrap().trim(); let target_files_url = Path::new( - "https://raw.githubusercontent.com/LedgerHQ/ledger-device-rust-sdk/a630c93398316cc56dcec6aceb0d424b626d150c/ledger_device_sdk/" + "https://raw.githubusercontent.com/LedgerHQ/ledger-device-rust-sdk/d82d6109b4023fd34ebf300cc4090dc4a943db79/ledger_device_sdk/" ); let sysroot = Path::new(sysroot_cmd).join("lib").join("rustlib"); // Retrieve each target file independently // TODO: handle target.json modified upstream - for target in &["nanos", "nanox", "nanosplus"] { + for target in &["nanos", "nanox", "nanosplus", "stax", "flex"] { let outfilepath = sysroot.join(target).join("target.json"); let targetpath = outfilepath.clone().into_os_string().into_string().unwrap(); diff --git a/include_gif/Cargo.toml b/include_gif/Cargo.toml index ef850dba..cf001dca 100644 --- a/include_gif/Cargo.toml +++ b/include_gif/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "include_gif" -version = "1.0.1" +version = "1.1.0" edition = "2021" license.workspace = true repository.workspace = true @@ -12,3 +12,4 @@ proc-macro = true [dependencies] syn = { version = "1.0", features = ["full"] } gif = "0.11.3" +flate2 = "1.0.28" diff --git a/include_gif/src/lib.rs b/include_gif/src/lib.rs index f43c885a..fa692779 100644 --- a/include_gif/src/lib.rs +++ b/include_gif/src/lib.rs @@ -1,25 +1,103 @@ extern crate proc_macro; use proc_macro::TokenStream; +use std::collections::HashSet; use std::fs::File; use std::io::Write; +use syn::{parse_macro_input, Ident, LitStr}; + +enum BppFormat { + Bpp1 = 0, + Bpp2 = 1, + Bpp4 = 2, +} + +enum GlyphType { + Bagl, + Nbgl, +} + +enum Input { + FileNameOnly(LitStr), + FileNameAndType(LitStr, GlyphType), +} + +impl syn::parse::Parse for Input { + fn parse(input: syn::parse::ParseStream) -> syn::Result { + // Parse the filename + let filename = input.parse::()?; + if input.is_empty() { + Ok(Input::FileNameOnly(filename)) + } else { + // Parse comma separator (won't be used, just to skip it) + let _: syn::Token![,] = input.parse()?; + // Parse the glyph type + let glyph_type = input.parse::()?; + match glyph_type.to_string().as_str() { + "BAGL" => Ok(Input::FileNameAndType(filename, GlyphType::Bagl)), + "NBGL" => Ok(Input::FileNameAndType(filename, GlyphType::Nbgl)), + _ => Err(syn::Error::new_spanned(glyph_type, "Invalid glyph type")), + } + } + } +} #[proc_macro] pub fn include_gif(input: TokenStream) -> TokenStream { - let filename = syn::parse_macro_input!(input as syn::LitStr); + let input = parse_macro_input!(input as Input); + match input { + Input::FileNameOnly(filename) => { + // Default to Bagl if no type is specified. + let generate_type = GlyphType::Bagl; + generate_glyph(filename, generate_type) + } + Input::FileNameAndType(filename, generate_type) => generate_glyph(filename, generate_type), + } +} + +fn generate_glyph(filename: LitStr, glyph_type: GlyphType) -> TokenStream { + let filename = filename.value(); let mut decoder = gif::DecodeOptions::new(); decoder.set_color_output(gif::ColorOutput::Indexed); let path = format!( "{}/{}", std::env::var("CARGO_MANIFEST_DIR").unwrap(), - filename.value() + filename ); let file = File::open(path).unwrap(); let mut decoder = decoder.read_info(file).unwrap(); let frame = decoder.read_next_frame().unwrap().unwrap().clone(); let palette = decoder.palette().unwrap(); + let mut vec_output = Vec::new(); + + match glyph_type { + GlyphType::Bagl => { + let packed = generate_bagl_glyph(&frame, &palette); + write!( + &mut vec_output, + "(&{:?}, {}, {})", + packed, frame.width, frame.height + ) + .unwrap(); + } + GlyphType::Nbgl => { + let (compressed_buffer, bpp) = generate_nbgl_glyph(&frame, &palette); + write!( + &mut vec_output, + "(&{:?}, {}, {}, {}, {})", + compressed_buffer, frame.width, frame.height, bpp, true + ) + .unwrap(); + } + }; + + let stream_output = std::str::from_utf8(&vec_output).unwrap(); + stream_output.parse().unwrap() +} + +fn generate_bagl_glyph(frame: &gif::Frame, palette: &[u8]) -> Vec { let dimensions = frame.width * frame.height; let (size, remainder) = ((dimensions / 8) as usize, (dimensions % 8) as usize); @@ -38,10 +116,109 @@ pub fn include_gif(input: TokenStream) -> TokenStream { byte |= color << j; } packed.push(byte); + packed +} + +fn image_to_packed_buffer(frame: &gif::Frame, palette: &[u8]) -> (Vec, u8) { + let mut colors = palette.iter().collect::>().len() as u8; + + // Exit/Panic if number of colors > 16 + if colors > 16 { + panic!("Image has more than 16 colors"); + } + // Round number of colors to a power of 2 + if !(colors != 0 && colors.count_ones() == 1) { + colors = (2.0_f64.powf((colors as f64).log2().ceil())) as u8; + } + + let mut bits_per_pixel: u8 = (colors as f32).log2().floor() as u8; + match bits_per_pixel { + 0 => bits_per_pixel = 1, + 3 => bits_per_pixel = 4, + _ => (), + } + + let width = frame.width; + let height = frame.height; + let base_threshold = (256 / colors as u32) as u8; + let half_threshold = base_threshold / 2; + let mut current_byte = 0 as u16; + let mut current_bit = 0 as u16; + let mut packed: Vec = Vec::new(); + + for x in (0..width).rev() { + for y in 0..height { + let pixel_index = ((y * width) + x) as usize; + let mut color: u16 = palette[frame.buffer[pixel_index] as usize * 3] as u16; + color = (color + half_threshold as u16) / base_threshold as u16; + if color >= colors as u16 { + color = colors as u16 - 1; + } + current_byte += color << ((8 - bits_per_pixel as u16) - current_bit); + current_bit += bits_per_pixel as u16; + if current_bit >= 8 { + packed.push(current_byte as u8 & 0xFF); + current_byte = 0; + current_bit = 0; + } + } + } + if current_bit > 0 { + packed.push(current_byte as u8 & 0xFF); + } + (packed, bits_per_pixel) +} + +fn generate_nbgl_glyph(frame: &gif::Frame, palette: &[u8]) -> (Vec, u8) { + let (packed, bpp) = image_to_packed_buffer(&frame, &palette); + + let mut compressed_image: Vec = Vec::new(); + let mut full_uncompressed_size = packed.len(); + let mut i = 0; + + while full_uncompressed_size > 0 { + let chunk_size = std::cmp::min(2048, full_uncompressed_size); + let tmp = &packed[i..i + chunk_size]; + + let mut encoder = flate2::write::GzEncoder::new(Vec::new(), flate2::Compression::default()); + encoder.write_all(tmp).unwrap(); + let compressed_buffer = encoder.finish().unwrap(); + + let compressed_len = compressed_buffer.len(); + let len_bytes: [u8; 2] = [ + (compressed_len & 0xFF) as u8, + ((compressed_len >> 8) & 0xFF) as u8, + ]; + + compressed_image.extend_from_slice(&len_bytes); + compressed_image.extend_from_slice(&compressed_buffer); + + full_uncompressed_size -= chunk_size; + i += chunk_size; + } + + let bpp_format: u8 = match bpp { + 1 => BppFormat::Bpp1 as u8, + 2 => BppFormat::Bpp2 as u8, + 4 => BppFormat::Bpp4 as u8, + _ => panic!("Invalid bpp"), + }; + + let len = compressed_image.len(); + let metadata: [u8; 8] = [ + frame.width as u8, + (frame.width >> 8) as u8, + frame.height as u8, + (frame.height >> 8) as u8, + bpp_format << 4 | 1, // 1 is gzip compression type. We only support gzip. + len as u8, + (len >> 8) as u8, + (len >> 16) as u8, + ]; - let mut b = Vec::new(); - write!(&mut b, "(&{:?}, {}, {})", packed, frame.width, frame.height).unwrap(); - let a = std::str::from_utf8(&b).unwrap(); + let mut result: Vec = Vec::new(); + result.extend_from_slice(&metadata); + result.extend_from_slice(&compressed_image); - a.parse().unwrap() + (result, bpp) } diff --git a/ledger_device_sdk/Cargo.toml b/ledger_device_sdk/Cargo.toml index 3e6ed1cc..215cdd7d 100644 --- a/ledger_device_sdk/Cargo.toml +++ b/ledger_device_sdk/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "ledger_device_sdk" -version = "1.8.2" -authors = ["yhql", "yogh333"] +version = "1.9.0" +authors = ["yhql", "yogh333", "agrojean-ledger"] edition = "2021" license.workspace = true repository.workspace = true @@ -15,15 +15,17 @@ ledger_device_sdk = { path = ".", features = ["speculos"] } testmacro = { path = "../testmacro", version = "0.1.0"} [dependencies] -ledger_secure_sdk_sys = {path = "../ledger_secure_sdk_sys", version = "1.2.0"} -include_gif = {path = "../include_gif", version = "1.0.1"} +ledger_secure_sdk_sys = {path = "../ledger_secure_sdk_sys", version = "1.3.0"} +include_gif = {path = "../include_gif", version = "1.1.0"} num-traits = { version = "0.2.14", default_features = false } rand_core = { version = "0.6.3", default_features = false } zeroize = { version = "1.6.0", default_features = false } numtoa = "0.2.4" +const-zero = "0.1.1" [features] speculos = [] pre1_54 = [] lib_bagl = [] +nbgl = [] ccid = [] diff --git a/ledger_device_sdk/build.rs b/ledger_device_sdk/build.rs index 60468631..1c4d50d4 100644 --- a/ledger_device_sdk/build.rs +++ b/ledger_device_sdk/build.rs @@ -6,6 +6,8 @@ fn main() -> Result<(), Box> { NanoS, NanoSPlus, NanoX, + Stax, + Flex, } use Device::*; @@ -14,8 +16,10 @@ fn main() -> Result<(), Box> { "nanos" => NanoS, "nanosplus" => NanoSPlus, "nanox" => NanoX, + "stax" => Stax, + "flex" => Flex, target_name => panic!( - "invalid target `{target_name}`, expected one of `nanos`, `nanox`, `nanosplus`. Run with `-Z build-std=core --target=./.json`" + "invalid target `{target_name}`, expected one of `nanos`, `nanox`, `nanosplus`, `stax` or `flex`. Run with `-Z build-std=core --target=./.json`" ), }; @@ -31,6 +35,7 @@ fn main() -> Result<(), Box> { NanoS => "nanos_layout.ld", NanoX => "nanox_layout.ld", NanoSPlus => "nanosplus_layout.ld", + Stax | Flex => "stax_flex_layout.ld", }; std::fs::copy(linkerscript, out_dir.join(linkerscript))?; std::fs::copy("link.ld", out_dir.join("link.ld"))?; diff --git a/ledger_device_sdk/examples/crab_64x64.gif b/ledger_device_sdk/examples/crab_64x64.gif new file mode 100644 index 00000000..7271f2e3 Binary files /dev/null and b/ledger_device_sdk/examples/crab_64x64.gif differ diff --git a/ledger_device_sdk/examples/nbgl_address.rs b/ledger_device_sdk/examples/nbgl_address.rs new file mode 100644 index 00000000..1aa9c2d4 --- /dev/null +++ b/ledger_device_sdk/examples/nbgl_address.rs @@ -0,0 +1,30 @@ +#![no_std] +#![no_main] + +// Force boot section to be embedded in +use ledger_device_sdk as _; + +use include_gif::include_gif; +use ledger_device_sdk::io::*; +use ledger_device_sdk::nbgl::{init_comm, NbglAddressReview, NbglGlyph}; +use ledger_secure_sdk_sys::*; + +#[no_mangle] +extern "C" fn sample_main() { + unsafe { + nbgl_refreshReset(); + } + + let mut comm = Comm::new(); + // Initialize reference to Comm instance for NBGL + // API calls. + init_comm(&mut comm); + + let addr_hex = "0x1234567890ABCDEF1234567890ABCDEF12345678"; + + // Load glyph from 64x64 4bpp gif file with include_gif macro. Creates an NBGL compatible glyph. + const FERRIS: NbglGlyph = + NbglGlyph::from_include(include_gif!("examples/crab_64x64.gif", NBGL)); + // Display the address confirmation screen. + NbglAddressReview::new().glyph(&FERRIS).show(addr_hex); +} diff --git a/ledger_device_sdk/examples/nbgl_home.rs b/ledger_device_sdk/examples/nbgl_home.rs new file mode 100644 index 00000000..b4c776ae --- /dev/null +++ b/ledger_device_sdk/examples/nbgl_home.rs @@ -0,0 +1,62 @@ +#![no_std] +#![no_main] + +// Force boot section to be embedded in +use ledger_device_sdk as _; + +use include_gif::include_gif; +use ledger_device_sdk::io::*; +use ledger_device_sdk::nbgl::{init_comm, NbglGlyph, NbglHomeAndSettings}; +use ledger_device_sdk::nvm::*; +use ledger_device_sdk::NVMData; +use ledger_secure_sdk_sys::*; + +pub enum Instruction { + GetVersion, + GetAppName, +} + +impl TryFrom for Instruction { + type Error = StatusWords; + + fn try_from(value: ApduHeader) -> Result { + match value.ins { + 3 => Ok(Instruction::GetVersion), + 4 => Ok(Instruction::GetAppName), + _ => Err(StatusWords::NothingReceived), + } + } +} + +#[no_mangle] +extern "C" fn sample_main() { + unsafe { + nbgl_refreshReset(); + } + + const SETTINGS_SIZE: usize = 10; + #[link_section = ".nvm_data"] + static mut DATA: NVMData> = + NVMData::new(AtomicStorage::new(&[0u8; 10])); + + let mut comm = Comm::new(); + // Initialize reference to Comm instance for NBGL + // API calls. + init_comm(&mut comm); + + // Load glyph from 64x64 4bpp gif file with include_gif macro. Creates an NBGL compatible glyph. + const FERRIS: NbglGlyph = + NbglGlyph::from_include(include_gif!("examples/crab_64x64.gif", NBGL)); + + let settings_strings = [["Switch title", "Switch subtitle"]]; + // Display the home screen. + NbglHomeAndSettings::new() + .glyph(&FERRIS) + .settings(unsafe { DATA.get_mut() }, &settings_strings) + .infos( + "Example App", + env!("CARGO_PKG_VERSION"), + env!("CARGO_PKG_AUTHORS"), + ) + .show::(); +} diff --git a/ledger_device_sdk/examples/nbgl_review.rs b/ledger_device_sdk/examples/nbgl_review.rs new file mode 100644 index 00000000..6c11f016 --- /dev/null +++ b/ledger_device_sdk/examples/nbgl_review.rs @@ -0,0 +1,52 @@ +#![no_std] +#![no_main] + +// Force boot section to be embedded in +use ledger_device_sdk as _; + +use include_gif::include_gif; +use ledger_device_sdk::io::*; +use ledger_device_sdk::nbgl::{init_comm, Field, NbglGlyph, NbglReview}; +use ledger_secure_sdk_sys::*; + +#[no_mangle] +extern "C" fn sample_main() { + unsafe { + nbgl_refreshReset(); + } + + let mut comm = Comm::new(); + // Initialize reference to Comm instance for NBGL + // API calls. + init_comm(&mut comm); + + let my_fields = [ + Field { + name: "Amount", + value: "111 CRAB", + }, + Field { + name: "Destination", + value: "0x1234567890ABCDEF1234567890ABCDEF12345678", + }, + Field { + name: "Memo", + value: "This is a test transaction.", + }, + ]; + + // Load glyph from 64x64 4bpp gif file with include_gif macro. Creates an NBGL compatible glyph. + const FERRIS: NbglGlyph = + NbglGlyph::from_include(include_gif!("examples/crab_64x64.gif", NBGL)); + // Create NBGL review. Maximum number of fields and string buffer length can be customised + // with constant generic parameters of NbglReview. Default values are 32 and 1024 respectively. + let mut review: NbglReview = NbglReview::new() + .titles( + "Please review transaction", + "To send CRAB", + "Sign transaction\nto send CRAB", + ) + .glyph(&FERRIS); + + review.show(&my_fields); +} diff --git a/ledger_device_sdk/flex.json b/ledger_device_sdk/flex.json new file mode 100644 index 00000000..bfcb5914 --- /dev/null +++ b/ledger_device_sdk/flex.json @@ -0,0 +1,29 @@ +{ + "abi": "eabi", + "arch": "arm", + "c-enum-min-bits": 8, + "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", + "emit-debug-gdb-scripts": false, + "executables": true, + "frame-pointer": "always", + "linker": "rust-lld", + "linker-flavor": "ld.lld", + "llvm-target": "thumbv8m.main-none-eabi", + "max-atomic-width": 32, + "panic-strategy": "abort", + "pre-link-args": { + "ld.lld": [ + "-Tstax_flex_layout.ld", + "-Tlink.ld" + ], + "ld": [ + "-Tstax_flex_layout.ld", + "-Tlink.ld" + ] + }, + "relocation-model": "ropi-rwpi", + "singlethread": true, + "target-pointer-width": "32", + "os": "flex", + "target-family": [ "bolos" ] +} diff --git a/ledger_device_sdk/src/io.rs b/ledger_device_sdk/src/io.rs index cc6e481f..45d4bb56 100644 --- a/ledger_device_sdk/src/io.rs +++ b/ledger_device_sdk/src/io.rs @@ -89,7 +89,10 @@ pub enum Event { /// APDU event Command(T), /// Button press or release event + #[cfg(not(any(target_os = "stax", target_os = "flex")))] Button(ButtonEvent), + #[cfg(any(target_os = "stax", target_os = "flex"))] + TouchEvent, /// Ticker Ticker, } @@ -100,6 +103,7 @@ pub struct Comm { pub apdu_buffer: [u8; 260], pub rx: usize, pub tx: usize, + pub event_pending: bool, buttons: ButtonsState, /// Expected value for the APDU CLA byte. /// If defined, [`Comm`] will automatically reply with [`StatusWords::BadCla`] when an APDU @@ -134,6 +138,7 @@ impl Comm { apdu_buffer: [0u8; 260], rx: 0, tx: 0, + event_pending: false, buttons: ButtonsState::new(), expected_cla: None, } @@ -268,7 +273,76 @@ impl Comm { } } - pub fn decode_event(&mut self, spi_buffer: &mut [u8; 128]) -> Option> + pub fn next_event_ahead(&mut self) -> bool + where + T: TryFrom, + Reply: From<>::Error>, + { + let mut spi_buffer = [0u8; 128]; + + // Signal end of command stream from SE to MCU + // And prepare reception + if !sys_seph::is_status_sent() { + sys_seph::send_general_status(); + } + // Fetch the next message from the MCU + let _rx = sys_seph::seph_recv(&mut spi_buffer, 0); + return self.detect_apdu::(&mut spi_buffer); + } + + pub fn check_event(&mut self) -> Option> + where + T: TryFrom, + Reply: From<>::Error>, + { + if self.event_pending { + self.event_pending = false; + // Reject incomplete APDUs + if self.rx < 4 { + self.reply(StatusWords::BadLen); + return None; + } + + // Check for data length by using `get_data` + if let Err(sw) = self.get_data() { + self.reply(sw); + return None; + } + + // Manage BOLOS specific APDUs B0xx0000 + if self.apdu_buffer[0] == 0xB0 + && self.apdu_buffer[2] == 0x00 + && self.apdu_buffer[3] == 0x00 + { + handle_bolos_apdu(self, self.apdu_buffer[1]); + return None; + } + + // If CLA filtering is enabled, automatically reject APDUs with wrong CLA + if let Some(cla) = self.expected_cla { + if self.apdu_buffer[0] != cla { + self.reply(StatusWords::BadCla); + return None; + } + } + + let res = T::try_from(*self.get_apdu_metadata()); + match res { + Ok(ins) => { + return Some(Event::Command(ins)); + } + Err(sw) => { + // Invalid Ins code. Send automatically an error, mask + // the bad instruction to the application and just + // discard this event. + self.reply(sw); + } + } + } + None + } + + pub fn process_event(&mut self, spi_buffer: &mut [u8; 128]) -> Option> where T: TryFrom, Reply: From<>::Error>, @@ -291,6 +365,7 @@ impl Comm { // If this is an APDU, return with the "received command" event // Any other event (usb, xfer, ticker) is silently handled match seph::Events::from(tag) { + #[cfg(not(any(target_os = "stax", target_os = "flex")))] seph::Events::ButtonPush => { let button_info = spi_buffer[3] >> 1; if let Some(btn_evt) = get_button_event(&mut self.buttons, button_info) { @@ -312,56 +387,55 @@ impl Comm { #[cfg(target_os = "nanox")] seph::Events::BleReceive => ble::receive(&mut self.apdu_buffer, spi_buffer), - seph::Events::TickerEvent => return Some(Event::Ticker), + seph::Events::TickerEvent => { + #[cfg(any(target_os = "stax", target_os = "flex"))] + unsafe { + ux_process_ticker_event(); + } + return Some(Event::Ticker); + } + + #[cfg(any(target_os = "stax", target_os = "flex"))] + seph::Events::ScreenTouch => unsafe { + ux_process_finger_event(spi_buffer.as_mut_ptr()); + return Some(Event::TouchEvent); + }, + _ => (), } + None + } + + pub fn decode_event(&mut self, spi_buffer: &mut [u8; 128]) -> Option> + where + T: TryFrom, + Reply: From<>::Error>, + { + if let Some(event) = self.process_event(spi_buffer) { + return Some(event); + } if unsafe { G_io_app.apdu_state } != APDU_IDLE && unsafe { G_io_app.apdu_length } > 0 { self.rx = unsafe { G_io_app.apdu_length as usize }; + self.event_pending = true; + return self.check_event(); + } + None + } - // Reject incomplete APDUs - if self.rx < 4 { - self.reply(StatusWords::BadLen); - return None; - } - - // Check for data length by using `get_data` - if let Err(sw) = self.get_data() { - self.reply(sw); - return None; - } - - // Manage BOLOS specific APDUs B0xx0000 - if self.apdu_buffer[0] == 0xB0 - && self.apdu_buffer[2] == 0x00 - && self.apdu_buffer[3] == 0x00 - { - handle_bolos_apdu(self, self.apdu_buffer[1]); - return None; - } - - // If CLA filtering is enabled, automatically reject APDUs with wrong CLA - if let Some(cla) = self.expected_cla { - if self.apdu_buffer[0] != cla { - self.reply(StatusWords::BadCla); - return None; - } - } + fn detect_apdu(&mut self, spi_buffer: &mut [u8; 128]) -> bool + where + T: TryFrom, + Reply: From<>::Error>, + { + let _: Option> = self.decode_event(spi_buffer); - let res = T::try_from(*self.get_apdu_metadata()); - match res { - Ok(ins) => { - return Some(Event::Command(ins)); - } - Err(sw) => { - // Invalid Ins code. Send automatically an error, mask - // the bad instruction to the application and just - // discard this event. - self.reply(sw); - } - } + if unsafe { G_io_app.apdu_state } != APDU_IDLE && unsafe { G_io_app.apdu_length } > 0 { + self.rx = unsafe { G_io_app.apdu_length as usize }; + self.event_pending = true; + return true; } - None + false } /// Wait for the next Command event. Discards received button events. diff --git a/ledger_device_sdk/src/lib.rs b/ledger_device_sdk/src/lib.rs index bab04926..e91e2799 100644 --- a/ledger_device_sdk/src/lib.rs +++ b/ledger_device_sdk/src/lib.rs @@ -22,7 +22,11 @@ pub mod seph; pub mod testing; +#[cfg(any(target_os = "stax", target_os = "flex"))] +pub mod nbgl; +#[cfg(not(any(target_os = "stax", target_os = "flex")))] pub mod ui; + pub mod uxapp; use core::panic::PanicInfo; diff --git a/ledger_device_sdk/src/nbgl.rs b/ledger_device_sdk/src/nbgl.rs new file mode 100644 index 00000000..edad00c1 --- /dev/null +++ b/ledger_device_sdk/src/nbgl.rs @@ -0,0 +1,584 @@ +use crate::io::{ApduHeader, Comm, Event, Reply}; +use crate::nvm::*; +use const_zero::const_zero; +use core::cell::RefCell; +use core::ffi::{c_char, CStr}; +use core::mem::transmute; +use ledger_secure_sdk_sys::*; + +#[no_mangle] +pub static mut G_ux_params: bolos_ux_params_t = unsafe { const_zero!(bolos_ux_params_t) }; + +static mut COMM_REF: Option<&mut Comm> = None; +const SETTINGS_SIZE: usize = 10; +static mut NVM_REF: Option<&mut AtomicStorage<[u8; SETTINGS_SIZE]>> = None; +static mut SWITCH_ARRAY: [nbgl_contentSwitch_t; SETTINGS_SIZE] = + [unsafe { const_zero!(nbgl_contentSwitch_t) }; SETTINGS_SIZE]; + +pub struct Field<'a> { + pub name: &'a str, + pub value: &'a str, +} + +pub struct NbglGlyph<'a> { + pub width: u16, + pub height: u16, + pub bpp: u8, + pub is_file: bool, + pub bitmap: &'a [u8], +} + +impl<'a> NbglGlyph<'a> { + pub const fn new( + bitmap: &'a [u8], + width: u16, + height: u16, + bpp: u8, + is_file: bool, + ) -> NbglGlyph<'a> { + NbglGlyph { + width, + height, + bpp, + is_file, + bitmap, + } + } + pub const fn from_include(packed: (&'a [u8], u16, u16, u8, bool)) -> NbglGlyph<'a> { + NbglGlyph { + width: packed.1, + height: packed.2, + bpp: packed.3, + is_file: packed.4, + bitmap: packed.0, + } + } +} + +impl<'a> Into for &NbglGlyph<'a> { + fn into(self) -> nbgl_icon_details_t { + let bpp = match self.bpp { + 1 => NBGL_BPP_1, + 2 => NBGL_BPP_2, + 4 => NBGL_BPP_4, + _ => panic!("Invalid bpp"), + }; + nbgl_icon_details_t { + width: self.width, + height: self.height, + bpp, + isFile: self.is_file, + bitmap: self.bitmap.as_ptr() as *const u8, + } + } +} + +/// Initialize the global COMM_REF variable with the provided Comm instance. +/// This function should be called from the main function of the application. +/// The COMM_REF variable is used by the NBGL API to detect touch events and +/// APDU reception. +pub fn init_comm(comm: &mut Comm) { + unsafe { + COMM_REF = Some(transmute(comm)); + } +} + +/// IO function used in the synchronous NBGL C library to process +/// events (touch, buttons, etc.) or detect if an APDU was received. +/// It returns true if an APDU was received, false otherwise. +#[no_mangle] +pub extern "C" fn io_recv_and_process_event() -> bool { + unsafe { + if let Some(comm) = COMM_REF.as_mut() { + let apdu_received = comm.next_event_ahead::(); + if apdu_received { + return true; + } + } + } + false +} + +/// Helper struct that converts strings to null-terminated c strings. +/// It uses an internal buffer to store the strings, with a maximum size of SIZE. +struct CStringHelper { + /// Internal buffer where strings are allocated. + /// Stored in a [RefCell] because we want [CStringHelper::to_cstring] to be non-mutable. + pub buffer: RefCell<[u8; SIZE]>, + /// Index of the next string in the internal buffer. + /// Stored in a [RefCell] because we want [CStringHelper::to_cstring] to be non-mutable. + next: RefCell, +} + +impl CStringHelper { + pub fn new() -> Self { + Self { + buffer: RefCell::new([0u8; SIZE]), + next: RefCell::new(0), + } + } + + pub fn flush(&self) { + *self.next.borrow_mut() = 0; // Reset the next index to 0 + } + + pub fn to_cstring<'a>(&'a self, s: &str) -> Result<&'a CStr, ()> { + let size = s.len(); + let mut buffer = self.buffer.borrow_mut(); + let next: usize = *self.next.borrow(); + // Verify there is enough space in the internal buffer. + // +1 for the null byte + if size + next + 1 > buffer.len() { + // Not enough space remaining in the internal buffer. + return Err(()); + } + // Verify that the input string does not have null bytes already. + if s.bytes().find(|c| *c == 0).is_some() { + return Err(()); + } + + // Copy the input string to the internal buffer, and add null byte. + buffer[next..next + size].copy_from_slice(s.as_bytes()); + buffer[next + size] = 0; + let start = next; + *self.next.borrow_mut() += size + 1; + + let buffer = self.buffer.as_ptr(); + let slice = unsafe { &(*buffer)[start..start + size + 1] }; + let cstr = unsafe { CStr::from_bytes_with_nul_unchecked(slice) }; + Ok(cstr) + } +} + +/// Callback triggered by the NBGL API when a setting switch is toggled. +unsafe fn settings_callback(token: ::core::ffi::c_int, _index: u8, _page: ::core::ffi::c_int) { + let idx = token - FIRST_USER_TOKEN as i32; + if idx < 0 || idx >= SETTINGS_SIZE as i32 { + panic!("Invalid token."); + } + + if let Some(data) = NVM_REF.as_mut() { + let setting_idx: usize = idx as usize; + let mut switch_values: [u8; SETTINGS_SIZE] = data.get_ref().clone(); + switch_values[setting_idx] = !switch_values[setting_idx]; + data.update(&switch_values); + SWITCH_ARRAY[setting_idx].initState = switch_values[setting_idx] as nbgl_state_t; + } +} + +/// Informations fields name to display in the dedicated +/// page of the home screen. +const INFO_FIELDS: [*const c_char; 2] = [ + "Version\0".as_ptr() as *const c_char, + "Developer\0".as_ptr() as *const c_char, +]; + +/// A wrapper around the synchronous NBGL ux_sync_homeAndSettings C API binding. +/// Used to display the home screen of the application, with an optional glyph, +/// information fields, and settings switches. +pub struct NbglHomeAndSettings<'a> { + app_name: *const c_char, + icon: *const nbgl_icon_details_t, + glyph: Option<&'a NbglGlyph<'a>>, + info_contents: [*const c_char; 2], + info_list: nbgl_contentInfoList_t, + settings_contents: nbgl_content_t, + nb_settings: u8, + generic_contents: nbgl_genericContents_t, + c_string_helper: CStringHelper<128>, +} + +impl<'a> NbglHomeAndSettings<'a> { + pub fn new() -> NbglHomeAndSettings<'a> { + NbglHomeAndSettings { + app_name: "Rust App\0".as_ptr() as *const c_char, + icon: core::ptr::null(), + glyph: None, + info_contents: [ + "0.0.0\0".as_ptr() as *const c_char, + "Ledger\0".as_ptr() as *const c_char, + ], + info_list: nbgl_contentInfoList_t { + infoTypes: core::ptr::null(), + infoContents: core::ptr::null(), + nbInfos: 0, + }, + c_string_helper: CStringHelper::<128>::new(), + settings_contents: nbgl_content_t::default(), + generic_contents: nbgl_genericContents_t { + callbackCallNeeded: false, + __bindgen_anon_1: nbgl_genericContents_t__bindgen_ty_1 { + contentsList: core::ptr::null(), + }, + nbContents: 0, + }, + nb_settings: 0, + } + } + + pub fn glyph(self, glyph: &'a NbglGlyph) -> NbglHomeAndSettings<'a> { + NbglHomeAndSettings { + glyph: Some(glyph), + ..self + } + } + + pub fn infos(self, app_name: &str, version: &str, author: &str) -> NbglHomeAndSettings<'a> { + NbglHomeAndSettings { + app_name: self.c_string_helper.to_cstring(app_name).unwrap().as_ptr() as *const c_char, + info_contents: [ + self.c_string_helper.to_cstring(version).unwrap().as_ptr() as *const c_char, + self.c_string_helper.to_cstring(author).unwrap().as_ptr() as *const c_char, + ], + ..self + } + } + + pub fn settings( + self, + nvm_data: &'a mut AtomicStorage<[u8; SETTINGS_SIZE]>, + settings_strings: &[[&str; 2]], + ) -> NbglHomeAndSettings<'a> { + unsafe { + NVM_REF = Some(transmute(nvm_data)); + } + + if settings_strings.len() > SETTINGS_SIZE { + panic!("Too many settings."); + } + + unsafe { + for (i, setting) in settings_strings.iter().enumerate() { + SWITCH_ARRAY[i].text = self + .c_string_helper + .to_cstring(setting[0]) + .unwrap() + .as_ptr() as *const c_char; + SWITCH_ARRAY[i].subText = self + .c_string_helper + .to_cstring(setting[1]) + .unwrap() + .as_ptr() as *const c_char; + SWITCH_ARRAY[i].initState = NVM_REF.as_mut().unwrap().get_ref()[i] as nbgl_state_t; + SWITCH_ARRAY[i].token = (FIRST_USER_TOKEN + i as u32) as u8; + SWITCH_ARRAY[i].tuneId = TuneIndex::TapCasual as u8; + } + } + + NbglHomeAndSettings { + nb_settings: settings_strings.len() as u8, + ..self + } + } + + pub fn show>(&mut self) -> Event + where + Reply: From<>::Error>, + { + unsafe { + self.info_list.infoTypes = INFO_FIELDS.as_ptr() as *const *const c_char; + self.info_list.infoContents = self.info_contents.as_ptr() as *const *const c_char; + self.info_list.nbInfos = 2; + + if NVM_REF.is_some() { + self.settings_contents = nbgl_content_t { + content: nbgl_content_u { + switchesList: nbgl_pageSwitchesList_s { + switches: &SWITCH_ARRAY as *const nbgl_contentSwitch_t, + nbSwitches: self.nb_settings, + }, + }, + contentActionCallback: transmute( + (|token, index, page| settings_callback(token, index, page)) + as fn(::core::ffi::c_int, u8, ::core::ffi::c_int), + ), + type_: SWITCHES_LIST, + }; + + self.generic_contents = nbgl_genericContents_t { + callbackCallNeeded: false, + __bindgen_anon_1: nbgl_genericContents_t__bindgen_ty_1 { + contentsList: &self.settings_contents as *const nbgl_content_t, + }, + nbContents: 1, + }; + } + + loop { + if self.glyph.is_some() { + self.icon = &self.glyph.unwrap().into() as *const nbgl_icon_details_t; + } + match ledger_secure_sdk_sys::ux_sync_homeAndSettings( + self.app_name, + self.icon as *const nbgl_icon_details_t, + core::ptr::null(), + INIT_HOME_PAGE as u8, + &self.generic_contents as *const nbgl_genericContents_t, + &self.info_list as *const nbgl_contentInfoList_t, + core::ptr::null(), + ) { + ledger_secure_sdk_sys::UX_SYNC_RET_APDU_RECEIVED => { + if let Some(comm) = COMM_REF.as_mut() { + if let Some(value) = comm.check_event() { + return value; + } + } + } + _ => { + panic!("Unexpected return value from ux_sync_homeAndSettings"); + } + } + } + } + } +} + +/// A wrapper around the synchronous NBGL ux_sync_review C API binding. +/// Used to display transaction review screens. +/// The maximum number of fields that can be displayed can be overriden by the +/// MAX_FIELD_NUMBER const parameter. +/// The maximum size of the internal buffer used to convert C strings can be overriden by the +/// STRING_BUFFER_SIZE const parameter. +pub struct NbglReview< + 'a, + const MAX_FIELD_NUMBER: usize = 32, + const STRING_BUFFER_SIZE: usize = 1024, +> { + title: &'a str, + subtitle: &'a str, + finish_title: &'a str, + glyph: Option<&'a NbglGlyph<'a>>, + icon: *const nbgl_icon_details_t, + tag_value_array: [nbgl_layoutTagValue_t; MAX_FIELD_NUMBER], + c_string_helper: CStringHelper, +} + +impl<'a, const MAX_FIELD_NUMBER: usize, const STRING_BUFFER_SIZE: usize> + NbglReview<'a, MAX_FIELD_NUMBER, STRING_BUFFER_SIZE> +{ + pub fn new() -> NbglReview<'a, MAX_FIELD_NUMBER, STRING_BUFFER_SIZE> { + NbglReview { + title: "Please review\ntransaction", + subtitle: "To send CRAB", + finish_title: "Sign transaction", + glyph: None, + icon: core::ptr::null(), + tag_value_array: [nbgl_layoutTagValue_t::default(); MAX_FIELD_NUMBER], + c_string_helper: CStringHelper::::new(), + } + } + + pub fn titles( + self, + title: &'a str, + subtitle: &'a str, + finish_title: &'a str, + ) -> NbglReview<'a, MAX_FIELD_NUMBER, STRING_BUFFER_SIZE> { + NbglReview { + title, + subtitle, + finish_title, + ..self + } + } + + pub fn glyph( + self, + glyph: &'a NbglGlyph, + ) -> NbglReview<'a, MAX_FIELD_NUMBER, STRING_BUFFER_SIZE> { + NbglReview { + glyph: Some(glyph), + ..self + } + } + + pub fn show(&mut self, fields: &[Field]) -> bool { + unsafe { + // Check if there are too many fields (more than MAX_FIELD_NUMBER). + if fields.len() > self.tag_value_array.len() { + panic!("Too many fields for this review instance."); + } + + // Flush the internal buffer of the CStringHelper. + self.c_string_helper.flush(); + + // Fill the tag_value_array with the fields converted to nbgl_layoutTagValue_t + // with proper c strings (ending with \0). + for (i, field) in fields.iter().enumerate() { + let name = self.c_string_helper.to_cstring(field.name).unwrap(); + let value = self.c_string_helper.to_cstring(field.value).unwrap(); + self.tag_value_array[i] = nbgl_layoutTagValue_t { + item: name.as_ptr() as *const i8, + value: value.as_ptr() as *const i8, + valueIcon: core::ptr::null() as *const nbgl_icon_details_t, + _bitfield_align_1: [0; 0], + _bitfield_1: __BindgenBitfieldUnit::new([0; 1usize]), + __bindgen_padding_0: [0; 3usize], + } + } + + // Create the tag_value_list with the tag_value_array. + let tag_value_list: nbgl_layoutTagValueList_t = nbgl_layoutTagValueList_t { + pairs: self.tag_value_array.as_ptr() as *const nbgl_layoutTagValue_t, + callback: None, + nbPairs: fields.len() as u8, + startIndex: 0, + nbMaxLinesForValue: 0, + token: 0, + smallCaseForValue: false, + wrapping: false, + }; + + if self.glyph.is_some() { + self.icon = &self.glyph.unwrap().into() as *const nbgl_icon_details_t; + } + + // Show the review on the device. + let sync_ret = ledger_secure_sdk_sys::ux_sync_review( + TYPE_TRANSACTION, + &tag_value_list as *const nbgl_layoutTagValueList_t, + self.icon, + self.c_string_helper + .to_cstring(self.title) + .unwrap() + .as_ptr() as *const c_char, + self.c_string_helper + .to_cstring(self.subtitle) + .unwrap() + .as_ptr() as *const c_char, + self.c_string_helper + .to_cstring(self.finish_title) + .unwrap() + .as_ptr() as *const c_char, + ); + + // Return true if the user approved the transaction, false otherwise. + match sync_ret { + ledger_secure_sdk_sys::UX_SYNC_RET_APPROVED => { + ledger_secure_sdk_sys::ux_sync_reviewStatus(STATUS_TYPE_TRANSACTION_SIGNED); + return true; + } + _ => { + ledger_secure_sdk_sys::ux_sync_reviewStatus(STATUS_TYPE_TRANSACTION_REJECTED); + return false; + } + } + } + } +} + +/// A wrapper around the synchronous NBGL ux_sync_addressReview C API binding. +/// Used to display address confirmation screens. +pub struct NbglAddressReview<'a> { + icon: *const nbgl_icon_details_t, + glyph: Option<&'a NbglGlyph<'a>>, + verify_str: &'a str, +} + +impl<'a> NbglAddressReview<'a> { + pub fn new() -> NbglAddressReview<'a> { + NbglAddressReview { + verify_str: "Verify address", + icon: core::ptr::null(), + glyph: None, + } + } + + pub fn glyph(self, glyph: &'a NbglGlyph) -> NbglAddressReview<'a> { + NbglAddressReview { + glyph: Some(glyph), + ..self + } + } + + pub fn verify_str(self, verify_str: &'a str) -> NbglAddressReview<'a> { + NbglAddressReview { verify_str, ..self } + } + + pub fn show(&mut self, address: &str) -> bool { + unsafe { + // Create CStringHelper instance and convert the address and verify_str into c strings. + let c_string_helper = CStringHelper::<128>::new(); + let c_addr_str = c_string_helper.to_cstring(address).unwrap(); + let c_verif_str = c_string_helper.to_cstring(self.verify_str).unwrap(); + + if self.glyph.is_some() { + self.icon = &self.glyph.unwrap().into() as *const nbgl_icon_details_t; + } + + // Show the address confirmation on the device. + let sync_ret = ux_sync_addressReview( + c_addr_str.as_ptr() as *const c_char, + core::ptr::null(), + self.icon, + c_verif_str.as_ptr() as *const c_char, + core::ptr::null(), + ); + + // Return true if the user approved the address, false otherwise. + match sync_ret { + ledger_secure_sdk_sys::UX_SYNC_RET_APPROVED => { + ledger_secure_sdk_sys::ux_sync_reviewStatus(STATUS_TYPE_ADDRESS_VERIFIED); + return true; + } + ledger_secure_sdk_sys::UX_SYNC_RET_REJECTED => { + ledger_secure_sdk_sys::ux_sync_reviewStatus(STATUS_TYPE_ADDRESS_REJECTED); + return false; + } + _ => { + panic!("Unexpected return value from ux_sync_addressReview"); + } + } + } + } +} + +enum TuneIndex { + Reserved, + Boot, + Charging, + LedgerMoment, + Error, + Neutral, + Lock, + Success, + LookAtMe, + TapCasual, + TapNext, +} + +impl TryFrom for TuneIndex { + type Error = (); + fn try_from(index: u8) -> Result { + Ok(match index { + TUNE_RESERVED => TuneIndex::Reserved, + TUNE_BOOT => TuneIndex::Boot, + TUNE_CHARGING => TuneIndex::Charging, + TUNE_LEDGER_MOMENT => TuneIndex::LedgerMoment, + TUNE_ERROR => TuneIndex::Error, + TUNE_NEUTRAL => TuneIndex::Neutral, + TUNE_LOCK => TuneIndex::Lock, + TUNE_SUCCESS => TuneIndex::Success, + TUNE_LOOK_AT_ME => TuneIndex::LookAtMe, + TUNE_TAP_CASUAL => TuneIndex::TapCasual, + TUNE_TAP_NEXT => TuneIndex::TapNext, + _ => return Err(()), + }) + } +} + +// this is a mock that does nothing yet, but should become a direct translation +// of the C original. This was done to avoid compiling `os_io_seproxyhal.c` which +// includes many other things +#[no_mangle] +extern "C" fn io_seproxyhal_play_tune(tune_index: u8) { + let index = TuneIndex::try_from(tune_index); + if index.is_err() { + return; + } +} + +#[panic_handler] +fn panic(_: &core::panic::PanicInfo) -> ! { + exit_app(1); +} diff --git a/ledger_device_sdk/src/nvm.rs b/ledger_device_sdk/src/nvm.rs index ac55a223..cdde2835 100644 --- a/ledger_device_sdk/src/nvm.rs +++ b/ledger_device_sdk/src/nvm.rs @@ -188,7 +188,7 @@ macro_rules! atomic_storage { atomic_storage!(64); #[cfg(target_os = "nanox")] atomic_storage!(256); -#[cfg(target_os = "nanosplus")] +#[cfg(any(target_os = "nanosplus", target_os = "stax", target_os = "flex"))] atomic_storage!(512); pub enum AtomicStorageElem { diff --git a/ledger_device_sdk/src/seph.rs b/ledger_device_sdk/src/seph.rs index 7a107eae..666776c3 100644 --- a/ledger_device_sdk/src/seph.rs +++ b/ledger_device_sdk/src/seph.rs @@ -18,6 +18,7 @@ pub enum Events { ButtonPush = SEPROXYHAL_TAG_BUTTON_PUSH_EVENT as u8, DisplayProcessed = SEPROXYHAL_TAG_DISPLAY_PROCESSED_EVENT as u8, BleReceive = SEPROXYHAL_TAG_BLE_RECV_EVENT as u8, + ScreenTouch = SEPROXYHAL_TAG_FINGER_EVENT as u8, Unknown = 0xff, } #[repr(u8)] @@ -44,6 +45,7 @@ impl From for Events { SEPROXYHAL_TAG_BUTTON_PUSH_EVENT => Events::ButtonPush, SEPROXYHAL_TAG_DISPLAY_PROCESSED_EVENT => Events::DisplayProcessed, SEPROXYHAL_TAG_BLE_RECV_EVENT => Events::BleReceive, + SEPROXYHAL_TAG_FINGER_EVENT => Events::ScreenTouch, _ => Events::Unknown, } } diff --git a/ledger_device_sdk/stax.json b/ledger_device_sdk/stax.json new file mode 100644 index 00000000..a566b638 --- /dev/null +++ b/ledger_device_sdk/stax.json @@ -0,0 +1,29 @@ +{ + "abi": "eabi", + "arch": "arm", + "c-enum-min-bits": 8, + "data-layout": "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64", + "emit-debug-gdb-scripts": false, + "executables": true, + "frame-pointer": "always", + "linker": "rust-lld", + "linker-flavor": "ld.lld", + "llvm-target": "thumbv8m.main-none-eabi", + "max-atomic-width": 32, + "panic-strategy": "abort", + "pre-link-args": { + "ld.lld": [ + "-Tstax_flex_layout.ld", + "-Tlink.ld" + ], + "ld": [ + "-Tstax_flex_layout.ld", + "-Tlink.ld" + ] + }, + "relocation-model": "ropi-rwpi", + "singlethread": true, + "target-pointer-width": "32", + "os": "stax", + "target-family": [ "bolos" ] +} diff --git a/ledger_device_sdk/stax_flex_layout.ld b/ledger_device_sdk/stax_flex_layout.ld new file mode 100644 index 00000000..9418ef65 --- /dev/null +++ b/ledger_device_sdk/stax_flex_layout.ld @@ -0,0 +1,10 @@ +MEMORY +{ + FLASH (rx) : ORIGIN = 0xc0de0000, LENGTH = 400K + DATA (r) : ORIGIN = 0xc0de0000, LENGTH = 400K + SRAM (rwx) : ORIGIN = 0xda7a0000, LENGTH = 44K +} + +PAGE_SIZE = 512; +STACK_SIZE = 1500; +END_STACK = ORIGIN(SRAM) + LENGTH(SRAM); \ No newline at end of file diff --git a/ledger_secure_sdk_sys/Cargo.toml b/ledger_secure_sdk_sys/Cargo.toml index 00a87e5a..4929973e 100644 --- a/ledger_secure_sdk_sys/Cargo.toml +++ b/ledger_secure_sdk_sys/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "ledger_secure_sdk_sys" -version = "1.2.0" -authors = ["yhql"] +version = "1.3.0" +authors = ["yhql", "agrojean-ledger"] edition = "2021" license.workspace = true repository.workspace = true @@ -10,7 +10,4 @@ description = "Bindings to Ledger C SDK" [build-dependencies] bindgen = "0.65.1" cc = "1.0.73" - -[features] -lib_bagl = [] -ccid = [] +glob = "0.3.1" diff --git a/ledger_secure_sdk_sys/build.rs b/ledger_secure_sdk_sys/build.rs index 9b09f6f1..9133db40 100644 --- a/ledger_secure_sdk_sys/build.rs +++ b/ledger_secure_sdk_sys/build.rs @@ -1,4 +1,5 @@ extern crate cc; +use glob::glob; use std::path::{Path, PathBuf}; use std::process::Command; use std::{env, fs::File, io::BufRead, io::BufReader, io::Read}; @@ -48,6 +49,8 @@ enum Device { NanoS, NanoSPlus, NanoX, + Stax, + Flex, } impl std::fmt::Display for Device { @@ -56,6 +59,8 @@ impl std::fmt::Display for Device { Device::NanoS => write!(f, "nanos"), Device::NanoSPlus => write!(f, "nanos2"), Device::NanoX => write!(f, "nanox"), + Device::Stax => write!(f, "stax"), + Device::Flex => write!(f, "flex"), } } } @@ -217,6 +222,14 @@ fn clone_sdk(device: &Device) -> PathBuf { Path::new("https://github.com/LedgerHQ/ledger-secure-sdk"), "API_LEVEL_5", ), + Device::Stax => ( + Path::new("https://github.com/LedgerHQ/ledger-secure-sdk"), + "API_LEVEL_15", + ), + Device::Flex => ( + Path::new("https://github.com/LedgerHQ/ledger-secure-sdk"), + "API_LEVEL_19", + ), }; let out_dir = env::var("OUT_DIR").unwrap(); @@ -319,6 +332,8 @@ impl SDKBuilder { "nanos" => Device::NanoS, "nanosplus" => Device::NanoSPlus, "nanox" => Device::NanoX, + "stax" => Device::Stax, + "flex" => Device::Flex, target_name => panic!( "invalid target `{target_name}`, expected one of `nanos`, `nanox`, `nanosplus`. Run with `-Z build-std=core --target=./.json`" ), @@ -436,6 +451,8 @@ impl SDKBuilder { Device::NanoS => finalize_nanos_configuration(&mut command, &self.bolos_sdk), Device::NanoX => finalize_nanox_configuration(&mut command, &self.bolos_sdk), Device::NanoSPlus => finalize_nanosplus_configuration(&mut command, &self.bolos_sdk), + Device::Stax => finalize_stax_configuration(&mut command, &self.bolos_sdk), + Device::Flex => finalize_flex_configuration(&mut command, &self.bolos_sdk), }; // Add the defines found in the Makefile.conf.cx to our build command. @@ -485,6 +502,8 @@ impl SDKBuilder { Device::NanoS => ("nanos", "sdk_nanos.h"), Device::NanoX => ("nanox", "sdk_nanox.h"), Device::NanoSPlus => ("nanos2", "sdk_nanosp.h"), + Device::Stax => ("stax", "sdk_stax.h"), + Device::Flex => ("flex", "sdk_flex.h"), }; bindings = bindings.clang_arg(format!("-I{bsdk}/target/{include_path}/include/")); bindings = bindings.header(header); @@ -506,6 +525,38 @@ impl SDKBuilder { .unwrap(), ) } + Device::Stax | Device::Flex => { + if Device::Stax == self.device { + bindings = bindings.clang_args(["-I./src/c/glyphs_stax_15"]); + } else { + bindings = bindings.clang_args(["-I./src/c/glyphs_flex_18"]); + } + + bindings = bindings.clang_args([ + format!("-I{bsdk}/lib_nbgl/include/").as_str(), + format!("-I{bsdk}/lib_ux_sync/include/").as_str(), + format!("-I{bsdk}/lib_ux_nbgl/").as_str(), + ]); + bindings = bindings + .header( + self.bolos_sdk + .join("lib_nbgl/include/nbgl_use_case.h") + .to_str() + .unwrap(), + ) + .header( + self.bolos_sdk + .join("lib_ux_sync/include/ux_sync.h") + .to_str() + .unwrap(), + ) + .header( + self.bolos_sdk + .join("lib_ux_nbgl/ux_nbgl.h") + .to_str() + .unwrap(), + ) + } _ => (), } @@ -627,3 +678,56 @@ fn configure_lib_bagl(command: &mut cc::Build, bolos_sdk: &Path) { .file(bolos_sdk.join("lib_bagl/src/bagl_glyphs.c")); } } + +fn finalize_stax_configuration(command: &mut cc::Build, bolos_sdk: &Path) { + let defines = header2define("sdk_stax.h"); + for (define, value) in defines { + command.define(define.as_str(), value.as_deref()); + } + + command + .target("thumbv8m.main-none-eabi") + .include(bolos_sdk.join("target/stax/include/")) + .flag("-fropi") + .flag("-frwpi") + .include("./src/c/glyphs_stax_15/") + .file("./src/c/glyphs_stax_15/glyphs.c"); + configure_lib_nbgl(command, bolos_sdk); +} + +fn finalize_flex_configuration(command: &mut cc::Build, bolos_sdk: &Path) { + let defines = header2define("sdk_flex.h"); + for (define, value) in defines { + command.define(define.as_str(), value.as_deref()); + } + + command + .target("thumbv8m.main-none-eabi") + .include(bolos_sdk.join("target/flex/include/")) + .flag("-fropi") + .flag("-frwpi") + .include("./src/c/glyphs_flex_18/") + .file("./src/c/glyphs_flex_18/glyphs.c"); + configure_lib_nbgl(command, bolos_sdk); +} + +fn configure_lib_nbgl(command: &mut cc::Build, bolos_sdk: &Path) { + command + .flag("-Wno-microsoft-anon-tag") + .flag("-fms-extensions") + .include(bolos_sdk.join("lib_nbgl/include/")) + .include(bolos_sdk.join("lib_ux_sync/include/")) + .include(bolos_sdk.join("lib_ux_nbgl/")) + .include(bolos_sdk.join("qrcode/include/")) + .include(bolos_sdk.join("lib_bagl/include/")) + .file(bolos_sdk.join("lib_ux_nbgl/ux.c")) + .file(bolos_sdk.join("lib_ux_sync/src/ux_sync.c")) + .file(bolos_sdk.join("lib_bagl/src/bagl_fonts.c")) + .file(bolos_sdk.join("src/os_printf.c")) + .files( + glob(bolos_sdk.join("lib_nbgl/src/*.c").to_str().unwrap()) + .unwrap() + .map(|x| x.unwrap()) + .collect::>(), + ); +} diff --git a/ledger_secure_sdk_sys/sdk_flex.h b/ledger_secure_sdk_sys/sdk_flex.h new file mode 100644 index 00000000..08ca2376 --- /dev/null +++ b/ledger_secure_sdk_sys/sdk_flex.h @@ -0,0 +1,24 @@ +#define ST33K1M5 +#define HAVE_BAGL_FONT_INTER_REGULAR_28PX +#define HAVE_BAGL_FONT_INTER_SEMIBOLD_28PX +#define HAVE_BAGL_FONT_INTER_MEDIUM_36PX +#define HAVE_DISPLAY_FAST_MODE +#define HAVE_SPRINTF +#define HAVE_SE_EINK_DISPLAY +#define SCREEN_SIZE_WALLET +#define HAVE_NBGL +#define NBGL_USE_CASE +#define HAVE_SE_TOUCH +#define HAVE_PIEZO_SOUND +#define NBGL_PAGE +#define HAVE_LOCAL_APDU_BUFFER +#define IO_HID_EP_LENGTH 64 +#define USB_SEGMENT_SIZE 64 +#define OS_IO_SEPROXYHAL +#define HAVE_IO_USB +#define HAVE_L4_USBLIB +#define HAVE_USB_APDU +#define __IO volatile +#define IO_USB_MAX_ENDPOINTS 6 +#define IO_SEPROXYHAL_BUFFER_SIZE_B 128 +#define main _start \ No newline at end of file diff --git a/ledger_secure_sdk_sys/sdk_stax.h b/ledger_secure_sdk_sys/sdk_stax.h new file mode 100644 index 00000000..a7e789e0 --- /dev/null +++ b/ledger_secure_sdk_sys/sdk_stax.h @@ -0,0 +1,23 @@ +#define ST33K1M5 +#define HAVE_BAGL_FONT_INTER_REGULAR_24PX +#define HAVE_BAGL_FONT_INTER_SEMIBOLD_24PX +#define HAVE_BAGL_FONT_INTER_MEDIUM_32PX +#define HAVE_BAGL_FONT_HMALPHAMONO_MEDIUM_32PX +#define HAVE_SPRINTF +#define SCREEN_SIZE_WALLET +#define HAVE_NBGL +#define NBGL_USE_CASE +#define HAVE_SE_TOUCH +#define HAVE_PIEZO_SOUND +#define NBGL_PAGE +#define HAVE_LOCAL_APDU_BUFFER +#define IO_HID_EP_LENGTH 64 +#define USB_SEGMENT_SIZE 64 +#define OS_IO_SEPROXYHAL +#define HAVE_IO_USB +#define HAVE_L4_USBLIB +#define HAVE_USB_APDU +#define __IO volatile +#define IO_USB_MAX_ENDPOINTS 6 +#define IO_SEPROXYHAL_BUFFER_SIZE_B 128 +#define main _start \ No newline at end of file diff --git a/ledger_secure_sdk_sys/src/c/glyphs_flex_18/glyphs.c b/ledger_secure_sdk_sys/src/c/glyphs_flex_18/glyphs.c new file mode 100644 index 00000000..5d3dc6df --- /dev/null +++ b/ledger_secure_sdk_sys/src/c/glyphs_flex_18/glyphs.c @@ -0,0 +1,896 @@ +#include "app_config.h" +#include "glyphs.h" +#ifdef HAVE_NBGL +#include "nbgl_types.h" +#else +#include +#endif + +uint8_t const C_app_boilerplate_16px_bitmap[] = { + 0x10, 0x00, 0x10, 0x00, 0x02, 0x15, 0x00, 0x00, 0xf0, 0x71, 0xf1, 0xf2, 0x42, 0x83, 0x14, 0x87, + 0x78, 0x69, 0x79, 0x98, 0xa7, 0x93, 0x14, 0x82, 0x42, 0x81, 0xf1, 0xf0, 0xa0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_app_boilerplate_16px = { GLYPH_app_boilerplate_16px_WIDTH, GLYPH_app_boilerplate_16px_HEIGHT, NBGL_BPP_1, GLYPH_app_boilerplate_16px_ISFILE, C_app_boilerplate_16px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_app_boilerplate_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x01, 0xb3, 0x00, 0x00, 0xb1, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x75, 0xd1, 0xbb, 0x0d, 0x03, 0x21, 0x0c, 0x06, 0x60, 0x9f, 0x22, 0x85, + 0x92, 0x11, 0x6e, 0x85, 0x6c, 0x70, 0xa3, 0x1d, 0xa3, 0x79, 0x14, 0xa4, 0x14, 0x69, 0x29, 0x29, + 0x2c, 0x1c, 0x83, 0xff, 0x44, 0x04, 0xe5, 0xdc, 0x7c, 0x12, 0x0f, 0x1b, 0x1b, 0xa2, 0xab, 0xb8, + 0xc3, 0xf0, 0x31, 0x2d, 0x32, 0xcc, 0xb0, 0xc0, 0x3a, 0xf9, 0x30, 0x85, 0x68, 0xb3, 0xbd, 0xd0, + 0x88, 0xa2, 0x9d, 0x0d, 0x4a, 0x74, 0xf2, 0xf0, 0xa6, 0xc3, 0xb4, 0x6b, 0xea, 0xb2, 0x6a, 0xbf, + 0xa7, 0x2f, 0x6d, 0x43, 0xfd, 0x2a, 0xb0, 0xc2, 0x32, 0xb9, 0x9b, 0xfd, 0x09, 0x86, 0xa7, 0xb3, + 0xb0, 0x74, 0x47, 0xd7, 0x2a, 0xab, 0x1b, 0xd5, 0xd3, 0x8d, 0x65, 0x81, 0x15, 0xeb, 0x82, 0x73, + 0xbd, 0xdc, 0x01, 0xa3, 0xdf, 0xf3, 0x8d, 0x84, 0x0d, 0x46, 0xdd, 0xbc, 0x58, 0x96, 0xf7, 0xc9, + 0x8f, 0x4f, 0xf4, 0x91, 0x4f, 0xef, 0x8f, 0xa3, 0xf7, 0x9b, 0x36, 0x7f, 0xb0, 0xe5, 0xe6, 0x69, + 0x3e, 0x0d, 0xf3, 0x12, 0xcc, 0xaf, 0x2e, 0xf3, 0x2d, 0xcb, 0xdc, 0xf9, 0xe2, 0x7f, 0x96, 0x7f, + 0xfc, 0x1f, 0x6f, 0xe5, 0xd1, 0xa9, 0x21, 0x00, 0x02, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_app_boilerplate_64px = { GLYPH_app_boilerplate_64px_WIDTH, GLYPH_app_boilerplate_64px_HEIGHT, NBGL_BPP_1, GLYPH_app_boilerplate_64px_ISFILE, C_app_boilerplate_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_pin_24_bitmap[] = { + 0x18, 0x00, 0x18, 0x00, 0x02, 0x29, 0x00, 0x00, 0x96, 0xfc, 0xbe, 0x9f, 0x01, 0x7f, 0x03, 0x5f, + 0x05, 0x3f, 0x07, 0x2f, 0x07, 0x2f, 0x07, 0x1f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, + 0x09, 0x1f, 0x07, 0x2f, 0x07, 0x2f, 0x07, 0x3f, 0x05, 0x5f, 0x03, 0x7f, 0x01, 0x9e, 0xbc, 0xf6, + 0x90, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_pin_24 = { GLYPH_pin_24_WIDTH, GLYPH_pin_24_HEIGHT, NBGL_BPP_1, GLYPH_pin_24_ISFILE, C_pin_24_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_bottom_left_32px_1bpp_bitmap[] = { + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x01, 0x80, + 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x0f, 0x00, 0x00, + 0x00, 0x3e, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_bottom_left_32px_1bpp = { GLYPH_quarter_circle_bottom_left_32px_1bpp_WIDTH, GLYPH_quarter_circle_bottom_left_32px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_bottom_left_32px_1bpp_ISFILE, C_quarter_circle_bottom_left_32px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_bottom_left_40px_1bpp_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, + 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x00, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_bottom_left_40px_1bpp = { GLYPH_quarter_circle_bottom_left_40px_1bpp_WIDTH, GLYPH_quarter_circle_bottom_left_40px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_bottom_left_40px_1bpp_ISFILE, C_quarter_circle_bottom_left_40px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_bottom_left_44px_1bpp_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, + 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, + 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_bottom_left_44px_1bpp = { GLYPH_quarter_circle_bottom_left_44px_1bpp_WIDTH, GLYPH_quarter_circle_bottom_left_44px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_bottom_left_44px_1bpp_ISFILE, C_quarter_circle_bottom_left_44px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_top_left_32px_1bpp_bitmap[] = { + 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0xf0, 0x00, + 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x3f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_top_left_32px_1bpp = { GLYPH_quarter_circle_top_left_32px_1bpp_WIDTH, GLYPH_quarter_circle_top_left_32px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_top_left_32px_1bpp_ISFILE, C_quarter_circle_top_left_32px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_top_left_40px_1bpp_bitmap[] = { + 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_top_left_40px_1bpp = { GLYPH_quarter_circle_top_left_40px_1bpp_WIDTH, GLYPH_quarter_circle_top_left_40px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_top_left_40px_1bpp_ISFILE, C_quarter_circle_top_left_40px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_top_left_44px_1bpp_bitmap[] = { + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x3f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_top_left_44px_1bpp = { GLYPH_quarter_circle_top_left_44px_1bpp_WIDTH, GLYPH_quarter_circle_top_left_44px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_top_left_44px_1bpp_ISFILE, C_quarter_circle_top_left_44px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_disc_bottom_left_32px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0x80, + 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_disc_bottom_left_32px_1bpp = { GLYPH_quarter_disc_bottom_left_32px_1bpp_WIDTH, GLYPH_quarter_disc_bottom_left_32px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_disc_bottom_left_32px_1bpp_ISFILE, C_quarter_disc_bottom_left_32px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_disc_bottom_left_40px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, + 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, + 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0xfe, 0x00, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xf0, + 0x00, 0xff, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xff, 0x80, 0x00, + 0xff, 0xff, 0xfe, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0xff, + 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xff, 0xe0, + 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_disc_bottom_left_40px_1bpp = { GLYPH_quarter_disc_bottom_left_40px_1bpp_WIDTH, GLYPH_quarter_disc_bottom_left_40px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_disc_bottom_left_40px_1bpp_ISFILE, C_quarter_disc_bottom_left_40px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_disc_bottom_left_44px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0f, 0xff, + 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0f, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe0, 0x00, + 0x0f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, + 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, + 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_disc_bottom_left_44px_1bpp = { GLYPH_quarter_disc_bottom_left_44px_1bpp_WIDTH, GLYPH_quarter_disc_bottom_left_44px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_disc_bottom_left_44px_1bpp_ISFILE, C_quarter_disc_bottom_left_44px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_disc_top_left_32px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, + 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, + 0x1f, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, + 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, + 0x00, 0x1f, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x3f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_disc_top_left_32px_1bpp = { GLYPH_quarter_disc_top_left_32px_1bpp_WIDTH, GLYPH_quarter_disc_top_left_32px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_disc_top_left_32px_1bpp_ISFILE, C_quarter_disc_top_left_32px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_disc_top_left_40px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0x07, + 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7f, 0xff, + 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, + 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, + 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_disc_top_left_40px_1bpp = { GLYPH_quarter_disc_top_left_40px_1bpp_WIDTH, GLYPH_quarter_disc_top_left_40px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_disc_top_left_40px_1bpp_ISFILE, C_quarter_disc_top_left_40px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_disc_top_left_44px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1f, + 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x7f, 0xff, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf0, + 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, + 0x00, 0x01, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xff, + 0xf0, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x7f, 0xff, + 0xff, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1f, + 0xff, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x3f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_disc_top_left_44px_1bpp = { GLYPH_quarter_disc_top_left_44px_1bpp_WIDTH, GLYPH_quarter_disc_top_left_44px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_disc_top_left_44px_1bpp_ISFILE, C_quarter_disc_top_left_44px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_radio_active_32px_bitmap[] = { + 0x20, 0x00, 0x20, 0x00, 0x02, 0x4a, 0x00, 0x00, 0xc8, 0xf0, 0x6e, 0xf0, 0x2f, 0x01, 0xef, 0x05, + 0xbf, 0x07, 0x99, 0x69, 0x77, 0xc7, 0x66, 0xe6, 0x56, 0xf0, 0x16, 0x36, 0xf0, 0x36, 0x25, 0x84, + 0x85, 0x25, 0x68, 0x65, 0x16, 0x5a, 0x5b, 0x6a, 0x6a, 0x5c, 0x5a, 0x5c, 0x5a, 0x5c, 0x5a, 0x5c, + 0x5a, 0x6a, 0x6b, 0x5a, 0x56, 0x15, 0x68, 0x65, 0x25, 0x84, 0x85, 0x26, 0xf0, 0x36, 0x36, 0xf0, + 0x16, 0x56, 0xe6, 0x67, 0xc7, 0x79, 0x69, 0x9f, 0x07, 0xbf, 0x05, 0xef, 0x01, 0xf0, 0x2e, 0xf0, + 0x68, 0xc0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_radio_active_32px = { GLYPH_radio_active_32px_WIDTH, GLYPH_radio_active_32px_HEIGHT, NBGL_BPP_1, GLYPH_radio_active_32px_ISFILE, C_radio_active_32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_radio_active_40_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x02, 0x6d, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xfa, 0xf0, 0xde, 0xf0, 0x9f, 0x03, 0xf0, 0x6f, + 0x05, 0xf0, 0x4a, 0x2a, 0xf0, 0x27, 0x98, 0xf0, 0x16, 0xc6, 0xf6, 0xe6, 0xe5, 0x56, 0x55, 0xd6, + 0x3a, 0x45, 0xc5, 0x4a, 0x45, 0xc5, 0x3c, 0x35, 0xc5, 0x3c, 0x35, 0xc4, 0x4c, 0x44, 0xc4, 0x4c, + 0x44, 0xc5, 0x3c, 0x35, 0xc5, 0x3c, 0x35, 0xc5, 0x4a, 0x45, 0xc5, 0x4a, 0x36, 0xd5, 0x56, 0x55, + 0xe6, 0xe6, 0xf6, 0xc6, 0xf0, 0x18, 0x97, 0xf0, 0x2a, 0x2a, 0xf0, 0x4f, 0x05, 0xf0, 0x6f, 0x03, + 0xf0, 0x9e, 0xf0, 0xda, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_radio_active_40 = { GLYPH_radio_active_40_WIDTH, GLYPH_radio_active_40_HEIGHT, NBGL_BPP_1, GLYPH_radio_active_40_ISFILE, C_radio_active_40_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_radio_inactive_32px_bitmap[] = { + 0x20, 0x00, 0x20, 0x00, 0x02, 0x4a, 0x00, 0x00, 0xc8, 0xf0, 0x6e, 0xf0, 0x2f, 0x01, 0xef, 0x05, + 0xbf, 0x07, 0x99, 0x69, 0x77, 0xc7, 0x66, 0xe6, 0x56, 0xf0, 0x16, 0x36, 0xf0, 0x36, 0x25, 0xf0, + 0x55, 0x25, 0xf0, 0x55, 0x16, 0xf0, 0x5b, 0xf0, 0x7a, 0xf0, 0x7a, 0xf0, 0x7a, 0xf0, 0x7a, 0xf0, + 0x7a, 0xf0, 0x7b, 0xf0, 0x56, 0x15, 0xf0, 0x55, 0x25, 0xf0, 0x55, 0x26, 0xf0, 0x36, 0x36, 0xf0, + 0x16, 0x56, 0xe6, 0x67, 0xc7, 0x79, 0x69, 0x9f, 0x07, 0xbf, 0x05, 0xef, 0x01, 0xf0, 0x2e, 0xf0, + 0x68, 0xc0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_radio_inactive_32px = { GLYPH_radio_inactive_32px_WIDTH, GLYPH_radio_inactive_32px_HEIGHT, NBGL_BPP_1, GLYPH_radio_inactive_32px_ISFILE, C_radio_inactive_32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_radio_inactive_40_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x01, 0x68, 0x00, 0x00, 0x66, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x7d, 0x8e, 0x21, 0x0e, 0xc0, 0x20, 0x10, 0x04, 0x87, 0x20, 0x90, 0x3c, + 0x81, 0xa7, 0xf4, 0x69, 0xf0, 0x34, 0x9e, 0x82, 0xab, 0x45, 0x22, 0x08, 0xd7, 0x66, 0x83, 0x69, + 0x05, 0x2b, 0xd6, 0x5c, 0x76, 0xe6, 0xe0, 0x18, 0x67, 0x05, 0x82, 0x35, 0x48, 0x36, 0xe0, 0xb2, + 0x09, 0xf9, 0x5e, 0xb0, 0x30, 0x98, 0x5c, 0xb8, 0x41, 0x2a, 0xae, 0x13, 0x8b, 0xef, 0x84, 0xea, + 0xdb, 0xb7, 0x2a, 0x7e, 0x57, 0xfb, 0x5f, 0x63, 0xd5, 0x4c, 0x00, 0xa1, 0x5e, 0x64, 0xde, 0x78, + 0x89, 0xa4, 0x94, 0x5c, 0x6f, 0x1c, 0xf3, 0x00, 0x0c, 0x73, 0x10, 0x5a, 0xc8, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_radio_inactive_40 = { GLYPH_radio_inactive_40_WIDTH, GLYPH_radio_inactive_40_HEIGHT, NBGL_BPP_1, GLYPH_radio_inactive_40_ISFILE, C_radio_inactive_40_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_round_24px_bitmap[] = { + 0x18, 0x00, 0x18, 0x00, 0x02, 0x27, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x74, 0xf0, 0x38, + 0xec, 0xbe, 0xae, 0x9f, 0x01, 0x8f, 0x01, 0x7f, 0x03, 0x6f, 0x03, 0x6f, 0x03, 0x6f, 0x03, 0x7f, + 0x01, 0x8f, 0x01, 0x9e, 0xae, 0xbc, 0xe8, 0xf0, 0x34, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x70, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_round_24px = { GLYPH_round_24px_WIDTH, GLYPH_round_24px_HEIGHT, NBGL_BPP_1, GLYPH_round_24px_ISFILE, C_round_24px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_switch_60_40_bitmap[] = { + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, + 0x3f, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, + 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, + 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, + 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, + 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, + 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, + 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, + 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0x00, 0xff, 0xfc, 0x3f, 0xf8, 0x00, 0x1f, + 0xfc, 0x3f, 0xf0, 0x00, 0x0f, 0xfc, 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x3f, 0x80, 0x00, 0x01, 0xfc, + 0x3f, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x7c, 0x3c, + 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x3c, 0x38, 0x00, + 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, + 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, + 0x1c, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, 0x00, 0x38, + 0x1c, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x70, 0x0f, 0x00, 0x00, 0x00, 0xf0, 0x07, + 0x00, 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x01, 0xc0, 0x03, 0xc0, 0x00, 0x03, 0xc0, 0x01, 0xf0, + 0x00, 0x0f, 0x80, 0x00, 0xf8, 0x00, 0x1f, 0x00, 0x00, 0x3f, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0xff, + 0xf8, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_switch_60_40 = { GLYPH_switch_60_40_WIDTH, GLYPH_switch_60_40_HEIGHT, NBGL_BPP_1, GLYPH_switch_60_40_ISFILE, C_switch_60_40_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Check_Circle_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x21, 0x33, 0x02, 0x00, 0x31, 0x02, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xad, 0x55, 0x39, 0x4e, 0x03, 0x31, 0x14, 0xfd, 0x24, 0x61, 0x5f, 0x4b, + 0x28, 0x80, 0x91, 0xa0, 0x01, 0x24, 0x88, 0xb8, 0x40, 0x46, 0x54, 0x20, 0x21, 0x41, 0x49, 0x39, + 0x2d, 0x15, 0xdc, 0x00, 0x90, 0xa0, 0x66, 0x11, 0xa2, 0x05, 0x71, 0x01, 0x10, 0x17, 0x48, 0x0a, + 0x6a, 0x02, 0x17, 0x60, 0xab, 0x41, 0x61, 0x89, 0x04, 0x24, 0x21, 0x9f, 0xef, 0x65, 0x66, 0xbe, + 0x3d, 0x0e, 0x8b, 0xc4, 0x14, 0x99, 0xb1, 0x9f, 0xfd, 0xfc, 0xfc, 0xfc, 0xf3, 0x8c, 0xf8, 0x7f, + 0x4f, 0xf5, 0x60, 0x1a, 0x60, 0x74, 0xa9, 0xd8, 0x00, 0xde, 0x04, 0xfd, 0xcc, 0x95, 0x1c, 0x68, + 0xcd, 0x87, 0xe8, 0xc9, 0x14, 0xbf, 0x85, 0x01, 0x52, 0x79, 0x0b, 0xae, 0x1b, 0x30, 0x40, 0x8b, + 0xb5, 0xc4, 0xae, 0x9c, 0xb5, 0x7c, 0x8d, 0xf8, 0x70, 0xe0, 0x89, 0xef, 0x71, 0x03, 0x7e, 0x13, + 0x5d, 0xfd, 0x7a, 0x4e, 0x7d, 0x4f, 0xb4, 0xd6, 0x38, 0x9e, 0xa5, 0x8e, 0xf9, 0xb8, 0x79, 0x4c, + 0xcd, 0x34, 0x5b, 0xe1, 0x9e, 0xda, 0x13, 0x7c, 0xbc, 0x18, 0x30, 0x19, 0x8b, 0xa3, 0x15, 0x5b, + 0x4d, 0xb9, 0x01, 0xa9, 0x89, 0x5a, 0xaf, 0x34, 0xfa, 0xd0, 0xd4, 0xfb, 0x41, 0x5d, 0xb9, 0xb0, + 0xb1, 0x0a, 0x30, 0x68, 0xfb, 0x71, 0x15, 0x53, 0x56, 0x00, 0x9a, 0x6e, 0x6c, 0xfc, 0xb3, 0x2f, + 0xe2, 0x24, 0x75, 0xdd, 0x49, 0xbf, 0x2f, 0x01, 0x86, 0xd4, 0x57, 0x10, 0x8e, 0xac, 0x5a, 0x0a, + 0x32, 0xaa, 0x97, 0xdc, 0x54, 0x5d, 0x47, 0x39, 0x3e, 0x80, 0x54, 0xc9, 0x63, 0x7a, 0x09, 0xb7, + 0x5a, 0x81, 0x34, 0xc7, 0xa9, 0x7f, 0x41, 0xbc, 0x0b, 0x00, 0x27, 0x6a, 0x3a, 0xdb, 0x92, 0xe2, + 0xed, 0x12, 0x6f, 0x3f, 0x74, 0x82, 0xb6, 0x64, 0x10, 0xf8, 0x52, 0x40, 0x1d, 0xa0, 0x23, 0xde, + 0x12, 0x27, 0x20, 0x62, 0xa5, 0x73, 0x0a, 0x9d, 0x04, 0xcf, 0x00, 0xdb, 0x88, 0xe5, 0xd8, 0x5b, + 0x8b, 0xe0, 0x5d, 0x0a, 0x7c, 0x02, 0x28, 0xa1, 0x93, 0x80, 0x56, 0xee, 0x15, 0xab, 0xa4, 0x0c, + 0x53, 0x19, 0x81, 0x07, 0x9d, 0x88, 0xeb, 0xa1, 0x3b, 0x49, 0x82, 0x00, 0xda, 0x11, 0x17, 0xc5, + 0x8f, 0x9b, 0x60, 0x47, 0x4c, 0xf5, 0x95, 0x0b, 0x2e, 0x82, 0x4b, 0xf1, 0xed, 0x41, 0x0f, 0x36, + 0x20, 0xb8, 0x15, 0xd2, 0xa4, 0x48, 0x37, 0xc1, 0x93, 0x30, 0xc8, 0xc2, 0x39, 0x81, 0x0b, 0xe7, + 0x04, 0x4e, 0x5c, 0x10, 0xac, 0x30, 0xdc, 0xd4, 0xa7, 0x08, 0x56, 0x98, 0xbe, 0xac, 0x5d, 0x7c, + 0x31, 0x5e, 0x10, 0x07, 0x1c, 0x70, 0x7f, 0x34, 0xff, 0x5a, 0xe8, 0x4f, 0xb3, 0x36, 0xc9, 0xad, + 0x2f, 0x80, 0x36, 0xc4, 0x53, 0x76, 0x3e, 0xd6, 0xfe, 0x3c, 0x61, 0x2d, 0x3f, 0x5f, 0x73, 0xba, + 0x3a, 0xdf, 0xb2, 0xac, 0x12, 0xd7, 0xf4, 0x0f, 0x59, 0x1f, 0x54, 0x25, 0xc3, 0x6e, 0x7b, 0x5f, + 0x54, 0x65, 0x01, 0x3b, 0x40, 0xe3, 0x78, 0x8e, 0xd4, 0xca, 0xbe, 0xfe, 0x1f, 0xe9, 0x92, 0x4c, + 0xb3, 0xf2, 0xc9, 0xe8, 0x32, 0xce, 0xb3, 0x92, 0x8c, 0xa6, 0x57, 0x34, 0x71, 0x39, 0x2e, 0x70, + 0xaa, 0xb6, 0x34, 0x0f, 0x1d, 0xd9, 0x5f, 0xe3, 0xe1, 0xf2, 0x9e, 0x63, 0xd5, 0xa7, 0x79, 0xfd, + 0x44, 0xba, 0xe8, 0xdd, 0x69, 0x63, 0xef, 0x1a, 0xe5, 0xc3, 0x64, 0x34, 0xd2, 0x9d, 0x2f, 0x27, + 0xbf, 0xcb, 0xa7, 0x1f, 0xf3, 0x8d, 0x9c, 0xb0, 0x03, 0x9b, 0x28, 0x53, 0x25, 0x23, 0x5f, 0x8d, + 0xc0, 0x3e, 0x33, 0xf2, 0x15, 0xeb, 0x59, 0x73, 0xc0, 0x39, 0x58, 0x51, 0x22, 0xf3, 0x7d, 0x2c, + 0xcc, 0xf7, 0x8d, 0x44, 0xbe, 0xcb, 0xc0, 0xa6, 0xfb, 0xe1, 0x02, 0xf1, 0x51, 0xdd, 0x0f, 0x03, + 0x98, 0x08, 0x6c, 0xfe, 0x64, 0xec, 0x2b, 0xac, 0xea, 0x19, 0x70, 0xf1, 0xaf, 0xf7, 0x1b, 0x2d, + 0xb1, 0x1f, 0xc2, 0xb3, 0x0d, 0x2e, 0xd0, 0xda, 0xd6, 0x0c, 0xc0, 0xc8, 0x72, 0xfe, 0x1f, 0xaf, + 0x6c, 0xfc, 0x02, 0x24, 0x14, 0x5a, 0xc5, 0x00, 0x08, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Check_Circle_64px = { GLYPH_Check_Circle_64px_WIDTH, GLYPH_Check_Circle_64px_HEIGHT, NBGL_BPP_4, GLYPH_Check_Circle_64px_ISFILE, C_Check_Circle_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Denied_Circle_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x21, 0x30, 0x02, 0x00, 0x2e, 0x02, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xad, 0x55, 0x4b, 0x2f, 0x04, 0x41, 0x10, 0x2e, 0x6b, 0xbd, 0x9f, 0x47, + 0x0e, 0xd8, 0x84, 0x48, 0x90, 0xac, 0x8d, 0x3f, 0x60, 0xe2, 0x44, 0x22, 0xe1, 0xe8, 0xb8, 0x71, + 0x73, 0xe2, 0x1f, 0x20, 0xe1, 0xec, 0x11, 0x71, 0x25, 0xfe, 0x00, 0xf1, 0x07, 0xd6, 0xc1, 0xd9, + 0xf2, 0x07, 0x3c, 0xe6, 0x4c, 0xd6, 0x63, 0xe3, 0xb9, 0xa6, 0x54, 0xf5, 0x63, 0xa6, 0xa7, 0x67, + 0x66, 0x97, 0x44, 0x1f, 0x76, 0xb6, 0xbb, 0xba, 0xaa, 0xbe, 0xfe, 0xea, 0xeb, 0x6a, 0xc4, 0xff, + 0x1b, 0x5f, 0xfb, 0x13, 0x00, 0x43, 0x0b, 0xc5, 0x04, 0xf3, 0x06, 0xa8, 0x31, 0x53, 0x8a, 0xb1, + 0x56, 0x1c, 0xf0, 0x47, 0xba, 0x58, 0xd5, 0x0c, 0x90, 0x2a, 0x58, 0x66, 0x2f, 0x64, 0x06, 0x68, + 0xb4, 0x52, 0xec, 0x08, 0xaf, 0xa5, 0x6b, 0xc4, 0xfb, 0xfd, 0x0c, 0xff, 0x1f, 0x0d, 0x99, 0xdf, + 0x78, 0xa9, 0x47, 0xf9, 0x78, 0xbb, 0x3c, 0x5b, 0x35, 0xed, 0x39, 0x5a, 0x98, 0x0d, 0xa6, 0x47, + 0x34, 0xad, 0x37, 0x32, 0xb8, 0x34, 0x1f, 0x33, 0xf7, 0xf3, 0x86, 0x6c, 0x00, 0x8e, 0x32, 0x36, + 0x85, 0xe1, 0xe6, 0x09, 0x8d, 0x3f, 0x7b, 0xa1, 0xdd, 0x07, 0x61, 0xbc, 0x1f, 0xb4, 0x34, 0xa9, + 0x27, 0x2b, 0x00, 0x7d, 0x36, 0x1f, 0x57, 0x41, 0xc8, 0x4f, 0x80, 0xba, 0x1b, 0xdb, 0xfe, 0xdd, + 0xed, 0xc7, 0x24, 0x74, 0x1d, 0x51, 0xbe, 0x2f, 0x01, 0xfa, 0xe5, 0xbf, 0x7c, 0x24, 0xbb, 0x42, + 0x90, 0x96, 0x55, 0x25, 0x36, 0xe3, 0xca, 0x49, 0xa8, 0x44, 0x99, 0x9e, 0xcd, 0xa3, 0x1a, 0x83, + 0xd6, 0xe7, 0xf8, 0x7b, 0x06, 0x70, 0x2c, 0x0f, 0x6d, 0xa9, 0x05, 0xa0, 0x9d, 0xbf, 0x8e, 0x66, + 0x62, 0x51, 0xf3, 0x3f, 0x2c, 0xbf, 0x8e, 0x00, 0xe0, 0x01, 0xb4, 0x8a, 0xe9, 0xab, 0x4e, 0xe3, + 0xc2, 0x32, 0xaa, 0xc0, 0x12, 0xe7, 0xb8, 0x3a, 0x46, 0xaa, 0xa4, 0xd8, 0x96, 0x78, 0x9f, 0x00, + 0xb6, 0x10, 0xcb, 0xfa, 0x74, 0x19, 0x85, 0x93, 0xe8, 0x90, 0x1b, 0xdf, 0x05, 0xc0, 0x47, 0x80, + 0x12, 0x1a, 0xeb, 0x9e, 0xde, 0xc7, 0x99, 0xbb, 0x38, 0x4b, 0x2a, 0xa8, 0x62, 0xd6, 0x70, 0xe7, + 0x88, 0x6d, 0x88, 0x6b, 0x3e, 0x3b, 0xc2, 0x12, 0xb8, 0x33, 0xa2, 0x16, 0xc4, 0x79, 0xfe, 0x09, + 0x02, 0x18, 0xee, 0xb8, 0xcd, 0xae, 0x8e, 0x64, 0x41, 0x07, 0x30, 0xdc, 0xa9, 0x44, 0xf5, 0x9c, + 0xa4, 0xd3, 0xd4, 0x91, 0xe1, 0x8e, 0xb7, 0x0c, 0x4d, 0x80, 0x34, 0x74, 0x68, 0x14, 0xe3, 0x91, + 0x09, 0x32, 0xed, 0x1c, 0x20, 0x70, 0xff, 0xbb, 0x3d, 0x2e, 0x7e, 0x2d, 0x7c, 0xb9, 0x40, 0x7c, + 0xf6, 0xf9, 0xce, 0xb8, 0xc0, 0xf9, 0x6a, 0xfc, 0x34, 0x28, 0x92, 0x92, 0xf8, 0x6d, 0x46, 0x3c, + 0xa9, 0x56, 0x9f, 0xf6, 0xda, 0xf5, 0x2d, 0x0b, 0x95, 0x18, 0xeb, 0xae, 0xbe, 0x9a, 0x1f, 0x42, + 0x1f, 0xa4, 0x92, 0x81, 0x78, 0x7d, 0x3d, 0x4b, 0x65, 0x29, 0x19, 0x47, 0xf5, 0x79, 0x28, 0x33, + 0x3b, 0xea, 0x1e, 0x45, 0xf4, 0x9d, 0x91, 0x06, 0x92, 0xb1, 0xd5, 0xcd, 0x4a, 0xfa, 0x5a, 0x8b, + 0xc0, 0x65, 0x2d, 0x70, 0x6b, 0xb8, 0x6a, 0xbd, 0x62, 0x37, 0x17, 0x9f, 0x1d, 0x15, 0xd7, 0x49, + 0xba, 0xdf, 0x8a, 0xd8, 0xbb, 0xa4, 0xfe, 0x90, 0xf5, 0x77, 0xc6, 0xf7, 0x97, 0xe3, 0xdf, 0xf5, + 0xa7, 0x9a, 0xfd, 0x8d, 0xaf, 0xa6, 0xd5, 0xb0, 0x57, 0x42, 0x42, 0x74, 0xed, 0x86, 0x7d, 0x1a, + 0xd2, 0x21, 0x7a, 0xb9, 0xf0, 0x86, 0x73, 0xee, 0xcf, 0x91, 0xfe, 0x3e, 0xa2, 0xf9, 0x5f, 0x8f, + 0xf4, 0x77, 0xd1, 0xb0, 0xe9, 0x7d, 0xb8, 0x40, 0x7c, 0x90, 0xef, 0x43, 0x2f, 0x46, 0x1a, 0xb6, + 0x39, 0xd2, 0xf6, 0x13, 0xf6, 0x95, 0x09, 0x99, 0x8b, 0x7f, 0x7d, 0xdf, 0x28, 0xc5, 0x9e, 0x36, + 0x4f, 0x27, 0x3c, 0xa0, 0x95, 0xcd, 0x29, 0x80, 0xc1, 0xa5, 0xc2, 0x3f, 0x3e, 0xd9, 0xf8, 0x03, + 0x70, 0xa7, 0x85, 0x84, 0x00, 0x08, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Denied_Circle_64px = { GLYPH_Denied_Circle_64px_WIDTH, GLYPH_Denied_Circle_64px_HEIGHT, NBGL_BPP_4, GLYPH_Denied_Circle_64px_ISFILE, C_Denied_Circle_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Important_Circle_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x21, 0xfa, 0x01, 0x00, 0xf8, 0x01, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xb5, 0x55, 0xcd, 0x4e, 0xc2, 0x40, 0x10, 0x1e, 0xa1, 0xfe, 0xe3, 0xcf, + 0x51, 0x0f, 0x2a, 0x89, 0x5e, 0xd4, 0x04, 0x89, 0x2f, 0x60, 0xe3, 0x49, 0x13, 0x13, 0x3c, 0x7a, + 0xe4, 0xca, 0xcd, 0x37, 0x50, 0x13, 0x3d, 0xa3, 0xc6, 0x70, 0xd5, 0xf8, 0x02, 0x18, 0x5f, 0x00, + 0x0f, 0x9e, 0x05, 0x5f, 0xc0, 0x1f, 0xce, 0x1a, 0x10, 0x49, 0x54, 0xc0, 0x8e, 0xb3, 0xed, 0xb6, + 0x74, 0xdb, 0x59, 0xd0, 0x04, 0xe7, 0xd0, 0x76, 0xf6, 0xdb, 0xee, 0x7c, 0xfd, 0x76, 0xfa, 0x2d, + 0x62, 0xef, 0xa2, 0x99, 0x5b, 0x05, 0x58, 0xd8, 0x29, 0x6a, 0xe0, 0x43, 0x90, 0xb1, 0x59, 0x61, + 0xd0, 0x96, 0x09, 0x5e, 0x18, 0xc5, 0x8e, 0x30, 0x40, 0xa4, 0x10, 0x80, 0x2d, 0x05, 0x06, 0x18, + 0x08, 0x94, 0x38, 0xb1, 0xdf, 0xca, 0x3c, 0x20, 0xbe, 0xe4, 0xe2, 0xe2, 0x79, 0x49, 0x81, 0x3f, + 0xc4, 0xd0, 0x94, 0x7c, 0xc7, 0x3a, 0x15, 0xd9, 0x9e, 0x1f, 0x4f, 0xd2, 0xc0, 0x56, 0x3b, 0xbd, + 0xa4, 0x34, 0xea, 0xab, 0x50, 0xa6, 0x7c, 0xd9, 0x3f, 0x5f, 0x4c, 0x48, 0xb4, 0xc9, 0x51, 0xc5, + 0x41, 0x95, 0x6e, 0x9a, 0xd8, 0x78, 0xd9, 0x3b, 0xcd, 0x3e, 0x57, 0xf9, 0x7e, 0xd1, 0xd0, 0x9a, + 0x9b, 0xec, 0x02, 0xcc, 0x04, 0xf5, 0xb8, 0x6f, 0x2f, 0xd9, 0x00, 0xe8, 0x7b, 0x0c, 0xe2, 0xdf, + 0x93, 0xde, 0x9a, 0xc4, 0x6e, 0x2c, 0xac, 0x77, 0x09, 0x60, 0xd6, 0x79, 0x4a, 0x87, 0xaa, 0x4b, + 0x06, 0x86, 0xb3, 0xab, 0xa4, 0x26, 0xb7, 0x9d, 0xc4, 0xca, 0xde, 0xa6, 0x9a, 0xff, 0x53, 0x7d, + 0x41, 0xe3, 0x29, 0x71, 0xbf, 0x01, 0xc8, 0xb3, 0xdd, 0x02, 0x10, 0x13, 0x77, 0xd3, 0xa7, 0x84, + 0x12, 0xa6, 0x4d, 0xc0, 0x02, 0x18, 0xe1, 0x71, 0x5a, 0xd8, 0xe1, 0xb9, 0xc2, 0xe3, 0x6f, 0x00, + 0x59, 0xc4, 0x3a, 0xfb, 0x75, 0x22, 0x3e, 0x6d, 0x82, 0x55, 0x80, 0x0a, 0x8f, 0x53, 0xe5, 0x09, + 0x51, 0x25, 0xa2, 0xeb, 0xf7, 0x38, 0x8c, 0x22, 0xee, 0xf3, 0xea, 0x38, 0xc2, 0x0e, 0x23, 0x6e, + 0x8b, 0x0b, 0x1f, 0xc7, 0xe2, 0x55, 0xd3, 0x51, 0x81, 0x8b, 0x12, 0x44, 0x45, 0x91, 0x71, 0x3b, + 0x69, 0xf7, 0xb6, 0x20, 0x9e, 0x15, 0x43, 0x4f, 0x82, 0x9a, 0x4d, 0x92, 0xc7, 0xab, 0x42, 0xa0, + 0xff, 0xc6, 0xbb, 0xf1, 0x4b, 0x72, 0xcd, 0xe7, 0x6e, 0xa0, 0x21, 0x45, 0xd2, 0xe9, 0xd3, 0x2f, + 0x45, 0xd2, 0xe9, 0x3b, 0x84, 0x78, 0xd5, 0x69, 0x7f, 0x62, 0xdd, 0xf7, 0xb7, 0x2e, 0xc9, 0xb2, + 0x7f, 0x40, 0xca, 0xee, 0x92, 0x39, 0x1e, 0xaf, 0x39, 0x9d, 0x05, 0xba, 0x0d, 0xbc, 0x70, 0x2a, + 0x9b, 0xf2, 0x3f, 0x62, 0xe8, 0x19, 0xb2, 0x8d, 0x0b, 0x1c, 0xdc, 0x90, 0x0b, 0xd7, 0x35, 0x0d, + 0x5e, 0x96, 0xe3, 0xad, 0xa0, 0xb9, 0x78, 0xea, 0xc8, 0x75, 0x4d, 0xdd, 0xff, 0x2d, 0x85, 0x7d, + 0xd6, 0xf9, 0x43, 0xc2, 0x9b, 0xc9, 0xfb, 0x4b, 0xfe, 0x77, 0xfe, 0xd4, 0xd5, 0xdf, 0x48, 0x89, + 0xa0, 0x61, 0xd3, 0x92, 0x91, 0x8a, 0xe2, 0xaf, 0x8a, 0x61, 0x5f, 0x2b, 0xfe, 0x8a, 0x56, 0x52, + 0x9d, 0x70, 0x2b, 0xfc, 0x39, 0xe4, 0xef, 0x8b, 0xae, 0xbf, 0x1f, 0x84, 0xfc, 0xdd, 0x36, 0x6c, + 0x3a, 0x1f, 0xee, 0x10, 0x5f, 0x9d, 0xf3, 0x61, 0x1a, 0x43, 0x86, 0xed, 0x0f, 0x23, 0xd8, 0x53, + 0xcd, 0xb8, 0x02, 0x17, 0xff, 0x7a, 0xbe, 0x51, 0x89, 0x33, 0x17, 0xde, 0xd0, 0xf4, 0x73, 0xeb, + 0x68, 0x1d, 0x60, 0x3e, 0x53, 0xe8, 0xe1, 0x91, 0x8d, 0x3f, 0x0e, 0xc1, 0x39, 0xe4, 0x00, 0x08, + 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Important_Circle_64px = { GLYPH_Important_Circle_64px_WIDTH, GLYPH_Important_Circle_64px_HEIGHT, NBGL_BPP_4, GLYPH_Important_Circle_64px_ISFILE, C_Important_Circle_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Review_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x21, 0xd3, 0x00, 0x00, 0xd1, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xed, 0xd5, 0x3b, 0x0e, 0xc2, 0x30, 0x0c, 0x06, 0x60, 0xab, 0xea, 0x90, + 0x8d, 0x2b, 0xf4, 0x04, 0x39, 0x07, 0xc7, 0xe0, 0x28, 0x11, 0x62, 0xc8, 0x04, 0x77, 0x64, 0xea, + 0xd6, 0x95, 0xa9, 0xc1, 0x29, 0x24, 0xa6, 0xf8, 0x01, 0x43, 0x87, 0x0e, 0xf1, 0x52, 0xa1, 0xaf, + 0xb8, 0x4e, 0xa5, 0xfe, 0x4e, 0x69, 0x93, 0x9a, 0xa3, 0x50, 0x13, 0xf9, 0x1d, 0x84, 0xf2, 0xf4, + 0xf7, 0x41, 0xf2, 0xae, 0x36, 0x78, 0x00, 0x98, 0x0d, 0x14, 0xaf, 0x0d, 0xd0, 0x8f, 0x6c, 0xbc, + 0x81, 0x1a, 0xa0, 0xdf, 0xd8, 0x99, 0x70, 0x66, 0x87, 0x97, 0x11, 0x6f, 0xbd, 0x48, 0x8e, 0x43, + 0x3b, 0x1a, 0x9d, 0x7b, 0x0a, 0xd9, 0xcb, 0xc9, 0x35, 0x0f, 0xff, 0xfb, 0xf2, 0x1b, 0xe0, 0xf0, + 0xe5, 0x7d, 0x99, 0x4f, 0x71, 0x57, 0xce, 0xd7, 0xbc, 0x79, 0x73, 0xdd, 0x95, 0xef, 0x6f, 0x1f, + 0xce, 0xf2, 0xeb, 0xba, 0x76, 0x21, 0xfc, 0x6c, 0x07, 0x4f, 0x2e, 0xe6, 0x6f, 0x77, 0xaa, 0x2e, + 0xe7, 0x37, 0x90, 0xf3, 0xfc, 0x3f, 0xaf, 0x3c, 0x49, 0xe9, 0x69, 0xfa, 0xf2, 0x48, 0xcb, 0x73, + 0x03, 0xcb, 0xdf, 0xf9, 0xfd, 0xdb, 0xfb, 0x28, 0xd7, 0x6b, 0x3f, 0x04, 0xd0, 0x2b, 0xef, 0x17, + 0xcb, 0xbd, 0xfe, 0xe6, 0xea, 0x7a, 0x92, 0x57, 0xdf, 0xc7, 0x7a, 0x1b, 0xa3, 0x56, 0xd3, 0x06, + 0x8b, 0xfb, 0x09, 0xaa, 0x24, 0xa5, 0x2a, 0x00, 0x08, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Review_64px = { GLYPH_Review_64px_WIDTH, GLYPH_Review_64px_HEIGHT, NBGL_BPP_4, GLYPH_Review_64px_ISFILE, C_Review_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_SecurityShield_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x21, 0x5a, 0x02, 0x00, 0x58, 0x02, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xad, 0x95, 0xbf, 0x53, 0x13, 0x41, 0x14, 0xc7, 0xbf, 0x97, 0x1c, 0xbf, + 0x14, 0xf1, 0x2a, 0x3a, 0xf0, 0x26, 0xb6, 0x8e, 0xc6, 0x86, 0x52, 0xd3, 0xd0, 0xd0, 0xc0, 0x7f, + 0x00, 0xa2, 0x85, 0x9d, 0x69, 0x1d, 0x2d, 0x62, 0xc1, 0x4c, 0xba, 0x60, 0x6d, 0x01, 0x63, 0x63, + 0xe3, 0x8c, 0xb4, 0x56, 0xde, 0x28, 0x43, 0xc3, 0x00, 0xf6, 0x16, 0x41, 0x0a, 0xad, 0x0c, 0xc2, + 0x80, 0x06, 0x48, 0x38, 0xf7, 0xed, 0xde, 0xed, 0xef, 0x8b, 0x33, 0x8e, 0xdb, 0x24, 0xbb, 0x9f, + 0xbd, 0xb7, 0xef, 0x7d, 0xdf, 0xbe, 0xb7, 0x69, 0xfa, 0x3f, 0x46, 0xef, 0xcd, 0xa3, 0x4a, 0xe5, + 0xe6, 0xec, 0xd3, 0x3d, 0x3f, 0x7e, 0x81, 0x7c, 0xcc, 0x7c, 0xf0, 0xe0, 0x4b, 0x68, 0x63, 0xce, + 0xe5, 0xa7, 0x3a, 0xc7, 0xf0, 0xa1, 0xcd, 0xd7, 0x0d, 0x8e, 0xd0, 0xf6, 0x22, 0x46, 0xf0, 0xf8, + 0x6d, 0xa7, 0xf3, 0x63, 0x7b, 0xa5, 0xea, 0xb3, 0x70, 0x0e, 0x5c, 0xc9, 0xff, 0x6f, 0xc5, 0xb4, + 0x61, 0xd4, 0xe0, 0xc7, 0xc0, 0xbc, 0x9c, 0xf4, 0x97, 0x69, 0xc3, 0x2d, 0xeb, 0x78, 0xdd, 0xe0, + 0x6b, 0xda, 0xd0, 0xd2, 0x16, 0x6a, 0x18, 0x32, 0xec, 0xd1, 0x86, 0xb2, 0xfa, 0xa2, 0x0f, 0x8c, + 0x9b, 0xfe, 0x36, 0xd8, 0x86, 0xdb, 0x72, 0xf6, 0x0b, 0xb8, 0x6f, 0xe9, 0x55, 0x03, 0x4a, 0x6d, + 0xcd, 0xbd, 0x77, 0x56, 0xc0, 0x5d, 0x66, 0x60, 0x2a, 0x9f, 0x6c, 0x20, 0x70, 0x14, 0xfd, 0x08, + 0x04, 0xb9, 0x81, 0x25, 0x0c, 0xbb, 0x19, 0x61, 0x32, 0x4c, 0x4b, 0xf5, 0xae, 0xba, 0x29, 0x39, + 0x60, 0x1e, 0x88, 0x10, 0x7a, 0xc0, 0x0d, 0x75, 0x2a, 0x72, 0xf9, 0xaa, 0xb9, 0x68, 0x67, 0xc0, + 0xa2, 0x0a, 0x4b, 0x8c, 0x16, 0x37, 0x30, 0xc2, 0x57, 0x4f, 0x80, 0x35, 0xc1, 0x55, 0x06, 0xaf, + 0x0b, 0x0f, 0x78, 0x1e, 0x8f, 0x80, 0xb6, 0x87, 0xa7, 0x09, 0x70, 0x87, 0x56, 0x3f, 0xcb, 0xf0, + 0x00, 0xf1, 0xfb, 0x93, 0xf3, 0xb3, 0xec, 0x80, 0x04, 0x21, 0xe5, 0xb8, 0xd9, 0x6c, 0x9a, 0x9c, + 0xa5, 0x85, 0x1b, 0x5e, 0xe5, 0xdb, 0x84, 0x6f, 0x06, 0xff, 0x2a, 0x22, 0xa8, 0x63, 0x8c, 0x5f, + 0x11, 0x87, 0x77, 0x45, 0xde, 0x6a, 0x24, 0x4f, 0xd7, 0xc3, 0x99, 0x70, 0x21, 0xe7, 0xe3, 0xc4, + 0x43, 0xe7, 0x7c, 0x96, 0x18, 0x8a, 0x30, 0xc6, 0x04, 0xf1, 0x51, 0xdb, 0x7f, 0xae, 0xcc, 0x93, + 0x34, 0x8d, 0x68, 0x96, 0xf3, 0xfe, 0x8e, 0xc6, 0xcf, 0xb9, 0xf2, 0xd0, 0xf9, 0x7a, 0x79, 0x47, + 0x71, 0xf6, 0xe9, 0x98, 0xc5, 0x1b, 0xe4, 0x92, 0xe4, 0x7c, 0x36, 0x80, 0xd7, 0x1d, 0x6e, 0xda, + 0x8f, 0xa9, 0x6e, 0x0c, 0xff, 0x7a, 0x96, 0x7f, 0x13, 0x7f, 0x8f, 0xaf, 0x8a, 0x6b, 0x05, 0xfa, + 0x24, 0x5c, 0x9f, 0x05, 0x3a, 0xc4, 0xab, 0x6f, 0x15, 0x25, 0x7e, 0x7d, 0x0b, 0xf2, 0x93, 0x95, + 0xf5, 0x2a, 0xbf, 0xde, 0x9e, 0xfc, 0x1e, 0x8b, 0x0b, 0xb4, 0x81, 0xb2, 0xff, 0x7e, 0xd4, 0x45, + 0x5d, 0xed, 0x17, 0xdc, 0xaf, 0x0b, 0x88, 0xba, 0x29, 0xba, 0x9f, 0x07, 0x59, 0x05, 0x9d, 0xfa, + 0xef, 0x37, 0x15, 0xc8, 0x5a, 0x56, 0x1f, 0xf3, 0x9e, 0xfa, 0x60, 0x55, 0x3f, 0x34, 0xa8, 0xbe, + 0x1a, 0xb2, 0x45, 0x44, 0x76, 0xfb, 0xc8, 0xf7, 0xb6, 0x8b, 0xeb, 0x9b, 0x2d, 0x92, 0x6c, 0x99, + 0xcc, 0x6e, 0x7f, 0x38, 0xd1, 0x5a, 0xd8, 0x91, 0x0c, 0x40, 0xb5, 0xac, 0x58, 0xeb, 0x91, 0xbf, + 0xf5, 0xf6, 0xa8, 0x22, 0x91, 0x1d, 0xb0, 0xe7, 0xf4, 0xb7, 0x4f, 0x50, 0xa7, 0xf3, 0x0a, 0x09, + 0x0d, 0xfc, 0x8d, 0xe1, 0x40, 0xeb, 0xe1, 0x49, 0xd6, 0x09, 0xb2, 0xf1, 0x3d, 0x62, 0xfc, 0x5e, + 0x51, 0x7f, 0x4e, 0x37, 0x49, 0xa1, 0x11, 0xab, 0xbf, 0x4b, 0x07, 0x2e, 0x1e, 0x10, 0x2e, 0xef, + 0x59, 0xef, 0x43, 0xe9, 0xd9, 0x2e, 0x75, 0xbd, 0xf7, 0x0f, 0xb9, 0xbe, 0x81, 0x15, 0x6f, 0xc2, + 0x57, 0x2b, 0x51, 0x26, 0x7f, 0xd0, 0xf2, 0xa8, 0xa5, 0x86, 0x83, 0xd3, 0xcb, 0x48, 0xc3, 0x93, + 0x9e, 0x37, 0xf2, 0xa5, 0xa4, 0xa5, 0xe7, 0xde, 0x07, 0xf4, 0xcb, 0xca, 0x5d, 0x82, 0x33, 0xaf, + 0x06, 0xbc, 0xc1, 0x9d, 0xc3, 0x7f, 0x79, 0xb9, 0xff, 0x00, 0xb6, 0x83, 0x9c, 0x31, 0x00, 0x08, + 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_SecurityShield_64px = { GLYPH_SecurityShield_64px_WIDTH, GLYPH_SecurityShield_64px_HEIGHT, NBGL_BPP_4, GLYPH_SecurityShield_64px_ISFILE, C_SecurityShield_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Warning_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x21, 0x5f, 0x01, 0x00, 0x5d, 0x01, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x85, 0xd5, 0x31, 0x4e, 0xc3, 0x40, 0x10, 0x05, 0xd0, 0x8d, 0x85, 0x08, + 0x4a, 0x45, 0x49, 0x91, 0xc2, 0x25, 0xb2, 0x52, 0xe4, 0x08, 0x39, 0x40, 0xc4, 0x19, 0x72, 0x82, + 0x5c, 0x81, 0x84, 0x03, 0x80, 0xb8, 0x41, 0xc4, 0x05, 0x72, 0x04, 0x0a, 0xd2, 0xe7, 0x08, 0x69, + 0x02, 0xa2, 0x0b, 0xa5, 0x13, 0xa1, 0x1d, 0xec, 0x99, 0x5d, 0xb3, 0xf6, 0xee, 0x1f, 0x6f, 0xfb, + 0xc6, 0x96, 0xbc, 0xfe, 0x33, 0x43, 0x84, 0x4f, 0xb9, 0x27, 0xed, 0x5c, 0xf2, 0xeb, 0x93, 0xc2, + 0xbf, 0x53, 0x63, 0x26, 0x0a, 0xcf, 0x8c, 0x31, 0x23, 0x9d, 0xb1, 0x5b, 0x66, 0xe8, 0x76, 0x51, + 0xe1, 0x60, 0x06, 0x7d, 0x5d, 0x3f, 0xfc, 0xb8, 0x41, 0xce, 0xbc, 0x24, 0xe4, 0xcc, 0x73, 0x42, + 0xfe, 0xea, 0x18, 0xf8, 0x9b, 0xe7, 0xb4, 0xef, 0x6a, 0x96, 0x7b, 0x4b, 0x39, 0x73, 0x41, 0xc8, + 0x99, 0xef, 0x08, 0xf9, 0x31, 0xe4, 0xd8, 0xbf, 0x5a, 0x1c, 0x79, 0x79, 0x5b, 0xf1, 0x90, 0x90, + 0x33, 0x87, 0x91, 0x68, 0x3b, 0xf3, 0x55, 0x18, 0xa9, 0x96, 0x9f, 0x23, 0x6e, 0xf9, 0x25, 0x8f, + 0x38, 0x74, 0x8e, 0x4b, 0xd6, 0xc9, 0xeb, 0xbf, 0x0b, 0x6f, 0x09, 0x38, 0xf3, 0xe0, 0x85, 0x80, + 0xdb, 0x34, 0x7b, 0x97, 0xb0, 0xc5, 0xec, 0x5d, 0xc2, 0x46, 0xc8, 0x5d, 0xd8, 0x90, 0xaf, 0x9b, + 0xb8, 0x94, 0xc6, 0x9f, 0x1b, 0xfa, 0x31, 0x46, 0xdc, 0x36, 0x8c, 0x7d, 0x4e, 0xba, 0x17, 0x3d, + 0xae, 0xbd, 0x5f, 0xe2, 0xbc, 0xc4, 0x6e, 0x9f, 0xf4, 0xef, 0x93, 0xeb, 0x4b, 0x16, 0x84, 0xf7, + 0x9b, 0x2a, 0x68, 0xfe, 0x4f, 0x5d, 0x90, 0x3d, 0x43, 0x77, 0x05, 0x5b, 0xe8, 0x7d, 0xf9, 0x70, + 0xf1, 0xeb, 0x16, 0x44, 0xf9, 0xcc, 0xde, 0xa1, 0xbb, 0x00, 0x1f, 0xa0, 0xd3, 0x39, 0xef, 0xb4, + 0x4f, 0xb7, 0xbf, 0xbe, 0xf5, 0xfe, 0x72, 0xed, 0x1b, 0x14, 0xa4, 0xfb, 0x7b, 0x78, 0x82, 0x2e, + 0x05, 0xf7, 0xd8, 0xe9, 0x33, 0x18, 0x3f, 0xc9, 0xf9, 0xf4, 0xa1, 0xcf, 0x27, 0x97, 0x97, 0x02, + 0xbb, 0x14, 0x4c, 0xb0, 0x4b, 0xc1, 0x03, 0x76, 0xf2, 0x89, 0x43, 0x6e, 0x57, 0xfa, 0x7c, 0xf7, + 0x89, 0xdb, 0xe8, 0xfb, 0xc5, 0x4c, 0x95, 0xfd, 0xb4, 0x50, 0xf7, 0x93, 0x5f, 0x60, 0x23, 0x65, + 0x3f, 0xe6, 0xba, 0x73, 0xa0, 0xc6, 0x3d, 0xfb, 0x99, 0xf4, 0x05, 0x5e, 0xcd, 0xcb, 0x3f, 0xe4, + 0x2a, 0x7b, 0x24, 0x00, 0x08, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Warning_64px = { GLYPH_Warning_64px_WIDTH, GLYPH_Warning_64px_HEIGHT, NBGL_BPP_4, GLYPH_Warning_64px_ISFILE, C_Warning_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_left_half_64px_bitmap[] = { + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, + 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, + 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_left_half_64px = { GLYPH_left_half_64px_WIDTH, GLYPH_left_half_64px_HEIGHT, NBGL_BPP_1, GLYPH_left_half_64px_ISFILE, C_left_half_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Back_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x8c, 0x00, 0x00, 0x8a, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xed, 0xd3, 0xcd, 0x09, 0xc0, 0x20, 0x0c, 0x80, 0xd1, 0xd0, 0x53, 0x0e, + 0x1d, 0xa2, 0xa3, 0x39, 0x4a, 0x36, 0x70, 0x95, 0x6e, 0xd2, 0x6d, 0xc4, 0x43, 0xc1, 0xe6, 0xc7, + 0xd6, 0xa8, 0xd0, 0x73, 0x0f, 0xf5, 0x10, 0xe1, 0xe3, 0x81, 0x10, 0xb0, 0x94, 0x97, 0x43, 0xf8, + 0xb7, 0xef, 0xb6, 0xc3, 0xb7, 0x53, 0x67, 0x46, 0xdf, 0x28, 0xca, 0xdc, 0x21, 0xb6, 0x96, 0x61, + 0x95, 0x2b, 0x01, 0xb6, 0x46, 0x06, 0x4a, 0xd0, 0x5b, 0x5b, 0x86, 0xfa, 0x92, 0x41, 0x6d, 0x37, + 0xab, 0x50, 0xda, 0xc3, 0x2a, 0x94, 0xd6, 0x98, 0x41, 0x6e, 0x8e, 0x19, 0xe4, 0xe6, 0x99, 0x42, + 0xc2, 0x8e, 0x29, 0x24, 0xec, 0x99, 0xc0, 0x6d, 0x81, 0x61, 0x33, 0x09, 0xf8, 0xc4, 0x61, 0x55, + 0x01, 0x60, 0x5a, 0x60, 0x9a, 0x19, 0x43, 0x7c, 0xfb, 0x01, 0xe5, 0x02, 0xe6, 0x04, 0x3a, 0xe4, + 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Back_40px = { GLYPH_Back_40px_WIDTH, GLYPH_Back_40px_HEIGHT, NBGL_BPP_4, GLYPH_Back_40px_ISFILE, C_Back_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Check_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x01, 0x54, 0x00, 0x00, 0x52, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x63, 0x60, 0xc0, 0x05, 0x78, 0x40, 0x84, 0x1c, 0x88, 0x90, 0x07, 0x13, + 0x0d, 0x40, 0x82, 0xff, 0x00, 0x90, 0x60, 0x7f, 0x00, 0x24, 0x98, 0x3f, 0x00, 0x09, 0xc6, 0x1f, + 0x20, 0x99, 0x3f, 0x20, 0xa2, 0x0e, 0x44, 0xd8, 0xe3, 0x57, 0x08, 0x26, 0x2a, 0x60, 0x2c, 0xb0, + 0x18, 0x58, 0x16, 0xac, 0x0e, 0xac, 0x03, 0xac, 0xd7, 0x1e, 0x6e, 0x5e, 0x0d, 0x5c, 0x83, 0x01, + 0x03, 0x01, 0x00, 0x00, 0x63, 0x83, 0xdc, 0x77, 0xc8, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Check_40px = { GLYPH_Check_40px_WIDTH, GLYPH_Check_40px_HEIGHT, NBGL_BPP_1, GLYPH_Check_40px_ISFILE, C_Check_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Check_Circle_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x4b, 0x01, 0x00, 0x49, 0x01, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x75, 0x53, 0x3b, 0x52, 0xc3, 0x30, 0x10, 0x7d, 0x16, 0x0d, 0x50, 0x04, + 0x57, 0x0c, 0x34, 0x58, 0x4d, 0x66, 0x20, 0x05, 0xd0, 0xd0, 0x86, 0x3b, 0xc0, 0x01, 0x18, 0x4e, + 0xc0, 0x15, 0x0c, 0x17, 0xe0, 0x53, 0xc3, 0x84, 0x49, 0xcf, 0xe4, 0x08, 0xa9, 0xa9, 0xa8, 0xa1, + 0x61, 0x12, 0x0e, 0x00, 0xe6, 0x37, 0xb6, 0x83, 0xb3, 0x48, 0x96, 0x56, 0x96, 0x32, 0xe3, 0x2d, + 0xa4, 0x9d, 0xe7, 0xb7, 0xbb, 0x4f, 0xbb, 0x6b, 0xa2, 0x56, 0x7b, 0x3c, 0x8a, 0xa3, 0x83, 0xbb, + 0x00, 0xba, 0x40, 0x6d, 0xbd, 0xf7, 0x06, 0x3a, 0x87, 0xb5, 0x6d, 0x07, 0xbd, 0x01, 0xeb, 0x0f, + 0x44, 0x2f, 0xa7, 0xc0, 0xae, 0x85, 0xca, 0x18, 0x3b, 0xc6, 0x1b, 0x22, 0x1a, 0x1b, 0xef, 0x1e, + 0x9b, 0x1c, 0x71, 0x8d, 0xd5, 0xfa, 0x9e, 0x41, 0xb8, 0xd4, 0x73, 0x89, 0x91, 0xbe, 0x27, 0xe8, + 0x93, 0x97, 0x7a, 0x4b, 0x5f, 0x52, 0x78, 0x0a, 0xe6, 0x72, 0x49, 0x9d, 0x39, 0x3a, 0xfa, 0xbc, + 0xb4, 0xe0, 0x04, 0xca, 0x9b, 0x62, 0xa0, 0xdc, 0x74, 0xd9, 0x62, 0x05, 0x12, 0x55, 0x55, 0x68, + 0x37, 0x05, 0x13, 0xa5, 0xfa, 0x2a, 0xeb, 0xea, 0x39, 0x98, 0x78, 0x25, 0xa8, 0xd2, 0x5c, 0x9f, + 0x98, 0xe1, 0xa9, 0xc0, 0x19, 0x05, 0xc4, 0x5f, 0x0c, 0x7e, 0x8c, 0xc8, 0x86, 0x58, 0xe2, 0xe4, + 0x0b, 0xaf, 0x14, 0x10, 0x2b, 0xec, 0x65, 0x60, 0xb9, 0x4c, 0x44, 0xf2, 0xe1, 0x30, 0x26, 0x62, + 0xad, 0xc1, 0x14, 0x71, 0x64, 0xb0, 0x26, 0x96, 0xbe, 0x4d, 0x30, 0x92, 0x4f, 0xae, 0xc1, 0xbc, + 0x0a, 0x87, 0x4e, 0x0b, 0xe7, 0x53, 0x5a, 0x58, 0xb3, 0xab, 0xab, 0x34, 0xff, 0xd9, 0xb7, 0xb9, + 0xb2, 0x99, 0x4a, 0x26, 0x57, 0x42, 0x79, 0xba, 0x4f, 0xa9, 0xb0, 0x98, 0x7d, 0xaf, 0xee, 0x53, + 0x56, 0xf7, 0xd4, 0x75, 0xba, 0xd0, 0x23, 0xce, 0xcd, 0x54, 0xc8, 0xef, 0x3d, 0xed, 0x87, 0x33, + 0x12, 0x6d, 0xb3, 0x2c, 0xc3, 0x99, 0x8f, 0xdb, 0x76, 0x83, 0x66, 0x31, 0x7a, 0xc6, 0xbb, 0x41, + 0xc4, 0x2f, 0x9d, 0x36, 0xbb, 0xd6, 0x5f, 0x5c, 0x53, 0x60, 0xc3, 0x53, 0x30, 0x5c, 0x5c, 0x53, + 0x6d, 0xcf, 0xc7, 0x71, 0xd4, 0xbd, 0x6d, 0xff, 0x07, 0xe8, 0x1f, 0xf5, 0xf4, 0xf5, 0xf3, 0x20, + 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Check_Circle_40px = { GLYPH_Check_Circle_40px_WIDTH, GLYPH_Check_Circle_40px_HEIGHT, NBGL_BPP_4, GLYPH_Check_Circle_40px_ISFILE, C_Check_Circle_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Chevron_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x22, 0x5c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xda, 0x1c, 0xe4, 0x03, 0x10, 0x03, 0xe2, 0x03, 0x30, 0x03, 0xe0, 0x03, 0x50, 0x03, 0xde, 0x03, + 0x20, 0x18, 0x20, 0x03, 0xdc, 0x03, 0x20, 0x08, 0xc1, 0x08, 0x20, 0x03, 0xda, 0x03, 0x20, 0x08, + 0xc3, 0x08, 0x20, 0x03, 0xd8, 0x03, 0x20, 0x08, 0xc5, 0x08, 0x20, 0x03, 0xd6, 0x03, 0x20, 0x08, + 0xc7, 0x08, 0x20, 0x03, 0xd4, 0x05, 0x20, 0x08, 0xc9, 0x08, 0x20, 0x05, 0xd3, 0x9e, 0x20, 0x80, + 0xcb, 0x98, 0x02, 0xe0, 0xd4, 0x0e, 0x09, 0xcd, 0x09, 0x0e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xe2, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Chevron_40px = { GLYPH_Chevron_40px_WIDTH, GLYPH_Chevron_40px_HEIGHT, NBGL_BPP_4, GLYPH_Chevron_40px_ISFILE, C_Chevron_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Chevron_Back_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x76, 0x00, 0x00, 0x74, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xed, 0xd2, 0xc1, 0x0d, 0x80, 0x30, 0x08, 0x05, 0x50, 0x8e, 0x3d, 0x38, + 0xa4, 0xa3, 0xb0, 0x41, 0x57, 0x71, 0x93, 0x6e, 0x63, 0x38, 0x98, 0xd4, 0x42, 0x10, 0x7e, 0xeb, + 0x06, 0x46, 0x0e, 0x34, 0xe5, 0xbf, 0x84, 0x0b, 0xbd, 0xff, 0x35, 0xaa, 0xe1, 0xe7, 0xb2, 0x2e, + 0x05, 0x67, 0x5c, 0xb5, 0x1f, 0x54, 0x73, 0x24, 0xb4, 0xe9, 0x73, 0x12, 0x40, 0x76, 0xb0, 0x27, + 0x94, 0x27, 0x07, 0xc8, 0x11, 0x07, 0x94, 0x4c, 0x03, 0x32, 0xac, 0x73, 0x28, 0xb8, 0xcd, 0x21, + 0x32, 0x87, 0x13, 0x73, 0x38, 0x33, 0x83, 0x0b, 0x33, 0xb8, 0x32, 0x85, 0x2b, 0x53, 0xf8, 0x62, + 0x03, 0x96, 0xcf, 0x1d, 0xc6, 0x0d, 0xf2, 0x8e, 0x43, 0x73, 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Chevron_Back_40px = { GLYPH_Chevron_Back_40px_WIDTH, GLYPH_Chevron_Back_40px_HEIGHT, NBGL_BPP_4, GLYPH_Chevron_Back_40px_ISFILE, C_Chevron_Back_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Chevron_Next_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x71, 0x00, 0x00, 0x6f, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xed, 0xce, 0xbb, 0x0d, 0x80, 0x30, 0x0c, 0x45, 0x51, 0x57, 0x51, 0x0a, + 0x86, 0xcc, 0x06, 0xac, 0x90, 0x0d, 0x18, 0x09, 0xa6, 0x42, 0x48, 0x14, 0x8f, 0xc4, 0x44, 0x8e, + 0x3f, 0x1b, 0x20, 0x6e, 0xf9, 0x74, 0x64, 0x19, 0xf8, 0x58, 0x35, 0x87, 0xe9, 0x22, 0xda, 0x02, + 0x23, 0xca, 0x81, 0xa5, 0xe2, 0x61, 0xa5, 0xf5, 0x74, 0xb0, 0x31, 0xc0, 0xc1, 0xc6, 0x00, 0x0b, + 0x99, 0x39, 0xc8, 0xcc, 0xc2, 0xc1, 0x0c, 0x1c, 0x4c, 0x43, 0x61, 0x0a, 0x0a, 0x9b, 0x50, 0x31, + 0x81, 0xc7, 0x64, 0x1d, 0x2e, 0xec, 0x92, 0xfe, 0xbe, 0xbc, 0x07, 0x77, 0xbd, 0xdd, 0xf8, 0xeb, + 0x3d, 0x38, 0x09, 0xbe, 0x9b, 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Chevron_Next_40px = { GLYPH_Chevron_Next_40px_WIDTH, GLYPH_Chevron_Next_40px_HEIGHT, NBGL_BPP_4, GLYPH_Chevron_Next_40px_ISFILE, C_Chevron_Next_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Close_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x85, 0x00, 0x00, 0x83, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xfb, 0xff, 0x7f, 0xc0, 0xc0, 0xbf, 0xf9, 0x08, 0xf6, 0xcf, 0xf7, 0x10, + 0xfa, 0x11, 0x07, 0x42, 0xac, 0x41, 0x0f, 0x42, 0x4f, 0x60, 0xe8, 0x87, 0x09, 0xfd, 0x60, 0xe0, + 0x84, 0x31, 0xe0, 0x0a, 0x1b, 0xe0, 0xd2, 0x70, 0x16, 0x92, 0x2c, 0x9c, 0x89, 0x50, 0x06, 0x67, + 0x23, 0x29, 0x83, 0x73, 0x90, 0x95, 0x41, 0x79, 0x28, 0xca, 0xa0, 0x5c, 0x54, 0x65, 0x60, 0x3e, + 0x9a, 0x32, 0xb0, 0x42, 0x74, 0x65, 0x20, 0x85, 0xe8, 0xca, 0x40, 0x0a, 0x31, 0x94, 0x61, 0x15, + 0xc3, 0xa2, 0x17, 0x9b, 0x1d, 0x58, 0xdc, 0x82, 0xcd, 0xcd, 0x58, 0xfc, 0x86, 0x2d, 0x0c, 0xb0, + 0x84, 0x15, 0xb6, 0x30, 0xc5, 0x12, 0xf6, 0xd8, 0xe2, 0x08, 0x5b, 0x5c, 0x62, 0x8b, 0x73, 0x6c, + 0x69, 0x63, 0x40, 0x00, 0x00, 0xb4, 0x0b, 0xb4, 0x14, 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Close_40px = { GLYPH_Close_40px_WIDTH, GLYPH_Close_40px_HEIGHT, NBGL_BPP_4, GLYPH_Close_40px_ISFILE, C_Close_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Denied_Circle_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x3e, 0x01, 0x00, 0x3c, 0x01, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x75, 0x53, 0x3b, 0x4e, 0x03, 0x31, 0x10, 0x7d, 0x6b, 0x9a, 0x90, 0x02, + 0xb6, 0x42, 0xd0, 0x24, 0x6e, 0x90, 0x20, 0x45, 0xa0, 0xa1, 0x0d, 0x77, 0x80, 0x03, 0x20, 0x4e, + 0xc0, 0x15, 0x16, 0x2e, 0x10, 0xa0, 0x06, 0x05, 0xa5, 0x47, 0x39, 0x42, 0x6a, 0x2a, 0x6a, 0x68, + 0xa2, 0x84, 0x03, 0x40, 0x40, 0xa0, 0xcd, 0x06, 0xf2, 0xf0, 0xac, 0x77, 0x13, 0xef, 0x6f, 0xa4, + 0xb5, 0xc7, 0xcf, 0xcf, 0x33, 0x6f, 0xc7, 0x63, 0xb2, 0xd2, 0x9e, 0x4e, 0x7c, 0xef, 0xe8, 0x3e, + 0x03, 0x5d, 0x21, 0xb6, 0xd6, 0xfb, 0x0a, 0xba, 0x44, 0x62, 0x7b, 0x4b, 0xe8, 0x0d, 0xd8, 0x7a, + 0x24, 0x5f, 0xcf, 0x81, 0x76, 0x02, 0x45, 0x3e, 0xf6, 0xad, 0xd7, 0x87, 0x37, 0xb4, 0xde, 0x03, + 0x76, 0xd2, 0x13, 0x37, 0xa8, 0xc7, 0xf3, 0x1c, 0x6a, 0x19, 0x7a, 0xa1, 0x31, 0x90, 0x79, 0x8c, + 0x0e, 0x9d, 0xd0, 0x0d, 0x99, 0xb4, 0x72, 0x14, 0x2c, 0xf4, 0x9a, 0x19, 0x43, 0x6c, 0xb8, 0x4a, + 0xc7, 0xe8, 0x92, 0x13, 0xf4, 0x5c, 0x6c, 0x86, 0xa6, 0xc9, 0xaa, 0x84, 0xdc, 0x65, 0x3a, 0xea, + 0x9a, 0xf9, 0x24, 0x7b, 0x50, 0x63, 0x3a, 0x5e, 0x2b, 0xfe, 0x09, 0x97, 0x81, 0x44, 0x09, 0x21, + 0xd8, 0x14, 0xcf, 0x33, 0x5c, 0x30, 0x59, 0xc6, 0x1b, 0xfc, 0x41, 0xef, 0xdb, 0x8a, 0x34, 0x6b, + 0x4b, 0x63, 0x84, 0xb3, 0x2f, 0x8c, 0x68, 0x89, 0x96, 0x66, 0x82, 0x1d, 0x4c, 0x61, 0x35, 0x04, + 0xb0, 0x34, 0x12, 0xcd, 0x8f, 0x04, 0x0b, 0x61, 0x69, 0x06, 0xdb, 0x2c, 0xc3, 0xca, 0xce, 0x7e, + 0x16, 0x73, 0x1c, 0x97, 0x69, 0x29, 0xd3, 0xfc, 0x5b, 0xfc, 0xb7, 0x11, 0xf5, 0x7a, 0xb6, 0x06, + 0x52, 0xa7, 0x20, 0x5f, 0xab, 0xba, 0x70, 0x73, 0x35, 0x6d, 0x4b, 0x94, 0x46, 0xa1, 0xf6, 0x3c, + 0xcc, 0xde, 0x91, 0xaa, 0xba, 0xcb, 0x28, 0x7b, 0xe7, 0xc3, 0xaa, 0xde, 0xe0, 0xdc, 0x47, 0xcb, + 0x7a, 0xb7, 0xf0, 0x06, 0xc9, 0xee, 0x64, 0xd5, 0x6b, 0x9d, 0x7c, 0x9b, 0x02, 0xdb, 0x8e, 0x82, + 0x7e, 0xbe, 0x4d, 0xc5, 0x5e, 0x4e, 0x7d, 0x6f, 0xf7, 0xae, 0xfa, 0x0d, 0xf0, 0x1f, 0x93, 0x8f, + 0x11, 0x3f, 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Denied_Circle_40px = { GLYPH_Denied_Circle_40px_WIDTH, GLYPH_Denied_Circle_40px_HEIGHT, NBGL_BPP_4, GLYPH_Denied_Circle_40px_ISFILE, C_Denied_Circle_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Erase_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x01, 0x70, 0x00, 0x00, 0x6e, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x63, 0x60, 0x80, 0x03, 0xfb, 0xff, 0x7f, 0x18, 0x18, 0xea, 0xff, 0xff, + 0xc3, 0x43, 0xd4, 0xfd, 0xaf, 0x63, 0x60, 0xa8, 0xa9, 0xb3, 0x03, 0xb2, 0x6c, 0x80, 0xac, 0x7a, + 0x09, 0x90, 0x44, 0x23, 0x88, 0x38, 0x0c, 0x27, 0xc0, 0x5c, 0x90, 0x04, 0x58, 0x09, 0x44, 0x31, + 0x48, 0x1b, 0x7e, 0x93, 0xc1, 0x04, 0xd8, 0x05, 0xf2, 0xff, 0x7f, 0x30, 0x30, 0xf0, 0xff, 0xff, + 0xc0, 0xc0, 0xc0, 0xfe, 0xff, 0x01, 0x03, 0x03, 0xf3, 0xff, 0x03, 0x0c, 0x0c, 0x8c, 0xff, 0x1b, + 0x80, 0x0e, 0xfc, 0x0f, 0x72, 0x65, 0x1d, 0x88, 0xb0, 0x01, 0x11, 0x12, 0x0c, 0x48, 0x00, 0x00, + 0xd0, 0xf4, 0xce, 0x34, 0xc8, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Erase_40px = { GLYPH_Erase_40px_WIDTH, GLYPH_Erase_40px_HEIGHT, NBGL_BPP_1, GLYPH_Erase_40px_ISFILE, C_Erase_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Info_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x31, 0x00, 0x00, 0x2f, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xfb, 0xff, 0x7f, 0x14, 0xd0, 0x0b, 0x30, 0xf0, 0xff, 0x67, 0x80, 0x01, + 0x7e, 0x2a, 0x89, 0x71, 0x60, 0x5a, 0xd3, 0x80, 0x45, 0xec, 0x57, 0xcf, 0x68, 0xf0, 0x93, 0x05, + 0x00, 0xd9, 0x9e, 0xc9, 0x19, 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Info_40px = { GLYPH_Info_40px_WIDTH, GLYPH_Info_40px_HEIGHT, NBGL_BPP_4, GLYPH_Info_40px_ISFILE, C_Info_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Maj_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x01, 0x51, 0x00, 0x00, 0x4f, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x63, 0x60, 0x20, 0x09, 0x58, 0x80, 0x88, 0x0a, 0x10, 0xf1, 0x03, 0x88, + 0x19, 0x41, 0x04, 0x33, 0x88, 0x60, 0x07, 0x11, 0xfc, 0xff, 0xff, 0x33, 0x30, 0xc8, 0xff, 0xff, + 0xdf, 0xc0, 0x60, 0x0f, 0x22, 0xea, 0x41, 0xc4, 0x7f, 0x38, 0x51, 0x0f, 0x97, 0x00, 0x2b, 0x01, + 0x2b, 0x66, 0x87, 0x1b, 0x00, 0x36, 0x0a, 0x6c, 0x28, 0xc4, 0x78, 0x0b, 0xd2, 0xdc, 0xc5, 0x00, + 0x00, 0x96, 0xe8, 0xea, 0xc6, 0xc8, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Maj_40px = { GLYPH_Maj_40px_WIDTH, GLYPH_Maj_40px_HEIGHT, NBGL_BPP_1, GLYPH_Maj_40px_ISFILE, C_Maj_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Maj_Lock_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x01, 0x4d, 0x00, 0x00, 0x4b, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x63, 0x60, 0x20, 0x09, 0x3c, 0x00, 0x62, 0x46, 0x10, 0xc1, 0x0c, 0x22, + 0xd8, 0x41, 0x04, 0x3f, 0x88, 0x90, 0x07, 0x11, 0xf6, 0xff, 0x7f, 0x3c, 0x60, 0xa8, 0x07, 0x11, + 0xff, 0x81, 0x04, 0x23, 0x88, 0x60, 0x86, 0x13, 0x60, 0x2e, 0x58, 0x02, 0xa2, 0x04, 0xac, 0x58, + 0x1e, 0x6e, 0x00, 0x3b, 0xdc, 0x50, 0xb0, 0xf1, 0x60, 0x8b, 0x48, 0x01, 0x00, 0xac, 0x36, 0x99, + 0x6b, 0xc8, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Maj_Lock_40px = { GLYPH_Maj_Lock_40px_WIDTH, GLYPH_Maj_Lock_40px_HEIGHT, NBGL_BPP_1, GLYPH_Maj_Lock_40px_ISFILE, C_Maj_Lock_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Next_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x86, 0x00, 0x00, 0x84, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xed, 0xd0, 0x31, 0x0e, 0x80, 0x30, 0x08, 0x40, 0x51, 0x5c, 0x1a, 0x06, + 0x07, 0x8f, 0xe8, 0x0d, 0xbc, 0x02, 0x37, 0xf0, 0x48, 0x7a, 0xaa, 0xa6, 0x89, 0x43, 0x2d, 0x50, + 0x95, 0x4a, 0xa2, 0xab, 0x83, 0x8c, 0x3f, 0x2f, 0x0d, 0x25, 0xe7, 0x87, 0x21, 0x74, 0x29, 0x01, + 0xcc, 0x8e, 0x01, 0xa0, 0x67, 0x0e, 0x12, 0x0c, 0xdd, 0x0d, 0x26, 0x08, 0x84, 0x63, 0x0b, 0x09, + 0x26, 0xc2, 0xd8, 0xc0, 0xc2, 0x78, 0x97, 0x06, 0x16, 0xc6, 0xcd, 0x42, 0x66, 0xb2, 0xb3, 0x81, + 0xcc, 0xa4, 0x5d, 0x50, 0x98, 0xfe, 0xed, 0x84, 0xc2, 0xb4, 0x1d, 0x50, 0x59, 0xbd, 0x41, 0x85, + 0xab, 0xb0, 0xda, 0x22, 0xf4, 0xe2, 0x82, 0xbd, 0xd5, 0xa8, 0x0f, 0x2e, 0xb6, 0x6d, 0x2f, 0x37, + 0xfd, 0xdb, 0xc7, 0x9a, 0x99, 0x1d, 0xa6, 0xf9, 0xc2, 0x38, 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Next_40px = { GLYPH_Next_40px_WIDTH, GLYPH_Next_40px_HEIGHT, NBGL_BPP_4, GLYPH_Next_40px_ISFILE, C_Next_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Plus_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x36, 0x00, 0x00, 0x34, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xfb, 0xff, 0x9f, 0x46, 0xa0, 0x81, 0x63, 0x54, 0x0c, 0x45, 0xac, 0x03, + 0x02, 0x1c, 0x58, 0xa0, 0x0c, 0x90, 0x18, 0x03, 0x1a, 0xc0, 0x25, 0x86, 0x4d, 0xef, 0x68, 0x98, + 0xe2, 0x15, 0xa3, 0x12, 0x00, 0x00, 0x63, 0x2f, 0x8b, 0x12, 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Plus_40px = { GLYPH_Plus_40px_WIDTH, GLYPH_Plus_40px_HEIGHT, NBGL_BPP_4, GLYPH_Plus_40px_ISFILE, C_Plus_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_QRCode_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x99, 0x00, 0x00, 0x97, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xfb, 0xff, 0x9f, 0xda, 0xe0, 0x11, 0x03, 0x08, 0x30, 0xbd, 0xff, 0x00, + 0xa2, 0xfe, 0x7f, 0x60, 0x00, 0x89, 0x29, 0x80, 0xc5, 0x18, 0xf4, 0x91, 0xc5, 0x20, 0x42, 0x0c, + 0xfc, 0x28, 0x62, 0xfc, 0x30, 0x12, 0xc2, 0xc2, 0x2d, 0xf6, 0xa7, 0xa3, 0x07, 0x43, 0xec, 0x07, + 0x03, 0x07, 0x84, 0xff, 0x01, 0x61, 0x1e, 0xb1, 0x62, 0x10, 0xf3, 0xc0, 0x3c, 0x90, 0x73, 0x90, + 0xec, 0x25, 0x28, 0x86, 0xf0, 0x07, 0x3f, 0xcc, 0x39, 0x48, 0xfe, 0x85, 0x8b, 0x21, 0x85, 0x0b, + 0x3f, 0x92, 0xb3, 0x49, 0x0a, 0xd3, 0x7f, 0x10, 0x83, 0xf5, 0x90, 0xed, 0xf8, 0x04, 0xa1, 0x99, + 0x30, 0xc2, 0x14, 0x9b, 0x9b, 0xd1, 0xc2, 0x19, 0x55, 0x0c, 0x1e, 0x06, 0x27, 0x3a, 0xce, 0xa3, + 0x86, 0x15, 0x90, 0xd7, 0xc0, 0xd0, 0x4f, 0xaa, 0x18, 0x36, 0xf3, 0x88, 0x74, 0x0b, 0x16, 0x7f, + 0x60, 0xf3, 0x2f, 0xb6, 0x70, 0xa1, 0x2e, 0x00, 0x00, 0x5b, 0xb2, 0x1e, 0xfb, 0x20, 0x03, 0x00, + 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_QRCode_40px = { GLYPH_QRCode_40px_WIDTH, GLYPH_QRCode_40px_HEIGHT, NBGL_BPP_4, GLYPH_QRCode_40px_ISFILE, C_QRCode_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Settings_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0x93, 0x01, 0x00, 0x91, 0x01, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x75, 0x52, 0xb1, 0x52, 0xc2, 0x40, 0x10, 0x7d, 0xc9, 0x88, 0x41, 0x98, + 0x91, 0x8c, 0x56, 0x8e, 0xce, 0x10, 0x87, 0x5e, 0x46, 0x3e, 0x40, 0xec, 0xb0, 0x93, 0x8e, 0x4e, + 0xfd, 0x03, 0x53, 0x40, 0x0d, 0x85, 0x95, 0x16, 0x62, 0x9d, 0x42, 0x4a, 0x3b, 0xb0, 0x93, 0x8a, + 0xf1, 0x0b, 0xfc, 0x04, 0x1c, 0x1c, 0xeb, 0x40, 0x02, 0xa2, 0x20, 0x39, 0x77, 0x2f, 0x38, 0x17, + 0x18, 0xd8, 0x62, 0x6f, 0xef, 0xe5, 0xf2, 0xee, 0xed, 0xbb, 0x15, 0x62, 0x7d, 0x8c, 0x4d, 0xad, + 0xba, 0x8c, 0xd5, 0x81, 0xad, 0x25, 0x28, 0x80, 0x61, 0x6b, 0xdd, 0x45, 0xac, 0x87, 0xac, 0x8f, + 0xac, 0xda, 0x4f, 0x76, 0x0b, 0x4e, 0x51, 0x77, 0x03, 0x33, 0xd6, 0xae, 0x1c, 0x76, 0x42, 0xac, + 0x01, 0x8a, 0x84, 0x10, 0xad, 0xf9, 0x4a, 0x31, 0xe5, 0x12, 0xf7, 0x74, 0xb5, 0x2c, 0x9a, 0x8c, + 0x0d, 0x30, 0x6b, 0x97, 0x73, 0x5c, 0xe5, 0x4a, 0x8e, 0x8b, 0x34, 0x57, 0x1e, 0x5c, 0xc5, 0x3d, + 0x43, 0x9e, 0x97, 0x11, 0x3a, 0x0a, 0x9b, 0xe2, 0x5c, 0x76, 0x80, 0x47, 0x85, 0xfd, 0xa0, 0x1a, + 0x59, 0x9e, 0xee, 0x5c, 0x75, 0x60, 0x8a, 0x4b, 0xca, 0x57, 0xc0, 0x26, 0x81, 0xc3, 0x90, 0x68, + 0xc4, 0xfa, 0x7b, 0x2c, 0xe3, 0x48, 0x08, 0x1f, 0x17, 0x7c, 0x93, 0x45, 0x57, 0x05, 0x16, 0x0a, + 0x37, 0xd0, 0x59, 0x84, 0x4e, 0xa7, 0x1f, 0x60, 0x08, 0xf1, 0x85, 0x03, 0x21, 0x9e, 0x71, 0x2d, + 0x44, 0x8d, 0xec, 0x19, 0x43, 0x23, 0x86, 0x77, 0xa6, 0xf9, 0x45, 0x8a, 0x9a, 0xb7, 0x50, 0x1d, + 0xe0, 0x84, 0x08, 0x5a, 0x1b, 0xcc, 0x7c, 0x9a, 0x90, 0x0e, 0xa5, 0xfb, 0x06, 0xef, 0x6a, 0x71, + 0xce, 0x76, 0x98, 0x53, 0x73, 0x2c, 0xfa, 0x25, 0x35, 0x60, 0x05, 0xa2, 0x11, 0xfe, 0x9b, 0xa4, + 0xf4, 0x81, 0xf4, 0x18, 0x3a, 0xb9, 0xd3, 0xc7, 0x1b, 0x8b, 0xdf, 0xa6, 0x64, 0x52, 0x5b, 0x75, + 0xc4, 0x59, 0xcb, 0xbe, 0x10, 0xaf, 0xac, 0xc5, 0xc6, 0x9e, 0x60, 0xb9, 0xd4, 0x87, 0x85, 0xb3, + 0x32, 0xcb, 0xf5, 0xa1, 0xf3, 0x4b, 0x7d, 0xb2, 0x65, 0xff, 0xbd, 0x79, 0xb2, 0xf9, 0xd0, 0xb2, + 0x80, 0x3d, 0x50, 0x66, 0x86, 0x5e, 0x05, 0x2f, 0xb7, 0x11, 0x33, 0x57, 0x79, 0x3a, 0x5c, 0xf4, + 0x5e, 0xf2, 0xf9, 0xe8, 0x46, 0x67, 0x24, 0x1b, 0xbe, 0x65, 0xd0, 0xae, 0x64, 0xb8, 0xca, 0x14, + 0x9c, 0x6e, 0xf8, 0x96, 0x13, 0xf9, 0xd4, 0x44, 0xf3, 0x2d, 0x8b, 0x8e, 0x9a, 0x8d, 0xa4, 0x9a, + 0x11, 0xc9, 0xbb, 0x53, 0x72, 0x8a, 0x9a, 0x1b, 0x58, 0xb1, 0x76, 0xf9, 0xb8, 0xa9, 0xb8, 0x3d, + 0xe4, 0x3d, 0xe9, 0x50, 0x24, 0x66, 0xa6, 0x61, 0x47, 0x67, 0x64, 0xdd, 0xec, 0xae, 0x9c, 0xf1, + 0x68, 0xfc, 0x01, 0x47, 0x1a, 0xf5, 0x7f, 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Settings_40px = { GLYPH_Settings_40px_WIDTH, GLYPH_Settings_40px_HEIGHT, NBGL_BPP_4, GLYPH_Settings_40px_ISFILE, C_Settings_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Space_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x01, 0x24, 0x00, 0x00, 0x22, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x63, 0x60, 0xe0, 0xff, 0xc0, 0xc0, 0x80, 0x44, 0x30, 0x14, 0x0c, 0x15, + 0x02, 0xc5, 0xe1, 0x00, 0xfa, 0x92, 0x85, 0x5f, 0xc8, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Space_40px = { GLYPH_Space_40px_WIDTH, GLYPH_Space_40px_HEIGHT, NBGL_BPP_1, GLYPH_Space_40px_ISFILE, C_Space_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Warning_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0xe7, 0x00, 0x00, 0xe5, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x6d, 0xd3, 0xb1, 0x0d, 0xc2, 0x40, 0x0c, 0x85, 0xe1, 0x47, 0x84, 0x22, + 0x3a, 0x28, 0x11, 0xd5, 0xd5, 0x88, 0x82, 0x11, 0x32, 0x00, 0x62, 0x86, 0x4c, 0x90, 0x15, 0x08, + 0x13, 0x30, 0x03, 0x2c, 0xc0, 0x0e, 0x88, 0x9e, 0x25, 0x10, 0x6d, 0x52, 0x50, 0x84, 0x10, 0x9d, + 0xb9, 0x73, 0x42, 0x88, 0x7d, 0xb8, 0xfc, 0xaa, 0x5f, 0x67, 0x1f, 0x91, 0x1c, 0x4b, 0xc1, 0x34, + 0x26, 0x0b, 0x28, 0xc1, 0x44, 0x5b, 0x8a, 0xc0, 0xf6, 0xc0, 0x5a, 0xd9, 0x11, 0xd8, 0xe6, 0xd2, + 0xae, 0xc0, 0x86, 0xa4, 0xdd, 0x81, 0x05, 0x49, 0xab, 0x80, 0x39, 0x49, 0xab, 0x66, 0x88, 0x49, + 0x5a, 0x63, 0x30, 0xbe, 0x49, 0x73, 0xad, 0x11, 0xd3, 0xc0, 0x52, 0x8c, 0x0e, 0x24, 0xcd, 0xb5, + 0x76, 0xd4, 0x9b, 0x6f, 0x25, 0x69, 0xdc, 0x2a, 0xad, 0x6d, 0x15, 0xd6, 0xb5, 0x0e, 0xed, 0xc5, + 0xad, 0x25, 0xfc, 0x4c, 0x4b, 0xb0, 0x3d, 0xb9, 0x35, 0xb0, 0x42, 0xdb, 0xdb, 0x20, 0x2e, 0x94, + 0xd1, 0x43, 0x3e, 0x77, 0xdb, 0xe2, 0x70, 0xa9, 0x8d, 0x2e, 0xc0, 0x4a, 0x1b, 0x9d, 0x80, 0x4c, + 0x1b, 0xe5, 0x3f, 0xec, 0xcd, 0xa6, 0x88, 0xce, 0xca, 0xc8, 0x26, 0x5f, 0x1c, 0xbc, 0x7d, 0x6d, + 0xb8, 0x5d, 0xee, 0xa8, 0xe6, 0x76, 0xb5, 0xcb, 0xae, 0x5d, 0xee, 0xbc, 0x6d, 0x57, 0xb7, 0xc1, + 0xed, 0xca, 0xb8, 0x5d, 0x9b, 0x6f, 0x37, 0xda, 0xec, 0x9f, 0x9b, 0xf4, 0xed, 0x81, 0xb9, 0xcc, + 0x5d, 0x78, 0xf8, 0xfe, 0x2f, 0x7c, 0x00, 0x13, 0xd8, 0xb8, 0x06, 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Warning_40px = { GLYPH_Warning_40px_WIDTH, GLYPH_Warning_40px_HEIGHT, NBGL_BPP_4, GLYPH_Warning_40px_ISFILE, C_Warning_40px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_app_boilerplate_40px_bitmap[] = { + 0x28, 0x00, 0x28, 0x00, 0x21, 0xe4, 0x00, 0x00, 0xe2, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x9d, 0x92, 0xbd, 0x0d, 0x83, 0x30, 0x10, 0x85, 0xcf, 0x72, 0x81, 0xe4, + 0x26, 0x66, 0x00, 0x94, 0x15, 0x88, 0x32, 0x00, 0x33, 0x21, 0x06, 0xc8, 0x2c, 0x51, 0x3a, 0x1a, + 0x86, 0xa1, 0x40, 0x4a, 0x93, 0x31, 0x2c, 0x59, 0x3a, 0x5d, 0x62, 0x88, 0xed, 0xb3, 0x4d, 0x41, + 0x72, 0x05, 0x32, 0x8f, 0xc7, 0x7d, 0xf7, 0x63, 0xa2, 0x5f, 0x02, 0x5f, 0xa5, 0x66, 0x9a, 0x52, + 0xb3, 0x72, 0xc7, 0x07, 0xd3, 0x8e, 0xa6, 0xca, 0x7f, 0x01, 0x3c, 0xc5, 0x4e, 0xc1, 0x07, 0xdd, + 0x76, 0x1a, 0xeb, 0x5b, 0xd4, 0x56, 0x0a, 0x0e, 0xba, 0x8a, 0xf9, 0xc0, 0x51, 0x96, 0x56, 0xe8, + 0x86, 0x6b, 0xca, 0xde, 0x35, 0x80, 0x08, 0xd5, 0x1b, 0xf7, 0xd6, 0x7e, 0x3e, 0x40, 0x45, 0xdc, + 0x07, 0xda, 0x3d, 0x3a, 0x5e, 0xcb, 0x16, 0x22, 0x8e, 0xa0, 0xf7, 0x5a, 0x28, 0x7d, 0x69, 0xbd, + 0xe4, 0x5b, 0x5c, 0x71, 0xdf, 0xa8, 0x0a, 0x53, 0x20, 0x70, 0xc9, 0x13, 0x6c, 0x2f, 0x20, 0x4f, + 0x47, 0x38, 0x47, 0xed, 0x1c, 0x4a, 0x19, 0x03, 0x84, 0x8d, 0x1b, 0x87, 0x0c, 0x92, 0xf4, 0xa1, + 0x28, 0xed, 0x37, 0xa1, 0x30, 0x1f, 0x9c, 0x12, 0x9f, 0x7c, 0x5e, 0x74, 0x3e, 0x2b, 0x45, 0xf8, + 0xa8, 0x41, 0x74, 0x7c, 0xa6, 0x2e, 0x93, 0xe9, 0x23, 0xc5, 0x08, 0xb1, 0x9d, 0xf1, 0x1a, 0x96, + 0x1a, 0x77, 0x49, 0x73, 0xdc, 0xa5, 0xdc, 0xb9, 0x07, 0xea, 0xd8, 0x1d, 0x92, 0xc7, 0xee, 0x24, + 0xd2, 0x3f, 0xf1, 0x06, 0x29, 0x24, 0x97, 0x3f, 0x20, 0x03, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_app_boilerplate_40px = { GLYPH_app_boilerplate_40px_WIDTH, GLYPH_app_boilerplate_40px_HEIGHT, NBGL_BPP_4, GLYPH_app_boilerplate_40px_ISFILE, C_app_boilerplate_40px_bitmap }; +#endif // HAVE_NBGL + diff --git a/ledger_secure_sdk_sys/src/c/glyphs_flex_18/glyphs.h b/ledger_secure_sdk_sys/src/c/glyphs_flex_18/glyphs.h new file mode 100644 index 00000000..3d54dd0b --- /dev/null +++ b/ledger_secure_sdk_sys/src/c/glyphs_flex_18/glyphs.h @@ -0,0 +1,524 @@ +#include "app_config.h" +#ifdef HAVE_NBGL +#include "nbgl_types.h" +#else +#include +#endif + +#ifndef GLYPH_app_boilerplate_16px_BPP + #define GLYPH_app_boilerplate_16px_WIDTH 16 + #define GLYPH_app_boilerplate_16px_HEIGHT 16 + #define GLYPH_app_boilerplate_16px_ISFILE true + #define GLYPH_app_boilerplate_16px_BPP 1 + extern uint8_t const C_app_boilerplate_16px_bitmap[29]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_app_boilerplate_16px; + #endif // HAVE_NBGL +#endif // GLYPH_app_boilerplate_16px_BPP + +#ifndef GLYPH_app_boilerplate_64px_BPP + #define GLYPH_app_boilerplate_64px_WIDTH 64 + #define GLYPH_app_boilerplate_64px_HEIGHT 64 + #define GLYPH_app_boilerplate_64px_ISFILE true + #define GLYPH_app_boilerplate_64px_BPP 1 + extern uint8_t const C_app_boilerplate_64px_bitmap[187]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_app_boilerplate_64px; + #endif // HAVE_NBGL +#endif // GLYPH_app_boilerplate_64px_BPP + +#ifndef GLYPH_pin_24_BPP + #define GLYPH_pin_24_WIDTH 24 + #define GLYPH_pin_24_HEIGHT 24 + #define GLYPH_pin_24_ISFILE true + #define GLYPH_pin_24_BPP 1 + extern uint8_t const C_pin_24_bitmap[49]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_pin_24; + #endif // HAVE_NBGL +#endif // GLYPH_pin_24_BPP + +#ifndef GLYPH_quarter_circle_bottom_left_32px_1bpp_BPP + #define GLYPH_quarter_circle_bottom_left_32px_1bpp_WIDTH 32 + #define GLYPH_quarter_circle_bottom_left_32px_1bpp_HEIGHT 32 + #define GLYPH_quarter_circle_bottom_left_32px_1bpp_ISFILE false + #define GLYPH_quarter_circle_bottom_left_32px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_bottom_left_32px_1bpp_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_bottom_left_32px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_bottom_left_32px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_bottom_left_40px_1bpp_BPP + #define GLYPH_quarter_circle_bottom_left_40px_1bpp_WIDTH 40 + #define GLYPH_quarter_circle_bottom_left_40px_1bpp_HEIGHT 40 + #define GLYPH_quarter_circle_bottom_left_40px_1bpp_ISFILE false + #define GLYPH_quarter_circle_bottom_left_40px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_bottom_left_40px_1bpp_bitmap[200]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_bottom_left_40px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_bottom_left_40px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_bottom_left_44px_1bpp_BPP + #define GLYPH_quarter_circle_bottom_left_44px_1bpp_WIDTH 44 + #define GLYPH_quarter_circle_bottom_left_44px_1bpp_HEIGHT 44 + #define GLYPH_quarter_circle_bottom_left_44px_1bpp_ISFILE false + #define GLYPH_quarter_circle_bottom_left_44px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_bottom_left_44px_1bpp_bitmap[242]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_bottom_left_44px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_bottom_left_44px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_top_left_32px_1bpp_BPP + #define GLYPH_quarter_circle_top_left_32px_1bpp_WIDTH 32 + #define GLYPH_quarter_circle_top_left_32px_1bpp_HEIGHT 32 + #define GLYPH_quarter_circle_top_left_32px_1bpp_ISFILE false + #define GLYPH_quarter_circle_top_left_32px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_top_left_32px_1bpp_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_top_left_32px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_top_left_32px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_top_left_40px_1bpp_BPP + #define GLYPH_quarter_circle_top_left_40px_1bpp_WIDTH 40 + #define GLYPH_quarter_circle_top_left_40px_1bpp_HEIGHT 40 + #define GLYPH_quarter_circle_top_left_40px_1bpp_ISFILE false + #define GLYPH_quarter_circle_top_left_40px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_top_left_40px_1bpp_bitmap[200]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_top_left_40px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_top_left_40px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_top_left_44px_1bpp_BPP + #define GLYPH_quarter_circle_top_left_44px_1bpp_WIDTH 44 + #define GLYPH_quarter_circle_top_left_44px_1bpp_HEIGHT 44 + #define GLYPH_quarter_circle_top_left_44px_1bpp_ISFILE false + #define GLYPH_quarter_circle_top_left_44px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_top_left_44px_1bpp_bitmap[242]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_top_left_44px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_top_left_44px_1bpp_BPP + +#ifndef GLYPH_quarter_disc_bottom_left_32px_1bpp_BPP + #define GLYPH_quarter_disc_bottom_left_32px_1bpp_WIDTH 32 + #define GLYPH_quarter_disc_bottom_left_32px_1bpp_HEIGHT 32 + #define GLYPH_quarter_disc_bottom_left_32px_1bpp_ISFILE false + #define GLYPH_quarter_disc_bottom_left_32px_1bpp_BPP 1 + extern uint8_t const C_quarter_disc_bottom_left_32px_1bpp_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_disc_bottom_left_32px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_disc_bottom_left_32px_1bpp_BPP + +#ifndef GLYPH_quarter_disc_bottom_left_40px_1bpp_BPP + #define GLYPH_quarter_disc_bottom_left_40px_1bpp_WIDTH 40 + #define GLYPH_quarter_disc_bottom_left_40px_1bpp_HEIGHT 40 + #define GLYPH_quarter_disc_bottom_left_40px_1bpp_ISFILE false + #define GLYPH_quarter_disc_bottom_left_40px_1bpp_BPP 1 + extern uint8_t const C_quarter_disc_bottom_left_40px_1bpp_bitmap[200]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_disc_bottom_left_40px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_disc_bottom_left_40px_1bpp_BPP + +#ifndef GLYPH_quarter_disc_bottom_left_44px_1bpp_BPP + #define GLYPH_quarter_disc_bottom_left_44px_1bpp_WIDTH 44 + #define GLYPH_quarter_disc_bottom_left_44px_1bpp_HEIGHT 44 + #define GLYPH_quarter_disc_bottom_left_44px_1bpp_ISFILE false + #define GLYPH_quarter_disc_bottom_left_44px_1bpp_BPP 1 + extern uint8_t const C_quarter_disc_bottom_left_44px_1bpp_bitmap[242]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_disc_bottom_left_44px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_disc_bottom_left_44px_1bpp_BPP + +#ifndef GLYPH_quarter_disc_top_left_32px_1bpp_BPP + #define GLYPH_quarter_disc_top_left_32px_1bpp_WIDTH 32 + #define GLYPH_quarter_disc_top_left_32px_1bpp_HEIGHT 32 + #define GLYPH_quarter_disc_top_left_32px_1bpp_ISFILE false + #define GLYPH_quarter_disc_top_left_32px_1bpp_BPP 1 + extern uint8_t const C_quarter_disc_top_left_32px_1bpp_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_disc_top_left_32px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_disc_top_left_32px_1bpp_BPP + +#ifndef GLYPH_quarter_disc_top_left_40px_1bpp_BPP + #define GLYPH_quarter_disc_top_left_40px_1bpp_WIDTH 40 + #define GLYPH_quarter_disc_top_left_40px_1bpp_HEIGHT 40 + #define GLYPH_quarter_disc_top_left_40px_1bpp_ISFILE false + #define GLYPH_quarter_disc_top_left_40px_1bpp_BPP 1 + extern uint8_t const C_quarter_disc_top_left_40px_1bpp_bitmap[200]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_disc_top_left_40px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_disc_top_left_40px_1bpp_BPP + +#ifndef GLYPH_quarter_disc_top_left_44px_1bpp_BPP + #define GLYPH_quarter_disc_top_left_44px_1bpp_WIDTH 44 + #define GLYPH_quarter_disc_top_left_44px_1bpp_HEIGHT 44 + #define GLYPH_quarter_disc_top_left_44px_1bpp_ISFILE false + #define GLYPH_quarter_disc_top_left_44px_1bpp_BPP 1 + extern uint8_t const C_quarter_disc_top_left_44px_1bpp_bitmap[242]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_disc_top_left_44px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_disc_top_left_44px_1bpp_BPP + +#ifndef GLYPH_radio_active_32px_BPP + #define GLYPH_radio_active_32px_WIDTH 32 + #define GLYPH_radio_active_32px_HEIGHT 32 + #define GLYPH_radio_active_32px_ISFILE true + #define GLYPH_radio_active_32px_BPP 1 + extern uint8_t const C_radio_active_32px_bitmap[82]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_radio_active_32px; + #endif // HAVE_NBGL +#endif // GLYPH_radio_active_32px_BPP + +#ifndef GLYPH_radio_active_40_BPP + #define GLYPH_radio_active_40_WIDTH 40 + #define GLYPH_radio_active_40_HEIGHT 40 + #define GLYPH_radio_active_40_ISFILE true + #define GLYPH_radio_active_40_BPP 1 + extern uint8_t const C_radio_active_40_bitmap[117]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_radio_active_40; + #endif // HAVE_NBGL +#endif // GLYPH_radio_active_40_BPP + +#ifndef GLYPH_radio_inactive_32px_BPP + #define GLYPH_radio_inactive_32px_WIDTH 32 + #define GLYPH_radio_inactive_32px_HEIGHT 32 + #define GLYPH_radio_inactive_32px_ISFILE true + #define GLYPH_radio_inactive_32px_BPP 1 + extern uint8_t const C_radio_inactive_32px_bitmap[82]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_radio_inactive_32px; + #endif // HAVE_NBGL +#endif // GLYPH_radio_inactive_32px_BPP + +#ifndef GLYPH_radio_inactive_40_BPP + #define GLYPH_radio_inactive_40_WIDTH 40 + #define GLYPH_radio_inactive_40_HEIGHT 40 + #define GLYPH_radio_inactive_40_ISFILE true + #define GLYPH_radio_inactive_40_BPP 1 + extern uint8_t const C_radio_inactive_40_bitmap[112]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_radio_inactive_40; + #endif // HAVE_NBGL +#endif // GLYPH_radio_inactive_40_BPP + +#ifndef GLYPH_round_24px_BPP + #define GLYPH_round_24px_WIDTH 24 + #define GLYPH_round_24px_HEIGHT 24 + #define GLYPH_round_24px_ISFILE true + #define GLYPH_round_24px_BPP 1 + extern uint8_t const C_round_24px_bitmap[47]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_round_24px; + #endif // HAVE_NBGL +#endif // GLYPH_round_24px_BPP + +#ifndef GLYPH_switch_60_40_BPP + #define GLYPH_switch_60_40_WIDTH 60 + #define GLYPH_switch_60_40_HEIGHT 40 + #define GLYPH_switch_60_40_ISFILE false + #define GLYPH_switch_60_40_BPP 1 + extern uint8_t const C_switch_60_40_bitmap[300]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_switch_60_40; + #endif // HAVE_NBGL +#endif // GLYPH_switch_60_40_BPP + +#ifndef GLYPH_Check_Circle_64px_BPP + #define GLYPH_Check_Circle_64px_WIDTH 64 + #define GLYPH_Check_Circle_64px_HEIGHT 64 + #define GLYPH_Check_Circle_64px_ISFILE true + #define GLYPH_Check_Circle_64px_BPP 4 + extern uint8_t const C_Check_Circle_64px_bitmap[571]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Check_Circle_64px; + #endif // HAVE_NBGL +#endif // GLYPH_Check_Circle_64px_BPP + +#ifndef GLYPH_Denied_Circle_64px_BPP + #define GLYPH_Denied_Circle_64px_WIDTH 64 + #define GLYPH_Denied_Circle_64px_HEIGHT 64 + #define GLYPH_Denied_Circle_64px_ISFILE true + #define GLYPH_Denied_Circle_64px_BPP 4 + extern uint8_t const C_Denied_Circle_64px_bitmap[568]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Denied_Circle_64px; + #endif // HAVE_NBGL +#endif // GLYPH_Denied_Circle_64px_BPP + +#ifndef GLYPH_Important_Circle_64px_BPP + #define GLYPH_Important_Circle_64px_WIDTH 64 + #define GLYPH_Important_Circle_64px_HEIGHT 64 + #define GLYPH_Important_Circle_64px_ISFILE true + #define GLYPH_Important_Circle_64px_BPP 4 + extern uint8_t const C_Important_Circle_64px_bitmap[514]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Important_Circle_64px; + #endif // HAVE_NBGL +#endif // GLYPH_Important_Circle_64px_BPP + +#ifndef GLYPH_Review_64px_BPP + #define GLYPH_Review_64px_WIDTH 64 + #define GLYPH_Review_64px_HEIGHT 64 + #define GLYPH_Review_64px_ISFILE true + #define GLYPH_Review_64px_BPP 4 + extern uint8_t const C_Review_64px_bitmap[219]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Review_64px; + #endif // HAVE_NBGL +#endif // GLYPH_Review_64px_BPP + +#ifndef GLYPH_SecurityShield_64px_BPP + #define GLYPH_SecurityShield_64px_WIDTH 64 + #define GLYPH_SecurityShield_64px_HEIGHT 64 + #define GLYPH_SecurityShield_64px_ISFILE true + #define GLYPH_SecurityShield_64px_BPP 4 + extern uint8_t const C_SecurityShield_64px_bitmap[610]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_SecurityShield_64px; + #endif // HAVE_NBGL +#endif // GLYPH_SecurityShield_64px_BPP + +#ifndef GLYPH_Warning_64px_BPP + #define GLYPH_Warning_64px_WIDTH 64 + #define GLYPH_Warning_64px_HEIGHT 64 + #define GLYPH_Warning_64px_ISFILE true + #define GLYPH_Warning_64px_BPP 4 + extern uint8_t const C_Warning_64px_bitmap[359]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Warning_64px; + #endif // HAVE_NBGL +#endif // GLYPH_Warning_64px_BPP + +#ifndef GLYPH_left_half_64px_BPP + #define GLYPH_left_half_64px_WIDTH 24 + #define GLYPH_left_half_64px_HEIGHT 64 + #define GLYPH_left_half_64px_ISFILE false + #define GLYPH_left_half_64px_BPP 1 + extern uint8_t const C_left_half_64px_bitmap[192]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_left_half_64px; + #endif // HAVE_NBGL +#endif // GLYPH_left_half_64px_BPP + +#ifndef GLYPH_Back_40px_BPP + #define GLYPH_Back_40px_WIDTH 40 + #define GLYPH_Back_40px_HEIGHT 40 + #define GLYPH_Back_40px_ISFILE true + #define GLYPH_Back_40px_BPP 4 + extern uint8_t const C_Back_40px_bitmap[148]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Back_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Back_40px_BPP + +#ifndef GLYPH_Check_40px_BPP + #define GLYPH_Check_40px_WIDTH 40 + #define GLYPH_Check_40px_HEIGHT 40 + #define GLYPH_Check_40px_ISFILE true + #define GLYPH_Check_40px_BPP 1 + extern uint8_t const C_Check_40px_bitmap[92]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Check_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Check_40px_BPP + +#ifndef GLYPH_Check_Circle_40px_BPP + #define GLYPH_Check_Circle_40px_WIDTH 40 + #define GLYPH_Check_Circle_40px_HEIGHT 40 + #define GLYPH_Check_Circle_40px_ISFILE true + #define GLYPH_Check_Circle_40px_BPP 4 + extern uint8_t const C_Check_Circle_40px_bitmap[339]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Check_Circle_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Check_Circle_40px_BPP + +#ifndef GLYPH_Chevron_40px_BPP + #define GLYPH_Chevron_40px_WIDTH 40 + #define GLYPH_Chevron_40px_HEIGHT 40 + #define GLYPH_Chevron_40px_ISFILE true + #define GLYPH_Chevron_40px_BPP 4 + extern uint8_t const C_Chevron_40px_bitmap[100]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Chevron_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Chevron_40px_BPP + +#ifndef GLYPH_Chevron_Back_40px_BPP + #define GLYPH_Chevron_Back_40px_WIDTH 40 + #define GLYPH_Chevron_Back_40px_HEIGHT 40 + #define GLYPH_Chevron_Back_40px_ISFILE true + #define GLYPH_Chevron_Back_40px_BPP 4 + extern uint8_t const C_Chevron_Back_40px_bitmap[126]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Chevron_Back_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Chevron_Back_40px_BPP + +#ifndef GLYPH_Chevron_Next_40px_BPP + #define GLYPH_Chevron_Next_40px_WIDTH 40 + #define GLYPH_Chevron_Next_40px_HEIGHT 40 + #define GLYPH_Chevron_Next_40px_ISFILE true + #define GLYPH_Chevron_Next_40px_BPP 4 + extern uint8_t const C_Chevron_Next_40px_bitmap[121]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Chevron_Next_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Chevron_Next_40px_BPP + +#ifndef GLYPH_Close_40px_BPP + #define GLYPH_Close_40px_WIDTH 40 + #define GLYPH_Close_40px_HEIGHT 40 + #define GLYPH_Close_40px_ISFILE true + #define GLYPH_Close_40px_BPP 4 + extern uint8_t const C_Close_40px_bitmap[141]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Close_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Close_40px_BPP + +#ifndef GLYPH_Denied_Circle_40px_BPP + #define GLYPH_Denied_Circle_40px_WIDTH 40 + #define GLYPH_Denied_Circle_40px_HEIGHT 40 + #define GLYPH_Denied_Circle_40px_ISFILE true + #define GLYPH_Denied_Circle_40px_BPP 4 + extern uint8_t const C_Denied_Circle_40px_bitmap[326]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Denied_Circle_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Denied_Circle_40px_BPP + +#ifndef GLYPH_Erase_40px_BPP + #define GLYPH_Erase_40px_WIDTH 40 + #define GLYPH_Erase_40px_HEIGHT 40 + #define GLYPH_Erase_40px_ISFILE true + #define GLYPH_Erase_40px_BPP 1 + extern uint8_t const C_Erase_40px_bitmap[120]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Erase_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Erase_40px_BPP + +#ifndef GLYPH_Info_40px_BPP + #define GLYPH_Info_40px_WIDTH 40 + #define GLYPH_Info_40px_HEIGHT 40 + #define GLYPH_Info_40px_ISFILE true + #define GLYPH_Info_40px_BPP 4 + extern uint8_t const C_Info_40px_bitmap[57]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Info_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Info_40px_BPP + +#ifndef GLYPH_Maj_40px_BPP + #define GLYPH_Maj_40px_WIDTH 40 + #define GLYPH_Maj_40px_HEIGHT 40 + #define GLYPH_Maj_40px_ISFILE true + #define GLYPH_Maj_40px_BPP 1 + extern uint8_t const C_Maj_40px_bitmap[89]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Maj_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Maj_40px_BPP + +#ifndef GLYPH_Maj_Lock_40px_BPP + #define GLYPH_Maj_Lock_40px_WIDTH 40 + #define GLYPH_Maj_Lock_40px_HEIGHT 40 + #define GLYPH_Maj_Lock_40px_ISFILE true + #define GLYPH_Maj_Lock_40px_BPP 1 + extern uint8_t const C_Maj_Lock_40px_bitmap[85]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Maj_Lock_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Maj_Lock_40px_BPP + +#ifndef GLYPH_Next_40px_BPP + #define GLYPH_Next_40px_WIDTH 40 + #define GLYPH_Next_40px_HEIGHT 40 + #define GLYPH_Next_40px_ISFILE true + #define GLYPH_Next_40px_BPP 4 + extern uint8_t const C_Next_40px_bitmap[142]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Next_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Next_40px_BPP + +#ifndef GLYPH_Plus_40px_BPP + #define GLYPH_Plus_40px_WIDTH 40 + #define GLYPH_Plus_40px_HEIGHT 40 + #define GLYPH_Plus_40px_ISFILE true + #define GLYPH_Plus_40px_BPP 4 + extern uint8_t const C_Plus_40px_bitmap[62]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Plus_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Plus_40px_BPP + +#ifndef GLYPH_QRCode_40px_BPP + #define GLYPH_QRCode_40px_WIDTH 40 + #define GLYPH_QRCode_40px_HEIGHT 40 + #define GLYPH_QRCode_40px_ISFILE true + #define GLYPH_QRCode_40px_BPP 4 + extern uint8_t const C_QRCode_40px_bitmap[161]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_QRCode_40px; + #endif // HAVE_NBGL +#endif // GLYPH_QRCode_40px_BPP + +#ifndef GLYPH_Settings_40px_BPP + #define GLYPH_Settings_40px_WIDTH 40 + #define GLYPH_Settings_40px_HEIGHT 40 + #define GLYPH_Settings_40px_ISFILE true + #define GLYPH_Settings_40px_BPP 4 + extern uint8_t const C_Settings_40px_bitmap[411]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Settings_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Settings_40px_BPP + +#ifndef GLYPH_Space_40px_BPP + #define GLYPH_Space_40px_WIDTH 40 + #define GLYPH_Space_40px_HEIGHT 40 + #define GLYPH_Space_40px_ISFILE true + #define GLYPH_Space_40px_BPP 1 + extern uint8_t const C_Space_40px_bitmap[44]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Space_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Space_40px_BPP + +#ifndef GLYPH_Warning_40px_BPP + #define GLYPH_Warning_40px_WIDTH 40 + #define GLYPH_Warning_40px_HEIGHT 40 + #define GLYPH_Warning_40px_ISFILE true + #define GLYPH_Warning_40px_BPP 4 + extern uint8_t const C_Warning_40px_bitmap[239]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Warning_40px; + #endif // HAVE_NBGL +#endif // GLYPH_Warning_40px_BPP + +#ifndef GLYPH_app_boilerplate_40px_BPP + #define GLYPH_app_boilerplate_40px_WIDTH 40 + #define GLYPH_app_boilerplate_40px_HEIGHT 40 + #define GLYPH_app_boilerplate_40px_ISFILE true + #define GLYPH_app_boilerplate_40px_BPP 4 + extern uint8_t const C_app_boilerplate_40px_bitmap[236]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_app_boilerplate_40px; + #endif // HAVE_NBGL +#endif // GLYPH_app_boilerplate_40px_BPP + diff --git a/ledger_secure_sdk_sys/src/c/glyphs_stax_15/glyphs.c b/ledger_secure_sdk_sys/src/c/glyphs_stax_15/glyphs.c new file mode 100644 index 00000000..c5535e06 --- /dev/null +++ b/ledger_secure_sdk_sys/src/c/glyphs_stax_15/glyphs.c @@ -0,0 +1,785 @@ +#include "glyphs.h" +#ifdef HAVE_NBGL +#include "nbgl_types.h" +#endif // HAVE_NBGL + +uint8_t const C_Device_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x01, 0x4a, 0x00, 0x00, 0x48, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x63, 0x60, 0xa0, 0x17, 0xe0, 0x7f, 0x00, 0xa6, 0xd8, 0xff, 0x03, 0x01, + 0x90, 0x29, 0x0f, 0xa2, 0x7f, 0x30, 0x30, 0xd8, 0x83, 0xe8, 0x3f, 0x0c, 0x0c, 0xf5, 0x20, 0xfa, + 0x1f, 0x82, 0xfe, 0x0f, 0x52, 0x0c, 0x24, 0xfe, 0x80, 0x68, 0x7b, 0x04, 0xfd, 0x03, 0x44, 0xcb, + 0x0f, 0x3d, 0xfa, 0x3f, 0x18, 0x10, 0xa6, 0xe9, 0x0c, 0x00, 0x9b, 0x33, 0x33, 0x98, 0x00, 0x02, + 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Device_64px = { GLYPH_Device_64px_WIDTH, GLYPH_Device_64px_HEIGHT, NBGL_BPP_1, GLYPH_Device_64px_ISFILE, C_Device_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Message_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x01, 0x60, 0x00, 0x00, 0x5e, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x63, 0x60, 0xa0, 0x16, 0xa8, 0xff, 0xff, 0xff, 0xff, 0x07, 0x28, 0xfd, + 0x07, 0x4a, 0xff, 0x43, 0xa3, 0xff, 0x33, 0x30, 0x40, 0xe4, 0xa0, 0xb4, 0x3d, 0x94, 0x96, 0x47, + 0xa6, 0xe5, 0x6c, 0x40, 0xf4, 0x8f, 0x9a, 0x81, 0xa6, 0x21, 0xee, 0x21, 0x48, 0x83, 0xfc, 0x75, + 0x1f, 0x4a, 0xff, 0xc7, 0x43, 0x33, 0x40, 0xfc, 0x0b, 0xa6, 0xe5, 0x71, 0xd0, 0xa0, 0xf0, 0xf8, + 0x0f, 0x0d, 0xa7, 0xff, 0x90, 0x70, 0x43, 0xa1, 0xff, 0x40, 0xe9, 0x0f, 0x54, 0x8b, 0x35, 0x00, + 0x36, 0xda, 0xd9, 0x24, 0x00, 0x02, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Message_64px = { GLYPH_Message_64px_WIDTH, GLYPH_Message_64px_HEIGHT, NBGL_BPP_1, GLYPH_Message_64px_ISFILE, C_Message_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Next32px_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x07, 0xc0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x1e, 0xf0, 0x00, 0x00, 0x3c, 0x78, 0x00, + 0x00, 0x78, 0x3c, 0x00, 0x00, 0xf0, 0x1e, 0x00, 0x01, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Next32px = { GLYPH_Next32px_WIDTH, GLYPH_Next32px_HEIGHT, NBGL_BPP_1, GLYPH_Next32px_ISFILE, C_Next32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_QRcode32px_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, + 0x1f, 0xf9, 0xcc, 0x3c, 0x1f, 0xf9, 0xcc, 0x3c, 0x1f, 0xf9, 0xcf, 0x3c, 0x1c, 0x39, 0xcf, 0x3c, + 0x1d, 0xb9, 0xc3, 0xf0, 0x1d, 0xb9, 0xc3, 0xf0, 0x1c, 0x39, 0xcc, 0x3c, 0x1f, 0xf9, 0xcc, 0x3c, + 0x1f, 0xf9, 0xcc, 0xcc, 0x1f, 0xf9, 0xcc, 0xcc, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, + 0x00, 0x01, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x1f, 0xf9, 0xcf, 0xfc, 0x1f, 0xf9, 0xcf, 0xfc, + 0x1f, 0xf9, 0xcf, 0xfc, 0x1c, 0x39, 0xce, 0x1c, 0x1d, 0xb9, 0xce, 0xdc, 0x1d, 0xb9, 0xce, 0xdc, + 0x1c, 0x39, 0xce, 0x1c, 0x1f, 0xf9, 0xcf, 0xfc, 0x1f, 0xf9, 0xcf, 0xfc, 0x1f, 0xf9, 0xcf, 0xfc, + 0x00, 0x01, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_QRcode32px = { GLYPH_QRcode32px_WIDTH, GLYPH_QRcode32px_HEIGHT, NBGL_BPP_1, GLYPH_QRcode32px_ISFILE, C_QRcode32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_SecurityShield64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x01, 0xb8, 0x00, 0x00, 0xb6, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x85, 0x91, 0x4d, 0x0a, 0xc4, 0x20, 0x0c, 0x85, 0x9f, 0x64, 0xe1, 0xd2, + 0x23, 0x78, 0x14, 0x6f, 0xd6, 0x7a, 0x34, 0x8f, 0xe2, 0x11, 0x9c, 0x5d, 0x17, 0x85, 0x4c, 0x52, + 0xfb, 0x84, 0x0e, 0x03, 0x0d, 0xc8, 0x27, 0x21, 0xbf, 0x2f, 0xc0, 0x8b, 0x25, 0xd5, 0x8b, 0x59, + 0xf5, 0x70, 0x16, 0x9d, 0x0e, 0x67, 0x35, 0xee, 0xc6, 0x6e, 0xdc, 0x20, 0x57, 0xc0, 0x69, 0x29, + 0xf6, 0x60, 0x7f, 0xb1, 0xc0, 0xe0, 0x3e, 0x0b, 0x0c, 0xc3, 0x73, 0x1a, 0xc4, 0x99, 0x3b, 0xc4, + 0x73, 0xe2, 0x98, 0x94, 0x03, 0xd1, 0x19, 0x4e, 0xc4, 0x86, 0xab, 0xc8, 0xe4, 0x76, 0xb3, 0x20, + 0xd5, 0xa0, 0xda, 0xc8, 0x5c, 0x9f, 0x4c, 0x2d, 0xa1, 0x74, 0x69, 0xd1, 0xb8, 0x3b, 0x7b, 0x86, + 0x1a, 0x85, 0x1c, 0x19, 0x1f, 0x63, 0x20, 0x8f, 0x49, 0xfc, 0x90, 0x7e, 0x8f, 0x63, 0xde, 0xac, + 0xc3, 0xba, 0xab, 0x0f, 0xfb, 0xfe, 0x9d, 0xa7, 0xac, 0xb9, 0x9f, 0x7b, 0x9c, 0x6b, 0x4f, 0xee, + 0xbd, 0x74, 0xb8, 0x75, 0xa1, 0x4e, 0xd4, 0x8d, 0x3a, 0x2e, 0x5d, 0xa9, 0x33, 0x75, 0xe7, 0x1d, + 0x78, 0x17, 0xde, 0x89, 0x77, 0x7b, 0xb1, 0x2f, 0xd7, 0xe1, 0xa4, 0xc8, 0x00, 0x02, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_SecurityShield64px = { GLYPH_SecurityShield64px_WIDTH, GLYPH_SecurityShield64px_HEIGHT, NBGL_BPP_1, GLYPH_SecurityShield64px_ISFILE, C_SecurityShield64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_backspace32px_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0x80, + 0x01, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0x80, 0x01, 0xf7, 0xef, 0x80, + 0x01, 0xe3, 0xc7, 0x80, 0x01, 0xf1, 0x8f, 0x80, 0x01, 0xf8, 0x1f, 0x80, 0x01, 0xfc, 0x3f, 0x80, + 0x01, 0xfc, 0x3f, 0x80, 0x01, 0xf8, 0x1f, 0x80, 0x01, 0xf1, 0x8f, 0x80, 0x01, 0xe3, 0xc7, 0x80, + 0x01, 0xf7, 0xef, 0x80, 0x01, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0x80, + 0x01, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xfe, 0x00, + 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0xe0, 0x00, + 0x00, 0x03, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_backspace32px = { GLYPH_backspace32px_WIDTH, GLYPH_backspace32px_HEIGHT, NBGL_BPP_1, GLYPH_backspace32px_ISFILE, C_backspace32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_check32px_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, + 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x03, 0xe0, 0x00, + 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x3e, 0x00, + 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x0f, 0x80, + 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x00, 0x01, 0xf0, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_check32px = { GLYPH_check32px_WIDTH, GLYPH_check32px_HEIGHT, NBGL_BPP_1, GLYPH_check32px_ISFILE, C_check32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_cross32px_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x80, 0x01, 0xe0, + 0x03, 0xc0, 0x03, 0xc0, 0x01, 0xe0, 0x07, 0x80, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x78, 0x1e, 0x00, + 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x1e, 0x78, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0xe0, 0x00, + 0x00, 0x03, 0xc0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x1e, 0x78, 0x00, + 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x01, 0xe0, 0x07, 0x80, + 0x03, 0xc0, 0x03, 0xc0, 0x07, 0x80, 0x01, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_cross32px = { GLYPH_cross32px_WIDTH, GLYPH_cross32px_HEIGHT, NBGL_BPP_1, GLYPH_cross32px_ISFILE, C_cross32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_info_i_32px_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe7, 0xff, 0xc0, 0x01, 0xe7, 0xff, 0xc0, + 0x01, 0xe7, 0xff, 0xc0, 0x01, 0xe7, 0xff, 0xc0, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_info_i_32px = { GLYPH_info_i_32px_WIDTH, GLYPH_info_i_32px_HEIGHT, NBGL_BPP_1, GLYPH_info_i_32px_ISFILE, C_info_i_32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_leftArrow32px_bitmap[] = { + 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x03, 0x80, 0x00, 0x18, 0x03, 0x80, 0x30, 0x3c, 0x03, 0x80, 0x78, 0x1e, 0x03, 0x80, 0xf0, + 0x0f, 0x03, 0x81, 0xe0, 0x07, 0x83, 0x83, 0xc0, 0x03, 0xc3, 0x87, 0x80, 0x01, 0xe3, 0x8f, 0x00, + 0x00, 0xf3, 0x9e, 0x00, 0x00, 0x7b, 0xbc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xf0, 0x00, + 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_leftArrow32px = { GLYPH_leftArrow32px_WIDTH, GLYPH_leftArrow32px_HEIGHT, NBGL_BPP_1, GLYPH_leftArrow32px_ISFILE, C_leftArrow32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_16px_1bpp_bitmap[] = { + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x70, 0x00, 0x30, 0x00, + 0x18, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x03, 0xc0, 0x00, 0xf8, 0x00, 0x7f, 0x00, 0x0f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_16px_1bpp = { GLYPH_quarter_circle_16px_1bpp_WIDTH, GLYPH_quarter_circle_16px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_16px_1bpp_ISFILE, C_quarter_circle_16px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_20px_1bpp_bitmap[] = { + 0xc0, 0x00, 0x0c, 0x00, 0x00, 0xc0, 0x00, 0x0c, 0x00, 0x00, 0x60, 0x00, 0x06, 0x00, 0x00, 0x60, + 0x00, 0x07, 0x00, 0x00, 0x30, 0x00, 0x03, 0x80, 0x00, 0x18, 0x00, 0x00, 0xc0, 0x00, 0x0e, 0x00, + 0x00, 0x70, 0x00, 0x03, 0x80, 0x00, 0x1e, 0x00, 0x00, 0x78, 0x00, 0x03, 0xf0, 0x00, 0x0f, 0xf0, + 0x00, 0x0f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_20px_1bpp = { GLYPH_quarter_circle_20px_1bpp_WIDTH, GLYPH_quarter_circle_20px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_20px_1bpp_ISFILE, C_quarter_circle_20px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_24px_1bpp_bitmap[] = { + 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x60, + 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0xff, 0x00, 0x00, 0x1f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_24px_1bpp = { GLYPH_quarter_circle_24px_1bpp_WIDTH, GLYPH_quarter_circle_24px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_24px_1bpp_ISFILE, C_quarter_circle_24px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_32px_1bpp_bitmap[] = { + 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0xf0, 0x00, + 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x3f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_32px_1bpp = { GLYPH_quarter_circle_32px_1bpp_WIDTH, GLYPH_quarter_circle_32px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_32px_1bpp_ISFILE, C_quarter_circle_32px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_40px_1bpp_bitmap[] = { + 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_40px_1bpp = { GLYPH_quarter_circle_40px_1bpp_WIDTH, GLYPH_quarter_circle_40px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_40px_1bpp_ISFILE, C_quarter_circle_40px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_48px_1bpp_bitmap[] = { + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_48px_1bpp = { GLYPH_quarter_circle_48px_1bpp_WIDTH, GLYPH_quarter_circle_48px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_48px_1bpp_ISFILE, C_quarter_circle_48px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_circle_8px_1bpp_bitmap[] = { + 0xc0, 0xc0, 0x60, 0x60, 0x30, 0x1c, 0x0f, 0x03, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_circle_8px_1bpp = { GLYPH_quarter_circle_8px_1bpp_WIDTH, GLYPH_quarter_circle_8px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_circle_8px_1bpp_ISFILE, C_quarter_circle_8px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_round_16px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x3f, 0xff, + 0x1f, 0xff, 0x1f, 0xff, 0x0f, 0xff, 0x07, 0xff, 0x03, 0xff, 0x00, 0xff, 0x00, 0x7f, 0x00, 0x0f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_round_16px_1bpp = { GLYPH_quarter_round_16px_1bpp_WIDTH, GLYPH_quarter_round_16px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_round_16px_1bpp_ISFILE, C_quarter_round_16px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_round_20px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0x7f, + 0xff, 0xf7, 0xff, 0xff, 0x3f, 0xff, 0xf3, 0xff, 0xff, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x0f, 0xff, + 0xf0, 0x7f, 0xff, 0x03, 0xff, 0xf0, 0x1f, 0xff, 0x00, 0x7f, 0xf0, 0x03, 0xff, 0x00, 0x0f, 0xf0, + 0x00, 0x0f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_round_20px_1bpp = { GLYPH_quarter_round_20px_1bpp_WIDTH, GLYPH_quarter_round_20px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_round_20px_1bpp_ISFILE, C_quarter_round_20px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_round_24px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0xff, 0xff, 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, + 0xff, 0x1f, 0xff, 0xff, 0x0f, 0xff, 0xff, 0x0f, 0xff, 0xff, 0x07, 0xff, 0xff, 0x03, 0xff, 0xff, + 0x01, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xff, 0x00, 0x3f, 0xff, 0x00, 0x0f, 0xff, 0x00, + 0x07, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x1f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_round_24px_1bpp = { GLYPH_quarter_round_24px_1bpp_WIDTH, GLYPH_quarter_round_24px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_round_24px_1bpp_ISFILE, C_quarter_round_24px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_round_32px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, + 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, + 0x1f, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, + 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, + 0x00, 0x1f, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x3f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_round_32px_1bpp = { GLYPH_quarter_round_32px_1bpp_WIDTH, GLYPH_quarter_round_32px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_round_32px_1bpp_ISFILE, C_quarter_round_32px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_round_40px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0x07, + 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7f, 0xff, + 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, + 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x00, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, + 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_round_40px_1bpp = { GLYPH_quarter_round_40px_1bpp_WIDTH, GLYPH_quarter_round_40px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_round_40px_1bpp_ISFILE, C_quarter_round_40px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_round_48px_1bpp_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x3f, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_round_48px_1bpp = { GLYPH_quarter_round_48px_1bpp_WIDTH, GLYPH_quarter_round_48px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_round_48px_1bpp_ISFILE, C_quarter_round_48px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_quarter_round_8px_1bpp_bitmap[] = { + 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x1f, 0x0f, 0x03, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_quarter_round_8px_1bpp = { GLYPH_quarter_round_8px_1bpp_WIDTH, GLYPH_quarter_round_8px_1bpp_HEIGHT, NBGL_BPP_1, GLYPH_quarter_round_8px_1bpp_ISFILE, C_quarter_round_8px_1bpp_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_radio_active_32px_bitmap[] = { + 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xc0, + 0x07, 0xff, 0xff, 0xe0, 0x0f, 0xf8, 0x1f, 0xf0, 0x1f, 0xc0, 0x03, 0xf8, 0x1f, 0x80, 0x01, 0xf8, + 0x3f, 0x00, 0x00, 0xfc, 0x7e, 0x00, 0x00, 0x7e, 0x7c, 0x03, 0xc0, 0x3e, 0x7c, 0x0f, 0xf0, 0x3e, + 0xfc, 0x1f, 0xf8, 0x3f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x3f, 0xfc, 0x1f, 0xf8, 0x3f, 0xfc, 0x1f, + 0xf8, 0x3f, 0xfc, 0x1f, 0xf8, 0x3f, 0xfc, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xfc, 0x1f, 0xf8, 0x3f, + 0x7c, 0x0f, 0xf0, 0x3e, 0x7c, 0x03, 0xc0, 0x3e, 0x7e, 0x00, 0x00, 0x7e, 0x3f, 0x00, 0x00, 0xfc, + 0x1f, 0x80, 0x01, 0xf8, 0x1f, 0xc0, 0x03, 0xf8, 0x0f, 0xf8, 0x1f, 0xf0, 0x07, 0xff, 0xff, 0xe0, + 0x03, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x0f, 0xf0, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_radio_active_32px = { GLYPH_radio_active_32px_WIDTH, GLYPH_radio_active_32px_HEIGHT, NBGL_BPP_1, GLYPH_radio_active_32px_ISFILE, C_radio_active_32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_radio_inactive_32px_bitmap[] = { + 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xc0, + 0x07, 0xff, 0xff, 0xe0, 0x0f, 0xf8, 0x1f, 0xf0, 0x1f, 0xc0, 0x03, 0xf8, 0x1f, 0x80, 0x01, 0xf8, + 0x3f, 0x00, 0x00, 0xfc, 0x7e, 0x00, 0x00, 0x7e, 0x7c, 0x00, 0x00, 0x3e, 0x7c, 0x00, 0x00, 0x3e, + 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x1f, + 0xf8, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x3f, + 0x7c, 0x00, 0x00, 0x3e, 0x7c, 0x00, 0x00, 0x3e, 0x7e, 0x00, 0x00, 0x7e, 0x3f, 0x00, 0x00, 0xfc, + 0x1f, 0x80, 0x01, 0xf8, 0x1f, 0xc0, 0x03, 0xf8, 0x0f, 0xf8, 0x1f, 0xf0, 0x07, 0xff, 0xff, 0xe0, + 0x03, 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x0f, 0xf0, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_radio_inactive_32px = { GLYPH_radio_inactive_32px_WIDTH, GLYPH_radio_inactive_32px_HEIGHT, NBGL_BPP_1, GLYPH_radio_inactive_32px_ISFILE, C_radio_inactive_32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_rightArrow32px_bitmap[] = { + 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x0f, 0xe0, 0x00, + 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x7b, 0xbc, 0x00, 0x00, 0xf3, 0x9e, 0x00, + 0x01, 0xe3, 0x8f, 0x00, 0x03, 0xc3, 0x87, 0x80, 0x07, 0x83, 0x83, 0xc0, 0x0f, 0x03, 0x81, 0xe0, + 0x1e, 0x03, 0x80, 0xf0, 0x3c, 0x03, 0x80, 0x78, 0x18, 0x03, 0x80, 0x30, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_rightArrow32px = { GLYPH_rightArrow32px_WIDTH, GLYPH_rightArrow32px_HEIGHT, NBGL_BPP_1, GLYPH_rightArrow32px_ISFILE, C_rightArrow32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_round_24px_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xff, 0x00, 0x03, + 0xff, 0xc0, 0x07, 0xff, 0xe0, 0x07, 0xff, 0xe0, 0x0f, 0xff, 0xf0, 0x0f, 0xff, 0xf0, 0x1f, 0xff, + 0xf8, 0x1f, 0xff, 0xf8, 0x1f, 0xff, 0xf8, 0x1f, 0xff, 0xf8, 0x0f, 0xff, 0xf0, 0x0f, 0xff, 0xf0, + 0x07, 0xff, 0xe0, 0x07, 0xff, 0xe0, 0x03, 0xff, 0xc0, 0x00, 0xff, 0x00, 0x00, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_round_24px = { GLYPH_round_24px_WIDTH, GLYPH_round_24px_HEIGHT, NBGL_BPP_1, GLYPH_round_24px_ISFILE, C_round_24px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_round_check_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x01, 0xcd, 0x00, 0x00, 0xcb, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x9d, 0x91, 0xc1, 0x0d, 0xc3, 0x20, 0x0c, 0x45, 0x8d, 0x38, 0xe4, 0xc8, + 0x08, 0xee, 0x24, 0x61, 0xa5, 0x0e, 0x10, 0x25, 0x8c, 0x96, 0x51, 0x32, 0x02, 0x47, 0x0e, 0x55, + 0xdd, 0xff, 0x4d, 0x5d, 0xf5, 0x1c, 0xa4, 0xe4, 0x05, 0xfb, 0xf3, 0x65, 0x7e, 0x44, 0x6e, 0x2f, + 0x1d, 0x8e, 0x64, 0xd6, 0xc8, 0xc5, 0xec, 0xf2, 0xb2, 0x99, 0x37, 0xaa, 0xd9, 0x8b, 0xb4, 0x5e, + 0xcc, 0x65, 0xf8, 0x84, 0x30, 0xa3, 0x58, 0x4f, 0xc8, 0x21, 0x52, 0x1c, 0x28, 0x78, 0x96, 0x0e, + 0xa2, 0x96, 0x41, 0x85, 0x26, 0xa1, 0x57, 0xe5, 0x21, 0x42, 0xad, 0x3c, 0x9d, 0xbb, 0x0c, 0xbe, + 0x64, 0x4b, 0xd8, 0xac, 0x2c, 0xbd, 0xd9, 0x44, 0xf5, 0xc0, 0x21, 0xb2, 0xb6, 0x49, 0x3d, 0x41, + 0x58, 0xc0, 0x59, 0x5b, 0xea, 0x74, 0x2f, 0x64, 0x1e, 0x93, 0x30, 0x70, 0xc2, 0x60, 0xf2, 0xf8, + 0xb2, 0xb6, 0x49, 0x6d, 0x7f, 0xfb, 0xc1, 0x3e, 0x86, 0x1a, 0xd4, 0xbb, 0x3f, 0xce, 0x3b, 0xe1, + 0xa7, 0x9c, 0x03, 0xfe, 0x98, 0x63, 0x93, 0x7c, 0x71, 0xae, 0x5d, 0xd2, 0xc9, 0x39, 0x51, 0x6a, + 0x73, 0x7e, 0xf1, 0xf9, 0xe3, 0x5e, 0x71, 0xcf, 0xb8, 0x77, 0xe4, 0x10, 0xb9, 0x44, 0x4e, 0x91, + 0xdb, 0x2f, 0xc7, 0xc8, 0x35, 0x72, 0x8e, 0xdc, 0xe3, 0x3f, 0xdc, 0x5b, 0x1f, 0x4f, 0xb1, 0x80, + 0x52, 0x00, 0x02, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_round_check_64px = { GLYPH_round_check_64px_WIDTH, GLYPH_round_check_64px_HEIGHT, NBGL_BPP_1, GLYPH_round_check_64px_ISFILE, C_round_check_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_round_cross_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x01, 0xc1, 0x00, 0x00, 0xbf, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x9d, 0x91, 0xc1, 0x0d, 0xc3, 0x20, 0x0c, 0x45, 0x8d, 0x38, 0x70, 0xf4, + 0x08, 0x6c, 0x52, 0x16, 0xab, 0x12, 0x46, 0x63, 0x14, 0x46, 0xe0, 0xc8, 0x21, 0x8a, 0xfb, 0x4d, + 0xf2, 0x5b, 0xf5, 0x1a, 0xa4, 0xe8, 0x21, 0xfb, 0xdb, 0xd8, 0x3f, 0x22, 0x8f, 0x4f, 0x9e, 0x0b, + 0xc1, 0xac, 0x3a, 0x93, 0x59, 0x5f, 0x61, 0xb3, 0x95, 0x28, 0x66, 0x87, 0xd3, 0x86, 0xda, 0x92, + 0xe1, 0x0a, 0x61, 0x44, 0xb0, 0x34, 0xc8, 0x21, 0xca, 0x28, 0x50, 0x7c, 0x69, 0x80, 0x88, 0x45, + 0x30, 0x43, 0x13, 0x90, 0x2b, 0x5e, 0xeb, 0xda, 0x20, 0x52, 0xc1, 0x2d, 0xd6, 0xd0, 0x36, 0x91, + 0x77, 0x6a, 0xb1, 0xbf, 0x90, 0xd2, 0x9e, 0x06, 0x44, 0x33, 0x0d, 0xed, 0x19, 0x8c, 0x33, 0x37, + 0x67, 0x38, 0x4a, 0xcd, 0xde, 0xe2, 0xdc, 0xd1, 0x2c, 0x0c, 0xd9, 0x4f, 0x51, 0x67, 0x39, 0x2e, + 0x62, 0xee, 0x45, 0x1d, 0xff, 0x64, 0x9c, 0xba, 0xab, 0xee, 0xee, 0xc3, 0xbe, 0xbf, 0x77, 0xee, + 0x77, 0x39, 0x07, 0xe7, 0xe2, 0x9c, 0x9c, 0x9b, 0x7b, 0x70, 0x2f, 0xee, 0xc9, 0xbd, 0xe9, 0x03, + 0x7d, 0xa1, 0x4f, 0xf4, 0xed, 0xeb, 0x23, 0x7d, 0xa5, 0xcf, 0xf4, 0x9d, 0xff, 0xe1, 0xd9, 0xf9, + 0x00, 0xbe, 0x14, 0xe3, 0xea, 0x00, 0x02, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_round_cross_64px = { GLYPH_round_cross_64px_WIDTH, GLYPH_round_cross_64px_HEIGHT, NBGL_BPP_1, GLYPH_round_cross_64px_ISFILE, C_round_cross_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_round_warning_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x01, 0xa9, 0x00, 0x00, 0xa7, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x9d, 0x91, 0x51, 0x0a, 0x83, 0x30, 0x10, 0x44, 0x0d, 0x7e, 0xf8, 0x99, + 0x23, 0xe4, 0x26, 0xcd, 0xc5, 0x8a, 0xe4, 0x68, 0x7a, 0x93, 0x1e, 0x21, 0xfe, 0xf9, 0x21, 0x4c, + 0x67, 0x37, 0x19, 0x85, 0x96, 0x52, 0x30, 0x60, 0x9e, 0xec, 0xce, 0x26, 0xbb, 0x93, 0x61, 0xb8, + 0xbd, 0xd2, 0xee, 0x08, 0x40, 0x31, 0x4e, 0xc0, 0xcb, 0xc3, 0x80, 0x27, 0x32, 0x70, 0x18, 0x51, + 0x23, 0x5c, 0xc6, 0x5f, 0x0a, 0x47, 0x06, 0xf3, 0x42, 0x39, 0x45, 0x89, 0x05, 0x91, 0xdf, 0x54, + 0x49, 0xc6, 0x46, 0x32, 0x51, 0x13, 0x98, 0xcb, 0x56, 0x7b, 0x5c, 0x9c, 0x8d, 0xdc, 0x9e, 0xc6, + 0x87, 0x87, 0x3c, 0xe9, 0x77, 0xa5, 0x2f, 0x86, 0xc6, 0x12, 0xaa, 0x31, 0x92, 0x11, 0x6b, 0x6d, + 0xdc, 0xfe, 0xb0, 0xe9, 0x7a, 0x5d, 0x3f, 0xe7, 0xd7, 0x3d, 0x67, 0x1f, 0xea, 0x4b, 0x7d, 0x7e, + 0xf6, 0xaf, 0xb9, 0x34, 0xa7, 0xe6, 0x96, 0x0f, 0xf2, 0x45, 0x3e, 0xc9, 0xb7, 0xd3, 0x47, 0xf9, + 0x2a, 0x9f, 0xe5, 0xbb, 0xde, 0xe1, 0xde, 0x7a, 0x03, 0xc3, 0xc9, 0x88, 0xfe, 0x00, 0x02, 0x00, + 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_round_warning_64px = { GLYPH_round_warning_64px_WIDTH, GLYPH_round_warning_64px_HEIGHT, NBGL_BPP_1, GLYPH_round_warning_64px_ISFILE, C_round_warning_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_shift32px_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x07, 0x80, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x3f, 0x80, 0x00, + 0x00, 0x7f, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xe0, 0x03, 0xff, 0xff, 0xe0, + 0x03, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xe0, 0x00, 0x7f, 0xff, 0xe0, + 0x00, 0x3f, 0x80, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, + 0x00, 0x03, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_shift32px = { GLYPH_shift32px_WIDTH, GLYPH_shift32px_HEIGHT, NBGL_BPP_1, GLYPH_shift32px_ISFILE, C_shift32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_shift_lock32px_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, + 0x07, 0xff, 0xfe, 0x38, 0x0f, 0xff, 0xfe, 0x38, 0x1f, 0xff, 0xfe, 0x38, 0x3f, 0xff, 0xfe, 0x38, + 0x3f, 0xff, 0xfe, 0x38, 0x1f, 0xff, 0xfe, 0x38, 0x0f, 0xff, 0xfe, 0x38, 0x07, 0xff, 0xfe, 0x38, + 0x03, 0xf8, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_shift_lock32px = { GLYPH_shift_lock32px_WIDTH, GLYPH_shift_lock32px_HEIGHT, NBGL_BPP_1, GLYPH_shift_lock32px_ISFILE, C_shift_lock32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_space32px_bitmap[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_space32px = { GLYPH_space32px_WIDTH, GLYPH_space32px_HEIGHT, NBGL_BPP_1, GLYPH_space32px_ISFILE, C_space32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_switch_60_40_bitmap[] = { + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, + 0x3f, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, + 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, + 0xff, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, + 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, + 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, + 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, + 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0xff, + 0xff, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, 0xff, 0x00, 0xff, 0xfc, 0x3f, 0xf8, 0x00, 0x1f, + 0xfc, 0x3f, 0xf0, 0x00, 0x0f, 0xfc, 0x3f, 0xc0, 0x00, 0x03, 0xfc, 0x3f, 0x80, 0x00, 0x01, 0xfc, + 0x3f, 0x00, 0x00, 0x00, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x7c, 0x3c, + 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x3c, 0x38, 0x00, + 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, + 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, + 0x1c, 0x38, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, 0x00, 0x38, + 0x1c, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x70, 0x0f, 0x00, 0x00, 0x00, 0xf0, 0x07, + 0x00, 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x01, 0xc0, 0x03, 0xc0, 0x00, 0x03, 0xc0, 0x01, 0xf0, + 0x00, 0x0f, 0x80, 0x00, 0xf8, 0x00, 0x1f, 0x00, 0x00, 0x3f, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0xff, + 0xf8, 0x00, 0x00, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_switch_60_40 = { GLYPH_switch_60_40_WIDTH, GLYPH_switch_60_40_HEIGHT, NBGL_BPP_1, GLYPH_switch_60_40_ISFILE, C_switch_60_40_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_warning64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x01, 0xab, 0x00, 0x00, 0xa9, 0x00, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0x8d, 0xd1, 0xc1, 0x09, 0x85, 0x30, 0x0c, 0x06, 0x60, 0x8b, 0x87, 0x1e, + 0x33, 0x42, 0x46, 0xe9, 0x68, 0x75, 0x34, 0x37, 0x70, 0x85, 0x6e, 0xa0, 0x47, 0x0f, 0xc5, 0x58, + 0x93, 0xfc, 0x01, 0x85, 0x07, 0xaf, 0x97, 0x0f, 0xc4, 0x36, 0xc9, 0x9f, 0x69, 0xfa, 0xeb, 0x2c, + 0xc6, 0xec, 0x92, 0x5b, 0x5c, 0x31, 0x67, 0x97, 0x5c, 0x76, 0xeb, 0xae, 0x26, 0xd9, 0xd4, 0x2c, + 0x76, 0x9f, 0xbb, 0x59, 0x0f, 0x35, 0x49, 0x53, 0xc7, 0x2b, 0x2a, 0x5d, 0x56, 0xa7, 0x9c, 0xa6, + 0x34, 0xf5, 0x29, 0xf2, 0x98, 0x2f, 0xeb, 0x83, 0xbb, 0x59, 0x0f, 0x35, 0xc9, 0xaa, 0x66, 0xb1, + 0x3e, 0xa9, 0x9b, 0xe5, 0xe4, 0xce, 0x43, 0x69, 0x2c, 0xc3, 0x24, 0xcb, 0x4b, 0x7c, 0x8f, 0xff, + 0x70, 0x0f, 0xef, 0xe0, 0x5d, 0xd4, 0x89, 0xba, 0xe8, 0x03, 0x7d, 0xa1, 0xcf, 0xe8, 0x1b, 0x73, + 0x60, 0x2e, 0xcc, 0x89, 0xb9, 0x23, 0x07, 0xe4, 0x82, 0x9c, 0x90, 0x5b, 0xe4, 0x48, 0x9f, 0x9c, + 0x91, 0x7b, 0xec, 0x81, 0x3e, 0x7b, 0xc2, 0xde, 0x7e, 0x9f, 0x1b, 0x3a, 0x2c, 0xcc, 0x8d, 0x00, + 0x02, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_warning64px = { GLYPH_warning64px_WIDTH, GLYPH_warning64px_HEIGHT, NBGL_BPP_1, GLYPH_warning64px_ISFILE, C_warning64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_wheel32px_bitmap[] = { + 0x00, 0x07, 0xe0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x03, 0x07, 0xe0, 0xc0, 0x07, 0x8e, 0x71, 0xe0, + 0x0f, 0xfe, 0x7f, 0xf0, 0x1f, 0xfe, 0x7f, 0xf8, 0x3e, 0x78, 0x1e, 0x7c, 0x3c, 0x20, 0x04, 0x3c, + 0x1c, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, 0x70, 0x0f, 0x03, 0xc0, 0xf0, 0x0e, 0x0f, 0xf0, 0x70, + 0xfe, 0x1f, 0xf8, 0x7f, 0xfc, 0x1c, 0x38, 0x3f, 0xfc, 0x38, 0x1c, 0x3f, 0xe0, 0x38, 0x1c, 0x07, + 0xe0, 0x38, 0x1c, 0x07, 0xfc, 0x38, 0x1c, 0x3f, 0xfc, 0x1c, 0x38, 0x3f, 0xfe, 0x1f, 0xf8, 0x7f, + 0x0e, 0x0f, 0xf0, 0x70, 0x0f, 0x03, 0xc0, 0xf0, 0x0e, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, 0x38, + 0x3c, 0x20, 0x04, 0x3c, 0x3e, 0x78, 0x1e, 0x7c, 0x1f, 0xfe, 0x7f, 0xf8, 0x0f, 0xfe, 0x7f, 0xf0, + 0x07, 0x8e, 0x71, 0xe0, 0x03, 0x0f, 0xf0, 0xc0, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_wheel32px = { GLYPH_wheel32px_WIDTH, GLYPH_wheel32px_HEIGHT, NBGL_BPP_1, GLYPH_wheel32px_ISFILE, C_wheel32px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_Bitcoin_64px_bitmap[] = { + 0x40, 0x00, 0x40, 0x00, 0x21, 0x35, 0x02, 0x00, 0x33, 0x02, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xff, 0xbd, 0x55, 0xb9, 0x4e, 0x23, 0x41, 0x10, 0x6d, 0x7b, 0x3c, 0x5c, 0x46, + 0x5e, 0x2f, 0x96, 0x20, 0xc3, 0x10, 0x5b, 0x82, 0xdd, 0x6c, 0x1d, 0x2d, 0x64, 0x10, 0x81, 0x88, + 0x10, 0x01, 0x87, 0x03, 0x02, 0x84, 0x38, 0x02, 0x62, 0x90, 0x58, 0x44, 0xb0, 0x01, 0xbb, 0xf0, + 0x01, 0x26, 0xd9, 0x68, 0x03, 0x10, 0x1f, 0x00, 0xa4, 0x44, 0xfc, 0x02, 0x26, 0x34, 0x88, 0xe1, + 0x32, 0x87, 0x8d, 0xa6, 0xe8, 0xee, 0xa9, 0x3e, 0xa6, 0xa7, 0x6d, 0x13, 0x51, 0xc1, 0xa8, 0x67, + 0x5e, 0x4f, 0xd7, 0xab, 0xaa, 0x57, 0xd5, 0x00, 0x9f, 0x67, 0x57, 0x5b, 0xfd, 0x84, 0x64, 0x46, + 0x4e, 0xec, 0xa8, 0xbf, 0x99, 0x26, 0x81, 0xe5, 0x3d, 0x0b, 0x5c, 0x9b, 0x23, 0xd2, 0xdc, 0xe8, + 0x06, 0x7f, 0x88, 0x90, 0x46, 0x1b, 0x56, 0x49, 0xc8, 0x5a, 0x0d, 0xf8, 0x92, 0x18, 0xd6, 0x1b, + 0x82, 0x5f, 0xd3, 0x26, 0x1e, 0x2b, 0xea, 0xf8, 0x0a, 0x89, 0x98, 0xee, 0xe1, 0x99, 0x58, 0x6c, + 0xbd, 0xe1, 0xef, 0xfa, 0x01, 0x2f, 0xc4, 0x6a, 0x92, 0x41, 0xc9, 0x8e, 0xcb, 0x10, 0xd2, 0x76, + 0x3c, 0xde, 0x88, 0x9d, 0xc6, 0xf0, 0xa2, 0x1e, 0x8e, 0x0e, 0xc6, 0xeb, 0xe1, 0x89, 0xa0, 0x32, + 0xf2, 0x3d, 0x7f, 0xfd, 0x8f, 0x3e, 0xbf, 0x2a, 0x3a, 0x5c, 0x09, 0x15, 0x3d, 0xe0, 0x12, 0xc9, + 0x81, 0xff, 0x57, 0x7c, 0x59, 0x0e, 0xb9, 0x67, 0x74, 0x6a, 0x09, 0x3d, 0x5f, 0x9c, 0xc0, 0x1f, + 0x51, 0x11, 0xee, 0x6d, 0x5a, 0x8f, 0xa8, 0x8d, 0xbd, 0x7c, 0xc3, 0x97, 0x76, 0xad, 0x20, 0xf8, + 0xcd, 0x61, 0xeb, 0xc0, 0xf7, 0x04, 0xc9, 0x6a, 0xf8, 0x06, 0x1e, 0x49, 0x65, 0x54, 0xe3, 0xab, + 0x14, 0x94, 0x8b, 0xe0, 0xcf, 0x9f, 0x43, 0x38, 0x25, 0x27, 0xa2, 0x38, 0x3f, 0x83, 0x3a, 0x74, + 0xd0, 0x70, 0xd7, 0x68, 0x5d, 0x6e, 0x11, 0xdf, 0x01, 0x78, 0xe4, 0x8b, 0x9c, 0xc7, 0xeb, 0xe0, + 0xb0, 0x4d, 0xae, 0xc2, 0x67, 0x00, 0x1e, 0x90, 0xca, 0x22, 0xf7, 0x04, 0x40, 0x75, 0xec, 0x49, + 0x7c, 0x10, 0xe0, 0x4e, 0xc6, 0xc2, 0x12, 0xc5, 0x37, 0x15, 0xa5, 0xff, 0x2c, 0x1e, 0xe5, 0x9c, + 0x0d, 0x77, 0xc2, 0x3d, 0x2b, 0x69, 0x85, 0xe3, 0x87, 0x88, 0x7f, 0x41, 0xbc, 0x05, 0xe0, 0x9c, + 0xfd, 0x94, 0xe0, 0xc7, 0x1d, 0xc0, 0x91, 0x81, 0x27, 0x19, 0xfd, 0x6a, 0x81, 0x3a, 0x39, 0x0d, + 0xa2, 0x2a, 0x17, 0x42, 0xb8, 0xf3, 0x9b, 0x87, 0x5d, 0x5e, 0xe2, 0x99, 0x61, 0xb1, 0x54, 0x05, + 0x8e, 0xfc, 0x32, 0xd8, 0x71, 0xbb, 0x8c, 0x84, 0xef, 0xc1, 0x93, 0xe0, 0x77, 0x8f, 0xae, 0x44, + 0x47, 0x96, 0x0b, 0xad, 0x50, 0x8d, 0x2f, 0x5c, 0x8a, 0xb4, 0x55, 0xc2, 0x62, 0xa4, 0x76, 0xa3, + 0x24, 0x31, 0x26, 0xc5, 0xef, 0xea, 0xed, 0x56, 0x1d, 0x56, 0xf9, 0x0d, 0xea, 0x43, 0x33, 0xff, + 0x10, 0x5f, 0x50, 0x5d, 0x7f, 0xd6, 0x27, 0xea, 0xe3, 0xa7, 0xb1, 0x80, 0xfb, 0xd4, 0xc9, 0x94, + 0xdc, 0x11, 0xe0, 0x4a, 0x0b, 0x59, 0x98, 0xe5, 0x34, 0xf8, 0x19, 0xff, 0x51, 0xb4, 0x8e, 0xd2, + 0x42, 0x6c, 0x14, 0x65, 0x1b, 0x5f, 0xa2, 0x85, 0xcc, 0x6c, 0x2b, 0x49, 0x95, 0x22, 0xaa, 0x7f, + 0x13, 0xcb, 0x14, 0xc3, 0x9f, 0x0c, 0xbc, 0x45, 0xf5, 0xf3, 0x0c, 0x1f, 0x6c, 0x06, 0x9e, 0x44, + 0xc9, 0xc8, 0x9c, 0x0d, 0x19, 0x73, 0xc1, 0x13, 0x92, 0x70, 0xed, 0xed, 0xef, 0xee, 0xeb, 0xee, + 0x9b, 0xf7, 0x37, 0xe6, 0x22, 0x62, 0xb1, 0x8f, 0xce, 0x97, 0x57, 0x3b, 0xbe, 0xf3, 0xd1, 0xf9, + 0xd6, 0x74, 0x3e, 0x36, 0x9b, 0xaf, 0xf0, 0xd2, 0x64, 0x3e, 0x47, 0x43, 0x18, 0x30, 0x2e, 0x00, + 0xc3, 0x43, 0x4f, 0xe4, 0x7e, 0x09, 0x4d, 0xb9, 0x84, 0xe5, 0x02, 0xd2, 0x36, 0x74, 0xdb, 0xae, + 0x38, 0x7f, 0x4f, 0x50, 0xfb, 0xe1, 0xd9, 0x6f, 0xc0, 0xda, 0xaf, 0xef, 0x84, 0x74, 0x4d, 0x1e, + 0x7f, 0xe2, 0x95, 0x0c, 0xef, 0xe7, 0x7f, 0x81, 0xae, 0x00, 0x08, 0x00, 0x00, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_Bitcoin_64px = { GLYPH_Bitcoin_64px_WIDTH, GLYPH_Bitcoin_64px_HEIGHT, NBGL_BPP_4, GLYPH_Bitcoin_64px_ISFILE, C_Bitcoin_64px_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_bitcoin_logo_bitmap[] = { + 0xf8, 0x7f, 0x80, 0x7c, 0x00, 0xe0, 0x71, 0x8f, 0xe4, 0x7d, 0x83, 0x23, 0x04, 0x88, 0x3f, 0xf2, + 0x7f, 0x99, 0x02, 0x70, 0x03, 0xe0, 0x1f, 0xe1, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_bitcoin_logo = { GLYPH_bitcoin_logo_WIDTH, GLYPH_bitcoin_logo_HEIGHT, NBGL_BPP_1, GLYPH_bitcoin_logo_ISFILE, C_bitcoin_logo_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_back_bitmap[] = { + 0xf8, 0x7f, 0x80, 0x7c, 0x00, 0xe0, 0x01, 0x83, 0xc4, 0x1f, 0x80, 0xe6, 0x03, 0x00, 0x3f, 0x02, + 0x78, 0x18, 0xc0, 0x70, 0x03, 0xe0, 0x1f, 0xe1, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_back = { GLYPH_icon_back_WIDTH, GLYPH_icon_back_HEIGHT, NBGL_BPP_1, GLYPH_icon_back_ISFILE, C_icon_back_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_back_x_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0x3f, 0xfc, 0xff, 0xf3, 0xfc, 0xcc, 0xf1, 0x23, 0xe0, 0x1f, + 0xc0, 0xff, 0x87, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_back_x = { GLYPH_icon_back_x_WIDTH, GLYPH_icon_back_x_HEIGHT, NBGL_BPP_1, GLYPH_icon_back_x_ISFILE, C_icon_back_x_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_certificate_bitmap[] = { + 0xff, 0xff, 0xff, 0xfc, 0x00, 0xe0, 0x01, 0x9f, 0xe6, 0x55, 0x99, 0x56, 0x65, 0x59, 0x95, 0x66, + 0x7f, 0x98, 0x00, 0x70, 0x03, 0xff, 0xff, 0xff, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_certificate = { GLYPH_icon_certificate_WIDTH, GLYPH_icon_certificate_HEIGHT, NBGL_BPP_1, GLYPH_icon_certificate_ISFILE, C_icon_certificate_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_coggle_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0x2f, 0xe0, 0x1f, 0xc0, 0xfc, 0x30, 0xf0, 0xc3, 0xf0, 0x3f, + 0x80, 0x7f, 0x4b, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_coggle = { GLYPH_icon_coggle_WIDTH, GLYPH_icon_coggle_HEIGHT, NBGL_BPP_1, GLYPH_icon_coggle_ISFILE, C_icon_coggle_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_crossmark_bitmap[] = { + 0xff, 0xfe, 0x7f, 0x98, 0xfc, 0x71, 0xe3, 0xe3, 0x1f, 0xc0, 0xff, 0x87, 0xfe, 0x1f, 0xf0, 0x3f, + 0x8c, 0x7c, 0x78, 0xe3, 0xf1, 0x9f, 0xe7, 0xff, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_crossmark = { GLYPH_icon_crossmark_WIDTH, GLYPH_icon_crossmark_HEIGHT, NBGL_BPP_1, GLYPH_icon_crossmark_ISFILE, C_icon_crossmark_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_dashboard_bitmap[] = { + 0xf8, 0x7f, 0x80, 0x7c, 0x00, 0xe3, 0xf1, 0x9f, 0xe4, 0x61, 0x81, 0x86, 0x06, 0x18, 0x18, 0x62, + 0x7f, 0x98, 0xfc, 0x70, 0x03, 0xe0, 0x1f, 0xe1, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_dashboard = { GLYPH_icon_dashboard_WIDTH, GLYPH_icon_dashboard_HEIGHT, NBGL_BPP_1, GLYPH_icon_dashboard_ISFILE, C_icon_dashboard_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_dashboard_x_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfe, 0x3f, 0xf0, 0x0f, 0x80, 0x3c, 0x07, 0xf0, 0x1f, 0xe0, 0x0f, + 0xc0, 0x3f, 0x8f, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_dashboard_x = { GLYPH_icon_dashboard_x_WIDTH, GLYPH_icon_dashboard_x_HEIGHT, NBGL_BPP_1, GLYPH_icon_dashboard_x_ISFILE, C_icon_dashboard_x_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_down_bitmap[] = { + 0x7b, 0xde, 0xdb, 0x70, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_down = { GLYPH_icon_down_WIDTH, GLYPH_icon_down_HEIGHT, NBGL_BPP_1, GLYPH_icon_down_ISFILE, C_icon_down_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_eye_bitmap[] = { + 0xff, 0xff, 0xf3, 0xff, 0x03, 0xf8, 0xc7, 0xe7, 0x9f, 0x3f, 0x3c, 0xcc, 0xf3, 0x33, 0xcf, 0xcf, + 0x9e, 0x7e, 0x31, 0xfc, 0x0f, 0xfc, 0xff, 0xff, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_eye = { GLYPH_icon_eye_WIDTH, GLYPH_icon_eye_HEIGHT, NBGL_BPP_1, GLYPH_icon_eye_ISFILE, C_icon_eye_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_left_bitmap[] = { + 0x7d, 0x77, 0x5f, 0x70, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_left = { GLYPH_icon_left_WIDTH, GLYPH_icon_left_HEIGHT, NBGL_BPP_1, GLYPH_icon_left_ISFILE, C_icon_left_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_processing_bitmap[] = { + 0xff, 0xff, 0xf3, 0xfe, 0xcd, 0xf1, 0x23, 0xe7, 0x9f, 0xff, 0xf8, 0xfc, 0x63, 0xf1, 0xff, 0xff, + 0x9e, 0x7c, 0x48, 0xfb, 0x37, 0xfc, 0xff, 0xff, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_processing = { GLYPH_icon_processing_WIDTH, GLYPH_icon_processing_HEIGHT, NBGL_BPP_1, GLYPH_icon_processing_ISFILE, C_icon_processing_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_right_bitmap[] = { + 0xef, 0xae, 0xeb, 0xe0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_right = { GLYPH_icon_right_WIDTH, GLYPH_icon_right_HEIGHT, NBGL_BPP_1, GLYPH_icon_right_ISFILE, C_icon_right_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_up_bitmap[] = { + 0xed, 0xb7, 0xbd, 0xe0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_up = { GLYPH_icon_up_WIDTH, GLYPH_icon_up_HEIGHT, NBGL_BPP_1, GLYPH_icon_up_ISFILE, C_icon_up_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_validate_14_bitmap[] = { + 0xe7, 0xff, 0x8f, 0xff, 0x1f, 0xfe, 0x3f, 0xfc, 0x7f, 0xf8, 0xff, 0xf1, 0xff, 0xe3, 0xff, 0x8f, + 0xfc, 0x7f, 0xe3, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_validate_14 = { GLYPH_icon_validate_14_WIDTH, GLYPH_icon_validate_14_HEIGHT, NBGL_BPP_1, GLYPH_icon_validate_14_ISFILE, C_icon_validate_14_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_wallet_bitmap[] = { + 0xc0, 0x0e, 0x1f, 0x18, 0x82, 0x46, 0x48, 0x28, 0x20, 0xa0, 0x82, 0x82, 0x0a, 0x08, 0x28, 0x20, + 0xa0, 0x82, 0x82, 0x28, 0x09, 0x9f, 0xc7, 0x00, 0x30, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_wallet = { GLYPH_icon_wallet_WIDTH, GLYPH_icon_wallet_HEIGHT, NBGL_BPP_1, GLYPH_icon_wallet_ISFILE, C_icon_wallet_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_icon_warning_bitmap[] = { + 0xff, 0xff, 0xff, 0x9f, 0xf8, 0x7f, 0x81, 0xf8, 0x07, 0x80, 0x18, 0xfb, 0x63, 0xed, 0xe0, 0x07, + 0xe0, 0x1f, 0xe0, 0x7f, 0xe1, 0xff, 0xe7, 0xff, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_icon_warning = { GLYPH_icon_warning_WIDTH, GLYPH_icon_warning_HEIGHT, NBGL_BPP_1, GLYPH_icon_warning_ISFILE, C_icon_warning_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_nanos_badge_bitcoin_bitmap[] = { + 0xf8, 0x7f, 0x80, 0x7c, 0x00, 0xe0, 0x71, 0x8f, 0xe4, 0x7d, 0x83, 0x23, 0x04, 0x88, 0x3f, 0xf2, + 0x7f, 0x99, 0x02, 0x70, 0x03, 0xe0, 0x1f, 0xe1, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_nanos_badge_bitcoin = { GLYPH_nanos_badge_bitcoin_WIDTH, GLYPH_nanos_badge_bitcoin_HEIGHT, NBGL_BPP_1, GLYPH_nanos_badge_bitcoin_ISFILE, C_nanos_badge_bitcoin_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_nanos_badge_bitcoin_testnet_bitmap[] = { + 0xf8, 0x7f, 0x80, 0x7c, 0x00, 0xe0, 0x71, 0x8f, 0xe4, 0x7d, 0x83, 0x23, 0x04, 0x88, 0x3f, 0xf2, + 0x7f, 0x99, 0x02, 0x70, 0x03, 0xe0, 0x1f, 0xe1, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_nanos_badge_bitcoin_testnet = { GLYPH_nanos_badge_bitcoin_testnet_WIDTH, GLYPH_nanos_badge_bitcoin_testnet_HEIGHT, NBGL_BPP_1, GLYPH_nanos_badge_bitcoin_testnet_ISFILE, C_nanos_badge_bitcoin_testnet_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_nanos_icon_back_bitmap[] = { + 0xf8, 0x7f, 0x80, 0x7c, 0x00, 0xe0, 0x01, 0x83, 0xc4, 0x1f, 0x80, 0xe6, 0x03, 0x00, 0x3f, 0x02, + 0x78, 0x18, 0xc0, 0x70, 0x03, 0xe0, 0x1f, 0xe1, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_nanos_icon_back = { GLYPH_nanos_icon_back_WIDTH, GLYPH_nanos_icon_back_HEIGHT, NBGL_BPP_1, GLYPH_nanos_icon_back_ISFILE, C_nanos_icon_back_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_nanos_icon_dashboard_bitmap[] = { + 0xf8, 0x7f, 0x80, 0x7c, 0x00, 0xe3, 0xf1, 0x9f, 0xe4, 0x61, 0x81, 0x86, 0x06, 0x18, 0x18, 0x62, + 0x7f, 0x98, 0xfc, 0x70, 0x03, 0xe0, 0x1f, 0xe1, 0xf0, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_nanos_icon_dashboard = { GLYPH_nanos_icon_dashboard_WIDTH, GLYPH_nanos_icon_dashboard_HEIGHT, NBGL_BPP_1, GLYPH_nanos_icon_dashboard_ISFILE, C_nanos_icon_dashboard_bitmap }; +#endif // HAVE_NBGL + +uint8_t const C_stax_app_bitcoin_bitmap[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x62, 0x10, 0x01, 0x36, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xff, 0xff, + 0xff, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, + 0xff, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xff, + 0xff, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xff, + 0xff, 0x70, 0x00, 0x00, 0x00, 0x01, 0x79, 0x51, 0x01, 0x33, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, + 0xff, 0x10, 0x00, 0x00, 0x00, 0x0c, 0xff, 0xfe, 0x1c, 0xff, 0xe5, 0x00, 0x00, 0x00, 0x01, 0xef, + 0xfa, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xff, 0xff, 0xef, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0xbf, + 0xf6, 0x00, 0x00, 0x0a, 0xb6, 0xef, 0xe9, 0xef, 0xff, 0xff, 0xff, 0x90, 0x00, 0x00, 0x00, 0x6f, + 0xf3, 0x00, 0x00, 0x0b, 0xff, 0xff, 0x10, 0x2f, 0xfa, 0x15, 0xff, 0xb0, 0x00, 0x00, 0x00, 0x2f, + 0xf1, 0x00, 0x00, 0x00, 0x18, 0xf9, 0x00, 0x0f, 0xe1, 0x00, 0xbf, 0xa0, 0x00, 0x00, 0x00, 0x1f, + 0xf0, 0x00, 0x00, 0x7c, 0x8b, 0xf4, 0x00, 0x2f, 0x90, 0x00, 0xaf, 0xa0, 0x00, 0x00, 0x00, 0x0f, + 0xf0, 0x00, 0x00, 0x7e, 0xff, 0xfe, 0x94, 0x7f, 0x40, 0x00, 0xbf, 0xfe, 0xb1, 0x00, 0x00, 0x0f, + 0xf1, 0x00, 0x00, 0x00, 0x4f, 0xff, 0xff, 0xff, 0xa5, 0x11, 0xff, 0x8b, 0xe0, 0x00, 0x00, 0x1f, + 0xf2, 0x00, 0x00, 0x00, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0x10, 0x10, 0x00, 0x00, 0x3f, + 0xf6, 0x00, 0x00, 0x00, 0x9f, 0x62, 0x6a, 0xef, 0xff, 0xff, 0xff, 0xfc, 0x30, 0x00, 0x00, 0x6f, + 0xfb, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x02, 0x6a, 0xef, 0xf9, 0xae, 0x30, 0x00, 0x00, 0xaf, + 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf1, 0x00, 0x00, 0x00, 0x01, 0xff, + 0xff, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x07, 0xff, + 0xff, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x50, 0x00, 0x00, 0x00, 0x1e, 0xff, + 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xff, + 0xff, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, + 0xff, 0xff, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xf9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x63, 0x10, 0x01, 0x26, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; +#ifdef HAVE_NBGL +const nbgl_icon_details_t C_stax_app_bitcoin = { GLYPH_stax_app_bitcoin_WIDTH, GLYPH_stax_app_bitcoin_HEIGHT, NBGL_BPP_4, GLYPH_stax_app_bitcoin_ISFILE, C_stax_app_bitcoin_bitmap }; +#endif // HAVE_NBGL + diff --git a/ledger_secure_sdk_sys/src/c/glyphs_stax_15/glyphs.h b/ledger_secure_sdk_sys/src/c/glyphs_stax_15/glyphs.h new file mode 100644 index 00000000..79090b79 --- /dev/null +++ b/ledger_secure_sdk_sys/src/c/glyphs_stax_15/glyphs.h @@ -0,0 +1,664 @@ +#ifdef HAVE_NBGL +#include "nbgl_types.h" +#endif // HAVE_NBGL + +#ifndef GLYPH_Device_64px_BPP + #define GLYPH_Device_64px_WIDTH 64 + #define GLYPH_Device_64px_HEIGHT 64 + #define GLYPH_Device_64px_ISFILE true + #define GLYPH_Device_64px_BPP 1 + extern uint8_t const C_Device_64px_bitmap[82]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Device_64px; + #endif // HAVE_NBGL +#endif // GLYPH_Device_64px_BPP + +#ifndef GLYPH_Message_64px_BPP + #define GLYPH_Message_64px_WIDTH 64 + #define GLYPH_Message_64px_HEIGHT 64 + #define GLYPH_Message_64px_ISFILE true + #define GLYPH_Message_64px_BPP 1 + extern uint8_t const C_Message_64px_bitmap[104]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Message_64px; + #endif // HAVE_NBGL +#endif // GLYPH_Message_64px_BPP + +#ifndef GLYPH_Next32px_BPP + #define GLYPH_Next32px_WIDTH 32 + #define GLYPH_Next32px_HEIGHT 32 + #define GLYPH_Next32px_ISFILE false + #define GLYPH_Next32px_BPP 1 + extern uint8_t const C_Next32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Next32px; + #endif // HAVE_NBGL +#endif // GLYPH_Next32px_BPP + +#ifndef GLYPH_QRcode32px_BPP + #define GLYPH_QRcode32px_WIDTH 32 + #define GLYPH_QRcode32px_HEIGHT 32 + #define GLYPH_QRcode32px_ISFILE false + #define GLYPH_QRcode32px_BPP 1 + extern uint8_t const C_QRcode32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_QRcode32px; + #endif // HAVE_NBGL +#endif // GLYPH_QRcode32px_BPP + +#ifndef GLYPH_SecurityShield64px_BPP + #define GLYPH_SecurityShield64px_WIDTH 64 + #define GLYPH_SecurityShield64px_HEIGHT 64 + #define GLYPH_SecurityShield64px_ISFILE true + #define GLYPH_SecurityShield64px_BPP 1 + extern uint8_t const C_SecurityShield64px_bitmap[192]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_SecurityShield64px; + #endif // HAVE_NBGL +#endif // GLYPH_SecurityShield64px_BPP + +#ifndef GLYPH_backspace32px_BPP + #define GLYPH_backspace32px_WIDTH 32 + #define GLYPH_backspace32px_HEIGHT 32 + #define GLYPH_backspace32px_ISFILE false + #define GLYPH_backspace32px_BPP 1 + extern uint8_t const C_backspace32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_backspace32px; + #endif // HAVE_NBGL +#endif // GLYPH_backspace32px_BPP + +#ifndef GLYPH_check32px_BPP + #define GLYPH_check32px_WIDTH 32 + #define GLYPH_check32px_HEIGHT 32 + #define GLYPH_check32px_ISFILE false + #define GLYPH_check32px_BPP 1 + extern uint8_t const C_check32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_check32px; + #endif // HAVE_NBGL +#endif // GLYPH_check32px_BPP + +#ifndef GLYPH_cross32px_BPP + #define GLYPH_cross32px_WIDTH 32 + #define GLYPH_cross32px_HEIGHT 32 + #define GLYPH_cross32px_ISFILE false + #define GLYPH_cross32px_BPP 1 + extern uint8_t const C_cross32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_cross32px; + #endif // HAVE_NBGL +#endif // GLYPH_cross32px_BPP + +#ifndef GLYPH_info_i_32px_BPP + #define GLYPH_info_i_32px_WIDTH 32 + #define GLYPH_info_i_32px_HEIGHT 32 + #define GLYPH_info_i_32px_ISFILE false + #define GLYPH_info_i_32px_BPP 1 + extern uint8_t const C_info_i_32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_info_i_32px; + #endif // HAVE_NBGL +#endif // GLYPH_info_i_32px_BPP + +#ifndef GLYPH_leftArrow32px_BPP + #define GLYPH_leftArrow32px_WIDTH 32 + #define GLYPH_leftArrow32px_HEIGHT 32 + #define GLYPH_leftArrow32px_ISFILE false + #define GLYPH_leftArrow32px_BPP 1 + extern uint8_t const C_leftArrow32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_leftArrow32px; + #endif // HAVE_NBGL +#endif // GLYPH_leftArrow32px_BPP + +#ifndef GLYPH_quarter_circle_16px_1bpp_BPP + #define GLYPH_quarter_circle_16px_1bpp_WIDTH 16 + #define GLYPH_quarter_circle_16px_1bpp_HEIGHT 16 + #define GLYPH_quarter_circle_16px_1bpp_ISFILE false + #define GLYPH_quarter_circle_16px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_16px_1bpp_bitmap[32]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_16px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_16px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_20px_1bpp_BPP + #define GLYPH_quarter_circle_20px_1bpp_WIDTH 20 + #define GLYPH_quarter_circle_20px_1bpp_HEIGHT 20 + #define GLYPH_quarter_circle_20px_1bpp_ISFILE false + #define GLYPH_quarter_circle_20px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_20px_1bpp_bitmap[50]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_20px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_20px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_24px_1bpp_BPP + #define GLYPH_quarter_circle_24px_1bpp_WIDTH 24 + #define GLYPH_quarter_circle_24px_1bpp_HEIGHT 24 + #define GLYPH_quarter_circle_24px_1bpp_ISFILE false + #define GLYPH_quarter_circle_24px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_24px_1bpp_bitmap[72]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_24px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_24px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_32px_1bpp_BPP + #define GLYPH_quarter_circle_32px_1bpp_WIDTH 32 + #define GLYPH_quarter_circle_32px_1bpp_HEIGHT 32 + #define GLYPH_quarter_circle_32px_1bpp_ISFILE false + #define GLYPH_quarter_circle_32px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_32px_1bpp_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_32px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_32px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_40px_1bpp_BPP + #define GLYPH_quarter_circle_40px_1bpp_WIDTH 40 + #define GLYPH_quarter_circle_40px_1bpp_HEIGHT 40 + #define GLYPH_quarter_circle_40px_1bpp_ISFILE false + #define GLYPH_quarter_circle_40px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_40px_1bpp_bitmap[200]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_40px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_40px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_48px_1bpp_BPP + #define GLYPH_quarter_circle_48px_1bpp_WIDTH 48 + #define GLYPH_quarter_circle_48px_1bpp_HEIGHT 48 + #define GLYPH_quarter_circle_48px_1bpp_ISFILE false + #define GLYPH_quarter_circle_48px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_48px_1bpp_bitmap[288]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_48px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_48px_1bpp_BPP + +#ifndef GLYPH_quarter_circle_8px_1bpp_BPP + #define GLYPH_quarter_circle_8px_1bpp_WIDTH 8 + #define GLYPH_quarter_circle_8px_1bpp_HEIGHT 8 + #define GLYPH_quarter_circle_8px_1bpp_ISFILE false + #define GLYPH_quarter_circle_8px_1bpp_BPP 1 + extern uint8_t const C_quarter_circle_8px_1bpp_bitmap[8]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_circle_8px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_circle_8px_1bpp_BPP + +#ifndef GLYPH_quarter_round_16px_1bpp_BPP + #define GLYPH_quarter_round_16px_1bpp_WIDTH 16 + #define GLYPH_quarter_round_16px_1bpp_HEIGHT 16 + #define GLYPH_quarter_round_16px_1bpp_ISFILE false + #define GLYPH_quarter_round_16px_1bpp_BPP 1 + extern uint8_t const C_quarter_round_16px_1bpp_bitmap[32]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_round_16px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_round_16px_1bpp_BPP + +#ifndef GLYPH_quarter_round_20px_1bpp_BPP + #define GLYPH_quarter_round_20px_1bpp_WIDTH 20 + #define GLYPH_quarter_round_20px_1bpp_HEIGHT 20 + #define GLYPH_quarter_round_20px_1bpp_ISFILE false + #define GLYPH_quarter_round_20px_1bpp_BPP 1 + extern uint8_t const C_quarter_round_20px_1bpp_bitmap[50]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_round_20px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_round_20px_1bpp_BPP + +#ifndef GLYPH_quarter_round_24px_1bpp_BPP + #define GLYPH_quarter_round_24px_1bpp_WIDTH 24 + #define GLYPH_quarter_round_24px_1bpp_HEIGHT 24 + #define GLYPH_quarter_round_24px_1bpp_ISFILE false + #define GLYPH_quarter_round_24px_1bpp_BPP 1 + extern uint8_t const C_quarter_round_24px_1bpp_bitmap[72]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_round_24px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_round_24px_1bpp_BPP + +#ifndef GLYPH_quarter_round_32px_1bpp_BPP + #define GLYPH_quarter_round_32px_1bpp_WIDTH 32 + #define GLYPH_quarter_round_32px_1bpp_HEIGHT 32 + #define GLYPH_quarter_round_32px_1bpp_ISFILE false + #define GLYPH_quarter_round_32px_1bpp_BPP 1 + extern uint8_t const C_quarter_round_32px_1bpp_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_round_32px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_round_32px_1bpp_BPP + +#ifndef GLYPH_quarter_round_40px_1bpp_BPP + #define GLYPH_quarter_round_40px_1bpp_WIDTH 40 + #define GLYPH_quarter_round_40px_1bpp_HEIGHT 40 + #define GLYPH_quarter_round_40px_1bpp_ISFILE false + #define GLYPH_quarter_round_40px_1bpp_BPP 1 + extern uint8_t const C_quarter_round_40px_1bpp_bitmap[200]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_round_40px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_round_40px_1bpp_BPP + +#ifndef GLYPH_quarter_round_48px_1bpp_BPP + #define GLYPH_quarter_round_48px_1bpp_WIDTH 48 + #define GLYPH_quarter_round_48px_1bpp_HEIGHT 48 + #define GLYPH_quarter_round_48px_1bpp_ISFILE false + #define GLYPH_quarter_round_48px_1bpp_BPP 1 + extern uint8_t const C_quarter_round_48px_1bpp_bitmap[288]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_round_48px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_round_48px_1bpp_BPP + +#ifndef GLYPH_quarter_round_8px_1bpp_BPP + #define GLYPH_quarter_round_8px_1bpp_WIDTH 8 + #define GLYPH_quarter_round_8px_1bpp_HEIGHT 8 + #define GLYPH_quarter_round_8px_1bpp_ISFILE false + #define GLYPH_quarter_round_8px_1bpp_BPP 1 + extern uint8_t const C_quarter_round_8px_1bpp_bitmap[8]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_quarter_round_8px_1bpp; + #endif // HAVE_NBGL +#endif // GLYPH_quarter_round_8px_1bpp_BPP + +#ifndef GLYPH_radio_active_32px_BPP + #define GLYPH_radio_active_32px_WIDTH 32 + #define GLYPH_radio_active_32px_HEIGHT 32 + #define GLYPH_radio_active_32px_ISFILE false + #define GLYPH_radio_active_32px_BPP 1 + extern uint8_t const C_radio_active_32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_radio_active_32px; + #endif // HAVE_NBGL +#endif // GLYPH_radio_active_32px_BPP + +#ifndef GLYPH_radio_inactive_32px_BPP + #define GLYPH_radio_inactive_32px_WIDTH 32 + #define GLYPH_radio_inactive_32px_HEIGHT 32 + #define GLYPH_radio_inactive_32px_ISFILE false + #define GLYPH_radio_inactive_32px_BPP 1 + extern uint8_t const C_radio_inactive_32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_radio_inactive_32px; + #endif // HAVE_NBGL +#endif // GLYPH_radio_inactive_32px_BPP + +#ifndef GLYPH_rightArrow32px_BPP + #define GLYPH_rightArrow32px_WIDTH 32 + #define GLYPH_rightArrow32px_HEIGHT 32 + #define GLYPH_rightArrow32px_ISFILE false + #define GLYPH_rightArrow32px_BPP 1 + extern uint8_t const C_rightArrow32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_rightArrow32px; + #endif // HAVE_NBGL +#endif // GLYPH_rightArrow32px_BPP + +#ifndef GLYPH_round_24px_BPP + #define GLYPH_round_24px_WIDTH 24 + #define GLYPH_round_24px_HEIGHT 24 + #define GLYPH_round_24px_ISFILE false + #define GLYPH_round_24px_BPP 1 + extern uint8_t const C_round_24px_bitmap[72]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_round_24px; + #endif // HAVE_NBGL +#endif // GLYPH_round_24px_BPP + +#ifndef GLYPH_round_check_64px_BPP + #define GLYPH_round_check_64px_WIDTH 64 + #define GLYPH_round_check_64px_HEIGHT 64 + #define GLYPH_round_check_64px_ISFILE true + #define GLYPH_round_check_64px_BPP 1 + extern uint8_t const C_round_check_64px_bitmap[213]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_round_check_64px; + #endif // HAVE_NBGL +#endif // GLYPH_round_check_64px_BPP + +#ifndef GLYPH_round_cross_64px_BPP + #define GLYPH_round_cross_64px_WIDTH 64 + #define GLYPH_round_cross_64px_HEIGHT 64 + #define GLYPH_round_cross_64px_ISFILE true + #define GLYPH_round_cross_64px_BPP 1 + extern uint8_t const C_round_cross_64px_bitmap[201]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_round_cross_64px; + #endif // HAVE_NBGL +#endif // GLYPH_round_cross_64px_BPP + +#ifndef GLYPH_round_warning_64px_BPP + #define GLYPH_round_warning_64px_WIDTH 64 + #define GLYPH_round_warning_64px_HEIGHT 64 + #define GLYPH_round_warning_64px_ISFILE true + #define GLYPH_round_warning_64px_BPP 1 + extern uint8_t const C_round_warning_64px_bitmap[177]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_round_warning_64px; + #endif // HAVE_NBGL +#endif // GLYPH_round_warning_64px_BPP + +#ifndef GLYPH_shift32px_BPP + #define GLYPH_shift32px_WIDTH 32 + #define GLYPH_shift32px_HEIGHT 32 + #define GLYPH_shift32px_ISFILE false + #define GLYPH_shift32px_BPP 1 + extern uint8_t const C_shift32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_shift32px; + #endif // HAVE_NBGL +#endif // GLYPH_shift32px_BPP + +#ifndef GLYPH_shift_lock32px_BPP + #define GLYPH_shift_lock32px_WIDTH 32 + #define GLYPH_shift_lock32px_HEIGHT 32 + #define GLYPH_shift_lock32px_ISFILE false + #define GLYPH_shift_lock32px_BPP 1 + extern uint8_t const C_shift_lock32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_shift_lock32px; + #endif // HAVE_NBGL +#endif // GLYPH_shift_lock32px_BPP + +#ifndef GLYPH_space32px_BPP + #define GLYPH_space32px_WIDTH 32 + #define GLYPH_space32px_HEIGHT 32 + #define GLYPH_space32px_ISFILE false + #define GLYPH_space32px_BPP 1 + extern uint8_t const C_space32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_space32px; + #endif // HAVE_NBGL +#endif // GLYPH_space32px_BPP + +#ifndef GLYPH_switch_60_40_BPP + #define GLYPH_switch_60_40_WIDTH 60 + #define GLYPH_switch_60_40_HEIGHT 40 + #define GLYPH_switch_60_40_ISFILE false + #define GLYPH_switch_60_40_BPP 1 + extern uint8_t const C_switch_60_40_bitmap[300]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_switch_60_40; + #endif // HAVE_NBGL +#endif // GLYPH_switch_60_40_BPP + +#ifndef GLYPH_warning64px_BPP + #define GLYPH_warning64px_WIDTH 64 + #define GLYPH_warning64px_HEIGHT 64 + #define GLYPH_warning64px_ISFILE true + #define GLYPH_warning64px_BPP 1 + extern uint8_t const C_warning64px_bitmap[179]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_warning64px; + #endif // HAVE_NBGL +#endif // GLYPH_warning64px_BPP + +#ifndef GLYPH_wheel32px_BPP + #define GLYPH_wheel32px_WIDTH 32 + #define GLYPH_wheel32px_HEIGHT 32 + #define GLYPH_wheel32px_ISFILE false + #define GLYPH_wheel32px_BPP 1 + extern uint8_t const C_wheel32px_bitmap[128]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_wheel32px; + #endif // HAVE_NBGL +#endif // GLYPH_wheel32px_BPP + +#ifndef GLYPH_Bitcoin_64px_BPP + #define GLYPH_Bitcoin_64px_WIDTH 64 + #define GLYPH_Bitcoin_64px_HEIGHT 64 + #define GLYPH_Bitcoin_64px_ISFILE true + #define GLYPH_Bitcoin_64px_BPP 4 + extern uint8_t const C_Bitcoin_64px_bitmap[573]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_Bitcoin_64px; + #endif // HAVE_NBGL +#endif // GLYPH_Bitcoin_64px_BPP + +#ifndef GLYPH_bitcoin_logo_BPP + #define GLYPH_bitcoin_logo_WIDTH 14 + #define GLYPH_bitcoin_logo_HEIGHT 14 + #define GLYPH_bitcoin_logo_ISFILE false + #define GLYPH_bitcoin_logo_BPP 1 + extern uint8_t const C_bitcoin_logo_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_bitcoin_logo; + #endif // HAVE_NBGL +#endif // GLYPH_bitcoin_logo_BPP + +#ifndef GLYPH_icon_back_BPP + #define GLYPH_icon_back_WIDTH 14 + #define GLYPH_icon_back_HEIGHT 14 + #define GLYPH_icon_back_ISFILE false + #define GLYPH_icon_back_BPP 1 + extern uint8_t const C_icon_back_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_back; + #endif // HAVE_NBGL +#endif // GLYPH_icon_back_BPP + +#ifndef GLYPH_icon_back_x_BPP + #define GLYPH_icon_back_x_WIDTH 14 + #define GLYPH_icon_back_x_HEIGHT 14 + #define GLYPH_icon_back_x_ISFILE false + #define GLYPH_icon_back_x_BPP 1 + extern uint8_t const C_icon_back_x_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_back_x; + #endif // HAVE_NBGL +#endif // GLYPH_icon_back_x_BPP + +#ifndef GLYPH_icon_certificate_BPP + #define GLYPH_icon_certificate_WIDTH 14 + #define GLYPH_icon_certificate_HEIGHT 14 + #define GLYPH_icon_certificate_ISFILE false + #define GLYPH_icon_certificate_BPP 1 + extern uint8_t const C_icon_certificate_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_certificate; + #endif // HAVE_NBGL +#endif // GLYPH_icon_certificate_BPP + +#ifndef GLYPH_icon_coggle_BPP + #define GLYPH_icon_coggle_WIDTH 14 + #define GLYPH_icon_coggle_HEIGHT 14 + #define GLYPH_icon_coggle_ISFILE false + #define GLYPH_icon_coggle_BPP 1 + extern uint8_t const C_icon_coggle_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_coggle; + #endif // HAVE_NBGL +#endif // GLYPH_icon_coggle_BPP + +#ifndef GLYPH_icon_crossmark_BPP + #define GLYPH_icon_crossmark_WIDTH 14 + #define GLYPH_icon_crossmark_HEIGHT 14 + #define GLYPH_icon_crossmark_ISFILE false + #define GLYPH_icon_crossmark_BPP 1 + extern uint8_t const C_icon_crossmark_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_crossmark; + #endif // HAVE_NBGL +#endif // GLYPH_icon_crossmark_BPP + +#ifndef GLYPH_icon_dashboard_BPP + #define GLYPH_icon_dashboard_WIDTH 14 + #define GLYPH_icon_dashboard_HEIGHT 14 + #define GLYPH_icon_dashboard_ISFILE false + #define GLYPH_icon_dashboard_BPP 1 + extern uint8_t const C_icon_dashboard_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_dashboard; + #endif // HAVE_NBGL +#endif // GLYPH_icon_dashboard_BPP + +#ifndef GLYPH_icon_dashboard_x_BPP + #define GLYPH_icon_dashboard_x_WIDTH 14 + #define GLYPH_icon_dashboard_x_HEIGHT 14 + #define GLYPH_icon_dashboard_x_ISFILE false + #define GLYPH_icon_dashboard_x_BPP 1 + extern uint8_t const C_icon_dashboard_x_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_dashboard_x; + #endif // HAVE_NBGL +#endif // GLYPH_icon_dashboard_x_BPP + +#ifndef GLYPH_icon_down_BPP + #define GLYPH_icon_down_WIDTH 7 + #define GLYPH_icon_down_HEIGHT 4 + #define GLYPH_icon_down_ISFILE false + #define GLYPH_icon_down_BPP 1 + extern uint8_t const C_icon_down_bitmap[4]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_down; + #endif // HAVE_NBGL +#endif // GLYPH_icon_down_BPP + +#ifndef GLYPH_icon_eye_BPP + #define GLYPH_icon_eye_WIDTH 14 + #define GLYPH_icon_eye_HEIGHT 14 + #define GLYPH_icon_eye_ISFILE false + #define GLYPH_icon_eye_BPP 1 + extern uint8_t const C_icon_eye_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_eye; + #endif // HAVE_NBGL +#endif // GLYPH_icon_eye_BPP + +#ifndef GLYPH_icon_left_BPP + #define GLYPH_icon_left_WIDTH 4 + #define GLYPH_icon_left_HEIGHT 7 + #define GLYPH_icon_left_ISFILE false + #define GLYPH_icon_left_BPP 1 + extern uint8_t const C_icon_left_bitmap[4]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_left; + #endif // HAVE_NBGL +#endif // GLYPH_icon_left_BPP + +#ifndef GLYPH_icon_processing_BPP + #define GLYPH_icon_processing_WIDTH 14 + #define GLYPH_icon_processing_HEIGHT 14 + #define GLYPH_icon_processing_ISFILE false + #define GLYPH_icon_processing_BPP 1 + extern uint8_t const C_icon_processing_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_processing; + #endif // HAVE_NBGL +#endif // GLYPH_icon_processing_BPP + +#ifndef GLYPH_icon_right_BPP + #define GLYPH_icon_right_WIDTH 4 + #define GLYPH_icon_right_HEIGHT 7 + #define GLYPH_icon_right_ISFILE false + #define GLYPH_icon_right_BPP 1 + extern uint8_t const C_icon_right_bitmap[4]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_right; + #endif // HAVE_NBGL +#endif // GLYPH_icon_right_BPP + +#ifndef GLYPH_icon_up_BPP + #define GLYPH_icon_up_WIDTH 7 + #define GLYPH_icon_up_HEIGHT 4 + #define GLYPH_icon_up_ISFILE false + #define GLYPH_icon_up_BPP 1 + extern uint8_t const C_icon_up_bitmap[4]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_up; + #endif // HAVE_NBGL +#endif // GLYPH_icon_up_BPP + +#ifndef GLYPH_icon_validate_14_BPP + #define GLYPH_icon_validate_14_WIDTH 14 + #define GLYPH_icon_validate_14_HEIGHT 14 + #define GLYPH_icon_validate_14_ISFILE false + #define GLYPH_icon_validate_14_BPP 1 + extern uint8_t const C_icon_validate_14_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_validate_14; + #endif // HAVE_NBGL +#endif // GLYPH_icon_validate_14_BPP + +#ifndef GLYPH_icon_wallet_BPP + #define GLYPH_icon_wallet_WIDTH 14 + #define GLYPH_icon_wallet_HEIGHT 14 + #define GLYPH_icon_wallet_ISFILE false + #define GLYPH_icon_wallet_BPP 1 + extern uint8_t const C_icon_wallet_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_wallet; + #endif // HAVE_NBGL +#endif // GLYPH_icon_wallet_BPP + +#ifndef GLYPH_icon_warning_BPP + #define GLYPH_icon_warning_WIDTH 14 + #define GLYPH_icon_warning_HEIGHT 14 + #define GLYPH_icon_warning_ISFILE false + #define GLYPH_icon_warning_BPP 1 + extern uint8_t const C_icon_warning_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_icon_warning; + #endif // HAVE_NBGL +#endif // GLYPH_icon_warning_BPP + +#ifndef GLYPH_nanos_badge_bitcoin_BPP + #define GLYPH_nanos_badge_bitcoin_WIDTH 14 + #define GLYPH_nanos_badge_bitcoin_HEIGHT 14 + #define GLYPH_nanos_badge_bitcoin_ISFILE false + #define GLYPH_nanos_badge_bitcoin_BPP 1 + extern uint8_t const C_nanos_badge_bitcoin_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_nanos_badge_bitcoin; + #endif // HAVE_NBGL +#endif // GLYPH_nanos_badge_bitcoin_BPP + +#ifndef GLYPH_nanos_badge_bitcoin_testnet_BPP + #define GLYPH_nanos_badge_bitcoin_testnet_WIDTH 14 + #define GLYPH_nanos_badge_bitcoin_testnet_HEIGHT 14 + #define GLYPH_nanos_badge_bitcoin_testnet_ISFILE false + #define GLYPH_nanos_badge_bitcoin_testnet_BPP 1 + extern uint8_t const C_nanos_badge_bitcoin_testnet_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_nanos_badge_bitcoin_testnet; + #endif // HAVE_NBGL +#endif // GLYPH_nanos_badge_bitcoin_testnet_BPP + +#ifndef GLYPH_nanos_icon_back_BPP + #define GLYPH_nanos_icon_back_WIDTH 14 + #define GLYPH_nanos_icon_back_HEIGHT 14 + #define GLYPH_nanos_icon_back_ISFILE false + #define GLYPH_nanos_icon_back_BPP 1 + extern uint8_t const C_nanos_icon_back_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_nanos_icon_back; + #endif // HAVE_NBGL +#endif // GLYPH_nanos_icon_back_BPP + +#ifndef GLYPH_nanos_icon_dashboard_BPP + #define GLYPH_nanos_icon_dashboard_WIDTH 14 + #define GLYPH_nanos_icon_dashboard_HEIGHT 14 + #define GLYPH_nanos_icon_dashboard_ISFILE false + #define GLYPH_nanos_icon_dashboard_BPP 1 + extern uint8_t const C_nanos_icon_dashboard_bitmap[25]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_nanos_icon_dashboard; + #endif // HAVE_NBGL +#endif // GLYPH_nanos_icon_dashboard_BPP + +#ifndef GLYPH_stax_app_bitcoin_BPP + #define GLYPH_stax_app_bitcoin_WIDTH 32 + #define GLYPH_stax_app_bitcoin_HEIGHT 32 + #define GLYPH_stax_app_bitcoin_ISFILE false + #define GLYPH_stax_app_bitcoin_BPP 4 + extern uint8_t const C_stax_app_bitcoin_bitmap[512]; + #ifdef HAVE_NBGL + extern const nbgl_icon_details_t C_stax_app_bitcoin; + #endif // HAVE_NBGL +#endif // GLYPH_stax_app_bitcoin_BPP + diff --git a/ledger_secure_sdk_sys/src/c/src.c b/ledger_secure_sdk_sys/src/c/src.c index 76361e1b..24a97a07 100644 --- a/ledger_secure_sdk_sys/src/c/src.c +++ b/ledger_secure_sdk_sys/src/c/src.c @@ -54,7 +54,7 @@ void printhex_c(char* str, uint32_t m); "movt %[result], #:upper16:" #SYM "(sbrel)\n\t" \ "add %[result], r9, %[result]" \ : [result] "=r" (DST)) -#elif defined(TARGET_NANOX) +#elif defined(TARGET_NANOX) || defined(TARGET_STAX) || defined(TARGET_FLEX) # define SYMBOL_SBREL_ADDRESS(DST, SYM) \ __asm volatile( \ "ldr %[result], =" #SYM "(sbrel)\n\t" \