diff --git a/bash_completion/git.bash b/bash_completion/git.bash
new file mode 100755
index 0000000..93eba46
--- /dev/null
+++ b/bash_completion/git.bash
@@ -0,0 +1,2766 @@
+#!bash
+#
+# bash/zsh completion support for core Git.
+#
+# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
+# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
+# Distributed under the GNU General Public License, version 2.0.
+#
+# The contained completion routines provide support for completing:
+#
+#    *) local and remote branch names
+#    *) local and remote tag names
+#    *) .git/remotes file names
+#    *) git 'subcommands'
+#    *) tree paths within 'ref:path/to/file' expressions
+#    *) file paths within current working directory and index
+#    *) common --long-options
+#
+# To use these routines:
+#
+#    1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
+#    2) Add the following line to your .bashrc/.zshrc:
+#        source ~/.git-completion.sh
+#    3) Consider changing your PS1 to also show the current branch,
+#       see git-prompt.sh for details.
+
+case "$COMP_WORDBREAKS" in
+*:*) : great ;;
+*)   COMP_WORDBREAKS="$COMP_WORDBREAKS:"
+esac
+
+# __gitdir accepts 0 or 1 arguments (i.e., location)
+# returns location of .git repo
+__gitdir ()
+{
+	# Note: this function is duplicated in git-prompt.sh
+	# When updating it, make sure you update the other one to match.
+	if [ -z "${1-}" ]; then
+		if [ -n "${__git_dir-}" ]; then
+			echo "$__git_dir"
+		elif [ -n "${GIT_DIR-}" ]; then
+			test -d "${GIT_DIR-}" || return 1
+			echo "$GIT_DIR"
+		elif [ -d .git ]; then
+			echo .git
+		else
+			git rev-parse --git-dir 2>/dev/null
+		fi
+	elif [ -d "$1/.git" ]; then
+		echo "$1/.git"
+	else
+		echo "$1"
+	fi
+}
+
+__gitcomp_1 ()
+{
+	local c IFS=$' \t\n'
+	for c in $1; do
+		c="$c$2"
+		case $c in
+		--*=*|*.) ;;
+		*) c="$c " ;;
+		esac
+		printf '%s\n' "$c"
+	done
+}
+
+# The following function is based on code from:
+#
+#   bash_completion - programmable completion functions for bash 3.2+
+#
+#   Copyright © 2006-2008, Ian Macdonald <ian@caliban.org>
+#             © 2009-2010, Bash Completion Maintainers
+#                     <bash-completion-devel@lists.alioth.debian.org>
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2, or (at your option)
+#   any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program; if not, write to the Free Software Foundation,
+#   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#   The latest version of this software can be obtained here:
+#
+#   http://bash-completion.alioth.debian.org/
+#
+#   RELEASE: 2.x
+
+# This function can be used to access a tokenized list of words
+# on the command line:
+#
+#	__git_reassemble_comp_words_by_ref '=:'
+#	if test "${words_[cword_-1]}" = -w
+#	then
+#		...
+#	fi
+#
+# The argument should be a collection of characters from the list of
+# word completion separators (COMP_WORDBREAKS) to treat as ordinary
+# characters.
+#
+# This is roughly equivalent to going back in time and setting
+# COMP_WORDBREAKS to exclude those characters.  The intent is to
+# make option types like --date=<type> and <rev>:<path> easy to
+# recognize by treating each shell word as a single token.
+#
+# It is best not to set COMP_WORDBREAKS directly because the value is
+# shared with other completion scripts.  By the time the completion
+# function gets called, COMP_WORDS has already been populated so local
+# changes to COMP_WORDBREAKS have no effect.
+#
+# Output: words_, cword_, cur_.
+
+__git_reassemble_comp_words_by_ref()
+{
+	local exclude i j first
+	# Which word separators to exclude?
+	exclude="${1//[^$COMP_WORDBREAKS]}"
+	cword_=$COMP_CWORD
+	if [ -z "$exclude" ]; then
+		words_=("${COMP_WORDS[@]}")
+		return
+	fi
+	# List of word completion separators has shrunk;
+	# re-assemble words to complete.
+	for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do
+		# Append each nonempty word consisting of just
+		# word separator characters to the current word.
+		first=t
+		while
+			[ $i -gt 0 ] &&
+			[ -n "${COMP_WORDS[$i]}" ] &&
+			# word consists of excluded word separators
+			[ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
+		do
+			# Attach to the previous token,
+			# unless the previous token is the command name.
+			if [ $j -ge 2 ] && [ -n "$first" ]; then
+				((j--))
+			fi
+			first=
+			words_[$j]=${words_[j]}${COMP_WORDS[i]}
+			if [ $i = $COMP_CWORD ]; then
+				cword_=$j
+			fi
+			if (($i < ${#COMP_WORDS[@]} - 1)); then
+				((i++))
+			else
+				# Done.
+				return
+			fi
+		done
+		words_[$j]=${words_[j]}${COMP_WORDS[i]}
+		if [ $i = $COMP_CWORD ]; then
+			cword_=$j
+		fi
+	done
+}
+
+if ! type _get_comp_words_by_ref >/dev/null 2>&1; then
+_get_comp_words_by_ref ()
+{
+	local exclude cur_ words_ cword_
+	if [ "$1" = "-n" ]; then
+		exclude=$2
+		shift 2
+	fi
+	__git_reassemble_comp_words_by_ref "$exclude"
+	cur_=${words_[cword_]}
+	while [ $# -gt 0 ]; do
+		case "$1" in
+		cur)
+			cur=$cur_
+			;;
+		prev)
+			prev=${words_[$cword_-1]}
+			;;
+		words)
+			words=("${words_[@]}")
+			;;
+		cword)
+			cword=$cword_
+			;;
+		esac
+		shift
+	done
+}
+fi
+
+# Generates completion reply with compgen, appending a space to possible
+# completion words, if necessary.
+# It accepts 1 to 4 arguments:
+# 1: List of possible completion words.
+# 2: A prefix to be added to each possible completion word (optional).
+# 3: Generate possible completion matches for this word (optional).
+# 4: A suffix to be appended to each possible completion word (optional).
+__gitcomp ()
+{
+	local cur_="${3-$cur}"
+
+	case "$cur_" in
+	--*=)
+		COMPREPLY=()
+		;;
+	*)
+		local IFS=$'\n'
+		COMPREPLY=($(compgen -P "${2-}" \
+			-W "$(__gitcomp_1 "${1-}" "${4-}")" \
+			-- "$cur_"))
+		;;
+	esac
+}
+
+# Generates completion reply with compgen from newline-separated possible
+# completion words by appending a space to all of them.
+# It accepts 1 to 4 arguments:
+# 1: List of possible completion words, separated by a single newline.
+# 2: A prefix to be added to each possible completion word (optional).
+# 3: Generate possible completion matches for this word (optional).
+# 4: A suffix to be appended to each possible completion word instead of
+#    the default space (optional).  If specified but empty, nothing is
+#    appended.
+__gitcomp_nl ()
+{
+	local IFS=$'\n'
+	COMPREPLY=($(compgen -P "${2-}" -S "${4- }" -W "$1" -- "${3-$cur}"))
+}
+
+# Generates completion reply with compgen from newline-separated possible
+# completion filenames.
+# It accepts 1 to 3 arguments:
+# 1: List of possible completion filenames, separated by a single newline.
+# 2: A directory prefix to be added to each possible completion filename
+#    (optional).
+# 3: Generate possible completion matches for this word (optional).
+__gitcomp_file ()
+{
+	local IFS=$'\n'
+
+	# XXX does not work when the directory prefix contains a tilde,
+	# since tilde expansion is not applied.
+	# This means that COMPREPLY will be empty and Bash default
+	# completion will be used.
+	COMPREPLY=($(compgen -P "${2-}" -W "$1" -- "${3-$cur}"))
+
+	# Tell Bash that compspec generates filenames.
+	compopt -o filenames 2>/dev/null
+}
+
+__git_index_file_list_filter_compat ()
+{
+	local path
+
+	while read -r path; do
+		case "$path" in
+		?*/*) echo "${path%%/*}/" ;;
+		*) echo "$path" ;;
+		esac
+	done
+}
+
+__git_index_file_list_filter_bash ()
+{
+	local path
+
+	while read -r path; do
+		case "$path" in
+		?*/*)
+			# XXX if we append a slash to directory names when using
+			# `compopt -o filenames`, Bash will append another slash.
+			# This is pretty stupid, and this the reason why we have to
+			# define a compatible version for this function.
+			echo "${path%%/*}" ;;
+		*)
+			echo "$path" ;;
+		esac
+	done
+}
+
+# Process path list returned by "ls-files" and "diff-index --name-only"
+# commands, in order to list only file names relative to a specified
+# directory, and append a slash to directory names.
+__git_index_file_list_filter ()
+{
+	# Default to Bash >= 4.x
+	__git_index_file_list_filter_bash
+}
+
+# Execute git ls-files, returning paths relative to the directory
+# specified in the first argument, and using the options specified in
+# the second argument.
+__git_ls_files_helper ()
+{
+	(
+		test -n "${CDPATH+set}" && unset CDPATH
+		# NOTE: $2 is not quoted in order to support multiple options
+		cd "$1" && git ls-files --exclude-standard $2
+	) 2>/dev/null
+}
+
+
+# Execute git diff-index, returning paths relative to the directory
+# specified in the first argument, and using the tree object id
+# specified in the second argument.
+__git_diff_index_helper ()
+{
+	(
+		test -n "${CDPATH+set}" && unset CDPATH
+		cd "$1" && git diff-index --name-only --relative "$2"
+	) 2>/dev/null
+}
+
+# __git_index_files accepts 1 or 2 arguments:
+# 1: Options to pass to ls-files (required).
+#    Supported options are --cached, --modified, --deleted, --others,
+#    and --directory.
+# 2: A directory path (optional).
+#    If provided, only files within the specified directory are listed.
+#    Sub directories are never recursed.  Path must have a trailing
+#    slash.
+__git_index_files ()
+{
+	local dir="$(__gitdir)" root="${2-.}"
+
+	if [ -d "$dir" ]; then
+		__git_ls_files_helper "$root" "$1" | __git_index_file_list_filter |
+			sort | uniq
+	fi
+}
+
+# __git_diff_index_files accepts 1 or 2 arguments:
+# 1) The id of a tree object.
+# 2) A directory path (optional).
+#    If provided, only files within the specified directory are listed.
+#    Sub directories are never recursed.  Path must have a trailing
+#    slash.
+__git_diff_index_files ()
+{
+	local dir="$(__gitdir)" root="${2-.}"
+
+	if [ -d "$dir" ]; then
+		__git_diff_index_helper "$root" "$1" | __git_index_file_list_filter |
+			sort | uniq
+	fi
+}
+
+__git_heads ()
+{
+	local dir="$(__gitdir)"
+	if [ -d "$dir" ]; then
+		git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
+			refs/heads
+		return
+	fi
+}
+
+__git_tags ()
+{
+	local dir="$(__gitdir)"
+	if [ -d "$dir" ]; then
+		git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
+			refs/tags
+		return
+	fi
+}
+
+# __git_refs accepts 0, 1 (to pass to __gitdir), or 2 arguments
+# presence of 2nd argument means use the guess heuristic employed
+# by checkout for tracking branches
+__git_refs ()
+{
+	local i hash dir="$(__gitdir "${1-}")" track="${2-}"
+	local format refs
+	if [ -d "$dir" ]; then
+		case "$cur" in
+		refs|refs/*)
+			format="refname"
+			refs="${cur%/*}"
+			track=""
+			;;
+		*)
+			for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD; do
+				if [ -e "$dir/$i" ]; then echo $i; fi
+			done
+			format="refname:short"
+			refs="refs/tags refs/heads refs/remotes"
+			;;
+		esac
+		git --git-dir="$dir" for-each-ref --format="%($format)" \
+			$refs
+		if [ -n "$track" ]; then
+			# employ the heuristic used by git checkout
+			# Try to find a remote branch that matches the completion word
+			# but only output if the branch name is unique
+			local ref entry
+			git --git-dir="$dir" for-each-ref --shell --format="ref=%(refname:short)" \
+				"refs/remotes/" | \
+			while read -r entry; do
+				eval "$entry"
+				ref="${ref#*/}"
+				if [[ "$ref" == "$cur"* ]]; then
+					echo "$ref"
+				fi
+			done | sort | uniq -u
+		fi
+		return
+	fi
+	case "$cur" in
+	refs|refs/*)
+		git ls-remote "$dir" "$cur*" 2>/dev/null | \
+		while read -r hash i; do
+			case "$i" in
+			*^{}) ;;
+			*) echo "$i" ;;
+			esac
+		done
+		;;
+	*)
+		git ls-remote "$dir" HEAD ORIG_HEAD 'refs/tags/*' 'refs/heads/*' 'refs/remotes/*' 2>/dev/null | \
+		while read -r hash i; do
+			case "$i" in
+			*^{}) ;;
+			refs/*) echo "${i#refs/*/}" ;;
+			*) echo "$i" ;;
+			esac
+		done
+		;;
+	esac
+}
+
+# __git_refs2 requires 1 argument (to pass to __git_refs)
+__git_refs2 ()
+{
+	local i
+	for i in $(__git_refs "$1"); do
+		echo "$i:$i"
+	done
+}
+
+# __git_refs_remotes requires 1 argument (to pass to ls-remote)
+__git_refs_remotes ()
+{
+	local i hash
+	git ls-remote "$1" 'refs/heads/*' 2>/dev/null | \
+	while read -r hash i; do
+		echo "$i:refs/remotes/$1/${i#refs/heads/}"
+	done
+}
+
+__git_remotes ()
+{
+	local i IFS=$'\n' d="$(__gitdir)"
+	test -d "$d/remotes" && ls -1 "$d/remotes"
+	for i in $(git --git-dir="$d" config --get-regexp 'remote\..*\.url' 2>/dev/null); do
+		i="${i#remote.}"
+		echo "${i/.url*/}"
+	done
+}
+
+__git_list_merge_strategies ()
+{
+	git merge -s help 2>&1 |
+	sed -n -e '/[Aa]vailable strategies are: /,/^$/{
+		s/\.$//
+		s/.*://
+		s/^[ 	]*//
+		s/[ 	]*$//
+		p
+	}'
+}
+
+__git_merge_strategies=
+# 'git merge -s help' (and thus detection of the merge strategy
+# list) fails, unfortunately, if run outside of any git working
+# tree.  __git_merge_strategies is set to the empty string in
+# that case, and the detection will be repeated the next time it
+# is needed.
+__git_compute_merge_strategies ()
+{
+	test -n "$__git_merge_strategies" ||
+	__git_merge_strategies=$(__git_list_merge_strategies)
+}
+
+__git_complete_revlist_file ()
+{
+	local pfx ls ref cur_="$cur"
+	case "$cur_" in
+	*..?*:*)
+		return
+		;;
+	?*:*)
+		ref="${cur_%%:*}"
+		cur_="${cur_#*:}"
+		case "$cur_" in
+		?*/*)
+			pfx="${cur_%/*}"
+			cur_="${cur_##*/}"
+			ls="$ref:$pfx"
+			pfx="$pfx/"
+			;;
+		*)
+			ls="$ref"
+			;;
+		esac
+
+		case "$COMP_WORDBREAKS" in
+		*:*) : great ;;
+		*)   pfx="$ref:$pfx" ;;
+		esac
+
+		__gitcomp_nl "$(git --git-dir="$(__gitdir)" ls-tree "$ls" 2>/dev/null \
+				| sed '/^100... blob /{
+				           s,^.*	,,
+				           s,$, ,
+				       }
+				       /^120000 blob /{
+				           s,^.*	,,
+				           s,$, ,
+				       }
+				       /^040000 tree /{
+				           s,^.*	,,
+				           s,$,/,
+				       }
+				       s/^.*	//')" \
+			"$pfx" "$cur_" ""
+		;;
+	*...*)
+		pfx="${cur_%...*}..."
+		cur_="${cur_#*...}"
+		__gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+		;;
+	*..*)
+		pfx="${cur_%..*}.."
+		cur_="${cur_#*..}"
+		__gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+		;;
+	*)
+		__gitcomp_nl "$(__git_refs)"
+		;;
+	esac
+}
+
+
+# __git_complete_index_file requires 1 argument: the options to pass to
+# ls-file
+__git_complete_index_file ()
+{
+	local pfx cur_="$cur"
+
+	case "$cur_" in
+	?*/*)
+		pfx="${cur_%/*}"
+		cur_="${cur_##*/}"
+		pfx="${pfx}/"
+
+		__gitcomp_file "$(__git_index_files "$1" "$pfx")" "$pfx" "$cur_"
+		;;
+	*)
+		__gitcomp_file "$(__git_index_files "$1")" "" "$cur_"
+		;;
+	esac
+}
+
+# __git_complete_diff_index_file requires 1 argument: the id of a tree
+# object
+__git_complete_diff_index_file ()
+{
+	local pfx cur_="$cur"
+
+	case "$cur_" in
+	?*/*)
+		pfx="${cur_%/*}"
+		cur_="${cur_##*/}"
+		pfx="${pfx}/"
+
+		__gitcomp_file "$(__git_diff_index_files "$1" "$pfx")" "$pfx" "$cur_"
+		;;
+	*)
+		__gitcomp_file "$(__git_diff_index_files "$1")" "" "$cur_"
+		;;
+	esac
+}
+
+__git_complete_file ()
+{
+	__git_complete_revlist_file
+}
+
+__git_complete_revlist ()
+{
+	__git_complete_revlist_file
+}
+
+__git_complete_remote_or_refspec ()
+{
+	local cur_="$cur" cmd="${words[1]}"
+	local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0
+	if [ "$cmd" = "remote" ]; then
+		((c++))
+	fi
+	while [ $c -lt $cword ]; do
+		i="${words[c]}"
+		case "$i" in
+		--mirror) [ "$cmd" = "push" ] && no_complete_refspec=1 ;;
+		--all)
+			case "$cmd" in
+			push) no_complete_refspec=1 ;;
+			fetch)
+				COMPREPLY=()
+				return
+				;;
+			*) ;;
+			esac
+			;;
+		-*) ;;
+		*) remote="$i"; break ;;
+		esac
+		((c++))
+	done
+	if [ -z "$remote" ]; then
+		__gitcomp_nl "$(__git_remotes)"
+		return
+	fi
+	if [ $no_complete_refspec = 1 ]; then
+		COMPREPLY=()
+		return
+	fi
+	[ "$remote" = "." ] && remote=
+	case "$cur_" in
+	*:*)
+		case "$COMP_WORDBREAKS" in
+		*:*) : great ;;
+		*)   pfx="${cur_%%:*}:" ;;
+		esac
+		cur_="${cur_#*:}"
+		lhs=0
+		;;
+	+*)
+		pfx="+"
+		cur_="${cur_#+}"
+		;;
+	esac
+	case "$cmd" in
+	fetch)
+		if [ $lhs = 1 ]; then
+			__gitcomp_nl "$(__git_refs2 "$remote")" "$pfx" "$cur_"
+		else
+			__gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+		fi
+		;;
+	pull|remote)
+		if [ $lhs = 1 ]; then
+			__gitcomp_nl "$(__git_refs "$remote")" "$pfx" "$cur_"
+		else
+			__gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+		fi
+		;;
+	push)
+		if [ $lhs = 1 ]; then
+			__gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+		else
+			__gitcomp_nl "$(__git_refs "$remote")" "$pfx" "$cur_"
+		fi
+		;;
+	esac
+}
+
+__git_complete_strategy ()
+{
+	__git_compute_merge_strategies
+	case "$prev" in
+	-s|--strategy)
+		__gitcomp "$__git_merge_strategies"
+		return 0
+	esac
+	case "$cur" in
+	--strategy=*)
+		__gitcomp "$__git_merge_strategies" "" "${cur##--strategy=}"
+		return 0
+		;;
+	esac
+	return 1
+}
+
+__git_commands () {
+	if test -n "${GIT_TESTING_COMMAND_COMPLETION:-}"
+	then
+		printf "%s" "${GIT_TESTING_COMMAND_COMPLETION}"
+	else
+		git help -a|egrep '^  [a-zA-Z0-9]'
+	fi
+}
+
+__git_list_all_commands ()
+{
+	local i IFS=" "$'\n'
+	for i in $(__git_commands)
+	do
+		case $i in
+		*--*)             : helper pattern;;
+		*) echo $i;;
+		esac
+	done
+}
+
+__git_all_commands=
+__git_compute_all_commands ()
+{
+	test -n "$__git_all_commands" ||
+	__git_all_commands=$(__git_list_all_commands)
+}
+
+__git_list_porcelain_commands ()
+{
+	local i IFS=" "$'\n'
+	__git_compute_all_commands
+	for i in $__git_all_commands
+	do
+		case $i in
+		*--*)             : helper pattern;;
+		applymbox)        : ask gittus;;
+		applypatch)       : ask gittus;;
+		archimport)       : import;;
+		cat-file)         : plumbing;;
+		check-attr)       : plumbing;;
+		check-ignore)     : plumbing;;
+		check-ref-format) : plumbing;;
+		checkout-index)   : plumbing;;
+		commit-tree)      : plumbing;;
+		count-objects)    : infrequent;;
+		credential-cache) : credentials helper;;
+		credential-store) : credentials helper;;
+		cvsexportcommit)  : export;;
+		cvsimport)        : import;;
+		cvsserver)        : daemon;;
+		daemon)           : daemon;;
+		diff-files)       : plumbing;;
+		diff-index)       : plumbing;;
+		diff-tree)        : plumbing;;
+		fast-import)      : import;;
+		fast-export)      : export;;
+		fsck-objects)     : plumbing;;
+		fetch-pack)       : plumbing;;
+		fmt-merge-msg)    : plumbing;;
+		for-each-ref)     : plumbing;;
+		hash-object)      : plumbing;;
+		http-*)           : transport;;
+		index-pack)       : plumbing;;
+		init-db)          : deprecated;;
+		local-fetch)      : plumbing;;
+		lost-found)       : infrequent;;
+		ls-files)         : plumbing;;
+		ls-remote)        : plumbing;;
+		ls-tree)          : plumbing;;
+		mailinfo)         : plumbing;;
+		mailsplit)        : plumbing;;
+		merge-*)          : plumbing;;
+		mktree)           : plumbing;;
+		mktag)            : plumbing;;
+		pack-objects)     : plumbing;;
+		pack-redundant)   : plumbing;;
+		pack-refs)        : plumbing;;
+		parse-remote)     : plumbing;;
+		patch-id)         : plumbing;;
+		peek-remote)      : plumbing;;
+		prune)            : plumbing;;
+		prune-packed)     : plumbing;;
+		quiltimport)      : import;;
+		read-tree)        : plumbing;;
+		receive-pack)     : plumbing;;
+		remote-*)         : transport;;
+		repo-config)      : deprecated;;
+		rerere)           : plumbing;;
+		rev-list)         : plumbing;;
+		rev-parse)        : plumbing;;
+		runstatus)        : plumbing;;
+		sh-setup)         : internal;;
+		shell)            : daemon;;
+		show-ref)         : plumbing;;
+		send-pack)        : plumbing;;
+		show-index)       : plumbing;;
+		ssh-*)            : transport;;
+		stripspace)       : plumbing;;
+		symbolic-ref)     : plumbing;;
+		tar-tree)         : deprecated;;
+		unpack-file)      : plumbing;;
+		unpack-objects)   : plumbing;;
+		update-index)     : plumbing;;
+		update-ref)       : plumbing;;
+		update-server-info) : daemon;;
+		upload-archive)   : plumbing;;
+		upload-pack)      : plumbing;;
+		write-tree)       : plumbing;;
+		var)              : infrequent;;
+		verify-pack)      : infrequent;;
+		verify-tag)       : plumbing;;
+		*) echo $i;;
+		esac
+	done
+}
+
+__git_porcelain_commands=
+__git_compute_porcelain_commands ()
+{
+	__git_compute_all_commands
+	test -n "$__git_porcelain_commands" ||
+	__git_porcelain_commands=$(__git_list_porcelain_commands)
+}
+
+__git_pretty_aliases ()
+{
+	local i IFS=$'\n'
+	for i in $(git --git-dir="$(__gitdir)" config --get-regexp "pretty\..*" 2>/dev/null); do
+		case "$i" in
+		pretty.*)
+			i="${i#pretty.}"
+			echo "${i/ */}"
+			;;
+		esac
+	done
+}
+
+__git_aliases ()
+{
+	local i IFS=$'\n'
+	for i in $(git --git-dir="$(__gitdir)" config --get-regexp "alias\..*" 2>/dev/null); do
+		case "$i" in
+		alias.*)
+			i="${i#alias.}"
+			echo "${i/ */}"
+			;;
+		esac
+	done
+}
+
+# __git_aliased_command requires 1 argument
+__git_aliased_command ()
+{
+	local word cmdline=$(git --git-dir="$(__gitdir)" \
+		config --get "alias.$1")
+	for word in $cmdline; do
+		case "$word" in
+		\!gitk|gitk)
+			echo "gitk"
+			return
+			;;
+		\!*)	: shell command alias ;;
+		-*)	: option ;;
+		*=*)	: setting env ;;
+		git)	: git itself ;;
+		*)
+			echo "$word"
+			return
+		esac
+	done
+}
+
+# __git_find_on_cmdline requires 1 argument
+__git_find_on_cmdline ()
+{
+	local word subcommand c=1
+	while [ $c -lt $cword ]; do
+		word="${words[c]}"
+		for subcommand in $1; do
+			if [ "$subcommand" = "$word" ]; then
+				echo "$subcommand"
+				return
+			fi
+		done
+		((c++))
+	done
+}
+
+__git_has_doubledash ()
+{
+	local c=1
+	while [ $c -lt $cword ]; do
+		if [ "--" = "${words[c]}" ]; then
+			return 0
+		fi
+		((c++))
+	done
+	return 1
+}
+
+# Try to count non option arguments passed on the command line for the
+# specified git command.
+# When options are used, it is necessary to use the special -- option to
+# tell the implementation were non option arguments begin.
+# XXX this can not be improved, since options can appear everywhere, as
+# an example:
+#	git mv x -n y
+#
+# __git_count_arguments requires 1 argument: the git command executed.
+__git_count_arguments ()
+{
+	local word i c=0
+
+	# Skip "git" (first argument)
+	for ((i=1; i < ${#words[@]}; i++)); do
+		word="${words[i]}"
+
+		case "$word" in
+			--)
+				# Good; we can assume that the following are only non
+				# option arguments.
+				((c = 0))
+				;;
+			"$1")
+				# Skip the specified git command and discard git
+				# main options
+				((c = 0))
+				;;
+			?*)
+				((c++))
+				;;
+		esac
+	done
+
+	printf "%d" $c
+}
+
+__git_whitespacelist="nowarn warn error error-all fix"
+
+_git_am ()
+{
+	local dir="$(__gitdir)"
+	if [ -d "$dir"/rebase-apply ]; then
+		__gitcomp "--skip --continue --resolved --abort"
+		return
+	fi
+	case "$cur" in
+	--whitespace=*)
+		__gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
+		return
+		;;
+	--*)
+		__gitcomp "
+			--3way --committer-date-is-author-date --ignore-date
+			--ignore-whitespace --ignore-space-change
+			--interactive --keep --no-utf8 --signoff --utf8
+			--whitespace= --scissors
+			"
+		return
+	esac
+	COMPREPLY=()
+}
+
+_git_apply ()
+{
+	case "$cur" in
+	--whitespace=*)
+		__gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
+		return
+		;;
+	--*)
+		__gitcomp "
+			--stat --numstat --summary --check --index
+			--cached --index-info --reverse --reject --unidiff-zero
+			--apply --no-add --exclude=
+			--ignore-whitespace --ignore-space-change
+			--whitespace= --inaccurate-eof --verbose
+			"
+		return
+	esac
+	COMPREPLY=()
+}
+
+_git_add ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "
+			--interactive --refresh --patch --update --dry-run
+			--ignore-errors --intent-to-add
+			"
+		return
+	esac
+
+	# XXX should we check for --update and --all options ?
+	__git_complete_index_file "--others --modified"
+}
+
+_git_archive ()
+{
+	case "$cur" in
+	--format=*)
+		__gitcomp "$(git archive --list)" "" "${cur##--format=}"
+		return
+		;;
+	--remote=*)
+		__gitcomp_nl "$(__git_remotes)" "" "${cur##--remote=}"
+		return
+		;;
+	--*)
+		__gitcomp "
+			--format= --list --verbose
+			--prefix= --remote= --exec=
+			"
+		return
+		;;
+	esac
+	__git_complete_file
+}
+
+_git_bisect ()
+{
+	__git_has_doubledash && return
+
+	local subcommands="start bad good skip reset visualize replay log run"
+	local subcommand="$(__git_find_on_cmdline "$subcommands")"
+	if [ -z "$subcommand" ]; then
+		if [ -f "$(__gitdir)"/BISECT_START ]; then
+			__gitcomp "$subcommands"
+		else
+			__gitcomp "replay start"
+		fi
+		return
+	fi
+
+	case "$subcommand" in
+	bad|good|reset|skip|start)
+		__gitcomp_nl "$(__git_refs)"
+		;;
+	*)
+		COMPREPLY=()
+		;;
+	esac
+}
+
+_git_branch ()
+{
+	local i c=1 only_local_ref="n" has_r="n"
+
+	while [ $c -lt $cword ]; do
+		i="${words[c]}"
+		case "$i" in
+		-d|-m)	only_local_ref="y" ;;
+		-r)	has_r="y" ;;
+		esac
+		((c++))
+	done
+
+	case "$cur" in
+	--set-upstream-to=*)
+		__gitcomp "$(__git_refs)" "" "${cur##--set-upstream-to=}"
+		;;
+	--*)
+		__gitcomp "
+			--color --no-color --verbose --abbrev= --no-abbrev
+			--track --no-track --contains --merged --no-merged
+			--set-upstream-to= --edit-description --list
+			--unset-upstream
+			"
+		;;
+	*)
+		if [ $only_local_ref = "y" -a $has_r = "n" ]; then
+			__gitcomp_nl "$(__git_heads)"
+		else
+			__gitcomp_nl "$(__git_refs)"
+		fi
+		;;
+	esac
+}
+
+_git_bundle ()
+{
+	local cmd="${words[2]}"
+	case "$cword" in
+	2)
+		__gitcomp "create list-heads verify unbundle"
+		;;
+	3)
+		# looking for a file
+		;;
+	*)
+		case "$cmd" in
+			create)
+				__git_complete_revlist
+			;;
+		esac
+		;;
+	esac
+}
+
+_git_checkout ()
+{
+	__git_has_doubledash && return
+
+	case "$cur" in
+	--conflict=*)
+		__gitcomp "diff3 merge" "" "${cur##--conflict=}"
+		;;
+	--*)
+		__gitcomp "
+			--quiet --ours --theirs --track --no-track --merge
+			--conflict= --orphan --patch
+			"
+		;;
+	*)
+		# check if --track, --no-track, or --no-guess was specified
+		# if so, disable DWIM mode
+		local flags="--track --no-track --no-guess" track=1
+		if [ -n "$(__git_find_on_cmdline "$flags")" ]; then
+			track=''
+		fi
+		__gitcomp_nl "$(__git_refs '' $track)"
+		;;
+	esac
+}
+
+_git_cherry ()
+{
+	__gitcomp "$(__git_refs)"
+}
+
+_git_cherry_pick ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "--edit --no-commit"
+		;;
+	*)
+		__gitcomp_nl "$(__git_refs)"
+		;;
+	esac
+}
+
+_git_clean ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "--dry-run --quiet"
+		return
+		;;
+	esac
+
+	# XXX should we check for -x option ?
+	__git_complete_index_file "--others"
+}
+
+_git_clone ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "
+			--local
+			--no-hardlinks
+			--shared
+			--reference
+			--quiet
+			--no-checkout
+			--bare
+			--mirror
+			--origin
+			--upload-pack
+			--template=
+			--depth
+			--single-branch
+			--branch
+			"
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
+_git_commit ()
+{
+	case "$prev" in
+	-c|-C)
+		__gitcomp_nl "$(__git_refs)" "" "${cur}"
+		return
+		;;
+	esac
+
+	case "$prev" in
+	-c|-C)
+		__gitcomp_nl "$(__git_refs)" "" "${cur}"
+		return
+		;;
+	esac
+
+	case "$cur" in
+	--cleanup=*)
+		__gitcomp "default strip verbatim whitespace
+			" "" "${cur##--cleanup=}"
+		return
+		;;
+	--reuse-message=*|--reedit-message=*|\
+	--fixup=*|--squash=*)
+		__gitcomp_nl "$(__git_refs)" "" "${cur#*=}"
+		return
+		;;
+	--untracked-files=*)
+		__gitcomp "all no normal" "" "${cur##--untracked-files=}"
+		return
+		;;
+	--*)
+		__gitcomp "
+			--all --author= --signoff --verify --no-verify
+			--edit --no-edit
+			--amend --include --only --interactive
+			--dry-run --reuse-message= --reedit-message=
+			--reset-author --file= --message= --template=
+			--cleanup= --untracked-files --untracked-files=
+			--verbose --quiet --fixup= --squash=
+			"
+		return
+	esac
+
+	if git rev-parse --verify --quiet HEAD >/dev/null; then
+		__git_complete_diff_index_file "HEAD"
+	else
+		# This is the first commit
+		__git_complete_index_file "--cached"
+	fi
+}
+
+_git_describe ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "
+			--all --tags --contains --abbrev= --candidates=
+			--exact-match --debug --long --match --always
+			"
+		return
+	esac
+	__gitcomp_nl "$(__git_refs)"
+}
+
+__git_diff_algorithms="myers minimal patience histogram"
+
+__git_diff_common_options="--stat --numstat --shortstat --summary
+			--patch-with-stat --name-only --name-status --color
+			--no-color --color-words --no-renames --check
+			--full-index --binary --abbrev --diff-filter=
+			--find-copies-harder
+			--text --ignore-space-at-eol --ignore-space-change
+			--ignore-all-space --exit-code --quiet --ext-diff
+			--no-ext-diff
+			--no-prefix --src-prefix= --dst-prefix=
+			--inter-hunk-context=
+			--patience --histogram --minimal
+			--raw
+			--dirstat --dirstat= --dirstat-by-file
+			--dirstat-by-file= --cumulative
+			--diff-algorithm=
+"
+
+_git_diff ()
+{
+	__git_has_doubledash && return
+
+	case "$cur" in
+	--diff-algorithm=*)
+		__gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
+		return
+		;;
+	--*)
+		__gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
+			--base --ours --theirs --no-index
+			$__git_diff_common_options
+			"
+		return
+		;;
+	esac
+	__git_complete_revlist_file
+}
+
+__git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
+			tkdiff vimdiff gvimdiff xxdiff araxis p4merge bc3 codecompare
+"
+
+_git_difftool ()
+{
+	__git_has_doubledash && return
+
+	case "$cur" in
+	--tool=*)
+		__gitcomp "$__git_mergetools_common kompare" "" "${cur##--tool=}"
+		return
+		;;
+	--*)
+		__gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
+			--base --ours --theirs
+			--no-renames --diff-filter= --find-copies-harder
+			--relative --ignore-submodules
+			--tool="
+		return
+		;;
+	esac
+	__git_complete_file
+}
+
+__git_fetch_options="
+	--quiet --verbose --append --upload-pack --force --keep --depth=
+	--tags --no-tags --all --prune --dry-run
+"
+
+_git_fetch ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "$__git_fetch_options"
+		return
+		;;
+	esac
+	__git_complete_remote_or_refspec
+}
+
+__git_format_patch_options="
+	--stdout --attach --no-attach --thread --thread= --output-directory
+	--numbered --start-number --numbered-files --keep-subject --signoff
+	--signature --no-signature --in-reply-to= --cc= --full-index --binary
+	--not --all --cover-letter --no-prefix --src-prefix= --dst-prefix=
+	--inline --suffix= --ignore-if-in-upstream --subject-prefix=
+"
+
+_git_format_patch ()
+{
+	case "$cur" in
+	--thread=*)
+		__gitcomp "
+			deep shallow
+			" "" "${cur##--thread=}"
+		return
+		;;
+	--*)
+		__gitcomp "$__git_format_patch_options"
+		return
+		;;
+	esac
+	__git_complete_revlist
+}
+
+_git_fsck ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "
+			--tags --root --unreachable --cache --no-reflogs --full
+			--strict --verbose --lost-found
+			"
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
+_git_gc ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "--prune --aggressive"
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
+_git_gitk ()
+{
+	_gitk
+}
+
+__git_match_ctag() {
+	awk "/^${1////\\/}/ { print \$1 }" "$2"
+}
+
+_git_grep ()
+{
+	__git_has_doubledash && return
+
+	case "$cur" in
+	--*)
+		__gitcomp "
+			--cached
+			--text --ignore-case --word-regexp --invert-match
+			--full-name --line-number
+			--extended-regexp --basic-regexp --fixed-strings
+			--perl-regexp
+			--files-with-matches --name-only
+			--files-without-match
+			--max-depth
+			--count
+			--and --or --not --all-match
+			"
+		return
+		;;
+	esac
+
+	case "$cword,$prev" in
+	2,*|*,-*)
+		if test -r tags; then
+			__gitcomp_nl "$(__git_match_ctag "$cur" tags)"
+			return
+		fi
+		;;
+	esac
+
+	__gitcomp_nl "$(__git_refs)"
+}
+
+_git_help ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "--all --info --man --web"
+		return
+		;;
+	esac
+	__git_compute_all_commands
+	__gitcomp "$__git_all_commands $(__git_aliases)
+		attributes cli core-tutorial cvs-migration
+		diffcore gitk glossary hooks ignore modules
+		namespaces repository-layout tutorial tutorial-2
+		workflows
+		"
+}
+
+_git_init ()
+{
+	case "$cur" in
+	--shared=*)
+		__gitcomp "
+			false true umask group all world everybody
+			" "" "${cur##--shared=}"
+		return
+		;;
+	--*)
+		__gitcomp "--quiet --bare --template= --shared --shared="
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
+_git_ls_files ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "--cached --deleted --modified --others --ignored
+			--stage --directory --no-empty-directory --unmerged
+			--killed --exclude= --exclude-from=
+			--exclude-per-directory= --exclude-standard
+			--error-unmatch --with-tree= --full-name
+			--abbrev --ignored --exclude-per-directory
+			"
+		return
+		;;
+	esac
+
+	# XXX ignore options like --modified and always suggest all cached
+	# files.
+	__git_complete_index_file "--cached"
+}
+
+_git_ls_remote ()
+{
+	__gitcomp_nl "$(__git_remotes)"
+}
+
+_git_ls_tree ()
+{
+	__git_complete_file
+}
+
+# Options that go well for log, shortlog and gitk
+__git_log_common_options="
+	--not --all
+	--branches --tags --remotes
+	--first-parent --merges --no-merges
+	--max-count=
+	--max-age= --since= --after=
+	--min-age= --until= --before=
+	--min-parents= --max-parents=
+	--no-min-parents --no-max-parents
+"
+# Options that go well for log and gitk (not shortlog)
+__git_log_gitk_options="
+	--dense --sparse --full-history
+	--simplify-merges --simplify-by-decoration
+	--left-right --notes --no-notes
+"
+# Options that go well for log and shortlog (not gitk)
+__git_log_shortlog_options="
+	--author= --committer= --grep=
+	--all-match
+"
+
+__git_log_pretty_formats="oneline short medium full fuller email raw format:"
+__git_log_date_formats="relative iso8601 rfc2822 short local default raw"
+
+_git_log ()
+{
+	__git_has_doubledash && return
+
+	local g="$(git rev-parse --git-dir 2>/dev/null)"
+	local merge=""
+	if [ -f "$g/MERGE_HEAD" ]; then
+		merge="--merge"
+	fi
+	case "$cur" in
+	--pretty=*|--format=*)
+		__gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
+			" "" "${cur#*=}"
+		return
+		;;
+	--date=*)
+		__gitcomp "$__git_log_date_formats" "" "${cur##--date=}"
+		return
+		;;
+	--decorate=*)
+		__gitcomp "long short" "" "${cur##--decorate=}"
+		return
+		;;
+	--*)
+		__gitcomp "
+			$__git_log_common_options
+			$__git_log_shortlog_options
+			$__git_log_gitk_options
+			--root --topo-order --date-order --reverse
+			--follow --full-diff
+			--abbrev-commit --abbrev=
+			--relative-date --date=
+			--pretty= --format= --oneline
+			--cherry-pick
+			--graph
+			--decorate --decorate=
+			--walk-reflogs
+			--parents --children
+			$merge
+			$__git_diff_common_options
+			--pickaxe-all --pickaxe-regex
+			"
+		return
+		;;
+	esac
+	__git_complete_revlist
+}
+
+__git_merge_options="
+	--no-commit --no-stat --log --no-log --squash --strategy
+	--commit --stat --no-squash --ff --no-ff --ff-only --edit --no-edit
+"
+
+_git_merge ()
+{
+	__git_complete_strategy && return
+
+	case "$cur" in
+	--*)
+		__gitcomp "$__git_merge_options"
+		return
+	esac
+	__gitcomp_nl "$(__git_refs)"
+}
+
+_git_mergetool ()
+{
+	case "$cur" in
+	--tool=*)
+		__gitcomp "$__git_mergetools_common tortoisemerge" "" "${cur##--tool=}"
+		return
+		;;
+	--*)
+		__gitcomp "--tool="
+		return
+		;;
+	esac
+	COMPREPLY=()
+}
+
+_git_merge_base ()
+{
+	__gitcomp_nl "$(__git_refs)"
+}
+
+_git_mv ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "--dry-run"
+		return
+		;;
+	esac
+
+	if [ $(__git_count_arguments "mv") -gt 0 ]; then
+		# We need to show both cached and untracked files (including
+		# empty directories) since this may not be the last argument.
+		__git_complete_index_file "--cached --others --directory"
+	else
+		__git_complete_index_file "--cached"
+	fi
+}
+
+_git_name_rev ()
+{
+	__gitcomp "--tags --all --stdin"
+}
+
+_git_notes ()
+{
+	local subcommands='add append copy edit list prune remove show'
+	local subcommand="$(__git_find_on_cmdline "$subcommands")"
+
+	case "$subcommand,$cur" in
+	,--*)
+		__gitcomp '--ref'
+		;;
+	,*)
+		case "$prev" in
+		--ref)
+			__gitcomp_nl "$(__git_refs)"
+			;;
+		*)
+			__gitcomp "$subcommands --ref"
+			;;
+		esac
+		;;
+	add,--reuse-message=*|append,--reuse-message=*|\
+	add,--reedit-message=*|append,--reedit-message=*)
+		__gitcomp_nl "$(__git_refs)" "" "${cur#*=}"
+		;;
+	add,--*|append,--*)
+		__gitcomp '--file= --message= --reedit-message=
+				--reuse-message='
+		;;
+	copy,--*)
+		__gitcomp '--stdin'
+		;;
+	prune,--*)
+		__gitcomp '--dry-run --verbose'
+		;;
+	prune,*)
+		;;
+	*)
+		case "$prev" in
+		-m|-F)
+			;;
+		*)
+			__gitcomp_nl "$(__git_refs)"
+			;;
+		esac
+		;;
+	esac
+}
+
+_git_pull ()
+{
+	__git_complete_strategy && return
+
+	case "$cur" in
+	--*)
+		__gitcomp "
+			--rebase --no-rebase
+			$__git_merge_options
+			$__git_fetch_options
+		"
+		return
+		;;
+	esac
+	__git_complete_remote_or_refspec
+}
+
+_git_push ()
+{
+	case "$prev" in
+	--repo)
+		__gitcomp_nl "$(__git_remotes)"
+		return
+	esac
+	case "$cur" in
+	--repo=*)
+		__gitcomp_nl "$(__git_remotes)" "" "${cur##--repo=}"
+		return
+		;;
+	--*)
+		__gitcomp "
+			--all --mirror --tags --dry-run --force --verbose
+			--receive-pack= --repo= --set-upstream
+		"
+		return
+		;;
+	esac
+	__git_complete_remote_or_refspec
+}
+
+_git_rebase ()
+{
+	local dir="$(__gitdir)"
+	if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
+		__gitcomp "--continue --skip --abort"
+		return
+	fi
+	__git_complete_strategy && return
+	case "$cur" in
+	--whitespace=*)
+		__gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
+		return
+		;;
+	--*)
+		__gitcomp "
+			--onto --merge --strategy --interactive
+			--preserve-merges --stat --no-stat
+			--committer-date-is-author-date --ignore-date
+			--ignore-whitespace --whitespace=
+			--autosquash
+			"
+
+		return
+	esac
+	__gitcomp_nl "$(__git_refs)"
+}
+
+_git_reflog ()
+{
+	local subcommands="show delete expire"
+	local subcommand="$(__git_find_on_cmdline "$subcommands")"
+
+	if [ -z "$subcommand" ]; then
+		__gitcomp "$subcommands"
+	else
+		__gitcomp_nl "$(__git_refs)"
+	fi
+}
+
+__git_send_email_confirm_options="always never auto cc compose"
+__git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
+
+_git_send_email ()
+{
+	case "$cur" in
+	--confirm=*)
+		__gitcomp "
+			$__git_send_email_confirm_options
+			" "" "${cur##--confirm=}"
+		return
+		;;
+	--suppress-cc=*)
+		__gitcomp "
+			$__git_send_email_suppresscc_options
+			" "" "${cur##--suppress-cc=}"
+
+		return
+		;;
+	--smtp-encryption=*)
+		__gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
+		return
+		;;
+	--thread=*)
+		__gitcomp "
+			deep shallow
+			" "" "${cur##--thread=}"
+		return
+		;;
+	--*)
+		__gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
+			--compose --confirm= --dry-run --envelope-sender
+			--from --identity
+			--in-reply-to --no-chain-reply-to --no-signed-off-by-cc
+			--no-suppress-from --no-thread --quiet
+			--signed-off-by-cc --smtp-pass --smtp-server
+			--smtp-server-port --smtp-encryption= --smtp-user
+			--subject --suppress-cc= --suppress-from --thread --to
+			--validate --no-validate
+			$__git_format_patch_options"
+		return
+		;;
+	esac
+	__git_complete_revlist
+}
+
+_git_stage ()
+{
+	_git_add
+}
+
+__git_config_get_set_variables ()
+{
+	local prevword word config_file= c=$cword
+	while [ $c -gt 1 ]; do
+		word="${words[c]}"
+		case "$word" in
+		--system|--global|--local|--file=*)
+			config_file="$word"
+			break
+			;;
+		-f|--file)
+			config_file="$word $prevword"
+			break
+			;;
+		esac
+		prevword=$word
+		c=$((--c))
+	done
+
+	git --git-dir="$(__gitdir)" config $config_file --list 2>/dev/null |
+	while read -r line
+	do
+		case "$line" in
+		*.*=*)
+			echo "${line/=*/}"
+			;;
+		esac
+	done
+}
+
+_git_config ()
+{
+	case "$prev" in
+	branch.*.remote)
+		__gitcomp_nl "$(__git_remotes)"
+		return
+		;;
+	branch.*.merge)
+		__gitcomp_nl "$(__git_refs)"
+		return
+		;;
+	remote.*.fetch)
+		local remote="${prev#remote.}"
+		remote="${remote%.fetch}"
+		if [ -z "$cur" ]; then
+			COMPREPLY=("refs/heads/")
+			return
+		fi
+		__gitcomp_nl "$(__git_refs_remotes "$remote")"
+		return
+		;;
+	remote.*.push)
+		local remote="${prev#remote.}"
+		remote="${remote%.push}"
+		__gitcomp_nl "$(git --git-dir="$(__gitdir)" \
+			for-each-ref --format='%(refname):%(refname)' \
+			refs/heads)"
+		return
+		;;
+	pull.twohead|pull.octopus)
+		__git_compute_merge_strategies
+		__gitcomp "$__git_merge_strategies"
+		return
+		;;
+	color.branch|color.diff|color.interactive|\
+	color.showbranch|color.status|color.ui)
+		__gitcomp "always never auto"
+		return
+		;;
+	color.pager)
+		__gitcomp "false true"
+		return
+		;;
+	color.*.*)
+		__gitcomp "
+			normal black red green yellow blue magenta cyan white
+			bold dim ul blink reverse
+			"
+		return
+		;;
+	help.format)
+		__gitcomp "man info web html"
+		return
+		;;
+	log.date)
+		__gitcomp "$__git_log_date_formats"
+		return
+		;;
+	sendemail.aliasesfiletype)
+		__gitcomp "mutt mailrc pine elm gnus"
+		return
+		;;
+	sendemail.confirm)
+		__gitcomp "$__git_send_email_confirm_options"
+		return
+		;;
+	sendemail.suppresscc)
+		__gitcomp "$__git_send_email_suppresscc_options"
+		return
+		;;
+	--get|--get-all|--unset|--unset-all)
+		__gitcomp_nl "$(__git_config_get_set_variables)"
+		return
+		;;
+	*.*)
+		COMPREPLY=()
+		return
+		;;
+	esac
+	case "$cur" in
+	--*)
+		__gitcomp "
+			--system --global --local --file=
+			--list --replace-all
+			--get --get-all --get-regexp
+			--add --unset --unset-all
+			--remove-section --rename-section
+			"
+		return
+		;;
+	branch.*.*)
+		local pfx="${cur%.*}." cur_="${cur##*.}"
+		__gitcomp "remote merge mergeoptions rebase" "$pfx" "$cur_"
+		return
+		;;
+	branch.*)
+		local pfx="${cur%.*}." cur_="${cur#*.}"
+		__gitcomp_nl "$(__git_heads)" "$pfx" "$cur_" "."
+		return
+		;;
+	guitool.*.*)
+		local pfx="${cur%.*}." cur_="${cur##*.}"
+		__gitcomp "
+			argprompt cmd confirm needsfile noconsole norescan
+			prompt revprompt revunmerged title
+			" "$pfx" "$cur_"
+		return
+		;;
+	difftool.*.*)
+		local pfx="${cur%.*}." cur_="${cur##*.}"
+		__gitcomp "cmd path" "$pfx" "$cur_"
+		return
+		;;
+	man.*.*)
+		local pfx="${cur%.*}." cur_="${cur##*.}"
+		__gitcomp "cmd path" "$pfx" "$cur_"
+		return
+		;;
+	mergetool.*.*)
+		local pfx="${cur%.*}." cur_="${cur##*.}"
+		__gitcomp "cmd path trustExitCode" "$pfx" "$cur_"
+		return
+		;;
+	pager.*)
+		local pfx="${cur%.*}." cur_="${cur#*.}"
+		__git_compute_all_commands
+		__gitcomp_nl "$__git_all_commands" "$pfx" "$cur_"
+		return
+		;;
+	remote.*.*)
+		local pfx="${cur%.*}." cur_="${cur##*.}"
+		__gitcomp "
+			url proxy fetch push mirror skipDefaultUpdate
+			receivepack uploadpack tagopt pushurl
+			" "$pfx" "$cur_"
+		return
+		;;
+	remote.*)
+		local pfx="${cur%.*}." cur_="${cur#*.}"
+		__gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "."
+		return
+		;;
+	url.*.*)
+		local pfx="${cur%.*}." cur_="${cur##*.}"
+		__gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur_"
+		return
+		;;
+	esac
+	__gitcomp "
+		add.ignoreErrors
+		advice.commitBeforeMerge
+		advice.detachedHead
+		advice.implicitIdentity
+		advice.pushNonFastForward
+		advice.resolveConflict
+		advice.statusHints
+		alias.
+		am.keepcr
+		apply.ignorewhitespace
+		apply.whitespace
+		branch.autosetupmerge
+		branch.autosetuprebase
+		browser.
+		clean.requireForce
+		color.branch
+		color.branch.current
+		color.branch.local
+		color.branch.plain
+		color.branch.remote
+		color.decorate.HEAD
+		color.decorate.branch
+		color.decorate.remoteBranch
+		color.decorate.stash
+		color.decorate.tag
+		color.diff
+		color.diff.commit
+		color.diff.frag
+		color.diff.func
+		color.diff.meta
+		color.diff.new
+		color.diff.old
+		color.diff.plain
+		color.diff.whitespace
+		color.grep
+		color.grep.context
+		color.grep.filename
+		color.grep.function
+		color.grep.linenumber
+		color.grep.match
+		color.grep.selected
+		color.grep.separator
+		color.interactive
+		color.interactive.error
+		color.interactive.header
+		color.interactive.help
+		color.interactive.prompt
+		color.pager
+		color.showbranch
+		color.status
+		color.status.added
+		color.status.changed
+		color.status.header
+		color.status.nobranch
+		color.status.untracked
+		color.status.updated
+		color.ui
+		commit.status
+		commit.template
+		core.abbrev
+		core.askpass
+		core.attributesfile
+		core.autocrlf
+		core.bare
+		core.bigFileThreshold
+		core.compression
+		core.createObject
+		core.deltaBaseCacheLimit
+		core.editor
+		core.eol
+		core.excludesfile
+		core.fileMode
+		core.fsyncobjectfiles
+		core.gitProxy
+		core.ignoreCygwinFSTricks
+		core.ignoreStat
+		core.ignorecase
+		core.logAllRefUpdates
+		core.loosecompression
+		core.notesRef
+		core.packedGitLimit
+		core.packedGitWindowSize
+		core.pager
+		core.preferSymlinkRefs
+		core.preloadindex
+		core.quotepath
+		core.repositoryFormatVersion
+		core.safecrlf
+		core.sharedRepository
+		core.sparseCheckout
+		core.symlinks
+		core.trustctime
+		core.warnAmbiguousRefs
+		core.whitespace
+		core.worktree
+		diff.autorefreshindex
+		diff.statGraphWidth
+		diff.external
+		diff.ignoreSubmodules
+		diff.mnemonicprefix
+		diff.noprefix
+		diff.renameLimit
+		diff.renames
+		diff.suppressBlankEmpty
+		diff.tool
+		diff.wordRegex
+		diff.algorithm
+		difftool.
+		difftool.prompt
+		fetch.recurseSubmodules
+		fetch.unpackLimit
+		format.attach
+		format.cc
+		format.headers
+		format.numbered
+		format.pretty
+		format.signature
+		format.signoff
+		format.subjectprefix
+		format.suffix
+		format.thread
+		format.to
+		gc.
+		gc.aggressiveWindow
+		gc.auto
+		gc.autopacklimit
+		gc.packrefs
+		gc.pruneexpire
+		gc.reflogexpire
+		gc.reflogexpireunreachable
+		gc.rerereresolved
+		gc.rerereunresolved
+		gitcvs.allbinary
+		gitcvs.commitmsgannotation
+		gitcvs.dbTableNamePrefix
+		gitcvs.dbdriver
+		gitcvs.dbname
+		gitcvs.dbpass
+		gitcvs.dbuser
+		gitcvs.enabled
+		gitcvs.logfile
+		gitcvs.usecrlfattr
+		guitool.
+		gui.blamehistoryctx
+		gui.commitmsgwidth
+		gui.copyblamethreshold
+		gui.diffcontext
+		gui.encoding
+		gui.fastcopyblame
+		gui.matchtrackingbranch
+		gui.newbranchtemplate
+		gui.pruneduringfetch
+		gui.spellingdictionary
+		gui.trustmtime
+		help.autocorrect
+		help.browser
+		help.format
+		http.lowSpeedLimit
+		http.lowSpeedTime
+		http.maxRequests
+		http.minSessions
+		http.noEPSV
+		http.postBuffer
+		http.proxy
+		http.sslCAInfo
+		http.sslCAPath
+		http.sslCert
+		http.sslCertPasswordProtected
+		http.sslKey
+		http.sslVerify
+		http.useragent
+		i18n.commitEncoding
+		i18n.logOutputEncoding
+		imap.authMethod
+		imap.folder
+		imap.host
+		imap.pass
+		imap.port
+		imap.preformattedHTML
+		imap.sslverify
+		imap.tunnel
+		imap.user
+		init.templatedir
+		instaweb.browser
+		instaweb.httpd
+		instaweb.local
+		instaweb.modulepath
+		instaweb.port
+		interactive.singlekey
+		log.date
+		log.decorate
+		log.showroot
+		mailmap.file
+		man.
+		man.viewer
+		merge.
+		merge.conflictstyle
+		merge.log
+		merge.renameLimit
+		merge.renormalize
+		merge.stat
+		merge.tool
+		merge.verbosity
+		mergetool.
+		mergetool.keepBackup
+		mergetool.keepTemporaries
+		mergetool.prompt
+		notes.displayRef
+		notes.rewrite.
+		notes.rewrite.amend
+		notes.rewrite.rebase
+		notes.rewriteMode
+		notes.rewriteRef
+		pack.compression
+		pack.deltaCacheLimit
+		pack.deltaCacheSize
+		pack.depth
+		pack.indexVersion
+		pack.packSizeLimit
+		pack.threads
+		pack.window
+		pack.windowMemory
+		pager.
+		pretty.
+		pull.octopus
+		pull.twohead
+		push.default
+		rebase.autosquash
+		rebase.stat
+		receive.autogc
+		receive.denyCurrentBranch
+		receive.denyDeleteCurrent
+		receive.denyDeletes
+		receive.denyNonFastForwards
+		receive.fsckObjects
+		receive.unpackLimit
+		receive.updateserverinfo
+		remotes.
+		repack.usedeltabaseoffset
+		rerere.autoupdate
+		rerere.enabled
+		sendemail.
+		sendemail.aliasesfile
+		sendemail.aliasfiletype
+		sendemail.bcc
+		sendemail.cc
+		sendemail.cccmd
+		sendemail.chainreplyto
+		sendemail.confirm
+		sendemail.envelopesender
+		sendemail.from
+		sendemail.identity
+		sendemail.multiedit
+		sendemail.signedoffbycc
+		sendemail.smtpdomain
+		sendemail.smtpencryption
+		sendemail.smtppass
+		sendemail.smtpserver
+		sendemail.smtpserveroption
+		sendemail.smtpserverport
+		sendemail.smtpuser
+		sendemail.suppresscc
+		sendemail.suppressfrom
+		sendemail.thread
+		sendemail.to
+		sendemail.validate
+		showbranch.default
+		status.relativePaths
+		status.showUntrackedFiles
+		status.submodulesummary
+		submodule.
+		tar.umask
+		transfer.unpackLimit
+		url.
+		user.email
+		user.name
+		user.signingkey
+		web.browser
+		branch. remote.
+	"
+}
+
+_git_remote ()
+{
+	local subcommands="add rename remove set-head set-branches set-url show prune update"
+	local subcommand="$(__git_find_on_cmdline "$subcommands")"
+	if [ -z "$subcommand" ]; then
+		__gitcomp "$subcommands"
+		return
+	fi
+
+	case "$subcommand" in
+	rename|remove|set-url|show|prune)
+		__gitcomp_nl "$(__git_remotes)"
+		;;
+	set-head|set-branches)
+		__git_complete_remote_or_refspec
+		;;
+	update)
+		local i c='' IFS=$'\n'
+		for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do
+			i="${i#remotes.}"
+			c="$c ${i/ */}"
+		done
+		__gitcomp "$c"
+		;;
+	*)
+		COMPREPLY=()
+		;;
+	esac
+}
+
+_git_replace ()
+{
+	__gitcomp_nl "$(__git_refs)"
+}
+
+_git_reset ()
+{
+	__git_has_doubledash && return
+
+	case "$cur" in
+	--*)
+		__gitcomp "--merge --mixed --hard --soft --patch"
+		return
+		;;
+	esac
+	__gitcomp_nl "$(__git_refs)"
+}
+
+_git_revert ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "--edit --mainline --no-edit --no-commit --signoff"
+		return
+		;;
+	esac
+	__gitcomp_nl "$(__git_refs)"
+}
+
+_git_rm ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "--cached --dry-run --ignore-unmatch --quiet"
+		return
+		;;
+	esac
+
+	__git_complete_index_file "--cached"
+}
+
+_git_shortlog ()
+{
+	__git_has_doubledash && return
+
+	case "$cur" in
+	--*)
+		__gitcomp "
+			$__git_log_common_options
+			$__git_log_shortlog_options
+			--numbered --summary
+			"
+		return
+		;;
+	esac
+	__git_complete_revlist
+}
+
+_git_show ()
+{
+	__git_has_doubledash && return
+
+	case "$cur" in
+	--pretty=*|--format=*)
+		__gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
+			" "" "${cur#*=}"
+		return
+		;;
+	--diff-algorithm=*)
+		__gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
+		return
+		;;
+	--*)
+		__gitcomp "--pretty= --format= --abbrev-commit --oneline
+			$__git_diff_common_options
+			"
+		return
+		;;
+	esac
+	__git_complete_file
+}
+
+_git_show_branch ()
+{
+	case "$cur" in
+	--*)
+		__gitcomp "
+			--all --remotes --topo-order --current --more=
+			--list --independent --merge-base --no-name
+			--color --no-color
+			--sha1-name --sparse --topics --reflog
+			"
+		return
+		;;
+	esac
+	__git_complete_revlist
+}
+
+_git_stash ()
+{
+	local save_opts='--keep-index --no-keep-index --quiet --patch'
+	local subcommands='save list show apply clear drop pop create branch'
+	local subcommand="$(__git_find_on_cmdline "$subcommands")"
+	if [ -z "$subcommand" ]; then
+		case "$cur" in
+		--*)
+			__gitcomp "$save_opts"
+			;;
+		*)
+			if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
+				__gitcomp "$subcommands"
+			else
+				COMPREPLY=()
+			fi
+			;;
+		esac
+	else
+		case "$subcommand,$cur" in
+		save,--*)
+			__gitcomp "$save_opts"
+			;;
+		apply,--*|pop,--*)
+			__gitcomp "--index --quiet"
+			;;
+		show,--*|drop,--*|branch,--*)
+			COMPREPLY=()
+			;;
+		show,*|apply,*|drop,*|pop,*|branch,*)
+			__gitcomp_nl "$(git --git-dir="$(__gitdir)" stash list \
+					| sed -n -e 's/:.*//p')"
+			;;
+		*)
+			COMPREPLY=()
+			;;
+		esac
+	fi
+}
+
+_git_submodule ()
+{
+	__git_has_doubledash && return
+
+	local subcommands="add status init update summary foreach sync"
+	if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
+		case "$cur" in
+		--*)
+			__gitcomp "--quiet --cached"
+			;;
+		*)
+			__gitcomp "$subcommands"
+			;;
+		esac
+		return
+	fi
+}
+
+_git_svn ()
+{
+	local subcommands="
+		init fetch clone rebase dcommit log find-rev
+		set-tree commit-diff info create-ignore propget
+		proplist show-ignore show-externals branch tag blame
+		migrate mkdirs reset gc
+		"
+	local subcommand="$(__git_find_on_cmdline "$subcommands")"
+	if [ -z "$subcommand" ]; then
+		__gitcomp "$subcommands"
+	else
+		local remote_opts="--username= --config-dir= --no-auth-cache"
+		local fc_opts="
+			--follow-parent --authors-file= --repack=
+			--no-metadata --use-svm-props --use-svnsync-props
+			--log-window-size= --no-checkout --quiet
+			--repack-flags --use-log-author --localtime
+			--ignore-paths= $remote_opts
+			"
+		local init_opts="
+			--template= --shared= --trunk= --tags=
+			--branches= --stdlayout --minimize-url
+			--no-metadata --use-svm-props --use-svnsync-props
+			--rewrite-root= --prefix= --use-log-author
+			--add-author-from $remote_opts
+			"
+		local cmt_opts="
+			--edit --rmdir --find-copies-harder --copy-similarity=
+			"
+
+		case "$subcommand,$cur" in
+		fetch,--*)
+			__gitcomp "--revision= --fetch-all $fc_opts"
+			;;
+		clone,--*)
+			__gitcomp "--revision= $fc_opts $init_opts"
+			;;
+		init,--*)
+			__gitcomp "$init_opts"
+			;;
+		dcommit,--*)
+			__gitcomp "
+				--merge --strategy= --verbose --dry-run
+				--fetch-all --no-rebase --commit-url
+				--revision --interactive $cmt_opts $fc_opts
+				"
+			;;
+		set-tree,--*)
+			__gitcomp "--stdin $cmt_opts $fc_opts"
+			;;
+		create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
+		show-externals,--*|mkdirs,--*)
+			__gitcomp "--revision="
+			;;
+		log,--*)
+			__gitcomp "
+				--limit= --revision= --verbose --incremental
+				--oneline --show-commit --non-recursive
+				--authors-file= --color
+				"
+			;;
+		rebase,--*)
+			__gitcomp "
+				--merge --verbose --strategy= --local
+				--fetch-all --dry-run $fc_opts
+				"
+			;;
+		commit-diff,--*)
+			__gitcomp "--message= --file= --revision= $cmt_opts"
+			;;
+		info,--*)
+			__gitcomp "--url"
+			;;
+		branch,--*)
+			__gitcomp "--dry-run --message --tag"
+			;;
+		tag,--*)
+			__gitcomp "--dry-run --message"
+			;;
+		blame,--*)
+			__gitcomp "--git-format"
+			;;
+		migrate,--*)
+			__gitcomp "
+				--config-dir= --ignore-paths= --minimize
+				--no-auth-cache --username=
+				"
+			;;
+		reset,--*)
+			__gitcomp "--revision= --parent"
+			;;
+		*)
+			COMPREPLY=()
+			;;
+		esac
+	fi
+}
+
+_git_tag ()
+{
+	local i c=1 f=0
+	while [ $c -lt $cword ]; do
+		i="${words[c]}"
+		case "$i" in
+		-d|-v)
+			__gitcomp_nl "$(__git_tags)"
+			return
+			;;
+		-f)
+			f=1
+			;;
+		esac
+		((c++))
+	done
+
+	case "$prev" in
+	-m|-F)
+		COMPREPLY=()
+		;;
+	-*|tag)
+		if [ $f = 1 ]; then
+			__gitcomp_nl "$(__git_tags)"
+		else
+			COMPREPLY=()
+		fi
+		;;
+	*)
+		__gitcomp_nl "$(__git_refs)"
+		;;
+	esac
+}
+
+_git_whatchanged ()
+{
+	_git_log
+}
+
+__git_main ()
+{
+	local i c=1 command __git_dir
+
+	while [ $c -lt $cword ]; do
+		i="${words[c]}"
+		case "$i" in
+		--git-dir=*) __git_dir="${i#--git-dir=}" ;;
+		--bare)      __git_dir="." ;;
+		--help) command="help"; break ;;
+		-c) c=$((++c)) ;;
+		-*) ;;
+		*) command="$i"; break ;;
+		esac
+		((c++))
+	done
+
+	if [ -z "$command" ]; then
+		case "$cur" in
+		--*)   __gitcomp "
+			--paginate
+			--no-pager
+			--git-dir=
+			--bare
+			--version
+			--exec-path
+			--exec-path=
+			--html-path
+			--info-path
+			--work-tree=
+			--namespace=
+			--no-replace-objects
+			--help
+			"
+			;;
+		*)     __git_compute_porcelain_commands
+		       __gitcomp "$__git_porcelain_commands $(__git_aliases)" ;;
+		esac
+		return
+	fi
+
+	local completion_func="_git_${command//-/_}"
+	declare -f $completion_func >/dev/null && $completion_func && return
+
+	local expansion=$(__git_aliased_command "$command")
+	if [ -n "$expansion" ]; then
+		completion_func="_git_${expansion//-/_}"
+		declare -f $completion_func >/dev/null && $completion_func
+	fi
+}
+
+__gitk_main ()
+{
+	__git_has_doubledash && return
+
+	local g="$(__gitdir)"
+	local merge=""
+	if [ -f "$g/MERGE_HEAD" ]; then
+		merge="--merge"
+	fi
+	case "$cur" in
+	--*)
+		__gitcomp "
+			$__git_log_common_options
+			$__git_log_gitk_options
+			$merge
+			"
+		return
+		;;
+	esac
+	__git_complete_revlist
+}
+
+if [[ -n ${ZSH_VERSION-} ]]; then
+	echo "WARNING: this script is deprecated, please see git-completion.zsh" 1>&2
+
+	autoload -U +X compinit && compinit
+
+	__gitcomp ()
+	{
+		emulate -L zsh
+
+		local cur_="${3-$cur}"
+
+		case "$cur_" in
+		--*=)
+			;;
+		*)
+			local c IFS=$' \t\n'
+			local -a array
+			for c in ${=1}; do
+				c="$c${4-}"
+				case $c in
+				--*=*|*.) ;;
+				*) c="$c " ;;
+				esac
+				array[$#array+1]="$c"
+			done
+			compset -P '*[=:]'
+			compadd -Q -S '' -p "${2-}" -a -- array && _ret=0
+			;;
+		esac
+	}
+
+	__gitcomp_nl ()
+	{
+		emulate -L zsh
+
+		local IFS=$'\n'
+		compset -P '*[=:]'
+		compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
+	}
+
+	__gitcomp_file ()
+	{
+		emulate -L zsh
+
+		local IFS=$'\n'
+		compset -P '*[=:]'
+		compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
+	}
+
+	__git_zsh_helper ()
+	{
+		emulate -L ksh
+		local cur cword prev
+		cur=${words[CURRENT-1]}
+		prev=${words[CURRENT-2]}
+		let cword=CURRENT-1
+		__${service}_main
+	}
+
+	_git ()
+	{
+		emulate -L zsh
+		local _ret=1
+		__git_zsh_helper
+		let _ret && _default -S '' && _ret=0
+		return _ret
+	}
+
+	compdef _git git gitk
+	return
+elif [[ -n ${BASH_VERSION-} ]]; then
+	if ((${BASH_VERSINFO[0]} < 4)); then
+		# compopt is not supported
+		__git_index_file_list_filter ()
+		{
+			__git_index_file_list_filter_compat
+		}
+	fi
+fi
+
+__git_func_wrap ()
+{
+	local cur words cword prev
+	_get_comp_words_by_ref -n =: cur words cword prev
+	$1
+}
+
+# Setup completion for certain functions defined above by setting common
+# variables and workarounds.
+# This is NOT a public function; use at your own risk.
+__git_complete ()
+{
+	local wrapper="__git_wrap${2}"
+	eval "$wrapper () { __git_func_wrap $2 ; }"
+	complete -o bashdefault -o default -o nospace -F $wrapper $1 2>/dev/null \
+		|| complete -o default -o nospace -F $wrapper $1
+}
+
+# wrapper for backwards compatibility
+_git ()
+{
+	__git_wrap__git_main
+}
+
+# wrapper for backwards compatibility
+_gitk ()
+{
+	__git_wrap__gitk_main
+}
+
+__git_complete git __git_main
+__git_complete gitk __gitk_main
+
+# The following are necessary only for Cygwin, and only are needed
+# when the user has tab-completed the executable name and consequently
+# included the '.exe' suffix.
+#
+if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
+__git_complete git.exe __git_main
+fi
diff --git a/bash_completion/repo.bash b/bash_completion/repo.bash
new file mode 100755
index 0000000..9ae5e00
--- /dev/null
+++ b/bash_completion/repo.bash
@@ -0,0 +1,655 @@
+# -*- mode: sh; -*-
+
+declare -A CMD_HANDLERS
+CMD_HANDLERS=(
+    ["init"]=_repo_init
+    ["help"]=_repo_help
+    ["abandon"]=_repo_abandon
+    ["branch"]=_repo_branch
+    ["branches"]=_repo_branches
+    ["checkout"]=_repo_checkout
+    ["cherry-pick"]=_repo_cherry_pick
+    ["diff"]=_repo_diff
+    ["download"]=_repo_download
+    ["forall"]=_repo_forall
+    ["grep"]=_repo_grep
+    ["list"]=_repo_list
+    ["prune"]=_repo_prune
+    ["rebase"]=_repo_rebase
+    ["selfupdate"]=_repo_selfupdate
+    ["smartsync"]=_repo_smartsync
+    ["stage"]=_repo_stage
+    ["start"]=_repo_start
+    ["status"]=_repo_status
+    ["sync"]=_repo_sync
+    ["upload"]=_repo_upload
+    ["version"]=_repo_version
+)
+
+# To be populated by command handlers.
+declare -a OPTIONS
+declare -A ARG_OPTIONS
+
+declare cur
+declare prev
+
+_init_cur_prev() {
+    cur=$(_get_cword "=")
+    prev=$(_get_cword "=" 1)
+
+    _split_longopt
+}
+
+_find_repo() {
+    local dir=$(pwd)
+    local found=1
+
+    while [ "${dir}" != / ]
+    do
+        if [ -e "${dir}/.repo/repo/main.py" ]
+        then
+            found=0
+            break
+        fi
+
+        dir=$(cd "${dir}/.." && pwd)
+    done
+
+    if [ ${found} -eq 0 ]
+    then
+        echo "${dir}"
+    fi
+}
+
+_is_repo_dir() {
+    local repo_root=$(_find_repo)
+
+    [ -n "${repo_root}" ]
+}
+
+_gen_comps() {
+    local completions="$1"
+    local suffix="${2:- }"
+
+    local -i i
+    local -a tmp=( $(compgen -W "${completions}" -- ${cur}) )
+
+    for (( i=0; i < ${#tmp[*]}; i++ ))
+    do
+        tmp[$i]="${tmp[$i]}${suffix}"
+    done
+
+    COMPREPLY=(
+        "${COMPREPLY[@]}"
+        "${tmp[@]}"
+    )
+}
+
+_strip_colors () {
+    # taken from http://goo.gl/7KlLZ
+    sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
+}
+
+_no_completion() {
+    true
+}
+
+_command_completion() {
+    local cmds
+
+    if _is_repo_dir
+    then
+        cmds=("abandon" "branch" "branches" "checkout" "cherry-pick" "diff"
+            "download" "forall" "grep" "help" "init" "list" "prune" "rebase"
+            "selfupdate" "smartsync" "stage" "start" "status" "sync"
+            "upload" "version")
+    else
+        cmds=("help" "init")
+    fi
+
+    _gen_comps "${cmds[*]}"
+}
+
+_branch_completion() {
+    local raw_branches
+
+    # separate statement required to be able to access exit code
+    raw_branches=$(repo branches 2>/dev/null)
+
+    if [ $? -eq 0 ]
+    then
+        local branches=$(
+            echo "${raw_branches}" |
+            _strip_colors | awk 'BEGIN { FS="|" } { print $1 }' | cut -c 3-
+        )
+
+        _gen_comps "${branches}"
+    fi
+}
+
+_dir_completion() {
+    _filedir -d
+}
+
+_project_completion() {
+    local repo_root=$(_find_repo)
+
+    if [ -n "${repo_root}" -a -f "${repo_root}/.repo/project.list" ]
+    then
+        local projects=$(cat "${repo_root}/.repo/project.list")
+        _gen_comps "${projects}"
+    fi
+}
+
+_manifest_completion() {
+    local repo_root=$(_find_repo)
+
+    if [ -n "${repo_root}" ]
+    then
+        local manifests_dir="${repo_root}/.repo/manifests"
+        local git_dir="${manifests_dir}/.git"
+        local candidates
+
+        manifests=$(
+            git --git-dir "${git_dir}" ls-files "*.xml" 2>/dev/null)
+
+        if [ $? -eq 0 ]
+        then
+            _gen_comps "${manifests}"
+        fi
+    fi
+}
+
+_path_cmd_completion() {
+    _gen_comps "$(compgen -c ${cur})"
+}
+
+_is_option() {
+    local opt="$1"
+
+    [[ "${opt}" == -* ]]
+}
+
+_is_long_option() {
+    local opt="$1"
+
+    [[ "${opt}" == --* ]]
+}
+
+_expects_arg() {
+    local opt="$1"
+
+    if [[ ${ARG_OPTIONS[$opt]} ]]
+    then
+        return 0
+    else
+        return 1
+    fi
+}
+
+_handle_options() {
+    if _expects_arg "${prev}"
+    then
+        local handler=${ARG_OPTIONS[$prev]}
+        eval ${handler} "${cur}"
+    elif _is_option "${cur}"
+    then
+        _gen_comps "${OPTIONS[*]}"
+
+        local arg_short
+        local arg_long
+
+        for opt in "${!ARG_OPTIONS[@]}"
+        do
+            if _is_long_option "${opt}"
+            then
+                arg_long="${arg_long} ${opt}"
+            else
+                arg_short="${arg_short} ${opt}"
+            fi
+        done
+
+        _gen_comps "${arg_short}"
+        _gen_comps "${arg_long}" "="
+    else
+        return 1
+    fi
+
+    return 0
+}
+
+_is_known_shortopt() {
+    local needle="$1"
+
+    for opt in ${OPTIONS[@]}
+    do
+        if [ "${opt}" = "${needle}" ]
+        then
+            return 0
+        fi
+    done
+
+    return 1
+}
+
+_is_known_longopt() {
+    local needle="$1"
+
+    [[ ${ARG_OPTIONS[$1]} ]]
+}
+
+_arg_index() {
+    local -i i=2               # skip repo and command
+    local -i ix=0
+
+    while [ ${i} -lt ${COMP_CWORD} ]
+    do
+        if _is_known_shortopt "${COMP_WORDS[i]}"
+        then
+            i+=1
+        elif _is_known_longopt "${COMP_WORDS[i]}"
+        then
+            i+=2
+        elif _is_option "${COMP_WORDS[i]}"
+        then
+            i+=1
+        else
+            i+=1
+            ix+=1
+        fi
+    done
+
+    eval $1="${ix}"
+}
+
+_when_ix() {
+    local ix="$1"
+    local completion="$2"
+
+    _arg_index arg_ix
+
+    if [ ${arg_ix} -eq ${ix} ]
+    then
+        ${completion}
+        return 0
+    else
+        return 1
+    fi
+}
+
+_when_first() {
+    _when_ix 0 "$1"
+}
+
+_when_even() {
+    local completion="$1"
+
+    _arg_index arg_ix
+
+    if [ $(( ${arg_ix} % 2 )) -eq 0 ]
+    then
+        ${completion}
+        return 0
+    else
+        return 1
+    fi
+}
+
+_cmp_opts() {
+    local opt="$1"
+    local word="$2"
+
+    if _is_option "${opt}" && ! _is_long_option "${opt}"
+    then
+        [ "${word}" == "${opt}" ]
+    else
+        [[ "${word}" == "${opt}"=* || "${word}" == "${opt}" ]]
+    fi
+}
+
+_before() {
+    local completion="$1"
+    local words
+
+    shift
+
+    _get_comp_words_by_ref -n = words
+
+    for word in "${words[@]}"
+    do
+        for needle in "$@"
+        do
+            if _cmp_opts "${needle}" "${word}"
+            then
+                return 1
+            fi
+        done
+    done
+
+    ${completion}
+    return 0
+}
+
+_repo_init() {
+    OPTIONS=(
+        "-h" "--help"
+        "-q" "--quite"
+        "--mirror"
+        "--no-repo-verify"
+    )
+
+    ARG_OPTIONS=(
+        ["-u"]=_no_completion
+        ["--manifest-url"]=_no_completion
+        ["-b"]=_no_completion
+        ["--manifest-branch"]=_no_completion
+        ["-m"]=_manifest_completion
+        ["--manifest-name"]=_manifest_completion
+        ["--reference"]=_dir_completion
+        ["--repo-url"]=_no_completion
+        ["--repo-branch"]=_no_completion
+    )
+
+    _handle_options
+}
+
+_repo_help() {
+    OPTIONS=(
+        "-a" "--all"
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options || _when_first _command_completion
+}
+
+_repo_abandon() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options || _when_first _branch_completion || _project_completion
+}
+
+_repo_branch() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options
+}
+
+_repo_branches() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options
+}
+
+_repo_checkout() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options || _when_first _branch_completion || _project_completion
+}
+
+_repo_cherry_pick() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options
+}
+
+_repo_diff() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options || _project_completion
+}
+
+_repo_download() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options || _when_even _project_completion
+}
+
+_repo_forall() {
+    OPTIONS=(
+        "-h" "--help"
+        "-p"
+        "-v" "--verbose"
+    )
+
+    ARG_OPTIONS=(
+        ["-c"]=_path_cmd_completion
+        ["--command"]=_path_cmd_completion
+    )
+
+    _handle_options || _before _project_completion -c --command || _filedir
+}
+
+_repo_grep() {
+    OPTIONS=(
+        "-h" "--help"
+        "--cached"
+        "-r" "--revision"
+        "-i" "--ignore-case"
+        "-a" "--text"
+        "-I"
+        "-w" "--word-regexp"
+        "-v" "--invert-match"
+        "-G" "--basic-regexp"
+        "-E" "--extended-regexp"
+        "-F" "--fixed-strings"
+        "--all-match"
+        "--and" "--or" "--not"
+        "-(" "-)"
+        "-n"
+        "-l" "--name-only" "--files-with-matches"
+        "-L" "--files-without-match"
+    )
+
+    ARG_OPTIONS=(
+        ["-e"]=_no_completion
+        ["-C"]=_no_completion
+        ["-B"]=_no_completion
+        ["-A"]=_no_completion
+    )
+
+    _handle_options || _project_completion
+}
+
+_repo_list() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options || _project_completion
+}
+
+_repo_prune() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options || _project_completion
+}
+
+_repo_rebase() {
+    OPTIONS=(
+        "-h" "--help"
+        "-i" "--interactive"
+        "-f" "--force-rebase"
+        "--no-ff"
+        "-q" "--quiet"
+        "--autosquash"
+    )
+
+    ARG_OPTIONS=(
+        ["--whitespace"]=_no_completion
+    )
+
+    _handle_options || _project_completion
+}
+
+_repo_selfupdate() {
+    OPTIONS=(
+        "-h" "--help"
+        "--no-repo-verify"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options
+}
+
+_repo_smartsync() {
+    OPTIONS=(
+        "-h" "--help"
+        "-f" "--force-broken"
+        "-l" "--local-only"
+        "-n" "--network-only"
+        "-d" "--detach"
+        "-q" "--quiet"
+        "--no-repo-verify"
+    )
+
+    ARG_OPTIONS=(
+        ["-j"]=_no_completion
+        ["--jobs"]=_no_completion
+
+    )
+
+    _handle_options || _project_completion
+}
+
+_repo_stage() {
+    OPTIONS=(
+        "-h" "--help"
+        "-i" "--interactive"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options || _project_completion
+}
+
+_repo_start() {
+    OPTIONS=(
+        "-h" "--help"
+        "--all"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options || _when_first _branch_completion || _project_completion
+}
+
+_repo_status() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=(
+        ["-j"]=_no_completion
+        ["--jobs"]=_no_completion
+    )
+
+    _handle_options || _project_completion
+}
+
+_repo_sync() {
+    OPTIONS=(
+        "-h" "--help"
+        "-f" "--force-broken"
+             "--force-sync"
+        "-l" "--local-only"
+        "-n" "--network-only"
+        "-d" "--detach"
+        "-q" "--quiet"
+        "-s" "--smart-sync"
+        "--no-repo-verify"
+    )
+
+    ARG_OPTIONS=(
+        ["-j"]=_no_completion
+        ["--jobs"]=_no_completion
+    )
+
+    _handle_options || _project_completion
+}
+
+_repo_upload() {
+    OPTIONS=(
+        "-h" "--help"
+        "-t"
+        "--no-verify"
+        "--verify"
+    )
+
+    ARG_OPTIONS=(
+        ["--re"]=_no_completion
+        ["--reviewers"]=_no_completion
+        ["--cc"]=_no_completion
+        ["--br"]=_branch_completion
+    )
+
+    _handle_options || _project_completion
+}
+
+_repo_version() {
+    OPTIONS=(
+        "-h" "--help"
+    )
+
+    ARG_OPTIONS=()
+
+    _handle_options
+}
+
+_repo() {
+    COMPREPLY=()
+
+    _init_cur_prev
+
+    if [ ${COMP_CWORD} -eq 1 ]
+    then
+        _command_completion
+    else
+        local cmd=${COMP_WORDS[1]}
+        local handler=${CMD_HANDLERS["${cmd}"]}
+        if [ -n ${handler} ]
+        then
+            eval ${handler}
+        fi
+    fi
+
+    return 0
+}
+
+complete -o nospace -F _repo repo
diff --git a/bliss-device-targets b/bliss-device-targets
new file mode 100644
index 0000000..d501a45
--- /dev/null
+++ b/bliss-device-targets
@@ -0,0 +1,5 @@
+# List Of All Officially Supported Devices
+# Bliss :)
+
+bliss_hammerhead-userdebug
+bliss_shamu-userdebug
diff --git a/build/envsetup.sh b/build/envsetup.sh
index bc1aed9..2b3259d 100644
--- a/build/envsetup.sh
+++ b/build/envsetup.sh
@@ -1,11 +1,11 @@
-# slim functions that extend build/envsetup.sh
+# Bliss functions that extend build/envsetup.sh
 
-function slim_device_combos()
+function bliss_device_combos()
 {
     local T list_file variant device
 
     T="$(gettop)"
-    list_file="${T}/vendor/slim/slim.devices"
+    list_file="${T}/vendor/bliss/bliss-device-targets"
     variant="userdebug"
 
     if [[ $1 ]]
@@ -27,45 +27,45 @@
     if [[ ! -f "${list_file}" ]]
     then
         echo "unable to find device list: ${list_file}"
-        list_file="${T}/vendor/slim/slim.devices"
+        list_file="${T}/vendor/bliss/bliss-device-targets"
         echo "defaulting device list file to: ${list_file}"
     fi
 
     while IFS= read -r device
     do
-        add_lunch_combo "slim_${device}-${variant}"
+        add_lunch_combo "bliss_${device}-${variant}"
     done < "${list_file}"
 }
 
-function slim_rename_function()
+function bliss_rename_function()
 {
-    eval "original_slim_$(declare -f ${1})"
+    eval "original_bliss_$(declare -f ${1})"
 }
 
-function _slim_build_hmm() #hidden
+function _bliss_build_hmm() #hidden
 {
     printf "%-8s %s" "${1}:" "${2}"
 }
 
-function slim_append_hmm()
+function bliss_append_hmm()
 {
-    HMM_DESCRIPTIVE=("${HMM_DESCRIPTIVE[@]}" "$(_slim_build_hmm "$1" "$2")")
+    HMM_DESCRIPTIVE=("${HMM_DESCRIPTIVE[@]}" "$(_bliss_build_hmm "$1" "$2")")
 }
 
-function slim_add_hmm_entry()
+function bliss_add_hmm_entry()
 {
     for c in ${!HMM_DESCRIPTIVE[*]}
     do
         if [[ "${1}" == $(echo "${HMM_DESCRIPTIVE[$c]}" | cut -f1 -d":") ]]
         then
-            HMM_DESCRIPTIVE[${c}]="$(_slim_build_hmm "$1" "$2")"
+            HMM_DESCRIPTIVE[${c}]="$(_bliss_build_hmm "$1" "$2")"
             return
         fi
     done
-    slim_append_hmm "$1" "$2"
+    bliss_append_hmm "$1" "$2"
 }
 
-function slimremote()
+function blissremote()
 {
     local proj pfx project
 
@@ -74,7 +74,7 @@
         echo "Not in a git directory. Please run this from an Android repository you wish to set up."
         return
     fi
-    git remote rm slim 2> /dev/null
+    git remote rm bliss 2> /dev/null
 
     proj="$(pwd -P | sed "s#$ANDROID_BUILD_TOP/##g")"
 
@@ -84,8 +84,8 @@
 
     project="${proj//\//_}"
 
-    git remote add slim "git@github.com:SlimRoms/$pfx$project"
-    echo "Remote 'slim' created"
+    git remote add bliss "git@github.com:BlissRoms/$pfx$project"
+    echo "Remote 'bliss' created"
 }
 
 function cmremote()
@@ -145,11 +145,11 @@
     echo "Remote 'caf' created"
 }
 
-function slim_push()
+function bliss_push()
 {
     local branch ssh_name path_opt proj
-    branch="lp5.1"
-    ssh_name="slim_review"
+    branch="mm6.0"
+    ssh_name="bliss_review"
     path_opt=
 
     if [[ "$1" ]]
@@ -167,25 +167,25 @@
         proj="android_$proj"
     fi
 
-    git $path_opt push "ssh://${ssh_name}/SlimRoms/$proj" "HEAD:refs/for/$branch"
+    git $path_opt push "ssh://${ssh_name}/BlissRoms/$proj" "HEAD:refs/for/$branch"
 }
 
 
-slim_rename_function hmm
+bliss_rename_function hmm
 function hmm() #hidden
 {
     local i T
     T="$(gettop)"
-    original_slim_hmm
+    original_bliss_hmm
     echo
 
-    echo "vendor/slim extended functions. The complete list is:"
-    for i in $(grep -P '^function .*$' "$T/vendor/slim/build/envsetup.sh" | grep -v "#hidden" | sed 's/function \([a-z_]*\).*/\1/' | sort | uniq); do
+    echo "vendor/bliss extended functions. The complete list is:"
+    for i in $(grep -P '^function .*$' "$T/vendor/bliss/build/envsetup.sh" | grep -v "#hidden" | sed 's/function \([a-z_]*\).*/\1/' | sort | uniq); do
         echo "$i"
     done |column
 }
 
-slim_append_hmm "slimremote" "Add a git remote for matching SLIM repository"
-slim_append_hmm "cmremote" "Add a git remote for matching CM repository"
-slim_append_hmm "aospremote" "Add git remote for matching AOSP repository"
-slim_append_hmm "cafremote" "Add git remote for matching CodeAurora repository."
+bliss_append_hmm "blissremote" "Add a git remote for matching SLIM repository"
+bliss_append_hmm "cmremote" "Add a git remote for matching CM repository"
+bliss_append_hmm "aospremote" "Add git remote for matching AOSP repository"
+bliss_append_hmm "cafremote" "Add git remote for matching CodeAurora repository."
diff --git a/config/bliss_audio.mk b/config/bliss_audio.mk
new file mode 100644
index 0000000..7e9fd65
--- /dev/null
+++ b/config/bliss_audio.mk
@@ -0,0 +1,24 @@
+#
+# Bliss Audio Files
+#
+
+ALARM_PATH := vendor/bliss/prebuilt/common/media/audio/alarms
+NOTIFICATION_PATH := vendor/bliss/prebuilt/common/media/audio/notifications
+RINGTONE_PATH := vendor/bliss/prebuilt/common/media/audio/ringtones
+UI_PATH := vendor/bliss/prebuilt/common/media/audio/ui
+
+# Alarms
+PRODUCT_COPY_FILES += \
+    $(ALARM_PATH)/CyanAlarm.ogg:system/media/audio/alarms/CyanAlarm.ogg \
+    $(ALARM_PATH)/NuclearLaunch.ogg:system/media/audio/alarms/NuclearLaunch.ogg
+
+# Notifications
+PRODUCT_COPY_FILES += \
+    $(NOTIFICATION_PATH)/CyanDoink.ogg:system/media/audio/notifications/CyanDoink.ogg \
+    $(NOTIFICATION_PATH)/CyanMail.ogg:system/media/audio/notifications/CyanMail.ogg \
+    $(NOTIFICATION_PATH)/CyanMessage.ogg:system/media/audio/notifications/CyanMessage.ogg \
+    $(NOTIFICATION_PATH)/Laser.ogg:system/media/audio/notifications/Laser.ogg \
+    $(NOTIFICATION_PATH)/Naughty.ogg:system/media/audio/notifications/Naughty.ogg \
+    $(NOTIFICATION_PATH)/Pong.ogg:system/media/audio/notifications/Pong.ogg \
+    $(NOTIFICATION_PATH)/Rang.ogg:system/media/audio/notifications/Rang.ogg \
+    $(NOTIFICATION_PATH)/Stone.ogg:system/media/audio/notifications/Stone.ogg
diff --git a/config/bliss_audio_mod.mk b/config/bliss_audio_mod.mk
new file mode 100644
index 0000000..a86095a
--- /dev/null
+++ b/config/bliss_audio_mod.mk
@@ -0,0 +1,37 @@
+# Copyright (C) 2015 BOSP
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# V4A files
+ifeq (viper, $(BLISS_AUDIO_MOD))
+PRODUCT_COPY_FILES += \
+    vendor/bliss/prebuilt/V4A/etc/audio_effects.conf:system/etc/audio_effects.conf \
+    vendor/bliss/prebuilt/V4A/etc/audio_policy.conf:system/etc/audio_policy.conf \
+    vendor/bliss/prebuilt/V4A/lib/soundfx/libaudiopreprocessing.so:system/lib/soundfx/libaudiopreprocessing.so \
+    vendor/bliss/prebuilt/V4A/lib/soundfx/libbundlewrapper.so:system/lib/soundfx/libbundlewrapper.so \
+    vendor/bliss/prebuilt/V4A/lib/soundfx/libdownmix.so:system/lib/soundfx/libdownmix.so \
+    vendor/bliss/prebuilt/V4A/lib/soundfx/libeffectproxy.so:system/lib/soundfx/libeffectproxy.so \
+    vendor/bliss/prebuilt/V4A/lib/soundfx/libfmas.so:system/lib/soundfx/libfmas.so \
+    vendor/bliss/prebuilt/V4A/lib/soundfx/libldnhncr.so:system/lib/soundfx/libldnhncr.so \
+    vendor/bliss/prebuilt/V4A/lib/soundfx/libqcomvoiceprocessing.so:system/lib/soundfx/libqcomvoiceprocessing.so \
+    vendor/bliss/prebuilt/V4A/lib/soundfx/libreverbwrapper.so:system/lib/soundfx/libreverbwrapper.so \
+    vendor/bliss/prebuilt/V4A/lib/soundfx/libv4a_fx_ics.so:system/lib/soundfx/libv4a_fx_ics.so \
+    vendor/bliss/prebuilt/V4A/lib/soundfx/libvisualizer.so:system/lib/soundfx/libvisualizer.so \
+    vendor/bliss/prebuilt/V4A/priv-app/ViPER4Android/ViPER4Android.apk:system/priv-app/ViPER4Android/ViPER4Android.apk \
+    vendor/bliss/prebuilt/V4A/vendor/etc/audio_effects.conf:system/vendor/etc/audio_effects.conf
+else
+# AudioFX
+PRODUCT_PACKAGES += \
+    AudioFX
+endif
+
diff --git a/config/common.mk b/config/common.mk
index a0c7346..7e9ba02 100644
--- a/config/common.mk
+++ b/config/common.mk
@@ -26,25 +26,34 @@
 
 # Backup Tool
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/bin/backuptool.sh:install/bin/backuptool.sh \
-    vendor/slim/prebuilt/common/bin/backuptool.functions:install/bin/backuptool.functions \
-    vendor/slim/prebuilt/common/bin/50-slim.sh:system/addon.d/50-slim.sh
+    vendor/bliss/prebuilt/common/bin/backuptool.sh:install/bin/backuptool.sh \
+    vendor/bliss/prebuilt/common/bin/backuptool.functions:install/bin/backuptool.functions \
+    vendor/bliss/prebuilt/common/bin/50-bliss.sh:system/addon.d/50-bliss.sh \
+    vendor/bliss/prebuilt/common/bin/blacklist:system/addon.d/blacklist
 
 # Signature compatibility validation
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/bin/otasigcheck.sh:install/bin/otasigcheck.sh
+    vendor/bliss/prebuilt/common/bin/otasigcheck.sh:install/bin/otasigcheck.sh
 
-# SLIM-specific init file
+# Bliss-specific init file
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/etc/init.local.rc:root/init.slim.rc
+    vendor/bliss/prebuilt/common/etc/init.local.rc:root/init.bliss.rc
+
+# AdAway App
+PRODUCT_COPY_FILES += \
+    vendor/bliss/prebuilt/AdAway/AdAway.apk:system/priv-app/AdAway/AdAway.apk
+
+# KernelAdiutor
+PRODUCT_COPY_FILES += \
+    vendor/bliss/prebuilt/KernelAdiutor/KernelAdiutor.apk:system/app/KernelAdiutor/KernelAdiutor.apk
 
 # Copy latinime for gesture typing
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/lib/libjni_latinimegoogle.so:system/lib/libjni_latinimegoogle.so
+    vendor/bliss/prebuilt/common/lib/libjni_latinimegoogle.so:system/lib/libjni_latinimegoogle.so
 
 # SELinux filesystem labels
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/etc/init.d/50selinuxrelabel:system/etc/init.d/50selinuxrelabel
+    vendor/bliss/prebuilt/common/etc/init.d/50selinuxrelabel:system/etc/init.d/50selinuxrelabel
 
 # Enable SIP+VoIP on all targets
 PRODUCT_COPY_FILES += \
@@ -52,13 +61,17 @@
 
 # Don't export PS1 in /system/etc/mkshrc.
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/etc/mkshrc:system/etc/mkshrc \
-    vendor/slim/prebuilt/common/etc/sysctl.conf:system/etc/sysctl.conf
+    vendor/bliss/prebuilt/common/etc/mkshrc:system/etc/mkshrc \
+    vendor/bliss/prebuilt/common/etc/sysctl.conf:system/etc/sysctl.conf
 
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/etc/init.d/00banner:system/etc/init.d/00banner \
-    vendor/slim/prebuilt/common/etc/init.d/90userinit:system/etc/init.d/90userinit \
-    vendor/slim/prebuilt/common/bin/sysinit:system/bin/sysinit
+    vendor/bliss/prebuilt/common/etc/init.d/00banner:system/etc/init.d/00banner \
+    vendor/bliss/prebuilt/common/etc/init.d/90userinit:system/etc/init.d/90userinit \
+    vendor/bliss/prebuilt/common/bin/sysinit:system/bin/sysinit
+
+
+# Bliss Audio Mods
+-include vendor/bliss/config/bliss_audio_mod.mk
 
 # Required packages
 PRODUCT_PACKAGES += \
@@ -73,9 +86,9 @@
     LiveWallpapersPicker \
     PhaseBeam
 
-# AudioFX
+# Other packages
 PRODUCT_PACKAGES += \
-    AudioFX
+    BlissOTA
 
 # CM Hardware Abstraction Framework
 PRODUCT_PACKAGES += \
@@ -86,10 +99,7 @@
 PRODUCT_PACKAGES += \
     SlimLauncher \
     LatinIME \
-    BluetoothExt \
-    DashClock
-
-#    SlimFileManager removed until updated
+    BluetoothExt
 
 # Extra tools
 PRODUCT_PACKAGES += \
@@ -113,10 +123,10 @@
     media.sf.omx-plugin=libffmpeg_omx.so \
     media.sf.extractor-plugin=libffmpeg_extractor.so
 
-# easy way to extend to add more packages
--include vendor/extra/product.mk
+PRODUCT_PACKAGE_OVERLAYS += vendor/bliss/overlay/common
 
-PRODUCT_PACKAGE_OVERLAYS += vendor/slim/overlay/common
+# by default, do not update the recovery with system updates
+PRODUCT_PROPERTY_OVERRIDES += persist.sys.recovery_update=false
 
 # Boot animation include
 ifneq ($(TARGET_SCREEN_WIDTH) $(TARGET_SCREEN_HEIGHT),$(space))
@@ -130,7 +140,7 @@
   fi )
 
 # get a sorted list of the sizes
