getprop("ro.product.device") == "onc" || abort("E3004: This package is for \"onc\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.7.0.PFLEUXM:user/release-keys");
ui_print("Target: xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.10.0.PFLEUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.7.0.PFLEUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.10.0.PFLEUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.7.0.PFLEUXM:user/release-keys or xiaomi/onc_eea/onc:9/PKQ1.181021.001/V11.0.10.0.PFLEUXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
show_progress(0.100000, 5);
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/boot:67108864:35a040528151c4e3741401ec9d4c1869f1c35fdd:67108864:5cc60fdfd22af3a7c3f94b82104f0b5c784c099c") || abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:67108864:35a040528151c4e3741401ec9d4c1869f1c35fdd:67108864:5cc60fdfd22af3a7c3f94b82104f0b5c784c099c\" has unexpected contents.");
apply_patch_space(86204416) || 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", "114,1,239,254,599,8318,8325,8327,8329,8330,8331,8332,8334,8338,8339,8962,8967,9021,9022,9563,11319,11320,11321,12625,12626,13945,13947,13956,13958,13963,13965,13974,13976,13985,13987,13991,13993,14002,14016,14035,14037,14041,14043,14046,14048,14052,14056,14062,14064,14135,14137,14144,14146,14428,14430,14435,14437,14588,14590,14594,14596,14636,32770,32990,98306,98526,122463,122475,122477,122501,163842,164062,229378,229598,294914,295134,524298,524299,524300,530360,657442,657649,657762,657764,657790,657800,658023,658024,658097,658098,658143,658145,658150,658151,658228,658239,658260,658263,658285,658289,658430,658431,658442,658445,658464,658465,819202,819422,846923,884736,884738,903007,917316,917503,917504") == "1a19cf3ee3575785964e8660060795c09c9388bf" || 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", "114,1,239,254,599,8318,8325,8327,8329,8330,8331,8332,8334,8338,8339,8962,8967,9021,9022,9563,11319,11320,11321,12625,12626,13945,13947,13956,13958,13963,13965,13974,13976,13985,13987,13991,13993,14002,14016,14035,14037,14041,14043,14046,14048,14052,14056,14062,14064,14135,14137,14144,14146,14428,14430,14435,14437,14588,14590,14594,14596,14636,32770,32990,98306,98526,122463,122475,122477,122501,163842,164062,229378,229598,294914,295134,524298,524299,524300,530360,657442,657649,657762,657764,657790,657800,658023,658024,658097,658098,658143,658145,658150,658151,658228,658239,658260,658263,658285,658289,658430,658431,658442,658445,658464,658465,819202,819422,846923,884736,884738,903007,917316,917503,917504") && 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", "60,1,69,71,73,80,239,4112,4119,4180,4182,4230,4231,4237,4238,4244,4245,4260,4262,4264,4265,4267,4268,4481,4482,6172,6173,6180,6181,6184,6185,6348,6349,8998,8999,9979,10069,12167,12168,12841,12842,22216,22217,25573,25574,32768,32770,36162,36163,41280,98306,98368,141001,163840,163842,229376,229378,257987,262077,262143,262144") == "46b3e11f1057634e3ad70bfe720394260cfc4270" || 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", "60,1,69,71,73,80,239,4112,4119,4180,4182,4230,4231,4237,4238,4244,4245,4260,4262,4264,4265,4267,4268,4481,4482,6172,6173,6180,6181,6184,6185,6348,6349,8998,8999,9979,10069,12167,12168,12841,12842,22216,22217,25573,25574,32768,32770,36162,36163,41280,98306,98368,141001,163840,163842,229376,229378,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);
apply_patch("EMMC:/dev/block/bootdevice/by-name/boot:67108864:35a040528151c4e3741401ec9d4c1869f1c35fdd:67108864:5cc60fdfd22af3a7c3f94b82104f0b5c784c099c",
            "-", 5cc60fdfd22af3a7c3f94b82104f0b5c784c099c, 67108864,
            35a040528151c4e3741401ec9d4c1869f1c35fdd, package_extract_file("patch/boot.img.p")) || abort("Failed to apply patch \"patch/boot.img.p \".");

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/aboot");
package_extract_file("firmware-update/lksecapp.mbn", "/dev/block/bootdevice/by-name/lksecapp");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1");
package_extract_file("firmware-update/cmnlib64_30.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/adspso.bin", "/dev/block/bootdevice/by-name/dsp");
package_extract_file("firmware-update/cmnlib_30.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/abootbak");
package_extract_file("firmware-update/lksecapp.mbn", "/dev/block/bootdevice/by-name/lksecappbak");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1bak");
package_extract_file("firmware-update/cmnlib64_30.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib_30.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
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.");

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/splash.img", "/dev/block/bootdevice/by-name/splash");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
show_progress(0.100000, 2);
