├── .github └── FUNDING.yml ├── .gitignore ├── CHANGELOG ├── Makefile ├── README.md ├── nyancat.1 ├── src ├── Makefile ├── animation.c ├── nyancat.c └── telnet.h └── systemd ├── nyancat.socket └── nyancat@.service /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [klange] 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | nyancat 2 | *.o 3 | *.pyc 4 | -------------------------------------------------------------------------------- /CHANGELOG: -------------------------------------------------------------------------------- 1 | 1.4.1 2 | * Fix telnet size negotiation 3 | 4 | 1.4 5 | * Added better terminal size autodetection 6 | * Fixed rendering when requested size was larger than 7 | available frame sizes 8 | * Made some corrections to the animation frames 9 | 10 | 1.3 11 | * Added option to skip intro in telnet mode 12 | 13 | 1.2.1 (marked on 2013-07-03) 14 | * Fixes for manpage 15 | 16 | 1.2 (marked on 2013-05-20) 17 | * Remove toaruos legacy support 18 | * May possibly have fixed misidentification on GitHub 19 | * Other minor fixes 20 | 21 | 1.1 (tagged on 2013-01-28) 22 | * Support the Suckless terminal 23 | * Support building for とあるOS 24 | * Changed color palette for 256 color modes (fixes alternate color 25 | schemes looking wonky) 26 | * Install the man page as part of package building 27 | * Fix a potential bug processing extended options 28 | 29 | 1.0 30 | * Initial public release for packaging 31 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | package = nyancat 2 | version = 1.5.2 3 | tarname = $(package) 4 | distdir = $(tarname)-$(version) 5 | 6 | all clean check nyancat: 7 | cd src && $(MAKE) $@ 8 | 9 | dist: $(distdir).tar.gz 10 | 11 | $(distdir).tar.gz: $(distdir) 12 | tar chof - $(distdir) | gzip -9 -c > $@ 13 | rm -rf $(distdir) 14 | 15 | $(distdir): FORCE 16 | mkdir -p $(distdir)/src 17 | cp Makefile $(distdir) 18 | cp src/Makefile $(distdir)/src 19 | cp src/nyancat.c $(distdir)/src 20 | cp src/animation.c $(distdir)/src 21 | cp src/telnet.h $(distdir)/src 22 | 23 | FORCE: 24 | -rm $(distdir).tar.gz >/dev/null 2>&1 25 | -rm -rf $(distdir) >/dev/null 2>&1 26 | 27 | distcheck: $(distdir).tar.gz 28 | gzip -cd $(distdir).tar.gz | tar xvf - 29 | cd $(distdir) && $(MAKE) all 30 | cd $(distdir) && $(MAKE) check 31 | cd $(distdir) && $(MAKE) clean 32 | rm -rf $(distdir) 33 | @echo "*** Package $(distdir).tar.gz is ready for distribution." 34 | 35 | install: all 36 | install src/nyancat /usr/bin/${package} 37 | gzip -9 -c < nyancat.1 > /usr/share/man/man1/nyancat.1.gz 38 | 39 | .PHONY: FORCE all clean check dist distcheck install 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nyancat CLI 2 | 3 | Nyancat rendered in your terminal. 4 | 5 | [![Nyancats](http://nyancat.dakko.us/nyancat.png)](http://nyancat.dakko.us/nyancat.png) 6 | 7 | ## Distributions 8 | 9 | Nyancat is available in the following distributions: 10 | 11 | - [Arch](https://www.archlinux.org/packages/?q=nyancat) 12 | - [Debian](http://packages.qa.debian.org/n/nyancat.html) 13 | - [Fedora](https://src.fedoraproject.org/rpms/nyancat) 14 | - [Gentoo](http://packages.gentoo.org/package/games-misc/nyancat) 15 | - [Mandriva](http://sophie.zarb.org/rpms/928724d4aea0efdbdeda1c80cb59a7d3) 16 | - [Ubuntu](https://launchpad.net/ubuntu/+source/nyancat) 17 | 18 | And also on some BSD systems: 19 | 20 | - [FreeBSD](http://www.freshports.org/net/nyancat/) 21 | - [OpenBSD](http://openports.se/misc/nyancat) 22 | - [NetBSD](http://pkgsrc.se/misc/nyancat) 23 | 24 | ## Setup 25 | 26 | First build the C application: 27 | 28 | make && cd src 29 | 30 | You can run the C application standalone. 31 | 32 | ./nyancat 33 | 34 | To use the telnet server, you need to add a configuration that runs: 35 | 36 | nyancat -t 37 | 38 | We recommend `openbsd-inetd`, but both `xinetd` and `systemd` work as well. You 39 | should be able to use any other compatible `inetd` flavor too. 40 | 41 | ## Distribution Specific Information 42 | 43 | #### Debian/Ubuntu 44 | 45 | Debian and Ubuntu provide the nyancat binary through the `nyancat` package. A 46 | `nyancat-server` package is provided to automatically setup and enable a nyancat 47 | telnet server upon installation. I am not the maintainer of these packages; 48 | please direct any questions or bugs to the relevant distribution's bug tracking 49 | system. 50 | 51 | ## Licenses, References, etc. 52 | 53 | The original source of the Nyancat animation is 54 | [prguitarman](http://www.prguitarman.com/index.php?id=348). 55 | 56 | The code provided here is provided under the terms of the 57 | [NCSA license](http://en.wikipedia.org/wiki/University_of_Illinois/NCSA_Open_Source_License). 58 | -------------------------------------------------------------------------------- /nyancat.1: -------------------------------------------------------------------------------- 1 | .TH NYANCAT 1 "February, 2014" 2 | .SH NAME 3 | nyancat \- terminal-based Pop Tart Cat animation 4 | .SH SYNOPSIS 5 | .B nyancat [ \-hitn ] [\-f frames] 6 | .SH DESCRIPTION 7 | .B nyancat 8 | is an animated, color, ANSI-text program that renders a loop of the 9 | classic Nyan Cat animation. 10 | .PP 11 | nyancat makes use of various ANSI escape sequences to render color, or in the case 12 | of a VT220, simply dumps text to the screen. 13 | .SH OPTIONS 14 | .TP 15 | .B \-i, \-\-intro 16 | Show introduction / about information on startup. 17 | .TP 18 | .B \-I, \-\-skip\-intro 19 | Skip the introduction in telnet mode. 20 | .TP 21 | .B \-t, \-\-telnet 22 | Enable telnet mode. 23 | .TP 24 | .B \-n, \-\-no\-counter 25 | Do not display the timer. 26 | .TP 27 | .B \-s, \-\-no\-title 28 | Do not set the titlebar text. 29 | .TP 30 | .B \-e, \-\-no\-clear 31 | Do not clear the display between frames. 32 | .TP 33 | .B \-d, \-\-delay 34 | Delay image rendering by anywhere between 10ms and 1000ms. 35 | .br 36 | Default (90ms) is used if amount is out of range. 37 | .TP 38 | .B \-f, \-\-frames 39 | Display the requested number of frames, then quit. 40 | .TP 41 | .B \-r, \-\-min\-rows 42 | Crop the animation from the top. 43 | .TP 44 | .B \-R, \-\-max\-rows 45 | Crop the animation from the bottom. 46 | .TP 47 | .B \-c, \-\-min\-cols 48 | Crop the animation from the left. 49 | .TP 50 | .B \-C, \-\-max\-cols 51 | Crop the animation from the right. 52 | .TP 53 | .B \-W, \-\-width 54 | Crop the animation to the given width. 55 | .TP 56 | .B \-H, \-\-height 57 | Crop the animation to the given height. 58 | .TP 59 | .B \-h, \-\-help 60 | Show help message and exit. 61 | .SH HOMEPAGE 62 | .PP 63 | .B Homepage: 64 | http://nyancat.dakko.us/ 65 | .PP 66 | .B Repository: 67 | https://github.com/klange/nyancat 68 | .SH AUTHOR 69 | nyancat was written by K. Lange . 70 | .PP 71 | This manual page was written by Jonathan McCrohan , 72 | for the Debian project (and may be used by others). 73 | -------------------------------------------------------------------------------- /src/Makefile: -------------------------------------------------------------------------------- 1 | OBJECTS = nyancat.o 2 | 3 | CC ?= 4 | CFLAGS ?= -g -Wall -Wextra -std=c99 -pedantic -Wwrite-strings 5 | CPPFLAGS ?= 6 | LDFLAGS ?= 7 | 8 | all: nyancat 9 | 10 | nyancat: $(OBJECTS) 11 | $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $@ 12 | 13 | clean: 14 | -rm -f $(OBJECTS) nyancat 15 | 16 | check: all 17 | # Unit tests go here. None currently. 18 | @echo "*** ALL TESTS PASSED ***" 19 | 20 | .PHONY: all clean check 21 | -------------------------------------------------------------------------------- /src/animation.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Pop Tart Cat animation frames 3 | */ 4 | #ifndef ANIMATION_H 5 | #define ANIMATION_H 6 | 7 | const char * frame0[] = { 8 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,", 9 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,,,,,,,,,,,,,,,,,,,,,,,,", 10 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,", 11 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 12 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 13 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 14 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,", 15 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,", 16 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 17 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,", 18 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 19 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,", 20 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,", 21 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 22 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 23 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 24 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 25 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 26 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 27 | ",.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 28 | ".,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 29 | ",.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 30 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 31 | ",,,,,,,,,,,,,,,,,,,,,,,,,''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 32 | ",,>>>>>>>>,,,,,,,,>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 33 | ">>>>>>>>>>>>>>>>>>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 34 | ">>&&&&&&&&>>>>>>>>&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 35 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$''$-$$@','',,,,,,,,,,,,,,,,,,,", 36 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$$$$$$$'**'$$$@''**',,,,,,,,,,,,,,,,,,", 37 | "&&++++++++&&&&&&&&'''++'@$$$$$-$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 38 | "++++++++++++++++++**''+'@$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,,", 39 | "++++++++++++++++++'**'''@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 40 | "++########++++++++''**''@$$$$$$-'*************',,,,,,,,,,,,,,,,,", 41 | "###################''**'@$-$$$$$'***.'****.'**',,,,,,,,,,,,,,,,,", 42 | "####################''''@$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 43 | "##========########====''@@$$$-$$'*%%********%%',,,,,,,,,,,,,,,,,", 44 | "======================='@@@$$$$$$'***''''''**',,,,,,,,,,,,,,,,,,", 45 | "==;;;;;;;;.=======;;;;'''@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,,", 46 | ";;;;;;;;;;;;;;;;;;;;;'***''''''''''''''''''',,,,,,,,,,,,,,,,,,,,", 47 | ";;;;;;;;;;;;;;;;;;;;;'**'','*',,,,,'*','**',,,,,,,,,,,,,,,,,,,,,", 48 | ";;,,,,,.,,;;;.;;;;,,,'''',,'',,,,,,,'',,'',,,,,,,,,,,,,,,,,,,,,,", 49 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 50 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 51 | ",,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 52 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 53 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 54 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 55 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 56 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 57 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 58 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 59 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.", 60 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 61 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 62 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 63 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 64 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 65 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 66 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 67 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 68 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,..,,,,,,,,,,,,,,,,,,,,,,,,,,", 69 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 70 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 71 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}; 72 | 73 | const char * frame1[] = { 74 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 75 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 76 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 77 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 78 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 79 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 80 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,", 81 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,.,,,,,,", 82 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 83 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,.,,,,,", 84 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 85 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,.,,,,,,", 86 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,", 87 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 88 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 89 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 90 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 91 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 92 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 93 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 94 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 95 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 96 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 97 | ",,,,,,,,,,,,,,,,,,,,,,,,,''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 98 | ",,>>>>>>>>,,,,,,,,>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 99 | ">>>>>>>>>>>>>>>>>>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 100 | ">>&&&&&&&&>>>>>>>>&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 101 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 102 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 103 | "&&++++++++&&&&&&&&+++++'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 104 | "+++++++++++++++++++'+++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 105 | "++++++++++++++++++'*'++'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 106 | "++########++++++++'*''''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 107 | "###################****'@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 108 | "###################''**'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 109 | "##========########==='''@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 110 | "======================='@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 111 | "==;;;;;;;;========;;;;;''@@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,", 112 | ";;;;;;;;;;;;;;;;;;;;;;'**'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 113 | ";;;;;;;;;;;;;;;;;;;;;;'**','*',,,,,,**','**',,,,,,,,,,,,,,,,,,,,", 114 | ";;,,,.,,,,;;;;;;;;,,,,''',,,'',,,,,,''',,''',,,,,,,,,,,,,,,,,,,,", 115 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 116 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 117 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 118 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 119 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 120 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 121 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 122 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 123 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 124 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 125 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,", 126 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 127 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 128 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 129 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 130 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 131 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 132 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 133 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 134 | ",,,,,,,,,,,,,,,,,,,,,,,,,..,,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 135 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 136 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 137 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}; 138 | 139 | const char * frame2[] = { 140 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 141 | ",,,,,,,,,,,,,,,,,,,,,,,..,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 142 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 143 | ",,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 144 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 145 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 146 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,", 147 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 148 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 149 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,.,,,,,,,,,,,,,", 150 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 151 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 152 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,", 153 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 154 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 155 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 156 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 157 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.", 158 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.", 159 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 160 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,.", 161 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 162 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.", 163 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.", 164 | ">>,,,,,,,>>>>>>>>,,,,,,,,''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 165 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 166 | "&&>>>>>>>&&&&&&&&>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 167 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 168 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 169 | "++&&&&&&&++++++++&&&&&&'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 170 | "+++++++++++++++++++++++'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 171 | "+++++++++++++++++++++++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 172 | "##+++++++########++++++'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 173 | "######################''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 174 | "###################'''''@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 175 | "==#######========#'****'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 176 | "==================='''='@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 177 | ";;=======;;;;;;;;======'@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 178 | ";;;;;;;;;;;;;;;;;;;;;;;''@@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,", 179 | ";.;;;;;;;;;;;;;;;;;;;;;'*'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 180 | ".,.;;;;;;,,,,,,,,;;;;;;'**',**',,,,,,**','**',,,,,,,,,,,,,,,,,,,", 181 | ",.,,,,,,,,,,,,,,,,,,,,,''',,''',,,,,,''',,''',,,,,,,,,,,,,,,,,,,", 182 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 183 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 184 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 185 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 186 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 187 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 188 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,", 189 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 190 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 191 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,.,,,,,", 192 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 193 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 194 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,", 195 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 196 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 197 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 198 | ",,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 199 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 200 | ",,,,,,,,,,,,,,,,,.,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 201 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 202 | ",,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 203 | ",,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}; 204 | 205 | const char * frame3[] = { 206 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 207 | ",,,,,,,,,,,,,,,.,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 208 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 209 | ",,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 210 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 211 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 212 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 213 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 214 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 215 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,", 216 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 217 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 218 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 219 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 220 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 221 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 222 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 223 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,", 224 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,.,,,,,", 225 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 226 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,.,,,,", 227 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 228 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,.,,,,,", 229 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,", 230 | ">>,,,,,,,>>>>>>>>,,,,,,,,''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 231 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 232 | "&&>>>>>>>&&&&&&&&>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 233 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 234 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 235 | "++&&&&&&&++++++++&&&&&&'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 236 | "+++++++++++++++++++++++'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 237 | "+++++++++++++++++++++++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 238 | "##+++++++########++++++'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 239 | "#####################'''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 240 | "###################''**'@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 241 | "==#######========##****'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 242 | "=================='*'=='@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 243 | ";;=======;;;;;;;;=='==='@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 244 | ";;;;;;;;;;;;;;;;;;;;;;;''@@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,", 245 | ";;;;;;;;;;;;;;;;;;;;;;'**'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 246 | ",,;;;;;;;,,,,,,,,;;;;;'**','*',,,,,,'*','**',,,,,,,,,,,,,,,,,,,,", 247 | ",,,,,,,,,,,,,,,,,,,,,,''',,,'',,,,,,,'',,''',,,,,,,,,,,,,,,,,,,,", 248 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 249 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 250 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 251 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 252 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 253 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 254 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,", 255 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,", 256 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 257 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,.,,,,,,,,,,,,,,", 258 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 259 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,", 260 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,", 261 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 262 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 263 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 264 | ",,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 265 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 266 | ",,,,,,,,.,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 267 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 268 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 269 | ",,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}; 270 | 271 | const char * frame4[] = { 272 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 273 | ",,,,,,.,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 274 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 275 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 276 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 277 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 278 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 279 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 280 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,", 281 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,,,,,,,,,,,,,,,,,,,,,,,,", 282 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,", 283 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 284 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 285 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 286 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 287 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 288 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 289 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,", 290 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 291 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 292 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,.,,,,,,,,,,,,", 293 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 294 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 295 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,", 296 | ",,>>>>>>>>,,,,,,,,>>>>>>>''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 297 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 298 | ">>&&&&&&&&>>>>>>>>&&&&&'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 299 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 300 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$''$-$$@','',,,,,,,,,,,,,,,,,,,", 301 | "&&++++++++&&&&&&&&+++++'@$$$$$$$$'**'$$$@''**',,,,,,,,,,,,,,,,,,", 302 | "+++++++++++++++++++++++'@$$$$$-$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 303 | "++++++++++++++++++'''++'@$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,,", 304 | "++########+++++++'**''''@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 305 | "#################'****''@$$$$$$-'*************',,,,,,,,,,,,,,,,,", 306 | "##################''''*'@$-$$$$$'***.'****.'**',,,,,,,,,,,,,,,,,", 307 | "##========########==='''@$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 308 | "======================='@@$$$-$$'*%%********%%',,,,,,,,,,,,,,,,,", 309 | "==;;;;;;;;========;;;;''@@@$$$$$$'***''''''**',,,,,,,,,,,,,,,,,,", 310 | ";;;;;;;;;;;;;;;;;;;;;''''@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,,", 311 | ";;;;;;;;;;;;;;;;;;;;'***'''''''''''''''''''',,,,,,,,,,,,,,,,,,,,", 312 | ";;,,,,,,,,;;;;;;;;,,'**','**,,,,,,'**,'**',,,,,,,,,,,,,,,,,,,,,,", 313 | ",,,,,,,,,,,,,,,,,,,,''',,,'',,,,,,,'',,''',,,,,,,,,,,,,,,,,,,,,,", 314 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 315 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 316 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 317 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 318 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 319 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 320 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,", 321 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,", 322 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 323 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,..,,,,,,,,,,,,,,,,,,,,,,", 324 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 325 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,", 326 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,", 327 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 328 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 329 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 330 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 331 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 332 | ",,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 333 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 334 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 335 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}; 336 | 337 | const char * frame5[] = { 338 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 339 | ",,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 340 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 341 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 342 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 343 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 344 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 345 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 346 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 347 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 348 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 349 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 350 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 351 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 352 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 353 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 354 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 355 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 356 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 357 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 358 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,", 359 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 360 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 361 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 362 | ",,>>>>>>>>,,,,,,,,>>>>>>>''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 363 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 364 | ">>&&&&&&&&>>>>>>>>&&&&&'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 365 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$''$$$@@','',,,,,,,,,,,,,,,,,,,", 366 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$'**'-$$@''**',,,,,,,,,,,,,,,,,,", 367 | "&&++++++++&&&&&&&&+++++'@$$$$$$$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 368 | "+++++++++++++++++++'+++'@$$$$$-$$'***''''****',,,,,,,,,,,,,,,,,,", 369 | "++++++++++++++++++'*'++'@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 370 | "++########++++++++'*''''@$$$$$$$'*************',,,,,,,,,,,,,,,,,", 371 | "###################****'@$$$$$$-'***.'****.'**',,,,,,,,,,,,,,,,,", 372 | "###################''**'@$-$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 373 | "##========########==='''@$$$$$$$'*%%********%%',,,,,,,,,,,,,,,,,", 374 | "======================='@@$$$-$$$'***''''''**',,,,,,,,,,,,,,,,,,", 375 | "==;;;;;;;;========;;;;''@@@$$$$$$$'*********',,,,,,,,,,,,,,,,,,.", 376 | ";;;;;;;;;;;;;;;;;;;;;'*''@@@@@@@@@@''''''''',,,,,,,,,,,,,,,,,,,.", 377 | ";;;;;;;;;;;;;;;;;;;;'***''''''''''''''''*',,,,,,,,,,,,,,,,,,,,,,", 378 | ";;,,,,,,,,;;;;;;;;,,'**','**,,,,,,'**,'**',,,,,,,,,,,,,,,,,,..,.", 379 | ",,,,,,,,,,,,,,,,,,,,''',,''',,,,,,''',,''',,,,,,,,,,,,,,,,,,,,,,", 380 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.", 381 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.", 382 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 383 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 384 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 385 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 386 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 387 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 388 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 389 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 390 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 391 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 392 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 393 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 394 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 395 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 396 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 397 | ",,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 398 | ",.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 399 | ",,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 400 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 401 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}; 402 | 403 | const char * frame6[] = { 404 | ".,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 405 | ",.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 406 | ".,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 407 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 408 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 409 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 410 | ",,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 411 | ",,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 412 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 413 | ",,,,,,,,,,,,,,,,,,,,,,,..,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 414 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 415 | ",,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 416 | ",,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 417 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 418 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 419 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 420 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 421 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 422 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 423 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,", 424 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,,,,,,,,,,,,,,,,,,,,,,,", 425 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,", 426 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 427 | ",,,,,,,,,,,,,,,,,,,,,,,,,''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 428 | ">>,,,,,,,>>>>>>>>,,,,,,,'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 429 | ">>>>>>>>>>>>>>>>>>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 430 | "&&>>>>>>>&&&&&&&&>>>>>>'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 431 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$''$-$$@','',,,,,,,,,,,,,,,,,,,", 432 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$$$$$$$'**'$$$@''**',,,,,,,,,,,,,,,,,,", 433 | "++&&&&&&&++++++++&'''&&'@$$$$$-$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 434 | "++++++++++++++++++'*''+'@$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,,", 435 | "++++++++++++++++++'**'''@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 436 | "##+++++++########++'**''@$$$$$$-'*************',,,,,,,,,,,,,,,,,", 437 | "###################''**'@$-$$$$$'***.'****.'**',,,,,,,,,,,,,,,,,", 438 | "####################''''@$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 439 | "==#######========#####''@@$$$-$$'*%%********%%',,,,,,,,,,,,,,,,,", 440 | "======================='@@@$$$$$$'***''''''**',,,,,,,,,,,,,,,,,,", 441 | ";;=======;;;;;;;;====='''@@@@@@@@@'*********',,,,,,,,,,,.,,,,,,,", 442 | ";;;;;;;;;;;;;;;;;;;;;'***''''''''''''''''''',,,,,,,,,,.,,,.,,,,,", 443 | ";;;;;;;;;;;;;;;;;;;;;'**'','*',,,,,'**,'**',,,,,,,,,,,,,,,,,,,,,", 444 | ",,;;;;;;;,,,,,,,,;;;;'''',,'',,,,,,,'',,'',,,,,,,,,,,.,,,,,.,,,,", 445 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 446 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,.,,,,,", 447 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,", 448 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 449 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 450 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 451 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 452 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 453 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 454 | ",,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 455 | ",,,,,,,,,,,,,,,,,,,,,,,,,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 456 | ",,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 457 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 458 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 459 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 460 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 461 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 462 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 463 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 464 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 465 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 466 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 467 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}; 468 | 469 | const char * frame7[] = { 470 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 471 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 472 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 473 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 474 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 475 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 476 | ",,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 477 | ",,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 478 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 479 | ",,,,,,,,,,,,,,,.,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 480 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 481 | ",,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 482 | ",,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 483 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 484 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 485 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 486 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 487 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 488 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 489 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 490 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,..,,,,,,,,,,,,,,,,,,,,,,,,,,,", 491 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 492 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 493 | ",,,,,,,,,,,,,,,,,,,,,,,,,''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 494 | ">>,,,,,,,>>>>>>>>,,,,,,,'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 495 | ">>>>>>>>>>>>>>>>>>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 496 | "&&>>>>>>>&&&&&&&&>>>>>>'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 497 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 498 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 499 | "++&&&&&&&++++++++&&&&&&'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 500 | "+++++++++++++++++++'+++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 501 | "++++++++++++++++++'*'++'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 502 | "##+++++++########+'*''''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 503 | "###################****'@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 504 | "###################''**'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 505 | "==#######========####'''@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 506 | "======================='@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 507 | ";;=======;;;;;;;;======''@@@@@@@@@@'*********',,,.,,,,,,,,,,,,,,", 508 | ";;;;;;;;;;;;;;;;;;;;;;'**'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 509 | ";;;;;;;;;;;;;;;;;;;;;;'**','*',,,,,,**','**',,,,,,,,,,,,,,,,,,,,", 510 | ",,;;;;;;;,,,,,,,,;;;;;''',,,'',,,,,,''',,''',,.,,,,.,,,,,,,,,,,,", 511 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 512 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 513 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,", 514 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 515 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 516 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 517 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 518 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 519 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 520 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 521 | ",,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 522 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 523 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 524 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 525 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 526 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 527 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 528 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 529 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 530 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,", 531 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 532 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 533 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}; 534 | 535 | const char * frame8[] = { 536 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 537 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,", 538 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 539 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,", 540 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 541 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 542 | ",,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 543 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 544 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 545 | ",,,,,,.,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 546 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 547 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 548 | ",,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 549 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 550 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 551 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 552 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 553 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 554 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 555 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 556 | ",,,,,,,,,,,,,,,,,,,,,,,,..,...,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 557 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 558 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 559 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 560 | ",,>>>>>>>>,,,,,,,,>>>>>>>''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 561 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 562 | ">>&&&&&&&&>>>>>>>>&&&&&'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 563 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 564 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 565 | "&&++++++++&&&&&&&&+++++'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 566 | "+++++++++++++++++++++++'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 567 | "+++++++++++++++++++++++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 568 | "++########++++++++#####'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 569 | "######################''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 570 | "###################'''''@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 571 | "##========########'****'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 572 | "==================='''='@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 573 | "==;;;;;;;;========;;;;;'@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 574 | ";;;;;;;;;;;;;;;;;;;;;;;''@@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,", 575 | ";;;;;;;;;;;;;;;;;;;;;;;'*'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 576 | ";;,,,,,,,,;;;;;;;;,,,,,'**',**',,,,,,**'.'**',,,,,,,,,,,,,,,,,,,", 577 | ",,,,,,,,,,,,,,,,,,,,,,,''',,''',,,,,,''',,''',,,,,,,,,,,,,,,,,,,", 578 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 579 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 580 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 581 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 582 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 583 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 584 | ",,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 585 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 586 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 587 | ",,,,,,,,,,,,,,.,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 588 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 589 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 590 | ",,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 591 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 592 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 593 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 594 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,", 595 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 596 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,", 597 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 598 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,.,,,,", 599 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,"}; 600 | 601 | const char * frame9[] = { 602 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 603 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,.,,,,,", 604 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 605 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,.,,,,,,", 606 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 607 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 608 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 609 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 610 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 611 | ",,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 612 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 613 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 614 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 615 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 616 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 617 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 618 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 619 | ",,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 620 | ",,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 621 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 622 | ",,,,,,,,,,,,,,,,.,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 623 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 624 | ",,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 625 | ",,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 626 | ",,>>>>>>>>,,,,,,,,>>>>>>>''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 627 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 628 | ">>&&&&&&&&>>>>>>>>&&&&&'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 629 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 630 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 631 | "&&++++++++&&&&&&&&+++++'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 632 | "+++++++++++++++++++++++'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 633 | "+++++++++++++++++++++++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 634 | "++########++++++++#####'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 635 | "#####################'''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 636 | "###################''**'@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 637 | "##========########=****'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 638 | "=================='*'=='@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 639 | "==;;;;;;;;========;';;;'@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 640 | ";;;;;;;;;;;;;;;;;;;;;;;''@@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,", 641 | ";;;;;;;;;;;;;;;;;;;;;;'**'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 642 | ";;,,,,,,,,;;;;;;;;,,,,'**','*',,..,.**','**',,,,,,,,,,,,,,,,,,,,", 643 | ",,,,,,,,,,,,,,,,,,,,,,''',,,'',,,,.,''',,''',,,,,,,,,,,,,,,,,,,,", 644 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 645 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 646 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 647 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 648 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 649 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 650 | ",,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 651 | ",,,,,,,.,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 652 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 653 | ",,,,,,.,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 654 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 655 | ",,,,,,,.,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 656 | ",,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 657 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 658 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 659 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 660 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,", 661 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 662 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,.,,,,,,,,,,,", 663 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 664 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 665 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,"}; 666 | 667 | const char * frame10[] = { 668 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 669 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,.,,,,,,,,,,,,,", 670 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 671 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 672 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 673 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 674 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 675 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 676 | ".,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 677 | ",.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 678 | ".,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 679 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 680 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 681 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 682 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 683 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 684 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 685 | ",,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 686 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 687 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 688 | ",,,,,,,.,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 689 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 690 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 691 | ",,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 692 | ">>,,,,,,,>>>>>>>>,,,,,,,,''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 693 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 694 | "&&>>>>>>>&&&&&&&&>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 695 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 696 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$''$-$$@','',,,,,,,,,,,,,,,,,,,", 697 | "++&&&&&&&++++++++&&&&&&'@$$$$$$$$'**'$$$@''**',,,,,,,,,,,,,,,,,,", 698 | "+++++++++++++++++++++++'@$$$$$-$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 699 | "++++++++++++++++++'''++'@$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,,", 700 | "##+++++++########'**''''@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 701 | "#################'****''@$$$$$$-'*************',,,,,,,,,,,,,,,,,", 702 | "##################''''*'@$-$$$$$'***.'****.'**',,,,,,,,,,,,,,,,,", 703 | "==#######========####'''@$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 704 | "======================='@@$$$-$$'*%%********%%',,,,,,,,,,,,,,,,,", 705 | ";;=======;;;;;;;;=====''@@@$$$$$$'***''''''**',,,,,,,,,,,,,,,,,,", 706 | ";;;;;;;;;;;;;;;;;;;;;''''@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,,", 707 | ";;;;;;;;;;;;;;;;;;;;'***'''''''''''''''''''',,,,,,,,,,,,,,,,,,,,", 708 | ",,;;;;;;;,,,,,,,,;;;'**'.'**..,,,,'**''**',,,,,,,,,,,,,,,,,,,,,,", 709 | ",,,,,,,,,,,,,,,,,,,,''',,,'',,,,,,,''',''',,,,,,,,,,,,,,,,,,,,,,", 710 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 711 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 712 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 713 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 714 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 715 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 716 | ",,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 717 | ",,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 718 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 719 | ".,.,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 720 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 721 | ",,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 722 | ",,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 723 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 724 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 725 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 726 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 727 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 728 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,", 729 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 730 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 731 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}; 732 | 733 | const char * frame11[] = { 734 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 735 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,", 736 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 737 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 738 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 739 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 740 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 741 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 742 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 743 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 744 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 745 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 746 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 747 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 748 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 749 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 750 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 751 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 752 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 753 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 754 | ",,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 755 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 756 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 757 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 758 | ">>,,,,,,,>>>>>>>>,,,,,,,,''''''''''''''',,,,,,,,,,,,,,,,,,,,,,,,", 759 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 760 | "&&>>>>>>>&&&&&&&&>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 761 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$''$$$@@','',,,,,,,,,,,,,,,,,,,", 762 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$'**'-$$@''**',,,,,,,,,,,,,,,,,,", 763 | "++&&&&&&&++++++++&&&&&&'@$$$$$$$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 764 | "+++++++++++++++++++'+++'@$$$$$-$$'***''''****',,,,,,,,,,,,,,,,,,", 765 | "++++++++++++++++++'*'++'@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 766 | "##+++++++########+'*''''@$$$$$$$'*************',,,,,,,,,,,,,,,,,", 767 | "###################****'@$$$$$$-'***.'****.'**',,,,,,,,,,,,,,,,,", 768 | "###################''**'@$-$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 769 | "==#######========####'''@$$$$$$$'*%%********%%',,,,,,,,,,,,,,,,,", 770 | "======================='@@$$$-$$$'***''''''**',,,,,,,,,,,,,,,,,,", 771 | ";;=======;;;;;;;;=.===''@@@$$$$$$$'*********',,,,,,,,,,,,,,,,,,,", 772 | ";;;;;;;;;;;;;;;;;;;;.'*''@@@@@@@@@@''''''''',,,,,,,,,,,,,,,,,,,,", 773 | ";;;;;;;;;;;;;;;;;;;;'***''''''''''''''''*',,,,,,,,,,,,,,,,,,,,,,", 774 | ",,;;;;;;;,,,,,,,.;;;'**','**,,,,,,'**''**',,,,,,,,,,,,,,,,,,,,,,", 775 | ",,,,,,,,,,,,,,,,,,,,''',,''',,,,,,''',,''',,,,,,,,,,,,,,,,,,,,,,", 776 | ",,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 777 | ",,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 778 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 779 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 780 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 781 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 782 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 783 | ",.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 784 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 785 | ",,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 786 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 787 | ",.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 788 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 789 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 790 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 791 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 792 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 793 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,", 794 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,,,,,,,,,,,,,,,,,,,,,,", 795 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,", 796 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", 797 | ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"}; 798 | 799 | const char ** frames[] = { 800 | frame0, 801 | frame1, 802 | frame2, 803 | frame3, 804 | frame4, 805 | frame5, 806 | frame6, 807 | frame7, 808 | frame8, 809 | frame9, 810 | frame10, 811 | frame11, 812 | NULL 813 | }; 814 | 815 | #define FRAME_WIDTH 64 816 | #define FRAME_HEIGHT 64 817 | 818 | #endif 819 | -------------------------------------------------------------------------------- /src/nyancat.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011-2018 K. Lange. All rights reserved. 3 | * 4 | * Developed by: K. Lange 5 | * http://github.com/klange/nyancat 6 | * http://nyancat.dakko.us 7 | * 8 | * 40-column support by: Peter Hazenberg 9 | * http://github.com/Peetz0r/nyancat 10 | * http://peter.haas-en-berg.nl 11 | * 12 | * Build tools unified by: Aaron Peschel 13 | * https://github.com/apeschel 14 | * 15 | * For a complete listing of contributors, please see the git commit history. 16 | * 17 | * This is a simple telnet server / standalone application which renders the 18 | * classic Nyan Cat (or "poptart cat") to your terminal. 19 | * 20 | * It makes use of various ANSI escape sequences to render color, or in the case 21 | * of a VT220, simply dumps text to the screen. 22 | * 23 | * For more information, please see: 24 | * 25 | * http://nyancat.dakko.us 26 | * 27 | * Permission is hereby granted, free of charge, to any person obtaining a copy 28 | * of this software and associated documentation files (the "Software"), to 29 | * deal with the Software without restriction, including without limitation the 30 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 31 | * sell copies of the Software, and to permit persons to whom the Software is 32 | * furnished to do so, subject to the following conditions: 33 | * 1. Redistributions of source code must retain the above copyright notice, 34 | * this list of conditions and the following disclaimers. 35 | * 2. Redistributions in binary form must reproduce the above copyright 36 | * notice, this list of conditions and the following disclaimers in the 37 | * documentation and/or other materials provided with the distribution. 38 | * 3. Neither the names of the Association for Computing Machinery, K. 39 | * Lange, nor the names of its contributors may be used to endorse 40 | * or promote products derived from this Software without specific prior 41 | * written permission. 42 | * 43 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 44 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 45 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 46 | * CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 47 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 48 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 49 | * WITH THE SOFTWARE. 50 | */ 51 | 52 | #define _XOPEN_SOURCE 700 53 | #define _DARWIN_C_SOURCE 1 54 | #define _BSD_SOURCE 55 | #define _DEFAULT_SOURCE 56 | #define __BSD_VISIBLE 1 57 | #include 58 | #include 59 | #include 60 | #include 61 | #include 62 | #include 63 | #include 64 | #include 65 | #include 66 | #include 67 | 68 | #include 69 | 70 | #ifndef TIOCGWINSZ 71 | #include 72 | #endif 73 | 74 | #ifdef ECHO 75 | #undef ECHO 76 | #endif 77 | 78 | /* 79 | * telnet.h contains some #defines for the various 80 | * commands, escape characters, and modes for telnet. 81 | * (it surprises some people that telnet is, really, 82 | * a protocol, and not just raw text transmission) 83 | */ 84 | #include "telnet.h" 85 | 86 | /* 87 | * The animation frames are stored separately in 88 | * this header so they don't clutter the core source 89 | */ 90 | #include "animation.c" 91 | 92 | /* 93 | * Color palette to use for final output 94 | * Specifically, this should be either control sequences 95 | * or raw characters (ie, for vt220 mode) 96 | */ 97 | const char * colors[256] = {NULL}; 98 | 99 | /* 100 | * For most modes, we output spaces, but for some 101 | * we will use block characters (or even nothing) 102 | */ 103 | const char * output = " "; 104 | 105 | /* 106 | * Are we currently in telnet mode? 107 | */ 108 | int telnet = 0; 109 | 110 | /* 111 | * Whether or not to show the counter 112 | */ 113 | int show_counter = 1; 114 | 115 | /* 116 | * Number of frames to show before quitting 117 | * or 0 to repeat forever (default) 118 | */ 119 | unsigned int frame_count = 0; 120 | 121 | /* 122 | * Clear the screen between frames (as opposed to resetting 123 | * the cursor position) 124 | */ 125 | int clear_screen = 1; 126 | 127 | /* 128 | * Force-set the terminal title. 129 | */ 130 | int set_title = 1; 131 | 132 | /* 133 | * Environment to use for setjmp/longjmp 134 | * when breaking out of options handler 135 | */ 136 | jmp_buf environment; 137 | 138 | 139 | /* 140 | * I refuse to include libm to keep this low 141 | * on external dependencies. 142 | * 143 | * Count the number of digits in a number for 144 | * use with string output. 145 | */ 146 | int digits(int val) { 147 | int d = 1, c; 148 | if (val >= 0) for (c = 10; c <= val; c *= 10) d++; 149 | else for (c = -10 ; c >= val; c *= 10) d++; 150 | return (c < 0) ? ++d : d; 151 | } 152 | 153 | /* 154 | * These values crop the animation, as we have a full 64x64 stored, 155 | * but we only want to display 40x24 (double width). 156 | */ 157 | int min_row = -1; 158 | int max_row = -1; 159 | int min_col = -1; 160 | int max_col = -1; 161 | 162 | /* 163 | * Actual width/height of terminal. 164 | */ 165 | int terminal_width = 80; 166 | int terminal_height = 24; 167 | 168 | /* 169 | * Flags to keep track of whether width/height were automatically set. 170 | */ 171 | char using_automatic_width = 0; 172 | char using_automatic_height = 0; 173 | 174 | /* 175 | * Print escape sequences to return cursor to visible mode 176 | * and exit the application. 177 | */ 178 | void finish() { 179 | if (clear_screen) { 180 | printf("\033[?25h\033[0m\033[H\033[2J"); 181 | } else { 182 | printf("\033[0m\n"); 183 | } 184 | exit(0); 185 | } 186 | 187 | /* 188 | * In the standalone mode, we want to handle an interrupt signal 189 | * (^C) so that we can restore the cursor and clear the terminal. 190 | */ 191 | void SIGINT_handler(int sig){ 192 | (void)sig; 193 | finish(); 194 | } 195 | 196 | /* 197 | * Handle the alarm which breaks us off of options 198 | * handling if we didn't receive a terminal 199 | */ 200 | void SIGALRM_handler(int sig) { 201 | (void)sig; 202 | alarm(0); 203 | longjmp(environment, 1); 204 | /* Unreachable */ 205 | } 206 | 207 | /* 208 | * Handle the loss of stdout, as would be the case when 209 | * in telnet mode and the client disconnects 210 | */ 211 | void SIGPIPE_handler(int sig) { 212 | (void)sig; 213 | finish(); 214 | } 215 | 216 | void SIGWINCH_handler(int sig) { 217 | (void)sig; 218 | struct winsize w; 219 | ioctl(0, TIOCGWINSZ, &w); 220 | terminal_width = w.ws_col; 221 | terminal_height = w.ws_row; 222 | 223 | if (using_automatic_width) { 224 | min_col = (FRAME_WIDTH - terminal_width/2) / 2; 225 | max_col = (FRAME_WIDTH + terminal_width/2) / 2; 226 | } 227 | 228 | if (using_automatic_height) { 229 | min_row = (FRAME_HEIGHT - (terminal_height-1)) / 2; 230 | max_row = (FRAME_HEIGHT + (terminal_height-1)) / 2; 231 | } 232 | 233 | signal(SIGWINCH, SIGWINCH_handler); 234 | } 235 | 236 | /* 237 | * Telnet requires us to send a specific sequence 238 | * for a line break (\r\000\n), so let's make it happy. 239 | */ 240 | void newline(int n) { 241 | int i = 0; 242 | for (i = 0; i < n; ++i) { 243 | /* We will send `n` linefeeds to the client */ 244 | if (telnet) { 245 | /* Send the telnet newline sequence */ 246 | putc('\r', stdout); 247 | putc(0, stdout); 248 | putc('\n', stdout); 249 | } else { 250 | /* Send a regular line feed */ 251 | putc('\n', stdout); 252 | } 253 | } 254 | } 255 | 256 | /* 257 | * These are the options we want to use as 258 | * a telnet server. These are set in set_options() 259 | */ 260 | unsigned char telnet_options[256] = { 0 }; 261 | unsigned char telnet_willack[256] = { 0 }; 262 | 263 | /* 264 | * These are the values we have set or 265 | * agreed to during our handshake. 266 | * These are set in send_command(...) 267 | */ 268 | unsigned char telnet_do_set[256] = { 0 }; 269 | unsigned char telnet_will_set[256]= { 0 }; 270 | 271 | /* 272 | * Set the default options for the telnet server. 273 | */ 274 | void set_options() { 275 | /* We will not echo input */ 276 | telnet_options[ECHO] = WONT; 277 | /* We will set graphics modes */ 278 | telnet_options[SGA] = WILL; 279 | /* We will not set new environments */ 280 | telnet_options[NEW_ENVIRON] = WONT; 281 | 282 | /* The client should echo its own input */ 283 | telnet_willack[ECHO] = DO; 284 | /* The client can set a graphics mode */ 285 | telnet_willack[SGA] = DO; 286 | /* The client should not change, but it should tell us its window size */ 287 | telnet_willack[NAWS] = DO; 288 | /* The client should tell us its terminal type (very important) */ 289 | telnet_willack[TTYPE] = DO; 290 | /* No linemode */ 291 | telnet_willack[LINEMODE] = DONT; 292 | /* And the client can set a new environment */ 293 | telnet_willack[NEW_ENVIRON] = DO; 294 | } 295 | 296 | /* 297 | * Send a command (cmd) to the telnet client 298 | * Also does special handling for DO/DONT/WILL/WONT 299 | */ 300 | void send_command(int cmd, int opt) { 301 | /* Send a command to the telnet client */ 302 | if (cmd == DO || cmd == DONT) { 303 | /* DO commands say what the client should do. */ 304 | if (((cmd == DO) && (telnet_do_set[opt] != DO)) || 305 | ((cmd == DONT) && (telnet_do_set[opt] != DONT))) { 306 | /* And we only send them if there is a disagreement */ 307 | telnet_do_set[opt] = cmd; 308 | printf("%c%c%c", IAC, cmd, opt); 309 | } 310 | } else if (cmd == WILL || cmd == WONT) { 311 | /* Similarly, WILL commands say what the server will do. */ 312 | if (((cmd == WILL) && (telnet_will_set[opt] != WILL)) || 313 | ((cmd == WONT) && (telnet_will_set[opt] != WONT))) { 314 | /* And we only send them during disagreements */ 315 | telnet_will_set[opt] = cmd; 316 | printf("%c%c%c", IAC, cmd, opt); 317 | } 318 | } else { 319 | /* Other commands are sent raw */ 320 | printf("%c%c", IAC, cmd); 321 | } 322 | } 323 | 324 | /* 325 | * Print the usage / help text describing options 326 | */ 327 | void usage(char * argv[]) { 328 | printf( 329 | "Terminal Nyancat\n" 330 | "\n" 331 | "usage: %s [-hitn] [-f \033[3mframes\033[0m]\n" 332 | "\n" 333 | " -i --intro \033[3mShow the introduction / about information at startup.\033[0m\n" 334 | " -t --telnet \033[3mTelnet mode.\033[0m\n" 335 | " -n --no-counter \033[3mDo not display the timer\033[0m\n" 336 | " -s --no-title \033[3mDo not set the titlebar text\033[0m\n" 337 | " -e --no-clear \033[3mDo not clear the display between frames\033[0m\n" 338 | " -d --delay \033[3mDelay image rendering by anywhere between 10ms and 1000ms\n" 339 | " -f --frames \033[3mDisplay the requested number of frames, then quit\033[0m\n" 340 | " -r --min-rows \033[3mCrop the animation from the top\033[0m\n" 341 | " -R --max-rows \033[3mCrop the animation from the bottom\033[0m\n" 342 | " -c --min-cols \033[3mCrop the animation from the left\033[0m\n" 343 | " -C --max-cols \033[3mCrop the animation from the right\033[0m\n" 344 | " -W --width \033[3mCrop the animation to the given width\033[0m\n" 345 | " -H --height \033[3mCrop the animation to the given height\033[0m\n" 346 | " -h --help \033[3mShow this help message.\033[0m\n", 347 | argv[0]); 348 | } 349 | 350 | int main(int argc, char ** argv) { 351 | 352 | char *term = NULL; 353 | unsigned int k; 354 | int ttype; 355 | uint32_t option = 0, done = 0, sb_mode = 0; 356 | /* Various pieces for the telnet communication */ 357 | unsigned char sb[1024] = {0}; 358 | unsigned short sb_len = 0; 359 | 360 | /* Whether or not to show the MOTD intro */ 361 | char show_intro = 0; 362 | char skip_intro = 0; 363 | 364 | /* Long option names */ 365 | static struct option long_opts[] = { 366 | {"help", no_argument, 0, 'h'}, 367 | {"telnet", no_argument, 0, 't'}, 368 | {"intro", no_argument, 0, 'i'}, 369 | {"skip-intro", no_argument, 0, 'I'}, 370 | {"no-counter", no_argument, 0, 'n'}, 371 | {"no-title", no_argument, 0, 's'}, 372 | {"no-clear", no_argument, 0, 'e'}, 373 | {"delay", required_argument, 0, 'd'}, 374 | {"frames", required_argument, 0, 'f'}, 375 | {"min-rows", required_argument, 0, 'r'}, 376 | {"max-rows", required_argument, 0, 'R'}, 377 | {"min-cols", required_argument, 0, 'c'}, 378 | {"max-cols", required_argument, 0, 'C'}, 379 | {"width", required_argument, 0, 'W'}, 380 | {"height", required_argument, 0, 'H'}, 381 | {0,0,0,0} 382 | }; 383 | 384 | /* Time delay in milliseconds */ 385 | int delay_ms = 90; // Default to original value 386 | 387 | /* Process arguments */ 388 | int index, c; 389 | while ((c = getopt_long(argc, argv, "eshiItnd:f:r:R:c:C:W:H:", long_opts, &index)) != -1) { 390 | if (!c) { 391 | if (long_opts[index].flag == 0) { 392 | c = long_opts[index].val; 393 | } 394 | } 395 | switch (c) { 396 | case 'e': 397 | clear_screen = 0; 398 | break; 399 | case 's': 400 | set_title = 0; 401 | break; 402 | case 'i': /* Show introduction */ 403 | show_intro = 1; 404 | break; 405 | case 'I': 406 | skip_intro = 1; 407 | break; 408 | case 't': /* Expect telnet bits */ 409 | telnet = 1; 410 | break; 411 | case 'h': /* Show help and exit */ 412 | usage(argv); 413 | exit(0); 414 | break; 415 | case 'n': 416 | show_counter = 0; 417 | break; 418 | case 'd': 419 | if (10 <= atoi(optarg) && atoi(optarg) <= 1000) 420 | delay_ms = atoi(optarg); 421 | break; 422 | case 'f': 423 | frame_count = atoi(optarg); 424 | break; 425 | case 'r': 426 | min_row = atoi(optarg); 427 | break; 428 | case 'R': 429 | max_row = atoi(optarg); 430 | break; 431 | case 'c': 432 | min_col = atoi(optarg); 433 | break; 434 | case 'C': 435 | max_col = atoi(optarg); 436 | break; 437 | case 'W': 438 | min_col = (FRAME_WIDTH - atoi(optarg)) / 2; 439 | max_col = (FRAME_WIDTH + atoi(optarg)) / 2; 440 | break; 441 | case 'H': 442 | min_row = (FRAME_HEIGHT - atoi(optarg)) / 2; 443 | max_row = (FRAME_HEIGHT + atoi(optarg)) / 2; 444 | break; 445 | default: 446 | break; 447 | } 448 | } 449 | 450 | if (telnet) { 451 | /* Telnet mode */ 452 | 453 | /* show_intro is implied unless skip_intro was set */ 454 | show_intro = (skip_intro == 0) ? 1 : 0; 455 | 456 | /* Set the default options */ 457 | set_options(); 458 | 459 | /* Let the client know what we're using */ 460 | for (option = 0; option < 256; option++) { 461 | if (telnet_options[option]) { 462 | send_command(telnet_options[option], option); 463 | fflush(stdout); 464 | } 465 | } 466 | for (option = 0; option < 256; option++) { 467 | if (telnet_willack[option]) { 468 | send_command(telnet_willack[option], option); 469 | fflush(stdout); 470 | } 471 | } 472 | 473 | /* Set the alarm handler to execute the longjmp */ 474 | signal(SIGALRM, SIGALRM_handler); 475 | 476 | /* Negotiate options */ 477 | if (!setjmp(environment)) { 478 | /* We will stop handling options after one second */ 479 | alarm(1); 480 | 481 | /* Let's do this */ 482 | while (!feof(stdin) && done < 2) { 483 | /* Get either IAC (start command) or a regular character (break, unless in SB mode) */ 484 | unsigned char i = getchar(); 485 | unsigned char opt = 0; 486 | if (i == IAC) { 487 | /* If IAC, get the command */ 488 | i = getchar(); 489 | switch (i) { 490 | case SE: 491 | /* End of extended option mode */ 492 | sb_mode = 0; 493 | if (sb[0] == TTYPE) { 494 | /* This was a response to the TTYPE command, meaning 495 | * that this should be a terminal type */ 496 | alarm(2); 497 | term = strndup((char *)&sb[2], sizeof(sb)-2); 498 | done++; 499 | } 500 | else if (sb[0] == NAWS) { 501 | /* This was a response to the NAWS command, meaning 502 | * that this should be a window size */ 503 | alarm(2); 504 | terminal_width = (sb[1] << 8) | sb[2]; 505 | terminal_height = (sb[3] << 8) | sb[4]; 506 | done++; 507 | } 508 | break; 509 | case NOP: 510 | /* No Op */ 511 | send_command(NOP, 0); 512 | fflush(stdout); 513 | break; 514 | case WILL: 515 | case WONT: 516 | /* Will / Won't Negotiation */ 517 | opt = getchar(); 518 | if (!telnet_willack[opt]) { 519 | /* We default to WONT */ 520 | telnet_willack[opt] = WONT; 521 | } 522 | send_command(telnet_willack[opt], opt); 523 | fflush(stdout); 524 | if ((i == WILL) && (opt == TTYPE)) { 525 | /* WILL TTYPE? Great, let's do that now! */ 526 | printf("%c%c%c%c%c%c", IAC, SB, TTYPE, SEND, IAC, SE); 527 | fflush(stdout); 528 | } 529 | break; 530 | case DO: 531 | case DONT: 532 | /* Do / Don't Negotiation */ 533 | opt = getchar(); 534 | if (!telnet_options[opt]) { 535 | /* We default to DONT */ 536 | telnet_options[opt] = DONT; 537 | } 538 | send_command(telnet_options[opt], opt); 539 | fflush(stdout); 540 | break; 541 | case SB: 542 | /* Begin Extended Option Mode */ 543 | sb_mode = 1; 544 | sb_len = 0; 545 | memset(sb, 0, sizeof(sb)); 546 | break; 547 | case IAC: 548 | /* IAC IAC? That's probably not right. */ 549 | done = 2; 550 | break; 551 | default: 552 | break; 553 | } 554 | } else if (sb_mode) { 555 | /* Extended Option Mode -> Accept character */ 556 | if (sb_len < sizeof(sb) - 1) { 557 | /* Append this character to the SB string, 558 | * but only if it doesn't put us over 559 | * our limit; honestly, we shouldn't hit 560 | * the limit, as we're only collecting characters 561 | * for a terminal type or window size, but better safe than 562 | * sorry (and vulnerable). 563 | */ 564 | sb[sb_len] = i; 565 | sb_len++; 566 | } 567 | } 568 | } 569 | } 570 | alarm(0); 571 | } else { 572 | /* We are running standalone, retrieve the 573 | * terminal type from the environment. */ 574 | term = getenv("TERM"); 575 | 576 | /* Also get the number of columns */ 577 | struct winsize w; 578 | ioctl(0, TIOCGWINSZ, &w); 579 | terminal_width = w.ws_col; 580 | terminal_height = w.ws_row; 581 | } 582 | 583 | /* Default ttype */ 584 | ttype = 2; 585 | 586 | if (term) { 587 | /* Convert the entire terminal string to lower case */ 588 | for (k = 0; k < strlen(term); ++k) { 589 | term[k] = tolower(term[k]); 590 | } 591 | 592 | /* Do our terminal detection */ 593 | if (strstr(term, "xterm")) { 594 | ttype = 1; /* 256-color, spaces */ 595 | } else if (strstr(term, "toaru")) { 596 | ttype = 1; /* emulates xterm */ 597 | } else if (strstr(term, "linux")) { 598 | ttype = 3; /* Spaces and blink attribute */ 599 | } else if (strstr(term, "vtnt")) { 600 | ttype = 5; /* Extended ASCII fallback == Windows */ 601 | } else if (strstr(term, "cygwin")) { 602 | ttype = 5; /* Extended ASCII fallback == Windows */ 603 | } else if (strstr(term, "vt220")) { 604 | ttype = 6; /* No color support */ 605 | } else if (strstr(term, "fallback")) { 606 | ttype = 4; /* Unicode fallback */ 607 | } else if (strstr(term, "rxvt-256color")) { 608 | ttype = 1; /* xterm 256-color compatible */ 609 | } else if (strstr(term, "rxvt")) { 610 | ttype = 3; /* Accepts LINUX mode */ 611 | } else if (strstr(term, "vt100") && terminal_width == 40) { 612 | ttype = 7; /* No color support, only 40 columns */ 613 | } else if (!strncmp(term, "st", 2)) { 614 | ttype = 1; /* suckless simple terminal is xterm-256color-compatible */ 615 | } else if (!strncmp(term, "truecolor", 9)) { 616 | ttype = 8; 617 | } 618 | } 619 | 620 | int always_escape = 0; /* Used for text mode */ 621 | 622 | /* Accept ^C -> restore cursor */ 623 | signal(SIGINT, SIGINT_handler); 624 | 625 | /* Handle loss of stdout */ 626 | signal(SIGPIPE, SIGPIPE_handler); 627 | 628 | /* Handle window changes */ 629 | if (!telnet) { 630 | signal(SIGWINCH, SIGWINCH_handler); 631 | } 632 | 633 | switch (ttype) { 634 | case 1: 635 | colors[','] = "\033[48;5;17m"; /* Blue background */ 636 | colors['.'] = "\033[48;5;231m"; /* White stars */ 637 | colors['\''] = "\033[48;5;16m"; /* Black border */ 638 | colors['@'] = "\033[48;5;230m"; /* Tan poptart */ 639 | colors['$'] = "\033[48;5;175m"; /* Pink poptart */ 640 | colors['-'] = "\033[48;5;162m"; /* Red poptart */ 641 | colors['>'] = "\033[48;5;196m"; /* Red rainbow */ 642 | colors['&'] = "\033[48;5;214m"; /* Orange rainbow */ 643 | colors['+'] = "\033[48;5;226m"; /* Yellow Rainbow */ 644 | colors['#'] = "\033[48;5;118m"; /* Green rainbow */ 645 | colors['='] = "\033[48;5;33m"; /* Light blue rainbow */ 646 | colors[';'] = "\033[48;5;19m"; /* Dark blue rainbow */ 647 | colors['*'] = "\033[48;5;240m"; /* Gray cat face */ 648 | colors['%'] = "\033[48;5;175m"; /* Pink cheeks */ 649 | break; 650 | case 2: 651 | colors[','] = "\033[104m"; /* Blue background */ 652 | colors['.'] = "\033[107m"; /* White stars */ 653 | colors['\''] = "\033[40m"; /* Black border */ 654 | colors['@'] = "\033[47m"; /* Tan poptart */ 655 | colors['$'] = "\033[105m"; /* Pink poptart */ 656 | colors['-'] = "\033[101m"; /* Red poptart */ 657 | colors['>'] = "\033[101m"; /* Red rainbow */ 658 | colors['&'] = "\033[43m"; /* Orange rainbow */ 659 | colors['+'] = "\033[103m"; /* Yellow Rainbow */ 660 | colors['#'] = "\033[102m"; /* Green rainbow */ 661 | colors['='] = "\033[104m"; /* Light blue rainbow */ 662 | colors[';'] = "\033[44m"; /* Dark blue rainbow */ 663 | colors['*'] = "\033[100m"; /* Gray cat face */ 664 | colors['%'] = "\033[105m"; /* Pink cheeks */ 665 | break; 666 | case 3: 667 | colors[','] = "\033[25;44m"; /* Blue background */ 668 | colors['.'] = "\033[5;47m"; /* White stars */ 669 | colors['\''] = "\033[25;40m"; /* Black border */ 670 | colors['@'] = "\033[5;47m"; /* Tan poptart */ 671 | colors['$'] = "\033[5;45m"; /* Pink poptart */ 672 | colors['-'] = "\033[5;41m"; /* Red poptart */ 673 | colors['>'] = "\033[5;41m"; /* Red rainbow */ 674 | colors['&'] = "\033[25;43m"; /* Orange rainbow */ 675 | colors['+'] = "\033[5;43m"; /* Yellow Rainbow */ 676 | colors['#'] = "\033[5;42m"; /* Green rainbow */ 677 | colors['='] = "\033[25;44m"; /* Light blue rainbow */ 678 | colors[';'] = "\033[5;44m"; /* Dark blue rainbow */ 679 | colors['*'] = "\033[5;40m"; /* Gray cat face */ 680 | colors['%'] = "\033[5;45m"; /* Pink cheeks */ 681 | break; 682 | case 4: 683 | colors[','] = "\033[0;34;44m"; /* Blue background */ 684 | colors['.'] = "\033[1;37;47m"; /* White stars */ 685 | colors['\''] = "\033[0;30;40m"; /* Black border */ 686 | colors['@'] = "\033[1;37;47m"; /* Tan poptart */ 687 | colors['$'] = "\033[1;35;45m"; /* Pink poptart */ 688 | colors['-'] = "\033[1;31;41m"; /* Red poptart */ 689 | colors['>'] = "\033[1;31;41m"; /* Red rainbow */ 690 | colors['&'] = "\033[0;33;43m"; /* Orange rainbow */ 691 | colors['+'] = "\033[1;33;43m"; /* Yellow Rainbow */ 692 | colors['#'] = "\033[1;32;42m"; /* Green rainbow */ 693 | colors['='] = "\033[1;34;44m"; /* Light blue rainbow */ 694 | colors[';'] = "\033[0;34;44m"; /* Dark blue rainbow */ 695 | colors['*'] = "\033[1;30;40m"; /* Gray cat face */ 696 | colors['%'] = "\033[1;35;45m"; /* Pink cheeks */ 697 | output = "██"; 698 | break; 699 | case 5: 700 | colors[','] = "\033[0;34;44m"; /* Blue background */ 701 | colors['.'] = "\033[1;37;47m"; /* White stars */ 702 | colors['\''] = "\033[0;30;40m"; /* Black border */ 703 | colors['@'] = "\033[1;37;47m"; /* Tan poptart */ 704 | colors['$'] = "\033[1;35;45m"; /* Pink poptart */ 705 | colors['-'] = "\033[1;31;41m"; /* Red poptart */ 706 | colors['>'] = "\033[1;31;41m"; /* Red rainbow */ 707 | colors['&'] = "\033[0;33;43m"; /* Orange rainbow */ 708 | colors['+'] = "\033[1;33;43m"; /* Yellow Rainbow */ 709 | colors['#'] = "\033[1;32;42m"; /* Green rainbow */ 710 | colors['='] = "\033[1;34;44m"; /* Light blue rainbow */ 711 | colors[';'] = "\033[0;34;44m"; /* Dark blue rainbow */ 712 | colors['*'] = "\033[1;30;40m"; /* Gray cat face */ 713 | colors['%'] = "\033[1;35;45m"; /* Pink cheeks */ 714 | output = "\333\333"; 715 | break; 716 | case 6: 717 | colors[','] = "::"; /* Blue background */ 718 | colors['.'] = "@@"; /* White stars */ 719 | colors['\''] = " "; /* Black border */ 720 | colors['@'] = "##"; /* Tan poptart */ 721 | colors['$'] = "??"; /* Pink poptart */ 722 | colors['-'] = "<>"; /* Red poptart */ 723 | colors['>'] = "##"; /* Red rainbow */ 724 | colors['&'] = "=="; /* Orange rainbow */ 725 | colors['+'] = "--"; /* Yellow Rainbow */ 726 | colors['#'] = "++"; /* Green rainbow */ 727 | colors['='] = "~~"; /* Light blue rainbow */ 728 | colors[';'] = "$$"; /* Dark blue rainbow */ 729 | colors['*'] = ";;"; /* Gray cat face */ 730 | colors['%'] = "()"; /* Pink cheeks */ 731 | always_escape = 1; 732 | break; 733 | case 7: 734 | colors[','] = "."; /* Blue background */ 735 | colors['.'] = "@"; /* White stars */ 736 | colors['\''] = " "; /* Black border */ 737 | colors['@'] = "#"; /* Tan poptart */ 738 | colors['$'] = "?"; /* Pink poptart */ 739 | colors['-'] = "O"; /* Red poptart */ 740 | colors['>'] = "#"; /* Red rainbow */ 741 | colors['&'] = "="; /* Orange rainbow */ 742 | colors['+'] = "-"; /* Yellow Rainbow */ 743 | colors['#'] = "+"; /* Green rainbow */ 744 | colors['='] = "~"; /* Light blue rainbow */ 745 | colors[';'] = "$"; /* Dark blue rainbow */ 746 | colors['*'] = ";"; /* Gray cat face */ 747 | colors['%'] = "o"; /* Pink cheeks */ 748 | always_escape = 1; 749 | terminal_width = 40; 750 | break; 751 | case 8: 752 | colors[','] = "\033[48;2;0;49;105m"; /* Blue background */ 753 | colors['.'] = "\033[48;2;255;255;255m"; /* White stars */ 754 | colors['\''] = "\033[48;2;0;0;0m"; /* Black border */ 755 | colors['@'] = "\033[48;2;255;205;152m"; /* Tan poptart */ 756 | colors['$'] = "\033[48;2;255;169;255m"; /* Pink poptart */ 757 | colors['-'] = "\033[48;2;255;76;152m"; /* Red poptart */ 758 | colors['>'] = "\033[48;2;255;25;0m"; /* Red rainbow */ 759 | colors['&'] = "\033[48;2;255;154;0m"; /* Orange rainbow */ 760 | colors['+'] = "\033[48;2;255;240;0m"; /* Yellow Rainbow */ 761 | colors['#'] = "\033[48;2;40;220;0m"; /* Green rainbow */ 762 | colors['='] = "\033[48;2;0;144;255m"; /* Light blue rainbow */ 763 | colors[';'] = "\033[48;2;104;68;255m"; /* Dark blue rainbow */ 764 | colors['*'] = "\033[48;2;153;153;153m"; /* Gray cat face */ 765 | colors['%'] = "\033[48;2;255;163;152m"; /* Pink cheeks */ 766 | break; 767 | default: 768 | break; 769 | } 770 | 771 | if (min_col == max_col) { 772 | min_col = (FRAME_WIDTH - terminal_width/2) / 2; 773 | max_col = (FRAME_WIDTH + terminal_width/2) / 2; 774 | using_automatic_width = 1; 775 | } 776 | 777 | if (min_row == max_row) { 778 | min_row = (FRAME_HEIGHT - (terminal_height-1)) / 2; 779 | max_row = (FRAME_HEIGHT + (terminal_height-1)) / 2; 780 | using_automatic_height = 1; 781 | } 782 | 783 | /* Attempt to set terminal title */ 784 | if (set_title) { 785 | printf("\033kNyanyanyanyanyanyanya...\033\134"); 786 | printf("\033]1;Nyanyanyanyanyanyanya...\007"); 787 | printf("\033]2;Nyanyanyanyanyanyanya...\007"); 788 | } 789 | 790 | if (clear_screen) { 791 | /* Clear the screen */ 792 | printf("\033[H\033[2J\033[?25l"); 793 | } else { 794 | printf("\033[s"); 795 | } 796 | 797 | if (show_intro) { 798 | /* Display the MOTD */ 799 | unsigned int countdown_clock = 5; 800 | for (k = 0; k < countdown_clock; ++k) { 801 | newline(3); 802 | printf(" \033[1mNyancat Telnet Server\033[0m"); 803 | newline(2); 804 | printf(" written and run by \033[1;32mK. Lange\033[1;34m @_klange\033[0m"); 805 | newline(2); 806 | printf(" If things don't look right, try:"); 807 | newline(1); 808 | printf(" TERM=fallback telnet ..."); 809 | newline(2); 810 | printf(" Or on Windows:"); 811 | newline(1); 812 | printf(" telnet -t vtnt ..."); 813 | newline(2); 814 | printf(" Problems? Check the website:"); 815 | newline(1); 816 | printf(" \033[1;34mhttp://nyancat.dakko.us\033[0m"); 817 | newline(2); 818 | printf(" This is a telnet server, remember your escape keys!"); 819 | newline(1); 820 | printf(" \033[1;31m^]quit\033[0m to exit"); 821 | newline(2); 822 | printf(" Starting in %d... \n", countdown_clock-k); 823 | 824 | fflush(stdout); 825 | usleep(400000); 826 | if (clear_screen) { 827 | printf("\033[H"); /* Reset cursor */ 828 | } else { 829 | printf("\033[u"); 830 | } 831 | } 832 | 833 | if (clear_screen) { 834 | /* Clear the screen again */ 835 | printf("\033[H\033[2J\033[?25l"); 836 | } 837 | } 838 | 839 | /* Store the start time */ 840 | time_t start, current; 841 | time(&start); 842 | 843 | int playing = 1; /* Animation should continue [left here for modifications] */ 844 | size_t i = 0; /* Current frame # */ 845 | unsigned int f = 0; /* Total frames passed */ 846 | char last = 0; /* Last color index rendered */ 847 | int y, x; /* x/y coordinates of what we're drawing */ 848 | while (playing) { 849 | /* Reset cursor */ 850 | if (clear_screen) { 851 | printf("\033[H"); 852 | } else { 853 | printf("\033[u"); 854 | } 855 | /* Render the frame */ 856 | for (y = min_row; y < max_row; ++y) { 857 | for (x = min_col; x < max_col; ++x) { 858 | char color; 859 | if (y > 23 && y < 43 && x < 0) { 860 | /* 861 | * Generate the rainbow tail. 862 | * 863 | * This is done with a pretty simplistic square wave. 864 | */ 865 | int mod_x = ((-x+2) % 16) / 8; 866 | if ((i / 2) % 2) { 867 | mod_x = 1 - mod_x; 868 | } 869 | /* 870 | * Our rainbow, with some padding. 871 | */ 872 | const char *rainbow = ",,>>&&&+++###==;;;,,"; 873 | color = rainbow[mod_x + y-23]; 874 | if (color == 0) color = ','; 875 | } else if (x < 0 || y < 0 || y >= FRAME_HEIGHT || x >= FRAME_WIDTH) { 876 | /* Fill all other areas with background */ 877 | color = ','; 878 | } else { 879 | /* Otherwise, get the color from the animation frame. */ 880 | color = frames[i][y][x]; 881 | } 882 | if (always_escape) { 883 | /* Text mode (or "Always Send Color Escapes") */ 884 | printf("%s", colors[(int)color]); 885 | } else { 886 | if (color != last && colors[(int)color]) { 887 | /* Normal Mode, send escape (because the color changed) */ 888 | last = color; 889 | printf("%s%s", colors[(int)color], output); 890 | } else { 891 | /* Same color, just send the output characters */ 892 | printf("%s", output); 893 | } 894 | } 895 | } 896 | /* End of row, send newline */ 897 | newline(1); 898 | } 899 | if (show_counter) { 900 | /* Get the current time for the "You have nyaned..." string */ 901 | time(¤t); 902 | double diff = difftime(current, start); 903 | /* Now count the length of the time difference so we can center */ 904 | int nLen = digits((int)diff); 905 | /* 906 | * 29 = the length of the rest of the string; 907 | * XXX: Replace this was actually checking the written bytes from a 908 | * call to sprintf or something 909 | */ 910 | int width = (terminal_width - 29 - nLen) / 2; 911 | /* Spit out some spaces so that we're actually centered */ 912 | while (width > 0) { 913 | printf(" "); 914 | width--; 915 | } 916 | /* You have nyaned for [n] seconds! 917 | * The \033[J ensures that the rest of the line has the dark blue 918 | * background, and the \033[1;37m ensures that our text is bright white. 919 | * The \033[0m prevents the Apple ][ from flipping everything, but 920 | * makes the whole nyancat less bright on the vt220 921 | */ 922 | printf("\033[1;37mYou have nyaned for %0.0f seconds!\033[J\033[0m", diff); 923 | } 924 | /* Reset the last color so that the escape sequences rewrite */ 925 | last = 0; 926 | /* Update frame count */ 927 | ++f; 928 | if (frame_count != 0 && f == frame_count) { 929 | finish(); 930 | } 931 | ++i; 932 | if (!frames[i]) { 933 | /* Loop animation */ 934 | i = 0; 935 | } 936 | /* Wait */ 937 | usleep(1000 * delay_ms); 938 | } 939 | return 0; 940 | } 941 | -------------------------------------------------------------------------------- /src/telnet.h: -------------------------------------------------------------------------------- 1 | #ifndef TELNET_H 2 | #define TELNET_H 3 | 4 | /* Telnet Defines */ 5 | #define IAC 255 6 | #define DONT 254 7 | #define DO 253 8 | #define WONT 252 9 | #define WILL 251 10 | 11 | #define SE 240 // Subnegotiation End 12 | #define NOP 241 // No Operation 13 | #define DM 242 // Data Mark 14 | #define BRK 243 // Break 15 | #define IP 244 // Interrupt process 16 | #define AO 245 // Abort output 17 | #define AYT 246 // Are You There 18 | #define EC 247 // Erase Character 19 | #define EL 248 // Erase Line 20 | #define GA 249 // Go Ahead 21 | #define SB 250 // Subnegotiation Begin 22 | 23 | #define BINARY 0 // 8-bit data path 24 | #define ECHO 1 // echo 25 | #define RCP 2 // prepare to reconnect 26 | #define SGA 3 // suppress go ahead 27 | #define NAMS 4 // approximate message size 28 | #define STATUS 5 // give status 29 | #define TM 6 // timing mark 30 | #define RCTE 7 // remote controlled transmission and echo 31 | #define NAOL 8 // negotiate about output line width 32 | #define NAOP 9 // negotiate about output page size 33 | #define NAOCRD 10 // negotiate about CR disposition 34 | #define NAOHTS 11 // negotiate about horizontal tabstops 35 | #define NAOHTD 12 // negotiate about horizontal tab disposition 36 | #define NAOFFD 13 // negotiate about formfeed disposition 37 | #define NAOVTS 14 // negotiate about vertical tab stops 38 | #define NAOVTD 15 // negotiate about vertical tab disposition 39 | #define NAOLFD 16 // negotiate about output LF disposition 40 | #define XASCII 17 // extended ascii character set 41 | #define LOGOUT 18 // force logout 42 | #define BM 19 // byte macro 43 | #define DET 20 // data entry terminal 44 | #define SUPDUP 21 // supdup protocol 45 | #define SUPDUPOUTPUT 22 // supdup output 46 | #define SNDLOC 23 // send location 47 | #define TTYPE 24 // terminal type 48 | #define EOR 25 // end or record 49 | #define TUID 26 // TACACS user identification 50 | #define OUTMRK 27 // output marking 51 | #define TTYLOC 28 // terminal location number 52 | #define VT3270REGIME 29 // 3270 regime 53 | #define X3PAD 30 // X.3 PAD 54 | #define NAWS 31 // window size 55 | #define TSPEED 32 // terminal speed 56 | #define LFLOW 33 // remote flow control 57 | #define LINEMODE 34 // Linemode option 58 | #define XDISPLOC 35 // X Display Location 59 | #define OLD_ENVIRON 36 // Old - Environment variables 60 | #define AUTHENTICATION 37 // Authenticate 61 | #define ENCRYPT 38 // Encryption option 62 | #define NEW_ENVIRON 39 // New - Environment variables 63 | #define TN3270E 40 // TN3270E 64 | #define XAUTH 41 // XAUTH 65 | #define CHARSET 42 // CHARSET 66 | #define RSP 43 // Telnet Remote Serial Port 67 | #define COM_PORT_OPTION 44 // Com Port Control Option 68 | #define SUPPRESS_LOCAL_ECHO 45 // Telnet Suppress Local Echo 69 | #define TLS 46 // Telnet Start TLS 70 | #define KERMIT 47 // KERMIT 71 | #define SEND_URL 48 // SEND-URL 72 | #define FORWARD_X 49 // FORWARD_X 73 | #define PRAGMA_LOGON 138 // TELOPT PRAGMA LOGON 74 | #define SSPI_LOGON 139 // TELOPT SSPI LOGON 75 | #define PRAGMA_HEARTBEAT 140 // TELOPT PRAGMA HEARTBEAT 76 | #define EXOPL 255 // Extended-Options-List 77 | #define NOOPT 0 78 | 79 | #define IS 0 80 | #define SEND 1 81 | 82 | #endif 83 | -------------------------------------------------------------------------------- /systemd/nyancat.socket: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=nyancat socket 3 | 4 | [Socket] 5 | ListenStream=23 6 | Accept=true 7 | 8 | [Install] 9 | WantedBy=sockets.target 10 | -------------------------------------------------------------------------------- /systemd/nyancat@.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=nyancat 3 | Documentation=man:nyancat(1) 4 | 5 | [Service] 6 | User=nobody 7 | ExecStart=-/usr/bin/nyancat -t 8 | StandardInput=socket 9 | StandardOutput=socket 10 | 11 | [Install] 12 | WantedBy=multi-user.target 13 | --------------------------------------------------------------------------------