getprop("ro.product.device") == "olivelite" || abort("E3004: This package is for \"olivelite\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/olivelite_ru/olivelite:10/QKQ1.191014.001/V12.5.1.0.QCPRUXM:user/release-keys");
ui_print("Target: Xiaomi/olivelite_ru/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPRUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/olivelite_ru/olivelite:10/QKQ1.191014.001/V12.5.1.0.QCPRUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/olivelite_ru/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPRUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/olivelite_ru/olivelite:10/QKQ1.191014.001/V12.5.1.0.QCPRUXM:user/release-keys or Xiaomi/olivelite_ru/olivelite:10/QKQ1.191014.001/V12.5.2.0.QCPRUXM: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:a3bcf3c756aa7cd7d629337d99c3be62abb7a464",
                      "EMMC:/dev/block/bootdevice/by-name/boot:33554432:6e5c3f730c35aca879b82f013d66853a00f5cdb9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:a3bcf3c756aa7cd7d629337d99c3be62abb7a464\" or \"EMMC:/dev/block/bootdevice/by-name/boot:33554432:6e5c3f730c35aca879b82f013d66853a00f5cdb9\" has unexpected contents.");
apply_patch_space(138268672) || 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:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33",
                      "EMMC:/dev/block/bootdevice/by-name/rpm:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33\" or \"EMMC:/dev/block/bootdevice/by-name/rpm:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33",
                      "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33\" or \"EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:17a776a4f8e86ae442c2342da94d80e483724f38",
                      "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:17a776a4f8e86ae442c2342da94d80e483724f38\" or \"EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:17a776a4f8e86ae442c2342da94d80e483724f38",
                      "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:17a776a4f8e86ae442c2342da94d80e483724f38\" or \"EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/aboot:779468:a75f1fbeca0c9a6dd9ad48b6189c6029b6b80a0b",
                      "EMMC:/dev/block/bootdevice/by-name/aboot:779468:eb2f5f5820bcdef28222bd52daddb72c4c7bed42") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:a75f1fbeca0c9a6dd9ad48b6189c6029b6b80a0b\" or \"EMMC:/dev/block/bootdevice/by-name/aboot:779468:eb2f5f5820bcdef28222bd52daddb72c4c7bed42\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:a75f1fbeca0c9a6dd9ad48b6189c6029b6b80a0b",
                      "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:eb2f5f5820bcdef28222bd52daddb72c4c7bed42") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:a75f1fbeca0c9a6dd9ad48b6189c6029b6b80a0b\" or \"EMMC:/dev/block/bootdevice/by-name/abootbak:779468:eb2f5f5820bcdef28222bd52daddb72c4c7bed42\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:0c22ed190e48d4699d2624a063305e8dd00319e2",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ebbff205642e06728c84f7d38834525f30a6d234") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:0c22ed190e48d4699d2624a063305e8dd00319e2\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ebbff205642e06728c84f7d38834525f30a6d234\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0",
                      "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:56bfcc7625986272719b76bf636aa1251f9ccb43") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0\" or \"EMMC:/dev/block/bootdevice/by-name/keymaster:319776:56bfcc7625986272719b76bf636aa1251f9ccb43\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0",
                      "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:56bfcc7625986272719b76bf636aa1251f9ccb43") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0\" or \"EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:56bfcc7625986272719b76bf636aa1251f9ccb43\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a1ffc2f53a0c44abc2c4751aeb495c987a36eb9c",
                      "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b0488b3dcf474a8c69236b6f278ce705fd3d4644") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a1ffc2f53a0c44abc2c4751aeb495c987a36eb9c\" or \"EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b0488b3dcf474a8c69236b6f278ce705fd3d4644\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ce270c4364c8ced5548069087f417ea74cbfd646",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:12e7286384546353cd525fea8f2b071675a0394a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ce270c4364c8ced5548069087f417ea74cbfd646\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1:409044:12e7286384546353cd525fea8f2b071675a0394a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ce270c4364c8ced5548069087f417ea74cbfd646",
                      "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:12e7286384546353cd525fea8f2b071675a0394a") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ce270c4364c8ced5548069087f417ea74cbfd646\" or \"EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:12e7286384546353cd525fea8f2b071675a0394a\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tz:1527680:a52dbe120aa068d38077a77698b9caeaac3be203",
                      "EMMC:/dev/block/bootdevice/by-name/tz:1527680:c7432448169a365b3cf6af19aadeff4677b84512") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:a52dbe120aa068d38077a77698b9caeaac3be203\" or \"EMMC:/dev/block/bootdevice/by-name/tz:1527680:c7432448169a365b3cf6af19aadeff4677b84512\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:a52dbe120aa068d38077a77698b9caeaac3be203",
                      "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c7432448169a365b3cf6af19aadeff4677b84512") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:a52dbe120aa068d38077a77698b9caeaac3be203\" or \"EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c7432448169a365b3cf6af19aadeff4677b84512\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/modem:134217728:857b118984dd1996b865ebafdfb61999600801a1",
                      "EMMC:/dev/block/bootdevice/by-name/modem:134217728:5e199ceed4668d8ab1b4d37202ec41bc16b468b1") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:857b118984dd1996b865ebafdfb61999600801a1\" or \"EMMC:/dev/block/bootdevice/by-name/modem:134217728:5e199ceed4668d8ab1b4d37202ec41bc16b468b1\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a7441f0e5851bb9ae22ce5856eca572c5f050076",
                      "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:43b31eca177ce7afa7e3cba41a680abda2b38009") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:a7441f0e5851bb9ae22ce5856eca572c5f050076\" or \"EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:43b31eca177ce7afa7e3cba41a680abda2b38009\" has unexpected contents.");
