MEWBIES@: Facebook Twitter G+ YouTube DeviantArt Forum Wall
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
██ ██
█▌ - BLOWSSI FOR IRSSI - █▌
█▌ █▌
█ ▐▌
█ Blowssi is a Mircryption FiSH compatible plug-in for Irssi providing ▐▌
█ encryption. It is more secure than FiSH as it uses the CBC module. Blowssi ▐▌
█ site is HERE. The author Gothi[c] is very responsive to bugs and requests. ▐▌
█ Blowssi support is at donationcoder.com forum HERE. ▐▌
█ ▐▌
█ UPDATE: Blowssi v0.2 now supports 'keyex plugin' to auto exchange keys. ▐▌
█ Yay!!! :) Thx Gothi[c]! ▐▌
█ ▐▌
█ ▐▌
█ PREREQUISITES ▐▌
█ CPAN - PERL MODULES NOTES & TROUBLE SHOOTING ▐▌
█ INSTALL CRYPT::IRCBLOWFISH ▐▌
█ INSTALL CRYPT::IRCDH1080 ▐▌
█ INSTALL BLOWSSI SCRIPT ▐▌
█ BLOWSSI USAGE ▐▌
█ DEMONSTRATION WHY CBC IS MORE SECURE ▐▌
█ TROUBLE SHOOTING ▐▌
█ ▐▌
█ ___________..___________ ▐▌
█ ▐▌
█ PREREQUISITES: ▐▌
█ `````````````` ▐▌
█ Check blowssi site for newer versions first. ▐▌
█ wget http://www.linkerror.com/programs/blowssi-0.2.0.tar.bz2 ▐▌
█ tar xjf blowssi-0.2.0.tar.bz2 && cd blowssi-0.2.0 ▐▌
█ Find out what *prerequisites we need: ▐▌
█ cat ~/blowssi-0.2.0/README ▐▌
█ * perl >= 5.10.0 ▐▌
█ * Crypt::CBC ▐▌
█ * MIME:Base64 ▐▌
█ * Crypt::ircBlowfish (see bundled zip file) ▐▌
█ * Crypt::ircDH1080 (see bundled tar.gz file) ▐▌
█ * irssi >= 0.8.0 ▐▌
█ ▐▌
█ unzip Crypt-ircBlowfish-1.0.zip ▐▌
█ cat ~/blowssi-0.2.0/Crypt-ircBlowfish/README ▐▌
█ * Crypt::Blowfish ▐▌
█ ▐▌
█ tar xvzf Crypt-ircDH1080-0.01.tar.gz ▐▌
█ cat ~/blowssi-0.2.0/Crypt-ircDH1080-0.01/README ▐▌
█ * Crypt::Random ▐▌
█ * Math::BigInt ▐▌
█ * Digest::SHA ▐▌
█ ▐▌
█ Then to view what prerequisites you have installed already (do not copy a ▐▌
█ space after \): ▐▌
█ dpkg -l perl libcrypt-blowfish-perl libcrypt-cbc-perl perl-modules \ ▐▌
█ libmime-types-perl irssi libmath-bigint-perl libdigest-sha-perl ▐▌
█ ▐▌
█ If you have those installed output will be similar to: ▐▌
█ ii irssi 0.8.15-5 terminal based IRC client ▐▌
█ ii libcrypt-blowfish-perl 2.12-1+b2 Blowfish cryptography for Per ▐▌
█ ii libcrypt-cbc-perl 2.30-1 Implementation of cipher bloc ▐▌
█ ii libdigest-sha-perl 5.71-2+deb7u1 Perl extension for SHA-1/224/ ▐▌
█ ii libmath-bigint-perl 1.997-1 arbitrary size integer/float ▐▌
█ ii libmime-types-perl 1.35-1 Perl extension for determinin ▐▌
█ ii perl 5.14.2-21+deb7u Larry Wall's Practical Extrac ▐▌
█ ii perl-modules 5.14.2-21+deb7u Core Perl modules ▐▌
█ ▐▌
█ Install those that you do not have installed: ▐▌
█ su ▐▌
█ aptitude update ▐▌
█ For individual installing of each and details skip this; If you want to ▐▌
█ install all the above in one shot, do not copy a space after \: ▐▌
█ aptitude install perl libcrypt-cbc-perl libcrypt-blowfish-perl \ ▐▌
█ libcrypt-cbc-perl perl-modules libmime-types-perl irssi \ ▐▌
█ libmath-bigint-perl libdigest-sha-perl ▐▌
█ ▐▌
█ Or for individual install and details: ▐▌
█ For perl, you need v 5.10.0 or higher, will be on dpkg list as perl ▐▌
█ If you need: aptitude install perl ▐▌
█ ▐▌
█ For Crypt::ircBlowfish will be on dpkg list as libcrypt-cbc-perl ▐▌
█ We'll install that after (INSTALL Crypt::ircBlowfish). ▐▌
█ ▐▌
█ Needed for Crypt::ircBlowfish is Crypt::Blowfish (README in ▐▌
█ Crypt-ircBlowfish-2.0.zip) will be on dpkg list as libcrypt-blowfish-perl ▐▌
█ If you need: aptitude install libcrypt-blowfish-perl ▐▌
█ ▐▌
█ **For Crypt::CBC will be on dpkg list as libcrypt-cbc-perl ▐▌
█ If you need: aptitude install libcrypt-cbc-perl ▐▌
█ ▐▌
█ For MIME:Base64 will be on dpkg list as libmime-types-perl and perl-modules▐▌
█ If you need: aptitude install perl-modules libmime-types-perl ▐▌
█ ▐▌
█ For irssi you need v 0.8.0 or higher, will be on dpkg list as irssi 0.8.x ▐▌
█ If you need: aptitude install irssi ▐▌
█ ▐▌
█ For Math::BigInt will be on dpkg list as libmath-bigint-perl ▐▌
█ If you need: aptitude install libmath-bigint-perl ▐▌
█ ▐▌
█ For Digest::SHA will be on dpkg list as libdigest-sha-perl ▐▌
█ If you need: aptitude install libdigest-sha-perl ▐▌
█ ▐▌
█ ___________..___________ ▐▌
█ ▐▌
█ For Crypt::Random: we will use cpan: ▐▌
█ cpan -i Crypt::Random ▐▌
█ IF the reply is: -bash: cpan: command not found then install cpan first: ▐▌
█ su ▐▌
█ aptitude install perl-CPAN ▐▌
█ exit ▐▌
█ Then do again: cpan -i Crypt::Random ▐▌
█ The first time running cpan you will be prompted with many questions. Hit ▐▌
█ Enter key to all questions to select its default, then when you come to: ▐▌
█ Select your continent (or several nearby continents) [] ▐▌
█ You need to enter a number from the list presented and a few more location ▐▌
█ selections. ▐▌
█ ▐▌
█ **Other OSes (besides Debian) might need to install the perl module ▐▌
█ Crypt::CBC /libcrypt-cbc-perl using 'cpan': ▐▌
█ cpan -i Crypt::CBC ▐▌
█ ▐▌
█ ___________..___________ ▐▌
█ ▐▌
█ CPAN - PERL MODULES NOTES & TROUBLE SHOOTING: ▐▌
█ ````````````````````````````````````````````` ▐▌
█ 1.) To view what perl modules you have installed you can also do: ▐▌
█ instmodsh ▐▌
█ l ▐▌
█ q ▐▌
█ Example output: ▐▌
█ Installed modules are: ▐▌
█ Crypt::CBC ▐▌
█ Crypt::ircBlowfish ▐▌
█ Crypt::Random ▐▌
█ POE::Component::Client::FTP ▐▌
█ POE::Filter::Ls ▐▌
█ Perl ▐▌
█ ▐▌
█ 2.) If you install the Perl modules as 'root' and was prompted: ▐▌
█ "If you're accessing the net via proxies, you can specify them in the ▐▌
█ CPAN configuration or via environment variables. The variable in ▐▌
█ the $CPAN::Config takes precedence. ▐▌
█ <ftp_proxy> ▐▌
█ Your ftp_proxy? [] ▐▌
█ <http_proxy> ▐▌
█ Your http_proxy? [] ▐▌
█ <no_proxy> ▐▌
█ Your no_proxy? [] ▐▌
█ CPAN needs access to at least one CPAN mirror. ▐▌
█ As you did not allow me to connect to the internet you need to supply ▐▌
█ a valid CPAN URL now. ▐▌
█ Please enter the URL of your CPAN mirror ▐▌
█ Configuration does not allow connecting to the internet. ▐▌
█ Current set of CPAN URLs: ▐▌
█ Enter another URL or RETURN to quit: []" ▐▌
█ ▐▌
█ Enter this URL then hit your Enter key TWICE for it to be accepted: ▐▌
█ http://www.cpan.org ▐▌
█ ▐▌
█ 3.) IF you have problems installing Perl modules as a 'user' read HERE. ▐▌
█ (I've placed a copy HERE in case that URL goes dead). ▐▌
█ ▐▌
█ 4.) If you are install the Perl modules as root and after installing it ▐▌
█ always ends with: ▐▌
█ [snip] ▐▌
█ Warning (usually harmless): 'YAML' not installed, will not store ▐▌
█ persistent state ▐▌
█ Running make test ▐▌
█ Can't test without successful make ▐▌
█ Running make install ▐▌
█ Make had returned bad status, install seems impossible ▐▌
█ Failed during this command: ▐▌
█ INGY/YAML-0.68.tar.gz : make NO ▐▌
█ [snip] ▐▌
█ ▐▌
█ notice that it states: make NO ▐▌
█ a. My modules have run fine with that error being there, but; ▐▌
█ b. If you want to fix the YAML error; search around how. I don't want to ▐▌
█ cover that here, but two suggestions: ▐▌
█ i. wget it and install manually - easy, though I have read this in ▐▌
█ itself can present a number of problems, Or: ▐▌
█ ii. Install, using cpan, a bundle of modules which includes YAML and ▐▌
█ fixed this error for myself (click HERE for the list of modules will ▐▌
█ install). Note that it has a number of dependencies that it you will ▐▌
█ be prompted to accept: ▐▌
█ cpan -i Bundle::CPANxxl ▐▌
█ ▐▌
█ After you install 'Crypt::CBC' (libcrypt-cbc-perl) it will not show on ▐▌
█ the instmodsh list or 'perldoc perllocal' list if you didn't install it ▐▌
█ using cpan; that is fine, don't worry about it. ▐▌
█ ▐▌
█ ___________..___________ ▐▌
█ ▐▌
█ ▐▌
█ INSTALL CRYPT::IRCBLOWFISH: ▐▌
█ ``````````````````````````` ▐▌
█ Crypt::ircBlowfish is in blowssi-0.2.0 that we decompressed earlier: ▐▌
█ cd ~/blowssi-0.2.0/Crypt-ircBlowfish ▐▌
█ cmds as per the zips 'README' covers everything, gain root if you aren't: ▐▌
█ perl Makefile.PL ▐▌
█ Output will be: Checking if your kit is complete... ▐▌
█ Looks good ▐▌
█ Writing Makefile for Crypt::ircBlowfish ▐▌
█ Writing MYMETA.yml ▐▌
█ ▐▌
█ su ▐▌
█ You don't need su (root) to install locally. ▐▌
█ make ▐▌
█ Output will be: ▐▌
█ cp lib/Crypt/ircBlowfish.pm blib/lib/Crypt/ircBlowfish.pm ▐▌
█ Manifying blib/man3/Crypt::ircBlowfish.3pm ▐▌
█ ▐▌
█ make test ▐▌
█ Output will be: ▐▌
█ PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" ▐▌
█ "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t ▐▌
█ t/Crypt-ircBlowfish.t .. ok ▐▌
█ All tests successful. ▐▌
█ Files=1, Tests=1, 0 wallclock secs ( 0.09 usr 0.01 sys + 0.03 cusr ▐▌
█ 0.00 csys = 0.13 CPU) ▐▌
█ Result: PASS ▐▌
█ ▐▌
█ make install ▐▌
█ Output will be: ▐▌
█ Installing /usr/local/share/perl/5.10.0/Crypt/ircBlowfish.pm ▐▌
█ Installing /usr/local/man/man3/Crypt::ircBlowfish.3pm ▐▌
█ Writing /usr/local/lib/perl/5.10.0/auto/Crypt/ircBlowfish/.packlist ▐▌
█ Appending installation info to /usr/local/lib/perl/5.10.0/perllocal.pod ▐▌
█ ▐▌
█ Or output will be (mine v0.2.0): ▐▌
█ /home/user/blowssi-0.2.0/Crypt-ircBlowfish# make install ▐▌
█ Installing /home/user/perl5/lib/perl5/Crypt/ircBlowfish.pm ▐▌
█ Installing /home/user/perl5/man/man3/Crypt::ircBlowfish.3pm ▐▌
█ Appending installation info to /home/user/perl5/lib/perl5/ ▐▌
█ i486-linux-gnu-thread-multi-64int/perllocal.pod ▐▌
█ ▐▌
█ If you are root: exit ▐▌
█ ___________..___________ ▐▌
█ ▐▌
█ INSTALL CRYPT::IRCDH1080: ▐▌
█ ````````````````````````` ▐▌
█ cd ~/blowssi-0.2.0/Crypt-ircDH1080-0.01 ▐▌
█ perl Makefile.PL ▐▌
█ Output will be: ▐▌
█ Checking if your kit is complete... ▐▌
█ Looks good ▐▌
█ Writing Makefile for Crypt::ircDH1080 ▐▌
█ Writing MYMETA.yml ▐▌
█ ▐▌
█ make ▐▌
█ Output will be: ▐▌
█ cp lib/Crypt/ircDH1080.pm blib/lib/Crypt/ircDH1080.pm ▐▌
█ Manifying blib/man3/Crypt::ircDH1080.3pm ▐▌
█ ▐▌
█ make test ▐▌
█ NOTES IF YOU RECEIVE THE ERROR: ▐▌
█ PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" ▐▌
█ "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t ▐▌
█ t/Crypt-ircDH1080.t .. 1/2 ▐▌
█ # Failed test at t/Crypt-ircDH1080.t line 21. ▐▌
█ t/Crypt-ircDH1080.t .. 3/2 # Looks like you planned 2 tests but ran 3. ▐▌
█ # Looks like you failed 1 test of 3 run. ▐▌
█ t/Crypt-ircDH1080.t .. Dubious, test returned 1 (wstat 256, 0x100) ▐▌
█ Failed 1/2 subtests ▐▌
█ ▐▌
█ Test Summary Report ▐▌
█ ------------------- ▐▌
█ t/Crypt-ircDH1080.t (Wstat: 256 Tests: 3 Failed: 2) ▐▌
█ Failed tests: 2-3 ▐▌
█ Non-zero exit status: 1 ▐▌
█ Parse errors: Bad plan. You planned 2 tests but ran 3. ▐▌
█ Files=1, Tests=3, 29 wallclock secs ( 0.09 usr 0.01 sys + 27.85 cusr ▐▌
█ 0.10 csys = 28.05 CPU) ▐▌
█ Result: FAIL ▐▌
█ Failed 1/1 test programs. 2/3 subtests failed. ▐▌
█ make: *** [test_dynamic] Error 1 ▐▌
█ - END OF ERROR - ▐▌
█ ▐▌
█ 1. Gothi[c] states here that you should safely be able to skip this test ▐▌
█ and proceed. It should work fine for you. I had the error above and ▐▌
█ proceeded fine without further errors. ▐▌
█ ▐▌
█ 2. Or download the patched version, Patched Crypt::ircDH1080, which ▐▌
█ doesn't rely on Crypt::Random from here and install in the same manner as ▐▌
█ Crypt::ircDH1080. ▐▌
█ cd ~/blowssi-0.2.0/ ▐▌
█ wget http://www.linkerror.com/programs/Crypt-ircDH1080-no_crypt_random.tar.bz2
█ tar xjf Crypt-ircDH1080-no_crypt_random.tar.bz2 ▐▌
█ cd Crypt-ircDH1080-no_crypt_random ▐▌
█ cat README ▐▌
█ perl Makefile.PL ▐▌
█ make ▐▌
█ make test ▐▌
█ This still fails for me with the very same error. So I skipped installing ▐▌
█ it since my other one is working fine. If no errors than you might want to ▐▌
█ go ahead and install it: ▐▌
█ make install ▐▌
█ ▐▌
█ 3. If your error stated it "couldn't locate xxxx/xxxx/xxxx.pm" (mine did ▐▌
█ not) first check that you have installed it. If you have then: ▐▌
█ su ▐▌
█ aptitude install curl ▐▌
█ curl -L http://cpanmin.us | perl - App::cpanminus ▐▌
█ exit ▐▌
█ Then the module that the error stated it couldn't locate ▐▌
█ (xxxx/xxxx/xxxx.pm) use 'cpanm -S [needed module]' on it replacing / with ▐▌
█ :: and remove '.pm'. ▐▌
█ For example "couldn't locate xxxx/xxxx/xxxx.pm" ▐▌
█ Then do: ▐▌
█ cpanm -S xxxx::xxxx::xxxx ▐▌
█ ▐▌
█ Then run make test again. ▐▌
█ ▐▌
█ ___________..___________ ▐▌
█ ▐▌
█ INSTALL BLOWSSI SCRIPT: ▐▌
█ ``````````````````````` ▐▌
█ If you would like blowssi available to all users: ▐▌
█ su ▐▌
█ If you have previously installed another version, remove it or move it: ▐▌
█ mv /usr/share/irssi/scripts/blowssi.pl /usr/share/irssi/scripts/blowssi.pl_v0.1.0
█ Then copy new version over, replace 'user' with your username:
█ cp /home/user/blowssi-0.2.0/blowssi.pl /usr/share/irssi/scripts/blowssi.pl ▐▌
█ chmod 755 /usr/share/irssi/scripts/blowssi.pl ▐▌
█ exit ▐▌
█ ▐▌
█ Though this will not 'auto' load the blowssi script. ▐▌
█ Each user will need to use the load line: ▐▌
█ /load /usr/share/irssi/scripts/blowssi.pl ▐▌
█ ▐▌
█ I want mine to auto load so then: ▐▌
█ Create an 'autorun' directory if you don't have one yet: ▐▌
█ mkdir -p ~/.irssi/scripts/autorun ▐▌
█ If you have previously installed another version, remove it or move it: ▐▌
█ mv ~/.irssi/scripts/blowssi.pl ~/.irssi/scripts/blowssi.pl_v0.1.0 ▐▌
█ rm ~/.irssi/scripts/autorun/blowssi.pl ▐▌
█ Then: ▐▌
█ cp ~/blowssi-0.2.0/blowssi.pl ~/.irssi/scripts/blowssi.pl ▐▌
█ chmod 755 ~/.irssi/scripts/blowssi.pl ▐▌
█ ln -s ~/.irssi/scripts/blowssi.pl ~/.irssi/scripts/autorun/blowssi.pl ▐▌
█ ▐▌
█ For other users on the shell to use blowssi with their irssi they only to ▐▌
█ place blowssi.pl in their ~/.irssi/scripts/, chmod 755, create an autorun ▐▌
█ directory, and ln -s it. ▐▌
█ ▐▌
█ Another method would be to create a startup script since the files listed ▐▌
█ on this will be loaded before the files in ~/.irssi/scripts/autorun/ . ▐▌
█ To do this: ▐▌
█ pico ~/.irssi/startup ▐▌
█ Paste in: ▐▌
█ /load ~/.irssi/scripts/blowssi.pl ▐▌
█ ▐▌
█ chmod 755 ~/.irssi/startup ▐▌
█ ▐▌
█ Done :) Easy once you have all the prerequisites installed. ▐▌
█ ▐▌
█ ___________..___________ ▐▌
█ ▐▌
█ BLOWSSI USAGE: ▐▌
█ `````````````` ▐▌
█ Start irssi: irssi ▐▌
█ Or if you are using in screen: screen irssi ▐▌
█ Note: I find it takes longer to load blowssi v0.2.0 than for v.0.1.0 ▐▌
█ If you didn't set blowssi to auto-load: ▐▌
█ /load ~/.irssi/scripts/blowssi.pl ▐▌
█ ▐▌
█ To unload it: ▐▌
█ /unload ~/.irssi/scripts/blowssi.pl ▐▌
█ ▐▌
█ The below commands are to be entered into your irssi window: ▐▌
█ View blowssi help: /blowhelp ▐▌
█ ▐▌
█ Set your channel encryption keys: ▐▌
█ /blowkey #mychannel myencrptkey ▐▌
█ ▐▌
█ Set an encryption key for user mewbie: ▐▌
█ /blowkey mewbie myencrptkey ▐▌
█ ▐▌
█ Delete an encryption key for a channel: ▐▌
█ /blowdel #mychannel ▐▌
█ ▐▌
█ To speak one line without encryption, precede the line with: ` ▐▌
█ Example: `this is not encrypted ▐▌
█ ▐▌
█ Turn encryption/decryption off: ▐▌
█ /blowoff ▐▌
█ ▐▌
█ Turn encryption/decryption back on (it's on by default): ▐▌
█ /blowon ▐▌
█ ▐▌
█ Set an encryption key for user mewbie using the cbc module: ▐▌
█ /blowkey mewbie cbc:myencrptkey ▐▌
█ ▐▌
█ To key exchange with a user, specify mode either ecb (FiSH) or cbc; user ▐▌
█ must also support cbc to use it (Mircryption and blowssi): ▐▌
█ /blowkeyx ecb doggie ▐▌
█ /blowkeyx cbc mewbie ▐▌
█ Note that these keys are not stored like in mIRC Mircryption. Once you ▐▌
█ close your Irssi session those keys will be removed. ▐▌
█ ▐▌
█ Known issue: "No automatic new query window on new crypt messages: When ▐▌
█ keyx is initiated by someone else, and no query window is open, their text ▐▌
█ will go into the status window until a query window is opened by the user."▐▌
█ ▐▌
█ ___________..___________ ▐▌
█ ▐▌
█ DEMONSTRATION WHY CBC IS MORE SECURE: ▐▌
█ ````````````````````````````````````` ▐▌
█ 1. The channel/user must also be using cbc to make use of this. ▐▌
█ ▐▌
█ 2. cbc randomizes the encryption where ebc (what FiSH uses) doesn't. A ▐▌
█ visual to understand, for example: ▐▌
█ Have a user set a different key (ebc) than you have and have them type hi ▐▌
█ three times. You'll see something like: ▐▌
█ +1CJLX1D ▐▌
█ +1CJLX1D ▐▌
█ +1CJLX1D ▐▌
█ Note that the same word is encrypted in the same manner which could allow ▐▌
█ an attacker to build up a dictionary. ▐▌
█ ▐▌
█ Now have the user use a key with cbc and type hi again three times. You'll ▐▌
█ see something like: ▐▌
█ +gSs7W0cn2qC1 ▐▌
█ +Lux2.sNOAN/ ▐▌
█ +7W0cn2qC17BNl ▐▌
█ It's never encrypted the same. Read HERE for more information about cbc. ▐▌
█ ▐▌
█ ___________..___________ ▐▌
█ ▐▌
█ TROUBLE SHOOTING: ▐▌
█ ````````````````` ▐▌
█ 1. You receive only garbled text though you have set your encryption key: ▐▌
█ Once you have loaded blowssi.pl and entered a key for a channel/user it ▐▌
█ will create the file blowssi.conf that contains your encryption keys, in ▐▌
█ plain text. If a key isn't working for you first check the file has the ▐▌
█ correct channel/user name and key: ▐▌
█ pico ~/.irssi/blowssi.conf ▐▌
█ If it doesn't you can edit this file to be correct. ▐▌
█ ▐▌
█ //---------------------------------------------------------------------- ▐▌
█ ▐▌
█ If you find mistakes, have suggestions, and or questions please post at ▐▌
█ mewbies forum HERE - thank you. ▐▌
█ ▐▌
█ Last update on 06 Dec '13 ▐▌
█ ▐▌
█▌ █▌
█▌ - mewbies.com - █▌
█▌ █▌
██▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄██