getprop("ro.product.device") == "vela" || abort("E3004: This package is for \"vela\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Meitu/vela/vela:11/RKQ1.200826.002/V12.5.1.0.RFECNXM:user/release-keys");
ui_print("Target: Meitu/vela/vela:11/RKQ1.200826.002/V12.5.3.0.RFECNXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Meitu/vela/vela:11/RKQ1.200826.002/V12.5.1.0.RFECNXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Meitu/vela/vela:11/RKQ1.200826.002/V12.5.3.0.RFECNXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Meitu/vela/vela:11/RKQ1.200826.002/V12.5.1.0.RFECNXM:user/release-keys or Meitu/vela/vela:11/RKQ1.200826.002/V12.5.3.0.RFECNXM:user/release-keys; this device has " + getprop("ro.build.fingerprint") + ".");
patch_partition_check(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d03e2454e4b2bc5f33da664297c77c6cd06f60f3"),
                      concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:61e06ecbbb5d99f3f21bdd7c59c0bbef12ef76b2")) ||
    abort(concat("E3005: \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d03e2454e4b2bc5f33da664297c77c6cd06f60f3"),"\" or \"",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:61e06ecbbb5d99f3f21bdd7c59c0bbef12ef76b2"),"\" has unexpected contents."));
apply_patch_space(134217728) || abort("E3006: Not enough free space on /cache to apply patches.");
if (range_sha1("/dev/block/bootdevice/by-name/system", "246,1,522,534,542,544,549,551,552,928,929,930,931,1120,1121,1449,1450,1452,1453,2007,2008,2011,2012,2312,2313,3701,3702,7754,7755,13460,13461,21272,21273,21275,21276,21280,21281,21282,21283,21391,21392,21445,21446,21518,21519,21521,21523,22545,22546,22548,22550,28694,28695,28697,28699,28700,28701,28823,28824,28826,28828,28831,28832,28935,28937,29619,29620,29622,29623,29627,29628,29637,29638,29641,29642,32768,32774,34734,34735,34737,34739,34740,34741,34752,35551,35553,35554,36184,36185,37049,37050,37052,37307,37308,37309,37339,37340,37390,37391,37464,37465,37467,37468,37473,37475,38674,38675,38677,38678,38897,38898,38900,38901,39518,39520,39865,39867,40314,40315,40317,40318,40382,40383,40384,40385,40386,40387,40389,40390,40404,40406,40559,40560,40562,40564,40623,40624,40759,40760,40762,40763,40768,40769,44339,44340,47679,47680,48950,48951,52499,52500,57480,57481,62210,62211,63980,63981,65536,65537,69427,69428,69430,69432,69482,69485,69491,69492,70576,70578,70588,70590,70835,70836,70906,70907,70921,70922,70931,72197,72203,72204,72209,72210,76259,76260,76271,76272,76405,76406,76409,76410,76430,77742,79348,98307,98812,131073,131578,163843,164348,196609,197114,229379,229884,262145,262650,294915,295420,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819203,819708,834955,884736,884739,903007,917316,917503,917504") == "94f14974dc416137589467f733d9038d48190978" || block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat")) then
ui_print("Verified system image...");
else
check_first_block("/dev/block/bootdevice/by-name/system");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/system", "246,1,522,534,542,544,549,551,552,928,929,930,931,1120,1121,1449,1450,1452,1453,2007,2008,2011,2012,2312,2313,3701,3702,7754,7755,13460,13461,21272,21273,21275,21276,21280,21281,21282,21283,21391,21392,21445,21446,21518,21519,21521,21523,22545,22546,22548,22550,28694,28695,28697,28699,28700,28701,28823,28824,28826,28828,28831,28832,28935,28937,29619,29620,29622,29623,29627,29628,29637,29638,29641,29642,32768,32774,34734,34735,34737,34739,34740,34741,34752,35551,35553,35554,36184,36185,37049,37050,37052,37307,37308,37309,37339,37340,37390,37391,37464,37465,37467,37468,37473,37475,38674,38675,38677,38678,38897,38898,38900,38901,39518,39520,39865,39867,40314,40315,40317,40318,40382,40383,40384,40385,40386,40387,40389,40390,40404,40406,40559,40560,40562,40564,40623,40624,40759,40760,40762,40763,40768,40769,44339,44340,47679,47680,48950,48951,52499,52500,57480,57481,62210,62211,63980,63981,65536,65537,69427,69428,69430,69432,69482,69485,69491,69492,70576,70578,70588,70590,70835,70836,70906,70907,70921,70922,70931,72197,72203,72204,72209,72210,76259,76260,76271,76272,76405,76406,76409,76410,76430,77742,79348,98307,98812,131073,131578,163843,164348,196609,197114,229379,229884,262145,262650,294915,295420,327681,328186,360449,360954,393217,393722,425985,426490,458753,459258,491521,492026,524289,524794,557057,557562,589825,590330,622593,623098,655361,655866,688129,688634,720897,721402,753665,754170,786433,786938,819203,819708,834955,884736,884739,903007,917316,917503,917504") && block_image_verify("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat"), ui_print("system recovered successfully."), abort("E1004: system partition fails to recover"));
endif;
if (range_sha1("/dev/block/bootdevice/by-name/vendor", "454,1,306,508,515,525,526,604,609,671,672,674,678,680,681,684,685,694,695,1382,1383,1423,1464,3703,3704,5002,5003,5071,5072,5409,5470,5856,5857,6540,6541,7540,7548,32768,32771,36868,36870,43903,43904,52675,52676,65536,65537,80332,80333,81962,81963,89996,89997,93003,93005,93030,93032,93452,93453,93535,93536,95177,95178,95288,95290,95293,95296,95658,95659,95665,95666,95672,95673,95682,95683,95690,95691,95698,95699,95708,95709,95714,95715,95721,95722,95745,95746,95753,95755,95774,95775,95790,95791,95801,95802,95832,95833,95962,95963,96092,96093,96132,96133,96154,96155,96180,96181,96193,96196,96199,96201,96231,96232,96235,96237,96266,96267,96271,96273,96362,96364,96371,96372,96374,96375,96487,96488,96504,96505,96967,96968,97753,97754,97760,97761,97978,97979,97987,97988,98028,98030,98122,98123,98124,98126,98304,98307,98996,98997,99003,99004,99010,99011,99020,99021,99028,99029,99036,99037,99046,99047,99052,99053,99059,99060,99083,99085,99390,99391,99421,99422,99737,99738,99752,99753,100532,100533,100776,100778,102665,102666,103955,103956,103961,103962,105269,105270,110521,110522,111770,111772,111774,111776,112920,112921,118041,118042,118043,118044,118244,118245,118246,118247,118447,118448,118452,118453,119101,119102,119104,119106,119688,119689,120562,120563,121467,121468,121469,121470,121483,121484,121486,121488,121533,121534,121598,121599,121600,121601,121924,121925,121928,121929,122053,122055,122148,122149,122381,122382,122568,122570,122635,122636,122867,122868,123051,123053,123130,123131,123335,123336,123538,123539,124304,124305,124990,124991,125828,125829,125831,125832,125834,125835,126228,126229,126231,126232,126635,126636,126637,126638,126648,126649,126669,126670,126680,126681,126697,126698,126718,126719,126739,126740,126753,126754,126774,126775,126776,126777,126783,126784,128264,128265,128273,128274,129846,129847,129851,129852,130240,130241,130639,130640,130648,130649,131072,131073,132549,132550,132558,132559,134487,134488,134951,134954,135019,135020,135150,135151,135216,135217,135347,135348,135413,135414,135479,135480,135557,135558,135596,135597,138370,138372,141188,141189,141191,141192,141273,141274,143466,143467,143502,143503,143816,143817,143893,143894,143898,143900,143918,143919,143964,143965,143983,143984,143986,143987,144037,144038,144041,144042,144092,144093,144893,144894,144907,144908,144943,144944,145046,145047,145118,145119,145396,145397,145408,145409,150776,150777,150786,150787,151436,151438,151471,151472,151589,151590,151595,151596,156490,156491,159520,159521,159522,159523,159562,159563,159986,159987,160039,160040,160321,160323,160324,160330,160359,160361,160367,160378,160398,160399,160401,160405,160539,160540,163840,163843,169448,169449,172576,172577,174353,174355,175430,175431,176265,177058,184899,184900,196608,196609,216145,216146,221843,221844,225186,225187,225203,225215,225836,228538,228544,229379,229884,262145,262650,294915,295420,299361,360448,360449,386991,393125,393215,393216") == "50b627561b0bfc66000181c39af61d8d00aa5135" || block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat")) then
ui_print("Verified vendor image...");
else
check_first_block("/dev/block/bootdevice/by-name/vendor");
ifelse (block_image_recover("/dev/block/bootdevice/by-name/vendor", "454,1,306,508,515,525,526,604,609,671,672,674,678,680,681,684,685,694,695,1382,1383,1423,1464,3703,3704,5002,5003,5071,5072,5409,5470,5856,5857,6540,6541,7540,7548,32768,32771,36868,36870,43903,43904,52675,52676,65536,65537,80332,80333,81962,81963,89996,89997,93003,93005,93030,93032,93452,93453,93535,93536,95177,95178,95288,95290,95293,95296,95658,95659,95665,95666,95672,95673,95682,95683,95690,95691,95698,95699,95708,95709,95714,95715,95721,95722,95745,95746,95753,95755,95774,95775,95790,95791,95801,95802,95832,95833,95962,95963,96092,96093,96132,96133,96154,96155,96180,96181,96193,96196,96199,96201,96231,96232,96235,96237,96266,96267,96271,96273,96362,96364,96371,96372,96374,96375,96487,96488,96504,96505,96967,96968,97753,97754,97760,97761,97978,97979,97987,97988,98028,98030,98122,98123,98124,98126,98304,98307,98996,98997,99003,99004,99010,99011,99020,99021,99028,99029,99036,99037,99046,99047,99052,99053,99059,99060,99083,99085,99390,99391,99421,99422,99737,99738,99752,99753,100532,100533,100776,100778,102665,102666,103955,103956,103961,103962,105269,105270,110521,110522,111770,111772,111774,111776,112920,112921,118041,118042,118043,118044,118244,118245,118246,118247,118447,118448,118452,118453,119101,119102,119104,119106,119688,119689,120562,120563,121467,121468,121469,121470,121483,121484,121486,121488,121533,121534,121598,121599,121600,121601,121924,121925,121928,121929,122053,122055,122148,122149,122381,122382,122568,122570,122635,122636,122867,122868,123051,123053,123130,123131,123335,123336,123538,123539,124304,124305,124990,124991,125828,125829,125831,125832,125834,125835,126228,126229,126231,126232,126635,126636,126637,126638,126648,126649,126669,126670,126680,126681,126697,126698,126718,126719,126739,126740,126753,126754,126774,126775,126776,126777,126783,126784,128264,128265,128273,128274,129846,129847,129851,129852,130240,130241,130639,130640,130648,130649,131072,131073,132549,132550,132558,132559,134487,134488,134951,134954,135019,135020,135150,135151,135216,135217,135347,135348,135413,135414,135479,135480,135557,135558,135596,135597,138370,138372,141188,141189,141191,141192,141273,141274,143466,143467,143502,143503,143816,143817,143893,143894,143898,143900,143918,143919,143964,143965,143983,143984,143986,143987,144037,144038,144041,144042,144092,144093,144893,144894,144907,144908,144943,144944,145046,145047,145118,145119,145396,145397,145408,145409,150776,150777,150786,150787,151436,151438,151471,151472,151589,151590,151595,151596,156490,156491,159520,159521,159522,159523,159562,159563,159986,159987,160039,160040,160321,160323,160324,160330,160359,160361,160367,160378,160398,160399,160401,160405,160539,160540,163840,163843,169448,169449,172576,172577,174353,174355,175430,175431,176265,177058,184899,184900,196608,196609,216145,216146,221843,221844,225186,225187,225203,225215,225836,228538,228544,229379,229884,262145,262650,294915,295420,299361,360448,360449,386991,393125,393215,393216") && block_image_verify("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat"), ui_print("vendor recovered successfully."), abort("E2004: vendor partition fails to recover"));
endif;

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


# ---- 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/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
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/keymaster64.mbn", "/dev/block/bootdevice/by-name/keymaster");
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/dspso.bin", "/dev/block/bootdevice/by-name/dsp");
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/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/keymaster64.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
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");
ui_print("Patching system image after verification.");
show_progress(0.800000, 0);
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
ui_print("Patching vendor image after verification.");
show_progress(0.100000, 0);
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
ui_print("Patching boot image...");
show_progress(0.100000, 10);
patch_partition(concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:d03e2454e4b2bc5f33da664297c77c6cd06f60f3"),
                concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:61e06ecbbb5d99f3f21bdd7c59c0bbef12ef76b2"),
                package_extract_file("boot.img.p")) ||
    abort(concat(        "E3008: Failed to apply patch to ",concat("EMMC:","/dev/block/bootdevice/by-name/boot",":134217728:61e06ecbbb5d99f3f21bdd7c59c0bbef12ef76b2")));

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