super_hacker 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1d5775533007f1571cf75053ecd5c114ab3a8e1fddb4c960b8626efa2d603bdf
4
+ data.tar.gz: e88f266e6e1f0c4d934891c6ff2379636b018ab9da526dc6ad16e4f93a509694
5
+ SHA512:
6
+ metadata.gz: c4d381d7ae09a78f7f7b97b42aed4e28b3d1b7707085afc45830281d7deb2d85c292bb29ec5671eb489061445b38efb7a1fa48aa8690b0cbf14070b2375f0912
7
+ data.tar.gz: ad8c901b43300474a62e9283a5a61325f6c006a3d35dddb0a29ac65c15a27cdecc3582cce01bda9fef29d991bc095107559fbb4c1cfa64ac65b8fa1f0fa7bdee
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.5.1
7
+ before_install: gem install bundler -v 1.16.4
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at fuse.kanrinin@gmail.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in super_hacker.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,28 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ super_hacker (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ mini_portile2 (2.3.0)
10
+ minitest (5.11.3)
11
+ nokogiri (1.8.4-x86-mingw32)
12
+ mini_portile2 (~> 2.3.0)
13
+ rake (10.5.0)
14
+ thor (0.20.0)
15
+
16
+ PLATFORMS
17
+ x86-mingw32
18
+
19
+ DEPENDENCIES
20
+ bundler (~> 1.16)
21
+ minitest (~> 5.0)
22
+ nokogiri
23
+ rake (~> 10.0)
24
+ super_hacker!
25
+ thor
26
+
27
+ BUNDLED WITH
28
+ 1.16.4
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 kouta
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # SuperHacker
2
+ このgemはスーパーハカーになりきれるお遊びgemです。仕事の息抜きに使ってください。
3
+
4
+ ## Installation
5
+
6
+ Add this line to your application's Gemfile:
7
+
8
+ ```ruby
9
+ gem 'super_hacker'
10
+ ```
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install super_hacker
19
+
20
+ ## License
21
+
22
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
23
+
24
+ ## Code of Conduct
25
+
26
+ Everyone interacting in the SuperHacker project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/koutakun/super_hacker/blob/master/CODE_OF_CONDUCT.md).
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "super_hacker"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/csv/download.csv ADDED
@@ -0,0 +1,202 @@
1
+ text
2
+ WVMKZUBFHW_CPJBZFAPYYAEMVPEJHLCTYWCXPXBCNWAHMBDZERDPZVTWEHKUVFWFKBVSDBNYTUDTUTYCMLDQHSCYPE
3
+ BTTFWAXUTURXDATN__XURXYDTDRMULSZLMWMBXRRQNMWTGYL_JWZYHYYPRTHUZNJJQFFLWRJGAXWGQEJAHDFBHEZGP
4
+ DZMVBDXYMKEGAGYCVHPULYAFHR_DDDHNTBZGUNYRBBPXK_BNAADDNGLPGXPKAFAJ_NWTKDN_YFXKHQSGUULYMUPYBW
5
+ CNWMEYEMRFETFKHJEWHGHWAFMWRCKFKVCRBLUWUQBGMZLTWDFBXZLQQHTKARBPSTTLGFUSPBTFWFMEQMHXFEJCPLRF
6
+ VBGHXWBDCLYHKTGVBLXYRAWQKZALXYDJACZHPUAGMXZWNTTCNQFAURTDCTZRZZBPHV_SKPQTHFWHHSRUV_LLYVGPTS
7
+ ZHRJBYYTMXDSHDDUXFYMPVTQGSYDDXKEEXNTYPUSN_FPWLJNGABYRHXDMK_NVWYXGGNVHHPM_JPCHNHYAZWPGENUKE
8
+ W_UQXPFPZXSLJCUTYEXKFUBEYDWKUYTTXLNESTPGTPUR_DNLXKCDXHTJCRNKC__PKRNMRLQHAQFDTHRDAKJTVKHC_F
9
+ LCYPG_MTJM_FMPHZXSAKGXVHFESANFTETCGNLTLXFCGKRJNDCTQJMELS_YCHLXPERFKRSNBQUTAWZQVPSXMTWVBLZN
10
+ NZHCZR_JHWVSULTNKXDGLFAFEFSYNQTFJTTYJXTYAKJPWUJDBFKJBQWYEVF_XTTMSULCJUBHAK_XJGYFN_LNMNUQJM
11
+ HRUHNQYZGYQJWZEBJAVCAPDFJHHQAEWAPRQ_CVTXXQEQMPCBDCCNVWUUFTTNXYPSPDUMFNPWVQVXTWWWDFCUYTNHLJ
12
+ MNUULQMATFVQCXBPCKZLWBYFQHAPLMPJMNKWLQSGEGZHEEXED_WLRWVXKWFKNAALSUAFTEMXGNVYVDTXZZEVTDKLXJ
13
+ CMFK_YUE_NELANFXCWPMRZ_ZSUPGLPJJTJTZ_VETSNYTVNYPEDJVYBZYXXS_DTBFXJFV_XLXYGXBNCEWQ_FXFXNLHB
14
+ LDYBWPVSKLBCNKQAWNCUGRVHSSRDCUUMNWPPTKYMUXULBLZFDY_KFECZAMFVYEGB_YTMXYWHZHRKPLQWDRGJDHFUEU
15
+ CTWTCJHJDUTZRBPQWAYQUJCYM_QLAFQWLNNKTPDNZADLLC_EXNJG_QXLATQVFXRVZQT_T_JWRVFFDKNYYHYYGSJTR_
16
+ AYDKCTUQJ_NCJUCMTWKNGFAPVQDBEHRSQKFNXFFDYHJLDRVDBDWWEBNMLNSUR_YNDHZSJXTYYEBFJRLRTJPHEMBZU_
17
+ MNMCXSMGCCJEVQJTMKZSW_F_XQ_QJTUAEKEKKJPS_CCSQVFPCREJXHYSEXKUJFKZJWLZFAHJJRAZWTJMFZDQWEQPDA
18
+ ETVYBKNSALGEUKRUUHQGZ_RTJAJFTBFFPTVWWBYLYLNVTQC_SP_RRMSWFPQLELGATDKMTKFFSMKMSSYBVPNTBCLLJK
19
+ CKCTJARCFCUMDSLVGHTMCVHRHHHRDTVZUSEKAWRABVSDSSWQDKCZUAGXEJPAMJFYKTNPSVCJWWTMLNHRFSCUBDUNQL
20
+ MQ_CZYWYSL_THXBRCZXFBZMDRZKSXSXRJDYXVVGSX_BSVLBPJQCKZUAXXHDXRRDRQZUZYFB_KNHSPJPSLJXYPYHKWR
21
+ _WMQEFWECWQZANDFVEMSTTXSGDHDAKYPWURFRXRJWEVLAXTCYEFSFVNKFTFEFCMQSHDMVUAUYHQFFPARBHDMEQDMBT
22
+ VLWJAUWJXZEBAYTVSKQB_SWVYSHACHVZHMBMDVRWZGBNPWHSRAURTJCUMK_QPCCJDKMKFWSVNJSBDGWWBULGDGWCY_
23
+ SDPGSD_WKDGDNZLHEJTWEVT_JCEHMRFLVAGGYVUUJC_JXYVWQUWHKYKXJKKYFXLLKHSMSACZJWBXGKDTHGNPPUZCBT
24
+ RFGFGSFVCG_FJLCTHTETGSSMMQTZXBESGNCTHRKEALPQNGVZYTWPKDBSJPTMDXRAAGHBUXLNBN_TMTWWLTCYCRDR_T
25
+ LZQAXDZUPLPCFBKQBWJKUT_PMFH_LFUAYWMYZZFLSJGVJYQEYTWYPUDBVZUBEUFFRHVGPHWQHLGJQFLEVEXVTHCKEU
26
+ HKRAKKECNUBRXUGKRGWLUFZAJG_UJR_ZCNKLSQKDSGJDJPULFHNWRDLWCXXLXDKALUKRHRLEKUPKBFDMVYN_ZPJYVW
27
+ PSTNMJLAUZJKG_YL_DXUWKAYBYLSMREBWA_LVHHQLWLPVTGMRAYHHCVYHBSKLJNBLVQPLJXJTUWWPVAQWZDSPVBGMK
28
+ XPVYULHHYVPUCMHGJNCYAGXPKSSAGZSFPCCVMFGAL_KYGTSNSRDYQRGWWWQZJRCUBCUXLDMAPTVQ_JLRJGXAHVJYS_
29
+ HDATVPVBNWQGSHBQFVZLNCFVJUYKFUDXBYZXAPJHKY_T_XSUGHNUDTSAFUTGMYLD_BZFJMQXWPEZJCQUNCYNNFFDJG
30
+ RXXSCWTEJEVSJADNH_WH_VEFN_LCZZMBEVTVNRVJBXB_CVQSVEGLGA_VJHMXDSFBELSRSQHEEDBHMRLBWWBSVTPDDS
31
+ MBBWHHVPYPYHEV_JAWMLVFFQDWVYKPGYBJRGGJXUUWKXENKQDNRSQKFQAD_GJPHKXEETAPU_QZYFJYKXVHATYRTHDX
32
+ TRNCMKPKVVEMPKMHBCBRGJGXCHNTGELNBCPSZXTEXJMYNPVLMTNABYEXDDKJSCWTFPQLSKPPQKETJFYHBUJABUGRXD
33
+ VACKGWLETCDWF_UJEQG_RNZBU_AZVNUDESEWNAERSN_AG_NXNYATJNEYHGVQQT_HQPMDNJDJKTBBLTE_JWVCYH_XYX
34
+ SLNUSSYDKUQBFCRDR_VBFQAZ_PFXSBWKAJMGGVYJMKCZPDMHCQEVJXFDDGCLSEBGSEFPTMNMKQGCHK_DT_WZGJJ_FN
35
+ VQSACUKPHMHYLMLYRMTBUGUDK_KHRAGPLW_PTERZA_LZEMZQRZPNLUTFKRRUWDUVVEJM_YYQMJNKKBCRNLKSDWEZQG
36
+ BPXQ_ZJMMPTJLCPLYVQULVXZZKFDQLDUDQJRBDVAHFBXUMDDWBFXADEFALNYLSSEMNRSDBCPCEFCHXJWVQEAMSRCYR
37
+ ANRWUMYVQNHWAXADRMFBPSEPPDEG_HGLJDPTWJZNUCKRUMQG_LVNXGNYWDRXWHMRBBMSGTUEMPVFJ_SFDDFSLBPNMH
38
+ YASMHPJGJUXHNPELFTHXPAQNJWQ_EHUBPLRDGNGMARKLCBXRADVHDXSWKMSWEWCNBAW_DSJGDHVJGSLLWAA_LARWQE
39
+ CFAYSLCCQSHYZMEXHKKHNVTEPVHGDFCQGYAGJYKVYHDNPSUYHDCNBJPFGEHMFRSHXVV_EXCVFNHPLYHCCADQHJAKPB
40
+ UKYELHRHHFZNEKFJ_GW_XGEYZGSEW_GUAHRKVWZPXBLEXPUKEDKQHXRNVYUGHESQGZQPGJVUTVSCHQGCVWPPQVDNTV
41
+ UEPTGYTJNSFRDGXAZFMRYNVXXYSJ_JNHPAWLSPDTKWZVGPJFXLCZKLJEKQGFRC_AGQMBCJKRVDKVFUQNXKTVJSVP_P
42
+ CACXHATH_YGQJZEVBTB_LHGX_GRVVVQEPXL_ZPBXWKSMYEPBDPQCASHBBXAGARSAAYSFNLRGMYHFDKJNGRRUTJ_ZCM
43
+ VWMTJHQQUM_PUXPL_MAXKTNTZMQEYUASYTY_VFQYEMJASBAENBUBNLPTPQUBVPDGVQCMM_VLMFGWWHEMEG_NVHLBQS
44
+ VJZYM___FGKNWKNCWRWHGDYSQUTBYSAHVDRXNRGMASJYNHNZFKZVNPDXCMZABLNPDMGNTBPQBFEPCBCRX_NFQBEHHN
45
+ VHYPAZMQJEUCLEVHBDCCVXEXPQHZ_XTCSJ_KBBATUNGAMT_TPCYFQJVLDRVZZLRGXYWYHLHSXLFSDXFXZEGUC_MPRF
46
+ DA_KFXSSYWWCD_AUFVFKSGKFQYAVTZEMLGAVXELCWHY_XAFFANHVGECERXMLSL_UXGWYTJCBMKNFDEGDYEPMNUNNRT
47
+ CXVJDMWFNJFTERH_YMVVGAZKLYNDLNLKLSCRHUVL_ZMSHNMLMRHML_KFYDSNEADLCVAAM_ADR_XDTY_UGEHJKUDZMC
48
+ TWUMVRBRRBYEMFJEZJPZDUCUUCPMTTVKFHYXNMKQWJPHEACEQPULSFCTZELNTS_DTWGJVQXNRFS_X_CS_ZSEYHWUSM
49
+ NTEDRAVDNPF_WTQZPZFNUUPRLSKDBNNVELMPLKNAGSGFAEHKUGHS_RDMFM_L_GXATVUTQQDTLHHPACTYVLQACCLEBU
50
+ GFCTCBTBFNUNQAZVJNXSCALKCHTYLPLSWXJRWBQAYRVDDNFSLBABMFXDKGPYNNSXXZJQYZDTDUFMQXULVBSZQKEWGJ
51
+ KMEJASHSMCMBRUSWAHCZMMYXC_RQUPTRRKNFPSMWGZNCWJLQRSDUQBCTTZKJYPKLWEHHQWJPRRRZE_XRDWGBSZKBBT
52
+ AJMPFGNRAKEZFTFVECMLEGQU_ESVFWKXPRVQXPKAPJBWYQYNUAMTTAJYM_UCDFJSNZNE_JXP_UKQPSCFXUSHPF_YFJ
53
+ KDEBYUWCTVMGMFHKJWZUMSKSNELXCL_BKKQE_XWEZSQEWJNELXCUGZTQUMGSDHCSQUGLXEVQVY_DF_NVLVXDDUSWRN
54
+ MNYWE__NWCENJEUHNBHJWRATNETKTUUQABRBTTTGLMJGLLGWCRLDWPPXFJFAHCBMUSVQMNTVQAUGNF_FPCMUXCXRWZ
55
+ NUUARETHSYDGVUPVCDVZREXBTJZGTPLWPZHVAUAKKUMTRENHCVUETUZKRYGX_N_GQQTEZCJWYVZQGGPTFHHRUDXYVH
56
+ JPMMAWWMXNNDYPF_VRMJNNHCRXYREKGWYCXWMRRNAPMYMB__PGBKJKTLNXSKCHKKHVWY_LFGGVBLRKAPDTGENTPWFY
57
+ SYPSDUCSJFHADFGWFPZE_HGWDLABPMEVKN_XXLXBNFHVAHJACXQGPSFAQFGRUBWSQQPQDAWCFDLFCLCDYNVCKSKZCR
58
+ RK_XNHXPLRRUKGMXZVAXARDQTXQH_NRWUHH_SQPCXUVQG_PTDSNXSLFYGP_UKTFUVH_DTTMTLLKQDMSFYVMJDTPWFK
59
+ CXYEYZJCMLGRVMMAJBNJXZVCLKVZTAJRQZULLTZBBQQDKMRJXNLSZDRTYZMKHQUHTLCD_BTTNSTCVGXRFSZRZLTDAN
60
+ VCXBKRDXTFZSLJENXNSXPMUJKSLNPFXZCALPRDPCXLRDSMLYEQBBSSLCAPNUVKEDMPFBAUAPGGWJHXDDCSEANAUDVG
61
+ VYCPZWCMZZHL_QLGYEHBXJCFUGQMGSJNNPMEBMGLCFGPWJUF_LXBZPLT_AHQCQKSEWUAECDCBGDFDFVMAWQLD_AHLX
62
+ LYNVZEHVARFGRBEJYFZ_GRFLBBQGHTXWVNFPDBF_JGPYUCNQSRCWDKXFVVVPFXPTKCSSXENBCTPJZURQHKYSRZWTKA
63
+ FGKNFUXWNUBUDZUMVKMYDPMQWLFQFEUB_SEXUWSHMEXBPMGTYGETGJDDPSLPCRXNCGZ_EVYJTC__FUWYQUQSZNA_AN
64
+ AG_NTMQCMJRFLASGPUBMJYUGKRGSQBUDLBLDMKLLGFUQVRCVYTUGJXSC_QEULBKGYVUW_HFRB_STUMA_SCEBGPCPXZ
65
+ VRVYE_CEJSNPWVMKTNBXJWCBUJQPQBZTSHGZCKVFQFSJRWPWMD_DUQPNAJAZTTE_ZBMCMCPDAXUNPUPLBTSKGCFGLL
66
+ VNKEWUNRCLPUNLDRHYGHVGDVMUXFACTCXYMLVTJQXXNARFXC_RQZPGNYDXADUYRKDCWWJKYVWDHTSGYZLPHZZJE_CK
67
+ CHKZHXYREQLJEWUJBSFVPZYZH_CFMEGLTTTFKSXKNHSTPVQZHHRBV_SAUVKJEEWZYUVTNZTFPHPUNXBBRBZBCVDFAG
68
+ KSWXMJSDKXENLAQEFWRGSGJDSLWDTKQVKKG_QTTURFXDPJCLAHVBKVNAXZLAPBFXTTVXERUGUV_PNWNYEXVGYFXXNC
69
+ JPAFU_JMJREGLVLVXHGG_M_ZMYXFFFUCYHVNTYGQVLVGGMUJYUPCERBFZKEPVVBFGSCNU_DWCRYUKUZHADFUKFFQLL
70
+ NM_JJJJXEV_CFZASCJLZZXTJ_NDFLYHBBAZVHXQRADYQZKQVWBEJJWHVS_RHKPSNJGUSBBCQRGHNWLXTFPCKND_FUF
71
+ GWAH_JBZHJTREL_MUPRNUEATBWWJPW_RGLXMMUH_AUTMQUAQKPEPYCJBQSHKMQTCLFECLRUBYAMXZVFHR_RAUWDNMA
72
+ KZMLTJRGVKMH_HPRSF_MXMVHQAUDBNY_NPERNHWXFNLUGQTBNRAUKSMSPLQELZWGWZXYGNMGAAKHYRRQGEAD_CNBBW
73
+ RZYGCAZMQT_BZWMQHLHRYDGHHHTVDQMNHCNLNDCMTFPAWZTJUGVJCJJUHEQJQCDDXFXZ_XHVGSEVLFDDFWXUFTZJJC
74
+ _ZSBKYYC__F_YJ_GBSJMCLUVHUMCEVQDQYCTXAQUMF_JFUHLELVWXPWNURZFBCLVEEWRSMBQ_DMVJAQS_GQBGMTM_Z
75
+ CFMXRXEXQLYSAXCWKMPJUU_ULUC_EGZNQUEHSJZPDUABRTWCJRCYDRUUYKNDNHGZ_VWJYBTKLRJSVFFTSRFVLKMQAW
76
+ BVZZNDF_WHWTUGCETMTFLEQUQYVFYRFLTFKEAGPVGHCBRTQKEWH_HXCAECTK_LASSHSPPTDFUXYRWUEEVYXSHGYRRE
77
+ KYZQFD_HYMEQSGEACYVMRGPXWZSWYTJC_SVCQLASPLMJEXLHJWYXXL_DPWJBKRFGS_QS_DU_JZQSBVHMDLDACWUSKD
78
+ WTDNFRCV_CMSYEGKQMCYWKFPPTHKFVTFUWMHNGEYKAKQYACKDR_JFHJ_KKWCBPFUUTGGMT_ESNNHRQCXWCR_FEVXLM
79
+ NHDQAGWDWWCMWBJYHNCCLRHKZCXVDBFCWKFAJZVJVTWPUKHZDAAYKRVHVGSPMZDJTTEMWKQGTTVDFTASTFVPSRQMW_
80
+ LHNKLPGCSSJJPMAWKFYNHZEZYFETZBYCGBRYEFAYLLSGHHMSAMWFRM_BUJGFTTHXKXXCPJRJNEMPABQHXXVHXQXKPC
81
+ BKKNLMANCJZZJDLTBVECJWEYZJSSWJTQMNLTLNABXMUELHLUYXGVLTKEMBFCJ_PWHTJCDWVCQ_HPJKFLLURWPGXV_H
82
+ SZDSL__GFFJLWZNJVWTZDVQKZFUZJBM_ZDZBYDKWKHUMNLQMEAAEZGECQPMNGBFECMCDSTDTWXRKNVTNKFGDMVSHGX
83
+ VFPMHXMZJDHKMFPJKPSDKSSAGXHMMMZCGTEETXUETM_J_MCCJPBBYRSEVBSL_MJ_ABTPSUEZHYVKJPBLWBANGWBDSZ
84
+ MGNPRJRPZUERZRLQ_LXVFH_PBCACDBKL_YCCSBTQAGNBHMGEKDTBAXQLTTGNGCVSHBXLNMWASRPTUYFAWWJCCNAFKK
85
+ QNTPHQFUBAQEECHWSBLBUKLKKFHYKXFNWDSRKCTPMKWRAUZCNMMSRMVRZTBWBDYNEVVGBHZKBUPWFZUUKJCND_TRBS
86
+ ALZNELXPVZEDELFQTYTEKUMHGTHGHHTTSQLWVKDQFAPFTSUDFZWNWXTNTN_QEGDBB_YHXVDAUJRAXXMPCMRVAQNMPR
87
+ QQFWNJZPKTSLPQTPPGL_JDVGZQP_DNNNATRBZWSGBTEHSBQDDXPYGFXYSFHZWLPUQNDLYMSFHCLGDJFRSQJZLAASWV
88
+ RHUXBSZHXZAKRSWVCUUHXQLUBGJCYZJMTALBQEFQEJDCFTSGYRCK_HCLYJNHXDERRNHD_HDNBUXGP_ZVZYUUTPBRBH
89
+ SRDFBFR_WRDMYNXYLVHSGFBGNKGECJBDLUYSGKGW_YNGVBEPXCJTQQE_RXAUMAUGCXATFRHFHRMB_CJWPLFMBFKNGT
90
+ ENGCVCKVUPFLEMVX_ZDY_BFA_FJQKWKPT__L_XLMSTYGEYEXEMSQAUKZDQVXLTJDNXNBWDVVVZVXUJUZYCDB_KSHQK
91
+ ZZPVWXTCGJZCQVKXNEPYQDKDQWYDEDYNFLRGGAJQYKUJWFASGJLXCDVKESX_VDSMVWLUUCPFZMK_YKCX_QBQ_WZFTL
92
+ XMVMXPMDQPQJLEAHEEWKNDQ_AHXFXUFJ_REVSCADMECKVRKZXECRFUYDAHUWVANKTDAH_CMFEJBLZBLSGVHZRSWXKZ
93
+ KTKJBUCGLZTWUGMXRDMM_HSEBQVAENRWBTY_QMQPRRJBCRLMRNUQLTPMWEVBTPK_NLTN_SVHQMRKMKFJQBNXMZFGCK
94
+ TSRVMFZKEYAPXNBMRRANCPZAQH_BWZQJSJSTBKU_HCNPHVWZKWWSTDYFAJMVXLLJPUKRGWWQTJVMWQDDHEBPAFZQQL
95
+ EBRDTYAUAPYYUNHAKRQQECJMRAWWLNENMFRSWYBUTKDNVYGHJABHBJNP_VJLATCNPEMTKRP_ETWSDWUDBUWVZ_GF_X
96
+ QQLDYTACHNSMRWZQSGX_AEVAYSTSPKDRBAXK_QWCWTSPHYQFVVKV_EHVNHYTFFVLCYNVHJZPAS_LJQ_PMBVAQZWX_C
97
+ EJQ_SBDQCKMHAJCJBDVCKZBFAWGDSKABZC_TPXFNNNWE_YTGDWSZQKCUSLHMHFKNMFPGYFGQ_DDLVXVHXEFAT_UCJW
98
+ PV_PY_DCJYECFU_DHZXPBVKYKFHDCKEURLZBTMSAEVUBMVFTNPRLBZFCXHCUGZXCUPJYYNTWDTLTVWQDMFFDTYUAMQ
99
+ QFCYCZZZHXPYYVQLWJSTEBDHXMPB_KXBBRNKPXAMZDXFLLCYFVFVAHQPCXPZMWSUXFRURWRAVZCYKSV_HALNJPAFTB
100
+ JRJWDZCTTDXRKNTHGAKVGGJRYJAYKVPHJEJV_TDRSZJSBYJLMWQWPEKREEZXZRGGFDBXSAXBDFLFRHKYQAWTHNRFEB
101
+ PFHUMBVYHSKD_FWMPGMQZ_HPUVWX_AQYZRPBFRDWRRXALVSERUMRYYGEGGRSZCDAPZXAWGLXRQDQGKRTHEJAREWZTX
102
+ XKJM_NEFFNRXCJZWK_CTPYT_UUABVZYKBTTNZJSKKFWRCJYFBESWBFGARCSYAA_VYNHVMKWVKMUCCRHC_ZGFXMXYJR
103
+ ZQWFHUHJVUGGDHYEZMVVRBAPCSHYKJ_EBCASYYHDTZXVYLGPKBKBDQXXPGUJZNUKQYCNFWPCHXDLMQKUHEDK_JVZPF
104
+ VFEKDTFTADEGLUTU_UPVLFPLZZSTADHSBW_ZLFTWZMVJZRXNUFPQCKFYYHNTHTAARTBNVETZVQUCDS_YPFVW_SX_HX
105
+ GEB_DVKSHXZQSVPLZWBKCZXRUGJSKKFTTNXX_YYTWNKHWUMWTTQXREULHUZFZGRYNJDDYED_UXXBDPDP_NULKQDBYF
106
+ MHNCGNCFS_UMTRTJTNRJKQPGW_NAKKXKTUJDVPZVACYWBJCMLLDBVWRGYMUNAVPCW_EX_XGDVKKWBAGBBLZQJRXBGL
107
+ WDLXLRXLGD_DUYWDDHVLZDTDNLZUYHFEDMQENGMBDFPNQEGQSKGE_CCCDVDLYEYXFULKFFFRGJQPDGPBEKWMNRANEH
108
+ TTWMFZZWUSVSSXMNNRPGHUJJH_VS__KJAYUAA_MPKUDWFLELZZGSBVZYTDAMRYJQCFWFLNRB_QLXXZK_LUEPZXUTXY
109
+ WKLJBPYSLMCKFMAGQDLUMWYCFVJPYXM_EYHMJDT_UW_DUKTKASZSZFYCUDAUQKFESKGBNKKCQYYYGEYFESKKSLCRM_
110
+ ZBMPFPX_YXZZHHZPMBEQRDCPQDJXQEVCAJZVPSULFNWYHDGYAYRJEGCDQXFFVTHGTARGCEAWGEZLEZWKWVQERKBU_M
111
+ FGRGDPRRMKNFVKYSHQKBUXKDQTPKKZXUKKYWWTVAZDMZEEHLBBGXEXUGDUPXCEUUJ_JUSCDECSACWY_UQCGJAAETYQ
112
+ BAV_ZBNRHEZXSJRCHUTJLC_FXNNGATNQS_S_CBGZAASPPSUHJAEKWRQGPHCREBTTVJMNEBQNGWTUZNBHZVPEAUPGHJ
113
+ UTQC_QXCUDKEWEBLAUJAJVFVBEDYJHJLCPYW_FEZKSUHAPGGZTUQHPXEJLQJNWFLYEGTELUNAGRSGXNQMXAFCUUBXD
114
+ YDEGCHXYLEZWCQRTWUP_ZQ_UXBCEZZRHPJDPTKSAJYPUFASZPHWDMTVUU_CGTLHCWEFVGSQCD_HKZK_AEHNELMYDXX
115
+ AFXAGLYLPU_RGEWKJACRTZUSXYETVPYFAXBTJCSXAZTUDAEZWRVFBZBULBWLRGTQZQUZFSQBVUDVTRHFAGFRQYBAWE
116
+ AUCUREHZYKSK__QTCVXRPBEDDDMFFKTB_TWNGCPQFDPVSXNYJMZYCWRFQR_JLLNFCAMHSFDNHNJYGKLDRXRLVLCSYK
117
+ _FCQSAMZLTNFLYJGSSASUNBBVYLKKVWHYPPCAQPUDAJRMEUSLCBQDKYBCWCCURFLNFPBUNXLZQNWBQE_UNFECLRBSG
118
+ YKZMAUXGHBJLVJSGDZGFQKLVMFALFSHCHKETAJXUQXBHJMRQABJHPTPPSVXHDNWGLPJMSYMCD_RKJCSYBB_CYNLJAD
119
+ CH_VFZJCHARL_NMBDGH_FAEXF_RZLTZQTXLPQZBQQTVJHQTGNJPWKKSFQENAUGNNEXKFAGWSZLNZJHZGYJMKQFNYRR
120
+ PPNXKSNPQPFQNELDQD_DTNVPWXUHXQEQGJXTHGLAKMFCCSGTMKTKWZZWBVABAGQHLQBAATKEFFRALVHNAFJTJAFFYJ
121
+ JZTTWLQDPQYWZFYAEWEHFUZUWYYFCXQGKAWCSNJYQCVVZMRCSXLDME_V_BLUW_UWHHMRNFJJCTQZXGFABVJWPCRB_T
122
+ YXAHCSXZTYPT_XMKQMBVRDJHYYPEG_HCKKBXBVMEATLRSR_GPYJZWBNXUDUSLKCHURKTUGQLEKDGABGCG_KH_VTTLJ
123
+ HTFAFRZUQMWZZSKPRKSRYNXCEYDGFQGYPWLWPFGPBQRD_LTMPHNQMGGXTMZBMAELQRQFWZKK_KFGRUMYTLJASSLPLG
124
+ ZLLGSRJMGYBLYWP_QKW_DPPDKNWUXWCGCDLXXKMMCTNMBKEVYRLJMNUJDKQGFUJDTZLPBFHUWCYGWVWEWUBJKAGYQM
125
+ TMMRNNMZQHT_UMDXFNAQPMBMFHXEXDGRHNSEPAFH_EMSEP_XHDCEJZXSLEMECEBQCGFRSNTBBSPQV_BQFRX_RVNXM_
126
+ EGNDQKHYTKPKUHFXWYXWYPCENNHNAFVFTAVGJRFLADAVXCVTQDJBUJMVCDBHCWYYXJKCS_LJJXJYBJLQAGWQDWUND_
127
+ AGTRDZBSYHCMDAMHDHB_VVDQZMWTCCMJRGGSJRGYLU_DXHL_NKYBRDNRCNKJM_MJWQJWQTEXRACS_ZGDGTTRKUPJEQ
128
+ XBLXPKTQCZEVBZCKSXBENADLWAVVRLKPKNNLVECWELVAYUHJLPZX_ZBZQCENNGP_TQULZGXCEHPYVUXAAFKDHVPCZZ
129
+ YGWLFHXPCTTNHNWTHBXXBTTCWRUQYDUPNMUPKZKNYVEPUUMWDSTDDEVXJYZDWZHWS_S_VUBBFHWGUYPEWRWLWBAUYT
130
+ NSXVBVAMMHCK_NNCHMFKFNJ_YYEVKNYF__WADVDSFPRFFHUBBPE_BBVXGXEVURVJJHNVMBVXT_TZYRBTRWSSTBBHSH
131
+ LNJPD_DNGRXQVWTFWUQL_JUVYDUFCZPRKFRVTCANTJEW_ANGKKJYXEKMWEQYRVYFBXFLADVPJWUZV_PAGNGEG_GEYU
132
+ PLNJBDDVGG_YAWPVJBZRJBSFCAGSHXJYXHCEH_RKSRUUGFGQFUQVHUHQWPXFXNLQWMPUREPNXMWUPBYKVSBZACPQJN
133
+ HUTBGWCCMRBALAQJTWSAHVJPQQGTSYVHHBS_VN_ALBFFEF_XEMWHTAGDNLSDWHDLMBJTDWUJVYMMJYVKNDYVWXNPDZ
134
+ _FKRMUQRBWFSJNSUCKPUXXFZAHZSNRPT_CDLSRWQHLUWVFTUM_VDUXSVZGANHRZADXFNFYBDFGJUUBJKWLXRTDNEUB
135
+ WEBAQPVCSSDSEBHPBJPM_TKXGFRYRDEXHMXQNJ_HLTQXFTWVLKTDJHVZQTNVAFMMUKZLJJYTMKSPTQYUGYAXUYCSKE
136
+ SZHCKJJCDTXSGCGWAKYWJUJBLZXZ_ZERVEAQRPHPVXGNZMZUPGWKJLCFCWHEKQHNPMQLPFLLWTRNKEKCWSUSBWNDRM
137
+ LWXSWLZXFWNSTWEEZSVAQYTVDFNYRBFSBUPPEBKGFQCCSF_UHEY_CZ_QYBXLCC_PVHSMWZNQLJABCFFKLMDXYYPMTQ
138
+ _DBYJRWPDHYDRPZRQKUURRUBYPZRY_XG_NP_NFLJWFTXZYDJTVWRGYYBBZQJSHUJQNXNANAMDTEAMPXMGD_AYRBBJZ
139
+ NKSGUQ_KLLKNZMUYFMNVUMGPZDEJLUGAERKUKT__BUVKVHFSYRFJ_DDLLMWAJGUFQQDFPLEFHKYCCDRC_HKJKACEBU
140
+ MPLWHTSFDUNJTMBYVRKJPRQKHXFXGPHHJLJC_BMGXFAQBL_UWRVGWJUHDGXDEFMBZSSP_KHKAYLVGLLYUGDXHCBPDC
141
+ JQCWUWLYQMRETXRLQRGFGNW_HBFDXCLDEPGRJMSQGTJUEAAYDARWYDAFCF_YVRRVNMLQRKQRLDCUTFZQJ_P_KYGZAB
142
+ CTXSYALDDUKPVVGENCNVELFLYB_HZKLYVSXXKCTFGF_CNUZTQC_ZXSQPBECDFFHJWNJZHNGKHWSNABESCNEKZXZYGQ
143
+ KQSKWA_BUNWUUWARDHBLHHURPRGCPG_ZEXVGJEKMGBYSFHWNRDEZXYSRBLBVLGAGDZWAE_ZSYTDFHQGASTPBDDZDKX
144
+ _FFPGZPRMZUWQHESHVNLPMLYA_SBNEABNGHXJMLZURSJEN_BNJLCDVHRYALTTEHGRPRXVFHTAC_MYTBHEV_EHVNFJM
145
+ ZGSPNFQSRNQADQYZTCUPZKSBY_RPYHVJMUFYFMGADDPPRCNJFTNPDLPCLMSXLEFNQNHMB_USQRNSQLNBVZQZVPTQHL
146
+ QWDVDXEALVGWSWJTHVBWNHMXHP_KCC_MVJXFR_YSDJREXJDPHTEAJTVDSTDTFKBCMMDVUPST_BPDPWSVHUYKPZWAPW
147
+ BTBH_TMTBKJHXCELLFRVMHESRSZTEH_NKRKDXPWVKXHAVWWEYQFHWRNEFTCEEXMEJTYAVPQJHNYWKZYJTMPVSKVVLB
148
+ CXEPVCARVEDLNSVDNKL_UHDANNDBS_PBHXZDGCDHPMFLUZRZZXBGLDHEMVXYMAJWGVEBHKCGYUCJV_MTTJRKHNDNTC
149
+ GDBSKGMVDCKPLBYSWBBZDLYCAXAFTPHDTEDWLPQGMRNJ_RKDTVZGAVGNEYAWTAEJ_LHCNMLCWHYMBMLCWHKMEZSTD_
150
+ ZTEKCQN_AAZSDXDTGRNVFJCHZQXZYXHXSYGLTPQWGQYQLCPVGDQQBFAPPFXLUGGRP_JEEYMXB_AGANNKQCBNLVGZL_
151
+ BLNWUQALBVLFBSNARU_YGEGAAVNM_EB_Z_SSBQGUXTRAN_AUAKGMFAJWMARKVCBPDABAZGVLKXCB_WWLEDHQLLFUFW
152
+ KGQRBZ_BJEVLPUJKAENRRZSFRXHU_EKMGWAEXHKATVVNTCGXFEKMZTZYTWHLNNAGEUVHGTLGBDLBGKTKNJBW_PZYUZ
153
+ XPTDQCWEMDDEEHLWCQYTHHUXWNUPYTMFMDGJEWDBNZMGLZRLFBZHMPYAEJJVPMKZNHVDCFKPKSKBW_NUWESYUN_JYY
154
+ NVTXRJUBGEALDNAEDFMQKPDVCBTYEGHRWZTUHBQGBW_WMERALGG_TKFNEYXZR__WLXYPQWKKFUVCNSJMGQQWDTZJQG
155
+ WJLUQJYQTEBUCVBEVAAWTAEGRCFANKZSN_EMBBMNNJGVBEHT_JKWYYMGNLWKEZKAWGLKQ_PPJBBDPASDWJSEJEDNGE
156
+ K_MZWHA_PQX_LUREDLWGSLASXNT_LJKTM_RRVMXZGBYTEEEV_ZCMXXHPLTYBQVXQFLPBBXHKU_LLDHQDDXUNQSDM_R
157
+ NUMJQAUT__RNYUQNLQJQBUNJGBBBCLGRHFQNY_JMEQXECLFJT_HVDWXM_HTLRBFLEWLTTUKWWLTATXNPKXDFFXDHG_
158
+ CXGBJLEAUJJDHLGNXFSTDRLPZUYYFYESFND_E_SQWUWFCDMJQEADJUCULXEJHBGREFEJE_DUWLRL_NWJEPTJZTLAUL
159
+ GZ_DCWAWKPP_VFDNFHQSTZV_CEBWTFSRKHVXNQKVYNJXPGUDWZFMFCKWGAFHYLEGGHDAH_FJDQCKNRNEDTWNHXXDNT
160
+ UZFBXMQFKATJCNRCBYFQVYCQYWHZFAFTXAHCFAXRVQJNTYEVHXQZRVVBWDWNBDWHDUWPQRVETEWUA_MGLVSXHRJTZC
161
+ ZVXNWGHTZGAYPCYMCYMT_RY_BWUSUYGXYG_QEEWZMURRQPNVAABXPEMNHPCUDPBNXMFNSNKBNRBHXPZJGYGTDEVBNT
162
+ DVN_QJPEVVQJLYRSNHEYWUWWWHFQBCHZWJBSDQQSQYPNVLGTLEUC__JQSJKAHZBKVBFAMWWWGRPY_WGGLJHGUUSXFD
163
+ SXJVEV_TZPLKSWTBBXRBXVJLMWZJPBGUWYNEZXBUXKEBWJNPJWVUKWRRAGJCMKDXSEADEJKUTSQVLKTDAWLGESAVHC
164
+ __HGDXDN_QLKBGPGTYSWRAXTJEHVPKWDSTTFT_PAMVKNCGGVEBMHUPLYXENFTQFJMPTZQBMTSUKXUL_ZLAZAXCKYPX
165
+ SJWBYKJHPXRWSSL_MEHXRGMUWVJRNLTN_R_JBDWXLAZVCNAYBGVQLNXUMBSDFAEPKXYXC_ZZKAPHTHVWRHQNNVFPEE
166
+ SRBWVTKMJYLNXXSABTZBMKBSHERSYJARNARKVKYCNHLVC_NEFERGLQPHMDXNAXPKJWDQLGXJ_JRKJGUCPZPCDSMFCU
167
+ HTWMQKLM__KKXYWCLGRSALKJTEXAWWZUZBQGTEBGSAAKEPXB_MPVMWQTCHRGRNXRNBKTTMDPMRZCYALGMKRYC_DQTA
168
+ LJRWXGKFSER_EBYUZTFFBVHEPLYRWUDGJRKAYQRSZVDJJQRHTSQN_NKRQDLEQJNVHGMJWLWLVHLZRVLBPQSMGHUAFJ
169
+ WJUVWNUGUFBHJBGPXBEGJVBYUTSUJRWYYMQBXWNDKRWYJZQR_B_G_RSGU_R_PBCKPZ_PGVDCMJU_ZEFNZNDZCNJZFH
170
+ KDBQ__SF_JKEDSHCAWQZGAXTBLFSBTRUU_RURQZTCFFRQF_YGSABZPG_ZCPSHYHYQCBKENEWVVAJZSSASMZ_CHCLJV
171
+ WBLDSCDJTXUGAKNNBEBYWGSLDCCUYEXMZTHVDJDTHRSRUGYYHEEYEAK_ZWU_PUAJXXKLHZRPR_RYCUVMWKULBKHVYB
172
+ JTDFHWNVHXXAQFFCYAGSYAJDQUCESY_HBXPSEBHCYHUKGERTRTCNZSR_ZXZ_GWKFMAUYPQJVS_CPNESKMHEGB_WRQK
173
+ MDSFDSVLLYBDBWXZGGKDHVVCFGLAPMWPZVLASPCVARVCAMQLXTEGLUPWPSWRFTBTVSCMRWEUVUWTYFZZSMUPMZWXRX
174
+ XHEPPBBDLPQMJVUXHVKPGVRLSUULSRTBJSNCALWEQE_J_MQCKXWEVHXZHPQESXSYJHDMYHEZG_WQCNBRGBHVZGPJUF
175
+ HYHUWBHASKPKXZAQXFQHVPSYUBDWXKAWBJRYCPXAFEUA_PMYHWERLPFSENUFAJTKGQLSZSZ__HGYZAMNAENLA_ZSJT
176
+ VT_ZUWDYLZUMCGDZALTEQDRW_VCTEGFVYSPQRCTVMEDFPBEPWUKACNNCDJSHKKASCJDDRUYA_GKLJLPE_CSNT_AMFM
177
+ ZGCJD_HMUKQWFTGJAB_SAVQC_KLNYUPADHERKSHQTHSFMTZMRMRJBMMDNPJUHSHDBVDGHFDMRZUHXDVRLBLNBQXXTX
178
+ VFJXWFKDPHWMWZGAR_MN_YL_LWTWUT_QSQGRCYBPRPXGY_FRXGCWHQGRRWVDBGMEBEEDNXQQCNHTXFYYWX_EPGQTA_
179
+ QNHKCRRPFBDZQB_QCVTQHFWSMPWQAUECSVGMH_XBKZEEGXSWPGHLSNVBJVCNUWYEXMAPFYWXWWZQSZBJNPTYMUVB_D
180
+ TVXQ_Z_AAWUDNXVXRMRP_QGVSUAUNQKZDADVPVUTSBNWHQBVMPYESMGEUDLCDDAEPHPAKFJSNALZTTZTWSXAC_YJSD
181
+ CKLAEHWZG_FUCMMAWWREVVAHKGFUYZNGSQCTREFYKTYNZFPRVHFX_WKTCSNLKLUQQTMRPMTUGTLZ_VEGRAGYZFLWGA
182
+ BPQ_QYAUKRUAPSK_XRTTNAQ_ZVXNPPLXZMFKXJJRHJEZWHXRE_PHCLDMGWVLCLGGLUUPCG_R_KXSNYTRXVYMUHVQAP
183
+ TRUB_UJPYQRSZXZPXJWXKFXGJMPW_EBNPRZDTCCUGUJLUCRRYWPSKJSLWNZNPJMTPUCMTSZLLQVLUSPQ_EQMCRAEQR
184
+ NFWESWDAWBPEGXQKWRAQZ_LNLZKSDUAVFKUJWZLGSWZLNLFURRYFLYHGYRWRXUVTRFLU_ZKB__UGLYDCJJSUHFZBUS
185
+ QFVNJYTAQ_GNGXH_PHJFGUYGZBNGZBQDU_HHWCHKVCKUACBMCFUBESTWTYSSMDQRMAHSRFLXHUTMRHNNBTW_HZDJKC
186
+ SCRWSJPAEQARDEUDVEUHZZZ_MWSTHUWDYUPFHTULHUPXGBMBMNFKRCLUYGPDRJQCTPGEZHRJTXPWRRSSPKPRLGJBZP
187
+ PPDJUGBWJEVKERNAKEFCEQWXWBKAPMDTPTGXCTLDPYRSVAFU_PZUJNXLEDGFQBHVEJAKBKENZLTRBEBLSPBLYMDHS_
188
+ NFKTTRESNHXCWEDWPKCSBRPWJSMGRVBWQSSNBLDJD_JECTBUGTMJCFKEBPBLBWTHTAGAACDHDCDSSHVKHXVFYYWZLR
189
+ XAYWHDNSJBMNBVR_LMURYYBQ_RUGAKAHJJDFGMVVKADBLWZZFDKCZXVNWQEGQRUPLPMTCKVXEWHRANUFZNQHHGFJTW
190
+ WLJ_QPAPJZEQJDQSXUFPESUSDDKLXDHVTDCUYQYNYGFXBGAZ_TXDZMCDFZASUCNETC_BVTPNFLYVDEFFTP_WLTBPZH
191
+ JYRAKCVLHZR_KDGQVNDFMMVQ_QNHVYJDQREWJWLGTUYAJECKXCJGVDQXWZTNXUMCTHKYJWKTXZEMPAAFNVLLANHGLP
192
+ BJWF_QXVQRDKXPLQJTEGTPFFML_FBHDNZUGHTRNFHLZ_MGPU_MSDFHVUARAPKBVKWUPKXYNHMKRXTSZXBQEEQQXXAZ
193
+ YFTGHTH_WCBKUQFYYEZYZBTWGHSKLKPCEAAPCJQYSDDWAFKLQAUAQHDUSSPKNEECVQULALKNBWSPFXN_XHLJLKFTRR
194
+ TZNFRTDGTYEYKMDAJMTELPERMTMBNUALNHENSKKGCZJWCJBJZQCDNWLURTCXEWFJCTEEJDKQZNXGDMSQM_JBHGACCL
195
+ MYXWTCEYZKYUNFHQRZBUMELYBTZTMERKMTRWJBAQJQFEKQAXDKQAEFPMHSDJSQKFCQGKRPZBUQRDRTCDBZGUSGUUJA
196
+ RHSZUV_QXXGYQWXTCSBW_MQDTWPYFABLFMEADWXPLYYANWVXNHF_ACBCZZCZASNKRXPAMAYUVTGDJCUBRCKSAJBLYE
197
+ VKUDUVMLMPVUYZSWMGMESLA_TPGVHQNUCFMWZSKFGRRAPWBSJBFFXQUEDJ_QYEAHFTDLAMGEXFFHPUVBMDRNMAWCE_
198
+ XLSYEPTLAWELKEDDXRSEAEXARXMMQBKL_FXXFVDNQFFEVQHBWEQENGLBWPHE_MAZFQVCHMYVQSTYSEGDLLARMNLUVT
199
+ URMBLHSBVZEGQKGAUNBWLYXWKN_Y_HXSVRYLDJMAG_MDZPEBZCDDENACPAULGZNRRFFRZCJNDZNKGPBPSBCW_DBSNW
200
+ PAQSYEKZBC_UTPCRKZFDUVQYSQBEDYEPMSUEVJTRYQLXQQGJTECSZRRZGESFPZPHWUWTUECVLQFNZFCBMBZZRRBUPD
201
+ BXLRNXWD_WEFVLLPRVYHJFYKPBGX_JUWZRTH_VZUSPUGKTSRQBNZAGELPTYCEHKAVDMCKUWSYQDFKTTNYX_G_RFDPB
202
+
data/csv/faild.csv ADDED
@@ -0,0 +1,12 @@
1
+ text
2
+ .............................................................................................
3
+ .##...##.######..####...####..######..####..##..##........######..####..######.##.....#####..
4
+ .###.###...##...##.....##.......##...##..##.###.##........##.....##..##...##...##.....##..##.
5
+ .##.#.##...##....####...####....##...##..##.##.###........####...######...##...##.....##..##.
6
+ .##...##...##.......##.....##...##...##..##.##..##........##.....##..##...##...##.....##..##.
7
+ .##...##.######..####...####..######..####..##..##........##.....##..##.######.######.#####..
8
+ .............................................................................................
9
+
10
+ create by kouta
11
+
12
+
data/csv/hax.csv ADDED
@@ -0,0 +1,347 @@
1
+ text
2
+
3
+ #include <QDebug>
4
+ #include <QFile>
5
+ #include <QHash>
6
+ #include <QPair>
7
+ #include <QSet>
8
+ #include <limits>
9
+ #include <openbr/openbr_plugin.h>
10
+
11
+ #include openbr/core/bee.h
12
+ #include openbr/core/cluster.h
13
+
14
+ typedef QPair<int,float> Neighbor; // QPair<id,similarity>
15
+ typedef QList<Neighbor> Neighbors;
16
+ typedef QVector<Neighbors> Neighborhood;
17
+
18
+ // Compare function used to order neighbors from highest to lowest similarity
19
+ static bool compareNeighbors(const Neighbor &a, const Neighbor &b)
20
+ {
21
+ if (a.second == b.second)
22
+ return a.first < b.first;
23
+ return a.second > b.second;
24
+ }
25
+
26
+ // Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
27
+ // Ob(x) in eq. 1, modified to consider 0/1 as ground truth imposter/genuine.
28
+ static int indexOf(const Neighbors &neighbors, int i)
29
+ {
30
+ for (int j=0; j<neighbors.size(); j++) {
31
+ const Neighbor &neighbor = neighbors[j];
32
+ if (neighbor.first == i) {
33
+ if (neighbor.second == 0) return neighbors.size()-1;
34
+ else if (neighbor.second == 1) return 0;
35
+ else return j;
36
+ }
37
+ }
38
+ return -1;
39
+ }
40
+
41
+ // Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
42
+ // Corresponds to eq. 1, or D(a,b)
43
+ static int asymmetricalROD(const Neighborhood &neighborhood, int a, int b)
44
+ {
45
+ int distance = 0;
46
+ foreach (const Neighbor &neighbor, neighborhood[a]) {
47
+ if (neighbor.first == b) break;
48
+ int index = indexOf(neighborhood[b], neighbor.first);
49
+ distance += (index == -1) ? neighborhood[b].size() : index;
50
+ }
51
+ return distance;
52
+ }
53
+
54
+ // Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
55
+ // Corresponds to eq. 2/4, or D-R(a,b)
56
+ float normalizedROD(const Neighborhood &neighborhood, int a, int b)
57
+ {
58
+ int indexA = indexOf(neighborhood[b], a);
59
+ int indexB = indexOf(neighborhood[a], b);
60
+
61
+ // Default behaviors
62
+ if ((indexA == -1) || (indexB == -1)) return std::numeric_limits<float>::max();
63
+ if ((neighborhood[b][indexA].second == 1) || (neighborhood[a][indexB].second == 1)) return 0;
64
+ if ((neighborhood[b][indexA].second == 0) || (neighborhood[a][indexB].second == 0)) return std::numeric_limits<float>::max();
65
+
66
+ int distanceA = asymmetricalROD(neighborhood, a, b);
67
+ int distanceB = asymmetricalROD(neighborhood, b, a);
68
+ return 1.f * (distanceA + distanceB) / std::min(indexA+1, indexB+1);
69
+ }
70
+
71
+ Neighborhood getNeighborhood(const QStringList &simmats)
72
+ {
73
+ Neighborhood neighborhood;
74
+
75
+ float globalMax = -std::numeric_limits<float>::max();
76
+ float globalMin = std::numeric_limits<float>::max();
77
+ int numGalleries = (int)sqrt((float)simmats.size());
78
+ if (numGalleries*numGalleries != simmats.size())
79
+ qFatal(Incorrect number of similarity matrices.);
80
+
81
+ // Process each simmat
82
+ for (int i=0; i<numGalleries; i++) {
83
+ QVector<Neighbors> allNeighbors;
84
+
85
+ int currentRows = -1;
86
+ int columnOffset = 0;
87
+ for (int j=0; j<numGalleries; j++) {
88
+ cv::Mat m = BEE::readMat(simmats[i*numGalleries+j]);
89
+ if (j==0) {
90
+ currentRows = m.rows;
91
+ allNeighbors.resize(currentRows);
92
+ }
93
+ if (currentRows != m.rows) qFatal(Row count mismatch.);
94
+
95
+ // Get data row by row
96
+ for (int k=0; k<m.rows; k++) {
97
+ Neighbors &neighbors = allNeighbors[k];
98
+ neighbors.reserve(neighbors.size() + m.cols);
99
+ for (int l=0; l<m.cols; l++) {
100
+ float val = m.at<float>(k,l);
101
+ if ((i==j) && (k==l)) continue; // Skips self-similarity scores
102
+
103
+ if ((val != -std::numeric_limits<float>::infinity()) &&
104
+ (val != std::numeric_limits<float>::infinity())) {
105
+ globalMax = std::max(globalMax, val);
106
+ globalMin = std::min(globalMin, val);
107
+ }
108
+ neighbors.append(Neighbor(l+columnOffset, val));
109
+ }
110
+ }
111
+
112
+ columnOffset += m.cols;
113
+ }
114
+
115
+ // Keep the top matches
116
+ for (int j=0; j<allNeighbors.size(); j++) {
117
+ Neighbors &val = allNeighbors[j];
118
+ const int cutoff = 20; // Somewhat arbitrary number of neighbors to keep
119
+ int keep = std::min(cutoff, val.size());
120
+ std::partial_sort(val.begin(), val.begin()+keep, val.end(), compareNeighbors);
121
+ neighborhood.append((Neighbors)val.mid(0, keep));
122
+ }
123
+ }
124
+
125
+ // Normalize scores
126
+ for (int i=0; i<neighborhood.size(); i++) {
127
+ Neighbors &neighbors = neighborhood[i];
128
+ for (int j=0; j<neighbors.size(); j++) {
129
+ Neighbor &neighbor = neighbors[j];
130
+ if (neighbor.second == -std::numeric_limits<float>::infinity())
131
+ neighbor.second = 0;
132
+ else if (neighbor.second == std::numeric_limits<float>::infinity())
133
+ neighbor.second = 1;
134
+ else
135
+ neighbor.second = (neighbor.second - globalMin) / (globalMax - globalMin);
136
+ }
137
+ }
138
+
139
+ return neighborhood;
140
+ }
141
+
142
+ // Zhu et al. A Rank-Order Distance based Clustering Algorithm for Face Tagging, CVPR 2011
143
+ br::Clusters br::ClusterGallery(const QStringList &simmats, float aggressiveness, const QString &csv)
144
+ {
145
+ qDebug(Clustering %d simmat(s), simmats.size());
146
+
147
+ // Read in gallery parts, keeping top neighbors of each template
148
+ Neighborhood neighborhood = getNeighborhood(simmats);
149
+ const int cutoff = neighborhood.first().size();
150
+ const float threshold = 3*cutoff/4 * aggressiveness/5;
151
+
152
+ // Initialize clusters
153
+ Clusters clusters(neighborhood.size());
154
+ for (int i=0; i<neighborhood.size(); i++)
155
+ clusters[i].append(i);
156
+
157
+ bool done = false;
158
+ while (!done) {
159
+ // nextClusterIds[i] = j means that cluster i is set to merge into cluster j
160
+ QVector<int> nextClusterIDs(neighborhood.size());
161
+ for (int i=0; i<neighborhood.size(); i++) nextClusterIDs[i] = i;
162
+
163
+ // For each cluster
164
+ for (int clusterID=0; clusterID<neighborhood.size(); clusterID++) {
165
+ const Neighbors &neighbors = neighborhood[clusterID];
166
+ int nextClusterID = nextClusterIDs[clusterID];
167
+
168
+ // Check its neighbors
169
+ foreach (const Neighbor &neighbor, neighbors) {
170
+ int neighborID = neighbor.first;
171
+ int nextNeighborID = nextClusterIDs[neighborID];
172
+
173
+ // Don't bother if they have already merged
174
+ if (nextNeighborID == nextClusterID) continue;
175
+
176
+ // Flag for merge if similar enough
177
+ if (normalizedROD(neighborhood, clusterID, neighborID) < threshold) {
178
+ if (nextClusterID < nextNeighborID) nextClusterIDs[neighborID] = nextClusterID;
179
+ else nextClusterIDs[clusterID] = nextNeighborID;
180
+ }
181
+ }
182
+ }
183
+
184
+ // Transitive merge
185
+ for (int i=0; i<neighborhood.size(); i++) {
186
+ int nextClusterID = i;
187
+ while (nextClusterID != nextClusterIDs[nextClusterID]) {
188
+ assert(nextClusterIDs[nextClusterID] < nextClusterID);
189
+ nextClusterID = nextClusterIDs[nextClusterID];
190
+ }
191
+ nextClusterIDs[i] = nextClusterID;
192
+ }
193
+
194
+ // Construct new clusters
195
+ QHash<int, int> clusterIDLUT;
196
+ QList<int> allClusterIDs = QSet<int>::fromList(nextClusterIDs.toList()).values();
197
+ for (int i=0; i<neighborhood.size(); i++)
198
+ clusterIDLUT[i] = allClusterIDs.indexOf(nextClusterIDs[i]);
199
+
200
+ Clusters newClusters(allClusterIDs.size());
201
+ Neighborhood newNeighborhood(allClusterIDs.size());
202
+
203
+ for (int i=0; i<neighborhood.size(); i++) {
204
+ int newID = clusterIDLUT[i];
205
+ newClusters[newID].append(clusters[i]);
206
+ newNeighborhood[newID].append(neighborhood[i]);
207
+ }
208
+
209
+ // Update indices and trim
210
+ for (int i=0; i<newNeighborhood.size(); i++) {
211
+ Neighbors &neighbors = newNeighborhood[i];
212
+ int size = qMin(neighbors.size(),cutoff);
213
+ std::partial_sort(neighbors.begin(), neighbors.begin()+size, neighbors.end(), compareNeighbors);
214
+ for (int j=0; j<size; j++)
215
+ neighbors[j].first = clusterIDLUT[j];
216
+ neighbors = neighbors.mid(0, c utoff);
217
+ }
218
+
219
+ // Update results
220
+ done = true; //(newClusters.size() >= clusters.size());
221
+ clusters = newClusters;
222
+ neighborhood = newNeighborhood;
223
+ }
224
+
225
+ // Save clusters
226
+ if (!csv.isEmpty())
227
+ WriteClusters(clusters, csv);
228
+ return clusters;
229
+ }
230
+
231
+ // Santo Fortunato Community detection in graphs, Physics Reports 486 (2010)
232
+ // wI or wII metric (page 148)
233
+ float wallaceMetric(const br::Clusters &clusters, const QVector<int> &indices)
234
+ {
235
+ int matches = 0;
236
+ int total = 0;
237
+ foreach (const QList<int> &cluster, clusters) {
238
+ for (int i=0; i<cluster.size(); i++) {
239
+ for (int j=i+1; j<cluster.size(); j++) {
240
+ total++;
241
+ if (indices[cluster[i]] == indices[cluster[j]])
242
+ matches++;
243
+ }
244
+ }
245
+ }
246
+ return (float)matches/(float)total;
247
+ }
248
+
249
+ // Santo Fortunato Community detection in graphs, Physics Reports 486 (2010)
250
+ // Jaccard index (page 149)
251
+ float jaccardIndex(const QVector<int> &indicesA, const QVector<int> &indicesB)
252
+ {
253
+ int a[2][2] = {{0,0},{0,0}};
254
+ for (int i=0; i<indicesA.size()-1; i++)
255
+ for (int j=i+1; j<indicesA.size(); j++)
256
+ a[indicesA[i] == indicesA[j] ? 1 : 0][indicesB[i] == indicesB[j] ? 1 : 0]++;
257
+
258
+ return float(a[1][1]) / (a[0][1] + a[1][0] + a[1][1]);
259
+ }
260
+
261
+ // Evaluates clustering algorithms based on metrics described in
262
+ // Santo Fortunato Community detection in graphs, Physics Reports 486 (2010)
263
+ void br::EvalClustering(const QString &csv, const QString &input)
264
+ {
265
+ qDebug(Evaluating %s against %s, qPrintable(csv), qPrintable(input));
266
+
267
+ // We assume clustering algorithms store assigned cluster labels as integers (since the clusters are
268
+ // not named). Direct use of ClusterID is not general -cao
269
+ QList<int> labels = File::get<int>(TemplateList::fromGallery(input), ClusterID);
270
+
271
+ QHash<int, int> labelToIndex;
272
+ int nClusters = 0;
273
+ for (int i=0; i<labels.size(); i++) {
274
+ const float &label = labels[i];
275
+ if (!labelToIndex.contains(label))
276
+ labelToIndex[label] = nClusters++;
277
+ }
278
+
279
+ Clusters truthClusters; truthClusters.reserve(nClusters);
280
+ for (int i=0; i<nClusters; i++)
281
+ truthClusters.append(QList<int>());
282
+
283
+ QVector<int> truthIndices(labels.size());
284
+ for (int i=0; i<labels.size(); i++) {
285
+ truthIndices[i] = labelToIndex[labels[i]];
286
+ truthClusters[labelToIndex[labels[i]]].append(i);
287
+ }
288
+
289
+ Clusters testClusters = ReadClusters(csv);
290
+
291
+ QVector<int> testIndices(labels.size());
292
+ for (int i=0; i<testClusters.size(); i++)
293
+ for (int j=0; j<testClusters[i].size(); j++)
294
+ testIndices[testClusters[i][j]] = i;
295
+
296
+ // At this point the following 4 things are defined:
297
+ // truthClusters - list of clusters of template_ids based on subject_ids
298
+ // truthIndices - template_id to cluster_id based on sigset subject_ids
299
+ // testClusters - list of clusters of template_ids based on csv input
300
+ // testIndices - template_id to cluster_id based on testClusters
301
+
302
+ float wI = wallaceMetric(truthClusters, testIndices);
303
+ float wII = wallaceMetric(testClusters, truthIndices);
304
+ float jaccard = jaccardIndex(testIndices, truthIndices);
305
+ qDebug(Recall: %f Precision: %f F-score: %f Jaccard index: %f, wI, wII, sqrt(wI*wII), jaccard);
306
+ }
307
+
308
+ br::Clusters br::ReadClusters(const QString &csv)
309
+ {
310
+ Clusters clusters;
311
+ QFile file(csv);
312
+ bool success = file.open(QFile::ReadOnly);
313
+ if (!success) qFatal(Failed to open %s for reading., qPrintable(csv));
314
+ QStringList lines = QString(file.readAll()).split(\n);
315
+ file.close();
316
+
317
+ foreach (const QString &line, lines) {
318
+ Cluster cluster;
319
+ QStringList ids = line.trimmed().split(,, QString::SkipEmptyParts);
320
+ foreach (const QString &id, ids) {
321
+ bool ok;
322
+ cluster.append(id.toInt(&ok));
323
+ if (!ok) qFatal(Non-interger id.);
324
+ }
325
+ clusters.append(cluster);
326
+ }
327
+ return clusters;
328
+ }
329
+
330
+ void br::WriteClusters(const Clusters &clusters, const QString &csv)
331
+ {
332
+ QFile file(csv);
333
+ bool success = file.open(QFile::WriteOnly);
334
+ if (!success) qFatal(Failed to open %s for writing., qPrintable(csv));
335
+
336
+ foreach (Cluster cluster, clusters) {
337
+ if (cluster.empty()) continue;
338
+
339
+ qSort(cluster);
340
+ QStringList ids;
341
+ foreach (int id, cluster)
342
+ ids.append(QString::number(id));
343
+ file.write(qPrintable(ids.join(,)+\n));
344
+ }
345
+ file.close();
346
+ }
347
+
data/csv/init.csv ADDED
@@ -0,0 +1,33 @@
1
+ text,sleep_time
2
+ initialize..,0.005
3
+ Install.. SuperHacker.exe,0.005
4
+ Loading...,0.002
5
+ Loading...,0.002
6
+ ........................................................................................,0.001
7
+ ..####...##..##..#####...######..#####...##..##...####....####...##..##..######..#####..,0.001
8
+ .##......##..##..##..##..##......##..##..##..##..##..##..##..##..##.##...##......##..##.,0.001
9
+ ..####...##..##..#####...####....#####...######..######..##......####....####....#####..,0.001
10
+ .....##..##..##..##......##......##..##..##..##..##..##..##..##..##.##...##......##..##.,0.001
11
+ ..####....####...##......######..##..##..##..##..##..##...####...##..##..######..##..##.,0.001
12
+ ........................................................................................,0.001
13
+ ______
14
+ / /\
15
+ / /##\
16
+ / /####\
17
+ / /######\
18
+ / /########\
19
+ / /##########\
20
+ / /#####/\#####\
21
+ / /#####/++\#####\
22
+ / /#####/++++\#####\
23
+ / /#####/\+++++\#####\
24
+ / /#####/ \+++++\#####\
25
+ / /#####/ \+++++\#####\
26
+ / /#####/ \+++++\#####\
27
+ / /#####/ \+++++\#####\
28
+ / /#####/__________\+++++\#####\
29
+ / \+++++\#####\
30
+ /__________________________\+++++\####/
31
+ \+++++++++++++++++++++++++++++++++\##/
32
+ \+++++++++++++++++++++++++++++++++\/
33
+ ``````````````````````````````````
data/csv/log.csv ADDED
@@ -0,0 +1,47 @@
1
+ text
2
+ user1 pts/0 10.0.2.2 Thu Sep 20 22:55 still logged in
3
+ reboot system boot 3.10.0-862.11.6. Thu Sep 20 22:54 - 22:55 (00:00)
4
+ user1 pts/0 10.0.2.2 Sun Sep 9 04:31 - crash (11+18:23)
5
+ user1 pts/0 10.0.2.2 Sun Sep 9 04:17 - 04:31 (00:14)
6
+ reboot system boot 3.10.0-862.6.3.e Sun Sep 9 04:16 - 22:55 (11+18:38)
7
+ user1 pts/0 10.0.2.2 Tue Sep 4 23:57 - crash (4+04:19)
8
+ reboot system boot 3.10.0-862.6.3.e Tue Sep 4 23:56 - 22:55 (15+22:58)
9
+ user1 pts/0 10.0.2.2 Mon Sep 3 12:19 - 14:33 (02:13)
10
+ user1 pts/0 10.0.2.2 Mon Sep 3 12:08 - 12:17 (00:09)
11
+ reboot system boot 3.10.0-862.6.3.e Mon Sep 3 12:08 - 14:38 (02:29)
12
+ user1 pts/1 10.0.2.2 Sun Sep 2 13:16 - crash (22:52)
13
+ user1 pts/0 10.0.2.2 Sun Sep 2 08:16 - crash (1+03:52)
14
+ reboot system boot 3.10.0-862.6.3.e Sun Sep 2 08:16 - 14:38 (1+06:22)
15
+ user1 pts/0 10.0.2.2 Sat Sep 1 14:29 - 15:03 (00:33)
16
+ reboot system boot 3.10.0-862.6.3.e Sat Sep 1 14:29 - 15:03 (00:34)
17
+ user1 pts/0 10.0.2.2 Wed Aug 29 12:11 - 13:58 (01:46)
18
+ reboot system boot 3.10.0-862.6.3.e Wed Aug 29 12:11 - 15:03 (3+02:52)
19
+ user1 pts/0 10.0.2.2 Tue Aug 28 13:16 - crash (22:55)
20
+ reboot system boot 3.10.0-862.6.3.e Tue Aug 28 13:15 - 15:03 (4+01:47)
21
+
22
+
23
+ Username Port From Latest
24
+ root **Never logged in**
25
+ bin **Never logged in**
26
+ daemon **Never logged in**
27
+ adm **Never logged in**
28
+ lp **Never logged in**
29
+ sync **Never logged in**
30
+ shutdown **Never logged in**
31
+ halt **Never logged in**
32
+ mail **Never logged in**
33
+ operator **Never logged in**
34
+ ftp **Never logged in**
35
+ nobody **Never logged in**
36
+ systemd-network **Never logged in**
37
+ dbus **Never logged in**
38
+ polkitd **Never logged in**
39
+ rpc **Never logged in**
40
+ rpcuser **Never logged in**
41
+ nfsnobody **Never logged in**
42
+ sshd **Never logged in**
43
+ postfix **Never logged in**
44
+ chrony **Never logged in**
45
+ →user1 pts/0 10.0.2.2 22:55:20 +0000 2018
46
+
47
+
data/csv/menu.csv ADDED
@@ -0,0 +1,5 @@
1
+ text,sleep_time
2
+ ------------,0.001
3
+ hax ,0.02
4
+ exit ,0.02
5
+ ------------,0.001
data/csv/success.csv ADDED
@@ -0,0 +1,10 @@
1
+ text
2
+ ...........................................................................................................
3
+ .##...##.######..####...####..######..####..##..##.........####..##..##..####...####..######..####...####..
4
+ .###.###...##...##.....##.......##...##..##.###.##........##.....##..##.##..##.##..##.##.....##.....##.....
5
+ .##.#.##...##....####...####....##...##..##.##.###.........####..##..##.##.....##.....####....####...####..
6
+ .##...##...##.......##.....##...##...##..##.##..##............##.##..##.##..##.##..##.##.........##.....##.
7
+ .##...##.######..####...####..######..####..##..##.........####...####...####...####..######..####...####..
8
+ ...........................................................................................................
9
+
10
+ create by kouta
data/exe/super_hacker ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "./lib/super_hacker"
4
+ hacker = Hacker.new
5
+ hacker.step
@@ -0,0 +1,52 @@
1
+ require 'io/console/size'
2
+ $stdout.sync = true
3
+
4
+ #CreateCode
5
+ class CodeGenerator
6
+ def initialize
7
+ end
8
+ #単語毎に区切って表示
9
+ def type_word_code(str,split_sleep = 0.02,typing_sleep = 0.02)
10
+ str.chars do |s|
11
+ #もし空白なら空白用のスリープ時間を適用
12
+ if s == ' ' || s == '\t'
13
+ sleep(split_sleep)
14
+ print s
15
+ else
16
+ sleep(typing_sleep)
17
+ print s
18
+ end
19
+ end
20
+ puts
21
+ end
22
+
23
+ #プログレスバーの表示
24
+ def print_progres()
25
+ 100.times do |num|
26
+ print "#{num}%\r"
27
+ sleep 0.025
28
+ STDOUT.flush
29
+ end
30
+ end
31
+
32
+ #CSVファイルの読み込み
33
+ def read_csv(file_name,sleep_time = 0.001,word_sleep = 0.02)
34
+ csv_data = CSV.read(file_name, headers: true)
35
+ csv_data.each do |data|
36
+ #もしテキストがなければ改行して次の文字へ
37
+ if data["text"].nil?
38
+ puts
39
+ next
40
+ end
41
+
42
+ #sleep_timeが設定されていれば、csvファイルのほうを有効にする
43
+ if data["sleep_time"].nil? == false
44
+ type_word_code(data["text"],word_sleep,data["sleep_time"].to_f)
45
+ else
46
+ #csvデータを表示する
47
+ type_word_code(data["text"],word_sleep,sleep_time)
48
+ end
49
+ end
50
+ end
51
+
52
+ end
@@ -0,0 +1,3 @@
1
+ module SuperHacker
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,101 @@
1
+ require './lib/super_hacker/version'
2
+ require 'csv'
3
+ require './lib/code_generator'
4
+ require 'securerandom'
5
+
6
+ class Hacker
7
+ def initialize
8
+ @cg = CodeGenerator.new()
9
+ end
10
+
11
+ #IPアドレスを入力するまでのシーン
12
+ def scene_input_ip
13
+ ip = "192.168.#{rand(1..99)}.#{rand(1..99)}"
14
+ @cg.type_word_code("You are Get IP address #{ip}")
15
+ @cg.type_word_code("Plz Input IP address")
16
+ print "[IP]> "
17
+ user_input_ip = gets.chomp()
18
+ #比較結果を返す
19
+ user_input_ip == ip
20
+ end
21
+
22
+ #loginするまでのシーン
23
+ def scene_login
24
+ #ダウンロード成功、色々流れてくる。
25
+ @cg.type_word_code("[CONNECTION SUCCESS]",0.02,0.01)
26
+ @cg.type_word_code("Downloading..",0.02,0.01)
27
+ @cg.print_progres()
28
+ @cg.read_csv("./csv/download.csv",0.00001,0.00001)
29
+
30
+ #パスワードを入力させる
31
+ create_password = SecureRandom.base64(5)
32
+ @cg.type_word_code("You are get Pass Word: #{create_password}")
33
+ @cg.type_word_code("Plz Input Pass Word")
34
+ print "[PassWord]> "
35
+ password = gets.chomp()
36
+
37
+ #比較結果を返す
38
+ create_password == password
39
+ end
40
+
41
+ #成功
42
+ def scene_success
43
+ @cg.read_csv("./csv/success.csv",0.001,0.001)
44
+ end
45
+
46
+ #失敗
47
+ def scene_faild
48
+ @cg.read_csv("./csv/faild.csv",0.001,0.001)
49
+ end
50
+
51
+ #実装部分
52
+ def step
53
+ #初期化csvファイルの読み込み
54
+ @cg.read_csv('./csv/init.csv')
55
+
56
+ loop do
57
+ #メニュー表示
58
+ @cg.read_csv('./csv/menu.csv')
59
+
60
+ print("(HACK_MENU)> ")
61
+ input = gets.chomp
62
+
63
+ if input == "hax"
64
+ #haxコードの表示
65
+ @cg.read_csv('./csv/hax.csv',0.002,0.0001)
66
+ @cg.read_csv('./csv/log.csv',0.002,0.0001)
67
+
68
+ #IPアドレスを入力させる
69
+ if scene_input_ip == false
70
+ @cg.type_word_code("You jare input mistakes..")
71
+ scene_faild
72
+ next
73
+ end
74
+
75
+ #loginするまでのシーン
76
+ if scene_login == false
77
+ @cg.type_word_code("You are input mistakes..")
78
+ scene_faild
79
+ next
80
+ end
81
+
82
+ @cg.type_word_code("Infiltration succeeded")
83
+
84
+ #成功
85
+ scene_success
86
+
87
+ elsif input == "exit" || input == "quit"
88
+ #終了
89
+ @cg.type_word_code("bye..")
90
+ break
91
+ else
92
+ #入力ミス
93
+ @cg.type_word_code("[INPUT ERROR]")
94
+ end
95
+ end
96
+ end
97
+
98
+ end
99
+
100
+
101
+
@@ -0,0 +1,41 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "super_hacker/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "super_hacker"
8
+ spec.version = SuperHacker::VERSION
9
+ spec.authors = ["kouta"]
10
+ spec.email = [""]
11
+
12
+ spec.summary = %q{SUPER HACK}
13
+ spec.description = %q{Are you Super Hacker? Yes. We are super hacker!! LOL}
14
+ spec.homepage = ""
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ # if spec.respond_to?(:metadata)
20
+ # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
21
+ # else
22
+ # raise "RubyGems 2.0 or newer is required to protect against " \
23
+ # "public gem pushes."
24
+ # end
25
+
26
+ # Specify which files should be added to the gem when it is released.
27
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
28
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
29
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
30
+ end
31
+ spec.bindir = "exe"
32
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
33
+ spec.require_paths = ["lib"]
34
+
35
+ spec.add_development_dependency "bundler", "~> 1.16"
36
+ spec.add_development_dependency "rake", "~> 10.0"
37
+ spec.add_development_dependency "minitest", "~> 5.0"
38
+ spec.add_development_dependency "thor"
39
+
40
+ end
41
+
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: super_hacker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - kouta
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-09-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: thor
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Are you Super Hacker? Yes. We are super hacker!! LOL
70
+ email:
71
+ - ''
72
+ executables:
73
+ - super_hacker
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - ".travis.yml"
79
+ - CODE_OF_CONDUCT.md
80
+ - Gemfile
81
+ - Gemfile.lock
82
+ - LICENSE.txt
83
+ - README.md
84
+ - Rakefile
85
+ - bin/console
86
+ - bin/setup
87
+ - csv/download.csv
88
+ - csv/faild.csv
89
+ - csv/hax.csv
90
+ - csv/init.csv
91
+ - csv/log.csv
92
+ - csv/menu.csv
93
+ - csv/success.csv
94
+ - exe/super_hacker
95
+ - lib/code_generator.rb
96
+ - lib/super_hacker.rb
97
+ - lib/super_hacker/version.rb
98
+ - super_hacker.gemspec
99
+ homepage: ''
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.7.6
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: SUPER HACK
123
+ test_files: []