Forgot to push for ages

master
Jonathan Hodgson 3 years ago
parent e17a042f52
commit 9d8c010bad
  1. 44
      assets/css/main.less
  2. 15
      assets/key/jonathan-hodgson-ecc.asc
  3. 56
      assets/key/jonathan-hodgson-rsa.asc
  4. 996
      assets/pappy/password-brute.cast
  5. BIN
      assets/pappy/password-brute.gif
  6. BIN
      assets/prompt/focus.png
  7. 97
      assets/rev-shell/reverse-shell.cast
  8. BIN
      assets/rev-shell/reverse-shell.gif
  9. BIN
      assets/word-complete/currentWordComplete.gif
  10. BIN
      assets/wordpress/login-username-enumeration.png
  11. 2
      build.sh
  12. 1
      content/blog/001-fuzzy-search-hashcat-modes.md
  13. 3
      content/blog/002-the-switch-to-zsh.md
  14. 8
      content/blog/003-exchange-mutt.md
  15. 6
      content/blog/004-tools-that-make-my-life-easier.md
  16. 2
      content/blog/005-keyboard-driven-firefox.md
  17. 4
      content/blog/007-mutt-setup.md
  18. 149
      content/blog/008-current-word-completion.md
  19. 230
      content/blog/009-upgrading-reverse-shells.md
  20. 207
      content/blog/010-wordpress-username-enumeration.md
  21. 140
      content/blog/011-my-setup-jan-2021.md
  22. 110
      content/blog/012-starting-out-with-homeassistant.md
  23. 11
      content/card.curl
  24. 4
      content/other-stuff-you-might-like.md
  25. 2
      templates/blog.html

