SETStatus () { # ServerStatus -> Show CPU/Memory/Disk IO usage for each SET (parallel)
    local REMOTE_CMD='source ~/.gamerc
H=$(hostname -s 2>/dev/null || hostname)
LOAD=$(cut -d" " -f1 /proc/loadavg)
NCPU=$(nproc 2>/dev/null || grep -c ^processor /proc/cpuinfo)
read -r _ MTOT MUSE MFRE _ <<< "$(free -m | grep "^Mem:")"
[ "${MTOT:-0}" -gt 0 ] && MPCT=$(( ${MUSE:-0}*100/$MTOT )) || MPCT=0
DEV=$(df ${WORKING_DIRECTORY:-.} 2>/dev/null | awk "NR==2{gsub(/.*\//,\"\",\$1);gsub(/[0-9]+$/,\"\",\$1);print \$1}")
[ -z "$DEV" ] && DEV=$(ls /sys/block/ 2>/dev/null | grep -Ev "loop|sr|dm" | head -1)
R1=$(awk "\$3==\"$DEV\"{print \$6}" /proc/diskstats 2>/dev/null)
W1=$(awk "\$3==\"$DEV\"{print \$10}" /proc/diskstats 2>/dev/null)
sleep 1
R2=$(awk "\$3==\"$DEV\"{print \$6}" /proc/diskstats 2>/dev/null)
W2=$(awk "\$3==\"$DEV\"{print \$10}" /proc/diskstats 2>/dev/null)
RKB=$(( (${R2:-0}-${R1:-0})*512/1024 ))
WKB=$(( (${W2:-0}-${W1:-0})*512/1024 ))
printf "%-14s  Load:%-6s(%d cpu)  Mem:%4d/%4d MB(%2d%%)  IO R:%4d W:%4d KB/s\n" \
    "$H" "$LOAD" "$NCPU" "$MUSE" "$MTOT" "$MPCT" "$RKB" "$WKB"'

    local SET_NUMS
    SET_NUMS=$(grep -v "^#" /etc/hosts | grep -oE "\bMS[0-9]+" | grep -oE "[0-9]+" | sort -u)
    [ -z "$SET_NUMS" ] && { echo "No SET found in /etc/hosts" | colorize red black; return; }

    for N in $SET_NUMS; do
        echo "=== SET $N ===" | colorize cyan black
        sendscript set${N} -p nosave nohostname <<< "$REMOTE_CMD"
        echo
    done
}


NEW_CDN_client_rollback () { # Maintenance -> rollback client to previous version
	SYNC2LIVE_DIRECTORY="$HOME/www/${GAME_TYPE}-TEST_SYNCTOLIVE"
	CHECK_FILE="Setup.txt"

	rsync -av --delete --progress CTRL:~/www/CDN/${GAME_TYPE}-LIVE_previous_version/NEWSYSTEM/ ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/

	OLD_NFSExtension=$(cat ${SYNC2LIVE_DIRECTORY}/${CHECK_FILE} | egrep -a 'NFSExtension' | sed 's/NFSExtension=//')
	echo "Previous NFSExtension: ${OLD_NFSExtension}"

	YEAR=$(date +"%y")
	# Check Cross New Year or not ( 9999 times quota / year )
	if eval [[ ${OLD_NFSExtension} == "\.${YEAR}*" ]]; then
		OLD_NFSEx_NUM=$(echo ${OLD_NFSExtension} | sed "s/\.//;s/^${YEAR}0*//")
		echo "OLD_NFSEx_NUM: ${OLD_NFSEx_NUM}"
		let NEW_NFSEx_NUM=${OLD_NFSEx_NUM}+2
		NEW_NFSExtension=$(printf ".${YEAR}%04d" ${NEW_NFSEx_NUM})
	else
		NEW_NFSExtension=".${YEAR}0001"
	fi

	sed -i "s/NFSExtension=${OLD_NFSExtension}/NFSExtension=${NEW_NFSExtension}/" ${SYNC2LIVE_DIRECTORY}/${CHECK_FILE}
	echo "New NFSExtension: ${NEW_NFSExtension}"

	cd ${SYNC2LIVE_DIRECTORY}
	mv FileList.txt${OLD_NFSExtension} FileList.txt${NEW_NFSExtension}
	mv FileListPC.txt${OLD_NFSExtension} FileListPC.txt${NEW_NFSExtension}
	if [ "$GAME_TYPE" == "M12" ] ; then
	    for translate_file in $(ls GameDataTranslateFileList_*.txt${OLD_NFSExtension}); do
		empty_translate_file=$(echo ${translate_file} | sed "s/${OLD_NFSExtension}//")
	        mv ${translate_file} ${empty_translate_file}
		mv ${empty_translate_file} ${empty_translate_file}${NEW_NFSExtension}
	    done

	    mv ImageFileList.txt${OLD_NFSExtension} ImageFileList.txt${NEW_NFSExtension}
	else
	    mv GameDataTranslateFileList.txt${OLD_NFSExtension} GameDataTranslateFileList.txt${NEW_NFSExtension}
	fi
	find Android -type f -print0 | while read -d $'\0' f; do mv -- "$f" "${f%${OLD_NFSExtension}}${NEW_NFSExtension}"; done
}

