getprop("ro.product.device") == "nitrogen" || abort("E3004: This package is for \"nitrogen\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V12.0.1.0.QEDCNXM:user/release-keys");
ui_print("Target: Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V12.0.2.0.QEDCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V12.0.1.0.QEDCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V12.0.2.0.QEDCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V12.0.1.0.QEDCNXM:user/release-keys or Xiaomi/nitrogen/nitrogen:10/QKQ1.190910.002/V12.0.2.0.QEDCNXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 10);
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/boot:35517770:cf51508922da57838c083281b47f0475f8f068eb",
                      "EMMC:/dev/block/bootdevice/by-name/boot:35513674:2df6ee93c44ec18e913af0350d7b377f507df83e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:35517770:cf51508922da57838c083281b47f0475f8f068eb\" or \"EMMC:/dev/block/bootdevice/by-name/boot:35513674:2df6ee93c44ec18e913af0350d7b377f507df83e\" has unexpected contents.");
apply_patch_space(108883968) || abort("E3006: Not enough free space on /cache to apply patches.");

# ---- radio update verification ----

ui_print("Verifying radio-update...");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:2ebaa21c17b115501ff0e2fafaeeea6e2422910b",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:2ebaa21c17b115501ff0e2fafaeeea6e2422910b\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:2ebaa21c17b115501ff0e2fafaeeea6e2422910b",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:2ebaa21c17b115501ff0e2fafaeeea6e2422910b\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:224808:2aeb15a04a677cce9bf7a15b29dfd897d10ddf40",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:224808:b3e341f75840463e5fa907682dce8a4306182a7b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:224808:2aeb15a04a677cce9bf7a15b29dfd897d10ddf40\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:224808:b3e341f75840463e5fa907682dce8a4306182a7b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:2aeb15a04a677cce9bf7a15b29dfd897d10ddf40",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:b3e341f75840463e5fa907682dce8a4306182a7b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:2aeb15a04a677cce9bf7a15b29dfd897d10ddf40\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:b3e341f75840463e5fa907682dce8a4306182a7b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:8d787f18149740ec52535f333203a98ccdf4000e",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:e1f0542f48134d393898a0779dd0bd020d17c50f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:49068:8d787f18149740ec52535f333203a98ccdf4000e\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:49068:e1f0542f48134d393898a0779dd0bd020d17c50f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:8d787f18149740ec52535f333203a98ccdf4000e",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:e1f0542f48134d393898a0779dd0bd020d17c50f") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:8d787f18149740ec52535f333203a98ccdf4000e\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:e1f0542f48134d393898a0779dd0bd020d17c50f\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:117736960:41e0db65ca7b66eaf477bb05c4ef3d9ca8bdd65c",
                      "EMMC:/dev/block/bootdevice/by-name/modem:117720576:c03a297957d21f904cba59de75666bc01bdbb8d9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:117736960:41e0db65ca7b66eaf477bb05c4ef3d9ca8bdd65c\" or \"EMMC:/dev/block/bootdevice/by-name/modem:117720576:c03a297957d21f904cba59de75666bc01bdbb8d9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:0b725d56bdd29f95339d773bba9d7c9c1e86199d",
                      "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:f322290eaa3e7a86c780f9b198e2b2459faad69e") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:0b725d56bdd29f95339d773bba9d7c9c1e86199d\" or \"EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:f322290eaa3e7a86c780f9b198e2b2459faad69e\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl:2744928:c34bc6e47dc8f85820c98cf87f485082a405c4c6",
                      "EMMC:/dev/block/bootdevice/by-name/xbl:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl:2744928:c34bc6e47dc8f85820c98cf87f485082a405c4c6\" or \"EMMC:/dev/block/bootdevice/by-name/xbl:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:c34bc6e47dc8f85820c98cf87f485082a405c4c6",
                      "EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:c34bc6e47dc8f85820c98cf87f485082a405c4c6\" or \"EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/pmic:39896:2210844c68c6e7c09f56ab5331e9b55342919336",
                      "EMMC:/dev/block/bootdevice/by-name/pmic:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/pmic:39896:2210844c68c6e7c09f56ab5331e9b55342919336\" or \"EMMC:/dev/block/bootdevice/by-name/pmic:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:2210844c68c6e7c09f56ab5331e9b55342919336",
                      "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:2210844c68c6e7c09f56ab5331e9b55342919336\" or \"EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1974272:d0fbc95957849b2788c31213148b40ad48a64dff",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1974272:d0fbc95957849b2788c31213148b40ad48a64dff\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:d0fbc95957849b2788c31213148b40ad48a64dff",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:d0fbc95957849b2788c31213148b40ad48a64dff\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:a25d8bc740c395c361d1bde032bd0bda76ff41de",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:a25d8bc740c395c361d1bde032bd0bda76ff41de\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:a25d8bc740c395c361d1bde032bd0bda76ff41de",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:a25d8bc740c395c361d1bde032bd0bda76ff41de\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hyp:278528:95463c07eaa49055fb55d4d5dfedf328de233ced",
                      "EMMC:/dev/block/bootdevice/by-name/hyp:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hyp:278528:95463c07eaa49055fb55d4d5dfedf328de233ced\" or \"EMMC:/dev/block/bootdevice/by-name/hyp:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:95463c07eaa49055fb55d4d5dfedf328de233ced",
                      "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hypbak:278528:95463c07eaa49055fb55d4d5dfedf328de233ced\" or \"EMMC:/dev/block/bootdevice/by-name/hypbak:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:3c8bbdec89e3808298b2b6a0a0cd8d1ed6f0c6ff",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:316072:3c8bbdec89e3808298b2b6a0a0cd8d1ed6f0c6ff\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:3c8bbdec89e3808298b2b6a0a0cd8d1ed6f0c6ff",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:3c8bbdec89e3808298b2b6a0a0cd8d1ed6f0c6ff\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsec:49168:b419c1f17046e25b1a241a259d306e5dbf8452d5",
                      "EMMC:/dev/block/bootdevice/by-name/storsec:49168:24388f71509cd0ab4304f38def944dac754b5308") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsec:49168:b419c1f17046e25b1a241a259d306e5dbf8452d5\" or \"EMMC:/dev/block/bootdevice/by-name/storsec:49168:24388f71509cd0ab4304f38def944dac754b5308\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:b419c1f17046e25b1a241a259d306e5dbf8452d5",
                      "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:24388f71509cd0ab4304f38def944dac754b5308") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:b419c1f17046e25b1a241a259d306e5dbf8452d5\" or \"EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:24388f71509cd0ab4304f38def944dac754b5308\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abl:151552:5bdfd8aba0518e849d99edf58da4ce9837b0f745",
                      "EMMC:/dev/block/bootdevice/by-name/abl:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abl:151552:5bdfd8aba0518e849d99edf58da4ce9837b0f745\" or \"EMMC:/dev/block/bootdevice/by-name/abl:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:5bdfd8aba0518e849d99edf58da4ce9837b0f745",
                      "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:5bdfd8aba0518e849d99edf58da4ce9837b0f745\" or \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685\" has unexpected contents.");
