getprop("ro.product.device") == "willow" || abort("E3004: This package is for \"willow\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: xiaomi/willow/willow:10/QKQ1.200114.002/V12.0.1.0.QCXMIXM:user/release-keys");
ui_print("Target: xiaomi/willow/willow:10/QKQ1.200114.002/V12.0.2.0.QCXMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "xiaomi/willow/willow:10/QKQ1.200114.002/V12.0.1.0.QCXMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "xiaomi/willow/willow:10/QKQ1.200114.002/V12.0.2.0.QCXMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of xiaomi/willow/willow:10/QKQ1.200114.002/V12.0.1.0.QCXMIXM:user/release-keys or xiaomi/willow/willow:10/QKQ1.200114.002/V12.0.2.0.QCXMIXM: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:67108864:474e54b2f88f7e65496cc11f6b9c35d0ac07c082",
                      "EMMC:/dev/block/bootdevice/by-name/boot:67108864:95e1d0d0a6e0c4631d26e175b694277565e2a5fa") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:474e54b2f88f7e65496cc11f6b9c35d0ac07c082\" or \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:95e1d0d0a6e0c4631d26e175b694277565e2a5fa\" has unexpected contents.");
apply_patch_space(126541824) || 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/uefisecapp:128791:45b4edbf00e2a63b5d8291e6f9b29fc01b72f667",
                      "EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:45b4edbf00e2a63b5d8291e6f9b29fc01b72f667\" or \"EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:45b4edbf00e2a63b5d8291e6f9b29fc01b72f667",
                      "EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:45b4edbf00e2a63b5d8291e6f9b29fc01b72f667\" or \"EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:e17ddd8cd80047d566be8a5ac0cefb313e5f376f",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:e17ddd8cd80047d566be8a5ac0cefb313e5f376f\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:e17ddd8cd80047d566be8a5ac0cefb313e5f376f",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:e17ddd8cd80047d566be8a5ac0cefb313e5f376f\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpm:223724:bee16aeb2c9c5add089eb02d511ed13d6a05c26d",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:223724:37472c56a83d9112ab806c2eb81fe03269188a55") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:223724:bee16aeb2c9c5add089eb02d511ed13d6a05c26d\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:223724:37472c56a83d9112ab806c2eb81fe03269188a55\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:bee16aeb2c9c5add089eb02d511ed13d6a05c26d",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:37472c56a83d9112ab806c2eb81fe03269188a55") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:bee16aeb2c9c5add089eb02d511ed13d6a05c26d\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:37472c56a83d9112ab806c2eb81fe03269188a55\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:42728:aadb7d5ae8281d00afd5a29ce394b066b7ceffc0",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:42728:7878170f0e10dafe1617b928fe345f7e21efca42") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:42728:aadb7d5ae8281d00afd5a29ce394b066b7ceffc0\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:42728:7878170f0e10dafe1617b928fe345f7e21efca42\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:aadb7d5ae8281d00afd5a29ce394b066b7ceffc0",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:7878170f0e10dafe1617b928fe345f7e21efca42") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:aadb7d5ae8281d00afd5a29ce394b066b7ceffc0\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:7878170f0e10dafe1617b928fe345f7e21efca42\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:121718272:a3cb0030382bd35bda62aba04a7888c2ce965b4f",
                      "EMMC:/dev/block/bootdevice/by-name/modem:121472512:c4d3e386347b4872e38f790d86f5618c1216b182") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:121718272:a3cb0030382bd35bda62aba04a7888c2ce965b4f\" or \"EMMC:/dev/block/bootdevice/by-name/modem:121472512:c4d3e386347b4872e38f790d86f5618c1216b182\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:238037:9647b80c118a9e99b28df5b7207215285e447908",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:238037:9647b80c118a9e99b28df5b7207215285e447908\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:9647b80c118a9e99b28df5b7207215285e447908",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:9647b80c118a9e99b28df5b7207215285e447908\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl:3528392:52d295faeb34ccdd8c612a2c0d9125e06c1fae1d",
                      "EMMC:/dev/block/bootdevice/by-name/xbl:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl:3528392:52d295faeb34ccdd8c612a2c0d9125e06c1fae1d\" or \"EMMC:/dev/block/bootdevice/by-name/xbl:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:52d295faeb34ccdd8c612a2c0d9125e06c1fae1d",
                      "EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:52d295faeb34ccdd8c612a2c0d9125e06c1fae1d\" or \"EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:2002944:867f1313558ebc35df0fd67c0204d31bf84f5c6c",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:2002944:867f1313558ebc35df0fd67c0204d31bf84f5c6c\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:867f1313558ebc35df0fd67c0204d31bf84f5c6c",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:867f1313558ebc35df0fd67c0204d31bf84f5c6c\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:b49bd664cf03e2fcc51d8277a19514ae4b83d928",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:b49bd664cf03e2fcc51d8277a19514ae4b83d928\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:b49bd664cf03e2fcc51d8277a19514ae4b83d928",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:b49bd664cf03e2fcc51d8277a19514ae4b83d928\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hyp:369800:e8d68085b0d8aa20223e55254d413c683288c47f",
                      "EMMC:/dev/block/bootdevice/by-name/hyp:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hyp:369800:e8d68085b0d8aa20223e55254d413c683288c47f\" or \"EMMC:/dev/block/bootdevice/by-name/hyp:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/hypbak:369800:e8d68085b0d8aa20223e55254d413c683288c47f",
                      "EMMC:/dev/block/bootdevice/by-name/hypbak:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/hypbak:369800:e8d68085b0d8aa20223e55254d413c683288c47f\" or \"EMMC:/dev/block/bootdevice/by-name/hypbak:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/imagefv:20480:c6c3a1a042f53102aca65342fd9854356c59e605",
                      "EMMC:/dev/block/bootdevice/by-name/imagefv:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/imagefv:20480:c6c3a1a042f53102aca65342fd9854356c59e605\" or \"EMMC:/dev/block/bootdevice/by-name/imagefv:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:c6c3a1a042f53102aca65342fd9854356c59e605",
                      "EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:c6c3a1a042f53102aca65342fd9854356c59e605\" or \"EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/storsec:20477:46d0c8770e318da00eea37b858588a29a399d5b9",
                      "EMMC:/dev/block/bootdevice/by-name/storsec:20477:fd3b368644269b1ff92db8a597ab406a6d1d1521") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/storsec:20477:46d0c8770e318da00eea37b858588a29a399d5b9\" or \"EMMC:/dev/block/bootdevice/by-name/storsec:20477:fd3b368644269b1ff92db8a597ab406a6d1d1521\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/qupfw:49203:e8f390da84ef1932399ede2d20514cf3b6a852b0",
                      "EMMC:/dev/block/bootdevice/by-name/qupfw:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/qupfw:49203:e8f390da84ef1932399ede2d20514cf3b6a852b0\" or \"EMMC:/dev/block/bootdevice/by-name/qupfw:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:e8f390da84ef1932399ede2d20514cf3b6a852b0",
                      "EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:e8f390da84ef1932399ede2d20514cf3b6a852b0\" or \"EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abl:151552:674feb21c6b6764b747af115587d2f5df853cd87",
                      "EMMC:/dev/block/bootdevice/by-name/abl:151552:86c9e90603982c12c16463c192a8c11288f9e369") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abl:151552:674feb21c6b6764b747af115587d2f5df853cd87\" or \"EMMC:/dev/block/bootdevice/by-name/abl:151552:86c9e90603982c12c16463c192a8c11288f9e369\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:674feb21c6b6764b747af115587d2f5df853cd87",
                      "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:86c9e90603982c12c16463c192a8c11288f9e369") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:674feb21c6b6764b747af115587d2f5df853cd87\" or \"EMMC:/dev/block/bootdevice/by-name/ablbak:151552:86c9e90603982c12c16463c192a8c11288f9e369\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:3efba34638a620dda22e8a493dac8cba4c3acc3d",
                      "EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:90df138716ff0d1948b7e2f22270631328deeaf2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:3efba34638a620dda22e8a493dac8cba4c3acc3d\" or \"EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:90df138716ff0d1948b7e2f22270631328deeaf2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:3efba34638a620dda22e8a493dac8cba4c3acc3d",
                      "EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:90df138716ff0d1948b7e2f22270631328deeaf2") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:3efba34638a620dda22e8a493dac8cba4c3acc3d\" or \"EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:90df138716ff0d1948b7e2f22270631328deeaf2\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:4f856e52e474745a7b382e2788e75d4abaa02d11",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a67f91941155be4b60f9373f78c3a9ecb1dc306c") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:4f856e52e474745a7b382e2788e75d4abaa02d11\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a67f91941155be4b60f9373f78c3a9ecb1dc306c\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c9d1ea853e9662ea7a8876b1c5fa2be3c294b1b3",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:2b560c3cb180fc05366715f5d74f0c30f88577a9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c9d1ea853e9662ea7a8876b1c5fa2be3c294b1b3\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:2b560c3cb180fc05366715f5d74f0c30f88577a9\" has unexpected contents.");