NEW_CDN_prepatch_sync () { # Maintenance -> sync client or translate data to prepatch directory and flush CDN ( New Patch System: CLIENT (nobackup) / TRANSLATE (nobackup) / SETUP (nobackup) / FORCESYNC (nobackup) / INGAME (nobackup) )
    [ "$ARG2" == "" ] && exec echo "Usage: $0 NEW_CDN_prepatch_sync <CLIENT or TRANSLATE or SETUP or FORCESYNC or INGAME>"

    CHECK_TRANSLATE=$($HOME/bin/check_translate_file_count_ret)
    if [ "${CHECK_TRANSLATE}" == "0" ]; then
	exec send_messages ERROR check_translate_file_count "翻譯檔清單 檔案數目異常 請確認"
    fi

    DATETIME="$(/bin/date +%Y%m%dT%H%M)"
    CDN_DIFF_FILE="$HOME/patch/cdn_diff_new.txt.$DATETIME"
    CDN_DIFF_FILE_TOTAL_COUNT_FILE="$HOME/patch/cdn_diff_count_new.$DATETIME"
    RSYNC_ERROR_LOG="/tmp/rsync_cdn_prepatch_sync_monitor.log"
    MACHINE_HOSTNAME="$(echo $HOST_NAME)"

    [ -f "${RSYNC_ERROR_LOG}" ] && rm -rf ${RSYNC_ERROR_LOG}

    if [ "$MACHINE_HOSTNAME" == "TEST" ]; then
	rm -rf /tmp/Setup.txt.old
    	cp -arf ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/Setup.txt /tmp/Setup.txt.old
    elif [ "$MACHINE_HOSTNAME" == "CTRL" ]; then
	rm -rf /tmp/Setup.txt.old
    	cp -arf ~/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM/Setup.txt /tmp/Setup.txt.old
    fi

    if [ "$MACHINE_HOSTNAME" == "TEST" ]; then
        if [ "$ARG2" == "CLIENT" ]; then
            C_PART="全部"
            send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

            rename_client_extension
        elif [ "$ARG2" == "TRANSLATE" ]; then
	    if [ "$ARG3" == "nobackup" ]; then
                C_PART="翻譯 全語系"
                send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

                rename_translate_extension
	    else
                C_PART="翻譯 $ARG3"
                send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

		rename_translate_extension $ARG3
	    fi
        elif [ "$ARG2" == "SETUP" ]; then
            C_PART="SETUP"
            send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

            norename_setup_update
	elif [ "$ARG2" == "FORCESYNC" ]; then
             C_PART="全部 強制重新刷新"
             send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

             OLD_VERSION=$(cat /tmp/Setup.txt.old |  grep -a NFSExtension | sed 's/NFSExtension=//')
             rm -rf ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/FileList.txt${OLD_VERSION}
             touch ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/FileList.txt${OLD_VERSION}
             rename_client_extension
	elif [ "$ARG2" == "INGAME" ]; then
             C_PART="遊戲版本"
             send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"
              
             if [ "$ARG3" == "nobackup" ]; then
                 exec echo "ERROR: Wrong parameter 2 ( Client Patch Version )"
             else
                 rename_ingame_extension $ARG3
             fi
        else
            exec echo "ERROR: Wrong parameter 2 (Only accept for CLIENT or TRANSLATE or SETUP or FORCESYNC or INGAME)"
        fi

	if [ ! -f "/tmp/Setup.txt.old" ]; then
		ssh CTRL "if [ ! -d "~/www/CDN/${GAME_TYPE}-LIVE_previous_version/" ]; then mkdir -p ~/www/CDN/${GAME_TYPE}-LIVE_previous_version/; fi"
		if test -z $CLIENT_PATCH_NFS_START; then
			DIRECTORY_NEWNUM=$(cat ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/Setup.txt | egrep -a 'NFSExtension' | sed "s/NFSExtension=//;s/.//")
		else
			DIRECTORY_NEWNUM="${CLIENT_PATCH_NFS_START}"
		fi
	else
		rsync -i -avn --exclude="nfs" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/ CTRL:~/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\/NEWSYSTEM\//g' > $CDN_DIFF_FILE
        	[ "$(wc -l < $CDN_DIFF_FILE)" -eq "0" ] && exec echo "ERROR: No file to flush or cannot compare with prepatch directory, please try again."
        
		if [ "$ARG3" == "nobackup" -o "$ARG4" == "nobackup" ]; then
			echo "INFO: No Backup prepatch" | colorize red black
		else
			DIRNAME=$(ssh CTRL "readlink -f ~/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM" | awk -F'/' '{print $NF}')
			ssh CTRL "cd ~/www/CDN/${GAME_TYPE}-LIVE_previous_version/; unlink NEWSYSTEM; ln -s ../${GAME_TYPE}-LIVE/${DIRNAME} NEWSYSTEM"
		fi

		DIRECTORY_OLDNUM=$(cat /tmp/Setup.txt.old | egrep -a 'NFSExtension' | sed "s/NFSExtension=//;s/.//")
        	DIRECTORY_NEWNUM=$(cat ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/Setup.txt |  egrep -a 'NFSExtension' | sed "s/NFSExtension=//;s/.//")
	fi

        ssh CTRL "if [ ! -d \"${HOME}/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM.${DIRECTORY_NEWNUM}\" ]; then mkdir -p ${HOME}/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM.${DIRECTORY_NEWNUM}; fi"
        rsync -av --timeout=60 --delete --progress ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/ CTRL:~/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM.${DIRECTORY_NEWNUM}/ 2> ${RSYNC_ERROR_LOG}
	if [[ -s "${RSYNC_ERROR_LOG}" ]]; then
		send_messages ERROR rsync_cdn_prepatch_sync "Client Patch Rsync ${C_PART} 同步異常"
	else
                send_chatbot_text_only "系統腳本" "Client Patch Rsync ${C_PART} 同步正常"
	fi
        if [ "$ARG2" == "CLIENT" ] || [ "$ARG2" == "TRANSLATE" ] || [ "$ARG2" == "FORCESYNC" ] || [ "$ARG2" == "INGAME" ] ; then
		ssh CTRL "if [ ! -d \"${HOME}/www/CDN/${GAME_TYPE}-LIVE/patch\" ]; then mkdir -p ${HOME}/www/CDN/${GAME_TYPE}-LIVE/patch; fi"
		for FILE in ${CLIENT_PATCH_FILENAME_LISTS}; do
			FILE_CHECK=$(ssh CTRL "cd ~/www/CDN/${GAME_TYPE}-LIVE/patch/; if [ -f \"${FILE}\" ]; then echo 1; else echo 0; fi")
			if [ "${FILE_CHECK}" -eq 0 ]; then
				ssh CTRL "cd ~/www/CDN/${GAME_TYPE}-LIVE/patch/; echo \"default=http://${CLIENT_PATCH_DOMAIN_NAME}/NEWSYSTEM.${DIRECTORY_NEWNUM}/\" > ${FILE}"
			fi
		done

		if test -z ${DIRECTORY_OLDNUM}; then
			ssh CTRL "cd ~/www/CDN/${GAME_TYPE}-LIVE/; ln -s NEWSYSTEM.${DIRECTORY_NEWNUM} NEWSYSTEM"
		else
            for FILE in ${CLIENT_PATCH_FILENAME_LISTS}; do
                ssh CTRL "cd ~/www/CDN/${GAME_TYPE}-LIVE/patch/; sed -i -r \"s|NEWSYSTEM.${DIRECTORY_OLDNUM}|NEWSYSTEM.${DIRECTORY_NEWNUM}|\" ${FILE}"
            done  
			#ssh CTRL "cd ~/www/CDN/${GAME_TYPE}-LIVE/patch/; sed -i -r \"s|NEWSYSTEM.${DIRECTORY_OLDNUM}|NEWSYSTEM.${DIRECTORY_NEWNUM}|\" ${GAME_TYPE,,}_${COUNTRY_CODE,,}*.txt"
                	ssh CTRL "cd ~/www/CDN/${GAME_TYPE}-LIVE/; unlink NEWSYSTEM; ln -s NEWSYSTEM.${DIRECTORY_NEWNUM} NEWSYSTEM"
		fi
        fi

        cat $HOME/patch/flush_all.txt > $HOME/patch/tmp1_new
        php $HOME/patch/flush.php $HOME/patch/tmp1_new
        send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步完成"

    elif [ "$MACHINE_HOSTNAME" == "CTRL" ]; then
        if [ "$ARG2" == "CLIENT" ]; then
            C_PART="全部"
            send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

            ssh TEST "rename_client_extension"
        elif [ "$ARG2" == "TRANSLATE" ]; then
	    if [ "$ARG3" == "nobackup" ]; then
                C_PART="翻譯 全語系"
                send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

                ssh TEST "rename_translate_extension"
	    else
                C_PART="翻譯 $ARG3"
                send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

                ssh TEST "rename_translate_extension $ARG3"
	    fi
        elif [ "$ARG2" == "SETUP" ]; then
            C_PART="SETUP"
            send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

            ssh TEST "norename_setup_update"
	elif [ "$ARG2" == "FORCESYNC" ]; then
            C_PART="全部 強制重新刷新"
            send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

            OLD_VERSION=$(ssh TEST "cat /tmp/Setup.txt.old |  grep -a NFSExtension | sed 's/NFSExtension=//'")
            ssh TEST "rm -rf ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/FileList.txt${OLD_VERSION}"
            ssh TEST "touch ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/FileList.txt${OLD_VERSION}"
            ssh TEST "rename_client_extension"
	elif [ "$ARG2" == "INGAME" ]; then
                C_PART="遊戲版本"
                send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步開始"

		if [ "$ARG3" == "nobackup" ]; then
			exec echo "ERROR: Wrong parameter 2 ( Client Patch Version )"
		else
			ssh TEST "rename_ingame_extension $ARG3"
		fi
        else
            exec echo "ERROR: Wrong parameter 2 (Only accept for CLIENT or TRANSLATE or SETUP or FORCESYNC or INGAME)"
        fi

	if [ ! -f "/tmp/Setup.txt.old" ]; then
		if [ ! -d "~/www/CDN/${GAME_TYPE}-LIVE_previous_version/" ]; then mkdir -p ~/www/CDN/${GAME_TYPE}-LIVE_previous_version/; fi
		if test -z $CLIENT_PATCH_NFS_START; then
			DIRECTORY_NEWNUM=$(ssh TEST "cat ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/Setup.txt | egrep -a 'NFSExtension' | sed \"s/NFSExtension=//;s/.//\"")
		else
			DIRECTORY_NEWNUM="${CLIENT_PATCH_NFS_START}"
		fi
	else
		ssh TEST "rsync -i -avn --exclude=\"nfs\" --out-format=\"FILE:%n\" ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/ CTRL:~/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM/ |  grep -a \"^FILE:\" |  grep -a -v \"/$\" | sed 's/^FILE:/\/NEWSYSTEM\//g' > $CDN_DIFF_FILE"
		ssh TEST "wc -l < $CDN_DIFF_FILE > $CDN_DIFF_FILE_TOTAL_COUNT_FILE"
		CDN_DIFF_FILE_TOTAL_COUNT=$(ssh TEST "cat $CDN_DIFF_FILE_TOTAL_COUNT_FILE")
		[ "$CDN_DIFF_FILE_TOTAL_COUNT" -eq "0" ] && exec echo "ERROR: No file to flush or cannot compare with prepatch directory, please try again."

		if [ "$ARG3" == "nobackup" -o "$ARG4" == "nobackup" ]; then
			echo "INFO: No Backup prepatch" | colorize red black
		else
			DIRNAME=$(readlink -f ~/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM | awk -F'/' '{print $NF}')
			cd ~/www/CDN/${GAME_TYPE}-LIVE_previous_version/; unlink NEWSYSTEM; ln -s ../${GAME_TYPE}-LIVE/${DIRNAME} NEWSYSTEM
		fi	

		DIRECTORY_OLDNUM=$(cat /tmp/Setup.txt.old | egrep -a 'NFSExtension' | sed "s/NFSExtension=//;s/.//")
		DIRECTORY_NEWNUM=$(ssh TEST "cat ~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/Setup.txt | egrep -a 'NFSExtension' | sed \"s/NFSExtension=//;s/.//\"")
	fi

        if [ ! -d "${HOME}/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM.${DIRECTORY_NEWNUM}" ]; then mkdir -p ${HOME}/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM.${DIRECTORY_NEWNUM}; fi
        rsync -av --timeout=60 --delete --progress TEST:~/www/${GAME_TYPE}-TEST_SYNCTOLIVE/ ~/www/CDN/${GAME_TYPE}-LIVE/NEWSYSTEM.${DIRECTORY_NEWNUM}/ 2> ${RSYNC_ERROR_LOG}
	if [[ -s "${RSYNC_ERROR_LOG}" ]]; then
		send_messages ERROR rsync_cdn_prepatch_sync "Client Patch Rsync ${C_PART} 同步異常"
	else
                send_chatbot_text_only "系統腳本" "Client Patch Rsync ${C_PART} 同步正常"
	fi
        if [ "$ARG2" == "CLIENT" ] || [ "$ARG2" == "TRANSLATE" ] || [ "$ARG2" == "FORCESYNC" ] || [ "$ARG2" == "INGAME" ] ; then
		if [ ! -d "${HOME}/www/CDN/${GAME_TYPE}-LIVE/patch" ]; then mkdir -p ${HOME}/www/CDN/${GAME_TYPE}-LIVE/patch; fi
		for FILE in ${CLIENT_PATCH_FILENAME_LISTS}; do
			FILE_CHECK=$(cd ~/www/CDN/${GAME_TYPE}-LIVE/patch/; if [ -f "${FILE}" ]; then echo 1; else echo 0; fi)
			if [ "${FILE_CHECK}" -eq 0 ]; then
				cd ~/www/CDN/${GAME_TYPE}-LIVE/patch/; echo "default=http://${CLIENT_PATCH_DOMAIN_NAME}/NEWSYSTEM.${DIRECTORY_NEWNUM}/" > ${FILE}
			fi
		done

		if test -z ${DIRECTORY_OLDNUM}; then
                	cd ~/www/CDN/${GAME_TYPE}-LIVE/; ln -s NEWSYSTEM.${DIRECTORY_NEWNUM} NEWSYSTEM
		else
            for FILE in ${CLIENT_PATCH_FILENAME_LISTS}; do
                 cd ~/www/CDN/${GAME_TYPE}-LIVE/patch/; sed -i -r "s|NEWSYSTEM.${DIRECTORY_OLDNUM}|NEWSYSTEM.${DIRECTORY_NEWNUM}|" ${FILE}
            done
			#cd ~/www/CDN/${GAME_TYPE}-LIVE/patch/; sed -i -r "s|NEWSYSTEM.${DIRECTORY_OLDNUM}|NEWSYSTEM.${DIRECTORY_NEWNUM}|" ${GAME_TYPE,,}_${COUNTRY_CODE,,}*.txt
                	cd ~/www/CDN/${GAME_TYPE}-LIVE/; unlink NEWSYSTEM; ln -s NEWSYSTEM.${DIRECTORY_NEWNUM} NEWSYSTEM
		fi
        fi

        ssh TEST "cat $HOME/patch/flush_all.txt > ~/patch/tmp1_new"
        ssh TEST "cd $HOME/patch; php ~/patch/flush.php ~/patch/tmp1_new"
        send_chatbot_text_only "系統腳本" "Client ${C_PART} 同步完成"
    fi
}

### Game Server Status ###
android_status () { # Submit -> Check Status of GOOGLE-SUBMIT all servers
	ssh GOOGLE-SUBMIT "pl"
}

ios_status () { # Submit -> Check Status of APPLE-SUBMIT all servers
	ssh APPLE-SUBMIT "pl"
}

submit_status () { # Submit -> Check Status SUBMIT all servers
	ssh SUBMIT "pl"
}

data_status () { # Data -> Check Status DATA all servers
	ssh DATA "pl"
}

time1_status () { # Time1 -> Check Status TIME1 all servers
	ssh TIME1 "pl"
}

media_status () { # Media -> Check Status MEDIA all servers
	ssh MEDIA "pl"
}

