From 16a36b0fb7b3f0cd6fd7eca387519b5f0b7185ab Mon Sep 17 00:00:00 2001 From: TheEntropyShard Date: Tue, 24 Jan 2023 20:56:36 +0300 Subject: [PATCH] Initial commit --- .idea/.gitignore | 3 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/uiDesigner.xml | 124 +++++++++++++++ JDarkroom.iml | 12 ++ .../jdarkroom/DecodingData$1.class | Bin 0 -> 1579 bytes .../jdarkroom/DecodingData$2.class | Bin 0 -> 3089 bytes .../jdarkroom/DecodingData.class | Bin 0 -> 1008 bytes .../theentropyshard/jdarkroom/JDarkroom.class | Bin 0 -> 4886 bytes .../me/theentropyshard/jdarkroom/Main.class | Bin 0 -> 594 bytes .../theentropyshard/jdarkroom/View$1$1.class | Bin 0 -> 947 bytes .../me/theentropyshard/jdarkroom/View$1.class | Bin 0 -> 1136 bytes .../theentropyshard/jdarkroom/View$2$1.class | Bin 0 -> 2759 bytes .../theentropyshard/jdarkroom/View$2$2.class | Bin 0 -> 948 bytes .../me/theentropyshard/jdarkroom/View$2.class | Bin 0 -> 1320 bytes .../me/theentropyshard/jdarkroom/View$3.class | Bin 0 -> 811 bytes .../me/theentropyshard/jdarkroom/View$4.class | Bin 0 -> 2939 bytes .../me/theentropyshard/jdarkroom/View.class | Bin 0 -> 2672 bytes .../jdarkroom/DecodingData.java | 137 ++++++++++++++++ .../theentropyshard/jdarkroom/JDarkroom.java | 150 ++++++++++++++++++ src/me/theentropyshard/jdarkroom/Main.java | 12 ++ src/me/theentropyshard/jdarkroom/View.java | 114 +++++++++++++ 22 files changed, 566 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 JDarkroom.iml create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/DecodingData$1.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/DecodingData$2.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/DecodingData.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/JDarkroom.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/Main.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/View$1$1.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/View$1.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/View$2$1.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/View$2$2.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/View$2.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/View$3.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/View$4.class create mode 100644 out/production/JDarkroom/me/theentropyshard/jdarkroom/View.class create mode 100644 src/me/theentropyshard/jdarkroom/DecodingData.java create mode 100644 src/me/theentropyshard/jdarkroom/JDarkroom.java create mode 100644 src/me/theentropyshard/jdarkroom/Main.java create mode 100644 src/me/theentropyshard/jdarkroom/View.java diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0548357 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..af4628b --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/JDarkroom.iml b/JDarkroom.iml new file mode 100644 index 0000000..54b8c26 --- /dev/null +++ b/JDarkroom.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/out/production/JDarkroom/me/theentropyshard/jdarkroom/DecodingData$1.class b/out/production/JDarkroom/me/theentropyshard/jdarkroom/DecodingData$1.class new file mode 100644 index 0000000000000000000000000000000000000000..5e08e8a624f64d25859984bcc2779b1538412b5d GIT binary patch literal 1579 zcmb8wNpl-T6bJBs+ltjzlz2;=cyBLBESp4B$g#sB$5*6B+g5uBvvKX zB-SM^NL-Y-B$1ZbkhmC&k>k>C4o|kw*;zfy@e!S#|CD1Tia0=d>K>cuN zQ@}T0%Gv@=se)s#Rd%*)cf;B$(nxEnl(CANmRsQCy+NOsFO&s>Nyo9>`Jz=W+jMv` zwPT09ylp$4TiSi4oVVO;cspykx7|`{C%j;1O4)*wTd+K9D4GyxOc!#FXYj@TR6)h(hPCA~Qv)x3^P}*~8vBVrL6iAmUZpL0J@C~=rUgs3A zNPIGsEa)uX8KvJ0;udn`vr50kk3{J&DHfD|hhkCb zcPW;X{+wc2>AMswN`Fm}RQevpIi>GYoLBk*MM~+16st;qK(VIuhZO5de?)OX>5nNc zD*c4wlG2}0q?P`ZVngZAC@w4gh+q@^z4UDJ=)u@V6 z9aCde$JIF12{l1=QcY5wQd3l8Dn>P~;#8;Aw7}^9=omfPfAvTp^q*IFdVXy~1^joc zV#Qv+CD1;c4Au1aY0K$WcPpMie7NSz^{s6?9s%&63ROx5>tCUPxWpi~#qj7agz_>bRzi}ha z4;ly92aNZ#4;lyAO~wb<&Bh1WEyhjkR^w)Nn{f;KkZ~*fuyGr^-S`mui1A_eQR8-Y zhw%}1r}0sCmvINX+qje6W8B5=HST8j8TYW2aWA{yxQ{(xtk{Fb{p=y*0roNDLH2Ru zA@&LOx75WtoTT~y$EkL}hfXx1i)uHHp@%x&iv;?x423lMaT5c$jX}JOA-qO2-k|dy z;shSk&iIb@#xJxhexrTyJMD`{AQMzs#(^cTQ6iK*&njB12F0h&Eb H3CMo{=BHYL literal 0 HcmV?d00001 diff --git a/out/production/JDarkroom/me/theentropyshard/jdarkroom/DecodingData$2.class b/out/production/JDarkroom/me/theentropyshard/jdarkroom/DecodingData$2.class new file mode 100644 index 0000000000000000000000000000000000000000..ca2b30dfafbc70ca44366dc6c39f122feecb74af GIT binary patch literal 3089 zcmb8xXmw%anvJPnwCqE0xsh&24W#9D!76BdSOOpaG1eaP)yA|Th-JS zwX!U=GIvc)&B`{jf>tZr_ub0M%9iIKpEKuEZ|cRve9w=2XW-763&;OFcmzOq!%Rd4 zmJpUE;#w?AL=4vvt|#0;xRG!Z;by{e!V1Dl!YzbVgw=#Kgj)%>5pE~kL0C&zM_5m| zlW-T|Zo&q_J%oD+8wvLj?k8*_Y$j|WJV1Dm@DO1u;bFoy!gj(A!cM|2!fwJI!d}8Y z!Xt$Jgad?wghvU72!{zr2#*nt5*{Z!L3omIjPMlUX~HvvX9>>{juW0IoFKeFc#-fD zp^8vVc$x4D;Z?$Ggx3jg5Ka=_B)mm2_NqM1SJ22V~`{lYeT2Y@rV!$;h81#nw1?)(~ z%gc^=WnOpG=k*4o;ZS*H#Ak;+?oy8(o*oW`%G^2L;*iH5EXlE>c5>GY19c1hB|$qH z3-inL$}6=iYVji!oD{Wek4n%<3hKN{MS3 zv*j`S7;c^}JY9LZ@pR|u!PAqc7f(7*Z=Sw9Z49*kA3K(J*T43tfzeKa{&RQpXR|!U*CRbe`_8bUQg3lo|0L8F{q)*|&U^>0;5#c| z@bI4J$4a111P)o8{nH+Sk(OjS_QSCc)|j*;XPk8`RTJVQr>b@1Osu17y*OP7s@9LQ z0jb(BP9fswHPW0U;%7G2+(g9By+G7ePkEu{rXo@GW|}V&^;B=J^%laV`o&tmMATQk zrPf=C2CBCf4VBwy$6P9e>X&IfSu|4pa;>)&NvgNgdWvYQdaBmbL=)B9YrTWGK=qDV z?<6i%-L3V`qN(a#wBA)TQ@xwkyNiod@1gacqPgn5w4N?nsNP%aSBQ&M&(M0NxJ30n zTF(+KRqw0yD@7~SuhM$9Xsvobt>=g~s`uCW0CB161GSzjE>nGw)(4AZ)rV+3Ph75g zzG$mFR6AyvXs7yct&b2Xs*luqfk;)oQ0t>an(CvqK1Q@xeXQ2Ui4Lld*ZKs}QT2&h zpCme|K3VHigj@BgTDL`K)r+)VEV`)f(YjZ3RehS)OGG!-eOmX6?y8rH9?H{2PvwB< zrCcV`m4l+Ua!6dETrM({XNXMYu;`;45n0Mn(YMw+`POP;Hs50tk{GY?^pAcaGn1n jgE^STD+|}uT&ek3Q1iGDi)!j({yLW@k&lk?BS3!x!l$*K literal 0 HcmV?d00001 diff --git a/out/production/JDarkroom/me/theentropyshard/jdarkroom/DecodingData.class b/out/production/JDarkroom/me/theentropyshard/jdarkroom/DecodingData.class new file mode 100644 index 0000000000000000000000000000000000000000..30c36047e64b6ddd80e5656c789c198705885de9 GIT binary patch literal 1008 zcmb7DTTc@~6#k~S-L?x1AR;P)T9ksYR*f$uB+xENvBE<)4I3YtX*-s!+g-Aqn((s> z4;V520DqM6>_U*5nBY9j%y;HozH^zMzrOtd@CKzE@+f4H!-|GyIV4fY;W<_#Nm0XE z4%+4Ox`r1THW-YW@5`{_iQ!NV8S<6Gs?|E&+iO@h1KVeqs098{312mZH+<)m>j6j0SBP+M?}|WTqZ;gx3_I8{sQqN*%jYto8apn(A0eUxmTR>F`*DU9;a6 z;ioVN24+=uf-VuS3MGiTzSZ%rV&)pbDD22RH;OQQQ*Se>nt}UxU|uA)9xWRGH4%>a%Q4Di`dR_@Uk7OFwH=*L+YZn0Jnb6S>@y@TkaW(G`ik@!G8fPY=rPDf92g=Flk`tPiIpgUZCFJ7 V3E>2u5+hKu3Hr6s(qlb3e*>Dw>G}Ww literal 0 HcmV?d00001 diff --git a/out/production/JDarkroom/me/theentropyshard/jdarkroom/JDarkroom.class b/out/production/JDarkroom/me/theentropyshard/jdarkroom/JDarkroom.class new file mode 100644 index 0000000000000000000000000000000000000000..d1a33138a91eb7c3195dea80e55af4e10b246533 GIT binary patch literal 4886 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 HVc-7%#c)xH literal 0 HcmV?d00001 diff --git a/out/production/JDarkroom/me/theentropyshard/jdarkroom/Main.class b/out/production/JDarkroom/me/theentropyshard/jdarkroom/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..73d1253f2e3b1bb7ee259836e1b14e2ed6042ead GIT binary patch literal 594 zcmaJ<+e!m55Iw1D*RIuGyx$c;st@jqZxul-6=c;1MNyy9ZfsL`Hl>|9>>qNOl!-bf&oEiK3R?V*`w>qX{)y2tX_R}dxo!~I*dJ*I??iQUT~wvjlCg}N zmL!WIWL(T=v4BMvOAKrON;#T@cf&oNZ$a|*`c08 URFuc?57Gh(C{ms#CY!?eC&qk*XaE2J literal 0 HcmV?d00001 diff --git a/out/production/JDarkroom/me/theentropyshard/jdarkroom/View$1$1.class b/out/production/JDarkroom/me/theentropyshard/jdarkroom/View$1$1.class new file mode 100644 index 0000000000000000000000000000000000000000..2d715822058dad23f4770c9a65adb104e90678bf GIT binary patch literal 947 zcma)5U2oGc6g_UcrYWH-9UGLfv9XNx0~RXrRx}BPAt7bFZ1ml2tR-6-PmbGaKMQFv zi3ffFKMHZ(PAv}z8Y%Ym_3^nM$Nu^2`wswb;MpkQX&E-Q%&=|a9-f(Dr-a=yo@38~ zYhjpN$`B*}2F4E;1E zXDCOR@RN9ODME(rMsUH$+~X7Ni80mVotXV&V|GnCj3RIT1H({0l_NC}A7YcFZE8O> zlvKiTI!I&|r{^a^M>2F!#(f7B95`6VhJyy04q9l_vG>%+fcHgW;iZFDIHV>o(POtm z+5N46cOk#hLNV+u!NQPlm|81ip11?jGT_&8q#4#1h5K{2(RF$?UK9KO`%dt+d4>xX z5;}|IgrWI|0=`T&C*4(d7C7PQxp%4+wUETX4qaWFZZWG?O)JUD(O5j3)xJf(bpv*T!faZp z6~Dn+P*(^FN^S+acuX&75u!d1QO6_Nqei1n*c_f2wedWI>W_LB{8?mo640}POUbUK4mAsbKkTgXvuE}s$CIQPQN}W+_m_8qa zRVLKA18T5%7L5jTCvGJ*wHa`!0d8`U=R`oBN3}3c3G=qf8nG`>LRrJ)xkD1Tgv$aW zD00XW)#Zc-Zn{so+?SrLs!*VUWr2IRZ{UHzLp&0Aj1_@ZJfW`6tzng|GG|{Cc#3DV zyB;Dm|p3Kh2?OS=otEmUZav@RAL;H zxQ-c2U7gEPaG%iNba z&0(TB_~vIVvuaY6%C}VIKjnCOW?6=4DOQ9Og83Y245!-(3PEJr;?%kXRz&ta?_r|`U5y`ac1 zMj`N08BRy>a&Ts77>{Bzj+7yz-dXjK>h75`OhhpWQ|X-2a5jqV$Z43?U)7^mYSfhTiS`bP=rk?U z>k>#N*Tm5<4ZW2$|D7*R$F>|TrbL>o(r?de)(=(be@Cne8`o%JG_jYt}P!skG^O zN?^vfHx``a3~M4a>^Y`2!Lt&%AW$1R>08Li8PBvW9t!%jnXJpO}8g!1JF_|>X_yIo0a0^6-?O7)y)pdb#6}LSK7Q)|WWpcJl zHwL9QX=eqt-#6qsb|I;w0gk|y)#zHiJ+|d~hUK{$&gpRB>6pcwhIt(eSk&-}j#u%T zK$Xu}1X#oCI^Mu}9dF_-hQmKCIH==oyrbh?yeAMJurjve$c)F8Cml=x0$&P1!$lom;ex;>UrQ*IhiA=PR?@AiG2#_h z5s#bh!MKjE@r{meaY@H__?{3dooQoSvWhP2xPl*a{D_|fHmry&=75f$6;!+K3v8l2 z(Y9>Woe3+ja}5%hyDKIH2};y_(w!oUH6T!$RAmq~GAeNuof)4TP_$|m%ZOuG?iuL> z6gA?CXUy3|C8kVMd8x{5nHVmYyE9VwjuofEcfuyD zHeRU}*dOi)Va64!ItuRjnQ>x#irGee_4h>oXm6n_3RDoV0lx||thPpiwKh)bC?zX9 z34sp)UTs12jA>;DtYKqLwUmM%%UvMMQEW_=b4D(q(%8>cfsMY{g_JwbiccN&sZ{F+ zVKr4ia~XHJ;M)_jrXX8oMo_~lt$OU73TEk0UvIH_7U@(_Nm>22BPSet)?$;{5DJ3N z>o?(G616hX?~R!1Uli&mtLr9OTgh^04U?x3*P^4!yM9yVvJ_UQvgytfmU?gZ(6Q4; zhPuZ%=M2sWWq(V-{!s5&l{5iJg?2*eWuCoUiyN1VC(KJM{YY`Xrj12=R)M}!Vm(DN zMFkzk2e(LOt-6!;ygKl8mYO1YtZT|+{dH)!QC5OKP(FAI(dN?Is8BmSkILgMe_~JL z4V2tKRjfLXn!@@z9>^mWY&P7&##n70byv|+Jl<41uKEp|$8KUvY-=75w(y_FLq$Q` z3L;_;=kbWLD1H@XgUxyDxaRwH372Vo1j^GcRP))4b@a8CKGxIAMtZiNzV)CTC;1&X zj(s?f$8Zsk;}SZ^eSnkWAg4p8kI-In*K*di<56N&k8|YNM?|hr$A0oDl$VP5Em6t= z+HsIno$r9NgSR?K*@np9IH}=~hOUNxu@xm6p3v|lgof@2g&yXm5}MY_cZAA--TcRV L#a!^WGkE<6Y0~mE literal 0 HcmV?d00001 diff --git a/out/production/JDarkroom/me/theentropyshard/jdarkroom/View$2$2.class b/out/production/JDarkroom/me/theentropyshard/jdarkroom/View$2$2.class new file mode 100644 index 0000000000000000000000000000000000000000..8d2daf0adc8f3636e6b557c0687ad609f6c38fc7 GIT binary patch literal 948 zcma)5U2hUW6g>l!WpSlQZ56AvT51>2t~S15n$%5Anowg><$cOd%C^f4nH?bgStivc zKKKLtQN}yaKp%{<$=)IHLyu{*QIOB%4IuC@-p<6undMWdHb}t zkz%9y4XkmE%-0F#9@#u$ETTeoZHmGQ?$eI&6E+gt>T<*N1=$Iz+Gt)Q+qeR|LT2eew@ AvH$=8 literal 0 HcmV?d00001 diff --git a/out/production/JDarkroom/me/theentropyshard/jdarkroom/View$2.class b/out/production/JDarkroom/me/theentropyshard/jdarkroom/View$2.class new file mode 100644 index 0000000000000000000000000000000000000000..a52baacc1172120ab85d09f1c6e34a4a08bd0cd6 GIT binary patch literal 1320 zcma)6?M~BB7=F%HsH+`}2`C6EZfIAK!o*JyWrN|!@DF5({ySSwSaGzb?FQV8@fQ5S zNHp;RyeQ*)IwF{nur50v@8|Qr=Q-#1pC7*fEMr?mE`br4a+s6DyoNNMs94Z22umZ$ zqKYLAiS8yZB~RtBtgL?nG(5v|xqYGHrHWS!df9b_Uu^Oq5CKE7&70Y}XNwB2i6+Bn z<$$;Ou@xLS?!L7hNmm$#A~WvW6@KEiLWZ%(&f-U*Rs1I=!@;oO1ldJ~Oyy8mVM7Qv z^t~@9L4&NU1DpGwea}0zs*X64=BtkDglh~nqYwLT&L$^hyP;12SISqxy%Jik%Agdf zP=?`(G=j zUdykGk|T2_WD6E#w+YdvTW@*+RkS0*hG*-T#A}9`Yg?$}4kmPrVob+4Zc9IcGJCCG zHlJOR#;ZEsfZE@eM_$KUywkCcf{r3KRBY-fVN1t*P<5F;vQme7`Na@76E49)muTAK8o>4=2j_V$#W^|h>^P>p%l@fBxT{zh3VR8w(y;{=x)+Rsn>!yQ>R`Bo)OU&!!*mo~Mtn?J z4P>we3!C(6m53o*xJMe3a#BXzC$#b_NV-P23Yft|iXvqhWD%#|EbU@=MDaj=bnLiA Rt4Y#~&@8`1cZ%wu literal 0 HcmV?d00001 diff --git a/out/production/JDarkroom/me/theentropyshard/jdarkroom/View$3.class b/out/production/JDarkroom/me/theentropyshard/jdarkroom/View$3.class new file mode 100644 index 0000000000000000000000000000000000000000..2755581da5431145c4477420ba6b636e9d9c6fe7 GIT binary patch literal 811 zcma)4+iuf95IvhZHE~_y7-*r~dPx(AWwq>K%cV_JD%CPn6^;ee*W!hbjsVqfot8X*vixl7^cM ze;^Z?KNP5W|AB9G1dOdTB7t&SCiLuRa6oE5Jcv2tw$pAHcS0p~{3~f_IRbVoNl0zQ zVU`hxtCM?GH&~summaAuHKpb+Y02w{;c>{_pCsKl&1BNsro5jCqLvR!dtaqkKovD^iN0J^79wH}AF2O4`(5vqyO|O>%*X*Z2$4DW1^mpQLM^WVS!p=)%o$h&0o{t3s?lhPi4WjJgr?DbGYfoyo+;97wNTw>2+Z-yr)d~6#s3AELm5HL8Mq80V54Tjjz5yZ6Sc7(ON(hmFgvXftAf}y1U_F-}Y(W zweRQjTR*p>!O@w1?TphusnhAXyCEz{F)-Y{_uO;u{hf1u=NumVd+$#Ghw+PyV-d9A zIWashhHeF|=#i08P>WuLBzjm@yRv@@%llj)P5v`fN9PmS4Hmd#s5S3;wwmu9nWI#UsoVy!!+JBj@gc4hNC z?M`uSy0%rAccw@yeNAKbv~5}W^oY)9h58ZQ)ZJqeSh5Oz|4oAtvLV+dfL*JhT@_jT zh=g#4?37TS)lGh;m>=i%FdH{W63bdSW{faf7wfVxEG&_r4wxplGX`@UPRreohM71_ zhK1(H2eF3%(}f1hk83Pp@>$`h6UnM=STc;ykXzH;IajyLJ~8hS_DN*QwzZVV1tQcG z^&yw#rcbkiXRC}!3CfUFv~#>)7Y>Pt@az*zAb0hdIm2?u+o!oZWoatfF(skpk>OSG z1d=LtA)#V7+Qd1Xd?If3c+;!rx#^GvV&|HQX&5TI*K8%42R#*B(t%&C~ibs4XyconaycpY!ZcvHn&xS`^0ydxn#VCF2_<~f&UF1JnY z#swAP?C9p(ZJ!-slr3 z9l+9hXxLAO~z>n&xNSqEJHX|G;0=@ci1gX5>%ymdm1q z^%Q^s({Y)Zqd=u72-Te=a0<)ixI@KvKb4iERrsdMH@M=OVLs>f>)g=jvMtLXe-m1WsivT@U=URR{ zD(CKsu1HnanX+ajv@e5Tx{Uge?bCBb_R9E1#kcrD#UW5dX!Wf29HpBx)-+FNy&ggZ zkxfuqSoSbQeYYVRG?q?*Hb5Kiq`z`E3Z)Q(2A=)ncZCDf%-B}8IM z3F}KxQ>oN#QofDwJ!}9<*!a75`yLv%cz2#dBSr|rc^tq6WT0U$?Zr_e-orlZr>~d^ zT-2Lrb^r$viiQM7%J?3Tw!k-b7xna3=q{oqY$_qv8Ey{$g`FL-h7vY+{DH<2wv-iO zO(i_`8(K-)Owx|~*gCp^$79<{*xnqbp@bcDXpc~j?JOZKfY(3(Z$pH}QN(Z&O}K>Z zxJ(9&5uhvR#8nJpoFut`A!8Lo#_%MbqI+UEg{R4oFrJ~iA_)D1Lo%M-L4r;agwTZ} k^bM1RN0FvkjASkJ6+hqMM|_WFoTRx*8mH*OEKVc)A0u2i)&Kwi literal 0 HcmV?d00001 diff --git a/out/production/JDarkroom/me/theentropyshard/jdarkroom/View.class b/out/production/JDarkroom/me/theentropyshard/jdarkroom/View.class new file mode 100644 index 0000000000000000000000000000000000000000..f92e9c8d83aecce3ad09fb502465ec5108fbccaf GIT binary patch literal 2672 zcmbVO+jA3D82@c^*<@Lugcb-;2~Z$SOH=OJf=bgCQqqfUDWqQNX>!_bo9u?&O83)g&BaQp%n!& z+z^AU!V$A8hN2jj6zECQCBl%$$plyS8D@ z^(feyuuR8graQ@UMXn$?Ffu$bJ)WHESD*}dFMbPP%+GLpg3aVe5=vPamYZa@A=Xu)*PS;g z=EJExkGu1no33pYZaVYK&c+wA%wDuDD<7XU_%eCYG9*s1n^w_P&|JxjExYkVO-xEM z>J*#dIR#CRM=hm7B}-1KD!u|UpP)J_q@=236tt{+x?~&KUN$GuvzcMK4(a%3imq#! zYa!J@>Xl+r@XgvRPY7%XXFy14TVt6FcbwL)t}X=^qMLxC?eV-YH@7-A$>UCc5>D6vdJEhzd!wP;_O$I^M?z8xxi!q+AF4 zsxO;3cTXVyp^lFPQ)C`%sb4e9thKz>Jsce$;}ad9;xiqe;|uZ~O(sPbXmq$cYV%oc z+dMmN+#(+Cj;_B)HO}=2PF0o|yT65hSIxH53OWtEwJ0bTHXNiNVyqlq5A5W@hFs zTfx!II2MQ5W)$m^t6mEKEkI}9THXkp=~73eLjBve2&=gYa(!KdJoZHJD;+K_v8h#r zE|&t!EYfX6gz4k6teA5XIm_WA1#UB!S{P|WCI6ZQrRcs9!ZDtsd5KS0kCSk{)FKXz zPD~n(A@3@0bgFFC%wZH+0k%)72XnjW%$#pP*bt?5&~re)3MN&_EqRZv5wHz61J7G zokWeE4ibijW5+`~rLZYoMl&7UwTj){-ZJ*kbGX|V_IdAPZ`jwU-N!!iwLeWxTkb;% zdt<-Q=qurwG7gZ%h%k7t+aLCZ{ZbqYdqaoFc6&^?I9x_+I&@?eN4wRq8Y|)0wXj-3 zG_3kdh=o<9g!ZsX33U7{6Ml}yS%hia2`|Cbj9qBKZX6<6Cyo#-$B@8f4AOrJSCByp z28K|;2ySB>_iz F{{Sl3$rb SAVE_INDEX_TABLE = Collections.unmodifiableMap( + new HashMap() {{ + this.put(1, "A А"); + this.put(2, "B Б"); + this.put(3, "C Ц"); + this.put(4, "D Д"); + this.put(5, "E Е"); + this.put(6, "F Ф"); + this.put(7, "G Г"); + this.put(8, "H Ю"); + this.put(9, "I И"); + this.put(10, "J Й"); + this.put(11, "K К"); + this.put(12, "L Л"); + this.put(13, "M М"); + this.put(14, "N Н"); + this.put(15, "O О"); + this.put(16, "P П"); + this.put(17, "Q Я"); + this.put(18, "R Р"); + this.put(19, "S С"); + this.put(20, "T Т"); + this.put(21, "U У"); + this.put(22, "V В"); + this.put(23, "W Ш"); + this.put(24, "X Х"); + this.put(25, "Y Ч"); + this.put(26, "Z Ж"); + this.put(27, "0 0"); + this.put(28, "1 1"); + this.put(29, "2 2"); + this.put(30, "3 3"); + this.put(31, "4 4"); + this.put(32, "5 5"); + this.put(33, "6 6"); + this.put(34, "7 7"); + this.put(35, "8 8"); + this.put(36, "9 9"); + }} + ); + + /** + * Table for decoding bytes from decoded Internet Code, english and russian letters + * Ok, this is bigger + */ + public static final Map CODE_INDEX_TABLE = Collections.unmodifiableMap( + new HashMap() {{ + this.put("A", (byte) 0); this.put("А", (byte) 0); + this.put("B", (byte) 1); this.put("Б", (byte) 1); + this.put("C", (byte) 2); this.put("Ц", (byte) 2); + this.put("D", (byte) 3); this.put("Д", (byte) 3); + this.put("E", (byte) 4); this.put("Е", (byte) 4); + this.put("F", (byte) 5); this.put("Ф", (byte) 5); + this.put("G", (byte) 6); this.put("Г", (byte) 6); + this.put("H", (byte) 7); this.put("Ю", (byte) 7); + this.put("+", (byte) 8); // this.put("+", (byte) 8); + this.put("J", (byte) 9); this.put("Й", (byte) 9); + this.put("K", (byte) 10); this.put("К", (byte) 10); + this.put("L", (byte) 11); this.put("Л", (byte) 10); + this.put("M", (byte) 12); this.put("М", (byte) 10); + this.put("N", (byte) 13); this.put("Н", (byte) 10); + this.put("\\", (byte) 14); // this.put("\\", (byte) 10); + this.put("P", (byte) 15); this.put("П", (byte) 10); + this.put("Q", (byte) 16); this.put("Я", (byte) 10); + this.put("R", (byte) 17); this.put("Р", (byte) 10); + this.put("S", (byte) 18); this.put("С", (byte) 10); + this.put("T", (byte) 19); this.put("Т", (byte) 10); + this.put("U", (byte) 20); this.put("У", (byte) 10); + this.put("V", (byte) 21); this.put("В", (byte) 10); + this.put("W", (byte) 22); this.put("Ш", (byte) 10); + this.put("X", (byte) 23); this.put("Х", (byte) 10); + this.put("Y", (byte) 24); this.put("Ч", (byte) 10); + this.put("Z", (byte) 25); this.put("Ж", (byte) 10); + this.put("a", (byte) 26); this.put("а", (byte) 10); + this.put("b", (byte) 27); this.put("б", (byte) 10); + this.put("c", (byte) 28); this.put("ц", (byte) 10); + this.put("d", (byte) 29); this.put("д", (byte) 10); + this.put("e", (byte) 30); this.put("е", (byte) 10); + this.put("f", (byte) 31); this.put("ф", (byte) 10); + this.put("g", (byte) 32); this.put("г", (byte) 10); + this.put("h", (byte) 33); this.put("ю", (byte) 10); + this.put("i", (byte) 34); this.put("и", (byte) 10); + this.put("j", (byte) 35); this.put("й", (byte) 10); + this.put("k", (byte) 36); this.put("к", (byte) 10); + this.put("&", (byte) 37); // this.put("&", (byte) 10); + this.put("m", (byte) 38); this.put("м", (byte) 10); + this.put("n", (byte) 39); this.put("н", (byte) 10); + this.put("o", (byte) 40); this.put("о", (byte) 10); + this.put("p", (byte) 41); this.put("п", (byte) 10); + this.put("q", (byte) 42); this.put("я", (byte) 10); + this.put("r", (byte) 43); this.put("р", (byte) 10); + this.put("s", (byte) 44); this.put("с", (byte) 10); + this.put("t", (byte) 45); this.put("т", (byte) 10); + this.put("u", (byte) 46); this.put("у", (byte) 10); + this.put("v", (byte) 47); this.put("в", (byte) 10); + this.put("w", (byte) 48); this.put("ш", (byte) 10); + this.put("x", (byte) 49); this.put("х", (byte) 10); + this.put("y", (byte) 50); this.put("ч", (byte) 10); + this.put("z", (byte) 51); this.put("ж", (byte) 10); + this.put("/", (byte) 52); // this.put("/", (byte) 10); + this.put("1", (byte) 53); // this.put("K", (byte) 10); + this.put("2", (byte) 54); // this.put("K", (byte) 10); + this.put("3", (byte) 55); // this.put("K", (byte) 10); + this.put("4", (byte) 56); // this.put("K", (byte) 10); + this.put("5", (byte) 57); // this.put("K", (byte) 10); + this.put("6", (byte) 58); // this.put("K", (byte) 10); + this.put("7", (byte) 59); // this.put("K", (byte) 10); + this.put("8", (byte) 60); // this.put("K", (byte) 10); + this.put("9", (byte) 61); // this.put("K", (byte) 10); + this.put("?", (byte) 62); // this.put("K", (byte) 10); + this.put("!", (byte) 63); // this.put("K", (byte) 10); + }} + ); +} diff --git a/src/me/theentropyshard/jdarkroom/JDarkroom.java b/src/me/theentropyshard/jdarkroom/JDarkroom.java new file mode 100644 index 0000000..5327cbf --- /dev/null +++ b/src/me/theentropyshard/jdarkroom/JDarkroom.java @@ -0,0 +1,150 @@ +package me.theentropyshard.jdarkroom; + +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; + +public class JDarkroom { + public JDarkroom() { + if(instance != null) { + throw new IllegalStateException("JDarkroom already running!"); + } + instance = this; + + new View(); + } + + public String findInSave(File file) { + if(file == null || file.isDirectory()) { + return null; + } + + StringBuilder russianCode = new StringBuilder(); + StringBuilder englishCode = new StringBuilder(); + try(RandomAccessFile raf = new RandomAccessFile(file, "r")) { + if(raf.length() <= 0) { + return null; + } + + raf.seek(DecodingData.CODE_OFFSET); + + for(int i = 0; i < 16; i++) { + byte b = raf.readByte(); + if(i % 4 == 0) { + String[] letters = DecodingData.SAVE_INDEX_TABLE.get((int) b).split("\\s"); + russianCode.append(letters[1]); + englishCode.append(letters[0]); + } + } + } catch (IOException e) { + e.printStackTrace(); + return null; + } + + return russianCode + " or " + englishCode; + } + + public String decodeInternetCode(String code) { + if(code == null || code.length() != 16) { + return null; + } + + byte[] bytes = new byte[16]; + for(int i = 0; i < 16; i++) { + bytes[i] = DecodingData.CODE_INDEX_TABLE.get(Character.toString(code.charAt(i))); + } + + for(int i = 6; i > 0; i--) { + int byte1 = 2 * i + i / 6; + int bi1 = i % 6; + int byte2 = 15; + int bi2 = i - 1; + + JDarkroom.swapBits(byte1, byte2, bi1, bi2, bytes); + } + + String bin = Integer.toBinaryString(bytes[bytes.length - 1]); + int index = Integer.parseInt(bin.substring(0, 3), 2); + + byte firstRoundKey = DecodingData.KEY[index]; + byte secondRoundKey = DecodingData.KEY[DecodingData.KEY.length - 1 - index]; + + for(int i = 30; i > 0; i--) { + int m = (i * firstRoundKey + 45) % 90; + int n = (i * secondRoundKey + 45) % 90; + int p = m % 6; + int q = n % 6; + + int byte1 = (m - p) / 6; + int bi1 = p; + int byte2 = (n - q) / 6; + int bi2 = q; + + JDarkroom.swapBits(byte1, byte2, bi1, bi2, bytes); + } + + byte thirdRoundKey = DecodingData.KEY[bytes[bytes.length - 1] & 0b111]; + + for(int i = 40; i > 0; i--) { + int m = i * thirdRoundKey % 90; + int n = m % 6; + int byteInd = (m - n) / 6; + int bitInd = n; + + bytes[byteInd] ^= (1 << bitInd); + } + + int intCode = 0; + intCode |= (bytes[8] & (0x1E000000 >> 25)) << 25; + intCode |= (bytes[9] & (0x01000000 >> 19)) << 19; + intCode |= (bytes[9] & (0x00001F00 >> 8)) << 8; + intCode |= (bytes[10] & (0x001F0000 >> 14)) << 14; + intCode |= (bytes[10] & (0x0000000C >> 2)) << 2; + intCode |= (bytes[11] & (0x00000003 << 4)) >> 4; + + int l1 = Integer.parseInt(Integer.toHexString((intCode >> 24) & 0xFF), 10); + int d1 = Integer.parseInt(Integer.toHexString((intCode >> 16) & 0xFF), 16); + int l2 = Integer.parseInt(Integer.toHexString((intCode >> 8) & 0xFF), 16); + int d2 = Integer.parseInt(Integer.toHexString((intCode >> 0) & 0xFF), 16); + + String[] letters1 = DecodingData.SAVE_INDEX_TABLE.get(l1 + 1).split("\\s"); + String[] letters2 = DecodingData.SAVE_INDEX_TABLE.get(l2 + 1).split("\\s"); + + String russianCode = letters1[1] + d1 + letters2[1] + d2; + String englishCode = letters1[0] + d1 + letters2[0] + d2; + + return russianCode + " or " + englishCode; + } + + /** + * Swaps two different bits in two numbers + * + * @param byteInd1 Index of first byte + * @param byteInd2 Index of second byte + * @param bi1 0-based bit from first number, indexed from right + * @param bi2 0-based bit from second number, indexed from right + * @param bytes Byte array + */ + public static void swapBits(int byteInd1, int byteInd2, int bi1, int bi2, byte... bytes) { + int bit1 = (bytes[byteInd1] >> bi1) & 1; + int bit2 = (bytes[byteInd2] >> bi2) & 1; + + if(bit1 == 0) { + bytes[byteInd2] &= ~(1 << bi2); + } else { + bytes[byteInd2] |= 1 << bi2; + } + + if(bit2 == 0) { + bytes[byteInd1] &= ~(1 << bi1); + } else { + bytes[byteInd1] |= 1 << bi1; + } + } + + private static JDarkroom instance; + + public static JDarkroom getInstance() { + return instance; + } +} diff --git a/src/me/theentropyshard/jdarkroom/Main.java b/src/me/theentropyshard/jdarkroom/Main.java new file mode 100644 index 0000000..2026e2f --- /dev/null +++ b/src/me/theentropyshard/jdarkroom/Main.java @@ -0,0 +1,12 @@ +package me.theentropyshard.jdarkroom; + +import javax.swing.*; + +public class Main { + public static void main(String[] args) { + JDialog.setDefaultLookAndFeelDecorated(true); + JFrame.setDefaultLookAndFeelDecorated(true); + + new JDarkroom(); + } +} diff --git a/src/me/theentropyshard/jdarkroom/View.java b/src/me/theentropyshard/jdarkroom/View.java new file mode 100644 index 0000000..f232178 --- /dev/null +++ b/src/me/theentropyshard/jdarkroom/View.java @@ -0,0 +1,114 @@ +package me.theentropyshard.jdarkroom; + +import javax.swing.*; +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DropTarget; +import java.awt.dnd.DropTargetDropEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.File; +import java.util.List; + +public final class View extends JPanel { + private static final String YOUR_CODE_IS = "Your code is: "; + private static final float FONT_SIZE = 20.0F; + private final JTextField codeField; + + public View() { + this.setPreferredSize(new Dimension(800, 600)); + + CardLayout cardLayout = new CardLayout(); + this.setLayout(cardLayout); + + JLabel codeLabel = new JLabel(View.YOUR_CODE_IS) {{ + this.setHorizontalAlignment(JLabel.CENTER); + this.setFont(this.getFont().deriveFont(View.FONT_SIZE)); + this.setFocusable(true); + this.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + cardLayout.show(View.this, "DropLabel"); + } + }); + }}; + this.add(codeLabel, "CodeLabel"); + + JLabel dropLabel = new JLabel("Drop save file here, or click to enter Internet Code!", JLabel.CENTER) {{ + this.setDropTarget(new DropTarget() { + @Override + public synchronized void drop(DropTargetDropEvent e) { + try { + e.acceptDrop(DnDConstants.ACTION_COPY); + List droppedFiles = (List) e.getTransferable().getTransferData(DataFlavor.javaFileListFlavor); + String code = JDarkroom.getInstance().findInSave(droppedFiles.get(0)); + if(code == null) { + codeLabel.setText("Incorrect Internet Code entered!"); + codeLabel.setForeground(Color.RED); + codeField.setText(""); + } else { + codeLabel.setForeground(Color.DARK_GRAY); + codeLabel.setText(View.YOUR_CODE_IS + code); + } + cardLayout.show(View.this, "CodeLabel"); + e.dropComplete(true); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + }); + this.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + cardLayout.show(View.this, "InputPanel"); + } + }); + this.setFocusable(true); + this.setFont(this.getFont().deriveFont(View.FONT_SIZE)); + }}; + this.add(dropLabel, "DropLabel"); + + JPanel panel = new JPanel(new GridBagLayout()); + GridBagConstraints c = new GridBagConstraints(); + c.fill = GridBagConstraints.BOTH; + c.anchor = GridBagConstraints.CENTER; + + this.codeField = new JTextField() {{ + this.setPreferredSize(new Dimension(250, 50)); + this.setFont(this.getFont().deriveFont(View.FONT_SIZE)); + }}; + panel.add(this.codeField, c); + + JButton button = new JButton("Enter") {{ + this.setPreferredSize(new Dimension(100, 50)); + this.setFont(this.getFont().deriveFont(View.FONT_SIZE)); + this.addActionListener(e -> { + String code = JDarkroom.getInstance().decodeInternetCode(codeField.getText()); + if(code == null) { + codeLabel.setText("Incorrect Internet Code entered!"); + codeLabel.setForeground(Color.RED); + codeField.setText(""); + } else { + codeLabel.setForeground(Color.DARK_GRAY); + codeLabel.setText(View.YOUR_CODE_IS + code); + } + cardLayout.show(View.this, "CodeLabel"); + }); + }}; + + panel.add(button, c); + this.add(panel, "InputPanel"); + + cardLayout.show(this, "DropLabel"); + + JFrame frame = new JFrame("JDarkroom"); + frame.add(this); + frame.pack(); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + } +}