malbolge-0.2/0000755000175000017500000000000011014641402013022 5ustar cyberixcyberixmalbolge-0.2/AUTHORS0000644000175000017500000000053711014641402014077 0ustar cyberixcyberixexamples/99bottles.mbs Hisashi Iizawa examples/copy.mbs Lou Scheffer examples/hello-world.mb(s) Andrew Cooke original/malbolge.c Ben Olmstead original/malbolge.txt Ben Olmstead malbolge.py Toni Ruottu malbolge-0.2/license0000644000175000017500000000015111014641402014364 0ustar cyberixcyberixContents of the Malbolge Survival Kit have been placed into the public domain by their original authors. malbolge-0.2/malbolge.py0000755000175000017500000001347111014641402015167 0ustar cyberixcyberix#!/usr/bin/env python # # MSK (Malbolge Survival Kit) Malbolge Interpreter # 2008, Toni Ruottu # # I hereby place this interpreter into the public domain. # import sys from getopt import getopt class MBException(Exception): pass class Vm(object): def __init__(self, source=None, output=sys.stdout, input=sys.stdin, relax=False, book=False): self.decode_cipher = \ r'''+b(29e*j1VMEKLyC})8&m#~W>qxdRp0wkrUo[D7,XTcA"lI''' + \ r'''.v%{gJh4G\-=O@5`_3iU!pJS72FhOA1C''' + \ r'''B6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G"i@''' ] self.cipher_length = len(self.decode_cipher) self.WORD_SIZE = 10 self.REG_MAX = self.tri2dec(self.WORD_SIZE * [2]) self.MEM_SIZE = self.REG_MAX + 1 self.operations = { 'j': self.i_setdata, 'i': self.i_setcode, '*': self.i_rotate, 'p': self.i_op, '<': self.i_write, '/': self.i_read, 'v': self.i_stop, 'o': self.i_nop } if book: self.operations['<'] = self.i_read self.operations['/'] = self.i_write self.instructions = self.operations.keys() self.output = output self.input = input if source: self.load( source, relax ) self.run() def is_graphical_ascii(self, c): return 33 <= c <= 126 def dec2tri(self, d): i = self.WORD_SIZE t = i * [0] while d > 0: i -= 1 t[i] = d % 3 d = d / 3 return t def tri2dec(self, t): d = 0 i = 0 while i < self.WORD_SIZE-1: d = (d + t[i]) * 3 i += 1 return d + t[i] def op(self, at, dt): table = [ [1,0,0], [1,0,2], [2,2,1] ] o = self.WORD_SIZE * [0] for i in xrange(self.WORD_SIZE): o[i] = table[dt[i]][at[i]] return o def validate_source(self, length): if [c for c in self.mem[:length] if not self.is_graphical_ascii(c)]: raise MBException('source code contains invalid character(s)') valid = set(self.instructions) used = set([self.decode(_) for _ in xrange(length)]) if len(used - valid) > 0: raise MBException('source code contains invalid instruction(s)') def load(self, source, relax=False): if len(source) < 2: raise MBException('source code too short') if len(source) > self.MEM_SIZE: raise MBException('source code too long') code = [ord(_) for _ in source if not _.isspace()] self.mem = ( code + (self.MEM_SIZE - len(code)) * [0]) if not relax: self.validate_source(len(code)) for i in xrange(len(code),self.MEM_SIZE): at = self.dec2tri(self.mem[i-1]) dt = self.dec2tri(self.mem[i-2]) self.mem[i] = self.tri2dec(self.op(at, dt)) def i_setdata(self): self.d = self.mem[self.d] def i_setcode(self): self.c = self.mem[self.d] def i_rotate(self): t = self.dec2tri( self.mem[self.d]) t = t[-1:] + t[:-1] self.mem[self.d] = self.tri2dec(t) self.a = self.mem[self.d] def i_op(self): at = self.dec2tri(self.a) dt = self.dec2tri(self.mem[self.d]) self.mem[self.d] = self.tri2dec(self.op(at, dt)) self.a = self.mem[self.d] def i_write(self): self.output.write(chr(self.a & 0xff)) def i_read(self): x = self.input.read(1) if (len(x) < 1): #EOF self.a = self.REG_MAX else: self.a = ord(x) def i_stop(self): pass def i_nop(self): pass def validate(self, addr): if not self.is_graphical_ascii(self.mem[self.c]): raise MBException('illegal code detected') def decode(self,addr): return self.decode_cipher[( self.mem[addr] - 33 + addr ) % self.cipher_length] def is_running(self): return self.i != 'v' def fetch(self): self.validate(self.mem[self.c]) self.i = self.decode(self.c) def execute(self): if self.i in self.instructions: self.operations[self.i]() def modify(self): self.mem[self.c] = self.encode_cipher[self.mem[self.c] - 33] def increment_c(self): self.c += 1 if self.c > self.REG_MAX: self.c = 0 def increment_d(self): self.d += 1 if self.d > self.REG_MAX: self.d = 0 def run(self): self.a = 0 # accumulator self.c = 0 # code pointer self.d = 0 # data pointer self.i = '' # instruction while self.is_running(): self.fetch() self.execute() self.modify() self.increment_c() self.increment_d() def go(args): return getopt(args,'',['relaxed','by-the-book']) def main(): file = sys.stdin args = sys.argv[1:] opts, files = go(args) if files: file = open(files[0]) source = file.read() if source[0] == '#': rows = source.split('\n') if len(rows) > 1 and len(rows[1]) > 0: moreopts, _ = go([_ for _ in rows[1][1:].split(' ') if _]) opts += moreopts i = 0 while rows[i] and rows[i][0] == '#': i += 1 source = ''.join(rows [i:]) relax = '--relaxed' in (x for x,_ in opts) book = '--by-the-book' in (x for x,_ in opts) try: Vm(source,relax=relax,book=book) except MBException, e: sys.stderr.write('ERROR: ' + str(e) + '\n') sys.exit(1) except KeyboardInterrupt: pass if __name__ == '__main__': main() malbolge-0.2/malbolge0000755000175000017500000001347111014641402014540 0ustar cyberixcyberix#!/usr/bin/env python # # MSK (Malbolge Survival Kit) Malbolge Interpreter # 2008, Toni Ruottu # # I hereby place this interpreter into the public domain. # import sys from getopt import getopt class MBException(Exception): pass class Vm(object): def __init__(self, source=None, output=sys.stdout, input=sys.stdin, relax=False, book=False): self.decode_cipher = \ r'''+b(29e*j1VMEKLyC})8&m#~W>qxdRp0wkrUo[D7,XTcA"lI''' + \ r'''.v%{gJh4G\-=O@5`_3iU!pJS72FhOA1C''' + \ r'''B6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G"i@''' ] self.cipher_length = len(self.decode_cipher) self.WORD_SIZE = 10 self.REG_MAX = self.tri2dec(self.WORD_SIZE * [2]) self.MEM_SIZE = self.REG_MAX + 1 self.operations = { 'j': self.i_setdata, 'i': self.i_setcode, '*': self.i_rotate, 'p': self.i_op, '<': self.i_write, '/': self.i_read, 'v': self.i_stop, 'o': self.i_nop } if book: self.operations['<'] = self.i_read self.operations['/'] = self.i_write self.instructions = self.operations.keys() self.output = output self.input = input if source: self.load( source, relax ) self.run() def is_graphical_ascii(self, c): return 33 <= c <= 126 def dec2tri(self, d): i = self.WORD_SIZE t = i * [0] while d > 0: i -= 1 t[i] = d % 3 d = d / 3 return t def tri2dec(self, t): d = 0 i = 0 while i < self.WORD_SIZE-1: d = (d + t[i]) * 3 i += 1 return d + t[i] def op(self, at, dt): table = [ [1,0,0], [1,0,2], [2,2,1] ] o = self.WORD_SIZE * [0] for i in xrange(self.WORD_SIZE): o[i] = table[dt[i]][at[i]] return o def validate_source(self, length): if [c for c in self.mem[:length] if not self.is_graphical_ascii(c)]: raise MBException('source code contains invalid character(s)') valid = set(self.instructions) used = set([self.decode(_) for _ in xrange(length)]) if len(used - valid) > 0: raise MBException('source code contains invalid instruction(s)') def load(self, source, relax=False): if len(source) < 2: raise MBException('source code too short') if len(source) > self.MEM_SIZE: raise MBException('source code too long') code = [ord(_) for _ in source if not _.isspace()] self.mem = ( code + (self.MEM_SIZE - len(code)) * [0]) if not relax: self.validate_source(len(code)) for i in xrange(len(code),self.MEM_SIZE): at = self.dec2tri(self.mem[i-1]) dt = self.dec2tri(self.mem[i-2]) self.mem[i] = self.tri2dec(self.op(at, dt)) def i_setdata(self): self.d = self.mem[self.d] def i_setcode(self): self.c = self.mem[self.d] def i_rotate(self): t = self.dec2tri( self.mem[self.d]) t = t[-1:] + t[:-1] self.mem[self.d] = self.tri2dec(t) self.a = self.mem[self.d] def i_op(self): at = self.dec2tri(self.a) dt = self.dec2tri(self.mem[self.d]) self.mem[self.d] = self.tri2dec(self.op(at, dt)) self.a = self.mem[self.d] def i_write(self): self.output.write(chr(self.a & 0xff)) def i_read(self): x = self.input.read(1) if (len(x) < 1): #EOF self.a = self.REG_MAX else: self.a = ord(x) def i_stop(self): pass def i_nop(self): pass def validate(self, addr): if not self.is_graphical_ascii(self.mem[self.c]): raise MBException('illegal code detected') def decode(self,addr): return self.decode_cipher[( self.mem[addr] - 33 + addr ) % self.cipher_length] def is_running(self): return self.i != 'v' def fetch(self): self.validate(self.mem[self.c]) self.i = self.decode(self.c) def execute(self): if self.i in self.instructions: self.operations[self.i]() def modify(self): self.mem[self.c] = self.encode_cipher[self.mem[self.c] - 33] def increment_c(self): self.c += 1 if self.c > self.REG_MAX: self.c = 0 def increment_d(self): self.d += 1 if self.d > self.REG_MAX: self.d = 0 def run(self): self.a = 0 # accumulator self.c = 0 # code pointer self.d = 0 # data pointer self.i = '' # instruction while self.is_running(): self.fetch() self.execute() self.modify() self.increment_c() self.increment_d() def go(args): return getopt(args,'',['relaxed','by-the-book']) def main(): file = sys.stdin args = sys.argv[1:] opts, files = go(args) if files: file = open(files[0]) source = file.read() if source[0] == '#': rows = source.split('\n') if len(rows) > 1 and len(rows[1]) > 0: moreopts, _ = go([_ for _ in rows[1][1:].split(' ') if _]) opts += moreopts i = 0 while rows[i] and rows[i][0] == '#': i += 1 source = ''.join(rows [i:]) relax = '--relaxed' in (x for x,_ in opts) book = '--by-the-book' in (x for x,_ in opts) try: Vm(source,relax=relax,book=book) except MBException, e: sys.stderr.write('ERROR: ' + str(e) + '\n') sys.exit(1) except KeyboardInterrupt: pass if __name__ == '__main__': main() malbolge-0.2/README0000644000175000017500000000136211014641402013704 0ustar cyberixcyberix The Malbolge Survival Kit, that you're currently holding in your virtual hands, contains everything you need for coding Malbolge on a desert island. Ability to use the Internet and a group of cryptography gurus may come in handy too. malbolge.c - the original Malbolge interpreter malbolge.txt - the original Malbolge guide malbolge.py - a Malbolge interpreter written in Python license - states your rights README - this file AUTHORS - lists the contributors some Malbolge script examples... hello-world.mbs - prints 'HEllO WORld' to screen 99bottles.mbs - prints lyrics for '99 Bottles of Beer' copy.mbs - copies input to output hello-world.mb - a non-script version of hello world malbolge-0.2/malbolge.man0000644000175000017500000000155611014641402015310 0ustar cyberixcyberix.TH malbolge 1 "May 20, 2008" .SH NAME malbolge \- an interpreter for Malbolge programming language .SH SYNOPSIS .B malbolge [FILE] .SH DESCRIPTION Executes Malbolge programs from standard input, or alternatively from a given source file. .SH OPTIONS .TP \fB\-\-by-the-book\fR respect specification over reference implementation while interpreting read/write instructions .TP \fB\-\-relaxed\fR skip source code validation (the reference implementation skips it) .SH EXAMPLES .TP malbolge Executes a Malbolge program from standard input .TP malbolge hello\-world.mb Executes the Malbolge program hello\-world.mb .TP malbolge hello\-world.mbs Executes the Malbolge script hello\-world.mbs .SH AUTHOR Toni Ruottu wrote the MSK (Malbolge Survival Kit) malbolge interpreter. .SH COPYRIGHT The MSK Malbolge interpreter has been placed into the public domain by its original author. malbolge-0.2/changelog0000644000175000017500000000021511014641402014672 0ustar cyberixcyberix# Malbolge Survival Kit Changelog 0.2 o Rewrote the interpreter in Python. 0.1.1 o Added some escapes to man page. 0.1 o Created MSK. malbolge-0.2/original/0000755000175000017500000000000011014641402014626 5ustar cyberixcyberixmalbolge-0.2/original/malbolge.c0000644000175000017500000001120211014641402016550 0ustar cyberixcyberix/* Interpreter for Malbolge. */ /* '98 Ben Olmstead. */ /* */ /* Malbolge is the name of Dante's Eighth circle of Hell. This */ /* interpreter isn't even Copylefted; I hereby place it in the public */ /* domain. Have fun... */ /* */ /* Note: in keeping with the idea that programming in Malbolge is */ /* meant to be hell, there is no debugger. */ /* */ /* By the way, this code assumes that short is 16 bits. I haven't */ /* seen any case where it isn't, but it might happen. If short is */ /* longer than 16 bits, it will still work, though it will take up */ /* considerably more memory. */ /* */ /* If you are compiling with a 16-bit Intel compiler, you will need */ /* >64K data arrays; this means using the HUGE memory model on most */ /* compilers, but MS C, as of 8.00, possibly earlier as well, allows */ /* you to specify a custom memory-model; the best model to choose in */ /* this case is /Ashd (near code, huge data), I think. */ #include #include #include #include #include #ifdef __GNUC__ static inline #endif void exec( unsigned short *mem ); #ifdef __GNUC__ static inline #endif unsigned short op( unsigned short x, unsigned short y ); const char xlat1[] = "+b(29e*j1VMEKLyC})8&m#~W>qxdRp0wkrUo[D7,XTcA\"lI" ".v%{gJh4G\\-=O@5`_3iU!pJS72FhOA1C" "B6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G\"i@"; int main( int argc, char **argv ) { FILE *f; unsigned short i = 0, j; int x; unsigned short *mem; if ( argc != 2 ) { fputs( "invalid command line\n", stderr ); return ( 1 ); } if ( ( f = fopen( argv[1], "r" ) ) == NULL ) { fputs( "can't open file\n", stderr ); return ( 1 ); } #ifdef _MSC_VER mem = (unsigned short *)_halloc( 59049, sizeof(unsigned short) ); #else mem = (unsigned short *)malloc( sizeof(unsigned short) * 59049 ); #endif if ( mem == NULL ) { fclose( f ); fputs( "can't allocate memory\n", stderr ); return ( 1 ); } while ( ( x = getc( f ) ) != EOF ) { if ( isspace( x ) ) continue; if ( x < 127 && x > 32 ) { if ( strchr( "ji*p 126 ) continue; switch ( xlat1[( mem[c] - 33 + c ) % 94] ) { case 'j': d = mem[d]; break; case 'i': c = mem[d]; break; case '*': a = mem[d] = mem[d] / 3 + mem[d] % 3 * 19683; break; case 'p': a = mem[d] = op( a, mem[d] ); break; case '<': #if '\n' != 10 if ( x == 10 ) putc( '\n', stdout ); else #endif putc( a, stdout ); break; case '/': x = getc( stdin ); #if '\n' != 10 if ( x == '\n' ) a = 10; else #endif if ( x == EOF ) a = 59048; else a = x; break; case 'v': return; } mem[c] = xlat2[mem[c] - 33]; if ( c == 59048 ) c = 0; else c++; if ( d == 59048 ) d = 0; else d++; } } #ifdef __GNUC__ static inline #endif unsigned short op( unsigned short x, unsigned short y ) { unsigned short i = 0, j; static const unsigned short p9[5] = { 1, 9, 81, 729, 6561 }; static const unsigned short o[9][9] = { { 4, 3, 3, 1, 0, 0, 1, 0, 0 }, { 4, 3, 5, 1, 0, 2, 1, 0, 2 }, { 5, 5, 4, 2, 2, 1, 2, 2, 1 }, { 4, 3, 3, 1, 0, 0, 7, 6, 6 }, { 4, 3, 5, 1, 0, 2, 7, 6, 8 }, { 5, 5, 4, 2, 2, 1, 8, 8, 7 }, { 7, 6, 6, 7, 6, 6, 4, 3, 3 }, { 7, 6, 8, 7, 6, 8, 4, 3, 5 }, { 8, 8, 7, 8, 8, 7, 5, 5, 4 }, }; for ( j = 0; j < 5; j++ ) i += o[y / p9[j] % 9][x / p9[j] % 9] * p9[j]; return ( i ); } malbolge-0.2/original/malbolge.txt0000644000175000017500000002517311014641402017161 0ustar cyberixcyberixMalbolge '98, Ben Olmstead I hereby relenquish any and all copyright on this language, documentation, and interpreter; Malbolge is officially public domain. ------------------------------------------------------------------------ Malbolge '98, Ben Olmstead Introduction ^^^^^^^^^^^^ It was noticed that, in the field of esoteric programming languages, there was a particular and surprising void: no programming language known to the author was specifically designed to be difficult to program in. Certainly, there were languages which were difficult to write in, and far more were difficult to read (see: Befunge, False, TWDL, RUBE...). But even INTERCAL and BrainF***, the two kings of mental torment, were designed with other goals: INTERCAL to have nothing in common with any major programming language, and BrainF*** to be a very tiny, yet still Turing-complete, language. INTERCAL's constructs are certainly tortuous, but they are all too flexible; you can, for instance, quite easily assign any number to a variable with a single statement. BrainF*** is lacking the flexibility which is INTERCAL's major weakness, but it fails in that its constructs are far, far too intuitive. Certainly, there are only 8 instructions, none of which take any arguments--but it is quite easy to determine how to use those instructions. Subtract 8 from the current number? With a simple '--------' you are done! This kind of simple answer was unacceptable to the author. Hence the author created Malbolge. It borrows from machine, BrainF***, and tri-INTERCAL, but put together in a unique way. It was designed to be difficult to use, and so it is. It is designed to be incomprehensible, and so it is. So far, no Malbolge programs have been written. Thus, we cannot give an example. "Malbolge" is the name of Dante's Eighth Circle of Hell, in which practitioners of deception (seducers, flatterers, simonists, thieves, hypocrites, and so on) spend eternity. Environment ^^^^^^^^^^^ In many languages, the environment is easy to understand. In Malbolge, it is best to understand the runtime environment before you ever see a command. The environment is, roughly, that of a primitive trinary CPU. Both code and data share the same space (the machine's memory segment), and there are three registers. Machine words are ten trits (trinary digits) wide, giving a maximum possible value of 59048 (all numbers are unsigned). Memory space is exactly 59049 words long. The three registers are A, C, and D. A is the accumulator, used for data manipulation. A is implicitly set to the value written by all write operations on memory. (Standard I/O, a distinctly non-chip-level feature, is done directly with the A register.) C is the code pointer. It is automatically incremented after each instruction, and points the instruction being executed. D is the data pointer. It, too, is automatically incremented after each instruction, but the location it points to is used for the data manipulation commands. All registers begin with the value 0. When the interpreter loads the program, it ignores all whitespace. If it encounters anything that is not one of an instruction and is not whitespace, it will give an error, otherwise it loads the file, one non- whitespace character per cell, into memory. Cells which are not initialized are set by performing op on the previous two cells repetitively. Commands ^^^^^^^^ When the interpreter tries to execute a program, it first checks to see if the current instruction is a graphical ASCII character (33 through 126). If it is, it subtracts 33 from it, adds C to it, mods it by 94, then uses the result as an index into the following table of 94 characters: +b(29e*j1VMEKLyC})8&m#~W>qxdRp0wkrUo[D7,XTcA"lI .v%{gJh4G\-=O@5`_3iU!pJS72FhOA1C B6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G"i@ j sets the data pointer to the value in the cell pointed to by the current data pointer. i sets the code pointer to the value in the cell pointed to be the current data pointer. * rotates the trinary value of the cell pointed to by D to the right 1. The least significant trit becomes the most significant trit, and all others move one position to the left. p performs a tritwise "op" on the value pointed to by D with the contents of A. The op (don't look for pattern, it's not there) is: | A trit: ________|_0__1__2_ 0 | 1 0 0 *D 1 | 1 0 2 trit 2 | 2 2 1 Di-trits: 00 01 02 10 11 12 20 21 22 00 04 03 03 01 00 00 01 00 00 01 04 03 05 01 00 02 01 00 02 02 05 05 04 02 02 01 02 02 01 10 04 03 03 01 00 00 07 06 06 11 04 03 05 01 00 02 07 06 08 12 05 05 04 02 02 01 08 08 07 20 07 06 06 07 06 06 04 03 03 21 07 06 08 07 06 08 04 03 05 22 08 08 07 08 08 07 05 05 04 < reads an ASCII value from the stdin and converts it to Trinary, then stores it in A. 10 (line feed) is considered 'newline', and 2222222222t (59048 dec.) is EOF. / converts the value in A to ASCII and writes it to stdout. Writing 10 is a newline. v indicates a full stop for the machine. o does nothing, except increment C and D, as all other instructions do. Turing-Completeness ^^^^^^^^^^^^^^^^^^^ Though I have not proven it, I _think_ Malbolge to be Turing-complete. To be Turing-complete, there must be some data construct which can be used to do any mathematical calculation. I believe that using *p in various clever ways on the tritwords can fulfill this requirement. Turing-completeness also requires three code constructs: sequential execution (which Malbolge obviously has), repetition (provided by the i and, indirectly, j instructions), and conditional-execution (provided, I believe, by self-modifying code and altering i destinations). I do have my doubts, particularly about data constructs, but I *think* this works... Appendix: Trinary Conversion Table ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Trinary to ASCII to decimal to hex table, provided, strangely enough, for the convenience of Malbolge programmers. 00000 NUL 000 00 01012 032 20 02101 @ 064 40 10120 ` 096 60 00001 SOH 001 01 01020 ! 033 21 02102 A 065 41 10121 a 097 61 00002 STX 002 02 01021 " 034 22 02110 B 066 42 10122 b 098 62 00010 ETX 003 03 01022 # 035 23 02111 C 067 43 10200 c 099 63 00011 EOT 004 04 01100 $ 036 24 02112 D 068 44 10201 d 100 64 00012 ENQ 005 05 01101 % 037 25 02120 E 069 45 10202 e 101 65 00020 ACK 006 06 01102 & 038 26 02121 F 070 46 10210 f 102 66 00021 BEL 007 07 01110 ' 039 27 02122 G 071 47 10211 g 103 67 00022 BS 008 08 01111 ( 040 28 02200 H 072 48 10212 h 104 68 00100 HT 009 09 01112 ) 041 29 02201 I 073 49 10220 i 105 69 00101 LF 010 0a 01120 * 042 2a 02202 J 074 4a 10221 j 106 6a 00102 VT 011 0b 01121 + 043 2b 02210 K 075 4b 10222 k 107 6b 00110 FF 012 0c 01122 , 044 2c 02211 L 076 4c 11000 l 108 6c 00111 CR 013 0d 01200 - 045 2d 02212 M 077 4d 11001 m 109 6d 00112 SO 014 0e 01201 . 046 2e 02220 N 078 4e 11002 n 110 6e 00120 SI 015 0f 01202 / 047 2f 02221 O 079 4f 11010 o 111 6f 00121 DLE 016 10 01210 0 048 30 02222 P 080 50 11011 p 112 70 00122 DC1 017 11 01211 1 049 31 10000 Q 081 51 11012 q 113 71 00200 DC2 018 12 01212 2 050 32 10001 R 082 52 11020 r 114 72 00201 DC3 019 13 01220 3 051 33 10002 S 083 53 11021 s 115 73 00202 DC4 020 14 01221 4 052 34 10010 T 084 54 11022 t 116 74 00210 NAK 021 15 01222 5 053 35 10011 U 085 55 11100 u 117 75 00211 SYN 022 16 02000 6 054 36 10012 V 086 56 11101 v 118 76 00212 ETB 023 17 02001 7 055 37 10020 W 087 57 11102 w 119 77 00220 CAN 024 18 02002 8 056 38 10021 X 088 58 11110 x 120 78 00221 EM 025 19 02010 9 057 39 10022 Y 089 59 11111 y 121 79 00222 SUB 026 1a 02011 : 058 3a 10100 Z 090 5a 11112 z 122 7a 01000 ESC 027 1b 02012 ; 059 3b 10101 [ 091 5b 11120 { 123 7b 01001 FS 028 1c 02020 < 060 3c 10102 \ 092 5c 11121 | 124 7c 01002 GS 029 1d 02021 = 061 3d 10110 ] 093 5d 11122 } 125 7d 01010 RS 030 1e 02022 > 062 3e 10111 ^ 094 5e 11200 ~ 126 7e 01011 US 031 1f 02100 ? 063 3f 10112 _ 095 5f 11202 128 80 12221 160 a0 21010 192 c0 22022 224 e0 11210 129 81 12222 161 a1 21011 193 c1 22100 225 e1 11211 130 82 20000 162 a2 21012 194 c2 22101 226 e2 11212 131 83 20001 163 a3 21020 195 c3 22102 227 e3 11220 132 84 20002 164 a4 21021 196 c4 22110 228 e4 11221 133 85 20010 165 a5 21022 197 c5 22111 229 e5 11222 134 86 20011 166 a6 21100 198 c6 22112 230 e6 12000 135 87 20012 167 a7 21101 199 c7 22120 231 e7 12001 136 88 20020 168 a8 21102 200 c8 22121 232 e8 12002 137 89 20021 169 a9 21110 201 c9 22122 233 e9 12010 138 8a 20022 170 aa 21111 202 ca 22200 234 ea 12011 139 8b 20100 171 ab 21112 203 cb 22201 235 eb 12012 140 8c 20101 172 ac 21120 204 cc 22202 236 ec 12020 141 8d 20102 173 ad 21121 205 cd 22210 237 ed 12021 142 8e 20110 174 ae 21122 206 ce 22211 238 ee 12022 143 8f 20111 175 af 21200 207 cf 22212 239 ef 12100 144 90 20112 176 b0 21201 208 d0 22220 240 f0 12101 145 91 20120 177 b1 21202 209 d1 22221 241 f1 12102 146 92 20121 178 b2 21210 210 d2 22222 242 f2 12110 147 93 20122 179 b3 21211 211 d3 12111 148 94 20200 180 b4 21212 212 d4 12112 149 95 20201 181 b5 21220 213 d5 12120 150 96 20202 182 b6 21221 214 d6 12121 151 97 20210 183 b7 21222 215 d7 12122 152 98 20211 184 b8 22000 216 d8 12200 153 99 20212 185 b9 22001 217 d9 12201 154 9a 20220 186 ba 22002 218 da 12202 155 9b 20221 187 bb 22010 219 db 12210 156 9c 20222 188 bc 22011 220 dc 12211 157 9d 21000 189 bd 22012 221 dd 12212 158 9e 21001 190 be 22020 222 de 12220 159 9f 21002 191 bf 22021 223 df malbolge-0.2/examples/0000755000175000017500000000000011014641403014641 5ustar cyberixcyberixmalbolge-0.2/examples/copy.mbs0000755000175000017500000000131111014641403016315 0ustar cyberixcyberix#!/usr/bin/env malbolge # --relaxed # # copy, written by Lou Scheffer # # copies input to output # # This application depends on a bug in the original Malbolge # interpreter. It may stop functioning, if the bug is fixed # and may not work when run on other interpreters. D'BA@?>=<;:9876543210/.-,+*)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDC&_十十十十十十十十十十十十十十十十十十篏十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十篏十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十十 malbolge-0.2/examples/99bottles.mbs0000755000175000017500000005462111014641403017215 0ustar cyberixcyberix#!/usr/bin/env malbolge # # 99bottles, written by Hisashi Iizawa in 2005 # # Prints out lyrics for '99 Bottles of Beer'. b'`;$9!=IlXFiVwwvtPO0)pon%IHGFDV|dd@Q=+^:('&Y$#m!1S|.QOO=v('98$65aCB}0i.Tw+QPU'7qK#I20jiDVgG S(bt<%@#!7~|4{y1xv.us+rp(om%lj"ig}fd"cx``uz]rwvYnslkTonPfOjiKgJeG]\EC_X]@[Z7~;:9y16w43s10)p-,l*#(i&%e#d!~``{tyxZpuXsrTTongOkdMhg`Hd]ba`_^W@[ZYXW9UNSRQPOHMLK J-++FE''=<;:387xw43s10/(-&m*)('&}${d!~}|^zyxwvutmVqpiRQlkjiKafedc\E`_^@\[ZYX;V9NMRQ42NG LK.IH*F?DCBA$#>7~;{{8xx5uu2rr/oo,ll)ii&f|e"!aw`{z\r[vXnmVTpongPkNihgJ_dcFa`B^]\UZ=RWV8TSLQ4O N0LE.IHA)E>'BA:?!7~5|38y6/v321q).-&m*)i'&%|{d!~}_{zs\wvutsUqTonPlOjiKgJedFbE`_A]@[Z7~;:987w5v32r0)p-,+k)('~g$#"b~w|uz]xwvutsrqTinQlOjLhgfeH]bE`CB]\>ZSXWVUTS RQPON1LE.I,+*((&&$$""~~||zzxxv4u210/(-n+l)(i&g$ddy~}`u^]\ZvutVlUjSQQOOdMKgfeG]F[DBB@@>><<:VU T6L5JO200EJ-HG*E>'B%$9>=<|4{2y05v321r).o,mlj(igg|#d!~}`uz]x[ZotWUUjoRmlkNibKJIGGEEZ_B]\?Z=XW PU876442NM/KD-B+))''%%##!!}}{{yyw5v32s0q.-&+l)j'hff{"caav{^yxwZutslUpSnQOOdiLgfHHcba`Y^A\?Z= ;;PU8SRQ4ONMLEJ-,+))''%%##!=<;{3z1xvvttrrppnnll#j!&g$#d!b}|{zyr[vYtsrTjShQfkNihgJedcba`Y^A\? Z=;WV9TSRQPOHM0K.-++)ED&B;$9"~<;:z2y0wuussqqoom+ljj!&%$dzcx}`{zy\wvutsrqjSnQPNNLhgIedG\EZCA] \[=SY<;P9775533H1/KJ,HA*?(&&$$">=<|4{2ywwu321q)p'nl*k('gg${"c~a`^z]xwvYtmrUpSRPlOMMbK`IGGEE Z_^]?U>S<::8866442200.JIH*@)>C&A@?"=<5|{8y65vtt10/(-n+lk"'&%e{dyb``^^\\ZvutVlUjSQmlkMcLaJHHF bECCX]\[=S>>YXWP9T76K42200.JI+G@)>'%A@?!7~5|zzx654t,s*qo-n+*jj!h%fec!b}|{^s\[vYWWlqTonQlO jchKfIHFFDDB^]\>T=R;P9NS6QPO2MLE.-,*FED&<%:#!!}}{{yyw543s+r)pnnl*kii~%f#"caa|{zsx[ZutVrkTinQ lkNiLgfe^cFEDYBW\[=YR;P977553O200EJIH*@)>C&$$9>!<;|9z7654-tsrppnnll#('&f|ezca}|{]s\qZXtsrTjS hQOOMihgI_H]FDDB^A\[><=<5:{zy0wuussqqoomm$ki'hff{"c~}`{t]\wvuWmVk pSnmPNNcLKfIGG\aD_^A\?T=<;99775QPO1G0E.,HG)E>'<%#?"~~5:98x0w.ussq/pnn%*k('hff#z!ba|{z\r[puXs rUpSnglONihgI_H]FDDYBW\[Z=}5|3zxxv4u21r/p-,+*#(i&g$# c!~av_t][[YutsUkTiRPPNNLLJJHHFFDDB^A\[Z=XWVUTM6Q43HM0..CH+FE''BA@?>=6;|9z765u-t+0q.-,m*)('&% |#dcb``uzy[wpYnWUUSonmOeNcLJJHHFFDDBB@\?ZY=}5|3zxxvvttrrppn,m*)ii &%$#"!~}v{^y\wvuWmVkpSnmlOjihgfedc\aD_BAV[ZC&%$""7~|:9y70w.us10/o' n%ljjhhffddb~a|{^\\wvutmVUTRnQlkNiLgfed]FE`_A]V?TY=<;:927x5vuss qqo-,+k#j!hffddbb``^^s\qZXXVVTpSQQfkNihg`IHcbaCYBW\?==RW:UT755J321FK.IH+F)>'B%$9"~~||zzxxvvt 210p(o&mkki'&%e{dyb``^z]xwvYtmrUTSQmlkMcLaJHdcbDZCXA?[><T=R;99775Q4ON00KJIBG*E('%A$?>=~;:927 xwvttr0/.n,m$)('g}f{"c~}`{^yxwvoXsVUSShQOkjLhaJ_HFba`BXAV?=YX:VO8M644220L/JI++FEDCB;@#>!<;:z 2y05v321r/.-,+$)j'hgeeccaa__]][wZXXmVkTiRPPNjMhgfIdcba`_XA@?==;;9977L5J31MLK-C,A*((&BA@"8!6} {{y765u-t+rppn,m*)j'h%$#"!~}v{^y\[YutsUkTiRPPNNLhgfH^G\ECCAA??==;;9UTS5K4IN1LKJC,G*)''%%#?>= }5|3zxxvvttrrppnnl*k('gg|e"c~a__ty\wvuXmVUTinmlNdMbKIedFb[DYB@\?==RWVU7M6K42N1LK.,,G@E('&$@# >=~;|927xw4uss*/.n,%l#(i&%f#d!~w`{^][[YYWWlUjonmOeNcLJJHHFFDDB^A\[==XWVOT7R542N1LKJ-HGF?D'&% :?"=<}:3z7xwuussqqo-,+k#j!h}fddb~}_{t]r[YYWWUqpoQgPeNLLJJHHFFDDBB@@>Z=XWV9N7R54I2GLKJ,B+@)'' %%#?>=}5|3zx654t,s*qoommkkiig%f#"bb}v{^y\wvuWmVkpSnmlOjchKJIGGEaD_^A\?ZYR;V986RQP2H1F/--++)) ''%%##!=~;:zz765.3t1rq(-,+k#j!&g$#"c~}|uz]x[ZXtsrTjShQOOMMKKIIGGEECCAA?[><=6}|9zxx/432r*q(o&mk)j'&g$e"!~}|{zsx[vYXVVTponPfOdMbKIIGG\ECCAA??=YXW9O8MR5PONG0K .I,**?D'BA@9"=~}4{yywwuussqqoommkki'h%$ddyb}`_ty\ZZotsrTjShmPkjiLaJIHFba`BXAV?==;;9977553311 //-IHG)?(=B%@?"=~;49z7x543s+r)pnnl*)(h~g|ec!b``uzyxZpYnWUqpoQgPeNLLJJHHFFD`C^]??ZYR;V986R5PO N1LKD-,+))''%%##!=<;{3z1xvvttrrppn,mkk"'&f${dy~a|{^\\wvunsVUpSQQfkNihKfIdcb[`C^A\[ZZS7~;|{y76v4-t+rp.-,l$k"iggeecca}`{z\\wvunsVqTonPleNchKfedGba`Y^A@?==;W VU7M6K42N1//DIHG)?(=&$$""~~||zzxxv4u21rpp-,+*#ji&geez!b}|_z]xwvunWrUpSQQfkjiKaJ_HFbE`_AA\[ZY XQV9T764P3NML/JIHGF?D'&%##!=<;{3z1x/v-2s0/p-n+*)('&}f#d!b``uz][[pYnsrqSiRgPNNLLJfedF\EZCA]\[ =S!<}:{yy05v321r/.-,+*)"'hg$e"!b``{zyxwvutmVqToRPlkNihgfedcb[DCBW @>><<::8TSR4J3H1//--++))''%A@?!7~5:{87x5.u2s0/o-&m$)j'&ff{"c~a|_]]rwZutsVkpSnQPeNchgfH^G\ECC AA??==;;997S6QPO2MF/J-,A*((&&$$""~~||zzxx/4u210q.-&+l)jig%$d"ybw|_zyx[vunsVUTRnmlNdMbKIIGGEa `B^W@U><<::88664PON0F/DI,GF)D'BA@9"=~}4{yy0wuus10/o'n%ljjh&%$dzcxa__]][wvXtmVkTRRPPNjMhgIIdc baZ_B]@[ZY;Q:OT7RQP3NMLKDI,+FED&<%:#!=<|:3z1xvvttrrppnnlljjh&g$#d!b}|{zyr[vYXVrqpRhQfOMMKKII GGEECCAA??=Y'=~;:9876/4utsq/pnn%*)i'~g|ec!b}|_z]xwvutsrkToRQOkjiKa J_HFFDDBB@\?==RWV8TM6K42NML.D-B+))'C&A@""=<;:9876/4u2s0/o-&m$)j'&%f#"!~}|{zsx[vuXsVqSShmlOdM hKJ_HFFDDBB@\[ZT=RW:UT7R5J32M0KJ-++F?D'&A@">7~5:{87xvv32+rq.omm$)j'&g$e"!xa|_^\xwYunWlUSonm OeNcLJJHHFFDDBB@@>Z=XW99TSRKP3N10.J-HGF)DCB;@#"!6}{{y765u-t+rppn,+*j"i~geeccaa__]][wZutWUUpo nmfONihgI_H]bE`_B]@[ZYXQ:9T755JO200E.CHGF(>'!<}:9876/4utsq/.-m%l#jhhf$#c!xav_]][[YuXsrU pSnmlkjchKJIGGEa`_AW@U><<::8TS5QJ3H1/KJI+A*?(&&$@#>=~||9876543,1rq.-m+$k"'h%$e"c~}|{zyxqvYXs VTTinmlNdMbgJedGbE`_^]\[ZYR;:9775QPO1M0EJ-HG*E>'B%$9"~~||zzxxvvttrrppn,m*)ii~%f#d!b``uz]xwvY nsVqTSQQOkjiKaJ_HFFDDBB@@>><<::886R5PON1LE.-H+))>'Y<;P977553311//--++)EDC%;$9"7~5:{876w432+rqpnn%lj('g%|ezcaa__]y \wvYtWrqpohmPkNMKKIIGGEECCAA??==;W:88MR5PON1LKJIHA*)(=&$$">!<;|zz765432+0qpo&+*)i!h}fd"!~`v_ t][[YutsUkTiRPPNNLLJJHdGbaD_B]\[ZYXQV9T76KP3NM//JIHGFED=&A$#8=~||3876v.u,1r/.-n+*)('&%|edcx} |^zs\qZXXVrqSohQfkNihKf_HGF[`_^@V?TY<::OT7RQ4OH10K.IH+F)>'B%@#!=<}4{z765u-t+r).o,+l)j'~%fedb ~a__ty\wvYtWrkpSRQfkNLLafIdcFaD_^W@?Z=;;PU8SR533NMLEJ-,G*((=B%@?"=~;:927xw43s10q(-,+k#j!hffd db~}_{t]r[YYWWUUSSQQOkNihKfIdcbaZCBA?[><><<:V9TSR5PONMLKD-,+@)>C&$$9>!<;|92yx543s+r)p'n%lj(i &%f#zc~a`u^\\ZZXXVVTTRRPPNNLLafIdcbEZ_B]@?=Y<::OT7RQP3HM0K.-BG*((=B%@?>!<5|{z1xvvt2sqq(-,+k# j!hffddbb``^^\\ZvuWslUjoRmlOMMhg`eHGbECCX]@[Z=X;VUNS6Q4O200EJ-++@E(CBA$?>=6}:{8yww.3t10pp-,+ *#(i&g$eccx}`{zy\wvutmrUpSnQOOdiLJJ_dGba`C^]\[ZSC&A$?"~~5:{876w43210/(- n+l)jhh}$eccx}`{zy\wvutsrqjSnQlOMMbgJedFFa`_^]\[ZSX;V9T755JO2MLK.IHGFEDCB;@#"!6}{{y765u3t+0q .-n+$k(i&geez!b``uz]xwvYnWrUpSQQfkNihJJe^cFaD_B@@UZ=XWV9TMR5P3200..,,**((&&$$""~<;:z2y0w.3t1 0/p-,%l)jiggeecca}|{]s\qZXXVVTponPfOdMKgfeG]F[DBB@@>><<:V9TS55PONGL/J-H+))>C&A@?"=<;49zy6w43 tr*qp-n+*kii~g$e"ca}|_t]x[vuWslUjoRmlNNibgJeHcFDDY^A\[Z=XQV9T76K4INML.D-B+))''%%##!!}}{9z765 v32+rqp'nllj('&f|ezca}|{]s\qZXtsrTjShmPkjMKKfed]bEDCA]@[Z=X;VUTMR5P320LKJ,B+@)''%%##!!}}{{yy wwu321q)p',m*)(i&%$#zc~a|{]yr[pYWsVqpohQlOjMKK`I^cbD`YBW\?ZYX;PU8S653311//--+GFE'=&;$""~~|:9 y70w.ussqqo-n+*)j!&g$e"!~`v{zyx[voXWrUpoRmPkdMhKJHdGEEZ_^]?U>S<:VUT6L5J311//--++))''%A$?>~~; :38y6wvt2s0/.o,+$)j'hgeeccaa_{zy[qZoXmVTTRRPPeNLLJJHdGba`C^]\U>=X;VU86L5P32GLKJ,B+@)''%%##!= ~||3876v.u,sqqo-,+k#j!&g$#ccx}`{^y\ZZotWrqpShmPkNMKK`edFb[DYB@@>><<::88664PON0F/D-BG*EDC&A:# "!}}{{yyw543s+r)p'n%*k('h%f#"y~a|_^\\ZZXXmrqpRhQfOMiLJJ_dcEaZCXA?[ZY;Q:O8664PO1MF/DI,GFE(CBA :#"=~||38y65v3,srq(-n+*k(i~%f#dcaav_t][wvuWmVkTRRPPNNLLJJHHFFD`CAAV[>YXW:UN7R542N1//D-BG*((= B%@?>!<;49z7x5vtt+r).-,l$k"'h%$#d!~w|_z]\ZZoXVrqSohQfOMMKgfeG]F[DBB@@>ZYX:P9N75QPO1G0E.,,**( (&B%@?!!<;:3z7xwu3t10/p-,+$kj'h%$ecc~}|{ty\wZutVrkTinQlkMMhgfed]FaD_B@@UZ=XWV9TSRQPI21LKJ,B+ @)''%%##!!}}{{yyw5v32sqq.-,+*)"'hg$#"bxav{^yx[vYtsrqpohmPONchKII^cFa`C^W@?Z=;;PU8SR5PI2M0/D- ++)EDC%;$9"~~||z876v.u,sqqoommk)j'&ff{d!ba_{^yxwZoXWVkTinmlNdMbgJedGbE`Y^A@?=YXW9O8M6442NM/K D-B+))''%A$?>!<}:38y6wv-21q/(o&mk)(h&}f{dbb``^^\\ZZXXVVTpSnmOOjihafIdGFD`C^]\?ZYXQV9T7R533HM LK-C,AF)DCB%@?>=6}|{2ywwuuss*q(om+*)i!h}fddbb``^^\\ZvYtsVTTonmlkdiLKJHdGbaD_B]\[ZYRW:U87L5J3 H1/KJI+A*?D'BA@9"!<}{{2765u-t+0q.-n+l#jih}f{dy~a|{^y\qZuXWlUjonmOeNcLJfIdcbE`Y^A\?><<::88664 PON0F/D-++))'CB$@9"7~||zzx6w432s0).onmk)(h&}f{db~}|^t]r[YYWWUUSSQQOOMMKgJHH]bE`_B]@[ZS!<;:38y6w432r*/.-,m*)('~gf#d!~a|_zyxwpYXWUqpoQgPeNLLJJHHFFDDBB@@UZ=XW:U 8SRQPOHM0/.,HG)E>'<%#?"~~5:98x0w.ussq/p-,m*k('&%${"c~a`u^\\qZotWrqSSnmlkjibKfIdcbDZCX]@[ZYT= RW:UT7R5JO21L/JI,G*E>'&A$?>!<}:3z7xwu321q)p'nlljjhhffddbb``^zyxZpYnsVqpRRmlejMhKfIGG\aD_^]@[ ZSX;:977553311//--++)E(&&;@?>~6}49z76w4u210)po,mkk"'h%$ecc~}|{ty\[vuWslUjoRmlOjMhgfe^cFaDCXA ?[><YXWVOT7R542200..,HGF(>'<%:#8!}}{987w/v-2sqq(-n+*)j'&%$#zcb}`{z]x[vutsrqjoRQlOjiLgJe dcba`Y^A@?=YXW9O8M6K4I20L/--BGFE'=&;@#>=~;|9876543,s0qpnnlljjhhffddbb`|_]]rwZutVVqponmlkjchK fIdcbDZCX]@[ZY'<%:#!!}}{{2ywwuussq/pnn%*k('&}f#d!b``uz]xwvoXsVUjonPlkNc LafedF\EZCAA??==;;997SRQ3I2G0..,H+FED'<%$#!!};:9y1x/vttrrppnnlljjh&g$#dbb}v{^]\ZvYtsVqTohmPO NchgIe^G\EC_^]?U>SX;VU8S6QPI210..,,*FED&<%:#!!}}{{yywwu3t10qoo,+*#(ihge#d!~a|_zyxqvYtWVTTinm OkdMbKIedFbaDY^]\>T=R;997SR4PI2G0..,HG)E>'~~;:981x5vus1r/.-n+*)(!hg$e"!b``{zyxwpuXsVqTR nmPkjihg`eHcFa`B^W@UZ=XW99TSRQPOH1L/J-++@E(CBA$?>=<;:3zy654t,s*/p-,m*#jih}$#"b~av{^yx[voXWVT TRRPPNNLhgfH^G\ECCA]\[=S!~;|98y6w4-ts0q.-n+l)"i&gfd"!~`v_t]r[pYWs VqpoRmlejMLKIIGGEECCAA??==;W:88MRQP2H1FK.IH+F)DCB;$?"!6;|zz16w43ss0/.-&+l)j'hff{"c~}|_zyxwpu XWVTpSQQfOdMbgfeG]F[DBB@@>><<::88664P311FKJI+A*?D'BA$?"=<;:92yx54t2+r).o,+l)"i&gfd"!~`|_ty\w vuXmrUTShQOOMMKKIIGGEECCAA?[ZY;Q:OT7RQ4O2MF/.-B+@EDC%;$9>!<;|9z76/4uts*qoommkki'&f${dyb`|{]y r[pYWsVqpSnQlkdiLKJ_dcbDZCXA??==;;99775QPO1G0E.,,*F)''=<;49zyxvvttrrp.-,l$k"iggeeccaa __]][wvuWmVkpSnmPkNihgfe^GbEDYBW\[ZZ=XW:U8SRQPOHM0/.,,**((&&$@?>~6}4{yyw5vtt+0/.n&m $kiig%$#cybw|_]]rwZutWrUponmlkdMhgJeHcEEZ_^AV?Z=XW9UN7LQ422GL/JIHA*E('%%##!!}}{987w/v-trrppn nlljjh&g$#ccx}`{^yxZvoXmrUponQfkNMLaJHHFba`BXAV?==;WVU7M6K4220L/--BGFE'=&;@#>=~;|92y6wvttrrp .-,l*k"'h%$#d!~w|_^yxZvoXmrUSShmPkjMhKfed]FaD_^]?U>S<::8866442200..,H+FE''BA@?8=~;|{y7x543t1 0/.',m*kjh&geez!b}|{t]\wZXXmrqpRhQfOdMKgfeG]F[DBB@\[Z=<;:3 z7x5vtt+0q.-,m*)('&%|e"!b}`{]]rwvYnWVUSSQQOOMihJf_H]bE`_B]V?Z='%%##!= <|:3z1xvvttr0q.-mm*)(!h%f#"!aw`uz]xwvYtsrkTSRPPNNLhgfH^G\ECCAA??==;;997S6QP311LKJIBG*)DCB$:# 8=~;:{8y6543,1rqp'nl*)i'~g|ec!~}_u^s\ZZXXVVTTRRPPNNLhKfeHcFa`_^]V?>YYXW9O8M6442200.JIH*@) >'%A$?>!}}:98705vutr0q.-n+l)('&}$e"cbw`^zyxZpYnWUUSonmOeNcLJJHdcEaZCXA??==;W:UT66QPONMF/J-HG F(>'=~;:9870w4ut+0/o-&m$kiiggeeccaa__]yxwYoXmrUponQlkjihg`eHcFECCX]@>>SX;VUT7RQPONMFK.I ,+@E(&&;@?>~6}49zxx/4u210)p-n+ljj!&g$#"yb}`_t][wvuWmVkTRRPPNNLLJJHHFFDDB^A\[Z=R;:97SRQ3I2G0. .,,**((&&;$">=};4{2yw5v32s0q.',m*k('g%|ezcaa__]][[YYWWUUSSQmPNNchKfeGGbaZC^A\[Z'%%:?>=}5|3zx654t,s*qo-n+*k(i&%${"cb}|{]s\qZXXmrqSohQfkNihKfIdcb[`CBAV?=YXW9O8MR5PO 200KJIHA*)(=B%@?"=~;:981xwvt210p(o&+l)(i&}f#dcaa__]][[pYWWUqpRngPeNLLJfedF\EZCAA??==R;9U8SRQ 4IN10/--++)E(CB%##>7~}|3876v.u,sqqoommkkiig%$#cybw|_zy\wZunWVUSoRPPejiKg`I^GEECCAA??=YXW9O8M 64P3NM0..IHAF)('%A$?>!<}:927x5vussqqoom+*j(!h}fddb~}|^t]r[pYnWUqTonPPkjibKfIdcbDZCX]@[ZY7<}|{yywwu321q)p'nlljjhhf$#"bxav_]][wZXXmrqpRhQfOMMKgJedGbE`_^]\U>=X; VU86L5P32GL/JIHA*E('<%:#8=~;:9z16wvus10p.-n%*)i'~g|ecca}`^^sxwYunWlUSoRmlOjMhaJIHFba`BXAV?== ;WV8TM6K4220LKJ,B+@)''%%##!!};|98yww43,1rq.omm$)j'&g$e"!x}`{^yxwYoXmVTTRRPlkjLbK`IGcbaCYBW@> ><<::88664P3NM//JIHA*E(C&$$9>!<;:{876/vutrrppn,m*)jhh%$#"y~a`_tyxwYoXmVTTRnmlNdMbKIIGGEECCA] @[Z=X;VUTSLQ4O21//-IHG)?(=&$@?>~6}4{yywwuussqqo-n+*jj'&%$#zc~a`^z]xwvYtsrqpiRmPkjiKaJ_HFF[DY B@\[=YR;PU8SRQJ321/K.,,AFED&<%:#!!}}{{yywwuussq/p-,mkk"'hgfd"c~}`{^sx[ZYWsrqSiRgPNNLLJJHHFFD `_^@V?T=;;9U8SR5P3NMLKJC,+*((&&$$""~~5:9y70w.3t10q.o,+*)('~%fe"caav_ty\ZZotWrqToRmlkjihafIdG F[DBB@@U>!<;:{8765432+rqpnnl*)(h~g|eccaa__]][[YutsUkTinQlkNibKJe HFF[`C^]@[T=X;:88M64PON0F/D-++))''%%##!!};|98xx/4u2s0qoo&+l)('h}$edcx}|^zy\qvYtsVqTohQlOjMKK `eHcbDD_^W\?Z=X;99NS6QPO2MLEJ-,G*((=BA#?8!6;|98y6w432+r/p-nll#(i&%ee"!~}v{^y\wZXXmrUponQlkji bgJIdGbaD_B]\[ZYR;VU8S6Q332MLKJIB+F)D'%%:?"=<||987654-2s0q.omm$)j'&%f#"!~}|uz]x[vYWWlqpoQgPe NLLJJHHFFDDBB@@>>=};4{2ywwuussqqoommk)('g}f{"c~}`{^s\wZYWsrTpiRg lOjiKKf_dGbE`CAAV[>YXW:UNS65P311FKJ,HA*?D'BA$?"=<5|9z7xvv-2s0/oo,+*#(i&g$eccx}`{zy\wvunsVUpS QQfkjiKaJ_dGbaD_B]\[ZSY<<<::8866442200.JIH*@)>C&A@?"=<;:3z7xwuussqqoommkk"iggeec!b``uzy xZpYnsVqpoRmlkjibgJIH]FDDY^]\>T=R;9977553311//--++)EDC%;$9>!<;|9z765432+rq.o,+l)j'&%$#"!x}`_ ^s\ZZXXVVkTRRPlkMibK`IGGEECCAA??=Y<::OT7RQ4O2MLKJIHGF?(CB%@#>~~5:9z1x5vussqqoommk)('g}f{dbb` `^^\\ZvYWWlqTonmfONiLgfIdG\aDC^A\[>Y7<}|{yywwuussqqoom+ljj!h}$e "!b}`{zyxwpYtWrUSShmPNNchKfedGba`_^]V[>=<:VUT6L5J311//-IHG)?(=&$$""~~||z8yww.321q)p',m*)j'h% $#"!~}v_z]x[YYnsVTTinQlkjMhgfedcbaZ_BA@U>S'%%:?>=}5|3zxxv4uss*/.n,%l#jh hffddbb``^^\x[YYnsVqpoRgPONLLJfedF\EZCAA?[ZC&%@#!!6;|98y6w4-2sr/.-m%l# jhhffddbb``^^\\ZZXXmrUSShmlkMcLafIdcFaD_^W@?><<::88664422G0..,,*F)''!}}49z76w4-ts0q oo&+l)(i&g|#d!ba__]][[YYWWUUSSQQOkNLLafedF\EZ_B]\[>YR;:U8SR5P3NMFK.I,+@)''%%:?>=}5|3zxxvvttr rppnnllj('&f|ez!b}|{^yxwpYtWVkTinQlkjcLKfIGG\aDBBW\?ZY'%%##!!}}{{yywwu3 21q)p',m*)(i&}fe"caav{^\\qvYtsVqTonglOjMLJJHHFFDDB^]?[T=R;997755331MLK-C,A*(D'BA@#>=<5|{8yww .3trr).o,+l)j'&%${"cba__]yxwYoXmVTponPfOdMKKIIGGEECCA]@[Z=;;VUTSRQJO210.J-HG*E(CBA@?>7<}:{zx xv43s1*q(om+*)i!h}fddbb``^^\\ZZXXVrUponQlkjihgf_HGFD`_A]V?T=;;9UTS5K4I200..,,**((&&$@#>=~;4{ z7xvv-2s0/p-&m*kjhhffddbb``^^s\ZZXXVrUSShmlkMcLafIdcbEZ_BA\[Z><<:V9TS6Q4ONMF/J-H+))>C&$$9>! <;:{8765.3tsr)pnn%*)(h~g|#dbbw|_zy\wZutsrqjSnQlOMMbgJHH]bE`_^A\[ZYXWPU87644220LKJ,B+@)''<%## !!}}{{yy05v32s0)p-nmkki'&f${dyb`|{]yx[putVrkTiRPlkMibK`IGGEECCAA??=Y=XWV8N7L53ONM/K.CHGF( >'!<}:98765.u2s0qoo&+ljj!&g$#"c~}|{zyxqvYtWrqpRhQfkNihg`IdGF[DBBW\[=YR;P977553311//--+G FE'=&;@#>=<}4{8yxvvttrrppn,+*j"i~ge#"!aw`u^s\qZXtWrqpSnglONMKKIIGGEECCAA??==;WV8TM6KP311FK.I H+F)DC<%$?"=<}:{876/4ut10/o'n%ljjhhffddbb``^^sx[vuXsVqpongPkNiLJJ_dGEEZ_B]\[>YXWVUNS65P311FK .,,AF)DC&A$?>=<;:3z7x5vtt+0qoo&+l)('h%$#"!~}v{^y\[YYnWUUSonPleNcLJJHdGba`YB]@[ZY;Q:O866K4IN1 LKJC,+F)''<YX; V9TSL5P3N1//DI,**?D'BA@#>=<5:{8yxvv-trrp.-m+$k"igge#d!~``{zyxwpuXsVqpoQgPejMhgfIdcba`Y^A@[ZY ;Q:O86R533HML.JC,A*((&&$$""~~||zzx654t,s*/p-,m*k('&%$#zc~a`^^\\ZvuWslUjSQQOOMMKKIIGGEaDBBW\? ZYX;VUTSRQPIN10/D-++))>C&A@#>!<;:98765.u2srp.-,l$k"iggeeccaa__]][[YutsUkTinQlkjcLgJI^cbD`YBW @>Z=XWV9NS6Q4311F/--+GF(D=&;$">=<|4{2ywwuussqqo-n+*)j'~g$e"!a}v_t][[YutsUkTiRPPNNLLJJHH]FDDB B@\?ZYX;VUNS6Q4311FKJI+A*?(&&$$""~~||zzxxvvt2sqq(-n+*)j'&%|ed!b}|_z]xwvunsVqTSQQOOMMKgJHH]ba C_^AV[Z7~}:{87x5v3210/.',ml)('g}f{dbb``^^\\ZZXXVVTponPfOdiLgfIdG ba`_^]\U>Y7<}:9z7x5uu,10q(onm$ki'&%e{dyb``^^\\ZvutVlUjSQQOOMMKKIe HFF[`C^]@[T=X;VUT6L5J31M0..C,AFED&<%:?"~~5:{876w.utsqq(ommkkii~%$#cybw`^^\\ZZXXVVTpSnmPkNibg JeHGEECCAA?[Z'=~;:3zy6wuu,1rpp',m*)j'h%$#z!b}`{zy[qZoXVrqpRhQfOMM KKIIGGEECCAA??=Y><<::O866442N1//DIHG)?(=B%@?>!6;|9zyww.3trr).-,l$k"ig%$#cybw`^^\\ZZXXVVTTR RPlOMMbgJedcFaZCBAV?TY!<;:{87654-ts0qoo&+ljj!&g$#d!b}|{zyxq vYtWVkTRRPPNNcLafedF\EZCAA??==;;997755331M0KJIB+*EDC%;$9"~<}{{2y0543s+r).omm$)j'&g$ezc~a`^^\ \ZZXtsrTjShQOOMMKKIIGGEaD_^]@[TY<;:8866442NM/KD-B+))''%%##!!};:z81x/4u21r/p-,%l)j'hff{"caav{ ^yxwZutslqToRQOOdihgI_H]FDDBB@@>><<::88664P311FK.IHG*EDCB;$#>!<;|9z76543,1rq.o,+lj"i&g$#"b~a v{^yxwpYXWUqpoQgPeNLLJJHHFFDDBB@@>>~<5|3zxxvvttrrp.-,l$k"'h%$e"c ~w|_^][[putsUkTiRPlkjLbK`IGcbD`YBW@>><<::8866442N1//DI,GF)D'BA:#"!}}{{yy0wu32r0)p'nlljjhhffd "!~`v_ty\wvYtWrqpinQPkjiKaJ_HFbECCXAV[ZY;Q:OT755JO2ML/J-HGFE>'&%##!!}}{{yyww.ussqqo-nll#('&f |ez!b}|_z]xwvutmrUTSQQOkjLhaJ_HFbaC_^AV[Z!<}:98765.ut10p.'n%*kii ~g|#d!~a|_zyxwvutmrUpoRmPkMMbgfI^GFEC_^]?U>S<::8866442200..,H+FE(C<%@#"7~5:98x0w.us10/o'n%lj jh&%e#zcxa__]][[YYWWUqpoQgPejMhgfI^GFEC_B@@UZ=XW:U8SLQ4O21F/--BG*((=BA@"8!6;|987x54-ts0qoo&+ ljj!&g$#d!b}|{ty\wZYWWUUSSQQOOMMKKIIGcbD`YBW\?==RW:UTS6QPONG0/J-HG*E(CBA@?8=~;|987w5v-2s0/.' nmljj!&%$dzcxa_{zy[qZoXVrqSohQfOMMKKIIGGEECCA]\[=S~6}4{yyw543s+r) pnnlljjhhffd"c~}|_zsx[ZuXVVkpSQQfOdMbgJedGbE`_XA\?Z=;;PU866KP3NML/JIHAF)D'&$$">=<|4{2ywwu321 q)p'nlljjhhff{"c~}|_zyxwpYtWVTTRRPPNNLLJJ_dcbDZCXA??==;;99775Q4ONM0KJIHG@E('BA@"8!6}{987w/v- trrppnnlljjhhffddb~a|{^y\wvutsrkToRQOkNLLaJ_H]ba`BXAV?==;;9977553311//-I,GFE>'B%$""~~||z876v .u,sqqoommkkiig%f#"!bw|_z]\ZZoXVrqpRhQfOMMKKIIGGEECCAA?[><=<| 4{2yw543s+r)pnnlljjhhf$e"!~w`_z][[puXVVkTinQlkNLLafIHcbD`YBW\?ZY7 ~;|{yywwuussqq(-,+k#j!hffddbb``^^\x[vutWrqjoRmPOMihgI_H]FDDB^]\>T=R;9977553311//--BG*EDC&A@? 8!~}4{2ywwuus10p.'n%ljjhhffddbb``^zyxZpYnsVqpSnQlkjibgJIdcbDZCXA?[><=6}|{yywwuussqqoo&mkkiig%fddy~}|^t]rwZutWrUponmlkdiLgJedFb[DYB@\[Z!}}49z76w4u21*/ponlljjh&geez!~}_u^s\ZvutVlUjSQQOOMMKKIeHcbECC^]\[TY<;:8T7RQ4O2MLK JCH+FE(C&A##8=<}4{8y65u3,10/.'nml#jhhff{"!~`v_t][[YutsUkTiRPPNNLLJJHHFFD`C^]@[>S<;V977LQ4ON1 //JCHGF)D&&;@#>=~;|92765vussq/.-m%l#jhhf$#"bxav_]y\ZZoXW2qjiR.-e=)KgJ%^]F!~C}W@[ZY;WPbTSqK#m 2k}ih,gTF)bPO%:"K7I54zW7gvv-sr*N.'JI[6FE&fUeAR>P+u:9[[pYW3lkS/.QyON*bKJ%dcF!m_^W@>-<;W:sN6%4 ]n[MjEWz,GFd'&s`#L]~6;|WW7UBeuc1qNpLJIk6FEgD1{zyQ=|*:([775WVrUSoAQ,Od*KJJ%HFF!!}}|?.Z=;QPtTq %4o31kj/WIyfSRbC<`MLo\<|k{2V0fv-Qb=q.o&JH#G4~V$Bdy>P_;](x8vH5"3UpSh.fe=ib(J%7cF!`2B{i.Z+{]]88Y6XslT0B.zl,=<;(J%d]F!`}BW@yyY+d tO8Mq5PINkjih-BTecQCa`qp>J~5XzW165eR,bO/L^m8[6j'D%UBdc>}`N^9x&vonF2qCSRmf>M*;J&8^]\n~}}@?[xY +:Pt8S6o]3l~Y..,,*@RQ malbolge-0.2/examples/hello-world.mb0000644000175000017500000000017011014641403017407 0ustar cyberixcyberix(=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@b=`{^Lx8%$Xmrkpohm-kNi;gsedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543s+O=<;:9876543s+O