mapping_status () { # Mapping -> Check Status MAPPING all servers
	ssh MAPPING "pl"
}


### Game Server Start ###
android_start () { # Submit -> Start GOOGLE-SUBMIT all servers
	ssh GOOGLE-SUBMIT "SKServer start all"
}

ios_start () { # Submit -> Start APPLE-SUBMIT all servers
	ssh APPLE-SUBMIT "SKServer start all"
}

submit_start () { # Submit -> Start SUBMIT all servers
	ssh SUBMIT "SKServer start all"
	#sleep 20
	#ssh SUBMIT2 "SKServer start MissionServer2 WorldServer201 WorldServer202 ZoneServer201 ZoneServer202"
	#sleep 10
	#ssh SUBMIT3 "SKServer start MissionServer23 WorldServer2301 ZoneServer2301"
}

data_start () { # Data -> Start DATA all servers
	ssh DATA "SKServer start all"
}

time1_start () { # Time1 -> Start TIME1 all servers
	ssh TIME1 "SKServer start all"
}

media_start () { # Media -> Start MEDIA all servers
	ssh MEDIA "SKServer start all"
}

mapping_start () { # Mapping -> Start MAPPING all servers
	ssh MAPPING "SKServer start all"
}


### Game Server Stop ###
android_stop () { # Submit -> Stop GOOGLE-SUBMIT all servers
	ssh GOOGLE-SUBMIT "SKServer stop all"
}

ios_stop () { # Submit -> Stop APPLE-SUBMIT all servers
	ssh APPLE-SUBMIT "SKServer stop all"
}

submit_stop () { # Submit -> Stop SUBMIT all servers
	#ssh SUBMIT3 "SKServer stop ZoneServer2301 WorldServer2301 MissionServer23"
	#ssh SUBMIT2 "SKServer stop ZoneServer202 ZoneServer201 WorldServer202 WorldServer201 MissionServer2"
	ssh SUBMIT "SKServer stop all"
}

data_stop () { # Data -> Stop DATA all servers
	ssh DATA "SKServer stop all"
}

time1_stop () { # Time1 -> Stop TIME1 all servers
	ssh TIME1 "SKServer stop all"
}

media_stop () { # Media -> Stop MEDIA all servers
	ssh MEDIA "SKServer stop all"
}

mapping_stop () { # Mapping -> Stop MAPPING all servers
	ssh MAPPING "SKServer stop all"
}


### Game Server ReStart ###
android_restart () { # Submit -> ReStart GOOGLE-SUBMIT all servers
	ssh GOOGLE-SUBMIT "SKServer stop all; SKServer start all"
}

ios_restart () { # Submit -> ReStart APPLE-SUBMIT all servers
	ssh APPLE-SUBMIT "SKServer stop all; SKServer start all"
}

submit_restart () { # Submit -> ReStart SUBMIT all servers
	ssh SUBMIT "SKServer stop all; SKServer start all"
	#sleep 30
	#ssh SUBMIT2 "SKServer stop ZoneServer202 ZoneServer201 WorldServer202 WorldServer201 MissionServer2; SKServer start MissionServer2 WorldServer201 WorldServer202 ZoneServer201 ZoneServer202"
	#sleep 10
	#ssh SUBMIT3 "SKServer stop ZoneServer2301 WorldServer2301 MissionServer23; SKServer start MissionServer23 WorldServer2301 ZoneServer2301"
}

data_restart () { # Data -> ReStart DATA all servers
	ssh DATA "SKServer stop all; SKServer start all"
}

time1_restart () { # Time1 -> ReStart TIME1 all servers
	ssh TIME1 "SKServer stop all; SKServer start all"
}

media_restart () { # Media -> ReStart MEDIA all servers
	ssh MEDIA "SKServer stop all; SKServer start all"
}

mapping_restart () { # Mapping -> ReStart MAPPING all servers
	ssh MAPPING "SKServer stop all; SKServer start all"
}


### Game Server DBbackup ###
android_dbbackup () { # Submit -> Backup GOOGLE-SUBMIT Database
	ssh GOOGLE-SUBMIT "TestCtrl dbbackup"
}

ios_dbbackup () { # Submit -> Backup APPLE-SUBMIT Database
	ssh APPLE-SUBMIT "TestCtrl dbbackup"
}

submit_dbbackup () { # Submit -> Backup SUBMIT Database
	ssh SUBMIT "TestCtrl dbbackup"
	ssh SUBMIT "DBbackup ${GAME_DB_NAME}${CROSS_ROUTER_SID_TEST}"
	#ssh SUBMIT2 "DBbackup ${GAME_TYPE}DB2"
	#ssh SUBMIT3 "DBbackup ${GAME_TYPE}DB23"
        if [ "$ENABLE_SOCIETY" == "1" ]; then
              ssh SUBMIT "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-TEST/db/db_society_alter"
              ssh SUBMIT "cd common-TEST/db;perl db_society_alter :${GAME_TYPE}Society"
        fi
}

data_dbbackup () { # Data -> Backup DATA Database
	ssh DATA "TestCtrl dbbackup"
	ssh DATA "DBbackup ${GAME_DB_NAME}${CROSS_ROUTER_SID_TEST}"
        if [ "$ENABLE_SOCIETY" == "1" ]; then
              ssh DATA "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-TEST/db/db_society_alter"
              ssh DATA "cd common-TEST/db;perl db_society_alter :${GAME_TYPE}Society"
        fi
}

time1_dbbackup () { # Time1 -> Backup TIME1 Database
	ssh TIME1 "TestCtrl dbbackup"
}

media_dbbackup () { # Media -> Backup MEDIA Database
	ssh MEDIA "TestCtrl dbbackup"
}

mapping_dbbackup () { # Mapping -> Backup MAPPING Database
	ssh MAPPING "TestCtrl dbbackup"
	#ssh MAPPING "DBbackup ${GAME_DB_NAME}${CROSS_ROUTER_SID_TEST}"
        if [ "$ENABLE_SOCIETY" == "1" ]; then
              ssh MAPPING "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-TEST/db/db_society_alter"
              ssh MAPPING "cd common-TEST/db;perl db_society_alter :${GAME_TYPE}Society"
        fi
}