-bootanimation_sizes := $(subst .zip,, $(shell ls vendor/slim/prebuilt/common/bootanimation))
+bootanimation_sizes := $(subst .zip,, $(shell ls vendor/bliss/prebuilt/common/bootanimation))
 bootanimation_sizes := $(shell echo -e $(subst $(space),'\n',$(bootanimation_sizes)) | sort -rn)
 
 # find the appropriate size and set
@@ -148,56 +158,46 @@
 
 ifeq ($(TARGET_BOOTANIMATION_HALF_RES),true)
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/bootanimation/halfres/$(TARGET_BOOTANIMATION_NAME).zip:system/media/bootanimation.zip
+    vendor/bliss/prebuilt/common/bootanimation/halfres/$(TARGET_BOOTANIMATION_NAME).zip:system/media/bootanimation.zip
 else
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/bootanimation/$(TARGET_BOOTANIMATION_NAME).zip:system/media/bootanimation.zip
+    vendor/bliss/prebuilt/common/bootanimation/$(TARGET_BOOTANIMATION_NAME).zip:system/media/bootanimation.zip
 endif
 endif
 
-# Versioning System
-# SlimLP first version.
-PRODUCT_VERSION_MAJOR = 6.0
-PRODUCT_VERSION_MINOR = alpha
-PRODUCT_VERSION_MAINTENANCE = 0.1
-ifdef SLIM_BUILD_EXTRA
-    SLIM_POSTFIX := -$(SLIM_BUILD_EXTRA)
-endif
-ifndef SLIM_BUILD_TYPE
-    SLIM_BUILD_TYPE := UNOFFICIAL
-    PLATFORM_VERSION_CODENAME := UNOFFICIAL
-endif
-
-ifeq ($(SLIM_BUILD_TYPE),DM)
-    SLIM_POSTFIX := -$(shell date +"%Y%m%d")
-endif
-
-ifndef SLIM_POSTFIX
-    SLIM_POSTFIX := -$(shell date +"%Y%m%d-%H%M")
-endif
-
-PLATFORM_VERSION_CODENAME := $(SLIM_BUILD_TYPE)
-
-# SlimIRC
-# export INCLUDE_SLIMIRC=1 for unofficial builds
-ifneq ($(filter WEEKLY OFFICIAL,$(SLIM_BUILD_TYPE)),)
-    INCLUDE_SLIMIRC = 1
-endif
-
-ifneq ($(INCLUDE_SLIMIRC),)
-    PRODUCT_PACKAGES += SlimIRC
-endif
-
-# Set all versions
-SLIM_VERSION := Slim-$(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR).$(PRODUCT_VERSION_MAINTENANCE)-$(SLIM_BUILD_TYPE)$(SLIM_POSTFIX)
-SLIM_MOD_VERSION := Slim-$(SLIM_BUILD)-$(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR).$(PRODUCT_VERSION_MAINTENANCE)-$(SLIM_BUILD_TYPE)$(SLIM_POSTFIX)
+# BLISS Versioning System
+-include vendor/bliss/config/versions.mk
 
 PRODUCT_PROPERTY_OVERRIDES += \
     BUILD_DISPLAY_ID=$(BUILD_ID) \