patch_partition_check("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:0256ad7dc111494ea0eb069512f9e057e06015ca",
                      "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c9b4664ff34cebcc77971bfaa0a6b67010a4dbfe") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:0256ad7dc111494ea0eb069512f9e057e06015ca\" or \"EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c9b4664ff34cebcc77971bfaa0a6b67010a4dbfe\" 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", "156,1,623,759,773,784,787,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,2394,2516,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,4203,4389,5826,5948,7008,7009,7011,7012,7296,7297,7299,7300,7863,7865,13804,13805,13938,13939,16708,16710,22982,22983,22985,22987,23046,23047,23180,32770,33021,33022,33527,65537,66042,74400,74453,98306,98557,98558,99063,131073,131578,163842,164093,164094,164599,178483,179373,179375,179404,196609,197114,208557,208558,229378,229629,229630,230135,262145,262650,283085,283091,289443,289449,294914,295165,295166,295671,320623,320680,327681,328186,333687,333697,347131,348293,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,819453,819454,819959,851969,852474,876032,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") == "f52eb4bf5ad14ac7900fab912a0cf47d0048339c" || 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", "156,1,623,759,773,784,787,803,810,830,831,1018,1023,1025,1026,1132,1133,1613,1614,1616,1618,1619,1620,1635,1636,1773,1774,2394,2516,2601,2602,2604,2605,2608,2609,2617,2618,2619,2620,4203,4389,5826,5948,7008,7009,7011,7012,7296,7297,7299,7300,7863,7865,13804,13805,13938,13939,16708,16710,22982,22983,22985,22987,23046,23047,23180,32770,33021,33022,33527,65537,66042,74400,74453,98306,98557,98558,99063,131073,131578,163842,164093,164094,164599,178483,179373,179375,179404,196609,197114,208557,208558,229378,229629,229630,230135,262145,262650,283085,283091,289443,289449,294914,295165,295166,295671,320623,320680,327681,328186,333687,333697,347131,348293,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,819453,819454,819959,851969,852474,876032,884736,884738,1015808,1015809,1032011,1048363,1048575,1048576") && 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", "420,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,968,970,971,1195,1203,1211,1217,1220,1224,1228,1229,1802,1803,3711,3712,3850,3894,4281,4282,4914,4915,5651,5656,14850,14851,23433,23434,29606,29607,32768,32770,32832,32833,34151,34152,51419,51420,56708,56709,57939,57941,57961,57963,58282,58283,58609,58610,58904,58905,59213,59214,59496,59497,59791,59792,60168,60169,60243,60244,63659,63660,63852,63853,63941,63944,63962,63963,64008,64009,64027,64029,64078,64079,64110,64111,64998,64999,65012,65013,65043,65044,65142,65143,65426,65427,65443,65444,65536,65537,66046,66047,66049,66050,66616,66617,66692,66693,66694,66695,66707,66709,67975,67976,69113,69115,69536,69537,69811,69812,70236,70237,70435,70439,71280,71281,72189,72190,81168,81169,82155,82156,91907,91908,93386,93387,95050,95052,96712,96713,98304,98306,98368,98369,98876,98877,99059,99060,100722,100723,102447,102448,104141,104142,105356,105357,106683,106684,108005,108006,109232,109233,110556,110557,111943,111944,113236,113237,114539,114540,115894,115895,117189,117190,118446,118447,119682,119683,121035,121036,122218,122219,123571,123572,124810,124811,125620,125621,125645,125646,125670,125671,125927,125928,125952,125953,125977,125978,126002,126003,126027,126028,126128,126129,126370,126371,126395,126396,126533,126534,126558,126559,126583,126584,127193,127194,127218,127219,127243,127244,127456,127457,127501,127502,127526,127527,127551,127552,127576,127577,127601,127602,127943,127944,127968,127969,128106,128107,128131,128132,128156,128157,128793,128794,129995,129996,131072,131073,131580,131581,131822,131823,132013,132014,132038,132039,132063,132064,133105,133106,134399,134400,135552,135553,136800,136801,138017,138018,139208,139209,140459,140460,141673,141674,142822,142823,143963,143964,145108,145109,146258,146259,146724,146725,146749,146750,146774,146775,147031,147032,147056,147057,147081,147082,147106,147107,147131,147132,147473,147474,147498,147499,147542,147543,147637,147638,147662,147663,147687,147688,148297,148298,148322,148323,148347,148348,148604,148605,148629,148630,148654,148655,148679,148680,148704,148705,148757,148758,149047,149048,149072,149073,149210,149211,149235,149236,149260,149261,149973,149974,150212,150213,150237,150238,150262,150263,151126,151127,152879,152880,154601,154602,156342,156343,156565,156566,156590,156591,156615,156616,156640,156641,156665,156666,157007,157008,157032,157033,158091,158092,159581,159582,160946,160947,162292,162293,163570,163571,163840,163842,163904,163905,164415,164416,165500,165501,166841,166842,168098,168099,169415,169416,171127,171128,172843,172844,185630,185631,190645,190861,190967,191005,191190,196609,197114,229378,229440,229441,229946,230960,257987,262077,262143,262144") == "183b635dd25184bab069021e7ee807089d2d6ff7" || 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", "420,1,457,570,578,588,592,597,598,679,683,688,689,952,956,961,962,964,968,970,971,1195,1203,1211,1217,1220,1224,1228,1229,1802,1803,3711,3712,3850,3894,4281,4282,4914,4915,5651,5656,14850,14851,23433,23434,29606,29607,32768,32770,32832,32833,34151,34152,51419,51420,56708,56709,57939,57941,57961,57963,58282,58283,58609,58610,58904,58905,59213,59214,59496,59497,59791,59792,60168,60169,60243,60244,63659,63660,63852,63853,63941,63944,63962,63963,64008,64009,64027,64029,64078,64079,64110,64111,64998,64999,65012,65013,65043,65044,65142,65143,65426,65427,65443,65444,65536,65537,66046,66047,66049,66050,66616,66617,66692,66693,66694,66695,66707,66709,67975,67976,69113,69115,69536,69537,69811,69812,70236,70237,70435,70439,71280,71281,72189,72190,81168,81169,82155,82156,91907,91908,93386,93387,95050,95052,96712,96713,98304,98306,98368,98369,98876,98877,99059,99060,100722,100723,102447,102448,104141,104142,105356,105357,106683,106684,108005,108006,109232,109233,110556,110557,111943,111944,113236,113237,114539,114540,115894,115895,117189,117190,118446,118447,119682,119683,121035,121036,122218,122219,123571,123572,124810,124811,125620,125621,125645,125646,125670,125671,125927,125928,125952,125953,125977,125978,126002,126003,126027,126028,126128,126129,126370,126371,126395,126396,126533,126534,126558,126559,126583,126584,127193,127194,127218,127219,127243,127244,127456,127457,127501,127502,127526,127527,127551,127552,127576,127577,127601,127602,127943,127944,127968,127969,128106,128107,128131,128132,128156,128157,128793,128794,129995,129996,131072,131073,131580,131581,131822,131823,132013,132014,132038,132039,132063,132064,133105,133106,134399,134400,135552,135553,136800,136801,138017,138018,139208,139209,140459,140460,141673,141674,142822,142823,143963,143964,145108,145109,146258,146259,146724,146725,146749,146750,146774,146775,147031,147032,147056,147057,147081,147082,147106,147107,147131,147132,147473,147474,147498,147499,147542,147543,147637,147638,147662,147663,147687,147688,148297,148298,148322,148323,148347,148348,148604,148605,148629,148630,148654,148655,148679,148680,148704,148705,148757,148758,149047,149048,149072,149073,149210,149211,149235,149236,149260,149261,149973,149974,150212,150213,150237,150238,150262,150263,151126,151127,152879,152880,154601,154602,156342,156343,156565,156566,156590,156591,156615,156616,156640,156641,156665,156666,157007,157008,157032,157033,158091,158092,159581,159582,160946,160947,162292,162293,163570,163571,163840,163842,163904,163905,164415,164416,165500,165501,166841,166842,168098,168099,169415,169416,171127,171128,172843,172844,185630,185631,190645,190861,190967,191005,191190,196609,197114,229378,229440,229441,229946,230960,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:a3bcf3c756aa7cd7d629337d99c3be62abb7a464",
                "EMMC:/dev/block/bootdevice/by-name/boot:33554432:6e5c3f730c35aca879b82f013d66853a00f5cdb9",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:33554432:6e5c3f730c35aca879b82f013d66853a00f5cdb9");

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

