From e94afbccf99ddd669cd32a37f378708d6ade6b4a Mon Sep 17 00:00:00 2001 From: Carlos Medeiros Date: Mon, 26 Aug 2024 15:04:39 +0100 Subject: [PATCH 1/2] list_neurons support new otp fields --- app/Makefile.version | 2 +- app/src/candid/candid_parser.c | 95 +++++++++++++++++++-------------- tests/phase2.json | 12 ++++- tests_zemu/tests/candid.test.ts | 2 +- 4 files changed, 68 insertions(+), 43 deletions(-) diff --git a/app/Makefile.version b/app/Makefile.version index 36fd328e..4a4e3863 100644 --- a/app/Makefile.version +++ b/app/Makefile.version @@ -3,4 +3,4 @@ APPVERSION_M=3 # This is the minor version of this release APPVERSION_N=0 # This is the patch version of this release -APPVERSION_P=2 +APPVERSION_P=3 diff --git a/app/src/candid/candid_parser.c b/app/src/candid/candid_parser.c index c636564a..590ea08c 100644 --- a/app/src/candid/candid_parser.c +++ b/app/src/candid/candid_parser.c @@ -24,6 +24,10 @@ // Good reference: https://github.com/dfinity/agent-js/tree/main/packages/candid // https://github.com/dfinity/candid/blob/master/spec/Candid.md#deserialisation +#define MAX_FIELDS 25 +#define TYPE_OPT 0 +#define TYPE_NEURONS_IDS 1 +#define TYPE_CALLER 2 #define CREATE_CTX(__CTX, __TX, __INPUT, __INPUT_SIZE) \ parser_context_t __CTX; \ @@ -71,54 +75,67 @@ parser_error_t readCandidListNeurons(parser_tx_t *tx, const uint8_t *input, uint CHECK_PARSER_ERR(getCandidTypeFromTable(&txn, tx->candid_rootType)) CHECK_PARSER_ERR(readCandidRecordLength(&txn)) - if (txn.txn_length != 3) { + // at least we need to have the 2 non opt fields already defined in the did file + if (txn.txn_length < 2) { return parser_unexpected_value; } - txn.element.variant_index = 0; - CHECK_PARSER_ERR(readCandidInnerElement(&txn, &txn.element)) - if (txn.element.field_hash != hash_neuron_ids) { - return parser_unexpected_type; - } - - // reset txn - CHECK_PARSER_ERR(getCandidTypeFromTable(&txn, tx->candid_rootType)) - CHECK_PARSER_ERR(readCandidRecordLength(&txn)) - - txn.element.variant_index = 1; - CHECK_PARSER_ERR(readCandidInnerElement(&txn, &txn.element)) - CHECK_PARSER_ERR(getCandidTypeFromTable(&txn, txn.element.implementation)) - CHECK_PARSER_ERR(readCandidOptional(&txn)) - if (txn.element.implementation != Bool) { - return parser_unexpected_type; - } - - // reset txn - CHECK_PARSER_ERR(getCandidTypeFromTable(&txn, tx->candid_rootType)) - CHECK_PARSER_ERR(readCandidRecordLength(&txn)) - - txn.element.variant_index = 2; - CHECK_PARSER_ERR(readCandidInnerElement(&txn, &txn.element)) - if (txn.element.field_hash != hash_include_neurons_readable_by_caller || - txn.element.implementation != Bool) { - return parser_unexpected_type; + uint64_t n_fields = txn.txn_length; + + //Array to save opt fields positon in the record + uint8_t opt_fields_pos[MAX_FIELDS] = {0}; + + // Check types before parsing + for (uint64_t i = 0; i < n_fields; i++){ + //reset txn + CHECK_PARSER_ERR(getCandidTypeFromTable(&txn, tx->candid_rootType)) + CHECK_PARSER_ERR(readCandidRecordLength(&txn)) + //jump to index + txn.element.variant_index = i; + CHECK_PARSER_ERR(readCandidInnerElement(&txn, &txn.element)) + + //element is not any of the non opt expected fields than its probably an optinal + if (txn.element.field_hash == hash_neuron_ids) { + opt_fields_pos[i] = TYPE_NEURONS_IDS; + } else if (txn.element.field_hash == hash_include_neurons_readable_by_caller && + txn.element.implementation == Bool) { + opt_fields_pos[i] = TYPE_CALLER; + } else { + CHECK_PARSER_ERR(getCandidTypeFromTable(&txn, txn.element.implementation)) + // Check that is an opt(inside the function) if not return error, not an expected type + CHECK_PARSER_ERR(readCandidOptional(&txn)) + opt_fields_pos[i] = TYPE_OPT; + } } // let's read candid_ListNeurons_t *val = &tx->tx_fields.call.data.candid_listNeurons; uint64_t tmp_neuron_id = 0; - CHECK_PARSER_ERR(readCandidByte(&ctx, &val->neuron_ids_size)) - - val->neuron_ids_ptr = ctx.buffer + ctx.offset; - for (uint8_t i = 0; i < val->neuron_ids_size; i++) { - CHECK_PARSER_ERR(readCandidNat64(&ctx, &tmp_neuron_id)) - } - - CHECK_PARSER_ERR(readCandidByte(&ctx, &val->has_include_empty_neurons_readable_by_caller)) - if(val->has_include_empty_neurons_readable_by_caller) { - CHECK_PARSER_ERR(readCandidByte(&ctx, &val->include_empty_neurons_readable_by_caller)) + uint8_t tmp_presence = 0; + for( uint64_t i = 0; i < n_fields; i++) { + // If opt_fields_pos is 0 we have a opt field in this position + switch (opt_fields_pos[i]) { + case TYPE_OPT: // read the optinal, expect its null or empty if not return error + CHECK_PARSER_ERR(readCandidByte(&ctx, &tmp_presence)) + if(tmp_presence){ //expect empty optionals + return parser_unexpected_value; + } + break; + case TYPE_NEURONS_IDS: //read number os ids + CHECK_PARSER_ERR(readCandidByte(&ctx, &val->neuron_ids_size)) + + val->neuron_ids_ptr = ctx.buffer + ctx.offset; + for (uint8_t j = 0; j < val->neuron_ids_size; j++) { + CHECK_PARSER_ERR(readCandidNat64(&ctx, &tmp_neuron_id)) + } + break; + case TYPE_CALLER: // read bool + CHECK_PARSER_ERR(readCandidByte(&ctx, &val->include_neurons_readable_by_caller)) + break; + default: + return parser_unexpected_value; + } } - CHECK_PARSER_ERR(readCandidByte(&ctx, &val->include_neurons_readable_by_caller)) return parser_ok; } diff --git a/tests/phase2.json b/tests/phase2.json index 7b5d166f..b7e9f406 100644 --- a/tests/phase2.json +++ b/tests/phase2.json @@ -469,7 +469,7 @@ }, { "index": 200, - "name": "List Neurons", + "name": "List Neurons empty opt", "blob": "d9d9f7a167636f6e74656e74a66361726758224449444c036d786e7e6c03acbe9cc50700ccd2d3bf0c01dabcd1c70d7e01020000016b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b17e4dd23029fe8006b6d6574686f645f6e616d656c6c6973745f6e6575726f6e736c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302", "output": ["0 | Transaction type : List Own Neurons"], "output_expert": ["0 | Transaction type : List Own Neurons"], @@ -478,7 +478,7 @@ { "index": 201, "name": "List Neurons", - "blob": "d9d9f7a167636f6e74656e74a66361726758334449444c036d786e7e6c03acbe9cc50700ccd2d3bf0c01dabcd1c70d7e01020200c8c056ea395dd500406c4830c8a17a0101006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b17e4dd23029fe8006b6d6574686f645f6e616d656c6c6973745f6e6575726f6e736c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302", + "blob": "d9d9f7a167636f6e74656e74a66361726758324449444c036d786e7e6c03acbe9cc50700ccd2d3bf0c01dabcd1c70d7e01020200c8c056ea395dd500406c4830c8a17a00006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b17e4dd23029fe8006b6d6574686f645f6e616d656c6c6973745f6e6575726f6e736c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302", "output": [ "0 | Transaction type : List Own Neurons", "1 | Neuron ID 1 : 15374508381553346560", @@ -1204,5 +1204,13 @@ "4 | Followees (2/3) : 3141242222", "5 | Followees (3/3) : 8836564053576663040" ] + }, + { + "index": 376, + "name": "List Neurons no opt", + "blob": "d9d9f7a167636f6e74656e74a66361726758194449444c026d786c02acbe9cc50700dabcd1c70d7e010100016b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b1717844f7cfe21c06b6d6574686f645f6e616d656c6c6973745f6e6575726f6e736c726571756573745f747970656463616c6c6673656e6465724104", + "output": ["0 | Transaction type : List Own Neurons"], + "output_expert": ["0 | Transaction type : List Own Neurons"], + "valid": true } ] diff --git a/tests_zemu/tests/candid.test.ts b/tests_zemu/tests/candid.test.ts index 52aab38d..9d1ab5ad 100644 --- a/tests_zemu/tests/candid.test.ts +++ b/tests_zemu/tests/candid.test.ts @@ -59,7 +59,7 @@ const CANDID_TRANSACTIONS = [ }, { name: 'candid_list_neurons', - blob: 'd9d9f7a167636f6e74656e74a66361726758334449444c036d786e7e6c03acbe9cc50700ccd2d3bf0c01dabcd1c70d7e01020200c8c056ea395dd500406c4830c8a17a0101006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b17e4dd23029fe8006b6d6574686f645f6e616d656c6c6973745f6e6575726f6e736c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + blob: 'd9d9f7a167636f6e74656e74a66361726758324449444c036d786e7e6c03acbe9cc50700ccd2d3bf0c01dabcd1c70d7e01020200c8c056ea395dd500406c4830c8a17a00006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b17e4dd23029fe8006b6d6574686f645f6e616d656c6c6973745f6e6575726f6e736c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', }, { name: 'candid_stake_maturity', From 6498d39745e3b6e6c7ba2a02d8fd9940a075bddf Mon Sep 17 00:00:00 2001 From: Carlos Medeiros Date: Tue, 27 Aug 2024 10:00:56 +0100 Subject: [PATCH 2/2] update snapshots --- tests_zemu/snapshots/fl-mainmenu/00004.png | Bin 9760 -> 9616 bytes tests_zemu/snapshots/s-mainmenu/00004.png | Bin 423 -> 417 bytes tests_zemu/snapshots/s-mainmenu/00010.png | Bin 423 -> 417 bytes tests_zemu/snapshots/sp-mainmenu/00004.png | Bin 365 -> 358 bytes tests_zemu/snapshots/sp-mainmenu/00010.png | Bin 365 -> 358 bytes tests_zemu/snapshots/st-mainmenu/00004.png | Bin 11453 -> 11327 bytes tests_zemu/snapshots/x-mainmenu/00004.png | Bin 365 -> 358 bytes tests_zemu/snapshots/x-mainmenu/00010.png | Bin 365 -> 358 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests_zemu/snapshots/fl-mainmenu/00004.png b/tests_zemu/snapshots/fl-mainmenu/00004.png index c9745da2582c2186c7126caee6fb16a08ad748e9..6ac505ab5584f0c11f6c9f9ec6363964e9d1743b 100644 GIT binary patch literal 9616 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 diff --git a/tests_zemu/snapshots/s-mainmenu/00004.png b/tests_zemu/snapshots/s-mainmenu/00004.png index 5881e83f351ac442881f217d55148e43e23f151e..de5c7384652e7ffd88a1f93cad728ec31ed831b2 100644 GIT binary patch delta 390 zcmV;10eSwX1EB+uB!6g0L_t(|ob8!O5`-`aMbXmxAJ~PxNLLCOGC0NPe=93O+WH_w zng{>@0JxBKp>;8?4{r4erq&No$uPHmf|F?)0G`W1*>#~|{;$UiVL&Vl(SWaT$Hxb3 zZ1&4hO0F!CQDLHuw}bEsG3bO_-hhyjJS!7&lS*5W^`2u_x_?K?0#Muc%7sW1ku3eX`pfiGP#X$;%D0?oVU?Lz+kR^2Ou(r?>5SMqTqEW_A+4y=>NnS+{zfPUUxi zDO^^~IE>??X5qW<_3UTt?9px<9nji~S7dxvo)gR^XhcvlN4>j4*4*z`G4 k|BX}S4gdfE0017$4?()yYC#>Z-T(jq07*qoM6N<$f^8YKfB*mh delta 397 zcmV;80doGK1E&L!B!6y6L_t(|ob8#*5`!=ZMX_W5|ASrFMLG=SVG>^{?L8|el4vgo z2_*sm001szU1(jL>w`=E1oP+@=wy11euI-4>HrzbMcH+s>G>Y#3uQpU4QwDs~P@7115J=Q9MexveC5qK4G+ME01_~^c*-Q%usCy9iT#BA1 zOV1w`c20G@0JxBKp>;8?4{r4erq&No$uPHmf|F?)0G`W1*>#~|{;$UiVL&Vl(SWaT$Hxb3 zZ1&4hO0F!CQDLHuw}bEsG3bO_-hhyjJS!7&lS*5W^`2u_x_?K?0#Muc%7sW1ku3eX`pfiGP#X$;%D0?oVU?Lz+kR^2Ou(r?>5SMqTqEW_A+4y=>NnS+{zfPUUxi zDO^^~IE>??X5qW<_3UTt?9px<9nji~S7dxvo)gR^XhcvlN4>j4*4*z`G4 k|BX}S4gdfE0017$4?()yYC#>Z-T(jq07*qoM6N<$f^8YKfB*mh delta 397 zcmV;80doGK1E&L!B!6y6L_t(|ob8#*5`!=ZMX_W5|ASrFMLG=SVG>^{?L8|el4vgo z2_*sm001szU1(jL>w`=E1oP+@=wy11euI-4>HrzbMcH+s>G>Y#3uQpU4QwDs~P@7115J=Q9MexveC5qK4G+ME01_~^c*-Q%usCy9iT#BA1 zOV1w`c20GcsWAEv@2^0A=^89j3-+w;cq4PxB z=;#y%1UTT@+0pUkxc$E?kv4nSH!PjA`MbbAvF!|1dec)}Ri4M3yWae)Y00So{R`FmqB>nBOD6yIXS8_FgrNdN;M6 zQSI48)1_TA-!JO$zVJLS>a~BpQBLJ8rX4oNu9nPVu9WHh}u+`IBEBwC;)Vige zSW-X3@ye2VgRBRgp(lj@AD;KCB46)uMB={2WZS&9TicsWAEv@2^0A=@^Us`-FsetangzK zkRwwV5a57kXGh1E+wyU*H1h7r{#Z6=bGi6EvF!|1I@42JRi4LuyWab(Wyz@k{|nV6 zhdEexSCuEMaa%dr_k5`4E6Z!5v%;3L?SJ`|>%VpV0v=CWE%n0Xc{j`!-^-HF{eEgc zgYf4Qvx1JEDGxs4e&Kas)cN^!={G)YVJ(<>>}ts@-b#sWm)zGLS-UvS?2+vqm0ula zCV1AHH?Q!lPrq_N*k93qPrL2ck8v@-HYV(ANcJ^%*8M%_NWsj5RwkLEE=Tkqs;${@ zbMDQ8fav(6cNo2`HMQ-z1Kr|QSqCv*bMdopjqSTuzt3)`--j>3H<-Sx`QM!xqC3~x fI1u4^hJTl3^QPRaNjapr3nc34>gTe~DWM4fkZhYU diff --git a/tests_zemu/snapshots/sp-mainmenu/00010.png b/tests_zemu/snapshots/sp-mainmenu/00010.png index 04691c285c1a20e6b2e0b257c9fe451b7fe772eb..c609516d2c769a1df36bf4143126bfba962ec356 100644 GIT binary patch delta 331 zcmaFM^o(hOO1-Y9i(^Q|oVPa<`I;4Y+7h?DQM>csWAEv@2^0A=^89j3-+w;cq4PxB z=;#y%1UTT@+0pUkxc$E?kv4nSH!PjA`MbbAvF!|1dec)}Ri4M3yWae)Y00So{R`FmqB>nBOD6yIXS8_FgrNdN;M6 zQSI48)1_TA-!JO$zVJLS>a~BpQBLJ8rX4oNu9nPVu9WHh}u+`IBEBwC;)Vige zSW-X3@ye2VgRBRgp(lj@AD;KCB46)uMB={2WZS&9TicsWAEv@2^0A=@^Us`-FsetangzK zkRwwV5a57kXGh1E+wyU*H1h7r{#Z6=bGi6EvF!|1I@42JRi4LuyWab(Wyz@k{|nV6 zhdEexSCuEMaa%dr_k5`4E6Z!5v%;3L?SJ`|>%VpV0v=CWE%n0Xc{j`!-^-HF{eEgc zgYf4Qvx1JEDGxs4e&Kas)cN^!={G)YVJ(<>>}ts@-b#sWm)zGLS-UvS?2+vqm0ula zCV1AHH?Q!lPrq_N*k93qPrL2ck8v@-HYV(ANcJ^%*8M%_NWsj5RwkLEE=Tkqs;${@ zbMDQ8fav(6cNo2`HMQ-z1Kr|QSqCv*bMdopjqSTuzt3)`--j>3H<-Sx`QM!xqC3~x fI1u4^hJTl3^QPRaNjapr3nc34>gTe~DWM4fkZhYU diff --git a/tests_zemu/snapshots/st-mainmenu/00004.png b/tests_zemu/snapshots/st-mainmenu/00004.png index e500a5c174cfc301d205ca223d558859b4656b67..253fef150226858baed2b8148d5331adf5ba5644 100644 GIT binary patch delta 6606 zcmXAtdmz)_8^={ra_gd!%XFcXxy)tc`cAtna7k9%B2lKkDGfwND~Z*n zn|10GPu5@!ZeZVQJU=SrIm??@%ZLqiw4H6L7ycFr8>mpO@z;ggshUDxDpbGOzlu!@ zNSCMf`xm%fk+<$Kuy#J@e1)~-T^?~A^p_uMszQ*utE@9%&2r};VHj^thkYv*wGi#!Dxs%^!V#>h1yKZ2l^G}F?m>)3R2oI(q* zw6G|Y6)o_SV1>S!y3(pF39-N_1XJ-VzZ^C`nQf8bnYrs?fAoslzfEwlaJSB#B|Q_1 zOG}ve(~zVE+uqQC_>9TFT5+ex?}7`UK`LdL>q;M=87C&SaDne{ZVaz9zbg8EiHb^$ zxB)Jn#3zO5Fz0+UIu4GLmnFejE5%s|W3)YQVly-judt9io}*EbUXo9ic99dXot z*O*mCamxjnHLRj^bUCOkiXpd(7SzNDlNxiU&Ex^%LROpDOHxi^>{VUmmS^bX! z|LA&coJc3%t75veuM53k2*P9ZPxH7Qg9POXY&t(U9_H9{Lu<4UE_U%2uQ9lRrJl%z zG6(m(7Cp$7Db$s&J2STGSRa+iv%dI}wV5gViH?o<$qi4&z zbUc$wUzX{lmu4P?c-(r8syZ*6yfY{&LfyY~kcTeIKfCLzSVfA~5*u$w!MK6L{M5w;lhzb5NanH_B zBIU>tAfZ7s?fc5c>H`Q?j-mTJ@9@s6C4Tz@*l8Hwcu9tCBKMk+PYM;vrWrPWx~q&I z{Rvx++HRGs)_R$}!|X~9KRs368g|)Pxdn+NAz7yqTkwQ%oFDu}Gk zIWM-;wj?dr9znaNWp#{)n3$7n#4Ou0&z{i)q|dS=V9l>PeN2;A*Vgo!3w+m}-rutB zFDD80iZ@kPvjn1|5G#{YQMVZj9eWpL@i*nomrJI?{VHGI)}Xy z#irT6ck2UV_iba*p<;FKU2_ALgNBs{!((jQ(Q#Axd=&e@Wj=9O|HTO62;_*Bk=Ae_`T)LQ9!wfOpTu z9q1)7bLtN7^mdxQV%6DSR9eb7Kiw5_pv-ABeENA_5OYwt!uaOuGJeGqi8TD4 zeb+5|b+|E@@p=9x2F(~Gpqv4Dj-pF`zHlQtP>xpju4vy>9cCmh2ehfEM`oWuTtXsy z3}!0tl;-_$ip_w#4jNG@?M01LjEysx0+7fVrtPs#i5TT+d^%eQemi+;Fxdo>WbNE1 zzQ=y6eSz82(SitwzQtS? z`IQ=CESJCFiXU43M7;md53EjkBY;vMbvS+I-&jNYHf1W>pgi7F!NrL4 z%VUTlgkoIW|Bk%LY25YbFXle`U+Uno(EN03rRU9ZYsLkJ$1gNzclx*@Z|R7N+#3mc zwqXcJWq|2@Zr~yh%b$DClgXNp9P&}99QV*o#kjIUhgYs$fX<%klq#tq3+|m>wtJcf zd?B~Lw%d`evKw?2iHZoD3DoNG+Ez^V6Y}6e>5IDs|Fj*T)}o!|TbWZe%T1gE^iLGz z<=74=vtX=e;?~)Yp^WWApNKi?X4y_z9X8R4+&=fmaKBsFFO~iNG&V^Z3C#+5*VCG~ zqwd#-N{1v;Q)G2i&6oJ4-E3N@DiN3#4Q=++!Kx@|+B#!&WSQgiuE!BojYci!x_kC3 zGN~{3DOq<-Zo4!>hb#ujlrc!!(q~sJHa=Ge-cCPWty%lT?_1s7wpojTc|Czv`Qe>l z2B=#NUoj~$aO8QeTnZZ&HsM22J}vRxv=$PBT6^Kn;-{^pOSPrxu-_1EV9uRKKE8C$ z*}!b57!y9KrPI@~ojdkfMUz8RbES4it!Am1XZVpqRHI1OxU=osbXMXUcQGz*5_9jP zdkh$>D4}!eZ{Lc`^G3`NQ{$QL0=Has2g0Yw^I$IP@{vq$=(jbqH(nadqs(=1jl(a1 z0SDw}S