### Game Server Sync ###
android_sync () { # Submit -> Sync test to GOOGLE-SUBMIT (argument: "server", "client")
   DATETIME="$(/bin/date +%Y%m%dT%H%M)"
   # Server only
   if  grep -a -qi "server" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/submit_sync/android" ] && mkdir -p $HOME/submit_sync/android
        cd $HOME/submit_sync/android/
	SERVER_DIFF_FILE="$HOME/submit_sync/android/server_diff.txt.$DATETIME"
   	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ GOOGLE-SUBMIT:~/common-GOOGLE-SUBMIT/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	[ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ] && exec echo "ERROR: No server file need to sync to GOOGLE-SUBMIT"
	ssh GOOGLE-SUBMIT "rsync -av --progress ~/common-GOOGLE-SUBMIT/ ~/common-GOOGLE-SUBMIT_previous/"
   	rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. GOOGLE-SUBMIT:~/common-GOOGLE-SUBMIT/
   # Client only
   elif  grep -a -qi "client" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/submit_sync/android" ] && mkdir -p $HOME/submit_sync/android
        cd $HOME/submit_sync/android/
	CLIENT_DIFF_FILE="$HOME/submit_sync/android/client_diff.txt.$DATETIME"
   	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ GOOGLE-SUBMIT:~/www/${GAME_TYPE}-GOOGLE-SUBMIT/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	[ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ] && exec echo "ERROR: No client file need to sync to GOOGLE-SUBMIT"
	ssh GOOGLE-SUBMIT "rsync -av --progress ~/www/${GAME_TYPE}-GOOGLE-SUBMIT/ ~/www/${GAME_TYPE}-GOOGLE-SUBMIT_previous/"
   	rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ GOOGLE-SUBMIT:~/www/${GAME_TYPE}-GOOGLE-SUBMIT/
   # Both Server and Client
   else
	[ ! -d "$HOME/submit_sync/android" ] && mkdir -p $HOME/submit_sync/android
        cd $HOME/submit_sync/android/
	SERVER_DIFF_FILE="$HOME/submit_sync/android/server_diff.txt.$DATETIME"
   	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ GOOGLE-SUBMIT:~/common-GOOGLE-SUBMIT/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	if [ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No server file need to sync to GOOGLE-SUBMIT"
	else
		ssh GOOGLE-SUBMIT "rsync -av --progress ~/common-GOOGLE-SUBMIT/ ~/common-GOOGLE-SUBMIT_previous/"
		rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. GOOGLE-SUBMIT:~/common-GOOGLE-SUBMIT/
	fi

        cd $HOME/submit_sync/android/
	CLIENT_DIFF_FILE="$HOME/submit_sync/android/client_diff.txt.$DATETIME"
   	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ GOOGLE-SUBMIT:~/www/${GAME_TYPE}-GOOGLE-SUBMIT/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	if [ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No client file need to sync to GOOGLE-SUBMIT"
	else
		ssh GOOGLE-SUBMIT "rsync -av --progress ~/www/${GAME_TYPE}-GOOGLE-SUBMIT/ ~/www/${GAME_TYPE}-GOOGLE-SUBMIT_previous/"
		rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ GOOGLE-SUBMIT:~/www/${GAME_TYPE}-GOOGLE-SUBMIT/
	fi
   fi
}

ios_sync () { # Submit -> Sync test to APPLE-SUBMIT (argument: "server", "client")
   DATETIME="$(/bin/date +%Y%m%dT%H%M)"
   # Server only
   if  grep -a -qi "server" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/submit_sync/ios" ] && mkdir -p $HOME/submit_sync/ios
	cd $HOME/submit_sync/ios/
	SERVER_DIFF_FILE="$HOME/submit_sync/ios/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ APPLE-SUBMIT:~/common-APPLE-SUBMIT/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	[ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ] && exec echo "ERROR: No server file need to sync to APPLE-SUBMIT"
	ssh APPLE-SUBMIT "rsync -av --progress ~/common-APPLE-SUBMIT/ ~/common-APPLE-SUBMIT_previous/"
   	rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. APPLE-SUBMIT:~/common-APPLE-SUBMIT/
   # Client only
   elif  grep -a -qi "server" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/submit_sync/ios" ] && mkdir -p $HOME/submit_sync/ios
	cd $HOME/submit_sync/ios/
	CLIENT_DIFF_FILE="$HOME/submit_sync/ios/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ APPLE-SUBMIT:~/www/${GAME_TYPE}-APPLE-SUBMIT/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	[ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ] && exec echo "ERROR: No client file need to sync to APPLE-SUBMIT"
	ssh APPLE-SUBMIT "rsync -av --progress ~/www/${GAME_TYPE}-APPLE-SUBMIT/ ~/www/${GAME_TYPE}-APPLE-SUBMIT_previous/"
   	rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ APPLE-SUBMIT:~/www/${GAME_TYPE}-APPLE-SUBMIT/
   else
   # Both Server and Client
	[ ! -d "$HOME/submit_sync/ios" ] && mkdir -p $HOME/submit_sync/ios
	cd $HOME/submit_sync/ios/
	SERVER_DIFF_FILE="$HOME/submit_sync/ios/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ APPLE-SUBMIT:~/common-APPLE-SUBMIT/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	if [ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No server file need to sync to APPLE-SUBMIT"
	else
		ssh APPLE-SUBMIT "rsync -av --progress ~/common-APPLE-SUBMIT/ ~/common-APPLE-SUBMIT_previous/"
		rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. APPLE-SUBMIT:~/common-APPLE-SUBMIT/
	fi

	cd $HOME/submit_sync/ios/
	CLIENT_DIFF_FILE="$HOME/submit_sync/ios/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ APPLE-SUBMIT:~/www/${GAME_TYPE}-APPLE-SUBMIT/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	if [ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No client file need to sync to APPLE-SUBMIT"
	else
		ssh APPLE-SUBMIT "rsync -av --progress ~/www/${GAME_TYPE}-APPLE-SUBMIT/ ~/www/${GAME_TYPE}-APPLE-SUBMIT_previous/"
		rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ APPLE-SUBMIT:~/www/${GAME_TYPE}-APPLE-SUBMIT/
	fi
   fi
}

submit_sync () { # Submit -> Sync test to SUBMIT (argument: "server", "client")
   DATETIME="$(/bin/date +%Y%m%dT%H%M)"
   # Server only
   if  grep -a -qi "server" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/submit_sync/submit" ] && mkdir -p $HOME/submit_sync/submit
	cd $HOME/submit_sync/submit/
	SERVER_DIFF_FILE="$HOME/submit_sync/submit/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ SUBMIT:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	[ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ] && exec echo "ERROR: No server file need to sync to SUBMIT"
	ssh SUBMIT "rsync -av --progress ~/common-TEST/ ~/common-SUBMIT_previous/"
   	rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. SUBMIT:~/common-TEST/
	ssh SUBMIT "sed -i 's/AllGM=1/AllGM=0/' ~/common-TEST/bin/config.ini"
	#ssh SUBMIT2 "rsync -av --progress ~/common-SUBMIT/ ~/common-SUBMIT_previous/"
   	#rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. SUBMIT2:~/common-SUBMIT/
	#ssh SUBMIT3 "rsync -av --progress ~/common-SUBMIT/ ~/common-SUBMIT_previous/"
   	#rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. SUBMIT3:~/common-SUBMIT/
   # Client only
   elif  grep -a -qi "client" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/submit_sync/submit" ] && mkdir -p $HOME/submit_sync/submit
	cd $HOME/submit_sync/submit/
	CLIENT_DIFF_FILE="$HOME/submit_sync/submit/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ SUBMIT:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	[ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ] && exec echo "ERROR: No client file need to sync to SUBMIT"
	ssh SUBMIT "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-SUBMIT_previous/"
   	rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ SUBMIT:~/www/${GAME_TYPE}-TEST/
   else
   # Both Server and Client
	[ ! -d "$HOME/submit_sync/submit" ] && mkdir -p $HOME/submit_sync/submit
	cd $HOME/submit_sync/submit/
	SERVER_DIFF_FILE="$HOME/submit_sync/submit/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ SUBMIT:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	if [ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No server file need to sync to SUBMIT"
	else
		ssh SUBMIT "rsync -av --progress ~/common-TEST/ ~/common-SUBMIT_previous/"
		rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. SUBMIT:~/common-TEST/
		ssh SUBMIT "sed -i 's/AllGM=1/AllGM=0/' ~/common-TEST/bin/config.ini"
		#ssh SUBMIT2 "rsync -av --progress ~/common-SUBMIT/ ~/common-SUBMIT_previous/"
		#rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. SUBMIT2:~/common-SUBMIT/
		#ssh SUBMIT3 "rsync -av --progress ~/common-SUBMIT/ ~/common-SUBMIT_previous/"
		#rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. SUBMIT3:~/common-SUBMIT/
	fi

	cd $HOME/submit_sync/submit/
	CLIENT_DIFF_FILE="$HOME/submit_sync/submit/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ SUBMIT:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	if [ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No client file need to sync to SUBMIT"
	else
		ssh SUBMIT "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-SUBMIT_previous/"
		rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ SUBMIT:~/www/${GAME_TYPE}-TEST/
	fi
   fi
}

merge_sync () { # Merge -> Sync test to MERGE (argument: "server", "client")
   DATETIME="$(/bin/date +%Y%m%dT%H%M)"
   # Server only
   if  grep -a -qi "server" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/merge_sync/merge" ] && mkdir -p $HOME/merge_sync/merge
	cd $HOME/merge_sync/merge/
	SERVER_DIFF_FILE="$HOME/merge_sync/merge/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ ASIA-MERGE:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	[ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ] && exec echo "ERROR: No server file need to sync to MERGE"
	ssh ASIA-MERGE "rsync -av --progress ~/common-TEST/ ~/common-TEST_previous/"
   	rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. ASIA-MERGE:~/common-TEST/
	ssh US-MERGE "rsync -av --progress ~/common-TEST/ ~/common-TEST_previous/"
   	rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. US-MERGE:~/common-TEST/
	ssh EUROPE-MERGE "rsync -av --progress ~/common-TEST/ ~/common-TEST_previous/"
   	rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. EUROPE-MERGE:~/common-TEST/
   # Client only
   elif  grep -a -qi "client" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/merge_sync/merge" ] && mkdir -p $HOME/merge_sync/merge
	cd $HOME/merge_sync/merge/
	CLIENT_DIFF_FILE="$HOME/merge_sync/merge/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ ASIA-MERGE:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	[ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ] && exec echo "ERROR: No client file need to sync to MERGE"
	ssh ASIA-MERGE "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-TEST_previous/"
   	rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ ASIA-MERGE:~/www/${GAME_TYPE}-TEST/
   else
   # Both Server and Client
	[ ! -d "$HOME/merge_sync/merge" ] && mkdir -p $HOME/merge_sync/merge
	cd $HOME/merge_sync/merge/
	SERVER_DIFF_FILE="$HOME/merge_sync/merge/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ ASIA-MERGE:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	if [ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No server file need to sync to MERGE"
	else
		ssh ASIA-MERGE "rsync -av --progress ~/common-TEST/ ~/common-TEST_previous/"
   		rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. ASIA-MERGE:~/common-TEST/
		ssh US-MERGE "rsync -av --progress ~/common-TEST/ ~/common-TEST_previous/"
   		rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. US-MERGE:~/common-TEST/
		ssh EUROPE-MERGE "rsync -av --progress ~/common-TEST/ ~/common-TEST_previous/"
   		rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. EUROPE-MERGE:~/common-TEST/
	fi

	cd $HOME/merge_sync/merge/
	CLIENT_DIFF_FILE="$HOME/merge_sync/merge/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ ASIA-MERGE:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	if [ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No client file need to sync to MERGE"
	else
		ssh ASIA-MERGE "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-TEST_previous/"
   		rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ ASIA-MERGE:~/www/${GAME_TYPE}-TEST/
	fi
   fi
}

data_sync () { # Data -> Sync test to DATA (argument: "server", "client")
   DATETIME="$(/bin/date +%Y%m%dT%H%M)"
   # Server only
   if  grep -a -qi "server" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/data_sync/data" ] && mkdir -p $HOME/data_sync/data
	cd $HOME/data_sync/data/
	SERVER_DIFF_FILE="$HOME/data_sync/data/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ DATA:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	[ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ] && exec echo "ERROR: No server file need to sync to DATA"
	ssh DATA "rsync -av --progress ~/common-TEST/ ~/common-DATA_previous/"
   	rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. DATA:~/common-TEST/
	#ssh DATA "sed -i 's/AllGM=1/AllGM=0/' ~/common-DATA/bin/config.ini"
   # Client only
   elif  grep -a -qi "client" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/data_sync/data" ] && mkdir -p $HOME/data_sync/data
	cd $HOME/data_sync/data/
	CLIENT_DIFF_FILE="$HOME/data_sync/data/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ DATA:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	[ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ] && exec echo "ERROR: No client file need to sync to DATA"
	ssh DATA "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-DATA_previous/"
   	rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ DATA:~/www/${GAME_TYPE}-TEST/
   else
   # Both Server and Client
	[ ! -d "$HOME/data_sync/data" ] && mkdir -p $HOME/data_sync/data
	cd $HOME/data_sync/data/
	SERVER_DIFF_FILE="$HOME/data_sync/data/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ DATA:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	if [ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No server file need to sync to DATA"
	else
		ssh DATA "rsync -av --progress ~/common-TEST/ ~/common-DATA_previous/"
		rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. DATA:~/common-TEST/
		#ssh DATA "sed -i 's/AllGM=1/AllGM=0/' ~/common-TEST/bin/config.ini"
	fi

	cd $HOME/data_sync/data/
	CLIENT_DIFF_FILE="$HOME/data_sync/data/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ DATA:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	if [ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No client file need to sync to DATA"
	else
		ssh DATA "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-DATA_previous/"
		rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ DATA:~/www/${GAME_TYPE}-TEST/
	fi
   fi
}

time1_sync () { # Time1 -> Sync test to TIME1 (argument: "server", "client")
   DATETIME="$(/bin/date +%Y%m%dT%H%M)"
   # Server only
   if  grep -a -qi "server" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/time1_sync/time1" ] && mkdir -p $HOME/time1_sync/time1
	cd $HOME/time1_sync/time1/
	SERVER_DIFF_FILE="$HOME/time1_sync/time1/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude --out-format="FILE:%n" ~/common-TEST/ TIME1:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	[ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ] && exec echo "ERROR: No server file need to sync to TIME1"
	ssh TIME1 "rsync -av --progress ~/common-TEST/ ~/common-TIME1_previous/"
   	rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude ~/common-TEST/. TIME1:~/common-TEST/
   # Client only
   elif  grep -a -qi "client" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/time1_sync/time1" ] && mkdir -p $HOME/time1_sync/time1
	cd $HOME/time1_sync/time1/
	CLIENT_DIFF_FILE="$HOME/time1_sync/time1/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ TIME1:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	[ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ] && exec echo "ERROR: No client file need to sync to TIME1"
	ssh TIME1 "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-TIME1_previous/"
   	rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ TIME1:~/www/${GAME_TYPE}-TEST/
   else
   # Both Server and Client
	[ ! -d "$HOME/time1_sync/time1" ] && mkdir -p $HOME/time1_sync/time1
	cd $HOME/time1_sync/time1/
	SERVER_DIFF_FILE="$HOME/time1_sync/time1/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude --out-format="FILE:%n" ~/common-TEST/ TIME1:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	if [ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No server file need to sync to TIME1"
	else
		ssh TIME1 "rsync -av --progress ~/common-TEST/ ~/common-TIME1_previous/"
		rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude ~/common-TEST/. TIME1:~/common-TEST/
	fi

	cd $HOME/time1_sync/time1/
	CLIENT_DIFF_FILE="$HOME/time1_sync/time1/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ TIME1:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	if [ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No client file need to sync to TIME1"
	else
		ssh TIME1 "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-TIME1_previous/"
		rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ TIME1:~/www/${GAME_TYPE}-TEST/
	fi
   fi
}

media_sync () { # Media -> Sync test to MEDIA (argument: "server", "client")
   DATETIME="$(/bin/date +%Y%m%dT%H%M)"
   # Server only
   if  grep -a -qi "server" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/media_sync/media" ] && mkdir -p $HOME/media_sync/media
	cd $HOME/media_sync/media/
	SERVER_DIFF_FILE="$HOME/media_sync/media/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude --out-format="FILE:%n" ~/common-TEST/ MEDIA:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	[ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ] && exec echo "ERROR: No server file need to sync to MEDIA"
	ssh MEDIA "rsync -av --progress ~/common-TEST/ ~/common-MEDIA_previous/"
   	rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude ~/common-TEST/. MEDIA:~/common-TEST/
   # Client only
   elif  grep -a -qi "client" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/media_sync/media" ] && mkdir -p $HOME/media_sync/media
	cd $HOME/media_sync/media/
	CLIENT_DIFF_FILE="$HOME/media_sync/media/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ MEDIA:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	[ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ] && exec echo "ERROR: No client file need to sync to MEDIA"
	ssh MEDIA "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-MEDIA_previous/"
   	rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ MEDIA:~/www/${GAME_TYPE}-TEST/
   else
   # Both Server and Client
	[ ! -d "$HOME/media_sync/media" ] && mkdir -p $HOME/media_sync/media
	cd $HOME/media_sync/media/
	SERVER_DIFF_FILE="$HOME/media_sync/media/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude --out-format="FILE:%n" ~/common-TEST/ MEDIA:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	if [ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No server file need to sync to MEDIA"
	else
		ssh MEDIA "rsync -av --progress ~/common-TEST/ ~/common-MEDIA_previous/"
		rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude ~/common-TEST/. MEDIA:~/common-TEST/
	fi

	cd $HOME/media_sync/media/
	CLIENT_DIFF_FILE="$HOME/media_sync/media/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ MEDIA:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	if [ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No client file need to sync to MEDIA"
	else
		ssh MEDIA "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-MEDIA_previous/"
		rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ MEDIA:~/www/${GAME_TYPE}-TEST/
	fi
   fi
}

mapping_sync () { # Mapping -> Sync test to MAPPING (argument: "server", "client")
   DATETIME="$(/bin/date +%Y%m%dT%H%M)"
   # Server only
   if  grep -a -qi "server" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/mapping_sync/mapping" ] && mkdir -p $HOME/mapping_sync/mapping
	cd $HOME/mapping_sync/mapping/
	SERVER_DIFF_FILE="$HOME/mapping_sync/mapping/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ MAPPING:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	[ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ] && exec echo "ERROR: No server file need to sync to MAPPING"
	ssh MAPPING "rsync -av --progress ~/common-TEST/ ~/common-MAPPING_previous/"
   	rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. MAPPING:~/common-TEST/
	#ssh MAPPING "sed -i 's/AllGM=1/AllGM=0/' ~/common-TEST/bin/config.ini"
   # Client only
   elif  grep -a -qi "client" <<< "$ALLARGS" ; then
	[ ! -d "$HOME/mapping_sync/mapping" ] && mkdir -p $HOME/mapping_sync/mapping
	cd $HOME/mapping_sync/mapping/
	CLIENT_DIFF_FILE="$HOME/mapping_sync/mapping/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ MAPPING:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	[ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ] && exec echo "ERROR: No client file need to sync to MAPPING"
	ssh MAPPING "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-MAPPING_previous/"
   	rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ MAPPING:~/www/${GAME_TYPE}-TEST/
   else
   # Both Server and Client
	[ ! -d "$HOME/mapping_sync/mapping" ] && mkdir -p $HOME/mapping_sync/mapping
	cd $HOME/mapping_sync/mapping/
	SERVER_DIFF_FILE="$HOME/mapping_sync/mapping/server_diff.txt.$DATETIME"
	rsync -i -avn --exclude-from=$HOME/bin/rsync.exclude-submit --out-format="FILE:%n" ~/common-TEST/ MAPPING:~/common-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $SERVER_DIFF_FILE
	if [ "$(wc -l < $SERVER_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No server file need to sync to MAPPING"
	else
		ssh MAPPING "rsync -av --progress ~/common-TEST/ ~/common-MAPPING_previous/"
		rsync -av --progress --exclude-from=$HOME/bin/rsync.exclude-submit ~/common-TEST/. MAPPING:~/common-TEST/
		#ssh MAPPING "sed -i 's/AllGM=1/AllGM=0/' ~/common-TEST/bin/config.ini"
	fi

	cd $HOME/mapping_sync/mapping/
	CLIENT_DIFF_FILE="$HOME/mapping_sync/mapping/client_diff.txt.$DATETIME"
	rsync -i -avn --exclude="Setup.txt" --out-format="FILE:%n" ~/www/${GAME_TYPE}-TEST/ MAPPING:~/www/${GAME_TYPE}-TEST/ |  grep -a "^FILE:" |  grep -a -v "/$" | sed 's/^FILE:/\//g' > $CLIENT_DIFF_FILE
	if [ "$(wc -l < $CLIENT_DIFF_FILE)" == "0" ]; then
		echo "ERROR: No client file need to sync to MAPPING"
	else
		ssh MAPPING "rsync -av --progress ~/www/${GAME_TYPE}-TEST/ ~/www/${GAME_TYPE}-MAPPING_previous/"
		rsync -av --progress --exclude="Setup.txt" ~/www/${GAME_TYPE}-TEST/ MAPPING:~/www/${GAME_TYPE}-TEST/
	fi
   fi
}

### Sync Translate of Client ###
time1_sync_translate () { # Time1 -> Sync Translate to TIME1
	ALLARGS=$(echo $ALLARGS | sed 's/time1_sync_translate//;s/^ //')
	echo "ALLARGS => $ALLARGS" | colorize yellow black
	if [ -z "$ALLARGS" ]; then
		for multi_lang_directory in $(cat ${HOME}/.gamerc |  grep -a TRANSLATED_INI_UPLOAD_DIR_ |  grep -a -v '#' | awk -F"=" '{print $2}'); do
			LCOUNTRY=$(echo ${multi_lang_directory} | sed 's/"//g' | awk -F"/" '{print $(NF-1)}' | awk -F"_" '{print $NF}')
			COUNTRY=$(echo ${LCOUNTRY} | tr '[:lower:]' '[:upper:]')

			TEST_TRANSLATE_DIRECTORY=$(echo ${multi_lang_directory} | sed 's/"//g')
			echo "LOOP MULTI => ${COUNTRY}" | colorize red green
			if [ -f "${TEST_TRANSLATE_DIRECTORY}/GameDataTranslateFileList_${LCOUNTRY}.txt" ]; then
				MD5_TEST_TRANSLATE_FILELIST=$(md5sum ${TEST_TRANSLATE_DIRECTORY}/GameDataTranslateFileList_${LCOUNTRY}.txt | awk -F" " '{print $1}')
				MD5_SYNCTOTIME1_TRANSLATE_FILELIST=$(ssh TIME1 "md5sum ~/www/${GAME_TYPE}-TEST/GameDataTranslateFileList_${LCOUNTRY}.txt" | awk -F" " '{print $1}')

				if [ "${MD5_TEST_TRANSLATE_FILELIST}" == "${MD5_SYNCTOTIME1_TRANSLATE_FILELIST}" ]; then
					echo "ERROR: No ${COUNTRY} translate file to flush or cannot compare with synctolive directory, please try again." | colorize red black
				else
					cd ${TEST_TRANSLATE_DIRECTORY}
					rsync -avz GameDataTranslateFileList_${LCOUNTRY}.txt nfs TIME1:~/www/${GAME_TYPE}-TEST/.
				fi
			else
				echo "ERROR: No ${COUNTRY} translate file exists!" | colorize red black
			fi
		done
	else
		COUNTRY=$(echo $ALLARGS | sed 's/time1_sync_translate//;s/^ //')
		LCOUNTRY=$(echo ${COUNTRY} | tr '[:upper:]' '[:lower:]')

		TEST_TRANSLATE_DIRECTORY=$(cat $HOME/.gamerc |  grep -a TRANSLATED_INI_UPLOAD_DIR_${COUNTRY} |  grep -a -v '#' | awk -F"=" '{print $2}' | sed 's/"//g')
		echo "SINGLE => ${COUNTRY}" | colorize red green
		MD5_TEST_TRANSLATE_FILELIST=$(md5sum ${TEST_TRANSLATE_DIRECTORY}/GameDataTranslateFileList_${LCOUNTRY}.txt | awk -F" " '{print $1}')
		MD5_SYNCTOTIME1_TRANSLATE_FILELIST=$(ssh TIME1 "md5sum ~/www/${GAME_TYPE}-TEST/GameDataTranslateFileList_${LCOUNTRY}.txt" | awk -F" " '{print $1}')

		if [ "${MD5_TEST_TRANSLATE_FILELIST}" == "${MD5_SYNCTOTIME1_TRANSLATE_FILELIST}" ]; then
			exec echo "ERROR: No ${COUNTRY} translate file to flush or cannot compare with synctolive directory, please try again." | colorize red black
		else
			cd ${TEST_TRANSLATE_DIRECTORY}
			rsync -avz GameDataTranslateFileList_${LCOUNTRY}.txt nfs TIME1:~/www/${GAME_TYPE}-TEST/.
		fi
	fi
}

media_sync_translate () { # Media -> Sync Translate to MEDIA
	ALLARGS=$(echo $ALLARGS | sed 's/media_sync_translate//;s/^ //')
	echo "ALLARGS => $ALLARGS" | colorize yellow black
	if [ -z "$ALLARGS" ]; then
		for multi_lang_directory in $(cat ${HOME}/.gamerc |  grep -a TRANSLATED_INI_UPLOAD_DIR_ |  grep -a -v '#' | awk -F"=" '{print $2}'); do
			LCOUNTRY=$(echo ${multi_lang_directory} | sed 's/"//g' | awk -F"/" '{print $(NF-1)}' | awk -F"_" '{print $NF}')
			COUNTRY=$(echo ${LCOUNTRY} | tr '[:lower:]' '[:upper:]')

			TEST_TRANSLATE_DIRECTORY=$(echo ${multi_lang_directory} | sed 's/"//g')
			echo "LOOP MULTI => ${COUNTRY}" | colorize red green
			if [ -f "${TEST_TRANSLATE_DIRECTORY}/GameDataTranslateFileList_${LCOUNTRY}.txt" ]; then
				MD5_TEST_TRANSLATE_FILELIST=$(md5sum ${TEST_TRANSLATE_DIRECTORY}/GameDataTranslateFileList_${LCOUNTRY}.txt | awk -F" " '{print $1}')
				MD5_SYNCTOMEDIA_TRANSLATE_FILELIST=$(ssh MEDIA "md5sum ~/www/${GAME_TYPE}-TEST/GameDataTranslateFileList_${LCOUNTRY}.txt" | awk -F" " '{print $1}')

				if [ "${MD5_TEST_TRANSLATE_FILELIST}" == "${MD5_SYNCTOMEDIA_TRANSLATE_FILELIST}" ]; then
					echo "ERROR: No ${COUNTRY} translate file to flush or cannot compare with synctolive directory, please try again." | colorize red black
				else
					cd ${TEST_TRANSLATE_DIRECTORY}
					rsync -avz GameDataTranslateFileList_${LCOUNTRY}.txt nfs MEDIA:~/www/${GAME_TYPE}-TEST/.
				fi
			else
				echo "ERROR: No ${COUNTRY} translate file exists!" | colorize red black
			fi
		done
	else
		COUNTRY=$(echo $ALLARGS | sed 's/media_sync_translate//;s/^ //')
		LCOUNTRY=$(echo ${COUNTRY} | tr '[:upper:]' '[:lower:]')

		TEST_TRANSLATE_DIRECTORY=$(cat $HOME/.gamerc |  grep -a TRANSLATED_INI_UPLOAD_DIR_${COUNTRY} |  grep -a -v '#' | awk -F"=" '{print $2}' | sed 's/"//g')
		echo "SINGLE => ${COUNTRY}" | colorize red green
		MD5_TEST_TRANSLATE_FILELIST=$(md5sum ${TEST_TRANSLATE_DIRECTORY}/GameDataTranslateFileList_${LCOUNTRY}.txt | awk -F" " '{print $1}')
		MD5_SYNCTOMEDIA_TRANSLATE_FILELIST=$(ssh MEDIA "md5sum ~/www/${GAME_TYPE}-TEST/GameDataTranslateFileList_${LCOUNTRY}.txt" | awk -F" " '{print $1}')

		if [ "${MD5_TEST_TRANSLATE_FILELIST}" == "${MD5_SYNCTOMEDIA_TRANSLATE_FILELIST}" ]; then
			exec echo "ERROR: No ${COUNTRY} translate file to flush or cannot compare with synctolive directory, please try again." | colorize red black
		else
			cd ${TEST_TRANSLATE_DIRECTORY}
			rsync -avz GameDataTranslateFileList_${LCOUNTRY}.txt nfs MEDIA:~/www/${GAME_TYPE}-TEST/.
		fi
	fi
}

### Game Server DBPatch ###
android_dbpatch () { # Submit -> Patch the databases to GOOGLE-SUBMIT
   if ! [ "$DO_NOT_RUN_DBBACKUP_BEFORE_DBPATCH" == "1" ] ; then
        ssh GOOGLE-SUBMIT "DBbackup ${GAME_TYPE}Member"
	ssh GOOGLE-SUBMIT "DBbackup ${GAME_TYPE}Account"
	ssh GOOGLE-SUBMIT "DBbackup ${GAME_TYPE}DB1"
   fi

   ssh GOOGLE-SUBMIT "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-GOOGLE-SUBMIT/db/dbalter"
   ssh GOOGLE-SUBMIT "cd common-GOOGLE-SUBMIT/db;perl dbalter :${GAME_TYPE}DB1"

   ssh GOOGLE-SUBMIT "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-GOOGLE-SUBMIT/db/db_account_alter"
   ssh GOOGLE-SUBMIT "cd common-GOOGLE-SUBMIT/db;perl db_account_alter :${GAME_TYPE}Account"

   if ! [ "$DO_NOT_RUN_DBVACUUM_AFTER_DBPATCH" == "1" ] ; then
        ssh GOOGLE-SUBMIT "psql -U postgres <<< 'vacuum analyze;vacuum full;'"
   fi
}

ios_dbpatch () { # Submit -> Patch the databases to APPLE-SUBMIT
   if ! [ "$DO_NOT_RUN_DBBACKUP_BEFORE_DBPATCH" == "1" ] ; then
        ssh APPLE-SUBMIT "DBbackup ${GAME_TYPE}Member"
	ssh APPLE-SUBMIT "DBbackup ${GAME_TYPE}Account"
	ssh APPLE-SUBMIT "DBbackup ${GAME_TYPE}DB1"
   fi

   ssh APPLE-SUBMIT "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-APPLE-SUBMIT/db/dbalter"
   ssh APPLE-SUBMIT "cd common-APPLE-SUBMIT/db;perl dbalter :${GAME_TYPE}DB1"

   ssh APPLE-SUBMIT "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-APPLE-SUBMIT/db/db_account_alter"
   ssh APPLE-SUBMIT "cd common-APPLE-SUBMIT/db;perl db_account_alter :${GAME_TYPE}Account"

   if ! [ "$DO_NOT_RUN_DBVACUUM_AFTER_DBPATCH" == "1" ] ; then
        ssh APPLE-SUBMIT "psql -U postgres <<< 'vacuum analyze;vacuum full;'"
   fi
}

submit_dbpatch () { # Submit -> Patch the databases to SUBMIT
   if ! [ "$DO_NOT_RUN_DBBACKUP_BEFORE_DBPATCH" == "1" ] ; then
	ssh SUBMIT "DBbackup ${MEMBER_DB_NAME}"
	ssh SUBMIT "DBbackup ${ACCOUNT_DB_NAME}"
        if [ "$ENABLE_SOCIETY" == "1" ]; then
             ssh SUBMIT "DBbackup ${GAME_TYPE}Society"
        fi
	ssh SUBMIT "DBbackup ${GAME_DB_NAME}1"
	ssh SUBMIT "DBbackup ${GAME_DB_NAME}2"
	ssh SUBMIT "DBbackup ${GAME_TYPE}DB${CROSS_ROUTER_SID_TEST}"
	#ssh SUBMIT2 "DBbackup ${GAME_TYPE}DB2"
	#ssh SUBMIT3 "DBbackup ${GAME_TYPE}DB23"
   fi

   ssh SUBMIT "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-SUBMIT/db/dbalter"
   ssh SUBMIT "cd common-SUBMIT/db;perl dbalter :${GAME_DB_NAME}1"
   ssh SUBMIT "cd common-SUBMIT/db;perl dbalter :${GAME_DB_NAME}2"
   ssh SUBMIT "cd common-SUBMIT/db;perl dbalter :${GAME_TYPE}DB${CROSS_ROUTER_SID_TEST}"
   #ssh SUBMIT2 "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-SUBMIT/db/dbalter"
   #ssh SUBMIT2 "cd common-SUBMIT/db;perl dbalter :${GAME_TYPE}DB2"
   #ssh SUBMIT3 "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-SUBMIT/db/dbalter"
   #ssh SUBMIT3 "cd common-SUBMIT/db;perl dbalter :${GAME_TYPE}DB23"

   ssh SUBMIT "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-SUBMIT/db/db_account_alter"
   ssh SUBMIT "cd common-SUBMIT/db;perl db_account_alter :${ACCOUNT_DB_NAME}"

   if [ "$ENABLE_SOCIETY" == "1" ]; then
        ssh SUBMIT "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-DATA/db/db_society_alter"
        ssh SUBMIT "cd common-DATA/db;perl db_society_alter :${GAME_TYPE}Society"
   fi

   if ! [ "$DO_NOT_RUN_DBVACUUM_AFTER_DBPATCH" == "1" ] ; then
        ssh SUBMIT "psql -U postgres <<< 'vacuum analyze;vacuum full;'"
        #ssh SUBMIT2 "psql -U postgres <<< 'vacuum analyze;vacuum full;'"
        #ssh SUBMIT3 "psql -U postgres <<< 'vacuum analyze;vacuum full;'"
   fi
}

data_dbpatch () { # Data -> Patch the databases to DATA
   if ! [ "$DO_NOT_RUN_DBBACKUP_BEFORE_DBPATCH" == "1" ] ; then
        ssh DATA "DBbackup ${MEMBER_DB_NAME}"
	ssh DATA "DBbackup ${ACCOUNT_DB_NAME}"
        if [ "$ENABLE_SOCIETY" == "1" ]; then
             ssh DATA "DBbackup ${GAME_TYPE}Society"
        fi
	ssh DATA "DBbackup ${GAME_DB_NAME}1"
	ssh DATA "DBbackup ${GAME_DB_NAME}2"
	ssh DATA "DBbackup ${GAME_DB_NAME}${CROSS_ROUTER_SID_TEST}"
   fi

   ssh DATA "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-DATA/db/dbalter"
   ssh DATA "cd common-DATA/db;perl dbalter :${GAME_DB_NAME}1"
   ssh DATA "cd common-DATA/db;perl dbalter :${GAME_DB_NAME}2"
   ssh DATA "cd common-DATA/db;perl dbalter :${GAME_DB_NAME}${CROSS_ROUTER_SID_TEST}"

   ssh DATA "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-DATA/db/db_account_alter"
   ssh DATA "cd common-DATA/db;perl db_account_alter :${ACCOUNT_DB_NAME}"

   if [ "$ENABLE_SOCIETY" == "1" ]; then
        ssh DATA "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-DATA/db/db_society_alter"
        ssh DATA "cd common-DATA/db;perl db_society_alter :${GAME_TYPE}Society"
   fi

   if ! [ "$DO_NOT_RUN_DBVACUUM_AFTER_DBPATCH" == "1" ] ; then
        ssh DATA "psql -U postgres <<< 'vacuum analyze;vacuum full;'"
   fi
}

time1_dbpatch () { # Time1 -> Patch the databases to TIME1
   if ! [ "$DO_NOT_RUN_DBBACKUP_BEFORE_DBPATCH" == "1" ] ; then
        ssh TIME1 "DBbackup ${MEMBER_DB_NAME}"
	ssh TIME1 "DBbackup ${ACCOUNT_DB_NAME}"
	ssh TIME1 "DBbackup ${GAME_DB_NAME}1"
   fi

   ssh TIME1 "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-TEST/db/dbalter"
   ssh TIME1 "cd common-TEST/db;perl dbalter :${GAME_DB_NAME}1"

   ssh TIME1 "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-TEST/db/db_account_alter"
   ssh TIME1 "cd common-TEST/db;perl db_account_alter :${ACCOUNT_DB_NAME}"

   if ! [ "$DO_NOT_RUN_DBVACUUM_AFTER_DBPATCH" == "1" ] ; then
        ssh TIME1 "psql -U postgres <<< 'vacuum analyze;vacuum full;'"
   fi
}

media_dbpatch () { # Media -> Patch the databases to MEDIA
   if ! [ "$DO_NOT_RUN_DBBACKUP_BEFORE_DBPATCH" == "1" ] ; then
        ssh MEDIA "DBbackup ${MEMBER_DB_NAME}"
	ssh MEDIA "DBbackup ${ACCOUNT_DB_NAME}"
	ssh MEDIA "DBbackup ${GAME_DB_NAME}1"
   fi

   ssh MEDIA "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-TEST/db/dbalter"
   ssh MEDIA "cd common-TEST/db;perl dbalter :${GAME_DB_NAME}1"

   ssh MEDIA "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-TEST/db/db_account_alter"
   ssh MEDIA "cd common-TEST/db;perl db_account_alter :${ACCOUNT_DB_NAME}"

   if ! [ "$DO_NOT_RUN_DBVACUUM_AFTER_DBPATCH" == "1" ] ; then
        ssh MEDIA "psql -U postgres <<< 'vacuum analyze;vacuum full;'"
   fi
}

mapping_dbpatch () { # Mapping -> Patch the databases to MAPPING
   if ! [ "$DO_NOT_RUN_DBBACKUP_BEFORE_DBPATCH" == "1" ] ; then
        ssh MAPPING "DBbackup ${MEMBER_DB_NAME}"
	ssh MAPPING "DBbackup ${ACCOUNT_DB_NAME}"
        if [ "$ENABLE_SOCIETY" == "1" ]; then
             ssh MAPPING "DBbackup ${GAME_TYPE}Society"
        fi
	ssh MAPPING "DBbackup ${GAME_DB_NAME}1"
	ssh MAPPING "DBbackup ${GAME_DB_NAME}2"
	ssh MAPPING "DBbackup ${GAME_DB_NAME}${CROSS_ROUTER_SID_TEST}"
   fi

   ssh MAPPING "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-TEST/db/dbalter"
   ssh MAPPING "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-TEST/db/db_account_alter"
   ssh MAPPING "cd common-TEST/db;perl db_account_alter :${GAME_TYPE}Account"
   ssh MAPPING "cd common-TEST/db;perl db_account_alter :${ACCOUNT_DB_NAME}"

   if [ "$ENABLE_SOCIETY" == "1" ]; then
        ssh MAPPING "sed -i -e 's/system (\"pg_dump/#system (\"pg_dump/g;s/^\(.*vacuum.*\)$/#\1/g' common-TEST/db/db_society_alter"
        ssh MAPPING "cd common-TEST/db;perl db_society_alter :${GAME_TYPE}Society"
   fi

   if ! [ "$DO_NOT_RUN_DBVACUUM_AFTER_DBPATCH" == "1" ] ; then
        ssh MAPPING "psql -U postgres <<< 'vacuum analyze;vacuum full;'"
   fi
}


### Game Server Itemmall ###
android_itemmall () { # Submit -> Update Promotion Files/Tables from TEST Server to GOOGLE-SUBMIT (argument: table names)

   TABLES_TO_APPLY="$ARG2 $ARG3 $ARG4 $ARG5 $ARG6 $ARG7"
    grep -a -q "[A-Za-z]" <<< "$TABLES_TO_APPLY" && PROMOTION_TABLES_APPLY_TO_LIVE="$TABLES_TO_APPLY"

   if [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "2" ] ; then # 2 = File(on TEST)  -->  Table(on GOOGLE-SUBMIT)
        echo "Mode 2: File(on TEST)  -->  Table(on GOOGLE-SUBMIT)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on TEST)  -->  Table(on GOOGLE-SUBMIT):" | colorize yellow
                ssh $TEST_SERVER_USER@GOOGLE-SUBMIT "cat ~/common-$SOURCE_OF_SYNC_TO_LIVE/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh GOOGLE-SUBMIT "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   elif [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "3" ] ; then # 3 = File(on GOOGLE-SUBMIT)  -->  Table(on GOOGLE-SUBMIT)
        echo "Mode 3: File(on GOOGLE-SUBMIT)  -->  Table(on GOOGLE-SUBMIT)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on GOOGLE-SUBMIT)  -->  Table(on GOOGLE-SUBMIT):" | colorize yellow
                ssh GOOGLE-SUBMIT "cat ~/servers1/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh GOOGLE-SUBMIT "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   else
        echo "Mode 1: Table(on TEST) -->  Table(on GOOGLE-SUBMIT)" | colorize green
        for TABLE in $PROMOTION_TABLES_APPLY_TO_LIVE ; do # 1 = Table(on TEST) -->  Table(on GOOGLE-SUBMIT)
                echo "Syncing table $TABLE(on TEST) -->  Table(on GOOGLE-SUBMIT):" | colorize yellow black
                ssh $TEST_SERVER_USER@TEST pg_dump --clean --attribute-inserts -t $TABLE $ACCOUNT_DB_NAME |  grep -a -v "SET lock_timeout" | ssh GOOGLE-SUBMIT "psql $ACCOUNT_DB_NAME" | uniq -c \
                && echo "Table $TABLE done." | colorize green \
                || echo "Table $TABLE failed." | colorize red
        done
   fi

   echo "
Remember, if you are updating the Promotion Files/Tables on running servers,
You will have to run these GM commands to apply in game:
1. /reload_itemmall_db
2. /rnba
3. /reload_daily_login_reward
4. /reload_playground_db
5. /reload_iap_db" | colorize green
}

ios_itemmall () { # Submit -> Update Promotion Files/Tables from TEST Server to APPLE-SUBMIT (argument: table names)

   TABLES_TO_APPLY="$ARG2 $ARG3 $ARG4 $ARG5 $ARG6 $ARG7"
    grep -a -q "[A-Za-z]" <<< "$TABLES_TO_APPLY" && PROMOTION_TABLES_APPLY_TO_LIVE="$TABLES_TO_APPLY"

   if [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "2" ] ; then # 2 = File(on TEST)  -->  Table(on APPLE-SUBMIT)
        echo "Mode 2: File(on TEST)  -->  Table(on APPLE-SUBMIT)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on TEST)  -->  Table(on APPLE-SUBMIT):" | colorize yellow
                ssh $TEST_SERVER_USER@APPLE-SUBMIT "cat ~/common-$SOURCE_OF_SYNC_TO_LIVE/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh APPLE-SUBMIT "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   elif [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "3" ] ; then # 3 = File(on APPLE-SUBMIT)  -->  Table(on APPLE-SUBMIT)
        echo "Mode 3: File(on APPLE-SUBMIT)  -->  Table(on APPLE-SUBMIT)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on APPLE-SUBMIT)  -->  Table(on APPLE-SUBMIT):" | colorize yellow
                ssh APPLE-SUBMIT "cat ~/servers1/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh APPLE-SUBMIT "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   else
        echo "Mode 1: Table(on TEST) -->  Table(on APPLE-SUBMIT)" | colorize green
        for TABLE in $PROMOTION_TABLES_APPLY_TO_LIVE ; do # 1 = Table(on TEST) -->  Table(on APPLE-SUBMIT)
                echo "Syncing table $TABLE(on TEST) -->  Table(on APPLE-SUBMIT):" | colorize yellow black
                ssh $TEST_SERVER_USER@TEST pg_dump --clean --attribute-inserts -t $TABLE $ACCOUNT_DB_NAME |  grep -a -v "SET lock_timeout" | ssh APPLE-SUBMIT "psql $ACCOUNT_DB_NAME" | uniq -c \
                && echo "Table $TABLE done." | colorize green \
                || echo "Table $TABLE failed." | colorize red
        done
   fi

   echo "
Remember, if you are updating the Promotion Files/Tables on running servers,
You will have to run these GM commands to apply in game:
1. /reload_itemmall_db
2. /rnba
3. /reload_daily_login_reward
4. /reload_playground_db
5. /reload_iap_db" | colorize green
}

submit_itemmall () { # Submit -> Update Promotion Files/Tables from TEST Server to SUBMIT (argument: table names)

   TABLES_TO_APPLY="$ARG2 $ARG3 $ARG4 $ARG5 $ARG6 $ARG7"
    grep -a -q "[A-Za-z]" <<< "$TABLES_TO_APPLY" && PROMOTION_TABLES_APPLY_TO_LIVE="$TABLES_TO_APPLY"

   if [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "2" ] ; then # 2 = File(on TEST)  -->  Table(on SUBMIT)
        echo "Mode 2: File(on TEST)  -->  Table(on SUBMIT)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on TEST)  -->  Table(on SUBMIT):" | colorize yellow
                ssh $TEST_SERVER_USER@SUBMIT "cat ~/common-$SOURCE_OF_SYNC_TO_LIVE/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh SUBMIT "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   elif [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "3" ] ; then # 3 = File(on SUBMIT)  -->  Table(on SUBMIT)
        echo "Mode 3: File(on SUBMIT)  -->  Table(on SUBMIT)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on SUBMIT)  -->  Table(on SUBMIT):" | colorize yellow
                ssh SUBMIT "cat ~/servers1/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh SUBMIT "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   else
        echo "Mode 1: Table(on TEST) -->  Table(on SUBMIT)" | colorize green
        for TABLE in $PROMOTION_TABLES_APPLY_TO_LIVE ; do # 1 = Table(on TEST) -->  Table(on SUBMIT)
                echo "Syncing table $TABLE(on TEST) -->  Table(on SUBMIT):" | colorize yellow black
                ssh $TEST_SERVER_USER@TEST pg_dump --clean --attribute-inserts -t $TABLE $ACCOUNT_DB_NAME |  grep -a -v "SET lock_timeout" | ssh SUBMIT "psql $ACCOUNT_DB_NAME" | uniq -c \
                && echo "Table $TABLE done." | colorize green \
                || echo "Table $TABLE failed." | colorize red
        done
   fi

   echo "
Remember, if you are updating the Promotion Files/Tables on running servers,
You will have to run these GM commands to apply in game:
1. /reload_itemmall_db
2. /rnba
3. /reload_daily_login_reward
4. /reload_playground_db
5. /reload_iap_db" | colorize green
}

data_itemmall () { # Data -> Update Promotion Files/Tables from TEST Server to DATA (argument: table names)

   TABLES_TO_APPLY="$ARG2 $ARG3 $ARG4 $ARG5 $ARG6 $ARG7"
    grep -a -q "[A-Za-z]" <<< "$TABLES_TO_APPLY" && PROMOTION_TABLES_APPLY_TO_LIVE="$TABLES_TO_APPLY"

   if [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "2" ] ; then # 2 = File(on TEST)  -->  Table(on DATA)
        echo "Mode 2: File(on TEST)  -->  Table(on DATA)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on TEST)  -->  Table(on DATA):" | colorize yellow
                ssh $TEST_SERVER_USER@DATA "cat ~/common-$SOURCE_OF_SYNC_TO_LIVE/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh DATA "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   elif [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "3" ] ; then # 3 = File(on DATA)  -->  Table(on DATA)
        echo "Mode 3: File(on DATA)  -->  Table(on DATA)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on DATA)  -->  Table(on DATA):" | colorize yellow
                ssh DATA "cat ~/servers1/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh DATA "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   else
        echo "Mode 1: Table(on TEST) -->  Table(on DATA)" | colorize green
        for TABLE in $PROMOTION_TABLES_APPLY_TO_LIVE ; do # 1 = Table(on TEST) -->  Table(on DATA)
                echo "Syncing table $TABLE(on TEST) -->  Table(on DATA):" | colorize yellow black
                ssh $TEST_SERVER_USER@TEST pg_dump --clean --attribute-inserts -t $TABLE $ACCOUNT_DB_NAME |  grep -a -v "SET lock_timeout" | ssh DATA "psql $ACCOUNT_DB_NAME" | uniq -c \
                && echo "Table $TABLE done." | colorize green \
                || echo "Table $TABLE failed." | colorize red
        done
   fi

   echo "
Remember, if you are updating the Promotion Files/Tables on running servers,
You will have to run these GM commands to apply in game:
1. /reload_itemmall_db
2. /rnba
3. /reload_daily_login_reward
4. /reload_playground_db
5. /reload_iap_db" | colorize green
}

time1_itemmall () { # Time1 -> Update Promotion Files/Tables from TEST Server to TIME1 (argument: table names)

   TABLES_TO_APPLY="$ARG2 $ARG3 $ARG4 $ARG5 $ARG6 $ARG7"
    grep -a -q "[A-Za-z]" <<< "$TABLES_TO_APPLY" && PROMOTION_TABLES_APPLY_TO_LIVE="$TABLES_TO_APPLY"

   if [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "2" ] ; then # 2 = File(on TEST)  -->  Table(on TIME1)
        echo "Mode 2: File(on TEST)  -->  Table(on TIME1)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on TEST)  -->  Table(on TIME1):" | colorize yellow
                cat ~/common-$SOURCE_OF_SYNC_TO_LIVE/$SQL_FILE |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh TIME1 "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   elif [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "3" ] ; then # 3 = File(on TIME1)  -->  Table(on TIME1)
        echo "Mode 3: File(on TIME1)  -->  Table(on TIME1)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on TIME1)  -->  Table(on TIME1):" | colorize yellow
                ssh TIME1 "cat ~/servers1/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh TIME1 "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   else
        echo "Mode 1: Table(on TEST) -->  Table(on TIME1)" | colorize green
        for TABLE in $PROMOTION_TABLES_APPLY_TO_LIVE ; do # 1 = Table(on TEST) -->  Table(on TIME1)
                echo "Syncing table $TABLE(on TEST) -->  Table(on TIME1):" | colorize yellow black
                pg_dump --clean --attribute-inserts -t $TABLE $ACCOUNT_DB_NAME |  grep -a -v "SET lock_timeout" | ssh TIME1 "psql $ACCOUNT_DB_NAME" | uniq -c \
                && echo "Table $TABLE done." | colorize green \
                || echo "Table $TABLE failed." | colorize red
        done
   fi

   echo "
Remember, if you are updating the Promotion Files/Tables on running servers,
You will have to run these GM commands to apply in game:
1. /reload_itemmall_db
2. /rnba
3. /reload_daily_login_reward
4. /reload_playground_db
5. /reload_iap_db" | colorize green
}

media_itemmall () { # Media -> Update Promotion Files/Tables from TEST Server to MEDIA (argument: table names)

   TABLES_TO_APPLY="$ARG2 $ARG3 $ARG4 $ARG5 $ARG6 $ARG7"
    grep -a -q "[A-Za-z]" <<< "$TABLES_TO_APPLY" && PROMOTION_TABLES_APPLY_TO_LIVE="$TABLES_TO_APPLY"

   if [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "2" ] ; then # 2 = File(on TEST)  -->  Table(on MEDIA)
        echo "Mode 2: File(on TEST)  -->  Table(on MEDIA)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on TEST)  -->  Table(on MEDIA):" | colorize yellow
                cat ~/common-$SOURCE_OF_SYNC_TO_LIVE/$SQL_FILE |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh MEDIA "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   elif [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "3" ] ; then # 3 = File(on MEDIA)  -->  Table(on MEDIA)
        echo "Mode 3: File(on MEDIA)  -->  Table(on MEDIA)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on MEDIA)  -->  Table(on MEDIA):" | colorize yellow
                ssh MEDIA "cat ~/servers1/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh MEDIA "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   else
        echo "Mode 1: Table(on TEST) -->  Table(on MEDIA)" | colorize green
        for TABLE in $PROMOTION_TABLES_APPLY_TO_LIVE ; do # 1 = Table(on TEST) -->  Table(on MEDIA)
                echo "Syncing table $TABLE(on TEST) -->  Table(on MEDIA):" | colorize yellow black
                pg_dump --clean --attribute-inserts -t $TABLE $ACCOUNT_DB_NAME |  grep -a -v "SET lock_timeout" | ssh MEDIA "psql $ACCOUNT_DB_NAME" | uniq -c \
                && echo "Table $TABLE done." | colorize green \
                || echo "Table $TABLE failed." | colorize red
        done
   fi

   echo "
Remember, if you are updating the Promotion Files/Tables on running servers,
You will have to run these GM commands to apply in game:
1. /reload_itemmall_db
2. /rnba
3. /reload_daily_login_reward
4. /reload_playground_db
5. /reload_iap_db" | colorize green
}

mapping_itemmall () { # Mapping -> Update Promotion Files/Tables from TEST Server to MAPPING (argument: table names)

   TABLES_TO_APPLY="$ARG2 $ARG3 $ARG4 $ARG5 $ARG6 $ARG7"
    grep -a -q "[A-Za-z]" <<< "$TABLES_TO_APPLY" && PROMOTION_TABLES_APPLY_TO_LIVE="$TABLES_TO_APPLY"

   if [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "2" ] ; then # 2 = File(on TEST)  -->  Table(on MAPPING)
        echo "Mode 2: File(on TEST)  -->  Table(on MAPPING)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on TEST)  -->  Table(on MAPPING):" | colorize yellow
                ssh $TEST_SERVER_USER@MAPPING "cat ~/common-$SOURCE_OF_SYNC_TO_LIVE/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh MAPPING "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   elif [ "$PROMOTION_DATA_APPLY_TO_LIVE_MODE" == "3" ] ; then # 3 = File(on MAPPING)  -->  Table(on MAPPING)
        echo "Mode 3: File(on MAPPING)  -->  Table(on MAPPING)" | colorize green
        for SQL_FILE in $PROMOTION_FILES_APPLY_TO_LIVE ; do
                echo "File $SQL_FILE(on MAPPING)  -->  Table(on MAPPING):" | colorize yellow
                ssh MAPPING "cat ~/servers1/$SQL_FILE" |  grep -a -v "GRANT ALL" | sed 's/PUBLIC/PUBLIC\;/g' | ssh MAPPING "psql $ACCOUNT_DB_NAME" 2>&1 | uniq -c
        done

   else
        echo "Mode 1: Table(on TEST) -->  Table(on MAPPING)" | colorize green
        for TABLE in $PROMOTION_TABLES_APPLY_TO_LIVE ; do # 1 = Table(on TEST) -->  Table(on MAPPING)
                echo "Syncing table $TABLE(on TEST) -->  Table(on MAPPING):" | colorize yellow black
                ssh $TEST_SERVER_USER@TEST pg_dump --clean --attribute-inserts -t $TABLE $ACCOUNT_DB_NAME |  grep -a -v "SET lock_timeout" | ssh MAPPING "psql $ACCOUNT_DB_NAME" | uniq -c \
                && echo "Table $TABLE done." | colorize green \
                || echo "Table $TABLE failed." | colorize red
        done
   fi

   echo "
Remember, if you are updating the Promotion Files/Tables on running servers,
You will have to run these GM commands to apply in game:
1. /reload_itemmall_db
2. /rnba
3. /reload_daily_login_reward
4. /reload_playground_db
5. /reload_iap_db" | colorize green
}

online_reload_cgi() {
    local TABLE_NAME=$1
    local -A TABLE_CGI_MAP=(
        [accumulated_time]="reload_online_gacha_db"
        [online_gacha]="reload_online_gacha_db"
        [online_gacha_grab_bag]="reload_online_gacha_db"
        [checkdaily]="reload_checkdaily_db"
        [consume_fortune_bag]="reload_rebate_db"
        [day_pass]="reload_daypass_db"
        [dressroom]="reload_dressroom_db"
        [fortune_bag]="reload_itemmall_db"
        [itemmall]="reload_itemmall_db"
        [growthfund]="reload_growthfund"
        [growthfundgroup]="reload_growthfund"
        [lottery]="reload_elf_lottery_db"
        [new_hand_sale]="reload_newhandsale"
        [newbie_login_day]="reload_newbie_event_db"
        [payback]="reload_payback_db"
        [sky_fortune_bag]="reload_skyfortunebag_db"
        [trendnews]="reload_trendnews_db"
        [suggest_buy]="reload_suggest_buy"
        [iap]="reload_iap_db"
	[bonus_activity_title]="rnba"
	[bonus_activity_items]="rnba"
    )

    local CGI_CMD="${TABLE_CGI_MAP[$TABLE_NAME]}"

    if [[ -z "$CGI_CMD" ]]; then
        echo "Unknown CGI Command for ${TABLE_NAME}!"
        return 1
    fi

    server_online_check
    if [[ $? -eq 1 ]]; then
        $HOME/bin/send_fastcgi_all_once "$CGI_CMD"
        send_chatbot_text_only "系統腳本" "資料表 ${TABLE_NAME} 同步完成\nCGI Command: ${CGI_CMD} 也已經執行!"
    else
        send_chatbot_text_only "系統腳本" "資料表 ${TABLE_NAME} 同步完成"
    fi
}
