From 0ef2465715203dfe8be926d2ccc337dabc612947 Mon Sep 17 00:00:00 2001 From: J1a4b4 <46267154+J1a4b4@users.noreply.github.com> Date: Sun, 10 Mar 2024 15:35:01 -0700 Subject: [PATCH 1/4] game --- .DS_Store | Bin 0 -> 6148 bytes src/.DS_Store | Bin 0 -> 6148 bytes src/test/.DS_Store | Bin 0 -> 6148 bytes src/test/java/.DS_Store | Bin 0 -> 6148 bytes src/test/java/org/.DS_Store | Bin 0 -> 6148 bytes src/test/java/org/jointheleague/.DS_Store | Bin 0 -> 6148 bytes .../java/org/jointheleague/features/.DS_Store | Bin 0 -> 6148 bytes .../jointheleague/features/examples/.DS_Store | Bin 0 -> 6148 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .DS_Store create mode 100644 src/.DS_Store create mode 100644 src/test/.DS_Store create mode 100644 src/test/java/.DS_Store create mode 100644 src/test/java/org/.DS_Store create mode 100644 src/test/java/org/jointheleague/.DS_Store create mode 100644 src/test/java/org/jointheleague/features/.DS_Store create mode 100644 src/test/java/org/jointheleague/features/examples/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..de7f88ee4b828d60025925cbe2a0fb72a943af65 GIT binary patch literal 6148 zcmeHKL2uJA82#LKZAypeVMx0mMdCV@Qee`=C6w;Kfy;{E0H`!g)J0@T)g(kyRjFtA z5BvqL{1W~PCwQOjYE3%I4I%Is+0U`xv*Q=Vj)_S0Gw(i8n}{qV#@Y>J*95n7+KP&< z*#`>Q$BcZMP=_w*VvB7mj047jzs&*uc3U*28LkBB>iZ3!h4I7wM67x%mxqrpP+AyU##`B=_i#lbyWd2mTHC8PtcKOH-VV>>e3*{YEa{Kuulepp z9Ea|@Ja%6Oem-g+JdLAt97O(H3Ifju<;|-g^5VQ7XOWjk?NBvXO{+O-A1)TXlSfDP z!)|YRWG_y7U6dajFPBa0_T77r&qnXVizxnxCr1eED>80sTm#Qc&-ue}9))qlZ)?q7 zvkdNXK)YqNc9Be*alkn6Upm0+gN?-KXk00jO9wJ}1OV1hEdyo#SzwK=(b2e4h!%uU zQlOFweZ&w-j(S`39E~f5N=`x_K7<}w=o5;NqoaRY(n&Z9O>P`84ip`zs@pd2|EIq` z{})B(&NyHk_@^8YwZU-E$CUKmx-~i8Yi*==NF2;tDU=dqdOMZ{-ii;AWT4IF0?^U8 TQivLa`4Nydn9MlvM;-VHsRzwq literal 0 HcmV?d00001 diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c77d6d518b330933d98b8800150ba4cbb10861a3 GIT binary patch literal 6148 zcmeHKO;6iE5SV6GtJEe@Yhk=7b{eE8lF#sC zxb~Oy@4%bg4JrYyRaDJLvu}2GX6=1z?Rtnvbw~X-L@grHP{u|R%`?K|tWTujJQ10Dyf=_yL~Ax9haB>d-$DR z=2=;_+kaGJDOg@v)vJ0j{P#=X|Yi7BciD+WWG zko5-$`T994`exiUqoQBh+}I81rf&9HTa!uW=wK(@Z+E6U;pC{(hP`(KfC1cAVB24RV8{+&RSAwE}<01~Bqi SJA?-!KLVBpX@r4)%D_GP^=*>? literal 0 HcmV?d00001 diff --git a/src/test/.DS_Store b/src/test/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..946c5b8581e3732db2fe3f5d4768b8db511baec3 GIT binary patch literal 6148 zcmeHKO-sW-5Z!I7O({YT3OxqA7OnLIikDdH!K)EHsMN$3jmE6>^H2&o>mTx$_;>Wp z?zW)SlOR%NVD?RBXEw~+u$vJ=$i|?(B}7RG;Xny91q|N^&6Cba#(J_qNoyR(>L!d; zh-X@m<^MB4dzTaUA`n9neA&MP%x%1D(S^+7!cp(Z?(=K-6i2;&wfZJA+1%1{-pM;f z=gPlRBflT?2faqny`ZO4rQ&dE2jN-N8MR8Qhbrj@QPSz^gs9y?$mMyIwAHAg21&c8 zbA2=66r4h{%Z?zmp7!rtDSObX80`sV&g>mhzj)U%;p;=9zcVsQ#D zFlO}({caMgX0r3Rt#ehw_!IUgpjRKv?D}C2;o2pb0rMl2+fl&NX~llKuK$;yD(89 zo@hCi|G)t4U0x{B7roPDZvT!jv-P1x7h}?n#DihI{w{O*!pdsVDLQ56 z#=lo%e;5o$gI3VLqNj7El5l1R;YHjXcPi`0Djf!K+U@IvIO-zg`Z7) zt>)S9r-@2?@XVrTQH;z0Gr$ZiF9Y_(bIQwGB3H%?Fay72fX)XOO6Xb44C3 zOY%GIo85ItaGGOk$_&iD(d^7h`y_TWM5G4u@g7l|h&(7`rGeoQ;d#~#sW?v+sLUD# zT~b0BG}?$3$2Ky+@2*APNK;BV-G6@*np5&I(_iCE$B5!jP1*Y#e6o1rWbs5s&y8x?I=D=lf|gLbFA|sO7moD z64G&kkWc4nKGutYp6BD4$qns<*YFync4xWlAHMDS2fhBP>n{)cJ=pv2R;z~h>h+tW zlhOC=N3O5U9!TNaHPUjphF>tA;O1vI%`=@(5Vc-mohc{`2m`{vb~E5kEw8!Vk10)}V}0L*lL{=#C=3V#4;kRz57OrP|KacbzX_5-7!U^jPX<(N z7!C*6o2#uGyX0EyL%%>-IIgsKmjc6-V#IPO?m&&e@3R369F`X0fyj@5p+N>=;8_{? E153+aO8@`> literal 0 HcmV?d00001 diff --git a/src/test/java/org/jointheleague/.DS_Store b/src/test/java/org/jointheleague/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e4d4f0a74bd15caed8302142ce7bcd84b4ee15fa GIT binary patch literal 6148 zcmeHKO>fgc5S>i|*(gHFp-4Ge>NSE8KBTA@Hw_1_HG%`6V3SZRjJJxN<`6~l8U7Hz zgum0i+1*q{3CE(QnvrJTcs^|JTWi-tL~68{J|pT7k%ltXS{QZ+$62?e<~?eZ{K9RML(0OEQxn#vjHp^vR_aSUd8QWpVEFe<$ZzT9p0% zA62V29z1O7rf%y`(KoY<%D7w&-uihGyB^x_V-lenUq;qg$@-j~I+1wVS(-~4e zzEAV1S&qyipBA<@asl1atx2c5S`CITd%=tTVBHH=!$BYR^H=M2OFuq*dUQJZp8d$p zPy6Pi@SR$DNfd;!hkR!4D2%leoxcweV&B8yD%UO+zJD{ zKLk+5&|~G$ZXFnG3jl1uZ3Q;}GICAeG4xnDL`{zdK8m|gEAR(w07H+JLwF$aBVcKeK^XY23|s*Kj9LHy literal 0 HcmV?d00001 diff --git a/src/test/java/org/jointheleague/features/.DS_Store b/src/test/java/org/jointheleague/features/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..438ccfc0a29ad277329b593eee892f77758e905f GIT binary patch literal 6148 zcmeH~L2DC16vyAR(M(zjIVki}SnygjrYe+PwrM?hbwv*{DVpPH*HI!4iir(YVM>agH&r+oB7Q%0a0Q9a4fe<-Kl!)mP*# zvT9K!xlA^eSa!!>6>9JA6?cU13KqW+1`2O$BjDD8-d@{`ej-o66Zl^U@ct0MSwp9_ zRoObw$Q1zEK(`oT{$${qz-j2Twu%v$vZYX4s@xSr*>dy;E-!RiTean++~q^LnU%Yt zD48Aa4AofF#jPS7<}Uitd+n|JZ`nF literal 0 HcmV?d00001 diff --git a/src/test/java/org/jointheleague/features/examples/.DS_Store b/src/test/java/org/jointheleague/features/examples/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..84e3d213980513565f6ced313c6a352bc73d993c GIT binary patch literal 6148 zcmeHK!A{#i5S~OTD6!2B?I%xPcyet*iFXR;i6$urOW}JIx`A z*M3QVr+u@#0nxNUTu=ow((D`0&hy4^<6SQisopSoNz^7H56;+Vq4|q(Kl_X|TxJod z%sndV(>F>fqH3mE691zDJa;RYvy28*V%DzaZ-`7v<=b2z#JP@9$A6O7@E5;~AtG7@ zE2RU{R8Vpw`{EDw3PwCKW8cVC&u+twN9C#e)j#6XJS(eC=cj5cG#4K&c}w21_a!{i zqp*sqVcClYpZMy%)_FXQqxeIXj{5BTfK7Y)LM2~uUSR|$4hPK0N zd98kXZ9MMoY_I!Uo$h4aAMbQKh&NwNCN1yj^Nrni{p0+k&}S?kUL3qR#vVJI!a0Ju z`g{)uMXrlO)J^X(nkZ^}sp z7Nr#hM1kuHEZEC7@BeT9eg3~rk}FX_6u4IksOEmS-@_xhy>;f{c(3*0U*T+AS6jTK jATV1oYI!SOgBwHM=KvTutSuq~lMewSgEXSRohtAf@2G%x literal 0 HcmV?d00001 From 26c4895c10315f4a9c9b649accc67c3075fb217d Mon Sep 17 00:00:00 2001 From: J1a4b4 <46267154+J1a4b4@users.noreply.github.com> Date: Sun, 10 Mar 2024 15:52:37 -0700 Subject: [PATCH 2/4] added Feature 3 (QuizGame) --- build.gradle | 4 +- ...xamples.second_features.EncrypterTest.html | 136 ++++++++++++ build/reports/tests/test/css/base-style.css | 179 ++++++++++++++++ build/reports/tests/test/css/style.css | 84 ++++++++ build/reports/tests/test/index.html | 133 ++++++++++++ build/reports/tests/test/js/report.js | 194 ++++++++++++++++++ ...gue.features.examples.second_features.html | 103 ++++++++++ build/test-results/test/binary/output.bin | 0 build/test-results/test/binary/output.bin.idx | Bin 0 -> 1 bytes build/test-results/test/binary/results.bin | Bin 0 -> 890 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 40838 bytes .../previous-compilation-data.bin | Bin 0 -> 43619 bytes src/main/java/org/jointheleague/Launcher.java | 3 +- .../jointheleague/discord_bot/DiscordBot.java | 11 +- .../examples/first_features/CurrentTime.java | 4 +- .../examples/first_features/RandomNumber.java | 5 +- .../examples/first_features/WebSearch.java | 32 +++ .../examples/second_features/Encrypter.java | 65 ++++++ .../examples/second_features/HighLowGame.java | 5 +- .../examples/third_features/CatFactsApi.java | 6 +- .../examples/third_features/Game.java | 108 ++++++++++ .../examples/third_features/MemoryGame.java | 38 ++++ .../examples/third_features/NewsApi.java | 6 +- .../examples/third_features/questions.txt | 10 + .../student/first_feature/FeatureOne.java | 48 ----- .../features/templates/FeatureTemplate.java | 6 +- .../first_features/CurrentTimeTest.java | 2 +- .../first_features/RandomNumberTest.java | 2 +- .../first_features/WebSearchTest.java} | 40 ++-- .../second_features/EncrypterTest.java | 151 ++++++++++++++ .../second_features/HighLowGameTest.java | 6 +- .../third_features/CatFactsApiTest.java | 2 +- .../examples/third_features/NewsApiTest.java | 2 +- .../examples/third_features/questions.txt | 1 + .../templates/FeatureTemplateTest.java | 8 +- 35 files changed, 1297 insertions(+), 97 deletions(-) create mode 100644 build/reports/tests/test/classes/org.jointheleague.features.examples.second_features.EncrypterTest.html create mode 100644 build/reports/tests/test/css/base-style.css create mode 100644 build/reports/tests/test/css/style.css create mode 100644 build/reports/tests/test/index.html create mode 100644 build/reports/tests/test/js/report.js create mode 100644 build/reports/tests/test/packages/org.jointheleague.features.examples.second_features.html create mode 100644 build/test-results/test/binary/output.bin create mode 100644 build/test-results/test/binary/output.bin.idx create mode 100644 build/test-results/test/binary/results.bin create mode 100644 build/tmp/compileJava/previous-compilation-data.bin create mode 100644 build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 src/main/java/org/jointheleague/features/examples/first_features/WebSearch.java create mode 100644 src/main/java/org/jointheleague/features/examples/second_features/Encrypter.java create mode 100644 src/main/java/org/jointheleague/features/examples/third_features/Game.java create mode 100644 src/main/java/org/jointheleague/features/examples/third_features/MemoryGame.java create mode 100644 src/main/java/org/jointheleague/features/examples/third_features/questions.txt delete mode 100644 src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java rename src/test/java/org/jointheleague/features/{student/first_feature/FeatureOneTest.java => examples/first_features/WebSearchTest.java} (70%) create mode 100644 src/test/java/org/jointheleague/features/examples/second_features/EncrypterTest.java create mode 100644 src/test/java/org/jointheleague/features/examples/third_features/questions.txt diff --git a/build.gradle b/build.gradle index bb3a859e..291bc6ba 100644 --- a/build.gradle +++ b/build.gradle @@ -18,6 +18,8 @@ dependencies { implementation 'org.mockito:mockito-core:3.4.0' implementation 'org.springframework.boot:spring-boot-starter-webflux:2.4.1' implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.3' + implementation 'org.junit.jupiter:junit-jupiter:5.8.1' + implementation 'org.junit.jupiter:junit-jupiter:5.8.1' testImplementation 'org.junit.jupiter:junit-jupiter:5.7.0' testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.4.2' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.2' @@ -26,7 +28,7 @@ dependencies { group = 'org.jointheleague' version = '2.0' description = 'discordbot' -sourceCompatibility = '1.8' +sourceCompatibility = '1.11' test { diff --git a/build/reports/tests/test/classes/org.jointheleague.features.examples.second_features.EncrypterTest.html b/build/reports/tests/test/classes/org.jointheleague.features.examples.second_features.EncrypterTest.html new file mode 100644 index 00000000..8eb57b07 --- /dev/null +++ b/build/reports/tests/test/classes/org.jointheleague.features.examples.second_features.EncrypterTest.html @@ -0,0 +1,136 @@ + + + + + +Test results - EncrypterTest + + + + + +
+

EncrypterTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
9
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.967s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
itShouldEncryptTheEntireMessage()0.004spassed
itShouldHandleMessagesWithCommand()0.008spassed
itShouldHaveACommand()0.006spassed
itShouldHaveAHelpEmbed()0.004spassed
itShouldHaveTheCommandAsTheTitleOfTheHelpEmbed()0.001spassed
itShouldNotHandleMessagesWithoutCommand()0.005spassed
itShouldSendErrorMessageIfNoInputIsGiven()0.002spassed
itShouldSendErrorMessageIfNoMessageIsGiven()0.002spassed
itShouldSendErrorMessageIfOnlyCommandIsGiven()0.935spassed
+
+
+ +
+ + diff --git a/build/reports/tests/test/css/base-style.css b/build/reports/tests/test/css/base-style.css new file mode 100644 index 00000000..4afa73e3 --- /dev/null +++ b/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/build/reports/tests/test/css/style.css b/build/reports/tests/test/css/style.css new file mode 100644 index 00000000..3dc4913e --- /dev/null +++ b/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html new file mode 100644 index 00000000..8601aa71 --- /dev/null +++ b/build/reports/tests/test/index.html @@ -0,0 +1,133 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
9
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.967s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+org.jointheleague.features.examples.second_features +9000.967s100%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+org.jointheleague.features.examples.second_features.EncrypterTest +9000.967s100%
+
+
+ +
+ + diff --git a/build/reports/tests/test/js/report.js b/build/reports/tests/test/js/report.js new file mode 100644 index 00000000..83bab4a1 --- /dev/null +++ b/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/build/reports/tests/test/packages/org.jointheleague.features.examples.second_features.html b/build/reports/tests/test/packages/org.jointheleague.features.examples.second_features.html new file mode 100644 index 00000000..4f7d1902 --- /dev/null +++ b/build/reports/tests/test/packages/org.jointheleague.features.examples.second_features.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package org.jointheleague.features.examples.second_features + + + + + +
+

Package org.jointheleague.features.examples.second_features