-    slim.ota.version=$(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR).$(PRODUCT_VERSION_MAINTENANCE) \
-    ro.slim.version=$(SLIM_VERSION) \
-    ro.modversion=$(SLIM_MOD_VERSION) \
-    ro.slim.buildtype=$(SLIM_BUILD_TYPE)
+    ro.bliss.version=$(BLISS_VERSION)
 
-EXTENDED_POST_PROCESS_PROPS := vendor/slim/tools/slim_process_props.py
+# Team Bliss OTA Updater
+ifeq ($(BLISS_DONATE),)
+  BLISS_DONATE =: 
+endif
+BLISS_OTA_BUILDDIR := Official
+ifeq ($(BLISS_BUILDTYPE),NIGHTLY)
+  BLISS_OTA_BUILDDIR := Nightlies
+endif
+BLISS_BASE_URL    := http://downloads.blissroms.com/Bliss
+ifeq ($(BLISS_DEVICE_URL),)
+  BLISS_DEVICE_URL := $(BLISS_BASE_URL)/$(BLISS_OTA_BUILDDIR)/$(TARGET_DEVICE)
+endif
+BLISS_OTA_VERSION := $(shell date +%Y%m%d%H)
+BLISS_ROM_NAME    := Bliss
 
+PRODUCT_PROPERTY_OVERRIDES += \
+    ro.ota.systemname=$(BLISS_ROM_NAME) \
+    ro.ota.version=$(BLISS_OTA_VERSION) \
+    ro.ota.device=$(TARGET_DEVICE) \
+    ro.ota.manifest=$(BLISS_DEVICE_URL)/ota$(BLISS_OTA_XMLVER).xml
+
+export BLISS_OTA_ROM=$(BLISS_ROM_NAME)
+export BLISS_OTA_VERNAME=$(BLISS_VERSION)
+export BLISS_OTA_VER=$(BLISS_OTA_VERSION)
+export BLISS_OTA_URL=$(BLISS_DEVICE_URL)/$(BLISS_VERSION).zip
+
+EXTENDED_POST_PROCESS_PROPS := vendor/bliss/tools/bliss_process_props.py
+
+$(call prepend-product-if-exists, vendor/extra/product.mk)
diff --git a/config/common_apn.mk b/config/common_apn.mk
index e9ab4fe..887716b 100644
--- a/config/common_apn.mk
+++ b/config/common_apn.mk
@@ -1,8 +1,8 @@
 # World APN list
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/etc/apns-conf.xml:system/etc/apns-conf.xml
+    vendor/bliss/prebuilt/common/etc/apns-conf.xml:system/etc/apns-conf.xml
 
 # Selective SPN list for operator number who has the problem.
 PRODUCT_COPY_FILES += \
