getprop("ro.product.device") == "raphael" || abort("E3004: This package is for \"raphael\" devices; this is a \"" + getprop("ro.product.device") + "\".");
ui_print("Source: Xiaomi/raphael_ru/raphael:10/QKQ1.190825.002/V11.0.2.0.QFKRUXM:user/release-keys");
ui_print("Target: Xiaomi/raphael_ru/raphael:10/QKQ1.190825.002/V11.0.3.0.QFKRUXM:user/release-keys");
ui_print("Verifying current system...");
getprop("ro.build.fingerprint") == "Xiaomi/raphael_ru/raphael:10/QKQ1.190825.002/V11.0.2.0.QFKRUXM:user/release-keys" ||
    getprop("ro.build.fingerprint") == "Xiaomi/raphael_ru/raphael:10/QKQ1.190825.002/V11.0.3.0.QFKRUXM:user/release-keys" ||
    abort("E3001: Package expects build fingerprint of Xiaomi/raphael_ru/raphael:10/QKQ1.190825.002/V11.0.2.0.QFKRUXM:user/release-keys or Xiaomi/raphael_ru/raphael:10/QKQ1.190825.002/V11.0.3.0.QFKRUXM: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:d6a31c55a3176a7ecc0d58763743f6299ea361b8",
                      "EMMC:/dev/block/bootdevice/by-name/boot:134217728:dac479f9181d5c59a88f2aa0d97dbf2d003add17") ||
    abort("E3005: \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:d6a31c55a3176a7ecc0d58763743f6299ea361b8\" or \"EMMC:/dev/block/bootdevice/by-name/boot:134217728:dac479f9181d5c59a88f2aa0d97dbf2d003add17\" 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("/dev/block/bootdevice/by-name/system", "662,1,654,728,742,774,781,783,784,1030,1035,1037,1038,1144,1145,1630,1631,2319,2320,2322,2324,2325,2326,2341,2342,2523,2524,3695,3696,3698,3699,3703,3704,3712,3713,3714,3715,5818,5935,9072,9073,9075,9076,9480,9481,9483,9484,10480,10482,16421,16422,16555,16556,19325,19327,25594,25596,32768,32770,32990,32991,34761,34762,34764,34766,34825,34826,34959,34961,35084,35088,35095,35096,35108,35112,35116,35117,36323,36329,36361,36362,36368,36372,36376,36377,36382,36386,36390,36391,36508,36514,36520,36521,37841,37845,37863,37864,40075,40076,40106,40110,40114,40115,40326,40330,40338,40339,40436,40440,40444,41851,43361,43365,43386,43387,43400,43404,43408,43409,43415,43419,43423,43424,43426,43427,46260,46264,46292,46293,46663,46667,46675,46676,46774,46780,46785,46786,46914,46918,46924,46925,47187,47188,47381,47385,47400,47401,51868,51872,51957,51958,51963,51967,51971,51972,52640,52644,52666,52667,56358,56359,56520,56521,57024,57028,57032,57033,58271,58275,58310,58311,58315,58319,58323,58324,58346,58350,58374,58375,60634,60638,60668,60669,60732,60736,60740,60741,60824,60828,60834,60835,65444,65446,65536,65537,67016,67017,70560,70561,70748,70752,70757,70895,72197,72201,72235,73869,74156,74160,74172,74173,74205,74209,74213,74214,74215,74216,74219,74221,74225,74226,74231,74232,74914,74918,74934,74935,74945,74949,74953,74954,77229,77233,77280,77281,77669,77673,77686,77687,80484,80485,83991,83995,84061,84062,84651,84655,84672,84673,91816,91820,91900,91901,93884,93888,93894,93895,93938,93942,93947,93948,94022,94026,94030,94031,94075,94081,94086,94087,96735,96739,96756,96757,98255,98256,98304,98306,98526,98527,99058,99059,99404,99408,99414,99415,99759,99763,99777,99778,100139,100140,100379,100383,100399,100400,118205,118209,118384,118385,118773,118779,118793,118794,118804,118808,118815,118816,122424,122428,122480,122481,122855,122859,122872,122873,122924,122928,122933,122934,122937,122943,122948,122949,125723,125727,125773,125774,125857,125861,125867,125868,125870,125874,125878,125879,125924,125928,125932,125933,126634,126640,126657,126658,127022,127028,127038,127039,127235,127239,127244,127245,127899,127905,127928,127929,127967,127971,127975,127976,129858,129862,129886,129887,129957,129961,129966,129967,130704,130708,130726,130727,130738,130742,130746,130747,130847,130851,130857,130858,131072,131073,132445,132449,132474,132475,138324,138328,138418,138419,138427,138431,138435,138436,138571,138575,138581,138582,140048,140052,140068,140069,141329,141335,141351,141352,142245,142249,142276,142277,142281,142285,142289,142290,142304,142308,142312,142313,142317,142321,142324,142325,142329,142330,142345,142349,142353,142354,142378,142382,142386,142387,144929,144933,144977,144978,144981,144985,144989,144990,145254,145258,145268,145269,145615,145621,145630,145631,146549,146553,146572,147375,148631,148635,148662,148663,149059,149063,149075,149078,151122,151126,151141,151142,151628,151632,151640,151641,154045,154050,154067,154068,154407,154408,156318,156319,156752,156753,157616,157727,158496,158497,161022,161027,161033,161034,161342,161343,161354,161355,161365,161368,161369,161370,161371,161372,161374,161375,161376,161377,161414,161415,161421,161422,161508,161509,161513,161514,162621,162622,162862,162863,162869,162870,162893,162894,162963,162964,162967,162972,162973,162974,162975,162976,162977,162978,163757,163758,163764,163765,163840,163842,164062,164063,164956,164958,165421,165423,165424,165425,165426,165427,165428,165429,165430,165431,165432,165433,165434,165435,165437,165438,165439,165442,166109,166111,166192,166193,166195,166196,166199,166201,166459,166460,166467,166469,166955,166957,167079,167080,167091,167092,167358,167359,167472,167473,167489,167491,167493,167494,176416,176417,184380,184381,186284,186285,186755,186844,187325,187403,188030,196609,197114,204234,204241,209038,209100,209101,209605,209695,210440,229269,229276,229378,229598,229599,230104,235580,235599,235609,236902,236903,246494,262145,262650,294914,295134,295135,295640,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,819202,819422,819423,819928,851969,852474,884738,884958,884959,885464,893201,903007,917316,917503,917504") == "ffaa7046dbf799b55d6731661b32525afda35fb8" || 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", "662,1,654,728,742,774,781,783,784,1030,1035,1037,1038,1144,1145,1630,1631,2319,2320,2322,2324,2325,2326,2341,2342,2523,2524,3695,3696,3698,3699,3703,3704,3712,3713,3714,3715,5818,5935,9072,9073,9075,9076,9480,9481,9483,9484,10480,10482,16421,16422,16555,16556,19325,19327,25594,25596,32768,32770,32990,32991,34761,34762,34764,34766,34825,34826,34959,34961,35084,35088,35095,35096,35108,35112,35116,35117,36323,36329,36361,36362,36368,36372,36376,36377,36382,36386,36390,36391,36508,36514,36520,36521,37841,37845,37863,37864,40075,40076,40106,40110,40114,40115,40326,40330,40338,40339,40436,40440,40444,41851,43361,43365,43386,43387,43400,43404,43408,43409,43415,43419,43423,43424,43426,43427,46260,46264,46292,46293,46663,46667,46675,46676,46774,46780,46785,46786,46914,46918,46924,46925,47187,47188,47381,47385,47400,47401,51868,51872,51957,51958,51963,51967,51971,51972,52640,52644,52666,52667,56358,56359,56520,56521,57024,57028,57032,57033,58271,58275,58310,58311,58315,58319,58323,58324,58346,58350,58374,58375,60634,60638,60668,60669,60732,60736,60740,60741,60824,60828,60834,60835,65444,65446,65536,65537,67016,67017,70560,70561,70748,70752,70757,70895,72197,72201,72235,73869,74156,74160,74172,74173,74205,74209,74213,74214,74215,74216,74219,74221,74225,74226,74231,74232,74914,74918,74934,74935,74945,74949,74953,74954,77229,77233,77280,77281,77669,77673,77686,77687,80484,80485,83991,83995,84061,84062,84651,84655,84672,84673,91816,91820,91900,91901,93884,93888,93894,93895,93938,93942,93947,93948,94022,94026,94030,94031,94075,94081,94086,94087,96735,96739,96756,96757,98255,98256,98304,98306,98526,98527,99058,99059,99404,99408,99414,99415,99759,99763,99777,99778,100139,100140,100379,100383,100399,100400,118205,118209,118384,118385,118773,118779,118793,118794,118804,118808,118815,118816,122424,122428,122480,122481,122855,122859,122872,122873,122924,122928,122933,122934,122937,122943,122948,122949,125723,125727,125773,125774,125857,125861,125867,125868,125870,125874,125878,125879,125924,125928,125932,125933,126634,126640,126657,126658,127022,127028,127038,127039,127235,127239,127244,127245,127899,127905,127928,127929,127967,127971,127975,127976,129858,129862,129886,129887,129957,129961,129966,129967,130704,130708,130726,130727,130738,130742,130746,130747,130847,130851,130857,130858,131072,131073,132445,132449,132474,132475,138324,138328,138418,138419,138427,138431,138435,138436,138571,138575,138581,138582,140048,140052,140068,140069,141329,141335,141351,141352,142245,142249,142276,142277,142281,142285,142289,142290,142304,142308,142312,142313,142317,142321,142324,142325,142329,142330,142345,142349,142353,142354,142378,142382,142386,142387,144929,144933,144977,144978,144981,144985,144989,144990,145254,145258,145268,145269,145615,145621,145630,145631,146549,146553,146572,147375,148631,148635,148662,148663,149059,149063,149075,149078,151122,151126,151141,151142,151628,151632,151640,151641,154045,154050,154067,154068,154407,154408,156318,156319,156752,156753,157616,157727,158496,158497,161022,161027,161033,161034,161342,161343,161354,161355,161365,161368,161369,161370,161371,161372,161374,161375,161376,161377,161414,161415,161421,161422,161508,161509,161513,161514,162621,162622,162862,162863,162869,162870,162893,162894,162963,162964,162967,162972,162973,162974,162975,162976,162977,162978,163757,163758,163764,163765,163840,163842,164062,164063,164956,164958,165421,165423,165424,165425,165426,165427,165428,165429,165430,165431,165432,165433,165434,165435,165437,165438,165439,165442,166109,166111,166192,166193,166195,166196,166199,166201,166459,166460,166467,166469,166955,166957,167079,167080,167091,167092,167358,167359,167472,167473,167489,167491,167493,167494,176416,176417,184380,184381,186284,186285,186755,186844,187325,187403,188030,196609,197114,204234,204241,209038,209100,209101,209605,209695,210440,229269,229276,229378,229598,229599,230104,235580,235599,235609,236902,236903,246494,262145,262650,294914,295134,295135,295640,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,819202,819422,819423,819928,851969,852474,884738,884958,884959,885464,893201,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", "122,1,274,602,610,620,624,629,630,711,715,720,721,982,986,991,1002,1005,1009,1013,1014,1022,1026,1031,1036,1048,1049,1525,1575,1594,1899,1965,1966,2018,32770,32864,32865,33370,65537,66042,98306,98400,98401,98906,131073,131578,158836,158977,159020,159082,160236,160591,160603,160805,160918,161604,161605,162582,162583,163026,163046,163420,163842,163936,163937,164442,165570,174746,174747,191272,191281,193470,193471,196608,196609,202395,202417,202832,202919,206486,206487,208081,208121,208337,208338,208360,208361,209044,212040,212043,215914,216004,216006,217709,217710,220102,220104,222251,222252,222344,222345,222537,222550,222809,229378,229472,229473,229978,262145,262650,294914,295008,295009,295514,327681,328186,360449,360954,365578,386991,393125,393215,393216") == "c40bbebe2a1c183407c0528dfd5da99bcc725dc3" || 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", "122,1,274,602,610,620,624,629,630,711,715,720,721,982,986,991,1002,1005,1009,1013,1014,1022,1026,1031,1036,1048,1049,1525,1575,1594,1899,1965,1966,2018,32770,32864,32865,33370,65537,66042,98306,98400,98401,98906,131073,131578,158836,158977,159020,159082,160236,160591,160603,160805,160918,161604,161605,162582,162583,163026,163046,163420,163842,163936,163937,164442,165570,174746,174747,191272,191281,193470,193471,196608,196609,202395,202417,202832,202919,206486,206487,208081,208121,208337,208338,208360,208361,209044,212040,212043,215914,216004,216006,217709,217710,220102,220104,222251,222252,222344,222345,222537,222550,222809,229378,229472,229473,229978,262145,262650,294914,295008,295009,295514,327681,328186,360449,360954,365578,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 ----

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

# ---- 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/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv");
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/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
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/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/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);
ui_print("Patching system image after verification.");
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.");
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.");
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");