ku-aW>90|;K=gXLYG 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 I>hcsWAEv@2^0A=^89j3-+w;cq4PxB z=;#y%1UTT@+0pUkxc$E?kv4nSH!PjA`MbbAvF!|1dec)}Ri4M3yWae)Y00So{R`FmqB>nBOD6yIXS8_FgrNdN;M6 zQSI48)1_TA-!JO$zVJLS>a~BpQBLJ8rX4oNu9nPVu9WHh}u+`IBEBwC;)Vige zSW-X3@ye2VgRBRgp(lj@AD;KCB46)uMB={2WZS&9TicsWAEv@2^0A=@^Us`-FsetangzK zkRwwV5a57kXGh1E+wyU*H1h7r{#Z6=bGi6EvF!|1I@42JRi4LuyWab(Wyz@k{|nV6 zhdEexSCuEMaa%dr_k5`4E6Z!5v%;3L?SJ`|>%VpV0v=CWE%n0Xc{j`!-^-HF{eEgc zgYf4Qvx1JEDGxs4e&Kas)cN^!={G)YVJ(<>>}ts@-b#sWm)zGLS-UvS?2+vqm0ula zCV1AHH?Q!lPrq_N*k93qPrL2ck8v@-HYV(ANcJ^%*8M%_NWsj5RwkLEE=Tkqs;${@ zbMDQ8fav(6cNo2`HMQ-z1Kr|QSqCv*bMdopjqSTuzt3)`--j>3H<-Sx`QM!xqC3~x fI1u4^hJTl3^QPRaNjapr3nc34>gTe~DWM4fkZhYU diff --git a/tests_zemu/snapshots/x-mainmenu/00010.png b/tests_zemu/snapshots/x-mainmenu/00010.png index 04691c285c1a20e6b2e0b257c9fe451b7fe772eb..c609516d2c769a1df36bf4143126bfba962ec356 100644 GIT binary patch delta 331 zcmaFM^o(hOO1-Y9i(^Q|oVPa<`I;4Y+7h?DQM>csWAEv@2^0A=^89j3-+w;cq4PxB z=;#y%1UTT@+0pUkxc$E?kv4nSH!PjA`MbbAvF!|1dec)}Ri4M3yWae)Y00So{R`FmqB>nBOD6yIXS8_FgrNdN;M6 zQSI48)1_TA-!JO$zVJLS>a~BpQBLJ8rX4oNu9nPVu9WHh}u+`IBEBwC;)Vige zSW-X3@ye2VgRBRgp(lj@AD;KCB46)uMB={2WZS&9TicsWAEv@2^0A=@^Us`-FsetangzK zkRwwV5a57kXGh1E+wyU*H1h7r{#Z6=bGi6EvF!|1I@42JRi4LuyWab(Wyz@k{|nV6 zhdEexSCuEMaa%dr_k5`4E6Z!5v%;3L?SJ`|>%VpV0v=CWE%n0Xc{j`!-^-HF{eEgc zgYf4Qvx1JEDGxs4e&Kas)cN^!={G)YVJ(<>>}ts@-b#sWm)zGLS-UvS?2+vqm0ula zCV1AHH?Q!lPrq_N*k93qPrL2ck8v@-HYV(ANcJ^%*8M%_NWsj5RwkLEE=Tkqs;${@ zbMDQ8fav(6cNo2`HMQ-z1Kr|QSqCv*bMdopjqSTuzt3)`--j>3H<-Sx`QM!xqC3~x fI1u4^hJTl3^QPRaNjapr3nc34>gTe~DWM4fkZhYU