getprop("ro.product.device") == "vayu" || abort("E3004: This package is for \"vayu\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/vayu_id/vayu:11/RKQ1.200826.002/V12.5.5.0.RJUIDXM:user/release-keys");
ui_print("Target: Xiaomi/vayu_id/vayu:11/RKQ1.200826.002/V12.5.6.0.RJUIDXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/vayu_id/vayu:11/RKQ1.200826.002/V12.5.5.0.RJUIDXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/vayu_id/vayu:11/RKQ1.200826.002/V12.5.6.0.RJUIDXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/vayu_id/vayu:11/RKQ1.200826.002/V12.5.5.0.RJUIDXM:user/release-keys or Xiaomi/vayu_id/vayu:11/RKQ1.200826.002/V12.5.6.0.RJUIDXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f3682f3e013a38864808a0c2ceb7ba8ed6c808c9"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:bde5567d1b23de05a9a2455f1b312af56eec57e1")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:f3682f3e013a38864808a0c2ceb7ba8ed6c808c9"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:bde5567d1b23de05a9a2455f1b312af56eec57e1"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "184,1,32,43,53,55,59,87,88,21341,21342,21372,21373,27537,27538,28952,56671,56678,56679,57984,57985,59106,59107,60837,60838,61673,61674,62881,62882,63033,63034,63958,63959,65536,65552,68339,68340,69325,69326,70691,70692,71141,71142,73311,73312,73573,73574,73666,73667,73917,73918,74134,74136,74274,74278,74286,74287,74299,74303,74307,74308,75758,75764,75798,75799,75805,75811,75812,75813,75818,75824,75825,75826,79322,79326,79366,79367,80348,80349,81006,81008,82939,82941,82949,82950,82972,82973,82977,82978,83415,83416,83540,83541,83572,83578,83579,83580,83904,83908,83916,83917,84037,84043,84044,85398,86709,86847,86869,86870,89127,89128,89369,89370,90030,90034,90074,90075,90089,90095,90096,90097,93721,93722,95752,95756,95788,95789,95820,95821,96909,96913,96934,96935,97064,97068,97074,97075,97208,97212,97219,97220,98304,98322,102521,102525,102594,102595,102624,102625,102630,102631,102701,102705,102710,102711,102936,102940,102947,102948,103500,103506,103507,103508,105378,105382,105427,105428,105432,105438,105439,105440,105471,105477,105478,105479,107169,107173,107197,720901,720912,743434,745681,757497,757656,757657") == "2c055d6db181898940a13fa7424669ed346f2479" || block_image_verify(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block(map_partition("system"));
ifelse (block_image_recover(map_partition("system"), "184,1,32,43,53,55,59,87,88,21341,21342,21372,21373,27537,27538,28952,56671,56678,56679,57984,57985,59106,59107,60837,60838,61673,61674,62881,62882,63033,63034,63958,63959,65536,65552,68339,68340,69325,69326,70691,70692,71141,71142,73311,73312,73573,73574,73666,73667,73917,73918,74134,74136,74274,74278,74286,74287,74299,74303,74307,74308,75758,75764,75798,75799,75805,75811,75812,75813,75818,75824,75825,75826,79322,79326,79366,79367,80348,80349,81006,81008,82939,82941,82949,82950,82972,82973,82977,82978,83415,83416,83540,83541,83572,83578,83579,83580,83904,83908,83916,83917,84037,84043,84044,85398,86709,86847,86869,86870,89127,89128,89369,89370,90030,90034,90074,90075,90089,90095,90096,90097,93721,93722,95752,95756,95788,95789,95820,95821,96909,96913,96934,96935,97064,97068,97074,97075,97208,97212,97219,97220,98304,98322,102521,102525,102594,102595,102624,102625,102630,102631,102701,102705,102710,102711,102936,102940,102947,102948,103500,103506,103507,103508,105378,105382,105427,105428,105432,105438,105439,105440,105471,105477,105478,105479,107169,107173,107197,720901,720912,743434,745681,757497,757656,757657") && block_image_verify(map_partition("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(map_partition("vendor"), "462,1,196,508,515,525,529,534,535,613,621,627,628,872,876,881,882,884,888,890,891,894,898,902,903,906,907,916,920,924,931,944,945,1753,1754,1926,1932,4166,4167,4603,4604,12739,12740,12800,12801,13752,13754,13755,13756,13758,13761,13762,13763,13765,13767,13768,13769,13771,13773,13774,13775,13777,13779,13780,13781,13783,13785,13786,13787,13789,13791,13796,13798,13801,13803,13806,13808,13816,13818,13821,13823,13824,13825,13827,13829,13830,13831,13834,13836,13837,13838,13840,13842,13843,13844,13846,13848,13849,13850,13852,13854,13855,13856,13858,13860,13861,13862,13871,13872,13891,13892,13893,13894,13898,13899,13900,13901,13904,13905,13906,13907,13910,13911,13912,13913,13916,13917,13918,13919,13923,13924,13925,13926,13929,13930,13931,13932,13936,13937,13941,13942,13946,13947,13951,13952,13956,13957,13958,13959,13968,13969,13970,13971,13974,13975,13976,13977,13980,13981,13982,13983,13986,13987,13988,13989,13991,13993,14285,14286,14401,14402,15337,15347,21519,21520,28550,28551,28573,28574,28675,28676,28677,28678,29176,29178,29183,29185,29191,29193,29198,29200,29259,29261,29481,29482,30712,30714,30760,30761,30844,30845,30846,30847,30911,30912,31276,31278,31771,31772,31837,31838,32768,32771,53587,53588,53592,53594,53611,53612,53647,53648,53657,53658,53660,53661,53711,53712,53715,53716,53767,53768,53978,53979,54004,54005,54037,54038,54145,54146,54180,54181,54320,54321,54334,54335,54444,54445,54447,54449,54451,54452,54511,54512,54514,54515,54575,54576,54578,54579,54640,54641,54643,54644,54708,54709,54711,54712,54776,54777,54779,54780,54843,54844,54910,54911,54913,54914,54978,54979,55047,55048,55050,55051,55112,55113,55115,55116,55180,55181,55183,55184,55245,55246,55248,55249,55313,55314,55317,55318,55379,55380,55382,55383,55447,55448,55450,55451,55515,55516,55518,55519,55583,55584,55586,55587,55651,55652,55654,55655,55722,55723,55724,55725,55791,55792,55793,55794,55799,55800,55803,55804,55864,55865,55867,55868,55931,55932,55998,55999,56001,56002,56066,56067,56135,56136,56138,56139,56200,56201,56203,56204,56268,56269,56271,56272,56333,56334,56336,56337,56401,56402,56405,56406,56467,56468,56470,56471,56535,56536,56538,56539,56603,56604,56606,56607,56671,56672,56674,56675,56739,56740,56742,56743,56810,56811,56812,56813,56879,56880,56881,56882,57045,57046,57057,57058,57521,57523,57569,57570,57685,57686,61234,61235,64230,64231,64322,64323,64324,64325,64369,64370,64794,64795,64851,64852,65191,65193,65194,65196,65197,65199,65207,65209,65210,65211,65221,65222,65223,65224,65226,65230,65359,65369,65536,65537,66107,66108,66180,66181,66185,98307,98812,131073,131578,163843,164348,196609,197114,229379,229884,262145,262650,294915,295420,327681,328186,345161,360448,360449,386991,393125,393215,393216") == "a20277a46efb89273a72b8f3fca0b97df3bb9f2d" || block_image_verify(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block(map_partition("vendor"));
ifelse (block_image_recover(map_partition("vendor"), "462,1,196,508,515,525,529,534,535,613,621,627,628,872,876,881,882,884,888,890,891,894,898,902,903,906,907,916,920,924,931,944,945,1753,1754,1926,1932,4166,4167,4603,4604,12739,12740,12800,12801,13752,13754,13755,13756,13758,13761,13762,13763,13765,13767,13768,13769,13771,13773,13774,13775,13777,13779,13780,13781,13783,13785,13786,13787,13789,13791,13796,13798,13801,13803,13806,13808,13816,13818,13821,13823,13824,13825,13827,13829,13830,13831,13834,13836,13837,13838,13840,13842,13843,13844,13846,13848,13849,13850,13852,13854,13855,13856,13858,13860,13861,13862,13871,13872,13891,13892,13893,13894,13898,13899,13900,13901,13904,13905,13906,13907,13910,13911,13912,13913,13916,13917,13918,13919,13923,13924,13925,13926,13929,13930,13931,13932,13936,13937,13941,13942,13946,13947,13951,13952,13956,13957,13958,13959,13968,13969,13970,13971,13974,13975,13976,13977,13980,13981,13982,13983,13986,13987,13988,13989,13991,13993,14285,14286,14401,14402,15337,15347,21519,21520,28550,28551,28573,28574,28675,28676,28677,28678,29176,29178,29183,29185,29191,29193,29198,29200,29259,29261,29481,29482,30712,30714,30760,30761,30844,30845,30846,30847,30911,30912,31276,31278,31771,31772,31837,31838,32768,32771,53587,53588,53592,53594,53611,53612,53647,53648,53657,53658,53660,53661,53711,53712,53715,53716,53767,53768,53978,53979,54004,54005,54037,54038,54145,54146,54180,54181,54320,54321,54334,54335,54444,54445,54447,54449,54451,54452,54511,54512,54514,54515,54575,54576,54578,54579,54640,54641,54643,54644,54708,54709,54711,54712,54776,54777,54779,54780,54843,54844,54910,54911,54913,54914,54978,54979,55047,55048,55050,55051,55112,55113,55115,55116,55180,55181,55183,55184,55245,55246,55248,55249,55313,55314,55317,55318,55379,55380,55382,55383,55447,55448,55450,55451,55515,55516,55518,55519,55583,55584,55586,55587,55651,55652,55654,55655,55722,55723,55724,55725,55791,55792,55793,55794,55799,55800,55803,55804,55864,55865,55867,55868,55931,55932,55998,55999,56001,56002,56066,56067,56135,56136,56138,56139,56200,56201,56203,56204,56268,56269,56271,56272,56333,56334,56336,56337,56401,56402,56405,56406,56467,56468,56470,56471,56535,56536,56538,56539,56603,56604,56606,56607,56671,56672,56674,56675,56739,56740,56742,56743,56810,56811,56812,56813,56879,56880,56881,56882,57045,57046,57057,57058,57521,57523,57569,57570,57685,57686,61234,61235,64230,64231,64322,64323,64324,64325,64369,64370,64794,64795,64851,64852,65191,65193,65194,65196,65197,65199,65207,65209,65210,65211,65221,65222,65223,65224,65226,65230,65359,65369,65536,65537,66107,66108,66180,66181,66185,98307,98812,131073,131578,163843,164348,196609,197114,229379,229884,262145,262650,294915,295420,327681,328186,345161,360448,360449,386991,393125,393215,393216") && block_image_verify(map_partition("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;
if (range_sha1(map_partition("product"), "348,1,15,3862,3863,4441,4442,6213,6217,6313,6314,8949,8952,8960,8961,9000,9001,17183,17184,25171,25173,25303,25308,26586,26587,27262,27266,28232,28233,28595,28599,29118,29119,29131,29135,29139,29140,30980,30984,31026,31027,32417,32418,32768,32776,40229,40230,41454,41455,50630,50631,54542,54546,54577,54579,54872,54875,58675,58676,65536,65542,68523,68524,78068,78075,79551,79552,79557,79558,79686,79692,79693,79694,79706,79712,79713,79714,80504,80505,82871,82872,96157,96158,96234,96235,98304,98312,98421,98422,114772,114773,115032,115033,115229,115230,117141,117142,124594,124595,125577,125581,130657,130658,131072,131078,135724,135725,135732,135733,135739,135740,140077,140078,140303,140305,140315,140317,140363,140365,140375,140377,140386,140387,142205,142206,142209,142212,145978,145979,151819,151820,151840,151841,151904,151905,152566,152567,154111,154112,163164,163165,163171,163172,163643,163644,163840,163848,167037,167038,171588,171589,173287,173288,173292,173293,176198,176199,187620,187624,189376,189377,189951,189955,190975,190976,195365,195366,195926,195927,195931,195932,195955,195957,195958,195959,195991,195992,196003,196004,196608,196614,197929,197930,197933,197934,204237,204238,204401,204402,204403,204404,204406,204407,204422,204423,204426,204428,204429,204431,204449,204450,204462,204463,204501,204505,204509,204513,204514,204526,204941,204942,205313,205314,206799,206800,206889,206891,206893,206894,206896,206897,206899,206900,206902,206903,206905,206906,206908,206909,206919,206920,206924,206925,206930,206931,206936,206937,206941,206942,206947,206948,206975,206976,206996,206997,207003,207004,207024,207025,207041,207042,207753,207755,215384,215387,215744,215745,219337,219338,221289,221290,223209,223211,225233,225234,225243,225245,226615,226617,229376,229411,234816,234818,235868,235870,238110,238111,238285,238287,238335,238336,238591,238593,238980,238982,240378,240380,240585,240589,240594,240595,240738,240740,242141,242143,246385,246386,246440,246441,248653,248654,256423,256424,257007,257009,258217,258219,259772,259774,262144,262178,270661,270662,294657,294658,294679,294680,294887,294888,294912,294920,295202,295203,295374,295375,295616,295617,296352,296353,296897,296898,297111,297112,298056,298058,298562,298563,299204,299205,302100,302101,302893,302896,306230,306231,313609,318582,318657,318658") == "75816eeb677e824af077e843b1eef61fbad733d7" || block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat")) then
ui_print("Verified product image...");
else
ifelse (block_image_recover(map_partition("product"), "348,1,15,3862,3863,4441,4442,6213,6217,6313,6314,8949,8952,8960,8961,9000,9001,17183,17184,25171,25173,25303,25308,26586,26587,27262,27266,28232,28233,28595,28599,29118,29119,29131,29135,29139,29140,30980,30984,31026,31027,32417,32418,32768,32776,40229,40230,41454,41455,50630,50631,54542,54546,54577,54579,54872,54875,58675,58676,65536,65542,68523,68524,78068,78075,79551,79552,79557,79558,79686,79692,79693,79694,79706,79712,79713,79714,80504,80505,82871,82872,96157,96158,96234,96235,98304,98312,98421,98422,114772,114773,115032,115033,115229,115230,117141,117142,124594,124595,125577,125581,130657,130658,131072,131078,135724,135725,135732,135733,135739,135740,140077,140078,140303,140305,140315,140317,140363,140365,140375,140377,140386,140387,142205,142206,142209,142212,145978,145979,151819,151820,151840,151841,151904,151905,152566,152567,154111,154112,163164,163165,163171,163172,163643,163644,163840,163848,167037,167038,171588,171589,173287,173288,173292,173293,176198,176199,187620,187624,189376,189377,189951,189955,190975,190976,195365,195366,195926,195927,195931,195932,195955,195957,195958,195959,195991,195992,196003,196004,196608,196614,197929,197930,197933,197934,204237,204238,204401,204402,204403,204404,204406,204407,204422,204423,204426,204428,204429,204431,204449,204450,204462,204463,204501,204505,204509,204513,204514,204526,204941,204942,205313,205314,206799,206800,206889,206891,206893,206894,206896,206897,206899,206900,206902,206903,206905,206906,206908,206909,206919,206920,206924,206925,206930,206931,206936,206937,206941,206942,206947,206948,206975,206976,206996,206997,207003,207004,207024,207025,207041,207042,207753,207755,215384,215387,215744,215745,219337,219338,221289,221290,223209,223211,225233,225234,225243,225245,226615,226617,229376,229411,234816,234818,235868,235870,238110,238111,238285,238287,238335,238336,238591,238593,238980,238982,240378,240380,240585,240589,240594,240595,240738,240740,242141,242143,246385,246386,246440,246441,248653,248654,256423,256424,257007,257009,258217,258219,259772,259774,262144,262178,270661,270662,294657,294658,294679,294680,294887,294888,294912,294920,295202,295203,295374,295375,295616,295617,296352,296353,296897,296898,297111,297112,298056,298058,298562,298563,299204,299205,302100,302101,302893,302896,306230,306231,313609,318582,318657,318658") && block_image_verify(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat"), ui_print("product recovered successfully."), abort("E2004: product partition fails to recover"));
endif;
if (range_sha1(map_partition("odm"), "14,1,13,14,17,25,27,34,35,257,258,262,271,287,288") == "f8a27b787bf588d3b35e7ac2bc190c600be85239" || block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat")) then
ui_print("Verified odm image...");
else
ifelse (block_image_recover(map_partition("odm"), "14,1,13,14,17,25,27,34,35,257,258,262,271,287,288") && block_image_verify(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat"), ui_print("odm recovered successfully."), abort("E2004: odm partition fails to recover"));
endif;
if (range_sha1(map_partition("system_ext"), "310,1,30,37,41,45,46,52,58,59,60,74,80,81,82,140,144,149,150,236,242,246,247,253,259,260,261,489,493,502,503,533,539,540,541,735,739,743,744,747,751,756,757,760,761,767,773,774,775,797,803,804,805,1540,1544,1562,1563,1567,1573,1574,1575,1577,1578,1589,1595,1596,1597,1607,1608,1613,1617,1621,1622,1626,1632,1636,1637,1644,1650,1651,1652,1664,1670,1671,1672,1674,1681,1687,1694,1699,1706,1736,1743,1762,1769,1787,1792,1809,1816,1832,1833,2042,2044,2054,2055,2067,2068,2069,2070,2071,2072,2081,2082,2105,2106,2152,2157,2160,2163,2166,2169,2172,2174,2178,2179,2183,2186,2670,2672,2676,2680,2685,2687,2692,2696,2697,2701,2702,2706,2707,2711,2712,2716,2717,2721,2722,2726,2727,2729,2736,2740,2741,2745,2746,2750,2751,2755,2756,2760,2761,2765,2766,2770,2771,2773,2774,2778,2779,2783,2784,2788,2789,2793,2794,2798,2799,2803,2804,2808,2809,2811,2815,2819,2820,2822,2823,2825,2826,2830,2831,2835,2836,2838,2839,2843,2844,2848,2849,2853,2854,2858,2859,2861,2862,2866,2867,2869,2873,2886,2891,2921,2924,3031,5434,5435,5569,6247,6249,6259,6500,6501,8566,8567,8625,8626,9166,9167,9217,9218,9527,9528,14709,14710,14782,14783,14791,14792,14853,14854,14927,14928,14932,14933,14986,14987,14997,14998,15031,15032,15051,15052,15104,15105,15250,15251,15326,15327,15473,15474,21411,22448,22452,22468,23276,23277,24863,24864,29957,29958,30836,30837,30888,30889,31207,31208,32768,32805,33279,33280,39208,39212,39213,40913,41078,41080,41128,41130,42714,42716,51224,51225,51731,51732,51771,51772,51785,51786,52205,52206,53256,53258,58475,58479,58750,98324,98327,102682,102991,104627,104662,104663") == "3643684f32138f7a43b0e203680cb420f2c9ff6e" || block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat")) then
ui_print("Verified system_ext image...");
else
check_first_block(map_partition("system_ext"));
ifelse (block_image_recover(map_partition("system_ext"), "310,1,30,37,41,45,46,52,58,59,60,74,80,81,82,140,144,149,150,236,242,246,247,253,259,260,261,489,493,502,503,533,539,540,541,735,739,743,744,747,751,756,757,760,761,767,773,774,775,797,803,804,805,1540,1544,1562,1563,1567,1573,1574,1575,1577,1578,1589,1595,1596,1597,1607,1608,1613,1617,1621,1622,1626,1632,1636,1637,1644,1650,1651,1652,1664,1670,1671,1672,1674,1681,1687,1694,1699,1706,1736,1743,1762,1769,1787,1792,1809,1816,1832,1833,2042,2044,2054,2055,2067,2068,2069,2070,2071,2072,2081,2082,2105,2106,2152,2157,2160,2163,2166,2169,2172,2174,2178,2179,2183,2186,2670,2672,2676,2680,2685,2687,2692,2696,2697,2701,2702,2706,2707,2711,2712,2716,2717,2721,2722,2726,2727,2729,2736,2740,2741,2745,2746,2750,2751,2755,2756,2760,2761,2765,2766,2770,2771,2773,2774,2778,2779,2783,2784,2788,2789,2793,2794,2798,2799,2803,2804,2808,2809,2811,2815,2819,2820,2822,2823,2825,2826,2830,2831,2835,2836,2838,2839,2843,2844,2848,2849,2853,2854,2858,2859,2861,2862,2866,2867,2869,2873,2886,2891,2921,2924,3031,5434,5435,5569,6247,6249,6259,6500,6501,8566,8567,8625,8626,9166,9167,9217,9218,9527,9528,14709,14710,14782,14783,14791,14792,14853,14854,14927,14928,14932,14933,14986,14987,14997,14998,15031,15032,15051,15052,15104,15105,15250,15251,15326,15327,15473,15474,21411,22448,22452,22468,23276,23277,24863,24864,29957,29958,30836,30837,30888,30889,31207,31208,32768,32805,33279,33280,39208,39212,39213,40913,41078,41080,41128,41130,42714,42716,51224,51225,51731,51732,51771,51772,51785,51786,52205,52206,53256,53258,58475,58479,58750,98324,98327,102682,102991,104627,104662,104663") && block_image_verify(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat"), ui_print("system_ext recovered successfully."), abort("E2004: system_ext partition fails to recover"));
endif;

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


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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");

# --- Start patching dynamic partitions ---


# Update dynamic partition metadata

assert(update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list")));

# Patch partition system

ui_print("Patching system image after verification.");
show_progress(0.500000, 0);
block_image_update(map_partition("system"), package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");

# Patch partition vendor

ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("vendor"), package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");

# Patch partition product

ui_print("Patching product image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("product"), package_extract_file("product.transfer.list"), "product.new.dat", "product.patch.dat") ||
  abort("E2001: Failed to update product image.");

# Patch partition odm

ui_print("Patching odm image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("odm"), package_extract_file("odm.transfer.list"), "odm.new.dat", "odm.patch.dat") ||
  abort("E2001: Failed to update odm image.");

# Patch partition system_ext

ui_print("Patching system_ext image after verification.");
show_progress(0.100000, 0);
block_image_update(map_partition("system_ext"), package_extract_file("system_ext.transfer.list"), "system_ext.new.dat", "system_ext.patch.dat") ||
  abort("E2001: Failed to update system_ext image.");

# --- End patching dynamic partitions ---

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

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

ui_print("Patching vbmeta dtbo logo binimages...");
package_extract_file("firmware-update/dtbo.img", "/dev/block/bootdevice/by-name/dtbo");
package_extract_file("firmware-update/vbmeta.img", "/dev/block/bootdevice/by-name/vbmeta");
package_extract_file("firmware-update/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");
set_progress(1.000000);