apply_patch_space(121472512) || 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", "164,1,746,791,805,814,817,835,843,896,897,1157,1162,1164,1165,1271,1272,1756,1757,2445,2446,2448,2450,2451,2452,2467,2468,2649,2650,2982,3092,3112,3123,3819,3820,3822,3823,3827,3828,3836,3837,3838,3839,5158,5362,9153,9154,9156,9563,9565,9566,10561,10563,16502,16503,16636,16637,19406,19408,25670,25672,32768,32770,33053,33054,34936,34937,34939,34941,35000,35001,35134,35136,35296,35300,35308,35309,35317,35321,35326,35327,35348,35352,35356,36442,36454,36458,36462,51943,52630,52632,52656,65537,66042,98306,98589,98590,99095,131073,131578,163842,164125,164126,164631,196609,197114,229378,229661,229662,230167,262145,262650,294914,295197,295198,295703,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819485,819486,819991,851969,852474,884738,885021,885022,885527,917505,918010,941619,1146880,1146881,1161015,1179411,1179647,1179648") == "084e2558f23fb1dc3f3f4cd4477c481f05f94c27" || 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", "164,1,746,791,805,814,817,835,843,896,897,1157,1162,1164,1165,1271,1272,1756,1757,2445,2446,2448,2450,2451,2452,2467,2468,2649,2650,2982,3092,3112,3123,3819,3820,3822,3823,3827,3828,3836,3837,3838,3839,5158,5362,9153,9154,9156,9563,9565,9566,10561,10563,16502,16503,16636,16637,19406,19408,25670,25672,32768,32770,33053,33054,34936,34937,34939,34941,35000,35001,35134,35136,35296,35300,35308,35309,35317,35321,35326,35327,35348,35352,35356,36442,36454,36458,36462,51943,52630,52632,52656,65537,66042,98306,98589,98590,99095,131073,131578,163842,164125,164126,164631,196609,197114,229378,229661,229662,230167,262145,262650,294914,295197,295198,295703,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819202,819485,819486,819991,851969,852474,884738,885021,885022,885527,917505,918010,941619,1146880,1146881,1161015,1179411,1179647,1179648") && 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", "100,1,332,602,610,620,624,629,630,711,715,720,721,2426,2430,2443,2909,2914,2915,3178,3182,3187,3188,3190,3191,3193,3199,3242,3250,3255,3258,3260,3261,3273,3277,3281,3282,3285,3289,3293,3294,3802,3806,3819,3820,3828,3832,3837,3842,3854,3855,4825,4826,7999,8000,8117,8118,9079,9080,9712,9713,10674,10679,12932,12934,20542,20543,25215,32770,32864,32865,33370,65537,66042,98306,98400,98401,98906,102177,102223,131073,131578,163842,163936,163937,164442,196609,197114,229378,229472,229473,229978,240891,294912,294914,360448,360449,386991,393125,393215,393216") == "09da142234253c00e0c523b8f087a9d90568e0d0" || 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", "100,1,332,602,610,620,624,629,630,711,715,720,721,2426,2430,2443,2909,2914,2915,3178,3182,3187,3188,3190,3191,3193,3199,3242,3250,3255,3258,3260,3261,3273,3277,3281,3282,3285,3289,3293,3294,3802,3806,3819,3820,3828,3832,3837,3842,3854,3855,4825,4826,7999,8000,8117,8118,9079,9080,9712,9713,10674,10679,12932,12934,20542,20543,25215,32770,32864,32865,33370,65537,66042,98306,98400,98401,98906,102177,102223,131073,131578,163842,163936,163937,164442,196609,197114,229378,229472,229473,229978,240891,294912,294914,360448,360449,386991,393125,393215,393216") && 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/uefisecapp:128791:45b4edbf00e2a63b5d8291e6f9b29fc01b72f667",
                "EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:e17ddd8cd80047d566be8a5ac0cefb313e5f376f",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:223724:bee16aeb2c9c5add089eb02d511ed13d6a05c26d",
                "EMMC:/dev/block/bootdevice/by-name/rpm:223724:37472c56a83d9112ab806c2eb81fe03269188a55",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:223724:37472c56a83d9112ab806c2eb81fe03269188a55");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:42728:aadb7d5ae8281d00afd5a29ce394b066b7ceffc0",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:42728:7878170f0e10dafe1617b928fe345f7e21efca42",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:42728:7878170f0e10dafe1617b928fe345f7e21efca42");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:121718272:a3cb0030382bd35bda62aba04a7888c2ce965b4f",
                "EMMC:/dev/block/bootdevice/by-name/modem:121472512:c4d3e386347b4872e38f790d86f5618c1216b182",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:121472512:c4d3e386347b4872e38f790d86f5618c1216b182");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:238037:9647b80c118a9e99b28df5b7207215285e447908",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:3528392:52d295faeb34ccdd8c612a2c0d9125e06c1fae1d",
                "EMMC:/dev/block/bootdevice/by-name/xbl:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:2002944:867f1313558ebc35df0fd67c0204d31bf84f5c6c",
                "EMMC:/dev/block/bootdevice/by-name/tz:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:b49bd664cf03e2fcc51d8277a19514ae4b83d928",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:369800:e8d68085b0d8aa20223e55254d413c683288c47f",
                "EMMC:/dev/block/bootdevice/by-name/hyp:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefv:20480:c6c3a1a042f53102aca65342fd9854356c59e605",
                "EMMC:/dev/block/bootdevice/by-name/imagefv:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefv:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:20477:46d0c8770e318da00eea37b858588a29a399d5b9",
                "EMMC:/dev/block/bootdevice/by-name/storsec:20477:fd3b368644269b1ff92db8a597ab406a6d1d1521",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:20477:fd3b368644269b1ff92db8a597ab406a6d1d1521");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfw:49203:e8f390da84ef1932399ede2d20514cf3b6a852b0",
                "EMMC:/dev/block/bootdevice/by-name/qupfw:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfw:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:674feb21c6b6764b747af115587d2f5df853cd87",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:86c9e90603982c12c16463c192a8c11288f9e369",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:86c9e90603982c12c16463c192a8c11288f9e369");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:3efba34638a620dda22e8a493dac8cba4c3acc3d",
                "EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:90df138716ff0d1948b7e2f22270631328deeaf2",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:90df138716ff0d1948b7e2f22270631328deeaf2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:45b4edbf00e2a63b5d8291e6f9b29fc01b72f667",
                "EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:e17ddd8cd80047d566be8a5ac0cefb313e5f376f",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:bee16aeb2c9c5add089eb02d511ed13d6a05c26d",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:37472c56a83d9112ab806c2eb81fe03269188a55",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:37472c56a83d9112ab806c2eb81fe03269188a55");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:aadb7d5ae8281d00afd5a29ce394b066b7ceffc0",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:7878170f0e10dafe1617b928fe345f7e21efca42",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:7878170f0e10dafe1617b928fe345f7e21efca42");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:9647b80c118a9e99b28df5b7207215285e447908",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:52d295faeb34ccdd8c612a2c0d9125e06c1fae1d",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:867f1313558ebc35df0fd67c0204d31bf84f5c6c",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:b49bd664cf03e2fcc51d8277a19514ae4b83d928",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:369800:e8d68085b0d8aa20223e55254d413c683288c47f",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:c6c3a1a042f53102aca65342fd9854356c59e605",
                "EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:e8f390da84ef1932399ede2d20514cf3b6a852b0",
                "EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:674feb21c6b6764b747af115587d2f5df853cd87",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:86c9e90603982c12c16463c192a8c11288f9e369",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:86c9e90603982c12c16463c192a8c11288f9e369");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:3efba34638a620dda22e8a493dac8cba4c3acc3d",
                "EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:90df138716ff0d1948b7e2f22270631328deeaf2",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:90df138716ff0d1948b7e2f22270631328deeaf2");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:67108864:474e54b2f88f7e65496cc11f6b9c35d0ac07c082",
                "EMMC:/dev/block/bootdevice/by-name/boot:67108864:95e1d0d0a6e0c4631d26e175b694277565e2a5fa",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:67108864:95e1d0d0a6e0c4631d26e175b694277565e2a5fa");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:45b4edbf00e2a63b5d8291e6f9b29fc01b72f667",
                "EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecapp:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:e17ddd8cd80047d566be8a5ac0cefb313e5f376f",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:223724:bee16aeb2c9c5add089eb02d511ed13d6a05c26d",
                "EMMC:/dev/block/bootdevice/by-name/rpm:223724:37472c56a83d9112ab806c2eb81fe03269188a55",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:223724:37472c56a83d9112ab806c2eb81fe03269188a55");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:42728:aadb7d5ae8281d00afd5a29ce394b066b7ceffc0",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:42728:7878170f0e10dafe1617b928fe345f7e21efca42",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:42728:7878170f0e10dafe1617b928fe345f7e21efca42");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:121718272:a3cb0030382bd35bda62aba04a7888c2ce965b4f",
                "EMMC:/dev/block/bootdevice/by-name/modem:121472512:c4d3e386347b4872e38f790d86f5618c1216b182",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:121472512:c4d3e386347b4872e38f790d86f5618c1216b182");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:238037:9647b80c118a9e99b28df5b7207215285e447908",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl:3528392:52d295faeb34ccdd8c612a2c0d9125e06c1fae1d",
                "EMMC:/dev/block/bootdevice/by-name/xbl:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:2002944:867f1313558ebc35df0fd67c0204d31bf84f5c6c",
                "EMMC:/dev/block/bootdevice/by-name/tz:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:b49bd664cf03e2fcc51d8277a19514ae4b83d928",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hyp:369800:e8d68085b0d8aa20223e55254d413c683288c47f",
                "EMMC:/dev/block/bootdevice/by-name/hyp:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hyp:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefv:20480:c6c3a1a042f53102aca65342fd9854356c59e605",
                "EMMC:/dev/block/bootdevice/by-name/imagefv:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefv:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777");