-    vendor/slim/prebuilt/common/etc/selective-spn-conf.xml:system/etc/selective-spn-conf.xml
+    vendor/bliss/prebuilt/common/etc/selective-spn-conf.xml:system/etc/selective-spn-conf.xml
 
diff --git a/config/common_full.mk b/config/common_full.mk
new file mode 100644
index 0000000..981bdab
--- /dev/null
+++ b/config/common_full.mk
@@ -0,0 +1,9 @@
+# Inherit common Bliss stuff
+$(call inherit-product, vendor/bliss/config/common.mk)
+
+# Include Bliss audio files
+include vendor/bliss/config/bliss_audio.mk
+
+# Extra tools in Bliss
+PRODUCT_PACKAGES += \
+    wget
diff --git a/config/common_full_hybrid_wifionly.mk b/config/common_full_hybrid_wifionly.mk
index 5ab1629..9b29646 100644
--- a/config/common_full_hybrid_wifionly.mk
+++ b/config/common_full_hybrid_wifionly.mk
@@ -1,7 +1,8 @@
 # Inherit common stuff
-$(call inherit-product, vendor/slim/config/common.mk)
+$(call inherit-product, vendor/bliss/config/common.mk)
+$(call inherit-product, vendor/bliss/config/common_full.mk)
 