@ -79,6 +79,10 @@ body{
scrollbar-width: thin;
}
body .commento-root *{
color: @gb-dm-fg0;
}
.container{
display: flex;
flex-direction: row-reverse;
@ -150,6 +154,30 @@ img{
max-width: 100%;
}
blockquote{
border-left: 0.5em solid @gb-dm-fg3;
margin-left: 0;
padding-left: 1em;
}
table{
border-collapse: collapse;
}
tr:hover{
background-color: @gb-dm-bg2;
}
td,th{
padding: 0.5em;
border: 1px solid @gb-dm-fg3;
}
th{
background-color: @gb-lm-bg0-soft;
color: @gb-lm-fg0;
}
.blog-name{
font-size: 2rem;
font-weight: 400;
@ -181,8 +209,6 @@ ul.tags{
}
}
a, a:visited{
color: @gb-dm-light-aqua;
}
@ -212,7 +238,18 @@ p code, li code{
}
}
.tip{
background-color: @gb-lm-light-green;
border: 3px solid @gb-lm-dark-green;
padding: 1em;
&::before{
content: "Tip:";
text-transform: uppercase;
text-align: center;
font-weight: bold;
display: block;
}
}
//Pandoc styles
code{white-space: pre-wrap;}
@ -304,4 +341,3 @@ code span.st { color: @gb-dm-dark-yellow; } /* String */
code span.va { color: @gb-dm-dark-red; } /* Variable */
code span.vs { color: #4070a0; } /* VerbatimString */
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */

@ -0,0 +1,15 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: OpenPGP.js v4.10.4
Comment: https://openpgpjs.org
xjMEXMLhpBYJKwYBBAHaRw8BAQdAdP4j18qDM+5einbcOoMmbygC7blelM2D
1WjQ/QK4CzXNNSJqb25hdGhhbkBqb25hdGhhbmguY28udWsiIDxqb25hdGhh
bkBqb25hdGhhbmguY28udWs+wncEEBYKAB8FAlzC4aQGCwkHCAMCBBUICgID
FgIBAhkBAhsDAh4BAAoJEESBz3saoNE4wecA/R94tVukEZISL8dPYN17+JLl
QYo5U9NpSlYM1bjbKdqPAQDophGzo6KaCwNkm3/05xJvf+ZnsOBTG4PkvPFJ
5XZZAM44BFzC4aQSCisGAQQBl1UBBQEBB0BgX9KpJi1EvI74EU5jb4PVjo+H
0DuuN58sodzsIpQQDgMBCAfCYQQYFggACQUCXMLhpAIbDAAKCRBEgc97GqDR
OGapAPwNdh8veidfCqZuXoyBfdRGPRv9zb7pA3JvP85hMsTxXgEAld6Rqey2
dw17AxOy5uHs/nj/3Zwl2SvGNR4htgPv1go=
=qcW+
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,56 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: OpenPGP.js v4.10.4
Comment: https://openpgpjs.org
xsFNBFyP9g8BEADc2ljwXe+WWTGXr4m6A0MxRu0CDMO++HayoEt7OynSPyec
kHs6k7tPjwJ+OcxAGiQ/FD3yuJDR/5xxwL61bqiF8CTw62fA2vS8J8PNiQ+g
wDrM1Gl/iUrRuD3L68NTRk7Ru0l3QIUCRwf/fphSP2D0TFT8JP8cLkAcRhee
3oElE2Gi8/qowW+xzXRcYLQnxks22Nai2p1SCzwIUSxx06lvfapuf16FVpZO
0+U+E73r2XDgFVk+MhFugZ57xgnBwTKWCorzIgQXU+DLbeFZp1yMS6aMQENi
mTX6ATLgDxVk7JeNjk8scQ/pqPGkA5oC6agxBJJWrRn5/8W13//7EQlwyMqP
zWanioniavwvX1PkJgLUrAuCjderqTKrIk0cor3H4pAqQYKySFdOGTX2b28k
WO6M15yFoRYLzIl7kKzr7kg4fXF/0TptkrbLmQD0HG2iqOPcB8vp6B7qPe7T
lL3IXyv7C9kSL7xhReO6hg7pjdrWfp7n8ZOPXhj/jmmjkx3+8wsNLga80s1C
uplJveuGSO4OUyrekt9ZRtL6KcT/TFoB98x/I0JPr7lsF/U3ObzExFuBTwtl
pOvKmhbcg8vE8HzwROlAJdtukonCtlMNo2Gj9+QlujMUH5EOIMhc+uIh6v2m
SntJ3mIPMgA3yZ6XsYpK8Bwy4yjJc+XIvtoF0QARAQABzTUiam9uYXRoYW5A
am9uYXRoYW5oLmNvLnVrIiA8am9uYXRoYW5Aam9uYXRoYW5oLmNvLnVrPsLB
dQQQAQgAHwUCXI/2DwYLCQcIAwIEFQgKAgMWAgECGQECGwMCHgEACgkQ1slB
UCE4fEg2EhAAk9RDhBV4gaHlhNejUQhxwPrXJ2C/mHD2FafcpsNrWDykgfNg
9iqQ5gN57xuHNK2MWxK0qTEtKBlW4KpYxoyG6zvt2ebpE2FTx/tCKlJ5BPHn
Dx8g94MPWcK08eXQcS2BfM8PLFDmw2+B0m+aJ+O94SDgsbi1SDM6UuqyodG5
4E49Lqhk1Rl9gE43NYCi1QpRoHFkd9MQkslHEIuvAY544AQ8iO0jXowUSIym
OBC8bXqWdLaS9SY6tTDFtBB56ClyYidFK1buiJPV/k8LYmgZy2ep463CL4n+
1mjxH8LMW2Ywx80XQx0XXJxDgt5XjRfzX2btQtx8PdatXLUxp97kL4G64B2S
BJs/B7asjRtq3PkFl+LywrguyLyZ3xlcsJAeeQVDlw6lDWcdyK6mZY5LVNA2
wtom6Orn4ctx3YyaQEHSAevkO5YTk4FA/s5/ToLtV/lyHJ7oy8vmsbnri+i/
UHOeevkCgP1Y9Y6/FH4lCJ1Yqtqmq0rT4qJnr3S6vFkPL8lx+aeTcvPm/Aeb
Qul/CYlSxmUAum/pA1Fsq5heRD1mxro9kqq95cSpIsdFmgoVOkngMPf2NPVt
4Y/VLHBoevd327+uUmjl1VjpAaccT6BX4J57dCjINQcrgAppAvMvpN6eoebk
XYaycTnSZ+Sd2jIWEKxadAPBK4cv1fXtoiTOwU0EXI/2DwEQAK9VW2MPxr96
GddgjO7Z8XYUKtgMWIxGtD9/WYGTnYGkje10QIGQRlsDtiJAJUBcaSNDIxrr
cPE9n7SkaaLUx9IH7X9g6LmiSPwdkI9ImX0AOzyjIrzbXcttoyYFrsMovF9B
dzjzDAzXZNkncB+L1GWvNP1UsnTWl9o/wVtuyWVCKSh1JArDC0QES4ysHoit
fu6ezx36woO8SBCY9lvcEJb/5kp9UXnWND9imYYrDj0+htEvq+Ne91I8eGMa
uUxBeiBgRwMzG9tXwJE6K1SeGu5jPIDfXfmcyZUlpRyOChTDcTRM1hPuLQXL
QIJO2RgtK6B4cQBZ8OyDSxgMlVWpPyCJFMAABg24hJGonNavIvOr7zlTCXt4
bLCMrtgrbSFws9o7a9p9SE6RM00PQgZurFUqPWHOe5fXAWHhmINl8yLH7h7T
gXebUFJhf50YQsFJkjy3krOXWyYMZ2Wlc+TLItMVSoVfmtHyQj2KVXcGOt18
l+c9LDW46pDGFrvMMU5eo2sWm4PNO7471SzlYybORu8LyhrgFSDyuvb7r53A
mW4c7sLaoCd3mg3LOUm27pOgDjC4n2f4ev9aoYw4r+H35xXIQS85kWYVIrvG
AZLWl7GBiOpk0HiaY01o9yx/ED9oupxh7TRvGrNqg81tHp+h+8HG7SNO10wp
f+ZCeqqJAqHJABEBAAHCwV8EGAEIAAkFAlyP9g8CGwwACgkQ1slBUCE4fEiW
MA/+PjF0xU7RMhh50lHkzrLQ3iAGjV8GV7HzdjIypqpSpReODTR8iqfM6WDu
CCntEUTPaGnCBdpIyOA0gRz+Lpb43JCAUvZiw5EsGqdZZuboIskSSCKszHpB
QxuJLcFpT8ELqiVEAAD7lkQGDYu72iME7+rn3tMG7NbuV3ayVF1l2C4cSnC1
nbDDxtdq0jDOQPZ1rdqkSnDJcB1YIHblOlHcuE6dyOdtuKBnVcgprlevrPgk
nefHyBnOk1PF9HiPTkNFRo6RvD01kPJkWV8CRicafL2+y8sl6nRgjoNMjYbv
D3lyHmhPDxWt8HlRw2sm3DrfVdb//4IlqDu4qCMsRUMF7Bdh72rHkq4j7quC
l7edYn0JASetV4uanoYvFDPRiIE+vXnME4scKCiMIg+nMM3+7K5cEjDZsOXg
hmvK4HItivUk1e0adxeXzPwsfLU0HyGovumN39GLxV0fU9nVTTT4jIR8rpSL
f8C23A1NfZMDqoL01RZ71uA6SRcsznd2debM5YtRGWJWI24f78NMmFAeX0Hb
FM1aKsSfeuCYSrmiiDUttHNKUCjKgx+C2w68tTuYFxt4GI25dMFr8OszVIt9
hJV5vVOp/78gR4rImj9aaa8z6vptmrM57nPk1U/27s2Qf4k0C8UlnaEihMXf
YDlctaOrI9VzScwGG3H7z+kzCKU=
=h4NF
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,996 @@
{"version": 2, "width": 136, "height": 59, "timestamp": 1590067123, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}}
[0.009294, "o", "\u001b[5 q"]
[0.009609, "o", "\u001b]4;0;rgb:1d/20/21\u001b\\\u001b]4;1;rgb:fb/49/34\u001b\\\u001b]4;2;rgb:b8/bb/26\u001b\\\u001b]4;3;rgb:fa/bd/2f\u001b\\\u001b]4;4;rgb:83/a5/98\u001b\\\u001b]4;5;rgb:d3/86/9b\u001b\\\u001b]4;6;rgb:8e/c0/7c\u001b\\\u001b]4;7;rgb:d5/c4/a1\u001b\\\u001b]4;8;rgb:66/5c/54\u001b\\\u001b]4;9;rgb:fb/49/34\u001b\\\u001b]4;10;rgb:b8/bb/26\u001b\\"]
[0.009628, "o", "\u001b]4;11;rgb:fa/bd/2f\u001b\\"]
[0.009643, "o", "\u001b]4;12;rgb:83/a5/98\u001b\\"]
[0.009678, "o", "\u001b]4;13;rgb:d3/86/9b\u001b\\\u001b]4;14;rgb:8e/c0/7c\u001b\\"]
[0.009927, "o", "\u001b]4;15;rgb:fb/f1/c7\u001b\\\u001b]4;16;rgb:fe/80/19\u001b\\\u001b]4;17;rgb:d6/5d/0e\u001b\\\u001b]4;18;rgb:3c/38/36\u001b\\\u001b]4;19;rgb:50/49/45\u001b\\\u001b]4;20;rgb:bd/ae/93\u001b\\\u001b]4;21;rgb:eb/db/b2\u001b\\\u001b]10;rgb:d5/c4/a1\u001b\\\u001b]11;rgb:1d/20/21\u001b\\\u001b]12;7\u001b\\"]
[0.081135, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
[0.105635, "o", "\u001b[?1004h"]
[0.229151, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[44m \u001b[30m Projects natas \u001b[49m\u001b[37m\u001b[00m\u001b[34m\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[K\u001b[111C\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[111D"]
[0.229491, "o", "\u001b[5 q"]
[0.229974, "o", "\u001b[5 q"]
[0.230895, "o", "\u001b[?1h\u001b="]
[0.232336, "o", "\u001b[?2004h"]
[0.495608, "o", "\u001b[4mp\u001b[24m\u001b[90mappy\u001b[39m\b\b\b\b"]
[0.685124, "o", "\b\u001b[24m\u001b[32mp\u001b[32ma\u001b[39m"]
[0.878024, "o", "\b\b\u001b[1m\u001b[31mp\u001b[1m\u001b[31ma\u001b[1m\u001b[31mp\u001b[0m\u001b[39m"]
[1.043208, "o", "\b\u001b[1m\u001b[31mp\u001b[1m\u001b[31mp\u001b[0m\u001b[39m"]
[1.159698, "o", "\b\b\b\b\u001b[0m\u001b[32mp\u001b[0m\u001b[32ma\u001b[0m\u001b[32mp\u001b[0m\u001b[32mp\u001b[32my\u001b[39m"]
[1.496722, "o", "\u001b[?1l\u001b>"]
[1.498992, "o", "\u001b[?2004l"]
[1.502209, "o", "\r\r\n"]
[1.517399, "o", "\u001b[5 q"]
[1.523316, "o", "\u001b[?1004l"]
[1.69889, "o", "/home/jonathan/go/bin/puppy\r\n"]
[1.754149, "o", "pappy\u0001\u001b[33m\u0002> \u0001\u001b[0m\u0002"]
[2.270945, "o", "l"]
[2.461025, "o", "m"]
[2.545502, "o", "a"]
[3.074592, "o", "\r\n"]
[3.081346, "o", "Loaded natas15-password (./macro_natas15-password.py)\r\nLoaded natas15 (./macro_natas15.py)\r\n"]
[3.084313, "o", "pappy\u0001\u001b[33m\u0002> \u0001\u001b[0m\u0002"]
[4.218342, "o", "rma natas15-password"]
[4.971896, "o", "\r\n"]
[5.085955, "o", "a\r"]
[5.206945, "o", "b\r"]
[5.326547, "o", "c\r"]
[5.437393, "o", "d\r"]
[5.549147, "o", "e\r"]
[5.664011, "o", "f\r"]
[5.775954, "o", "g\r"]
[5.890659, "o", "h\r"]
[6.000321, "o", "i\r"]
[6.112878, "o", "j\r"]
[6.224215, "o", "k\r"]
[6.34291, "o", "l\r"]
[6.455094, "o", "m\r"]
[6.570645, "o", "n\r"]
[6.680533, "o", "o\r"]
[6.81024, "o", "p\r"]
[6.977327, "o", "q\r"]
[7.103245, "o", "r\r"]
[7.289806, "o", "s\r"]
[7.446911, "o", "t\r"]
[7.556574, "o", "u\r"]
[7.673027, "o", "v\r"]
[7.786883, "o", "w\r"]
[7.901044, "o", "x\r"]
[8.012249, "o", "y\r"]
[8.121503, "o", "z\r"]
[8.24445, "o", "A\r"]
[8.35835, "o", "B\r"]
[8.468958, "o", "C\r"]
[8.593344, "o", "D\r"]
[8.702621, "o", "E\r"]
[8.816087, "o", "F\r"]
[8.930272, "o", "G\r"]
[9.040616, "o", "H\r"]
[9.151716, "o", "I\r"]
[9.269707, "o", "J\r"]
[9.38981, "o", "K\r"]
[9.50179, "o", "L\r"]
[9.620189, "o", "M\r"]
[9.730245, "o", "N\r"]
[9.83835, "o", "O\r"]
[9.963039, "o", "P\r"]
[10.073541, "o", "Q\r"]
[10.184917, "o", "R\r"]
[10.302333, "o", "S\r"]
[10.41378, "o", "T\r"]
[10.526031, "o", "U\r"]
[10.632808, "o", "V\r"]
[10.743539, "o", "W\r"]
[10.856169, "o", "Wa\r"]
[10.967108, "o", "Waa\r"]
[11.080604, "o", "Wab\r"]
[11.191907, "o", "Wac\r"]
[11.303536, "o", "Wad\r"]
[11.415241, "o", "Wae\r"]
[11.530972, "o", "Waf\r"]
[11.641707, "o", "Wag\r"]
[11.755344, "o", "Wah\r"]
[11.882111, "o", "Wai\r"]
[11.990773, "o", "Waj\r"]
[12.108172, "o", "Wak\r"]
[12.216477, "o", "Wal\r"]
[12.326423, "o", "Wam\r"]
[12.461, "o", "Wan\r"]
[12.5894, "o", "Wao\r"]
[12.70967, "o", "Wap\r"]
[12.82729, "o", "Waq\r"]
[12.938261, "o", "War\r"]
[13.053397, "o", "Was\r"]
[13.171885, "o", "Wat\r"]
[13.290897, "o", "Wau\r"]
[13.406958, "o", "Wav\r"]
[13.517919, "o", "Waw\r"]
[13.629137, "o", "Wax\r"]
[13.743345, "o", "Way\r"]
[13.854087, "o", "Waz\r"]
[13.96501, "o", "WaA\r"]
[14.077861, "o", "WaB\r"]
[14.19219, "o", "WaC\r"]
[14.301841, "o", "WaD\r"]
[14.413127, "o", "WaE\r"]
[14.535247, "o", "WaF\r"]
[14.642786, "o", "WaG\r"]
[14.755171, "o", "WaH\r"]
[14.865018, "o", "WaI\r"]
[14.978131, "o", "WaIa\r"]
[15.08807, "o", "WaIb\r"]
[15.204615, "o", "WaIc\r"]
[15.322641, "o", "WaId\r"]
[15.432938, "o", "WaIe\r"]
[15.546864, "o", "WaIf\r"]
[15.660372, "o", "WaIg\r"]
[15.76967, "o", "WaIh\r"]
[15.88513, "o", "WaIi\r"]
[15.996749, "o", "WaIj\r"]
[16.10822, "o", "WaIk\r"]
[16.232082, "o", "WaIl\r"]
[16.343544, "o", "WaIm\r"]
[16.461922, "o", "WaIn\r"]
[16.58825, "o", "WaIo\r"]
[16.714211, "o", "WaIp\r"]
[16.829112, "o", "WaIq\r"]
[16.953916, "o", "WaIr\r"]
[17.175998, "o", "WaIs\r"]
[17.340569, "o", "WaIt\r"]
[17.462973, "o", "WaIu\r"]
[17.573631, "o", "WaIv\r"]
[17.683688, "o", "WaIw\r"]
[17.799298, "o", "WaIx\r"]
[17.913619, "o", "WaIy\r"]
[18.024695, "o", "WaIz\r"]
[18.135448, "o", "WaIA\r"]
[18.252172, "o", "WaIB\r"]
[18.365551, "o", "WaIC\r"]
[18.483037, "o", "WaID\r"]
[18.59954, "o", "WaIE\r"]
[18.725284, "o", "WaIF\r"]
[18.83585, "o", "WaIG\r"]
[18.947164, "o", "WaIH\r"]
[19.06417, "o", "WaIHa\r"]
[19.17527, "o", "WaIHb\r"]
[19.290641, "o", "WaIHc\r"]
[19.402477, "o", "WaIHd\r"]
[19.519582, "o", "WaIHe\r"]
[19.637197, "o", "WaIHf\r"]
[19.745739, "o", "WaIHg\r"]
[19.858428, "o", "WaIHh\r"]
[19.978077, "o", "WaIHi\r"]
[20.090617, "o", "WaIHj\r"]
[20.203066, "o", "WaIHk\r"]
[20.318722, "o", "WaIHl\r"]
[20.428155, "o", "WaIHm\r"]
[20.540727, "o", "WaIHn\r"]
[20.651112, "o", "WaIHo\r"]
[20.768237, "o", "WaIHp\r"]
[20.882439, "o", "WaIHq\r"]
[20.995755, "o", "WaIHr\r"]
[21.110113, "o", "WaIHs\r"]
[21.233616, "o", "WaIHt\r"]
[21.351273, "o", "WaIHu\r"]
[21.463907, "o", "WaIHv\r"]
[21.573633, "o", "WaIHw\r"]
[21.685818, "o", "WaIHx\r"]
[21.795411, "o", "WaIHy\r"]
[21.90721, "o", "WaIHz\r"]
[22.024275, "o", "WaIHA\r"]
[22.14367, "o", "WaIHB\r"]
[22.378325, "o", "WaIHC\r"]
[22.537297, "o", "WaIHD\r"]
[22.645722, "o", "WaIHE\r"]
[22.76345, "o", "WaIHEa\r"]
[22.873234, "o", "WaIHEaa\r"]
[22.987793, "o", "WaIHEab\r"]
[23.102334, "o", "WaIHEac\r"]
[23.219663, "o", "WaIHEaca\r"]
[23.330463, "o", "WaIHEacb\r"]
[23.441842, "o", "WaIHEacc\r"]
[23.550191, "o", "WaIHEacd\r"]
[23.657784, "o", "WaIHEace\r"]
[23.772498, "o", "WaIHEacf\r"]
[23.88683, "o", "WaIHEacg\r"]
[24.003419, "o", "WaIHEach\r"]
[24.113853, "o", "WaIHEaci\r"]
[24.232215, "o", "WaIHEacj\r"]
[24.341747, "o", "WaIHEacja\r"]
[24.452998, "o", "WaIHEacjb\r"]
[24.572351, "o", "WaIHEacjc\r"]
[24.68316, "o", "WaIHEacjd\r"]
[24.797228, "o", "WaIHEacje\r"]
[24.952973, "o", "WaIHEacjf\r"]
[25.06879, "o", "WaIHEacjg\r"]
[25.184469, "o", "WaIHEacjh\r"]
[25.294503, "o", "WaIHEacji\r"]
[25.422565, "o", "WaIHEacjj\r"]
[25.548843, "o", "WaIHEacjk\r"]
[25.666239, "o", "WaIHEacjl\r"]
[25.779721, "o", "WaIHEacjm\r"]
[25.888261, "o", "WaIHEacjn\r"]
[26.003478, "o", "WaIHEacjo\r"]
[26.113533, "o", "WaIHEacjp\r"]
[26.237644, "o", "WaIHEacjq\r"]
[26.350451, "o", "WaIHEacjr\r"]
[26.463968, "o", "WaIHEacjs\r"]
[26.586051, "o", "WaIHEacjt\r"]
[26.701697, "o", "WaIHEacju\r"]
[26.814059, "o", "WaIHEacjv\r"]
[26.953743, "o", "WaIHEacjw\r"]
[27.166073, "o", "WaIHEacjx\r"]
[27.347881, "o", "WaIHEacjy\r"]
[27.463762, "o", "WaIHEacjz\r"]
[27.572303, "o", "WaIHEacjA\r"]
[27.684411, "o", "WaIHEacjB\r"]
[27.800222, "o", "WaIHEacjC\r"]
[27.915078, "o", "WaIHEacjD\r"]
[28.025781, "o", "WaIHEacjE\r"]
[28.140165, "o", "WaIHEacjF\r"]
[28.25461, "o", "WaIHEacjG\r"]
[28.381881, "o", "WaIHEacjH\r"]
[28.491354, "o", "WaIHEacjI\r"]
[28.605086, "o", "WaIHEacjJ\r"]
[28.741836, "o", "WaIHEacjK\r"]
[28.854173, "o", "WaIHEacjL\r"]
[28.971534, "o", "WaIHEacjM\r"]
[29.083463, "o", "WaIHEacjN\r"]
[29.193629, "o", "WaIHEacjO\r"]
[29.307248, "o", "WaIHEacjP\r"]
[29.421989, "o", "WaIHEacjQ\r"]
[29.54055, "o", "WaIHEacjR\r"]
[29.656517, "o", "WaIHEacjS\r"]
[29.770432, "o", "WaIHEacjT\r"]
[29.881032, "o", "WaIHEacjU\r"]
[30.003108, "o", "WaIHEacjV\r"]
[30.117913, "o", "WaIHEacjW\r"]
[30.22768, "o", "WaIHEacjX\r"]
[30.341493, "o", "WaIHEacjY\r"]
[30.453951, "o", "WaIHEacjZ\r"]
[30.567853, "o", "WaIHEacj0\r"]
[30.679953, "o", "WaIHEacj1\r"]
[30.792469, "o", "WaIHEacj2\r"]
[30.90356, "o", "WaIHEacj3\r"]
[31.021875, "o", "WaIHEacj4\r"]
[31.133948, "o", "WaIHEacj5\r"]
[31.248273, "o", "WaIHEacj6\r"]
[31.358908, "o", "WaIHEacj6a\r"]
[31.473854, "o", "WaIHEacj6b\r"]
[31.591511, "o", "WaIHEacj6c\r"]
[31.710087, "o", "WaIHEacj6d\r"]
[31.825008, "o", "WaIHEacj6e\r"]
[31.943366, "o", "WaIHEacj6f\r"]
[32.056021, "o", "WaIHEacj6g\r"]
[32.170055, "o", "WaIHEacj6h\r"]
[32.281069, "o", "WaIHEacj6i\r"]
[32.402932, "o", "WaIHEacj6j\r"]
[32.530905, "o", "WaIHEacj6k\r"]
[32.651462, "o", "WaIHEacj6l\r"]
[32.775425, "o", "WaIHEacj6m\r"]
[32.887614, "o", "WaIHEacj6n\r"]
[32.998358, "o", "WaIHEacj6o\r"]
[33.109569, "o", "WaIHEacj6p\r"]
[33.227988, "o", "WaIHEacj6q\r"]
[33.34824, "o", "WaIHEacj6r\r"]
[33.459948, "o", "WaIHEacj6s\r"]
[33.570255, "o", "WaIHEacj6t\r"]
[33.687988, "o", "WaIHEacj6u\r"]
[33.797454, "o", "WaIHEacj6v\r"]
[33.912343, "o", "WaIHEacj6w\r"]
[34.028418, "o", "WaIHEacj6x\r"]
[34.13878, "o", "WaIHEacj6y\r"]
[34.254306, "o", "WaIHEacj6z\r"]
[34.370447, "o", "WaIHEacj6A\r"]
[34.492104, "o", "WaIHEacj6B\r"]
[34.810294, "o", "WaIHEacj6C\r"]
[34.957762, "o", "WaIHEacj6D\r"]
[35.071313, "o", "WaIHEacj6E\r"]
[35.186914, "o", "WaIHEacj6F\r"]
[35.304344, "o", "WaIHEacj6G\r"]
[35.421811, "o", "WaIHEacj6H\r"]
[35.532483, "o", "WaIHEacj6I\r"]
[35.644497, "o", "WaIHEacj6J\r"]
[35.756068, "o", "WaIHEacj6K\r"]
[35.866504, "o", "WaIHEacj6L\r"]
[35.978699, "o", "WaIHEacj6M\r"]
[36.096092, "o", "WaIHEacj6N\r"]
[36.218461, "o", "WaIHEacj6O\r"]
[36.328097, "o", "WaIHEacj6P\r"]
[36.448385, "o", "WaIHEacj6Q\r"]
[36.560191, "o", "WaIHEacj6R\r"]
[36.677712, "o", "WaIHEacj6S\r"]
[36.787274, "o", "WaIHEacj6T\r"]
[36.897824, "o", "WaIHEacj6U\r"]
[37.038433, "o", "WaIHEacj6V\r"]
[37.173196, "o", "WaIHEacj6W\r"]
[37.301266, "o", "WaIHEacj6X\r"]
[37.45678, "o", "WaIHEacj6Y\r"]
[37.572406, "o", "WaIHEacj6Z\r"]
[37.683439, "o", "WaIHEacj60\r"]
[37.803159, "o", "WaIHEacj61\r"]
[37.920511, "o", "WaIHEacj62\r"]
[38.036463, "o", "WaIHEacj63\r"]
[38.148, "o", "WaIHEacj63a\r"]
[38.264178, "o", "WaIHEacj63b\r"]
[38.375362, "o", "WaIHEacj63c\r"]
[38.486433, "o", "WaIHEacj63d\r"]
[38.597142, "o", "WaIHEacj63e\r"]
[38.709784, "o", "WaIHEacj63f\r"]
[38.819288, "o", "WaIHEacj63g\r"]
[38.93244, "o", "WaIHEacj63h\r"]
[39.042712, "o", "WaIHEacj63i\r"]
[39.151456, "o", "WaIHEacj63j\r"]
[39.271731, "o", "WaIHEacj63k\r"]
[39.387647, "o", "WaIHEacj63l\r"]
[39.496118, "o", "WaIHEacj63m\r"]
[39.607635, "o", "WaIHEacj63n\r"]
[39.724979, "o", "WaIHEacj63o\r"]
[39.843119, "o", "WaIHEacj63p\r"]
[39.972997, "o", "WaIHEacj63q\r"]
[40.089333, "o", "WaIHEacj63r\r"]
[40.202443, "o", "WaIHEacj63s\r"]
[40.320717, "o", "WaIHEacj63t\r"]
[40.433443, "o", "WaIHEacj63u\r"]
[40.542592, "o", "WaIHEacj63v\r"]
[40.655137, "o", "WaIHEacj63w\r"]
[40.773572, "o", "WaIHEacj63wa\r"]
[40.88428, "o", "WaIHEacj63wb\r"]
[40.996629, "o", "WaIHEacj63wc\r"]
[41.110608, "o", "WaIHEacj63wd\r"]
[41.235698, "o", "WaIHEacj63we\r"]
[41.349467, "o", "WaIHEacj63wf\r"]
[41.475502, "o", "WaIHEacj63wg\r"]
[41.59004, "o", "WaIHEacj63wh\r"]
[41.699915, "o", "WaIHEacj63wi\r"]
[41.811698, "o", "WaIHEacj63wj\r"]
[41.930269, "o", "WaIHEacj63wk\r"]
[42.045749, "o", "WaIHEacj63wl\r"]
[42.155548, "o", "WaIHEacj63wm\r"]
[42.269847, "o", "WaIHEacj63wn\r"]
[42.386681, "o", "WaIHEacj63wna\r"]
[42.507885, "o", "WaIHEacj63wnb\r"]
[42.624924, "o", "WaIHEacj63wnc\r"]
[42.736377, "o", "WaIHEacj63wnd\r"]
[42.851744, "o", "WaIHEacj63wne\r"]
[42.969319, "o", "WaIHEacj63wnf\r"]
[43.081559, "o", "WaIHEacj63wng\r"]
[43.193262, "o", "WaIHEacj63wnh\r"]
[43.311164, "o", "WaIHEacj63wni\r"]
[43.42131, "o", "WaIHEacj63wnj\r"]
[43.535737, "o", "WaIHEacj63wnk\r"]
[43.645705, "o", "WaIHEacj63wnl\r"]
[43.758604, "o", "WaIHEacj63wnm\r"]
[43.876268, "o", "WaIHEacj63wnn\r"]
[43.991397, "o", "WaIHEacj63wno\r"]
[44.10587, "o", "WaIHEacj63wnp\r"]
[44.215786, "o", "WaIHEacj63wnq\r"]
[44.333521, "o", "WaIHEacj63wnr\r"]
[44.443835, "o", "WaIHEacj63wns\r"]
[44.560183, "o", "WaIHEacj63wnt\r"]
[44.669598, "o", "WaIHEacj63wnu\r"]
[44.784266, "o", "WaIHEacj63wnv\r"]
[44.898697, "o", "WaIHEacj63wnw\r"]
[45.020109, "o", "WaIHEacj63wnx\r"]
[45.135525, "o", "WaIHEacj63wny\r"]
[45.252722, "o", "WaIHEacj63wnz\r"]
[45.362593, "o", "WaIHEacj63wnA\r"]
[45.473815, "o", "WaIHEacj63wnB\r"]
[45.586762, "o", "WaIHEacj63wnC\r"]
[45.698345, "o", "WaIHEacj63wnD\r"]
[45.809989, "o", "WaIHEacj63wnE\r"]
[45.926097, "o", "WaIHEacj63wnF\r"]
[46.040982, "o", "WaIHEacj63wnG\r"]
[46.150723, "o", "WaIHEacj63wnH\r"]
[46.263205, "o", "WaIHEacj63wnI\r"]
[46.381673, "o", "WaIHEacj63wnJ\r"]
[46.492733, "o", "WaIHEacj63wnK\r"]
[46.609045, "o", "WaIHEacj63wnL\r"]
[46.721509, "o", "WaIHEacj63wnM\r"]
[46.84581, "o", "WaIHEacj63wnN\r"]
[46.969457, "o", "WaIHEacj63wnNa\r"]
[47.086251, "o", "WaIHEacj63wnNb\r"]
[47.234667, "o", "WaIHEacj63wnNc\r"]
[47.343714, "o", "WaIHEacj63wnNd\r"]
[47.477565, "o", "WaIHEacj63wnNe\r"]
[47.591056, "o", "WaIHEacj63wnNf\r"]
[47.700631, "o", "WaIHEacj63wnNg\r"]
[47.821683, "o", "WaIHEacj63wnNh\r"]
[47.941086, "o", "WaIHEacj63wnNi\r"]
[48.050053, "o", "WaIHEacj63wnNj\r"]
[48.160265, "o", "WaIHEacj63wnNk\r"]
[48.270009, "o", "WaIHEacj63wnNl\r"]
[48.385084, "o", "WaIHEacj63wnNm\r"]
[48.497475, "o", "WaIHEacj63wnNn\r"]
[48.606292, "o", "WaIHEacj63wnNo\r"]
[48.719915, "o", "WaIHEacj63wnNp\r"]
[48.83601, "o", "WaIHEacj63wnNq\r"]
[48.944638, "o", "WaIHEacj63wnNr\r"]
[49.289808, "o", "WaIHEacj63wnNs\r"]
[49.410105, "o", "WaIHEacj63wnNt\r"]
[49.529098, "o", "WaIHEacj63wnNu\r"]
[49.640752, "o", "WaIHEacj63wnNv\r"]
[49.751883, "o", "WaIHEacj63wnNw\r"]
[49.866043, "o", "WaIHEacj63wnNx\r"]
[49.989099, "o", "WaIHEacj63wnNy\r"]
[50.102163, "o", "WaIHEacj63wnNz\r"]
[50.212255, "o", "WaIHEacj63wnNA\r"]
[50.334127, "o", "WaIHEacj63wnNB\r"]
[50.445693, "o", "WaIHEacj63wnNC\r"]
[50.557559, "o", "WaIHEacj63wnND\r"]
[50.669518, "o", "WaIHEacj63wnNE\r"]
[50.788773, "o", "WaIHEacj63wnNF\r"]
[50.896984, "o", "WaIHEacj63wnNG\r"]
[51.012098, "o", "WaIHEacj63wnNH\r"]
[51.127403, "o", "WaIHEacj63wnNI\r"]
[51.251866, "o", "WaIHEacj63wnNIa\r"]
[51.365522, "o", "WaIHEacj63wnNIb\r"]
[51.476561, "o", "WaIHEacj63wnNIc\r"]
[51.585074, "o", "WaIHEacj63wnNId\r"]
[51.694091, "o", "WaIHEacj63wnNIe\r"]
[51.808927, "o", "WaIHEacj63wnNIf\r"]
[51.920787, "o", "WaIHEacj63wnNIg\r"]
[52.038195, "o", "WaIHEacj63wnNIh\r"]
[52.147816, "o", "WaIHEacj63wnNIi\r"]
[52.261194, "o", "WaIHEacj63wnNIj\r"]
[52.37437, "o", "WaIHEacj63wnNIk\r"]
[52.495069, "o", "WaIHEacj63wnNIl\r"]
[52.605323, "o", "WaIHEacj63wnNIm\r"]
[52.717433, "o", "WaIHEacj63wnNIn\r"]
[52.841762, "o", "WaIHEacj63wnNIo\r"]
[52.959326, "o", "WaIHEacj63wnNIp\r"]
[53.069026, "o", "WaIHEacj63wnNIq\r"]
[53.178351, "o", "WaIHEacj63wnNIr\r"]
[53.288772, "o", "WaIHEacj63wnNIs\r"]
[53.401056, "o", "WaIHEacj63wnNIt\r"]
[53.516315, "o", "WaIHEacj63wnNIu\r"]
[53.624855, "o", "WaIHEacj63wnNIv\r"]
[53.750987, "o", "WaIHEacj63wnNIw\r"]
[53.865552, "o", "WaIHEacj63wnNIx\r"]
[53.981671, "o", "WaIHEacj63wnNIy\r"]
[54.131099, "o", "WaIHEacj63wnNIz\r"]
[54.476314, "o", "WaIHEacj63wnNIA\r"]
[54.596725, "o", "WaIHEacj63wnNIB\r"]
[54.720566, "o", "WaIHEacj63wnNIBa\r"]
[54.833975, "o", "WaIHEacj63wnNIBb\r"]
[54.971882, "o", "WaIHEacj63wnNIBc\r"]
[55.087161, "o", "WaIHEacj63wnNIBd\r"]
[55.197732, "o", "WaIHEacj63wnNIBe\r"]
[55.317473, "o", "WaIHEacj63wnNIBf\r"]
[55.434793, "o", "WaIHEacj63wnNIBg\r"]
[55.551906, "o", "WaIHEacj63wnNIBh\r"]
[55.666182, "o", "WaIHEacj63wnNIBi\r"]
[55.775779, "o", "WaIHEacj63wnNIBj\r"]
[55.890774, "o", "WaIHEacj63wnNIBk\r"]
[56.015161, "o", "WaIHEacj63wnNIBl\r"]
[56.132111, "o", "WaIHEacj63wnNIBm\r"]
[56.254352, "o", "WaIHEacj63wnNIBn\r"]
[56.372153, "o", "WaIHEacj63wnNIBo\r"]
[56.48939, "o", "WaIHEacj63wnNIBp\r"]
[56.61258, "o", "WaIHEacj63wnNIBq\r"]
[56.741611, "o", "WaIHEacj63wnNIBr\r"]
[56.868879, "o", "WaIHEacj63wnNIBs\r"]
[57.041126, "o", "WaIHEacj63wnNIBt\r"]
[57.289581, "o", "WaIHEacj63wnNIBu\r"]
[57.409608, "o", "WaIHEacj63wnNIBv\r"]
[57.525075, "o", "WaIHEacj63wnNIBw\r"]
[57.645948, "o", "WaIHEacj63wnNIBx\r"]
[57.757035, "o", "WaIHEacj63wnNIBy\r"]
[57.875423, "o", "WaIHEacj63wnNIBz\r"]
[57.982994, "o", "WaIHEacj63wnNIBA\r"]
[58.095028, "o", "WaIHEacj63wnNIBB\r"]
[58.206851, "o", "WaIHEacj63wnNIBC\r"]
[58.318361, "o", "WaIHEacj63wnNIBD\r"]
[58.433073, "o", "WaIHEacj63wnNIBE\r"]
[58.544716, "o", "WaIHEacj63wnNIBF\r"]
[58.654899, "o", "WaIHEacj63wnNIBG\r"]
[58.770277, "o", "WaIHEacj63wnNIBH\r"]
[58.879415, "o", "WaIHEacj63wnNIBI\r"]
[58.987208, "o", "WaIHEacj63wnNIBJ\r"]
[59.100069, "o", "WaIHEacj63wnNIBK\r"]
[59.209735, "o", "WaIHEacj63wnNIBL\r"]
[59.322781, "o", "WaIHEacj63wnNIBM\r"]
[59.442869, "o", "WaIHEacj63wnNIBN\r"]
[59.559842, "o", "WaIHEacj63wnNIBO\r"]
[59.670825, "o", "WaIHEacj63wnNIBP\r"]
[59.779211, "o", "WaIHEacj63wnNIBQ\r"]
[59.885564, "o", "WaIHEacj63wnNIBR\r"]
[60.005301, "o", "WaIHEacj63wnNIBRa\r"]
[60.116804, "o", "WaIHEacj63wnNIBRb\r"]
[60.225765, "o", "WaIHEacj63wnNIBRc\r"]
[60.339643, "o", "WaIHEacj63wnNIBRd\r"]
[60.450219, "o", "WaIHEacj63wnNIBRe\r"]
[60.561673, "o", "WaIHEacj63wnNIBRf\r"]
[60.669311, "o", "WaIHEacj63wnNIBRg\r"]
[60.778254, "o", "WaIHEacj63wnNIBRh\r"]
[60.888809, "o", "WaIHEacj63wnNIBRi\r"]
[61.000878, "o", "WaIHEacj63wnNIBRj\r"]
[61.116168, "o", "WaIHEacj63wnNIBRk\r"]
[61.227752, "o", "WaIHEacj63wnNIBRl\r"]
[61.337761, "o", "WaIHEacj63wnNIBRm\r"]
[61.4525, "o", "WaIHEacj63wnNIBRn\r"]
[61.59238, "o", "WaIHEacj63wnNIBRo\r"]
[61.716852, "o", "WaIHEacj63wnNIBRp\r"]
[61.866359, "o", "WaIHEacj63wnNIBRq\r"]
[61.976806, "o", "WaIHEacj63wnNIBRr\r"]
[62.103341, "o", "WaIHEacj63wnNIBRs\r"]
[62.218833, "o", "WaIHEacj63wnNIBRt\r"]
[62.329327, "o", "WaIHEacj63wnNIBRu\r"]
[62.464303, "o", "WaIHEacj63wnNIBRv\r"]
[62.574842, "o", "WaIHEacj63wnNIBRw\r"]
[62.686281, "o", "WaIHEacj63wnNIBRx\r"]
[62.798118, "o", "WaIHEacj63wnNIBRy\r"]
[62.927862, "o", "WaIHEacj63wnNIBRz\r"]
[63.039208, "o", "WaIHEacj63wnNIBRA\r"]
[63.151363, "o", "WaIHEacj63wnNIBRB\r"]
[63.261454, "o", "WaIHEacj63wnNIBRC\r"]
[63.37898, "o", "WaIHEacj63wnNIBRD\r"]
[63.49421, "o", "WaIHEacj63wnNIBRE\r"]
[63.607479, "o", "WaIHEacj63wnNIBRF\r"]
[63.718539, "o", "WaIHEacj63wnNIBRG\r"]
[63.827821, "o", "WaIHEacj63wnNIBRH\r"]
[63.936119, "o", "WaIHEacj63wnNIBRI\r"]
[64.050596, "o", "WaIHEacj63wnNIBRJ\r"]
[64.165722, "o", "WaIHEacj63wnNIBRK\r"]
[64.275408, "o", "WaIHEacj63wnNIBRL\r"]
[64.386753, "o", "WaIHEacj63wnNIBRM\r"]
[64.497669, "o", "WaIHEacj63wnNIBRN\r"]
[64.607455, "o", "WaIHEacj63wnNIBRO\r"]
[64.71694, "o", "WaIHEacj63wnNIBROa\r"]
[64.829588, "o", "WaIHEacj63wnNIBROb\r"]
[64.966146, "o", "WaIHEacj63wnNIBROc\r"]
[65.075489, "o", "WaIHEacj63wnNIBROd\r"]
[65.188179, "o", "WaIHEacj63wnNIBROe\r"]
[65.298402, "o", "WaIHEacj63wnNIBROf\r"]
[65.408638, "o", "WaIHEacj63wnNIBROg\r"]
[65.544757, "o", "WaIHEacj63wnNIBROh\r"]
[65.655769, "o", "WaIHEacj63wnNIBROi\r"]
[65.766283, "o", "WaIHEacj63wnNIBROj\r"]
[65.878849, "o", "WaIHEacj63wnNIBROk\r"]
[65.995838, "o", "WaIHEacj63wnNIBROl\r"]
[66.110533, "o", "WaIHEacj63wnNIBROm\r"]
[66.221983, "o", "WaIHEacj63wnNIBROn\r"]
[66.33236, "o", "WaIHEacj63wnNIBROo\r"]
[66.443697, "o", "WaIHEacj63wnNIBROp\r"]
[66.553271, "o", "WaIHEacj63wnNIBROq\r"]
[66.664175, "o", "WaIHEacj63wnNIBROr\r"]
[66.787943, "o", "WaIHEacj63wnNIBROs\r"]
[66.912664, "o", "WaIHEacj63wnNIBROt\r"]
[67.166358, "o", "WaIHEacj63wnNIBROu\r"]
[67.281474, "o", "WaIHEacj63wnNIBROv\r"]
[67.397849, "o", "WaIHEacj63wnNIBROw\r"]
[67.517646, "o", "WaIHEacj63wnNIBROx\r"]
[67.635451, "o", "WaIHEacj63wnNIBROy\r"]
[67.749642, "o", "WaIHEacj63wnNIBROz\r"]
[67.857648, "o", "WaIHEacj63wnNIBROA\r"]
[67.967387, "o", "WaIHEacj63wnNIBROB\r"]
[68.076215, "o", "WaIHEacj63wnNIBROC\r"]
[68.192787, "o", "WaIHEacj63wnNIBROD\r"]
[68.299538, "o", "WaIHEacj63wnNIBROE\r"]
[68.413102, "o", "WaIHEacj63wnNIBROF\r"]
[68.533398, "o", "WaIHEacj63wnNIBROG\r"]
[68.645167, "o", "WaIHEacj63wnNIBROH\r"]
[68.761681, "o", "WaIHEacj63wnNIBROHa\r"]
[68.877331, "o", "WaIHEacj63wnNIBROHb\r"]
[68.987002, "o", "WaIHEacj63wnNIBROHc\r"]
[69.099403, "o", "WaIHEacj63wnNIBROHd\r"]
[69.214955, "o", "WaIHEacj63wnNIBROHe\r"]
[69.324451, "o", "WaIHEacj63wnNIBROHea\r"]
[69.434715, "o", "WaIHEacj63wnNIBROHeb\r"]
[69.547049, "o", "WaIHEacj63wnNIBROHec\r"]
[69.659927, "o", "WaIHEacj63wnNIBROHed\r"]
[69.769096, "o", "WaIHEacj63wnNIBROHee\r"]
[69.887856, "o", "WaIHEacj63wnNIBROHef\r"]
[70.007512, "o", "WaIHEacj63wnNIBROHeg\r"]
[70.119766, "o", "WaIHEacj63wnNIBROHeh\r"]
[70.231493, "o", "WaIHEacj63wnNIBROHei\r"]
[70.346591, "o", "WaIHEacj63wnNIBROHej\r"]
[70.458384, "o", "WaIHEacj63wnNIBROHek\r"]
[70.568463, "o", "WaIHEacj63wnNIBROHel\r"]
[70.678098, "o", "WaIHEacj63wnNIBROHem\r"]
[70.791002, "o", "WaIHEacj63wnNIBROHen\r"]
[70.907752, "o", "WaIHEacj63wnNIBROHeo\r"]
[71.029526, "o", "WaIHEacj63wnNIBROHep\r"]
[71.170778, "o", "WaIHEacj63wnNIBROHeq\r"]
[71.281009, "o", "WaIHEacj63wnNIBROHeqa\r"]
[71.471996, "o", "WaIHEacj63wnNIBROHeqb\r"]
[71.583845, "o", "WaIHEacj63wnNIBROHeqc\r"]
[71.697102, "o", "WaIHEacj63wnNIBROHeqd\r"]
[71.806595, "o", "WaIHEacj63wnNIBROHeqe\r"]
[71.919147, "o", "WaIHEacj63wnNIBROHeqf\r"]
[72.029215, "o", "WaIHEacj63wnNIBROHeqg\r"]
[72.14082, "o", "WaIHEacj63wnNIBROHeqh\r"]
[72.255111, "o", "WaIHEacj63wnNIBROHeqi\r"]
[72.363975, "o", "WaIHEacj63wnNIBROHeqia\r"]
[72.484869, "o", "WaIHEacj63wnNIBROHeqib\r"]
[72.602468, "o", "WaIHEacj63wnNIBROHeqic\r"]
[72.712748, "o", "WaIHEacj63wnNIBROHeqid\r"]
[72.835887, "o", "WaIHEacj63wnNIBROHeqie\r"]
[72.946331, "o", "WaIHEacj63wnNIBROHeqif\r"]
[73.061057, "o", "WaIHEacj63wnNIBROHeqig\r"]
[73.175652, "o", "WaIHEacj63wnNIBROHeqih\r"]
[73.286176, "o", "WaIHEacj63wnNIBROHeqii\r"]
[73.40231, "o", "WaIHEacj63wnNIBROHeqij\r"]
[73.516568, "o", "WaIHEacj63wnNIBROHeqik\r"]
[73.626788, "o", "WaIHEacj63wnNIBROHeqil\r"]
[73.737427, "o", "WaIHEacj63wnNIBROHeqim\r"]
[73.847108, "o", "WaIHEacj63wnNIBROHeqin\r"]
[73.957578, "o", "WaIHEacj63wnNIBROHeqio\r"]
[74.063922, "o", "WaIHEacj63wnNIBROHeqip\r"]
[74.174593, "o", "WaIHEacj63wnNIBROHeqiq\r"]
[74.287929, "o", "WaIHEacj63wnNIBROHeqir\r"]
[74.405804, "o", "WaIHEacj63wnNIBROHeqis\r"]
[74.515119, "o", "WaIHEacj63wnNIBROHeqit\r"]
[74.643575, "o", "WaIHEacj63wnNIBROHeqiu\r"]
[74.759404, "o", "WaIHEacj63wnNIBROHeqiv\r"]
[74.871738, "o", "WaIHEacj63wnNIBROHeqiw\r"]
[75.004769, "o", "WaIHEacj63wnNIBROHeqix\r"]
[75.116872, "o", "WaIHEacj63wnNIBROHeqiy\r"]
[75.235311, "o", "WaIHEacj63wnNIBROHeqiz\r"]
[75.359481, "o", "WaIHEacj63wnNIBROHeqiA\r"]
[75.474593, "o", "WaIHEacj63wnNIBROHeqiB\r"]
[75.587189, "o", "WaIHEacj63wnNIBROHeqiC\r"]
[75.694629, "o", "WaIHEacj63wnNIBROHeqiD\r"]
[75.809216, "o", "WaIHEacj63wnNIBROHeqiE\r"]
[75.927478, "o", "WaIHEacj63wnNIBROHeqiF\r"]
[76.03506, "o", "WaIHEacj63wnNIBROHeqiG\r"]
[76.148514, "o", "WaIHEacj63wnNIBROHeqiH\r"]
[76.287922, "o", "WaIHEacj63wnNIBROHeqiI\r"]
[76.394781, "o", "WaIHEacj63wnNIBROHeqiJ\r"]
[76.509342, "o", "WaIHEacj63wnNIBROHeqiK\r"]
[76.621212, "o", "WaIHEacj63wnNIBROHeqiL\r"]
[76.759362, "o", "WaIHEacj63wnNIBROHeqiM\r"]
[76.879878, "o", "WaIHEacj63wnNIBROHeqiN\r"]
[77.023138, "o", "WaIHEacj63wnNIBROHeqiO\r"]
[77.260298, "o", "WaIHEacj63wnNIBROHeqiP\r"]
[77.407325, "o", "WaIHEacj63wnNIBROHeqiQ\r"]
[77.567064, "o", "WaIHEacj63wnNIBROHeqiR\r"]
[77.712041, "o", "WaIHEacj63wnNIBROHeqiS\r"]
[77.894354, "o", "WaIHEacj63wnNIBROHeqiT\r"]
[78.004425, "o", "WaIHEacj63wnNIBROHeqiU\r"]
[78.111865, "o", "WaIHEacj63wnNIBROHeqiV\r"]
[78.217033, "o", "WaIHEacj63wnNIBROHeqiW\r"]
[78.328785, "o", "WaIHEacj63wnNIBROHeqiX\r"]
[78.436027, "o", "WaIHEacj63wnNIBROHeqiY\r"]
[78.545813, "o", "WaIHEacj63wnNIBROHeqiZ\r"]
[78.658592, "o", "WaIHEacj63wnNIBROHeqi0\r"]
[78.795194, "o", "WaIHEacj63wnNIBROHeqi1\r"]
[78.910231, "o", "WaIHEacj63wnNIBROHeqi2\r"]
[79.01901, "o", "WaIHEacj63wnNIBROHeqi3\r"]
[79.124284, "o", "WaIHEacj63wnNIBROHeqi3a\r"]
[79.236629, "o", "WaIHEacj63wnNIBROHeqi3b\r"]
[79.343957, "o", "WaIHEacj63wnNIBROHeqi3c\r"]
[79.469634, "o", "WaIHEacj63wnNIBROHeqi3d\r"]
[79.58128, "o", "WaIHEacj63wnNIBROHeqi3e\r"]
[79.689454, "o", "WaIHEacj63wnNIBROHeqi3f\r"]
[79.797959, "o", "WaIHEacj63wnNIBROHeqi3g\r"]
[79.9053, "o", "WaIHEacj63wnNIBROHeqi3h\r"]
[80.021441, "o", "WaIHEacj63wnNIBROHeqi3i\r"]
[80.129906, "o", "WaIHEacj63wnNIBROHeqi3j\r"]
[80.245136, "o", "WaIHEacj63wnNIBROHeqi3k\r"]
[80.354549, "o", "WaIHEacj63wnNIBROHeqi3l\r"]
[80.464892, "o", "WaIHEacj63wnNIBROHeqi3m\r"]
[80.572775, "o", "WaIHEacj63wnNIBROHeqi3n\r"]
[80.684795, "o", "WaIHEacj63wnNIBROHeqi3o\r"]
[80.796347, "o", "WaIHEacj63wnNIBROHeqi3p\r"]
[80.906119, "o", "WaIHEacj63wnNIBROHeqi3pa\r"]
[81.015162, "o", "WaIHEacj63wnNIBROHeqi3pb\r"]
[81.126729, "o", "WaIHEacj63wnNIBROHeqi3pc\r"]
[81.235186, "o", "WaIHEacj63wnNIBROHeqi3pd\r"]
[81.345873, "o", "WaIHEacj63wnNIBROHeqi3pe\r"]
[81.460209, "o", "WaIHEacj63wnNIBROHeqi3pf\r"]
[81.574424, "o", "WaIHEacj63wnNIBROHeqi3pg\r"]
[81.698308, "o", "WaIHEacj63wnNIBROHeqi3ph\r"]
[81.815257, "o", "WaIHEacj63wnNIBROHeqi3pi\r"]
[81.924806, "o", "WaIHEacj63wnNIBROHeqi3pj\r"]
[82.038298, "o", "WaIHEacj63wnNIBROHeqi3pk\r"]
[82.148059, "o", "WaIHEacj63wnNIBROHeqi3pl\r"]
[82.400866, "o", "WaIHEacj63wnNIBROHeqi3pm\r"]
[82.604465, "o", "WaIHEacj63wnNIBROHeqi3pn\r"]
[82.77887, "o", "WaIHEacj63wnNIBROHeqi3po\r"]
[82.926838, "o", "WaIHEacj63wnNIBROHeqi3pp\r"]
[83.190428, "o", "WaIHEacj63wnNIBROHeqi3pq\r"]
[83.334429, "o", "WaIHEacj63wnNIBROHeqi3pr\r"]
[83.466321, "o", "WaIHEacj63wnNIBROHeqi3ps\r"]
[83.603587, "o", "WaIHEacj63wnNIBROHeqi3pt\r"]
[83.716789, "o", "WaIHEacj63wnNIBROHeqi3pu\r"]
[83.842677, "o", "WaIHEacj63wnNIBROHeqi3pv\r"]
[83.958217, "o", "WaIHEacj63wnNIBROHeqi3pw\r"]
[84.063552, "o", "WaIHEacj63wnNIBROHeqi3px\r"]
[84.170718, "o", "WaIHEacj63wnNIBROHeqi3py\r"]
[84.27705, "o", "WaIHEacj63wnNIBROHeqi3pz\r"]
[84.388126, "o", "WaIHEacj63wnNIBROHeqi3pA\r"]
[84.499336, "o", "WaIHEacj63wnNIBROHeqi3pB\r"]
[84.606151, "o", "WaIHEacj63wnNIBROHeqi3pC\r"]
[84.718215, "o", "WaIHEacj63wnNIBROHeqi3pD\r"]
[84.829607, "o", "WaIHEacj63wnNIBROHeqi3pE\r"]
[84.960707, "o", "WaIHEacj63wnNIBROHeqi3pF\r"]
[85.070123, "o", "WaIHEacj63wnNIBROHeqi3pG\r"]
[85.17823, "o", "WaIHEacj63wnNIBROHeqi3pH\r"]
[85.293522, "o", "WaIHEacj63wnNIBROHeqi3pI\r"]
[85.417048, "o", "WaIHEacj63wnNIBROHeqi3pJ\r"]
[85.529531, "o", "WaIHEacj63wnNIBROHeqi3pK\r"]
[85.64381, "o", "WaIHEacj63wnNIBROHeqi3pL\r"]
[85.759208, "o", "WaIHEacj63wnNIBROHeqi3pM\r"]
[85.873474, "o", "WaIHEacj63wnNIBROHeqi3pN\r"]
[85.984084, "o", "WaIHEacj63wnNIBROHeqi3pO\r"]
[86.098335, "o", "WaIHEacj63wnNIBROHeqi3pP\r"]
[86.250006, "o", "WaIHEacj63wnNIBROHeqi3pQ\r"]
[86.3721, "o", "WaIHEacj63wnNIBROHeqi3pR\r"]
[86.52324, "o", "WaIHEacj63wnNIBROHeqi3pS\r"]
[86.704508, "o", "WaIHEacj63wnNIBROHeqi3pT\r"]
[86.814217, "o", "WaIHEacj63wnNIBROHeqi3pU\r"]
[86.938933, "o", "WaIHEacj63wnNIBROHeqi3pV\r"]
[87.127656, "o", "WaIHEacj63wnNIBROHeqi3pW\r"]
[87.249451, "o", "WaIHEacj63wnNIBROHeqi3pX\r"]
[87.368663, "o", "WaIHEacj63wnNIBROHeqi3pY\r"]
[87.497511, "o", "WaIHEacj63wnNIBROHeqi3pZ\r"]
[87.616168, "o", "WaIHEacj63wnNIBROHeqi3p0\r"]
[87.728707, "o", "WaIHEacj63wnNIBROHeqi3p1\r"]
[87.842837, "o", "WaIHEacj63wnNIBROHeqi3p2\r"]
[87.957047, "o", "WaIHEacj63wnNIBROHeqi3p3\r"]
[88.070037, "o", "WaIHEacj63wnNIBROHeqi3p4\r"]
[88.202037, "o", "WaIHEacj63wnNIBROHeqi3p5\r"]
[88.347508, "o", "WaIHEacj63wnNIBROHeqi3p6\r"]
[88.469328, "o", "WaIHEacj63wnNIBROHeqi3p7\r"]
[88.580032, "o", "WaIHEacj63wnNIBROHeqi3p8\r"]
[88.687974, "o", "WaIHEacj63wnNIBROHeqi3p9\r"]
[88.80586, "o", "WaIHEacj63wnNIBROHeqi3p9a\r"]
[88.917666, "o", "WaIHEacj63wnNIBROHeqi3p9b\r"]
[89.028919, "o", "WaIHEacj63wnNIBROHeqi3p9c\r"]
[89.142387, "o", "WaIHEacj63wnNIBROHeqi3p9d\r"]
[89.25246, "o", "WaIHEacj63wnNIBROHeqi3p9e\r"]
[89.361839, "o", "WaIHEacj63wnNIBROHeqi3p9f\r"]
[89.476245, "o", "WaIHEacj63wnNIBROHeqi3p9g\r"]
[89.595032, "o", "WaIHEacj63wnNIBROHeqi3p9h\r"]
[89.709214, "o", "WaIHEacj63wnNIBROHeqi3p9i\r"]
[89.829913, "o", "WaIHEacj63wnNIBROHeqi3p9j\r"]
[89.953806, "o", "WaIHEacj63wnNIBROHeqi3p9k\r"]
[90.097799, "o", "WaIHEacj63wnNIBROHeqi3p9l\r"]
[90.20857, "o", "WaIHEacj63wnNIBROHeqi3p9m\r"]
[90.318157, "o", "WaIHEacj63wnNIBROHeqi3p9n\r"]
[90.429952, "o", "WaIHEacj63wnNIBROHeqi3p9o\r"]
[90.546059, "o", "WaIHEacj63wnNIBROHeqi3p9p\r"]
[90.656114, "o", "WaIHEacj63wnNIBROHeqi3p9q\r"]
[90.767636, "o", "WaIHEacj63wnNIBROHeqi3p9r\r"]
[90.881998, "o", "WaIHEacj63wnNIBROHeqi3p9s\r"]
[90.994918, "o", "WaIHEacj63wnNIBROHeqi3p9t\r"]
[91.108953, "o", "WaIHEacj63wnNIBROHeqi3p9ta\r"]
[91.231586, "o", "WaIHEacj63wnNIBROHeqi3p9tb\r"]
[91.342023, "o", "WaIHEacj63wnNIBROHeqi3p9tc\r"]
[91.460042, "o", "WaIHEacj63wnNIBROHeqi3p9td\r"]
[91.570418, "o", "WaIHEacj63wnNIBROHeqi3p9te\r"]
[91.681983, "o", "WaIHEacj63wnNIBROHeqi3p9tf\r"]
[91.790781, "o", "WaIHEacj63wnNIBROHeqi3p9tg\r"]
[91.902463, "o", "WaIHEacj63wnNIBROHeqi3p9th\r"]
[92.024506, "o", "WaIHEacj63wnNIBROHeqi3p9ti\r"]
[92.135972, "o", "WaIHEacj63wnNIBROHeqi3p9tj\r"]
[92.254485, "o", "WaIHEacj63wnNIBROHeqi3p9tk\r"]
[92.37181, "o", "WaIHEacj63wnNIBROHeqi3p9tl\r"]
[92.515269, "o", "WaIHEacj63wnNIBROHeqi3p9tm\r"]
[92.642655, "o", "WaIHEacj63wnNIBROHeqi3p9tn\r"]
[92.759878, "o", "WaIHEacj63wnNIBROHeqi3p9to\r"]
[92.874407, "o", "WaIHEacj63wnNIBROHeqi3p9tp\r"]
[92.984763, "o", "WaIHEacj63wnNIBROHeqi3p9tq\r"]
[93.104709, "o", "WaIHEacj63wnNIBROHeqi3p9tr\r"]
[93.271709, "o", "WaIHEacj63wnNIBROHeqi3p9ts\r"]
[93.439198, "o", "WaIHEacj63wnNIBROHeqi3p9tt\r"]
[93.554788, "o", "WaIHEacj63wnNIBROHeqi3p9tu\r"]
[93.668859, "o", "WaIHEacj63wnNIBROHeqi3p9tv\r"]
[93.783041, "o", "WaIHEacj63wnNIBROHeqi3p9tw\r"]
[93.898665, "o", "WaIHEacj63wnNIBROHeqi3p9tx\r"]
[94.008727, "o", "WaIHEacj63wnNIBROHeqi3p9ty\r"]
[94.123223, "o", "WaIHEacj63wnNIBROHeqi3p9tz\r"]
[94.234441, "o", "WaIHEacj63wnNIBROHeqi3p9tA\r"]
[94.34994, "o", "WaIHEacj63wnNIBROHeqi3p9tB\r"]
[94.46206, "o", "WaIHEacj63wnNIBROHeqi3p9tC\r"]
[94.577177, "o", "WaIHEacj63wnNIBROHeqi3p9tD\r"]
[94.686097, "o", "WaIHEacj63wnNIBROHeqi3p9tE\r"]
[94.805711, "o", "WaIHEacj63wnNIBROHeqi3p9tF\r"]
[94.922315, "o", "WaIHEacj63wnNIBROHeqi3p9tG\r"]
[95.040296, "o", "WaIHEacj63wnNIBROHeqi3p9tH\r"]
[95.150587, "o", "WaIHEacj63wnNIBROHeqi3p9tI\r"]
[95.26193, "o", "WaIHEacj63wnNIBROHeqi3p9tJ\r"]
[95.373, "o", "WaIHEacj63wnNIBROHeqi3p9tK\r"]
[95.489345, "o", "WaIHEacj63wnNIBROHeqi3p9tL\r"]
[95.60612, "o", "WaIHEacj63wnNIBROHeqi3p9tM\r"]
[95.717256, "o", "WaIHEacj63wnNIBROHeqi3p9tN\r"]
[95.838385, "o", "WaIHEacj63wnNIBROHeqi3p9tO\r"]
[95.949347, "o", "WaIHEacj63wnNIBROHeqi3p9tP\r"]
[96.059814, "o", "WaIHEacj63wnNIBROHeqi3p9tQ\r"]
[96.171687, "o", "WaIHEacj63wnNIBROHeqi3p9tR\r"]
[96.280627, "o", "WaIHEacj63wnNIBROHeqi3p9tS\r"]
[96.400084, "o", "WaIHEacj63wnNIBROHeqi3p9tT\r"]
[96.538573, "o", "WaIHEacj63wnNIBROHeqi3p9tU\r"]
[96.658706, "o", "WaIHEacj63wnNIBROHeqi3p9tV\r"]
[96.809565, "o", "WaIHEacj63wnNIBROHeqi3p9tW\r"]
[96.92244, "o", "WaIHEacj63wnNIBROHeqi3p9tX\r"]
[97.174186, "o", "WaIHEacj63wnNIBROHeqi3p9tY\r"]
[97.308367, "o", "WaIHEacj63wnNIBROHeqi3p9tZ\r"]
[97.422232, "o", "WaIHEacj63wnNIBROHeqi3p9t0\r"]
[97.536238, "o", "WaIHEacj63wnNIBROHeqi3p9t0a\r"]
[97.651367, "o", "WaIHEacj63wnNIBROHeqi3p9t0b\r"]
[97.761385, "o", "WaIHEacj63wnNIBROHeqi3p9t0c\r"]
[97.871952, "o", "WaIHEacj63wnNIBROHeqi3p9t0d\r"]
[97.982241, "o", "WaIHEacj63wnNIBROHeqi3p9t0e\r"]
[98.095963, "o", "WaIHEacj63wnNIBROHeqi3p9t0f\r"]
[98.240594, "o", "WaIHEacj63wnNIBROHeqi3p9t0g\r"]
[98.434711, "o", "WaIHEacj63wnNIBROHeqi3p9t0h\r"]
[98.589058, "o", "WaIHEacj63wnNIBROHeqi3p9t0i\r"]
[98.723554, "o", "WaIHEacj63wnNIBROHeqi3p9t0j\r"]
[98.879272, "o", "WaIHEacj63wnNIBROHeqi3p9t0k\r"]
[99.056785, "o", "WaIHEacj63wnNIBROHeqi3p9t0l\r"]
[99.212232, "o", "WaIHEacj63wnNIBROHeqi3p9t0m\r"]
[99.326977, "o", "WaIHEacj63wnNIBROHeqi3p9t0ma\r"]
[99.435341, "o", "WaIHEacj63wnNIBROHeqi3p9t0mb\r"]
[99.546671, "o", "WaIHEacj63wnNIBROHeqi3p9t0mc\r"]
[99.659544, "o", "WaIHEacj63wnNIBROHeqi3p9t0md\r"]
[99.770395, "o", "WaIHEacj63wnNIBROHeqi3p9t0me\r"]
[99.889733, "o", "WaIHEacj63wnNIBROHeqi3p9t0mf\r"]
[100.020111, "o", "WaIHEacj63wnNIBROHeqi3p9t0mg\r"]
[100.166435, "o", "WaIHEacj63wnNIBROHeqi3p9t0mh\r"]
[100.333609, "o", "WaIHEacj63wnNIBROHeqi3p9t0mi\r"]
[100.449191, "o", "WaIHEacj63wnNIBROHeqi3p9t0mj\r"]
[100.55967, "o", "WaIHEacj63wnNIBROHeqi3p9t0mk\r"]
[100.669729, "o", "WaIHEacj63wnNIBROHeqi3p9t0ml\r"]
[100.781091, "o", "WaIHEacj63wnNIBROHeqi3p9t0mm\r"]
[100.902855, "o", "WaIHEacj63wnNIBROHeqi3p9t0mn\r"]
[101.020696, "o", "WaIHEacj63wnNIBROHeqi3p9t0mo\r"]
[101.131869, "o", "WaIHEacj63wnNIBROHeqi3p9t0mp\r"]
[101.251713, "o", "WaIHEacj63wnNIBROHeqi3p9t0mq\r"]
[101.369188, "o", "WaIHEacj63wnNIBROHeqi3p9t0mr\r"]
[101.47791, "o", "WaIHEacj63wnNIBROHeqi3p9t0ms\r"]
[101.5864, "o", "WaIHEacj63wnNIBROHeqi3p9t0mt\r"]
[101.71143, "o", "WaIHEacj63wnNIBROHeqi3p9t0mu\r"]
[101.827447, "o", "WaIHEacj63wnNIBROHeqi3p9t0mv\r"]
[101.942925, "o", "WaIHEacj63wnNIBROHeqi3p9t0mw\r"]
[102.068938, "o", "WaIHEacj63wnNIBROHeqi3p9t0mx\r"]
[102.191378, "o", "WaIHEacj63wnNIBROHeqi3p9t0my\r"]
[102.301813, "o", "WaIHEacj63wnNIBROHeqi3p9t0mz\r"]
[102.410637, "o", "WaIHEacj63wnNIBROHeqi3p9t0mA\r"]
[102.54169, "o", "WaIHEacj63wnNIBROHeqi3p9t0mB\r"]
[102.656134, "o", "WaIHEacj63wnNIBROHeqi3p9t0mC\r"]
[102.770313, "o", "WaIHEacj63wnNIBROHeqi3p9t0mD\r"]
[102.885243, "o", "WaIHEacj63wnNIBROHeqi3p9t0mE\r"]
[102.999158, "o", "WaIHEacj63wnNIBROHeqi3p9t0mF\r"]
[103.112292, "o", "WaIHEacj63wnNIBROHeqi3p9t0mG\r"]
[103.225335, "o", "WaIHEacj63wnNIBROHeqi3p9t0mH\r"]
[103.339264, "o", "WaIHEacj63wnNIBROHeqi3p9t0mI\r"]
[103.448769, "o", "WaIHEacj63wnNIBROHeqi3p9t0mJ\r"]
[103.656135, "o", "WaIHEacj63wnNIBROHeqi3p9t0mK\r"]
[103.771612, "o", "WaIHEacj63wnNIBROHeqi3p9t0mL\r"]
[103.885581, "o", "WaIHEacj63wnNIBROHeqi3p9t0mM\r"]
[104.005395, "o", "WaIHEacj63wnNIBROHeqi3p9t0mN\r"]
[104.124079, "o", "WaIHEacj63wnNIBROHeqi3p9t0mO\r"]
[104.239434, "o", "WaIHEacj63wnNIBROHeqi3p9t0mP\r"]
[104.352601, "o", "WaIHEacj63wnNIBROHeqi3p9t0mQ\r"]
[104.466115, "o", "WaIHEacj63wnNIBROHeqi3p9t0mR\r"]
[104.576828, "o", "WaIHEacj63wnNIBROHeqi3p9t0mS\r"]
[104.691093, "o", "WaIHEacj63wnNIBROHeqi3p9t0mT\r"]
[104.804355, "o", "WaIHEacj63wnNIBROHeqi3p9t0mU\r"]
[104.909589, "o", "WaIHEacj63wnNIBROHeqi3p9t0mV\r"]
[105.028598, "o", "WaIHEacj63wnNIBROHeqi3p9t0mW\r"]
[105.169417, "o", "WaIHEacj63wnNIBROHeqi3p9t0mX\r"]
[105.284342, "o", "WaIHEacj63wnNIBROHeqi3p9t0mY\r"]
[105.398273, "o", "WaIHEacj63wnNIBROHeqi3p9t0mZ\r"]
[105.511249, "o", "WaIHEacj63wnNIBROHeqi3p9t0m0\r"]
[105.629402, "o", "WaIHEacj63wnNIBROHeqi3p9t0m1\r"]
[105.750983, "o", "WaIHEacj63wnNIBROHeqi3p9t0m2\r"]
[105.865764, "o", "WaIHEacj63wnNIBROHeqi3p9t0m3\r"]
[105.995437, "o", "WaIHEacj63wnNIBROHeqi3p9t0m4\r"]
[106.109996, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5\r"]
[106.238878, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5a\r"]
[106.354383, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5b\r"]
[106.465166, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5c\r"]
[106.574389, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5d\r"]
[106.694287, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5e\r"]
[106.81056, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5f\r"]
[106.968627, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5g\r"]
[107.163355, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5h\r"]
[107.280714, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5i\r"]
[107.401439, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5j\r"]
[107.540477, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5k\r"]
[107.653687, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5l\r"]
[107.79548, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5m\r"]
[107.912701, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5n\r"]
[108.025991, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5na\r"]
[108.134131, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nb\r"]
[108.24212, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nc\r"]
[108.3581, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nd\r"]
[108.472376, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5ne\r"]
[108.598352, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nf\r"]
[108.708879, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5ng\r"]
[108.822847, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nh\r"]
[108.9362, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nha\r"]
[109.056791, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhb\r"]
[109.168738, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhc\r"]
[109.280796, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhd\r"]
[109.39064, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhe\r"]
[109.505713, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhf\r"]
[109.618462, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhg\r"]
[109.757837, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhh\r"]
[109.917552, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhi\r"]
[110.080528, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhj\r"]
[110.288417, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhk\r"]
[110.403705, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhl\r"]
[110.518902, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhm\r"]
[110.647548, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhma\r"]
[110.769018, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmb\r"]
[110.923544, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmc\r"]
[111.066284, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmd\r"]
[111.186248, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhme\r"]
[111.305981, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmf\r"]
[111.417305, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmg\r"]
[111.531663, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh\r"]
[111.645435, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmha\r"]
[111.757333, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhb\r"]
[111.871789, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhc\r"]
[111.985815, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhd\r"]
[112.096496, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhe\r"]
[112.420086, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhf\r"]
[112.562942, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhg\r"]
[112.670804, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhh\r"]
[112.782681, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhi\r"]
[112.901662, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhj\r"]
[113.013113, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhk\r"]
[113.129113, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhl\r"]
[113.24117, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhm\r"]
[113.351367, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhn\r"]
[113.4702, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmho\r"]
[113.58122, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhp\r"]
[113.694052, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhq\r"]
[113.806747, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhr\r"]
[113.920761, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhs\r"]
[114.036549, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmht\r"]
[114.175399, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhu\r"]
[114.287062, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhv\r"]
[114.404998, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhw\r"]
[114.53895, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhx\r"]
[114.667972, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhy\r"]
[114.809763, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhz\r"]
[114.92051, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhA\r"]
[115.036659, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhB\r"]
[115.145543, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhC\r"]
[115.255593, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhD\r"]
[115.406741, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhE\r"]
[115.521245, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhF\r"]
[115.638502, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhG\r"]
[115.7614, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhH\r"]
[115.877822, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhI\r"]
[115.990451, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhJ\r"]
[116.106667, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhK\r"]
[116.236325, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhL\r"]
[116.351852, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhM\r"]
[116.467964, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhN\r"]
[116.58084, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhO\r"]
[116.690103, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhP\r"]
[116.820359, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhQ\r"]
[116.968091, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhR\r"]
[117.11214, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhS\r"]
[117.276912, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhT\r"]
[117.392146, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhU\r"]
[117.571671, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhV\r"]
[117.681953, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhW\r"]
[117.791551, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhX\r"]
[117.903702, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhY\r"]
[118.01898, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmhZ\r"]
[118.147232, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh0\r"]
[118.257858, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh1\r"]
[118.371968, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh2\r"]
[118.491103, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh3\r"]
[118.621615, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh4\r"]
[118.732378, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh5\r"]
[118.862697, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh6\r"]
[118.984901, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh7\r"]
[119.100212, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh8\r"]
[119.217738, "o", "WaIHEacj63wnNIBROHeqi3p9t0m5nhmh9\rWaIHEacj63wnNIBROHeqi3p9t0m5nhmh \r\n"]
[119.223245, "o", "pappy\u0001\u001b[33m\u0002> \u0001\u001b[0m\u0002"]
[121.816272, "o", "\u001b[0m"]
[121.858093, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
[121.889572, "o", "\u001b[?1004h"]
[122.082478, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[44m \u001b[30m Projects natas \u001b[49m\u001b[37m\u001b[00m\u001b[34m\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[K\u001b[111C\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[111D"]
[122.082873, "o", "\u001b[5 q"]
[122.083358, "o", "\u001b[5 q"]
[122.084297, "o", "\u001b[?1h\u001b="]
[122.085432, "o", "\u001b[?2004h"]
[122.343785, "o", "\u001b[?2004l\r\r\n"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

@ -0,0 +1,97 @@
{"version": 2, "width": 122, "height": 59, "timestamp": 1591023257, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}}
[0.010627, "o", "\u001b[5 q"]
[0.01119, "o", "\u001b]4;0;rgb:1d/20/21\u001b\\\u001b]4;1;rgb:fb/49/34\u001b\\\u001b]4;2;rgb:b8/bb/26\u001b\\\u001b]4;3;rgb:fa/bd/2f\u001b\\\u001b]4;4;rgb:83/a5/98\u001b\\\u001b]4;5;rgb:d3/86/9b\u001b\\\u001b]4;6;rgb:8e/c0/7c\u001b\\\u001b]4;7;rgb:d5/c4/a1\u001b\\\u001b]4;8;rgb:66/5c/54\u001b\\\u001b]4;9;rgb:fb/49/34\u001b\\\u001b]4;10;rgb:b8/bb/26\u001b\\\u001b]4;11;rgb:fa/bd/2f\u001b\\\u001b]4;12;rgb:83/a5/98\u001b\\\u001b]4;13;rgb:d3/86/9b\u001b\\\u001b]4;14;rgb:8e/c0/7c\u001b\\\u001b]4;15;rgb:fb/f1/c7\u001b\\\u001b]4;16;rgb:fe/80/19\u001b\\\u001b]4;17;rgb:d6/5d/0e\u001b\\\u001b]4;18;rgb:3c/38/36\u001b\\\u001b]4;19;rgb:50/49/45\u001b\\\u001b]4;20;rgb:bd/ae/93\u001b\\\u001b]4;21;rgb:eb/db/b2\u001b\\\u001b]10;rgb:d5/c4/a1\u001b\\\u001b]11;rgb:1d/20/21\u001b\\\u001b]12;7\u001b\\"]
[0.088068, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
[0.111666, "o", "\u001b[?1004h"]
[0.222681, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[44m \u001b[30m \u001b[49m\u001b[37m\u001b[00m\u001b[34m\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[K\u001b[116C\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[116D"]
[0.222999, "o", "\u001b[5 q"]
[0.223593, "o", "\u001b[5 q"]
[0.224508, "o", "\u001b[?1h\u001b="]
[0.225888, "o", "\u001b[?2004h"]
[0.653773, "o", "\u001b[1m\u001b[31mn\u001b[0m\u001b[39m\u001b[90mc -lvnp 4444\u001b[39m\u001b[12D"]
[0.715379, "o", "\b\u001b[0m\u001b[32mn\u001b[32mc\u001b[39m"]
[1.183971, "o", "\u001b[39m \u001b[39m-\u001b[39ml\u001b[39mv\u001b[39mn\u001b[39mp\u001b[39m \u001b[39m4\u001b[39m4\u001b[39m4\u001b[39m4"]
[1.446216, "o", "\u001b[?1l\u001b>"]
[1.449347, "o", "\u001b[?2004l"]
[1.458011, "o", "\r\r\n"]
[1.459486, "o", "\u001b[5 q"]
[1.465154, "o", "\u001b[?1004l"]
[1.468709, "o", "Listening on 0.0.0.0 4444\r\n"]
[4.077191, "o", "Connection received on 127.0.0.1 51870\r\n"]
[4.082998, "o", "sh-5.0$ "]
[5.685101, "o", "p"]
[5.91109, "o", "y"]
[6.124298, "o", "t"]
[6.188237, "o", "h"]
[6.335567, "o", "o"]
[6.396019, "o", "n"]
[6.590799, "o", " "]
[6.759803, "o", "-"]
[6.852531, "o", "c"]
[6.930206, "o", " "]
[7.866017, "o", "'"]
[8.109001, "o", "i"]
[8.253435, "o", "m"]
[8.381997, "o", "p"]
[8.515866, "o", "o"]
[8.637957, "o", "r"]
[8.663153, "o", "t"]
[9.413798, "o", " "]
[9.514598, "o", "p"]
[9.739548, "o", "t"]
[9.850342, "o", "y"]
[10.387176, "o", ";"]
[10.535847, "o", " "]
[10.658542, "o", "p"]
[10.891197, "o", "t"]
[11.006384, "o", "y"]
[11.357107, "o", "."]
[11.671752, "o", "s"]
[11.875899, "o", "p"]
[12.077258, "o", "a"]
[12.297662, "o", "w"]
[12.411224, "o", "n"]
[13.250654, "o", "("]
[13.460459, "o", "\""]
[14.358715, "o", "/"]
[14.599401, "o", "b"]
[14.655787, "o", "i"]
[14.727939, "o", "n"]
[14.942566, "o", "/"]
[15.157211, "o", "b"]
[15.347137, "o", "a"]
[15.559204, "o", "s"]
[15.597834, "o", "h"]
[16.70838, "o", "\""]
[16.780863, "o", ")"]
[18.121027, "o", "'"]
[18.81927, "o", "\r\n"]
[18.820547, "o", "python -c 'import pty; pty.spawn(\"/bin/bash\")'\r\n"]
[18.863345, "o", "bash: /home/jonathan/.dotfiles/shells/aliases: No such file or directory\r\r\nbash: /home/jonathan/.dotfiles/shells/functions: No such file or directory\r\r\n"]
[18.880476, "o", "\u001b[H\u001b[2J\u001b[3J"]
[18.981871, "o", "\u001b]0;jonathan@jonathanhodgson-laptop:/\u0007"]
[18.982154, "o", "\u001b]0;jonathan@jonathanhodgson-laptop: /\u0007\u001b[48;5;240m\u001b[38;5;250m\u001b[48;5;240m jonathan \u001b[48;5;237m\u001b[38;5;240m\u001b[38;5;250m\u001b[48;5;237m / \u001b[48;5;124m\u001b[38;5;237m\u001b[38;5;254m\u001b[48;5;124m \u001b[48;5;236m\u001b[38;5;124m\u001b[38;5;15m\u001b[48;5;236m $ \u001b[0m\u001b[38;5;236m\u001b[0m "]
[25.099666, "o", "^Z"]
[25.100201, "o", "\r\nzsh: suspended nc -lvnp 4444\r\n\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
[25.184509, "o", "\u001b[?1004h"]
[25.382763, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[44m \u001b[30m \u001b[49m\u001b[37m\u001b[00m\u001b[34m\u001b[49m\u001b[37m\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[K\u001b[110C\u001b[49m\u001b[37m\u001b[00m \u001b[31m-\u001b[00m\u001b[01;31m148\u001b[00m\u001b[31m-\u001b[00m\u001b[49m\u001b[37m\u001b[00m\u001b[116D"]
[25.383048, "o", "\u001b[5 q"]
[25.383524, "o", "\u001b[5 q"]
[25.384242, "o", "\u001b[?1h\u001b="]
[25.385297, "o", "\u001b[?2004h"]
[25.921348, "o", "[1] continued nc -lvnp 4444\n"]
[27.435219, "o", "stty rows 59 cols 122\r\n\r export TERM=\"xterm-256color\"\r\n\r"]
[28.19776, "o", "\u001b[A\r\n"]
[28.304585, "o", "\u001b]0;jonathan@jonathanhodgson-laptop:/\u0007"]
[28.396087, "o", "\u001b]0;jonathan@jonathanhodgson-laptop:/\u0007"]
[28.478125, "o", "\u001b]0;jonathan@jonathanhodgson-laptop:/\u0007\u001b]0;jonathan@jonathanhodgson-laptop: /\u0007\u001b[48;5;240m\u001b[38;5;250m\u001b[48;5;240m jonathan \u001b[48;5;237m\u001b[38;5;240m\u001b[38;5;250m\u001b[48;5;237m / \u001b[48;5;124m\u001b[38;5;237m\u001b[38;5;254m\u001b[48;5;124m \u001b[48;5;236m\u001b[38;5;124m\u001b[38;5;15m\u001b[48;5;236m $ \u001b[0m\u001b[38;5;236m\u001b[0m "]
[29.070472, "o", "l"]
[29.132573, "o", "s"]
[29.29781, "o", "\r\n"]
[29.302113, "o", "bin boot dev\tetc home lib\tlib64 lost+found media mnt opt proc root\trun sbin srv\tsys tmp usr var\r\n"]
[29.426522, "o", "\u001b]0;jonathan@jonathanhodgson-laptop:/\u0007"]
[29.42666, "o", "\u001b]0;jonathan@jonathanhodgson-laptop: /\u0007\u001b[48;5;240m\u001b[38;5;250m\u001b[48;5;240m jonathan \u001b[48;5;237m\u001b[38;5;240m\u001b[38;5;250m\u001b[48;5;237m / \u001b[48;5;124m\u001b[38;5;237m\u001b[38;5;254m\u001b[48;5;124m \u001b[48;5;236m\u001b[38;5;124m\u001b[38;5;15m\u001b[48;5;236m $ \u001b[0m\u001b[38;5;236m\u001b[0m "]
[31.708368, "o", "exit\r\n"]
[31.725334, "o", "sh-5.0$ "]
[31.945243, "o", "exit\n"]
[32.551323, "o", "\u001b[?2004l\r\n"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

@ -12,7 +12,7 @@ blog(){
find content/ -type f -name '*.md' $newer | while read file; do
newFileName=$(getBlogSlug "$file")
mkdir -p "public_html/${newFileName%/*}"
pandoc --template=templates/blog.html -f markdown -t html5 "$file" > "public_html/$newFileName"
pandoc --template=templates/blog.html -f markdown -t html5 -M comments "$file" > "public_html/$newFileName"
done
touch tmp/lastBlogUpdate
}

@ -4,6 +4,7 @@ tags:
- Pentesting
- FZF
- Linux
- ZSH
description: Hashcat is an amazing tool for cracking hashes but the syntax leaves a bit to be desired. This article explains one way to improve the experience of selecting modes by overriding ZSH's built in tab-completion using FZF.
date: 2020-02-24
---

@ -3,6 +3,7 @@ title: The switch to ZSH
tags:
- Pentesting
- Linux
- ZSH
description: ZSH is great shell but in this blog I explain some of the annoyances I've had with it, as well as some of the benefits.
date: 2020-02-29
---
@ -62,3 +63,5 @@ If you try this in ZSH, it won't work. Why? Because ZSH's implementation resets
```zsh
stty raw -echo; fg <enter><enter>
```
[Read more about upgrading shells](/blog/upgrading-reverse-shells.html)

@ -5,11 +5,15 @@ tags:
- Vim
- Mutt
- FZF
description: Like many organisations, the company I work at uses an Exchange server for email and calendar. My preferred email client is NeoMutt. I use Davmail to make these two work together.
description: Many companies use an Exchange server for email and calendar. My preferred email client is NeoMutt. You can use Davmail to make these two work together.
date: 2020-03-10
---
[Mutt](http://www.mutt.org/) is an extremely powerful, vim like email client. Unfortunately, like many, the company I work for uses Exchange for email and calenders. As a Linux user, I can't (and don't want) to install outlook and I don't want to have to open a web browser, every time I want to check an email. My mission was to find a way to manage my work emails using Mutt.
**Update:** Although everything in this post is (to the best of my knowledge)
correct, a more comprehensive setup guide for mutt and exchange can be found
here: <https://jonathanh.co.uk/blog/mutt-setup.html>.
[Mutt](http://www.mutt.org/) is an extremely powerful, vim like email client. If your company uses Exchange for email and calenders, you may have a hard time making them work together. As a Linux user, I can't (and don't want) to install outlook and I don't want to have to open a web browser, every time I want to check an email. My mission was to find a way to manage my work emails using Mutt.
For the purpose of this blog, I assume that you cannot connect to the Exchange server directly with IMAP or SMTP. If you are unsure, check at `yourdomain.com/owa/#path=/options/popandimap`. If you can use IMAP natively, use it.

@ -61,9 +61,9 @@ This results in
Using your shell as a programming language could easily make a blog post by itself. When that is paired with the fact that you can write these as scripts in separate files (shell scripts) and call them on demand as needed makes this the single largest productivity boost for me. A lot of common tasks can be automated with shell scripts. Here are a few of my favourite:
* [Organise photos into portrait or landscape folders](https://git.jonathanh.co.uk/Jab2870/dotfiles/blob/master/bin/.bin/images/lanPortImages)
* [Add up the length of all audio tracks in a folder](https://git.jonathanh.co.uk/Jab2870/dotfiles/blob/master/bin/.bin/albumDuration)
* [Encode text in multiple different ways at once](https://git.jonathanh.co.uk/Jab2870/dotfiles/blob/master/bin/.bin/encode)
* [Organise photos into portrait or landscape folders](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/bin/.bin/images/lanPortImages)
* [Add up the length of all audio tracks in a folder](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/bin/.bin/albumDuration)
* [Encode text in multiple different ways at once](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/bin/.bin/encode)
## Vim

@ -12,7 +12,7 @@ We spend a lot of time these days in a browser. Given that , I thought it might
Since using Qutebrowser, I have loved having the ability to browse the web from my keyboard. There are times that I use the mouse, but they are rare now. Until recently, I was using [a fork of Vim Vixen](https://git.jonathanh.co.uk/jab2870/Vim-Vixen). This fork didn't do much more than change the colour scheme and I added the ability to set a proxy server using it. However, I have recently been experimenting with [Tridactyl](https://github.com/tridactyl/tridactyl). I plan to write a blog post about it in the near future but if you are looking for a browser plugin to give you Vim-like navigation, both Vim-Vixen and Tridactyl are excellent choices.
I think it is fair to say that Tridactyl does more, that isn't always a benefit though. A tool with fewer features is far more likely to contain serious bugs. However, for me, the ability to easily call external scripts was enough to make the switch.
I think it is fair to say that Tridactyl does more, that isn't always a benefit though. A tool with fewer features is far less likely to contain serious bugs. However, for me, the ability to easily call external scripts was enough to make the switch.
## Custom Stylesheets

@ -11,7 +11,7 @@ My email system is based around my email client of choice, [Mutt](http://www.mut
In this blog post I will document how Mutt and the many surrounding cogs interlock, to get my emails the way I like them. My goals for setting up my email were as follows:
* **Exchange** - Like many companies, my work emails are handled by MS Exchange. Obviously, it is important that I can read my work email.
* **Exchange** - Many companies use Exchange. This post will cater for that situation
* **Offline** - It is fairly common for me to work in remote locations, often resulting in the need to check my emails before I am connected to the internet.
* **Powerful filtering** - I get a lot of emails and keeping them organised can be a lot of work. The more this can be automated, the better.
* **Terminal based** - I spend a lot of time in the terminal. If email can be done in the terminal, I would like to.
@ -506,7 +506,7 @@ After setting the environment variable, you can just run `notmuch setup` and it
After running the setup command, you can simply run `notmuch new` in order to index your emails. Depending on the size of your mailbox, this could take a while.
Once it is done, you can test it out on the command line. The search options here are even more powerful, for a full list type `neomutt help search-terms`. As an example though, the following will show me all messages that contain the word exam in the body that have been sent / received in the past 2 weeks.
Once it is done, you can test it out on the command line. The search options here are even more powerful, for a full list type `notmuch help search-terms`. As an example though, the following will show me all messages that contain the word exam in the body that have been sent / received in the past 2 weeks.
```bash
notmuch search 'body:exam date:-2weeks..now'

@ -0,0 +1,149 @@
---
title: Current Word Completion
date: 2020-05-26
description: ZSH's tab completion is excellent, although limited to completing based on your command. With this, I can also make completions based on my current word.
tags:
- ZSH
- FZF
---
Tab completion is one of the main reasons I decided to make the switch to ZSH. Being able to see descriptions and cycle between options makes finding options a breeze:
![ZSH Tab Completion](/assets/switch-to-zsh/zsh-tab-complete.gif)
However, there are times that I would prefer to have completion options based on the current word I have typed, regardless of the command I am running. I suppose this is more like an extension of ZSH's global aliases, but with the ability to choose from multiple options. An example of this is for word lists. There are a lot of commands I use that require word lists and it is a pain to write out the full path before I am able to tab-complete. My solution is what I have been calling Current Word Completion. My current iteration of it relies on [FZF](https://github.com/junegunn/fzf) for the completions, although in the long term, I would like to make it work with ZSH's built in completion system. Here is a demonstration using `wl` for wordlists and `myip` for my local machines ip addresses.
![Current Word Completion](/assets/word-complete/currentWordComplete.gif)
You can see that it doesn't stop ZSH's normal completion from working and it can work multiple times on any command.
As with tab-completion, I have it bound to my tab key.
If all you want to do is implement it yourself, you can find the source code [here](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/shells/zsh/includes/currentwordcompletion.zsh). Simply source the file in your `.zshrc` and you should be good to go. You can add new options to the `word_replace` function.
If you are interested in how it works, keep reading.
## Overriding tab key
The tab key is interpreted by the terminal as ctrl+i for [legacy reasons](https://bestasciitable.com/). That is why I am binding to `^I`.
The code below will check what ctrl+i is currently bound to and store it. This means we can override the tab key in such a way that if we are not on a word that should be expanded, we can fall back to whatever tab used to do.
We then bind ctrl+i to a new function that will spawn a notification and then run whatever ctrl+i used to be bound to.
```zsh
currentwordcomplete(){
notify-send "Yay, it works"
zle ${currentword_default_completion:-expand-or-complete}
}
# Record what ctrl+i is currently set to
# That way we can call it if currentword_default_completion doesn't result in anything
[ -z "$currentword_default_completion" ] && {
binding=$(bindkey '^I')
[[ $binding =~ 'undefined-key' ]] || currentword_default_completion=$binding[(s: :w)2]
unset binding
}
zle -N currentwordcomplete
bindkey '^I' currentwordcomplete
```
You can check this works by sourcing the file and pushing tab. You should get a notification and then normal tab completion should work.
## Splitting up the current line
The `LBUFFER` variable in a ZSH widget contains a string equal to everything before your cursor in the buffer. We can use expansion built into ZSH to turn that into an array of words.
```zsh
tokens=(${(z)LBUFFER})
```
The `z` flag here will expand the string using shell parsing to split the string into arguments. This takes into account quotes and escaped spaces. Full details can be found in [the documentation](http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion-Flags).
This means that we have an array of words. The word we are currently on will be the last:
```zsh
lastWord="${tokens[-1]}"
```
I also get the first argument which is normally going to be the command currently being run. Although I don't use this at the moment, I thought it might be useful to be able to exclude certain commands from completion.
```zsh
cmd="${tokens[1]}"
```
## Word Replace
I have a function called `word_replace` that takes the word that should be replaced and the command, and prints what it should be replaced with. It also returns 0 on success (there was a replacement found).
```zsh
word_replace(){
local ret=1
local word="$1"
local cmd="$2"
case "$word" in
wl) wordlistSelect; return 0 ;;
myip) ip route | grep -oE '(dev|src) [^ ]+' | sed 'N;s/\n/,/;s/src //;s/dev //' | awk -F',' '{print $2 " " $1}' | sort -u | fzf -1 --no-preview | cut -d' ' -f1; return 0 ;;
esac
return "$ret"
}
```
In this case, it is a simple switch statement. An interesting side note is the use of `-1` in the FZF command for `myip`. This will prevent FZF from running if there is only 1 option fed to it. So, if I am only connected on one interface, it will simply fill my ip address rather than prompting me to choose one.
Obviously, the logic used here could be as simple or complex as you wish.
## Getting the completion
Inside the `currentwordcomplete` function, I get the output of the `word_replace` function which is passed the current word. If that doesn't result in a completion, I will run the `word_replace` function again, using only the part of the word that comes after an `=` sign (if there is one).
In either case, a variable called swap will contain what the current word should be replaced with.
There will also be a variable called `ret` that will be equal to 0 if the replacement should be made.
```zsh
currentwordcomplete(){
...
# Check we haven't pushed space
if [ "${LBUFFER[-1]}" != " " ]; then
swap="$(word_replace "$lastWord" "$cmd")"
ret="$?"
# This part checks if the part after an = is completable
if [ "$ret" -ne "0" ]; then
local afterEqual="${lastWord##*=}"
local beforeEqual="${lastWord%=*}"
# If they are different, there is an equals in the word
if [ "$afterEqual" != "$lastWord" ]; then
swap="${beforeEqual}=$(word_replace "$afterEqual" "$cmd")"
ret="$?"
fi
fi
fi
...
}
```
## Making the change
Finally, I check if the completion should be made. If it shouldn't, I call whatever function the tab key used to be bound to. If it should, I change the last item of the tokens array that we created earlier. I then set the LBUFFER variable to the changed string.
```zsh
if [ "$ret" -eq "0" ]; then
if [ -n "$swap" ]; then
tokens[-1]="$swap"
LBUFFER="${tokens[@]}"
fi
zle reset-prompt
return 0
else
zle ${currentword_default_completion:-expand-or-complete}
return
fi
```
## Conclusion
This is a relatively un-intrusive addition to ZSH that I use most days. I don't use a huge number of these but the two I mentioned here, word lists and my ip, I use a lot.
You can find the [full source here](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/shells/zsh/includes/currentwordcompletion.zsh). If you are interested in my full [ZSH config is here](https://git.jonathanh.co.uk/jab2870/Dotfiles/src/branch/master/shells/zsh/).

@ -0,0 +1,230 @@
---
title: Upgrading reverse shells
date: 2020-06-01
description: Once you've got a reverse shell, there are a number of things you can do to make it nicer to work with. I go through those and at the end, automate the annoying bit with zsh.
tags:
- ZSH
- Pentesting
- Linux
---
So, you've managed to get a reverse shell through one means or another. Unfortunately, it's pretty basic. You can't use your arrow keys, the line gets overwritten if your command is too long and you can't backspace properly. All in all, it's not a nice experience.
## Pseudo terminal
The first thing I like to do is spawn a TTY. This tells terminal tools that they can be run interactively. For example, if you run `ls` in a normal terminal, you are likely to see it output the files in columns:
```bash
localhost$ ls
burppro Desktop GitRepos Pictures
'Calibre Library' Documents go Templates
Contacts Downloads Music Videos
```
However, in your reverse shell, you won't see the output in columns
```bash
reverseshell$ ls
burppro
'Calibre Library'
Contacts
Desktop
Documents
Downloads
GitRepos
go
Music
Pictures
Templates
Videos
```
This is because in the first instance, ls "knows" that it is being used in an interactive session. However, in the reverse shell, ls doesn't know that it is being used interactively, so it gives the most simple output possible. If you were to pipe ls to another program, it would do the same.
```bash
localhost$ ls | cat
burppro
'Calibre Library'
Contacts
Desktop
Documents
Downloads
GitRepos
go
Music
Pictures
Templates
Videos
```
This is why you can use ls with tools like `grep` without worrying about joining all the columns.
It is possible to spawn a tty (or at least a pseudo tty) with python2 or 3 with the same command:
```bash
python 'import pty; pty.spawn("/bin/bash")'
python2 'import pty; pty.spawn("/bin/bash")'
python3 'import pty; pty.spawn("/bin/bash")'
```
On most Linux boxes you come across, one of these should work. If `/bin/bash` isn't available, you could try `/bin/sh`, although this is more limited than bash.
## Setting the window size
On our reverse shell, the width and height are not set and, as a result, default to 80x24. This is usable, but not particularly nice. To change it, we will background the reverse shell and take a note of the actual terminal size.
To background, simply press ctrl+z.
```bash
reverseshell$ ^Z
zsh: suspended nc -lvnp 4444
localhost$
```
To get the current size of your terminal window (in rows and columns), you can run the command:
```bash
localhost$ stty -a
speed 38400 baud; rows 59; columns 136; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
```
The important part here is on the first line, in this example, I have 59 rows and 136 columns. Your values are likely to be different.
We could foreground the session by typing `fg<enter><enter>` and running the command
```bash
stty rows 59 columns 136
```
However, while we have the session backgrounded, there is some more stuff we can do.
## Special keys and correct size
Special key codes, such as escape and key cords that begin with ctrl won't work. This makes using programs like vim almost impossible.
In order to rectify this, we need to make our local shell send the raw characters through netcat. Hopefully, you still have the netcat session backgrounded, if not, you can just push ctrl+z again.
We can then run the following command in order to make our shell pass the raw characters and prevent it from echoing those characters.
```bash
stty raw -echo
```
In order to get the reverse shell back, type `fg<enter><enter>`, although you won't see this on the screen as we have asked the terminal not echo commands (that is what the `-echo` does).
:::{.tip}
If your local shell is zsh, you will have to run the fg command before the prompt is re-drawn, otherwise the `-echo` option will be reset. If you are interested in why, read about it [here](https://www.zsh.org/mla/workers/2014/msg00870.html).
The remediation is simply this:
```zsh
stty raw -echo; fg<enter><enter>
```
:::
We now simply need to tell the shell running on the remote server what the window size is. This is done with another stty command:
```bash
stty rows 59 columns 136
```
By this point, you should have a pretty nice terminal. You can use programs such as vim or tmux that take over the whole terminal and rely on being able to hijack specific keys.
## Terminfo
Teaminfo is a database that describes the capabilities of terminals. This covers things like the ability to display colour or italics.
It is unlikely that your specific terminal has entries in the servers terminfo database, so a good choice is to set your `TERM` variable to `xterm-256color`.
This is a common setting that is very likely to be on servers, it also enables a lot of the capabilities that most people want out of a terminal, including colour support.
To do so, run:
```bash
EXPORT TERM="xterm-256color"
```
## Making it easier
By this point you should have quite a nice terminal to use. You can use your arrow keys, vim, tmux (if it's installed) and just about anything else. Importantly, you will also be able to use sudo or su which can ask for user input whilst running.
However, I would like to share with you my method that automates a significant part of this. You will need to be using zsh on your host machine for this to work. It may be possible in bash, I have just never spent the time trying to implement it.
Firstly, I took and adapted the [widget used by Greg Hurrell](https://github.com/wincent/wincent/blob/d6c52ed5528f353e652799e50d0e9250f1bec6ce/aspects/dotfiles/files/.zshrc#L280-L289) uses to foreground tasks with `ctrl+z`.
```zsh
function fg-bg() {
if [[ $#BUFFER -eq 0 ]]; then
fg
fi
}
zle -N fg-bg
bindkey '^Z' fg-bg
```
This means that after pushing ctrl+z to background a task, you can then push ctrl+z again to foreground it.
However, if we have backgrounded netcat, I would like to perform some extra steps. In the code below I check if the program is `nc`, `ncat` or `netcat`.
```zsh
local backgroundProgram="$(jobs | tail -n 1 | awk '{print $4}')"
case "$backgroundProgram" in
"nc"|"ncat"|"netcat")
# Our NC logic needs to go here
;;
*)
fg
;;
esac
```
Inside the netcat case, I get the rows and columns, put the commands that need running on the server on my clipboard and run the `stty raw -echo` command on my host. That looks like this:
```zsh
# Make sure that /dev/tty is given to the stty command by doing </dev/tty
local columns=$(stty -a < /dev/tty | grep -oE 'columns [0-9]+' | cut -d' ' -f2)
local rows=$(stty -a < /dev/tty | grep -oE 'rows [0-9]+' | cut -d' ' -f2)
notify-send "Terminal dimensions" "Rows: $rows\nColumns: $columns\nstty command on clipboard"
echo "stty rows $rows cols $columns
export TERM=\"xterm-256color\"" | xclip -i -selection clipboard
stty raw -echo < /dev/tty; fg
```
Notice that we need to provide the stty command `/dev/tty` as we are not running it interactively.
Put that all together:
```zsh
function fg-bg() {
if [[ $#BUFFER -eq 0 ]]; then
local backgroundProgram="$(jobs | tail -n 1 | awk '{print $4}')"
case "$backgroundProgram" in
"nc"|"ncat"|"netcat")
# Make sure that /dev/tty is given to the stty command by doing </dev/tty
local columns=$(stty -a < /dev/tty | grep -oE 'columns [0-9]+' | cut -d' ' -f2)
local rows=$(stty -a < /dev/tty | grep -oE 'rows [0-9]+' | cut -d' ' -f2)
notify-send "Terminal dimensions" "Rows: $rows\nColumns: $columns\nstty command on clipboard"
echo "stty rows $rows cols $columns
export TERM=\"xterm-256color\"" | xclip -i -selection clipboard
stty raw -echo < /dev/tty; fg
;;
*)
fg
;;
esac
fi
}
zle -N fg-bg
bindkey '^Z' fg-bg
```
There we go. Once you have a reverse shell, you still have to manually type the python command to get a tty. I suggest looking into your terminal emulator's settings to see if you can map the command to a key binding. Once that is done, simply press `ctrl+z` twice, then `enter`. You will be able to paste the stty command in order to set the correct width and height.
![Reverse shell upgraded quickly](/assets/rev-shell/reverse-shell.gif)

@ -0,0 +1,207 @@
---
title: Enumerating Users on WordPress
description: |
Finding valid usernames can significantly improve your chances of breaking into a WordPress
account. In this blog post I cover some of the methods I use to find valid users and how you
can protect your own site against them.
date: 2020-09-05
tags:
- Security Advice
- Websites
---
WordPress is an extremely popular Content Management System (CMS) and as a result receives a lot of
interest from hackers. WordPress has a bad reputation in some circles for being insecure, however if
you are selective about the themes / plugins you install and keep it up to date, it is my belief
that it is a nice system for both developers and users.
However, assuming you keep everything up to date, in many cases the biggest security weakness is
your credentials. If a malicious actor guesses your username and password, it doesn't matter how
recently you did your updates, they are probably going to get in.
When I am tasked with testing the security of a WordPress site, one of the first things I do is
attempt to find usernames. In this blog post, I document some of the ways I do that.
:::note
For the purposes of this blog post, I have created a local WordPress site I can use for testing. Do
not attempt these tactics unless you own the site you are testing or have explicit permission from
the site owner to do so.
:::
## Trial and error
![Login form showing valid user](../../assets/wordpress/login-username-enumeration.png)
The most simple way is to attempt to login in with common usernames, `admin` being one of the most
common. You can see from the screenshots above that if you enter a correct username, the error
message tells you that you have the password wrong; if you enter an incorrect username, the message
tells you that there is an unknown username.
This makes it trivial to tell if a username exists: try it and if you get the "incorrect password"
error, you know you have a valid username.
To fix this, you simply need to make wordpress return generic error messages:
```php
<?php
function no_wordpress_errors(){
return 'Something is wrong!';
}
add_filter( 'login_errors', 'no_wordpress_errors' );
```
## User ID Cycling
Wordpress dynamically assigns users with IDs and creates pages for each user. Normally these can be
accessed by going to a url like `<domain>/author/admin/`. However, you can also access them by
manually specifying the users ID. For example `<domain>/?author=1` will redirect the visitor to
`<domain>/author/admin/`, this gives the attacker an easy way to get usernames.
```bash
for i in {1..5}; do
curl -s -o /dev/null -w "%{redirect_url}\n" "example-wordpress.local/?author=$i"
done
```
In a default WordPress installation, you will get something like this:
```
http://example-wordpress.local/author/admin/
http://example-wordpress.local/author/user1/
http://example-wordpress.local/author/user2/
http://example-wordpress.local/author/user3/
```
We have just found 3 new usernames.
One solution to this is to simply prevent WordPress queries from being able to look up a user by ID.
```php
<?php
function do_404_author_query($query_vars) {
if ( !empty($query_vars['author'])) {
global $wp_query;
$wp_query->set_404();
status_header(404);
nocache_headers();
$template = get_404_template();
if ($template && file_exists($template)) {
include($template);
}
exit;
}
return $query_vars;
}
add_action('request', 'do_404_author_query');
```
## Rest API
Out of the box, WordPress gives out a lot of information out about its users through the Rest API.
I can pull out a list of all usernames with the following:
```bash
curl -s example-wordpress.local/wp-json/wp/v2/users | jq '.[].name'
```
The easiest way to mitigate this is simply to remove the user endpoints.
```php
function remove_users_endpoints( $endpoints ) {
return array_filter( $endpoints, function($endpoint){
return (0 === preg_match( '/^\/wp\/v2\/users/', $endpoint ));
} , ARRAY_FILTER_USE_KEY);
}
add_filter( 'rest_endpoints', 'remove_users_endpoints' );
```
## oEmbed
Oembed is a protocol that allows websites to embed content from other sites. WordPress supports both
embedding and being embedded. When a site requests to embed a page, it makes a request that looks
like the following: `<domain>/wp-json/oembed/1.0/embed?url=http%3A%2F%2F<domain>/a-post-by-user-3/`.
The WordPress server then returns something like this:
```json
{
"version": "1.0",
"provider_name": "Example Wordpress",
"provider_url": "http://example-wordpress.local",
"author_name": "user3",
"author_url": "http://example-wordpress.local/author/user3/",
"title": "a post by user 3",
"type": "rich",
"width": 600,
"height": 338,
"html": "<embed code>"
}
```
This includes the author's name and a url for the author archive. In order to prevent wordpress from
including this information in the oembed response, add the following to a plugin or to your themes
functions.php file:
```php
<?php
function remove_author_from_oembed($data) {
unset($data['author_url']);
unset($data['author_name']);
return $data;
}
add_filter( 'oembed_response_data', 'remove_author_from_oembed' );
```
## In-Page Info
Perhaps the least interesting is simply looking at pages. Many pages, particularly news or blog
pages, include the author. This is often linked to the author archive page which will disclose their
username. It is normally possible to use simple tools like grep or hq to get the usernames from
these pages.
For example, to get the author of the page <http://example-wordpress.local/a-post-by-user-2/>, I
could do the following:
```bash
$ curl http://example-wordpress.local/a-post-by-user-2/ | hq '.post-author a' attr href'
http://example-wordpress.local/author/user2/
```
Here we see the author is `user2`.
However, sites often have hundreds or thousands of pages so doing this manually would be tedious.
Once again, we can turn to the rest api.
The following will go through the first 100 posts on the site and attempt to get the author's link
from it.
```bash
$ curl http://example-wordpress.local/wp-json/wp/v2/posts?per_page=100 | jq ‘.[].id’ | while read i; do
curl -L …/?p=$i | hq '.post-author a' attr href
done
```
It is worth noting here that the wordpress rest api limits requests to 100 results per request. This
means that if a site has more posts / pages than that, you might need to use the `page=n` parameter
which will give you the nth page of results.
I don't normally find this necessary since it is normally the earliest pages that are created by
high privileged accounts.
The easiest way to rectify this is simply not to include the author's details in the page, although
instructions on how to do this will vary depending on the theme in use. However, you may wish to be
able to group blog posts by author. In this case, I would suggest only publishing content using low
privileged accounts (author or contributor). This will mean that in the event that one of these
accounts is compromised, the damage an attacker can do is limited.
---
These steps should prevent most attempts at user enumeration although remember that security is not
a plugin or a few lines of code copied from a blog on the internet. There are many layers that
should be implemented and this is but one. For details on how best to secure your website, you
should consult with an expert.

@ -0,0 +1,140 @@
---
title: My Setup at the beginning of 2021
tags:
- FZF
- Linux
- ZSH
description: How I work at the beginning of 2021
date: 2021-01-08
---
Inspired by [The Orange One's State of the
Apps](https://theorangeone.net/posts/state-of-the-apps-2021/), I thought I would
document the tools I use to get my job done. If for no other reason than to look
back next year and see what has changed.
## OS
I'm running [Arch Linux](https://archlinux.org/) on all my computers. This is
because it works well for me. All the packages I could ever need are available
and there is no reason for me to change.
For other people's computers that I maintain ( parents, wife etc. ), I normally
put Manjaro on there. It is quick to set up and if I ever need to ssh in to fix
or install something, I can use the same commands I do on my personal machines.
## Desktop Environment
[DWM](https://git.jonathanh.co.uk/jab2870/dwm). I don't understand why tiling
window managers aren't the default. I remember when Windows (Vista?) introduced
their window snapping and thinking at the time that this was how computers
should work.
[i3](https://i3wm.org/) is another great tiling window manager that I used to
use and I normally still recommend to people who want to try one.
I use [Rofi](https://github.com/davatorium/rofi) as my program launcher and for
various other scripts. In the coming year, I may look to switch this to dmenu or
fzf. I am happy with rofi and have no real reason to change other than
curiosity.
## Editor
[Neovim](https://github.com/neovim/neovim). This year saw me make the switch
from Vim to Neovim as my primary editor. Initially, the thing that convinced me
to make the switch was [Deoplete](https://github.com/Shougo/deoplete.nvim)
although since moving I have also taken advantage of neovim's excellent language
server support.
In terms of plugins for vim / neovim, I try to keep it to a minimum. As I
mentioned, I have deoplete with a couple of completion sources. I have a couple
of language definitions and a colour scheme.
One plugin I do use and rely on heavily is
[FZF](https://github.com/junegunn/fzf.vim) which provides fuzzy searching of
files, help pages, buffers or anything else I give it.
## Shell
I use ZSH as my shell. During this last year I have moved away from oh-my-zsh.
In doing this, I have noticed a significant speed increase in my shell.
If you're interested, you can read about [why I choose
ZSH](https://jonathanh.co.uk/blog/the-switch-to-zsh.html).
## Browser
I use a [customized version of
Firefox](https://jonathanh.co.uk/blog/keyboard-driven-firefox.html). The most
significant changes I have made to it are the hiding of the top bar and the use
of [Tridactyl](https://github.com/tridactyl/tridactyl) which adds vim-like
bindings to Firefox. A recent addition I made was
[Firevim](https://github.com/glacambre/firenvim) which embeds a neovim client
into text areas.
## Email
My personal email provider is [Protonmail](https://protonmail.com/). I am very
happy with it. My [email setup](https://jonathanh.co.uk/blog/mutt-setup.html)
consists of neomutt, vim, mbsync, notmuch and imapfilter.
## Calender
I have recently come across [Remind](https://dianne.skoll.ca/projects/remind/)
which has replaced [Calcurse](https://www.calcurse.org/) as my calender
application of choice. It is configured, and reminders are added using a text
file (or a collection of text files). These can then be version controlled.
It allows for complex reminder logic to be specified. I may well write a blog
post about it in the future but, for now, just know that you can use many
programming constructs like if statements when defining events.
For a more detailed introduction, I strongly recommend [Tim Chase's post on
Remind](https://blog.thechases.com/posts/remind/).
## RSS
This is pretty simple. I use [Newsboat](https://newsboat.org/). It does
everything I need it to, it's configurable and has vim-like key bindings.
Incidentally, this is also how I manage my YouTube subscriptions. Any new videos
come into my RSS reader, I watch them using MPV and then I stop watching
youtube. This has been one of the biggest increases to my productivity. I no
longer get youtube suggestions so I don't find myself getting lost in the
endless rabbit holes of youtube. I watch what I want to watch and then I get on
with something else.
## Notes
I just use Vim. I am currently working on a shell script to help me better index
my folder of notes although I'll write a blog post about that when it is nearer
a first stable release.
## Online Hosting / File Sync
I host in instance of [Nextcloud](https://nextcloud.com/) that provides me with
file sync, online editing and sync for contacts, calender etc.
## Keyboard
I still use the [Colemak](https://colemak.com/) keyboard layout which has been
designed for ergonomic typing. I do the majority of my typing on an [Ergodox
EZ](https://ergodox-ez.com/).
## Passwords
I use [Pass](https://www.passwordstore.org/) which is a thin wrapper around Git
and gnupg. Passwords are stored in an encrypted text file and version controlled
with Git. On my phone I use [Password Store](https://f-droid.org/en/packages/dev.msfjarvis.aps/) which works in almost the same way.
## Phone
I currently use a rooted, de-googled Samsung Note 8. There is not much to say
really except almost all my apps come from F-droid. I have been unhappy for a
while with the current state of phones, although that is starting to change with
the advent of new GNU/Linux phones. I have a Pinephone being delivered soon and
have ordered a [FX Tech Pro1
X](https://www.indiegogo.com/projects/pro1-x-smartphone-functionality-choice-control#/).
Both of these ship Linux and I'm hoping that I'll be able to replace my android
handset as my daily driver.

@ -0,0 +1,110 @@
---
title: Before you start with Home Assistant
tags:
- Home Assistant
description: I use Home Assistant for my home automation setup. I plan do write some more blogs about it in the future. This is supposed to help those out who are considering starting out. It is not supposed to be a setup guide, rather some things to consider before starting out.
date: 2021-03-19
---
If you are considering getting into home automation, [Home
Assistant](https://www.home-assistant.io/) is a great way to start. My current
setup consists mostly of lighting, sensors and buttons, and a few small
appliances. I Before you start, there are a few things that you might want
to consider.
## Server
So, currently, I have home assistant installed on an old laptop that works as a
server. Alternatively, you could use a Raspberry PI or any similar single board
computer.
Home Assistant sells a single board computers which are a bit more powerful than
a Raspberry PIs and all the needed software is pre installed:
<https://www.home-assistant.io/blue>
What you end up doing will probably depend on your budget, what you have lying
around and how DIY you want the solution to be.
## Celling Lighting
One of the easiest / cheapest things to start with is lighting. It also brings
some of the (IMHO) biggest advantages. To do lighting, you have 2 options. Smart
switches or smart bulbs (or both, I guess that makes three).
### Smart Switches
This is (probably) the easiest and cheapest starting point, however comes with a
pretty big caveat. You'll need to check that your wall socket has a ground or
neutral wire (probably green and yellow sleeve in the UK). If not, this option
probably won't work for you. I am not an electrician so if you are in doubt,
find someone who knows what they are taking about. *SERIOUSLY*. If you electrocute
yourself, that is generally bad and not on me.
I use these [switches from
Sonoff](https://www.banggood.com/SONOFF-T1-EU-or-UK-AC-100-240V-1-or-2-or-3-Gang-TX-Series-WIFI-Wall-Switch-433Mhz-RF-Remote-Controlled-Wifi-Switch-Smart-Home-Switch-Works-With-Alexa-Google-Home-p-1470883.html?rmmds=myorder&cur_warehouse=UK&ID=6278514).
They can be flashed with open firmware so you can be sure they are not talking
back to their mother ship.
It can be useful to get a switch panel with extra switches. That way you can use
the extra buttons for triggering automations or turning on other things other
than the celling lights.
### Smart Bulbs
Smart bulbs are a generally a bit more expensive than smart switches. However,
they often come with the advantage that you can change the brightness / colour
etc.
Unfortunately, you'll need to leave the switch on all the time if you want the
advantage of being able to turn them on with your phone or on a timer.
I use these [bulbs from BlitzWolf](https://www.banggood.com/BlitzWolf-BW-LT21-RGBWW-10W-E27-APP-Smart-LED-Light-Bulb-Work-With-Amazon-Alexa-Google-Assistant-AC100-240V-p-1551059.html?rmmds=myorder&cur_warehouse=CN).
These can also be flashed with with open firmware.
### What I do
Anywhere I have a smart bulb, I also have smart switches. This is so I can leave
the power to the bulb on at all times. You don't want (and your wife definitely
won't want) to have to get your phones out every time you want to turn the light
on or off. If you have a smart switch, it can "ask" the bulb to turn off but
without cutting its power. This means you can turn the bulb on with your phone
or a switch or an automation.
In some places, I only have a smart switch and dumb bulbs. This is basically
just the bathroom and kitchen where we have loads of spot lights and it's not
worth the cost to make each bulb smart
I can still turn the lights on / off with the switch or our phones or with
automations.
## Other small appliances
I also have things like lamps attached these to [Sonoff
Basics](https://www.banggood.com/SONOFF-BASICR2-10A-2200W-WIFI-Wireless-Smart-Switch-Remote-Control-Socket-APP-Timer-AC90-250V-50-or-60Hz-Works-with-Amazon-Alexa-Google-Home-Assistant-IFTTT-p-1019971.html?cur_warehouse=CN&rmmds=search).
They work in basically the same way as a smart switch with a dumb bulb. It means
that I can turn them off with smart buttons, my phone or any automations.
Lastly, I have some [Sonoff
S26](https://www.banggood.com/SONOFF-S26-10A-AC90V-250V-Smart-WIFI-Socket-CN-or-US-or-UK-or-AU-or-DE-or-FR-or-BR-or-CH-or-IL-or-IT-Wireless-Plug-Power-Sockets-Smart-Home-Switch-Work-With-Alexa-Google-Assistant-IFTTT-p-1308841.html?cur_warehouse=CN&ID=3426&rmmds=search)s.
I use these for appliances such as my kettle that are used around water and I
want to play it safe. You could probably use a Sonoff basic for this, but they
don't come with any water certification. At least these are kept above surfaces
that might have water on them.
I'm happy to pay a bit extra and just not risk electrocuting myself.
## Firmware
Everything I have linked above use a chip called an ESP8266 (or variations of
it) which mean it can be flashed with open source firmware called
[esphome](https://esphome.io/). This way, I am happy to buy cheep Chinese bulbs
and I am confident that the bulbs are not talking back to China.
If you are interested I can talk to you about flashing it at a later date.
Different devices require it to be done in different ways.
-----
Hopefully that should be enough to get you started, I will be writing more posts
on home automation in the future.

@ -40,10 +40,15 @@ drawInBox(){
}
echo -e "
${RED}Jonathan Hodgson${NC}
${LRED}Jonathan Hodgson${NC}
${RED}CONTACT${NC}
${ORANGE}Email: ${GREEN}jonathan@jonathanh.co.uk${NC}
${ORANGE}Website: ${GREEN}https://jonathanh.co.uk${NC}
${ORANGE}GitRepos: ${GREEN}https://git.jonathanh.co.uk${NC}
${ORANGE}Dotfiles: ${GREEN}https://jn.hn/dots/${NC}
${ORANGE}Blog: ${GREEN}https://jn.hn${NC}
${RED}Public Keys${NC}
${ORANGE}Primary ECC: ${GREEN}https://jn.hn/pubkey/${NC}
${ORANGE}Secondary RSA: ${GREEN}https://jn.hn/pubkey-rsa/${NC}
" | drawInBox

@ -71,7 +71,7 @@ Another podcast discussing hacking and related fields
## General Tech
### Computerfile
### Computerphile
Informative videos about different computing topics.
@ -111,7 +111,7 @@ Science videos. Mostly physics and applied maths.
* [Lbry](https://open.lbry.com/@MinutePhysics:5?r=Cwnz9X9qaNkaYo8TbcVaFFZMBx7SsyfV)
### Numberfile
### Numberphile
Videos about maths.

@ -50,6 +50,8 @@
</div>
$body$
</article>
<script async defer src="https://commento.jonathanh.co.uk/js/commento.js" data-no-fonts="true"></script>
<div id="commento"></div>
$endif$
$endif$
</main>

Loading…
Cancel
Save