patch_partition("EMMC:/dev/block/bootdevice/by-name/storsec:20477:46d0c8770e318da00eea37b858588a29a399d5b9",
                "EMMC:/dev/block/bootdevice/by-name/storsec:20477:fd3b368644269b1ff92db8a597ab406a6d1d1521",
                package_extract_file("patch/firmware-update/storsec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/storsec:20477:fd3b368644269b1ff92db8a597ab406a6d1d1521");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfw:49203:e8f390da84ef1932399ede2d20514cf3b6a852b0",
                "EMMC:/dev/block/bootdevice/by-name/qupfw:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfw:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abl:151552:674feb21c6b6764b747af115587d2f5df853cd87",
                "EMMC:/dev/block/bootdevice/by-name/abl:151552:86c9e90603982c12c16463c192a8c11288f9e369",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abl:151552:86c9e90603982c12c16463c192a8c11288f9e369");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:3efba34638a620dda22e8a493dac8cba4c3acc3d",
                "EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:90df138716ff0d1948b7e2f22270631328deeaf2",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_config:49260:90df138716ff0d1948b7e2f22270631328deeaf2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:45b4edbf00e2a63b5d8291e6f9b29fc01b72f667",
                "EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2",
                package_extract_file("patch/firmware-update/uefi_sec.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/uefisecappbak:128791:86afbaa7fd6a404836e36bfea0ccebe65e89f2e2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:e17ddd8cd80047d566be8a5ac0cefb313e5f376f",
                "EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440",
                package_extract_file("patch/firmware-update/cmnlib.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlibbak:393896:26893e7c7672e5a19a0d974f81dd1a1f01edd440");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:bee16aeb2c9c5add089eb02d511ed13d6a05c26d",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:37472c56a83d9112ab806c2eb81fe03269188a55",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:223724:37472c56a83d9112ab806c2eb81fe03269188a55");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:aadb7d5ae8281d00afd5a29ce394b066b7ceffc0",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:7878170f0e10dafe1617b928fe345f7e21efca42",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:42728:7878170f0e10dafe1617b928fe345f7e21efca42");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:9647b80c118a9e99b28df5b7207215285e447908",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:238037:15618e6f4eb91ae4d91d070e9829dc3436e603c2");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:52d295faeb34ccdd8c612a2c0d9125e06c1fae1d",
                "EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c",
                package_extract_file("patch/firmware-update/xbl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xblbak:3528392:135141fd7d22696e5c5a92b9f6ae980aea00242c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:2002944:867f1313558ebc35df0fd67c0204d31bf84f5c6c",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1998848:a9e35ef64fda43ea2a231096a12c527be1298d6c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:b49bd664cf03e2fcc51d8277a19514ae4b83d928",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997",
                package_extract_file("patch/firmware-update/cmnlib64.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64bak:511492:79b0c80a7aa4e247e63eebd7f3d5ef02ec382997");
patch_partition("EMMC:/dev/block/bootdevice/by-name/hypbak:369800:e8d68085b0d8aa20223e55254d413c683288c47f",
                "EMMC:/dev/block/bootdevice/by-name/hypbak:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec",
                package_extract_file("patch/firmware-update/hyp.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/hypbak:369800:dca39f23fad83f894f631ef72c7bbf8d5422fbec");
patch_partition("EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:c6c3a1a042f53102aca65342fd9854356c59e605",
                "EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777",
                package_extract_file("patch/firmware-update/imagefv.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/imagefvbak:20480:ae94dfb43199cecb20e0abe545c62cf30bf5b777");
patch_partition("EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:e8f390da84ef1932399ede2d20514cf3b6a852b0",
                "EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd",
                package_extract_file("patch/firmware-update/qupv3fw.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/qupfwbak:49203:9bee6b4ab609c1e8059257896f5e487ad7d0e1bd");
patch_partition("EMMC:/dev/block/bootdevice/by-name/ablbak:151552:674feb21c6b6764b747af115587d2f5df853cd87",
                "EMMC:/dev/block/bootdevice/by-name/ablbak:151552:86c9e90603982c12c16463c192a8c11288f9e369",
                package_extract_file("patch/firmware-update/abl.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/ablbak:151552:86c9e90603982c12c16463c192a8c11288f9e369");
patch_partition("EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:3efba34638a620dda22e8a493dac8cba4c3acc3d",
                "EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:90df138716ff0d1948b7e2f22270631328deeaf2",
                package_extract_file("patch/firmware-update/xbl_config.elf.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/xbl_configbak:49260:90df138716ff0d1948b7e2f22270631328deeaf2");
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...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:4f856e52e474745a7b382e2788e75d4abaa02d11",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a67f91941155be4b60f9373f78c3a9ecb1dc306c",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a67f91941155be4b60f9373f78c3a9ecb1dc306c");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c9d1ea853e9662ea7a8876b1c5fa2be3c294b1b3",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:2b560c3cb180fc05366715f5d74f0c30f88577a9",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:2b560c3cb180fc05366715f5d74f0c30f88577a9");