-PRODUCT_PACKAGE_OVERLAYS += vendor/slim/overlay/tablet
+PRODUCT_PACKAGE_OVERLAYS += vendor/bliss/overlay/tablet
 
 # BT config
 PRODUCT_COPY_FILES += \
diff --git a/config/common_full_phone.mk b/config/common_full_phone.mk
index 391ff78..b3e6a13 100644
--- a/config/common_full_phone.mk
+++ b/config/common_full_phone.mk
@@ -1,6 +1,7 @@
 # Inherit common stuff
-$(call inherit-product, vendor/slim/config/common.mk)
-$(call inherit-product, vendor/slim/config/common_apn.mk)
+$(call inherit-product, vendor/bliss/config/common.mk)
+$(call inherit-product, vendor/bliss/config/common_full.mk)
+$(call inherit-product, vendor/bliss/config/common_apn.mk)
 
 # SIM Toolkit
 PRODUCT_PACKAGES += \
diff --git a/config/common_full_tablet_lte.mk b/config/common_full_tablet_lte.mk
index b253389..fe25cac 100644
--- a/config/common_full_tablet_lte.mk
+++ b/config/common_full_tablet_lte.mk
@@ -1,3 +1,4 @@
 # Inherit common stuff
-$(call inherit-product, vendor/slim/config/common.mk)
-$(call inherit-product, vendor/slim/config/common_apn.mk)
+$(call inherit-product, vendor/bliss/config/common.mk)
+$(call inherit-product, vendor/bliss/config/common_full.mk)
+$(call inherit-product, vendor/bliss/config/common_apn.mk)
diff --git a/config/common_full_tablet_wifionly.mk b/config/common_full_tablet_wifionly.mk
index 0efa76f..54648f2 100644
--- a/config/common_full_tablet_wifionly.mk
+++ b/config/common_full_tablet_wifionly.mk
@@ -1,2 +1,3 @@
 # Inherit common stuff
-$(call inherit-product, vendor/slim/config/common.mk)
+$(call inherit-product, vendor/bliss/config/common.mk)
+$(call inherit-product, vendor/bliss/config/common_full.mk)
diff --git a/config/nfc_enhanced.mk b/config/nfc_enhanced.mk
index 74165f1..5c9d7dd 100644
--- a/config/nfc_enhanced.mk
+++ b/config/nfc_enhanced.mk
@@ -1,3 +1,3 @@
 # This device supports CM enhanced NFC
 PRODUCT_COPY_FILES += \
