getprop("ro.product.device") == "cas" || abort("E3004: This package is for \"cas\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/cas/cas:11/RKQ1.200826.002/V12.5.8.0.RJJCNXM:user/release-keys");
ui_print("Target: Xiaomi/cas/cas:11/RKQ1.200826.002/V12.5.10.0.RJJCNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/cas/cas:11/RKQ1.200826.002/V12.5.8.0.RJJCNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/cas/cas:11/RKQ1.200826.002/V12.5.10.0.RJJCNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/cas/cas:11/RKQ1.200826.002/V12.5.8.0.RJJCNXM:user/release-keys or Xiaomi/cas/cas:11/RKQ1.200826.002/V12.5.10.0.RJJCNXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:1fbc8671b4bbe0e15394473deeebbfa603e778ac"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:092bc36d29857eb3c1bc6deac02a3c2acb659379")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:1fbc8671b4bbe0e15394473deeebbfa603e778ac"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:092bc36d29857eb3c1bc6deac02a3c2acb659379"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1(map_partition("system"), "1374,1,29,40,50,52,56,1989,1990,2035,2036,2060,2061,23318,23319,24037,24038,25176,25177,31341,31342,31490,31491,32432,32433,32768,32783,36713,36714,37552,37553,38907,38908,39343,39344,40582,40583,40831,40832,42252,42253,42347,42348,42544,42545,42755,53762,64768,68415,68422,68423,69599,69601,69960,69964,69977,69978,70142,70146,70154,70155,70184,70188,70192,70193,70202,70208,70209,70210,71471,71477,71511,71512,71518,71524,71525,71526,71531,71537,71538,71539,71550,71556,71557,71558,71754,71758,71766,71767,71770,71771,71791,71797,71798,73063,75800,75801,75864,75865,76498,76502,76542,76560,76567,76573,76574,76575,82622,82623,84660,84664,84727,84728,84857,84861,84867,84868,85001,85005,85012,85013,88625,88626,89336,89340,89406,89407,89770,89771,90525,90529,90544,90545,90549,90555,90556,90557,90588,90594,90595,90596,92051,92055,92080,92081,92105,92106,92108,92109,92110,92111,92112,92113,92143,92144,95264,95268,95299,95300,97359,97363,97389,97390,98304,98319,99159,99160,103357,103359,109426,109427,109432,109438,109439,109440,110372,110374,110375,110376,110386,110392,110393,110394,110408,110412,110429,110430,110435,110436,111064,111068,111084,111085,113795,113799,113846,113847,113862,113863,114021,114025,114030,114031,114299,114300,114711,114715,114728,114729,119126,119127,119661,119662,123499,123500,123502,123503,123592,123593,131072,131085,137354,137356,137358,137359,137363,137364,137366,137367,137787,137788,140540,140541,142005,142009,142036,142037,145900,145904,145929,145930,157103,157104,163065,163066,163174,163175,163176,163195,163196,163202,163840,163855,166212,166216,166302,166303,166361,166362,167068,167069,167487,167488,170055,170056,171816,171820,171858,171859,171900,171906,171912,171913,174516,174517,174804,174810,174851,174852,178212,178213,178406,178407,179536,179542,179565,179566,179743,179744,180438,180439,181067,181071,181093,181094,181916,181917,185748,185749,187713,187717,187745,187746,190832,190836,190865,190866,192291,192292,196608,196621,204442,204443,204636,204640,204646,204647,211215,211216,211219,211220,222058,222059,224292,224293,229376,229391,231135,231136,232369,232373,232584,232585,232720,232721,233527,233533,233555,233556,238052,238053,238587,238593,238670,238671,240383,240384,241416,241420,241445,241446,241460,241461,241494,241500,241501,241502,241505,241511,241516,241517,241854,241855,245048,245049,245111,245115,245120,245121,245165,245173,245174,245175,246831,246837,246878,246879,247128,247134,247144,247145,247164,247170,247171,247172,247215,247221,247222,247223,249601,249602,249919,249923,249962,249963,250080,250084,250089,250090,250159,250163,250167,250168,250419,250423,250432,250433,259865,259866,261630,261634,262144,262157,265244,265245,266430,266431,266442,266448,266449,266450,266962,266966,266981,266982,269971,269972,271099,271103,277377,277383,277493,277494,281697,281698,283728,283732,283789,283790,283825,283826,283834,283840,283841,283842,284493,284494,285138,285142,285164,285165,285899,285903,285920,285921,285932,285938,285939,285940,287722,287723,288210,288214,289081,289082,290138,290139,291774,291778,291806,291807,294912,294927,304465,304466,310748,310750,310757,310758,312688,312689,319749,319750,319800,319801,327680,327693,328251,328253,329709,329710,331081,331082,331972,331976,332002,332003,332069,332073,332078,332079,332084,332088,332093,332094,332098,332099,332114,332120,332121,332122,332524,332528,332532,332533,332557,332563,332564,332565,334854,334855,336003,336007,336077,336078,336081,336087,336091,336092,336440,336444,336456,336457,337396,337402,337424,337425,337451,337457,337461,337462,338923,338927,338954,338955,340428,340429,341522,341526,341565,341566,341572,341573,342411,342414,346871,346875,349072,349073,353904,353905,354940,354941,356065,356066,357717,357721,357804,357805,357841,357845,360051,360055,360069,360070,360448,360461,360478,360482,360489,360490,361450,361451,364181,364188,364223,364224,364583,364584,365235,365253,365324,365325,367020,367021,370311,370312,372955,372960,372961,372962,372963,372964,372965,372966,372967,372968,372969,372970,372971,372973,374437,374438,375185,375186,377114,377116,377223,377225,380601,380602,381235,381236,382853,382856,385818,385819,388229,388230,391204,391205,393216,393229,396994,396995,397357,397358,397664,397665,401700,401701,402720,402721,403582,403586,403623,403624,406245,406246,406593,406594,406756,406758,423557,423558,425984,425997,427381,427382,427585,427586,433284,433285,434624,434625,434629,434630,440396,440397,440980,440981,458752,458765,465063,465064,466485,466486,468861,468862,472247,472248,474240,474241,476886,476887,476888,476889,478125,478126,482737,482738,485149,485150,485498,485499,491520,491533,492078,492079,494363,494364,497332,497333,497334,497335,497875,497876,498671,498672,499262,499263,504367,504626,508028,508037,509442,509447,518178,518179,518276,518277,522821,522822,524288,524301,524945,524946,528523,528524,533868,533869,553127,553128,553130,553131,553701,553702,557056,557069,568727,568728,569416,569417,572508,572509,572914,572915,581823,581824,581826,581848,581860,581861,581868,581869,581909,581910,581932,581933,581999,582000,582004,582005,582008,582009,582072,582073,582076,582081,582082,582083,582084,582085,582086,582087,582881,582882,582888,582889,583442,583446,583447,583448,583449,583450,583451,583452,583453,583454,583455,583456,583457,583458,583459,583460,583461,583464,584922,584924,585063,585064,585067,585069,585327,585328,585330,585332,585876,585877,585892,585893,585907,585908,586226,586227,586373,586374,586383,586385,587701,587702,589824,589837,592655,592657,601522,601523,609390,609391,611477,611478,612108,612111,612117,612118,612123,612124,612129,612130,612135,612184,612191,615526,615531,615538,615552,615558,615574,615687,615699,615700,615704,615748,615757,615759,615765,615766,615771,615772,615777,615778,615783,615836,615843,619628,619633,619640,619652,619657,619671,619788,619793,619794,619798,619844,619866,619877,621001,621002,622592,622605,623407,623408,624000,632389,633018,633528,633600,633881,633910,633914,633918,633922,633923,633927,633928,633930,633935,633937,634254,634255,634286,634288,634373,634374,634384,634388,634389,634393,634394,634398,634399,634403,634404,634408,634409,634413,634414,634418,634419,634423,634424,634428,634429,634431,634445,634449,634450,634452,634456,634457,634461,634465,634466,634470,634471,634475,634476,634480,634481,634483,634488,634492,634493,634497,634498,634502,634503,634505,634568,634570,634574,634578,634579,634583,634584,634588,634589,634593,634594,634598,634599,634601,634605,634607,634616,634620,634621,634625,634626,634630,634631,634633,634698,634699,634707,634711,634712,634714,634718,634722,634723,634725,634726,634730,634731,634733,634739,634743,634744,634748,634749,634753,634754,634756,634761,634765,634766,634770,634771,634773,634777,634781,634782,634786,634787,634791,634792,634796,634797,634799,634800,634804,634805,634809,634810,634814,634815,634819,634820,634822,634826,634828,634832,634852,635225,635226,635253,635255,635359,635360,635370,635407,635410,635416,635421,635422,635424,635442,635445,635455,635470,635471,635476,635482,635554,635556,635559,635603,635679,635680,635686,644938,644941,644977,644980,644985,645403,649766,651258,651259,651671,651672,651874,651875,651903,651904,651928,651929,652201,652202,654065,654066,654492,654493,655119,655233,655360,655373,658391,658392,659650,659651,663046,663047,663345,663346,664630,664631,668721,668722,668880,668881,669724,669725,670075,670076,670967,670968,674619,674620,677409,677410,677465,677466,677526,677527,680882,680884,681076,681077,681181,681182,685833,685834,685895,685896,686004,686005,686688,686689,686708,686709,687985,687986,688128,688141,691604,691605,691726,691891,699193,699194,699535,699598,706416,706417,712256,712257,712425,712426,712937,712938,714252,714253,718503,718504,718507,718509,718510,718511,718853,718854,720112,720351,811131,812786,812787,812800,812805,813052,813260,813293,813839,813840,813841,813842,813844,813845,813846,813847,813848,813849,813850,813851,813852,813853,813854,813855,813856,813857,813859,813860,813861,813862,813864,813865,813867,813868,813869,813870,813871,813872,813874,813875,813878,813879,813880,813881,813882,813883,813885,813886,813887,813888,813890,813891,813892,813893,813894,813895,813898,813899,813903,813904,813907,813908,813910,813911,813913,813914,813916,813917,813918,813919,813921,813922,813925,813926,813929,813930,813932,813933,813940,813941,813955,813956,813960,813961,813963,813964,813970,813971,813981,813982,813989,813990,813992,813993,813998,813999,814004,814005,814008,814009,814026,814027,814029,814030,814035,814036,814043,814044,814045,814046,814048,814049,814054,814055,814060,814061,814067,814068,814079,814080,814082,814083,814087,814088,814097,814098,814214,814215,819200,819273,828854,828856,834026,834028,834109,834112,834183,834185,838455,838456,846247,846248,846252,846253,846507,846510,851968,852040,860787,860789,860796,860800,863723,863725,867931,867932,867936,867937,869852,869854,869921,869922,870112,870114,870125,870129,870421,870423,870463,870467,871323,871324,872021,872023,872102,872104,876066,876067,880119,880121,880487,880489,882290,882291,884736,884806,885141,885143,888207,888209,889504,889505,890702,890704,890756,890760,890769,890773,891817,891819,891847,891849,892284,892286,892499,892501,892531,892533,892544,892548,892549,1015817,1015821,1048577,1048589,1055256,1058448,1075219,1075436,1075437") == "b2543b09b1230f87d79184814ecd1ac9fa014005" || 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"), "1374,1,29,40,50,52,56,1989,1990,2035,2036,2060,2061,23318,23319,24037,24038,25176,25177,31341,31342,31490,31491,32432,32433,32768,32783,36713,36714,37552,37553,38907,38908,39343,39344,40582,40583,40831,40832,42252,42253,42347,42348,42544,42545,42755,53762,64768,68415,68422,68423,69599,69601,69960,69964,69977,69978,70142,70146,70154,70155,70184,70188,70192,70193,70202,70208,70209,70210,71471,71477,71511,71512,71518,71524,71525,71526,71531,71537,71538,71539,71550,71556,71557,71558,71754,71758,71766,71767,71770,71771,71791,71797,71798,73063,75800,75801,75864,75865,76498,76502,76542,76560,76567,76573,76574,76575,82622,82623,84660,84664,84727,84728,84857,84861,84867,84868,85001,85005,85012,85013,88625,88626,89336,89340,89406,89407,89770,89771,90525,90529,90544,90545,90549,90555,90556,90557,90588,90594,90595,90596,92051,92055,92080,92081,92105,92106,92108,92109,92110,92111,92112,92113,92143,92144,95264,95268,95299,95300,97359,97363,97389,97390,98304,98319,99159,99160,103357,103359,109426,109427,109432,109438,109439,109440,110372,110374,110375,110376,110386,110392,110393,110394,110408,110412,110429,110430,110435,110436,111064,111068,111084,111085,113795,113799,113846,113847,113862,113863,114021,114025,114030,114031,114299,114300,114711,114715,114728,114729,119126,119127,119661,119662,123499,123500,123502,123503,123592,123593,131072,131085,137354,137356,137358,137359,137363,137364,137366,137367,137787,137788,140540,140541,142005,142009,142036,142037,145900,145904,145929,145930,157103,157104,163065,163066,163174,163175,163176,163195,163196,163202,163840,163855,166212,166216,166302,166303,166361,166362,167068,167069,167487,167488,170055,170056,171816,171820,171858,171859,171900,171906,171912,171913,174516,174517,174804,174810,174851,174852,178212,178213,178406,178407,179536,179542,179565,179566,179743,179744,180438,180439,181067,181071,181093,181094,181916,181917,185748,185749,187713,187717,187745,187746,190832,190836,190865,190866,192291,192292,196608,196621,204442,204443,204636,204640,204646,204647,211215,211216,211219,211220,222058,222059,224292,224293,229376,229391,231135,231136,232369,232373,232584,232585,232720,232721,233527,233533,233555,233556,238052,238053,238587,238593,238670,238671,240383,240384,241416,241420,241445,241446,241460,241461,241494,241500,241501,241502,241505,241511,241516,241517,241854,241855,245048,245049,245111,245115,245120,245121,245165,245173,245174,245175,246831,246837,246878,246879,247128,247134,247144,247145,247164,247170,247171,247172,247215,247221,247222,247223,249601,249602,249919,249923,249962,249963,250080,250084,250089,250090,250159,250163,250167,250168,250419,250423,250432,250433,259865,259866,261630,261634,262144,262157,265244,265245,266430,266431,266442,266448,266449,266450,266962,266966,266981,266982,269971,269972,271099,271103,277377,277383,277493,277494,281697,281698,283728,283732,283789,283790,283825,283826,283834,283840,283841,283842,284493,284494,285138,285142,285164,285165,285899,285903,285920,285921,285932,285938,285939,285940,287722,287723,288210,288214,289081,289082,290138,290139,291774,291778,291806,291807,294912,294927,304465,304466,310748,310750,310757,310758,312688,312689,319749,319750,319800,319801,327680,327693,328251,328253,329709,329710,331081,331082,331972,331976,332002,332003,332069,332073,332078,332079,332084,332088,332093,332094,332098,332099,332114,332120,332121,332122,332524,332528,332532,332533,332557,332563,332564,332565,334854,334855,336003,336007,336077,336078,336081,336087,336091,336092,336440,336444,336456,336457,337396,337402,337424,337425,337451,337457,337461,337462,338923,338927,338954,338955,340428,340429,341522,341526,341565,341566,341572,341573,342411,342414,346871,346875,349072,349073,353904,353905,354940,354941,356065,356066,357717,357721,357804,357805,357841,357845,360051,360055,360069,360070,360448,360461,360478,360482,360489,360490,361450,361451,364181,364188,364223,364224,364583,364584,365235,365253,365324,365325,367020,367021,370311,370312,372955,372960,372961,372962,372963,372964,372965,372966,372967,372968,372969,372970,372971,372973,374437,374438,375185,375186,377114,377116,377223,377225,380601,380602,381235,381236,382853,382856,385818,385819,388229,388230,391204,391205,393216,393229,396994,396995,397357,397358,397664,397665,401700,401701,402720,402721,403582,403586,403623,403624,406245,406246,406593,406594,406756,406758,423557,423558,425984,425997,427381,427382,427585,427586,433284,433285,434624,434625,434629,434630,440396,440397,440980,440981,458752,458765,465063,465064,466485,466486,468861,468862,472247,472248,474240,474241,476886,476887,476888,476889,478125,478126,482737,482738,485149,485150,485498,485499,491520,491533,492078,492079,494363,494364,497332,497333,497334,497335,497875,497876,498671,498672,499262,499263,504367,504626,508028,508037,509442,509447,518178,518179,518276,518277,522821,522822,524288,524301,524945,524946,528523,528524,533868,533869,553127,553128,553130,553131,553701,553702,557056,557069,568727,568728,569416,569417,572508,572509,572914,572915,581823,581824,581826,581848,581860,581861,581868,581869,581909,581910,581932,581933,581999,582000,582004,582005,582008,582009,582072,582073,582076,582081,582082,582083,582084,582085,582086,582087,582881,582882,582888,582889,583442,583446,583447,583448,583449,583450,583451,583452,583453,583454,583455,583456,583457,583458,583459,583460,583461,583464,584922,584924,585063,585064,585067,585069,585327,585328,585330,585332,585876,585877,585892,585893,585907,585908,586226,586227,586373,586374,586383,586385,587701,587702,589824,589837,592655,592657,601522,601523,609390,609391,611477,611478,612108,612111,612117,612118,612123,612124,612129,612130,612135,612184,612191,615526,615531,615538,615552,615558,615574,615687,615699,615700,615704,615748,615757,615759,615765,615766,615771,615772,615777,615778,615783,615836,615843,619628,619633,619640,619652,619657,619671,619788,619793,619794,619798,619844,619866,619877,621001,621002,622592,622605,623407,623408,624000,632389,633018,633528,633600,633881,633910,633914,633918,633922,633923,633927,633928,633930,633935,633937,634254,634255,634286,634288,634373,634374,634384,634388,634389,634393,634394,634398,634399,634403,634404,634408,634409,634413,634414,634418,634419,634423,634424,634428,634429,634431,634445,634449,634450,634452,634456,634457,634461,634465,634466,634470,634471,634475,634476,634480,634481,634483,634488,634492,634493,634497,634498,634502,634503,634505,634568,634570,634574,634578,634579,634583,634584,634588,634589,634593,634594,634598,634599,634601,634605,634607,634616,634620,634621,634625,634626,634630,634631,634633,634698,634699,634707,634711,634712,634714,634718,634722,634723,634725,634726,634730,634731,634733,634739,634743,634744,634748,634749,634753,634754,634756,634761,634765,634766,634770,634771,634773,634777,634781,634782,634786,634787,634791,634792,634796,634797,634799,634800,634804,634805,634809,634810,634814,634815,634819,634820,634822,634826,634828,634832,634852,635225,635226,635253,635255,635359,635360,635370,635407,635410,635416,635421,635422,635424,635442,635445,635455,635470,635471,635476,635482,635554,635556,635559,635603,635679,635680,635686,644938,644941,644977,644980,644985,645403,649766,651258,651259,651671,651672,651874,651875,651903,651904,651928,651929,652201,652202,654065,654066,654492,654493,655119,655233,655360,655373,658391,658392,659650,659651,663046,663047,663345,663346,664630,664631,668721,668722,668880,668881,669724,669725,670075,670076,670967,670968,674619,674620,677409,677410,677465,677466,677526,677527,680882,680884,681076,681077,681181,681182,685833,685834,685895,685896,686004,686005,686688,686689,686708,686709,687985,687986,688128,688141,691604,691605,691726,691891,699193,699194,699535,699598,706416,706417,712256,712257,712425,712426,712937,712938,714252,714253,718503,718504,718507,718509,718510,718511,718853,718854,720112,720351,811131,812786,812787,812800,812805,813052,813260,813293,813839,813840,813841,813842,813844,813845,813846,813847,813848,813849,813850,813851,813852,813853,813854,813855,813856,813857,813859,813860,813861,813862,813864,813865,813867,813868,813869,813870,813871,813872,813874,813875,813878,813879,813880,813881,813882,813883,813885,813886,813887,813888,813890,813891,813892,813893,813894,813895,813898,813899,813903,813904,813907,813908,813910,813911,813913,813914,813916,813917,813918,813919,813921,813922,813925,813926,813929,813930,813932,813933,813940,813941,813955,813956,813960,813961,813963,813964,813970,813971,813981,813982,813989,813990,813992,813993,813998,813999,814004,814005,814008,814009,814026,814027,814029,814030,814035,814036,814043,814044,814045,814046,814048,814049,814054,814055,814060,814061,814067,814068,814079,814080,814082,814083,814087,814088,814097,814098,814214,814215,819200,819273,828854,828856,834026,834028,834109,834112,834183,834185,838455,838456,846247,846248,846252,846253,846507,846510,851968,852040,860787,860789,860796,860800,863723,863725,867931,867932,867936,867937,869852,869854,869921,869922,870112,870114,870125,870129,870421,870423,870463,870467,871323,871324,872021,872023,872102,872104,876066,876067,880119,880121,880487,880489,882290,882291,884736,884806,885141,885143,888207,888209,889504,889505,890702,890704,890756,890760,890769,890773,891817,891819,891847,891849,892284,892286,892499,892501,892531,892533,892544,892548,892549,1015817,1015821,1048577,1048589,1055256,1058448,1075219,1075436,1075437") && 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"), "944,1,25,35,39,44,45,123,131,137,138,1812,1816,2293,2294,2299,2303,2307,2308,2314,2320,2321,2322,2566,2570,2575,2576,2578,2582,2584,2585,2608,2609,2645,2649,2699,2700,2703,2709,2710,2711,2714,2715,2720,2721,4412,4413,7596,7597,8039,8040,16904,16905,18002,18003,18004,18005,18007,18010,18011,18012,18014,18016,18017,18018,18020,18022,18023,18024,18026,18028,18029,18030,18032,18034,18035,18036,18038,18040,18045,18047,18050,18052,18055,18057,18065,18067,18070,18072,18073,18074,18076,18078,18079,18080,18083,18085,18086,18087,18089,18091,18092,18093,18095,18097,18098,18099,18101,18103,18104,18105,18107,18109,18110,18111,18120,18121,18140,18141,18142,18143,18147,18148,18149,18150,18153,18154,18155,18156,18159,18160,18161,18162,18165,18166,18167,18168,18172,18173,18174,18175,18178,18179,18180,18181,18185,18186,18190,18191,18195,18196,18200,18201,18205,18206,18207,18208,18217,18218,18219,18220,18223,18224,18225,18226,18229,18230,18231,18232,18235,18236,18237,18238,18240,18242,18534,18535,18650,18651,19717,19724,32768,32787,65536,65559,65560,65561,66694,67250,67251,67389,73285,73286,75741,75742,79621,79622,82397,82398,83577,83578,83642,83643,83740,83741,98304,98322,106776,106777,115220,115221,115510,115512,115585,115586,116120,116125,116218,116219,124584,124586,124642,124643,129352,129354,129991,129992,130085,130086,131072,131088,131229,131230,131258,131262,131325,131326,131352,131356,131693,131694,131741,131745,134190,134191,134807,134808,136535,136536,143040,143041,147609,147610,155204,155205,162971,162972,163840,163858,166754,166755,166759,166761,166778,166779,166814,166815,166824,166825,166968,166969,167019,167020,167732,167733,167742,167743,170082,170083,170108,170109,170144,170145,170253,170254,170299,170300,170778,170779,175008,175009,175024,175025,175079,175080,175147,175148,175150,175152,175216,175217,175287,175288,175355,175356,175358,175359,175361,175362,175421,175423,175425,175426,175490,175491,175561,175562,175629,175630,175632,175633,175635,175641,175643,175644,175646,175648,175650,175652,187663,187664,187665,187666,187858,187860,187867,187869,187870,187871,187878,187879,208059,208060,208199,208200,208202,208204,208239,208241,208325,208327,208328,208329,208589,208590,208768,208769,209403,209405,209424,209425,209434,209437,209441,209442,209447,209448,209469,209470,209617,209618,209631,209632,209998,209999,210018,210021,210024,210027,210129,210135,210429,210431,210516,210517,210528,210529,210542,210544,210546,210547,210552,210554,210766,210771,210804,210806,210889,210892,210903,210905,210907,210908,210909,210910,210928,210929,211195,211198,211222,211224,211242,211246,211247,211248,211250,211251,211253,211254,211256,211260,211262,211266,211272,211273,211405,211407,211408,211409,211410,211416,211423,211430,211553,211554,211806,211807,211830,211831,211929,211930,212153,212154,212155,212156,212158,212159,212167,212168,212170,212171,212173,212174,212314,212316,212319,212320,212322,212324,212331,212332,212557,212559,212585,212591,212829,212830,213035,213040,213080,213086,213133,213134,213139,213140,213156,213157,213158,213159,213540,213541,213557,213558,213568,213570,213575,213576,214429,214430,214441,214443,214849,214850,214852,214853,214858,214859,214863,214864,214872,214873,215231,215232,215258,215259,215490,215491,215526,215534,215608,215609,215611,215612,215617,215618,215623,215624,215628,215629,215634,215637,215639,215640,215653,215655,215656,215658,215659,215661,215662,215664,215665,215667,215668,215669,215671,215675,215680,215682,215683,215685,215686,215688,215689,215690,215692,215693,215695,215696,215698,215702,215791,215792,215812,215813,215815,215816,216082,216083,216172,216173,216178,216179,216310,216311,216316,216317,216419,216420,216440,216441,216445,216446,216681,216684,216687,216690,216797,216803,216976,216977,216979,216980,216982,216983,216985,216986,216988,216989,216990,216991,216993,216994,217557,217558,217569,217570,218517,218519,218529,218530,218538,218539,218816,218819,218824,218828,219286,219297,219702,219703,219741,219743,219744,219748,219755,219756,219758,219759,219771,219772,220043,220045,220605,220606,220608,220609,220611,220612,220614,220615,220617,220618,220620,220621,220623,220624,221356,221357,221359,221360,222180,222181,222190,222191,222193,222195,223288,223290,223291,223293,223294,223296,223297,223299,223300,223302,223303,223305,223306,223308,223309,223314,223315,223317,223318,223320,223321,223323,223324,223326,223327,223329,223330,223332,223333,223335,223336,223341,223377,223378,223822,223823,223869,223870,223873,223874,223877,223879,223880,223881,223883,223884,223886,223889,223890,223892,223894,223896,223897,223898,225829,225835,226730,226736,227373,227374,227493,227494,228050,228051,228054,228055,229376,229394,229560,229561,229975,229978,230946,230947,231026,231027,233643,233644,234683,234684,235518,238018,241259,241260,241798,241813,242114,242115,243486,243487,251646,251648,255081,255082,259025,259026,259028,259029,262144,262160,264076,264077,264753,264754,265667,265668,268539,268540,269802,269803,273888,276030,276036,281587,281820,281821,283391,283392,285330,285331,285964,285965,288264,288266,290785,290786,292312,292321,292827,292828,294912,294935,301084,301085,301143,301144,301225,301226,302047,304345,308046,308048,310238,310239,315694,315695,316946,316947,317348,317392,347739,347934,350079,350080,350414,350425,350439,350450,350487,350488,350500,350501,360448,360468,367210,367211,368456,368457,368582,368644,377943,377944,384105,384106,384572,384573,391049,391050,391656,391657,393216,393232,394753,394754,394756,394757,394763,394764,395090,395091,395749,395750,398189,398190,400005,400006,404936,404937,419216,419217,419219,419220,420801,420802,420806,420807,425984,426000,426139,426140,426146,426148,426154,426155,434298,434299,434305,434307,434314,434315,437419,437424,441791,441793,441878,441879,450074,450075,450290,450291,451846,451847,453321,453322,454434,454435,458752,458768,458925,458926,476535,476536,484215,484216,488728,488729,488731,488732,488739,488740,491520,491534,492034,492035,496950,496951,509469,509471,509553,509554,510257,510258,510280,510281,510903,510904,511110,511112,511313,511314,512831,512837,512838,512839,517550,517552,521211,521212,521247,521248,521605,521606,522033,522034,524288,524289,524554,524556,524576,524577,524608,529121,529128,529139,530740,539152,539269,539270") == "034d4b9fa3139b6e0030b36adcc212ca20eb0264" || 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"), "944,1,25,35,39,44,45,123,131,137,138,1812,1816,2293,2294,2299,2303,2307,2308,2314,2320,2321,2322,2566,2570,2575,2576,2578,2582,2584,2585,2608,2609,2645,2649,2699,2700,2703,2709,2710,2711,2714,2715,2720,2721,4412,4413,7596,7597,8039,8040,16904,16905,18002,18003,18004,18005,18007,18010,18011,18012,18014,18016,18017,18018,18020,18022,18023,18024,18026,18028,18029,18030,18032,18034,18035,18036,18038,18040,18045,18047,18050,18052,18055,18057,18065,18067,18070,18072,18073,18074,18076,18078,18079,18080,18083,18085,18086,18087,18089,18091,18092,18093,18095,18097,18098,18099,18101,18103,18104,18105,18107,18109,18110,18111,18120,18121,18140,18141,18142,18143,18147,18148,18149,18150,18153,18154,18155,18156,18159,18160,18161,18162,18165,18166,18167,18168,18172,18173,18174,18175,18178,18179,18180,18181,18185,18186,18190,18191,18195,18196,18200,18201,18205,18206,18207,18208,18217,18218,18219,18220,18223,18224,18225,18226,18229,18230,18231,18232,18235,18236,18237,18238,18240,18242,18534,18535,18650,18651,19717,19724,32768,32787,65536,65559,65560,65561,66694,67250,67251,67389,73285,73286,75741,75742,79621,79622,82397,82398,83577,83578,83642,83643,83740,83741,98304,98322,106776,106777,115220,115221,115510,115512,115585,115586,116120,116125,116218,116219,124584,124586,124642,124643,129352,129354,129991,129992,130085,130086,131072,131088,131229,131230,131258,131262,131325,131326,131352,131356,131693,131694,131741,131745,134190,134191,134807,134808,136535,136536,143040,143041,147609,147610,155204,155205,162971,162972,163840,163858,166754,166755,166759,166761,166778,166779,166814,166815,166824,166825,166968,166969,167019,167020,167732,167733,167742,167743,170082,170083,170108,170109,170144,170145,170253,170254,170299,170300,170778,170779,175008,175009,175024,175025,175079,175080,175147,175148,175150,175152,175216,175217,175287,175288,175355,175356,175358,175359,175361,175362,175421,175423,175425,175426,175490,175491,175561,175562,175629,175630,175632,175633,175635,175641,175643,175644,175646,175648,175650,175652,187663,187664,187665,187666,187858,187860,187867,187869,187870,187871,187878,187879,208059,208060,208199,208200,208202,208204,208239,208241,208325,208327,208328,208329,208589,208590,208768,208769,209403,209405,209424,209425,209434,209437,209441,209442,209447,209448,209469,209470,209617,209618,209631,209632,209998,209999,210018,210021,210024,210027,210129,210135,210429,210431,210516,210517,210528,210529,210542,210544,210546,210547,210552,210554,210766,210771,210804,210806,210889,210892,210903,210905,210907,210908,210909,210910,210928,210929,211195,211198,211222,211224,211242,211246,211247,211248,211250,211251,211253,211254,211256,211260,211262,211266,211272,211273,211405,211407,211408,211409,211410,211416,211423,211430,211553,211554,211806,211807,211830,211831,211929,211930,212153,212154,212155,212156,212158,212159,212167,212168,212170,212171,212173,212174,212314,212316,212319,212320,212322,212324,212331,212332,212557,212559,212585,212591,212829,212830,213035,213040,213080,213086,213133,213134,213139,213140,213156,213157,213158,213159,213540,213541,213557,213558,213568,213570,213575,213576,214429,214430,214441,214443,214849,214850,214852,214853,214858,214859,214863,214864,214872,214873,215231,215232,215258,215259,215490,215491,215526,215534,215608,215609,215611,215612,215617,215618,215623,215624,215628,215629,215634,215637,215639,215640,215653,215655,215656,215658,215659,215661,215662,215664,215665,215667,215668,215669,215671,215675,215680,215682,215683,215685,215686,215688,215689,215690,215692,215693,215695,215696,215698,215702,215791,215792,215812,215813,215815,215816,216082,216083,216172,216173,216178,216179,216310,216311,216316,216317,216419,216420,216440,216441,216445,216446,216681,216684,216687,216690,216797,216803,216976,216977,216979,216980,216982,216983,216985,216986,216988,216989,216990,216991,216993,216994,217557,217558,217569,217570,218517,218519,218529,218530,218538,218539,218816,218819,218824,218828,219286,219297,219702,219703,219741,219743,219744,219748,219755,219756,219758,219759,219771,219772,220043,220045,220605,220606,220608,220609,220611,220612,220614,220615,220617,220618,220620,220621,220623,220624,221356,221357,221359,221360,222180,222181,222190,222191,222193,222195,223288,223290,223291,223293,223294,223296,223297,223299,223300,223302,223303,223305,223306,223308,223309,223314,223315,223317,223318,223320,223321,223323,223324,223326,223327,223329,223330,223332,223333,223335,223336,223341,223377,223378,223822,223823,223869,223870,223873,223874,223877,223879,223880,223881,223883,223884,223886,223889,223890,223892,223894,223896,223897,223898,225829,225835,226730,226736,227373,227374,227493,227494,228050,228051,228054,228055,229376,229394,229560,229561,229975,229978,230946,230947,231026,231027,233643,233644,234683,234684,235518,238018,241259,241260,241798,241813,242114,242115,243486,243487,251646,251648,255081,255082,259025,259026,259028,259029,262144,262160,264076,264077,264753,264754,265667,265668,268539,268540,269802,269803,273888,276030,276036,281587,281820,281821,283391,283392,285330,285331,285964,285965,288264,288266,290785,290786,292312,292321,292827,292828,294912,294935,301084,301085,301143,301144,301225,301226,302047,304345,308046,308048,310238,310239,315694,315695,316946,316947,317348,317392,347739,347934,350079,350080,350414,350425,350439,350450,350487,350488,350500,350501,360448,360468,367210,367211,368456,368457,368582,368644,377943,377944,384105,384106,384572,384573,391049,391050,391656,391657,393216,393232,394753,394754,394756,394757,394763,394764,395090,395091,395749,395750,398189,398190,400005,400006,404936,404937,419216,419217,419219,419220,420801,420802,420806,420807,425984,426000,426139,426140,426146,426148,426154,426155,434298,434299,434305,434307,434314,434315,437419,437424,441791,441793,441878,441879,450074,450075,450290,450291,451846,451847,453321,453322,454434,454435,458752,458768,458925,458926,476535,476536,484215,484216,488728,488729,488731,488732,488739,488740,491520,491534,492034,492035,496950,496951,509469,509471,509553,509554,510257,510258,510280,510281,510903,510904,511110,511112,511313,511314,512831,512837,512838,512839,517550,517552,521211,521212,521247,521248,521605,521606,522033,522034,524288,524289,524554,524556,524576,524577,524608,529121,529128,529139,530740,539152,539269,539270") && 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"), "134,1,21,26,27,29,30,146,150,154,155,167,173,174,175,3238,3240,16053,16054,16121,16122,18187,18189,32768,32782,33691,33692,33740,33741,34280,34281,36140,36141,38669,38670,38793,38931,39455,39456,43297,43298,47635,47636,47861,47863,47873,47875,47921,47923,47933,47935,47944,47945,49763,49764,49767,49769,49932,49933,49934,49935,49937,49938,49953,49954,49957,49959,49960,49962,49980,49981,49987,49988,50026,50030,50034,50038,50039,50051,50466,50467,50838,50839,52324,52325,59417,59420,61369,61370,63226,63227,65307,65308,65536,65547,65548,65591,67287,67289,69006,69007,69022,69023,70080,70081,77908,77910,78960,78962,79460,79461,81375,81379,81443,81444,81727,81728,83364,83366,84856,84857,85050,85053,86778,86782,86872,86873,86921,86922,87559,87563,87842,89237,89270,89271") == "ec1d139c96b52213dbca1b12d5a348b82c3eae66" || 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"), "134,1,21,26,27,29,30,146,150,154,155,167,173,174,175,3238,3240,16053,16054,16121,16122,18187,18189,32768,32782,33691,33692,33740,33741,34280,34281,36140,36141,38669,38670,38793,38931,39455,39456,43297,43298,47635,47636,47861,47863,47873,47875,47921,47923,47933,47935,47944,47945,49763,49764,49767,49769,49932,49933,49934,49935,49937,49938,49953,49954,49957,49959,49960,49962,49980,49981,49987,49988,50026,50030,50034,50038,50039,50051,50466,50467,50838,50839,52324,52325,59417,59420,61369,61370,63226,63227,65307,65308,65536,65547,65548,65591,67287,67289,69006,69007,69022,69023,70080,70081,77908,77910,78960,78962,79460,79461,81375,81379,81443,81444,81727,81728,83364,83366,84856,84857,85050,85053,86778,86782,86872,86873,86921,86922,87559,87563,87842,89237,89270,89271") && 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"), "12,1,6,2019,2025,2026,2027,2035,2036,32231,32745,32767,32768") == "84675dada2dd465d11c3c298450dcab921e9f9a8" || 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"), "12,1,6,2019,2025,2026,2027,2035,2036,32231,32745,32767,32768") && 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"), "314,1,29,36,40,44,45,51,57,58,59,73,79,80,81,139,143,148,149,155,161,162,163,357,361,365,366,369,373,378,379,382,383,389,395,396,397,419,425,426,427,1138,1142,1160,1161,1165,1171,1172,1173,1175,1176,1187,1193,1194,1195,1205,1206,1211,1215,1219,1220,1224,1230,1234,1235,1242,1248,1249,1250,1262,1268,1269,1270,1272,1279,1285,1292,1297,1304,1334,1341,1360,1367,1385,1390,1407,1414,1430,1431,1526,1528,1531,1532,1544,1545,1546,1547,1548,1549,1557,1558,1581,1582,1627,1632,1635,1638,1641,1644,1647,1649,1653,1654,1658,1661,1666,1667,1670,1672,2146,2150,2155,2157,2162,2164,2168,2172,2173,2177,2178,2182,2183,2187,2188,2192,2193,2197,2198,2200,2207,2211,2212,2216,2217,2221,2222,2226,2227,2231,2232,2236,2237,2241,2242,2244,2245,2249,2250,2254,2255,2259,2260,2264,2265,2269,2270,2274,2275,2279,2280,2282,2286,2290,2291,2293,2294,2296,2297,2301,2302,2306,2307,2309,2310,2314,2315,2319,2320,2324,2325,2329,2330,2332,2333,2337,2338,2340,2344,2353,2358,2388,2391,2499,4930,4931,5990,5991,8050,8051,8109,8110,8650,8651,8701,8702,9011,9012,14193,14194,14266,14267,14275,14276,14411,14412,14416,14417,14470,14471,14481,14482,14515,14516,14535,14536,14588,14589,14734,14735,14810,14811,14957,14958,19708,19710,19849,19850,19875,19876,19972,19973,20024,20025,20036,20037,20087,20088,20163,20164,20227,20228,20490,20491,20995,20996,24870,24871,24927,24928,25352,25353,32768,32801,33210,33211,34797,34798,39880,39881,40759,40760,40811,40812,41130,41131,43191,43192,48854,48858,49633,49635,49694,49696,51280,51282,65536,65563,67666,67667,67669,67670,68612,68614,73886,73888,74816,74818,74842,98325,98326,104168,104485,106145,106180,106181") == "6d831898011626c703bfea0f5ee90dbbd6d07d67" || 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"), "314,1,29,36,40,44,45,51,57,58,59,73,79,80,81,139,143,148,149,155,161,162,163,357,361,365,366,369,373,378,379,382,383,389,395,396,397,419,425,426,427,1138,1142,1160,1161,1165,1171,1172,1173,1175,1176,1187,1193,1194,1195,1205,1206,1211,1215,1219,1220,1224,1230,1234,1235,1242,1248,1249,1250,1262,1268,1269,1270,1272,1279,1285,1292,1297,1304,1334,1341,1360,1367,1385,1390,1407,1414,1430,1431,1526,1528,1531,1532,1544,1545,1546,1547,1548,1549,1557,1558,1581,1582,1627,1632,1635,1638,1641,1644,1647,1649,1653,1654,1658,1661,1666,1667,1670,1672,2146,2150,2155,2157,2162,2164,2168,2172,2173,2177,2178,2182,2183,2187,2188,2192,2193,2197,2198,2200,2207,2211,2212,2216,2217,2221,2222,2226,2227,2231,2232,2236,2237,2241,2242,2244,2245,2249,2250,2254,2255,2259,2260,2264,2265,2269,2270,2274,2275,2279,2280,2282,2286,2290,2291,2293,2294,2296,2297,2301,2302,2306,2307,2309,2310,2314,2315,2319,2320,2324,2325,2329,2330,2332,2333,2337,2338,2340,2344,2353,2358,2388,2391,2499,4930,4931,5990,5991,8050,8051,8109,8110,8650,8651,8701,8702,9011,9012,14193,14194,14266,14267,14275,14276,14411,14412,14416,14417,14470,14471,14481,14482,14515,14516,14535,14536,14588,14589,14734,14735,14810,14811,14957,14958,19708,19710,19849,19850,19875,19876,19972,19973,20024,20025,20036,20037,20087,20088,20163,20164,20227,20228,20490,20491,20995,20996,24870,24871,24927,24928,25352,25353,32768,32801,33210,33211,34797,34798,39880,39881,40759,40760,40811,40812,41130,41131,43191,43192,48854,48858,49633,49635,49694,49696,51280,51282,65536,65563,67666,67667,67669,67670,68612,68614,73886,73888,74816,74818,74842,98325,98326,104168,104485,106145,106180,106181") && 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:1fbc8671b4bbe0e15394473deeebbfa603e778ac"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:092bc36d29857eb3c1bc6deac02a3c2acb659379"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:092bc36d29857eb3c1bc6deac02a3c2acb659379")));

# ---- 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");

# ---- update tasks: exaid part 2----


package_extract_file("exaid.img", "/dev/block/bootdevice/by-name/exaid");
    
set_progress(1.000000);
