getprop("ro.product.device") == "lime" || abort("E3004: This package is for \"lime\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/lime/lime:10/QKQ1.200830.002/V12.0.3.0.QJQINXM:user/release-keys");
ui_print("Target: Redmi/lime/lime:10/QKQ1.200830.002/V12.0.4.0.QJQINXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/lime/lime:10/QKQ1.200830.002/V12.0.3.0.QJQINXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/lime/lime:10/QKQ1.200830.002/V12.0.4.0.QJQINXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/lime/lime:10/QKQ1.200830.002/V12.0.3.0.QJQINXM:user/release-keys or Redmi/lime/lime:10/QKQ1.200830.002/V12.0.4.0.QJQINXM: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:100663296:5d10e18fc04a98a15584643d0234cc2f458740f2",
                      "EMMC:/dev/block/bootdevice/by-name/boot:100663296:071a37bf7296175adda9604fde22d8eb06aa8702") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:100663296:5d10e18fc04a98a15584643d0234cc2f458740f2\" or \"EMMC:/dev/block/bootdevice/by-name/boot:100663296:071a37bf7296175adda9604fde22d8eb06aa8702\" has unexpected contents.");
apply_patch_space(100663296) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1(map_partition("system"), "1606,1,195,223,232,252,253,513,517,529,530,549,550,1867,1868,2298,2299,26205,26206,27573,27574,32768,32770,32930,32949,32982,32983,33197,33199,33362,33366,33374,33375,33383,33387,33392,33393,33420,33424,33428,33429,38306,38307,38319,38325,38326,38327,39627,39633,39665,39666,39672,39678,39679,39680,39685,39691,39692,39693,39813,39819,39825,39826,41677,41678,41764,41765,41865,41866,41933,41934,42318,42322,42361,42362,43326,43327,43977,43979,45910,45912,45920,45921,45943,45944,45948,45949,46382,46383,46414,46420,46421,46422,46521,46527,46528,46529,49321,49325,49353,49354,49368,49374,49375,49376,49378,49379,52627,52631,52676,52677,53047,53051,53059,53060,53147,53153,53158,53159,53805,53806,53908,53923,53928,53931,53932,53968,54254,54255,54271,54272,54403,54404,54406,54407,54409,54410,61701,61705,61730,61731,61860,61864,61870,61871,62349,62353,62369,62370,65536,65555,67029,67033,67127,67128,67133,67139,67140,67141,67179,67185,67186,67187,67874,67878,67900,67901,68149,68150,68183,68189,68190,68191,68667,68671,68687,68688,83078,83082,83175,83176,83647,83653,83654,83655,85417,85421,85464,85465,85469,85475,85476,85477,85499,85503,85527,85528,87220,87224,87248,87249,88096,88100,88123,88124,88207,88211,88216,88217,91524,91526,95312,95313,96882,96886,98304,98306,98466,98485,99229,99230,99562,99564,99565,99566,99598,99602,99624,99625,100075,100079,100482,100483,101166,101170,101185,101186,103571,103575,103622,103623,104034,104038,104051,104052,106118,106119,111654,111658,111741,111742,113162,113166,113193,113194,115226,115227,118133,118134,120169,120170,120702,120706,120828,120829,131072,131091,133437,133441,133464,133465,135858,135862,135912,135913,137668,137672,137706,137707,137745,137751,137755,137756,141096,141097,141642,141646,141684,141685,144338,144339,145543,145547,145570,145571,145982,145988,146003,146004,147117,147121,147147,147148,148197,148201,148222,148223,148233,148237,148244,148245,153022,153023,155876,155880,155963,155964,158529,158533,158573,158574,158625,158629,158633,158634,158637,158643,158647,158648,162521,162525,162592,162593,162677,162681,162686,162687,162689,162695,162696,162697,162741,162747,162748,162749,163840,163842,164002,164021,164742,164748,164790,164791,165180,165186,165196,165197,165393,165397,165401,173598,173645,173654,173675,173676,173682,173683,173691,173692,173696,173725,173762,173768,173769,173770,176845,176849,176887,176888,176958,176962,176966,176967,177070,177074,177079,177080,178296,178300,178326,178327,183886,183962,183984,183985,185920,185924,186057,186058,186066,186072,186073,186074,186700,186704,186719,186720,188208,188212,188227,188228,190555,190559,190585,190586,191476,191480,191506,191507,191511,191517,191518,191519,191541,191547,191548,191549,191553,191557,191565,191566,191581,191587,191588,191589,192572,192576,194323,194324,194348,194354,194355,194356,196608,196627,197439,197443,197491,197492,197795,197799,197811,197812,198170,198176,198185,198186,199670,199674,199702,199703,199712,199718,199719,199720,200697,200701,201635,201636,204248,204249,205410,205411,206612,206613,207070,207074,207125,207128,207152,207153,207155,207156,207157,207158,207159,207160,207190,207191,209669,209673,209688,209689,210211,210215,210222,210223,211224,211225,213621,213622,214213,214214,214442,214443,215382,215391,215725,215726,216160,216161,217943,217944,220659,220664,220665,220666,220667,220668,220669,220670,220671,220672,220673,220674,220675,220676,220677,220678,220679,220680,220681,220682,220683,220684,220685,220686,220687,220688,220689,220690,220691,220692,220693,220694,220695,220696,220697,220698,220699,220700,220701,220702,220703,220704,220705,220706,220707,220708,220709,220710,220711,220712,220713,220714,220715,220716,220717,220718,220719,220720,220721,220722,220723,220724,220725,220726,220727,220728,220729,220730,220731,220732,220733,220734,220735,220736,220737,220738,220739,220740,220741,220742,220743,220744,220745,220746,220747,220748,220749,220750,220751,220752,220753,220754,220755,220756,220757,220758,220759,220760,220761,220762,220763,220764,220765,220766,220767,220768,220769,220770,220771,220772,220773,220774,220775,220776,220777,220778,220779,220780,220781,220782,220783,220784,220785,220786,220787,220788,220789,220790,220791,220792,220793,220794,220795,220796,220797,220798,220799,220800,220801,220802,220803,220804,220805,220806,220807,220808,220809,220810,220811,220812,220813,220814,220815,220816,220817,220818,220819,220820,220821,220822,220823,220824,220825,220826,220827,220828,220829,220830,220831,220832,220833,220834,220835,220836,220837,220838,220839,220840,220841,220842,220843,220844,220845,220846,220847,220848,220849,220850,220851,220852,220853,220854,220855,220856,220857,220858,220859,220860,220861,220862,220863,220864,220865,220866,220867,220868,220869,220870,220871,220872,220873,220874,220875,220876,220877,220878,220879,220880,220881,220882,220883,220884,220885,220886,220887,220888,220889,220890,220891,220892,220893,220894,220895,220896,220897,220898,220899,220900,220901,220902,220903,220904,220905,220906,220907,220908,220909,220910,220911,220912,220913,220914,220915,220916,220917,220918,220919,220920,220921,220922,220923,220924,220925,220926,220927,220928,220929,220930,220931,220932,220933,220934,220935,220936,220937,220938,220939,220940,220941,220942,220943,220944,220945,220946,220947,220948,220949,220950,220951,220952,220953,220954,220955,220956,220957,220958,220959,220960,220961,220962,220963,220964,220965,220966,220967,220968,220969,220970,220971,220972,220973,220974,220975,220976,220977,220978,220979,220980,220981,220982,220983,220984,220985,220986,220987,220988,220989,220990,220991,220992,220993,220994,220995,220996,220997,220998,220999,221000,221001,221002,221003,221004,221005,221006,221007,221008,221009,221010,221011,221012,221013,221014,221015,221016,221017,221018,221019,221020,221021,221022,221023,221024,221025,221026,221027,221028,221029,221030,221031,221032,221033,221034,221035,221036,221037,221038,221039,221040,221041,221042,221043,221044,221045,221046,221047,221048,221049,221050,221051,221052,221053,221054,221055,221056,221057,221058,221059,221060,221061,221062,221063,221064,221065,221066,221067,221068,221069,221070,221071,221072,221073,221074,221075,221076,221077,221078,221079,221080,221081,221082,221083,221084,221085,221086,221087,221088,221089,221090,221091,221092,221093,221094,221095,221096,221097,221098,221099,221100,221101,221102,221103,221104,221105,221106,221107,221109,221115,221116,221413,221414,221426,221427,221437,221440,221441,221442,221443,221444,221446,221447,221480,221481,221486,221487,221576,221579,221581,221582,222689,222690,222910,222911,222934,222935,223001,223002,223005,223010,223011,223012,223013,223014,223015,223016,223946,223947,223954,223955,224508,224512,224513,224514,224515,224516,224517,224518,224519,224520,224521,224522,224523,224524,224526,224527,224528,224531,225298,225300,225301,225302,225387,225388,229376,229378,229538,229568,249593,262071,262144,262169,265304,265820,268573,268574,272304,287245,291033,291719,294736,294746,294912,294914,295074,295096,296238,296239,300714,300715,300758,300759,300760,300761,300769,300770,300771,300772,300780,300781,300782,300783,300791,300792,300801,300803,300804,300805,300812,300814,300823,300824,300834,300835,301026,301027,301182,301183,301684,301685,301687,301688,301689,301690,301691,301692,301693,301694,301695,301696,301697,301698,301699,301700,301702,301703,301704,301705,301706,301707,301708,301709,301710,301711,301712,301713,301714,301715,301716,301717,301718,301719,301720,301721,301723,301724,301725,301726,301727,301728,301729,301730,301731,301732,301733,301734,302096,302097,302098,302099,302100,302101,302102,302103,302104,302105,302106,302107,302108,302109,302110,302111,302112,302113,302114,302115,302138,302139,302140,302141,302142,302143,302144,302145,302146,302147,302148,302149,302150,302151,302152,302153,302154,302155,302156,302157,302158,302159,302160,302161,302162,302163,302164,302165,302166,302167,302168,302169,302170,302171,302172,302173,302174,302175,302176,302177,302178,302179,302180,302181,302182,302183,302184,302185,302186,302187,302188,302189,302190,302191,302192,302193,302194,302195,302196,302197,302198,302199,302200,302201,302202,302203,302204,302205,302257,302258,302259,302260,302261,302262,302263,302264,302265,302266,302267,302268,302269,302270,302271,302272,302273,302274,302275,302276,302277,302278,302279,302280,302281,302282,302283,302284,302285,302286,302287,302288,302289,302290,302291,302292,302293,302294,302295,302296,302297,302298,302299,302300,302301,302302,302303,302304,302305,302306,302307,302308,302309,302310,302311,302312,302313,302314,302315,302316,302514,302515,302516,302517,302527,302528,302529,302530,302540,302541,302552,302553,302564,302565,302576,302577,302589,302590,302610,302611,302667,302668,302669,302670,302671,302672,302673,302674,302675,302676,302677,302678,302679,302680,302681,302682,302683,302684,302685,302686,302687,302688,302816,302818,302830,302831,302841,302842,302843,302844,302854,302855,302856,302857,302867,302868,302869,302870,302880,302881,302892,302893,302916,302917,302928,302929,302938,302939,302942,302943,302953,302954,302955,302956,302966,302967,302968,302969,302992,302993,303004,303005,303016,303017,303028,303029,303040,303041,303052,303053,303131,303132,303192,303193,303194,303195,303205,303206,303207,303208,303218,303219,303230,303231,303242,303243,303254,303255,303266,303268,303332,303334,303721,303722,303723,303724,303725,303726,303728,303729,303730,303731,303732,303733,303734,303735,303736,303737,303738,303739,303740,303741,303742,303743,303744,303745,303746,303747,303748,303749,303750,303751,303752,303753,303791,303792,303955,303956,304122,304123,305020,312667,313273,313775,313847,314127,314156,314160,314164,314168,314169,314173,314174,314178,314179,314183,314184,314186,314564,314566,314671,314675,314676,314680,314681,314685,314686,314690,314691,314695,314696,314700,314701,314705,314706,314710,314711,314715,314716,314718,314732,314736,314737,314739,314748,314752,314753,314757,314758,314763,314768,314772,314773,314777,314778,314782,314783,314787,314788,314790,314858,314860,314865,314869,314870,314874,314875,314879,314880,314884,314885,314889,314890,314892,314896,314898,314907,314911,314912,314916,314917,314921,314922,314924,315004,315008,315009,315011,315015,315017,315018,315020,315021,315025,315026,315030,315031,315035,315036,315038,315044,315048,315049,315053,315054,315058,315059,315063,315064,315068,315069,315073,315074,315076,315080,315082,315083,315087,315088,315090,315091,315095,315096,315100,315101,315105,315106,315108,315112,315114,315117,315118,315120,315122,315126,315148,315582,315584,315708,315745,315748,315754,315763,315792,315813,315819,315897,315899,315902,315929,315932,315946,316036,316414,324141,324184,324187,324208,324211,324213,326111,326121,327680,327701,332617,332618,336997,336998,337712,337713,338146,338156,338546,338547,339767,655377,655379,656269,658301,668733,668874,668875") == "fcb8b1b63c2b4ef53d824adeca9371d481bb011c" || 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"), "1606,1,195,223,232,252,253,513,517,529,530,549,550,1867,1868,2298,2299,26205,26206,27573,27574,32768,32770,32930,32949,32982,32983,33197,33199,33362,33366,33374,33375,33383,33387,33392,33393,33420,33424,33428,33429,38306,38307,38319,38325,38326,38327,39627,39633,39665,39666,39672,39678,39679,39680,39685,39691,39692,39693,39813,39819,39825,39826,41677,41678,41764,41765,41865,41866,41933,41934,42318,42322,42361,42362,43326,43327,43977,43979,45910,45912,45920,45921,45943,45944,45948,45949,46382,46383,46414,46420,46421,46422,46521,46527,46528,46529,49321,49325,49353,49354,49368,49374,49375,49376,49378,49379,52627,52631,52676,52677,53047,53051,53059,53060,53147,53153,53158,53159,53805,53806,53908,53923,53928,53931,53932,53968,54254,54255,54271,54272,54403,54404,54406,54407,54409,54410,61701,61705,61730,61731,61860,61864,61870,61871,62349,62353,62369,62370,65536,65555,67029,67033,67127,67128,67133,67139,67140,67141,67179,67185,67186,67187,67874,67878,67900,67901,68149,68150,68183,68189,68190,68191,68667,68671,68687,68688,83078,83082,83175,83176,83647,83653,83654,83655,85417,85421,85464,85465,85469,85475,85476,85477,85499,85503,85527,85528,87220,87224,87248,87249,88096,88100,88123,88124,88207,88211,88216,88217,91524,91526,95312,95313,96882,96886,98304,98306,98466,98485,99229,99230,99562,99564,99565,99566,99598,99602,99624,99625,100075,100079,100482,100483,101166,101170,101185,101186,103571,103575,103622,103623,104034,104038,104051,104052,106118,106119,111654,111658,111741,111742,113162,113166,113193,113194,115226,115227,118133,118134,120169,120170,120702,120706,120828,120829,131072,131091,133437,133441,133464,133465,135858,135862,135912,135913,137668,137672,137706,137707,137745,137751,137755,137756,141096,141097,141642,141646,141684,141685,144338,144339,145543,145547,145570,145571,145982,145988,146003,146004,147117,147121,147147,147148,148197,148201,148222,148223,148233,148237,148244,148245,153022,153023,155876,155880,155963,155964,158529,158533,158573,158574,158625,158629,158633,158634,158637,158643,158647,158648,162521,162525,162592,162593,162677,162681,162686,162687,162689,162695,162696,162697,162741,162747,162748,162749,163840,163842,164002,164021,164742,164748,164790,164791,165180,165186,165196,165197,165393,165397,165401,173598,173645,173654,173675,173676,173682,173683,173691,173692,173696,173725,173762,173768,173769,173770,176845,176849,176887,176888,176958,176962,176966,176967,177070,177074,177079,177080,178296,178300,178326,178327,183886,183962,183984,183985,185920,185924,186057,186058,186066,186072,186073,186074,186700,186704,186719,186720,188208,188212,188227,188228,190555,190559,190585,190586,191476,191480,191506,191507,191511,191517,191518,191519,191541,191547,191548,191549,191553,191557,191565,191566,191581,191587,191588,191589,192572,192576,194323,194324,194348,194354,194355,194356,196608,196627,197439,197443,197491,197492,197795,197799,197811,197812,198170,198176,198185,198186,199670,199674,199702,199703,199712,199718,199719,199720,200697,200701,201635,201636,204248,204249,205410,205411,206612,206613,207070,207074,207125,207128,207152,207153,207155,207156,207157,207158,207159,207160,207190,207191,209669,209673,209688,209689,210211,210215,210222,210223,211224,211225,213621,213622,214213,214214,214442,214443,215382,215391,215725,215726,216160,216161,217943,217944,220659,220664,220665,220666,220667,220668,220669,220670,220671,220672,220673,220674,220675,220676,220677,220678,220679,220680,220681,220682,220683,220684,220685,220686,220687,220688,220689,220690,220691,220692,220693,220694,220695,220696,220697,220698,220699,220700,220701,220702,220703,220704,220705,220706,220707,220708,220709,220710,220711,220712,220713,220714,220715,220716,220717,220718,220719,220720,220721,220722,220723,220724,220725,220726,220727,220728,220729,220730,220731,220732,220733,220734,220735,220736,220737,220738,220739,220740,220741,220742,220743,220744,220745,220746,220747,220748,220749,220750,220751,220752,220753,220754,220755,220756,220757,220758,220759,220760,220761,220762,220763,220764,220765,220766,220767,220768,220769,220770,220771,220772,220773,220774,220775,220776,220777,220778,220779,220780,220781,220782,220783,220784,220785,220786,220787,220788,220789,220790,220791,220792,220793,220794,220795,220796,220797,220798,220799,220800,220801,220802,220803,220804,220805,220806,220807,220808,220809,220810,220811,220812,220813,220814,220815,220816,220817,220818,220819,220820,220821,220822,220823,220824,220825,220826,220827,220828,220829,220830,220831,220832,220833,220834,220835,220836,220837,220838,220839,220840,220841,220842,220843,220844,220845,220846,220847,220848,220849,220850,220851,220852,220853,220854,220855,220856,220857,220858,220859,220860,220861,220862,220863,220864,220865,220866,220867,220868,220869,220870,220871,220872,220873,220874,220875,220876,220877,220878,220879,220880,220881,220882,220883,220884,220885,220886,220887,220888,220889,220890,220891,220892,220893,220894,220895,220896,220897,220898,220899,220900,220901,220902,220903,220904,220905,220906,220907,220908,220909,220910,220911,220912,220913,220914,220915,220916,220917,220918,220919,220920,220921,220922,220923,220924,220925,220926,220927,220928,220929,220930,220931,220932,220933,220934,220935,220936,220937,220938,220939,220940,220941,220942,220943,220944,220945,220946,220947,220948,220949,220950,220951,220952,220953,220954,220955,220956,220957,220958,220959,220960,220961,220962,220963,220964,220965,220966,220967,220968,220969,220970,220971,220972,220973,220974,220975,220976,220977,220978,220979,220980,220981,220982,220983,220984,220985,220986,220987,220988,220989,220990,220991,220992,220993,220994,220995,220996,220997,220998,220999,221000,221001,221002,221003,221004,221005,221006,221007,221008,221009,221010,221011,221012,221013,221014,221015,221016,221017,221018,221019,221020,221021,221022,221023,221024,221025,221026,221027,221028,221029,221030,221031,221032,221033,221034,221035,221036,221037,221038,221039,221040,221041,221042,221043,221044,221045,221046,221047,221048,221049,221050,221051,221052,221053,221054,221055,221056,221057,221058,221059,221060,221061,221062,221063,221064,221065,221066,221067,221068,221069,221070,221071,221072,221073,221074,221075,221076,221077,221078,221079,221080,221081,221082,221083,221084,221085,221086,221087,221088,221089,221090,221091,221092,221093,221094,221095,221096,221097,221098,221099,221100,221101,221102,221103,221104,221105,221106,221107,221109,221115,221116,221413,221414,221426,221427,221437,221440,221441,221442,221443,221444,221446,221447,221480,221481,221486,221487,221576,221579,221581,221582,222689,222690,222910,222911,222934,222935,223001,223002,223005,223010,223011,223012,223013,223014,223015,223016,223946,223947,223954,223955,224508,224512,224513,224514,224515,224516,224517,224518,224519,224520,224521,224522,224523,224524,224526,224527,224528,224531,225298,225300,225301,225302,225387,225388,229376,229378,229538,229568,249593,262071,262144,262169,265304,265820,268573,268574,272304,287245,291033,291719,294736,294746,294912,294914,295074,295096,296238,296239,300714,300715,300758,300759,300760,300761,300769,300770,300771,300772,300780,300781,300782,300783,300791,300792,300801,300803,300804,300805,300812,300814,300823,300824,300834,300835,301026,301027,301182,301183,301684,301685,301687,301688,301689,301690,301691,301692,301693,301694,301695,301696,301697,301698,301699,301700,301702,301703,301704,301705,301706,301707,301708,301709,301710,301711,301712,301713,301714,301715,301716,301717,301718,301719,301720,301721,301723,301724,301725,301726,301727,301728,301729,301730,301731,301732,301733,301734,302096,302097,302098,302099,302100,302101,302102,302103,302104,302105,302106,302107,302108,302109,302110,302111,302112,302113,302114,302115,302138,302139,302140,302141,302142,302143,302144,302145,302146,302147,302148,302149,302150,302151,302152,302153,302154,302155,302156,302157,302158,302159,302160,302161,302162,302163,302164,302165,302166,302167,302168,302169,302170,302171,302172,302173,302174,302175,302176,302177,302178,302179,302180,302181,302182,302183,302184,302185,302186,302187,302188,302189,302190,302191,302192,302193,302194,302195,302196,302197,302198,302199,302200,302201,302202,302203,302204,302205,302257,302258,302259,302260,302261,302262,302263,302264,302265,302266,302267,302268,302269,302270,302271,302272,302273,302274,302275,302276,302277,302278,302279,302280,302281,302282,302283,302284,302285,302286,302287,302288,302289,302290,302291,302292,302293,302294,302295,302296,302297,302298,302299,302300,302301,302302,302303,302304,302305,302306,302307,302308,302309,302310,302311,302312,302313,302314,302315,302316,302514,302515,302516,302517,302527,302528,302529,302530,302540,302541,302552,302553,302564,302565,302576,302577,302589,302590,302610,302611,302667,302668,302669,302670,302671,302672,302673,302674,302675,302676,302677,302678,302679,302680,302681,302682,302683,302684,302685,302686,302687,302688,302816,302818,302830,302831,302841,302842,302843,302844,302854,302855,302856,302857,302867,302868,302869,302870,302880,302881,302892,302893,302916,302917,302928,302929,302938,302939,302942,302943,302953,302954,302955,302956,302966,302967,302968,302969,302992,302993,303004,303005,303016,303017,303028,303029,303040,303041,303052,303053,303131,303132,303192,303193,303194,303195,303205,303206,303207,303208,303218,303219,303230,303231,303242,303243,303254,303255,303266,303268,303332,303334,303721,303722,303723,303724,303725,303726,303728,303729,303730,303731,303732,303733,303734,303735,303736,303737,303738,303739,303740,303741,303742,303743,303744,303745,303746,303747,303748,303749,303750,303751,303752,303753,303791,303792,303955,303956,304122,304123,305020,312667,313273,313775,313847,314127,314156,314160,314164,314168,314169,314173,314174,314178,314179,314183,314184,314186,314564,314566,314671,314675,314676,314680,314681,314685,314686,314690,314691,314695,314696,314700,314701,314705,314706,314710,314711,314715,314716,314718,314732,314736,314737,314739,314748,314752,314753,314757,314758,314763,314768,314772,314773,314777,314778,314782,314783,314787,314788,314790,314858,314860,314865,314869,314870,314874,314875,314879,314880,314884,314885,314889,314890,314892,314896,314898,314907,314911,314912,314916,314917,314921,314922,314924,315004,315008,315009,315011,315015,315017,315018,315020,315021,315025,315026,315030,315031,315035,315036,315038,315044,315048,315049,315053,315054,315058,315059,315063,315064,315068,315069,315073,315074,315076,315080,315082,315083,315087,315088,315090,315091,315095,315096,315100,315101,315105,315106,315108,315112,315114,315117,315118,315120,315122,315126,315148,315582,315584,315708,315745,315748,315754,315763,315792,315813,315819,315897,315899,315902,315929,315932,315946,316036,316414,324141,324184,324187,324208,324211,324213,326111,326121,327680,327701,332617,332618,336997,336998,337712,337713,338146,338156,338546,338547,339767,655377,655379,656269,658301,668733,668874,668875") && 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"), "324,1,105,115,119,124,125,207,211,216,217,1891,1895,2372,2373,2636,2640,2644,2645,2647,2651,2653,2664,2687,2688,2724,2728,2778,2779,2940,2941,2953,2957,2961,2962,2965,2971,2972,2973,2985,2989,2993,3000,3009,3010,4798,5138,5224,5225,8712,8713,8833,8885,9480,9481,9485,9486,9490,9491,9495,9496,9501,9502,9506,9507,9508,9509,9512,9513,9514,9515,9518,9519,9520,9521,9523,9525,9526,9527,9530,9531,9532,9533,9536,9537,9538,9539,9542,9543,9549,9550,9554,9555,9558,9560,9563,9565,9569,9570,9574,9575,9576,9577,9580,9581,9582,9583,9586,9587,9588,9589,9592,9593,9594,9595,9598,9599,9600,9601,9604,9605,9610,9611,9612,9613,9617,9618,10030,10031,11120,11128,25297,25298,25397,25399,32768,32770,32844,32886,43022,43023,43313,43314,43318,43319,44009,44010,44012,44014,44078,44079,44149,44150,44217,44218,44220,44221,44223,44224,44283,44285,44287,44288,44352,44353,44423,44424,44491,44492,44494,44495,44497,44500,44501,44503,44505,44506,44512,44513,44515,44516,44519,44520,44530,44533,44535,44536,44538,44540,44543,44544,44553,44554,44556,44557,44559,44570,44630,44631,44633,44634,44644,44645,44711,44712,44789,44790,44800,44801,44867,44868,44944,44945,45024,45025,45101,45102,45178,45179,45255,45256,45266,45267,45270,45271,45334,45335,45410,45411,45421,45422,45488,45489,45565,45566,45638,45639,45641,45642,45654,45658,45660,45661,45663,45665,45668,45669,45673,45674,45676,45677,45680,45681,46949,46951,46956,46958,46996,46998,47178,47179,47201,47202,47217,47218,47584,47585,47591,47592,47611,47612,47681,98306,98380,163842,163916,229378,229452,282866,284045,284046,284075,289499,289854,289855,289879,289880,290743,290744,290957,290958,292521,292527,292528,292529,294912,294914,294988,295000,295022,295023,296685,296686,298076,298078,302627,302634,302658,302659,302679,302685,305168,305170,305178,305180,305196,305197,305229,305260,305266,305277,306240,311094,311169,311170") == "622a56510952eb9b71304a6b0c3874371e1da631" || 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"), "324,1,105,115,119,124,125,207,211,216,217,1891,1895,2372,2373,2636,2640,2644,2645,2647,2651,2653,2664,2687,2688,2724,2728,2778,2779,2940,2941,2953,2957,2961,2962,2965,2971,2972,2973,2985,2989,2993,3000,3009,3010,4798,5138,5224,5225,8712,8713,8833,8885,9480,9481,9485,9486,9490,9491,9495,9496,9501,9502,9506,9507,9508,9509,9512,9513,9514,9515,9518,9519,9520,9521,9523,9525,9526,9527,9530,9531,9532,9533,9536,9537,9538,9539,9542,9543,9549,9550,9554,9555,9558,9560,9563,9565,9569,9570,9574,9575,9576,9577,9580,9581,9582,9583,9586,9587,9588,9589,9592,9593,9594,9595,9598,9599,9600,9601,9604,9605,9610,9611,9612,9613,9617,9618,10030,10031,11120,11128,25297,25298,25397,25399,32768,32770,32844,32886,43022,43023,43313,43314,43318,43319,44009,44010,44012,44014,44078,44079,44149,44150,44217,44218,44220,44221,44223,44224,44283,44285,44287,44288,44352,44353,44423,44424,44491,44492,44494,44495,44497,44500,44501,44503,44505,44506,44512,44513,44515,44516,44519,44520,44530,44533,44535,44536,44538,44540,44543,44544,44553,44554,44556,44557,44559,44570,44630,44631,44633,44634,44644,44645,44711,44712,44789,44790,44800,44801,44867,44868,44944,44945,45024,45025,45101,45102,45178,45179,45255,45256,45266,45267,45270,45271,45334,45335,45410,45411,45421,45422,45488,45489,45565,45566,45638,45639,45641,45642,45654,45658,45660,45661,45663,45665,45668,45669,45673,45674,45676,45677,45680,45681,46949,46951,46956,46958,46996,46998,47178,47179,47201,47202,47217,47218,47584,47585,47591,47592,47611,47612,47681,98306,98380,163842,163916,229378,229452,282866,284045,284046,284075,289499,289854,289855,289879,289880,290743,290744,290957,290958,292521,292527,292528,292529,294912,294914,294988,295000,295022,295023,296685,296686,298076,298078,302627,302634,302658,302659,302679,302685,305168,305170,305178,305180,305196,305197,305229,305260,305266,305277,306240,311094,311169,311170") && 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"), "200,111,113,4456,4458,6599,6601,6657,6661,7382,7384,7400,7404,11116,11118,22201,22203,25747,25749,26271,26275,28119,28121,78236,78240,78372,78376,78392,78396,78410,78414,78441,78445,123769,123773,123793,123795,123809,123811,123824,123828,123844,123848,123862,123866,123873,123877,126995,126999,127071,127075,127083,127087,127120,127124,127146,127150,127171,127175,127203,127204,127799,127801,127805,127809,127810,127812,127817,127821,127822,127826,127827,127831,127832,127836,127837,127841,127842,127846,127847,127851,127852,127856,127857,127859,127866,127870,127871,127875,127876,127880,127881,127885,127886,127890,127891,127895,127896,127900,127901,127903,127904,127908,127909,127913,127914,127918,127919,127923,127924,127928,127929,127933,127934,127938,127939,127943,127944,127946,127950,127954,127955,127959,127960,127964,127965,127969,127970,127972,127973,127977,127978,127980,127981,127985,127986,127990,127991,127993,127994,127998,127999,128003,128004,128006,128007,128011,128013,128022,128025,128061,128062,128128,128129,128177,143810,143812,143864,143868,150740,150742,176453,176455,176881,176883,186194,186196,186241,186243,186383,186385,187641,187643,188720,188722,202525,202527,223619,223621,230530,230532,233330,233332,235654,235656,282509,282513,285088,285091,285383,285385,285397,285401,285426,285428,294986,294989,296194,300890,300963,300964") == "67c2afa32e0dbcd3a963b0c001b1898eab45077d" || 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"), "200,111,113,4456,4458,6599,6601,6657,6661,7382,7384,7400,7404,11116,11118,22201,22203,25747,25749,26271,26275,28119,28121,78236,78240,78372,78376,78392,78396,78410,78414,78441,78445,123769,123773,123793,123795,123809,123811,123824,123828,123844,123848,123862,123866,123873,123877,126995,126999,127071,127075,127083,127087,127120,127124,127146,127150,127171,127175,127203,127204,127799,127801,127805,127809,127810,127812,127817,127821,127822,127826,127827,127831,127832,127836,127837,127841,127842,127846,127847,127851,127852,127856,127857,127859,127866,127870,127871,127875,127876,127880,127881,127885,127886,127890,127891,127895,127896,127900,127901,127903,127904,127908,127909,127913,127914,127918,127919,127923,127924,127928,127929,127933,127934,127938,127939,127943,127944,127946,127950,127954,127955,127959,127960,127964,127965,127969,127970,127972,127973,127977,127978,127980,127981,127985,127986,127990,127991,127993,127994,127998,127999,128003,128004,128006,128007,128011,128013,128022,128025,128061,128062,128128,128129,128177,143810,143812,143864,143868,150740,150742,176453,176455,176881,176883,186194,186196,186241,186243,186383,186385,187641,187643,188720,188722,202525,202527,223619,223621,230530,230532,233330,233332,235654,235656,282509,282513,285088,285091,285383,285385,285397,285401,285426,285428,294986,294989,296194,300890,300963,300964") && 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;

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

ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition("EMMC:/dev/block/bootdevice/by-name/boot:100663296:5d10e18fc04a98a15584643d0234cc2f458740f2",
                "EMMC:/dev/block/bootdevice/by-name/boot:100663296:071a37bf7296175adda9604fde22d8eb06aa8702",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:100663296:071a37bf7296175adda9604fde22d8eb06aa8702");

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

ui_print("Patching firmware images...");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/featenabler.mbn", "/dev/block/bootdevice/by-name/featenabler");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsec");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/km4.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak");
package_extract_file("firmware-update/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak");
package_extract_file("firmware-update/imagefv.elf", "/dev/block/bootdevice/by-name/imagefvbak");
package_extract_file("firmware-update/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak");
package_extract_file("firmware-update/storsec.mbn", "/dev/block/bootdevice/by-name/storsecbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
show_progress(0.600000, 600);

# --- Start patching dynamic partitions ---


# Update dynamic partition metadata

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

# Patch partition product

ui_print("Patching product image after verification.");
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 vendor

ui_print("Patching vendor image after verification.");
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 system

ui_print("Patching system image after verification.");
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.");

# --- End patching dynamic partitions ---

show_progress(0.100000, 2);

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