From 170ff3962573a8e5ff03539732d59ef3fe05dbd0 Mon Sep 17 00:00:00 2001 From: Adrian Iain Lam Date: Mon, 29 Aug 2016 12:06:27 +0800 Subject: [PATCH] Add feature: quit button, customize lock keys display --- README.md | 33 ++++++++++++++++--- indicator-keyboard-led.py | 80 ++++++++++++++++++++++++++++++---------------- screenshots/sc2.png | Bin 6985 -> 7720 bytes screenshots/sc4.png | Bin 0 -> 7752 bytes screenshots/sc5.png | Bin 0 -> 5928 bytes screenshots/sc6.png | Bin 0 -> 4760 bytes 6 files changed, 80 insertions(+), 33 deletions(-) create mode 100644 screenshots/sc4.png create mode 100644 screenshots/sc5.png create mode 100644 screenshots/sc6.png diff --git a/README.md b/README.md index 345b077..581faca 100644 --- a/README.md +++ b/README.md @@ -19,10 +19,6 @@ the respective item in the menu. ![indicator short][sc3] Alternative (short) appearance of the indicator. -[sc1]: screenshots/sc1.png -[sc2]: screenshots/sc2.png -[sc3]: screenshots/sc3.png - ## Dependencies - Python 3 (*) - GTK+ 3 (*) @@ -40,7 +36,8 @@ distributions. To install the rest, run: 1. Install the dependencies listed above. 2. Clone this repository. 3. Add the script as a startup application. (Use option `--short` for short - appearance if desired.) + appearance; use option `--order` to customize the order of the locks + displayed. See [Examples](#examples)) 4. Run the script manually for the first time. (Alternatively, log out and log in again.) 5. The indicator should be shown at the top right corner, with a filled circle @@ -49,6 +46,32 @@ distributions. To install the rest, run: 6. Clicking on the indicator should result in a menu with the three locks. Clicking on the menu item would cause the corresponding lock to toggle. +## Examples + +![indicator default][sc1] +Default appearance. `python3 indicator-keyboard-led.py` + +![indicator short][sc3] +Short appearance. `python3 indicator-keyboard-led.py --short` + +![indicator CNS][sc4] +Order changed to Caps Num Scroll. +`python3 indicator-keyboard-led.py --order CNS` + +![indicator NC][sc5] +Hide Scroll lock. `python3 indicator-keyboard-led.py --order NC` + +![indicator C short][sc6] +Show Caps lock only, short appearance. +`python3 indicator-keyboard-led.py --short --order C` + +[sc1]: screenshots/sc1.png +[sc2]: screenshots/sc2.png +[sc3]: screenshots/sc3.png +[sc4]: screenshots/sc4.png +[sc5]: screenshots/sc5.png +[sc6]: screenshots/sc6.png + ## Known bugs It seems to be a common problem that Scroll Lock is not usable in Ubuntu. diff --git a/indicator-keyboard-led.py b/indicator-keyboard-led.py index 4d73f14..42b4161 100755 --- a/indicator-keyboard-led.py +++ b/indicator-keyboard-led.py @@ -30,6 +30,7 @@ import signal import subprocess from os import path import argparse +import sys import gi gi.require_version('Gdk', '3.0') gi.require_version('Gtk', '3.0') @@ -37,60 +38,83 @@ gi.require_version('AppIndicator3', '0.1') from gi.repository import Gdk, Gtk, AppIndicator3 class IndicatorKeyboardLED: - locks = { 'num': 'Num', 'caps': 'Caps', 'scr': 'Scroll' } + locks = { 'N': 'Num', 'C': 'Caps', 'S': 'Scroll' } - def __init__(self, short=False): + def __init__(self, short=False, order='NCS'): self.indicator = AppIndicator3.Indicator.new( 'indicator-keyboard-led', path.join(path.dirname(path.realpath(__file__)), 'icon.svg'), AppIndicator3.IndicatorCategory.APPLICATION_STATUS) self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE) - + if short: - self.locks = { 'num': 'N', 'caps': 'C', 'scr': 'S' } + self.locks = { 'N': 'N', 'C': 'C', 'S': 'S' } keymap = Gdk.Keymap.get_default() - keymap.connect('state-changed', self.update_indicator) - self.update_indicator(keymap) + keymap.connect('state-changed', self.update_indicator, order) + self.update_indicator(keymap, order) menu = Gtk.Menu() items = { - 'num' : Gtk.MenuItem.new_with_label('Num Lock'), - 'caps' : Gtk.MenuItem.new_with_label('Caps Lock'), - 'scr' : Gtk.MenuItem.new_with_label('Scroll Lock') + 'N': Gtk.MenuItem.new_with_label('Num Lock'), + 'C': Gtk.MenuItem.new_with_label('Caps Lock'), + 'S': Gtk.MenuItem.new_with_label('Scroll Lock') } - menu.append(items['num']) - menu.append(items['caps']) - menu.append(items['scr']) + items['N'].connect('activate', self.send_keypress, 'Num_Lock') + items['C'].connect('activate', self.send_keypress, 'Caps_Lock') + items['S'].connect('activate', self.send_keypress, 'Scroll_Lock') + + for i in order: + menu.append(items[i]) - items['num' ].connect('activate', self.send_keypress, 'Num_Lock') - items['caps'].connect('activate', self.send_keypress, 'Caps_Lock') - items['scr' ].connect('activate', self.send_keypress, 'Scroll_Lock') + quit_item = Gtk.MenuItem.new_with_label('Quit') + menu.append(Gtk.SeparatorMenuItem()) + menu.append(quit_item) + quit_item.connect('activate', Gtk.main_quit) self.indicator.set_menu(menu) menu.show_all() - def update_indicator(self, keymap): - label = '⚫' if keymap.get_num_lock_state() else '⚪' - label += self.locks['num'] + ' ' - label += '⚫' if keymap.get_caps_lock_state() else '⚪' - label += self.locks['caps'] + ' ' - label += '⚫' if keymap.get_scroll_lock_state() else '⚪' - label += self.locks['scr'] - self.indicator.set_label(label, '') + def update_indicator(self, keymap, order): + labels = [] + for i in order: + if i == 'N': + state = keymap.get_num_lock_state() + elif i == 'C': + state = keymap.get_caps_lock_state() + elif i == 'S': + state = keymap.get_scroll_lock_state() + else: + raise ValueError('Invalid value in ORDER') + labels += [('⚫' if state else '⚪') + self.locks[i]] + self.indicator.set_label(' '.join(labels), '') def send_keypress(self, menuitem, keystroke): subprocess.call(['xdotool', 'key', keystroke]) +def validate_order(args): + args.order = args.order.upper() + for i in args.order: + if i not in ['N', 'C', 'S']: + sys.exit('Illegal character in ORDER. (Choices: [N, C, S])') + if len(args.order) != len(set(args.order)): + sys.exit('Repeated character in ORDER. ' + 'Please specify each lock at most once.') + if __name__ == '__main__': signal.signal(signal.SIGINT, lambda signum, frame: Gtk.main_quit()) - + parser = argparse.ArgumentParser( - description='indicator-keyboard-led - simulate keyboard lock keys LED') - parser.add_argument('-s', '--short', dest='short', action='store_true', + description='indicator-keyboard-led - simulate keyboard lock keys LED', + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + parser.add_argument('-s', '--short', action='store_true', help='use short label, i.e. ⚫N ⚫C ⚫S instead of ⚫Num ⚫Caps ⚫Scroll', required=False) + parser.add_argument('-o', '--order', required=False, default='NCS', + help='specify the order of the locks displayed, e.g. CSN for ' + '⚫Caps ⚫Scroll ⚫Num, or NC for ⚫Num ⚫Caps without Scroll lock') args = parser.parse_args() - - IndicatorKeyboardLED(short=args.short) + validate_order(args) + + IndicatorKeyboardLED(short=args.short, order=args.order) Gtk.main() diff --git a/screenshots/sc2.png b/screenshots/sc2.png index 67fdd9806ec050f9ea5cd14c5cc7300a303ce5c6..228adee2a0ce9fb84cca5b90a8e6628bcbf10297 100644 GIT binary patch literal 7720 zcmY*ebx_6;#OpFEl^}}Demz2zW2wQ zH_6SNBy(qy$vtz<+(dj;lEy?MLIVH*Q&vVo_0@x4%@+m!b-Y-(;eT~VCi2n}z{`JH zUS~<->k6uaj5Y`W(DDCca6m>D!RsQjv#g>d@?R8E1U{-A9$t0;AZ?PB5LI_yKF)U2 zdpqnCSW+D5yQxOqCWExr5PZSeTTy7YlVmeC@ zWOBNwQdvqeU5HAe7a&l*emrp+8?^QJ%hV$Kg~yp^U5nZEQu@t=AeR7?mBZ!S5@079 zAE1FTCTCDHboZ9O%U0UDAo1~8<+DjK!xXRK%~06sc*L_;UWhXi!3vAPsTWBoq)+dV zD^kr=pay!(xe(!VDjMP_9IAzz!&4HiJv)E3s;4CDFY6s+%*PfLBZ(=XbBEOsupZ}CkO1_x3CZd1@+@}l>eEu{KSU+0ib3` zy}Ngx#VOFVM$q*r=WdsZow9Oatv)ei(V>5fMr@NX@_qfKQM5wEvCT%Idkc;7@?2az zp-@VmAKindNL7AI92@foQ?f>+#6%2_6wtkK{@$Ad+S3CEFf#r|M?)*(WXPu{i{1VE z_n!`QFDkW~BDgb`E(i%QK(ZWTjF8B;xFFq==!CVm7k7xA9DI~OA$b2)Cc%cWu60A4 z5F>OgZ@tdc!pyn~hET9&XH-^|NEy)j8?J>Fvx02d^i&6Pshp;FChn=IltUr1yig$0`FjzpbNl8{1n4M1{g?_F}JLQj$CJl*x zd0_kkT2cu@vm11#Z^Fkqe3Q8uhyPk(KU7Dy>ltGPW#Diycv4R{4`5@z@YxWFBn~QQ z@Iq8gKf?J>IB%nOb_SCyi$FgZtO!5lpJd6l2gV)OXJ>Q!j){jGvlHlHAp4*x!b@D<~%RR z-O4<#JS3-qZ{hNjZop1DB2Xx*DcTg1`(&o)94?RwB$j{6@;o{X(vruV6+x(Du*4~= zseAA$`UQI*zJ0Nz50s^Gz$&3%nzFElUt+iH6`mQByhdZ6c5LY8z)qn&ioHvMV2N=|1 z!(xeg`Ckvm!t=PY1v`AQQJNa_^~z>4ae*GkD^zET8Jx1Rq~y_AemqNs>IU%eYJ_CN zwj&Gvuxp!&2|Xe<<)Gy!ZBo+Co<*aI5u17vYjz?sr%cMow~)JI?5#&;5naiCKS}DPB&vL zUe=sT15fa|ohAn7i7l$z&A21-^`v|_+NvIB-Q?XO=D6EHchN;VS0s&=bGI_sJaFbA zx0ah3q;3q-w4(od*VBa{ZZb?3?|~xL_I9?j-LCrak7U{G`->{4FPtpR*>PBdzbpH! z7f6|TmNGwi9%I|5sXi||%gEhCM814i%QRejS+>HP;VtIUNWY;!J^f4Jj9~SQ3{GEy;LDondQQt% z9HR2KOw(+pE!JgN9X{?+85JxYK$AfNAvKG5|>N} zyglVna0GkZ-jH*`{%(sgea%2McBmn%VoKz-c~{XLP!yLjW-j`;e5Iy0lZd|nBa+aU zre$9H+i5d6ND`@%S*D3+vs7oDO#gkLMAY=<`SJ(HluF8zaQ1^rK~;^}AylMNwlg86 zvE_^mUz}i1HVA3g?efO4@SXY`KjK>enBG2ma@0B;;QH`0?QR5DJX=Wf0tdca_$uW) zChTUK>s-O%RG5(HD*mELZMUWZ=MPKZzta8Hz*dXt+2ILl(`yL4keMi|#yVK9msHaN zFMIcJ7cg@}pL@F)L-O@^rJ7$!d6QJa$Le7LY9GRVD8FG*!?%xZUP3}p#JHRsh8Op% z!jY$I7U5s-?$Ja+!mvFK4ktX6ERwzJW9q)Prc@3udq|E1q9~4kIhPu_!R2l+O5dHI*)8zufwQ}yS@+lN(;(Dn@<09Xyu)ta&H z_|lJ+&BI!|Ik}meaE<{u@M^)%kE6?i5_ZVr7n&r#EV1%dzQF}1D}6D>G2KF8;5|>v>W+%3z$L8fGm@XqHX5r^yu8p;<9r=}jG z$%^lDS*|BY#EJAo2sruCQVpxHuSl4LpFDf+v%{2&vjpmV>N+k!nM`z!RkB^mh^`p8_uOAvn?<4QcQ}1(112sT>(E14 z+wj%f#uG{wO#Q%s0&?)CsYg$(%9VBsC968}-d<-pbZ)1~;1m>Q8 z1@<8~G^t}2Bw?Z@wVnTNj@c!2G*q%0qQ!v^rk9}1laZLjk^LAc)|{f6!i5mRyq|_a zOJQjwo06|UD}jS@prn4G64=J z2LTcXm`OgAD@mxLB?v%S#cB-aAqMcJ0N(`?g=xKq+y7OQyy016B~V9O+vCnkMKtDr3&ngxOGoR;_GSr%9(ueRvecA8Ox9zJ2`6ayPwtl*R1W zJR6MjO#vC8;ErUB(Wxj)I9vtaQv9e^S5}cyG)sPbZW8ZeefihN5^@qWV%n}A^>Q@m8TKc!^TwL*5Pvmy7+w4u=D=E%E(G<>gy}H0nH;>Dzeeu8X3qXWks_@QgcC2X=a5aM#?!c*`ql)T@M~hYFyn*uVdiHO2T%3Ymi>j7 zo$E!sCJ6(GO}91ctf6CBw-;=pUI|L8tYyWmcDDQ>0;|h@bY1WRF`i7tdy}1Vi9y2= zSQ5vI$l=5s<~Cha3uu^RLU`uRbWY8=9!6h2?S?PPs44xFQ2gA2?u29tSyP}y!$k}@ z$aDrl4>G-o{B%YzNE(ddf`>^H&3I=OZCD`U;YcJ{mO9 zb`G{=*3l=*@RIE+mY9e#=0rtPF=7;ceDVw{D;V;v_l5_iwNk=owrL~9!t)yT!;Lrs z#NGmv+Mgs$x%~5S0F!zY35#h43GRoU)TVHmfw_LR)bBAQ97f%ZclI1WoPj}{BS+Zv z-@mcCh>6k)hTP$BfVr)iXvVU_oS3~+IDx>8q84otqs&U(<_$iK7STo}>^U)1;R7dJ zT=mgJKrYX^stO9wLnY;9>q)cp3$+hzA3G@no60{n&TZxUebW%z@vkI(wO^rH$(wMM%h>4b1!&qu-6 zLt_N@`;F1qkWSNvtm=kCCfqs%L$<_W?*q4J7P|Dip3C`wfD~>9i;0uf7Ue1qb^>RB zJ$+2cJB)Wz`ub#bv|il6;2C$-vD9?+!Asbr=9`bFXeSV%^$^>C37Fgy!Q<39# zV8phPCuzESL<0Vz@t8y2*8JPt*4E7i9ZA29oYvDh=YK!vf^YO%)0Qi=qG6uQz6xB2 zNvY2sPHI;Z;-gK)T@orWv0*wZH=%&wdE2x+CtI)Ti*7F7EV#H`2Za)71?}2NnO_gL z8czweYsW%6Qb7mKzmLJ2N~GeM=fMW)$YbN;F%$Vzfg}FQlv%WLgp?FSMvEWw>V#?X z4#+;vvN;iD+i4$foLmod@IAvlH+yw*GqRTJeu%HAfYFH-aOb9JHE3`qQ$sV;{`6md z2()bd1qZLlCAxU@?;|MG>K}D|HAnfA+wE{&?N3q^3T9h1SXDXF4Y63Ms!DQVVi>SG zGMq<$`FMIX1lw4e`lB9W!pBhG0&ug3Sq4UUV)da{{y50d*9|>A*a!rG{!N9t&kbkr z5-hWd9#X}4E~U8F?mC&TS&5_40`YAM1W6^atJ-MM`FktDzV`2*G90vp$vFt4Q>+CsQ_0`cBBA47j5Ubj#Iu83y#aKK zH?+kbPZrh6VUtF@Jie#hQ52znrTv&5@_5Fh?z01hx6 z8k9o(JcTjswVU8ZSCl+QA_u}a5#cxfy6^=KVSjYy`IhpmyvoA>LFAEH)O}+m*)NLw z784N~llGe_0*t=)vc0-5Ioc(pVP^*snG%+v7HE84AYmC5@El81*_w01qN5{IpX?~W zAEZ{O8P<=}n~t9S_Us4}CY=ELIIP@wNU5Y!qMrJ0V#)iptIEQUir7u;_PyCO^?Ob# z1L!{J_;RCGH&vB@Ze$zQuG_#rwDAUEcX$YS;{yNss=I6O)`&g)TvVq_Nh}j!e{d}b zDZt@-i>9FzTfIfZs%V_@pX1}z`rz-7B4V#Jv%Xzz$ptB{`^F2(Woq2g>hi{M4JXuelr9Mai%kyTs{>9 z9`iM!DLG8KF>q^r>@rkN-Pkz&Fb6I!pKi8=d^vquOT*$B`}!81sDQA9R?$3f4uXcL zVvZNSBh=Qkg1j`Q{DTp${-0HQFNf#!;t8v>!XP?vtfN?3^V-~_H1%yD& zlRp-&PKlp(1Ja5Aj8vFQ{2a7jSwi1#qv8Lau*yc$)?;jN9pqAcKHL9}m@RH~Et8b| z$luF@Et~)-99Mc?XOPrKjXS?= z2n9PGKTU*nR&}XcXhBzU4C6XnV~md$1Jrh+3khL-yS}=eyG}GeILx6L+y@*54>3QR{{m%pj#wHJpJ^MR3X28A(N56O zKT08iW?V;9cCA#{sv!6jngqW(MCUTVSuonOHd>Lak*+jn^xI2DYY@6K>sQHgRg(m zV@+7Ebl5Y`mbxz<^65#A0RXm>>!`qrhkJcOs>MhEkof6vCz~0eJNuFu)Jf+by$$ewP8D~=!PVt;tN3GgEzgu}n@gZPPQ znCqo>r@0DeiPMCXV41thrZvr;4&JGiKn*4|2{JjrGk87;s}%R!$FIPXXpxcwSh?POL9kUSR z0vCgOX&tLzrX{bLd_k@;eH032qzu~+j&U;_RFv~c&G2>oxi z@{gHLI=W$PL7NbXSOB0G54rs_;bO=l!w8BYoR$5zCyGzvbAI%y@0FF^$e;n#xhVw} zDeI|`?Kgz%dDZ~3B?+V=%n%%I@FbAY;IyxA7>lx9UO3nNt`$jY(Aj@wi1qCussUKo zr`J1#nM%^l8T&Ysol?$S#A791k7c~+!k^wAEBl!K95p8VfWExd;nGUKK(to(ifA#p zhCb!1m>Vzle>5N4`^-Yln8_f@| zx?RpN(OflCf2a5O+#@ovk+&r|9{%KUm-+LhB|*N0I@IFAK$}0Nc`W6ei@0nUB^6&W4|@O5>q?t4MZU6R+63a3BOmrlnr%h2 zOuVnPf`U|ZK5`(6Jg$0dflKX4ABFe~CHcZ11NF<^d8Kt6TV>s z0PlhDv^Dv4yg3>n_YVc<+8X~iM$G&j<^yXcTjKE2&!SPGug6d|8Pgb04YymTo4$E2 zLiSu?wqrgDa=<+L)1&L*J)`OP&OtkwbEXeoI)}uRB>MauPh5`8M&|O)X!@3B9UGGB zNeR2WBbFq>^LMc1JnEyzU2j$6N{w{DuxE5Ayp151dku2BNmh8L)y#IkcVQN>OU>H3 zrd#W|lyqW;;XW)aZF3a|O%bdUy;Y-U$#aWQ(734~Tfbi2gz{LRn9wRkI(*E)dMGud zT%@^zmRM{VC8cnYnWk72%lmKa43zw5PfL`W^s}mUy&~>R#v4j3DUV3c`zbo+uAUdd znSs@St!}s1BJ;iwqp)gWSC02~sKk9-ZLBG;mC&04v1y6FDDWv-&RsHW<)4_k6yD^x zj5awYuuu~eNlNDmx|pC8cQ+`0TgdUbzuqUDqpI(e$#k*W-Ra^=qUK~eSsmu^ay?lU zX;xNHkgzWKy^`86l84j}Xeaw{4IQo8cE|P9xM4dc z>N<|;E_da#HuBN2eiG{H&aoL?4xab>D^4D2KYFPuIe(xHsCETV-Fv1M8!-9sk2PAF z{A*D*@OQXGeShs;_kV2hANBX&yt8U1NC*BezKglnhMCW#cIROIC}~gugzdK-qdlp*5d4g2gjc z$f1NMC2wJPNN4I@@}#+OcA zr%3cW1k^^lK;YD5_(%NSK-6SU(4HJi{SVXp zd<|w?^Jg`*Uj}R5%Uignswt_0^gSR~gAE8C98emsMN1K!7hykZ@)Q+8IfoYk_a{(@ z?<$?Lb(eA;SU9>2hA9k>wX#9}@j0D4RnK-iSrgCsS$?=VPa?nB z-opX@Bc$qEq-ZRHkqt-#rZOVb+A4 zRFm$<2W!|S<->`n%ThyF?kvT+wO?5v%$gnW7qVw7U&vA*@=(4CTCl;NR@WhyGF-1t zV6t}|>D=akfOuc7f#y+(YAu@l%ro^G65Si^J=X=%@1b(XJ{1_Lu`~2I%rmqMYlah) z<;GI&&anq&8LMd+-w*UUXRX)ZaeOX6ZbMZmHN)@QI#XxFWF6jR`1Qq~3l1F}eN^cM Z+dhyJM*PmQ;`L7#kd;)Ds1`E{{2w>L8PK+t+k3)MX{}b+w0Q$^wHL;t+lJxx>k!z z?V?s|)mpVy5nStvJBlkRL3RXzKo&@t?3uamAAt}Ou+-KCpZR_A$7Gf}XYT#Zz2`0` z!KO|g12!@m&1L0PYBfQU6wsp8AO-_>7C8C)dvZB!%O0j)Z?qmZnaqX7<-XqTAwli9 zTn<9WF$t2QkVZU^4z@p9oqY`SWEz5 z+VW9ZrSS1`_x5tH)96)oTF2|vYC>AA4DTKm9v`Wn2p{UI-C^&cVhQGg;v%ra_ z;duoJ$8jGoHvlB9lKcC4*`q@c+Q1jQ35~AVi?v#vo4e;%UoH@dM0SVda{0I4Z_sMg zJRXNe;qM9|^z73^lB7mUx{3tl6*3DmjL?wI2!Z7zlh=sFuFbYn0Knx5=6^Pi&*uX` zb#+xq$$gnzhA2uP5b*i@m-_a(cxKK#y51l}hy-XFdaKvfWtwR8=e7 z-9!jAt#vGLwUlbyh+#}7Q*Y4k+_|fuu+X}{eL%p(3FCP@UfhV`X$Mki4%%?tgFAN{ zJE<4(XG*4=wB2rshlQC&bSxV!RXG%ex^)c!fHP;$=NA;%9x5&=Nk4mj*wEPSVWIm| zQ~ufWn`?`U%ginTfu1hR`g9Owlo#EvX8Q%dz-Rnx?#16NSd&_=kk@K7MhXC9a(K>e z?mn(u2KH3wL8QJ;Dpjg9CK3P`EGK7?uaAg}|MPqibRIA;`p%h@D+t+cJJ{KXjvYXb zVltULE*Ah578W|5Q&3O<5X!EqGw@ICa^?AYYe&d&IZv&LjXJ4f1NLbNrky;`)Sm@-Q%|%On}c z_8q!fVW9pQkuA}KNNr6MlU!}MK%`d5j{Z;b{|$-o<^zyKWp3u-9eXZRnf|4GL4XiK zw%aYCV|%D2bO1vQ13yOOkeE)VYuJUgm;wL*(kto&1KwSo&^O4Hs=j+_$9Fq!7=^AZ ztcmSDBbG0!dgqIiCLy1RS($cE>nusTK^YwJ*-~fmus;jE%Ex{NZo~wt4hcgqm z+^$AeA+OV!0mGO)ckciXd!rDd^olx{S7*&n>f2F7$s{MYuHJUdAar9lRKuL^bJxy$ ziMV!fdrFCl;)~mNa@QG1gpdU*g;YuC%m`z!T)ce!T`)pcU8U0L%?JSFy88usa&Say zYUEXNLPrA5;<qC-;1aj&C{Mw8_bNs@Yl(e9|pY_eQyFd826 z;vtF@y|HTDxOSGWFGR+Fy0PQBnJcp>Rzvn7KnN)%r2$h{Of8An3sB2Iq(<)4)#0B|FgpWf-bWzNb>6~bI1-uiG{|IYp*4hEntPT!SU+J5M;z9Al5 z&=jBidHK&*DFF*}H0jM%tK*Gl_iZ{{&G3sJ^})st8)vS#Wi^SS+(v&kxwGQb>czVy zM1AgDK4Yniy@!0cVtkYr2LrQG^5^E{op&iG7KRDJ-s4)+af_A>iRk3c1uzt+ zE?%B?zfMWG4f<%w!~sDfhN1FC>c%y{-ZgnRGn>ApHrsaI3j+JjIdZH|01$$TN|{h7 zY@h^bwMM%-UnHu(kRS|dwaVAWqj`3C-KQkBYmzuCZ0eX!AMPq4vBp{lRh`|KS~7Fq z{7-YIFS%+KIZ+5T7+3!`Q1$mi(0Byr_(z2KNcXPaQlw}3_8K!`>TK1m!zn)>Q(`{- z5)$5@Fa2;)x)NdbCQXj#99y+)e~AGABsuq_jHQ#tbh>Lbi4iz*n3pN*`-74?%06$* zM9Jj?o6aZ+N)XULaqPSW@;OT{)FPbc-=n)vb?V0Lg*t|7$G-6s7Oii$6xSQBc3$9ct1xY?G*g&sNGz zX0tGU&H5?sS!tWs78t}mMVP6Gu1fHe90zuVnm;midi zXMS|l&}fgk>_QXVDLB-M!1@yy1-|F$DhY_)vNGK0$%QzyqbqJ+&``&>Be!yQ1it@# z+dYMb#u)?v0NsOISF`FpMZ^i6HZHLG@WSs?3Jm~ow?OT-YR1$dDW4xzG&WK|*>2m{ ziwFR4WFspC6on|tx|{O!5ZhHwHMOdFpML)FXJ065YVDx(6pK*{GHK+sl>JVfLa8Gg z@6|xONqTz2mg{a47L51S8%czarK+)9ZcT);+S_<3g%CoNzNSizoIIRx%QuBWk9a~Z zG-HyA-M&4lRS*V)L9dqAaf3Y#HYQOx6A+?|Mzh1?PzDXzY0UifyN;YpKX+os+%UkH zY`mdjY&_4byq$3${KEY?pf5RoAe%Mxo1L3J8`s;zP+3KoNc&{X8o7$oJ`kytgh8*@ ztL1gPF5X5(jZH2Yt1fQ-e8$X$8`2doj9#?$!1h^@peGq#-8*wM*;mW-$gWhuw$f&L zb`P>Wja21az7M|P?RbD%a+8~bq#1N04GnLt|PRyDkA;N8HX%|me8SU zZ>FZp8U`ROCzc#Jl&7WYVWn)Cpv*N_wr@PojQe6zFb6{j5TX!;fFcowBa%cEg={UQ zEO!P9S<*2XOn~8FNtU8aCWK)K8gEqpslAzckv(Dg+}8pH6u5Uyn7{B9)o~k>%$h2h z0eJ94^4@%x zfpfpzz5U%V7ElyrmrFPHU*Jqi{&;vtXN0+jC4IGIkm}gMT&+F0%7V)WwtW5JoFA{d z5BubUo=zBpi2)+@2FkItZOQ~=FaUtmHJnD7bp`;y8Cau#V*?#(EjpCdA#M8jw&>Q> z)Lg!r8PmIWx2~ZXmosZsDrAd;WARwApfowVmaa{^CDj1{B1$uMEnj)C%+PSVhSIOk ze2P-v-nH?BdEh&*`&j|esR-m2;9RF72#rpoHCl{oG?=nA-ePh6erS9dY(5l`vuoM9 zi~JE^tlzP1?VK3mVDdK&CRu95qO;fP*u5vlI;$(?YBixH2tuV)R4H^!|L}HDxaXI& zOLz0~b0v8)6GC7y9RPsTC~Gx@R#U6cd-m`{vI3c&qKulFT1C;d!#^*5|NX7^J%=Xt za={STp+-o4TfFvy)2M};f8Y7T+8 zs56jFwwptTN!hs`EqKZ{^uXyeXNfw^&>@3}I?dPLB%eQjVfe6NO;c!jI>My5wSV=k z{SO&fXsEa>PEYQ>O~=DO87!`^4NbD!S05ydp7Ft`4g2pXOoEQCI3h8J>dxZIHTh=U z(Tqu1`&VZ*W0J)LLh{Ei7ei)F{Ncw=ds9x`F0Z3_9v!=fyWBc(r??u$jeawx^zgkJ z6JPAY0IcEd1H_9=NE~?d+I@pp@1z;Mu>2io9vBer8W|g9%FmY)m}_t+S1=aq%@m># zhGD3wNjLYdyt%jeDNyqcEryDJQEJj!Rw!8~0?E z>$o1?SV?v{vg^H*rR`F>b?S< z%{E~~O*~6v-@^g`s)c1b*0b~meP-sh=w3ZtMIu*`sB37KOBq*Q9ry}|%e5f~wRQ-~ zVU(B6KnQ2!jcI7^rTm;8H7|z6!YD+6sqDzN>-kg1B!0AX0szw2luI%dCW=A`V{jM< zW3zxl6aX;TIKnwhpeO`@SZoY2SPTkLt)67FmKCYIy7`MmxuZr78Z_1tc1KE%79q&}ZNW12 z&ZOkaoN#8Jk*Lk@a0Z@v| zyAQ<7820hB?DtmPvDwbjIrOlw*ugJ1F1nD){hIcxEq9yw-t-QEftEe#XU^_VO(ir2 zCX)dGCX?C4ng4qHsQ&%?SxzV{EdF8rhDRCIedg9eJnEGU&)Bb$$I|#dFE%cTdIj3TEO+aEQ)G=fYqAe_9Xn}9M&_kJj23_bq>pJ5~E4x)qAf1ckbNH z&dD1UH@r{p7p)29+{-_8I{o%tN%wA{EqP1N&GdHbm}9UR2xBp!VJN7D;zkHCJ09Bv zJ@rF^luiGsal)c$+2ag`Ww)27$7l0C2xuQ*d)AwyOv6#%ZYdlVuA1xXk zS~NOOGe3lpNi*lfw`bE?L8J3GyWc#&uAxC59Qwx>o+>(+bDvMvZ&^M*+{LCK7~XM< z*Kd3;l>0dDwcurU`dxT_Y8`RE_ht?aVAHSh^QOn&IaKA9d5@emzI@@f+iJUIR_u{74@>~S3!A%khSSc^7N4!5aAD-wx5q@b^K@Zj0NMxFj-8cyNB8N`$(;+j z^31eN+s~C6S~ob23xWqHCdNj#cfk#^d*{;jq-0jsUy3^gy*egoNY6ka6X~lme_OZt zs;zlGgWvxoNpxY=@_iBw{WAseQ5i)g+_6Y*OK1;$P*TS zf2D>5c0k+*pN(+aQF#E!#8!`%V%DGWdQ^NwC50=;bRheQ=A@Q+3 z%9AVBr&&VuinJa}rp5R7y`J`f9TFewt30vdyS*iLQA@yZju<=sKi$iJTedYrLC?%Q z%^sGy>dcm3ZV89~cXWv05u6@mRLM2KcXwg{08j>Htr56FUMo^!c?7p(>+-WI>*1j4 z@^4jwxU)YWV|fO*W9#y7S30f%<@TKN&ddDEKmB~Vk{(!p>Ya0{Hgo%y3yl8nBy_cb zhoTVR%vRVyn#_PV{6Y$%%p_o~n>Thi2idHbX(<8n{?#m{Q=dtRz1$cyB2Rx@2N9Cp zo6eegy)nqkT0~m8281to@*bNNCRzRiGcTySPyG-d?%X-T2NVV6I%JX;Rgk=(FdxU! zKT}o4=4Bf%kT1S7Cq9Tz_YI#mIsizUm-f>sWn)p0imc2^Mwg_w;(CXNhIH%JN%RlR z;rn*!8XDHE{uAWQ10s9>ajDzj|NeJGRJV}s1Cpjs4kd4=ohdf~BC^xczW?S+ zk)gp|dql^C2(6WjS#@js>OJ?|2hAKGA*9EOo|c!5Ag8nSfS#ECZxf4ruqdsz?j1;WF-d3%ZJ zMHf#@EGDx`rpU^=OE*}wXkUjGEgBtKG&;0sbZF7&(4x_yMT- zK?l>&=scR}V47CzvCo`iY|n_;5wG>_)=|vEz+6{Zc=K%P@98DFe|IJtbMEu;%4zJ~ zA1yhnpy#-s19UKMVEo*_v;BWi_Ev^4eblB}jz7-cxb9&A4 z-z1v)RXFv3z{Bu(Y1)Sg-95P&kgCE<2Y%U|QDH=Y3nP=>8q+ht%Y_Yqh>E-C4(>g0 zz1oNXFpmFA2~$S)4iw^GROKK4aaCHWu~ls{9Zb{a(BTHg_H!pCKd0T(IIP~H>IyUV zZ%$WgkRYJnxTJ|QR*0pbMmq;mv25&)?y-vLiN9IZ>%`J_R~++q~7E7oHTdo(#a96S_4l9)3nKP9er{7 z4Gk-7Jb0{WvG^%+qL$q`6-p| zF+;iw|9bF+4yJjG4vFm-Z*Nb5fKQVDmRD$26v@QB1`Hb1vppAZuCu#WyWq%vuXZ!% z7BG6g92v+{%j$q9bPtS*=?b@xT`1FIg5UuI!u&;SBgJs?41FbOLbRwTZTryzE$$vM zDB73H;5do>LL;NQiK{RCd9|@U!8kAU8{E@bStg}Ko*rJF9$uavLYz=4t18(&h7RrH zk7_jxap>T26MH#j@7{LuzMeAG$een{4vy)-(d&Wd=HDsEm8ej#f(8r-Qe8fJDf`wP zZP06RgFVVG-I5v}&(HQUa9pF+RaI5fzK(;hqPn?d;flPt;e(=IpBBpmKze1VBtwE# z9Q*!Pmq{bX%)F1hZcv}kl_(df{k(V<17LyOjPiViM}c=PRPgMC?c+mGQ!bZpIY zhK`^^&z@nvJlt;kUl$!))3P4xXfn=g7c(YtNbk;KE&!>mF3LK!eaE?SEibibM|p05=-{li4wf zCDRl#dQw84Ab%knz*u@DdD;Fl<3r+L{y}3$$JRXS=$LEEWYDL}fGGc>OAqw6dEHzT z3+5ge(bZRVeA6~bE%4Yia?``&U>==kI<}?_phLfzsL)73U4V6rtFd1P&&4zjr6cg)mL_WIqTCUo6kwz`n@xM<&r7A zJecs1zl5>XL;h6ekqx5%sHQD-&XK9M=<4z9s~3KxdPRLfB;O{%Px<6s(Ww<&A9RW#DEHUFX>V=xW7-O&Fe^zh_! z`OdE10U`ZI$480v*VB&Pkjfqs#d7RMgEwJRN?VA7LBRIuGcd}Bs>m&_RD*Zpc0)vH z8;PxH)4?>44;_pp^zInev+sac2K0^Y9o0pw%{{ei%f4(CiOkA-H}cKi5&d6{9S{=} z*}-JTd*%lqYfXL|RKE3Nd;f$=)w-t(((uBXT%A~n3k+mB<@)h5TjB6GD4m@od9r~YX zo~Gzv8d|iQOp6wc4z0(nW=50QY!;m_PezDB&j~sLfk3U+&?WjLB@znhOrS-J7A;z| b9-sanjRgg5ay3_z00000NkvXXu0mjf{<5fk diff --git a/screenshots/sc4.png b/screenshots/sc4.png new file mode 100644 index 0000000000000000000000000000000000000000..8852e6243cbed2aaa0a0ab3ac1fa6cfdd150559a GIT binary patch literal 7752 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 E0QLqDtpET3 literal 0 HcmV?d00001 diff --git a/screenshots/sc5.png b/screenshots/sc5.png new file mode 100644 index 0000000000000000000000000000000000000000..ca10484115fefd6647f6d6552a28f0c11d4575c7 GIT binary patch literal 5928 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 KMNUMnLSTZGl9_=3 literal 0 HcmV?d00001 diff --git a/screenshots/sc6.png b/screenshots/sc6.png new file mode 100644 index 0000000000000000000000000000000000000000..b7db313c51e5ba18228d02e06cb941fbda2dbc70 GIT binary patch literal 4760 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 m`f%~8@VHzb2tN69$iD%xc#&CVzSQmj0000