assert(getprop("ro.product.model") == "TC70GA1" || getprop("ro.product.model") == "TC700H" || getprop("ro.product.model") == "TC70");
assert(getprop("ro.systemprop.sdram") == "" || getprop("ro.systemprop.sdram") ==  "2");

show_progress(0.750000, 0);
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");
package_extract_file("update_accessory_command.sh", "/tmp/update_accessory_command.sh");
set_metadata("/tmp/update_accessory_command.sh", "uid", 0, "gid", 0, "mode", 0755);
run_program("/system/bin/sh", "/tmp/update_accessory_command.sh", "get_part12_size");

#1048576(sectors) for 512MB
if file_getprop("/system/part12_size.txt","SIZE") == "1048576"
then
        ui_print("GPT update required (size of system is not 1GB)...");
        package_extract_file("misc_next.cmd", "/system/misc_next.cmd");
        set_metadata("/system/misc_next.cmd", "uid", 0, "gid", 0, "mode", 0777);

        mount("vfat", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/internalsd", "/internalsd");

        show_progress(0.10, 10);
        ui_print("Backup persist ...");
        run_program("/system/bin/dd", "bs=512", "if=/dev/block/platform/msm_sdcc.1/by-name/persist","of=/internalsd/persist.img", "count=16384", "conv=fdatasync");
        ui_print("Backup factory ...");
        run_program("/system/bin/dd", "bs=512", "if=/dev/block/platform/msm_sdcc.1/by-name/factory","of=/internalsd/factory.img", "count=40960", "conv=fdatasync");

        run_program("/system/bin/sh", "/tmp/update_accessory_command.sh", "get_package_location");

        if file_getprop("/system/pkg_props.txt", "root") == "sideload"
        then
                ui_print("Package from storage ...");

                if ( mount("vfat", "EMMC", "/dev/block/mmcblk1p1", "/sdcard") || mount("vfat", "EMMC", "/dev/block/mmcblk1", "/sdcard") )
                then
                       ui_print("SD card mounted ...");
                endif;

                run_program("/system/bin/sh", "/tmp/update_accessory_command.sh", "get_package_source_path", "/tmp"+file_getprop("/system/pkg_props.txt", "file_full"));

                if file_getprop("/system/pkg_path.txt","TAR_PKG") == "cannot_find_the_package"
                then
                    ui_print("Cannot find update package in storages ...");
                    abort();
                endif;

                ui_print("Update package is " + file_getprop("/system/pkg_path.txt", "TAR_PKG"));
                run_program("/system/bin/sh", "/tmp/update_accessory_command.sh", "add_pkg_to_misc", file_getprop("/system/pkg_path.txt","TAR_PKG"), "/system/misc_next.cmd");
        else
                ui_print("Package from sideload ...");

                show_progress(0.60, 300);
                ui_print("Backup update.zip ...");

                run_program("/system/bin/sh", "/tmp/update_accessory_command.sh", "get_package_location_non_sideload");
                ui_print(file_getprop("/system/pkg_props.txt", "file_full"));
                if is_substring("internalsd",file_getprop("/system/pkg_props.txt","file_full")) == "t"
                then
                    ui_print("No relocation needed");
                    run_program("/system/bin/sh", "/tmp/update_accessory_command.sh", "add_pkg_to_misc", file_getprop("/system/pkg_props.txt", "file_full"), "/system/misc_next.cmd");
                else
                    if (run_program("/system/bin/dd", "if="+file_getprop("/system/pkg_props.txt","file_full"),"of=/internalsd/tmp_pkg.todelete","conv=fdatasync") == "0")
                    then
                        unmount("/internalsd");
                        ui_print("Update package relocated to /internalsd");
                        run_program("/system/bin/sh", "/tmp/update_accessory_command.sh", "add_pkg_to_misc","/internalsd/tmp_pkg.todelete","/system/misc_next.cmd");
                    else
                        ui_print("Relocate update package to /internalsd failed!");
                        abort();
                    endif;
                endif;
        endif;

        show_progress(0.10, 10);

        ui_print("Updating fastboot ...");
        package_extract_file("emmc_appsboot.mbn", "/dev/block/platform/msm_sdcc.1/by-name/aboot");

        ui_print("Updating recovery ...");
        package_extract_file("recovery.img", "/dev/block/platform/msm_sdcc.1/by-name/recovery");

        ui_print("Update partition table ...");
        run_program("/system/bin/dd", "if=/system/misc_next.cmd", "of=/dev/block/platform/msm_sdcc.1/by-name/misc", "conv=fdatasync");
        package_extract_file("gpt_both0.bin", "/system/gpt_both0.bin");
        run_program("/system/bin/dd", "bs=512", "if=/system/gpt_both0.bin","of=/dev/block/platform/msm_sdcc.1/by-name/misc", "seek=128", "conv=fdatasync");

        show_progress(0.20, 10);

        run_program("/system/bin/reboot", "recovery");
else
        if (run_program("/system/bin/dd", "if=/tmp/newpt", "of=/tmp/newpt.bak") == "0")
        then
                ui_print("Continue the new parition migration ...");

                ui_print("Formatting misc ...");
                run_program("/system/bin/dd", "bs=512", "if=/dev/zero", "of=/dev/block/platform/msm_sdcc.1/by-name/misc", "count=256", "conv=fdatasync");

                if (mount("vfat", "EMMC", "/dev/block/mmcblk1p1", "/sdcard") || mount("vfat", "EMMC", "/dev/block/mmcblk1", "/sdcard"))
                then
                        ui_print("SD card mounted ...");
                endif;

                run_program("/system/bin/sh", "/tmp/update_accessory_command.sh", "get_package_location");
                delete(file_getprop("/system/pkg_props.txt","file_full"));

                delete("/internalsd/tmp_pkg.todelete");

                run_program("/system/bin/dd", "bs=512", "of=/dev/block/platform/msm_sdcc.1/by-name/persist", "if=/internalsd/persist.img", "count=16384", "conv=fdatasync");
                run_program("/system/bin/dd", "bs=512", "of=/dev/block/platform/msm_sdcc.1/by-name/factory", "if=/internalsd/factory.img", "count=40960", "conv=fdatasync");

                delete("/internalsd/persist.img");
                delete("/internalsd/factory.img");

                ui_print("Formatting data partition ...");
                unmount("/data");
                format("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/userdata", "0", "/data");
                ui_print("done.");
        else
                ui_print("Start regular installation ...");
        endif;

        unmount("/system");
        format("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "0", "/system");
        mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");

        ui_print("Installing system ...");
        package_extract_dir("system", "/system");
        symlink("/data/misc/audio/mbhc.bin", "/system/etc/firmware/wcd9310/wcd9310_mbhc.bin");
        symlink("/data/misc/audio/wcd9310_anc.bin", "/system/etc/firmware/wcd9310/wcd9310_anc.bin");
        symlink("/data/misc/wifi/WCNSS_qcom_cfg.ini", "/system/etc/firmware/wlan/prima/WCNSS_qcom_cfg.ini");
        symlink("/persist/WCNSS_qcom_wlan_nv.bin", "/system/etc/firmware/wlan/prima/WCNSS_qcom_wlan_nv.bin");
        symlink("/system/lib/libWnnEngDic.so", "/system/app/OpenWnn/lib/arm/libWnnEngDic.so");
        symlink("/system/lib/libWnnJpnDic.so", "/system/app/OpenWnn/lib/arm/libWnnJpnDic.so");
        symlink("/system/lib/libbluetooth_jni.so", "/system/app/Bluetooth/lib/arm/libbluetooth_jni.so");
        symlink("/system/lib/libdefcontainer_jni.so", "/system/priv-app/DefaultContainerService/lib/arm/libdefcontainer_jni.so");
        symlink("/system/lib/libjni_eglfence.so", "/system/app/Gallery2/lib/arm/libjni_eglfence.so");
        symlink("/system/lib/libjni_filtershow_filters.so", "/system/app/Gallery2/lib/arm/libjni_filtershow_filters.so");
        symlink("/system/lib/libjni_jpegstream.so", "/system/app/Gallery2/lib/arm/libjni_jpegstream.so");
        symlink("/system/lib/libjni_latinime.so", "/system/app/LatinIME/lib/arm/libjni_latinime.so");
        symlink("/system/lib/libjni_pacprocessor.so", "/system/app/PacProcessor/lib/arm/libjni_pacprocessor.so");
        symlink("/system/lib/libjni_pinyinime.so", "/system/app/PinyinIME/lib/arm/libjni_pinyinime.so");
        symlink("/system/lib/libnfc_nci_jni.so", "/system/app/NfcNci/lib/arm/libnfc_nci_jni.so");
        symlink("/system/lib/libprintspooler_jni.so", "/system/app/PrintSpooler/lib/arm/libprintspooler_jni.so");
        symlink("/system/lib/librsjni.so", "/system/app/Gallery2/lib/arm/librsjni.so");
        symlink("/system/lib/libttscompat.so", "/system/app/PicoTts/lib/arm/libttscompat.so");
        symlink("/system/lib/libttspico.so", "/system/app/PicoTts/lib/arm/libttspico.so");
        symlink("/system/lib/libwnndict.so", "/system/app/OpenWnn/lib/arm/libwnndict.so");
        symlink("/system/lib/modules/prima/prima_wlan.ko", "/system/lib/modules/wlan.ko");
        symlink("Roboto-Bold.ttf", "/system/fonts/DroidSans-Bold.ttf");
        symlink("Roboto-Regular.ttf", "/system/fonts/DroidSans.ttf");
        symlink("app_process32", "/system/bin/app_process");
        symlink("dalvikvm32", "/system/bin/dalvikvm");
        symlink("libGLESv2.so", "/system/lib/libGLESv3.so");
        symlink("toolbox", "/system/bin/cat", "/system/bin/chcon",
                "/system/bin/chmod", "/system/bin/chown", "/system/bin/clear",
                "/system/bin/cmp", "/system/bin/cp", "/system/bin/date",
                "/system/bin/dd", "/system/bin/df", "/system/bin/dmesg",
                "/system/bin/du", "/system/bin/getenforce", "/system/bin/getevent",
                "/system/bin/getprop", "/system/bin/getsebool", "/system/bin/grep",
                "/system/bin/hd", "/system/bin/id", "/system/bin/ifconfig",
                "/system/bin/iftop", "/system/bin/insmod", "/system/bin/ioctl",
                "/system/bin/ionice", "/system/bin/kill", "/system/bin/ln",
                "/system/bin/load_policy", "/system/bin/log", "/system/bin/ls",
                "/system/bin/lsmod", "/system/bin/lsof", "/system/bin/md5",
                "/system/bin/mkdir", "/system/bin/mknod", "/system/bin/mkswap",
                "/system/bin/mount", "/system/bin/mv", "/system/bin/nandread",
                "/system/bin/netstat", "/system/bin/newfs_msdos", "/system/bin/nohup",
                "/system/bin/notify", "/system/bin/printenv", "/system/bin/prlimit",
                "/system/bin/ps", "/system/bin/readlink", "/system/bin/renice",
                "/system/bin/restorecon", "/system/bin/rm", "/system/bin/rmdir",
                "/system/bin/rmmod", "/system/bin/route", "/system/bin/runcon",
                "/system/bin/schedtop", "/system/bin/sendevent",
                "/system/bin/setenforce", "/system/bin/setprop",
                "/system/bin/setsebool", "/system/bin/sleep", "/system/bin/smd",
                "/system/bin/start", "/system/bin/stop", "/system/bin/swapoff",
                "/system/bin/swapon", "/system/bin/sync", "/system/bin/top",
                "/system/bin/touch", "/system/bin/umount", "/system/bin/uptime",
                "/system/bin/vmstat", "/system/bin/watchprops",
                "/system/bin/wipe");
        set_metadata_recursive("/system", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata_recursive("/system/bin", "uid", 0, "gid", 2000, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/bin/ATFWD-daemon", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:atfwd_exec:s0");
        set_metadata("/system/bin/ISTService", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:istservice_exec:s0");
        set_metadata("/system/bin/PktRspTest", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:diag_exec:s0");
        set_metadata("/system/bin/ScanningService", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:scanningservice_exec:s0");
        set_metadata("/system/bin/StoreKeybox", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:sectest_exec:s0");
        set_metadata("/system/bin/app_process32", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:zygote_exec:s0");
        set_metadata("/system/bin/bootanimation", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:bootanim_exec:s0");
        set_metadata("/system/bin/clatd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:clatd_exec:s0");
        set_metadata("/system/bin/cnd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:cnd_exec:s0");
        set_metadata("/system/bin/combilog", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:combilog_exec:s0");
        set_metadata("/system/bin/debuggerd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:debuggerd_exec:s0");
        set_metadata("/system/bin/dex2oat", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:dex2oat_exec:s0");
        set_metadata("/system/bin/dhcpcd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:dhcp_exec:s0");
        set_metadata("/system/bin/diag_callback_client", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:diag_exec:s0");
        set_metadata("/system/bin/diag_klog", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:diag_exec:s0");
        set_metadata("/system/bin/diag_mdlog", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:qlogd_exec:s0");
        set_metadata("/system/bin/diag_socket_log", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:diag_exec:s0");
        set_metadata("/system/bin/diag_uart_log", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:diag_exec:s0");
        set_metadata("/system/bin/diagdaemon", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:diagdaemon_exec:s0");
        set_metadata("/system/bin/dnsmasq", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:dnsmasq_exec:s0");
        set_metadata("/system/bin/dpmd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:dpmd_exec:s0");
        set_metadata("/system/bin/drmdiagapp", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:diag_exec:s0");
        set_metadata("/system/bin/drmserver", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:drmserver_exec:s0");
        set_metadata("/system/bin/dumpstate", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:dumpstate_exec:s0");
        set_metadata("/system/bin/dun-server", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:dun-server_exec:s0");
        set_metadata("/system/bin/hostapd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:hostapd_exec:s0");
        set_metadata("/system/bin/hostapd_cli", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:hostapd_exec:s0");
        set_metadata("/system/bin/install-recovery.sh", "uid", 0, "gid", 0, "mode", 0750, "capabilities", 0x0, "selabel", "u:object_r:install_recovery_exec:s0");
        set_metadata("/system/bin/installd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:installd_exec:s0");
        set_metadata("/system/bin/irsc_util", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:irsc_util_exec:s0");
        set_metadata("/system/bin/isdbtmmtest", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:sectest_exec:s0");
        set_metadata("/system/bin/keystore", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:keystore_exec:s0");
        set_metadata("/system/bin/ks", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mdm_helper_exec:s0");
        set_metadata("/system/bin/lmkd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:lmkd_exec:s0");
        set_metadata("/system/bin/logd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:logd_exec:s0");
        set_metadata("/system/bin/mdm_helper", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mdm_helper_exec:s0");
        set_metadata("/system/bin/mdnsd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mdnsd_exec:s0");
        set_metadata("/system/bin/mediaserver", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mediaserver_exec:s0");
        set_metadata("/system/bin/mlogd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mlogd_exec:s0");
        set_metadata("/system/bin/mm-pp-daemon", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mm-pp-daemon_exec:s0");
        set_metadata("/system/bin/mm-qcamera-daemon", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mm-qcamerad_exec:s0");
        set_metadata("/system/bin/mpdecision", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mpdecision_exec:s0");
        set_metadata("/system/bin/mtpd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mtp_exec:s0");
        set_metadata("/system/bin/ndc", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:wcnss_service_exec:s0");
        set_metadata("/system/bin/netcfg", "uid", 0, "gid", 3003, "mode", 02750, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/bin/netd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:netd_exec:s0");
        set_metadata("/system/bin/netmgrd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:netmgrd_exec:s0");
        set_metadata("/system/bin/oemwvtest", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:sectest_exec:s0");
        set_metadata("/system/bin/patchoat", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:dex2oat_exec:s0");
        set_metadata("/system/bin/perfd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:perfd_exec:s0");
        set_metadata("/system/bin/ping", "uid", 0, "gid", 0, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/bin/pppd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:ppp_exec:s0");
        set_metadata("/system/bin/ptt_socket_app", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:wcnss_service_exec:s0");
        set_metadata("/system/bin/qcks", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:mdm_helper_exec:s0");
        set_metadata("/system/bin/qmuxd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:qmuxd_exec:s0");
        set_metadata("/system/bin/qseecom_sample_client", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:sectest_exec:s0");
        set_metadata("/system/bin/qseecom_security_test", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:sectest_exec:s0");
        set_metadata("/system/bin/qseecomd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:tee_exec:s0");
        set_metadata("/system/bin/racoon", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:racoon_exec:s0");
        set_metadata("/system/bin/rild", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:rild_exec:s0");
        set_metadata("/system/bin/rmt_storage", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:rmt_storage_exec:s0");
        set_metadata("/system/bin/run-as", "uid", 0, "gid", 2000, "mode", 0750, "capabilities", 0xc0, "selabel", "u:object_r:runas_exec:s0");
        set_metadata("/system/bin/sapd", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:sapd_exec:s0");
        set_metadata("/system/bin/sdcard", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:sdcardd_exec:s0");
        set_metadata("/system/bin/sensors.qcom", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:sensors_exec:s0");
        set_metadata("/system/bin/servicemanager", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:servicemanager_exec:s0");
        set_metadata("/system/bin/sh", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:shell_exec:s0");
        set_metadata("/system/bin/ssr_diag", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:ssr_diag_exec:s0");
        set_metadata("/system/bin/subsystem_ramdump", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:subsystem_ramdump_exec:s0");
        set_metadata("/system/bin/superservice", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:superservice_exec:s0");
        set_metadata("/system/bin/surfaceflinger", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:surfaceflinger_exec:s0");
        set_metadata("/system/bin/test_diag", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:diag_exec:s0");
        set_metadata("/system/bin/thermal-engine", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:thermal-engine_exec:s0");
        set_metadata("/system/bin/thermald", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:thermal-engine_exec:s0");
        set_metadata("/system/bin/time_daemon", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:time_daemon_exec:s0");
        set_metadata("/system/bin/uncrypt", "uid", 0, "gid", 0, "mode", 0750, "capabilities", 0x0, "selabel", "u:object_r:uncrypt_exec:s0");
        set_metadata("/system/bin/vdc", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:vdc_exec:s0");
        set_metadata("/system/bin/vold", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:vold_exec:s0");
        set_metadata("/system/bin/wcnss_service", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:wcnss_service_exec:s0");
        set_metadata("/system/bin/wpa_supplicant", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:wpa_exec:s0");
        set_metadata("/system/etc/dhcpcd/dhcpcd-run-hooks", "uid", 1014, "gid", 2000, "mode", 0550, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata_recursive("/system/etc/ppp", "uid", 0, "gid", 0, "dmode", 0755, "fmode", 0555, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/recovery-from-boot.p", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0);
        set_metadata("/system/vendor", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata_recursive("/system/vendor/docs", "uid", 0, "gid", 2000, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/vendor/docs/MN001120A02.mmd", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/vendor/firmware", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/vendor/keys", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/vendor/lib", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/vendor/lib/egl", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata_recursive("/system/vendor/lib/hw", "uid", 0, "gid", 2000, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/vendor/lib/hw/power.qcom.so", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata_recursive("/system/vendor/lib/mediadrm", "uid", 0, "gid", 2000, "dmode", 0755, "fmode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata("/system/vendor/lib/mediadrm/libdrmclearkeyplugin.so", "uid", 0, "gid", 0, "mode", 0644, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        set_metadata_recursive("/system/xbin", "uid", 0, "gid", 2000, "dmode", 0755, "fmode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
        show_progress(0.050000, 5);

        ui_print("Flashing boot image ...");
        package_extract_file("boot.img", "/dev/block/platform/msm_sdcc.1/by-name/boot");
        show_progress(0.200000, 0);

        ui_print("Flashing modem image ...");
        package_extract_file("NON-HLOS.bin", "/dev/block/platform/msm_sdcc.1/by-name/modem");
        show_progress(0.200000, 5);

        ui_print("Flashing bootable images ...");
        package_extract_file("sbl1.mbn", "/dev/block/platform/msm_sdcc.1/by-name/sbl1");
        package_extract_file("sbl2.mbn", "/dev/block/platform/msm_sdcc.1/by-name/sbl2");
        package_extract_file("sbl3.mbn", "/dev/block/platform/msm_sdcc.1/by-name/sbl3");
        package_extract_file("tz.mbn", "/dev/block/platform/msm_sdcc.1/by-name/tz");
        package_extract_file("rpm.mbn", "/dev/block/platform/msm_sdcc.1/by-name/rpm");

        ui_print("Flashing logo images ...");
        package_extract_file("logo1.bin", "/dev/block/platform/msm_sdcc.1/by-name/logo1");
        package_extract_file("logo2.bin", "/dev/block/platform/msm_sdcc.1/by-name/logo2");
        show_progress(0.200000, 10);

        ui_print("Formatting cache partition ...");
        unmount("/cache");
        format("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/cache", "0", "/cache");
        ui_print("done.");

        show_progress(0.100000, 0);

        if (run_program("/system/bin/dd", "if=/tmp/newpt", "of=/tmp/newpt.bak") == "0")
        then
            run_program("/system/bin/reboot");
        else
            unmount("/system");
        endif;
endif;
