QqI{bf9Im^$v?wSn(jKAcTXOoE2;P|FB#&PB}fZ9DeQExq#&dyikMCt
z3;Zu72NaWh+wIh=ai@@e1spl-}{7S
za$iJjF^)6hFJ77-0%GD1?Gb>W^u$!bx$i31h83lbz^B^^w;{`%ew)xgi`I_NP=Y`b
zd<+<=W;!4yQCUDMF*#5Q8{Fy<+M^OTZ*xeUWCo)hm?BA*Ywpdr!<6!c){^nW|DqirFHQ^YIvs1;T)=N|Ne*eZOC5u)`!m@HLUWmLhxS-Y
zC2?B=wC@s^V?7Sg16Uq;*LgjR3qRfzdiI~9(ar2||HB>E*!2~A
z&x#3H9*(pd7pdP?FuGqc@^h`b&Ji`MXO@Yd%0HLAt?||Hsv8_}SLIilKbT`*zH7hv
z#zlBbJ~cV6J#cH-LX7^B-=@V%IC{4@%>2%8H0?H$X87X%%Jh0HGL&GJbKk69ShSAW
zXYJ3>wa@(#tu-^+qJ(V5-n;6yI_owMvL6}R9Q5_t!8-Ia-9&qr5hyo5^i}5qJma9i
z6A`Qk8FOnlCi;5t);i6~P^`%U2?bzCy=#c_!7(6mMdw`y>q?tz55+|DgCQzPqL0j&
zNw-^terFKn@1fyQ^Q-^VOCyv~@`RNI#GwJceVtLni?(Gr$^WK2pEd4t#CX)+RkvFT
zeZz57$3#DgqlkYWLFxrh&`amATr~J?Q_-qzM}S2V5%3;~lbn(~;x3xgT4OgfN!N>x
zUi?0loNhCW7Jx-o6A)bfs%pUudV9RL@a@|V
z0%f4NX}Vt7D$Jx5_pjlLgA;8KUqi&%y4a&563f;7FttrjTd@P=>%0;B0ROp**pvKc
zeKBD+FIY>v(1J^48Z`-3wA27PM__PrncW|I^dTo0m$LLVs~x|p6>zuqp#AZ+&y6x#
ze!u<0rd9`d3%M;xX4`fx(4(g{nUYKSM^W~ATofzZ#%nF|C3GD8v4h3`m0yoiM%!=x
z)n54QT`AGH0&dhF<)W01A|};9eosyiWe>shQ_+oC7H&E$cB4ns&%T=ubNDv?9K2ZD
zia1~e3cSf4xwP9&FL3&&M&KDgx<;V+?a3m}zVpGjT=sk4cj(F@b_vq47&{E~X{8M2
z?gSIZrDi-=8}_`JIEfkOpOqH};B}P657lnS5gi|c(d^*giv!Hf{}u=I5pcVtWV>7l
z#9p7qZ_?fGnAY`iTJzyiCKjb77buuB$Fbl7VWuuTjeG&e9kpijaXL}Fv)^6$?d*tG
zbZ*C#Z`bPFvJy8x4@?39Mp1
zYp7)U3=B@4vyOD)38$yz?i5sTfMygw1CcUuVsdiN)D@Vd4pVY(%YB<^Y4e5^zAmdA
ztw5;An@4g1ipPopl$0uAJJkVaPC4`by&H-y3$xSO6%{SKHs)|%p&FVX~dL4=d;Q@9825@C+A_iR#$j2`ewSw(z1O##ae~q1WSX67jhKG<6
zWI!6-G?LN`NOvRM-2=lQ-KBtlBHc(xC^gcJqzED*-KCT`B8+sMg}V3I-}$!g!{2kQ
znOSRHYu@+y-Or7Zbw8Fio{W@qC(tU6Q*&Q+Q*rwKY5&CggPIyb!nvbCuSr;1pvZt(
z;GDWT@6<1>>}TYGuUscva)elG(h+Pj6%&MZJJNTnCDoyWFlZSgXlc=-4o~A-j9W}w
zGSkT&Kh%z6sL-KH1H1Uj4n-=NQYj{wcBgb6MFcOIz9onp8b&*N-9?wCDZuJD>GX;5b~F&f+*VfIxci5rg0VF
ztIq@P!3oJ?Pf&hOVS9uASy@k}NTAKH<5;dBc=LipLS$UTv(|WBOOCRKLIzM>gP5k;
zH48>r%@*&6U`S#-7;3FJ!ib(#Bkx?ps8(z2F1T$snNgU#$jt=sqnxk(l^W1?1$
z1p^st?<54M%QrSTz}{d@uFXgTP*XYlw*tmGtn!h98g?yvb1J~g{}(}C?aeL1*uAe-Imw(xmJ>*jg6c;Lq?JT^0W
zn8Yi(Kw9)0Xi@(q_JoR4bqo4`#+#!`{~K>Mv0JY1XiNCWI*-{Do27WYikhgY?@Z5R
zIylh3_;#27nn^3rq-!47#hYq$Mk?6*HuWRXyZLKorl|GIMcC>mJ?4{l;rkzM1-W(F
ztqQsH2M`O$=bXp@XGxmVylUq9TA*qJLx%ZztU81=w&(?cpKrHxjF=FOkNAX
zsy{b3{2I<8C*QzCUmD@tI4USe6?Cz(AWqg
zF=}c5shdY84!mkPb(Vw4i*$MDQ3NYkt5<)~ZrXD`xeE1h?C#w;Ep%L|3{?rAxhFY2
z*ya)oI!z)R=c)%K8$)7L(0`UP{l>*F;7}C`-V_R
z*dAgHf`zE^R`SRW8wFi3jLfNako*5$nW){;V5&0~ypI@cJ}t#ffzwiV4{-oS~m=WHtkGXb6%mgc4qW;
zdHU;{sVVqxA#L)J>v>zhW^62Pm`6q1Kmjw&?jRDlg6ax1CNF^tdYm9N>0AGCr<#{Q
zzJXXSv9eMM2ZWE#ZId6yx5wt$9
ztLCG}naXkNOXFk}2#e~l&PjIc**6Prmv|4a0B%!HIWPAzt8}z39$TyV()u2|SR9)Z1=~_ceV2?$Yk_l3
z-*sDZYkBoHr2|Yg9Ka@+MAe?<%34vy50k@%2rz~eCJD^_U5>VBd?4-~OUOY1F)o-_
zQ($|!zU3$qw2Q_g7+0r5+^R{@{aw^oaL1qHuNtDfc;VH?t~aZ
znUG`K@ytGW!0QR&LN2CcMv9rL^9(iX?g(QgzxlhST0d45tfSOm&RKF}6~~yaK;=AI
zadTdlE4ONeZ$hm4a`_NfGs}m#c6a!&e4#e;r
z0jo?lp~lAN)fdt8CeAM2g?7HEx-Sdwkr?|ES?0vg@E4Hx95dc-2R^`Q+IqKtRCrfC
z(6z5c1O4$wegWP4DMCbk>&S)!tgiOGBzWwT*#q&%d)5QFMGhO>&|;pwLcLkYK{V^hb`bB!j6c7*u?+W#Uy|=*~0wjN;P3h$IMXnYC#U$`oOUDjBmd`|T0nDS1
zl(Z8k9AW?{ly?KTx2EiTnO*=LTMi01w*R~^{#=)^?4Q@shfG|QN%^xqHEV@#7^(Po>QiU}
z@e}X_@j$qeXg$mW=i-{&HQy5L7ht|mfxrg!@((*FAZ*p_P2(T1AReK>>P^B#uc(k}
zVO(8!-*NFNC!o$I_j^wr;?S3i+Tk1T(TL0?!Iz{;;75Ho+bceb;cN1BMe}yu7s(+OT|ga9kar`IY)(h+-X3UMGFH_;~KNoFlGW(
ze_^Lo_x`n8w-URzim}Pu3x&UY_Gf!X(66G+Bbe|gEz@b#0Ayc60+PAM=YjPYEe<^S
zAj%4#Ha;X?iQC4iS#Eoy@d<)aDXtf4UiO>Rp{6E(Ceq$6==T8^q1#HCT-`Pz?v#)>OE
z;LjuFJFv{y+bkPjq~_Yrh^mtDWXDdF=ICjGPCz-6^2
z*f}|vrcTF_)5MLCVlz;FL1u*$2k5dY77RvB|HDWjn)hEu3O+Nk@F!nr>DqB5L)7@x
zZT-wfHup%dOP4n)42%ex+#gLE5_0?&Fm9+VYKEUeja*-0#Boy?ufwp9*-nWBLHWQ$;;IDCkn(w
zBN{c3Dz?Yrdthw#a=cQ_`iUEl!&ssZzJQ-K+wIzP&2dw}MuZF#`qTTLUIHY1=_a?4
zn^#bs%)qQXH}Ldvs?-MxmxV5QX^>E5M~#hP1;%T;{g#?X{h}tRFI%yJB__Ua(?Hv)
zET?cQ_b2@*jH+AP5pIqq&;TA7y*5BzO052-&W*dW
z97XuVGe9`0W2=**>ta)+sd=bB&YoOcY;QW8kr%qDS3HnvJfz#7aEn}+YbWO5xx_hP
zO*ZJx2h|ZAIj|oR{c5i5`9^o_Af-Z)1-xKhOHL6#FQ;I9KCsDr=)V?4*_r!?S*V+w
zXu!;xFO?5itELrNdia;`Z9G~XZTIuJ)4i1P$FtLp+1213Lg22t?mh7Q)@QPur+r0*
z#vfKXXFu87dkUxp9}euUo*2FKLHa_EVC$%9mHr8nn_4%@`)9E;-a3&PfPCN!oIy>t
z@ES}8SNod>`vN3Q=5PK^XPRouL=nC!8}CNN!6n2k_0f#962U6GT%V~pIUObtu1+K8
zA5p$XhhcB*A9U4Pt~?OgX*(5b?Jn$7om{is`CzTI@Yz63TzK*f;<+Wcr7Q6^1bWMu
z#wDyuaB?EWMu~|n`iy5`Cbror*{Ai+ya1_Mc$dI;ICPJM3IM74-b!Me%21yqXrM
z@pjq}#P9Nvv!XQ|We1ip@ciPNpIV*MtF|B0ZLEHR;{}awKt4_JyL`>I%uF+lMplfhNyMihW5Bhu)k>_!;j4Mc-kXcz7
z*A9n%z)Eja8EQPqd?Qv7RQt=(JR(UN2aJVZMERH&IJyc5mpTeO3Ow;EEB-KukgyxbP5y@38a&2GKtb(~P@FC{k=h$J(I>6xI$0ERGI#9DfDjT@zrBNj0N!s;dOEQ(^om6d3oY0`cPF
z-|M^(KhdW-X#W(H?yd5NgteK;sEVf=x1ivf`x;-wL|j&%?&yLd4mF5@0==E3fFF(G
zRyw?hnG@|HKBM0@PSlqSSGC#4%Qa3j;BYNqxu8>k1C}JBxK0J6(uT%>U10dvOu$k{Ow@$pbKO}tAh8L5P>wWkSi4$OE;M6ssT>{Q
zOi$^p>9)H;fsTvMJRtNnpj*V-V>`sCm;eKinY_3WC;PlEtQ%#lxodc?|+bHq6Kr
z4o*%|9#V)krsSY5lTLIG#|N-V()bj{7Wu!@2!ksQvBssMv&TRqqHhiy238F%ob^BM
zF{Z+UNRhiB>z^AlI=TzgQdOYA)LyIX3KQfN4@WEy1_8-(>i=V{-vVM2%^ytH2b!#9Z`T>xQ_8WBZ)~wmOmQS_#JvLrj
zH3>c}JD>gY^WMl$@i$dG*wTng!-
zP2+-EmNT}SE%kpms=v7OC42w*6m?t!?#xa#^5T%o_tYkm_+Y!|sZ7Lu0Ed&bMyKP=c|z2xJsxz<-4%W+tJFjTOVUH`gek2e}w
z>E!PIRXbgeR;`?%dtcsP4rVYCYap-vWascV_cs~>x4R7PmNBz}dWProeNcZCer?{m
zBT`>}w!v}NyU{cxEkchPFcvr|tnMFQ5qvU(RLHp(6sm?P7y%9mlVFO1CFKR6oWdGH
z-Hb2gK^3Oerk{5`)^E)o!#?onnYW58NZ7DlgOa*7G+CY))}_8}X%L9P0K81Yp8EYC
z>yF*L)M7fm>j{S5d_53k*QJk?X03@Pkftx-Ppe72o0+__aSfvW9dXKI`i?kB`X@%@
z7G2ds^H)#4-@tQ;Ah5tA202?x#bsqKw2F&fuEwqm-h|2L)s(VHD`};VXmRKXCNJ
z1Z@bzzTCWqTn-CmP0*=Zbwcn=S%K?EES@8e500>LMrX*C$FGSK`IA5+1)3I#n@@Go
zqkt*PFZGnbkB@D2f|p3disdjrFYY5%Mi6Bf0kbrbP&zqW$HEt=vnpB7TFe@ZfP0My
zHC0vCqGgyIrl5JAB_vH>qJLN?cM7GpG?}teaxvA3YRYJG{Gg+d1$p4my470gSPUjn
z&-$jOXfZ)pXcSeNo#`vgI|!@96xk)&6nV?EXc#$65vHB!NXpSzuCvipY6*}nLOF15
zd~}w)*4*U`dKQZ++p~|V4@-A|cG$woTi|{sF~1GhBTC>&lSI$QA(dlg>+G{4N)HnIOJ)DHBG_XdWLw?M4c4N#a%3Yzvt}ZMk9^
zH4}db9mg=XK4m5&Btk>^>xQ3mFv`(>emCJ(?5KzFm`;su9}7s-?xL^UwY91eaC9$P
zXUt2_@M;nqxsN;$ce5ibYa1=&zm_AwzS@=8GKWJF@)?U;-!Ul9a8t7IUiIe~I*zQm
zQORd13zujVKd*r7OwUvS=gNL^_Dy8dKO^P-7H7b%@E)3ZoZR`YG{@AnAc_f=X!k|F!zG6LtEVhpImEU!y0-7
z5h0nI!EO(cXhRWU`_J(kB{z64)kH`y0iKXoCM_JSB+oFV>9_}!Bm7U;q$W+FZ}OCB
zaVksSJxY~Vlw&(Sz0LDyFTeQ@gUL3-%}=k5v5jK+8GMzv1XAtFv~Wn!eAM+Hyq!N2
z%GzjR*WE7?x?$QWnZY!UZE;mKiv
z*ldGfQz{dGAPPx=#~6`OI
z@f%!yb9ZK^&*vmE}F2qyk`ip_ZisEPsfo}V=Z`MK`ES+^uBfLZPjhTe!lfk)p!>x?j#y^ddD-NVC
zH+l><%yJsT&gwEozM^IwIf{8GI;+-u5~d`Y%j+&(s$5Y;T0v(8>6bO9w(VpHle^j<eD#Ve{s@`bjiNvO(;C;Csu;l3r&%qX@2WSE9>L{lyFuj
zq5*2&<0V?M!P(BqYAb_sw@#Qr2E-k1SLGW?R{bhy>+4WkK8{(*{@I7qjVPraX#w(N
z(|m!H2w*F1pw&a14m_lrCcE05^6e+SAy4-9OM-lESUg-OS^$bh{6c;-@
z?iklQ4APkON`#=E_W~XQkF*7PUP=_5@;~WFcS$W0pDU$`Y&IDhZ-!4_Mvdw*Hxf{29(C&HE;y~
zo2P+y!yAF3JX?>v8uT3CXM^tKzHat2iX*>Qg5cSi0~@&*2=+lHH4So
zd%InyB1wa@8%$dm54LEny!7EFOpA(1<#LA-g~WH%F36LpUx_ovf2z-CGiqbNrCKKdW>Y)JBN>POpp`(rU*sZH3
zcgBow{!S(RzSTwyC_4SZixe~d`n)?QC@%OY%BV_0x$b@=Pm}>4)`t-4A0Ft-v&Hob
zRnnY;>73aciDTMej}?V={QRO^OsH}Rj^T$~uK6d;CzmjPI9M=5784E1B&f*tS}QyM4|WPs5bh^|CUw3`u!-NV7eNh}iZs!qKk-_4#s
zs>4ruZSwng^77tmrN9+-rcOLoVI65$u!TmF5n@mJHovituzLN-AQmu`U@U5od7|Lx{(XKTRSdMaR6cU|B#mB`euec_iDS1G&qrTu0b!`s{xm{-x{fBx4-vU@-tn~-
z;^8f!w|eIyC+FhmXW`r^p`)&dH{fXh@Z40|g#DkJAy1aKgHeA<-*=xangFAWP
ziJipjMhP$U>_@0<$Mk^@x3ootHyJbkN0yr~hT;?uy+#u&aztH!=mc1%_Uqpqf9$^K
ztAFe7GTf@@l|3Xre}6Y1^|{DUEob%LL46axAB1@Tbl6V^_c;?wsP=cqirLJ!n0lf~
zxu1=cWGuQ!$xg6_(>apxL+Q3t#-Uu-Ua)&PbKud<1>gSW>1M+}jo^(b-*Z|}8ozpp
zpi>$mG|e_aB0%2`f+kTPC$1w^-hTykjp5?J#k*OcqTYmgau%)
z$8CpZr#Y|kgEl{g_d2iIyaC&2jn;-zN|VVrxa5W)uUPF+0H;^}y9pjvLQjDeBd5(B
zag|DjsLqtHK-AnTc&BSQIPgW@*Q(Wg>)V5dY(#)g)95u89g!B5>P$aSp!u+I%^WP@
z@9siobYI-xJ*I+%rMk2rUeOvff@z}+wqj9sh*B$}2l}A7
zOultHM^DzvE;}_d25jShFV%FS0i_z#(wv7qId8jdoW|Bvhm@rG1dtxi1y^Rb13#*o
zl>~h4wNGuF*UU6N6Rju!(*Xl1df6~X&+-5%6J)0MzqxOG5O)&qLJ(dV8DncOJbp4p
zW+)368_v!E|!svo)hCX3yU3FDr<**)*fP?26;2
zY!a9|dI0&a^asUA-{tS$m+#-*%?ay8sF47kYW|e98i{Zwg3z)(@aq~I1P5#GGLt)e
z@T1?a`mw2RnwesAc(@Rog-y&9)YK?p6s3%l;^4>cZ=I-EfyPJzXlKBoM)W{o5hPa@
ztrxD#eWf(CIL<2rcvoN>OQwaRq-d>izt{nf9F{fZrRKs8Jh4CZ2oNdwvxU-jBY3&Y
zsOU(G0aS?go{HB%>Q$-cxt-mHUlx?Et~f5XXam;hkd8}hv?7ZGF0Ca4krh=(P};4<%IdjHPGyuxK&8
zs+~bHeAZI5M4`iA{P0IN>mrsKH!-nBrlfPK;z&XP3uu2~i6H@Z1b_Gxb%S68gz(`>
zJwFNNQpUnFw-l@%7F+badmiGERs9msg_>ZG6CZeAc+nVP2|0tsQ2M_z05wj`6;PM6GT%SOg?_C^f)iS)$JkNBAxPF8@2Z}N<2ZyNNBW6fLzyCC%n__QiN@`^V#A3(VMksiX?QA!?O?l
zwpLB^w_)2x*|1Ns*|qc1QGYdH?yO9(!OL;qn+A5Rx}HF2dKUfzrWnT9DpYP}=8V^o
zjRX_VtJwR)k(;(+jhM=;m5|NB?0tFCoq#>AHlOBv0X2rL+KA4V2N&2^dj^#(8s%(2
Pz@L(wx-3H4;{N{taX*q4
diff --git a/palindromed/index.php b/palindromed/index.php
deleted file mode 100644
index bc09f08..0000000
--- a/palindromed/index.php
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
- Palindrome Stuff
-
-
-
-
-
';
- ?>
-
-
-
-
diff --git a/palindromed/palindrome.php b/palindromed/palindrome.php
deleted file mode 100644
index 3e02165..0000000
--- a/palindromed/palindrome.php
+++ /dev/null
@@ -1,89 +0,0 @@
-There are $wordCounter instances of $sw on this site
";
- }
- function output($inputArray, $sw)
- {
- global $wordCounter;
- $return = "";
- foreach($inputArray as $input)
- {
- if(strpos(strtolower($input), $sw) !== false) $wordCounter++;
-
- $return .= "Facts About \"$input\"
";
- $return .= "";
- $return .= "- Palindrome: ".(isPalindrome($input) ? "TRUE" : "FALSE")."
";
- $return .= "- Number of Characters: ".strlen($input)."
";
- $return .= "- Number of Words: ".str_word_count($input)."
";
- $return .= "
";
- }
-
- return $return;
- }
-
- function isPalindrome($phrase)
- {
-
- //removes spaces from phrase
- $phrase = str_replace(" ", "", $phrase);
- $phrase = str_replace("'", "", $phrase);
- $phrase = str_replace("?", "", $phrase);
- $phrase = str_replace("/", "", $phrase);
- $phrase = str_replace("\\", "", $phrase);
- $phrase = str_replace(".", "", $phrase);
- $phrase = str_replace(",", "", $phrase);
-
- //lower case the phrase
- $phrase = strtolower($phrase);
-
- //reverse phrase and assign to variable
- $revPhrase = strrev($phrase);
-
- //compare and return
- if($revPhrase == $phrase) return true;
- else return false;
- }
-
- if(!empty($_POST['search-word']) && !empty($_POST['pal-count']))
- {
- $searchWord = $_POST['search-word'];
- $palCount = $_POST['pal-count'];
- }
- else header('location: .?error=true');
-
- if (!isset($_POST['palindromes']))
- {
- $displayPageContent .= '';
- }
- else
- {
- $inputs = $_POST['palindromes'];
- $displayPageContent .= output($inputs, $searchWord);
- $displayPageContent .= wordCountOutput($searchWord);
- }
-?>
-
-
-
- Palindrome Stuff
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/spies/composer.json b/spies/composer.json
new file mode 100644
index 0000000..25e968a
--- /dev/null
+++ b/spies/composer.json
@@ -0,0 +1,10 @@
+{
+ "name": "violet/spies",
+ "type": "project",
+ "autoload": {
+ "psr-4": {
+ "Violet\\Spies\\": "src/"
+ }
+ },
+ "require": {}
+}
diff --git a/spies/css/.gitkeep b/spies/css/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/spies/css/styles.css b/spies/css/styles.css
new file mode 100644
index 0000000..2d22bb3
--- /dev/null
+++ b/spies/css/styles.css
@@ -0,0 +1,136 @@
+* {
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ /* Positioning */
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+
+ /* Styling */
+ background-color: #bbedbe;
+}
+
+h1 {
+ /* Positioning */
+ width: 100%;
+ padding: 2vw;
+
+ /* Font */
+ font-size: 6vw;
+ text-align: center;
+}
+
+h3 {
+ font-size: 4vw;
+}
+
+h5 {
+ font-size: 2vw;
+}
+
+h1,
+h3,
+h5,
+p,
+input {
+ color: #0e3610;
+}
+
+form {
+ /* Form Shape */
+ width: 60%;
+ padding: 2.5vw 5vw 2.5vw 5vw;
+
+ /* Positioning */
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
+
+.row {
+ /* Row Shape */
+ width: 100%;
+ display: flex;
+}
+
+input {
+ /* Input Shape */
+ width: 50%;
+ padding: 1vw;
+ margin: 1vw;
+ border: none;
+ border-radius: 18px;
+
+ /* Styling */
+ background-color: #f1fbf2;
+
+ /* Font */
+ font-size: 1vw;
+ font-weight: 400;
+}
+
+button {
+ /* Button Shape */
+ width: 60%;
+ padding: 1vw;
+ margin: 1vw;
+ border: none;
+ border-radius: 18px;
+
+ /* Font */
+ color: white;
+ font-size: 1vw;
+ font-weight: 600;
+
+ /* Transition for hover */
+ transition-duration: 500ms;
+
+ background-color: #1c6b20;
+}
+
+button:hover {
+ background-color: #26942D;
+}
+
+table {
+ border-spacing: 0;
+ table-layout: fixed;
+ width: 40%;
+ border: 1px solid black;
+}
+
+td {
+ margin: 0;
+ padding: 1vw;
+ border: 1px solid black;
+ text-align: center;
+}
+
+.card {
+ padding: 2vw;
+ background-color: gray;
+ border-radius: 18px;
+}
+
+.error {
+ color: white;
+ background-color: red;
+}
+
+.success {
+ color: white;
+ background-color: #0e3610;
+}
+
+.reset {
+ background-color: #cc0000;
+}
+
+.reset:hover {
+ background-color: #FF0000;
+}
diff --git a/spies/hidden.php b/spies/hidden.php
new file mode 100644
index 0000000..ac1eee6
--- /dev/null
+++ b/spies/hidden.php
@@ -0,0 +1,71 @@
+ 'roast', 'bob' => 'ross');
+$access = false;
+
+if (isset($_POST['username']) && isset($_POST['password'])) {
+ $username = $_POST['username'];
+ $password = $_POST['password'];
+ if (array_key_exists($username, $users) && $users[$username] === $password)
+ $access = true;
+}
+
+$file = 'fbi.txt';
+
+function fileRead($file)
+{
+ if (isset($_GET['fbi']))
+ $file = 'fbi.txt';
+ else
+ $file = 'spies.txt';
+ if ($access) {
+ echo "reading $file";
+ $fs = fopen($file, 'r');
+ $string = fread($fs, filesize($file));
+ $values = explode('||>><<||', $string);
+
+ echo '';
+ foreach ($values as $v) {
+ list($a, $b) = explode(',', $v);
+
+ echo '
+
+ | ' . $a . ' |
+ ' . $b . ' |
+
+ ';
+ }
+ echo '
';
+ } else
+ header('Location: .?access=false');
+}
+?>
+
+
+
+
+ Spies
+
+
+
+
+
+ View Confidential Information
+
+Access Granted
';
+
+ echo '
+
+
+ ';
+
+ fileRead($file);
+}
+?>
+
+
+
+
+
diff --git a/spies/img/.gitkeep b/spies/img/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/spies/includes/fbi.txt b/spies/includes/fbi.txt
new file mode 100644
index 0000000..06a9203
--- /dev/null
+++ b/spies/includes/fbi.txt
@@ -0,0 +1 @@
+skinner,gatekeeper||>><<||csm,alien||>><<||dana,skeptic||>><<||fox,believer
\ No newline at end of file
diff --git a/spies/includes/spies.txt b/spies/includes/spies.txt
new file mode 100644
index 0000000..d67c36a
--- /dev/null
+++ b/spies/includes/spies.txt
@@ -0,0 +1 @@
+dale,the government||>><<||bill,the barber||>><<||hank,the texan||>><<||boomhauer,the marshall
\ No newline at end of file
diff --git a/spies/index.php b/spies/index.php
new file mode 100644
index 0000000..b07f1c2
--- /dev/null
+++ b/spies/index.php
@@ -0,0 +1,104 @@
+ 'roast',
+ 'bob' => 'ross'
+);
+
+if (isset($_POST['username']) && isset($_POST['password'])) {
+ $username = $_POST['username'];
+ $password = $_POST['password'];
+ if (array_key_exists($username, $users) && $users[$username] === $password) {
+ $_GET['error'] = false;
+ $_SESSION['access'] = true;
+ $_GET['file'] = 'includes/fbi.txt';
+ } else {
+ $_GET['error'] = true;
+ }
+}
+
+if (isset($_GET['logout'])) {
+ $_SESSION['access'] = false;
+ header('Location: .');
+}
+
+?>
+
+
+
+
+
+ Spies
+
+
+
+
+
+View Confidential Information
+
+
+
+
+
Access Denied.
+
+
+
+
+
+
+
+
Access Granted.
+
+
+
+
+
+
+
+
+><<||', $string);
+
+ echo '
+
+
+ | Agent |
+ Codename |
+
+ ';
+ foreach ($values as $v) {
+ list($a, $b) = explode(',', $v);
+
+ echo '
+
+ | ' . ucfirst($a) . ' |
+ ' . ucwords($b) . ' |
+
+ ';
+ }
+ echo '
';
+}
+?>
diff --git a/spies/js/.gitkeep b/spies/js/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/spies/js/index.js b/spies/js/index.js
new file mode 100644
index 0000000..e69de29