getprop("ro.product.device") == "pine" || abort("E3004: This package is for \"pine\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.5.0.QCMMIXM:user/release-keys");
ui_print("Target: Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.1.0.QCMMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.5.0.QCMMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.1.0.QCMMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/pine/pine:10/QKQ1.191014.001/V11.0.5.0.QCMMIXM:user/release-keys or Xiaomi/pine/pine:10/QKQ1.191014.001/V12.0.1.0.QCMMIXM: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:33554432:9683fd19da8c45ae47f41639ff76d350a492b726",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:b01ebeed6cffea23ad4fa2232e14f9a1baef2c40") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:9683fd19da8c45ae47f41639ff76d350a492b726\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:b01ebeed6cffea23ad4fa2232e14f9a1baef2c40\" has unexpected contents.");
apply_patch_space(152870912) || 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/rpm:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:774108:6402e5862a64aaadf7c1501a2575d64c5df3caf9",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:774108:4589100c0ffdf606e5eac8e4a1a163ad11e68f90") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:6402e5862a64aaadf7c1501a2575d64c5df3caf9\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:774108:4589100c0ffdf606e5eac8e4a1a163ad11e68f90\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:6402e5862a64aaadf7c1501a2575d64c5df3caf9",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:4589100c0ffdf606e5eac8e4a1a163ad11e68f90") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:6402e5862a64aaadf7c1501a2575d64c5df3caf9\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:774108:4589100c0ffdf606e5eac8e4a1a163ad11e68f90\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:6204c40d28383ba7cf012309cac55991aebaa44a",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:20b45a0e622493ff9f09d0bdca6acdfaf2f6e175") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:6204c40d28383ba7cf012309cac55991aebaa44a\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:20b45a0e622493ff9f09d0bdca6acdfaf2f6e175\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:57e1f21b35d05746450bd67556e1c9dd52f8e4d7",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:4c22250cb03a9606090dcd237bf44db1d241bd88") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:57e1f21b35d05746450bd67556e1c9dd52f8e4d7\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:4c22250cb03a9606090dcd237bf44db1d241bd88\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:80dac94d9e6283269d517bf78cb178a344f88279",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:75bacf13bb8dc5432c609ba768b2ca0a78fbef57") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:80dac94d9e6283269d517bf78cb178a344f88279\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:75bacf13bb8dc5432c609ba768b2ca0a78fbef57\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:f3552448d34746db1c39032548b0421727295006",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:f3552448d34746db1c39032548b0421727295006\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:f3552448d34746db1c39032548b0421727295006",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:f3552448d34746db1c39032548b0421727295006\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900",
                      "EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900\" or \"EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:646f7d08c43ff51be66a58acdb1c42f1fa09cde7",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:925dfac7ac96970a3d94fac7d912d770baa00359") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:646f7d08c43ff51be66a58acdb1c42f1fa09cde7\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:925dfac7ac96970a3d94fac7d912d770baa00359\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9767e676e77767689cd56bd3ddca1c6f1f8ca238",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:020a7101c07509179032ed1e8bc75adde8bb1c87") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9767e676e77767689cd56bd3ddca1c6f1f8ca238\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:020a7101c07509179032ed1e8bc75adde8bb1c87\" has unexpected contents.");
