getprop("ro.product.device") == "cas" || abort("E3004: This package is for \"cas\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/cas/cas:12/RKQ1.211001.001/V13.0.4.0.SJJCNXM:user/release-keys");
ui_print("Target: Xiaomi/cas/cas:12/RKQ1.211001.001/V13.0.5.0.SJJCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/cas/cas:12/RKQ1.211001.001/V13.0.4.0.SJJCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/cas/cas:12/RKQ1.211001.001/V13.0.5.0.SJJCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/cas/cas:12/RKQ1.211001.001/V13.0.4.0.SJJCNXM:user/release-keys or Xiaomi/cas/cas:12/RKQ1.211001.001/V13.0.5.0.SJJCNXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f74650a34def4aabc1f55ef48dde0b1b0481a5f7"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:7dfcff525e2061a0d2f6a76efb0e1b678d0df655")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f74650a34def4aabc1f55ef48dde0b1b0481a5f7"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:7dfcff525e2061a0d2f6a76efb0e1b678d0df655"),"\" has unexpected contents."));
apply_patch_space(181874688) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "44,1,28,40,54,1061,1062,1594,8319,8332,8333,10313,10314,19443,22571,23561,23562,24013,26539,26852,26853,29022,29023,29076,29077,29501,29502,29714,65409,65536,65548,65680,69757,69759,341958,341987,1212421,1212428,1245185,1245196,1259817,1263633,1283654,1283911,1283912") == "b51e640e97278f3fe467fd3f589e971f18fb1121" || block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block(map_partition("system"));
ifelse (block_image_recover(map_partition("system"), "44,1,28,40,54,1061,1062,1594,8319,8332,8333,10313,10314,19443,22571,23561,23562,24013,26539,26852,26853,29022,29023,29076,29077,29501,29502,29714,65409,65536,65548,65680,69757,69759,341958,341987,1212421,1212428,1245185,1245196,1259817,1263633,1283654,1283911,1283912") && block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"), ui_print("system recovered successfully."), abort("E1004: system partition fails to recover"));
endif;
if (range_sha1(map_partition("vendor"), "596,1,142,153,155,162,163,243,249,257,258,266,268,274,275,1101,1103,1122,1123,1130,1132,1137,1138,1383,1385,1392,1393,1399,1401,1406,1407,1416,1418,1423,1424,1429,1431,1436,1437,1440,1441,1727,2199,2406,2788,2951,3002,3093,3094,5858,5859,6416,6417,15359,15360,15559,15592,16483,16485,16489,16491,16492,16493,16514,16515,16516,16517,16520,16521,16526,16527,16528,16529,16533,16534,16538,16539,16543,16544,16548,16549,16553,16554,16558,16559,16560,16561,16564,16566,16567,16568,16570,16572,16573,16574,16577,16578,16579,16580,16583,16584,16585,16586,16589,16590,16591,16592,16595,16596,16597,16598,16602,16603,16607,16608,16611,16613,16617,16618,16621,16623,16624,16625,16629,16630,16631,16632,16635,16636,16637,16638,16641,16642,16643,16644,16647,16648,16649,16650,16653,16655,16656,16657,16660,16661,16662,16663,16668,16669,16673,16674,16678,16679,16683,16684,16688,16689,17050,17051,17968,17975,32768,32770,32883,32907,59526,59527,60156,60158,60212,60213,64931,64933,65536,65555,65589,65590,65686,65687,66815,66816,66844,66848,66911,66912,66938,66942,67279,67280,67327,67331,69776,69777,70393,70394,72121,72122,78627,78628,83193,83194,90788,90789,98304,98306,98419,98438,98690,98691,102459,102460,102464,102466,102483,102484,102519,102520,102529,102530,102673,102674,102729,102730,102736,102737,103442,103443,103446,103447,105785,105786,105811,105812,105848,105849,105962,105963,106014,106015,106491,106492,110718,110719,110725,110726,110744,110745,110866,110867,110869,110871,110935,110936,111006,111007,111074,111075,111077,111078,111080,111081,111140,111142,111144,111145,111209,111210,111280,111281,111348,111349,111351,111352,111354,111360,111362,111363,111365,111367,111369,111381,111441,111442,111444,111445,111522,111523,111600,111601,111678,111679,111755,111756,111835,111836,111912,111913,111989,111990,112066,112067,112077,112078,112081,112082,112145,112146,112221,112222,112232,112233,112299,112300,112376,112377,112449,112450,112452,112453,112465,112471,112531,112532,112534,112535,112537,112538,112609,112610,112612,112613,112684,112685,112756,112757,112759,112760,112830,112831,112833,112834,112841,112842,112904,112905,112907,112908,112977,112978,112980,112981,113046,113047,113049,113050,113120,113121,113200,113201,113277,113278,113280,113281,113346,113347,113349,113350,113355,113356,113419,113420,113422,113423,113426,113427,113489,113491,113493,113494,113561,113562,113564,113565,113632,113633,113635,113636,113701,113702,113704,113705,113773,113774,113776,113777,113845,113846,113922,113923,113999,114000,114002,114003,114077,114078,114080,114081,114151,114152,114154,114155,114224,114225,114227,114228,114299,114300,114302,114303,114372,114373,114375,114376,114449,114450,114451,114452,114460,114461,114524,114525,114526,114527,114601,114602,114604,114605,114674,114675,114677,114678,114746,114747,114749,114750,114815,114816,114818,114819,114890,114891,114893,114894,114963,114964,114966,114967,115035,115036,115038,115039,115102,115103,115105,115106,115174,115175,115177,115178,115243,115244,115246,115247,115317,115318,115320,115321,115327,115328,115390,115391,115393,115394,115464,115465,115467,115468,115536,115537,115539,115540,115610,115611,115613,115614,115684,115685,115687,115688,115753,115754,115756,115757,115826,115827,115829,115830,116018,116019,116035,116036,116529,116531,120706,120707,120780,120781,120865,120866,120927,120928,120989,120990,121129,121130,121242,121243,121305,121306,121407,121408,121523,121524,121569,121570,121742,121743,121784,121785,121861,121862,122079,122080,122213,122214,122490,122491,122597,122598,122636,122637,122733,122734,122811,122812,123068,123070,123131,123132,123491,123501,123515,123516,123596,123597,123672,123680,123724,123725,123726,123727,123790,123791,123792,123794,123802,123804,123805,123806,123813,123814,123826,123847,124523,163842,163955,229378,229491,294914,295027,458762,458771,461667,463211,470553,470658,470659") == "bb6d0986059d50c15e6fb273638efe3a3b076cf3" || block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block(map_partition("vendor"));
ifelse (block_image_recover(map_partition("vendor"), "596,1,142,153,155,162,163,243,249,257,258,266,268,274,275,1101,1103,1122,1123,1130,1132,1137,1138,1383,1385,1392,1393,1399,1401,1406,1407,1416,1418,1423,1424,1429,1431,1436,1437,1440,1441,1727,2199,2406,2788,2951,3002,3093,3094,5858,5859,6416,6417,15359,15360,15559,15592,16483,16485,16489,16491,16492,16493,16514,16515,16516,16517,16520,16521,16526,16527,16528,16529,16533,16534,16538,16539,16543,16544,16548,16549,16553,16554,16558,16559,16560,16561,16564,16566,16567,16568,16570,16572,16573,16574,16577,16578,16579,16580,16583,16584,16585,16586,16589,16590,16591,16592,16595,16596,16597,16598,16602,16603,16607,16608,16611,16613,16617,16618,16621,16623,16624,16625,16629,16630,16631,16632,16635,16636,16637,16638,16641,16642,16643,16644,16647,16648,16649,16650,16653,16655,16656,16657,16660,16661,16662,16663,16668,16669,16673,16674,16678,16679,16683,16684,16688,16689,17050,17051,17968,17975,32768,32770,32883,32907,59526,59527,60156,60158,60212,60213,64931,64933,65536,65555,65589,65590,65686,65687,66815,66816,66844,66848,66911,66912,66938,66942,67279,67280,67327,67331,69776,69777,70393,70394,72121,72122,78627,78628,83193,83194,90788,90789,98304,98306,98419,98438,98690,98691,102459,102460,102464,102466,102483,102484,102519,102520,102529,102530,102673,102674,102729,102730,102736,102737,103442,103443,103446,103447,105785,105786,105811,105812,105848,105849,105962,105963,106014,106015,106491,106492,110718,110719,110725,110726,110744,110745,110866,110867,110869,110871,110935,110936,111006,111007,111074,111075,111077,111078,111080,111081,111140,111142,111144,111145,111209,111210,111280,111281,111348,111349,111351,111352,111354,111360,111362,111363,111365,111367,111369,111381,111441,111442,111444,111445,111522,111523,111600,111601,111678,111679,111755,111756,111835,111836,111912,111913,111989,111990,112066,112067,112077,112078,112081,112082,112145,112146,112221,112222,112232,112233,112299,112300,112376,112377,112449,112450,112452,112453,112465,112471,112531,112532,112534,112535,112537,112538,112609,112610,112612,112613,112684,112685,112756,112757,112759,112760,112830,112831,112833,112834,112841,112842,112904,112905,112907,112908,112977,112978,112980,112981,113046,113047,113049,113050,113120,113121,113200,113201,113277,113278,113280,113281,113346,113347,113349,113350,113355,113356,113419,113420,113422,113423,113426,113427,113489,113491,113493,113494,113561,113562,113564,113565,113632,113633,113635,113636,113701,113702,113704,113705,113773,113774,113776,113777,113845,113846,113922,113923,113999,114000,114002,114003,114077,114078,114080,114081,114151,114152,114154,114155,114224,114225,114227,114228,114299,114300,114302,114303,114372,114373,114375,114376,114449,114450,114451,114452,114460,114461,114524,114525,114526,114527,114601,114602,114604,114605,114674,114675,114677,114678,114746,114747,114749,114750,114815,114816,114818,114819,114890,114891,114893,114894,114963,114964,114966,114967,115035,115036,115038,115039,115102,115103,115105,115106,115174,115175,115177,115178,115243,115244,115246,115247,115317,115318,115320,115321,115327,115328,115390,115391,115393,115394,115464,115465,115467,115468,115536,115537,115539,115540,115610,115611,115613,115614,115684,115685,115687,115688,115753,115754,115756,115757,115826,115827,115829,115830,116018,116019,116035,116036,116529,116531,120706,120707,120780,120781,120865,120866,120927,120928,120989,120990,121129,121130,121242,121243,121305,121306,121407,121408,121523,121524,121569,121570,121742,121743,121784,121785,121861,121862,122079,122080,122213,122214,122490,122491,122597,122598,122636,122637,122733,122734,122811,122812,123068,123070,123131,123132,123491,123501,123515,123516,123596,123597,123672,123680,123724,123725,123726,123727,123790,123791,123792,123794,123802,123804,123805,123806,123813,123814,123826,123847,124523,163842,163955,229378,229491,294914,295027,458762,458771,461667,463211,470553,470658,470659") && block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat"), ui_print("vendor recovered successfully."), abort("E2004: vendor partition fails to recover"));
endif;
if (range_sha1(map_partition("product"), "110,1,20,36,40,44,45,52,53,56,57,60,61,178,184,185,186,199,205,206,207,1004,1008,1024,1025,4881,4883,18548,18549,20769,20771,32768,32781,40937,40938,41512,41513,43568,43569,46036,46037,47114,47252,47773,47774,51718,51719,51722,51729,51737,51738,56324,56325,56427,56428,56430,56432,56443,56445,56455,56456,56545,56546,56558,56559,56573,56575,56584,56585,56587,56588,56895,56896,56897,56898,56899,56901,56910,56911,56913,56914,56990,56991,56993,56994,57059,57060,57113,57114,57156,57157,58574,58581,58589,58596,58636,58643,58669,58676,58701,58708,58728,58729,58743,98316,98317,117400,117753,119623,119660,119661") == "19c471a3d818bace70614b2a9b41ef58b1740425" || block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
ifelse (block_image_recover(map_partition("product"), "110,1,20,36,40,44,45,52,53,56,57,60,61,178,184,185,186,199,205,206,207,1004,1008,1024,1025,4881,4883,18548,18549,20769,20771,32768,32781,40937,40938,41512,41513,43568,43569,46036,46037,47114,47252,47773,47774,51718,51719,51722,51729,51737,51738,56324,56325,56427,56428,56430,56432,56443,56445,56455,56456,56545,56546,56558,56559,56573,56575,56584,56585,56587,56588,56895,56896,56897,56898,56899,56901,56910,56911,56913,56914,56990,56991,56993,56994,57059,57060,57113,57114,57156,57157,58574,58581,58589,58596,58636,58643,58669,58676,58701,58708,58728,58729,58743,98316,98317,117400,117753,119623,119660,119661") && block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat"), ui_print("product recovered successfully."), abort("E2004: product partition fails to recover"));
endif;
if (range_sha1(map_partition("odm"), "14,1,2,9,13,2026,2033,2040,2041,2049,2050,32231,32745,32767,32768") == "80e905474865bd2b884bf0e6b3cc87b779e1e753" || block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat")) then
ui_print("Verified odm image...");
else
ifelse (block_image_recover(map_partition("odm"), "14,1,2,9,13,2026,2033,2040,2041,2049,2050,32231,32745,32767,32768") && block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat"), ui_print("odm recovered successfully."), abort("E2004: odm partition fails to recover"));
endif;
if (range_sha1(map_partition("system_ext"), "260,1,31,27966,27968,27976,27980,27984,27985,28047,28053,28054,28055,28107,28113,28114,28115,28119,28125,28126,28127,28132,28133,28550,28554,28566,28567,28579,28585,28586,28587,28592,28598,28599,28600,28606,28610,28611,28612,28624,28630,28631,28632,28638,28639,28652,28658,28659,28666,28685,28686,28827,28828,28909,28910,28922,28923,28925,28926,28927,28928,28929,28931,28932,28933,28934,28935,28965,28977,28979,28980,28981,28982,28992,28993,29016,29017,29056,29057,29062,29064,29166,29167,29169,29171,29180,29181,29713,29717,29723,29725,29729,29733,29734,29738,29739,29743,29744,29748,29749,29753,29754,29758,29759,29763,29764,29768,29769,29773,29774,29778,29779,29783,29784,29788,29789,29791,29799,29803,29804,29808,29809,29813,29814,29816,29817,29821,29822,29826,29827,29831,29832,29836,29837,29841,29842,29846,29847,29851,29852,29854,29859,29861,29866,29870,29871,29875,29876,29880,29881,29883,29884,29888,29889,29893,29894,29898,29899,29903,29904,29908,29909,29913,29914,29916,29917,29921,29922,29926,29927,29929,29930,29933,29936,29990,29993,30095,32768,32797,33044,33068,33325,33588,33724,33838,34729,34730,34873,34874,36124,36138,36218,36250,37762,37771,37826,37847,38285,38286,38300,38301,38311,38414,38452,38453,38762,38763,41389,41393,43454,43455,48021,48052,48436,48770,48950,49103,50475,50476,51105,51106,52729,52747,52868,52913,59217,59229,59317,59348,60081,60082,60114,60252,60293,60294,60613,60614,63953,63959,65536,65564,67146,67147,72666,72737,72738,73967,73972,73974,73975,73992,75798,75800,75823,98328,98329,128183,128576,130617,130657,130658") == "f80aac16606156e5c4cd100cae8f53cb78eaf026" || block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat")) then
ui_print("Verified system_ext image...");
else
check_first_block(map_partition("system_ext"));
ifelse (block_image_recover(map_partition("system_ext"), "260,1,31,27966,27968,27976,27980,27984,27985,28047,28053,28054,28055,28107,28113,28114,28115,28119,28125,28126,28127,28132,28133,28550,28554,28566,28567,28579,28585,28586,28587,28592,28598,28599,28600,28606,28610,28611,28612,28624,28630,28631,28632,28638,28639,28652,28658,28659,28666,28685,28686,28827,28828,28909,28910,28922,28923,28925,28926,28927,28928,28929,28931,28932,28933,28934,28935,28965,28977,28979,28980,28981,28982,28992,28993,29016,29017,29056,29057,29062,29064,29166,29167,29169,29171,29180,29181,29713,29717,29723,29725,29729,29733,29734,29738,29739,29743,29744,29748,29749,29753,29754,29758,29759,29763,29764,29768,29769,29773,29774,29778,29779,29783,29784,29788,29789,29791,29799,29803,29804,29808,29809,29813,29814,29816,29817,29821,29822,29826,29827,29831,29832,29836,29837,29841,29842,29846,29847,29851,29852,29854,29859,29861,29866,29870,29871,29875,29876,29880,29881,29883,29884,29888,29889,29893,29894,29898,29899,29903,29904,29908,29909,29913,29914,29916,29917,29921,29922,29926,29927,29929,29930,29933,29936,29990,29993,30095,32768,32797,33044,33068,33325,33588,33724,33838,34729,34730,34873,34874,36124,36138,36218,36250,37762,37771,37826,37847,38285,38286,38300,38301,38311,38414,38452,38453,38762,38763,41389,41393,43454,43455,48021,48052,48436,48770,48950,49103,50475,50476,51105,51106,52729,52747,52868,52913,59217,59229,59317,59348,60081,60082,60114,60252,60293,60294,60613,60614,63953,63959,65536,65564,67146,67147,72666,72737,72738,73967,73972,73974,73975,73992,75798,75800,75823,98328,98329,128183,128576,130617,130657,130658") && block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat"), ui_print("system_ext recovered successfully."), abort("E2004: system_ext partition fails to recover"));
endif;

# ---- start making changes here ----


# ---- radio update tasks ----

ui_print("Patching firmware images...");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/xbl_config_5.elf", "/dev/block/bootdevice/by-name/xbl_config_5");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/xbl_5.elf", "/dev/block/bootdevice/by-name/xbl_5");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aop");
package_extract_file("firmware-update/featenabler.mbn", "/dev/block/bootdevice/by-name/featenabler");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/xbl_config_4.elf", "/dev/block/bootdevice/by-name/xbl_config_4");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/xbl_4.elf", "/dev/block/bootdevice/by-name/xbl_4");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/aop.mbn", "/dev/block/bootdevice/by-name/aopbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsecbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");

# --- Start patching dynamic partitions ---


# Patch partition vendor

ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

# Patch partition system_ext

ui_print("Patching system_ext image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat") ||
  abort("E2001: Failed to update system_ext image.");

# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

# Patch partition system

ui_print("Patching system image after verification.");
show_progress(0.500000, 0);
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");

# Patch partition product

ui_print("Patching product image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");

# Patch partition odm

ui_print("Patching odm image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat") ||
  abort("E2001: Failed to update odm image.");

# --- End patching dynamic partitions ---

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f74650a34def4aabc1f55ef48dde0b1b0481a5f7"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:7dfcff525e2061a0d2f6a76efb0e1b678d0df655"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:7dfcff525e2061a0d2f6a76efb0e1b678d0df655")));

# ---- radio update tasks 2 ----

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");
set_progress(1.000000);