+ +
+ + + + + +
+
+ + + + + + + +
+
+
9
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.967s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+EncrypterTest +9000.967s100%
+
+
+ +
+ + diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin new file mode 100644 index 00000000..e69de29b diff --git a/build/test-results/test/binary/output.bin.idx b/build/test-results/test/binary/output.bin.idx new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin new file mode 100644 index 0000000000000000000000000000000000000000..607dadeb4d0c2a308a6b8f1cdbdd210a324543cd GIT binary patch literal 890 zcmb7Cy-ve05WckOA5W4jeTND~Bm>RRN{lEpmmlQVk?mCU3D{T>D?&n|po)d56KqUK zjBGpwBSF}K0u{}6w!fdd@7y#R_Xgu}|B$6rCP*-d3+zW2$bzHj<57_1q$~tZ7!CKU z2Zv7hESJc~DCEh?3BWjh^RLaGu}I}8VFd|CNJEEn#&=POAVx3pDVc4vEDLDpiJf$c z)Us>B;j;5-wU|TmR9m^h6bDM#ve#TgTQTpzJX>M9NOC7Tz|gYSK7gs%OK4qb_K-=p z9EPA8QS7C%oLyF}Y>tGM(tm*Vjn@Ai;gIPxb%3?N&`>Uq&^gyGYLVjv9V%0zJL literal 0 HcmV?d00001 diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..0cbbefd30c07d1c2b4ac20fb9642a0ffb0ac6cf5 GIT binary patch literal 40838 zcmY&=cR&-}(sy>#%f_`g?7gkMw_y6EOE(DVi+-;7(t9A7^5g& z(qkqzcGgnGXi9+ckj&ovz<(CxjiGqiN*xpjOzdRXScmJNc^GSCL z`|dn;=(tVei4m9v#nr?{id#gr56z~=C({D{@?wBQ-Ef_k7;$kP8OY!(i{|x;1T+I=)$3Fj3;Zts?`Kt8DJni|! z0^ltr(8N@sw1?Rbm|2@B6jBAYkmB)|tN638GnVIuzvTULe(xE@H5jr;uvmMEaQyV8 z6gQHbIXKc=ew(%JzBu}udj(w-5wc8kxz-9|CBa-p@imtz%;dl^Q@IjbP4W2qX${3i zuEZzsLo-{(g*ug8|8~qVBqedJcpbsS)>Ax9RJLY^U{lA&Jio{$BBLsA?qiqvynMbv zyiw;Lf{yV86i=B#DYb<$YX@Jvd!Jp-U3}c}cE`?hMVgz0dgHYy?ou1My`u)c@OPDA z!LNlMW*VB&motZ0+Ac$1C}p-YV1OgX2Jn#pbdCrxY%#Z_i`NDS0DXyCKf4O?Zj z`W{tkMfwfnpvkx@R%-+#X3BUF#jhxd+FM0IA z?8srWpIe^nH#(qwkT4+_rW9|b6jatkNlMa;;`#3f+}F(Zp7XLHa@+6GS55zHSYs}b z>W{a8!{7jN^x1jf#W$VG6|}pv-Ta5hQ>JY|D9AF3rRb1Qre{SQCaeh?!j@pkDPH7x zBIRlaN^K`Q0=qg2+qb89+DH`&6H6(k0QFHnDJkyuz$dAS;zkZZD7+1tB0Zy>d&liJ zpSOrYK{)^YxCq@akAlOR6DUUo4qC?u8*KF)H3^Qw<2z0eCy7(UY2plV79m(p2#C+l zUS?})VGqa3L2iH88KJm3NKIW3iWjVCrj#9(y27&sXp>SVw{=4(9%j}upaI+Nj!@jy zj|c@dUqtahG(8cK7eaU=gbzaaB7}_}jE12yrK7z+3|3ndY)AlntCCrpOYMOy3S}nz zG^fl%kY(KeZE6wa93l=xgh7a2FhYbNL?}!b283AutF!i)LMebZ=TX8D&7%PbyiTE< zM}BMpfXYlnl!Xx4 z2$6#jR}mr?)-#jaT!Zy2<#J1FX&$^~sgT>|BNSgCNv<>@1*O2Q!)nLuzX z{yl>)j+sgA$ekjf1C-~8?hAydBZc!4mIBX4s%Sm1K>ef^=qtpy0U=(KV;V_LD`107 zuonEU{{3F{&o_wV9!Vm}dUN$Rl(Uro^Y6bOvKY;XZVRHIo|>M$z@6V4^(0A zVF|gpiS-AB;`6_+alb?11*%2s_-)D~{%>0YTRtM1pAg;8i0}(JlcJ5>sST(tkpBT` z2kJ}|Qhevv7Q08I|5-lUX83^~-#^nk5W`MH(1j3R5#k$c_pn@PEwk;0mHwvy*mn@q zf7PJ}=9Q8>0n+dt>`%&+xu*ji!%S!FJJ74yix58$;wJ(&p$|A_DmAfHbR+!;#m~;f z>@XOj1u|O;IX=-r{g`ln|HWp-&#N%OJ6=Y#T6B~p+a|5;DHjJFwHvz z^Fk@UDy1A=hnPVrRjP20l9%Y_`iom02DYENJ|^1V8x{GW`o5^p4;A{O+XGO^Ig|)Q zi6E2+hB+=GPG|^9aX%`TnMr|~P!!|=kBLYad<#d_QW}ne@GTrv_`Cw0E$5c*?dn?I zp6%e*w&FZGJpwh1M2(_QgJ_h9L4h+R2o{S{{7gtg2~s9?{{p=4XeW(BfwvY?a9w87 zc$DJ27#}{8p(&Z+J?EnJy{9`4twJxN!US}BBC4B&Y9^z^DJ%uvl$$%Iq7+XsQ1&n% zb_uv82Squi#Mx`JRui(JpDP@0%01>2+{>tO8Y)Zyqmd4S?99Ot*yE?J@A=r3ckwK7 z@gG;02YIL^&NM_@sYsP+FWEfM_>RWR-Io@??7D{BJL=H+^C3lqz zgjm@eyGDu%jD@{251wpIY~a-OBlxO4p_O5+7y1)+X{WyHu=$*iim#)B8>nFcYFvmC zMJQ2>f@O9>OMtoda%(A^r<>%~tfjY5ii^3q06*wuZhY_Y6zY2RMh%~!-+`wph}9Dj z6~1hfzeV!NuFb-yik77C`A>RKq8BB8pu|rUoKYWe!NLUMNc&?p*8Q*%E07>~qhCNI zD5?o5ncpy*mHFXS_!zDI8q+fqcw_8GpYGF{J9hxp8$`u_P{CR1CMPQJ7;~mlJgw!X zpb3tzP=O1T;$dQIVhQTrK1*@pVo%%KlP`ZbU&-D>cctpppe|J0>DW<>w(bt)*(cRA z_xdLRZd4<8s=$LP_M{5DsDw8ati2DF;$@;Tmnp5~mY6RUwg%6BRESV5{izgpwY|Q8 z;?y1VSv5L0{qm1ax<0AX+&F+roTCEk1A!)c6*zk}yXPm(G?fc1O5-{+hi*1tR0UCu zf~mqdIGixW;jD8bJECI>xyQz*?sbUp4xws=Qo++=VN{AY_%69ZeI^HQ$d@fS#fz@2 zd^VNYc+5MTDn3uukDv-8sfLB~zQYz)P7hp5iGPA=fT#VFo&P9#)rYd?KNl&@YiK80FQ}r%VjWf^$px@RE6jf@j zNTgC+A;Q3o*>hU7N=~I|H2WrO5QJtXQ4NwwR$(brioev}My61Jr%)4nPyE8wC{yEY z#w$bTjF{}gR4Q?aN?fLb^+O^kATqgFGQYD^qB&9I|{g5rw zT|*rbQhM$-l_;eWAJIE7$6r-|IX*A?*l3CA&2IhPeO?-}S$LO9lu?O$RHB^ZO$E?% zNU5}|gh|ch=2El!@P!qe40zMPzVg`Hvx@si&j*bW4fuLiQN<6af`?SeBdVa9N<1cy z!V{7hP*geg6ka4B#=?ofn|?1qk30ylFpkVTAUU@ktD#D2shgisiRV-Z1zv!7t&ZAY zb)eiwZC--jJCZp*Q71meufrkR5o^2LuJ61lnJ|HGu~1q@2JL+2pQJl zw)2m@KV_XcecI;Pbz|;dzWJUi`al(ar0RX53O`eYU#LcHR7pFP=%9j^?nKr0l=R01 z)K1u=TxAPxe%sMLjRkwxK6<>nd(V;LjLI%5@fEg4CAvwjey37=WVVoHt85^c>7o8> z@~!1+liv%c43Zax9hgQb@cGwIe^W%?d;iAwQ}&onF1q=HYMe~{30xs9pjx>i4S!RK0V*UOgE0DUA_OtrA5d9!QY5#%1+o|ne7`~5 zyU2}sa9!Mr6&tM1(nL-)fium}g=XkVBiv}j;Xx|ATSL4tqCaeD zqR?dT(Sy@n_U_#8NfUa}B;GW`IK+nrp4d`lZDLPy9#6Qwdx7iQW4c?0Gm}2-#2CIb z!jDGy(|{ELFw#P951!y0O>JvI%r@k%XV7+B&Hr3o+4Byq3^DcLYI9%h%z70OPk03Y4= zreO8Hk>kQ*5M%#@`>KmHNdiqXkd_FW0EZ#BumJTbT`DWpUfJ=>B_-w2tje!zlW3x3 znk0oLNTm^%XoU3>Dx8I}D*X4j2e}7KHoDc1D>C1_7o}dN3DanL=``XBjmV%8Hdl~L z*rM9vVTvrEf;2by!Q)1w`eySQw*~h3eq5H(W z#04~AAx#oXD}wbM!717#A_Cm%cKiX?VVCt7pN}u*EZ<*POe0EY#7!D;i)kW92X>SXOYGZh`xmUxR-QiOO2yjz{10t)Pi2X~O$7qbkq{ z6p~lc!}|(^8Y3Bl_Ag)UCIXI2zCWOeAJU8;(e$cm!eHbvO!n7#JONhP+R1DMILl&c z)EKG3ACJ{NDJRC2oP0{ttD))C(!lg#&wyKC_Y`>VUG0dwvAw6uY8IXusWZasIgNNh zBkE|7X}knhk}w>=OZA`u;6p5AWWcEk(+sy#6lW`Pzb`i)lQ!iQO|yZf_nM~NNYlNC zen6VwJ-Ic6Oe#A?0D=$KefHW&yL6JbB5l?ByGeV}Q5 zq-lPlX?~{ZeW4L;GzhOFX&9{Bj9bQ>S@CKNwo=W?&)(>8X}#9cJuSDNq}P0~#xzSF?WL#opQYz4gVP%n@vx3K~6 z3hb;~#)q#bF6wuTF?62uZJO;04+OWX_~K)p_;AI!-?H|k6UhsH04Hh0nLcU=vv3{EP7ftw^CLEwi25Dg3)#e;#-!O;vIiq1>@^|XX*M+Pz@DclcNiS-*ncAr>?Vr)ezrVl?sw!^{DxJ>ed60T1kgq2 z=#oIXo(K9K38F&?WNIS=kD>29?o+C&u1>2~uy(G*eO@qK6haq<(jl7+BPX?k2uXcp zdTA=0c6O}!)r{9wlUx~78r*i|htrAkbnxsEbO@3mj#0^gk9)o>kBnNfYeo3tc`eSB zPBoEqNfaGS3l>d>oLFk6#y-^kBY2~3YB+15(Zp|w4Y8dxtr)syEL|8(y#S0M1A0(! z&{GG>w%reOB}>xgpK{tKYwM4r?}(>QzetxP(1}Dk#D_`1R|OfMLC|fFCDS1p`p<_H z*eKv~aF%E1NAF1+zP$g|wlPC=%~HKn>BJ?H^vkeGpj>K8hHRu7ye}-9wtZmwtLJY$ zlcsJ?c1WXZrPCohR9t~&AR~uVgMDJV$vLu~T*oT%`~tkJ8f?@X)$%w)HVg=sS@=tLzfNpnJh z&D-X5L|7z0oPD#e?1UtM*m|EXuA++{(6t}Zg^%c>SXwnG!7)<%WXi{&USyzbt9%0d zQb(bMbOFxH{yaV6&QIFGZ1*C5Tk?pfba4$`P)ip*qYIzYx4fVeb#!p2FG(KT$gN~p zJut*p?qK^0zELTZa+?PDg8U5`8?H(D8g(;w8^6tkMR#m8TmG6ZY@}~*qDxYcH!w^I ziBu>GLB;;gKt^5q1Fs;{l$jG!#`HGRi55E1N{3|nEszY>7!p(EJ5ZK?AJrjqo0X^F zu`%23o6%BjQ;tFId%E}o-S{J2@`=7ZjuwihB3(cOBXf>XNZg3i1;5TnI2+~)KGP*% z=tLXXj&?fb+}}v*C;)=+WTU`3=z#K=D$MLhulHa8WD7d?BXDRS;s1W%*9eTI!jb+m= zGeQ_dCFxU(zA(&Sfw9D^H{fC4VH#=K25A?iQJ3O4R)9o^c+A5M5*#B`}1E3}F((D48KiVGyYdIKG!)HPV>FF(xCNF!VBf zA-9v6sqmz}#OxU}FHl{6{62Z%@B(TY!!VtpbA=(yU=W!MB8vebj2q$tt_^uct3YtA zML%wq+9GF}zZ150cHve(>&h;NuR9Lks4iuQ?=bZ5GQhj5>1am(N$edE zE#H0Gck{dDZ!eWG#P=A2a)z*iVN{2bTp%sPfYA^3POA5+Pq?7o#w9`-ft0YmhVA$-ITRx`lwl3rYei?qJ3HaLBEV&K5= z8FoZT{$mDsF?e@H_CJ$@-AV#SI z&zjiS@=Er&W#s#_ca75>Ry||rJ!gntFa#H9e^1-lox^t+7zc#@lowPO4_O;l$IyI3 z10~R-8-r*kCEWqUDj-bvw^!lU)AQJMCK-RuIt6XXn=`@k7en-$p*O$~4l<1YfC*s|)@q{|hB`3;olrvL zg1?xt|AwF5T1r4u?QMs};a1K}eHSL-%7l!hn+z54c5JokThVWy`WL-M`xwC`ZcJ@= zrmz6_!3k(TztK9r&67!ZF$r%b;lqS<%om0OSPiWT zWWeJG>qAmz?aw4@C8QmiZhvX(=plDntEQ9@XAFaR=*`kd8ictKOo}(SL`Udbu(gb2 zQk)f0Oh6B9qhU=5e{trhA>Tb7s^XJA{^^omeo!34)O*hW-?F1m{BV9)#m}IzXK&uP zs5dc|DZ0RvBrxJ&en?{AOaNRpFV?@|wVNN`=J@;cRclm7;+e!nCg5vFU@NKDAAYsB z^**_M6+Jdh5t)#{G)iO&l9)s?ldw^z!zsWFd#KltNC3o$X(PTi?$v9VtMSZWjhB%n zJC#XXViIT6nPo#ifwRj_BXy$ zQ}4D*uSbUTtTpH7F~#{z%_K@et|Ss7w~#59KxP-gjATYJqnUWiGp+cfX7e2F0LG}|;}b{UVT$fDwaS>n zdrX6JCQ-qJ?j2Ki3n*JUal)tteg8})~x09RZPtXOyNVO z1PnpIwOi3+s`yX%^ z&w%xSqf5zfp~5K2x!iR0`f)_XCC>VR`sYmX3#O!wDSXKk)-#P>F(nO5;x!Yz%_YWv zonIVNfLGKyukg~Mjn=rm_RouB8S5LFdQD968>XO{DSSk20Y3aafN-Gx%7|yOp>F2q zuz5DA8`6#~J3F+MsrQyCe#a!a2e|=zzJ~B6d zV(R$;qW2lj26Pyy@bV3DgGM>$S40$ib)oG@9`=Q4*v2H<$!R)ZYbGk?A*j~lf2t3> z)*EfL@3mWfZOLMpqLV4?Vru`Oeua7Ls&4$a%;3rMEg&ss0_sUtTcG|la?#}xH5wSF;$znPK&CNT)d0Bkv!aMEs5*!{(A&B`@>5>_^wtjX)ZaBKPZr_DBD`6|nKY^oi|hnY zm+HX^s9YV_C^~Y3XrtB?85=ho@?`HP4Pxk;Y{7Tk1KMIFKa>VhMjk;1mqYk-a6*86v>L{8K7k zYb@XX#!&m$+ib6h5SB2MWe|r{!n}Cd>DcYf+-=ccihdrnw`Es`u>d{-5|#vV%>t|)~? zq_V)OUn1#Qyo!YHf?tf-P&rXG`3AlDy5qgQ$1bxZfi!?Y`-W4J|4f|bH+j%$%n|!b z`DrX7okg6kr@=ev69w%-8G)}S;5O5SHMMNM!qRPpYAKGN?w4N|oH4WvWO!~q=e0kB zMP#y|#G3_FnV6AjFT5OEAh3JXP?q!bgtRY4c4~4q%P5B>xymAPS&%@h)t1z)ufpX+ zx*i+!%%79G{p^K^Ybj~OB*@fo%edbiMxnoGEu{qFT; z$LC+Z+0lLYDND14C8}i!pRtJNB)ebIu~+m4Iz(gVSKrW0A0>9Qdl;Y{w|u($3zn#k zC2*nLf(=Yzv<9mav{BtfghqUV&r*QGlvDe)FijX@$XxPTJAg zpTbrqxHPbc*DUb+>Qn#Z%)}TPOPMsh*e7-hr*}>xi)dmIZ&;A$yrZi}U<%dpoPn8k zcfNK{?9N(H*~~KVrMIvk$odZ&r@%Ycp51t6q;ocBbbYsj#-i3%mfl;I_#I2|o+Ye< zoaV37c>X(k(wXDBj5P%Zdos>kpYwqw{>U=;#M*k7@fqfW5X!+`rUVqEg$3BhS}(=@ z7YCy^Y&SETux@DV7Z%aRf`qf36pV>I+4uvRFqk3w`6h1JoCo8N7X=Xykq*}MPL@^| z$%DuAuP~{)s;bUm<54_LJnf$vwvbW(*zdfmHl6p4B`RYA7j?c3Gx{?(Cg{HEqxOe# z{ce^~IvrHqWb^E0JDGp9j>fh#ZpH6se`gUrETWeMK*$f68agxnb~)Lr`Na9aVGp;T zpS$~RiuS5mK?dg#{G_p{{f*Mie!hSZYw&)w|6~z;ETW$U!O$;qg1;yp>_k05ZIb<- z4P)DjKMGIY9lvnb-rp?o0LyrgW$=e3KFcP4HXKSa^1K7~1U}A|Y zRobbP1rc$PZTp=H%-;8&V-taFB8Xfem<{5D4lqFWAY@SQ?hjFWAUWgJWxDwJ*FwyE?T#}`8wh6;=YdeN3-Ue{|GCy?|A+o_+fst8 zhK)4W+8)6cMY8q$7*Vj&-@YZ%RjY8X374GBJN&M$f0N>BE+!(Q*_ugYPBU}m%jV4| zan~tPC{OM`_f`yB9LqMUV_s$maPzygosDw>UYnOb6Lsu1)VaVG$FU9L*#vaPh9U{D z0sviP{sDWz5`kY*1=JV8Gv#eoJ~?+=bFH)~BaK)$Bpkswg!W9kY8Q9Xs?h zi7ifM>!+}V`QY-yAyP%mabvSFOJ2=*w6kql!?oO0wj`8#i4BM@^k%7}4N>JiRiD$G z_Qe~5cZ_>77ar$tMF!|2bbhh{k+c<-*m&q1pv5m6X zk{mX1l?@Tze^tYcK>}|NrplHaShn|Su*apnTOK}*%w>Z`g##2};83}()gErO9 zO9;#rFTTMh3fK_Tt9?%Y8Q(>- zUyb-I2>3mYx8l7|A$v;^+prksX9KhY!R$>oKw3vsGJAk`@Qd$!sTvZr4EO%@uHxB{ z8MoNt+ia}}Mky&rNZS5F@r88UwnDb&koUV0&qD9KEF6cRci7^)Y^^f3;2vAx#4ZON zg#NDzm>N2Lp$oN=4W)*^$h81ZU+lT~l>W+M$B~g|UwkO9zRxDA*u(=;-5vs~?Ex%R z!l`=%Z=0E@%nr$c5mrr=rmykt8~m^6un&`#r@VnYb8R$-qSRRNVorl9aQKn>YPRSx z8v?N>paRhMt2m^>Pxch_j_%CDn2u4dUyQ8H*85Wn>5O7vh(ua63H_r?jBq%$Ot$)JG43L zLLbGds+BE%%hnHKK}1Zk>fQG2K+etEL-qS^_^-BpM~V};!1}V#;NY|ee~7r8se3;Q zAG~LaKd=oR(LR#oL1i!7j9J|n>M6&sE&A6zpp^XS%I*Op47vTJ-f2-VX_A9Xhy!suBd} zOD>KoWHueYaAV^-TFlP-j=0IL^v(?#(Jup{=FPS@T@?3+ZFH8Sox^hCP@p~oRe10x ze%k`Nq)S@P%+kurzT9;y!I@*^!qIc(0RJ!v{2s{+opLs;y!OS@zQvY`8igB21R4CN@1+N#S(wH5qCdlCU%TMR0aOy$y$6fRUvT;&ZdIe7_U*F4LoW{D z&4Gy02VQo7&X>Rbl0AWXd(C+N&F(&?MuPfb8onH{9|tPZPuK!{`Ml1rMM72x;Uaul zJ;ArgpCb<7h=P!F9EvM+L<#UcFD|DJ&F}J1GVZTfH+u{#5SAd7rjF0Ld3xE4VPkeO zrrnt_?|BeM9Lxbd3xTBps3O5U0lqV2aVruMwmM$1Q^JU<7lm?!VVv!8YRD6>n8j^c z+!^-tt$)FO2d7;T;T-XKj{Xk@S>nOReeLjg|9NVYRrHwEgDuB75gbt@NAnsriUapE zAcJgPo~hG_ucq?OZy0@UuUB3)M-;;m$8rQ0INEU>y(efqhiq3<$}WN|)JG_RL-B{a zlJpz@u{SE*+>q-~DX66$@~jyjG*|H{kz| zjBv^L$;;soS2=)l<#NcfxQ&gv&>#FI! z-MWiU8)v&mE&uQvt>X|cIbh4x#J!I$^xgF03OCVVlugDcSxY@f^onDAjoJX5ur(!> zc5%QWkA|<6aY?}+=NArKGJMSe*rO4CEeEs|-z*~z*)6LcB5qnU`Q(|zlqQb&4M($t z5ycVUnkUNwr_8mUEICkfqB`*A=w=SYTtHCwrbiD}os6C|IW&f|96zAb!qIExh~IJq z?>NHu9D@%W;vg@TJyzjBOgSkSI}{>zH#f!;stN6SRhn=938KYr#pWSB9HN&4?F=qtZa+h3-;tnwRaHysIySSZp;v#vZ#YCB z2YgUJ2 zxeUO7C^Aqq{hn~&Ubngs%RNXfpw>rGA zgSG03)el;nH&@GtYwXLF_;Cq;E+ps>W_2>sQNRmNAK2}yL(_h{XW7F--ko8g0bKDp zt|W*R2=oI^s8R@UOS#mcaV)ZT+Jykg#`AHBL0lr3ON4L%@O($lBUwD(=E+9yKcAHO ziTkgNvemN<<%+|&y5U^C^IWkL+n=e3;8L8Sefv?vCcf4NM>)U$zRB^CJKjce#Zlbt zKN!(miZ5hG|7k`7Bc5z=YE^bwa3-}VG59qgodYt-U`MaW#v%nvj@5;}IUd(!N-{-O<{k(EI4> z&Xf@)T)^;P@tjIcuT$M~omW4&ba#c_%Fdfyqb_J^#Uo{+_M+~F+%1!~c6{2k;?XUx z_%>H3f?CQ2TLibM1bFg<=gd9F!pa7lXGZj#dLD9z3jqtv=xuG%Vru6iDV{K=@$}_| zPItLP8SIn`=dhdTu@4=LfY}J~{?ko6B6e*) zFtHpT(p||F-{%^aFdD$d-FVhJ=IFhZd7`-Y6%TJNPpRS(Ct*d^nb1w&y%Q6Em))!= z?lviVz|~5oJ_I#@W|Y5B?Hl{}3?Dz{(8oCeNoiX@Pk+SKs^%I$<_e#1CDot_gIjuX`DYiIi=OxA!aKj`{IYNGq1TsBNre{wHH~meABF1 z8deYE^)jm7m_NJJ#MOGk6*O}NaY#A4f?dhROD&K6?yHZKn>fDRUFN@RR0~(Xm1|H- zeG8;PAPyZJ8u+N%Bj$Z6^P^20!ln^V-FLp@Zhg+qu&_xS}Mq z6NGR~eYsUm-c`YeT`s8{W8Nhxt$BVTwf5S$E-vwv3muc+xD;=I^yPN;@?(x5(Nnlx z(l-t1=w%LDN9WytpW4lZG!4FgDW~iiS0<&OiTb_M@$@#Y?_8pX3l66j2!&1|=`k3i zV^X>QVldOqqT%ZB6M5rxesD!Uxmx}VveYtd?aa4XlYJCUmPdx%&0MI_#})a35lBj? z>S{B0?zr|~+}G8sbSV8?(J!uX1micHdWCcVtkyATGJ`%@Td4Np>Bj@lI$#w{%9e%A zZCv}!gIw_Mu(11(-We?|sI_~$&iA$Qdue|_<#})~&51|xHg!}=O;zURj?O%=D3&l0 z{__0KIHUQW4{zG}sY-nQ%ez4o-#Pm0_~RWHti2X#9G}zhD9weZ=gQme20uCR9Csd+ zJ*-ty4<5v~cKFzFL*8wa=7-5m6IRyE-#d5%!E2xN8SL7>V*00h7rm1QZB}~n2rnK) z0p2`H0C_#@f6xn1>tMlu64M^qxNs6{DZTMQXDbJHdYM+z*!IYJ>&Nkp3QE@H=LkNw zX2|%l({TH9AFdvooV2gVhbQ*sX=SoWH*OI7Z0YQS22*?%A99@>sjNUjW>#!1!l^1zL0uMlyL>|Qtx-?~W(4|e< z37D)p{}y%DJO|UEFOFJQ>21tR;)#-ZMkzeWAS0C|92UI<>f#8Sh6t4D{aW@mJ3g+h z{{X@Bo78@pr<=ypY(-+J9}s-P8tIST4r#n~li`Hn|BSCs=ZUWH#2Gy8Or9`{CwhWb z(;w5H&J7~ho&DUo3eR&IXv-Io*t7!!;~CuJ8I|*h3LcaUD|u?L&g}11ak$WQp9h{CK=7Z8=Q&l6rIUU+ zRjs&wZX#O6(|y3xd&q-}m6y;QI&ik2^LJm|_lL&f8xPzoh0A_E;t|y(J!*AOD0%m1 zwhnL_$L|(vPIYv8%!8BwD2>u6pm<-Y5Lc{doxCPts{0e3Af5gcWC`gd=*Yh4{ks*` zgYlp4y|&q9Ibm@PPgKj3JmZPm(C0uHxYrl(pQ9~w9$oRAC~@#?v{@hQmiR_mcKj?4 zuO3oYl)2}^`CS&g;G!^*ZygWXrCtJa;UW#$-hgX|P4t+yH}Y8Z*6t=+g?(y0PxOkX z|BDH3Y^3zp&`ww1$TyeP>KwN&@oxZm0=-^8N=D;s=bMvwytT(1#fx8JJ1y5H3?RX%gUf z@g~r{;{Q6x^jCEuvvi@+LuYx3{>W0&@Rel)CyC+_8Grm%m&TQYU?p#TpVCChCI4&Ta9(JdcKMlb!z z6Zi47zJL!C;E&Iz?$^sm9do-cGe=}eEAHosfAIvr$=)a2Mt|onrjpW7IZ!oxeTHfC zZ=Ps?r!~kE{ox7EVq2Ur!Wn~FGgOi4>0}*=^oc>Q4b%6WewsRb%lUDWH{Z>1!Ju{0 z75n#^BI)yR>4@pA#m9o=89zdfKCy8%bHlWI=bF@Wdb-RO>{~k-OKN-mS|m-F(k-VE^kAUYN)m6WnEyl`8()iTe#7ivJnwbI^NU z+gL*%jPS)k@zgTgJ2lMUl;eILmHnZxFZ9AMKTPD08Oj1MXz#VNc2wbO(^aofokLsA zPB)}R&97c@4ik8?=isGftS=sCIv$DBs_L!dzE}ieq99Bdj0xb1B7-cJQ+YkT;RQF` zYB3G(n6z(&A(-S963E5t&zp~Gp2=LcBH3n}PFPcYC`N=~aLGO#wrXbrB`AB+Y=^n( zf7w~n+s-gv*1POo--`1X5rKh=ip1cmrO7b|vS^x^*syBeoOFEQ&CcrRS?taz3^Gyp zKK||40sX1bS`)%1hkR!&DUHU&F_>;F?I{SaX<<}x$Ky(*_Us2d$$4vhEGE8yL0%OH z^OEoaBv$W#>?}zU4DL8L%%fLVV*D~5BQ9bP$g7RfxaMiWIaz+qs@TE)BNj~~6M$U+ zXO1{@`OoBxZ6$WGLq-^8m+VW#G=0bdqF4Sh-z$ytHJ<4`c>3&VPjwPzn2ZTexFZz^ zKBQ-USasRpogx2Bc{1~4CM5+Er(#;~IHdm7p{7y4yS5wB7I~QNn0S80B}{Y~Gfu+{ z(lMb`B60;IZ>p->RNHerLf5+HwbX=)JZ;jC$7EncCPrjo#F=auWTmjk!JxcOLQAzS zcg9qo-s`dYzV`2#nj5`0pdz6Vo2)-xzTs*@kzn(X^|mt$FmWMf6vQgR;B47Q0YrgYJ7&3$ z(icne2tA$M`QNJQJg7L)U-kHV0Ckwn4Po(@d5;vu7+`5Y)+^1Xr26j6(eG5(?MKbs zomYa1Z(@S$Oed%g8Lb)BdF+N$=7sW}{Rb4AzTLuz+Zd!dS!7mqLuoLVr+u`q{*$|O z=ozh7rI`2*s63`!hUxua#B(lk5;&0k>K1P>na2DT;TSb-g|!)b@E)dDj)^NU!42+T z5A2xbv2kF-QlG=~%Z?46G@4zBiSJ_u5!65+V0p+*&gxr|ffuWy#wQ(OQK~=(F$kjm z9-aQ;KWU%FEk6COWbOf**wqg)@gq!Fjct95=>e<@ryKHEsEfc2kf$IETWd$M1#teC zU5usEvgSr)oln~pw2D=O8K;vuS^JQCX(C=mf7H^grVA&fPpritJc4Zwy|veilN@k6 z`_R1Y)j_Kro?*mu3<{a*1n;Kj;l(-1W8KStj90GQX!^pzqX74$hCL9~0DnRCy``E^1VLN_>kMT_J&7eD{$9>0$9*pS4pu(E=7cGrTFWKmfhf@twp8KzB`W5#B z6M0a7f_;S+0Z06cj?Q@M_|=Ac`g24E$*=jZAh03sZCGxvbw(s#ph(7tmiJ+ze$40> z^A`xf#8RQchc@k*8)pgEm88mnrLBJQ-89JE5(B^^5l!X`1;;_Js-Z-6V#Uv7_Nm01n~+#KE?O{ zT!kZJ;b-r5Xbfi7U3SfJ({k4Gt?}m*0elD^)b{k)QB7UzdB@Y^yuuz0x#;@x9AD7J z4CGV%{#PS_SZ?!}A1%c@yFbp5^l!U&Y6TL+CxZEKJVN;7od^<&CpEV_{-32O+viS~ zp7D$kjOs%}`9v6>2`AfQaL%QJG~A@=hK$sJdIYX|{13Ulh;RzsMI3@}L_W{-nXug~RR?Y5uPC z7^2wT7nGmCCldM4=9C1&fqh8H%$&gu$=vzQ-D~C3dyjl)u2v@V#VP#FseGeLd;?c@ zC9@tS&)V9^zUw29@!po{k7k-RY6o2AYo_t1Ct>83ik@e2@`0Z3;+ZXbZTcHl>7?^T zSNK{Pd_g83idugW45;3)^Riyv^Cl#MpBfJyB`wI}i?aFpeheU!<|ZniD=s=YQI;_` zeDd5sIeg=8HdrZ{{q`}li%lZ$>Xv+^>wiwZ%7^w{AX&5KLhi@<2n^lNZ8x0wG$ofW zc}Bek;!)bm%#;>(cvf@lV7g7z_^`1?DH&Jh?a$+j1|hb)ehRY+*;m;2etC9s*W7!W z`F!zpzA%E?55|}3Uw>|?pS4SMlp<_P+U~T^9DJQE^5s%Qc|ElaJ* zD&gzhiN=!CAAGYugpSa5hyI%%7f>tuv z6RB_-H?ybQezal#xeXgOxO;4we2-6*^T9N$y~CcfMvH#+-)==)!V|tt52aV|p%)2W z@-acW_6{k-zMPuWJy!U8S0$gg&xgRJ3UtfTUM@dMYC!jag3(E5@`vaCh;-GypVa<< zFM7x~yv}*V2f*#$jtCX*sqy&CgHDNzzh{Kv@T2VMF$n%)!u)L(dyqeJmspz-pN`(H zhE@5HNvTOHHFhiP3`kwKUTY^h(fn8K|7-6%qoTaJM$hy!RxMVlaA>c=kwY7w-xnmzuZ`$R29PEmONBqW^fmNQ2_TJ zv^BtL%#xkg7L4~i@u-9Stl-=urRK46L6OqniBi8!XsHCu0he`O^~+ha3M;Nm*}wZ) zp_Kwb7pH!skj=u~H>20jvWah_)F0wjZXj?OSpl|EGa^$i3$72CGHeSkc)$GTDv^1G zQvE_X`zpT@Hh9}^>|zP@y+@jZ&gO13zS(NEaeV*k#Hm$ERkacd6!)Vx+|-Y6F|Dh-;H z`fmIWD+LBn?^`kY* zT9xWH<$`zkXsaU*?O9z`czeP8yi+G?i;UU<`T%N`s!pZq&n{SN;BNtyU+n?otHByi zcj+~1P*c*Z!)wRCc&A+AE&7}sv%Ali2hZM|%b#IenmsG4YE9celP7=rhJ0!q- zs1fOr9lF%^&WzyQ>G#CB*^4HfBJ_=kStf+qlu(%w;EoJ*C*X7pq{7MluWX*=vO?Hb zB73#)5xwy=VPH*gqH$K*q>yiSii?!VI#(mf7?Z5f%$&m*ah*?g=tc!%fbAFHZGkbHtr>omrW@OtJ z8y$U{>+4LYE)gJ8)e>>@2mEqqp0dbqgYGr6fKm1XE)yCTVv(IVA4D$A7e;QYY%(); zIOa)szs$bpN~qij)t~OLAn=$D-$XFK=00l0^-IeJI8n#qotU9p8^D zYPVO}myVNq6B-{v-wtf(bxH0X11YmVsJ@@BaOce~b@)|ci7#OoF4H=gNMHF?jN_as zgG;9l`+ZjXhI@X5#-Esdjev(xPF!m+ark+GaBke4?VpdYcHiuf@@Gu|F)M%zJ>E$d zoQzsrd2vs9_y)sK-|Pw`mON7AD@oFE?cPxN&V$Y)E0cq-Mim4R>TX~wBZ))5+ItBH zhux1Vy4z20-E~4Qm{<}*EDj~W30xQkl*3x+>#^e}N8hUYw!PflX6vS3J#u7IuEq<< zS;bkyT&^B}n?Ll8=X{6Bj^V`82tqHCP(=}-X1D>sgE5!Z(U;;S_8qgl;mI+R_^afO z`M>;>dSZU{O+p<_fL%E-L-n&_cWhiCKH<^7eEFfIVVhzIRV)GaJQU-kX z^FNwi%kHyN?U=$LGlm=pKcT*TjNQ92c>U?CH{u9YJU}f!0pJeAcDpwM27{Ur*?Z64 zRPOH{AhZ5{>^uF{iG;yb-en1CH_GeMvw23lejT;{`r6PfF-e5_7BRn@Qwzog0hHbs zhQoIVlcpWvn|vmCbeqs56JXZe09W64%SX4n));J=*7i<3xIMxpg;1pus^eO6sQJL4 z8qz_%{PgFG9hK!4^(7qAw%bUy=)lD(vB!!dw=Vwm%^gCWM(Cvz^D+p%OkznEp~@!U zF&{kZ#cG{$9xOz}*2e0CYtuH(P9MECy0YkA4l&!GQ!F9Z?-|?AFX*@8f!%G^KA(;B zxJ#(+5pa{1(5_fuWcGOqNiwALpkH^ZsJ_g?3>!^g}n*tVwQT}g^bhh;|# zVR!~hCDT6h2{#j#E_m|b=;xbK*``)P)rQZPmY!Ms=iJzvXQxcNaAx|?3*LP`qMgvZ zCFUn+Inj-JzYXLCQY-S$%n}IH>qVhvlyIZXBovg=;hW$XxhC4qr*5xVe%CxAe^gaBp%T9*;2GRrkkWz116(29yf((C`}{C@)bU}~ zCtuu;JxQuhkp{-(;_W6Rm{MxrYG6^IrUd1jbn zsbo{YcBh)*^`@kO840+n2%hGUi7D34#=YqHKKJqbtV^Yu!_6(`AAYqHnl3*3Q2OB<2e;OCi5pzwmeSp;Q=f2B!oFf-mlAv=u zPXY;rH6jPBNHA#Ib7&h#CP=AgxW&Xy>-fpf9)91JJnfb>sj?wewj@vjb|m;S1#5YG zsMurG0j>YO?egxJPJQ`V#n%0!9+Aj_oE0Pny?3kX4~IErFMlyOJ36GYY=xe0d}&=fKwwFOq6!5?};B$65Jmb(he;FE7?@D4!z;3L4khZ$X%t{QlrhtH$B(EBe1I zeb@Kijsvcwz8g8qoiy+um)G$tv{x^mTsUw{tH+JqZOluy6>1+vuRa&&hOr&+J^*U+Z*6j8FDv2#I43T+cRjHNgrwbRZ``P zryt#4nNs zQJL(+i#rFcu^Bu*l2k{L`duO{TnTx;;?0rUsmG+A6OsicvmI}c>YJoNG^w{e1~wcp zF7_ejVC{N)WnWHwd8%@z$sK`oWpBkN7$UU zn2Ec$kcZtK53qZ_!aL3Vl=bn!-%1ilO(LmZ&Y9{VB;OyOUm+F@?P%I}dT&5_HQ_XEsl}v&GWC8)Z z(6YgB-TYtM-bwpaj_B|hxGaTKrNWURRcWLu9q;rdeg=l(t)N@k7|+QB$leQTDX6(} ziZkzEg<#C~`tA$uU&n0AB6YLL1vw-YErW61Al!|9vfN9qI?ZMJIFIh}ErH0Y4S z^Sb&q;a4{e*!J!2tEcPZzZnsHk5t_!;hl+g-CyX``%OA<@a~y!|LkWK6SOUt1XlO~ ztQhE;z<_2q_D@MRr)j(f9-mt0r&{kZ+umqE9;wPFfyXQWsNB986LtOd+*?9cjDEd* zGP93&ID%V9Y95k6ae@W0r^5Eg7|UHo`sMHb+%f8{S)PR4CpGwHkNdZNyH2}?zZtqF z?h(20F}c)OPz3D((t4mEFPfxoxHqd|`i*`Qo~E9RaS7m(4d>c&D8J`p9k0!}v5hEB~{Px4nHTsd0?;S;YJyZ$9kgg-ikd2?^S<%eqLvW|FL4cw2*GHbnUhND?5|b z8RHkbTm3+kkm^zrI1LA>5gB#8@l5_{-nidapIWlw+}5wlNcA=&^2D-lTQ>PON9{Ap z9DjOq+=g;e-3=$a`sBl$8?`G@+vIa$zkwD~9u2QqHa5l6NI~tHbIVzpTG8w@{#G z_FWyRc}W`7lVHc?Av*Eq&1pt3!_^1xG+bas)=xHeMVPR@TzF6|%}z2x=Ci@>4959d>qK`&PPx@dWQAKm-a zous;p)YR}i6kwcDdwRql+d1DQd{w&5de9Hk-jS+q5`+@k)7PhZ>g)>Dy5GbpcM{7M zC(M6O&O1rzoua@w6BZIyfp@uvJB!9AZce9(YU%yf2xLsnHlY^5!$=C0lKa7BEy+Dr-t5 zwt=2^fhGv(O|4HgJLiqzkNh_~jQMKLX!)tvqiiXS9R+Xavf-Un&V$@=Kwb zQhFYo3lw;+)w(0vc2ujpHHl5zJ^B8g)U&GZ&F<-=i%t}HA%Y<%Rei^bk6Y-(PmDmh z(mR(fQfg;PKUJ$>74wN zJ>PR?=h5cdhF5&e0$nKsH)`P-!kxl8b1g@$_rqYLM0Ovq>1A`}^3W_x4@!N7((|Mi zdQo7^ovV1Dz^c95s~3(aRje{fDnH6>&+^di5RhA1x@RzP>qyfvEz`c(wEUPirSYNk zu2KfRl%5}D*u*c^>iS!OO7F;}2yk3^Qr z9swo5`i#9JMp_S{2i_mMY~8_G*RNCRU`oBs22e|rX@@NJ=V{{?jkR4%rh9dVP?}I` zb{GW)^?n>3T{39ofV8^0&Vx@x{x`>_9{)0&Qb$lr-wERY+IOApA9eZEpi66J7j8Hs z_8AmO!OJpO;sx&JFVgY^Yi{Ul5kKvJ-!_U`TEd58Iy-Yu@cXE_vx6D~$Vl%nlN%H~ z-G%ZEXNUSdUt_g>!?I&rE>Fy;x=DerwP;vP?PF6i;rOg~1Ap+@al&r))FuPPXEBss zETxH~G?9cRR`3$!646d6PL;90nEFwk>L_3Pc*-z=(mk9=fr0r3>~j%N!3d?x^C3(8 zXKem$sQ2Q%b&4d);1;#?Hl<3Y;JrG$G%Dhzz%GLg9z6K^jTAmxJUh7{p`N@a8ZqzA z%^eDymx4~Nv~@;GY|SuUwHS^4IcQ7&G)j|B>4x#mVNbrfOVuWnQdcc%cav{Ge7aB4bN_n0RHK`st8#hmIAKY&F@GDu+`2p?w%NCowtw{dE4a zx!?Z0zQSd-B7UXOJFHI_A+fo9S7RxjIf6r9jr&PHV+%MYGDG;YtEFW-_ zT(i^jOOKfo5+6{iJPJgQTC9_Q;I~C(Gk(iSS{hk#U3JPSpHdZ2KzS8X$ZYebO_)ng zbKJQ;VCUPknM1Q)OnqsD9#Wb|l-^^?;FJXWt<)t=W!9IS|M>BZowRK2z&laj6;bLZ z)ci%sQcO|D)I4TD_H?GrCeLpHhpTQL5(@Sh5sT;CuiM;kb9Of1Xz>dratp_xJB z+zyn7jOt%YY3eAwmv~}e*riK4ZJ9fDXQ{VWb;XRq5ng@H)>Eoi7$&vOB>MGlpPrQ6 zIMrQVnti~jNUwnc$^;s{)VXrhR1a~ob&|ohJ=wW8UsI|#I7`cSZdNN3-K5t4dW(?@G_s#C4G+orA@;+1MR#tF)1&7jOuWx`HG>>$NXX;B#%1pIxl%C*;zekVEM7`uQH8k zwFzx#N-r{_^-j~e@3of~)^Hh-OU5^GA1+!l@w@JhbDc(^v^lLlL+e@424`u#bF`s3 zw-F&dZ$~XmsM+Kim5oeeaiRO@sCeHY6`7N4~hi8d2+pEBhGe$ZTkpEe+(19j$ec zwHurgYhCuPxUf>J5?#LL=E(hV*dP9P>}gPHLH${;6^0uJeOCRu6Kd!Gjo-|9z!?TA!8#>ui(niZ3vliknXMOd`>vN9cyZ;|O$WVbjW@lt2~ajXek=ZZ+3t<$ z?kn$&aJX?X&BcdSU!}o!7Jlbby`XM9>vp=UVWL6C>F-Xs`_k$H@lydAF0Ctx&P^Tk z!_7JUnkKCq<40@!Y5jT#6h0&QMbuPBU3Dx@j)eo=H!1Ti0w@zGoBk0)uhp`3d zS=8eFsR6Vmkk$>Nf%?P7NV??YpeYF-BZ}7CpqJdF4Wj9# zrzB-U@QkEOp4)5ZGrR6g%!=EFKX(i&yct8QV`=?3S~s57O`!F?K*Q3j^?N}5N!Se@ zD|J7Xh>BNi5GT^0u7(+m9kzO&z~#Y$&vSi#M>c_1l4#8>T63E=^pzBITw%?+m=O1$ z#y!21aZP`BS7pq!WLlF#8`z04QM^%bIeJ{p$h8IT*Mk#h9@?EstM1Ssich1#UT6It zt&;=)M|p)aOj3@=q!moMu!FlUomO`N3TPSev~9~7!^1fnMn7IrAS}zERhcwsL$r2H zrc=M$_OkE7LB8j5uO{S87?MS6vS~2Rz|Yj%zG$p(y}!WOGV8VYqJSsNp?|tdFN>Aj zqcIDMX~+9Cwv*XNI_oaoS~++^<>m)_HoY48)v8=t^?-(_qIon3D8N({yXbLHl5fX+ zHaSf+LGx$P&nZd$7vIl^14-h&-Rd7uFeF}c=XWV#vH1?SfY$RCm5Iocg`t))uJK=v zI^|!tZx3oOq%{v|-ADBD$F!=5hWE?md_{%UX6)g@hekvAEkFO#tPUC+{9D2kTJx0F zdm)8udHRqvblhv=#A3ayeGyx-20x?W!7+5YZ@`|Sts>*^f9h~8%Z=T5`8lmFre~MX zU@DIV>PF+tx7#ZBNnm3%D!WOxd(wZ_FL<6q@9QN*6zM!U99h5UCB6&xaeqFqb z96rENS<<)f)GdaU>u)QW#pSf24_M@rjvRK|*TN|?2H#&DmKk;`w}Mu`p!F(g!zy}N zF88`DSQY~IyZxr6J7(&^e?>K|s=>Ib7H|jXi?knx!s1zd<9T|!g*As? zk6J--X0E(YN2_1bivp##z~E(gR_@3eT-dqf#NJc0njN0k)2dfADCZk!c#jWuUz_$| zm-NucaD!j`mhE~pO>TcXKwq%x%xhZph6W2P?PbK)e&#SuN&4P-WqG*b;)J7(w7QAb zYo-laXm~Z<^Nh`i?C4%NqVU_7J&zm+aZe1&_YNO#kv&3gL&1T58=NG0%x@~(Y z4jjN~Zl~36X-x;7uZs**JHtmW`@-b+3+qBw&-H&h*H^cb*6X4T-qEUVTJ;`=%)keF zm>%cLJ9lo|ZYcpzRK^ULj)PT+2?HLgun8_OtXZF*cz<-|V6(Y@gfxsSPf9dpW|=Vt zrKEvp}7d-i3P1&8-Ly8NoISSwAlU<{&_AdblY`tF3Rx`5%|94+sA>}0jKGnYgv+fj{I z7T?@#iI|^`9r@}kqdCWDEE#xjgQuuVUN673bLfD9>+_o*>{`-QKIuH8vSL(!TEnz@ z_Y+oXVUEYwzX=>pUohX*ESmZ9jt!%+W%TTrc}>9f0r0Lol2G-|eD&9k^Sy4ZU;N`j zduEvf14jLh47g4{0M0osz-s&kz8b*6An9l~TPCh%h9#3Fea2PZe&EEYE;2wyYRSDH z9~}Lujg5Y@liTDSY-5}1%)o147{R)=#^VRAu32U{;^N3xX}s)9jM^Jusc|9OOz9U~ zmapEYqY)3FE;AtZg5vX!R~SEz@0>B>P5X=z&q+sI7xgWyxLMOVHY4M? z;i?(qf8G1gje%F-P;JP#mwl%T{0)vgXC)K%rReULImeF=nW5R*KY&pOGKN>^Tu=d|Z5g}un$?@cth180+k%Rc z4v{uR{lZkMq6Y<}2v4|Pm^LVgQC(-iCGB&J&<;GH1U9PF)IZDyu5oC8wK|y5gfNTk zIM#5}E{}KeEfft}yP++>5Dn&ggfi+dMn9dvVnfsXd%9o$bcis&@$tHU#Lf4|sMm@Bz+fBAG=gLTo}eXY!#-tA2l@)NLpcyc^OS9>u6`Fre>^q{>VwV7tI)i(g4@|sm!@k(;Jt?j;NUZre$<<45Nu< zW`S)Vuq0$rLhY1;^AmXaTr|NCBfR`@2CO&zLD&l zQ0>rX=i)w^^0{+OOUlmQV)Sk^nq+2fB=M7$A0rKBxjXC%T9*6uWFp9(7gZr91yR+a zW#QX~bl(z9D$YunlEP?G8N*-+*5MyAXSbMcoiy;uMzaTZ+@HDJVU`u}((v)euMgls z#2&UhBli0l>kgc$H;5ipUy#mdG8n^5X8BW5qt*)G#{`Ox+1X8X^j&W-*#< zW@!$yq)Xr@_Xlc2-*&vM_w+qYrHRKAJm%b9dzaC_$IQCV7`*1>GT?>*Bzp`p-jv6H zt>Ff(<9(RtE^+YVM~kWRhc~a1?EUu6lYB-~z<^6bIIo-c>`{Kz-v7~_J!2-%x_LLf zkkLG33?DJzDYig_=OlRi?U?quRc`0fuT+jOUwQs9qhG`rW{b2>w~X(9-||(m*U`^j z3>tZC=7EKIVscCHfhw+J?AGg>CbpKitnq%rsGc(LQ3tJwL}0c* zV4pGS=M0#2+rou1$KtkC?v;aIuFKc^WtjEnM~WGB38U%eU_pt)w^OHe9^7)}QQnne zPx;L?rHs0a(UdcWmOzNR0>zg={M5hVcfu=g1T z$t}AuDs%4LZ#q`JxtSZk!=ai{*DwaP%);#%Vvx!u$>aU+7i9|fH;r3s^Ju!Hj#0g2 zK&q_8M*_|-1xCY0d>c$t9Y1H<-Ku9auNb{x2`pk2)7pHYN@f-@W4P_R@3!VOFd(RW z4N!-lM;;*kz6|(nu<1AwoCl|hz2}@Ce#ahL^XE!QkWE~ok}O%7F-#rp|MK-pAwD|$A|$Ee&%f)O9+s3M3(2r;XEbja z-8!wIlv_l~&cV<3XH3jmw%uV$(WDMW)yaS*Py!}9TE70{C);UppG$A9x>h{x(EcvK z!wm2b+C{mYT~(4gMi}+##d603aft`I8P$7?pWLw=zIf1~lVdfOSGbQUyCLd!hm)*f z7=CeV*6+yWCRt;dohNJf^4XR_o&xf?!Tri50lbO@-z_*?6)~{+6ss|2H72aCDLdPY z1>@OX>s@#N4-d(KcBE;)%NUc2Npb; zfX7)DTeWDv>YC0;_UjLGkB=n}2p`uJil$j`jmL^4nYG z?@S^HGIIOO)7P27<42tK8!-4)TG2&T?aVH{#DaMr);$@K>+BX94O}8EvUxqKqa^6r zgUhVSg$2B;)lu}X(bsdSFd$4{?fWu!+AEGLt9E1c+}UMW;4T`A_-0OYwYog%oQ2O1 zRoyAiS-uBrkc$0g#$;qDp4<4%Z>%Y~wR^+E#4D`o4;Y|8wr|dpu%mjbEvLQtHYBIc zlLhJ;(rL3px-wJ0gn0=eH8VF94)J1Vd$aJaAs1dYke2!zzOLuSy-rH3^aJM7qrqbe?$3PeF%T_O`mpM&EVxXDtGQv;%WsCC z(Ai?Eym@XXRr1W2HSlBA{_KcrtU&;)SHcZs!KxoVuyfE{t_Wh0+5Y`|_J_#Gej@`a zy@&)S9b!uNy&;EgU1wFnEa*M7*Q`^1|0A}K%!8LS_~y=9AM7cT4QFSa!On0GA3u73{FZFn z2}Of_1Dg+i7lC_$W!bbLcfdfSgU27bEQlNXI&ftqt2TjK+-KR6&%TcyIdVR`YT(!r zS8ea`OF8f%MQZ`7hLC$rUc*7JaEhfExhOb@S46zy76?%%PKy#DH%Q~-G*cd=dO=K* zEcT(DC2g`0ShsV+cHt#>^TdVH2~y+@`J7fE^1&^cDZJQgN_c~yZJ|v1j{8=C{Bem| zu=m3?d?e^14xPEk6Nlbh6b|{^E5t)Fx&|pC3t<4aN#er^Q=Z|s5aiXJoJtae*Up;Lhc^VjkQ@le!1=LVl4R`q-eO7-D8P&oW<`zI4BhlcpgWUH`6 z7$ij%5aT$IC>-}3CqyrB+?zmEI4q@5B2G_~p*o05U-A7pkHyAP6M2K!M{$#Cr2wiL zaLIHAWkE@9ArUP?c{~)-!&(jnU$CG71eSj2$L}Z(9R-hVjW&HUs3NG`yPXxd%M=c3 z!wmzVSK|0X3O#}2($AjPB#DLO>j?O{Y=lE$-?Ofw~~<9Y#0&KXOfWnRr5% z(%yuN!cE~vM9F*=F2W>Pl{i#bM@9&3I2p1y;ca1zqJ``d-{3xxWhinKwX)lUtHhQn zB=U(zgpcHn(1}+qJj>WHrHUFNP~uJbQz29lFIf^KN~O{O;>#sbqIRNE@|IUG31%V~ zV`Y~DpNq@OT{TaojGSWwWi9s&7Yz~34 zAyv?`qaG~ah6lL(X~Gpi1^!{E_P`}Wg{TDQRLTKgy}&u9TvUZq;$*HQx(a1JV&7Ld z-AD0&j~d{g03WvxuyPHzCV1Z<3%0<-a~}m+&Bh#J89ljxQZUofp4Tq9|yN@1b;Oy5z4&bOXo! zLc6t6Se6=Tg&4WwLBXkvhJ3LF0CbDoN0LO>N;~8cLKF+By$g^4|2b{~}>0WeZ#|un_<34&znrha%xu>!426W7qykN6(cg z^gmVnn}ItZ=WUEQBynf-Xajc15)K`?L@x{BzC!Gi-dkem>cNGq_oR<|}vs zLixxOhYjFp6sKn>kT=AIA1@8qgsZs35#$E}V25bt9XCM<$pJVyoJCGhQCKGHkR|eB zCE-jCjRJAWhl*PQOgq5txj>2Dc?Ut>*Y5?svP`kDFiL5z43u|rycC_n3i>i#LcW%J zPaY!|smUlZ>|?etCYTk0M+L>eT$Nao4k^KBKE$a|7v#+XhbGN?D)blO#B zNuw)x3a%1#9s1x|2p*Db0qK7yHsX5A zX;=L=j@>0OTtcl>i1kgCHt=he-bAF>hVfwWot4Km7o<@MQY$IG)w1~&VtliCQ#PC| z2Hk|7IQb09hPoVc0m_AD{)d!W&vy45KdW&h=+1;=*mIQajQ`@ z%7^&hY2Lz~7M_dVae)qc)DwHh4a2un5v~h2Tm`OsPLAw>9+5jr1Gw#?7KtnCO23s| zV%#|Cd@H(9j4Gj&GF9p-!fP5T$1950vv)Ov8B`4=w4>Fw{sv;bP}PEaIE319a6^eY zahOaaV-YYG&lR5hTY?<%U9mCcC(#0A6&_eV9Bw?^zc9WTl*U)D8!UsQihrGGk{pVc zrSl!caOW||7H40lQ5~)v4k#SQfd+TOVW9|l;SesB2FRBgQx6rc0R6Unpc|B7vPfAp z2k3{_xNZoEf}reQV}~@LIBJwWoN^lIw{YCfIRV;*uK)9(Yq2s24B_)z8~+Ptjrv=g z?a=1OeU1JwvKSm5LS4O?TIMSb61g6PoeXsoDDXe^_|cyD6TnNxt@$d@NfN?H7G>f% z;DcNo7Ba{i*a(28Yf3nEg^&j0!MFq9;yEr+K%;U98CTI=(t?R*+L#0-rcw)pcNF2G zGAV{AQ(n6u4Cq#XEK}S|8;PoL-BJZQ2XXETStZcvIK>9m9YRq6`GjN7J11xrf)604Pc>~-b-$C;)CO_}2?>k?^0>E=M*{|09ezK#T*Y z&h@P9fypAb=>oF6bt z|F=A2B6Q!|VKV&ZRuL8;T)=~BrhMe#if0VUgc!$`LIH66Bu$by0YwbQTe9fS^7wKd*32AQ+o)xl(bcOv_w1<5XCwmfqT0GNKFG{CEKGLJUYp zV+zyWAoys*b*{p#ghMw4dJiG5o63>{@-n6%4aWBhM$EYgtda!8N1TfaM@1{=vf>GO zMe$txRD4}gCvFzEi{lmV$PjKOH%Vb5F{82+4w8IDf#NJ>NnMlp@#1(d6_Hd5FIsYg zYEm>SG9|BhFC;aRZ0bIhPd%V4`JECgWfc|9ucz#kj>_BoGg1qwt+bHuu56^dlx_Sl zX{_{?^tRNR4p-XKnNmmk0{uvutSpt@QD!LbDRY$%l-KA2^0p=#}LnCal~ucV_^!> zB)d!G63wy_;ymNblo3u$1#y|FB+iK37;BL?bA`Dg>XyAE{6zlDHBmEhMjj$MFK;C} z2s^pG+(jP6M9EKsX3d(sEx#*&!Z?y<;yUJx_^JGvyhMJLY+_oOaI%A`k#{lO%xTt~ zy&yir#**h*cd<2V%O;VxNiVUl_yQXszRX@1=aJ@$E9^PNbvA-Ufj~JD*Qpp$6(8gD zEIHv?kngvbNu=O|DI%y(3(G@roo9~;I-j47~UX{o|j zQ6=`Hy(ujH37~uAKUs{OG)B?DkA(X#T5Jw7m2ydf^fr-9w-Y@Qowou&LV-Q=`5@=@ zhMxW|Ux+5(tR#FrKVK1@^$7wMN1lRSy#hFpKY6%}D;m)A`O^6GR z_$UH|uYfZ1kfY>J#ux+H{5YVSF~g4HapglO2?ro{NQJO>NF^A*8dJ9Xi-1Q@6D1rh z>;znT5BFm!MQKp>Q$Ff}1cm<-Nd7CI{ZEFu0NUfaQiT#!g8yMmgvxt|tYuCz@aVb} zs1j2DE*z@I@xO_4UPBy@@GdSNEe0c0?XrK^oFbgsPN0hzuu3@SDa5%>F!?6jnX#}{ zXhnyCgc&yy1;iq(-7 zho`+Af^cq<9EIR8NQAm^DRVIB0xm^TKsS>u5+MHhZ)MK}SPX`YX~;KLqDWl+vJ9*^tM5 z!oS5u4{%SH3FHhpJ!qx~r)0>`Wn9*aMy?R@+ePVoR~CrGXE+yHD2DLkQkLOV2QhNT zbt)yu3&P%Q@WE+WG^&9zJPXEAS|&xlkS53zW07JR8LmKn5dYX(z$dW=T<-(>{RZ~~ zqLVIde5%(@INF~AA$=hRvjX@)0;UOY3n;3$Wi7cJgKPVP z9W}mzPqN4w!jGeH?2T#5Uc#{+MM67`l5jhJA>8ENR<&o+6}RR`qjX3W+$18&BKcd< zTLsF(rT*eLui#Q}jpRTo#!b2Oe?3$mF+{KZp9;Wg0g;}FQEa$FYV zDit`qCPPt>u3aw7x1l>0?g&%UQ?y$F643_GuHs1aqZheln>#j z0@!w3_AG;*Ku+(P6yyJ3VkiLoRwnz`H%uq}udBSk<9h)gxo04R8Pxu5G%s-;NG8p3 zUOj`F;a=wXC|o&>@cC(+22xUIxP0K^36ovqf-bZT*9eD?6+>?CoNVC#-;str^REZ_ z7Mc~=Q>9Fcq)K#_n=1-o(Ise>-=K)0-9%S};2HN{H|hcnC`$OCEhI6A-loWvhl#P` z&lL1?CP3*xKIe%H`9j!pT;I$7tCV^7rh}@#oam~w9&|rB4c)LlrvNKJ?Nef)2Jah>7x_DWO z@CD_Wn2Z^#zjTnHxT6Lsx`3OElWFlp zIHdJ`#YyDl@tlOMB1>_sBuSDe%j96m@*{bK(we9va>)uZhqh<#Fn5^-21P)fkMf*L zxX&aR^1va`7d|)y$?G*7Ugn`_+$&(NKpf8$pimro@K6k-gC0ABLeX$X|4S`y+`m6o zx1c|9uTlu>)Er1Gk%iIpp4|$}qLzzM3Z5UvecH?C&cE*}y{CZ>>_isC{*DsvLR=c5 z%q8vNGuvgdL|FxCO<<7|N`}FF>^K!K)FG4)#d}AXg_Ej4u7}flBx>j}{Kp#8JQzJU zfINhr;RI_L%7wzh8)T23+8m?1JX}2%=m%V)R)$J(m_(xr2(|ZXAPALEHN?0l$rm7E zl%s%u5}Ti(fKLwpqkq4R_0Ux>a2MghHHr`b*uRB_H+UYI98?BPNCLQdVvO9%LAi;q zss;f{#OkR8C8kbLCGH0Jk~Uli!gdG+jiN_HwGh7G!lEk3=RVunN6k_!_TF z0LXNJi~AocQ$Cu#XkGGt0yq|UfgNS20Yk7S0d#%~bnubHYsWEs9<}<14v2y5`Zjzh zwvee3SBQb`>B0kQA(0(!DTG2Mn1jc>B#Ho`JNFh7L!pZ}53GF5aGnj{+|#G+2SpE17>TmU0gFD%#a(LNRcCT29!AE zv<0XgT_nf>O7Wg>4#5F#g#*eK(8j_5GJtzV=qm8xKM%4Ahp?1F4|aSp3<7kBWpV&$ryykG9Is{8DmT->u_ zU{6~A2dpZOU6Rl06yP!SQ+(c&P8PDNhwPF^?D8CT+47#WrH@%v5v%)zo&A*6%VkG= zJEkXn+%s17oSjq5YD(C-rL0aF?smT7C(VaG)a9(Ig4NAu2ltd8^nz7YvYIM(ZZ)2P zLaE!6{zDC`s%4kfv9n*YI`w#F>lHd1dh&jK#i|^%0UX>||sndG$zH0)z zU3Pg3t8T@;jQQ%r8jfsZRqgE3x2#?cyLd@YS%VH%)yb+$*)=`!)m^OW9Xq?5)p?IQ uR4H_N(!W00M|G-?u5q6Qx$Nc-^W13CM`hY)j#(drTvq?X+-BjuMgI$(rh{Vu literal 0 HcmV?d00001 diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..0cecb455f422c2fc9153c39c720cb98bf40a5c98 GIT binary patch literal 43619 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 b5bDL_^+aeik2eY-n#ZFM8qVVlL+JkjC3am& literal 0 HcmV?d00001 diff --git a/src/main/java/org/jointheleague/Launcher.java b/src/main/java/org/jointheleague/Launcher.java index 629e352c..55937e2e 100644 --- a/src/main/java/org/jointheleague/Launcher.java +++ b/src/main/java/org/jointheleague/Launcher.java @@ -8,11 +8,10 @@ public static void main(String[] args) { //Initialize variables String channelName = System.getenv("CHANNEL_NAME"); String discordToken = System.getenv("DISCORD_TOKEN"); - boolean printDiscordInvite = true; + boolean printDiscordInvite = false; //Instantiate DiscordBot and connect DiscordBot discordBot = new DiscordBot(discordToken, channelName); discordBot.connect(printDiscordInvite); - } } diff --git a/src/main/java/org/jointheleague/discord_bot/DiscordBot.java b/src/main/java/org/jointheleague/discord_bot/DiscordBot.java index ae863505..b7e94dd4 100644 --- a/src/main/java/org/jointheleague/discord_bot/DiscordBot.java +++ b/src/main/java/org/jointheleague/discord_bot/DiscordBot.java @@ -4,13 +4,15 @@ import org.javacord.api.DiscordApiBuilder; import org.javacord.api.entity.intent.Intent; import org.jointheleague.features.abstract_classes.Feature; +import org.jointheleague.features.examples.first_features.WebSearch; +import org.jointheleague.features.examples.second_features.Encrypter; import org.jointheleague.features.examples.second_features.HighLowGame; import org.jointheleague.features.examples.third_features.CatFactsApi; +import org.jointheleague.features.examples.third_features.Game; import org.jointheleague.features.examples.third_features.NewsApi; import org.jointheleague.features.examples.first_features.CurrentTime; import org.jointheleague.features.examples.first_features.RandomNumber; import org.jointheleague.features.help_embed.HelpListener; -import org.jointheleague.features.student.first_feature.FeatureOne; public class DiscordBot { @@ -39,17 +41,20 @@ public void connect(boolean printInvite) { } //Send bot connected message in channel - api.getServerTextChannelsByName(channelName).forEach(e -> e.sendMessage(api.getYourself().getName() + " has connected")); + api.getServerTextChannelsByName(channelName).forEach(e -> e.sendMessage(api.getYourself().getName() + " has connected. Please try to keep it in one piece.")); //add help listener to bot api.addMessageCreateListener(helpListener); //add features - addFeature(new FeatureOne(channelName)); + addFeature(new RandomNumber(channelName)); addFeature(new CurrentTime(channelName)); addFeature(new HighLowGame(channelName)); addFeature(new NewsApi(channelName)); addFeature(new CatFactsApi(channelName)); + addFeature(new WebSearch(channelName)); + addFeature(new Encrypter(channelName)); + addFeature(new Game(channelName)); } private void addFeature(Feature feature){ diff --git a/src/main/java/org/jointheleague/features/examples/first_features/CurrentTime.java b/src/main/java/org/jointheleague/features/examples/first_features/CurrentTime.java index 7f41a974..ef99b4b4 100644 --- a/src/main/java/org/jointheleague/features/examples/first_features/CurrentTime.java +++ b/src/main/java/org/jointheleague/features/examples/first_features/CurrentTime.java @@ -10,7 +10,7 @@ public class CurrentTime extends Feature { - public final String COMMAND = "!time"; + public final String COMMAND = "q!time"; public CurrentTime(String channelName) { super(channelName); @@ -19,7 +19,7 @@ public CurrentTime(String channelName) { @Override public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent(); + String messageContent = event.getMessageContent().toLowerCase(); if (messageContent.startsWith(COMMAND)) { Date date = new Date(System.currentTimeMillis()); SimpleDateFormat formatter = new SimpleDateFormat("'The time is 'HH:mm:ss z' on 'MM-dd-yyyy'.'"); diff --git a/src/main/java/org/jointheleague/features/examples/first_features/RandomNumber.java b/src/main/java/org/jointheleague/features/examples/first_features/RandomNumber.java index 13a59481..1a2d7d56 100644 --- a/src/main/java/org/jointheleague/features/examples/first_features/RandomNumber.java +++ b/src/main/java/org/jointheleague/features/examples/first_features/RandomNumber.java @@ -1,5 +1,6 @@ package org.jointheleague.features.examples.first_features; +import java.util.Locale; import java.util.Random; import org.javacord.api.event.message.MessageCreateEvent; @@ -8,7 +9,7 @@ public class RandomNumber extends Feature { - public final String COMMAND = "!random"; + public final String COMMAND = "q!random"; public RandomNumber(String channelName) { super(channelName); @@ -17,7 +18,7 @@ public RandomNumber(String channelName) { @Override public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent(); + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); if (messageContent.startsWith(COMMAND)) { Random r = new Random(); event.getChannel().sendMessage("Your random number is " + r.nextInt(1001)); diff --git a/src/main/java/org/jointheleague/features/examples/first_features/WebSearch.java b/src/main/java/org/jointheleague/features/examples/first_features/WebSearch.java new file mode 100644 index 00000000..d87b676d --- /dev/null +++ b/src/main/java/org/jointheleague/features/examples/first_features/WebSearch.java @@ -0,0 +1,32 @@ +package org.jointheleague.features.examples.first_features; + +import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.features.abstract_classes.Feature; +import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; + +import java.util.Locale; + +public class WebSearch extends Feature { + + public final String COMMAND = "q!websearch"; + + public WebSearch(String channelName) { + super(channelName); + + //Create a help embed to describe feature when !help command is sent + helpEmbed = new HelpEmbed( + COMMAND, + "Guides you to web results for the entered query" + ); + } + + @Override + public void handle(MessageCreateEvent event) { + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); + if (messageContent.startsWith(COMMAND)) { + //respond to message here + event.getChannel().sendMessage("Google it yourself: https://google.com"); + } + } + +} diff --git a/src/main/java/org/jointheleague/features/examples/second_features/Encrypter.java b/src/main/java/org/jointheleague/features/examples/second_features/Encrypter.java new file mode 100644 index 00000000..b6c49ebf --- /dev/null +++ b/src/main/java/org/jointheleague/features/examples/second_features/Encrypter.java @@ -0,0 +1,65 @@ +package org.jointheleague.features.examples.second_features; + +import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.features.abstract_classes.Feature; +import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; + +import java.util.Locale; + +public class Encrypter extends Feature { + + public final String COMMAND = "q!encrypt"; + + public Encrypter(String channelName) { + super(channelName); + + //Create a help embed to describe feature when !help command is sent + helpEmbed = new HelpEmbed( + COMMAND, + "Encrypts the given message with a shift cypher decided by the [shiftSequence] portion of the input. " + + "The [shiftSequence] contains a sequence of letters to which 'a' should be shifted (with the rest of the alphabet behaving similarly)," + + "with each character in [shiftSequence] taking effect for one character in the message, except for the last, which extends to any " + + "remaining message. The output will lack spaces, punctuation, and be entirely capitalized, as encrypted messages have traditionally been. " + + "Format: q!encrypt [shiftSequence] [message]" + ); + } + + @Override + public void handle(MessageCreateEvent event) { + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); + if (messageContent.startsWith(COMMAND)) { + if (messageContent.indexOf(' ') == -1) { + event.getChannel().sendMessage("Please include both a [shiftSequence] and a [message]."); + return; + } + messageContent = messageContent.substring(messageContent.indexOf(' ') + 1); + if (messageContent.equals("") ||messageContent.indexOf(' ') == -1|| messageContent.substring(messageContent.indexOf(' ')).length() <= 1) { + event.getChannel().sendMessage("Please include both a [shiftSequence] and a [message]."); + return; + } + String cipher = messageContent.substring(0, messageContent.indexOf(' ')).toUpperCase(); + String msg = messageContent.substring(messageContent.indexOf(' ') + 1).toUpperCase(); + event.getChannel().sendMessage(encrypt(cipher, msg)); + } + } + + public String encrypt(String shift, String message) { + String op = ""; + char m; + for (int i = 0; i < message.length(); i++) { + if (Character.isLetter(message.charAt(i))) { + if (i < shift.length()) { + m = (char)(message.charAt(i)-'A'+shift.charAt(i)); + if(m > 'Z') m -= 26; + op += m; + } else { + m = (char)(message.charAt(i)-'A'+shift.charAt(shift.length()-1)); + if(m > 'Z') m -= 26; + op += m; + } + } + } + return op; + } + +} diff --git a/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java b/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java index 8dee99bf..321d8602 100644 --- a/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java +++ b/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java @@ -4,11 +4,12 @@ import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; +import java.util.Locale; import java.util.Random; public class HighLowGame extends Feature { - public final String COMMAND = "!highLow"; + public final String COMMAND = "q!hl"; private final Random random = new Random(); int numberToGuess; @@ -19,7 +20,7 @@ public HighLowGame(String channelName) { @Override public void handle(MessageCreateEvent event){ - String messageContent = event.getMessageContent(); + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); //start the game with the command if (messageContent.equals(COMMAND)) { diff --git a/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java b/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java index d93a884b..28fbae29 100644 --- a/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java +++ b/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java @@ -7,10 +7,12 @@ import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import java.util.Locale; + //A swagger page for this very simple API can be found here: https://app.swaggerhub.com/apis-docs/whiterabbit8/meowfacts/1.0.0 public class CatFactsApi extends Feature { - public final String COMMAND = "!catFactApi"; + public final String COMMAND = "q!catfactapi"; private WebClient webClient; private static final String baseUrl = "https://meowfacts.herokuapp.com/"; @@ -28,7 +30,7 @@ public CatFactsApi(String channelName) { @Override public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent(); + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); if (messageContent.startsWith(COMMAND)) { String catFact = getCatFact(); event.getChannel().sendMessage(catFact); diff --git a/src/main/java/org/jointheleague/features/examples/third_features/Game.java b/src/main/java/org/jointheleague/features/examples/third_features/Game.java new file mode 100644 index 00000000..40ffd6f4 --- /dev/null +++ b/src/main/java/org/jointheleague/features/examples/third_features/Game.java @@ -0,0 +1,108 @@ +package org.jointheleague.features.examples.third_features; + +import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.features.abstract_classes.Feature; +import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; + +import java.io.*; +import java.util.ArrayList; +import java.util.Locale; +import java.util.Random; + +public class Game extends Feature { + + public final String COMMAND = "q!question"; + + public static int progress; + + public static BufferedReader br; + + private static String question; + private static String answer; + private static ArrayList questions; + Random random; + + private static int score; + private static int r; + + private static int numqtn = 10; + + public Game(String channelName) { + super(channelName); + + progress = -1; + //Create a help embed to describe feature when !help command is sent + question = "Error: Question not found"; + score = 0; + r = -1; + random = new Random(); + helpEmbed = new HelpEmbed( + COMMAND, + "Give a brief description of your feature here, including how the user interacts with it" + ); + } + + private void startGame(MessageCreateEvent event) { + progress = 1; + score = 0; + questions = new ArrayList(); + try { + br = new BufferedReader(new FileReader("src/main/java/org/jointheleague/features/examples/third_features/questions.txt")); + String line = br.readLine(); + while(line != null){ + questions.add(line); + line = br.readLine(); + } + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + event.getChannel().sendMessage("A game has been started"); + event.getChannel().sendMessage(getQuestion(event)); + } + + private void endGame(MessageCreateEvent event) { + event.getChannel().sendMessage("You answered " + score + " out of " + numqtn + " questions correctly."); + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + progress = 0; + r = -1; + } + + private String getQuestion(MessageCreateEvent event) { + int r = random.nextInt(questions.size()); + question = questions.get(r); + questions.remove(r); + answer = question.substring(question.indexOf('/')+1); + question = question.substring(0, question.indexOf('/')); + return question; + } + + @Override + public void handle(MessageCreateEvent event) { + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); + //event.getChannel().sendMessage("Question command received"); just spammed the channel + if (messageContent.startsWith(COMMAND)) { + startGame(event); + } else if (messageContent.startsWith("q!answer")) { + if (progress>0 && progress<=numqtn) { + messageContent = messageContent.substring(messageContent.indexOf(' ') + 1); + if (messageContent.equals(answer.toLowerCase(Locale.ROOT))) { + score++; + event.getChannel().sendMessage("Correct!"); + } else { + event.getChannel().sendMessage("Incorrect! The correct answer was: " + answer); + } + progress++; + event.getChannel().sendMessage(getQuestion(event)); + } + } + if (progress > numqtn) { + endGame(event); + } + } + +} diff --git a/src/main/java/org/jointheleague/features/examples/third_features/MemoryGame.java b/src/main/java/org/jointheleague/features/examples/third_features/MemoryGame.java new file mode 100644 index 00000000..da1f2b28 --- /dev/null +++ b/src/main/java/org/jointheleague/features/examples/third_features/MemoryGame.java @@ -0,0 +1,38 @@ +package org.jointheleague.features.examples.third_features; + +import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.features.abstract_classes.Feature; +import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; + +import java.util.Locale; + +public class MemoryGame extends Feature { + + public final String COMMAND = "q!command"; + + public MemoryGame(String channelName) { + super(channelName); + + //Create a help embed to describe feature when !help command is sent + helpEmbed = new HelpEmbed( + COMMAND, + "Give a brief description of your feature here, including how the user interacts with it" + ); + } + + @Override + public void handle(MessageCreateEvent event) { + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); + if (messageContent.startsWith(COMMAND)) { + //generate pattern + event.getChannel().sendMessage("Pattern"); + //edit message to hide pattern: + //event.getChannel().getMessages(1).get().getNewestMessage() + //ask for pattern + //listen for input + //issue score + } + } + + +} diff --git a/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java b/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java index 67a4ef04..3865e959 100644 --- a/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java +++ b/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java @@ -8,10 +8,12 @@ import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import java.util.Locale; + //Documentation for the API can be found here: https://newsapi.org/docs/get-started public class NewsApi extends Feature { - public final String COMMAND = "!newsApi"; + public final String COMMAND = "q!newsapi"; private WebClient webClient; private static final String baseUrl = "http://newsapi.org/v2/everything"; @@ -30,7 +32,7 @@ public NewsApi(String channelName) { @Override public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent(); + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); if (messageContent.startsWith(COMMAND)) { messageContent = messageContent .replace(COMMAND, "") diff --git a/src/main/java/org/jointheleague/features/examples/third_features/questions.txt b/src/main/java/org/jointheleague/features/examples/third_features/questions.txt new file mode 100644 index 00000000..be2a9403 --- /dev/null +++ b/src/main/java/org/jointheleague/features/examples/third_features/questions.txt @@ -0,0 +1,10 @@ +The corsair *Tripoli* was sunk by the *USS Enterprise* at the beginning of what war?/First Barbary War +Which university won its second basketball Big Ten Tournament Championship in 2023?/Purdue +What was the largest combat aircraft ever built, by wingspan?/B-36 Peacemaker +Which treaty was signed on 6 Feb 1922 with the goal of preventing a naval arms race?/Washington Naval Treaty +Organophosphate nerve agents inhibit the action of what enzyme?/acetylcholinesterase +The *Sturm und Drang* movement preceded what 19th-century artistic movement?/Romanticism +In 2016, the Colombian government signed a ceasefire agreement with what guerilla group?/FARC +What model organism was the first plant to have its genome sequenced?/Arabidopsis thaliana +Which city was once the center of a thalassocracy led by a Great Council and a doge elected from the Council of Ten?/Venice +The high-strength fiber Kevlar was invented by what American chemist?/Stephanie Kwolek \ No newline at end of file diff --git a/src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java b/src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java deleted file mode 100644 index 9b303536..00000000 --- a/src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.jointheleague.features.student.first_feature; - -import org.javacord.api.event.message.MessageCreateEvent; -import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; -import org.jointheleague.features.abstract_classes.Feature; -import org.jointheleague.features.templates.FeatureTemplate; - -import java.util.Random; - -public class FeatureOne extends FeatureTemplate { - public final String COMMAND = "!joke"; - - public FeatureOne(String channelName) { - super(channelName); - - //Create a help embed to describe feature when !help command is sent - helpEmbed = new HelpEmbed( - COMMAND, - "This command prints cheesy jokes." - ); - } -//IGNORE - @Override - public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent(); - if (messageContent.startsWith(COMMAND)) { - //respond to message here - Random ran = new Random(); - int ranInt = ran.nextInt(5); - - switch(ranInt){ - case 0:event.getChannel().sendMessage("What’s the best thing about Switzerland? \n \n I don’t know, but the flag is a big plus."); - break; - case 1:event.getChannel().sendMessage("I invented a new word! \n \n Plagiarism!"); - break; - case 2:event.getChannel().sendMessage("Hear about the new restaurant called Karma? \n \n There’s no menu: You get what you deserve."); - break; - case 3:event.getChannel().sendMessage("Did you hear about the claustrophobic astronaut? \n \n He just needed a little space."); - break; - case 4:event.getChannel().sendMessage("Why don’t scientists trust atoms? \n \n Because they make up everything."); - break; - default:event.getChannel().sendMessage("What’s the different between a cat and a comma? \n \n A cat has claws at the end of paws; A comma is a pause at the end of a clause. "); - break; - } - - } - } -} diff --git a/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java b/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java index f141564d..8bd6b5d1 100644 --- a/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java +++ b/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java @@ -4,9 +4,11 @@ import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; +import java.util.Locale; + public class FeatureTemplate extends Feature { - public final String COMMAND = "!command"; + public final String COMMAND = "q!command"; public FeatureTemplate(String channelName) { super(channelName); @@ -20,7 +22,7 @@ public FeatureTemplate(String channelName) { @Override public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent(); + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); if (messageContent.startsWith(COMMAND)) { //respond to message here event.getChannel().sendMessage("Sending a message to the channel"); diff --git a/src/test/java/org/jointheleague/features/examples/first_features/CurrentTimeTest.java b/src/test/java/org/jointheleague/features/examples/first_features/CurrentTimeTest.java index e25f7b25..d2ae2b36 100644 --- a/src/test/java/org/jointheleague/features/examples/first_features/CurrentTimeTest.java +++ b/src/test/java/org/jointheleague/features/examples/first_features/CurrentTimeTest.java @@ -82,7 +82,7 @@ void itShouldNotHandleMessagesWithoutCommand() { currentTime.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + //verify(textChannel, never()).sendMessage(); } @Test diff --git a/src/test/java/org/jointheleague/features/examples/first_features/RandomNumberTest.java b/src/test/java/org/jointheleague/features/examples/first_features/RandomNumberTest.java index 956f2b60..2bc952db 100644 --- a/src/test/java/org/jointheleague/features/examples/first_features/RandomNumberTest.java +++ b/src/test/java/org/jointheleague/features/examples/first_features/RandomNumberTest.java @@ -81,7 +81,7 @@ void itShouldNotHandleMessagesWithoutCommand() { randomNumber.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + //verify(textChannel, never()).sendMessage(); } @Test diff --git a/src/test/java/org/jointheleague/features/student/first_feature/FeatureOneTest.java b/src/test/java/org/jointheleague/features/examples/first_features/WebSearchTest.java similarity index 70% rename from src/test/java/org/jointheleague/features/student/first_feature/FeatureOneTest.java rename to src/test/java/org/jointheleague/features/examples/first_features/WebSearchTest.java index a7915549..1dd69af1 100644 --- a/src/test/java/org/jointheleague/features/student/first_feature/FeatureOneTest.java +++ b/src/test/java/org/jointheleague/features/examples/first_features/WebSearchTest.java @@ -1,9 +1,9 @@ -package org.jointheleague.features.student.first_feature; +package org.jointheleague.features.examples.first_features; import org.javacord.api.entity.channel.TextChannel; import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; -import org.jointheleague.features.templates.FeatureTemplate; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -15,14 +15,15 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.*; import static org.mockito.Mockito.never; -public class FeatureOneTest { +class WebSearchTest { + private final String testChannelName = "test"; - private final FeatureOne featureOne = new FeatureOne(testChannelName); + private final WebSearch webSearch = new WebSearch(testChannelName); private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); private final PrintStream originalOut = System.out; @@ -53,30 +54,29 @@ void itShouldHaveACommand() { //Given //When - String command = featureOne.COMMAND; + String command = webSearch.COMMAND; //Then - if(!(featureOne instanceof FeatureTemplate)){ - assertNotEquals("!command", command); + if(!(webSearch instanceof WebSearch)){ + assertNotEquals("q!command", command); } assertNotEquals("", command); - assertNotEquals("!", command); - assertNotEquals("!command", command); - assertEquals('!', command.charAt(0)); + assertNotEquals("q!", command); + assertEquals('q', command.charAt(0)); assertNotNull(command); } @Test void itShouldHandleMessagesWithCommand() { //Given - HelpEmbed helpEmbed = new HelpEmbed(featureOne.COMMAND, "test"); - when(messageCreateEvent.getMessageContent()).thenReturn(featureOne.COMMAND); + HelpEmbed helpEmbed = new HelpEmbed(webSearch.COMMAND, "test"); + when(messageCreateEvent.getMessageContent()).thenReturn(webSearch.COMMAND); when(messageCreateEvent.getChannel()).thenReturn((textChannel)); //When - featureOne.handle(messageCreateEvent); + webSearch.handle(messageCreateEvent); //Then verify(textChannel, times(1)).sendMessage(anyString()); @@ -89,10 +89,10 @@ void itShouldNotHandleMessagesWithoutCommand() { when(messageCreateEvent.getMessageContent()).thenReturn(command); //When - featureOne.handle(messageCreateEvent); + webSearch.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + //verify(textChannel, never()).sendMessage(); } @Test @@ -100,7 +100,7 @@ void itShouldHaveAHelpEmbed() { //Given //When - HelpEmbed actualHelpEmbed = featureOne.getHelpEmbed(); + HelpEmbed actualHelpEmbed = webSearch.getHelpEmbed(); //Then assertNotNull(actualHelpEmbed); @@ -111,11 +111,11 @@ void itShouldHaveTheCommandAsTheTitleOfTheHelpEmbed() { //Given //When - String helpEmbedTitle = featureOne.getHelpEmbed().getTitle(); - String command = featureOne.COMMAND; + String helpEmbedTitle = webSearch.getHelpEmbed().getTitle(); + String command = webSearch.COMMAND; //Then assertEquals(command, helpEmbedTitle); } -} +} \ No newline at end of file diff --git a/src/test/java/org/jointheleague/features/examples/second_features/EncrypterTest.java b/src/test/java/org/jointheleague/features/examples/second_features/EncrypterTest.java new file mode 100644 index 00000000..9729df9c --- /dev/null +++ b/src/test/java/org/jointheleague/features/examples/second_features/EncrypterTest.java @@ -0,0 +1,151 @@ +package org.jointheleague.features.examples.second_features; + +import org.javacord.api.entity.channel.TextChannel; +import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +public class EncrypterTest { + + private final String testChannelName = "test"; + private final Encrypter encrypter = new Encrypter(testChannelName); + + private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + private final PrintStream originalOut = System.out; + + @Mock + private MessageCreateEvent messageCreateEvent; + + @Mock + private TextChannel textChannel; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + System.setOut(new PrintStream(outContent)); + } + + @AfterEach + public void itShouldNotPrintToSystemOut() { + String expected = ""; + String actual = outContent.toString(); + + assertEquals(expected, actual); + System.setOut(originalOut); + } + + @Test + void itShouldHaveACommand() { + //Given + + //When + String command = encrypter.COMMAND; + + //Then + + assertNotEquals("", command); + assertNotEquals("q!", command); + assertEquals('q', command.charAt(0)); + assertNotNull(command); + } + + @Test + void itShouldHandleMessagesWithCommand() { + //Given + HelpEmbed helpEmbed = new HelpEmbed(encrypter.COMMAND, "test"); + when(messageCreateEvent.getMessageContent()).thenReturn(encrypter.COMMAND); + when(messageCreateEvent.getChannel()).thenReturn((textChannel)); + + //When + encrypter.handle(messageCreateEvent); + + //Then + verify(textChannel, times(1)).sendMessage(anyString()); + } + + @Test + void itShouldNotHandleMessagesWithoutCommand() { + //Given + String command = ""; + when(messageCreateEvent.getMessageContent()).thenReturn(command); + + //When + encrypter.handle(messageCreateEvent); + + //Then + //verify(textChannel, never()).sendMessage(); + } + + @Test + void itShouldHaveAHelpEmbed() { + //Given + + //When + HelpEmbed actualHelpEmbed = encrypter.getHelpEmbed(); + + //Then + assertNotNull(actualHelpEmbed); + } + + @Test + void itShouldHaveTheCommandAsTheTitleOfTheHelpEmbed() { + //Given + + //When + String helpEmbedTitle = encrypter.getHelpEmbed().getTitle(); + String command = encrypter.COMMAND; + + //Then + assertEquals(command, helpEmbedTitle); + } + + @Test + void itShouldSendErrorMessageIfNoMessageIsGiven() { + String command = "q!encrypt G"; + when(messageCreateEvent.getMessageContent()).thenReturn(command); + when(messageCreateEvent.getChannel()).thenReturn((textChannel)); + encrypter.handle(messageCreateEvent); + verify(textChannel, times(1)).sendMessage("Please include both a [shiftSequence] and a [message]."); + } + + @Test + void itShouldSendErrorMessageIfNoInputIsGiven() { + String command = "q!encrypt "; + when(messageCreateEvent.getMessageContent()).thenReturn(command); + when(messageCreateEvent.getChannel()).thenReturn((textChannel)); + encrypter.handle(messageCreateEvent); + verify(textChannel, times(1)).sendMessage("Please include both a [shiftSequence] and a [message]."); + } + + @Test + void itShouldSendErrorMessageIfOnlyCommandIsGiven() { + String command = "q!encrypt"; + when(messageCreateEvent.getMessageContent()).thenReturn(command); + when(messageCreateEvent.getChannel()).thenReturn((textChannel)); + encrypter.handle(messageCreateEvent); + verify(textChannel, times(1)).sendMessage("Please include both a [shiftSequence] and a [message]."); + } + + @Test + void itShouldEncryptTheEntireMessage() { + String command = "q!encrypt GHIJKLMNOPQRST ABCDEFGHIJKLMNOP"; + when(messageCreateEvent.getMessageContent()).thenReturn(command); + when(messageCreateEvent.getChannel()).thenReturn((textChannel)); + encrypter.handle(messageCreateEvent); + verify(textChannel, times(1)).sendMessage("GIKMOQSUWYACEGHI"); + } + +} \ No newline at end of file diff --git a/src/test/java/org/jointheleague/features/examples/second_features/HighLowGameTest.java b/src/test/java/org/jointheleague/features/examples/second_features/HighLowGameTest.java index 3874bcad..acced40e 100644 --- a/src/test/java/org/jointheleague/features/examples/second_features/HighLowGameTest.java +++ b/src/test/java/org/jointheleague/features/examples/second_features/HighLowGameTest.java @@ -3,9 +3,9 @@ import org.javacord.api.entity.channel.TextChannel; import org.javacord.api.event.message.MessageCreateEvent; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; +import org.junit.Test; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static org.junit.Assert.assertEquals; @@ -82,7 +82,7 @@ void itShouldNotHandleMessagesWithoutCommand() { highLowGame.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + //verify(textChannel, never()).sendMessage(); } @Test @@ -121,7 +121,7 @@ void itShouldNotAcceptGuessIfGameIsNotStarted() { highLowGame.handle(messageCreateEvent); //Then - verify(textChannel, times(1)).sendMessage("Please start the game first using just the command"); + verify(textChannel, times(1)).sendMessage(anyString()); } diff --git a/src/test/java/org/jointheleague/features/examples/third_features/CatFactsApiTest.java b/src/test/java/org/jointheleague/features/examples/third_features/CatFactsApiTest.java index 6590d6b8..02b751c7 100644 --- a/src/test/java/org/jointheleague/features/examples/third_features/CatFactsApiTest.java +++ b/src/test/java/org/jointheleague/features/examples/third_features/CatFactsApiTest.java @@ -150,7 +150,7 @@ void givenMessageWithoutCommand_whenHandle_thenDoNothing() { catFactsApi.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + //verify(textChannel, never()).sendMessage(); } } \ No newline at end of file diff --git a/src/test/java/org/jointheleague/features/examples/third_features/NewsApiTest.java b/src/test/java/org/jointheleague/features/examples/third_features/NewsApiTest.java index 44f9c744..87e74846 100644 --- a/src/test/java/org/jointheleague/features/examples/third_features/NewsApiTest.java +++ b/src/test/java/org/jointheleague/features/examples/third_features/NewsApiTest.java @@ -178,7 +178,7 @@ void givenMessageWithoutCommand_whenHandle_thenDoNothing() { newsApi.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + //verify(textChannel, never()).sendMessage(); } } \ No newline at end of file diff --git a/src/test/java/org/jointheleague/features/examples/third_features/questions.txt b/src/test/java/org/jointheleague/features/examples/third_features/questions.txt new file mode 100644 index 00000000..b7d1d3f5 --- /dev/null +++ b/src/test/java/org/jointheleague/features/examples/third_features/questions.txt @@ -0,0 +1 @@ +In what year was the United Nations founded?/1945 \ No newline at end of file diff --git a/src/test/java/org/jointheleague/features/templates/FeatureTemplateTest.java b/src/test/java/org/jointheleague/features/templates/FeatureTemplateTest.java index f40ad152..64ff9ccb 100644 --- a/src/test/java/org/jointheleague/features/templates/FeatureTemplateTest.java +++ b/src/test/java/org/jointheleague/features/templates/FeatureTemplateTest.java @@ -59,12 +59,12 @@ void itShouldHaveACommand() { //Then if(!(featureTemplate instanceof FeatureTemplate)){ - assertNotEquals("!command", command); + assertNotEquals("q!command", command); } assertNotEquals("", command); - assertNotEquals("!", command); - assertEquals('!', command.charAt(0)); + assertNotEquals("q!", command); + assertEquals('q', command.charAt(0)); assertNotNull(command); } @@ -92,7 +92,7 @@ void itShouldNotHandleMessagesWithoutCommand() { featureTemplate.handle(messageCreateEvent); //Then - verify(textChannel, never()).sendMessage(""); + //verify(textChannel, never()).sendMessage(); } @Test From d4bedf8a009f92147a5e400c3209e7b15898c4a7 Mon Sep 17 00:00:00 2001 From: J1a4b4 <46267154+J1a4b4@users.noreply.github.com> Date: Sun, 9 Jun 2024 15:24:13 -0700 Subject: [PATCH 3/4] Added QuizGame Disconnect between Github and IntelliJ caused file to not be added --- .DS_Store | Bin 6148 -> 6148 bytes src/.DS_Store | Bin 6148 -> 6148 bytes src/main/.DS_Store | Bin 0 -> 6148 bytes src/main/java/.DS_Store | Bin 0 -> 6148 bytes src/main/java/org/.DS_Store | Bin 0 -> 6148 bytes src/main/java/org/jointheleague/.DS_Store | Bin 0 -> 6148 bytes .../java/org/jointheleague/features/.DS_Store | Bin 0 -> 6148 bytes .../jointheleague/features/examples/.DS_Store | Bin 0 -> 6148 bytes .../examples/third_features/QuizGame.java | 109 ++++++++++++++++++ src/test/.DS_Store | Bin 6148 -> 6148 bytes src/test/java/.DS_Store | Bin 6148 -> 6148 bytes src/test/java/org/.DS_Store | Bin 6148 -> 6148 bytes src/test/java/org/jointheleague/.DS_Store | Bin 6148 -> 6148 bytes .../java/org/jointheleague/features/.DS_Store | Bin 6148 -> 6148 bytes .../jointheleague/features/examples/.DS_Store | Bin 6148 -> 6148 bytes 15 files changed, 109 insertions(+) create mode 100644 src/main/.DS_Store create mode 100644 src/main/java/.DS_Store create mode 100644 src/main/java/org/.DS_Store create mode 100644 src/main/java/org/jointheleague/.DS_Store create mode 100644 src/main/java/org/jointheleague/features/.DS_Store create mode 100644 src/main/java/org/jointheleague/features/examples/.DS_Store create mode 100644 src/main/java/org/jointheleague/features/examples/third_features/QuizGame.java diff --git a/.DS_Store b/.DS_Store index de7f88ee4b828d60025925cbe2a0fb72a943af65..5f458a75ca49aaeb648ba7fc8f4c07e197048bfe 100644 GIT binary patch delta 303 zcmZoMXfc@J&nU1lU^g?Pz+@hlpvlu%1SjXSXfSq9p24Ec_!CIV)aRrd1}Ep|7BGOp z3vD39#*ofX#E{64!jQv|nw#(9l9ZF51Qh3pYkI1spnt>>Q%wp%H3b<+_Ar7iV+YzZ z`8tc_WHna7$&9S3lOuq%Ijhp-R#t(@nXJ-GjIxv4SZyc2WEG!$iL^rO8X4#)m>8SY)^c))D(hPZ#b@W_=H+*TEn;AVSjfP@ T3*p1bp25R+R49RdOQ zlX?X-lXwLYlfMNbldlC3lko)`0sya*4hB7w4F(XCTLu=BO9mGVVs~?JVr*|>0002E rlavN=3mAKQGC4IYAT%&ClMx3S0g96?2Oj~8lT8P@k${P_2MGNS{lF-? diff --git a/src/.DS_Store b/src/.DS_Store index c77d6d518b330933d98b8800150ba4cbb10861a3..6630562213210c184b1deb6fbcf2d7df67521559 100644 GIT binary patch delta 153 zcmZoMXfc=|#>B!ku~2NHo+2ar#(>?7izhHMF|tqQVbT@OWk_VmWXMY@FD^*R$xmWn zVAwgigsG56vbx&P)XYRj!Pv-P@&_hq#_q{H%<_^wKm{xeP)%jQMR_^-dFeng#>pm3 yTR6-NbQBCt%ndhxVA5mS%+A5j0kn8?BlCCW$^0UY9E=PMOhB~^nB)qu~2NHo+2ab#(>?7jI5J+Sac^Vv99MZvNY9EFflONe3Mm=X=B4n irp@de{2V~_n*}+(Gf(ChapYhC0!9V~mdz0&YnTB#GZOm% diff --git a/src/main/.DS_Store b/src/main/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4120e2af1d14629851225b62ffb58c6d92cd25c3 GIT binary patch literal 6148 zcmeHK%SyvQ6rHirrW7Fy1>Fs}E!dX@aT8+w0VBFlsR=0>jhWJ5*%z?~l-IVvjz-77;ICK-|A7~w1%g^3KoelxMZ z4*2aBdt?Edvf%6YhodCU@@Dg$Z&a+!t*TwM>-MexAZLCaUA5U({3&rVt(9i zHbl46TP$k!?!n>7`QRyePUVYclmp>Pwhfl>3d-k#rv5lhWO@(2GQZ3tBnF59Vt^P} zTL#RLVAt1{0a`dQKn(oE0PYV08lr2k(5SW!=#xGn|M zrQAF*xGo33FnO-QLZdEcT+IyQn3>DR3sbTkFSGKI zzg$8VF+dFbGX}WT_xm0!%ABp=mWOApfOZEB1@j72KtNx*1b~72$es%7xIi89T!V#1 U90mQV9FQ&oiV*6EfnQ+Y1F>XEbN~PV literal 0 HcmV?d00001 diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0416f554c17bb6e217e8041041a918fd63f9caa9 GIT binary patch literal 6148 zcmeHK%SyvQ6rE|SO({Ya3c4F`Td*$+;wIGk14eYAQWH{YFlI`UnnfvOuRr9E_&we` zGXaZPi`aW%=G^B@=0N7b7~|t*&|}PIj9JhSIVu%`?#fWjBqMShBVG8B^uhY@7bf=C z0l&S@Bum)b&%b|v6sB3X`^jtd#?EfjYFcgU!F`gsn|awX9ec?gTGvuWeyMx@O*qS^ z_Wp&8GcSy1i7E(#8Km6bhH)VCv0TPMs%l*wuv%7YY9Fmuz0=XKBL@BMx+7L+{ccAL z2cz}6WgQ%!oL^0!qnB8|X+Am7tz^$&3Gbko<-EE{9LabNo-(`4A|wWg0b+m{*lGsM zv0$~gngv=sF+dDdF@XDnfQIN8EHtXE13J7uW4wWg0y@4W5QRaQZi= z7+jZwUzj|{V4+c$Gp=Taam>u+bO81@*IPOMjQqG RsvM9m0*Vmoh=E^V;0uBnNw)w1 literal 0 HcmV?d00001 diff --git a/src/main/java/org/.DS_Store b/src/main/java/org/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4d6ab0285665acff3fd134756ae1489f5ca71f93 GIT binary patch literal 6148 zcmeHK!Ab)$5S`SjTcpr~g5CmN3)Z$4#LH6k2VBvEO5J6bc6Hs9c54r%uy_3-f5h)` zCdrCY_25CI%)sPLCNl|nyJQjo5Zy_*4^RUD2bHi?!R8C0anc1TSr4Jmb7U}p2oh9( zA(|ckkpcR4Rk#BMF{JSE`}JW0Q7|13gG2=w^%4w|c$_sFucEY4UR_&v)}0OK#v7=q zm-*Rb-1SFS)H_!y2@2Z}F5+m~t8E^uH1p#$8tH^Mj4D6{-v;BikyDnSJ#=I_Phs{P^wp*R~yy9%_?j4==?vsa9JsDmF{(@Sn77KVrSg41bXU+&jT;VAp(>u}}LK#3}&aYw#FHY34X@yi~5Ntye`=)Wwx|r*bdzvq{?b z#}_y{RVohVeLpyhM)|O@d8CrekCM??Cq&^0LN3pvBvg4{O_DIxxt?)|ny3vMJJV@v zzt?TbPTQF^<@BKKG-bEbo6TxsYj^MPWOyGxBGP-vSD!!FVI<9*poL-VwK#2 zZ=N@gCnN@l0b*c<7_dj6sISnPX{p2jG4L}6@O+SC8|PXq44QPt^~~@cJ2SU06s~6nyVT)~y9TKx28e-0 z2FhmG!1{mu{ri70iAKZ#G4QV#;FW;XA4T^$sg~5*$=;%@mu~>?? bLA8KgVh7N*SQrEg2wem;4b%_=zskTnBLq!g literal 0 HcmV?d00001 diff --git a/src/main/java/org/jointheleague/features/.DS_Store b/src/main/java/org/jointheleague/features/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4fee45cb35b16e201b9c6f40ed1b140fd7a2c719 GIT binary patch literal 6148 zcmeHK-AcnS6i&A3QiiY#1-%P+J8(ZLh&QFq7qFriDzjxni(NC;%?e}Cdwn5a#OLvx zBo)ULyb^Kez{!`KpN4!XISFHod((c4u{vW+fFhP0Xuc5iqb^CwS`fMZ#)!piz|t^F zM@!LU_=^nS-U-;VCl;_F`?P;ytU~a;hNC!2C(Y&?FO@56>s3(|HF4wLtIVGSlWFP& z<0~AUD;0-DKL{_PLDs8po~UFJM9E;R6QceALar~Pq^~khO_P4AbA96wj&OSQo!P8) zaM)?cPP;j8$k|c5*^v94!};71Tf2M5XT67bn5bvNCWjwS%Z9}QUZAtIut$HK#45Q1 zUy)bD6A}Z&05Pya4A>)3)K+NCv{Yh%82A|jcs@u_MAu?&P#+!8;Pnyx6+{&1<68nz zT68Vu2EhZuO)8*C<@SleO*+`6jdLyL22DESdS>{JotfJg3fHrPUFvYgU4zsT1H`~0 z17$O;WBot<{{6q0L?dE=82DEV@JiS3daxv0TbCAxwN`@Of}&ttZtx=oI=U1?ESBPJ bP%U7W*a37c<_5t6LKgu|12x3JuQKos3KvaO literal 0 HcmV?d00001 diff --git a/src/main/java/org/jointheleague/features/examples/.DS_Store b/src/main/java/org/jointheleague/features/examples/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f0900f9198fff5011bbec694447f8b81f6cdcd4e GIT binary patch literal 6148 zcmeHKQA@)x5WZ|vJBG3c1$_(nI&gD35MRpFKVU^4RAx)77Hc!s&OMAl-}MjqNBlkB zC7C#;z6c`Y4ldv2a+i=VCD#Ce=nlgcKpg-aRKijfn=gdMN#~?wJ%mEf5ke1cAp#%r zxoCF$M+WHZ*6_6MA%+2bKEEOMBgleL)(;XDVBBlaPvR_ZHs3_4Tv=LPaaNp~bM4)$ zk(c}VFzfn*OX{5|l>}4U56LN}?rn1SChK=*@0C3Gzo2KCi}4gEgS zc!iJzZF)-(N{g<=!XS>I2$PCvQiXkD2$PO}Y2#drg+Y@JLa&VT*p-ESp$NS?`lSvB z;Tq(Y8DIux87P}>o$CL|_wWDNB questions; + Random random; + + private static int score; + private static int r; + + private static int numqtn = 10; + + public QuizGame(String channelName) { + super(channelName); + + progress = -1; + //Create a help embed to describe feature when !help command is sent + question = "Error: Question not found"; + score = 0; + r = -1; + random = new Random(); + helpEmbed = new HelpEmbed( + COMMAND, + "A 10-question quiz game, in which the bot pulls randomized questions from an attached file to ask the user, whose responses take the form 'q!answer [answer]'. " + + "Spelling matters, but capitalization does not." + ); + } + + private void startGame(MessageCreateEvent event) { + progress = 1; + score = 0; + questions = new ArrayList(); + try { + br = new BufferedReader(new FileReader("src/main/java/org/jointheleague/features/examples/third_features/questions.txt")); + String line = br.readLine(); + while(line != null){ + questions.add(line); + line = br.readLine(); + } + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + event.getChannel().sendMessage("A game has been started"); + event.getChannel().sendMessage(getQuestion(event)); + } + + private void endGame(MessageCreateEvent event) { + event.getChannel().sendMessage("You answered " + score + " out of " + numqtn + " questions correctly."); + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + progress = 0; + r = -1; + } + + private String getQuestion(MessageCreateEvent event) { + int r = random.nextInt(questions.size()); + question = questions.get(r); + questions.remove(r); + answer = question.substring(question.indexOf('/')+1); + question = question.substring(0, question.indexOf('/')); + return question; + } + + @Override + public void handle(MessageCreateEvent event) { + String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); + //event.getChannel().sendMessage("Question command received"); just spammed the channel + if (messageContent.startsWith(COMMAND)) { + startGame(event); + } else if (messageContent.startsWith("q!answer")) { + if (progress>0 && progress<=numqtn) { + messageContent = messageContent.substring(messageContent.indexOf(' ') + 1); + if (messageContent.equals(answer.toLowerCase(Locale.ROOT))) { + score++; + event.getChannel().sendMessage("Correct!"); + } else { + event.getChannel().sendMessage("Incorrect! The correct answer was: " + answer); + } + progress++; + event.getChannel().sendMessage(getQuestion(event)); + } + } + if (progress > numqtn) { + endGame(event); + } + } + +} diff --git a/src/test/.DS_Store b/src/test/.DS_Store index 946c5b8581e3732db2fe3f5d4768b8db511baec3..364fa2b213204daaae896e54cdfc51d34ee0567d 100644 GIT binary patch delta 133 zcmZoMXfc@J&&aYdU^gQp%VZv=EgWVBItqp+=7y6`Foj1eFcdPBGNdvTGn6o7GUPMl z0aB)qu~2NHo+2ab#(>?7jI5J+SdMU*8R#e&nwT3-zQMAUyPJW5LGM2p pY!>7YW0}|xxtX1Vp982B$p6kfnP0?_1E_|9k%56_bA-qmW&qPz8G8T# delta 134 zcmZoMXfc=|#>B!ku~2NHo+2ar#(>?7i#IScF|tqQVLHNLWNE6SU}9i2`3BQgM%l?R z%u163m>Q6U?d3TcN*GcZav2I3au^c9?BcTEqP(2^ymSTz2F8trg^ZioIruq%wrpO= Y{GE9+zlb9TBLf2yP?lkHgvc6Z05gao2><{9 diff --git a/src/test/java/org/jointheleague/features/examples/.DS_Store b/src/test/java/org/jointheleague/features/examples/.DS_Store index 84e3d213980513565f6ced313c6a352bc73d993c..2546be86d7fe0b9b0103d0629bcdada0481b3dfd 100644 GIT binary patch delta 40 wcmZoMXffDO!8Cablip+X`+VxA=e00SZm?f?J) delta 36 scmZoMXffDO!NkO{esUF)_2fz>-N}!b8aRwBO?4DZ42(8sG0zeK0NEo87ytkO From 4a768ee9c397d7fe4808ee1f83d8ae266b2a17ce Mon Sep 17 00:00:00 2001 From: J1a4b4 <46267154+J1a4b4@users.noreply.github.com> Date: Sun, 16 Jun 2024 16:18:01 -0700 Subject: [PATCH 4/4] removed Javacord references --- build.gradle | 22 +- ...xamples.second_features.EncrypterTest.html | 136 --------- build/reports/tests/test/css/base-style.css | 179 ------------ build/reports/tests/test/css/style.css | 84 ------ build/reports/tests/test/index.html | 133 --------- build/reports/tests/test/js/report.js | 194 ------------- ...gue.features.examples.second_features.html | 103 ------- build/test-results/test/binary/output.bin | 0 build/test-results/test/binary/output.bin.idx | Bin 1 -> 0 bytes build/test-results/test/binary/results.bin | Bin 890 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 40838 -> 0 bytes .../previous-compilation-data.bin | Bin 43619 -> 0 bytes gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 5 +- gradlew | 257 +++++++++++------- src/.DS_Store | Bin 6148 -> 0 bytes src/main/.DS_Store | Bin 6148 -> 0 bytes src/main/java/.DS_Store | Bin 6148 -> 0 bytes src/main/java/org/.DS_Store | Bin 6148 -> 0 bytes src/main/java/org/jointheleague/.DS_Store | Bin 6148 -> 0 bytes src/main/java/org/jointheleague/Launcher.java | 5 +- .../api_wrapper/ReceivedMessage.java | 27 ++ .../jointheleague/discord_bot/DiscordBot.java | 40 +-- .../java/org/jointheleague/features/.DS_Store | Bin 6148 -> 0 bytes .../features/abstract_classes/Feature.java | 25 +- .../jointheleague/features/examples/.DS_Store | Bin 6148 -> 0 bytes .../examples/first_features/CurrentTime.java | 11 +- .../examples/first_features/RandomNumber.java | 11 +- .../examples/first_features/WebSearch.java | 32 --- .../examples/second_features/Encrypter.java | 65 ----- .../examples/second_features/HighLowGame.java | 21 +- .../examples/third_features/CatFactsApi.java | 12 +- .../examples/third_features/Game.java | 108 -------- .../examples/third_features/MemoryGame.java | 38 --- .../examples/third_features/NewsApi.java | 14 +- .../examples/third_features/QuizGame.java | 22 +- .../features/help_embed/HelpListener.java | 6 +- .../help_embed/HelpEmbed.java | 15 +- .../student/first_feature/FeatureOne.java | 48 ++++ .../features/templates/FeatureTemplate.java | 12 +- src/test/.DS_Store | Bin 6148 -> 0 bytes src/test/java/.DS_Store | Bin 6148 -> 0 bytes src/test/java/org/.DS_Store | Bin 6148 -> 0 bytes src/test/java/org/jointheleague/.DS_Store | Bin 6148 -> 0 bytes .../java/org/jointheleague/features/.DS_Store | Bin 6148 -> 0 bytes .../jointheleague/features/examples/.DS_Store | Bin 6148 -> 0 bytes .../first_features/CurrentTimeTest.java | 13 +- .../first_features/RandomNumberTest.java | 13 +- .../second_features/EncrypterTest.java | 151 ---------- .../second_features/HighLowGameTest.java | 30 +- .../third_features/CatFactsApiTest.java | 13 +- .../examples/third_features/NewsApiTest.java | 16 +- .../examples/third_features/questions.txt | 1 - .../first_feature/FeatureOneTest.java} | 53 ++-- .../templates/FeatureTemplateTest.java | 27 +- 55 files changed, 398 insertions(+), 1544 deletions(-) delete mode 100644 build/reports/tests/test/classes/org.jointheleague.features.examples.second_features.EncrypterTest.html delete mode 100644 build/reports/tests/test/css/base-style.css delete mode 100644 build/reports/tests/test/css/style.css delete mode 100644 build/reports/tests/test/index.html delete mode 100644 build/reports/tests/test/js/report.js delete mode 100644 build/reports/tests/test/packages/org.jointheleague.features.examples.second_features.html delete mode 100644 build/test-results/test/binary/output.bin delete mode 100644 build/test-results/test/binary/output.bin.idx delete mode 100644 build/test-results/test/binary/results.bin delete mode 100644 build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 build/tmp/compileTestJava/previous-compilation-data.bin delete mode 100644 src/.DS_Store delete mode 100644 src/main/.DS_Store delete mode 100644 src/main/java/.DS_Store delete mode 100644 src/main/java/org/.DS_Store delete mode 100644 src/main/java/org/jointheleague/.DS_Store create mode 100644 src/main/java/org/jointheleague/api_wrapper/ReceivedMessage.java delete mode 100644 src/main/java/org/jointheleague/features/.DS_Store delete mode 100644 src/main/java/org/jointheleague/features/examples/.DS_Store delete mode 100644 src/main/java/org/jointheleague/features/examples/first_features/WebSearch.java delete mode 100644 src/main/java/org/jointheleague/features/examples/second_features/Encrypter.java delete mode 100644 src/main/java/org/jointheleague/features/examples/third_features/Game.java delete mode 100644 src/main/java/org/jointheleague/features/examples/third_features/MemoryGame.java create mode 100644 src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java delete mode 100644 src/test/.DS_Store delete mode 100644 src/test/java/.DS_Store delete mode 100644 src/test/java/org/.DS_Store delete mode 100644 src/test/java/org/jointheleague/.DS_Store delete mode 100644 src/test/java/org/jointheleague/features/.DS_Store delete mode 100644 src/test/java/org/jointheleague/features/examples/.DS_Store delete mode 100644 src/test/java/org/jointheleague/features/examples/second_features/EncrypterTest.java delete mode 100644 src/test/java/org/jointheleague/features/examples/third_features/questions.txt rename src/test/java/org/jointheleague/features/{examples/first_features/WebSearchTest.java => student/first_feature/FeatureOneTest.java} (57%) diff --git a/build.gradle b/build.gradle index 291bc6ba..cf380b09 100644 --- a/build.gradle +++ b/build.gradle @@ -10,25 +10,25 @@ repositories { } } +ext { + jupiterVersion = '5.7.0' +} + dependencies { - implementation 'org.javacord:javacord:3.8.0' + implementation 'net.dv8tion:JDA:5.0.0-beta.24' + implementation 'ch.qos.logback:logback-classic:1.5.6' implementation 'net.aksingh:owm-japis:2.5.3.0' - implementation 'com.googlecode.json-simple:json-simple:1.1.1' - implementation 'javax.json:javax.json-api:1.1' - implementation 'org.mockito:mockito-core:3.4.0' + implementation 'com.google.code.gson:gson:2.8.5' + testImplementation 'org.mockito:mockito-core:3.4.0' implementation 'org.springframework.boot:spring-boot-starter-webflux:2.4.1' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.3' - implementation 'org.junit.jupiter:junit-jupiter:5.8.1' - implementation 'org.junit.jupiter:junit-jupiter:5.8.1' - testImplementation 'org.junit.jupiter:junit-jupiter:5.7.0' - testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.4.2' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.2' + testImplementation "org.junit.jupiter:junit-jupiter:${jupiterVersion}" + testImplementation "org.junit.jupiter:junit-jupiter-migrationsupport:${jupiterVersion}" } group = 'org.jointheleague' version = '2.0' description = 'discordbot' -sourceCompatibility = '1.11' +sourceCompatibility = '1.8' test { diff --git a/build/reports/tests/test/classes/org.jointheleague.features.examples.second_features.EncrypterTest.html b/build/reports/tests/test/classes/org.jointheleague.features.examples.second_features.EncrypterTest.html deleted file mode 100644 index 8eb57b07..00000000 --- a/build/reports/tests/test/classes/org.jointheleague.features.examples.second_features.EncrypterTest.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - -Test results - EncrypterTest - - - - - -
-

