├── .gitignore ├── bash ├── screenrc ├── bashrc ├── bash_options ├── inputrc ├── bash_profile ├── bash_paths ├── bash_exports ├── bash_prompt ├── bash_functions └── bash_aliases ├── gem └── gemrc ├── git ├── gitattributes ├── gitignore └── gitconfig ├── npm └── npmrc ├── README.md ├── bin ├── osxdefaults └── forcefiles └── scheme └── Atom.terminal /.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bash/screenrc: -------------------------------------------------------------------------------- 1 | # Disable the startup message 2 | startup_message off 3 | -------------------------------------------------------------------------------- /gem/gemrc: -------------------------------------------------------------------------------- 1 | --- 2 | :backtrace: false 3 | :bulk_threshold: 1000 4 | :sources: 5 | - https://rubygems.org/ 6 | :update_sources: true 7 | :verbose: true 8 | gem: "--no-rdoc --no-ri" 9 | benchmark: false -------------------------------------------------------------------------------- /git/gitattributes: -------------------------------------------------------------------------------- 1 | # Automatically normalize line endings for all text-based files 2 | #* text=auto 3 | # Disabled because of https://github.com/mathiasbynens/dotfiles/issues/149 :( 4 | 5 | *.png diff=exif 6 | -------------------------------------------------------------------------------- /npm/npmrc: -------------------------------------------------------------------------------- 1 | init.author.name=Vitor Britto 2 | init.author.email=code@vitorbritto.com.br 3 | init.author.url=http://vitorbritto.com.br/ 4 | email=code@vitorbritto.com.br 5 | //registry.npmjs.org/:_authToken=93c30d36-1281-46b6-8ead-c9955e712318 6 | -------------------------------------------------------------------------------- /bash/bashrc: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # bashrc 5 | # --------------------------------------------------- 6 | 7 | [ -n "$PS1" ] && source ~/.bash_profile 8 | 9 | if [ -f /Users/Colossus/.tnsrc ]; then 10 | source /Users/Colossus/.tnsrc 11 | fi 12 | -------------------------------------------------------------------------------- /bash/bash_options: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Options 5 | # --------------------------------------------------- 6 | 7 | 8 | # Autocorrect typos in path names when using `cd` 9 | shopt -s cdspell 10 | 11 | # Check the window size after each command and, if necessary, update the values 12 | # of LINES and COLUMNS. 13 | shopt -s checkwinsize 14 | 15 | # Append to the Bash history file, rather than overwriting it 16 | shopt -s histappend 17 | 18 | # Case-insensitive globbing (used in pathname expansion) 19 | shopt -s nocaseglob 20 | -------------------------------------------------------------------------------- /bash/inputrc: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # inputrc 5 | # --------------------------------------------------- 6 | 7 | # Use case-insensitive TAB autocompletion 8 | set completion-ignore-case on 9 | 10 | # Auto list tab completions (use instead of TAB-cycling) 11 | set show-all-if-ambiguous on 12 | 13 | # Make TAB cycle through possible completions 14 | # "\t": menu-complete 15 | # Make SHIFT-TAB reverse cycle through possible completions 16 | # "\e[Z": "\e-1\C-i" 17 | 18 | # Use the string that has already been typed as the prefix for searching 19 | # through commands (i.e. more intelligent Up/Down-arrow behavior) 20 | # "\e[B": history-search-forward 21 | # "\e[A": history-search-backward 22 | -------------------------------------------------------------------------------- /bash/bash_profile: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Profile 5 | # --------------------------------------------------- 6 | 7 | 8 | declare -a files=( 9 | $HOME/.forcefiles/bash/bash_options # Options 10 | $HOME/.forcefiles/bash/bash_exports # Exports 11 | $HOME/.forcefiles/bash/bash_aliases # Aliases 12 | $HOME/.forcefiles/bash/bash_functions # Functions 13 | $HOME/.forcefiles/bash/bash_prompt # Custom bash prompt 14 | $HOME/.bash_profile.local # Local and private settings 15 | $HOME/.forcefiles/bash/bash_paths # Path modifications 16 | ) 17 | 18 | # If these files are readable, source them 19 | for index in ${!files[*]} 20 | do 21 | if [[ -r ${files[$index]} ]]; then 22 | source ${files[$index]} 23 | fi 24 | done 25 | 26 | unset files 27 | 28 | # Source nvm 29 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm 30 | [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Force Files 2 | 3 | I was a little tired of typing so many lengthy commands in bash and organize an initial structure for my projects everytime I was logged in at Shell. Everything was a mess, a real waste of time! Thus I decided to build this repository. 4 | 5 | I realized I could split my dotfiles, automation tasks, bash aliases and functions, editor settings and a lot of things up into the main areas I used to work in my Workflow. 6 | 7 | Now, I can check, pick up something or run this guy for my recently fresh system. :ghost: 8 | 9 | > Notice: I am running on Mac OSX Mojave. These are my config files to set up a system the way I use it in my workflow. 10 | 11 | 12 | ## Installation 13 | 14 | ```bash 15 | $ bash -c "$(curl -fsSL raw.github.com/vitorbritto/forcefiles/master/bin/forcefiles)" 16 | ``` 17 | 18 | 19 | ## Usage 20 | 21 | - `./forcefiles --help`: Show Help and Instructions 22 | - `./forcefiles --list`: List all applications and dependencies that will be installed 23 | 24 | 25 | ## License 26 | 27 | [MIT License](http://vitorbritto.mit-license.org/) © Vitor Britto 28 | 29 | -------------------------------------------------------------------------------- /bash/bash_paths: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Paths 5 | # --------------------------------------------------- 6 | 7 | # Directories to be prepended to PATH 8 | declare -a dirs_to_prepend=( 9 | "$(brew --prefix)/bin" 10 | "/usr/local/sbin" 11 | "$(brew --prefix)/mysql/bin" 12 | "/Library/Frameworks/Python.framework/Versions/3.7/bin" 13 | "$HOME/.yarn/bin" 14 | ) 15 | 16 | # Directories to be appended to PATH 17 | declare -a dirs_to_append=( 18 | "/usr/local/bin" 19 | "$HOME/.forcefiles/bin" 20 | "$HOME/.composer/vendor/bin" 21 | "$(brew --prefix coreutils)/libexec/gnubin" 22 | "$ANDROID_HOME/tools" 23 | "$ANDROID_HOME/tools/bin" 24 | "$ANDROID_HOME/platform-tools" 25 | "$JAVA_HOME/bin" 26 | "$HOME/.config/yarn/global/node_modules/.bin" 27 | ) 28 | 29 | # Prepend directories to PATH 30 | for index in ${!dirs_to_prepend[*]} 31 | do 32 | if [ -d ${dirs_to_prepend[$index]} ]; then 33 | # If these directories exist, then prepend them to existing PATH 34 | PATH="${dirs_to_prepend[$index]}:$PATH" 35 | fi 36 | done 37 | 38 | # Append directories to PATH 39 | for index in ${!dirs_to_append[*]} 40 | do 41 | if [ -d ${dirs_to_append[$index]} ]; then 42 | # If these bins exist, then append them to existing PATH 43 | PATH="$PATH:${dirs_to_append[$index]}" 44 | fi 45 | done 46 | 47 | unset dirs_to_prepend dirs_to_append 48 | 49 | export PATH 50 | -------------------------------------------------------------------------------- /git/gitignore: -------------------------------------------------------------------------------- 1 | # Useful `.gitignore` templates: 2 | # - https://github.com/github/gitignore 3 | 4 | 5 | # OSX taken from: https://github.com/github/gitignore/blob/master/Global/OSX.gitignore 6 | # ---------------------------------------------------------------------------------------------- 7 | ._* 8 | .AppleDouble 9 | .DS_Store 10 | .localized 11 | .LSOverride 12 | .Spotlight-V100 13 | .Trashes 14 | Icon 15 | 16 | # Windows taken from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore 17 | # ---------------------------------------------------------------------------------------------- 18 | Desktop.ini 19 | ehthumbs.db 20 | Thumbs.db 21 | 22 | # Linux 23 | # ---------------------------------------------------------------------------------------------- 24 | *~ 25 | 26 | 27 | # Tags taken from: https://github.com/github/gitignore/blob/master/Global/Tags.gitignore 28 | # ---------------------------------------------------------------------------------------------- 29 | # Ignore tags created by etags and ctags 30 | TAGS 31 | tags 32 | 33 | # Vim taken from: https://github.com/github/gitignore/blob/master/Global/vim.gitignore 34 | # ---------------------------------------------------------------------------------------------- 35 | .*.sw[a-z] 36 | .netrwhist 37 | *.un~ 38 | Session.vim 39 | 40 | # Sass 41 | # ---------------------------------------------------------------------------------------------- 42 | *.sass-cache 43 | -------------------------------------------------------------------------------- /bash/bash_exports: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Exports 5 | # --------------------------------------------------- 6 | 7 | # Node Version Manager 8 | export NVM_DIR="$HOME/.nvm" 9 | 10 | # JAVA Environment 11 | export JAVA_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home" 12 | 13 | # Android SDK 14 | export ANDROID_HOME="$HOME/Library/Android/sdk" 15 | 16 | # Ignore commands that start with spaces and duplicates 17 | export HISTCONTROL=ignoreboth 18 | 19 | # Increase the maximum number of lines contained in the history file 20 | # (default value is 500) 21 | export HISTFILESIZE=1000 22 | 23 | # Don't add certain commands to the history file 24 | export HISTIGNORE="&:[bf]g:c:clear:exit:q:ll:ls -l:pwd:* --help" 25 | 26 | # Increase the maximum number of commands to remember in the command history 27 | # (default value is 500) 28 | export HISTSIZE=600 29 | 30 | # Prefer US English and use UTF-8 31 | export LANG="en_US" 32 | export LC_ALL="en_US.UTF-8" 33 | 34 | # Enable Atom One Dark theme for Terminal 35 | export CLICOLOR=1 36 | export LSCOLORS=ExFxBxDxCxegedabagacad 37 | 38 | # Don't clear the screen after quitting a man page 39 | export MANPAGER="less -X" 40 | 41 | # Use custom less colors for man pages 42 | # (http://www.gnu.org/software/termutils/manual/termutils-2.0/html_chapter/tput_1.html) 43 | export LESS_TERMCAP_md=$'\E[1;32m' # begin bold mode 44 | export LESS_TERMCAP_me=$'\E[0m' # end bold mode 45 | 46 | # Make new shells get the history lines from all previous 47 | # shells instead of the default "last window closed" history 48 | export PROMPT_COMMAND="history -a; $PROMPT_COMMAND" 49 | 50 | # ARCH FLAGS 51 | export ARCHFLAGS="-arch x86_64" -------------------------------------------------------------------------------- /git/gitconfig: -------------------------------------------------------------------------------- 1 | [user] 2 | name = Vitor Britto 3 | email = code@vitorbritto.com.br 4 | 5 | [alias] 6 | 7 | # General 8 | a = add . 9 | c = commit -m 10 | ca = commit -am 11 | co = checkout 12 | st = status 13 | br = branch 14 | ul = rm --cached 15 | re = rm -r 16 | rt = remote add 17 | rtv = remote -v 18 | rtr = remote rm 19 | ps = push 20 | pl = pull 21 | mg = merge 22 | 23 | # Others 24 | psm = push origin master 25 | psum = push -u origin master 26 | pl = pull origin master 27 | ghpage = checkout --orphan gh-pages 28 | type = cat-file -t 29 | dump = cat-file -p 30 | undo = reset --soft HEAD~1 31 | 32 | # `git remote prune origin`: remove remote-tracking branches that were deleted from the remote repo 33 | # `git gc`: cleanup unnecessary files and optimize the local repository 34 | # `git clean -df`: remove untracked files and directories from the working tree 35 | # `git stash clear`: remove all stashed states 36 | trim = !git remote prune origin && git gc 37 | cleanup = !git clean -df && git stash clear 38 | 39 | # Add untracked, remove deleted, and show status 40 | adda = !git add -A && git status 41 | 42 | # Fetch a repository ($1) and checkout its ref ($2) HEAD 43 | browse = !bash -c 'git fetch "$1" "$2" && git checkout FETCH_HEAD' - 44 | 45 | # Find out who is currently active on the repository 46 | # Displays committers in descending order of number of commits 47 | who = shortlog --numbered --summary --email --no-merges --since="3 months" 48 | 49 | # Sync Forked repository with original 50 | gsync = git fetch upstream && git checkout master && git merge upstream/master 51 | 52 | 53 | # Diff & Logs 54 | diffc = diff --cached # Diff what is staged for the next commit 55 | diffst = diff --stat # Diff overview 56 | graph = log --pretty=nice --date-order --graph # Custom graph log (append any tree-ish) 57 | grapha = log --pretty=nice --date-order --graph --all # Custom graph log for all branches 58 | logp = log --pretty=nice --date-order # Custom pretty log 59 | logst = log --stat # Diffstat log 60 | logsf = log --stat --format=oneline --abbrev-commit # Short format diffstat log 61 | 62 | [color] 63 | # color opts: normal, black, red, green, yellow, blue, magenta, cyan, or white 64 | ui = auto 65 | interactive = auto 66 | 67 | [core] 68 | # Use custom `.gitignore` and `.gitattributes` 69 | excludesfile = ~/.gitignore 70 | attributesfile = ~/.gitattributes 71 | 72 | [diff] 73 | tool = mvimdiff 74 | 75 | [difftool] 76 | prompt = false 77 | 78 | [pretty] 79 | # tut: http://gitimmersion.com/lab_10.html 80 | # ref: http://linux.die.net/man/1/git-log 81 | # Result: () -- ; 82 | nice = "%C(yellow)%h%C(reset) %C(white)%s%C(cyan)%d%C(reset) -- %an; %ar" 83 | [difftool "sourcetree"] 84 | cmd = opendiff \"$LOCAL\" \"$REMOTE\" 85 | path = 86 | [mergetool "sourcetree"] 87 | cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\" 88 | trustExitCode = true 89 | -------------------------------------------------------------------------------- /bash/bash_prompt: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then 4 | export TERM='gnome-256color'; 5 | elif infocmp xterm-256color >/dev/null 2>&1; then 6 | export TERM='xterm-256color'; 7 | fi; 8 | 9 | prompt_git() { 10 | local s=''; 11 | local branchName=''; 12 | 13 | # Check if the current directory is in a Git repository. 14 | if [ $(git rev-parse --is-inside-work-tree &>/dev/null; echo "${?}") == '0' ]; then 15 | 16 | # check if the current directory is in .git before running git checks 17 | if [ "$(git rev-parse --is-inside-git-dir 2> /dev/null)" == 'false' ]; then 18 | 19 | # Ensure the index is up to date. 20 | git update-index --really-refresh -q &>/dev/null; 21 | 22 | # Check for uncommitted changes in the index. 23 | if ! $(git diff --quiet --ignore-submodules --cached); then 24 | s+='+'; 25 | fi; 26 | 27 | # Check for unstaged changes. 28 | if ! $(git diff-files --quiet --ignore-submodules --); then 29 | s+='!'; 30 | fi; 31 | 32 | # Check for untracked files. 33 | if [ -n "$(git ls-files --others --exclude-standard)" ]; then 34 | s+='?'; 35 | fi; 36 | 37 | # Check for stashed files. 38 | if $(git rev-parse --verify refs/stash &>/dev/null); then 39 | s+='$'; 40 | fi; 41 | 42 | fi; 43 | 44 | # Get the short symbolic ref. 45 | # If HEAD isn’t a symbolic ref, get the short SHA for the latest commit 46 | # Otherwise, just give up. 47 | branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \ 48 | git rev-parse --short HEAD 2> /dev/null || \ 49 | echo '(unknown)')"; 50 | 51 | [ -n "${s}" ] && s=" [${s}]"; 52 | 53 | echo -e "${1}${branchName}${2}${s}"; 54 | else 55 | return; 56 | fi; 57 | } 58 | 59 | 60 | 61 | if tput setaf 1 &> /dev/null; then 62 | tput sgr0; # reset colors 63 | bold=$(tput bold); 64 | reset=$(tput sgr0); 65 | yellow=$(tput setaf 136); 66 | orange=$(tput setaf 3); 67 | red=$(tput setaf 124); 68 | magenta=$(tput setaf 5); 69 | violet=$(tput setaf 61); 70 | blue=$(tput setaf 33); 71 | cyan=$(tput setaf 37); 72 | green=$(tput setaf 2); 73 | purple=$(tput setaf 141); 74 | white=$(tput setaf 256); 75 | else 76 | bold=''; 77 | reset="\e[0m"; 78 | black="\e[1;30m"; 79 | blue="\e[1;34m"; 80 | cyan="\e[1;36m"; 81 | green="\e[1;32m"; 82 | orange="\e[1;33m"; 83 | purple="\e[1;35m"; 84 | red="\e[1;31m"; 85 | violet="\e[1;35m"; 86 | white="\e[1;37m"; 87 | yellow="\e[1;33m"; 88 | fi; 89 | 90 | # Highlight the user name when logged in as root. 91 | if [[ "${USER}" == "root" ]]; then 92 | userStyle="${red}"; 93 | else 94 | userStyle="${orange}"; 95 | fi; 96 | 97 | # Highlight the hostname when connected via SSH. 98 | if [[ "${SSH_TTY}" ]]; then 99 | hostStyle="${bold}${red}"; 100 | else 101 | hostStyle="${yellow}"; 102 | fi; 103 | 104 | # Set the terminal title and prompt. 105 | PS1="\[\033]0;\W\007\]"; # working directory base name 106 | PS1+="\[${bold}\]\n"; # newline 107 | PS1+="\[${userStyle}\]λ " 108 | PS1+="\[${userStyle}\]\u"; # username 109 | PS1+="\[${white}\] in "; 110 | PS1+="\[${green}\]\w"; # working directory full path 111 | PS1+="\$(prompt_git \"\[${white}\] on \[${violet}\]\" \"\[${blue}\]\")"; # Git repository details 112 | PS1+="\n"; 113 | PS1+="\[${white}\]\$ \[${reset}\]"; # `$` (and reset color) 114 | export PS1; 115 | 116 | PS2="\[${yellow}\]→ \[${reset}\]"; 117 | export PS2; -------------------------------------------------------------------------------- /bash/bash_functions: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # General 4 | # ------------------- 5 | 6 | # Create a data URI from a file 7 | datauri() { 8 | local mimeType="" 9 | 10 | if [ -f "$1" ]; then 11 | mimeType=$(file -b --mime-type "$1") 12 | # └─ do not prepend the filename to the output 13 | 14 | if [[ $mimeType == text/* ]]; then 15 | mimeType="$mimeType;charset=utf-8" 16 | fi 17 | 18 | printf "data:%s;base64,%s" \ 19 | "$mimeType" \ 20 | "$(openssl base64 -in "$1" | tr -d "\n")" > "$1".txt 21 | else 22 | e_error "'$1' is not a file." 23 | fi 24 | } 25 | 26 | 27 | 28 | 29 | # Delete all files that match a certain pattern from the current directory 30 | rmf() { 31 | local q="${1:-*.DS_Store}" 32 | find . -type f -name "$q" -ls -delete 33 | } 34 | 35 | # Remove directories 36 | rmd() { 37 | rm -rf "$@" 38 | } 39 | 40 | # Create new directories and enter the first one 41 | mkd() { 42 | if [ -n "$*" ]; then 43 | mkdir -p "$@" && cd "$@" 44 | # └─ make parent directories if needed 45 | fi 46 | } 47 | 48 | # Search History 49 | qh() { 50 | # ┌─ enable colors for pipe 51 | # │ ("--color=auto" enables colors only if 52 | # │ the output is in the terminal) 53 | cat ~/.bash_history | grep --color=always "$*" | less -RX 54 | # display the ANSI color escape sequences in raw form ─┘│ 55 | # don't clear the screen after quitting less ─┘ 56 | } 57 | 58 | # Search for text within the current directory 59 | qt() { 60 | grep -ir --color=always "$*" . | less -RX 61 | # │└─ search all files under each directory, recursively 62 | # └─ ignore case 63 | } 64 | 65 | # Find directory 66 | fdir() { 67 | find / -type d -name "$1" -print 68 | } 69 | 70 | # Copy to clipboard 71 | cpd() { 72 | pwd | tr -d "\r\n" | pbcopy 73 | } 74 | 75 | cpf() { 76 | [[ "$#" != 1 ]] && return 1 77 | local file_to_copy=$1 78 | cat $file_to_copy | pbcopy 79 | } 80 | 81 | # `tr` is a shorthand for `tree` with hidden files and color enabled, ignoring 82 | # the .git, node_modules and bower_modules directory, listing directories 83 | # first. The output gets piped into `less` with options to preserve color and 84 | # line numbers, unless the output is small enough for one screen. 85 | tre() { 86 | tree -aC -I '.git|node_modules|.DS_Store' --dirsfirst "$@" | less -FRNX 87 | } 88 | 89 | # Convert MOV to GIF animation 90 | gify() { 91 | echo "Converting..." 92 | ffmpeg -i $1.mov -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > $1.gif 93 | echo "Done!" 94 | } 95 | 96 | 97 | # Development 98 | # ------------------- 99 | 100 | # Shortcut to Projects 101 | code() { 102 | if [[ $2 == "--wp" ]]; then 103 | cd $HOME/Sites/"$1"/wp-content/themes/"$3" 104 | else 105 | cd $HOME/Sites/"$1" 106 | fi 107 | } 108 | 109 | # Clones a personal repository, cds into it, asks for install node modules and create executable script. 110 | # - arg 1 111 | # - name of repository 112 | clone() { 113 | local repo=$1 114 | local npm=$2 115 | local scr=$3 116 | 117 | # Install Node Modules 118 | if [[ -f package.json ]]; then 119 | npm=npm install 120 | fi 121 | 122 | # Make a script executable 123 | if [[ -f $repo.sh ]]; then 124 | src=chmod u+x $repo.sh 125 | elif [[ -f $repo.js ]]; then 126 | src=chmod u+x $repo.js 127 | fi 128 | 129 | # Initialize Clone 130 | git clone git://github.com/vitorbritto/$repo.git && cd $repo && $npm && $src; 131 | 132 | # All done! 133 | echo "Done!" 134 | } 135 | 136 | # Making a script executable 137 | src() { 138 | chmod u+x "$1" && ./"$_" 139 | } 140 | 141 | # Grant Permission 142 | grant() { 143 | chmod -R a+w ~/Sites/"$1" 144 | } 145 | 146 | godmode() { 147 | # WARNING: 148 | # This is a bad practice, but hopefully you are just using 149 | # this for development, or you have another good reason. =] 150 | # Before using either of these, really consider to run "chm function" right bellow. 151 | chmod -R 777 "$1" 152 | } 153 | 154 | chm() { 155 | if [ -f "$1" ]; then 156 | chmod -R 644 "$1" 157 | else 158 | chmod -R 755 "$1" 159 | fi 160 | } 161 | 162 | # Circle CI branch 163 | wf() { 164 | local account=`git remote -v | grep -m 1 "(push)" | sed -e "s/.*github.com[:/]\(.*\)\/.*\.git.*/\1/"` 165 | local repo=`git remote -v | grep -m 1 "(push)" | sed -e "s/.*github.com[:/].*\/\(.*\)\.git.*/\1/"` 166 | local branch=`git name-rev --name-only HEAD` 167 | open https://circleci.com/gh/$account/workflows/$repo/tree/$branch 168 | } 169 | 170 | 171 | # Misc 172 | # ------------------- 173 | 174 | # Force Skype to Initialize 175 | hellpe() { 176 | local LIBRARY=${HOME}/Library 177 | 178 | echo "Removing cache and preferences..." 179 | rm -rd ${LIBRARY}/Caches/com.skype.skype 180 | rm -rf ${LIBRARY}/Preferences/com.skype.skype.plist 181 | 182 | echo "Initializing Skype..." 183 | open -a "/Applications/Skype.app" 184 | 185 | # open -a "/opt/homebrew-cask/Caskroom/skype/latest/Skype.app" 186 | } 187 | 188 | # Come back Mission Control 189 | miscon() { 190 | defaults write com.apple.dock mcx-expose-disabled -bool FALSE 191 | killall Dock 192 | } 193 | 194 | 195 | 196 | # Server 197 | # ------------------- 198 | 199 | # SSH Keys 200 | sshcon() { 201 | local SSHDIR = "~/.ssh" 202 | if [ ! -d "$SSHDIR" ]; then 203 | echo "Creating SSH Directory..." 204 | mkdir -p "$SSHDIR" 205 | echo "Done!" 206 | fi 207 | cat "$SSHDIR"/id_rsa.pub | ssh "$1"@"$2" "cat >> "$SSHDIR"/authorized_keys" 208 | } -------------------------------------------------------------------------------- /bash/bash_aliases: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # ------------------------------------------------------------------------------ 5 | # | System | 6 | # ------------------------------------------------------------------------------ 7 | 8 | # Navigation 9 | # ------------------- 10 | 11 | alias ~="cd ~" # `cd` is probably faster to type though 12 | alias cdd='cd -' # back to last directory 13 | alias ..='cd ..' 14 | alias ...='cd ../..' 15 | alias ....='cd ../../..' 16 | alias ....='cd ../../../..' 17 | 18 | # Network 19 | # ------------------- 20 | 21 | # IP addresses 22 | alias ip="dig +short myip.opendns.com @resolver1.opendns.com" 23 | alias ips="ifconfig -a | grep -o 'inet6\? \(\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)\|[a-fA-F0-9:]\+\)' | sed -e 's/inet6* //'" 24 | alias localip="ipconfig getifaddr en1" 25 | 26 | # Enhanced WHOIS lookups 27 | alias whois="whois -h whois-servers.net" 28 | 29 | # Shorctus 30 | # ------------------- 31 | 32 | # Flush Directory Service cache 33 | alias flush="dscacheutil -flushcache && killall -HUP mDNSResponder" 34 | 35 | # View HTTP traffic 36 | alias sniff="sudo ngrep -d 'en1' -t '^(GET|POST) ' 'tcp and port 80'" 37 | alias httpdump="sudo tcpdump -i en1 -n -s 0 -w - | grep -a -o -E \"Host\: .*|GET \/.*\"" 38 | 39 | # Canonical hex dump; some systems have this symlinked 40 | command -v hd > /dev/null || alias hd="hexdump -C" 41 | 42 | # OS X has no `md5sum`, so use `md5` as a fallback 43 | command -v md5sum > /dev/null || alias md5sum="md5" 44 | 45 | # OS X has no `sha1sum`, so use `shasum` as a fallback 46 | command -v sha1sum > /dev/null || alias sha1sum="shasum" 47 | 48 | # Trim new lines and copy to clipboard 49 | alias copythis="tr -d '\n' | pbcopy" 50 | 51 | # Merge PDF files 52 | # Usage: `mergepdf -o output.pdf input{1,2,3}.pdf` 53 | alias mergepdf="/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py" 54 | 55 | # Ring the terminal bell, and put a badge on Terminal.app’s Dock icon 56 | # (useful when executing time-consuming commands) 57 | alias badge="tput bel" 58 | 59 | # Intuitive map function 60 | # For example, to list all directories that contain a certain file: 61 | # find . -name .gitattributes | map dirname 62 | alias map="xargs -n1" 63 | 64 | # One of @janmoesen’s ProTip™s 65 | for method in GET HEAD POST PUT DELETE TRACE OPTIONS; do 66 | alias "$method"="lwp-request -m '$method'" 67 | done 68 | 69 | # Lists 70 | # ------------------- 71 | 72 | # Detect which `ls` flavor is in use 73 | if ls --color > /dev/null 2>&1; then # GNU `ls` 74 | colorflag="--color" 75 | else # OS X `ls` 76 | colorflag="-G" 77 | fi 78 | 79 | # List all files colorized in long format 80 | alias l="ls -l ${colorflag}" 81 | 82 | # List all files colorized in long format, including dot files 83 | alias la="ls -la ${colorflag}" 84 | 85 | # List only directories 86 | alias lsd='ls -l | grep "^d"' 87 | 88 | # Always use color output for `ls` 89 | if [[ "$OSTYPE" =~ ^darwin ]]; then 90 | alias ls="command ls -G" 91 | else 92 | alias ls="command ls --color" 93 | export LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:" 94 | fi 95 | 96 | # Overkill processes 97 | # 1. Clean up LaunchServices to remove duplicates in the “Open With” menu 98 | # 2. Empty the trash, the main HDD and on all mounted volumes 99 | # and clear Apple’s system logs to improve shell startup speed 100 | alias adios="/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user && killall Finder && \ 101 | sudo rm -frv /Volumes/*/.Trashes && \ 102 | sudo rm -frv ~/.Trash && 103 | sudo rm -frv /private/var/log/asl/*.asl" 104 | 105 | # ------------------------------------------------------------------------------ 106 | # | OS X | 107 | # ------------------------------------------------------------------------------ 108 | 109 | # Set defaults again 110 | alias setdefaults="bash ~/.forcefiles/bin/osxdefaults" 111 | 112 | # Stuff I never really use but cannot delete either because of http://xkcd.com/530/ 113 | alias mute="osascript -e 'set volume output muted true'" 114 | alias loud="osascript -e 'set volume 7'" 115 | alias hax="growlnotify -a 'Activity Monitor' 'System error' -m 'WTF R U DOIN'" 116 | 117 | # Hide/Show desktop icons 118 | alias hidedesktopicons="defaults write com.apple.finder CreateDesktop -bool false && killall Finder" 119 | alias showdesktopicons="defaults write com.apple.finder CreateDesktop -bool true && killall Finder" 120 | 121 | # Hide/Show hidden files in Finder 122 | alias hidehiddenfiles="defaults write com.apple.finder AppleShowAllFiles -bool false && killall Finder" 123 | alias showhiddenfiles="defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder" 124 | 125 | # Shutdown the System 126 | alias off="sudo shutdown -h now" 127 | 128 | 129 | # ------------------------------------------------------------------------------ 130 | # | Managment and Tasks | 131 | # ------------------------------------------------------------------------------ 132 | 133 | # NPM 134 | alias npmu="npm update" 135 | alias npmi="npm init" 136 | 137 | # Composer 138 | alias compin="php composer.phar install" 139 | 140 | # Python 141 | alias python="python3" 142 | alias pip="pip3" 143 | 144 | # General Updates 145 | alias update="sudo softwareupdate --install --all && brewu && npmu" 146 | 147 | 148 | # ------------------------------------------------------------------------------ 149 | # | Development (based on my workflow) | 150 | # ------------------------------------------------------------------------------ 151 | 152 | alias dt="cd $HOME/Desktop" 153 | alias dl="cd $HOME/Downloads" 154 | alias lab="cd $HOME/Labs" 155 | alias h="history" 156 | alias j="jobs" 157 | alias ct="crontab" 158 | -------------------------------------------------------------------------------- /bin/osxdefaults: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Borrow some OSX settings from [mathiasbynens dotfiles](https://github.com/mathiasbynens/dotfiles) 4 | 5 | # Ask for the administrator password upfront 6 | sudo -v 7 | 8 | # Keep-alive: update existing `sudo` time stamp until `.osx` has finished 9 | # while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & 10 | 11 | ############################################################################### 12 | # General UI/UX # 13 | ############################################################################### 14 | 15 | # Set computer name (as done via System Preferences → Sharing) 16 | sudo scutil --set ComputerName "Colossus" 17 | sudo scutil --set HostName "Colossus" 18 | sudo scutil --set LocalHostName "Colossus" 19 | sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string "Colossus" 20 | 21 | # Disable the sound effects on boot 22 | sudo nvram SystemAudioVolume=" " 23 | 24 | # Menu bar: disable transparency 25 | defaults write NSGlobalDomain AppleEnableMenuBarTransparency -bool false 26 | 27 | # Menu bar: show remaining battery time (on pre-10.8); hide percentage 28 | defaults write com.apple.menuextra.battery ShowPercent -string "NO" 29 | defaults write com.apple.menuextra.battery ShowTime -string "YES" 30 | 31 | # Menu bar: hide the useless Time Machine and Volume icons 32 | defaults write com.apple.systemuiserver menuExtras -array "/System/Library/CoreServices/Menu Extras/Bluetooth.menu" "/System/Library/CoreServices/Menu Extras/AirPort.menu" "/System/Library/CoreServices/Menu Extras/Battery.menu" "/System/Library/CoreServices/Menu Extras/Clock.menu" 33 | 34 | # Disable opening and closing window animations 35 | defaults write NSGlobalDomain NSAutomaticWindowAnimationsEnabled -bool false 36 | 37 | # Increase window resize speed for Cocoa applications 38 | defaults write NSGlobalDomain NSWindowResizeTime -float 0.001 39 | 40 | # Expand save panel by default 41 | defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true 42 | 43 | # Expand print panel by default 44 | defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true 45 | 46 | # Save to disk (not to iCloud) by default 47 | defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false 48 | 49 | # Automatically quit printer app once the print jobs complete 50 | defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true 51 | 52 | # Disable the “Are you sure you want to open this application?” dialog 53 | defaults write com.apple.LaunchServices LSQuarantine -bool false 54 | 55 | # Display ASCII control characters using caret notation in standard text views 56 | # Try e.g. `cd /tmp; unidecode "\x{0000}" > cc.txt; open -e cc.txt` 57 | defaults write NSGlobalDomain NSTextShowsControlCharacters -bool true 58 | 59 | # Disable Resume system-wide 60 | defaults write NSGlobalDomain NSQuitAlwaysKeepsWindows -bool false 61 | 62 | # Disable automatic termination of inactive apps 63 | defaults write NSGlobalDomain NSDisableAutomaticTermination -bool true 64 | 65 | # Disable the crash reporter 66 | #defaults write com.apple.CrashReporter DialogType -string "none" 67 | 68 | # Set Help Viewer windows to non-floating mode 69 | defaults write com.apple.helpviewer DevMode -bool true 70 | 71 | # Fix for the ancient UTF-8 bug in QuickLook (http://mths.be/bbo) 72 | # Commented out, as this is known to cause problems when saving files in 73 | # Adobe Illustrator CS5 :( 74 | #echo "0x08000100:0" > ~/.CFUserTextEncoding 75 | 76 | # Reveal IP address, hostname, OS version, etc. when clicking the clock 77 | # in the login window 78 | sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostName 79 | 80 | # Restart automatically if the computer freezes 81 | # systemsetup -setrestartfreeze on 82 | 83 | # Never go into computer sleep mode 84 | systemsetup -setcomputersleep Off > /dev/null 85 | 86 | # Check for software updates daily, not just once per week 87 | defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1 88 | 89 | # Disable Notification Center and remove the menu bar icon 90 | # launchctl unload -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist 91 | 92 | ############################################################################### 93 | # Trackpad, mouse, keyboard, Bluetooth accessories, and input # 94 | ############################################################################### 95 | 96 | # Set the timezone; see `systemsetup -listtimezones` for other values 97 | systemsetup -settimezone "America/Bahia" > /dev/null 98 | 99 | # Disable auto-correct 100 | defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false 101 | 102 | ############################################################################### 103 | # Screen # 104 | ############################################################################### 105 | 106 | # Save screenshots to the desktop 107 | defaults write com.apple.screencapture location -string "$HOME/Desktop" 108 | 109 | # Save screenshots in PNG format (other options: BMP, GIF, JPG, PDF, TIFF) 110 | defaults write com.apple.screencapture type -string "jpg" 111 | 112 | # Disable shadow in screenshots 113 | defaults write com.apple.screencapture disable-shadow -bool true 114 | 115 | # Enable subpixel font rendering on non-Apple LCDs 116 | defaults write NSGlobalDomain AppleFontSmoothing -int 2 117 | 118 | ############################################################################### 119 | # Finder # 120 | ############################################################################### 121 | 122 | # Finder: show hidden files by default 123 | defaults write com.apple.finder AppleShowAllFiles -bool true 124 | 125 | # Finder: show all filename extensions 126 | defaults write NSGlobalDomain AppleShowAllExtensions -bool true 127 | 128 | # Finder: show status bar 129 | defaults write com.apple.finder ShowStatusBar -bool true 130 | 131 | # Finder: show path bar 132 | defaults write com.apple.finder ShowPathbar -bool true 133 | 134 | # Finder: allow text selection in Quick Look 135 | defaults write com.apple.finder QLEnableTextSelection -bool true 136 | 137 | # Disable the warning when changing a file extension 138 | defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false 139 | 140 | # Enable spring loading for directories 141 | defaults write NSGlobalDomain com.apple.springing.enabled -bool true 142 | 143 | # Remove the spring loading delay for directories 144 | defaults write NSGlobalDomain com.apple.springing.delay -float 0 145 | 146 | # Avoid creating .DS_Store files on network volumes 147 | defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true 148 | 149 | # Enable snap-to-grid for icons on the desktop and in other icon views 150 | /usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist 151 | /usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist 152 | 153 | ############################################################################### 154 | # Spotlight # 155 | ############################################################################### 156 | 157 | # Hide Spotlight tray-icon (and subsequent helper) 158 | #sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search 159 | # Disable Spotlight indexing for any volume that gets mounted and has not yet 160 | # been indexed before. 161 | # Use `sudo mdutil -i off "/Volumes/foo"` to stop indexing any volume. 162 | sudo defaults write /.Spotlight-V100/VolumeConfiguration Exclusions -array "/Volumes" 163 | # Change indexing order and disable some file types 164 | defaults write com.apple.spotlight orderedItems -array \ 165 | '{"enabled" = 1;"name" = "APPLICATIONS";}' \ 166 | '{"enabled" = 1;"name" = "SYSTEM_PREFS";}' \ 167 | '{"enabled" = 1;"name" = "DIRECTORIES";}' \ 168 | '{"enabled" = 1;"name" = "PDF";}' \ 169 | '{"enabled" = 1;"name" = "FONTS";}' \ 170 | '{"enabled" = 0;"name" = "DOCUMENTS";}' \ 171 | '{"enabled" = 0;"name" = "MESSAGES";}' \ 172 | '{"enabled" = 0;"name" = "CONTACT";}' \ 173 | '{"enabled" = 0;"name" = "EVENT_TODO";}' \ 174 | '{"enabled" = 0;"name" = "IMAGES";}' \ 175 | '{"enabled" = 0;"name" = "BOOKMARKS";}' \ 176 | '{"enabled" = 0;"name" = "MUSIC";}' \ 177 | '{"enabled" = 0;"name" = "MOVIES";}' \ 178 | '{"enabled" = 0;"name" = "PRESENTATIONS";}' \ 179 | '{"enabled" = 0;"name" = "SPREADSHEETS";}' \ 180 | '{"enabled" = 0;"name" = "SOURCE";}' 181 | # Load new settings before rebuilding the index 182 | killall mds 183 | # Make sure indexing is enabled for the main volume 184 | sudo mdutil -i on / 185 | # Rebuild the index from scratch 186 | sudo mdutil -E / 187 | 188 | ############################################################################### 189 | # Terminal # 190 | ############################################################################### 191 | 192 | # Only use UTF-8 in Terminal.app 193 | defaults write com.apple.terminal StringEncodings -array 4 194 | 195 | # Enable “focus follows mouse” for Terminal.app and all X11 apps 196 | # i.e. hover over a window and start typing in it without clicking first 197 | #defaults write com.apple.terminal FocusFollowsMouse -bool true 198 | #defaults write org.x.X11 wm_ffm -bool true 199 | 200 | ############################################################################### 201 | # Time Machine # 202 | ############################################################################### 203 | 204 | # Prevent Time Machine from prompting to use new hard drives as backup volume 205 | defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true 206 | 207 | # Disable local Time Machine backups 208 | hash tmutil &> /dev/null && sudo tmutil disablelocal 209 | 210 | ############################################################################### 211 | # Address Book, Dashboard, iCal, TextEdit, and Disk Utility # 212 | ############################################################################### 213 | 214 | # Use plain text mode for new TextEdit documents 215 | defaults write com.apple.TextEdit RichText -int 0 216 | 217 | # Open and save files as UTF-8 in TextEdit 218 | defaults write com.apple.TextEdit PlainTextEncoding -int 4 219 | defaults write com.apple.TextEdit PlainTextEncodingForWrite -int 4 220 | 221 | ############################################################################### 222 | # Kill affected applications # 223 | ############################################################################### 224 | 225 | for app in "Address Book" "Calendar" "Contacts" "Dashboard" "Dock" "Finder" \ 226 | "Mail" "Safari" "SystemUIServer" "Terminal" "iCal" "iTunes"; do 227 | killall "$app" > /dev/null 2>&1 228 | done 229 | -------------------------------------------------------------------------------- /bin/forcefiles: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ------------------------------------------------------------------------------ 4 | # | UI | 5 | # ------------------------------------------------------------------------------ 6 | 7 | # Header logging 8 | e_header() { 9 | printf "$(tput setaf 38)→ %s$(tput sgr0)\n" "$@" 10 | } 11 | 12 | # Success logging 13 | e_success() { 14 | printf "$(tput setaf 76)✔ %s$(tput sgr0)\n" "$@" 15 | } 16 | 17 | # Error logging 18 | e_error() { 19 | printf "$(tput setaf 1)✖ %s$(tput sgr0)\n" "$@" 20 | } 21 | 22 | # Warning logging 23 | e_warning() { 24 | printf "$(tput setaf 3)! %s$(tput sgr0)\n" "$@" 25 | } 26 | 27 | # Ask for confirmation before proceeding 28 | seek_confirmation() { 29 | printf "\n" 30 | e_warning "$@" 31 | read -p "Continue? (y/n) " -n 1 32 | printf "\n" 33 | } 34 | 35 | # Test whether the result of an 'ask' is a confirmation 36 | is_confirmed() { 37 | if [[ "$REPLY" =~ ^[Yy]$ ]]; then 38 | return 0 39 | fi 40 | return 1 41 | } 42 | 43 | # Test whether we're in a git repo 44 | is_git_repo() { 45 | $(git rev-parse --is-inside-work-tree &> /dev/null) 46 | } 47 | 48 | # Test whether a command exists 49 | # $1 - cmd to test 50 | type_exists() { 51 | if [ $(type -P $1) ]; then 52 | return 0 53 | fi 54 | return 1 55 | } 56 | 57 | # Test whether a directory exists 58 | # $1 - cmd to test 59 | dir_exists() { 60 | if [ $(-d $1) ]; then 61 | return 0 62 | fi 63 | return 1 64 | } 65 | 66 | # Test whether a Homebrew formula is already installed 67 | # $1 - formula name (may include options) 68 | formula_exists() { 69 | if $(brew list $1 > /dev/null); then 70 | printf "%s already installed.\n" "$1" 71 | return 0 72 | fi 73 | 74 | e_warning "Missing formula: $1" 75 | return 1 76 | } 77 | 78 | 79 | 80 | # ------------------------------------------------------------------------------ 81 | # | Help | 82 | # ------------------------------------------------------------------------------ 83 | 84 | run_help() { 85 | 86 | cat < 2 | 3 | 4 | 5 | ANSIBlackColor 6 | 7 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 8 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 9 | LjExNzY0NzA1ODggMC4xMjk0MTE3NjQ3IDAuMTUyOTQxMTc2NQAQAYAC0hAREhNaJGNs 10 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 11 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 12 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 13 | 14 | ANSIBlueColor 15 | 16 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 17 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw 18 | LjM4MDM5MjE1NjkgMC42ODYyNzQ1MDk4IDAuOTM3MjU0OTAyABABgALSEBESE1okY2xh 19 | c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 20 | ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA 21 | ABkAAAAAAAAAAAAAAAAAAADY 22 | 23 | ANSIBrightBlackColor 24 | 25 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 26 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 27 | LjM2MDc4NDMxMzcgMC4zODgyMzUyOTQxIDAuNDM5MjE1Njg2MwAQAYAC0hAREhNaJGNs 28 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 29 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 30 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 31 | 32 | ANSIBrightBlueColor 33 | 34 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 35 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw 36 | LjM4MDM5MjE1NjkgMC42ODYyNzQ1MDk4IDAuOTM3MjU0OTAyABABgALSEBESE1okY2xh 37 | c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 38 | ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA 39 | ABkAAAAAAAAAAAAAAAAAAADY 40 | 41 | ANSIBrightCyanColor 42 | 43 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 44 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw 45 | LjMzNzI1NDkwMiAwLjcxMzcyNTQ5MDIgMC43NjA3ODQzMTM3ABABgALSEBESE1okY2xh 46 | c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 47 | ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA 48 | ABkAAAAAAAAAAAAAAAAAAADY 49 | 50 | ANSIBrightGreenColor 51 | 52 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 53 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 54 | LjU5NjA3ODQzMTQgMC43NjQ3MDU4ODI0IDAuNDc0NTA5ODAzOQAQAYAC0hAREhNaJGNs 55 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 56 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 57 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 58 | 59 | ANSIBrightMagentaColor 60 | 61 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 62 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 63 | Ljc3NjQ3MDU4ODIgMC40NzA1ODgyMzUzIDAuODY2NjY2NjY2NwAQAYAC0hAREhNaJGNs 64 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 65 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 66 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 67 | 68 | ANSIBrightRedColor 69 | 70 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 71 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 72 | Ljg3ODQzMTM3MjUgMC40MjM1Mjk0MTE4IDAuNDU4ODIzNTI5NAAQAYAC0hAREhNaJGNs 73 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 74 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 75 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 76 | 77 | ANSIBrightWhiteColor 78 | 79 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 80 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPEBox 81 | IDAuOTk5OTc0MzcgMC45OTk5OTEyOTc3ABABgALSEBESE1okY2xhc3NuYW1lWCRjbGFz 82 | c2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2ZXLRFxhUcm9vdIAB 83 | CBEaIy0yNztBSE5bYn+Bg4iTnKSnsMLFygAAAAAAAAEBAAAAAAAAABkAAAAAAAAAAAAA 84 | AAAAAADM 85 | 86 | ANSIBrightYellowColor 87 | 88 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 89 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPEB4w 90 | LjgxOTYwNzg0MzEgMC42MDM5MjE1Njg2IDAuNAAQAYAC0hAREhNaJGNsYXNzbmFtZVgk 91 | Y2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJv 92 | b3SAAQgRGiMtMjc7QUhOW2KDhYeMl6Coq7TGyc4AAAAAAAABAQAAAAAAAAAZAAAAAAAA 93 | AAAAAAAAAAAA0A== 94 | 95 | ANSICyanColor 96 | 97 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 98 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECYw 99 | LjMzNzI1NDkwMiAwLjcxMzcyNTQ5MDIgMC43NjA3ODQzMTM3ABABgALSEBESE1okY2xh 100 | c3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3RfEA9OU0tleWVkQXJjaGl2 101 | ZXLRFxhUcm9vdIABCBEaIy0yNztBSE5bYouNj5SfqLCzvM7R1gAAAAAAAAEBAAAAAAAA 102 | ABkAAAAAAAAAAAAAAAAAAADY 103 | 104 | ANSIGreenColor 105 | 106 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 107 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 108 | LjU5NjA3ODQzMTQgMC43NjQ3MDU4ODI0IDAuNDc0NTA5ODAzOQAQAYAC0hAREhNaJGNs 109 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 110 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 111 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 112 | 113 | ANSIMagentaColor 114 | 115 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 116 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 117 | Ljc3NjQ3MDU4ODIgMC40NzA1ODgyMzUzIDAuODY2NjY2NjY2NwAQAYAC0hAREhNaJGNs 118 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 119 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 120 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 121 | 122 | ANSIRedColor 123 | 124 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 125 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 126 | Ljg3ODQzMTM3MjUgMC40MjM1Mjk0MTE4IDAuNDU4ODIzNTI5NAAQAYAC0hAREhNaJGNs 127 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 128 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 129 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 130 | 131 | ANSIWhiteColor 132 | 133 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 134 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 135 | LjY3MDU4ODIzNTMgMC42OTgwMzkyMTU3IDAuNzQ5MDE5NjA3OAAQAYAC0hAREhNaJGNs 136 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 137 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 138 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 139 | 140 | ANSIYellowColor 141 | 142 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 143 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPEB4w 144 | LjgxOTYwNzg0MzEgMC42MDM5MjE1Njg2IDAuNAAQAYAC0hAREhNaJGNsYXNzbmFtZVgk 145 | Y2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hpdmVy0RcYVHJv 146 | b3SAAQgRGiMtMjc7QUhOW2KDhYeMl6Coq7TGyc4AAAAAAAABAQAAAAAAAAAZAAAAAAAA 147 | AAAAAAAAAAAA0A== 148 | 149 | BackgroundBlur 150 | 0.0 151 | BackgroundColor 152 | 153 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 154 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 155 | LjExNzY0NzA1ODggMC4xMjk0MTE3NjQ3IDAuMTUyOTQxMTc2NQAQAYAC0hAREhNaJGNs 156 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 157 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 158 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 159 | 160 | BlinkText 161 | 162 | CursorColor 163 | 164 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 165 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 166 | LjM2MDc4NDMxMzcgMC4zODgyMzUyOTQxIDAuNDM5MjE1Njg2MwAQAYAC0hAREhNaJGNs 167 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 168 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 169 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 170 | 171 | CursorType 172 | 0 173 | DisableANSIColor 174 | 175 | Font 176 | 177 | YnBsaXN0MDDUAQIDBAUGGBlYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 178 | AAGGoKQHCBESVSRudWxs1AkKCwwNDg8QVk5TU2l6ZVhOU2ZGbGFnc1ZOU05hbWVWJGNs 179 | YXNzI0AmAAAAAAAAEBCAAoADXU1lbmxvLVJlZ3VsYXLSExQVFlokY2xhc3NuYW1lWCRj 180 | bGFzc2VzVk5TRm9udKIVF1hOU09iamVjdF8QD05TS2V5ZWRBcmNoaXZlctEaG1Ryb290 181 | gAEIERojLTI3PEJLUltiaXJ0dniGi5afpqmyxMfMAAAAAAAAAQEAAAAAAAAAHAAAAAAA 182 | AAAAAAAAAAAAAM4= 183 | 184 | FontAntialias 185 | 186 | FontHeightSpacing 187 | 1 188 | FontWidthSpacing 189 | 1 190 | ProfileCurrentVersion 191 | 2.04 192 | SelectionColor 193 | 194 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 195 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 196 | LjIyNzQ1MDk4MDQgMC4yNDcwNTg4MjM1IDAuMjk0MTE3NjQ3MQAQAYAC0hAREhNaJGNs 197 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 198 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 199 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 200 | 201 | ShowActiveProcessInTitle 202 | 203 | ShowDimensionsInTitle 204 | 205 | ShowShellCommandInTitle 206 | 207 | ShowTTYNameInTitle 208 | 209 | ShowWindowSettingsNameInTitle 210 | 211 | TerminalType 212 | ansi 213 | TextBoldColor 214 | 215 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 216 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 217 | LjY3MDU4ODIzNTMgMC42OTgwMzkyMTU3IDAuNzQ5MDE5NjA3OAAQAYAC0hAREhNaJGNs 218 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 219 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 220 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 221 | 222 | TextColor 223 | 224 | YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS 225 | AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECcw 226 | LjY3MDU4ODIzNTMgMC42OTgwMzkyMTU3IDAuNzQ5MDE5NjA3OAAQAYAC0hAREhNaJGNs 227 | YXNzbmFtZVgkY2xhc3Nlc1dOU0NvbG9yohIUWE5TT2JqZWN0XxAPTlNLZXllZEFyY2hp 228 | dmVy0RcYVHJvb3SAAQgRGiMtMjc7QUhOW2KMjpCVoKmxtL3P0tcAAAAAAAABAQAAAAAA 229 | AAAZAAAAAAAAAAAAAAAAAAAA2Q== 230 | 231 | UseBoldFonts 232 | 233 | UseBrightBold 234 | 235 | VisualBell 236 | 237 | blackColour 238 | 239 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 240 | ZmZmg7JNIT2DkvUjPoO+F0s+AYY= 241 | 242 | blueColour 243 | 244 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 245 | ZmZmgyqcAj6DtOHsPoO+RUg/AYY= 246 | 247 | brightBlackColour 248 | 249 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 250 | ZmZmg+ZzgjyDs44BPoNahyM+AYY= 251 | 252 | brightBlueColour 253 | 254 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 255 | ZmZmg7yT4T6DEXcCP4POUAQ/AYY= 256 | 257 | brightCyanColour 258 | 259 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 260 | ZmZmg7CIAT+Dj5oQP4N8ShA/AYY= 261 | 262 | brightGreenColour 263 | 264 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 265 | ZmZmgzyujT6DFZy2PoOYFsQ+AYY= 266 | 267 | brightMagentaColour 268 | 269 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 270 | ZmZmgxMjsj6D+uazPoNkyTc/AYY= 271 | 272 | brightRedColour 273 | 274 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 275 | ZmZmgyfkPT+D/15aPoMgl5Y9AYY= 276 | 277 | brightWhiteColour 278 | 279 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 280 | ZmZmg49LfT+D0Dt1P4MGM10/AYY= 281 | 282 | brightYellowColour 283 | 284 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 285 | ZmZmg1MTpj6DeHnQPoPQg+A+AYY= 286 | 287 | columnCount 288 | 80 289 | cyanColour 290 | 291 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 292 | ZmZmg4VRFj6DfyESP4PkZwY/AYY= 293 | 294 | greenColour 295 | 296 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 297 | ZmZmg9lI5j6DIYkKP4PVjKU8AYY= 298 | 299 | magentaColour 300 | 301 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 302 | ZmZmg/4CRz+DBTzdPYMgzt4+AYY= 303 | 304 | name 305 | One Dark 306 | redColour 307 | 308 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 309 | ZmZmg6i7UT+DUATePYMl2hA+AYY= 310 | 311 | rowCount 312 | 24 313 | type 314 | Window Settings 315 | useOptionAsMetaKey 316 | 317 | whiteColour 318 | 319 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 320 | ZmZmgzqGaj+D2tdjP4NYPUw/AYY= 321 | 322 | yellowColour 323 | 324 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU0NvbG9yAISECE5TT2JqZWN0AIWEAWMBhARm 325 | ZmZmg0DAJT+DB17vPoM4Y8A8AYY= 326 | 327 | 328 | --------------------------------------------------------------------------------