getprop("ro.product.device") == "W563-FL" || abort("E3004: This package is for \"W563-FL\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: alps/full_k62v1_64_bsp/k62v1_64_bsp:9/PPR1.180610.011/hyco07012039:user/dev-keys");
ui_print("Target: alps/full_k62v1_64_bsp/k62v1_64_bsp:9/PPR1.180610.011/hyco01162037:user/dev-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "alps/full_k62v1_64_bsp/k62v1_64_bsp:9/PPR1.180610.011/hyco07012039:user/dev-keys" ||
    getprop("ro.build.fingerprint") == "alps/full_k62v1_64_bsp/k62v1_64_bsp:9/PPR1.180610.011/hyco01162037:user/dev-keys" ||
    abort("E3001: Package expects build fingerprint of alps/full_k62v1_64_bsp/k62v1_64_bsp:9/PPR1.180610.011/hyco07012039:user/dev-keys or alps/full_k62v1_64_bsp/k62v1_64_bsp:9/PPR1.180610.011/hyco01162037:user/dev-keys; this device has " + getprop("ro.build.fingerprint") + ".");
apply_patch_check("EMMC:/dev/block/platform/bootdevice/by-name/boot:33554432:a3f02fcd78e28fddee6c809d498eb311c1f65bbe:33554432:e6509511c97e26b9e1886305cb220533090ee938", "a3f02fcd78e28fddee6c809d498eb311c1f65bbe", "e6509511c97e26b9e1886305cb220533090ee938") || abort("E3005: \"EMMC:/dev/block/platform/bootdevice/by-name/boot:33554432:a3f02fcd78e28fddee6c809d498eb311c1f65bbe:33554432:e6509511c97e26b9e1886305cb220533090ee938\" has unexpected contents.");
apply_patch_space(54292480) || abort("E3006: Not enough free space on /cache to apply patches.");
apply_patch_check("EMMC:/dev/block/platform/bootdevice/by-name/md1img:56902624:f7fd9e67a0dd07c14f66a0b84e48e54cae937d64:56902624:e7697c15490684a16da16a10c7953743b05f5596", "f7fd9e67a0dd07c14f66a0b84e48e54cae937d64", "e7697c15490684a16da16a10c7953743b05f5596") || abort("E3005: \"EMMC:/dev/block/platform/bootdevice/by-name/md1img:56902624:f7fd9e67a0dd07c14f66a0b84e48e54cae937d64:56902624:e7697c15490684a16da16a10c7953743b05f5596\" has unexpected contents.");
apply_patch_space(56902624) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1("/dev/block/platform/bootdevice/by-name/system", "218,1,426,696,702,1201,1204,1213,1215,1218,1220,1488,1489,1490,1492,2268,2271,2272,2274,2280,2283,2293,2295,2333,2338,4510,4516,4605,4610,4642,4647,4697,4700,5150,5152,5164,5165,5169,5171,5214,5216,5220,5221,5224,5226,5227,5229,5232,5235,5237,5239,5243,5245,5248,5251,5261,5263,5269,5270,5276,5280,5316,5321,5397,5400,5402,5404,5439,5440,6062,6066,6544,6545,6562,6563,7209,7214,7421,7422,8243,8247,8649,8650,8712,8716,9288,9295,10505,10510,10516,10518,10544,10545,10623,10625,10880,10882,10890,10897,10939,10940,11034,11038,11086,11091,11106,11107,11117,11122,11150,11153,11163,11165,11223,11228,15835,15840,16260,16262,16287,16288,16708,16710,32768,32770,32958,32959,37208,37209,48214,48215,48518,48520,49285,49287,49306,49313,49350,49353,49596,49598,49676,49679,49685,49687,49694,49699,49712,49713,49778,49782,49968,49969,49978,49982,50150,50155,50265,50268,50276,50278,50285,50286,50635,50639,51051,51054,51056,51058,51066,51069,51572,51574,51585,51586,52089,52091,52105,52110,52131,52132,52142,52145,52222,52224,52250,52255,52434,52435,53581,65537,66042,98306,98494,98495,99000,131073,131578,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,262145,262650,272194,294912,294914,753664,753665,774003,786268,786431,786432") == "c9a034a07f9ae43465a5fcb650cdaf4765bdc6c6" || block_image_verify("/dev/block/platform/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/platform/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/platform/bootdevice/by-name/system", "218,1,426,696,702,1201,1204,1213,1215,1218,1220,1488,1489,1490,1492,2268,2271,2272,2274,2280,2283,2293,2295,2333,2338,4510,4516,4605,4610,4642,4647,4697,4700,5150,5152,5164,5165,5169,5171,5214,5216,5220,5221,5224,5226,5227,5229,5232,5235,5237,5239,5243,5245,5248,5251,5261,5263,5269,5270,5276,5280,5316,5321,5397,5400,5402,5404,5439,5440,6062,6066,6544,6545,6562,6563,7209,7214,7421,7422,8243,8247,8649,8650,8712,8716,9288,9295,10505,10510,10516,10518,10544,10545,10623,10625,10880,10882,10890,10897,10939,10940,11034,11038,11086,11091,11106,11107,11117,11122,11150,11153,11163,11165,11223,11228,15835,15840,16260,16262,16287,16288,16708,16710,32768,32770,32958,32959,37208,37209,48214,48215,48518,48520,49285,49287,49306,49313,49350,49353,49596,49598,49676,49679,49685,49687,49694,49699,49712,49713,49778,49782,49968,49969,49978,49982,50150,50155,50265,50268,50276,50278,50285,50286,50635,50639,51051,51054,51056,51058,51066,51069,51572,51574,51585,51586,52089,52091,52105,52110,52131,52132,52142,52145,52222,52224,52250,52255,52434,52435,53581,65537,66042,98306,98494,98495,99000,131073,131578,163842,164030,164031,164536,196609,197114,229378,229566,229567,230072,262145,262650,272194,294912,294914,753664,753665,774003,786268,786431,786432") && block_image_verify("/dev/block/platform/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/platform/bootdevice/by-name/vendor", "120,1,134,503,511,1098,1099,3048,3051,3055,3057,3065,3067,3100,3101,3106,3107,3112,3113,3118,3119,3120,3121,3150,3151,3251,3252,3259,3260,3431,3432,3447,3448,3479,3480,3997,3998,4028,4029,4056,4058,4063,4064,4089,4092,4106,4107,4122,4123,4126,4127,4138,4139,5073,5074,7602,7603,10667,10668,14547,14548,14956,14957,16406,16407,16993,16994,18482,18483,20375,20376,21116,21117,25827,25880,32768,32770,32819,32820,36463,36464,36831,36832,40037,40041,40044,40045,41904,41905,42993,42994,44252,44253,44664,44665,45962,45963,49783,49825,50289,50290,56364,56365,57263,57264,57404,58307,59311,59312,60006,60008,98304,98306,163840,163842,196608,196609,201548,204744,204799,204800") == "c42540506a66e33fcfc52f885c8ad58aee77c669" || block_image_verify("/dev/block/platform/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/platform/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/platform/bootdevice/by-name/vendor", "120,1,134,503,511,1098,1099,3048,3051,3055,3057,3065,3067,3100,3101,3106,3107,3112,3113,3118,3119,3120,3121,3150,3151,3251,3252,3259,3260,3431,3432,3447,3448,3479,3480,3997,3998,4028,4029,4056,4058,4063,4064,4089,4092,4106,4107,4122,4123,4126,4127,4138,4139,5073,5074,7602,7603,10667,10668,14547,14548,14956,14957,16406,16407,16993,16994,18482,18483,20375,20376,21116,21117,25827,25880,32768,32770,32819,32820,36463,36464,36831,36832,40037,40041,40044,40045,41904,41905,42993,42994,44252,44253,44664,44665,45962,45963,49783,49825,50289,50290,56364,56365,57263,57264,57404,58307,59311,59312,60006,60008,98304,98306,163840,163842,196608,196609,201548,204744,204799,204800") && block_image_verify("/dev/block/platform/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 system image after verification.");
show_progress(0.800000, 0);
block_image_update("/dev/block/platform/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.");
show_progress(0.100000, 0);
block_image_update("/dev/block/platform/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/platform/bootdevice/by-name/boot:33554432:a3f02fcd78e28fddee6c809d498eb311c1f65bbe:33554432:e6509511c97e26b9e1886305cb220533090ee938",
            "-", e6509511c97e26b9e1886305cb220533090ee938, 33554432,
            a3f02fcd78e28fddee6c809d498eb311c1f65bbe,
            package_extract_file("patch/boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/platform/bootdevice/by-name/boot:33554432:a3f02fcd78e28fddee6c809d498eb311c1f65bbe:33554432:e6509511c97e26b9e1886305cb220533090ee938");
show_mtupdate_stage("/cache/recovery/last_mtupdate_stage");
ifelse (
less_than_int(get_mtupdate_stage("/cache/recovery/last_mtupdate_stage"), "1") ,
(
ui_print("start to update general image");
package_extract_file("dtbo.img", "/dev/block/platform/bootdevice/by-name/dtbo");
ui_print("Patching md1img image...");
show_progress(0.100000, 10);
apply_patch("EMMC:/dev/block/platform/bootdevice/by-name/md1img:56902624:f7fd9e67a0dd07c14f66a0b84e48e54cae937d64:56902624:e7697c15490684a16da16a10c7953743b05f5596",
            "-", e7697c15490684a16da16a10c7953743b05f5596, 56902624,
            f7fd9e67a0dd07c14f66a0b84e48e54cae937d64,
            package_extract_file("patch/md1img.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/platform/bootdevice/by-name/md1img:56902624:f7fd9e67a0dd07c14f66a0b84e48e54cae937d64:56902624:e7697c15490684a16da16a10c7953743b05f5596");
package_extract_file("spmfw.img", "/dev/block/platform/bootdevice/by-name/spmfw");
set_mtupdate_stage("/cache/recovery/last_mtupdate_stage", "1");
),
ui_print("general images are already updated");
);
ifelse (
less_than_int(get_mtupdate_stage("/cache/recovery/last_mtupdate_stage"), "3") ,
(
if less_than_int(get_mtupdate_stage("/cache/recovery/last_mtupdate_stage"), "2") then

ui_print("start to update alt loader image");
package_extract_file("sspm.img", "/dev/block/platform/bootdevice/by-name/sspm_2");
package_extract_file("tee.img", "/dev/block/platform/bootdevice/by-name/tee2");
package_extract_file("lk.img", "/dev/block/platform/bootdevice/by-name/lk2");
assert(set_emmc_writable("/sys/block/mmcblk0boot1/force_ro"),
       package_extract_file("preloader.img", "/dev/block/mmcblk0boot1"));
set_mtupdate_stage("/cache/recovery/last_mtupdate_stage", "2");
endif;

switch_active("sspm_1", "sspm_2");
switch_active("tee1", "tee2");
switch_active("lk", "lk2");
switch_active("preloader", "preloader2");
set_mtupdate_stage("/cache/recovery/last_mtupdate_stage", "3");
),
ui_print("alt loder images are already updated");
);
ifelse (
less_than_int(get_mtupdate_stage("/cache/recovery/last_mtupdate_stage"), "5") ,
(
if less_than_int(get_mtupdate_stage("/cache/recovery/last_mtupdate_stage"), "4") then

ui_print("start to update main loader image");
package_extract_file("sspm.img", "/dev/block/platform/bootdevice/by-name/sspm_1");
package_extract_file("tee.img", "/dev/block/platform/bootdevice/by-name/tee1");
package_extract_file("lk.img", "/dev/block/platform/bootdevice/by-name/lk");
assert(set_emmc_writable("/sys/block/mmcblk0boot0/force_ro"),
       package_extract_file("preloader.img", "/dev/block/mmcblk0boot0"));
set_mtupdate_stage("/cache/recovery/last_mtupdate_stage", "4");
endif;

switch_active("sspm_2", "sspm_1");
switch_active("tee2", "tee1");
switch_active("lk2", "lk");
switch_active("preloader2", "preloader");
),
ui_print("main loader images are already updated");
);
delete("/cache/recovery/last_mtupdate_stage");
package_extract_file("vbmeta.img", "/dev/block/platform/bootdevice/by-name/vbmeta");
set_ota_result_for_dm_verity();
set_progress(1.000000);