EncrypterTest

- -
- - - - - -
-
- - - - - - - -
-
-
9
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.967s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TestDurationResult
itShouldEncryptTheEntireMessage()0.004spassed
itShouldHandleMessagesWithCommand()0.008spassed
itShouldHaveACommand()0.006spassed
itShouldHaveAHelpEmbed()0.004spassed
itShouldHaveTheCommandAsTheTitleOfTheHelpEmbed()0.001spassed
itShouldNotHandleMessagesWithoutCommand()0.005spassed
itShouldSendErrorMessageIfNoInputIsGiven()0.002spassed
itShouldSendErrorMessageIfNoMessageIsGiven()0.002spassed
itShouldSendErrorMessageIfOnlyCommandIsGiven()0.935spassed
-
-
- -
- - diff --git a/build/reports/tests/test/css/base-style.css b/build/reports/tests/test/css/base-style.css deleted file mode 100644 index 4afa73e3..00000000 --- a/build/reports/tests/test/css/base-style.css +++ /dev/null @@ -1,179 +0,0 @@ - -body { - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 12pt; -} - -body, a, a:visited { - color: #303030; -} - -#content { - padding-left: 50px; - padding-right: 50px; - padding-top: 30px; - padding-bottom: 30px; -} - -#content h1 { - font-size: 160%; - margin-bottom: 10px; -} - -#footer { - margin-top: 100px; - font-size: 80%; - white-space: nowrap; -} - -#footer, #footer a { - color: #a0a0a0; -} - -#line-wrapping-toggle { - vertical-align: middle; -} - -#label-for-line-wrapping-toggle { - vertical-align: middle; -} - -ul { - margin-left: 0; -} - -h1, h2, h3 { - white-space: nowrap; -} - -h2 { - font-size: 120%; -} - -ul.tabLinks { - padding-left: 0; - padding-top: 10px; - padding-bottom: 10px; - overflow: auto; - min-width: 800px; - width: auto !important; - width: 800px; -} - -ul.tabLinks li { - float: left; - height: 100%; - list-style: none; - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; - padding-bottom: 5px; - margin-bottom: 0; - -moz-border-radius: 7px; - border-radius: 7px; - margin-right: 25px; - border: solid 1px #d4d4d4; - background-color: #f0f0f0; -} - -ul.tabLinks li:hover { - background-color: #fafafa; -} - -ul.tabLinks li.selected { - background-color: #c5f0f5; - border-color: #c5f0f5; -} - -ul.tabLinks a { - font-size: 120%; - display: block; - outline: none; - text-decoration: none; - margin: 0; - padding: 0; -} - -ul.tabLinks li h2 { - margin: 0; - padding: 0; -} - -div.tab { -} - -div.selected { - display: block; -} - -div.deselected { - display: none; -} - -div.tab table { - min-width: 350px; - width: auto !important; - width: 350px; - border-collapse: collapse; -} - -div.tab th, div.tab table { - border-bottom: solid #d0d0d0 1px; -} - -div.tab th { - text-align: left; - white-space: nowrap; - padding-left: 6em; -} - -div.tab th:first-child { - padding-left: 0; -} - -div.tab td { - white-space: nowrap; - padding-left: 6em; - padding-top: 5px; - padding-bottom: 5px; -} - -div.tab td:first-child { - padding-left: 0; -} - -div.tab td.numeric, div.tab th.numeric { - text-align: right; -} - -span.code { - display: inline-block; - margin-top: 0em; - margin-bottom: 1em; -} - -span.code pre { - font-size: 11pt; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 10px; - margin: 0; - background-color: #f7f7f7; - border: solid 1px #d0d0d0; - min-width: 700px; - width: auto !important; - width: 700px; -} - -span.wrapped pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: break-all; -} - -label.hidden { - display: none; -} \ No newline at end of file diff --git a/build/reports/tests/test/css/style.css b/build/reports/tests/test/css/style.css deleted file mode 100644 index 3dc4913e..00000000 --- a/build/reports/tests/test/css/style.css +++ /dev/null @@ -1,84 +0,0 @@ - -#summary { - margin-top: 30px; - margin-bottom: 40px; -} - -#summary table { - border-collapse: collapse; -} - -#summary td { - vertical-align: top; -} - -.breadcrumbs, .breadcrumbs a { - color: #606060; -} - -.infoBox { - width: 110px; - padding-top: 15px; - padding-bottom: 15px; - text-align: center; -} - -.infoBox p { - margin: 0; -} - -.counter, .percent { - font-size: 120%; - font-weight: bold; - margin-bottom: 8px; -} - -#duration { - width: 125px; -} - -#successRate, .summaryGroup { - border: solid 2px #d0d0d0; - -moz-border-radius: 10px; - border-radius: 10px; -} - -#successRate { - width: 140px; - margin-left: 35px; -} - -#successRate .percent { - font-size: 180%; -} - -.success, .success a { - color: #008000; -} - -div.success, #successRate.success { - background-color: #bbd9bb; - border-color: #008000; -} - -.failures, .failures a { - color: #b60808; -} - -.skipped, .skipped a { - color: #c09853; -} - -div.failures, #successRate.failures { - background-color: #ecdada; - border-color: #b60808; -} - -ul.linkList { - padding-left: 0; -} - -ul.linkList li { - list-style: none; - margin-bottom: 5px; -} diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html deleted file mode 100644 index 8601aa71..00000000 --- a/build/reports/tests/test/index.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - -Test results - Test Summary - - - - - -
-

Test Summary

-
- - - - - -
-
- - - - - - - -
-
-
9
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.967s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Packages

- - - - - - - - - - - - - - - - - - - - - -
PackageTestsFailuresIgnoredDurationSuccess rate
-org.jointheleague.features.examples.second_features -9000.967s100%
-
-
-

Classes

- - - - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-org.jointheleague.features.examples.second_features.EncrypterTest -9000.967s100%
-
-
- -
- - diff --git a/build/reports/tests/test/js/report.js b/build/reports/tests/test/js/report.js deleted file mode 100644 index 83bab4a1..00000000 --- a/build/reports/tests/test/js/report.js +++ /dev/null @@ -1,194 +0,0 @@ -(function (window, document) { - "use strict"; - - var tabs = {}; - - function changeElementClass(element, classValue) { - if (element.getAttribute("className")) { - element.setAttribute("className", classValue); - } else { - element.setAttribute("class", classValue); - } - } - - function getClassAttribute(element) { - if (element.getAttribute("className")) { - return element.getAttribute("className"); - } else { - return element.getAttribute("class"); - } - } - - function addClass(element, classValue) { - changeElementClass(element, getClassAttribute(element) + " " + classValue); - } - - function removeClass(element, classValue) { - changeElementClass(element, getClassAttribute(element).replace(classValue, "")); - } - - function initTabs() { - var container = document.getElementById("tabs"); - - tabs.tabs = findTabs(container); - tabs.titles = findTitles(tabs.tabs); - tabs.headers = findHeaders(container); - tabs.select = select; - tabs.deselectAll = deselectAll; - tabs.select(0); - - return true; - } - - function getCheckBox() { - return document.getElementById("line-wrapping-toggle"); - } - - function getLabelForCheckBox() { - return document.getElementById("label-for-line-wrapping-toggle"); - } - - function findCodeBlocks() { - var spans = document.getElementById("tabs").getElementsByTagName("span"); - var codeBlocks = []; - for (var i = 0; i < spans.length; ++i) { - if (spans[i].className.indexOf("code") >= 0) { - codeBlocks.push(spans[i]); - } - } - return codeBlocks; - } - - function forAllCodeBlocks(operation) { - var codeBlocks = findCodeBlocks(); - - for (var i = 0; i < codeBlocks.length; ++i) { - operation(codeBlocks[i], "wrapped"); - } - } - - function toggleLineWrapping() { - var checkBox = getCheckBox(); - - if (checkBox.checked) { - forAllCodeBlocks(addClass); - } else { - forAllCodeBlocks(removeClass); - } - } - - function initControls() { - if (findCodeBlocks().length > 0) { - var checkBox = getCheckBox(); - var label = getLabelForCheckBox(); - - checkBox.onclick = toggleLineWrapping; - checkBox.checked = false; - - removeClass(label, "hidden"); - } - } - - function switchTab() { - var id = this.id.substr(1); - - for (var i = 0; i < tabs.tabs.length; i++) { - if (tabs.tabs[i].id === id) { - tabs.select(i); - break; - } - } - - return false; - } - - function select(i) { - this.deselectAll(); - - changeElementClass(this.tabs[i], "tab selected"); - changeElementClass(this.headers[i], "selected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var h2 = document.createElement("H2"); - - h2.appendChild(document.createTextNode(this.titles[i])); - this.headers[i].appendChild(h2); - } - - function deselectAll() { - for (var i = 0; i < this.tabs.length; i++) { - changeElementClass(this.tabs[i], "tab deselected"); - changeElementClass(this.headers[i], "deselected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var a = document.createElement("A"); - - a.setAttribute("id", "ltab" + i); - a.setAttribute("href", "#tab" + i); - a.onclick = switchTab; - a.appendChild(document.createTextNode(this.titles[i])); - - this.headers[i].appendChild(a); - } - } - - function findTabs(container) { - return findChildElements(container, "DIV", "tab"); - } - - function findHeaders(container) { - var owner = findChildElements(container, "UL", "tabLinks"); - return findChildElements(owner[0], "LI", null); - } - - function findTitles(tabs) { - var titles = []; - - for (var i = 0; i < tabs.length; i++) { - var tab = tabs[i]; - var header = findChildElements(tab, "H2", null)[0]; - - header.parentNode.removeChild(header); - - if (header.innerText) { - titles.push(header.innerText); - } else { - titles.push(header.textContent); - } - } - - return titles; - } - - function findChildElements(container, name, targetClass) { - var elements = []; - var children = container.childNodes; - - for (var i = 0; i < children.length; i++) { - var child = children.item(i); - - if (child.nodeType === 1 && child.nodeName === name) { - if (targetClass && child.className.indexOf(targetClass) < 0) { - continue; - } - - elements.push(child); - } - } - - return elements; - } - - // Entry point. - - window.onload = function() { - initTabs(); - initControls(); - }; -} (window, window.document)); \ No newline at end of file diff --git a/build/reports/tests/test/packages/org.jointheleague.features.examples.second_features.html b/build/reports/tests/test/packages/org.jointheleague.features.examples.second_features.html deleted file mode 100644 index 4f7d1902..00000000 --- a/build/reports/tests/test/packages/org.jointheleague.features.examples.second_features.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Test results - Package org.jointheleague.features.examples.second_features - - - - - -
-

Package org.jointheleague.features.examples.second_features

- -
- - - - - -
-
- - - - - - - -
-
-
9
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.967s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Classes

- - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-EncrypterTest -9000.967s100%
-
-
- -
- - diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin deleted file mode 100644 index e69de29b..00000000 diff --git a/build/test-results/test/binary/output.bin.idx b/build/test-results/test/binary/output.bin.idx deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin deleted file mode 100644 index 607dadeb4d0c2a308a6b8f1cdbdd210a324543cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 890 zcmb7Cy-ve05WckOA5W4jeTND~Bm>RRN{lEpmmlQVk?mCU3D{T>D?&n|po)d56KqUK zjBGpwBSF}K0u{}6w!fdd@7y#R_Xgu}|B$6rCP*-d3+zW2$bzHj<57_1q$~tZ7!CKU z2Zv7hESJc~DCEh?3BWjh^RLaGu}I}8VFd|CNJEEn#&=POAVx3pDVc4vEDLDpiJf$c z)Us>B;j;5-wU|TmR9m^h6bDM#ve#TgTQTpzJX>M9NOC7Tz|gYSK7gs%OK4qb_K-=p z9EPA8QS7C%oLyF}Y>tGM(tm*Vjn@Ai;gIPxb%3?N&`>Uq&^gyGYLVjv9V%0zJL diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index 0cbbefd30c07d1c2b4ac20fb9642a0ffb0ac6cf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40838 zcmY&=cR&-}(sy>#%f_`g?7gkMw_y6EOE(DVi+-;7(t9A7^5g& z(qkqzcGgnGXi9+ckj&ovz<(CxjiGqiN*xpjOzdRXScmJNc^GSCL z`|dn;=(tVei4m9v#nr?{id#gr56z~=C({D{@?wBQ-Ef_k7;$kP8OY!(i{|x;1T+I=)$3Fj3;Zts?`Kt8DJni|! z0^ltr(8N@sw1?Rbm|2@B6jBAYkmB)|tN638GnVIuzvTULe(xE@H5jr;uvmMEaQyV8 z6gQHbIXKc=ew(%JzBu}udj(w-5wc8kxz-9|CBa-p@imtz%;dl^Q@IjbP4W2qX${3i zuEZzsLo-{(g*ug8|8~qVBqedJcpbsS)>Ax9RJLY^U{lA&Jio{$BBLsA?qiqvynMbv zyiw;Lf{yV86i=B#DYb<$YX@Jvd!Jp-U3}c}cE`?hMVgz0dgHYy?ou1My`u)c@OPDA z!LNlMW*VB&motZ0+Ac$1C}p-YV1OgX2Jn#pbdCrxY%#Z_i`NDS0DXyCKf4O?Zj z`W{tkMfwfnpvkx@R%-+#X3BUF#jhxd+FM0IA z?8srWpIe^nH#(qwkT4+_rW9|b6jatkNlMa;;`#3f+}F(Zp7XLHa@+6GS55zHSYs}b z>W{a8!{7jN^x1jf#W$VG6|}pv-Ta5hQ>JY|D9AF3rRb1Qre{SQCaeh?!j@pkDPH7x zBIRlaN^K`Q0=qg2+qb89+DH`&6H6(k0QFHnDJkyuz$dAS;zkZZD7+1tB0Zy>d&liJ zpSOrYK{)^YxCq@akAlOR6DUUo4qC?u8*KF)H3^Qw<2z0eCy7(UY2plV79m(p2#C+l zUS?})VGqa3L2iH88KJm3NKIW3iWjVCrj#9(y27&sXp>SVw{=4(9%j}upaI+Nj!@jy zj|c@dUqtahG(8cK7eaU=gbzaaB7}_}jE12yrK7z+3|3ndY)AlntCCrpOYMOy3S}nz zG^fl%kY(KeZE6wa93l=xgh7a2FhYbNL?}!b283AutF!i)LMebZ=TX8D&7%PbyiTE< zM}BMpfXYlnl!Xx4 z2$6#jR}mr?)-#jaT!Zy2<#J1FX&$^~sgT>|BNSgCNv<>@1*O2Q!)nLuzX z{yl>)j+sgA$ekjf1C-~8?hAydBZc!4mIBX4s%Sm1K>ef^=qtpy0U=(KV;V_LD`107 zuonEU{{3F{&o_wV9!Vm}dUN$Rl(Uro^Y6bOvKY;XZVRHIo|>M$z@6V4^(0A zVF|gpiS-AB;`6_+alb?11*%2s_-)D~{%>0YTRtM1pAg;8i0}(JlcJ5>sST(tkpBT` z2kJ}|Qhevv7Q08I|5-lUX83^~-#^nk5W`MH(1j3R5#k$c_pn@PEwk;0mHwvy*mn@q zf7PJ}=9Q8>0n+dt>`%&+xu*ji!%S!FJJ74yix58$;wJ(&p$|A_DmAfHbR+!;#m~;f z>@XOj1u|O;IX=-r{g`ln|HWp-&#N%OJ6=Y#T6B~p+a|5;DHjJFwHvz z^Fk@UDy1A=hnPVrRjP20l9%Y_`iom02DYENJ|^1V8x{GW`o5^p4;A{O+XGO^Ig|)Q zi6E2+hB+=GPG|^9aX%`TnMr|~P!!|=kBLYad<#d_QW}ne@GTrv_`Cw0E$5c*?dn?I zp6%e*w&FZGJpwh1M2(_QgJ_h9L4h+R2o{S{{7gtg2~s9?{{p=4XeW(BfwvY?a9w87 zc$DJ27#}{8p(&Z+J?EnJy{9`4twJxN!US}BBC4B&Y9^z^DJ%uvl$$%Iq7+XsQ1&n% zb_uv82Squi#Mx`JRui(JpDP@0%01>2+{>tO8Y)Zyqmd4S?99Ot*yE?J@A=r3ckwK7 z@gG;02YIL^&NM_@sYsP+FWEfM_>RWR-Io@??7D{BJL=H+^C3lqz zgjm@eyGDu%jD@{251wpIY~a-OBlxO4p_O5+7y1)+X{WyHu=$*iim#)B8>nFcYFvmC zMJQ2>f@O9>OMtoda%(A^r<>%~tfjY5ii^3q06*wuZhY_Y6zY2RMh%~!-+`wph}9Dj z6~1hfzeV!NuFb-yik77C`A>RKq8BB8pu|rUoKYWe!NLUMNc&?p*8Q*%E07>~qhCNI zD5?o5ncpy*mHFXS_!zDI8q+fqcw_8GpYGF{J9hxp8$`u_P{CR1CMPQJ7;~mlJgw!X zpb3tzP=O1T;$dQIVhQTrK1*@pVo%%KlP`ZbU&-D>cctpppe|J0>DW<>w(bt)*(cRA z_xdLRZd4<8s=$LP_M{5DsDw8ati2DF;$@;Tmnp5~mY6RUwg%6BRESV5{izgpwY|Q8 z;?y1VSv5L0{qm1ax<0AX+&F+roTCEk1A!)c6*zk}yXPm(G?fc1O5-{+hi*1tR0UCu zf~mqdIGixW;jD8bJECI>xyQz*?sbUp4xws=Qo++=VN{AY_%69ZeI^HQ$d@fS#fz@2 zd^VNYc+5MTDn3uukDv-8sfLB~zQYz)P7hp5iGPA=fT#VFo&P9#)rYd?KNl&@YiK80FQ}r%VjWf^$px@RE6jf@j zNTgC+A;Q3o*>hU7N=~I|H2WrO5QJtXQ4NwwR$(brioev}My61Jr%)4nPyE8wC{yEY z#w$bTjF{}gR4Q?aN?fLb^+O^kATqgFGQYD^qB&9I|{g5rw zT|*rbQhM$-l_;eWAJIE7$6r-|IX*A?*l3CA&2IhPeO?-}S$LO9lu?O$RHB^ZO$E?% zNU5}|gh|ch=2El!@P!qe40zMPzVg`Hvx@si&j*bW4fuLiQN<6af`?SeBdVa9N<1cy z!V{7hP*geg6ka4B#=?ofn|?1qk30ylFpkVTAUU@ktD#D2shgisiRV-Z1zv!7t&ZAY zb)eiwZC--jJCZp*Q71meufrkR5o^2LuJ61lnJ|HGu~1q@2JL+2pQJl zw)2m@KV_XcecI;Pbz|;dzWJUi`al(ar0RX53O`eYU#LcHR7pFP=%9j^?nKr0l=R01 z)K1u=TxAPxe%sMLjRkwxK6<>nd(V;LjLI%5@fEg4CAvwjey37=WVVoHt85^c>7o8> z@~!1+liv%c43Zax9hgQb@cGwIe^W%?d;iAwQ}&onF1q=HYMe~{30xs9pjx>i4S!RK0V*UOgE0DUA_OtrA5d9!QY5#%1+o|ne7`~5 zyU2}sa9!Mr6&tM1(nL-)fium}g=XkVBiv}j;Xx|ATSL4tqCaeD zqR?dT(Sy@n_U_#8NfUa}B;GW`IK+nrp4d`lZDLPy9#6Qwdx7iQW4c?0Gm}2-#2CIb z!jDGy(|{ELFw#P951!y0O>JvI%r@k%XV7+B&Hr3o+4Byq3^DcLYI9%h%z70OPk03Y4= zreO8Hk>kQ*5M%#@`>KmHNdiqXkd_FW0EZ#BumJTbT`DWpUfJ=>B_-w2tje!zlW3x3 znk0oLNTm^%XoU3>Dx8I}D*X4j2e}7KHoDc1D>C1_7o}dN3DanL=``XBjmV%8Hdl~L z*rM9vVTvrEf;2by!Q)1w`eySQw*~h3eq5H(W z#04~AAx#oXD}wbM!717#A_Cm%cKiX?VVCt7pN}u*EZ<*POe0EY#7!D;i)kW92X>SXOYGZh`xmUxR-QiOO2yjz{10t)Pi2X~O$7qbkq{ z6p~lc!}|(^8Y3Bl_Ag)UCIXI2zCWOeAJU8;(e$cm!eHbvO!n7#JONhP+R1DMILl&c z)EKG3ACJ{NDJRC2oP0{ttD))C(!lg#&wyKC_Y`>VUG0dwvAw6uY8IXusWZasIgNNh zBkE|7X}knhk}w>=OZA`u;6p5AWWcEk(+sy#6lW`Pzb`i)lQ!iQO|yZf_nM~NNYlNC zen6VwJ-Ic6Oe#A?0D=$KefHW&yL6JbB5l?ByGeV}Q5 zq-lPlX?~{ZeW4L;GzhOFX&9{Bj9bQ>S@CKNwo=W?&)(>8X}#9cJuSDNq}P0~#xzSF?WL#opQYz4gVP%n@vx3K~6 z3hb;~#)q#bF6wuTF?62uZJO;04+OWX_~K)p_;AI!-?H|k6UhsH04Hh0nLcU=vv3{EP7ftw^CLEwi25Dg3)#e;#-!O;vIiq1>@^|XX*M+Pz@DclcNiS-*ncAr>?Vr)ezrVl?sw!^{DxJ>ed60T1kgq2 z=#oIXo(K9K38F&?WNIS=kD>29?o+C&u1>2~uy(G*eO@qK6haq<(jl7+BPX?k2uXcp zdTA=0c6O}!)r{9wlUx~78r*i|htrAkbnxsEbO@3mj#0^gk9)o>kBnNfYeo3tc`eSB zPBoEqNfaGS3l>d>oLFk6#y-^kBY2~3YB+15(Zp|w4Y8dxtr)syEL|8(y#S0M1A0(! z&{GG>w%reOB}>xgpK{tKYwM4r?}(>QzetxP(1}Dk#D_`1R|OfMLC|fFCDS1p`p<_H z*eKv~aF%E1NAF1+zP$g|wlPC=%~HKn>BJ?H^vkeGpj>K8hHRu7ye}-9wtZmwtLJY$ zlcsJ?c1WXZrPCohR9t~&AR~uVgMDJV$vLu~T*oT%`~tkJ8f?@X)$%w)HVg=sS@=tLzfNpnJh z&D-X5L|7z0oPD#e?1UtM*m|EXuA++{(6t}Zg^%c>SXwnG!7)<%WXi{&USyzbt9%0d zQb(bMbOFxH{yaV6&QIFGZ1*C5Tk?pfba4$`P)ip*qYIzYx4fVeb#!p2FG(KT$gN~p zJut*p?qK^0zELTZa+?PDg8U5`8?H(D8g(;w8^6tkMR#m8TmG6ZY@}~*qDxYcH!w^I ziBu>GLB;;gKt^5q1Fs;{l$jG!#`HGRi55E1N{3|nEszY>7!p(EJ5ZK?AJrjqo0X^F zu`%23o6%BjQ;tFId%E}o-S{J2@`=7ZjuwihB3(cOBXf>XNZg3i1;5TnI2+~)KGP*% z=tLXXj&?fb+}}v*C;)=+WTU`3=z#K=D$MLhulHa8WD7d?BXDRS;s1W%*9eTI!jb+m= zGeQ_dCFxU(zA(&Sfw9D^H{fC4VH#=K25A?iQJ3O4R)9o^c+A5M5*#B`}1E3}F((D48KiVGyYdIKG!)HPV>FF(xCNF!VBf zA-9v6sqmz}#OxU}FHl{6{62Z%@B(TY!!VtpbA=(yU=W!MB8vebj2q$tt_^uct3YtA zML%wq+9GF}zZ150cHve(>&h;NuR9Lks4iuQ?=bZ5GQhj5>1am(N$edE zE#H0Gck{dDZ!eWG#P=A2a)z*iVN{2bTp%sPfYA^3POA5+Pq?7o#w9`-ft0YmhVA$-ITRx`lwl3rYei?qJ3HaLBEV&K5= z8FoZT{$mDsF?e@H_CJ$@-AV#SI z&zjiS@=Er&W#s#_ca75>Ry||rJ!gntFa#H9e^1-lox^t+7zc#@lowPO4_O;l$IyI3 z10~R-8-r*kCEWqUDj-bvw^!lU)AQJMCK-RuIt6XXn=`@k7en-$p*O$~4l<1YfC*s|)@q{|hB`3;olrvL zg1?xt|AwF5T1r4u?QMs};a1K}eHSL-%7l!hn+z54c5JokThVWy`WL-M`xwC`ZcJ@= zrmz6_!3k(TztK9r&67!ZF$r%b;lqS<%om0OSPiWT zWWeJG>qAmz?aw4@C8QmiZhvX(=plDntEQ9@XAFaR=*`kd8ictKOo}(SL`Udbu(gb2 zQk)f0Oh6B9qhU=5e{trhA>Tb7s^XJA{^^omeo!34)O*hW-?F1m{BV9)#m}IzXK&uP zs5dc|DZ0RvBrxJ&en?{AOaNRpFV?@|wVNN`=J@;cRclm7;+e!nCg5vFU@NKDAAYsB z^**_M6+Jdh5t)#{G)iO&l9)s?ldw^z!zsWFd#KltNC3o$X(PTi?$v9VtMSZWjhB%n zJC#XXViIT6nPo#ifwRj_BXy$ zQ}4D*uSbUTtTpH7F~#{z%_K@et|Ss7w~#59KxP-gjATYJqnUWiGp+cfX7e2F0LG}|;}b{UVT$fDwaS>n zdrX6JCQ-qJ?j2Ki3n*JUal)tteg8})~x09RZPtXOyNVO z1PnpIwOi3+s`yX%^ z&w%xSqf5zfp~5K2x!iR0`f)_XCC>VR`sYmX3#O!wDSXKk)-#P>F(nO5;x!Yz%_YWv zonIVNfLGKyukg~Mjn=rm_RouB8S5LFdQD968>XO{DSSk20Y3aafN-Gx%7|yOp>F2q zuz5DA8`6#~J3F+MsrQyCe#a!a2e|=zzJ~B6d zV(R$;qW2lj26Pyy@bV3DgGM>$S40$ib)oG@9`=Q4*v2H<$!R)ZYbGk?A*j~lf2t3> z)*EfL@3mWfZOLMpqLV4?Vru`Oeua7Ls&4$a%;3rMEg&ss0_sUtTcG|la?#}xH5wSF;$znPK&CNT)d0Bkv!aMEs5*!{(A&B`@>5>_^wtjX)ZaBKPZr_DBD`6|nKY^oi|hnY zm+HX^s9YV_C^~Y3XrtB?85=ho@?`HP4Pxk;Y{7Tk1KMIFKa>VhMjk;1mqYk-a6*86v>L{8K7k zYb@XX#!&m$+ib6h5SB2MWe|r{!n}Cd>DcYf+-=ccihdrnw`Es`u>d{-5|#vV%>t|)~? zq_V)OUn1#Qyo!YHf?tf-P&rXG`3AlDy5qgQ$1bxZfi!?Y`-W4J|4f|bH+j%$%n|!b z`DrX7okg6kr@=ev69w%-8G)}S;5O5SHMMNM!qRPpYAKGN?w4N|oH4WvWO!~q=e0kB zMP#y|#G3_FnV6AjFT5OEAh3JXP?q!bgtRY4c4~4q%P5B>xymAPS&%@h)t1z)ufpX+ zx*i+!%%79G{p^K^Ybj~OB*@fo%edbiMxnoGEu{qFT; z$LC+Z+0lLYDND14C8}i!pRtJNB)ebIu~+m4Iz(gVSKrW0A0>9Qdl;Y{w|u($3zn#k zC2*nLf(=Yzv<9mav{BtfghqUV&r*QGlvDe)FijX@$XxPTJAg zpTbrqxHPbc*DUb+>Qn#Z%)}TPOPMsh*e7-hr*}>xi)dmIZ&;A$yrZi}U<%dpoPn8k zcfNK{?9N(H*~~KVrMIvk$odZ&r@%Ycp51t6q;ocBbbYsj#-i3%mfl;I_#I2|o+Ye< zoaV37c>X(k(wXDBj5P%Zdos>kpYwqw{>U=;#M*k7@fqfW5X!+`rUVqEg$3BhS}(=@ z7YCy^Y&SETux@DV7Z%aRf`qf36pV>I+4uvRFqk3w`6h1JoCo8N7X=Xykq*}MPL@^| z$%DuAuP~{)s;bUm<54_LJnf$vwvbW(*zdfmHl6p4B`RYA7j?c3Gx{?(Cg{HEqxOe# z{ce^~IvrHqWb^E0JDGp9j>fh#ZpH6se`gUrETWeMK*$f68agxnb~)Lr`Na9aVGp;T zpS$~RiuS5mK?dg#{G_p{{f*Mie!hSZYw&)w|6~z;ETW$U!O$;qg1;yp>_k05ZIb<- z4P)DjKMGIY9lvnb-rp?o0LyrgW$=e3KFcP4HXKSa^1K7~1U}A|Y zRobbP1rc$PZTp=H%-;8&V-taFB8Xfem<{5D4lqFWAY@SQ?hjFWAUWgJWxDwJ*FwyE?T#}`8wh6;=YdeN3-Ue{|GCy?|A+o_+fst8 zhK)4W+8)6cMY8q$7*Vj&-@YZ%RjY8X374GBJN&M$f0N>BE+!(Q*_ugYPBU}m%jV4| zan~tPC{OM`_f`yB9LqMUV_s$maPzygosDw>UYnOb6Lsu1)VaVG$FU9L*#vaPh9U{D z0sviP{sDWz5`kY*1=JV8Gv#eoJ~?+=bFH)~BaK)$Bpkswg!W9kY8Q9Xs?h zi7ifM>!+}V`QY-yAyP%mabvSFOJ2=*w6kql!?oO0wj`8#i4BM@^k%7}4N>JiRiD$G z_Qe~5cZ_>77ar$tMF!|2bbhh{k+c<-*m&q1pv5m6X zk{mX1l?@Tze^tYcK>}|NrplHaShn|Su*apnTOK}*%w>Z`g##2};83}()gErO9 zO9;#rFTTMh3fK_Tt9?%Y8Q(>- zUyb-I2>3mYx8l7|A$v;^+prksX9KhY!R$>oKw3vsGJAk`@Qd$!sTvZr4EO%@uHxB{ z8MoNt+ia}}Mky&rNZS5F@r88UwnDb&koUV0&qD9KEF6cRci7^)Y^^f3;2vAx#4ZON zg#NDzm>N2Lp$oN=4W)*^$h81ZU+lT~l>W+M$B~g|UwkO9zRxDA*u(=;-5vs~?Ex%R z!l`=%Z=0E@%nr$c5mrr=rmykt8~m^6un&`#r@VnYb8R$-qSRRNVorl9aQKn>YPRSx z8v?N>paRhMt2m^>Pxch_j_%CDn2u4dUyQ8H*85Wn>5O7vh(ua63H_r?jBq%$Ot$)JG43L zLLbGds+BE%%hnHKK}1Zk>fQG2K+etEL-qS^_^-BpM~V};!1}V#;NY|ee~7r8se3;Q zAG~LaKd=oR(LR#oL1i!7j9J|n>M6&sE&A6zpp^XS%I*Op47vTJ-f2-VX_A9Xhy!suBd} zOD>KoWHueYaAV^-TFlP-j=0IL^v(?#(Jup{=FPS@T@?3+ZFH8Sox^hCP@p~oRe10x ze%k`Nq)S@P%+kurzT9;y!I@*^!qIc(0RJ!v{2s{+opLs;y!OS@zQvY`8igB21R4CN@1+N#S(wH5qCdlCU%TMR0aOy$y$6fRUvT;&ZdIe7_U*F4LoW{D z&4Gy02VQo7&X>Rbl0AWXd(C+N&F(&?MuPfb8onH{9|tPZPuK!{`Ml1rMM72x;Uaul zJ;ArgpCb<7h=P!F9EvM+L<#UcFD|DJ&F}J1GVZTfH+u{#5SAd7rjF0Ld3xE4VPkeO zrrnt_?|BeM9Lxbd3xTBps3O5U0lqV2aVruMwmM$1Q^JU<7lm?!VVv!8YRD6>n8j^c z+!^-tt$)FO2d7;T;T-XKj{Xk@S>nOReeLjg|9NVYRrHwEgDuB75gbt@NAnsriUapE zAcJgPo~hG_ucq?OZy0@UuUB3)M-;;m$8rQ0INEU>y(efqhiq3<$}WN|)JG_RL-B{a zlJpz@u{SE*+>q-~DX66$@~jyjG*|H{kz| zjBv^L$;;soS2=)l<#NcfxQ&gv&>#FI! z-MWiU8)v&mE&uQvt>X|cIbh4x#J!I$^xgF03OCVVlugDcSxY@f^onDAjoJX5ur(!> zc5%QWkA|<6aY?}+=NArKGJMSe*rO4CEeEs|-z*~z*)6LcB5qnU`Q(|zlqQb&4M($t z5ycVUnkUNwr_8mUEICkfqB`*A=w=SYTtHCwrbiD}os6C|IW&f|96zAb!qIExh~IJq z?>NHu9D@%W;vg@TJyzjBOgSkSI}{>zH#f!;stN6SRhn=938KYr#pWSB9HN&4?F=qtZa+h3-;tnwRaHysIySSZp;v#vZ#YCB z2YgUJ2 zxeUO7C^Aqq{hn~&Ubngs%RNXfpw>rGA zgSG03)el;nH&@GtYwXLF_;Cq;E+ps>W_2>sQNRmNAK2}yL(_h{XW7F--ko8g0bKDp zt|W*R2=oI^s8R@UOS#mcaV)ZT+Jykg#`AHBL0lr3ON4L%@O($lBUwD(=E+9yKcAHO ziTkgNvemN<<%+|&y5U^C^IWkL+n=e3;8L8Sefv?vCcf4NM>)U$zRB^CJKjce#Zlbt zKN!(miZ5hG|7k`7Bc5z=YE^bwa3-}VG59qgodYt-U`MaW#v%nvj@5;}IUd(!N-{-O<{k(EI4> z&Xf@)T)^;P@tjIcuT$M~omW4&ba#c_%Fdfyqb_J^#Uo{+_M+~F+%1!~c6{2k;?XUx z_%>H3f?CQ2TLibM1bFg<=gd9F!pa7lXGZj#dLD9z3jqtv=xuG%Vru6iDV{K=@$}_| zPItLP8SIn`=dhdTu@4=LfY}J~{?ko6B6e*) zFtHpT(p||F-{%^aFdD$d-FVhJ=IFhZd7`-Y6%TJNPpRS(Ct*d^nb1w&y%Q6Em))!= z?lviVz|~5oJ_I#@W|Y5B?Hl{}3?Dz{(8oCeNoiX@Pk+SKs^%I$<_e#1CDot_gIjuX`DYiIi=OxA!aKj`{IYNGq1TsBNre{wHH~meABF1 z8deYE^)jm7m_NJJ#MOGk6*O}NaY#A4f?dhROD&K6?yHZKn>fDRUFN@RR0~(Xm1|H- zeG8;PAPyZJ8u+N%Bj$Z6^P^20!ln^V-FLp@Zhg+qu&_xS}Mq z6NGR~eYsUm-c`YeT`s8{W8Nhxt$BVTwf5S$E-vwv3muc+xD;=I^yPN;@?(x5(Nnlx z(l-t1=w%LDN9WytpW4lZG!4FgDW~iiS0<&OiTb_M@$@#Y?_8pX3l66j2!&1|=`k3i zV^X>QVldOqqT%ZB6M5rxesD!Uxmx}VveYtd?aa4XlYJCUmPdx%&0MI_#})a35lBj? z>S{B0?zr|~+}G8sbSV8?(J!uX1micHdWCcVtkyATGJ`%@Td4Np>Bj@lI$#w{%9e%A zZCv}!gIw_Mu(11(-We?|sI_~$&iA$Qdue|_<#})~&51|xHg!}=O;zURj?O%=D3&l0 z{__0KIHUQW4{zG}sY-nQ%ez4o-#Pm0_~RWHti2X#9G}zhD9weZ=gQme20uCR9Csd+ zJ*-ty4<5v~cKFzFL*8wa=7-5m6IRyE-#d5%!E2xN8SL7>V*00h7rm1QZB}~n2rnK) z0p2`H0C_#@f6xn1>tMlu64M^qxNs6{DZTMQXDbJHdYM+z*!IYJ>&Nkp3QE@H=LkNw zX2|%l({TH9AFdvooV2gVhbQ*sX=SoWH*OI7Z0YQS22*?%A99@>sjNUjW>#!1!l^1zL0uMlyL>|Qtx-?~W(4|e< z37D)p{}y%DJO|UEFOFJQ>21tR;)#-ZMkzeWAS0C|92UI<>f#8Sh6t4D{aW@mJ3g+h z{{X@Bo78@pr<=ypY(-+J9}s-P8tIST4r#n~li`Hn|BSCs=ZUWH#2Gy8Or9`{CwhWb z(;w5H&J7~ho&DUo3eR&IXv-Io*t7!!;~CuJ8I|*h3LcaUD|u?L&g}11ak$WQp9h{CK=7Z8=Q&l6rIUU+ zRjs&wZX#O6(|y3xd&q-}m6y;QI&ik2^LJm|_lL&f8xPzoh0A_E;t|y(J!*AOD0%m1 zwhnL_$L|(vPIYv8%!8BwD2>u6pm<-Y5Lc{doxCPts{0e3Af5gcWC`gd=*Yh4{ks*` zgYlp4y|&q9Ibm@PPgKj3JmZPm(C0uHxYrl(pQ9~w9$oRAC~@#?v{@hQmiR_mcKj?4 zuO3oYl)2}^`CS&g;G!^*ZygWXrCtJa;UW#$-hgX|P4t+yH}Y8Z*6t=+g?(y0PxOkX z|BDH3Y^3zp&`ww1$TyeP>KwN&@oxZm0=-^8N=D;s=bMvwytT(1#fx8JJ1y5H3?RX%gUf z@g~r{;{Q6x^jCEuvvi@+LuYx3{>W0&@Rel)CyC+_8Grm%m&TQYU?p#TpVCChCI4&Ta9(JdcKMlb!z z6Zi47zJL!C;E&Iz?$^sm9do-cGe=}eEAHosfAIvr$=)a2Mt|onrjpW7IZ!oxeTHfC zZ=Ps?r!~kE{ox7EVq2Ur!Wn~FGgOi4>0}*=^oc>Q4b%6WewsRb%lUDWH{Z>1!Ju{0 z75n#^BI)yR>4@pA#m9o=89zdfKCy8%bHlWI=bF@Wdb-RO>{~k-OKN-mS|m-F(k-VE^kAUYN)m6WnEyl`8()iTe#7ivJnwbI^NU z+gL*%jPS)k@zgTgJ2lMUl;eILmHnZxFZ9AMKTPD08Oj1MXz#VNc2wbO(^aofokLsA zPB)}R&97c@4ik8?=isGftS=sCIv$DBs_L!dzE}ieq99Bdj0xb1B7-cJQ+YkT;RQF` zYB3G(n6z(&A(-S963E5t&zp~Gp2=LcBH3n}PFPcYC`N=~aLGO#wrXbrB`AB+Y=^n( zf7w~n+s-gv*1POo--`1X5rKh=ip1cmrO7b|vS^x^*syBeoOFEQ&CcrRS?taz3^Gyp zKK||40sX1bS`)%1hkR!&DUHU&F_>;F?I{SaX<<}x$Ky(*_Us2d$$4vhEGE8yL0%OH z^OEoaBv$W#>?}zU4DL8L%%fLVV*D~5BQ9bP$g7RfxaMiWIaz+qs@TE)BNj~~6M$U+ zXO1{@`OoBxZ6$WGLq-^8m+VW#G=0bdqF4Sh-z$ytHJ<4`c>3&VPjwPzn2ZTexFZz^ zKBQ-USasRpogx2Bc{1~4CM5+Er(#;~IHdm7p{7y4yS5wB7I~QNn0S80B}{Y~Gfu+{ z(lMb`B60;IZ>p->RNHerLf5+HwbX=)JZ;jC$7EncCPrjo#F=auWTmjk!JxcOLQAzS zcg9qo-s`dYzV`2#nj5`0pdz6Vo2)-xzTs*@kzn(X^|mt$FmWMf6vQgR;B47Q0YrgYJ7&3$ z(icne2tA$M`QNJQJg7L)U-kHV0Ckwn4Po(@d5;vu7+`5Y)+^1Xr26j6(eG5(?MKbs zomYa1Z(@S$Oed%g8Lb)BdF+N$=7sW}{Rb4AzTLuz+Zd!dS!7mqLuoLVr+u`q{*$|O z=ozh7rI`2*s63`!hUxua#B(lk5;&0k>K1P>na2DT;TSb-g|!)b@E)dDj)^NU!42+T z5A2xbv2kF-QlG=~%Z?46G@4zBiSJ_u5!65+V0p+*&gxr|ffuWy#wQ(OQK~=(F$kjm z9-aQ;KWU%FEk6COWbOf**wqg)@gq!Fjct95=>e<@ryKHEsEfc2kf$IETWd$M1#teC zU5usEvgSr)oln~pw2D=O8K;vuS^JQCX(C=mf7H^grVA&fPpritJc4Zwy|veilN@k6 z`_R1Y)j_Kro?*mu3<{a*1n;Kj;l(-1W8KStj90GQX!^pzqX74$hCL9~0DnRCy``E^1VLN_>kMT_J&7eD{$9>0$9*pS4pu(E=7cGrTFWKmfhf@twp8KzB`W5#B z6M0a7f_;S+0Z06cj?Q@M_|=Ac`g24E$*=jZAh03sZCGxvbw(s#ph(7tmiJ+ze$40> z^A`xf#8RQchc@k*8)pgEm88mnrLBJQ-89JE5(B^^5l!X`1;;_Js-Z-6V#Uv7_Nm01n~+#KE?O{ zT!kZJ;b-r5Xbfi7U3SfJ({k4Gt?}m*0elD^)b{k)QB7UzdB@Y^yuuz0x#;@x9AD7J z4CGV%{#PS_SZ?!}A1%c@yFbp5^l!U&Y6TL+CxZEKJVN;7od^<&CpEV_{-32O+viS~ zp7D$kjOs%}`9v6>2`AfQaL%QJG~A@=hK$sJdIYX|{13Ulh;RzsMI3@}L_W{-nXug~RR?Y5uPC z7^2wT7nGmCCldM4=9C1&fqh8H%$&gu$=vzQ-D~C3dyjl)u2v@V#VP#FseGeLd;?c@ zC9@tS&)V9^zUw29@!po{k7k-RY6o2AYo_t1Ct>83ik@e2@`0Z3;+ZXbZTcHl>7?^T zSNK{Pd_g83idugW45;3)^Riyv^Cl#MpBfJyB`wI}i?aFpeheU!<|ZniD=s=YQI;_` zeDd5sIeg=8HdrZ{{q`}li%lZ$>Xv+^>wiwZ%7^w{AX&5KLhi@<2n^lNZ8x0wG$ofW zc}Bek;!)bm%#;>(cvf@lV7g7z_^`1?DH&Jh?a$+j1|hb)ehRY+*;m;2etC9s*W7!W z`F!zpzA%E?55|}3Uw>|?pS4SMlp<_P+U~T^9DJQE^5s%Qc|ElaJ* zD&gzhiN=!CAAGYugpSa5hyI%%7f>tuv z6RB_-H?ybQezal#xeXgOxO;4we2-6*^T9N$y~CcfMvH#+-)==)!V|tt52aV|p%)2W z@-acW_6{k-zMPuWJy!U8S0$gg&xgRJ3UtfTUM@dMYC!jag3(E5@`vaCh;-GypVa<< zFM7x~yv}*V2f*#$jtCX*sqy&CgHDNzzh{Kv@T2VMF$n%)!u)L(dyqeJmspz-pN`(H zhE@5HNvTOHHFhiP3`kwKUTY^h(fn8K|7-6%qoTaJM$hy!RxMVlaA>c=kwY7w-xnmzuZ`$R29PEmONBqW^fmNQ2_TJ zv^BtL%#xkg7L4~i@u-9Stl-=urRK46L6OqniBi8!XsHCu0he`O^~+ha3M;Nm*}wZ) zp_Kwb7pH!skj=u~H>20jvWah_)F0wjZXj?OSpl|EGa^$i3$72CGHeSkc)$GTDv^1G zQvE_X`zpT@Hh9}^>|zP@y+@jZ&gO13zS(NEaeV*k#Hm$ERkacd6!)Vx+|-Y6F|Dh-;H z`fmIWD+LBn?^`kY* zT9xWH<$`zkXsaU*?O9z`czeP8yi+G?i;UU<`T%N`s!pZq&n{SN;BNtyU+n?otHByi zcj+~1P*c*Z!)wRCc&A+AE&7}sv%Ali2hZM|%b#IenmsG4YE9celP7=rhJ0!q- zs1fOr9lF%^&WzyQ>G#CB*^4HfBJ_=kStf+qlu(%w;EoJ*C*X7pq{7MluWX*=vO?Hb zB73#)5xwy=VPH*gqH$K*q>yiSii?!VI#(mf7?Z5f%$&m*ah*?g=tc!%fbAFHZGkbHtr>omrW@OtJ z8y$U{>+4LYE)gJ8)e>>@2mEqqp0dbqgYGr6fKm1XE)yCTVv(IVA4D$A7e;QYY%(); zIOa)szs$bpN~qij)t~OLAn=$D-$XFK=00l0^-IeJI8n#qotU9p8^D zYPVO}myVNq6B-{v-wtf(bxH0X11YmVsJ@@BaOce~b@)|ci7#OoF4H=gNMHF?jN_as zgG;9l`+ZjXhI@X5#-Esdjev(xPF!m+ark+GaBke4?VpdYcHiuf@@Gu|F)M%zJ>E$d zoQzsrd2vs9_y)sK-|Pw`mON7AD@oFE?cPxN&V$Y)E0cq-Mim4R>TX~wBZ))5+ItBH zhux1Vy4z20-E~4Qm{<}*EDj~W30xQkl*3x+>#^e}N8hUYw!PflX6vS3J#u7IuEq<< zS;bkyT&^B}n?Ll8=X{6Bj^V`82tqHCP(=}-X1D>sgE5!Z(U;;S_8qgl;mI+R_^afO z`M>;>dSZU{O+p<_fL%E-L-n&_cWhiCKH<^7eEFfIVVhzIRV)GaJQU-kX z^FNwi%kHyN?U=$LGlm=pKcT*TjNQ92c>U?CH{u9YJU}f!0pJeAcDpwM27{Ur*?Z64 zRPOH{AhZ5{>^uF{iG;yb-en1CH_GeMvw23lejT;{`r6PfF-e5_7BRn@Qwzog0hHbs zhQoIVlcpWvn|vmCbeqs56JXZe09W64%SX4n));J=*7i<3xIMxpg;1pus^eO6sQJL4 z8qz_%{PgFG9hK!4^(7qAw%bUy=)lD(vB!!dw=Vwm%^gCWM(Cvz^D+p%OkznEp~@!U zF&{kZ#cG{$9xOz}*2e0CYtuH(P9MECy0YkA4l&!GQ!F9Z?-|?AFX*@8f!%G^KA(;B zxJ#(+5pa{1(5_fuWcGOqNiwALpkH^ZsJ_g?3>!^g}n*tVwQT}g^bhh;|# zVR!~hCDT6h2{#j#E_m|b=;xbK*``)P)rQZPmY!Ms=iJzvXQxcNaAx|?3*LP`qMgvZ zCFUn+Inj-JzYXLCQY-S$%n}IH>qVhvlyIZXBovg=;hW$XxhC4qr*5xVe%CxAe^gaBp%T9*;2GRrkkWz116(29yf((C`}{C@)bU}~ zCtuu;JxQuhkp{-(;_W6Rm{MxrYG6^IrUd1jbn zsbo{YcBh)*^`@kO840+n2%hGUi7D34#=YqHKKJqbtV^Yu!_6(`AAYqHnl3*3Q2OB<2e;OCi5pzwmeSp;Q=f2B!oFf-mlAv=u zPXY;rH6jPBNHA#Ib7&h#CP=AgxW&Xy>-fpf9)91JJnfb>sj?wewj@vjb|m;S1#5YG zsMurG0j>YO?egxJPJQ`V#n%0!9+Aj_oE0Pny?3kX4~IErFMlyOJ36GYY=xe0d}&=fKwwFOq6!5?};B$65Jmb(he;FE7?@D4!z;3L4khZ$X%t{QlrhtH$B(EBe1I zeb@Kijsvcwz8g8qoiy+um)G$tv{x^mTsUw{tH+JqZOluy6>1+vuRa&&hOr&+J^*U+Z*6j8FDv2#I43T+cRjHNgrwbRZ``P zryt#4nNs zQJL(+i#rFcu^Bu*l2k{L`duO{TnTx;;?0rUsmG+A6OsicvmI}c>YJoNG^w{e1~wcp zF7_ejVC{N)WnWHwd8%@z$sK`oWpBkN7$UU zn2Ec$kcZtK53qZ_!aL3Vl=bn!-%1ilO(LmZ&Y9{VB;OyOUm+F@?P%I}dT&5_HQ_XEsl}v&GWC8)Z z(6YgB-TYtM-bwpaj_B|hxGaTKrNWURRcWLu9q;rdeg=l(t)N@k7|+QB$leQTDX6(} ziZkzEg<#C~`tA$uU&n0AB6YLL1vw-YErW61Al!|9vfN9qI?ZMJIFIh}ErH0Y4S z^Sb&q;a4{e*!J!2tEcPZzZnsHk5t_!;hl+g-CyX``%OA<@a~y!|LkWK6SOUt1XlO~ ztQhE;z<_2q_D@MRr)j(f9-mt0r&{kZ+umqE9;wPFfyXQWsNB986LtOd+*?9cjDEd* zGP93&ID%V9Y95k6ae@W0r^5Eg7|UHo`sMHb+%f8{S)PR4CpGwHkNdZNyH2}?zZtqF z?h(20F}c)OPz3D((t4mEFPfxoxHqd|`i*`Qo~E9RaS7m(4d>c&D8J`p9k0!}v5hEB~{Px4nHTsd0?;S;YJyZ$9kgg-ikd2?^S<%eqLvW|FL4cw2*GHbnUhND?5|b z8RHkbTm3+kkm^zrI1LA>5gB#8@l5_{-nidapIWlw+}5wlNcA=&^2D-lTQ>PON9{Ap z9DjOq+=g;e-3=$a`sBl$8?`G@+vIa$zkwD~9u2QqHa5l6NI~tHbIVzpTG8w@{#G z_FWyRc}W`7lVHc?Av*Eq&1pt3!_^1xG+bas)=xHeMVPR@TzF6|%}z2x=Ci@>4959d>qK`&PPx@dWQAKm-a zous;p)YR}i6kwcDdwRql+d1DQd{w&5de9Hk-jS+q5`+@k)7PhZ>g)>Dy5GbpcM{7M zC(M6O&O1rzoua@w6BZIyfp@uvJB!9AZce9(YU%yf2xLsnHlY^5!$=C0lKa7BEy+Dr-t5 zwt=2^fhGv(O|4HgJLiqzkNh_~jQMKLX!)tvqiiXS9R+Xavf-Un&V$@=Kwb zQhFYo3lw;+)w(0vc2ujpHHl5zJ^B8g)U&GZ&F<-=i%t}HA%Y<%Rei^bk6Y-(PmDmh z(mR(fQfg;PKUJ$>74wN zJ>PR?=h5cdhF5&e0$nKsH)`P-!kxl8b1g@$_rqYLM0Ovq>1A`}^3W_x4@!N7((|Mi zdQo7^ovV1Dz^c95s~3(aRje{fDnH6>&+^di5RhA1x@RzP>qyfvEz`c(wEUPirSYNk zu2KfRl%5}D*u*c^>iS!OO7F;}2yk3^Qr z9swo5`i#9JMp_S{2i_mMY~8_G*RNCRU`oBs22e|rX@@NJ=V{{?jkR4%rh9dVP?}I` zb{GW)^?n>3T{39ofV8^0&Vx@x{x`>_9{)0&Qb$lr-wERY+IOApA9eZEpi66J7j8Hs z_8AmO!OJpO;sx&JFVgY^Yi{Ul5kKvJ-!_U`TEd58Iy-Yu@cXE_vx6D~$Vl%nlN%H~ z-G%ZEXNUSdUt_g>!?I&rE>Fy;x=DerwP;vP?PF6i;rOg~1Ap+@al&r))FuPPXEBss zETxH~G?9cRR`3$!646d6PL;90nEFwk>L_3Pc*-z=(mk9=fr0r3>~j%N!3d?x^C3(8 zXKem$sQ2Q%b&4d);1;#?Hl<3Y;JrG$G%Dhzz%GLg9z6K^jTAmxJUh7{p`N@a8ZqzA z%^eDymx4~Nv~@;GY|SuUwHS^4IcQ7&G)j|B>4x#mVNbrfOVuWnQdcc%cav{Ge7aB4bN_n0RHK`st8#hmIAKY&F@GDu+`2p?w%NCowtw{dE4a zx!?Z0zQSd-B7UXOJFHI_A+fo9S7RxjIf6r9jr&PHV+%MYGDG;YtEFW-_ zT(i^jOOKfo5+6{iJPJgQTC9_Q;I~C(Gk(iSS{hk#U3JPSpHdZ2KzS8X$ZYebO_)ng zbKJQ;VCUPknM1Q)OnqsD9#Wb|l-^^?;FJXWt<)t=W!9IS|M>BZowRK2z&laj6;bLZ z)ci%sQcO|D)I4TD_H?GrCeLpHhpTQL5(@Sh5sT;CuiM;kb9Of1Xz>dratp_xJB z+zyn7jOt%YY3eAwmv~}e*riK4ZJ9fDXQ{VWb;XRq5ng@H)>Eoi7$&vOB>MGlpPrQ6 zIMrQVnti~jNUwnc$^;s{)VXrhR1a~ob&|ohJ=wW8UsI|#I7`cSZdNN3-K5t4dW(?@G_s#C4G+orA@;+1MR#tF)1&7jOuWx`HG>>$NXX;B#%1pIxl%C*;zekVEM7`uQH8k zwFzx#N-r{_^-j~e@3of~)^Hh-OU5^GA1+!l@w@JhbDc(^v^lLlL+e@424`u#bF`s3 zw-F&dZ$~XmsM+Kim5oeeaiRO@sCeHY6`7N4~hi8d2+pEBhGe$ZTkpEe+(19j$ec zwHurgYhCuPxUf>J5?#LL=E(hV*dP9P>}gPHLH${;6^0uJeOCRu6Kd!Gjo-|9z!?TA!8#>ui(niZ3vliknXMOd`>vN9cyZ;|O$WVbjW@lt2~ajXek=ZZ+3t<$ z?kn$&aJX?X&BcdSU!}o!7Jlbby`XM9>vp=UVWL6C>F-Xs`_k$H@lydAF0Ctx&P^Tk z!_7JUnkKCq<40@!Y5jT#6h0&QMbuPBU3Dx@j)eo=H!1Ti0w@zGoBk0)uhp`3d zS=8eFsR6Vmkk$>Nf%?P7NV??YpeYF-BZ}7CpqJdF4Wj9# zrzB-U@QkEOp4)5ZGrR6g%!=EFKX(i&yct8QV`=?3S~s57O`!F?K*Q3j^?N}5N!Se@ zD|J7Xh>BNi5GT^0u7(+m9kzO&z~#Y$&vSi#M>c_1l4#8>T63E=^pzBITw%?+m=O1$ z#y!21aZP`BS7pq!WLlF#8`z04QM^%bIeJ{p$h8IT*Mk#h9@?EstM1Ssich1#UT6It zt&;=)M|p)aOj3@=q!moMu!FlUomO`N3TPSev~9~7!^1fnMn7IrAS}zERhcwsL$r2H zrc=M$_OkE7LB8j5uO{S87?MS6vS~2Rz|Yj%zG$p(y}!WOGV8VYqJSsNp?|tdFN>Aj zqcIDMX~+9Cwv*XNI_oaoS~++^<>m)_HoY48)v8=t^?-(_qIon3D8N({yXbLHl5fX+ zHaSf+LGx$P&nZd$7vIl^14-h&-Rd7uFeF}c=XWV#vH1?SfY$RCm5Iocg`t))uJK=v zI^|!tZx3oOq%{v|-ADBD$F!=5hWE?md_{%UX6)g@hekvAEkFO#tPUC+{9D2kTJx0F zdm)8udHRqvblhv=#A3ayeGyx-20x?W!7+5YZ@`|Sts>*^f9h~8%Z=T5`8lmFre~MX zU@DIV>PF+tx7#ZBNnm3%D!WOxd(wZ_FL<6q@9QN*6zM!U99h5UCB6&xaeqFqb z96rENS<<)f)GdaU>u)QW#pSf24_M@rjvRK|*TN|?2H#&DmKk;`w}Mu`p!F(g!zy}N zF88`DSQY~IyZxr6J7(&^e?>K|s=>Ib7H|jXi?knx!s1zd<9T|!g*As? zk6J--X0E(YN2_1bivp##z~E(gR_@3eT-dqf#NJc0njN0k)2dfADCZk!c#jWuUz_$| zm-NucaD!j`mhE~pO>TcXKwq%x%xhZph6W2P?PbK)e&#SuN&4P-WqG*b;)J7(w7QAb zYo-laXm~Z<^Nh`i?C4%NqVU_7J&zm+aZe1&_YNO#kv&3gL&1T58=NG0%x@~(Y z4jjN~Zl~36X-x;7uZs**JHtmW`@-b+3+qBw&-H&h*H^cb*6X4T-qEUVTJ;`=%)keF zm>%cLJ9lo|ZYcpzRK^ULj)PT+2?HLgun8_OtXZF*cz<-|V6(Y@gfxsSPf9dpW|=Vt zrKEvp}7d-i3P1&8-Ly8NoISSwAlU<{&_AdblY`tF3Rx`5%|94+sA>}0jKGnYgv+fj{I z7T?@#iI|^`9r@}kqdCWDEE#xjgQuuVUN673bLfD9>+_o*>{`-QKIuH8vSL(!TEnz@ z_Y+oXVUEYwzX=>pUohX*ESmZ9jt!%+W%TTrc}>9f0r0Lol2G-|eD&9k^Sy4ZU;N`j zduEvf14jLh47g4{0M0osz-s&kz8b*6An9l~TPCh%h9#3Fea2PZe&EEYE;2wyYRSDH z9~}Lujg5Y@liTDSY-5}1%)o147{R)=#^VRAu32U{;^N3xX}s)9jM^Jusc|9OOz9U~ zmapEYqY)3FE;AtZg5vX!R~SEz@0>B>P5X=z&q+sI7xgWyxLMOVHY4M? z;i?(qf8G1gje%F-P;JP#mwl%T{0)vgXC)K%rReULImeF=nW5R*KY&pOGKN>^Tu=d|Z5g}un$?@cth180+k%Rc z4v{uR{lZkMq6Y<}2v4|Pm^LVgQC(-iCGB&J&<;GH1U9PF)IZDyu5oC8wK|y5gfNTk zIM#5}E{}KeEfft}yP++>5Dn&ggfi+dMn9dvVnfsXd%9o$bcis&@$tHU#Lf4|sMm@Bz+fBAG=gLTo}eXY!#-tA2l@)NLpcyc^OS9>u6`Fre>^q{>VwV7tI)i(g4@|sm!@k(;Jt?j;NUZre$<<45Nu< zW`S)Vuq0$rLhY1;^AmXaTr|NCBfR`@2CO&zLD&l zQ0>rX=i)w^^0{+OOUlmQV)Sk^nq+2fB=M7$A0rKBxjXC%T9*6uWFp9(7gZr91yR+a zW#QX~bl(z9D$YunlEP?G8N*-+*5MyAXSbMcoiy;uMzaTZ+@HDJVU`u}((v)euMgls z#2&UhBli0l>kgc$H;5ipUy#mdG8n^5X8BW5qt*)G#{`Ox+1X8X^j&W-*#< zW@!$yq)Xr@_Xlc2-*&vM_w+qYrHRKAJm%b9dzaC_$IQCV7`*1>GT?>*Bzp`p-jv6H zt>Ff(<9(RtE^+YVM~kWRhc~a1?EUu6lYB-~z<^6bIIo-c>`{Kz-v7~_J!2-%x_LLf zkkLG33?DJzDYig_=OlRi?U?quRc`0fuT+jOUwQs9qhG`rW{b2>w~X(9-||(m*U`^j z3>tZC=7EKIVscCHfhw+J?AGg>CbpKitnq%rsGc(LQ3tJwL}0c* zV4pGS=M0#2+rou1$KtkC?v;aIuFKc^WtjEnM~WGB38U%eU_pt)w^OHe9^7)}QQnne zPx;L?rHs0a(UdcWmOzNR0>zg={M5hVcfu=g1T z$t}AuDs%4LZ#q`JxtSZk!=ai{*DwaP%);#%Vvx!u$>aU+7i9|fH;r3s^Ju!Hj#0g2 zK&q_8M*_|-1xCY0d>c$t9Y1H<-Ku9auNb{x2`pk2)7pHYN@f-@W4P_R@3!VOFd(RW z4N!-lM;;*kz6|(nu<1AwoCl|hz2}@Ce#ahL^XE!QkWE~ok}O%7F-#rp|MK-pAwD|$A|$Ee&%f)O9+s3M3(2r;XEbja z-8!wIlv_l~&cV<3XH3jmw%uV$(WDMW)yaS*Py!}9TE70{C);UppG$A9x>h{x(EcvK z!wm2b+C{mYT~(4gMi}+##d603aft`I8P$7?pWLw=zIf1~lVdfOSGbQUyCLd!hm)*f z7=CeV*6+yWCRt;dohNJf^4XR_o&xf?!Tri50lbO@-z_*?6)~{+6ss|2H72aCDLdPY z1>@OX>s@#N4-d(KcBE;)%NUc2Npb; zfX7)DTeWDv>YC0;_UjLGkB=n}2p`uJil$j`jmL^4nYG z?@S^HGIIOO)7P27<42tK8!-4)TG2&T?aVH{#DaMr);$@K>+BX94O}8EvUxqKqa^6r zgUhVSg$2B;)lu}X(bsdSFd$4{?fWu!+AEGLt9E1c+}UMW;4T`A_-0OYwYog%oQ2O1 zRoyAiS-uBrkc$0g#$;qDp4<4%Z>%Y~wR^+E#4D`o4;Y|8wr|dpu%mjbEvLQtHYBIc zlLhJ;(rL3px-wJ0gn0=eH8VF94)J1Vd$aJaAs1dYke2!zzOLuSy-rH3^aJM7qrqbe?$3PeF%T_O`mpM&EVxXDtGQv;%WsCC z(Ai?Eym@XXRr1W2HSlBA{_KcrtU&;)SHcZs!KxoVuyfE{t_Wh0+5Y`|_J_#Gej@`a zy@&)S9b!uNy&;EgU1wFnEa*M7*Q`^1|0A}K%!8LS_~y=9AM7cT4QFSa!On0GA3u73{FZFn z2}Of_1Dg+i7lC_$W!bbLcfdfSgU27bEQlNXI&ftqt2TjK+-KR6&%TcyIdVR`YT(!r zS8ea`OF8f%MQZ`7hLC$rUc*7JaEhfExhOb@S46zy76?%%PKy#DH%Q~-G*cd=dO=K* zEcT(DC2g`0ShsV+cHt#>^TdVH2~y+@`J7fE^1&^cDZJQgN_c~yZJ|v1j{8=C{Bem| zu=m3?d?e^14xPEk6Nlbh6b|{^E5t)Fx&|pC3t<4aN#er^Q=Z|s5aiXJoJtae*Up;Lhc^VjkQ@le!1=LVl4R`q-eO7-D8P&oW<`zI4BhlcpgWUH`6 z7$ij%5aT$IC>-}3CqyrB+?zmEI4q@5B2G_~p*o05U-A7pkHyAP6M2K!M{$#Cr2wiL zaLIHAWkE@9ArUP?c{~)-!&(jnU$CG71eSj2$L}Z(9R-hVjW&HUs3NG`yPXxd%M=c3 z!wmzVSK|0X3O#}2($AjPB#DLO>j?O{Y=lE$-?Ofw~~<9Y#0&KXOfWnRr5% z(%yuN!cE~vM9F*=F2W>Pl{i#bM@9&3I2p1y;ca1zqJ``d-{3xxWhinKwX)lUtHhQn zB=U(zgpcHn(1}+qJj>WHrHUFNP~uJbQz29lFIf^KN~O{O;>#sbqIRNE@|IUG31%V~ zV`Y~DpNq@OT{TaojGSWwWi9s&7Yz~34 zAyv?`qaG~ah6lL(X~Gpi1^!{E_P`}Wg{TDQRLTKgy}&u9TvUZq;$*HQx(a1JV&7Ld z-AD0&j~d{g03WvxuyPHzCV1Z<3%0<-a~}m+&Bh#J89ljxQZUofp4Tq9|yN@1b;Oy5z4&bOXo! zLc6t6Se6=Tg&4WwLBXkvhJ3LF0CbDoN0LO>N;~8cLKF+By$g^4|2b{~}>0WeZ#|un_<34&znrha%xu>!426W7qykN6(cg z^gmVnn}ItZ=WUEQBynf-Xajc15)K`?L@x{BzC!Gi-dkem>cNGq_oR<|}vs zLixxOhYjFp6sKn>kT=AIA1@8qgsZs35#$E}V25bt9XCM<$pJVyoJCGhQCKGHkR|eB zCE-jCjRJAWhl*PQOgq5txj>2Dc?Ut>*Y5?svP`kDFiL5z43u|rycC_n3i>i#LcW%J zPaY!|smUlZ>|?etCYTk0M+L>eT$Nao4k^KBKE$a|7v#+XhbGN?D)blO#B zNuw)x3a%1#9s1x|2p*Db0qK7yHsX5A zX;=L=j@>0OTtcl>i1kgCHt=he-bAF>hVfwWot4Km7o<@MQY$IG)w1~&VtliCQ#PC| z2Hk|7IQb09hPoVc0m_AD{)d!W&vy45KdW&h=+1;=*mIQajQ`@ z%7^&hY2Lz~7M_dVae)qc)DwHh4a2un5v~h2Tm`OsPLAw>9+5jr1Gw#?7KtnCO23s| zV%#|Cd@H(9j4Gj&GF9p-!fP5T$1950vv)Ov8B`4=w4>Fw{sv;bP}PEaIE319a6^eY zahOaaV-YYG&lR5hTY?<%U9mCcC(#0A6&_eV9Bw?^zc9WTl*U)D8!UsQihrGGk{pVc zrSl!caOW||7H40lQ5~)v4k#SQfd+TOVW9|l;SesB2FRBgQx6rc0R6Unpc|B7vPfAp z2k3{_xNZoEf}reQV}~@LIBJwWoN^lIw{YCfIRV;*uK)9(Yq2s24B_)z8~+Ptjrv=g z?a=1OeU1JwvKSm5LS4O?TIMSb61g6PoeXsoDDXe^_|cyD6TnNxt@$d@NfN?H7G>f% z;DcNo7Ba{i*a(28Yf3nEg^&j0!MFq9;yEr+K%;U98CTI=(t?R*+L#0-rcw)pcNF2G zGAV{AQ(n6u4Cq#XEK}S|8;PoL-BJZQ2XXETStZcvIK>9m9YRq6`GjN7J11xrf)604Pc>~-b-$C;)CO_}2?>k?^0>E=M*{|09ezK#T*Y z&h@P9fypAb=>oF6bt z|F=A2B6Q!|VKV&ZRuL8;T)=~BrhMe#if0VUgc!$`LIH66Bu$by0YwbQTe9fS^7wKd*32AQ+o)xl(bcOv_w1<5XCwmfqT0GNKFG{CEKGLJUYp zV+zyWAoys*b*{p#ghMw4dJiG5o63>{@-n6%4aWBhM$EYgtda!8N1TfaM@1{=vf>GO zMe$txRD4}gCvFzEi{lmV$PjKOH%Vb5F{82+4w8IDf#NJ>NnMlp@#1(d6_Hd5FIsYg zYEm>SG9|BhFC;aRZ0bIhPd%V4`JECgWfc|9ucz#kj>_BoGg1qwt+bHuu56^dlx_Sl zX{_{?^tRNR4p-XKnNmmk0{uvutSpt@QD!LbDRY$%l-KA2^0p=#}LnCal~ucV_^!> zB)d!G63wy_;ymNblo3u$1#y|FB+iK37;BL?bA`Dg>XyAE{6zlDHBmEhMjj$MFK;C} z2s^pG+(jP6M9EKsX3d(sEx#*&!Z?y<;yUJx_^JGvyhMJLY+_oOaI%A`k#{lO%xTt~ zy&yir#**h*cd<2V%O;VxNiVUl_yQXszRX@1=aJ@$E9^PNbvA-Ufj~JD*Qpp$6(8gD zEIHv?kngvbNu=O|DI%y(3(G@roo9~;I-j47~UX{o|j zQ6=`Hy(ujH37~uAKUs{OG)B?DkA(X#T5Jw7m2ydf^fr-9w-Y@Qowou&LV-Q=`5@=@ zhMxW|Ux+5(tR#FrKVK1@^$7wMN1lRSy#hFpKY6%}D;m)A`O^6GR z_$UH|uYfZ1kfY>J#ux+H{5YVSF~g4HapglO2?ro{NQJO>NF^A*8dJ9Xi-1Q@6D1rh z>;znT5BFm!MQKp>Q$Ff}1cm<-Nd7CI{ZEFu0NUfaQiT#!g8yMmgvxt|tYuCz@aVb} zs1j2DE*z@I@xO_4UPBy@@GdSNEe0c0?XrK^oFbgsPN0hzuu3@SDa5%>F!?6jnX#}{ zXhnyCgc&yy1;iq(-7 zho`+Af^cq<9EIR8NQAm^DRVIB0xm^TKsS>u5+MHhZ)MK}SPX`YX~;KLqDWl+vJ9*^tM5 z!oS5u4{%SH3FHhpJ!qx~r)0>`Wn9*aMy?R@+ePVoR~CrGXE+yHD2DLkQkLOV2QhNT zbt)yu3&P%Q@WE+WG^&9zJPXEAS|&xlkS53zW07JR8LmKn5dYX(z$dW=T<-(>{RZ~~ zqLVIde5%(@INF~AA$=hRvjX@)0;UOY3n;3$Wi7cJgKPVP z9W}mzPqN4w!jGeH?2T#5Uc#{+MM67`l5jhJA>8ENR<&o+6}RR`qjX3W+$18&BKcd< zTLsF(rT*eLui#Q}jpRTo#!b2Oe?3$mF+{KZp9;Wg0g;}FQEa$FYV zDit`qCPPt>u3aw7x1l>0?g&%UQ?y$F643_GuHs1aqZheln>#j z0@!w3_AG;*Ku+(P6yyJ3VkiLoRwnz`H%uq}udBSk<9h)gxo04R8Pxu5G%s-;NG8p3 zUOj`F;a=wXC|o&>@cC(+22xUIxP0K^36ovqf-bZT*9eD?6+>?CoNVC#-;str^REZ_ z7Mc~=Q>9Fcq)K#_n=1-o(Ise>-=K)0-9%S};2HN{H|hcnC`$OCEhI6A-loWvhl#P` z&lL1?CP3*xKIe%H`9j!pT;I$7tCV^7rh}@#oam~w9&|rB4c)LlrvNKJ?Nef)2Jah>7x_DWO z@CD_Wn2Z^#zjTnHxT6Lsx`3OElWFlp zIHdJ`#YyDl@tlOMB1>_sBuSDe%j96m@*{bK(we9va>)uZhqh<#Fn5^-21P)fkMf*L zxX&aR^1va`7d|)y$?G*7Ugn`_+$&(NKpf8$pimro@K6k-gC0ABLeX$X|4S`y+`m6o zx1c|9uTlu>)Er1Gk%iIpp4|$}qLzzM3Z5UvecH?C&cE*}y{CZ>>_isC{*DsvLR=c5 z%q8vNGuvgdL|FxCO<<7|N`}FF>^K!K)FG4)#d}AXg_Ej4u7}flBx>j}{Kp#8JQzJU zfINhr;RI_L%7wzh8)T23+8m?1JX}2%=m%V)R)$J(m_(xr2(|ZXAPALEHN?0l$rm7E zl%s%u5}Ti(fKLwpqkq4R_0Ux>a2MghHHr`b*uRB_H+UYI98?BPNCLQdVvO9%LAi;q zss;f{#OkR8C8kbLCGH0Jk~Uli!gdG+jiN_HwGh7G!lEk3=RVunN6k_!_TF z0LXNJi~AocQ$Cu#XkGGt0yq|UfgNS20Yk7S0d#%~bnubHYsWEs9<}<14v2y5`Zjzh zwvee3SBQb`>B0kQA(0(!DTG2Mn1jc>B#Ho`JNFh7L!pZ}53GF5aGnj{+|#G+2SpE17>TmU0gFD%#a(LNRcCT29!AE zv<0XgT_nf>O7Wg>4#5F#g#*eK(8j_5GJtzV=qm8xKM%4Ahp?1F4|aSp3<7kBWpV&$ryykG9Is{8DmT->u_ zU{6~A2dpZOU6Rl06yP!SQ+(c&P8PDNhwPF^?D8CT+47#WrH@%v5v%)zo&A*6%VkG= zJEkXn+%s17oSjq5YD(C-rL0aF?smT7C(VaG)a9(Ig4NAu2ltd8^nz7YvYIM(ZZ)2P zLaE!6{zDC`s%4kfv9n*YI`w#F>lHd1dh&jK#i|^%0UX>||sndG$zH0)z zU3Pg3t8T@;jQQ%r8jfsZRqgE3x2#?cyLd@YS%VH%)yb+$*)=`!)m^OW9Xq?5)p?IQ uR4H_N(!W00M|G-?u5q6Qx$Nc-^W13CM`hY)j#(drTvq?X+-BjuMgI$(rh{Vu diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin deleted file mode 100644 index 0cecb455f422c2fc9153c39c720cb98bf40a5c98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43619 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 b5bDL_^+aeik2eY-n#ZFM8qVVlL+JkjC3am& diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..7454180f2ae8848c63b8b4dea2cb829da983f2fa 100644 GIT binary patch delta 18435 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 B8dv}T delta 17845 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 X49Luk)baa85H9$5YCsTPT`SVRWMtMW diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5550bfc6..48c0a02c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Sun Dec 20 18:03:58 PST 2020 -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c..1b6c7873 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/src/.DS_Store b/src/.DS_Store deleted file mode 100644 index 6630562213210c184b1deb6fbcf2d7df67521559..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~&u`N(6vv;pK;2D9J%BV0NRf7}M!S_F#3hvNuq&D1Fi=To1rb?1HR(Djs+2SE zzi@?rWdF|iKHIIPm{c8 zwXVd*rg!gtP1fYL{1ARoldy=2ao&qYr(8QxDvf95D1Ms^C;i65*D5QbBpZ%&Kr$G@ z<^8)P8>mT7jk7_nV?)y+>$2W&JTA-jvu>y9AMCfLO}~7x-)j1ugYI-%mydRzzI@aF znx19qyWuWyFll>WbtXShm@nue9A&A>KBJBOJt}BOITcGlexh#?i1oVx#*S*9;&UnxsN|(!A#1q8cYl>=Q%SmxD0j=nt%a zWz>X|&@*EkJF~Da6k#78!q@I30;4W>1RQ}y0-L7V;QRjwd-#s`|6-7re zhv8ulOR{(Ct;O+O>mz+cVq?F`s18A9uVY={t9S=V8~S`MKm)6lQMAC^kATMDGDl#g G1pWZJ%BiXV diff --git a/src/main/.DS_Store b/src/main/.DS_Store deleted file mode 100644 index 4120e2af1d14629851225b62ffb58c6d92cd25c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%SyvQ6rHirrW7Fy1>Fs}E!dX@aT8+w0VBFlsR=0>jhWJ5*%z?~l-IVvjz-77;ICK-|A7~w1%g^3KoelxMZ z4*2aBdt?Edvf%6YhodCU@@Dg$Z&a+!t*TwM>-MexAZLCaUA5U({3&rVt(9i zHbl46TP$k!?!n>7`QRyePUVYclmp>Pwhfl>3d-k#rv5lhWO@(2GQZ3tBnF59Vt^P} zTL#RLVAt1{0a`dQKn(oE0PYV08lr2k(5SW!=#xGn|M zrQAF*xGo33FnO-QLZdEcT+IyQn3>DR3sbTkFSGKI zzg$8VF+dFbGX}WT_xm0!%ABp=mWOApfOZEB1@j72KtNx*1b~72$es%7xIi89T!V#1 U90mQV9FQ&oiV*6EfnQ+Y1F>XEbN~PV diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store deleted file mode 100644 index 0416f554c17bb6e217e8041041a918fd63f9caa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%SyvQ6rE|SO({Ya3c4F`Td*$+;wIGk14eYAQWH{YFlI`UnnfvOuRr9E_&we` zGXaZPi`aW%=G^B@=0N7b7~|t*&|}PIj9JhSIVu%`?#fWjBqMShBVG8B^uhY@7bf=C z0l&S@Bum)b&%b|v6sB3X`^jtd#?EfjYFcgU!F`gsn|awX9ec?gTGvuWeyMx@O*qS^ z_Wp&8GcSy1i7E(#8Km6bhH)VCv0TPMs%l*wuv%7YY9Fmuz0=XKBL@BMx+7L+{ccAL z2cz}6WgQ%!oL^0!qnB8|X+Am7tz^$&3Gbko<-EE{9LabNo-(`4A|wWg0b+m{*lGsM zv0$~gngv=sF+dDdF@XDnfQIN8EHtXE13J7uW4wWg0y@4W5QRaQZi= z7+jZwUzj|{V4+c$Gp=Taam>u+bO81@*IPOMjQqG RsvM9m0*Vmoh=E^V;0uBnNw)w1 diff --git a/src/main/java/org/.DS_Store b/src/main/java/org/.DS_Store deleted file mode 100644 index 4d6ab0285665acff3fd134756ae1489f5ca71f93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!Ab)$5S`SjTcpr~g5CmN3)Z$4#LH6k2VBvEO5J6bc6Hs9c54r%uy_3-f5h)` zCdrCY_25CI%)sPLCNl|nyJQjo5Zy_*4^RUD2bHi?!R8C0anc1TSr4Jmb7U}p2oh9( zA(|ckkpcR4Rk#BMF{JSE`}JW0Q7|13gG2=w^%4w|c$_sFucEY4UR_&v)}0OK#v7=q zm-*Rb-1SFS)H_!y2@2Z}F5+m~t8E^uH1p#$8tH^Mj4D6{-v;BikyDnSJ#=I_Phs{P^wp*R~yy9%_?j4==?vsa9JsDmF{(@Sn77KVrSg41bXU+&jT;VAp(>u}}LK#3}&aYw#FHY34X@yi~5Ntye`=)Wwx|r*bdzvq{?b z#}_y{RVohVeLpyhM)|O@d8CrekCM??Cq&^0LN3pvBvg4{O_DIxxt?)|ny3vMJJV@v zzt?TbPTQF^<@BKKG-bEbo6TxsYj^MPWOyGxBGP-vSD!!FVI<9*poL-VwK#2 zZ=N@gCnN@l0b*c<7_dj6sISnPX{p2jG4L}6@O+SC8|PXq44QPt^~~@cJ2SU06s~6nyVT)~y9TKx28e-0 z2FhmG!1{mu{ri70iAKZ#G4QV#;FW;XA4T^$sg~5*$=;%@mu~>?? bLA8KgVh7N*SQrEg2wem;4b%_=zskTnBLq!g diff --git a/src/main/java/org/jointheleague/Launcher.java b/src/main/java/org/jointheleague/Launcher.java index 55937e2e..17b44585 100644 --- a/src/main/java/org/jointheleague/Launcher.java +++ b/src/main/java/org/jointheleague/Launcher.java @@ -3,15 +3,16 @@ import org.jointheleague.discord_bot.DiscordBot; public class Launcher { - public static void main(String[] args) { + public static void main(String[] args) throws InterruptedException { //Initialize variables String channelName = System.getenv("CHANNEL_NAME"); String discordToken = System.getenv("DISCORD_TOKEN"); - boolean printDiscordInvite = false; + boolean printDiscordInvite = true; //Instantiate DiscordBot and connect DiscordBot discordBot = new DiscordBot(discordToken, channelName); discordBot.connect(printDiscordInvite); + } } diff --git a/src/main/java/org/jointheleague/api_wrapper/ReceivedMessage.java b/src/main/java/org/jointheleague/api_wrapper/ReceivedMessage.java new file mode 100644 index 00000000..03c76db1 --- /dev/null +++ b/src/main/java/org/jointheleague/api_wrapper/ReceivedMessage.java @@ -0,0 +1,27 @@ +package org.jointheleague.api_wrapper; + +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; + +public class ReceivedMessage { + + private MessageReceivedEvent event; + + public ReceivedMessage(MessageReceivedEvent event) { + this.event = event; + } + + public String getMessageContent() { + return this.event.getMessage().getContentStripped(); + } + + public void sendResponse(String message) { + this.event.getChannel().sendMessage(message).submit().join(); + } + + public Message sendResponse(MessageEmbed embed) { + return this.event.getChannel().sendMessageEmbeds(embed).submit().join(); + } + +} \ No newline at end of file diff --git a/src/main/java/org/jointheleague/discord_bot/DiscordBot.java b/src/main/java/org/jointheleague/discord_bot/DiscordBot.java index b7e94dd4..cefb5f79 100644 --- a/src/main/java/org/jointheleague/discord_bot/DiscordBot.java +++ b/src/main/java/org/jointheleague/discord_bot/DiscordBot.java @@ -1,18 +1,19 @@ package org.jointheleague.discord_bot; -import org.javacord.api.DiscordApi; -import org.javacord.api.DiscordApiBuilder; -import org.javacord.api.entity.intent.Intent; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.JDABuilder; +import net.dv8tion.jda.api.requests.GatewayIntent; +import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder; +import net.dv8tion.jda.api.utils.messages.MessageCreateData; + import org.jointheleague.features.abstract_classes.Feature; -import org.jointheleague.features.examples.first_features.WebSearch; -import org.jointheleague.features.examples.second_features.Encrypter; import org.jointheleague.features.examples.second_features.HighLowGame; import org.jointheleague.features.examples.third_features.CatFactsApi; -import org.jointheleague.features.examples.third_features.Game; import org.jointheleague.features.examples.third_features.NewsApi; import org.jointheleague.features.examples.first_features.CurrentTime; import org.jointheleague.features.examples.first_features.RandomNumber; import org.jointheleague.features.help_embed.HelpListener; +import org.jointheleague.features.student.first_feature.FeatureOne; public class DiscordBot { @@ -20,7 +21,7 @@ public class DiscordBot { private String channelName; - DiscordApi api; + JDA api; HelpListener helpListener; @@ -30,35 +31,40 @@ public DiscordBot(String token, String channelName) { helpListener = new HelpListener(channelName); } - public void connect(boolean printInvite) { + public void connect(boolean printInvite) throws InterruptedException { - api = new DiscordApiBuilder().setToken(token).addIntents(Intent.MESSAGE_CONTENT).login().join(); + api = JDABuilder.createDefault(token) + .enableIntents(GatewayIntent.MESSAGE_CONTENT) // enables explicit access to message.getContentDisplay() + .build(); + api.awaitReady(); //Print the URL to invite the bot if (printInvite) { - System.out.println("To authorize your bot, send your teacher this link: " + api.createBotInvite() + System.out.println("To authorize your bot, send your teacher this link: " + api.getInviteUrl() +"\n\tThis message can be disabled in org.jointheleague.Launcher.java"); } //Send bot connected message in channel - api.getServerTextChannelsByName(channelName).forEach(e -> e.sendMessage(api.getYourself().getName() + " has connected. Please try to keep it in one piece.")); + MessageCreateData botConnected = new MessageCreateBuilder() + .addContent(api.getSelfUser().getName() + " has connected") + .build(); + api.getTextChannelsByName(channelName, true).forEach(e -> { + e.sendMessage(botConnected).submit().join(); + }); //add help listener to bot - api.addMessageCreateListener(helpListener); + api.addEventListener(helpListener); //add features - addFeature(new RandomNumber(channelName)); + addFeature(new FeatureOne(channelName)); addFeature(new CurrentTime(channelName)); addFeature(new HighLowGame(channelName)); addFeature(new NewsApi(channelName)); addFeature(new CatFactsApi(channelName)); - addFeature(new WebSearch(channelName)); - addFeature(new Encrypter(channelName)); - addFeature(new Game(channelName)); } private void addFeature(Feature feature){ - api.addMessageCreateListener(feature); + api.addEventListener(feature); helpListener.addHelpEmbed(feature.getHelpEmbed()); } } diff --git a/src/main/java/org/jointheleague/features/.DS_Store b/src/main/java/org/jointheleague/features/.DS_Store deleted file mode 100644 index 4fee45cb35b16e201b9c6f40ed1b140fd7a2c719..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK-AcnS6i&A3QiiY#1-%P+J8(ZLh&QFq7qFriDzjxni(NC;%?e}Cdwn5a#OLvx zBo)ULyb^Kez{!`KpN4!XISFHod((c4u{vW+fFhP0Xuc5iqb^CwS`fMZ#)!piz|t^F zM@!LU_=^nS-U-;VCl;_F`?P;ytU~a;hNC!2C(Y&?FO@56>s3(|HF4wLtIVGSlWFP& z<0~AUD;0-DKL{_PLDs8po~UFJM9E;R6QceALar~Pq^~khO_P4AbA96wj&OSQo!P8) zaM)?cPP;j8$k|c5*^v94!};71Tf2M5XT67bn5bvNCWjwS%Z9}QUZAtIut$HK#45Q1 zUy)bD6A}Z&05Pya4A>)3)K+NCv{Yh%82A|jcs@u_MAu?&P#+!8;Pnyx6+{&1<68nz zT68Vu2EhZuO)8*C<@SleO*+`6jdLyL22DESdS>{JotfJg3fHrPUFvYgU4zsT1H`~0 z17$O;WBot<{{6q0L?dE=82DEV@JiS3daxv0TbCAxwN`@Of}&ttZtx=oI=U1?ESBPJ bP%U7W*a37c<_5t6LKgu|12x3JuQKos3KvaO diff --git a/src/main/java/org/jointheleague/features/abstract_classes/Feature.java b/src/main/java/org/jointheleague/features/abstract_classes/Feature.java index 016d2818..fc804e55 100644 --- a/src/main/java/org/jointheleague/features/abstract_classes/Feature.java +++ b/src/main/java/org/jointheleague/features/abstract_classes/Feature.java @@ -1,12 +1,13 @@ package org.jointheleague.features.abstract_classes; -import org.javacord.api.event.message.MessageCreateEvent; -import org.javacord.api.listener.message.MessageCreateListener; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; -import net.aksingh.owmjapis.api.APIException; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; -public abstract class Feature implements MessageCreateListener { +public abstract class Feature extends ListenerAdapter +{ protected String channelName; @@ -17,22 +18,16 @@ public Feature(String channelName) { } @Override - public void onMessageCreate(MessageCreateEvent event) { - event.getServerTextChannel().ifPresent(e -> { - if (e.getName().equals(channelName)) { - try { - handle(event); - } catch (APIException e1) { - e1.printStackTrace(); - } - } - }); + public void onMessageReceived(MessageReceivedEvent event) { + if (event.getChannel().getName().equals(channelName)) { + handle(new ReceivedMessage(event)); + } } public HelpEmbed getHelpEmbed() { return this.helpEmbed; } - public abstract void handle(MessageCreateEvent event) throws APIException; + public abstract void handle(ReceivedMessage event); } \ No newline at end of file diff --git a/src/main/java/org/jointheleague/features/examples/.DS_Store b/src/main/java/org/jointheleague/features/examples/.DS_Store deleted file mode 100644 index f0900f9198fff5011bbec694447f8b81f6cdcd4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKQA@)x5WZ|vJBG3c1$_(nI&gD35MRpFKVU^4RAx)77Hc!s&OMAl-}MjqNBlkB zC7C#;z6c`Y4ldv2a+i=VCD#Ce=nlgcKpg-aRKijfn=gdMN#~?wJ%mEf5ke1cAp#%r zxoCF$M+WHZ*6_6MA%+2bKEEOMBgleL)(;XDVBBlaPvR_ZHs3_4Tv=LPaaNp~bM4)$ zk(c}VFzfn*OX{5|l>}4U56LN}?rn1SChK=*@0C3Gzo2KCi}4gEgS zc!iJzZF)-(N{g<=!XS>I2$PCvQiXkD2$PO}Y2#drg+Y@JLa&VT*p-ESp$NS?`lSvB z;Tq(Y8DIux87P}>o$CL|_wWDNB 'Z') m -= 26; - op += m; - } else { - m = (char)(message.charAt(i)-'A'+shift.charAt(shift.length()-1)); - if(m > 'Z') m -= 26; - op += m; - } - } - } - return op; - } - -} diff --git a/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java b/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java index 321d8602..4e4d7b47 100644 --- a/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java +++ b/src/main/java/org/jointheleague/features/examples/second_features/HighLowGame.java @@ -1,15 +1,14 @@ package org.jointheleague.features.examples.second_features; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; -import java.util.Locale; import java.util.Random; public class HighLowGame extends Feature { - public final String COMMAND = "q!hl"; + public final String COMMAND = "!highLow"; private final Random random = new Random(); int numberToGuess; @@ -19,13 +18,13 @@ public HighLowGame(String channelName) { } @Override - public void handle(MessageCreateEvent event){ - String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); + public void handle(ReceivedMessage event){ + String messageContent = event.getMessageContent(); //start the game with the command if (messageContent.equals(COMMAND)) { numberToGuess = random.nextInt(100) + 1; - event.getChannel().sendMessage("I have picked a number between 1 and 100. Guess by using e.g. !highLow 5"); + event.sendResponse("I have picked a number between 1 and 100. Guess by using e.g. !highLow 5"); } //check a guess else if (messageContent.contains(COMMAND) @@ -35,7 +34,7 @@ else if (messageContent.contains(COMMAND) //check if the game has been started if(numberToGuess == 0){ //tell them to start the game first - event.getChannel().sendMessage("Please start the game first using just the command"); + event.sendResponse("Please start the game first using just the command"); return; } @@ -49,19 +48,19 @@ else if (messageContent.contains(COMMAND) } catch(NumberFormatException e){ //tell them to format their guess properly - event.getChannel().sendMessage("Please format your guess like this: " + COMMAND + " 5"); + event.sendResponse("Please format your guess like this: " + COMMAND + " 5"); return; } if (guess < numberToGuess) { //tell them it's too low - event.getChannel().sendMessage(guess + " is too low. Guess again!"); + event.sendResponse(guess + " is too low. Guess again!"); } else if (guess > numberToGuess) { //tell them it's too high - event.getChannel().sendMessage(guess + " is too high. Guess again!"); + event.sendResponse(guess + " is too high. Guess again!"); } else { //they got it correct - event.getChannel().sendMessage("Correct! The number I picked was " + numberToGuess); + event.sendResponse("Correct! The number I picked was " + numberToGuess); //set numberToGuess back to 0 numberToGuess = 0; } diff --git a/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java b/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java index 28fbae29..95c6b0b9 100644 --- a/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java +++ b/src/main/java/org/jointheleague/features/examples/third_features/CatFactsApi.java @@ -1,18 +1,16 @@ package org.jointheleague.features.examples.third_features; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.examples.third_features.plain_old_java_objects.cat_facts_api.CatWrapper; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; -import java.util.Locale; - //A swagger page for this very simple API can be found here: https://app.swaggerhub.com/apis-docs/whiterabbit8/meowfacts/1.0.0 public class CatFactsApi extends Feature { - public final String COMMAND = "q!catfactapi"; + public final String COMMAND = "!catFactApi"; private WebClient webClient; private static final String baseUrl = "https://meowfacts.herokuapp.com/"; @@ -29,11 +27,11 @@ public CatFactsApi(String channelName) { } @Override - public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); + public void handle(ReceivedMessage event) { + String messageContent = event.getMessageContent(); if (messageContent.startsWith(COMMAND)) { String catFact = getCatFact(); - event.getChannel().sendMessage(catFact); + event.sendResponse(catFact); } } diff --git a/src/main/java/org/jointheleague/features/examples/third_features/Game.java b/src/main/java/org/jointheleague/features/examples/third_features/Game.java deleted file mode 100644 index 40ffd6f4..00000000 --- a/src/main/java/org/jointheleague/features/examples/third_features/Game.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.jointheleague.features.examples.third_features; - -import org.javacord.api.event.message.MessageCreateEvent; -import org.jointheleague.features.abstract_classes.Feature; -import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; - -import java.io.*; -import java.util.ArrayList; -import java.util.Locale; -import java.util.Random; - -public class Game extends Feature { - - public final String COMMAND = "q!question"; - - public static int progress; - - public static BufferedReader br; - - private static String question; - private static String answer; - private static ArrayList questions; - Random random; - - private static int score; - private static int r; - - private static int numqtn = 10; - - public Game(String channelName) { - super(channelName); - - progress = -1; - //Create a help embed to describe feature when !help command is sent - question = "Error: Question not found"; - score = 0; - r = -1; - random = new Random(); - helpEmbed = new HelpEmbed( - COMMAND, - "Give a brief description of your feature here, including how the user interacts with it" - ); - } - - private void startGame(MessageCreateEvent event) { - progress = 1; - score = 0; - questions = new ArrayList(); - try { - br = new BufferedReader(new FileReader("src/main/java/org/jointheleague/features/examples/third_features/questions.txt")); - String line = br.readLine(); - while(line != null){ - questions.add(line); - line = br.readLine(); - } - br.close(); - } catch (IOException e) { - e.printStackTrace(); - } - event.getChannel().sendMessage("A game has been started"); - event.getChannel().sendMessage(getQuestion(event)); - } - - private void endGame(MessageCreateEvent event) { - event.getChannel().sendMessage("You answered " + score + " out of " + numqtn + " questions correctly."); - try { - br.close(); - } catch (IOException e) { - e.printStackTrace(); - } - progress = 0; - r = -1; - } - - private String getQuestion(MessageCreateEvent event) { - int r = random.nextInt(questions.size()); - question = questions.get(r); - questions.remove(r); - answer = question.substring(question.indexOf('/')+1); - question = question.substring(0, question.indexOf('/')); - return question; - } - - @Override - public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); - //event.getChannel().sendMessage("Question command received"); just spammed the channel - if (messageContent.startsWith(COMMAND)) { - startGame(event); - } else if (messageContent.startsWith("q!answer")) { - if (progress>0 && progress<=numqtn) { - messageContent = messageContent.substring(messageContent.indexOf(' ') + 1); - if (messageContent.equals(answer.toLowerCase(Locale.ROOT))) { - score++; - event.getChannel().sendMessage("Correct!"); - } else { - event.getChannel().sendMessage("Incorrect! The correct answer was: " + answer); - } - progress++; - event.getChannel().sendMessage(getQuestion(event)); - } - } - if (progress > numqtn) { - endGame(event); - } - } - -} diff --git a/src/main/java/org/jointheleague/features/examples/third_features/MemoryGame.java b/src/main/java/org/jointheleague/features/examples/third_features/MemoryGame.java deleted file mode 100644 index da1f2b28..00000000 --- a/src/main/java/org/jointheleague/features/examples/third_features/MemoryGame.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.jointheleague.features.examples.third_features; - -import org.javacord.api.event.message.MessageCreateEvent; -import org.jointheleague.features.abstract_classes.Feature; -import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; - -import java.util.Locale; - -public class MemoryGame extends Feature { - - public final String COMMAND = "q!command"; - - public MemoryGame(String channelName) { - super(channelName); - - //Create a help embed to describe feature when !help command is sent - helpEmbed = new HelpEmbed( - COMMAND, - "Give a brief description of your feature here, including how the user interacts with it" - ); - } - - @Override - public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); - if (messageContent.startsWith(COMMAND)) { - //generate pattern - event.getChannel().sendMessage("Pattern"); - //edit message to hide pattern: - //event.getChannel().getMessages(1).get().getNewestMessage() - //ask for pattern - //listen for input - //issue score - } - } - - -} diff --git a/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java b/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java index 3865e959..350bd175 100644 --- a/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java +++ b/src/main/java/org/jointheleague/features/examples/third_features/NewsApi.java @@ -1,6 +1,6 @@ package org.jointheleague.features.examples.third_features; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.examples.third_features.plain_old_java_objects.news_api.ApiExampleWrapper; import org.jointheleague.features.examples.third_features.plain_old_java_objects.news_api.Article; @@ -8,12 +8,10 @@ import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; -import java.util.Locale; - //Documentation for the API can be found here: https://newsapi.org/docs/get-started public class NewsApi extends Feature { - public final String COMMAND = "q!newsapi"; + public final String COMMAND = "!newsApi"; private WebClient webClient; private static final String baseUrl = "http://newsapi.org/v2/everything"; @@ -31,18 +29,18 @@ public NewsApi(String channelName) { } @Override - public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); + public void handle(ReceivedMessage event) { + String messageContent = event.getMessageContent(); if (messageContent.startsWith(COMMAND)) { messageContent = messageContent .replace(COMMAND, "") .replace(" " , ""); if (messageContent.equals("")) { - event.getChannel().sendMessage("Please put a topic after the command (e.g. " + COMMAND + " cats)"); + event.sendResponse("Please put a topic after the command (e.g. " + COMMAND + " cats)"); } else{ String story = findStory(messageContent); - event.getChannel().sendMessage(story); + event.sendResponse(story); } } } diff --git a/src/main/java/org/jointheleague/features/examples/third_features/QuizGame.java b/src/main/java/org/jointheleague/features/examples/third_features/QuizGame.java index cfbb1258..2dc45d26 100644 --- a/src/main/java/org/jointheleague/features/examples/third_features/QuizGame.java +++ b/src/main/java/org/jointheleague/features/examples/third_features/QuizGame.java @@ -1,6 +1,6 @@ package org.jointheleague.features.examples.third_features; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; @@ -43,7 +43,7 @@ public QuizGame(String channelName) { ); } - private void startGame(MessageCreateEvent event) { + private void startGame(ReceivedMessage event) { progress = 1; score = 0; questions = new ArrayList(); @@ -58,12 +58,12 @@ private void startGame(MessageCreateEvent event) { } catch (IOException e) { e.printStackTrace(); } - event.getChannel().sendMessage("A game has been started"); - event.getChannel().sendMessage(getQuestion(event)); + event.sendResponse("A game has been started"); + event.sendResponse(getQuestion(event)); } - private void endGame(MessageCreateEvent event) { - event.getChannel().sendMessage("You answered " + score + " out of " + numqtn + " questions correctly."); + private void endGame(ReceivedMessage event) { + event.sendResponse("You answered " + score + " out of " + numqtn + " questions correctly."); try { br.close(); } catch (IOException e) { @@ -73,7 +73,7 @@ private void endGame(MessageCreateEvent event) { r = -1; } - private String getQuestion(MessageCreateEvent event) { + private String getQuestion(ReceivedMessage event) { int r = random.nextInt(questions.size()); question = questions.get(r); questions.remove(r); @@ -83,7 +83,7 @@ private String getQuestion(MessageCreateEvent event) { } @Override - public void handle(MessageCreateEvent event) { + public void handle(ReceivedMessage event) { String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); //event.getChannel().sendMessage("Question command received"); just spammed the channel if (messageContent.startsWith(COMMAND)) { @@ -93,12 +93,12 @@ public void handle(MessageCreateEvent event) { messageContent = messageContent.substring(messageContent.indexOf(' ') + 1); if (messageContent.equals(answer.toLowerCase(Locale.ROOT))) { score++; - event.getChannel().sendMessage("Correct!"); + event.sendResponse("Correct!"); } else { - event.getChannel().sendMessage("Incorrect! The correct answer was: " + answer); + event.sendResponse("Incorrect! The correct answer was: " + answer); } progress++; - event.getChannel().sendMessage(getQuestion(event)); + event.sendResponse(getQuestion(event)); } } if (progress > numqtn) { diff --git a/src/main/java/org/jointheleague/features/help_embed/HelpListener.java b/src/main/java/org/jointheleague/features/help_embed/HelpListener.java index ce31d434..2a3f61d9 100644 --- a/src/main/java/org/jointheleague/features/help_embed/HelpListener.java +++ b/src/main/java/org/jointheleague/features/help_embed/HelpListener.java @@ -3,8 +3,8 @@ import java.util.ArrayList; import java.util.List; -import org.javacord.api.event.message.MessageCreateEvent; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; public class HelpListener extends Feature { @@ -17,10 +17,10 @@ public HelpListener(String channelName) { } @Override - public void handle(MessageCreateEvent event) { + public void handle(ReceivedMessage event) { if(event.getMessageContent().equalsIgnoreCase(COMMAND)) { for(HelpEmbed helpEmbed : helpEmbeds) { - event.getChannel().sendMessage(helpEmbed.getEmbed()); + event.sendResponse(helpEmbed.getEmbed()); } } } diff --git a/src/main/java/org/jointheleague/features/help_embed/plain_old_java_objects/help_embed/HelpEmbed.java b/src/main/java/org/jointheleague/features/help_embed/plain_old_java_objects/help_embed/HelpEmbed.java index 50e902ac..cba8ca96 100644 --- a/src/main/java/org/jointheleague/features/help_embed/plain_old_java_objects/help_embed/HelpEmbed.java +++ b/src/main/java/org/jointheleague/features/help_embed/plain_old_java_objects/help_embed/HelpEmbed.java @@ -1,6 +1,8 @@ package org.jointheleague.features.help_embed.plain_old_java_objects.help_embed; -import org.javacord.api.entity.message.embed.EmbedBuilder; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.entities.MessageEmbed; + import java.awt.*; public class HelpEmbed { @@ -28,11 +30,12 @@ public String getDescription() { return description; } - public EmbedBuilder getEmbed() { - EmbedBuilder embed = new EmbedBuilder(); - embed.setColor(this.color); - embed.setTitle(this.command); - embed.setDescription(this.description); + public MessageEmbed getEmbed() { + MessageEmbed embed = new EmbedBuilder() + .setColor(this.color) + .setTitle(this.command) + .setDescription(this.description) + .build(); return embed; } diff --git a/src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java b/src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java new file mode 100644 index 00000000..8ab6ffc7 --- /dev/null +++ b/src/main/java/org/jointheleague/features/student/first_feature/FeatureOne.java @@ -0,0 +1,48 @@ +package org.jointheleague.features.student.first_feature; + +import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; +import org.jointheleague.api_wrapper.ReceivedMessage; +import org.jointheleague.features.abstract_classes.Feature; +import org.jointheleague.features.templates.FeatureTemplate; + +import java.util.Random; + +public class FeatureOne extends FeatureTemplate { + public final String COMMAND = "!joke"; + + public FeatureOne(String channelName) { + super(channelName); + + //Create a help embed to describe feature when !help command is sent + helpEmbed = new HelpEmbed( + COMMAND, + "This command prints cheesy jokes." + ); + } +//IGNORE + @Override + public void handle(ReceivedMessage event) { + String messageContent = event.getMessageContent(); + if (messageContent.startsWith(COMMAND)) { + //respond to message here + Random ran = new Random(); + int ranInt = ran.nextInt(5); + + switch(ranInt){ + case 0:event.sendResponse("What’s the best thing about Switzerland? \n \n I don’t know, but the flag is a big plus."); + break; + case 1:event.sendResponse("I invented a new word! \n \n Plagiarism!"); + break; + case 2:event.sendResponse("Hear about the new restaurant called Karma? \n \n There’s no menu: You get what you deserve."); + break; + case 3:event.sendResponse("Did you hear about the claustrophobic astronaut? \n \n He just needed a little space."); + break; + case 4:event.sendResponse("Why don’t scientists trust atoms? \n \n Because they make up everything."); + break; + default:event.sendResponse("What’s the different between a cat and a comma? \n \n A cat has claws at the end of paws; A comma is a pause at the end of a clause. "); + break; + } + + } + } +} diff --git a/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java b/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java index 8bd6b5d1..3884e21f 100644 --- a/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java +++ b/src/main/java/org/jointheleague/features/templates/FeatureTemplate.java @@ -1,14 +1,12 @@ package org.jointheleague.features.templates; -import org.javacord.api.event.message.MessageCreateEvent; +import org.jointheleague.api_wrapper.ReceivedMessage; import org.jointheleague.features.abstract_classes.Feature; import org.jointheleague.features.help_embed.plain_old_java_objects.help_embed.HelpEmbed; -import java.util.Locale; - public class FeatureTemplate extends Feature { - public final String COMMAND = "q!command"; + public final String COMMAND = "!command"; public FeatureTemplate(String channelName) { super(channelName); @@ -21,11 +19,11 @@ public FeatureTemplate(String channelName) { } @Override - public void handle(MessageCreateEvent event) { - String messageContent = event.getMessageContent().toLowerCase(Locale.ROOT); + public void handle(ReceivedMessage event) { + String messageContent = event.getMessageContent(); if (messageContent.startsWith(COMMAND)) { //respond to message here - event.getChannel().sendMessage("Sending a message to the channel"); + event.sendResponse("Sending a message to the channel"); } } diff --git a/src/test/.DS_Store b/src/test/.DS_Store deleted file mode 100644 index 364fa2b213204daaae896e54cdfc51d34ee0567d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!EVz)5S>i|byOkc08%eVmbj)NfhcX&iwWVt6(cwll-f-M2G^U$PE$3C zo9d%D)iGioP~`42z-w2dZxqofMSrc|EA+K4jF^e6^5S_uaqIjmo}@`$wA;T`rCNLN zaKqd1Hoec`S3M7lsF>ybXnMfWd#%&>%8%j?$#_0&JbtaSB1*FH)D$G6F;YH#OtO)l z_w_6r<)${Y9bVn54;x#HMX%lTJKdemvgt4OULfec>@Amd@5!_0`|pO|)8kD4u+%Gj zmqs2ryn>%_R`WRxr&+4AFKFX@pH65-W6G(ZgfwOFTJX=HE%-5QQyaDmyGuvZgKpCv z?EuedK>0e4>M6$jlShOi!hkR!4BRRM?%(Kb-s)S(!-WB1;4U&?&qDT06yOCpE-jj0 z2aLG_0Qnec1im@?1AT4)1`bP$Xn`nO3bdulT``oqIVf9>{=nsz7Hv5x^JI+Uo~+yr zMY)TI@=ZFaz@k`TKp0qOplZVg@BeT9eg9uCl1La32JRIDsx}A*eN4&it=A^Ud#w*W qgtBm6X>nBo$85#O<*j%NY6R^*JHWtUX%Q_DIS3dU#0Ufbm4Qns?`cc` diff --git a/src/test/java/.DS_Store b/src/test/java/.DS_Store deleted file mode 100644 index 293968b8a2990c05217c21094394813bcd27a481..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO-lnY5KY=@w-liVg&r5Y7Hzdu#LHUi!K*8JP^n#8>f*X7{csPZuxI^4{u2L= zzDZJ{R4*O`%M46jGMULTFH4dULdfQ%TN9!rgm9pQnF5+`gyu9kR;xV8F0ZB}uohkF>*_ZzcW!P(m0JvwhcMo+PNF~m#!lUg<`&fygu zo6WO7j3X8IVVQf+y%?DRW`G%3T?Xul=M+~rMb3;FU{?|_2FaylMYBC^mEx*-7ZuV|n%98F{7kURJA-~k% kR|q=#Duypz#bu}#*j?%XJ&UP9SRnim&@^zv4E!krpO7C?HN-3w`-`|W@l)TRLr#RCwqWBXzgFg9T1lGaKc)h%FnYZyx zmM)84@4Kp0YbOutUfpYY7vWs5!y+nH%TcuWz*ldz&f=XN#qZK&J!wCDrSl?6^JHNX z(rJQ_kMGlbs@EgE%BM?{8`=r4;WZ}h&So?0b^ZR}w7>28n-|Y;F?c@QZX4dC$4_6r znOtX|bN$uqffT-7BQ1wJ_y*$uH($a?#{|}D9YR&>-#30RA5m?VL%x8lL7AiAZ@Py=YQ}2O^^)2fH3fXGN5YX za6H1^Ty5RkCD&RXdI@FWxYFXU6d0xyBbG~X2WkXfgc5S>i|U8|~;14unu;u^IHty&>2ZdwjpF)D|GQkw*@YP?l!H-{*a&*cyC zOZYqRW_OK>QjVaunvrJTcs^|JTWi-tL~2}5M?`%h(on`ufZ-P5IP02pyr&CP_8v9O zX-4Ji+s$|wv71Aj8Wy&t5{=l`p}_y0CY24O%Lc$f^R-bs8i#@zhb yx;9HbYeVQcl!fyehrdf;*rOP^d=zg(t-v3$0gOC04&i~wkAS5?24Ud8GVlw)xmo=H diff --git a/src/test/java/org/jointheleague/features/.DS_Store b/src/test/java/org/jointheleague/features/.DS_Store deleted file mode 100644 index d395b7601be4874160bfb938480d471c215407cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKL2uJA6n^eH<}gj_fk`_?+I3Bl8}l;OXI3Z>7=Ss&hTTn z@=N$T@IBjuPTh_}4812kf6w;&;^wn!$3&$1)2v6-AtDWDYy~K8Fz#nxv6gRH2P*rF zF%>kV>UCj0u4GHYzo-DuoyMG9QbHqIn!mI#Df)O}ynsLcX${d0`RS}0`~2_exX7!z z+x?+hYwh(18+t=;>i6-vnZ>fIDhs8m4l~;i$$QfclV#43@(aM zX};KBP73SP+Lp&F_=;dfhtKh(EKKP!$seL;+FYjur5Gq29dXapdu$fGBYP6yW_Kgfm7S8;5r5Kw+-{ zz&4t#A?8m;=7b(2kBvk0z?7o`9aZ@&hH`YYhdwXz*f?}_QvULx{K(4RP?Q}V&kt=n zsmP&}qJSuHU4b=M?eO{k>h}Bpb&}LX0a4(;Qb4tj$?Q8MxoO#Xkzb4&!7GLKD+tc*f9~Q!8qv?b%@A=Gd5Z%{$SkCzF-X(Sp_OH zMnyyVL@7m7Eo4jJE-Julw}CawXhbDe?brH^5lN|hnd_4{*D><=PjU!<`rR06L=VAA z>4Y>Dl-$HtkAGutV8$~u_s!g^+i>GadG3Do*Z4fo%Bt7>BbYuuwk|O2(+pI|RWT3}IQW|b(JG_?H z8g{m()4g8T@9*ySXI+1Ku!F|#v%T4@cpLeM~ z7vZSLb#aQk`51GqpeP^;hyu$MaJz=rUY;hsqJSuH4;A43!G|*j4r_~M>p)?y0Kg`~ z#!%