get_device_compatible("kenzo") == "OK" || abort("This package is for \"kenzo\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/kenzo/kenzo:5.1.1/LMY47V/6.7.28:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/kenzo/kenzo:5.1.1/LMY47V/6.8.18:user/release-keys" ||
    abort("Package expects build fingerprint of Xiaomi/kenzo/kenzo:5.1.1/LMY47V/6.7.28:user/release-keys or Xiaomi/kenzo/kenzo:5.1.1/LMY47V/6.8.18:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_check("EMMC:/dev/block/bootdevice/by-name/boot:34166090:61a22307201ed122ec01b8feaf4fa14be0dd6a55:34413898:7d48f037784a5afd550d1b4abb1f9bb25878709c") || abort("\"EMMC:/dev/block/bootdevice/by-name/boot:34166090:61a22307201ed122ec01b8feaf4fa14be0dd6a55:34413898:7d48f037784a5afd550d1b4abb1f9bb25878709c\" has unexpected contents.");
if (range_sha1("/dev/block/bootdevice/by-name/system", "80,0,32770,32929,32931,33439,65535,65536,65538,66046,98303,98304,98306,98465,98467,98975,131071,131072,131074,131582,163839,163840,163842,164001,164003,164511,196607,196608,196610,197118,229375,229376,229378,229537,229539,230047,262143,262144,262146,262654,294911,294912,294914,295073,295075,295583,327679,327680,327682,328190,360447,360448,360450,360958,393215,393216,393218,393726,425983,425984,425986,426494,457590,458752,458754,459262,468278,491520,491522,524288,524290,557056,557058,589824,589826,622592,622594,623102,650190,650191,655320") == "24a3ca6098b5b203b513f4a586d1e03e5ffadc2e" || 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
(range_sha1("/dev/block/bootdevice/by-name/system", "2,0,1") == "c5238b736a1f4ea5b77c61de107d1d363fc5f5f3") || abort("/dev/block/bootdevice/by-name/system has been remounted R/W; reflash device to reenable OTA updates");
abort("system partition has unexpected contents");
endif;

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

mount("ext4", "EMMC", "/dev/block/bootdevice/by-name/cust", "/cust", "max_batch_time=0,commit=1,data=ordered,barrier=1,errors=panic,nodelalloc");
delete("/cust/app/customized/ota-miui-MiGalleryLockscreen/",
       "/cust/app/customized/ota-miui-MiGalleryLockscreen/ota-miui-MiGalleryLockscreen.apk",
       "/cust/cust/cn/ota_customized_applist",
       "/cust/cust/cn_chinatelecom/ota_customized_applist",
       "/cust/cust/cn_chinaunicom/ota_customized_applist",
       "/cust/cust/cn_cta/ota_customized_applist");
ui_print("Unpacking new cust files...");
package_extract_dir("cust", "/cust") || abort("Failed to extract dir from \"cust\" to \"/cust\".");
set_metadata_recursive("/cust", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/bootdevice/by-name/boot:34166090:61a22307201ed122ec01b8feaf4fa14be0dd6a55:34413898:7d48f037784a5afd550d1b4abb1f9bb25878709c",
            "-", 7d48f037784a5afd550d1b4abb1f9bb25878709c, 34413898,
            61a22307201ed122ec01b8feaf4fa14be0dd6a55, 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/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/aboot");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/sbl1.mbn", "/dev/block/bootdevice/by-name/sbl1bak");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
package_extract_file("firmware-update/emmc_appsboot.mbn", "/dev/block/bootdevice/by-name/abootbak");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("META-INF/com/miui/miui_update", "/cache/miui_update");
set_metadata("/cache/miui_update", "uid", 0, "gid", 0, "mode", 0555, "capabilities", 0x0);
run_program("/cache/miui_update");
delete("/cache/miui_update");

# ---- start update system here ----

ui_print("Patching system image after verification.");
show_progress(0.900000, 0);
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat");
set_progress(1.000000);
unmount("/cust");
