getprop("ro.product.device") == "curtana" || abort("E3004: This package is for \"curtana\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Redmi/curtana_global/curtana:10/QKQ1.191215.002/V11.0.5.0.QJWMIXM:user/release-keys");
ui_print("Target: Redmi/curtana_global/curtana:10/QKQ1.191215.002/V11.0.6.0.QJWMIXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Redmi/curtana_global/curtana:10/QKQ1.191215.002/V11.0.5.0.QJWMIXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Redmi/curtana_global/curtana:10/QKQ1.191215.002/V11.0.6.0.QJWMIXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Redmi/curtana_global/curtana:10/QKQ1.191215.002/V11.0.5.0.QJWMIXM:user/release-keys or Redmi/curtana_global/curtana:10/QKQ1.191215.002/V11.0.6.0.QJWMIXM: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:134217728:6d3a6a8ba8f704d41e4d7565e4a0b9bbad80049b",
                      "EMMC:/dev/block/bootdevice/by-name/boot:134217728:c82d414b8bf488c573af6ee24050b4fe8042cf88") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:6d3a6a8ba8f704d41e4d7565e4a0b9bbad80049b\" or \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:c82d414b8bf488c573af6ee24050b4fe8042cf88\" has unexpected contents.");
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
show_progress(0.100000, 70);
if (range_sha1(map_partition("system"), "912,164778,164779,169230,169233,172828,172829,172830,172831,172832,172833,172834,172835,172837,172838,172839,172842,173451,173453,173454,173455,173539,173540,173543,173544,173547,173549,196608,196645,199231,199232,216011,216012,222071,222072,229376,229378,229521,229547,247330,247331,247352,247353,247396,247397,247725,247726,248251,248252,248253,248254,248277,248278,248302,248303,248325,248326,248327,248328,248351,248352,248713,248714,248715,248716,248717,248718,248721,248722,248723,248724,248725,248726,248731,248732,248733,248734,248735,248736,248737,248738,248739,248740,248742,248743,248744,248745,248746,248747,248748,248749,248750,248751,248752,248753,248754,248755,248756,248757,248758,248759,248760,248761,248762,248763,248766,248767,248768,248769,248770,248771,248772,248773,248774,248775,248776,248777,248778,248779,248780,248781,248782,248783,248784,248785,248787,248788,248789,248790,248791,248792,248793,248794,248795,248796,248797,248798,248799,248800,248801,248802,248803,248804,248805,248806,248807,248808,248811,248812,248813,248814,248815,248816,248817,248818,248819,248820,248821,248822,248823,248824,248825,248826,248827,248828,248829,248830,248832,248833,248852,248853,248854,248855,248857,248858,248878,248879,248880,248881,248953,248954,248978,248979,249001,249002,249003,249004,249027,249028,249052,249053,249055,249056,249075,249076,249101,249102,249121,249122,249221,249222,249397,249398,249399,249400,249401,249402,249568,249569,249635,249636,249648,249649,249650,249651,249663,249664,249665,249666,249678,249679,249691,249692,249693,249694,249764,249765,250069,250071,250072,250073,250085,250086,250100,250101,250102,250103,250116,250117,250293,250294,250295,250296,250297,250298,250299,250300,250301,250302,250303,250304,250305,250306,250308,250309,250310,250311,250312,250313,250314,250315,250316,250317,250318,250319,250320,250321,250322,250323,250324,250325,250326,250327,250328,250329,250332,250333,250334,250335,250336,250337,250338,250339,250340,250341,250342,250343,250344,250345,250346,250347,250348,250349,250350,250351,250353,250354,250355,250356,250357,250358,250359,250360,250361,250362,250363,250364,250365,250366,250367,250368,250369,250370,250371,250372,250373,250374,250377,250378,250379,250380,250381,250382,250383,250384,250385,250386,250387,250388,250389,250390,250391,250392,250393,250394,250395,250396,250579,250580,250711,250712,250735,250736,250924,250925,259814,260263,260335,260603,262144,262171,262229,262230,262261,262262,262410,262411,262415,262416,262528,262529,270214,270215,272063,272064,272068,272069,278222,278223,282381,282382,283390,283391,284222,284223,285423,286896,290099,290100,290930,290931,291696,291736,291800,291801,293180,293182,293285,293286,294912,294914,295057,295085,296883,296884,298065,298066,298117,298118,299343,299344,299739,299740,299891,299894,301906,301907,306085,306086,306090,306091,306098,306099,307644,307645,307962,307963,308666,308668,313462,313463,313468,313469,313476,313477,313481,313482,313553,313554,313584,313585,313586,313587,313657,313658,313713,313714,313800,313801,313964,313965,314015,314016,314130,314131,314763,314764,314769,314770,314804,314805,314809,314810,314837,314838,314862,314863,314866,314867,314880,314881,314894,314895,314908,314909,314918,314919,314928,314929,315080,315081,315086,315087,315091,315092,315098,315099,315124,315125,315128,315129,315196,315197,315202,315203,315209,315210,315215,315216,315222,315223,315233,315234,315243,315244,315249,315250,315293,315294,315299,315300,315331,315332,315342,315343,315349,315350,315412,315413,315417,315418,315427,315428,315434,315435,315442,315443,315446,315447,315450,315451,315456,315457,315462,315463,315468,315469,315475,315476,315552,315553,315559,315560,315565,315566,315570,315571,315576,315577,315611,315612,315617,315618,315626,315627,315636,315637,315642,315643,315652,315653,315660,315661,315665,315666,315671,315672,315699,315700,315705,315706,315718,315719,315790,315791,315796,315797,315811,315812,315826,315827,315842,315843,315858,315859,315874,315875,315907,315908,315913,315914,316007,316008,316040,316041,316097,316098,316234,316235,316240,316241,316246,316247,316252,316253,316257,316258,317202,317203,317212,317213,317253,317254,317283,317284,317842,317843,317861,317862,317866,317867,317898,317899,318065,318066,318071,318072,318142,318143,318146,318147,318151,318152,318190,318191,318195,318196,318200,318201,318205,318206,318214,318215,318592,318593,318693,318694,318697,318698,318714,318715,318719,318720,318727,318728,318763,318764,319012,319013,319049,319050,319059,319060,319065,319066,319071,319072,319077,319078,319091,319092,319097,319098,319137,319138,319219,319220,319224,319225,319241,319242,319428,319429,319624,319625,319720,319721,319724,319725,319728,319729,320853,320854,322180,322181,323278,323279,324032,324033,327237,327238,327680,327708,328656,328658,328765,328767,329075,329076,334774,334775,335901,335902,337956,337957,344318,344319,344660,344671,454045,454058,454063,456120,456122,458417,491620,491646,492190,492191,507931,507932,523235,523236,524288,524344,525094,525096,525200,525201,526926,526928,529038,529039,533234,533235,535248,535250,535378,535379,541271,541273,541319,541320,542923,542925,548541,548542,548788,548789,548876,548877,548937,548938,548977,548978,549110,549111,550292,550294,553441,553442,553459,553461,553466,553467,553504,553506,553511,553512,553539,553541,553546,553547,553557,553559,553564,553565,553582,553584,553589,553590,553592,553594,553597,553598,555254,555256,555265,555266,555270,555272,555277,555278,555339,555341,555347,555348,555352,555354,557056,557066,562233,562234,564616,564618,564688,564689,564761,564763,564861,564862,564865,564867,564872,564873,564962,564964,564970,564971,566893,566895,566923,566924,566939,566941,566946,566947,567104,567106,567115,567116,570237,570238,570244,570245,570342,570343,570363,570365,570373,570374,570383,570384,570397,570398,570425,570427,571039,571040,571092,571093,571444,571446,571475,571476,573118,573120,574292,574293,574448,574450,574456,574457,574465,574467,574472,574473,574514,574516,574521,574522,579220,579222,579270,579271,579299,579303,579309,579310,580624,580626,580652,580653,581426,581428,581456,581457,581542,581544,581551,581552,581878,581880,581895,585343,585682,585683,585688,585689,585708,585709,585763,585765,585774,585776,585870,585871,585872,585875,587677,596991,597119,597120") == "5b4df44bb9ce59c9e31309c545be52e67dbb8bad" || 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"), "912,164778,164779,169230,169233,172828,172829,172830,172831,172832,172833,172834,172835,172837,172838,172839,172842,173451,173453,173454,173455,173539,173540,173543,173544,173547,173549,196608,196645,199231,199232,216011,216012,222071,222072,229376,229378,229521,229547,247330,247331,247352,247353,247396,247397,247725,247726,248251,248252,248253,248254,248277,248278,248302,248303,248325,248326,248327,248328,248351,248352,248713,248714,248715,248716,248717,248718,248721,248722,248723,248724,248725,248726,248731,248732,248733,248734,248735,248736,248737,248738,248739,248740,248742,248743,248744,248745,248746,248747,248748,248749,248750,248751,248752,248753,248754,248755,248756,248757,248758,248759,248760,248761,248762,248763,248766,248767,248768,248769,248770,248771,248772,248773,248774,248775,248776,248777,248778,248779,248780,248781,248782,248783,248784,248785,248787,248788,248789,248790,248791,248792,248793,248794,248795,248796,248797,248798,248799,248800,248801,248802,248803,248804,248805,248806,248807,248808,248811,248812,248813,248814,248815,248816,248817,248818,248819,248820,248821,248822,248823,248824,248825,248826,248827,248828,248829,248830,248832,248833,248852,248853,248854,248855,248857,248858,248878,248879,248880,248881,248953,248954,248978,248979,249001,249002,249003,249004,249027,249028,249052,249053,249055,249056,249075,249076,249101,249102,249121,249122,249221,249222,249397,249398,249399,249400,249401,249402,249568,249569,249635,249636,249648,249649,249650,249651,249663,249664,249665,249666,249678,249679,249691,249692,249693,249694,249764,249765,250069,250071,250072,250073,250085,250086,250100,250101,250102,250103,250116,250117,250293,250294,250295,250296,250297,250298,250299,250300,250301,250302,250303,250304,250305,250306,250308,250309,250310,250311,250312,250313,250314,250315,250316,250317,250318,250319,250320,250321,250322,250323,250324,250325,250326,250327,250328,250329,250332,250333,250334,250335,250336,250337,250338,250339,250340,250341,250342,250343,250344,250345,250346,250347,250348,250349,250350,250351,250353,250354,250355,250356,250357,250358,250359,250360,250361,250362,250363,250364,250365,250366,250367,250368,250369,250370,250371,250372,250373,250374,250377,250378,250379,250380,250381,250382,250383,250384,250385,250386,250387,250388,250389,250390,250391,250392,250393,250394,250395,250396,250579,250580,250711,250712,250735,250736,250924,250925,259814,260263,260335,260603,262144,262171,262229,262230,262261,262262,262410,262411,262415,262416,262528,262529,270214,270215,272063,272064,272068,272069,278222,278223,282381,282382,283390,283391,284222,284223,285423,286896,290099,290100,290930,290931,291696,291736,291800,291801,293180,293182,293285,293286,294912,294914,295057,295085,296883,296884,298065,298066,298117,298118,299343,299344,299739,299740,299891,299894,301906,301907,306085,306086,306090,306091,306098,306099,307644,307645,307962,307963,308666,308668,313462,313463,313468,313469,313476,313477,313481,313482,313553,313554,313584,313585,313586,313587,313657,313658,313713,313714,313800,313801,313964,313965,314015,314016,314130,314131,314763,314764,314769,314770,314804,314805,314809,314810,314837,314838,314862,314863,314866,314867,314880,314881,314894,314895,314908,314909,314918,314919,314928,314929,315080,315081,315086,315087,315091,315092,315098,315099,315124,315125,315128,315129,315196,315197,315202,315203,315209,315210,315215,315216,315222,315223,315233,315234,315243,315244,315249,315250,315293,315294,315299,315300,315331,315332,315342,315343,315349,315350,315412,315413,315417,315418,315427,315428,315434,315435,315442,315443,315446,315447,315450,315451,315456,315457,315462,315463,315468,315469,315475,315476,315552,315553,315559,315560,315565,315566,315570,315571,315576,315577,315611,315612,315617,315618,315626,315627,315636,315637,315642,315643,315652,315653,315660,315661,315665,315666,315671,315672,315699,315700,315705,315706,315718,315719,315790,315791,315796,315797,315811,315812,315826,315827,315842,315843,315858,315859,315874,315875,315907,315908,315913,315914,316007,316008,316040,316041,316097,316098,316234,316235,316240,316241,316246,316247,316252,316253,316257,316258,317202,317203,317212,317213,317253,317254,317283,317284,317842,317843,317861,317862,317866,317867,317898,317899,318065,318066,318071,318072,318142,318143,318146,318147,318151,318152,318190,318191,318195,318196,318200,318201,318205,318206,318214,318215,318592,318593,318693,318694,318697,318698,318714,318715,318719,318720,318727,318728,318763,318764,319012,319013,319049,319050,319059,319060,319065,319066,319071,319072,319077,319078,319091,319092,319097,319098,319137,319138,319219,319220,319224,319225,319241,319242,319428,319429,319624,319625,319720,319721,319724,319725,319728,319729,320853,320854,322180,322181,323278,323279,324032,324033,327237,327238,327680,327708,328656,328658,328765,328767,329075,329076,334774,334775,335901,335902,337956,337957,344318,344319,344660,344671,454045,454058,454063,456120,456122,458417,491620,491646,492190,492191,507931,507932,523235,523236,524288,524344,525094,525096,525200,525201,526926,526928,529038,529039,533234,533235,535248,535250,535378,535379,541271,541273,541319,541320,542923,542925,548541,548542,548788,548789,548876,548877,548937,548938,548977,548978,549110,549111,550292,550294,553441,553442,553459,553461,553466,553467,553504,553506,553511,553512,553539,553541,553546,553547,553557,553559,553564,553565,553582,553584,553589,553590,553592,553594,553597,553598,555254,555256,555265,555266,555270,555272,555277,555278,555339,555341,555347,555348,555352,555354,557056,557066,562233,562234,564616,564618,564688,564689,564761,564763,564861,564862,564865,564867,564872,564873,564962,564964,564970,564971,566893,566895,566923,566924,566939,566941,566946,566947,567104,567106,567115,567116,570237,570238,570244,570245,570342,570343,570363,570365,570373,570374,570383,570384,570397,570398,570425,570427,571039,571040,571092,571093,571444,571446,571475,571476,573118,573120,574292,574293,574448,574450,574456,574457,574465,574467,574472,574473,574514,574516,574521,574522,579220,579222,579270,579271,579299,579303,579309,579310,580624,580626,580652,580653,581426,581428,581456,581457,581542,581544,581551,581552,581878,581880,581895,585343,585682,585683,585688,585689,585708,585709,585763,585765,585774,585776,585870,585871,585872,585875,587677,596991,597119,597120") && 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"), "592,1,107,117,119,126,127,208,210,217,218,1923,1925,2405,2406,2411,2412,2675,2677,2683,2684,2686,2692,2735,2741,2747,2748,2771,2772,2808,2810,2862,2863,2875,2877,2883,2884,2887,2889,2894,2895,3218,3219,3224,3226,3241,3244,3257,3258,4234,4235,14798,14799,15597,15598,15602,15604,15607,15609,15612,15614,15617,15619,15622,15624,15627,15629,15633,15635,15636,15637,15639,15641,15642,15643,15645,15647,15648,15649,15657,15659,15660,15661,15663,15665,15666,15667,15671,15672,15676,15678,15681,15683,15686,15688,15691,15693,15696,15698,15699,15700,15709,15710,15711,15712,15733,15734,15735,15736,15741,15742,15746,15747,15751,15752,15756,15757,15762,15763,15767,15768,15769,15770,15773,15774,15775,15776,15779,15780,15781,15782,15785,15786,16134,16135,16386,16387,17161,17165,26836,26837,32768,32770,32846,32875,35639,35640,35749,35750,36271,36272,37277,37279,44781,44782,49401,49402,50036,50038,50671,50672,51205,51206,51276,51277,55997,55998,56961,56962,58383,58384,62464,62465,62467,62469,62533,62534,62604,62605,62672,62673,62675,62676,62678,62679,62738,62740,62742,62743,62807,62808,62878,62879,62946,62947,62949,62950,62952,62955,63014,63015,63017,63019,63079,63080,63082,63083,63147,63148,63150,63151,63212,63213,63222,63223,63285,63286,63352,63353,63355,63356,63359,63364,63366,63367,63369,63371,63373,63374,63433,63434,63436,63437,63499,63500,63502,63503,63564,63565,63633,63634,63706,63707,63709,63710,63772,63773,63843,63844,63852,63855,63856,63857,64056,64057,64123,64124,64126,64127,64130,64135,65536,65574,71493,71494,71658,71659,71968,71969,72030,72031,72180,72181,72260,72261,72293,72294,72372,72373,72440,72441,72508,72509,72601,72602,72674,72675,72720,72721,72825,72826,72869,72870,72872,72873,72905,72906,73067,73068,73139,73140,73192,73193,73517,73518,73520,73521,73615,73616,73740,73741,73815,73816,73849,73850,73913,73914,73985,73986,74543,74544,74565,74567,74572,74574,74640,74641,75773,75774,75781,75782,75927,75928,76863,76864,76974,76975,77051,77052,77152,77153,78357,78358,78536,78537,78933,78934,79105,79106,79951,79952,79955,79956,80582,80583,80918,80919,80921,80922,80924,80925,81902,81904,81905,81906,82192,82193,83149,83150,83151,83154,83274,83275,83431,83432,83435,83436,83525,83526,83527,83530,83597,83599,83601,83602,83743,83744,83747,83748,83915,83916,83918,83921,85341,85342,85394,85395,85426,85427,85429,85430,85447,85448,85541,85542,86101,86102,86166,86167,87059,87060,87096,87098,87099,87100,88340,88341,88342,88345,88466,88467,88623,88624,88718,88719,88720,88723,88790,88792,88794,88795,88937,88938,88940,88941,89108,89109,89111,89114,90478,90479,91344,91345,91428,91429,91491,91492,91833,91834,95769,95770,96429,97963,98304,98306,98382,98422,103435,103436,103459,103460,105709,105710,107564,107565,108961,108969,109730,109731,110472,110473,112709,112710,112713,112714,116875,116876,116878,116879,121195,121196,125775,125776,125984,125985,126455,126456,130569,130570,131072,131096,134508,134509,135770,135771,139403,139404,139406,139407,139414,139415,140792,140793,141574,141575,143496,143525,145121,145123,145125,145126,145127,145129,145130,145131,145133,145135,145136,145137,145139,145141,145142,145143,145145,145147,145148,145149,145151,145153,145154,145155,145158,145160,145161,145162,145164,145166,145167,145168,145170,145172,145173,145174,145182,145184,145187,145189,145192,145194,145200,145201,145203,145205,145206,145207,145209,145211,145212,145213,145215,145217,145218,145219,145221,145223,145224,145225,145234,145235,145236,145237,145650,145651,146992,146993,148310,148312,149025,149026,149039,163842,163918,229378,229454,294914,294990,295010,295011,312013,313013,317975,318052,318053") == "59357d17b24c60fdfaa36501ac4e50af6e014f22" || 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"), "592,1,107,117,119,126,127,208,210,217,218,1923,1925,2405,2406,2411,2412,2675,2677,2683,2684,2686,2692,2735,2741,2747,2748,2771,2772,2808,2810,2862,2863,2875,2877,2883,2884,2887,2889,2894,2895,3218,3219,3224,3226,3241,3244,3257,3258,4234,4235,14798,14799,15597,15598,15602,15604,15607,15609,15612,15614,15617,15619,15622,15624,15627,15629,15633,15635,15636,15637,15639,15641,15642,15643,15645,15647,15648,15649,15657,15659,15660,15661,15663,15665,15666,15667,15671,15672,15676,15678,15681,15683,15686,15688,15691,15693,15696,15698,15699,15700,15709,15710,15711,15712,15733,15734,15735,15736,15741,15742,15746,15747,15751,15752,15756,15757,15762,15763,15767,15768,15769,15770,15773,15774,15775,15776,15779,15780,15781,15782,15785,15786,16134,16135,16386,16387,17161,17165,26836,26837,32768,32770,32846,32875,35639,35640,35749,35750,36271,36272,37277,37279,44781,44782,49401,49402,50036,50038,50671,50672,51205,51206,51276,51277,55997,55998,56961,56962,58383,58384,62464,62465,62467,62469,62533,62534,62604,62605,62672,62673,62675,62676,62678,62679,62738,62740,62742,62743,62807,62808,62878,62879,62946,62947,62949,62950,62952,62955,63014,63015,63017,63019,63079,63080,63082,63083,63147,63148,63150,63151,63212,63213,63222,63223,63285,63286,63352,63353,63355,63356,63359,63364,63366,63367,63369,63371,63373,63374,63433,63434,63436,63437,63499,63500,63502,63503,63564,63565,63633,63634,63706,63707,63709,63710,63772,63773,63843,63844,63852,63855,63856,63857,64056,64057,64123,64124,64126,64127,64130,64135,65536,65574,71493,71494,71658,71659,71968,71969,72030,72031,72180,72181,72260,72261,72293,72294,72372,72373,72440,72441,72508,72509,72601,72602,72674,72675,72720,72721,72825,72826,72869,72870,72872,72873,72905,72906,73067,73068,73139,73140,73192,73193,73517,73518,73520,73521,73615,73616,73740,73741,73815,73816,73849,73850,73913,73914,73985,73986,74543,74544,74565,74567,74572,74574,74640,74641,75773,75774,75781,75782,75927,75928,76863,76864,76974,76975,77051,77052,77152,77153,78357,78358,78536,78537,78933,78934,79105,79106,79951,79952,79955,79956,80582,80583,80918,80919,80921,80922,80924,80925,81902,81904,81905,81906,82192,82193,83149,83150,83151,83154,83274,83275,83431,83432,83435,83436,83525,83526,83527,83530,83597,83599,83601,83602,83743,83744,83747,83748,83915,83916,83918,83921,85341,85342,85394,85395,85426,85427,85429,85430,85447,85448,85541,85542,86101,86102,86166,86167,87059,87060,87096,87098,87099,87100,88340,88341,88342,88345,88466,88467,88623,88624,88718,88719,88720,88723,88790,88792,88794,88795,88937,88938,88940,88941,89108,89109,89111,89114,90478,90479,91344,91345,91428,91429,91491,91492,91833,91834,95769,95770,96429,97963,98304,98306,98382,98422,103435,103436,103459,103460,105709,105710,107564,107565,108961,108969,109730,109731,110472,110473,112709,112710,112713,112714,116875,116876,116878,116879,121195,121196,125775,125776,125984,125985,126455,126456,130569,130570,131072,131096,134508,134509,135770,135771,139403,139404,139406,139407,139414,139415,140792,140793,141574,141575,143496,143525,145121,145123,145125,145126,145127,145129,145130,145131,145133,145135,145136,145137,145139,145141,145142,145143,145145,145147,145148,145149,145151,145153,145154,145155,145158,145160,145161,145162,145164,145166,145167,145168,145170,145172,145173,145174,145182,145184,145187,145189,145192,145194,145200,145201,145203,145205,145206,145207,145209,145211,145212,145213,145215,145217,145218,145219,145221,145223,145224,145225,145234,145235,145236,145237,145650,145651,146992,146993,148310,148312,149025,149026,149039,163842,163918,229378,229454,294914,294990,295010,295011,312013,313013,317975,318052,318053") && 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"), "322,1,91,5381,5382,5398,5400,5406,5407,7958,7959,8262,8263,9491,9493,11490,11491,11497,11498,11536,11537,11544,11546,11551,11552,12263,12265,12274,12275,12281,12283,12288,12289,12349,12351,12358,12359,15063,15064,18430,18431,20827,20828,21191,21193,21702,21703,21715,21717,21722,21723,23563,23565,25004,25005,29017,29019,32768,32770,32839,32851,33091,33092,39985,39986,40387,40388,47553,47554,55556,55557,57046,57047,65536,65548,66763,66764,67450,67451,69407,69408,78691,78692,78698,78699,78705,78707,78712,78713,78841,78843,78848,78849,78861,78863,78868,78869,78872,78873,78879,78881,78886,78887,78910,78912,78917,78918,79762,79763,93183,93184,93215,93216,98304,98306,98375,98387,98388,98389,109017,109018,109528,109529,115912,115913,120665,120666,123105,123106,123117,123119,123124,123125,123135,123136,123141,123143,123150,123151,123155,123159,123165,123166,123172,123174,123179,123180,123192,123194,123199,123200,123210,123212,123217,123218,123220,123223,123233,123234,124991,124992,124998,124999,125133,125134,126342,126345,126403,126406,126415,126418,126447,126450,126474,126477,126499,126502,126522,126523,126531,126533,126703,126704,126705,126706,126707,126708,126709,126710,126748,126750,126758,126759,126764,126765,127037,127039,127235,127236,127247,127248,127280,127281,127341,127342,128358,128359,131072,131084,131940,131941,133104,133105,137833,137834,139425,139428,153780,153781,153783,153784,155755,155756,155762,155763,157777,157779,159854,159857,161899,161901,161903,161906,163376,163378,163840,163842,163911,163925,171890,171892,174479,174480,177034,177036,177206,177207,180039,180040,186956,186957,189229,189230,192862,192863,195493,195494,196608,196677,200292,200293,207470,207471,217338,217339,218462,218463,218489,218490,218974,218975,219294,219295,220155,220156,220238,220239,229376,229378,229447,229493,230068,230070,230087,230088,231969,231970,232395,232397,232423,232424,241666,241667,243701,243702,262144,262148,269551,269552,269582,269584,269589,269590,272152,272153,272156,272158,272163,272164,272443,272447,272458,272461,272487,272490,272505,272508,275842,275843,283128,287616,287688,287689") == "a06926b3ddf32393021727536f1e59301ad42169" || 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
check_first_block(map_partition("product"));
ifelse (block_image_recover(map_partition("product"), "322,1,91,5381,5382,5398,5400,5406,5407,7958,7959,8262,8263,9491,9493,11490,11491,11497,11498,11536,11537,11544,11546,11551,11552,12263,12265,12274,12275,12281,12283,12288,12289,12349,12351,12358,12359,15063,15064,18430,18431,20827,20828,21191,21193,21702,21703,21715,21717,21722,21723,23563,23565,25004,25005,29017,29019,32768,32770,32839,32851,33091,33092,39985,39986,40387,40388,47553,47554,55556,55557,57046,57047,65536,65548,66763,66764,67450,67451,69407,69408,78691,78692,78698,78699,78705,78707,78712,78713,78841,78843,78848,78849,78861,78863,78868,78869,78872,78873,78879,78881,78886,78887,78910,78912,78917,78918,79762,79763,93183,93184,93215,93216,98304,98306,98375,98387,98388,98389,109017,109018,109528,109529,115912,115913,120665,120666,123105,123106,123117,123119,123124,123125,123135,123136,123141,123143,123150,123151,123155,123159,123165,123166,123172,123174,123179,123180,123192,123194,123199,123200,123210,123212,123217,123218,123220,123223,123233,123234,124991,124992,124998,124999,125133,125134,126342,126345,126403,126406,126415,126418,126447,126450,126474,126477,126499,126502,126522,126523,126531,126533,126703,126704,126705,126706,126707,126708,126709,126710,126748,126750,126758,126759,126764,126765,127037,127039,127235,127236,127247,127248,127280,127281,127341,127342,128358,128359,131072,131084,131940,131941,133104,133105,137833,137834,139425,139428,153780,153781,153783,153784,155755,155756,155762,155763,157777,157779,159854,159857,161899,161901,161903,161906,163376,163378,163840,163842,163911,163925,171890,171892,174479,174480,177034,177036,177206,177207,180039,180040,186956,186957,189229,189230,192862,192863,195493,195494,196608,196677,200292,200293,207470,207471,217338,217339,218462,218463,218489,218490,218974,218975,219294,219295,220155,220156,220238,220239,229376,229378,229447,229493,230068,230070,230087,230088,231969,231970,232395,232397,232423,232424,241666,241667,243701,243702,262144,262148,269551,269552,269582,269584,269589,269590,272152,272153,272156,272158,272163,272164,272443,272447,272458,272461,272487,272490,272505,272508,275842,275843,283128,287616,287688,287689") && 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:134217728:6d3a6a8ba8f704d41e4d7565e4a0b9bbad80049b",
                "EMMC:/dev/block/bootdevice/by-name/boot:134217728:c82d414b8bf488c573af6ee24050b4fe8042cf88",
                package_extract_file("boot.img.p")) ||
    abort("E3008: Failed to apply patch to EMMC:/dev/block/bootdevice/by-name/boot:134217728:c82d414b8bf488c573af6ee24050b4fe8042cf88");

# ---- 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/aop.mbn", "/dev/block/bootdevice/by-name/aop");
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/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/aop.mbn", "/dev/block/bootdevice/by-name/aopbak");
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/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");
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/vbmeta_system.img", "/dev/block/bootdevice/by-name/vbmeta_system");
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");