ui_print("Patching firmware images...");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpm:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33",
                "EMMC:/dev/block/bootdevice/by-name/rpm:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpm:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfg:38076:17a776a4f8e86ae442c2342da94d80e483724f38",
                "EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfg:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/aboot:779468:a75f1fbeca0c9a6dd9ad48b6189c6029b6b80a0b",
                "EMMC:/dev/block/bootdevice/by-name/aboot:779468:eb2f5f5820bcdef28222bd52daddb72c4c7bed42",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/aboot:779468:eb2f5f5820bcdef28222bd52daddb72c4c7bed42");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:0c22ed190e48d4699d2624a063305e8dd00319e2",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib64:265016:ebbff205642e06728c84f7d38834525f30a6d234",
                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:ebbff205642e06728c84f7d38834525f30a6d234");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymaster:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0",
                "EMMC:/dev/block/bootdevice/by-name/keymaster:319776:56bfcc7625986272719b76bf636aa1251f9ccb43",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymaster:319776:56bfcc7625986272719b76bf636aa1251f9ccb43");
patch_partition("EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:a1ffc2f53a0c44abc2c4751aeb495c987a36eb9c",
                "EMMC:/dev/block/bootdevice/by-name/cmnlib:205672:b0488b3dcf474a8c69236b6f278ce705fd3d4644",
                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:b0488b3dcf474a8c69236b6f278ce705fd3d4644");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1:409044:ce270c4364c8ced5548069087f417ea74cbfd646",
                "EMMC:/dev/block/bootdevice/by-name/sbl1:409044:12e7286384546353cd525fea8f2b071675a0394a",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1:409044:12e7286384546353cd525fea8f2b071675a0394a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tz:1527680:a52dbe120aa068d38077a77698b9caeaac3be203",
                "EMMC:/dev/block/bootdevice/by-name/tz:1527680:c7432448169a365b3cf6af19aadeff4677b84512",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tz:1527680:c7432448169a365b3cf6af19aadeff4677b84512");
patch_partition("EMMC:/dev/block/bootdevice/by-name/modem:134217728:857b118984dd1996b865ebafdfb61999600801a1",
                "EMMC:/dev/block/bootdevice/by-name/modem:134217728:5e199ceed4668d8ab1b4d37202ec41bc16b468b1",
                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:5e199ceed4668d8ab1b4d37202ec41bc16b468b1");
patch_partition("EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:ce43597d77620ebb62e1f85b6ffb4edb40ed7b33",
                "EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d",
                package_extract_file("patch/firmware-update/rpm.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/rpmbak:169092:3d785448c3a9ce3a839e18f1d9fa7abde7cd732d");
patch_partition("EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:17a776a4f8e86ae442c2342da94d80e483724f38",
                "EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9",
                package_extract_file("patch/firmware-update/devcfg.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/devcfgbak:38076:cc12967040f4c622fb4910fdb055a5f9ae897af9");
patch_partition("EMMC:/dev/block/bootdevice/by-name/abootbak:779468:a75f1fbeca0c9a6dd9ad48b6189c6029b6b80a0b",
                "EMMC:/dev/block/bootdevice/by-name/abootbak:779468:eb2f5f5820bcdef28222bd52daddb72c4c7bed42",
                package_extract_file("patch/firmware-update/emmc_appsboot.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/abootbak:779468:eb2f5f5820bcdef28222bd52daddb72c4c7bed42");
patch_partition("EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:2d28d8598d6aea8a58f2daca3e243b772c55c9a0",
                "EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:56bfcc7625986272719b76bf636aa1251f9ccb43",
                package_extract_file("patch/firmware-update/km4.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/keymasterbak:319776:56bfcc7625986272719b76bf636aa1251f9ccb43");
patch_partition("EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:ce270c4364c8ced5548069087f417ea74cbfd646",
                "EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:12e7286384546353cd525fea8f2b071675a0394a",
                package_extract_file("patch/firmware-update/sbl1.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/sbl1bak:409044:12e7286384546353cd525fea8f2b071675a0394a");
patch_partition("EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:a52dbe120aa068d38077a77698b9caeaac3be203",
                "EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c7432448169a365b3cf6af19aadeff4677b84512",
                package_extract_file("patch/firmware-update/tz.mbn.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/tzbak:1527680:c7432448169a365b3cf6af19aadeff4677b84512");
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:a7441f0e5851bb9ae22ce5856eca572c5f050076",
                "EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:43b31eca177ce7afa7e3cba41a680abda2b38009",
                package_extract_file("patch/firmware-update/dtbo.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/dtbo:8388608:43b31eca177ce7afa7e3cba41a680abda2b38009");
patch_partition("EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:0256ad7dc111494ea0eb069512f9e057e06015ca",
                "EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c9b4664ff34cebcc77971bfaa0a6b67010a4dbfe",
                package_extract_file("patch/firmware-update/vbmeta.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/vbmeta:4096:c9b4664ff34cebcc77971bfaa0a6b67010a4dbfe");