-    vendor/slim/config/permissions/com.cyanogenmod.nfc.enhanced.xml:system/etc/permissions/com.cyanogenmod.nfc.enhanced.xml
+    vendor/bliss/config/permissions/com.cyanogenmod.nfc.enhanced.xml:system/etc/permissions/com.cyanogenmod.nfc.enhanced.xml
diff --git a/config/versions.mk b/config/versions.mk
new file mode 100644
index 0000000..8cee25e
--- /dev/null
+++ b/config/versions.mk
@@ -0,0 +1,42 @@
+# Versioning System For Bliss
+# Bliss RELEASE VERSION
+BLISS_VERSION_MAJOR = 5
+BLISS_VERSION_MINOR = 0
+BLISS_VERSION_MAINTENANCE =
+
+VERSION := $(BLISS_VERSION_MAJOR).$(BLISS_VERSION_MINOR)$(BLISS_VERSION_MAINTENANCE)
+
+# Set BLISS_BUILDTYPE
+ifdef BLISS_NIGHTLY
+    BLISS_BUILDTYPE := NIGHTLY
+endif
+ifdef BLISS_EXPERIMENTAL
+    BLISS_BUILDTYPE := EXPERIMENTAL
+endif
+ifdef BLISS_RELEASE
+    BLISS_BUILDTYPE := RELEASE
+endif
+# Set Unofficial if no buildtype set (Buildtype should ONLY be set by BLISS Devs!)
+ifdef BLISS_BUILDTYPE
+else
+    BLISS_BUILDTYPE := UNOFFICIAL
+    BLISS_VERSION_MAJOR := 5
+    BLISS_VERSION_MINOR := 0
+endif
+
+# Set BLISS version
+ifdef BLISS_RELEASE
+    BLISS_VERSION := Bliss-v$(VERSION)
+else
+    BLISS_VERSION := Bliss-v$(VERSION)-$(BLISS_BUILD)-$(BLISS_BUILDTYPE)-$(shell date +%Y%m%d-%H%M)
+endif
+
+BLISS_DISPLAY_VERSION := $(VERSION)
+BLISS_DISPLAY_BUILDTYPE := $(BLISS_BUILDTYPE)
+
+PRODUCT_PROPERTY_OVERRIDES += \
+  ro.modversion=$(BLISS_DISPLAY_VERSION) \
+  ro.bliss.display.version=$(BLISS_DISPLAY_VERSION) \
+  ro.bliss.display.buildtype=$(BLISS_DISPLAY_BUILDTYPE)
+
+export BLISS_OTA_XMLVER=$(BLISS_VERSION_MAJOR)
diff --git a/ota.xml b/ota.xml
new file mode 100644
index 0000000..c659a9d
--- /dev/null
+++ b/ota.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ROM>
+	<!--ROM Name-->
+		<RomName>BLISS_OTA_ROM</RomName>
+
+	<!--THIS NEEDS TO BE EDITED EVERY NEW UPDATE-->
+		<VersionName>BLISS_OTA_VERNAME</VersionName>
+
+	<!--THIS NEEDS TO BE EDITED EVERY NEW UPDATE-->
+		<VersionNumber type="integer">BLISS_OTA_VERSION</VersionNumber>
+
+	<!--THIS NEEDS TO BE EDITED EVERY NEW UPDATE-->
+		<DirectUrl>BLISS_OTA_URL</DirectUrl>
+
+	<!--Do not edit this!-->
+		<HttpUrl>BlissRoms Server</HttpUrl>
+
+	<!--BlissPop Android Version-->
+		<Android>6.0.0</Android>
+
+	<!--THIS NEEDS TO BE EDITED EVERY NEW UPDATE-->
+	<!-- You can disable MD5 checking like this: <CheckMD5 nil="true" />-->
+		<CheckMD5>BLISS_OTA_MD5</CheckMD5>
+
+	<!--THIS NEEDS TO BE EDITED EVERY NEW UPDATE-->
+	<!--Please enter this in BYTES only. Otherwise an incorrect value will be shown-->
+		<FileSize type="integer">BLISS_OTA_FILESIZE</FileSize>
+
+	<!--Maintainer Name/Last Uploader's Name-->
+		<Developer>BLISS_DEVELOPER</Developer>
+
+	<!--Official Bliss Website-->
+		<WebsiteURL>http://blissroms.com/</WebsiteURL>
+
+	<!-- Your Donate URL (Please use goo.gl to shorten to avoid CDATA requirement -
+	  Default: http://goo.gl/k6jPX9 will go to Shaun)-->
+		<DonateURL>BLISS_DONATE</DonateURL>
+
+	<!--Put the changelog here... Use DaringFireball's Markdown to format it-->
+	<!--Surround special characters with the CDATA tags or your XML will NOT parse-->
+	<Changelog>
+	### Changelog BLISS_OTA_VERSION
+
+	http://downloads.blissroms.com/Changelog/CHANGELOG-bliss.txt
+	</Changelog>
+
+	<!--Number of addons and the target addons xml. Remove both if no addons available! -->
+		<AddonCount>2</AddonCount>
+		<AddonsURL>http://downloads.blissroms.com/Add-ons/addons.xml</AddonsURL>
+
+</ROM>
diff --git a/overlay/common/frameworks/base/core/res/res/drawable-hdpi/tab_selected_holo.9.png b/overlay/common/frameworks/base/core/res/res/drawable-hdpi/tab_selected_holo.9.png
deleted file mode 100644
index eb7f396..0000000
--- a/overlay/common/frameworks/base/core/res/res/drawable-hdpi/tab_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/overlay/common/frameworks/base/core/res/res/drawable-mdpi/tab_selected_holo.9.png b/overlay/common/frameworks/base/core/res/res/drawable-mdpi/tab_selected_holo.9.png
deleted file mode 100644
index 0be5c37..0000000
--- a/overlay/common/frameworks/base/core/res/res/drawable-mdpi/tab_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/overlay/common/frameworks/base/core/res/res/drawable-xhdpi/tab_selected_holo.9.png b/overlay/common/frameworks/base/core/res/res/drawable-xhdpi/tab_selected_holo.9.png
deleted file mode 100644
index b3fd098..0000000
--- a/overlay/common/frameworks/base/core/res/res/drawable-xhdpi/tab_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/overlay/common/frameworks/base/core/res/res/drawable-xxhdpi/tab_selected_holo.9.png b/overlay/common/frameworks/base/core/res/res/drawable-xxhdpi/tab_selected_holo.9.png
deleted file mode 100644
index 3f90182..0000000
--- a/overlay/common/frameworks/base/core/res/res/drawable-xxhdpi/tab_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/overlay/common/frameworks/base/core/res/res/values/config.xml b/overlay/common/frameworks/base/core/res/res/values/config.xml
index 099e05c..bd10939 100644
--- a/overlay/common/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/common/frameworks/base/core/res/res/values/config.xml
@@ -33,14 +33,5 @@
     <string name="config_mms_user_agent">"Android-Mms/2.0"</string>
     <string name="config_mms_user_agent_profile_url">http://www.google.com/oha/rdf/ua-profile-kila.xml</string>
 
-    <!-- Automatic power profile management per app.
-         Each item should list the fully-qualified activity
-         name and the power profile id, separated by a comma. >
-    <string-array name="config_auto_perf_activities" translatable="false">
-        <item>com.aurorasoftworks.quadrant.*BenchmarkExecutionActivity,2</item>
-        <item>com.antutu.ABenchMark.*,2</item>
-        <item>.*com.antutu.benchmark.*,2</item>
-    </string-array -->
-
 </resources>
 
diff --git a/overlay/common/frameworks/base/packages/Keyguard/res/values/config.xml b/overlay/common/frameworks/base/packages/Keyguard/res/values/config.xml
deleted file mode 100644
index fab898b..0000000
--- a/overlay/common/frameworks/base/packages/Keyguard/res/values/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012-2013 SlimRoms Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
-    <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] -->
-    <string name="widget_default_package_name">net.nurik.roman.dashclock</string>
-
-    <!-- Class name for default keyguard appwidget [DO NOT TRANSLATE] -->
-    <string name="widget_default_class_name">com.google.android.apps.dashclock.WidgetProvider</string>
-
-</resources>
-
diff --git a/prebuilt/AdAway/AdAway.apk b/prebuilt/AdAway/AdAway.apk
new file mode 100644
index 0000000..fa761e1
--- /dev/null
+++ b/prebuilt/AdAway/AdAway.apk
Binary files differ
diff --git a/prebuilt/KernelAdiutor/KernelAdiutor.apk b/prebuilt/KernelAdiutor/KernelAdiutor.apk
new file mode 100755
index 0000000..727d395
--- /dev/null
+++ b/prebuilt/KernelAdiutor/KernelAdiutor.apk
Binary files differ
diff --git a/prebuilt/V4A/etc/audio_effects.conf b/prebuilt/V4A/etc/audio_effects.conf
new file mode 100644
index 0000000..587e2cd
--- /dev/null
+++ b/prebuilt/V4A/etc/audio_effects.conf
@@ -0,0 +1,149 @@
+# List of effect libraries to load. Each library element must contain a "path" element
+# giving the full path of the library .so file.
+#    libraries {
+#        <lib name> {
+#          path <lib path>
+#        }
+#    }
+libraries {
+  v4a_fx {
+    path /system/lib/soundfx/libv4a_fx_ics.so
+  }
+  bundle {
+    path /system/lib/soundfx/libv4a_fx_ics.so
+  }
+  reverb {
+    path /system/lib/soundfx/libv4a_fx_ics.so
+  }
+  visualizer {
+    path /system/lib/soundfx/libvisualizer.so
+  }
+  downmix {
+    path /system/lib/soundfx/libv4a_fx_ics.so
+  }
+}
+
+# Default pre-processing library. Add to audio_effect.conf "libraries" section if
+# audio HAL implements support for default software audio pre-processing effects
+#
+#  pre_processing {
+#    path /system/lib/soundfx/libv4a_fx_ics.so
+#  }
+
+# list of effects to load. Each effect element must contain a "library" and a "uuid" element.
+# The value of the "library" element must correspond to the name of one library element in the
+# "libraries" element.
+# The name of the effect element is indicative, only the value of the "uuid" element
+# designates the effect.
+# The uuid is the implementation specific UUID as specified by the effect vendor. This is not the
+# generic effect type UUID.
+#    effects {
+#        <fx name> {
+#            library <lib name>
+#            uuid <effect uuid>
+#        }
+#        ...
+#    }
+
+effects {
+  v4a_standard_fx {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  bassboost {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  virtualizer {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  equalizer {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  volume {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  reverb_env_aux {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  reverb_env_ins {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  reverb_pre_aux {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  reverb_pre_ins {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  visualizer {
+    library visualizer
+    uuid d069d9e0-8329-11df-9168-0002a5d5c51b
+  }
+  downmix {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+}
+
+# Default pre-processing effects. Add to audio_effect.conf "effects" section if
+# audio HAL implements support for them.
+#
+#  agc {
+#    library v4a_fx
+#    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b   
+#  }
+#  aec {
+#    library v4a_fx
+#    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+#  }
+#  ns {
+#    library v4a_fx
+#    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+#  }
+
+# Audio preprocessor configurations.
+# The pre processor configuration consists in a list of elements each describing
+# pre processor settings for a given input source. Valid input source names are:
+# "mic", "camcorder", "voice_recognition", "voice_communication"
+# Each input source element contains a list of effects elements. The name of the effect
+# element must be the name of one of the effects in the "effects" list of the file.
+# Each effect element may optionally contain a list of parameters and their
+# default value to apply when the pre processor effect is created.
+# A parameter is defined by a "param" element and a "value" element. Each of these elements
+# consists in one or more elements specifying a type followed by a value.
+# The types defined are: "int", "short", "float", "bool" and "string"
+# When both "param" and "value" are a single int, a simple form is allowed where just
+# the param and value pair is present in the parameter description
+#    pre_processing {
+#        <input source name> {
+#            <fx name> {
+#                <param 1 name> {
+#                    param {
+#                        int|short|float|bool|string <value>
+#                        [ int|short|float|bool|string <value> ]
+#                        ...
+#                    }
+#                    value {
+#                        int|short|float|bool|string <value>
+#                        [ int|short|float|bool|string <value> ]
+#                        ...
+#                    }
+#                }
+#                <param 2 name > {<param> <value>}
+#                ...
+#            }
+#            ...
+#        }
+#        ...
+#    }
+
+#
+# TODO: add default audio pre processor configurations after debug and tuning phase
+#
diff --git a/prebuilt/V4A/etc/audio_policy.conf b/prebuilt/V4A/etc/audio_policy.conf
new file mode 100644
index 0000000..7f4ef3a
--- /dev/null
+++ b/prebuilt/V4A/etc/audio_policy.conf
@@ -0,0 +1,75 @@
+# Global configuration section: lists input and output devices always present on the device
+# as well as the output device selected by default.
+# Devices are designated by a string that corresponds to the enum in audio.h
+
+global_configuration {
+  attached_output_devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER
+  default_output_device AUDIO_DEVICE_OUT_SPEAKER
+  attached_input_devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BACK_MIC
+}
+
+# audio hardware module section: contains descriptors for all audio hw modules present on the
+# device. Each hw module node is named after the corresponding hw module library base name.
+# For instance, "primary" corresponds to audio.primary.<device>.so.
+# The "primary" module is mandatory and must include at least one output with
+# AUDIO_OUTPUT_FLAG_PRIMARY flag.
+# Each module descriptor contains one or more output profile descriptors and zero or more
+# input profile descriptors. Each profile lists all the parameters supported by a given output
+# or input stream category.
+# The "channel_masks", "formats", "devices" and "flags" are specified using strings corresponding
+# to enums in audio.h and audio_policy.h. They are concatenated by use of "|" without space or "\n".
+
+audio_hw_modules {
+  primary {
+    outputs {
+      primary {
+        sampling_rates 44100
+        channel_masks AUDIO_CHANNEL_OUT_STEREO
+        formats AUDIO_FORMAT_PCM_16_BIT
+        devices AUDIO_DEVICE_OUT_EARPIECE|AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_ALL_SCO|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET
+        flags AUDIO_OUTPUT_FLAG_PRIMARY
+      }
+      hdmi {
+        sampling_rates 44100|48000
+        channel_masks dynamic
+        formats AUDIO_FORMAT_PCM_16_BIT
+        devices AUDIO_DEVICE_OUT_AUX_DIGITAL
+        flags AUDIO_OUTPUT_FLAG_DIRECT
+      }
+    }
+    inputs {
+      primary {
+        sampling_rates 8000|11025|16000|22050|24000|32000|44100|48000
+        channel_masks AUDIO_CHANNEL_IN_MONO|AUDIO_CHANNEL_IN_STEREO|AUDIO_CHANNEL_IN_FRONT_BACK
+        formats AUDIO_FORMAT_PCM_16_BIT
+        devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_WIRED_HEADSET|AUDIO_DEVICE_IN_BACK_MIC
+      }
+    }
+  }
+  a2dp {
+    outputs {
+      a2dp {
+        sampling_rates 44100
+        channel_masks AUDIO_CHANNEL_OUT_STEREO
+        formats AUDIO_FORMAT_PCM_16_BIT
+        devices AUDIO_DEVICE_OUT_ALL_A2DP
+      }
+    }
+  }
+  usb {
+    outputs {
+      usb_accessory {
+        sampling_rates 44100
+        channel_masks AUDIO_CHANNEL_OUT_STEREO
+        formats AUDIO_FORMAT_PCM_16_BIT
+        devices AUDIO_DEVICE_OUT_USB_ACCESSORY
+      }
+      usb_device {
+        sampling_rates 44100
+        channel_masks AUDIO_CHANNEL_OUT_STEREO
+        formats AUDIO_FORMAT_PCM_16_BIT
+        devices AUDIO_DEVICE_OUT_USB_DEVICE
+      }
+    }
+  }
+}
diff --git a/prebuilt/V4A/lib/soundfx/libaudiopreprocessing.so b/prebuilt/V4A/lib/soundfx/libaudiopreprocessing.so
new file mode 100644
index 0000000..31ea881
--- /dev/null
+++ b/prebuilt/V4A/lib/soundfx/libaudiopreprocessing.so
Binary files differ
diff --git a/prebuilt/V4A/lib/soundfx/libbundlewrapper.so b/prebuilt/V4A/lib/soundfx/libbundlewrapper.so
new file mode 100644
index 0000000..1559009
--- /dev/null
+++ b/prebuilt/V4A/lib/soundfx/libbundlewrapper.so
Binary files differ
diff --git a/prebuilt/V4A/lib/soundfx/libdownmix.so b/prebuilt/V4A/lib/soundfx/libdownmix.so
new file mode 100644
index 0000000..d481dd7
--- /dev/null
+++ b/prebuilt/V4A/lib/soundfx/libdownmix.so
Binary files differ
diff --git a/prebuilt/V4A/lib/soundfx/libeffectproxy.so b/prebuilt/V4A/lib/soundfx/libeffectproxy.so
new file mode 100644
index 0000000..1560222
--- /dev/null
+++ b/prebuilt/V4A/lib/soundfx/libeffectproxy.so
Binary files differ
diff --git a/prebuilt/V4A/lib/soundfx/libfmas.so b/prebuilt/V4A/lib/soundfx/libfmas.so
new file mode 100644
index 0000000..d19e752
--- /dev/null
+++ b/prebuilt/V4A/lib/soundfx/libfmas.so
Binary files differ
diff --git a/prebuilt/V4A/lib/soundfx/libldnhncr.so b/prebuilt/V4A/lib/soundfx/libldnhncr.so
new file mode 100644
index 0000000..7557d65
--- /dev/null
+++ b/prebuilt/V4A/lib/soundfx/libldnhncr.so
Binary files differ
diff --git a/prebuilt/V4A/lib/soundfx/libqcomvoiceprocessing.so b/prebuilt/V4A/lib/soundfx/libqcomvoiceprocessing.so
new file mode 100644
index 0000000..dd79843
--- /dev/null
+++ b/prebuilt/V4A/lib/soundfx/libqcomvoiceprocessing.so
Binary files differ
diff --git a/prebuilt/V4A/lib/soundfx/libreverbwrapper.so b/prebuilt/V4A/lib/soundfx/libreverbwrapper.so
new file mode 100644
index 0000000..e8b897f
--- /dev/null
+++ b/prebuilt/V4A/lib/soundfx/libreverbwrapper.so
Binary files differ
diff --git a/prebuilt/V4A/lib/soundfx/libv4a_fx_ics.so b/prebuilt/V4A/lib/soundfx/libv4a_fx_ics.so
new file mode 100644
index 0000000..a5968e1
--- /dev/null
+++ b/prebuilt/V4A/lib/soundfx/libv4a_fx_ics.so
Binary files differ
diff --git a/prebuilt/V4A/lib/soundfx/libvisualizer.so b/prebuilt/V4A/lib/soundfx/libvisualizer.so
new file mode 100755
index 0000000..7859e31
--- /dev/null
+++ b/prebuilt/V4A/lib/soundfx/libvisualizer.so
Binary files differ
diff --git a/prebuilt/V4A/priv-app/ViPER4Android/ViPER4Android.apk b/prebuilt/V4A/priv-app/ViPER4Android/ViPER4Android.apk
new file mode 100644
index 0000000..31a7ae8
--- /dev/null
+++ b/prebuilt/V4A/priv-app/ViPER4Android/ViPER4Android.apk
Binary files differ
diff --git a/prebuilt/V4A/vendor/etc/audio_effects.conf b/prebuilt/V4A/vendor/etc/audio_effects.conf
new file mode 100644
index 0000000..587e2cd
--- /dev/null
+++ b/prebuilt/V4A/vendor/etc/audio_effects.conf
@@ -0,0 +1,149 @@
+# List of effect libraries to load. Each library element must contain a "path" element
+# giving the full path of the library .so file.
+#    libraries {
+#        <lib name> {
+#          path <lib path>
+#        }
+#    }
+libraries {
+  v4a_fx {
+    path /system/lib/soundfx/libv4a_fx_ics.so
+  }
+  bundle {
+    path /system/lib/soundfx/libv4a_fx_ics.so
+  }
+  reverb {
+    path /system/lib/soundfx/libv4a_fx_ics.so
+  }
+  visualizer {
+    path /system/lib/soundfx/libvisualizer.so
+  }
+  downmix {
+    path /system/lib/soundfx/libv4a_fx_ics.so
+  }
+}
+
+# Default pre-processing library. Add to audio_effect.conf "libraries" section if
+# audio HAL implements support for default software audio pre-processing effects
+#
+#  pre_processing {
+#    path /system/lib/soundfx/libv4a_fx_ics.so
+#  }
+
+# list of effects to load. Each effect element must contain a "library" and a "uuid" element.
+# The value of the "library" element must correspond to the name of one library element in the
+# "libraries" element.
+# The name of the effect element is indicative, only the value of the "uuid" element
+# designates the effect.
+# The uuid is the implementation specific UUID as specified by the effect vendor. This is not the
+# generic effect type UUID.
+#    effects {
+#        <fx name> {
+#            library <lib name>
+#            uuid <effect uuid>
+#        }
+#        ...
+#    }
+
+effects {
+  v4a_standard_fx {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  bassboost {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  virtualizer {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  equalizer {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  volume {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  reverb_env_aux {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  reverb_env_ins {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  reverb_pre_aux {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  reverb_pre_ins {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+  visualizer {
+    library visualizer
+    uuid d069d9e0-8329-11df-9168-0002a5d5c51b
+  }
+  downmix {
+    library v4a_fx
+    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+  }
+}
+
+# Default pre-processing effects. Add to audio_effect.conf "effects" section if
+# audio HAL implements support for them.
+#
+#  agc {
+#    library v4a_fx
+#    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b   
+#  }
+#  aec {
+#    library v4a_fx
+#    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+#  }
+#  ns {
+#    library v4a_fx
+#    uuid 41d3c987-e6cf-11e3-a88a-11aba5d5c51b
+#  }
+
+# Audio preprocessor configurations.
+# The pre processor configuration consists in a list of elements each describing
+# pre processor settings for a given input source. Valid input source names are:
+# "mic", "camcorder", "voice_recognition", "voice_communication"
+# Each input source element contains a list of effects elements. The name of the effect
+# element must be the name of one of the effects in the "effects" list of the file.
+# Each effect element may optionally contain a list of parameters and their
+# default value to apply when the pre processor effect is created.
+# A parameter is defined by a "param" element and a "value" element. Each of these elements
+# consists in one or more elements specifying a type followed by a value.
+# The types defined are: "int", "short", "float", "bool" and "string"
+# When both "param" and "value" are a single int, a simple form is allowed where just
+# the param and value pair is present in the parameter description
+#    pre_processing {
+#        <input source name> {
+#            <fx name> {
+#                <param 1 name> {
+#                    param {
+#                        int|short|float|bool|string <value>
+#                        [ int|short|float|bool|string <value> ]
+#                        ...
+#                    }
+#                    value {
+#                        int|short|float|bool|string <value>
+#                        [ int|short|float|bool|string <value> ]
+#                        ...
+#                    }
+#                }
+#                <param 2 name > {<param> <value>}
+#                ...
+#            }
+#            ...
+#        }
+#        ...
+#    }
+
+#
+# TODO: add default audio pre processor configurations after debug and tuning phase
+#
diff --git a/prebuilt/common/Android.mk b/prebuilt/common/Android.mk
new file mode 100644
index 0000000..f15b178
--- /dev/null
+++ b/prebuilt/common/Android.mk
@@ -0,0 +1,10 @@
+LOCAL_PATH := $(call my-dir)
+
+# a wrapper for curl which provides wget syntax, for compatibility
+include $(CLEAR_VARS)
+LOCAL_MODULE := wget
+LOCAL_SRC_FILES := bin/wget
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := EXECUTABLES
+LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
+include $(BUILD_PREBUILT)
diff --git a/prebuilt/common/bin/50-slim.sh b/prebuilt/common/bin/50-bliss.sh
similarity index 85%
rename from prebuilt/common/bin/50-slim.sh
rename to prebuilt/common/bin/50-bliss.sh
index 251981c..0da6232 100755
--- a/prebuilt/common/bin/50-slim.sh
+++ b/prebuilt/common/bin/50-bliss.sh
@@ -1,7 +1,7 @@
 #!/sbin/sh
 # 
-# /system/addon.d/50-slim.sh
-# During a Slim upgrade, this script backs up /system/etc/hosts,
+# /system/addon.d/50-bliss.sh
+# During a Bliss upgrade, this script backs up /system/etc/hosts,
 # /system is formatted and reinstalled, then the file is restored.
 #
 
diff --git a/prebuilt/common/bin/backuptool.functions b/prebuilt/common/bin/backuptool.functions
index fe91f1f..9e9c756 100644
--- a/prebuilt/common/bin/backuptool.functions
+++ b/prebuilt/common/bin/backuptool.functions
@@ -5,7 +5,7 @@
 
 export C=/tmp/backupdir
 export S=/system
-export V=5.1
+export V=5
 
 backup_file() {
   if [ -e "$1" ]; then
diff --git a/prebuilt/common/bin/backuptool.sh b/prebuilt/common/bin/backuptool.sh
index fcbe8fd..c025c82 100755
--- a/prebuilt/common/bin/backuptool.sh
+++ b/prebuilt/common/bin/backuptool.sh
@@ -5,27 +5,35 @@
 
 export C=/tmp/backupdir
 export S=/system
-export V=Slim-5.1
+export V=5
 
 # Scripts in /system/addon.d expect to find backuptool.functions in /tmp
 cp -f /tmp/install/bin/backuptool.functions /tmp
 
 # Preserve /system/addon.d in /tmp/addon.d
 preserve_addon_d() {
-  mkdir -p /tmp/addon.d/
-  cp -a /system/addon.d/* /tmp/addon.d/
-  chmod 755 /tmp/addon.d/*.sh
+  if [ -d /system/addon.d/ ]; then
+    mkdir -p /tmp/addon.d/
+    cp -a /system/addon.d/* /tmp/addon.d/
+    chmod 755 /tmp/addon.d/*.sh
+  fi
 }
 
-# Restore /system/addon.d in /tmp/addon.d
+# Restore /system/addon.d from /tmp/addon.d
 restore_addon_d() {
-  cp -a /tmp/addon.d/* /system/addon.d/
-  rm -rf /tmp/addon.d/
+  if [ -d /tmp/addon.d/ ]; then
+    cp -a /tmp/addon.d/* /system/addon.d/
+    rm -rf /tmp/addon.d/
+  fi
 }
 
 # Proceed only if /system is the expected major and minor version
 check_prereq() {
-if ( ! grep -q "^ro.slim.version=$V.*" /system/build.prop ); then
+# If there is no build.prop file the partition is probably empty.
+if [ ! -r /system/build.prop ]; then
+    return 0
+fi
+if ( ! grep -q "^ro.bliss.display.version=$V.*" /system/build.prop ); then
   echo "Not backing up files from incompatible version: $V"
   return 0
 fi
@@ -37,7 +45,7 @@
       ## Discard any known bad backup scripts
       cd /$1/addon.d/
       for f in *sh; do
-          s=$(md5sum $f | awk {'print $1'})
+          s=$(md5sum $f | cut -c-32)
           grep -q $s /system/addon.d/blacklist && rm -f $f
       done
   fi
@@ -49,7 +57,7 @@
       ## forcefully keep any version-independent stuff
       cd /$1/addon.d/
       for f in *sh; do
-          s=$(md5sum $f | awk {'print $1'})
+          s=$(md5sum $f | cut -c-32)
           grep -q $s /system/addon.d/whitelist
           if [ $? -eq 0 ]; then
               found=1
@@ -63,9 +71,11 @@
 
 # Execute /system/addon.d/*.sh scripts with $1 parameter
 run_stage() {
-for script in $(find /tmp/addon.d/ -name '*.sh' |sort -n); do
-  $script $1
-done
+if [ -d /tmp/addon.d/ ]; then
+  for script in $(find /tmp/addon.d/ -name '*.sh' |sort -n); do
+    $script $1
+  done
+fi
 }
 
 case "$1" in
diff --git a/prebuilt/common/bin/otasigcheck.sh b/prebuilt/common/bin/otasigcheck.sh
old mode 100644
new mode 100755
index 7bf1228..ad7f3a3
--- a/prebuilt/common/bin/otasigcheck.sh
+++ b/prebuilt/common/bin/otasigcheck.sh
@@ -9,6 +9,12 @@
   exit 0
 fi
 
+grep -q "Command:.*\"--headless\"" /tmp/recovery.log
+if [ $? -eq 0 ]; then
+  echo "Headless mode install; skipping signature check..."
+  exit 0
+fi
+
 if [ -f /data/system/packages.xml -a -f /tmp/releasekey ]; then
   relCert=$(grep -A3 'package name="com.android.htmlviewer"' /data/system/packages.xml  | grep "cert index" | head -n 1 | sed -e 's|.*"\([[:digit:]][[:digit:]]*\)".*|\1|g')
 
diff --git a/prebuilt/common/bin/wget b/prebuilt/common/bin/wget
new file mode 100755
index 0000000..1d04de5
--- /dev/null
+++ b/prebuilt/common/bin/wget
@@ -0,0 +1,184 @@
+#!/system/bin/sh
+# wget-curl, a curl wrapper acting as a wget drop-in replacement - version git-HEAD
+# Usage: wget [wget args] [i need to fill this in later] <url(s)>
+# Download all URLs given using curl, but using wget's options.
+#
+#
+# End of help.
+# Copyright (c) 2015 Kylie McClain <somasis@exherbo.org>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# End of copyright.
+#
+
+set -o pipefail
+shopt -u shift_verbose >/dev/null 2>&1
+
+help() {
+    sed -n '/^#/!d;s/^# //;s/^#//;3,${p;}' "$0" | \
+        while IFS= read help_line;do
+            if [[ "$help_line" == "End of help." ]];then
+                exit 0
+            else
+                printf "%s\n" "$help_line"
+            fi
+        done
+    exit 0
+}
+
+version() {
+    sed 's/^# //;s/, .* - version / /;2q;$!d' "$0"
+    copyright
+    exit 0
+}
+
+copyright() {
+    sed -n '/^#/!d;s/^# //;s/^#//;/End of help./,${p;}' "$0" | \
+        while IFS= read copyright_line;do
+            if [[ "$copyright_line" == "End of help." ]];then
+                true
+            elif [[ "$copyright_line" == "End of copyright." ]];then
+                break
+            else
+                printf '%s\n' "$copyright_line"
+            fi
+        done
+}
+
+stderr() {
+    printf "$@" >&2
+}
+
+error() {
+    stderr "$0: $1\n"
+    exit "$2"
+}
+
+invalid_arg() {
+    error "invalid option -- '$1'" 2
+}
+
+append_opt() {
+    for opt in $@;do
+        CURL_OPTS="${CURL_OPTS} ${opt}"
+    done
+}
+
+curl() {
+    eval "command curl $@ ${CURL_RAW}"
+}
+
+append_raw_arg() {
+    CURL_RAW="$CURL_RAW $@"
+}
+
+has_opt() { # exit 0 if CURL_OPTS has arg, non-zero if doesn't
+    if [[ "$CURL_OPTS" == *" $1"* ]];then
+        return 0
+    else
+        return 1
+    fi
+}
+
+reexec_without() { # download afterwards without $1 in OPTS
+    reexec_args_without="$reexec_args_without $@"
+    reexec=1
+}
+
+reexec_only() {
+    for arg in $@;do
+        CURL_OPTS_REEXEC_ONLY="${CURL_OPTS_REEXEC_ONLY} $arg"
+    done
+}
+
+print_url() {
+    has_opt -s || printf "%s\n" "$1"
+}
+
+# 46ABDFHIKLNOPQRSTUVXabcdhiklm nH nc nd np nv opqrtvwx
+while getopts ':46ABDFHIKLNO:PQRST:U:VXa:bcdhiklmopqrtvwx' argument "$@";do
+    case "$argument" in
+        # a lot of these are noop right now because they are wget mirror args
+        # which curl doesn't really do, and i am not sure if i should implement them
+        4)  append_opt -4       ;;
+        6)  append_opt -6       ;;
+        A)  true                ;; # probably can't implement this easily...
+        B)  true                ;;
+        D)  true                ;;
+        E)  true                ;;
+        F)  true                ;; # curl doesn't care what the input is
+        H)  true                ;;
+        I)  true                ;;
+        K)  true                ;;
+        L)  true                ;;
+        N)  true                ;;
+        O)  append_opt "-o $OPTARG"                 ;;
+        P)  true                ;;
+        Q)  true                ;;
+        R)  true                ;;
+        S)  append_opt -I;reexec_without -I -s  ;;
+        T)  append_opt "-m $OPTARG"                 ;;
+        U)  append_opt "--user-agent \"$OPTARG\""   ;;
+        V)  version; curl --version; exit 0         ;;
+        X)  true                                    ;;
+        a)  append_raw_arg "2>&1 | tee -a $OPTARG"  ;;
+        b)
+            wget_log="wget-log"
+            i=1
+            while [[ -f "${wget_log}" ]];do
+                # if that exists, increment until we find something that doesn't
+                i=$(($i+1))
+                wget_log="wget-log.${i}"
+            done
+            append_raw_arg ">\"$wget_log\" 2>&1 &"
+            printf "Continuing in background, pid %s.\nOutput will be written to '$wget_log'.\n" "$$"
+        ;;
+        c)  append_opt "-C -"                       ;;
+        d)  append_opt "-v"                         ;;
+        e)  true                                    ;;
+        h)  help                                    ;;
+        i)
+            [[ ! -f "$OPTARG" ]] && error "$OPTARG does not exist" 3
+            for url in $(<"$OPTARG");do
+                URLS=( ${URLS[@]} "$url" )
+            done
+        ;;
+        q)  append_opt "-s"                         ;;
+    esac
+    shift $(($OPTIND-1))
+done
+
+# set wget default equivilants
+append_opt -L # follow redirects
+append_opt -# # progress bar
+
+if [[ -z "${URLS[@]}" ]];then
+    URLS=( ${@} )
+fi
+
+for url in ${URLS[@]};do
+    url_file=${url##*/}
+    if [[ "$url" == "$url_file" ]];then
+        # has no remote file name and -o is not in CURL_OPTS... assume index.html
+        has_opt -o || append_opt "-o index.html"
+    fi
+
+    eval "print_url '$url';curl ${CURL_OPTS} -- $url"
+    if [[ "$reexec" ]];then
+        for reexec_arg in ${reexec_args_without};do
+            CURL_OPTS_REEXEC=$(echo "${CURL_OPTS_REEXEC:-$CURL_OPTS}" | sed "s# $reexec_arg##")
+        done
+        eval "print_url '$url';curl ${CURL_OPTS_REEXEC} ${CURL_OPTS_REEXEC_ONLY} -- $url"
+    fi
+done
diff --git a/prebuilt/common/bootanimation/1080.zip b/prebuilt/common/bootanimation/1080.zip
index cd3e293..1d21a75 100644
--- a/prebuilt/common/bootanimation/1080.zip
+++ b/prebuilt/common/bootanimation/1080.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/1200.zip b/prebuilt/common/bootanimation/1200.zip
index d865e8d..1eff046 100644
--- a/prebuilt/common/bootanimation/1200.zip
+++ b/prebuilt/common/bootanimation/1200.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/1440.zip b/prebuilt/common/bootanimation/1440.zip
new file mode 100644
index 0000000..8ab8468
--- /dev/null
+++ b/prebuilt/common/bootanimation/1440.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/1600.zip b/prebuilt/common/bootanimation/1600.zip
index 5a758ed..282e339 100644
--- a/prebuilt/common/bootanimation/1600.zip
+++ b/prebuilt/common/bootanimation/1600.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/480.zip b/prebuilt/common/bootanimation/480.zip
deleted file mode 100644
index a6ca2e6..0000000
--- a/prebuilt/common/bootanimation/480.zip
+++ /dev/null
Binary files differ
diff --git a/prebuilt/common/bootanimation/600.zip b/prebuilt/common/bootanimation/600.zip
index 15e8645..c42c8ce 100644
--- a/prebuilt/common/bootanimation/600.zip
+++ b/prebuilt/common/bootanimation/600.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/720.zip b/prebuilt/common/bootanimation/720.zip
deleted file mode 100644
index f9a2a9f..0000000
--- a/prebuilt/common/bootanimation/720.zip
+++ /dev/null
Binary files differ
diff --git a/prebuilt/common/bootanimation/800.zip b/prebuilt/common/bootanimation/800.zip
index 49b5729..7cc378d 100644
--- a/prebuilt/common/bootanimation/800.zip
+++ b/prebuilt/common/bootanimation/800.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/halfres/1080.zip b/prebuilt/common/bootanimation/halfres/1080.zip
index 5c2cc75..f39f45b 100644
--- a/prebuilt/common/bootanimation/halfres/1080.zip
+++ b/prebuilt/common/bootanimation/halfres/1080.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/halfres/1200.zip b/prebuilt/common/bootanimation/halfres/1200.zip
index 2531d6e..7d9a090 100644
--- a/prebuilt/common/bootanimation/halfres/1200.zip
+++ b/prebuilt/common/bootanimation/halfres/1200.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/halfres/1440.zip b/prebuilt/common/bootanimation/halfres/1440.zip
new file mode 100644
index 0000000..e591517
--- /dev/null
+++ b/prebuilt/common/bootanimation/halfres/1440.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/halfres/1600.zip b/prebuilt/common/bootanimation/halfres/1600.zip
index 8e78051..c1a634d 100644
--- a/prebuilt/common/bootanimation/halfres/1600.zip
+++ b/prebuilt/common/bootanimation/halfres/1600.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/halfres/480.zip b/prebuilt/common/bootanimation/halfres/480.zip
deleted file mode 100644
index 5e73c08..0000000
--- a/prebuilt/common/bootanimation/halfres/480.zip
+++ /dev/null
Binary files differ
diff --git a/prebuilt/common/bootanimation/halfres/600.zip b/prebuilt/common/bootanimation/halfres/600.zip
index f85e194..7c4fca6 100644
--- a/prebuilt/common/bootanimation/halfres/600.zip
+++ b/prebuilt/common/bootanimation/halfres/600.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/halfres/720.zip b/prebuilt/common/bootanimation/halfres/720.zip
deleted file mode 100644
index a02f843..0000000
--- a/prebuilt/common/bootanimation/halfres/720.zip
+++ /dev/null
Binary files differ
diff --git a/prebuilt/common/bootanimation/halfres/800.zip b/prebuilt/common/bootanimation/halfres/800.zip
index 7255cb0..ff73991e 100644
--- a/prebuilt/common/bootanimation/halfres/800.zip
+++ b/prebuilt/common/bootanimation/halfres/800.zip
Binary files differ
diff --git a/prebuilt/common/bootanimation/halfres/generate-half-res-anims.sh b/prebuilt/common/bootanimation/halfres/generate-half-res-anims.sh
index 730f535..20379f0 100755
--- a/prebuilt/common/bootanimation/halfres/generate-half-res-anims.sh
+++ b/prebuilt/common/bootanimation/halfres/generate-half-res-anims.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-HALF_RES_RESOLUTIONS="480 600 720 800 1080 1200 1600"
+HALF_RES_RESOLUTIONS="480 600 720 800 1080 1200 1440 1600"
 
 for i in $HALF_RES_RESOLUTIONS; do
 	rm -f $i.zip
diff --git a/prebuilt/common/etc/init.d/00banner b/prebuilt/common/etc/init.d/00banner
index a7b28fd..51164fd 100644
--- a/prebuilt/common/etc/init.d/00banner
+++ b/prebuilt/common/etc/init.d/00banner
@@ -2,6 +2,6 @@
 #
 # Print startup info
 #
-L="log -p i -t slim"
+L="log -p i -t bliss"
 
-$L "Welcome to Android `getprop ro.build.version.release` / SlimRoms `getprop ro.slim.version`";
+$L "Welcome to Android `getprop ro.build.version.release` / BlissRoms `getprop ro.bliss.version`";
diff --git a/prebuilt/common/etc/init.d/90userinit b/prebuilt/common/etc/init.d/90userinit
index e8e6de0..5e099e8 100755
--- a/prebuilt/common/etc/init.d/90userinit
+++ b/prebuilt/common/etc/init.d/90userinit
@@ -5,11 +5,11 @@
 then
    log -p i -t userinit "Executing /data/local/userinit.sh";
    logwrapper /system/bin/sh /data/local/userinit.sh;
-   setprop cm.userinit.active 1;
+   setprop bliss.userinit.active 1;
 fi;
 
 if [ -d /data/local/userinit.d ];
 then
-   logwrapper busybox run-parts /data/local/userinit.d;
-   setprop cm.userinit.active 1;
+   logwrapper run-parts /data/local/userinit.d;
+   setprop bliss.userinit.active 1;
 fi;
diff --git a/prebuilt/common/media/audio/alarms/CyanAlarm.ogg b/prebuilt/common/media/audio/alarms/CyanAlarm.ogg
new file mode 100644
index 0000000..6755bb8
--- /dev/null
+++ b/prebuilt/common/media/audio/alarms/CyanAlarm.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/alarms/NuclearLaunch.ogg b/prebuilt/common/media/audio/alarms/NuclearLaunch.ogg
new file mode 100644
index 0000000..00a4a83
--- /dev/null
+++ b/prebuilt/common/media/audio/alarms/NuclearLaunch.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/notifications/CyanDoink.ogg b/prebuilt/common/media/audio/notifications/CyanDoink.ogg
new file mode 100644
index 0000000..e8135ce
--- /dev/null
+++ b/prebuilt/common/media/audio/notifications/CyanDoink.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/notifications/CyanMail.ogg b/prebuilt/common/media/audio/notifications/CyanMail.ogg
new file mode 100644
index 0000000..9b6d8c1
--- /dev/null
+++ b/prebuilt/common/media/audio/notifications/CyanMail.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/notifications/CyanMessage.ogg b/prebuilt/common/media/audio/notifications/CyanMessage.ogg
new file mode 100644
index 0000000..415bfdf
--- /dev/null
+++ b/prebuilt/common/media/audio/notifications/CyanMessage.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/notifications/Laser.ogg b/prebuilt/common/media/audio/notifications/Laser.ogg
new file mode 100644
index 0000000..2448c52
--- /dev/null
+++ b/prebuilt/common/media/audio/notifications/Laser.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/notifications/Naughty.ogg b/prebuilt/common/media/audio/notifications/Naughty.ogg
new file mode 100644
index 0000000..77f15a8
--- /dev/null
+++ b/prebuilt/common/media/audio/notifications/Naughty.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/notifications/Pong.ogg b/prebuilt/common/media/audio/notifications/Pong.ogg
new file mode 100644
index 0000000..330d1e7
--- /dev/null
+++ b/prebuilt/common/media/audio/notifications/Pong.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/notifications/Rang.ogg b/prebuilt/common/media/audio/notifications/Rang.ogg
new file mode 100644
index 0000000..2531b3a
--- /dev/null
+++ b/prebuilt/common/media/audio/notifications/Rang.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/notifications/Stone.ogg b/prebuilt/common/media/audio/notifications/Stone.ogg
new file mode 100644
index 0000000..4f9f239
--- /dev/null
+++ b/prebuilt/common/media/audio/notifications/Stone.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/ringtones/Boxbeat.ogg b/prebuilt/common/media/audio/ringtones/Boxbeat.ogg
new file mode 100644
index 0000000..773f478
--- /dev/null
+++ b/prebuilt/common/media/audio/ringtones/Boxbeat.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/ringtones/CyanTone.ogg b/prebuilt/common/media/audio/ringtones/CyanTone.ogg
new file mode 100644
index 0000000..eea5142
--- /dev/null
+++ b/prebuilt/common/media/audio/ringtones/CyanTone.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/ringtones/Highscore.ogg b/prebuilt/common/media/audio/ringtones/Highscore.ogg
new file mode 100644
index 0000000..fe07c89
--- /dev/null
+++ b/prebuilt/common/media/audio/ringtones/Highscore.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/ringtones/Lyon.ogg b/prebuilt/common/media/audio/ringtones/Lyon.ogg
new file mode 100644
index 0000000..3e4c925
--- /dev/null
+++ b/prebuilt/common/media/audio/ringtones/Lyon.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/ringtones/Rockin.ogg b/prebuilt/common/media/audio/ringtones/Rockin.ogg
new file mode 100644
index 0000000..d48554d
--- /dev/null
+++ b/prebuilt/common/media/audio/ringtones/Rockin.ogg
Binary files differ
diff --git a/prebuilt/common/media/audio/ringtones/Sheep.mp3 b/prebuilt/common/media/audio/ringtones/Sheep.mp3
new file mode 100644
index 0000000..f3f84a9
--- /dev/null
+++ b/prebuilt/common/media/audio/ringtones/Sheep.mp3
Binary files differ
diff --git a/prebuilt/common/media/audio/ringtones/Yukaay.ogg b/prebuilt/common/media/audio/ringtones/Yukaay.ogg
new file mode 100644
index 0000000..a4c8820
--- /dev/null
+++ b/prebuilt/common/media/audio/ringtones/Yukaay.ogg
Binary files differ
diff --git a/proprietary/SlimIRC/Android.mk b/proprietary/SlimIRC/Android.mk
deleted file mode 100644
index 1a6cf11..0000000
--- a/proprietary/SlimIRC/Android.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-LOCAL_MODULE := SlimIRC
-LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
-
-LOCAL_MODULE_CLASS := APPS
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
-LOCAL_CERTIFICATE := PRESIGNED
-include $(BUILD_PREBUILT)
diff --git a/proprietary/SlimIRC/SlimIRC.apk b/proprietary/SlimIRC/SlimIRC.apk
deleted file mode 100644
index 7406098..0000000
--- a/proprietary/SlimIRC/SlimIRC.apk
+++ /dev/null
Binary files differ
diff --git a/sepolicy/qcom/sepolicy.mk b/sepolicy/qcom/sepolicy.mk
index 97b7275..fd4da4c 100644
--- a/sepolicy/qcom/sepolicy.mk
+++ b/sepolicy/qcom/sepolicy.mk
@@ -1,2 +1,2 @@
 BOARD_SEPOLICY_DIRS += \
-    vendor/slim/sepolicy/qcom
+    vendor/bliss/sepolicy/qcom
diff --git a/sepolicy/sepolicy.mk b/sepolicy/sepolicy.mk
index de903fd..7c79c22 100644
--- a/sepolicy/sepolicy.mk
+++ b/sepolicy/sepolicy.mk
@@ -4,5 +4,5 @@
 #
 
 BOARD_SEPOLICY_DIRS += \
-    vendor/slim/sepolicy
+    vendor/bliss/sepolicy
 
diff --git a/slim.devices b/slim.devices
deleted file mode 100644
index cb092f6..0000000
--- a/slim.devices
+++ /dev/null
@@ -1,99 +0,0 @@
-amami
-armani
-bacon
-crespo
-d2att
-d2mtr
-d2spr
-d2tmo
-d2usc
-d2vzw
-d800
-d801
-d802
-d803
-d850
-d851
-d852
-d855
-deb
-endeavoru
-falcon
-flo
-galaxysmtd
-geeb
-geefhd_att_us
-gkatt
-grouper
-hammerhead
-hercules
-hlte
-hltespr
-hltetmo
-honami
-i777
-i9100
-i9100g
-i925
-i9300
-i9500
-jflteatt
-jfltecan
-jfltespr
-jfltetmo
-jflteusc
-jfltevzw
-jfltexx
-lettuce
-ls980
-ls990
-m7
-m7spr
-m7vzw
-m8
-maguro
-mako
-manta
-mondrianwifi
-moto_msm8960
-moto_msm8960dt
-n5100
-n5110
-n5120
-n7000
-n7100
-p3100
-p3110
-p5100
-p5110
-p700
-peregrine
-pyramid
-quincyatt
-shamu
-sirius
-skyrocket
-surnia
-t0lte
-t0lteatt
-t0ltetmo
-taoshan
-tilapia
-titan
-togari
-tomato
-toro
-toroplus
-trltecan
-trltespr
-trltetmo
-trlteusc
-trltevzw
-v500
-vs980
-vs985
-wx_na_wf
-yuga
-z008
-z00a
-z3c
diff --git a/tools/slim_process_props.py b/tools/bliss_process_props.py
similarity index 97%
rename from tools/slim_process_props.py
rename to tools/bliss_process_props.py
index 373ba31..6a49380 100755
--- a/tools/slim_process_props.py
+++ b/tools/bliss_process_props.py
@@ -34,7 +34,7 @@
         new_lcd = lcd_changer.get(lcd, lcd)
     if new_lcd != '':
         prop.put('persist.sys.lcd_density', new_lcd)
-        prop.put('ro.slim.lcd_density', new_lcd)
+        prop.put('ro.bliss.lcd_density', new_lcd)
 
 
 def mangle_build_prop(prop):
diff --git a/tools/build.sh b/tools/build.sh
new file mode 100644
index 0000000..495018d
--- /dev/null
+++ b/tools/build.sh
@@ -0,0 +1,181 @@
+#!/bin/bash
+
+#    BlissPop  Compilation Script
+#
+#    Copyright (C) 2015 Team Bliss
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# No scrollback buffer
+echo -e '\0033\0143'
+
+
+
+# Get intial time of script startup
+res1=$(date +%s.%N)
+
+
+
+# Specify colors for shell
+red='tput setaf 1'              # red
+green='tput setaf 2'            # green
+yellow='tput setaf 3'           # yellow
+blue='tput setaf 4'             # blue
+violet='tput setaf 5'           # violet
+cyan='tput setaf 6'             # cyan
+white='tput setaf 7'            # white
+txtbld=$(tput bold)             # Bold
+bldred=${txtbld}$(tput setaf 1) # Bold red
+bldgrn=${txtbld}$(tput setaf 2) # Bold green
+bldblu=${txtbld}$(tput setaf 4) # Bold blue
+bldcya=${txtbld}$(tput setaf 6) # Bold cyan
+normal='tput sgr0'
+
+
+tput bold
+tput setaf 1
+clear
+echo -e ""
+echo -e "      ___           ___                   ___           ___              "
+echo -e "     /\  \         /\__\      ___        /\  \         /\  \             "
+echo -e "    /::\  \       /:/  /     /\  \      /::\  \       /::\  \            "
+echo -e "   /:/\:\  \     /:/  /      \:\  \    /:/\ \  \     /:/\ \  \           "
+echo -e "  /::\~\:\__\   /:/  /       /::\__\  _\:\~\ \  \   _\:\~\ \  \          "
+echo -e " /:/\:\ \:|__| /:/__/     __/:/\/__/ /\ \:\ \ \__\ /\ \:\ \ \__\         "
+echo -e " \:\~\:\/:/  / \:\  \    /\/:/  /    \:\ \:\ \/__/ \:\ \:\ \/__/         "
+echo -e "  \:\ \::/  /   \:\  \   \::/__/      \:\ \:\__\    \:\ \:\__\           " 
+echo -e "   \:\/:/  /     \:\  \   \:\__\       \:\/:/  /     \:\/:/  /           "  
+echo -e "    \::/__/       \:\__\   \/__/        \::/  /       \::/  /            "
+echo -e "     ~~            \/__/                 \/__/         \/__/             "
+echo -e ""
+echo -e ""
+echo -e ""
+echo -e ""
+echo -e ""
+
+sleep 3s
+
+
+# Confirm 'repo sync'
+echo -e "\n\n${bldgrn}  Do you want to repo sync before proceeding?\n"
+echo ""
+echo -e "${bldblu}  1. Yes"
+echo -e "${bldblu}  2. No"
+echo ""
+echo ""
+$normal
+read askreposync
+
+# Confirm 'make clean'
+echo -e "\n\n${bldgrn}  Do you want to make clean?\n"
+echo ""
+echo -e "${bldblu}  1. Yes"
+echo -e "${bldblu}  2. No"
+echo ""
+echo ""
+$normal
+read askClean
+
+echo ""
+echo ""
+if [ "$askreposync" == "1" ]
+then
+    echo -e "${bldred}  Will repo sync before starting the build... "
+else
+    echo -e "${bldred}  Will continue without repo syncing... "
+fi
+echo ""
+echo ""
+
+echo ""
+echo ""
+
+if [ "$askClean" == "1" ]
+then
+    echo -e "${bldred}  Compilation will continue after cleaning previous build files... "
+else
+    echo -e "${bldred}  ROM will be compiled without cleaning previous build files... "
+fi
+echo ""
+echo ""
+
+echo ""
+echo ""
+
+
+sleep 2s
+
+
+if [ "$askreposync" == "1" ]
+then
+	echo ""
+	echo ""
+	echo -e "${bldgrn}  syncing... "
+	echo ""
+	echo ""
+	$normal
+	repo sync -j250
+fi
+
+if [ "$askClean" == "1" ]
+then
+	echo ""
+	echo ""
+	echo -e "${bldgrn}  Cleaning before starting build... "
+	echo ""
+	echo ""
+	$normal
+	rm -rf out
+fi
+
+# Setup environment
+echo -e ""
+echo -e ""
+echo -e "${bldgrn}  Setting up build environment..."
+echo -e ""
+echo -e ""
+$normal
+. build/envsetup.sh
+
+
+# Lunch device
+echo -e ""
+echo -e ""
+echo -e "${bldcya}  Choose your device from the lunch menu..."
+echo -e ""
+echo -e ""
+$normal
+$green
+lunch
+
+# Start compilation
+echo -e ""
+echo -e ""
+echo -e "${bldcya}  Starting compilation BlissPop..."
+echo -e ""
+echo -e ""
+$normal
+mka bacon
+echo -e ""
+
+
+
+# Compilation complete
+tput bold
+tput setaf 1
+echo -e ""
+echo -e "The build process has finished"
+echo -e ""
+echo -e ""
diff --git a/tools/changelog b/tools/changelog
new file mode 100755
index 0000000..2ee6e3b
--- /dev/null
+++ b/tools/changelog
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# Exports
+
+. $ANDROID_BUILD_TOP/vendor/bliss/tools/colors
+
+export Changelog=CHANGELOG-bliss.txt
+
+if [ -f $Changelog ];
+then
+	rm -f $Changelog
+fi
+
+touch $Changelog
+
+# Print something to build output
+echo ${bldppl}"Generating changelog..."${txtrst}
+
+for i in $(seq 5);
+do
+export After_Date=`date --date="$i days ago" +%m-%d-%Y`
+k=$(expr $i - 1)
+	export Until_Date=`date --date="$k days ago" +%m-%d-%Y`
+
+	# Line with after --- until was too long for a small ListView
+	echo '====================' >> $Changelog;
+	echo  "     "$Until_Date       >> $Changelog;
+	echo '===================='	>> $Changelog;
+	echo >> $Changelog;
+
+	# Cycle through every repo to find commits between 2 dates
+	repo forall -pc 'git log --oneline --after=$After_Date --until=$Until_Date' >> $Changelog
+	echo >> $Changelog;
+done
+
+sed -i 's/project/   */g' $Changelog
+
+cp $Changelog $OUT/system/etc/
+rm $Changelog
diff --git a/tools/colors b/tools/colors
new file mode 100755
index 0000000..b653210
--- /dev/null
+++ b/tools/colors
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+if [ ! "$BUILD_WITH_COLORS" = "0" ]; then
+    red=$(tput setaf 1)             #  red
+    grn=$(tput setaf 2)             #  green
+    ylw=$(tput setaf 3)             #  yellow
+    blu=$(tput setaf 4)             #  blue
+    ppl=$(tput setaf 5)             #  purple
+    cya=$(tput setaf 6)             #  cyan
+    txtbld=$(tput bold)             #  Bold
+    bldred=${txtbld}$(tput setaf 1) #  red
+    bldgrn=${txtbld}$(tput setaf 2) #  green
+    bldylw=${txtbld}$(tput setaf 3) #  yellow
+    bldblu=${txtbld}$(tput setaf 4) #  blue
+    bldppl=${txtbld}$(tput setaf 5) #  purple
+    bldcya=${txtbld}$(tput setaf 6) #  cyan
+    txtrst=$(tput sgr0)             #  Reset
+    rev=$(tput rev)                 #  Reverse color
+    pplrev=${rev}$(tput setaf 5)
+    cyarev=${rev}$(tput setaf 6)
+    ylwrev=${rev}$(tput setaf 3)
+    blurev=${rev}$(tput setaf 4)
+fi
diff --git a/tools/opticharger b/tools/opticharger
new file mode 100755
index 0000000..a869c6c
--- /dev/null
+++ b/tools/opticharger
@@ -0,0 +1,163 @@
+#!/bin/bash
+#
+# Super-mega LiquidSmooth opticharger of doom
+# Shrinks apks by running pngquant or pngcrush or optipng or pngout on png images
+#
+
+. $ANDROID_BUILD_TOP/vendor/bliss/tools/colors
+
+OUT_TARGET_HOST=$(uname -a | grep Darwin)
+if [ -z "$OUT_TARGET_HOST" ]
+then
+    OUT_TARGET_HOST=linux-x86
+else
+    OUT_TARGET_HOST=darwin-x86
+fi
+
+set -e
+QUIET=1
+BASE=`pwd`
+BRUTECRUSH="-brute"
+TMPDIR=/tmp/opticharge-$$
+
+if [ -z "$BRUTE_PNGCRUSH" ]
+then
+    BRUTECRUSH=""
+fi
+
+if [ "$APKCERTS" = "" ];
+then
+    if [ "$TARGET_BUILD_VARIANT" = "userdebug" ]; then
+       TARGET_BUILD_VARIANT="eng"
+    elif [ "$TARGET_BUILD_VARIANT" = "user" ]; then
+       TARGET_BUILD_VARIANT="eng"
+    fi
+
+    APKCERTS=$OUT/obj/PACKAGING/target_files_intermediates/$TARGET_PRODUCT-target_files-$TARGET_BUILD_VARIANT.$USER/META/apkcerts.txt
+    if [ ! -f "$APKCERTS" ];
+    then
+        echo -e ${red}"Set APKCERTS to the path to your apkcerts.txt file"${txtrst}
+        exit 1;
+    fi
+fi
+
+if [ ! -f "$APKCERTS" ];
+then
+    echo -e ${red}"Invalid path to apkcerts.txt, set APKCERTS to the correct path."${txtrst}
+fi
+
+if [ "$(which pngquant)" != "" ];
+then
+    optimize_png () {
+        pngquant --speed 1 --force --ext .png $1 1> /dev/null 2> /dev/null
+    }
+elif [ "$(which pngcrush)" != "" ];
+then
+    optimize_png () {
+        pngcrush -q ${BRUTECRUSH} $1 ${1}.out 1> /dev/null 2> /dev/null
+        mv ${1}.out ${1} 2> /dev/null
+    }
+elif [ "$(which optipng)" != "" ];
+then
+    optimize_png () {
+        optipng -o7 -quiet $1 1> /dev/null 2> /dev/null
+    }
+elif [ "$(which pngout-static)" != "" ];
+then
+    optimize_png () {
+        pngout-static $1
+    }
+elif [ "$(which pngout)" != "" ];
+then
+    optimize_png () {
+        pngout $1
+    }
+else
+    echo -e ${red}"Please install pngquant, pngcrush, optipng, or pngout"${txtrst}
+    exit 1;
+fi
+
+if [ "`which aapt`" = "" ];
+then
+    echo -e ${red}"Please ensure aapt is in your \$PATH"${txtrst}
+    exit 1;
+fi
+
+if [ "`which zipalign`" = "" ];
+then
+    echo -e ${red}"Please ensure zipalign is in your \$PATH"${txtrst}
+    exit 1;
+fi
+
+if [ -e "$1" ];
+then
+    NAME=`basename $1`;
+    echo -e ${bldgrn}"Optimizing:${txtrst} $NAME...";
+
+    if [ "$2" != "" ];
+    then
+        if [ "$DEFAULT_SYSTEM_DEV_CERTIFICATE" ]; then
+            CERT_PATH=`dirname $DEFAULT_SYSTEM_DEV_CERTIFICATE`
+        else
+            CERT_PATH=build/target/product/security
+        fi
+        CERT="$CERT_PATH"/$2.x509.pem
+        KEY="$CERT_PATH"/$2.pk8
+        if [ ! -f "$ANDROID_BUILD_TOP/$CERT" ];
+        then
+            echo -e ${red}"$CERT does not exist!"${txtrst};
+            exit 1;
+        fi
+    else
+        APKINFO=`grep "name=\"$NAME\"" $APKCERTS`;
+        [ $QUIET ] || echo -e "APKINFO: $APKINFO";
+        if [ "$APKINFO" = "" ];
+        then
+            echo -e ${red}"No apk info for $NAME"${txtrst};
+            exit 1;
+        fi
+        CERT=`echo -e $APKINFO | awk {'print $2'} | cut -f 2 -d "=" | tr -d "\""`;
+        KEY=`echo -e $APKINFO | awk {'print $3'} | cut -f 2 -d "=" | tr -d "\""`;
+        if [ "$CERT" = "" ];
+        then
+            echo -e ${red}"Unable to find certificate for $NAME"${txtrst}
+            exit 1;
+        fi
+        if [ "$CERT" = "PRESIGNED" ];
+        then
+            echo -e ${cya}"$NAME is presigned, skipping"${txtrst}
+            exit 1;
+        fi
+    fi
+
+    [ $QUIET ] || echo -e ${bldylw}"Certificate:${txtrst} $CERT";
+
+    [ -d $TMPDIR/$NAME ] && rm -rf $TMPDIR/$NAME
+    mkdir -p $TMPDIR/$NAME
+    trap "rm -rf $TMPDIR; exit" INT TERM EXIT
+    cd $TMPDIR/$NAME
+    unzip -q $BASE/$1
+    for x in `find . -name "*.png" | grep -v "\.9.png$" | tr "\n" " "`
+    do
+        [ $QUIET ] || echo -e ${bldgrn}"Crushing${txtrst} $x"
+        optimize_png $x
+    done
+    cp $BASE/$1 $BASE/$1.old
+
+    [ $QUIET ] || echo -e ${bldgrn}"Repacking apk.."${txtrst}
+    aapt p -0 .dat -0 .dict -0 .arsc -F $NAME .
+
+    [ $QUIET ] || echo -e ${bldgrn}"Resigning with cert:${txtrst} `echo -e $CERT`"
+
+    [ $QUIET ] || echo java -jar $ANDROID_HOST_OUT/framework/signapk.jar $ANDROID_BUILD_TOP/$CERT $ANDROID_BUILD_TOP/$KEY $NAME signed_$NAME
+    java -jar $ANDROID_HOST_OUT/framework/signapk.jar $ANDROID_BUILD_TOP/$CERT $ANDROID_BUILD_TOP/$KEY $NAME signed_$NAME
+    [ $QUIET ] || echo -e ${bldgrn}"Zipalign.."${txtrst}
+    zipalign -f 4 signed_$NAME $BASE/$1
+    if [ ! $QUIET ]; then
+        ls -l $BASE/$1.old
+        ls -l $BASE/$1
+    fi
+    rm $BASE/$1.old
+else
+    echo -e "Usage: $0 [apk file]"
+fi
diff --git a/tools/otaxml b/tools/otaxml
new file mode 100755
index 0000000..d0849fe
--- /dev/null
+++ b/tools/otaxml
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# Exports
+
+. $ANDROID_BUILD_TOP/vendor/bliss/tools/colors
+
+export otaxml=ota${BLISS_OTA_XMLVER}.xml
+
+if [ -f $otaxml ];
+then
+  rm -f $otaxml
+fi
+
+cp vendor/bliss/ota.xml $otaxml
+
+touch $otaxml
+
+BLISS_OTA_MD5=$(cat "$OUT/$BLISS_OTA_VERNAME.zip.md5sum" | cut -d ' ' -f 1)
+BLISS_OTA_FILESIZE=$(ls -la "$OUT/$BLISS_OTA_VERNAME.zip" | cut -d ' ' -f 5)
+
+sed -i "s/BLISS_OTA_ROM/${BLISS_OTA_ROM}/g" $otaxml
+sed -i "s/BLISS_OTA_VERNAME/${BLISS_OTA_VERNAME}/g" $otaxml
+sed -i "s/BLISS_OTA_VERSION/${BLISS_OTA_VER}/g" $otaxml
+sed -i "s|BLISS_OTA_URL|${BLISS_OTA_URL}|g" $otaxml
+sed -i "s/BLISS_OTA_MD5/${BLISS_OTA_MD5}/g" $otaxml
+sed -i "s/BLISS_OTA_FILESIZE/${BLISS_OTA_FILESIZE}/g" $otaxml
+sed -i "s/BLISS_DEVELOPER/${BLISS_DEVELOPER}/g" $otaxml
+sed -i "s|BLISS_DONATE|${BLISS_DONATE}|g" $otaxml
+
+cp $otaxml $OUT/
+rm $otaxml
+
+echo ${bldppl}"ota.xml generated."${txtrst}
diff --git a/tools/squisher b/tools/squisher
new file mode 100755
index 0000000..20f5f9c
--- /dev/null
+++ b/tools/squisher
@@ -0,0 +1,34 @@
+#!/bin/bash
+#
+# Squish a CM otapackage for distribution
+# cyanogen
+
+. $ANDROID_BUILD_TOP/vendor/bliss/tools/colors
+
+OUT_TARGET_HOST=`uname -s`
+if [ x"$OUT_TARGET_HOST" = x"Linux" ]
+then
+   OUT_TARGET_HOST=linux-x86
+   XARGS="xargs --max-args=1 --max-procs `grep 'processor' /proc/cpuinfo|wc -l`"
+elif [ x"$OUT_TARGET_HOST" = x"Darwin" ]
+then
+   OUT_TARGET_HOST=darwin-x86
+   XARGS="xargs -n 1 -P `sysctl hw.ncpu | awk '{print $2}'`"
+else
+   echo -e ${red}"ERROR: unknown/unsupported host OS!"${txtrst}
+   exit 1
+fi
+
+if [ -z "$OUT" -o ! -d "$OUT" ]; then
+	echo -e ${red}"ERROR: $0 only works with a full build environment. $OUT should exist."${txtrst}
+	exit 1
+fi
+
+OPTICHARGER=$ANDROID_BUILD_TOP/vendor/bliss/tools/opticharger
+QUIET=-q
+DELETE_BINS="applypatch applypatch_static check_prereq recovery updater"
+
+# Optimize PNG resources in APKs
+( cd $OUT/system; find framework/ app/ priv-app/ vendor/app/ -name \*.apk -print | $XARGS $OPTICHARGER; )
+
+exit 0
diff --git a/vendorsetup.sh b/vendorsetup.sh
old mode 100644
new mode 100755
index e74e260..93e98de
--- a/vendorsetup.sh
+++ b/vendorsetup.sh
@@ -1,3 +1,4 @@
-. "$(gettop)/vendor/slim/build/envsetup.sh"
-
-slim_device_combos
+for combo in $(cat vendor/bliss/bliss-device-targets)
+do
+    add_lunch_combo $combo
+done