apply_patch_space(134217728) || 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", "270,1,553,696,710,720,723,740,747,767,768,955,960,962,963,1069,1070,1550,1551,1553,1555,1556,1557,1572,1573,1710,1711,1977,2023,2038,2046,2062,2168,2538,2539,2541,2542,2545,2546,2554,2555,2556,2557,3022,3107,3869,4153,6225,6319,6978,6979,6981,7267,7269,7270,7833,7835,13774,13775,13908,13909,16678,16680,22610,22611,22613,22615,22674,22675,22808,22810,22970,22974,22982,22983,22991,22995,23000,23001,23023,23027,23031,23032,27906,27923,27927,32770,32958,32959,33464,52578,53265,53267,53291,65504,65536,65537,66581,68982,68988,98306,98494,98495,99000,131073,131578,163842,164030,164031,164536,166362,166363,196609,197114,229378,229566,229567,230072,255588,255632,256321,256413,262145,262650,264338,264365,267773,267777,267788,267825,269276,269280,272590,272594,272630,272632,288179,288201,294914,295102,295103,295608,311849,319147,319407,319408,319485,322505,322779,322910,323060,323193,324010,324140,324290,324423,327681,328186,330059,330952,330953,331730,360449,360954,393217,393722,406512,406525,410219,410266,410280,410287,410308,410319,410320,410322,410329,410330,410334,410335,410339,410340,410347,410350,410376,410377,410384,410385,410388,410390,410399,410401,410414,410415,410430,410431,410488,410490,410493,410494,410535,410537,410560,410563,410572,410573,410587,410590,410623,410625,410636,410637,410658,410660,410666,410668,411005,411007,425985,426490,458753,459258,486568,486585,489422,489429,489472,489506,489541,489855,489868,489870,489871,490044,490057,490058,490073,490074,490091,490128,490130,490312,490961,491119,491148,491150,491521,492026,524289,524794,557057,557562,571227,571257,589825,590330,622593,623098,655361,655866,688129,688634,707010,707020,707026,753664,753665,774003,786268,786431,786432") == "b682c2092c0b61e2ec4a1ba2f7b97e9daac4b479" || 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", "270,1,553,696,710,720,723,740,747,767,768,955,960,962,963,1069,1070,1550,1551,1553,1555,1556,1557,1572,1573,1710,1711,1977,2023,2038,2046,2062,2168,2538,2539,2541,2542,2545,2546,2554,2555,2556,2557,3022,3107,3869,4153,6225,6319,6978,6979,6981,7267,7269,7270,7833,7835,13774,13775,13908,13909,16678,16680,22610,22611,22613,22615,22674,22675,22808,22810,22970,22974,22982,22983,22991,22995,23000,23001,23023,23027,23031,23032,27906,27923,27927,32770,32958,32959,33464,52578,53265,53267,53291,65504,65536,65537,66581,68982,68988,98306,98494,98495,99000,131073,131578,163842,164030,164031,164536,166362,166363,196609,197114,229378,229566,229567,230072,255588,255632,256321,256413,262145,262650,264338,264365,267773,267777,267788,267825,269276,269280,272590,272594,272630,272632,288179,288201,294914,295102,295103,295608,311849,319147,319407,319408,319485,322505,322779,322910,323060,323193,324010,324140,324290,324423,327681,328186,330059,330952,330953,331730,360449,360954,393217,393722,406512,406525,410219,410266,410280,410287,410308,410319,410320,410322,410329,410330,410334,410335,410339,410340,410347,410350,410376,410377,410384,410385,410388,410390,410399,410401,410414,410415,410430,410431,410488,410490,410493,410494,410535,410537,410560,410563,410572,410573,410587,410590,410623,410625,410636,410637,410658,410660,410666,410668,411005,411007,425985,426490,458753,459258,486568,486585,489422,489429,489472,489506,489541,489855,489868,489870,489871,490044,490057,490058,490073,490074,490091,490128,490130,490312,490961,491119,491148,491150,491521,492026,524289,524794,557057,557562,571227,571257,589825,590330,622593,623098,655361,655866,688129,688634,707010,707020,707026,753664,753665,774003,786268,786431,786432") && 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", "44,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,17279,20131,32770,32832,32833,33338,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,215550,229376,229378,229440,229441,257987,262077,262143,262144") == "5fae37e0903302c9d2ac0bd6361a25d34fca962b" || 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", "44,1,456,570,578,588,592,597,598,679,683,688,689,952,956,961,17279,20131,32770,32832,32833,33338,65537,66042,98306,98368,98369,98874,131073,131578,163842,163904,163905,164410,196609,197114,215550,229376,229378,229440,229441,257987,262077,262143,262144") && 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 ----

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:33554432:9683fd19da8c45ae47f41639ff76d350a492b726",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:b01ebeed6cffea23ad4fa2232e14f9a1baef2c40",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:b01ebeed6cffea23ad4fa2232e14f9a1baef2c40");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:774108:6402e5862a64aaadf7c1501a2575d64c5df3caf9",
                "EMMC:/dev/block/bootdevice/by-name/aboot:774108:4589100c0ffdf606e5eac8e4a1a163ad11e68f90",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:774108:4589100c0ffdf606e5eac8e4a1a163ad11e68f90");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:6204c40d28383ba7cf012309cac55991aebaa44a",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:20b45a0e622493ff9f09d0bdca6acdfaf2f6e175",
                package_extract_file("patch/firmware-update/cmnlib64_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:20b45a0e622493ff9f09d0bdca6acdfaf2f6e175");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:57e1f21b35d05746450bd67556e1c9dd52f8e4d7",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:4c22250cb03a9606090dcd237bf44db1d241bd88",
                package_extract_file("patch/firmware-update/cmnlib_30.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:4c22250cb03a9606090dcd237bf44db1d241bd88");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:80dac94d9e6283269d517bf78cb178a344f88279",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:75bacf13bb8dc5432c609ba768b2ca0a78fbef57",
                package_extract_file("patch/firmware-update/NON-HLOS.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/modem:134217728:75bacf13bb8dc5432c609ba768b2ca0a78fbef57");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:f3552448d34746db1c39032548b0421727295006",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dsp:16777216:3b187c12314cdda54b3bbe0e2fd728dd9a102900",
                "EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991",
                package_extract_file("patch/firmware-update/adspso.bin.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dsp:16777216:cb4d87fdc98670a4085e4bacca8c30573dc28991");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:6f504c3a7a6cd88d72e41024da13abc3dc4aba53",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ec8f2301323547dcd6c3ed2460963917afa4a2fb");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:68c7b8b5667bcf996b2f473eefd51bf905d104c5",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:7ec90685e001ccd40c5ce49332abd261c46d3d88");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:774108:6402e5862a64aaadf7c1501a2575d64c5df3caf9",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:774108:4589100c0ffdf606e5eac8e4a1a163ad11e68f90",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:774108:4589100c0ffdf606e5eac8e4a1a163ad11e68f90");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:b54994706ce5be3525fb7d9422c810e6ae260a0b",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2aaf99c0d51fff6e33656e55db5335acba7854d7");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:f3552448d34746db1c39032548b0421727295006",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:377e5b3a95042056f2fec40d523aceb16089a7c1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:65adcdb051f66b57c2bcbad366b34a0388f1d62e",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:e2b08dfe887ff82ea7627d3d063f8a1442a5de62");
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...");
package_extract_file("firmware-update/splash.img", "/dev/block/bootdevice/by-name/splash");
patch_partition("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:646f7d08c43ff51be66a58acdb1c42f1fa09cde7",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:925dfac7ac96970a3d94fac7d912d770baa00359",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:925dfac7ac96970a3d94fac7d912d770baa00359");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:9767e676e77767689cd56bd3ddca1c6f1f8ca238",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:020a7101c07509179032ed1e8bc75adde8bb1c87",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:020a7101c07509179032ed1e8bc75adde8bb1c87");
