From c0719fdeaaea94e5d8e90e8cfaf0a5b1ac79d9ea Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sat, 17 Apr 2021 02:08:54 +0100 Subject: [PATCH] Add simple captcha --- app/blueprints/users/account.py | 16 +++++++++++----- app/public/static/puzzle.png | Bin 0 -> 23027 bytes app/templates/users/register.html | 5 +++++ 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 app/public/static/puzzle.png diff --git a/app/blueprints/users/account.py b/app/blueprints/users/account.py index 780a6a72..2841bdf4 100644 --- a/app/blueprints/users/account.py +++ b/app/blueprints/users/account.py @@ -102,14 +102,19 @@ def logout(): class RegisterForm(FlaskForm): display_name = StringField("Display Name", [Optional(), Length(1, 20)], filters=[lambda x: nonEmptyOrNone(x)]) username = StringField("Username", [InputRequired(), - Regexp("^[a-zA-Z0-9._-]+$", message="Only a-zA-Z0-9._ allowed")]) - email = StringField("Email", [InputRequired(), Email()]) + Regexp("^[a-zA-Z0-9._-]+$", message="Only a-zA-Z0-9._ allowed")]) + email = StringField("Email", [InputRequired(), Email()]) password = PasswordField("Password", [InputRequired(), Length(6, 100)]) - agree = BooleanField("I agree", [Required()]) - submit = SubmitField("Register") + question = StringField("What is the result of the above calculation?", [InputRequired()]) + agree = BooleanField("I agree", [DataRequired()]) + submit = SubmitField("Register") def handle_register(form): + if form.question.data.strip().lower() != "19": + flash("Incorrect captcha answer", "danger") + return + user_by_name = User.query.filter(or_( User.username == form.username.data, User.username == form.display_name.data, @@ -168,7 +173,8 @@ def register(): if ret: return ret - return render_template("users/register.html", form=form, suggested_password=genphrase(entropy=52, wordset="bip39")) + return render_template("users/register.html", form=form, + suggested_password=genphrase(entropy=52, wordset="bip39")) class ForgotPasswordForm(FlaskForm): diff --git a/app/public/static/puzzle.png b/app/public/static/puzzle.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9fe0ec0d96bb8b1df2efca5a68ffd6682f8a6b GIT binary patch literal 23027 zcmeFYbzD_lyEeKAX#o*QNfD9m?rxCoUJH=!?vh53ZfWTTX%LYXC8Rs0I|Rx#6U)DTW^?@ts!Wr^RIh6s(^)Hx;XPhc zh^?%=`Xyg2D3o2PvT*QiG&?NT$z&sMMXLR-wsFep`tp}gcb`>SYXTWl-9krIwjayR z&GqeI$O0Gbop>tOjZf}TyK;Y}VgAK~4J+;H=n5gmu92TEer5R`cMtAgoi?9uO0?g( zsefn;!IB#(%E!5q2{6P`{$+>;JuW7w6R4k~c$v42C7&#V+|8ORLjeLY{^6M>6jCqE50!!;aR<5X=G9jS+bBx~b>#--vZ% z@{ZX*+UFcz6Gi6V_`u12Y6}UI3Bml76p^3wexvN=t3E|PYW$t%aqBwr@U>yp4ISA$ z9)X)S9;xq6)=9sv2}a&OQqg&(!#0qw`NRZ4NQaLgO(j1<`f(zo7>ur*)3V&s={Q}d z?t_KuM1`0+Q=98{xz#~#te_O>1IKq`p)rD=Qxeh@EBJZ596K|T%C$JEVXx;yhaY%r z=-14Ao9H33+HV~Uec?L$@rKkZ%h~^1iIgIr=QW|ZL5}NSxu$K4=M9OQuPZ}{rmo-B z-AP43Y{hz!s&9_3YqYAm5aZhn#ZO+6eU1vwdTj_0UawITrTUGf@{_FIx2b6T`~~h# zuE#NBU7jjQ>4IJtnw!2my2WSrJGysUdWVy@B$?<79~YhXr`mnK*YDxBnxHC$d1JH{ zS2O!QwZ9(n`B;2=WOZq%^rM+BLo>Z5aFxKQN?e7&jX{>oO{h3E5y@tVpY|E|O*}oL z9i`i*?q-vUjW8_Hu#2U^i|%&BT``ATC*_9jwDzF3tbBEzj4rW#9BQ#ZtGCy@c3{xc zmoBdwA+emsJ}mQ)0iroknmtp(%jo)?BXds_-z^iz_L+HT8*bL?DMJq5K32nN*_ty9Pg`&HGH2woFxSrd zFSeJS_FQqIXOoe_u5@pulx8$5%AsP$ zg6uJa9xM^vqsTWAdHwswQc~MskXQX!V+>nTfHe<^2nlt)MVeRFx5*E4MH>ZAOQiVZ z9nagjRN(}+Wh)EuE6q}5^Qya+@b*7WNn8wO65HkTy@2XmOAHb>(Kb!^NLJu&@{mKj zjS4M|kd_{4*FK0aUEgiyHMNEAzV_)z+4^GksyE6ql;~^f{(?PK8l4W;s1qNDHa(gb z#tU3skF*=S%Ig4GyvcXw{Cb+P-Ohu_aL7l(R^}K((rH%KI8%BmeQ5Yaxj1K^3(Dw3 z^_}^;1(K&zs~4uZTsA}^Gco1~qe;^}VR2oT82irj%&+4c8hWM{_%ULAw-0&iU%(Xh z2O1vhr+xgeqwqkD-D>I)7KOj7AW<=jZ()!cft*q;$EKIbabqQdHSsZH_)P65kD){H zls8DJGY0j;nbs)5;SW9%7D94f9|_ZkBoN?V^LiN`j(oyk{zf0h5fsW6l%h{;;W24EJ5iG%i$F1OL=mJ#Cfi|!xwW6%_Byij%T);wsW^TE$q+o zoDWImhP`2SBk-1W);rWIRQC2OnY3~&#(mVZU70t9%W|&YdYvcbe9}hAu4f6e)n4{O zpMKM4`|(x^!hyg+sFyT^G>L?(>t{KW>7V>IBHg{qzXr3K`;tF@aum8C9z~qxK9^VS z`;io3@?FfUps~t|AwRblEMK@0xNz5EP^u;TBhL6-Y^a`pgG(}d`1FU7 z1;s6E)d6r{x9&XgtRSin`UFzye$H%D}{(?KP`QI!$+)6mRwyiiwswhepg((7&9Z*_51)m>ZPQkM_(i3oW%@;&u|A7 zDo+S2&Y$+Zj>MXv^?ARa*|y{UPCGx)mS#$GFGLtT_}0U%zT$uTH|WGm@4_)>{`4wcNC{l%rn%aP-D8 zkUoL;@X@2X-(8|(=l!&_&W5fr#2qn$HT~E%RT(1p#u=W`BtigJk1O?%61Az@{qO)S zpKB{!oyf!hg$<=TlF~KO_-wW;_!?5kiH$o#RKV*keC!C>K7Z9}+*Lr#sv+yfjIK)Z z-?tJ~kDKDSAYC{*fX@g86y9^^=g+#q2st(`7T~xJ4 zuS-U;RG~X@uHulUIG*IGG=XNu=^)i3lL8s5%?YGwC_WAd=0aFu=0=zCBezkxQ`_gI>FSsvRK9~S1x)HJcqXfZMv zE|2AE29sy^jiRM0PUc(EjtfO3TmH_)K{)#Y3CF~mJ0a?gM;OX0%xo1;vGFXmG=v;c z`hElq=ZU3GAFs}1vZpA<-|aUmM5Y;7F^!K&qhb+jfa{CppHH3LB*wd zXOjKEe$#Y(jG7cVS?W#meBo@r)|{X*dM4{(p9M)d_9aePbg-)QT}1gyb~}I0{Kz-Y zW7qT9dk$i~o<9|ddN9T1pq;X5g8y2K00ZvR7iEz=D;xeV2yIVZ6i*;G;@DkVs&FWJ zb3YEy z_YlJH9$J=(q-ya!q!-BOPjK}65PAA>JW;)BFp7Mmn`C3%iNw9W-d@5Mn}#E?T#?KI zd3^q&&x+rVAE4_vqzA%TKe%u36B+)__mdNu#URo56Cu@_Dzti&h$}oM#O3!#C z6ICGD2+v623zNVDJ?c6Ve+8~)LZZ>rK`1c~B?=GzLtN?y@-BI^#DXd(+I`6sbZbWG zBZF@q(&@7oEobqnWTG#RGYE#fz*&*~^%B1B?DeJjDpt@QUnucQTdmhx1nr2k@(b97 z7=roX`1m{I$W>ZssO`op$`0bZ-R!JA;>(d#LbIijPi3_qnyy4BNxWn#E9ZVB>b<51 z3z!ocd;g%+wG3e~u8X&@XK@YuDNH@??0(<;xQ}=%YOd)n3e#!>umydRp+z! zcT>+}pACB>eBs!hv#Agm$1W;ncY6{dV}zX{bhkLqFNu#$y%fYEw_pGD>P=A?iT1|1 zK4u^}i2e1Wd1#zu))Drk<$b&q&eHDc)9SZ4ny}9#5uICRz5c2hKd>d@LM9A8zYmxU zf$x{LF?xj{mend3enJi(NZ0SmfwGFzcjRV)rIYKLa&S zWCU9=^zF4lO7wDd1fStOUqBeq^+Qd&6$$H>glG?`>=gT_$Kq~?2`pnI#yZS~JA&^v zhz5c7EOhqqW#ylq39R!U;zg73TRTp{XSh zTq$4wGCH^Ct|s(jM04EXr$?*%J?PuJVG1FKzG6_sHfJ^`A0@iFwjq?UNOh zJTAM-Yz&R=7VSQ!?v794ojWfvaJD~%z{dH%BH&yJBUpuQ1^XtvsI^NME%%z$`CjXG z!4OEwGG2_VB>qM7gpG4pomsvY(XgX*#6ui+T8=?>iWf_W zvHr$_=1Xv=r?sS4J>CuE?Me}kE#hFY6OSQi{rSoaKHk__s0+4Hq>-dr*hH+FE~ZwB zr35u>N}aEnpMR6fs;NpJLbV*(t($q_6krdd(jr%)Y4+Fo5sOSoVSgD4@AK@Nq%vaA zprG*c+MF1vjniT!o|JdTLra2c@!JIL`Z6PU?BVaZM+7Dxare}U2zL#~X7x0F?bNC4 z*?!&PYS%4X_P~6DSl*5MriK)$N{-@tUGM~bZcJC?VX!hA5;`T54Q}j{c`n`!(>(9w zyq4TW+hhlFM5!O>Tr$|oN*w{LOA{7v=u{!^K)LZ!rleAulc!eH?6Pwb^E7l zBT725REpci;=$>1QJctXjn3sK@UeVbi`gfpScA_p6*}6x;3Lr^pM{qTF{m-J6BBD6NO?xuuk->^|U zQkpW36>C8+A$;BSFkfQag$bhfEEOp#wC|IN(|B9uWT5;iY6{zr;mF49tL{;W#heG_ z6*Ij(_(8rcb}(a%ebn|n8ncraX_V!y6=FqaA`bbhGkxZJ-5I+^%dY<6r^MFIY4FTT z%aOrxU5ArXC7F)OR84Sbp-EeM=fwxi=}&}5T5G9=M|b!Ap9&vtMIJ~9-P5aZ5ZoY- zeo__idj4d(Qda$uD*eUjE!mskI@zJ)z3sL0?Nl7=wvWkV?<(`GWkE#u}D*qw~HO~!q8KR7B|hlYClP1Z>a2-lHyX^vee0NPlxj!y2#0>AhN=lyR?VVTylk_G%!EH$`teEBlR5G=7p8A5H2GdJTqWDS)mMgbAJ(3rIC!K46f6bB)IR&j z>U6c9Rpo@y;~)4{X6Ut%Ey^QX`-9I$F}t(aiSo<$2#^FOy{TbB#s>Mm4wIrwllTi- zWg?=SXQ`tz`XrV6er~u!By81>DucC`&X>Bre^XNYH9K{P3U=UfPIx@bwK8fA~kwb(}!^1LT60*MxRV*H@b~y+w%zMqX zA^eI)QypF+$a$UgR*^c`+EyKv#q>0#=qTWY2{;izgOovCi7vwTdQj|C4$ zC@H~t@_!fyXH6yC!NGsr;P>}G=AE3)m}I~gcJMr4023=SGdBY>D+4PJ)8DTLXB8Cw zd9|(6KUNW}CzHFeJrfHfGn0+Yzg^+vEaCdE`~9a^IH>{EkVysVWar{&3YBn$+B!e` z`%UewU7Y@YPZuZX??Zp)ZEXf)0+af4=f7VgC8MDH&ue}!qq(Jx{hup-kN*2eGt+;L zvv+Z{{xinRlnH7LwE+`x0+w0+ZM?H3>|ZbF-=639ng3-X;CBDC|8JxJW4->&<D?CIM`vv z?8dCDY}|h{C1dO4Y;0=^{cQ>uXS4)%csSVE+1c3H8Q6KCoDA&7Fct*D^e6Ka+=P*rE+-;2h= z$->Ra%EHdU&dS2V$o~@!JOTU9ibxTzz4v42BG!mJ(JV?@xGV;KHAL! z3Vei)nT3~`newmKOU}>qJE8u^uNDOdk+w_7S2j;w*Ter|C51#S&+9hh1xpV{Z~`}`;fnu zS+4)q3jDVQ|BrY5|F&Fc|6zr1c9JG{{0sYl9oXL4kA0tC`cf$BR+yd#C&4Qo(+MJLuAB7)ZAzGGClOvCT{w& zy$F=3+GeV+^pwYsb<^b1U}l9dSi0{?B-B#FcXnc+pqEu{uu{h)?Ijv* zAW8&%%?IlmCN>P_o4J!4u|xCzINbrqg-ZO&@5EB%_ZBxon?02xawlPegZ}l57m6ijfCDh0F2S9Lbzn(3@OZGBR)0yNi-7@I;54 z-k+XG&j~Q6w2N6-6qCjF-30Y4|2W%lR7_zG5VD!6GhcJO!sX)P+VSOo97%}uoy%UU z7N)QgjQUuSn~!fw8FykKa*)==!NG%zhQiTD8`u=Iw;}?p*r21|HAE18@3ky>^Jvws0MGK)0BpkiN7e&s^%}IuZhBDf_xR9)FZGEZy@IeK>^Tp4p z$_}RQ^7JqQc_!1*`@79g*q@MH(R$4y3a3#hAP}P=n3J)?QT5>S=L39A4E>uYsHyVQ zz{o>qCnp5X^oO_-S9rL%RK;o^9=xviTpY`j`k4?Pk3`1fXx4Liw3;wCKaVVMGQ{?v zRHJ-HBd$;}bHKD(OO%PJvJV%n7d;>#KqMw6Mp;$0hwAxrO9S7l_0h?4T{pv>hreHI zWXjp6$FHmzFXXDrZBTlzPY%tTxQCsxJa-Ddc6KJswlRsm$)|~kmo4aAw(tD>8Hpei zE}p8Zs|#*scGiaH=}32f!V4>Y0f8%6Ee{^W>GvcC-A~cc(R)PEFp}(1O$NjEjFX## zjuyo%{^qrn-pJUHu(0HhEiFncMA1$N@bG23ySu`9W5PN*X@&XuYZK4qlI9ve_Lzir zox*Fho)dZ5YyF^OMGl*~gb&CcBx-rorYO}wn>feU+|k&`)w}Naa`GX(O#FQZCOIxz z%UwSfDk@yw*cW7f^Nr#3qQSwz)f%m`A8Bc6KC=xr>8-Hgw8-AxUR%@8QE!`?n(Dkf zJUnJ*W&)$5A689UfBEu7czSwzI4djb#=!5^Wy5!Z0*?)21McK}rhfP9;o*z2;BGE% z{;VoK3bs^v<&@;Uipt84JeHqpYvMY(x~lW@EqoT&X}U2z%l6MGDIpYVTT4q-&I_#` z!q~xsaTH?0;BmA@l?6x1ZQW;EhEUa(Ze-0@%lda8np3@sMo*58j2*b29vi&Tc4Oz@5K&abeE061_w?MHp3Bbo z%ahv*)!*0qtd&-_$ItNbQcGLgWIvO^vF#0ma;D}m3uWsYYPw0Sa`5t|9UdRA9J;rr zZ=~p}er^!~E&_!`xQByVe^bYK#p-%qe~;y^;8;&rD4UXZiRlmyg}sQ7Cd~&=B<)6FknX z8(JD01t8oyPxIO51^15ngtS^<(L0J+qs#VXL_|az&d$zyTm}OJ1LPbW^{IuHB|$-A z(Jd`4-NVBVt*xzXr&WL(^EnV3+X%s!2XfE~;?8N2g+n!}e z4|9$htw`wv5r`ctCd2mD^6F}b-(hkVRA%w}?FoI-wQGCA>N%8BZ!PGDBZ5r@5mq&Q zW@ZlaJ=;jPtI%q&P90htwSx=mS=Pp31wNS^5jpKrUw@jJBnGl=S$VmB%crvX`X@U( zJ2@Xeeq?81Il6h3Cpj&j#xCRX>+(@I@tf^7!ySwt7930w> z4GpX~;la)h4lGZeJh7COlN+tCuP5Pg+n?*&n{AwegLuZBMT1m-g`C3cvZEG~@ZEqj z78z0G_mgRqj#7k%`<)DPF~LKkNZCHqV295%^Jn$mkO#|amX`YQre_&=6+w><50?(z z`NN2d!oarDUTe;ua1g}|?p%1to9O6rWdFv%prGfKZRa|Ju|jv3KP&WGNDbS)uc`wB z1J?@*3Is8F)WU*;$Hylp8*uUPY!_>wasgdNU*Y|?MW%QRAe~106i%BX>$k2;oyTqq zUI*!MRm|klIPypc`I-FM_cM`9?T1_WGWabO52K^T9X(n}zh6~p(c5U5trad}k=cHX zG^zIBC*5+MB9*{K#2^#=1#L4hoSyG(Zf<6PK%6#)ct%aCH69=%zkusB1uu{8LuskG zQY!2Evv?}Q`6h=|!l14kB#4+@v6pqKG4lnso6@MAhlU25?ri1rKqvt3yqk*`vsi-{F))v*W0u z@@)}qt-)qC3IeHx4S$1l+LDox;Xr8d8Fa>f?vMh{cEZwXc3h8J&Xa6odMhhM5!`9S z+}S%f_aTypXSMxD>s29xv`UHE+R_sCD6DomDHwwVLrt$)lxuuq%uTfcV40Zc=;5>b zsqt}PZSB;3#eH=ZmG09?&Q6natfh?&$>8ANAMWn%7{;~JBI@euS+H7a0*cLw{{%mK zU}WHRbNcbs<>gn(w{mc(q=gKdMbp!^OMf2iNKG@$nl#j3X#~ zSE5ZEn9|kN6^+M6h~+OLZm8ykxW z2?-ICj3R)8Ks?(>L0KjYR_=Jr)(Wx5AIcI)zg~%C`cY9)5#TN8N0&W1T3b^?dwhI6 z;CZ%`x^{FBO&e+>R+^iC49tBF7M7gx+hYtA{`!#E>_4*X_1hStt4e z{C7R?Egy-Z%uMV&tJkcI`Nc=!wUrxIJPo42+tk!FzW|~R4=KC!hOHeguiN9(h0x;- z7JT^dT3a)NAhr)7T2j@NHMQ=xT%Zc-8b(D$6$cWH6ZtD67*om3Hf-uCA{9US2mZpQbg`Y%wAD?|h*BaD;i1 ztlxnp>J6aoE6pfS>EJliZ&fWVO8}M))%)oDGIkgi8xt9M<2YXY3Jo(10apTm-N1_B z9xyFXA7_ZLvF+Wjj@JtVlv!{kj#^k#aS(HjYNzjyj*mU{^2X#>PpmiweF!9fYBmS~{q7)p`fyxQmMsk|o^BK6GS%bf4Benc8W7pVO_egtWBu z4!-2Xb-~x;#e0Y%PxUSq?-wS~44vhps+;mZK?HUKs8G7e69x_aHuoCQ_Y3Fl?(Xz- zb!UIxYtkmd5@pphGcv6A?QXFmrx}ic*P*RDUSZ@aH&Ohq=BKB)5xpz6l@r^}_JEoc z0?>8fw)?}FfX3yMNwqCbt>Vme&kbSp=R7v^k-3KuQApFXLD-Kf<26+!LBd-1Z55>w zwbv}|QSWI^s+N0H;g%|%p6Qe)NiD{)DO66S=O!aIo3OOR((BZ{X>weTNYrD@CVu?5 z2M-1D{visA(crq{l4J8c41Y`h=eL<}-;SHdEYz^_uismynNyrOWoLi;b<{_O0iiiK z_wn}j*1`#2d+^!pxZe4pC`uX;k#xOmZ+o&$Aa>yOwP%82QI82{9089b)!@K@EDkpI zVQxpqy%`e|(@%eY2!IFl>#q-v6QAJYPYtE8m=0DM_e5z8U5BO2)2*zm#OW~>T~R(d z#iiGc%O3sccy+8VMT|kj{^rG26x7PX!XG&8Pk<(GpdFt~CLgZ$#gaV+mPSmf7f#O3 zNPh0^DSR&RBK_tqX)$BW@0iLwEl3|{Zaj?p@9=dJ~4f|{T-DveYl<+M$)9I z-!nWoC?B8SAmv9WLu8ZxO|xCEdd2oOYVPpx@aOlTQq9UVT^$`+Vj`mJ^*~&_TH-JL z{S+X7b1LO3x9)Fl_F-XSCZUIj!b6t2L(t_x+T-EoPQgS)-9A6yAbOZzRHXR?7uUPa ze3bMSQYsif40EE-xC`nnOSo9{nc4|SHcW~vD`(JwA&M~P1|gew>R%56w`FGF--&F-%Ak0cax9qp`Zi|H3?klMK zpt@i8+WN!2gsB!OK0n`^m1@72*m4lkLrRjTPuFn55#Px^*K2kR zF|O7M;d9-Up4xW4frp1br^Ah~J(wOFgIix;?*&xNb8uv2gd0+t*t=~1V_plk(NfQR zjV>070jHZ96+bhhQ#U{m8t^_4zNY5=O2sV{q?V^opZX8O+?qu$85kI{NdW;I#1i_o z1j_ON9k7}JsMq;mvY~G(DFFcuAHV?W^e~_80&V))tCLNoxBX@Yj~+ehk&cf#IzLCU zva%wV!C}<@7z|ve__d9Veuvk^{t7^ghJyFMPP9P5o*5kcS$IPcoYUN#%HwftrV4;5 zIt1x`%GguPu>H@hY;gXh%vH|YDo&mn8d6FxSRWx8Ym`jf%klWO9@}PbE-!Z_53YYr zjMt^ddn^`)nF+JABWv_L+nE6ZK-1;T%}>CsH`*>1y!eh!PR=GLCw2JvTFw^z?tQZ5 zBAAUn?N;}Z*77>61Y7q;Jkg7mtQ{B|bC5JM%U8)&{t?k@0v{61=UT?dz_3SGpkhgoW16@DlEK-FRmhWz zbQBVH>GARLHOtu`C=y~91{&JT+rt?vHyetptE;0Hyi&ldQst4r;t7ARlP1T0v*yUd z&c$^CfNXA4)1^mnL zA>=qH!n8Og%cQ%|^&|IR6*lq^2)jZMz)da`Pf!r2G&l0zzwhkn5tEOniXvd4+y!!i zP|3tjwnmxO(H$V|hHrXz;aEIREmr25oib9{%w@4f?|glIM?vyd1Z#|Ub9tGgXij5M zuS4_lWx%gr-ud6R+ne2wR_+=a8s->u8}#;eU#pWZ;i7=2v z+)4+NSY4d8qd=f#WM=XJWP9{NDJzOt$oJPKJ>Jg~;AZupD2}>&d3jym+>C0{;Ib+y zDOKj=I9W3GnW{7skg=Ib!=t=WC#Y*@!P08Am>k zjj_zBa7&7bAw1=GuVMf+-5f{=2pU6ClFxu&yK>3aA&OwQvmij;5OJ2ZRpfTPPazM^ z$*KC9;dJ+_?F%#I>G^rXzT@2@tv(ch0PIJP;7CbH(Mr^=7XTN14ymf)(w)8)9imps zlHXhG$i4st=qHexu9+~yYP)A=y}m4U1?d9sst*c6KnW53`twX#Ljwt@E1tE}-XB|A z`Go`o1e!}qwol(ald^SmzrMac_VMw_)YsS7p1&FZP;eQ%xNGoyPM}0QTnl*3ntG{c z+bG4iQWa&TmEB_BrB0oo-Re&z2f_UX#MHUqr6|Yw|gIt?-o&UB?9EB zgDk%n258ayQVI$RUID1vVK>)Qt$BVX$OP*NefT(4zHkf`6%{9MjNlOg0XGjX?@V~# zYCvXYCP!p1JYFPFu87dk(7pmHJ^T9g>zMG~mDnUk{WQt%?4uU!u3Sr7kDf_J(bLi0 z(6X}D%$frTC8nVX=?h-6Q_RW=H|kUzvif`uTLy2C|HM?n@{O#Yu{cB zb1jzbWRSX8@zCoveO>79-*%9ak}`JlMGiI2X=|I0%g#2;nRtDp$EhA1_ZT7#=fAz1 zLSoO*B7rP|-6)VU1gq@~Oj-6xg&bD;-3|@|b;Zu%$zuwO;>s7}v=ahH$>F^wa5C{v zgR#kje+y&2zU^=OR>#16NRpWh@tQt-S4mu1o77doNNjuq|xrA9_ZD&U0Y-|bG<5=ux&%$a9-Y#fH5<5L42DfaU6G7Sg> zT4{w{-)ODypJF1vfB(Mh!-o&&!`VW9%Up}z2_QvbdaS*bf(Ke8y0NkGD+_ zU0#L*%L7t3fWd%%K_Dc6C%IT!T1pnEG=Dc@_I`mESsF_!;3-D}{Srq(2})0AXQyyO z0g^_E+JNnvxdb}#eLa$#X1 z0$`8HphD6CRg!4YV>46NMF$5C4(<+UD7uodr1LgCKwJ@#l^wVO8U_?VfxXgnSGxki zO9=MNRV^Z<23wR5ZV5k-{B9<^oL-)70zto@^lGYuw4%HsYh!g2SwP~xrMV@!TVUq8 z-nb_;0z9{$ot0IK&E8CXGoY#6K)b7W*|8IXZvcUCf1U0Sx;^Z{x(7(pqi25JCv@5x zc2;Lko;*mw&+jb{g0^yDVWAetJA>6Jw+|hg^`7G3uy&7(*d`?>C#Pp->gR`rAx=hyZe0s)UfCbY%N6WwZ5IegNo||Ua32^L z7#yx8D22YlJ-Y;|&gIL~z_@6GmoO#%BSd4?)b{{2k`l9+i2ElePf3F&M1VLY9335< z5dqT9&!5W!iF8Js>6Iz+g?ld)GmN-6I0`^kC-b=8E@~-EXw>flWT_57Ogm7ColDI? zn)^C8=RGq#Y_k9g8PX0~Arqtw!QTTVmkDB&UR3mAv76ngGg8|^T%51StMn`_JPLbl zV_ihu<4Qo_`Up(0sa(4Ua8Y^4;cCbI?Li~=)0pwa#YGcJ@V~Wzk}=cY|I!yYCG!16 z$Gtvq{WhW35!u;`*A!x*RXyF^YnYgrR6q+#=to2ff~(VE$Pn@~@Y?=Xz}{wXUmqQ< zAPWlfEI`!zv=~O0hs!2ug;GF|ulA%N&fs?FwqPc>c2)%9tVA3YDm@;$MH*7X`%Y2D znyf=O|A&ynPXOkq{b2n`N}63M;%DkIF)^Wk%lC6za7;y06F)gCt6iS*E&uY;lJNPO z*vZKWy1kp5Av1tc!9b>44fu?E&dW0U(S@!+jW!z#9bNVE`nqO!Z?Ce5xdbS{K)wPY z)BK!==PGt%W25p3n#6U)6S{pFjZi@AJS;7@uYdgbVXLcDt|1146;cCDSGjWPVw-&0 zX0}0H1y>!^v)Iv1bP(THDkbmU^_!6=^moq8e4JG{!z1AJ{pBuMdC)+JbP6v#_oKS{ zs=1j73k`Fhh0xSpZM?J;bR6XEXij2C_-X(%K3W6d9-Gu!Js%mIgP ztV+2J0i~V;OW;(wI5rmRIZpW9DIdTzVOV4pOpJ_ovgI0nCqFAYG!{xXM^f3OOw7$M zn1Cu3xgn#gOT4zRQF!Fu3iUeQ-TtndjDghS2yquHojBIf(a8rqf)OQGIIZwmu&8kg zDBvyW>BO`1^CZ?bHeKB%a$K0wI82bap{lJd2To4T<1Bi%U~FS3)J2Iic~LHgRNy*G zjrP`h?aSNqBs@fvK>w;LW)Cs39^?an^WzigGzF^&yXZ*On*pdbzo5=FwNfd;uhJ369ZxZ;SCG&KeCO?;Qp)`>Pb4i3&om6JL+ zVFU;+d?y(M0st{!$oOHPoGIakizn#m>)(Q(mtdFf(vf@PO);EJYBT{`q5fAfX(WiS zn9ZI5dQw}m^}j*SQ|`u_wn1>H zhU8x_)|^0U0YV1#^XCPczU1g=Xs*eLiF<7643#dRHXfdwJhq;$f&L1jw*u?=?j7zk z5$sAp-}s%bPc2nJl)3pbfC`bFk&*G#tul-F(Ibl2R#sjM0C4Quo_z+*0T&kzK(53e z$Mz8`H#dVteP`EkdoCF9z7S+sA?L%TuFMv96H<@0N2ns$ zOu+3env%#4sDY0z{kl4N5hc0WTCUrO`DK>?0K~$HQq63WYAq+wvv@(mZEtj6*>U$8 z;7NqgE8Po_`@9h#Uf7~62n8c1k}(+gvp;@_j9S)o&Gx-OhN!ij3AEo`|EvMnBAbtw z9vNME{6Oyu1cJ}_doKX)1Ar)g0kHi5uU6>0EoXXBK~YghR!WMNs)`Ccb;9=NZ5kjp zAA(*c9-w1B_BM1QnLYwNJt4rQ2LT*^Dc6q=2q+LqxIkz3A%;Cz=@bsD$qaIt<0DXP zr$MnDmX(za+%Ma*y`G_haKFKx3B*R*J#cw)fBOBSND$JQ`@`fyREp%;QlU6PLP8SI zAK8qEjP%NQeGMSeTdHQl$Z10W%cV}F$b3$-bjoA+0AGKltv#LX3*>VOc6MB#I|T|| zZ{_*T_p`mv%hLvmg<~4G1Lg7I;nsN?P>n2XZ51ai*iRaP?33e^bSp8A@%x>UCiJtj z0Nz~wTbA3|sdxgRhxcDa$yK_pEw+r7G;L|vvmR z%z#yEEv>B~0?ylttS(v8sJSA?)TVYgYuDiev_cHpiEIW3Q0xeJooV(~S5MA%CQ7*k zZ+2_58l4V6hOnyFY2#*Re^=uy+bmlU2!yc4eL!eBk^OYA>o>p>w)!o1hs;K^#3OXl zLE@sYuZbwwi6}lDNU5)?YiV6J`p$=b{`}#4NlDvX#st70QQy9O%l544l!-?qCQe7j zs}VmBF)-##=K{^9R)?j|fX{Ntj3QG5Xd>7~=H|!%1U>;elx<03qPnb>R?0>BoYTsu zaJ@DIAsKRP{s8P9S8cr#HBs=Q@0y)9IZdW(hJf(q;n|k8Ya8K<{sm$r2>FExk-`?G z!xmjep)fYANZ8Esvc*6>+*;JBMVpAOa-d15!iXv9wR3N%ue_xBf8Njn%X9zie;er@|( zm4wwS=@`_DLW(Pjiriy9riwwSoVcaw0^&zm~@=0Z|eP8h5;Qc6OEf z4ebuidMKEfpOdB;6nSc6pYqgjgM8Kg@#A&jA~G_vn7H^S#{l6fyU8-`Sj9}<`q|7; zxg>fD*l3ml80=UT7ADo`HOia7w6VFdVLSBY3$t(v}CR_P3vCytIQXD`0JaS_v7h5p8-}GqeXu= zKGK!jS61%mb#oc~gbwqppkblW&M-oa)+dP^#n{a@6>JO;13HYQy848V5~}$51Y8{` zOpgHsj|G!(wR3Pd%3k^UQGTJgm?jM9FaTX&0;OpY1q;hf1ZA2oaUdFy+jj*qK#PS3 z4U1IJl_N7M`S^TL{?hFQTN_BtiB^+kG9W?42zZ`uUF)~FPJq24!hjfidqRV&O*ApMqA3zQV_zqfYU-IyHOoH-7<^~@8;`sPI(5bpW44Q<- zv{S-J+uL=>Q4mqI)!1yLkhgA@N({husdtf)=vJT{a;Nf)9{}58~a0$ctEcc2@rfII$GK{fOfq~Qb_~c{>$j7 zQYGlKM?!ZdjR-!g-1$Y41#vC7=ix#oD|8$8BU@WrQ$X#J0ve{&z`CPmh-g6K2U)N`QczLzB;v*8{;B=pzo+5^en;aSNW{$W6Wq${# z=`XA0=UFw}JXuvmMMcpeyU6~x0Lvxd;p1Zgy)DA1S}UkouYxOiuzvH%T?5F@vy+pB z)>c-0Q|WXjGvg(-l^W{h4h}AR4r$YqlSrV0f0L2I!O5vY`Ld~LPy-tqFa{$CM7+@|RU5kj2H_sNLI9ICb#rz`0fKfgMh^<$ zXkbqt`}syh3O^KWb$u@yC7#NYl`>lLSuyDA=!u~t!bcQtr+26F^71YnuMdK>;o$h$ zi(_@{=NVZN0CQ5};zRW{HAHZb_qr7rc<4__NGLctUG+fdhXd3(?{{~SZ3i%6PJTWW zXoVt!oo64iy^s4@GZin^0YFkRB08iafEChIIG~{umy|T=40?-l zTA%L>hv=WeSij;aZ`~qeVq9Qh1b4`N+1lAa!WE%e(s^o@tv#{3wPn=5?)c4u{cbzz z&E%wpw33o036Ep`j!0tkZe`m502k8OpF#lI^Gixev0x{_@VnsxJ3G>ckw{~atvQKN z0?FO^NiVOi0zjBxBL*;n9O(ftf;w0mnTJW$Kk*pw*dSVmyS1^YQJ<%5p?cFi+>qhb za;;y#PQGsn+_JY+wwlVxq05y{#B)^`Sg{k)FfxW#XenB!-iiSo`0y5Fuua0y=2fZ~ z6pG@?N-2QHl0juV+vy|o%fRv>7tg_eqkSX%A#9n21qa{FEtLF?E-Ox8U{L0x9&0N* zE4HluFWm1uciy>zrg7Uf{p8oL$^)N2Zz#cvfDeLJ95tx-OnqP*!_fd;B{n}P)4=R( zI&@oJ`nMwJPmWUcE~C1-`cZs*{0`VPv|;n3ih{)R#|R5HaAXatc*;FXB_nBl*##aQTF?2VlH12930BVcl9Cw@kmM{Jxl110xc03uEI-BTZes zt=~AjnhcKhOGg+u4XU zH9kE(Jy~e$_{@q$x6WehvZ;yN3aB}eNxvf)V4@caV3P|J@^xc<{n4V&#XL=@F|7B~ zC*0o8pJ71h&rmN>E6{47k4Ww8?t5=oL@4BOeM-)m%qLel#gt>2=E8Nwb0ED&Sb^WzIW3rs9HWd6+nU7`_4ySWz3jUcF z(E7>fz=qZW`Wh69xWV;)kZJr}S3gIqLm)xOSkz$0CLQP^Ud&&g{j63oX1RF`P$$?D zXy$|v6qrRJ{Vm%##a7ApAT5+47{Y?VoVg!W(W3yA%s{I9wS~(_f&sXt<&o@<*}m7? z7XXeOB+9ODKP2Yl$CmN}@d$bx($onqS8sod|NZ!kdRhy_Glh#0(*S$3)3LLUM}Q_G z-vDT&zDr6H1;H=p>w9|S~O?QXJ1g`AVNetQ-;CTW#Q5>f5p-Vd0j>(1cgBmi)SxC1X0QWUG7bxWm>Pv zk!4zg$yl8~*dPiN9e=6-V*+MFAi@m4&ZF_N3OCD&*5WU1ZsvI@D0o*3c5p3D4bP$D z(Z?NL{VD;SGAa<<^*Rqh5su5qnEOo{W$9t}`!|l?GOUorXbzcE zMMKVyh!E2vDO7UE#HtZdGD~d^HKh_dSfwS=uO}(y5RXty&P_sM(?au5BBvsHF8{;t zFSzg5{kp!__j7$d@9Xy4gHC8Vipt(6d+%%qV~>XBXDx z7&_5JCo#xoZMJ?gMn*eC3f-%Oj_bfG!(FKxw^gX+j42*%PriwAWR^OwNYd4fiL#c!#hX3*7Du|;t-oA53jJKngsHOI9OL_8SjJs9yZQE-V zc&|?yN(V^ZDn&kxhnP0gUGcQ`4fj z#rc`8myZSW*;z&bmD2<1>FH%EiPjPbq~59^ws$Jv?W^!%9fDNVv^QggcvV}*JStVi z=)nvBaV~Js1g4&#*aIBEdW4(;W3u@THQ@#?2$We!?6 znAPmJff^ba8DWC(It)N$I*jwT=mKmGN8V7!#%4Ypl8ackV2TOu{(}cA!0J?x@4vQE z`Q#B3xw*2wO{whnWiuNm_d9jFG!P}m4k>iccHfF^V zh!x}4@GXJ#F#XIKkSVWpV2p!9@kuOp-Gj9Z$lJ@Snttb|-bR_a2}95Cn}2=XeQ#@T z+`ES)B3QgsZ*MHwLM`X-znil%Gf$RORQzH?p#L(byp&v{$o1t?o?cB!IT3aGbQ!J0 z7u-m1AD?Vv0|VbHc_ZVdYWSB~7l07E2JT7gp?-6iili>3rKM%=%yawp_3IGS#Tsz0uS0E2iQlfJgoG3*k7Lj?~)WFrjEt5 z?A2nDGB+eZh8RL7i`wCSPlD0Mm&0cJsxE7DC8d)(>({Th-msw|#Ee}?wYY5n;=jf9 zidx>p zru3_OzADs;HW4Jw%EGx;_(#mevYJnytC%*a{Si)HYF%1fkVp8DW>OHnPfo)M2cBST ze6B$#T(ZL93x*mm2!35XJla`6fC``x7LvO@ zig~R(-mo$r&v{X!8Tf7;M2-FZ{S(!0?u@(Hr;yqsFwwh0HoKn^8rpU_B_*h@uTRnm z4dNPuipqSUoy;WT0Kb8@zN|84Ai`mpo0)lN*vJ309obIWu~3!8ZlgFo_P%7KCsXyW zn_l{k9mxIrY02_ICgt1V>~!R8XMMSG{rYeEaPy5DaL_)!VlDfza59RRcq_#FhD z5D3PsQy zQBg(U6_z}m+QFNGM=iTu@=yk1a4H8ppLD50aPs(D>i1pKtcEjyD5<~=5ucEhl%$Z# zdk|{YTTxkQCJw{Ks=UpToEk4L$n(Etej@w5745U%xGaY&P54Om-6&_JHr z0J?q`>?P#9QxUhM{{ suggested_password }}

+

+ +

+ {{ render_field(form.question, hint=_("Please prove that you are human")) }} + {% set label %} {{ _("I agree to the ") }}