From 81fd807211ee2b0b7a0c7320021efbc1f90ea84e Mon Sep 17 00:00:00 2001 From: Graham Clark Date: Fri, 23 Oct 2020 16:54:01 -0400 Subject: [PATCH] Save per-terminal-mode theme settings At this point, termshark doesn't insist that a theme has to support every typical terminal color mode - 16-colors, 256-colors, truecolor. Most of the current themes are for 256-colors, and will also work in truecolor mode. If the user has theme dracula set in 256-colors mode, then runs termshark in a cut-down terminal on the same machine (e.g. an xterm with 16 colors), then the theme won't load. Rather than having that silently fail, I'm now saving a theme setting per terminal mode, under toml keys theme-16, theme-256 and theme-truecolor. When the theme is set, a message is displayed to make it clear the theme is set for this color mode only. It's still not completely obvious though - if the user set a theme in one terminal emulator, the user might still wonder why it doesn't load up in the cut-down terminal emulator. I'm not displaying a message - I don't want to make the user click it away. Maybe it would help to have a more obvious message buffer for short messages of interest to the user that will disappear on their own... --- assets/statik/statik.go | 2 +- cmd/termshark/termshark.go | 24 +++++++++++++++--------- theme/utils.go | 35 +++++++++++++++++++++++++---------- ui/lastline.go | 4 +++- ui/ui.go | 6 ++++-- 5 files changed, 48 insertions(+), 23 deletions(-) diff --git a/assets/statik/statik.go b/assets/statik/statik.go index 4ae0f3a..a5a6ed3 100644 --- a/assets/statik/statik.go +++ b/assets/statik/statik.go @@ -8,7 +8,7 @@ import ( func init() { - data := "PK\x03\x04\x14\x00\x08\x00\x08\x00.\x96QQ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00 \x00gen.goUT\x05\x00\x01\xb8<\x8b_\xd2\xd7O\xcf\xb7JO\xcdK-J,IU(.I,\xc9\xccV\xd0-.J\xb6\xd5S\xd0M\xe3\xe2*HL\xceNLOUH,.N-)\xe6\x02\x04\x00\x00\xff\xffPK\x07\x080\xf3\x8fG5\x00\x00\x00/\x00\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xf8\x99RQ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00 \x00themes/base16-256.tomlUT\x05\x00\x01d\x94\x8c_\xd4W\xcdr\xe3,\x10\xbc\xfb)\\\xfa\xae!\x15\xe5\xf7\xcbaO\xfb\x18\xa9\x1c\x10\x1a\xdbTFB\xc5\x8f\xbd~\xfb-\xc0\x06\xd9\x12\x12N\xc5\x9b\xddc\xda\xd3\xea\x99\x01f:\x0b\xd3\x1a\x05\xf5\xf2\xc7\xb2\xf8\xef\xe5\x15\xca\x92\x16\x8b\xc5[E\x15\x94\xcf\xef\x8b\xe5\xb2B\xca>\xec\xaf?\x05\nywWX\x8c*\xb8+\x03X\xde\x07\xf0>\x82\x0f\x01|\x88\xf4\xff\x03\xf8\x18#\x1f\x03\xf8\x14#_\x02\xf8\x1c#\x9f,\xb8\xdbp\x0d1pe1\xe9+\xf0\xc8\xabE\x84\xa4\xed\x1a\x96\x91\xeb2\xdf\x03\xa2\xd8\xc5\xd0\xca\x82k \xd0F\x8cZ\x8c\xedi\x0f\x02\x97\x0c\x9a\x9e\xacK\xba3\xb2\xc3\x1e\xe8\xf2\xab\xa4\xd8EnY\xda~\xd6T~\xb8n\x1a\xad\x85\xfd\xf1\xad\xf0-\xbeu\xd5\x147\xc7?]\xbb\x8b\x18JV\x82\x19\xd5'\xf8\x88@\xf0)\xf4\x19\n\x10\x98v\x0d\x99WaM\x8d\xbc\x85 \x01\xdf\xb2~0\x19Vq\x08J\x0b\x90J\xc8\x1ad\xa6\x8e\xe8\xf6\xa4\x11unZ\xc7pBQgf\x15(H+\xc0\x89VI\xa8=\xc3H \xad&\x8cv\xdaH\x18c\xe8\x0d4\xa0n\xfd\x83r\xa4\x9aS\x14\xeb\xbc*|\xecE\xbd\xadaE\xcdi\xc9\xc9\x83^q\xd4 o5\xc8\x06jN\xf5Tw\xfd\xeb9%n)\xf2z\x82s\xec\xd4\x81\xd0@k.\xc9l\xee\xf3\xee\x95:\xc2\x06~\x91j\xafa\xf4\xa6\xa7\x9fG\xa0\x99\xf6\xa2'by+\x0eX\xe7\xe8\xd9\xb9q\xc6\x1a\x97;\xe3y\xf5#\xd1\x9d\xd2\x96b\xd6[v#vH\xcd\xab\xd2\x0d\xed@F\xba\x07\xf9 Q\xcf\xbbT\xb1\xa3\xec\x034A\xae4a\x80x\xc9\xac\x1bps\xa5\x1f\x06t)v#\xca>vx\xae\xe7\xcc\\\xdd\x93\x92\x95\x96\x86\xe9\xd9z\xcfE\x0f\xb4\x8c\xeb\xd4/U\x8a\xb5\x04\xa5\x08\x13M\x87\xa0GG\xd7H\x83\x8f\xb4K\x86L \xa9\x8e\xb7\xed\xe9\xb8?\x1fc=\xad\x8c\xe8\xa8\xa1\xb4\x04\xda\x10\x86\x1cZ\x9d1\x8e\x0e\xf1\x0d\xd5l\x937\x89\x0f\x0c\x05TNR\xe2\x9b\x0d\x0c\xb9=-\xc3\x9d`\xaf\x08\xe3\xe35\xd7xr\x0e6\xd9\x9b\"l\x8e\xc5\x1b\xf2\xf5F\xbf\x8f:\x86d\x16_\xea\x18\xc6.\xd4\xa3#\xfd;\x96\xe1\xec\x9e~\xc62\xc4\xeeNX\x86\xc4\xcd\x9b\xb0\x0cG\xc6\xb7z\x85\xe4E\xfav\xaf0\x97\xd9\xdc\xe7\xaf\xed\x15&\x97\xf7\xd5\xbdB\x95\xd8\xf8\xb9\xab(\xdb,\x8c\xe9>\x05\xf25\xccBZ\xf1\xeaf!=\xf0\xe6\xcd\xc2\xf4\xda\x9e\xf4\n\xb3\x15\xff\x19\xafp\x90\xfcK\xbdBo\xfb\xcf\x07\x0f\xd6\xf2\xd0*$\xfe\xc7KY\x85\xf4\x1eIZ\x85d\xd9_m\x15~\x07\x00\x00\xff\xffPK\x07\x08+\xabo\xa0\xaa\x02\x00\x00\xc0\x11\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xfb\x8cRQ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00 \x00themes/default-16.tomlUT\x05\x00\x01\xeb}\x8c_\xd4\x97\xcbr\xe2:\x10\x86\xf7<\x05\xe5\xb3\x8dR\x90\xcb\xc9d1\xaby\x8c\xd4,\x84\xdc\x80*m\xc9\xa5\x0b\x0co?e\xc9H\xc6\x17Y\xa4&Lf\x99v\x7f\xfc\xdd\xad\xdb\x9f\x85\x15VC\xb9\xfc\xbe,\xfe{y\x85\xf5\x9a\x16\x8b\xc5[ [j\xd1\xfc\\,\x97\x1b\xa4\xec\xbd\xf9\xfcC\xa2T\xabU\xd1\xc4\xa8\x86\xd5:\x04\xd7\x0f!\xf8\x10\x83\x8f!\xf8\x18\xf1o!\xf8\x143\x9fB\xf09f\xbe\x84\xe0\xff1\xf3\xb9 \x1e\xf7\xdc@L\xdc61\xe5[\xf0\x91\xd7&\"\x15\x15;XF\xd6U~\x02Dy\x8c\xa9\x9b&\xb8S\x00\"\xc6h\x13c'*\"\xbc\x02W\x0d\xda\x8e\xae\xab\xba\xb6\xaa\xc6N\xd0\x15\xb8Q\xf2\x18\x7fo\xbdv\x13\xa5\xea\xdd\x8d\xd3\x1a#\x9b\x8foE;\xe4{\xd7Oq\x17\xfev\x13/b2\xd9Jf\xf5\x05\xe2S\"\xe2\xcb\xe82\x1a\x10\x98qS\xc9QbU\x89\\@R\xc4\xcf\xae\x9bNF\xbai\xb3\x12\"d#U *[K\xd6'R\xc92\xbf\xb83@(\x9a\xec\xda\x02\x84t\x03\x98\x1c\x9b\x82\xd23V)\x10\x860Z\x1b\xab`\x941{\xa8@\xdf\xfbS\xe6\xa8\x92S\x94\xbb\xdcf|\xf6\x95\x83n#\x99k\xbf\xe5h@\x11.\x0c\xa8\nJNMz\xd4\xfed]\xa2\x07\x8a\xbcLR\xe7\xa1\xb5H\x05\xc2^W\xdf\xbc\x84;\xc7\x0e\xd9\xc3/\xb29\x19\x18?\x06\x89\xd3\x13@+\xae\xe9K8\xa3n\xd5\x0e\x143\x0f\xbc\xbb\x8e\x87pn\xb7\xee\x8a\x0f8\xd2\x13\xa8\x0f {\xf2z\xd5\x9a\xb2w0\x04\xb96\x84\x01\xe2uW\xe3\x80\xce\x97\x7f\x1c\xfc\x80\x92\xc71u\x9f<\xb2\xce}6_\xfb\xa2um\x94e&\xa3\xef\xbep\x0bfm\xb1n\xcbJ\xee\x14hM\x98\xacj\x043~\xcb\x8d\x0d\xfb\x0c\xb6\xdf2\x8fQ\xc0t\xcd\x85\xe8\xbd\x12\x83+\xaf\xa3\x97\x95\x1fu\xb4Q@+\xc2\x90\x830Y\x17WKT\xd4\xb0}\xee\xed\xdd2\x1a\xa8\x9a\x81\xe2\xa9\x0e\x8c:\xf4\xdaqK\xdam\xc6z\xc2p\x83\x97\xeb\xd2\xd4|W\x84Gg\xf1\x86|\xb7\xf7vn\xf8\x90L\x97\xf2\xa7\xfd\xc7\xe8>{r\xd8?g@\xfa[\xf8c\x06$\xce:e@\xa6\xb6d\xca\x80\x9c\x99\xbf\xef<\xa6\xf7\xd7\xd7p\x1e\xb3\xf5\xcdK\xdc\xc0y\xa4m\xc0M\x9c\xc7\x94{\xc8\x7f\xca\xf2\xad\xc7\xa8\xf6s\xc0?\xc9z$Toa=\x12\xf7c\x86\xf5\x981\x00i\xe71\xdf\xf9\xed\x9cG+\xfb\xa5\x9dG\xc7I\xe4\xa4\x0f\x9e\xf7\x11\xe31\xf5o\xe6\xa4\xf1HJ\xac,\xa4\xa8\xd0)b\x9bw\x1e\x1eNT\xd3G9D\xc2\xbcV\x05*o\xad\xba9\x84e]\xf8'w$\x84 \xb5wn\x03IB\x8e\xd2\xd96\x85\x85\xe5\x18\xa5\xb0\xd2!\x83F\x1b\x85\x93\x1c\xbd\xc7\x12\xdbg;e\xc4*\x04\xc8z\xe7[\x8c\x8d\xbe\xb3\xd1=\xe2y\xf6\\H\x8d*\x14\x95FUb!@\xbb[m'\xeb\x92\xfa\x0eR\x14N\xd6\xb1i=\xa5\xc4\xca\xdc\x97\xdfm \x1ad\xa2\xec\xf1w\x98\x1f4N\x8f\x81cz\x06\xa2\xa9\xee\x9c\xa0\x8e\xc9\x05\xca\xc2O\xb3[0#\xde\x8c\xe4\x98iS8R\xe9\xd4\xdeAz\x0e<\xad\xe3k\xb2o\xb5\xb4\xe2\x07\xba\x84\x03\xaaO [\xe6\xfd\xaa\x0d\xb07\xd4\xa1\x14\xad\x0e\x19Jy\xdfj\xbcb\xfb\xcb\xaf\xaf>\xa0\xea\x8f)u\x1b*\x87\x8e\xf4\xbc\x18c\x19Zhyy.]\xceO\xc1\xf0\xe8,^\xa5\xd8\xed\xad\x9d\xbb~H\xe6S\xf9\xdb\xfec\xf2\x9em\x88\xf6\xdf\x19\x90\xf1\x15\xfe\x9c\x019\xf5\xdae@\xe6\xae\xa4\xcb\x80\x1c9\xff\xdey\xcc\xdf\xaf\xef\xe1\x80\x85\xa9\xf3\x85AVX\x90h0/p\xc7\xa8\x05\xcd\xc0\xd28\x8ba\xe8\x1dMGt\xb7a;\x0b\xb2^=\xdb\x113:\x0e\xe4\xbd\xc3\xfa\x19?\x9b\x01\x9b\x90B'\xa25\xc9 j'\xa2\xeb\xde\x0bD7\xa4\xab\xaf`\x8f\xb5\x04'\xc8\xba`#\xa0\xde\xbbj\xba\xee\xa3\x12G\xee\xc6\xb0\x8b sV\xae\x02y\x17\xf8<\x94\xd2\xe5\xe8\x8fxB\xce\x9bO'fN\x1a\x88w}\xcc\x94\x94M\xd7\xc8\xabM\xd2\xbf\xb8z\x1aH\xdd\xe4VCr\xc4\x1a\xa2\xda+\x8aI\x19(\xa6\x93KN\x8b\x1c\x89\xd4M\x84(\x91\x8a\xf2\xb2F\xaf\x88i\xef2=\x9a\xe8\xa6\xcf\xf2\x88DE#(\x8a`\xad\xe6x\x8a\xaa\x86\x86\x17w&D\xc0epm\x96\xc4\xa1@\xee\x1d\x9b@j8J\x08\xaceD\xe0(\x95\xc0I\x8e<`\x85\xed\xb3\xd9>\x9aEK\xe0\xcd>\xb4\x19\x93}\xe7\xa0)2P\xa3\xde\xe7\xbf=+\xb9D\x11\x95\xb5DQ!-A\xfaGm\xae\xd45\xf5\x03xI\xbd\xac\xf3\xd0zJ\x85\xb5\xba\xaf\xbe\xdb\x12zGh\xca\x01\x7fE\xc5I\xe2\xf45\xf0\xdc\x1eKT\xf5\x9d7\xa8c\xb2\x129\x0d\xd3\xec6\xdd\x887#9f\x9a\x12\xceT\xfd\xd5>\x80\x07^x\xfdJ\xb9\xe4\xd0n\xf5\xcbg\xe9\x1cN(\xbe$l\x98\xf7\xab\x1e\x81\xbc\xa3\x8cx\xd9\xca\x88 \xe7\xf7\xadF\x87\x1d.\xbfq~@4\x9fS\xea&y\xe2;\x8f\xb9\xe1\xdaW\xad\xb7R(\"\x03\xfa\x1e\x0b\xf7\xc4\xa0#v\xd9\xb2h\xf6\x02\xdb6\"Mu\xe4(\xa7\xb7\xdc\xd4\xb0\xcf\xc4\xfb\x96\x91\xa5\xb5\xc7\xb2\xaeG\xaf\x84\xb3\xf2.\xf4\x82\xf2\x07\x9dV\n\x84*\"\xbc\xc4Z\x06-\xae\x9eQ\x81$\x87\xd0\xed\xddsZ\x04q\x834\xdcj\xcb\x11\x1f\xa3v\xf4'\xbdlF\x19\x86,%\xbf\xfe.]\xcdO+\xfb\xe8,^y\xb9?\xc8\xb7i\xff1_\xca\x9f\xf6\x1f\x93\xe7l\xabi\xff\x9c\x01\x19\x1f\xe1\xaf\x19\x90a\xd6>\x032w$}\x06\xe4\xcc\xf9\xfb\xcec\xfe|\xfd\x0c\xe7q\xb3\xbe\xdb\x12\x0fp\x1e~\x1b\xf0\x10\xe71\xe7\x1e\xc2\x9f\xb2p\xeb1\xa9\x9dX\xfa7Y\x0f\x8f\xea#\xac\x87g?\x06X\x8f\x1b\x06\xc0\xef\x80\x85\xa9\xf3\x85AVX\x90h0/p\xc7\xa8\x05\xcd\xc0\xd28\x8ba\xe8\x1dMGt\xb7a;\x0b\xb2^=\xdb\x113:\x0e\xe4\xbd\xc3\xfa\x19?\x9b\x01\x9b\x90B'\xa25\xc9 j'\xa2\xeb\xde\x0bD7\xa4\xab\xaf`\x8f\xb5\x04'\xc8\xba`#\xa0\xde\xbbj\xba\xee\xa3\x12G\xee\xc6\xb0\x8b sV\xae\x02y\x17\xf8<\x94\xd2\xe5\xe8\x8fxB\xce\x9bO'fN\x1a\x88w}\xcc\x94\x94M\xd7\xc8\xabM\xd2\xbf\xb8z\x1aH\xdd\xe4VCr\xc4\x1a\xa2\xda+\x8aI\x19(\xa6\x93KN\x8b\x1c\x89\xd4M\x84(\x91\x8a\xf2\xb2F\xaf\x88i\xef2=\x9a\xe8\xa6\xcf\xf2\x88DE#(\x8a`\xad\xe6x\x8a\xaa\x86\x86\x17w&D\xc0epm\x96\xc4\xa1@\xee\x1d\x9b@j8J\x08\xaceD\xe0(\x95\xc0I\x8e<`\x85\xed\xb3\xd9>\x9aEK\xe0\xcd>\xb4\x19\x93}\xe7\xa0)2P\xa3\xde\xe7\xbf=+\xb9D\x11\x95\xb5DQ!-A\xfaGm\xae\xd45\xf5\x03xI\xbd\xac\xf3\xd0zJ\x85\xb5\xba\xaf\xbe\xdb\x12zGh\xca\x01\x7fE\xc5I\xe2\xf45\xf0\xdc\x1eKT\xf5\x9d7\xa8c\xb2\x129\x0d\xd3\xec6\xdd\x887#9f\x9a\x12\xceT\xfd\xd5>\x80\x07^x\xfdJ\xb9\xe4\xd0n\xf5\xcbg\xe9\x1cN(\xbe$l\x98\xf7\xab\x1e\x81\xbc\xa3\x8cx\xd9\xca\x88 \xe7\xf7\xadF\x87\x1d.\xbfq~@4\x9fS\xea&y\xe2;\x8f\xb9\xe1\xdaW\xad\xb7R(\"\x03\xfa\x1e\x0b\xf7\xc4\xa0#v\xd9\xb2h\xf6\x02\xdb6\"Mu\xe4(\xa7\xb7\xdc\xd4\xb0\xcf\xc4\xfb\x96\x91\xa5\xb5\xc7\xb2\xaeG\xaf\x84\xb3\xf2.\xf4\x82\xf2\x07\x9dV\n\x84*\"\xbc\xc4Z\x06-\xae\x9eQ\x81$\x87\xd0\xed\xddsZ\x04q\x834\xdcj\xcb\x11\x1f\xa3v\xf4'\xbdlF\x19\x86,%\xbf\xfe.]\xcdO+\xfb\xe8,^y\xb9?\xc8\xb7i\xff1_\xca\x9f\xf6\x1f\x93\xe7l\xabi\xff\x9c\x01\x19\x1f\xe1\xaf\x19\x90a\xd6>\x032w$}\x06\xe4\xcc\xf9\xfb\xcec\xfe|\xfd\x0c\xe7q\xb3\xbe\xdb\x12\x0fp\x1e~\x1b\xf0\x10\xe71\xe7\x1e\xc2\x9f\xb2p\xeb1\xa9\x9dX\xfa7Y\x0f\x8f\xea#\xac\x87g?\x06X\x8f\x1b\x06\xc0\xef\x14v\x91Xm\x16\x19\xd3=\x99\xaf\x1fa\x07C\xb3\x13)Q\xf7\xf5\x95_m.\xca\x8f]\x95U%\xd2\xfd\xef\xfd\xe1G\x10\xa1m\xc3a\xb7{)s\x0e\x82\xfdC\xfa\xba\xdb\xefc(\xf1xT'\x8eG'v\xfdC\x03\xda\x1a\x0c\\\xff\xe4\x18\xd0Q\xa0\x17\xfa\x18x\x06t\x15\xe8{A\x1c\xba\x06<)0t\xa3S\xd4\xfa\xf4\x14\x18\xb9`\x83m@_\x81\x88\x18\xd2\xd6g\xa0\xc0\x84&>\xb6>C\x05R\xe2:Nb\xc0H\x81$>\xc5v\x1b\x08\x14\xf8\xc7\x0b\xa3\xe3\xd1\x80\xb1N\xc9\x8b\xba Q\xa0\x03`G\xa1\x01u\xcb\x1c?\x8ci[;\xea2I`\x93\x93\x01\x13\x9d\x92\xeb\xfa\xa1>\xc9\x81\xbc\xd5\x98\xe9\xf2/\xddbm\xacp\xc4Fk\x1b\xb9B6b#\xb5\xed,\x10\xc7\x8cqmL\xe1\x8c\x99\x84\x11\xb3\xeaQ. ;\x8fE\x8djkQ\x89\x82\x8fY\xb1\xb6\n=;=\x93j\xd3\xc7\x85\xc91^P\x1b\xaf\xc8y\xfe1bU\xf3GA\xbc\xa9\xd1\xab\xa4\xcc\xeb\xb2^:\xc7\x94\xdf\xc3\xcf.\xb1\xee\xe8\xa1%XIN\xaa\xb2G\xd3\x87\xba4]Y\x97W\"G\"UIk#\x92\x94r\x96\xe1b0]p\x97b\x8dVw;7\x1b\xcc\x8asAQl\x8a\x99\x17W+\xcd\xe9\xb6D\x1b\x92\x05\\n\xca\xd3\x109\xc4\xc8\x17\xdb)\x90j^%\x04f\xd2\"P\xc8J\xf4smxze)\x02e\xc0\xf3\xf3\x96\x9a4\xe3\x8e\xdeSL\xa0\x1a\xb4an4\x12\xc6%\n\x8be\x12E\x8a\x94\x81\\\xee\xbe\xfe\x16?\xd3\xdf\x81\xb3\xfeH\x0e\x99M\x0fo\xb4\x14\xb3j{\xae\xebB\xa9e\xa3h\x17\xfck\xc5W\x89S_\xce\xecGg\xc8Uv\xc7\x87W\xb3\x13\x86\x9c\xae\x8f]/\xd0\x1ew2\xf4\x90\xad\x93i\xe8\xeaV\xdf\x81o\xd8\x19\xea!\x1c:\xd8R\xbdz`\x8d\x0b\x0eW\x14w'\xa0\xd9\xf7E/\x80\xbc\xa1\xb48+\xa5E\x90\xf3\xed\x1bw\xe0a[\x1a\xee\xc0\x89\xc8?\xc6\xb3\xd0\xc7G\xe7\xa0\xcf\xdf\x96\xc3\xa7V\x94RTD\xae\xecC?\x81\x1by\xf5(v[ \xf2\xb3\xc0\xb2\xb4H\x9e\x16\x1c\x07+f\x98{\xf7\x12\x1a\xf2\xf6\xe5f\xa8e\xc1\xb2l\xf0\x18\x8d\xac\xd2N\xdc\xd5\x9c6^)\x05Bj\x11\xce0\xeb\xe79\xbd\x0co\xac\x14$\xb9,\x92:\xaf\xc4\x8dW\"\x88\x15\xc4v3\x18\x9ex\x1f\x94\xa7.\xfdsq\x95fI&y\xff\xde\xea\n:O\xdd\xee\x85\xb3\xf3E\xbeN\x89\xa2\xb9\xa4\x1e#\x8a&\xa6\xf2\xa4\xa8\xdf\\\x15\x0d\x07\xff~U\xd4\xde\xc3\xbc*\x9a\x1e\xe2yU\xd4\xf0\xbe\x92*\x9a\x9b\xc6\xaf\xa6\x8aV\xe4\xba.\xd4\xd3T\xd1\x924y\xaa*\x9aR5\xdb\x9e\xd2-\xb2h\"\x07\xcf\xb8x\xa8,\x9a\x8d\xfe\x05\xf25\xccBZ\xf1\xeaf!=\xf0\xe6\xcd\xc2\xf4\xda\x9e\xf4\n\xb3\x15\xff\x19\xafp\x90\xfcK\xbdBo\xfb\xcf\x07\x0f\xd6\xf2\xd0*$\xfe\xc7KY\x85\xf4\x1eIZ\x85d\xd9_m\x15~\x07\x00\x00\xff\xffPK\x07\x08+\xabo\xa0\xaa\x02\x00\x00\xc0\x11\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\xfb\x8cRQ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00 \x00themes/default-16.tomlUT\x05\x00\x01\xeb}\x8c_\xd4\x97\xcbr\xe2:\x10\x86\xf7<\x05\xe5\xb3\x8dR\x90\xcb\xc9d1\xaby\x8c\xd4,\x84\xdc\x80*m\xc9\xa5\x0b\x0co?e\xc9H\xc6\x17Y\xa4&Lf\x99v\x7f\xfc\xdd\xad\xdb\x9f\x85\x15VC\xb9\xfc\xbe,\xfe{y\x85\xf5\x9a\x16\x8b\xc5[ [j\xd1\xfc\\,\x97\x1b\xa4\xec\xbd\xf9\xfcC\xa2T\xabU\xd1\xc4\xa8\x86\xd5:\x04\xd7\x0f!\xf8\x10\x83\x8f!\xf8\x18\xf1o!\xf8\x143\x9fB\xf09f\xbe\x84\xe0\xff1\xf3\xb9 \x1e\xf7\xdc@L\xdc61\xe5[\xf0\x91\xd7&\"\x15\x15;XF\xd6U~\x02Dy\x8c\xa9\x9b&\xb8S\x00\"\xc6h\x13c'*\"\xbc\x02W\x0d\xda\x8e\xae\xab\xba\xb6\xaa\xc6N\xd0\x15\xb8Q\xf2\x18\x7fo\xbdv\x13\xa5\xea\xdd\x8d\xd3\x1a#\x9b\x8foE;\xe4{\xd7Oq\x17\xfev\x13/b2\xd9Jf\xf5\x05\xe2S\"\xe2\xcb\xe82\x1a\x10\x98qS\xc9QbU\x89\\@R\xc4\xcf\xae\x9bNF\xbai\xb3\x12\"d#U *[K\xd6'R\xc92\xbf\xb83@(\x9a\xec\xda\x02\x84t\x03\x98\x1c\x9b\x82\xd23V)\x10\x860Z\x1b\xab`\x941{\xa8@\xdf\xfbS\xe6\xa8\x92S\x94\xbb\xdcf|\xf6\x95\x83n#\x99k\xbf\xe5h@\x11.\x0c\xa8\nJNMz\xd4\xfed]\xa2\x07\x8a\xbcLR\xe7\xa1\xb5H\x05\xc2^W\xdf\xbc\x84;\xc7\x0e\xd9\xc3/\xb29\x19\x18?\x06\x89\xd3\x13@+\xae\xe9K8\xa3n\xd5\x0e\x143\x0f\xbc\xbb\x8e\x87pn\xb7\xee\x8a\x0f8\xd2\x13\xa8\x0f {\xf2z\xd5\x9a\xb2w0\x04\xb96\x84\x01\xe2uW\xe3\x80\xce\x97\x7f\x1c\xfc\x80\x92\xc71u\x9f<\xb2\xce}6_\xfb\xa2um\x94e&\xa3\xef\xbep\x0bfm\xb1n\xcbJ\xee\x14hM\x98\xacj\x043~\xcb\x8d\x0d\xfb\x0c\xb6\xdf2\x8fQ\xc0t\xcd\x85\xe8\xbd\x12\x83+\xaf\xa3\x97\x95\x1fu\xb4Q@+\xc2\x90\x830Y\x17WKT\xd4\xb0}\xee\xed\xdd2\x1a\xa8\x9a\x81\xe2\xa9\x0e\x8c:\xf4\xdaqK\xdam\xc6z\xc2p\x83\x97\xeb\xd2\xd4|W\x84Gg\xf1\x86|\xb7\xf7vn\xf8\x90L\x97\xf2\xa7\xfd\xc7\xe8>{r\xd8?g@\xfa[\xf8c\x06$\xce:e@\xa6\xb6d\xca\x80\x9c\x99\xbf\xef<\xa6\xf7\xd7\xd7p\x1e\xb3\xf5\xcdK\xdc\xc0y\xa4m\xc0M\x9c\xc7\x94{\xc8\x7f\xca\xf2\xad\xc7\xa8\xf6s\xc0?\xc9z$Toa=\x12\xf7c\x86\xf5\x981\x00i\xe71\xdf\xf9\xed\x9cG+\xfb\xa5\x9dG\xc7I\xe4\xa4\x0f\x9e\xf7\x11\xe31\xf5o\xe6\xa4\xf1HJ\xac,\xa4\xa8\xd0)b\x9bw\x1e\x1eNT\xd3G9D\xc2\xbcV\x05*o\xad\xba9\x84e]\xf8'w$\x84 \xb5wn\x03IB\x8e\xd2\xd96\x85\x85\xe5\x18\xa5\xb0\xd2!\x83F\x1b\x85\x93\x1c\xbd\xc7\x12\xdbg;e\xc4*\x04\xc8z\xe7[\x8c\x8d\xbe\xb3\xd1=\xe2y\xf6\\H\x8d*\x14\x95FUb!@\xbb[m'\xeb\x92\xfa\x0eR\x14N\xd6\xb1i=\xa5\xc4\xca\xdc\x97\xdfm \x1ad\xa2\xec\xf1w\x98\x1f4N\x8f\x81cz\x06\xa2\xa9\xee\x9c\xa0\x8e\xc9\x05\xca\xc2O\xb3[0#\xde\x8c\xe4\x98iS8R\xe9\xd4\xdeAz\x0e<\xad\xe3k\xb2o\xb5\xb4\xe2\x07\xba\x84\x03\xaaO [\xe6\xfd\xaa\x0d\xb07\xd4\xa1\x14\xad\x0e\x19Jy\xdfj\xbcb\xfb\xcb\xaf\xaf>\xa0\xea\x8f)u\x1b*\x87\x8e\xf4\xbc\x18c\x19Zhyy.]\xceO\xc1\xf0\xe8,^\xa5\xd8\xed\xad\x9d\xbb~H\xe6S\xf9\xdb\xfec\xf2\x9em\x88\xf6\xdf\x19\x90\xf1\x15\xfe\x9c\x019\xf5\xdae@\xe6\xae\xa4\xcb\x80\x1c9\xff\xdey\xcc\xdf\xaf\xef\xe1\x80\x85\xa9\xf3\x85AVX\x90h0/p\xc7\xa8\x05\xcd\xc0\xd28\x8ba\xe8\x1dMGt\xb7a;\x0b\xb2^=\xdb\x113:\x0e\xe4\xbd\xc3\xfa\x19?\x9b\x01\x9b\x90B'\xa25\xc9 j'\xa2\xeb\xde\x0bD7\xa4\xab\xaf`\x8f\xb5\x04'\xc8\xba`#\xa0\xde\xbbj\xba\xee\xa3\x12G\xee\xc6\xb0\x8b sV\xae\x02y\x17\xf8<\x94\xd2\xe5\xe8\x8fxB\xce\x9bO'fN\x1a\x88w}\xcc\x94\x94M\xd7\xc8\xabM\xd2\xbf\xb8z\x1aH\xdd\xe4VCr\xc4\x1a\xa2\xda+\x8aI\x19(\xa6\x93KN\x8b\x1c\x89\xd4M\x84(\x91\x8a\xf2\xb2F\xaf\x88i\xef2=\x9a\xe8\xa6\xcf\xf2\x88DE#(\x8a`\xad\xe6x\x8a\xaa\x86\x86\x17w&D\xc0epm\x96\xc4\xa1@\xee\x1d\x9b@j8J\x08\xaceD\xe0(\x95\xc0I\x8e<`\x85\xed\xb3\xd9>\x9aEK\xe0\xcd>\xb4\x19\x93}\xe7\xa0)2P\xa3\xde\xe7\xbf=+\xb9D\x11\x95\xb5DQ!-A\xfaGm\xae\xd45\xf5\x03xI\xbd\xac\xf3\xd0zJ\x85\xb5\xba\xaf\xbe\xdb\x12zGh\xca\x01\x7fE\xc5I\xe2\xf45\xf0\xdc\x1eKT\xf5\x9d7\xa8c\xb2\x129\x0d\xd3\xec6\xdd\x887#9f\x9a\x12\xceT\xfd\xd5>\x80\x07^x\xfdJ\xb9\xe4\xd0n\xf5\xcbg\xe9\x1cN(\xbe$l\x98\xf7\xab\x1e\x81\xbc\xa3\x8cx\xd9\xca\x88 \xe7\xf7\xadF\x87\x1d.\xbfq~@4\x9fS\xea&y\xe2;\x8f\xb9\xe1\xdaW\xad\xb7R(\"\x03\xfa\x1e\x0b\xf7\xc4\xa0#v\xd9\xb2h\xf6\x02\xdb6\"Mu\xe4(\xa7\xb7\xdc\xd4\xb0\xcf\xc4\xfb\x96\x91\xa5\xb5\xc7\xb2\xaeG\xaf\x84\xb3\xf2.\xf4\x82\xf2\x07\x9dV\n\x84*\"\xbc\xc4Z\x06-\xae\x9eQ\x81$\x87\xd0\xed\xddsZ\x04q\x834\xdcj\xcb\x11\x1f\xa3v\xf4'\xbdlF\x19\x86,%\xbf\xfe.]\xcdO+\xfb\xe8,^y\xb9?\xc8\xb7i\xff1_\xca\x9f\xf6\x1f\x93\xe7l\xabi\xff\x9c\x01\x19\x1f\xe1\xaf\x19\x90a\xd6>\x032w$}\x06\xe4\xcc\xf9\xfb\xcec\xfe|\xfd\x0c\xe7q\xb3\xbe\xdb\x12\x0fp\x1e~\x1b\xf0\x10\xe71\xe7\x1e\xc2\x9f\xb2p\xeb1\xa9\x9dX\xfa7Y\x0f\x8f\xea#\xac\x87g?\x06X\x8f\x1b\x06\xc0\xef\x14v\x91Xm\x16\x19\xd3=\x99\xaf\x1fa\x07C\xb3\x13)Q\xf7\xf5\x95_m.\xca\x8f]\x95U%\xd2\xfd\xef\xfd\xe1G\x10\xa1m\xc3a\xb7{)s\x0e\x82\xfdC\xfa\xba\xdb\xefc(\xf1xT'\x8eG'v\xfdC\x03\xda\x1a\x0c\\\xff\xe4\x18\xd0Q\xa0\x17\xfa\x18x\x06t\x15\xe8{A\x1c\xba\x06<)0t\xa3S\xd4\xfa\xf4\x14\x18\xb9`\x83m@_\x81\x88\x18\xd2\xd6g\xa0\xc0\x84&>\xb6>C\x05R\xe2:Nb\xc0H\x81$>\xc5v\x1b\x08\x14\xf8\xc7\x0b\xa3\xe3\xd1\x80\xb1N\xc9\x8b\xba Q\xa0\x03`G\xa1\x01u\xcb\x1c?\x8ci[;\xea2I`\x93\x93\x01\x13\x9d\x92\xeb\xfa\xa1>\xc9\x81\xbc\xd5\x98\xe9\xf2/\xddbm\xacp\xc4Fk\x1b\xb9B6b#\xb5\xed,\x10\xc7\x8cqmL\xe1\x8c\x99\x84\x11\xb3\xeaQ. ;\x8fE\x8djkQ\x89\x82\x8fY\xb1\xb6\n=;=\x93j\xd3\xc7\x85\xc91^P\x1b\xaf\xc8y\xfe1bU\xf3GA\xbc\xa9\xd1\xab\xa4\xcc\xeb\xb2^:\xc7\x94\xdf\xc3\xcf.\xb1\xee\xe8\xa1%XIN\xaa\xb2G\xd3\x87\xba4]Y\x97W\"G\"UIk#\x92\x94r\x96\xe1b0]p\x97b\x8dVw;7\x1b\xcc\x8asAQl\x8a\x99\x17W+\xcd\xe9\xb6D\x1b\x92\x05\\n\xca\xd3\x109\xc4\xc8\x17\xdb)\x90j^%\x04f\xd2\"P\xc8J\xf4smxze)\x02e\xc0\xf3\xf3\x96\x9a4\xe3\x8e\xdeSL\xa0\x1a\xb4an4\x12\xc6%\n\x8be\x12E\x8a\x94\x81\\\xee\xbe\xfe\x16?\xd3\xdf\x81\xb3\xfeH\x0e\x99M\x0fo\xb4\x14\xb3j{\xae\xebB\xa9e\xa3h\x17\xfck\xc5W\x89S_\xce\xecGg\xc8Uv\xc7\x87W\xb3\x13\x86\x9c\xae\x8f]/\xd0\x1ew2\xf4\x90\xad\x93i\xe8\xeaV\xdf\x81o\xd8\x19\xea!\x1c:\xd8R\xbdz`\x8d\x0b\x0eW\x14w'\xa0\xd9\xf7E/\x80\xbc\xa1\xb48+\xa5E\x90\xf3\xed\x1bw\xe0a[\x1a\xee\xc0\x89\xc8?\xc6\xb3\xd0\xc7G\xe7\xa0\xcf\xdf\x96\xc3\xa7V\x94RTD\xae\xecC?\x81\x1by\xf5(v[ \xf2\xb3\xc0\xb2\xb4H\x9e\x16\x1c\x07+f\x98{\xf7\x12\x1a\xf2\xf6\xe5f\xa8e\xc1\xb2l\xf0\x18\x8d\xac\xd2N\xdc\xd5\x9c6^)\x05Bj\x11\xce0\xeb\xe79\xbd\x0co\xac\x14$\xb9,\x92:\xaf\xc4\x8dW\"\x88\x15\xc4v3\x18\x9ex\x1f\x94\xa7.\xfdsq\x95fI&y\xff\xde\xea\n:O\xdd\xee\x85\xb3\xf3E\xbeN\x89\xa2\xb9\xa4\x1e#\x8a&\xa6\xf2\xa4\xa8\xdf\\\x15\x0d\x07\xff~U\xd4\xde\xc3\xbc*\x9a\x1e\xe2yU\xd4\xf0\xbe\x92*\x9a\x9b\xc6\xaf\xa6\x8aV\xe4\xba.\xd4\xd3T\xd1\x924y\xaa*\x9aR5\xdb\x9e\xd2-\xb2h\"\x07\xcf\xb8x\xa8,\x9a\x8d\xfe