apply_patch_space(117720576) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1("/dev/block/bootdevice/by-name/system", "154,1,518,698,712,743,750,752,753,1013,1018,1020,1021,1127,1128,1612,1613,2301,2302,2304,2306,2307,2308,2323,2324,2505,2506,2550,2693,2999,3158,3675,3676,3678,3679,3683,3684,3692,3693,3694,3695,4312,4435,6180,6225,7234,7279,9052,9053,9055,9056,9460,9461,9463,9464,10459,10461,16400,16401,16534,16535,19304,19306,20324,21794,23616,25000,25567,25569,26940,28804,31312,32770,32959,32960,33466,34026,34726,34727,34729,34731,34790,34791,34924,34926,35156,35157,35225,35226,35296,35297,35306,42687,42969,65537,66043,98306,98495,98496,99002,131073,131579,141992,142520,163842,164031,164032,164538,196609,197115,207348,208140,229378,229567,229568,230074,262145,262651,294914,295103,295104,295610,327681,328187,360449,360955,393217,393723,425985,426491,458753,459259,491521,492027,524289,524795,557057,557563,589825,590331,622593,623099,655361,655867,688129,688635,720897,721403,727547,753664,753665,774155,780254,780261,780715") == "a943dd7fec71211ade2bdcf3651efb873b3f07f1" || block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block("/dev/block/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "154,1,518,698,712,743,750,752,753,1013,1018,1020,1021,1127,1128,1612,1613,2301,2302,2304,2306,2307,2308,2323,2324,2505,2506,2550,2693,2999,3158,3675,3676,3678,3679,3683,3684,3692,3693,3694,3695,4312,4435,6180,6225,7234,7279,9052,9053,9055,9056,9460,9461,9463,9464,10459,10461,16400,16401,16534,16535,19304,19306,20324,21794,23616,25000,25567,25569,26940,28804,31312,32770,32959,32960,33466,34026,34726,34727,34729,34731,34790,34791,34924,34926,35156,35157,35225,35226,35296,35297,35306,42687,42969,65537,66043,98306,98495,98496,99002,131073,131579,141992,142520,163842,164031,164032,164538,196609,197115,207348,208140,229378,229567,229568,230074,262145,262651,294914,295103,295104,295610,327681,328187,360449,360955,393217,393723,425985,426491,458753,459259,491521,492027,524289,524795,557057,557563,589825,590331,622593,623099,655361,655867,688129,688635,720897,721403,727547,753664,753665,774155,780254,780261,780715") && block_image_verify("/dev/block/bootdevice/by-name/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("/dev/block/bootdevice/by-name/vendor", "148,1,437,698,706,716,717,798,799,863,864,866,877,882,883,885,886,1138,1164,1352,1402,1494,1495,1542,1582,2115,2863,4060,4061,4186,4249,4955,4956,5633,5634,6562,6567,11578,11579,32768,32770,32959,32960,33467,33468,34871,34872,38548,38550,38566,38568,38863,38864,38965,38966,48937,48940,48958,48959,49004,49005,49023,49025,49074,49081,49095,49096,49895,49896,49909,49910,49919,49920,49944,49945,49967,49977,50000,50005,50307,50309,50310,50311,50312,50314,50315,50316,50317,50319,50320,50321,50322,50324,50595,50596,50619,50622,52478,52479,52483,52485,52756,52757,52780,52783,54639,54640,54645,54646,54658,54659,55153,55155,61290,61291,61294,61488,61489,61677,61678,61695,61700,61705,61706,65537,66043,98306,98495,98496,99002,131073,131579,163842,164031,164032,164538,196609,197115,210686,229376,229378,294912,294914,753664,753665,774155,780254,780261,780625") == "4c67f1abbaa6961ecfa1c54c9a95b36d999f0bfd" || block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block("/dev/block/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/vendor", "148,1,437,698,706,716,717,798,799,863,864,866,877,882,883,885,886,1138,1164,1352,1402,1494,1495,1542,1582,2115,2863,4060,4061,4186,4249,4955,4956,5633,5634,6562,6567,11578,11579,32768,32770,32959,32960,33467,33468,34871,34872,38548,38550,38566,38568,38863,38864,38965,38966,48937,48940,48958,48959,49004,49005,49023,49025,49074,49081,49095,49096,49895,49896,49909,49910,49919,49920,49944,49945,49967,49977,50000,50005,50307,50309,50310,50311,50312,50314,50315,50316,50317,50319,50320,50321,50322,50324,50595,50596,50619,50622,52478,52479,52483,52485,52756,52757,52780,52783,54639,54640,54645,54646,54658,54659,55153,55155,61290,61291,61294,61488,61489,61677,61678,61695,61700,61705,61706,65537,66043,98306,98495,98496,99002,131073,131579,163842,164031,164032,164538,196609,197115,210686,229376,229378,294912,294914,753664,753665,774155,780254,780261,780625") && block_image_verify("/dev/block/bootdevice/by-name/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;

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


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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:2ebaa21c17b115501ff0e2fafaeeea6e2422910b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:224808:2aeb15a04a677cce9bf7a15b29dfd897d10ddf40",
                "EMMC:/dev/block/bootdevice/by-name/rpm:224808:b3e341f75840463e5fa907682dce8a4306182a7b",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:224808:b3e341f75840463e5fa907682dce8a4306182a7b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:8d787f18149740ec52535f333203a98ccdf4000e",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:e1f0542f48134d393898a0779dd0bd020d17c50f",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:49068:e1f0542f48134d393898a0779dd0bd020d17c50f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:117736960:41e0db65ca7b66eaf477bb05c4ef3d9ca8bdd65c",
                "EMMC:/dev/block/bootdevice/by-name/modem:117720576:c03a297957d21f904cba59de75666bc01bdbb8d9",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:117720576:c03a297957d21f904cba59de75666bc01bdbb8d9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:0b725d56bdd29f95339d773bba9d7c9c1e86199d",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:f322290eaa3e7a86c780f9b198e2b2459faad69e",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:f322290eaa3e7a86c780f9b198e2b2459faad69e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:2744928:c34bc6e47dc8f85820c98cf87f485082a405c4c6",
                "EMMC:/dev/block/bootdevice/by-name/xbl:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmic:39896:2210844c68c6e7c09f56ab5331e9b55342919336",
                "EMMC:/dev/block/bootdevice/by-name/pmic:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmic:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1974272:d0fbc95957849b2788c31213148b40ad48a64dff",
                "EMMC:/dev/block/bootdevice/by-name/tz:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:a25d8bc740c395c361d1bde032bd0bda76ff41de",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:278528:95463c07eaa49055fb55d4d5dfedf328de233ced",
                "EMMC:/dev/block/bootdevice/by-name/hyp:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:3c8bbdec89e3808298b2b6a0a0cd8d1ed6f0c6ff",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:49168:b419c1f17046e25b1a241a259d306e5dbf8452d5",
                "EMMC:/dev/block/bootdevice/by-name/storsec:49168:24388f71509cd0ab4304f38def944dac754b5308",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:49168:24388f71509cd0ab4304f38def944dac754b5308");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:5bdfd8aba0518e849d99edf58da4ce9837b0f745",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:2ebaa21c17b115501ff0e2fafaeeea6e2422910b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:2aeb15a04a677cce9bf7a15b29dfd897d10ddf40",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:b3e341f75840463e5fa907682dce8a4306182a7b",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:b3e341f75840463e5fa907682dce8a4306182a7b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:8d787f18149740ec52535f333203a98ccdf4000e",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:e1f0542f48134d393898a0779dd0bd020d17c50f",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:e1f0542f48134d393898a0779dd0bd020d17c50f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:c34bc6e47dc8f85820c98cf87f485082a405c4c6",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:2210844c68c6e7c09f56ab5331e9b55342919336",
                "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:d0fbc95957849b2788c31213148b40ad48a64dff",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:a25d8bc740c395c361d1bde032bd0bda76ff41de",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:95463c07eaa49055fb55d4d5dfedf328de233ced",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:3c8bbdec89e3808298b2b6a0a0cd8d1ed6f0c6ff",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:b419c1f17046e25b1a241a259d306e5dbf8452d5",
                "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:24388f71509cd0ab4304f38def944dac754b5308",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:24388f71509cd0ab4304f38def944dac754b5308");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:5bdfd8aba0518e849d99edf58da4ce9837b0f745",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:35517770:cf51508922da57838c083281b47f0475f8f068eb",
                "EMMC:/dev/block/bootdevice/by-name/boot:35513674:2df6ee93c44ec18e913af0350d7b377f507df83e",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:35513674:2df6ee93c44ec18e913af0350d7b377f507df83e");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:2ebaa21c17b115501ff0e2fafaeeea6e2422910b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:224808:2aeb15a04a677cce9bf7a15b29dfd897d10ddf40",
                "EMMC:/dev/block/bootdevice/by-name/rpm:224808:b3e341f75840463e5fa907682dce8a4306182a7b",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:224808:b3e341f75840463e5fa907682dce8a4306182a7b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:49068:8d787f18149740ec52535f333203a98ccdf4000e",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:49068:e1f0542f48134d393898a0779dd0bd020d17c50f",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:49068:e1f0542f48134d393898a0779dd0bd020d17c50f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:117736960:41e0db65ca7b66eaf477bb05c4ef3d9ca8bdd65c",
                "EMMC:/dev/block/bootdevice/by-name/modem:117720576:c03a297957d21f904cba59de75666bc01bdbb8d9",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:117720576:c03a297957d21f904cba59de75666bc01bdbb8d9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:0b725d56bdd29f95339d773bba9d7c9c1e86199d",
                "EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:f322290eaa3e7a86c780f9b198e2b2459faad69e",
                package_extract_file("patch/firmware-update/BTFM.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/bluetooth:569344:f322290eaa3e7a86c780f9b198e2b2459faad69e");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:2744928:c34bc6e47dc8f85820c98cf87f485082a405c4c6",
                "EMMC:/dev/block/bootdevice/by-name/xbl:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmic:39896:2210844c68c6e7c09f56ab5331e9b55342919336",
                "EMMC:/dev/block/bootdevice/by-name/pmic:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmic:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1974272:d0fbc95957849b2788c31213148b40ad48a64dff",
                "EMMC:/dev/block/bootdevice/by-name/tz:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:a25d8bc740c395c361d1bde032bd0bda76ff41de",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:278528:95463c07eaa49055fb55d4d5dfedf328de233ced",
                "EMMC:/dev/block/bootdevice/by-name/hyp:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:316072:3c8bbdec89e3808298b2b6a0a0cd8d1ed6f0c6ff",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:49168:b419c1f17046e25b1a241a259d306e5dbf8452d5",
                "EMMC:/dev/block/bootdevice/by-name/storsec:49168:24388f71509cd0ab4304f38def944dac754b5308",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:49168:24388f71509cd0ab4304f38def944dac754b5308");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:5bdfd8aba0518e849d99edf58da4ce9837b0f745",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:2ebaa21c17b115501ff0e2fafaeeea6e2422910b",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:222192:3ec929b51061ab8e2d18f47ca50ece0d46570b12");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:2aeb15a04a677cce9bf7a15b29dfd897d10ddf40",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:b3e341f75840463e5fa907682dce8a4306182a7b",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:224808:b3e341f75840463e5fa907682dce8a4306182a7b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:8d787f18149740ec52535f333203a98ccdf4000e",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:e1f0542f48134d393898a0779dd0bd020d17c50f",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:49068:e1f0542f48134d393898a0779dd0bd020d17c50f");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:c34bc6e47dc8f85820c98cf87f485082a405c4c6",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:2744928:bc0e16285acf330f66a6e4b13c1df550b957443b");
patch_partition("EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:2210844c68c6e7c09f56ab5331e9b55342919336",
                "EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0",
                package_extract_file("patch/firmware-update/pmic.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/pmicbak:39896:cac36f37b766e30082d76ae09be0c86b296c0eb0");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:d0fbc95957849b2788c31213148b40ad48a64dff",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1974272:2b57b8da66a031eb8b23d668d9a6cf4d5ebe2823");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:a25d8bc740c395c361d1bde032bd0bda76ff41de",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:274128:5ac9b77e79502c25eb16bbaa002f8d98f999d097");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:278528:95463c07eaa49055fb55d4d5dfedf328de233ced",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:278528:ac0b4694beee2f8b1cc8b11a6b8dc4891dca89a1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:3c8bbdec89e3808298b2b6a0a0cd8d1ed6f0c6ff",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29",
                package_extract_file("patch/firmware-update/keymaster64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:316072:759e5cd4f7ceea3033632bd40ab3531f5f611c29");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:b419c1f17046e25b1a241a259d306e5dbf8452d5",
                "EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:24388f71509cd0ab4304f38def944dac754b5308",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsecbak:49168:24388f71509cd0ab4304f38def944dac754b5308");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:5bdfd8aba0518e849d99edf58da4ce9837b0f745",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:e8526b2a3dbf1ff001a77826d5358f83b6160685");
show_progress(0.600000, 600);
ui_print("Patching system image after verification.");
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
ui_print("Patching vendor image after verification.");
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
show_progress(0.100000, 2);

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

ui_print("Patching vbmeta dtbo logo binimages...");
