################################################################################
##
## LSU EE 4720 Spring 2021 Homework 2 -- SOLUTION - Faster
##
##

 # Assignment https://www.ece.lsu.edu/ee4720/2021/hw02.pdf
 # Solution Writeup https://www.ece.lsu.edu/ee4720/2021/hw02_sol.pdf

################################################################################
## Problem 1
#

        .text
hdecode:
        ## Register Usage
        #
        # CALL VALUES
        #  $a0: Unused
        #  $a1: Bit position to start at.
        #  $a2: Address to write decoded data.
        #
        # RETURN
        #  $a1: Bit position following encoded piece.
        #  $a2: Address following decoded piece.
        #  $v0: Address of leaf of huff tree.
        #  $v1: Address of dict entry or value of literal character.
        #
        # Note:
        #  Can modify registers $t0-$t9, $a0-$a3, $v0, $v1.
        #  DO NOT modify other registers.
        #
        # [✔] The testbench should show 0 errors.
        # [✔] Code should be reasonably efficient.
        # [✔] The code should be clearly written.
        # [✔] Comments should be written for an experienced programmer.
        # [✔] Do not use pseudoinstructions except for nop and la.
        
        ## SOLUTION - Faster

        # Load the word of compressed text that has the next bit we need.
        #
        srl $t4, $a1, 5      # Determine word index of next word to read.
        sll $t6, $t4, 2      # Determine byte offset of next word to read.
        la $t5, huff_compressed_text_start        
        add $t6, $t6, $t5    # Compute address of next word to read.
        lw $t8, 0($t6)       # Read next word of compressed text.

        # Shift the next bit into the most-significant position of $t8.
        #
        andi $t7, $a1, 0x1f  # Determine bit number of next bit to examine.
        sllv $t8, $t8, $t7   # Put needed bit into most-significant position.

        # It's possible that we'll examine all the bits in t8, at
        # which time the next word needs to be loaded. To check
        # whether this has occurred set $t9 to the bit number of the
        # first bit in the next word.
        #
        sll $t9, $t4, 5      # Compute bit number at which a new word ..
        addi $t9, $t9, 0x20  # .. will need to be loaded.

        la $t3, huff_tree
        addi $v0, $t3, -2   # Compensate for crossing left-child code below.


TREE_LOOP_L:
        # Descend to Left Child. (Except in first iteration.)
        #
        addi $v0, $v0, 2

TREE_LOOP:
        # Live Registers at This Point in Code
        #
        # $t3:  Address of root of huff tree.
        # $v0:  Address of current node.
        #
        # $a1:  Bit number of next bit (of compressed text) to examine.
        # $t8:  Compressed text. The next bit to examine is the MSB.
        # $t9:  Bit number at which the next word must be loaded into t8.
        # $t6:  Address of the current word of compressed text.
        #
        # $a2:  Address at which to write next decoded character.

        # Load value of current node into $v1
        #
        lhu $v1, 0($v0)

        # First check for a non-leaf node, since that's most common.
        #
        addi $t4, $v1, -128    # Compute index of right child.
        sltiu $t5, $t4, 0x6f80 # Note: Unsigned comparison.
        bne $t5, $0, NOT_LEAF
        sll $t7, $t4, 1        # Compute byte offset of right child.

        # The node is a leaf. Check if it's a character or dictionary
        # entry and branch to the respective code.
        #
        bltz $t4, CHAR_LEAF
        sb $v1, 0($a2)       # Write the character just in case.

        j DICT_LEAF
        addi $t4, $v1, -0x7000

NOT_LEAF:
        # Current node is an internal (non-leaf) node, so:
        #  - Get next bit of compressed text.
        #  - Based on the value of that bit descend to left or right child.

        # Check whether we already have the bit we need.
        #
        bne $a1, $t9, EXAMINE_NEXT_BIT
        addi $a1, $a1, 1

        # Load next word of compressed text.
        #
        addi $t6, $t6, 4       # Update address ..
        lw $t8, 0($t6)         # No more bits, load a new word.
        addi $t9, $t9, 0x20    # .. and overflow value.

EXAMINE_NEXT_BIT:
        # Note: Next bit is in the MSB of t8. The bgez $t8 is taken if
        # the MSB of $t8 is zero.
        #
        bgez $t8, TREE_LOOP_L
        sll $t8, $t8, 1        # Shift left so that next bit is in MSB pos.

RCHILD:
        # Descend to Right Child.
        #
        # Register $t7 already contains the byte offset. Just add it
        # to the root to get the address of the right child.
        #
        j TREE_LOOP
        add $v0, $t3, $t7


CHAR_LEAF:
        # Node is a leaf. Its value is a character to append.
        #
        # Note: char already written by sb above.
        #
        jr $ra               # .. and we're done ..
        addi $a2, $a2, 1     # .. after we increment the pointer.

DICT_LEAF:
        # Node is a leaf. Its value is a byte offset into dictionary.
        #
        la $t0, huff_dictionary
        add $v1, $t4, $t0

        # Copy string from dictionary to output.

        lb $t5, 0($v1)
        addi $t4, $v1, 1
CPY_LOOP:
        sb $t5, 0($a2)
        addi $a2, $a2, 1
        lb $t5, 0($t4)
        bne $t5, $0, CPY_LOOP
        addi $t4, $t4, 1

        jr $ra
        nop




################################################################################
## Testbench Routine
#
# 

        .data
msg_full_text:
        .asciiz "\nNumber correct %/s6/d,  number wrong %/s5/d.\nDecoded Text:\n%/s0/s\n";

msg_piece_start:
        .asciiz "** Decoding of Bit Position %/a1/d **\n"

msg_bit_pos_ok:
        .asciiz "End bit pos  ($a1 contents) correct: %/a1/d.\n"
msg_bit_pos_bad:
        .asciiz "End bit pos  ($a1 contents) wrong: %/a1/d correct value is %/t0/d.\n"
msg_leaf_addr_ok:
        .asciiz "Leaf address ($v0 contents) correct: %/t4/#x.\n"
msg_leaf_addr_bad:
        .asciiz "Leaf address ($v0 contents) wrong: %/t4/#x correct value is %/t1/#x.\n"

msg_dict_addr_ok:
        .asciiz "Dict address ($v1 contents) correct: %/v1/#x  Entry: \"%/v1/s\".\n"
msg_dict_addr_bad:
        .asciiz "Dict address ($v1 contents) wrong: %/v1/#x correct value is %/t3/#x.\n"

msg_char_val_ok:
        .asciiz "Char value   ($v1 contents) correct: \"%/v1/c\"\n"
msg_char_val_bad:
        .asciiz "Char value   ($v1 contents) wrong: %/v1/d (decimal) correct value is %/t3/d (decimal) or \"%/t3/c\".\n"

msg_char_copied_wrong:
        .asciiz "Char value correct, \"%/v1/c\", but not copied, found \"%/$t4/\".\n"

msg_copied_bad:
        .asciiz "Text copied incorrectly starting at character %/t6/d: \"%/t7/s\"\n"
msg_early_exit:
        .asciiz "** Error limit exceeded, exiting early.\n";
msg_timing:
        .ascii "\nTotal insn %/s2/d, encoded bits %/t0/d, uncompressed bytes %/t1/d.\n"
        .asciiz "Efficiency:  %/f0/4.1f insn/bit  %/f2/4.1f insn/byte.\n"  

tb_timing_data:
        .word 0  # Instruction count.
        .word 0  # Sum of bits examined.
        .word 0  # Sum of characters in decoded text.

        .text
        .globl __start
__start:

        la $s3, huff_debug_samples

        addi $t0, $0, 0

        la $a2, uncompressed

        addi $s2, $0, 0  # Total number of instructions.
        addi $s6, $0, 0  # Number correct
        addi $s7, $0, 0  # Number checked

TLOOP:
        addi $s7, $s7, 1
        lw $a1, 0($s3)

        la $a0, msg_piece_start
        addi $v0, $0, 11
        syscall
        nop

        addi $s4, $a2, 0
        jal hdecode
        mfc0 $s1, $9       # Number of insns before hdecode.
        mfc0 $t1, $9       # Number of insns after hdecode.
        addi $t1, $t1, -1
        sub $s1, $t1, $s1  # Number of insns executed by hdecode.
        add $s2, $s2, $s1
        sb $0, 0($a2)

        addi $s0, $a0, 0
        addi $t4, $v0, 0

        lw $t0, 4($s3)   # Bit end
        lw $t1, 8($s3)   # Byte offset into huff tree.
        lw $t3, 12($s3)  # Byte offset into dictionary.

        # Compute and store total compressed bits and decompressed bytes.
        #
        lw $t2, 0($s3)
        sub $t2, $t0, $t2
        la $a0, tb_timing_data
        lw $t5, 4($a0)     # Number of compressed bits.
        add $t5, $t5, $t2
        sw $t5, 4($a0)
        lw $t5, 8($a0)     # Total number of decompressed bytes.
        lw $t2, 16($s3)    # Number of bytes in this piece.
        add $t5, $t5, $t2
        sw $t5, 8($a0)

        # Check ending compressed-text bit position.
        #
        la $a0, msg_bit_pos_ok
        beq $t0, $a1, TBIT_SHOW
        nop
        la $a0, msg_bit_pos_bad
TBIT_SHOW:
        addi $v0, $0, 11
        syscall
        nop

        # Check address of huff tree leaf.
        #
        la $t2, huff_tree
        add $t1, $t1, $t2

        la $a0, msg_leaf_addr_ok
        beq $t1, $t4, TLEAF_SHOW
        nop
        la $a0, msg_leaf_addr_bad

TLEAF_SHOW:
        syscall
        nop

        slti $t4, $v1, 128
        bne $t4, $0, TCHAR_CHECK

        # Check address of dictionary entry.
        #
        la $t2, huff_dictionary
        add $t3, $t3, $t2
        la $a0, msg_dict_addr_ok
        beq $v1, $t3, TDICT_SHOW
        nop
        la $a0, msg_dict_addr_bad

TDICT_SHOW:
        syscall
        nop

        bne $v1, $t3, TCHECK_NEXT
        nop

        addi $t6, $t3, 0
        addi $t7, $s4, 0
TCHECK_WORD_LOOP:
        lbu $t4, 0($s4)
        lbu $t5, 0($t3)
        bne $t4, $t5, TCHECK_WORD_WRONG
        addi $s4, $s4, 1
        bne $t5, $0, TCHECK_WORD_LOOP
        addi $t3, $t3, 1

        # Word copied correctly.
        addi $s6, $s6, 1

        j TCHECK_NEXT
        nop

TCHECK_WORD_WRONG:

        la $a0, msg_copied_bad
        sub $t6, $t3, $t6
        syscall
        nop

        j TCHECK_NEXT
        nop

        # Check value of decoded character.
        #
TCHAR_CHECK:
        beq $v1, $t3, TCHAR_SHOW
        nop
        la $a0, msg_char_val_bad
        syscall
        nop
        j TCHECK_NEXT
        nop

TCHAR_SHOW:
        # Check whether character copied correctly.
        lbu $t4, 0($s4)
        bne $t4, $v1, TCHAR_COPIED_WRONG
        nop

        # Character correct.
        addi $s6, $s6, 1

        la $a0, msg_char_val_ok
        syscall
        nop

        j TCHECK_NEXT
        nop

TCHAR_COPIED_WRONG:
        la $a0, msg_char_copied_wrong
        syscall
        nop

TCHECK_NEXT:
        # Exit loop if error threshold exceeded.
        #
        sub $s5, $s7, $s6
        slti $t1, $s5, 3
        bne $t1, $0, TCHECK_CONTINUE
        nop

        la $a0, msg_early_exit
        syscall
        nop

        j TLOOP_EXIT
        nop
        
TCHECK_CONTINUE:
        # Advance to next piece.
        #
        addi $s3, $s3, 20
        la $t0, huff_compressed_text_start
        slt $t1, $s3, $t0
        bne $t1, $0  TLOOP
        nop
        ##
        ##  End of Loop

TLOOP_EXIT:
        # Compute number of incorrect pieces.
        #
        sub $s5, $s7, $s6

        # Show execution rate.
        #
        la $a0, msg_timing
        la $t4, tb_timing_data
        lw $t0, 4($t4)
        lw $t1, 8($t4)
        mtc1 $s2, $f20
        cvt.d.w $f22, $f20
        mtc1 $t0, $f10
        cvt.d.w $f12, $f10
        mtc1 $t1, $f14
        cvt.d.w $f16, $f14
        div.d $f0, $f22, $f12
        div.d $f2, $f22, $f16
        addi $v0, $0, 11
        syscall
        nop

        # Show decoded text.
        #
        la $a0, msg_full_text
        la $s0, uncompressed
        addi $v0, $0, 11
        syscall
        nop

        addi $v0, $0, 10
        syscall
        nop


        .data


.align 4
uncompressed:
.space 4000
uncompressed_end:


#  Data from file histo-bare.s

#  Code size 14253 + 1679 + 5176 = 21108  orig 40784 b, ratio 0.518  max 11
#  Words 188  Codes 188  Resorts 10

# Compression Debug Samples
#
# Encoding: .word BIT_START, BIT_END, TREE_POS, DICT_POS, FRAG_LENGTH
#
huff_debug_samples:
#   0: 0  11011 -> "\n"
	.word 0, 5, 0x2ea, 0xa, 1;
#   0: 5  001011 -> "        ."
	.word 5, 11, 0x2a, 0x16, 9;
#   0:11  0110011000 -> "text"
	.word 11, 21, 0x14c, 0x1af, 4;
#   0:21  11011 -> "\n"
	.word 21, 26, 0x2ea, 0xa, 1;
#   0:26  011010010 -> "histo"
	.word 26, 35, 0x166, 0xc5, 5;
#   1: 3  1000100 -> ":\n"
	.word 35, 42, 0x1de, 0x28, 2;
#   1:10  11011 -> "\n"
	.word 42, 47, 0x2ea, 0xa, 1;
#   1:15  10101 -> "        "
	.word 47, 52, 0x21c, 0, 8;
#   1:20  1101000 -> "addi"
	.word 52, 59, 0x2b4, 0x23, 4;
#   1:27  01111 -> " $"
	.word 59, 64, 0x1c2, 0x9, 2;
#   2: 0  10011 -> "s"
	.word 64, 69, 0x1f0, 0x73, 1;
#   2: 5  000011 -> "1"
	.word 69, 75, 0x18, 0x31, 1;
#   2:11  00100 -> ", $"
	.word 75, 80, 0x24, 0xf, 3;
#   2:16  00010 -> "r"
	.word 80, 85, 0x1c, 0x72, 1;
#   2:21  01000 -> "a"
	.word 85, 90, 0x48, 0x61, 1;
#   2:26  00111 -> ", "
	.word 90, 95, 0x40, 0xc, 2;
#   2:31  110000 -> "0"
	.word 95, 101, 0x24c, 0x30, 1;
#   3: 5  101001000 -> "    # "
	.word 101, 110, 0x204, 0x9d, 6;
#   3:14  0101100111 -> "Make"
	.word 110, 120, 0x7c, 0x218, 4;
#   3:24  111 -> " "
	.word 120, 123, 0x2ec, 0x20, 1;
#   3:27  01000 -> "a"
	.word 123, 128, 0x48, 0x61, 1;
#   4: 0  111 -> " "
	.word 128, 131, 0x2ec, 0x20, 1;
#   4: 3  0101110110 -> "copy"
	.word 131, 141, 0xb8, 0x1ca, 4;
#   4:13  111 -> " "
	.word 141, 144, 0x2ec, 0x20, 1;
#   4:16  0011001 -> "of"
	.word 144, 151, 0x34, 0x37, 2;
#   4:23  111 -> " "
	.word 151, 154, 0x2ec, 0x20, 1;
#   4:26  10111010 -> "the"
	.word 154, 162, 0x23e, 0x43, 3;
#   5: 2  111 -> " "
	.word 162, 165, 0x2ec, 0x20, 1;
#   5: 5  0101110000 -> "return"
	.word 165, 175, 0xa4, 0x1d6, 6;
#   5:15  111 -> " "
	.word 175, 178, 0x2ec, 0x20, 1;
#   5:18  101110011 -> "address"
	.word 178, 187, 0x23a, 0x74, 7;
#   5:27  1100010 -> ".\n"
	.word 187, 194, 0x250, 0x20, 2;
#   6: 2  10101 -> "        "
	.word 194, 199, 0x21c, 0, 8;
#   6: 7  1101010010 -> "jal"
	.word 199, 209, 0x2c6, 0x197, 3;
#   6:17  111 -> " "
	.word 209, 212, 0x2ec, 0x20, 1;
#   6:20  011011101 -> "upper"
	.word 212, 221, 0x19e, 0xcb, 5;
#   6:29  111 -> " "
	.word 221, 224, 0x2ec, 0x20, 1;
#   7: 0  111 -> " "
	.word 224, 227, 0x2ec, 0x20, 1;
#   7: 3  111 -> " "
	.word 227, 230, 0x2ec, 0x20, 1;
#   7: 6  111 -> " "
	.word 230, 233, 0x2ec, 0x20, 1;
#   7: 9  111 -> " "
	.word 233, 236, 0x2ec, 0x20, 1;
#   7:12  111 -> " "
	.word 236, 239, 0x2ec, 0x20, 1;
#   7:15  111 -> " "
	.word 239, 242, 0x2ec, 0x20, 1;
#   7:18  111 -> " "
	.word 242, 245, 0x2ec, 0x20, 1;
#   7:21  111 -> " "
	.word 245, 248, 0x2ec, 0x20, 1;
#   7:24  111 -> " "
	.word 248, 251, 0x2ec, 0x20, 1;
#   7:27  111 -> " "
	.word 251, 254, 0x2ec, 0x20, 1;
#   7:30  0101010 -> "#"
	.word 254, 261, 0x58, 0x23, 1;
#   8: 5  111 -> " "
	.word 261, 264, 0x2ec, 0x20, 1;
#   8: 8  0110110001 -> "Convert"
	.word 264, 274, 0x182, 0x27d, 7;
#   8:18  111 -> " "
	.word 274, 277, 0x2ec, 0x20, 1;
#   8:21  10110010 -> "to"
	.word 277, 285, 0x228, 0x4d, 2;
#   8:29  111 -> " "
	.word 285, 288, 0x2ec, 0x20, 1;
#   9: 0  011011101 -> "upper"
	.word 288, 297, 0x19e, 0xcb, 5;
#   9: 9  111 -> " "
	.word 297, 300, 0x2ec, 0x20, 1;
#   9:12  1011000 -> "c"
	.word 300, 307, 0x224, 0x63, 1;
#   9:19  01000 -> "a"
	.word 307, 312, 0x48, 0x61, 1;
#   9:24  10011 -> "s"
	.word 312, 317, 0x1f0, 0x73, 1;
#   9:29  10010 -> "e"
	.word 317, 322, 0x1ee, 0x65, 1;
#  10: 2  1100010 -> ".\n"
	.word 322, 329, 0x250, 0x20, 2;
#  10: 9  10101 -> "        "
	.word 329, 334, 0x21c, 0, 8;
#  10:14  1101000 -> "addi"
	.word 334, 341, 0x2b4, 0x23, 4;
#  10:21  01111 -> " $"
	.word 341, 346, 0x1c2, 0x9, 2;
#  10:26  10011 -> "s"
	.word 346, 351, 0x1f0, 0x73, 1;
#  10:31  110000 -> "0"
	.word 351, 357, 0x24c, 0x30, 1;
#  11: 5  00100 -> ", $"
	.word 357, 362, 0x24, 0xf, 3;
#  11:10  0101001 -> "a0"
	.word 362, 369, 0x54, 0x31, 2;
#  11:17  00111 -> ", "
	.word 369, 374, 0x40, 0xc, 2;
#  11:22  110000 -> "0"
	.word 374, 380, 0x24c, 0x30, 1;
#  11:28  101001000 -> "    # "
	.word 380, 389, 0x204, 0x9d, 6;
#  12: 5  0101100111 -> "Make"
	.word 389, 399, 0x7c, 0x218, 4;
#  12:15  111 -> " "
	.word 399, 402, 0x2ec, 0x20, 1;
#  12:18  01000 -> "a"
	.word 402, 407, 0x48, 0x61, 1;
#  12:23  111 -> " "
	.word 407, 410, 0x2ec, 0x20, 1;
#  12:26  0101110110 -> "copy"
	.word 410, 420, 0xb8, 0x1ca, 4;
#  13: 4  111 -> " "
	.word 420, 423, 0x2ec, 0x20, 1;
#  13: 7  0011001 -> "of"
	.word 423, 430, 0x34, 0x37, 2;
#  13:14  111 -> " "
	.word 430, 433, 0x2ec, 0x20, 1;
#  13:17  01100111 -> "string"
	.word 433, 441, 0x156, 0x5f, 6;
#  13:25  111 -> " "
	.word 441, 444, 0x2ec, 0x20, 1;
#  13:28  0101101101 -> "start"
	.word 444, 454, 0x94, 0x238, 5;
#  14: 6  111 -> " "
	.word 454, 457, 0x2ec, 0x20, 1;
#  14: 9  101110011 -> "address"
	.word 457, 466, 0x23a, 0x74, 7;
#  14:18  1100010 -> ".\n"
	.word 466, 473, 0x250, 0x20, 2;
#  14:25  10101 -> "        "
	.word 473, 478, 0x21c, 0, 8;
#  14:30  1101000 -> "addi"
	.word 478, 485, 0x2b4, 0x23, 4;
#  15: 5  01111 -> " $"
	.word 485, 490, 0x1c2, 0x9, 2;
#  15:10  0101001 -> "a0"
	.word 490, 497, 0x54, 0x31, 2;
#  15:17  00100 -> ", $"
	.word 497, 502, 0x24, 0xf, 3;
#  15:22  10011 -> "s"
	.word 502, 507, 0x1f0, 0x73, 1;
#  15:27  110000 -> "0"
	.word 507, 513, 0x24c, 0x30, 1;
#  16: 1  00111 -> ", "
	.word 513, 518, 0x40, 0xc, 2;
#  16: 6  110000 -> "0"
	.word 518, 524, 0x24c, 0x30, 1;
#  16:12  101001000 -> "    # "
	.word 524, 533, 0x204, 0x9d, 6;
#  16:21  0110011011 -> "R"
	.word 533, 543, 0x154, 0x52, 1;
#  16:31  10010 -> "e"
	.word 543, 548, 0x1ee, 0x65, 1;
#  17: 4  10011 -> "s"
	.word 548, 553, 0x1f0, 0x73, 1;
#  17: 9  01001 -> "t"
	.word 553, 558, 0x4a, 0x74, 1;
#  17:14  101111 -> "o"
	.word 558, 564, 0x242, 0x6f, 1;
#  17:20  00010 -> "r"
	.word 564, 569, 0x1c, 0x72, 1;
#  17:25  10010 -> "e"
	.word 569, 574, 0x1ee, 0x65, 1;
#  17:30  111 -> " "
	.word 574, 577, 0x2ec, 0x20, 1;
#  18: 1  01100111 -> "string"
	.word 577, 585, 0x156, 0x5f, 6;
#  18: 9  111 -> " "
	.word 585, 588, 0x2ec, 0x20, 1;
#  18:12  0101101101 -> "start"
	.word 588, 598, 0x94, 0x238, 5;
#  18:22  111 -> " "
	.word 598, 601, 0x2ec, 0x20, 1;
#  18:25  101110011 -> "address"
	.word 601, 610, 0x23a, 0x74, 7;
#  19: 2  1100010 -> ".\n"
	.word 610, 617, 0x250, 0x20, 2;
#  19: 9  111 -> " "
	.word 617, 620, 0x2ec, 0x20, 1;
#  19:12  111 -> " "
	.word 620, 623, 0x2ec, 0x20, 1;
#  19:15  111 -> " "
	.word 623, 626, 0x2ec, 0x20, 1;
#  19:18  111 -> " "
	.word 626, 629, 0x2ec, 0x20, 1;
#  19:21  111 -> " "
	.word 629, 632, 0x2ec, 0x20, 1;
#  19:24  111 -> " "
	.word 632, 635, 0x2ec, 0x20, 1;
#  19:27  111 -> " "
	.word 635, 638, 0x2ec, 0x20, 1;
#  19:30  111 -> " "
	.word 638, 641, 0x2ec, 0x20, 1;
#  20: 1  11011 -> "\n"
	.word 641, 646, 0x2ea, 0xa, 1;
#  20: 6  1101010100 -> "LOOP"
	.word 646, 656, 0x2ce, 0x179, 4;
#  20:16  1000100 -> ":\n"
	.word 656, 663, 0x1de, 0x28, 2;
#  20:23  10101 -> "        "
	.word 663, 668, 0x21c, 0, 8;
#  20:28  101101 -> "l"
	.word 668, 674, 0x22c, 0x6c, 1;
#  21: 2  11001101 -> "b"
	.word 674, 682, 0x29a, 0x62, 1;
#  21:10  01111 -> " $"
	.word 682, 687, 0x1c2, 0x9, 2;
#  21:15  0011000 -> "t0"
	.word 687, 694, 0x32, 0x3a, 2;
#  21:22  00111 -> ", "
	.word 694, 699, 0x40, 0xc, 2;
#  21:27  110000 -> "0"
	.word 699, 705, 0x24c, 0x30, 1;
#  22: 1  10111000 -> "($"
	.word 705, 713, 0x234, 0x4a, 2;
#  22: 9  0101001 -> "a0"
	.word 713, 720, 0x54, 0x31, 2;
#  22:16  0101101001 -> ")      # "
	.word 720, 730, 0x86, 0x24f, 9;
#  22:26  1100101101 -> "Load"
	.word 730, 740, 0x28c, 0x156, 4;
#  23: 4  111 -> " "
	.word 740, 743, 0x2ec, 0x20, 1;
#  23: 7  1100101010 -> "next"
	.word 743, 753, 0x282, 0x174, 4;
#  23:17  111 -> " "
	.word 753, 756, 0x2ec, 0x20, 1;
#  23:20  110101111 -> "character"
	.word 756, 765, 0x2e8, 0x82, 9;
#  23:29  1100010 -> ".\n"
	.word 765, 772, 0x250, 0x20, 2;
#  24: 4  10101 -> "        "
	.word 772, 777, 0x21c, 0, 8;
#  24: 9  101001001 -> "beq"
	.word 777, 786, 0x206, 0x99, 3;
#  24:18  01111 -> " $"
	.word 786, 791, 0x1c2, 0x9, 2;
#  24:23  0011000 -> "t0"
	.word 791, 798, 0x32, 0x3a, 2;
#  24:30  00100 -> ", $"
	.word 798, 803, 0x24, 0xf, 3;
#  25: 3  110000 -> "0"
	.word 803, 809, 0x24c, 0x30, 1;
#  25: 9  00111 -> ", "
	.word 809, 814, 0x40, 0xc, 2;
#  25:14  0101101010 -> "DONE"
	.word 814, 824, 0x8a, 0x262, 4;
#  25:24  0101110111 -> "   # "
	.word 824, 834, 0xba, 0x1c4, 5;
#  26: 2  01100011000 -> "J"
	.word 834, 845, 0x126, 0x4a, 1;
#  26:13  1010001 -> "u"
	.word 845, 852, 0x1fc, 0x75, 1;
#  26:20  1100011 -> "m"
	.word 852, 859, 0x252, 0x6d, 1;
#  26:27  0101011 -> "p"
	.word 859, 866, 0x5a, 0x70, 1;
#  27: 2  111 -> " "
	.word 866, 869, 0x2ec, 0x20, 1;
#  27: 5  0101111101 -> "out"
	.word 869, 879, 0xd2, 0x1e8, 3;
#  27:15  111 -> " "
	.word 879, 882, 0x2ec, 0x20, 1;
#  27:18  0011001 -> "of"
	.word 882, 889, 0x34, 0x37, 2;
#  27:25  111 -> " "
	.word 889, 892, 0x2ec, 0x20, 1;
#  27:28  101101 -> "l"
	.word 892, 898, 0x22c, 0x6c, 1;
#  28: 2  101111 -> "o"
	.word 898, 904, 0x242, 0x6f, 1;
#  28: 8  101111 -> "o"
	.word 904, 910, 0x242, 0x6f, 1;
#  28:14  0101011 -> "p"
	.word 910, 917, 0x5a, 0x70, 1;
#  28:21  111 -> " "
	.word 917, 920, 0x2ec, 0x20, 1;
#  28:24  00000 -> "i"
	.word 920, 925, 0xa, 0x69, 1;
#  28:29  1101001 -> "f"
	.word 925, 932, 0x2b6, 0x66, 1;
#  29: 4  111 -> " "
	.word 932, 935, 0x2ec, 0x20, 1;
#  29: 7  01000 -> "a"
	.word 935, 940, 0x48, 0x61, 1;
#  29:12  01001 -> "t"
	.word 940, 945, 0x4a, 0x74, 1;
#  29:17  111 -> " "
	.word 945, 948, 0x2ec, 0x20, 1;
#  29:20  10010 -> "e"
	.word 948, 953, 0x1ee, 0x65, 1;
#  29:25  00011 -> "n"
	.word 953, 958, 0x1e, 0x6e, 1;
#  29:30  1000010 -> "d"
	.word 958, 965, 0x1d6, 0x64, 1;
#  30: 5  111 -> " "
	.word 965, 968, 0x2ec, 0x20, 1;
#  30: 8  0011001 -> "of"
	.word 968, 975, 0x34, 0x37, 2;
#  30:15  111 -> " "
	.word 975, 978, 0x2ec, 0x20, 1;
#  30:18  01100111 -> "string"
	.word 978, 986, 0x156, 0x5f, 6;
#  30:26  1100010 -> ".\n"
	.word 986, 993, 0x250, 0x20, 2;
#  31: 1  10101 -> "        "
	.word 993, 998, 0x21c, 0, 8;
#  31: 6  1101000 -> "addi"
	.word 998, 1005, 0x2b4, 0x23, 4;
#  31:13  01111 -> " $"
	.word 1005, 1010, 0x1c2, 0x9, 2;
#  31:18  0101001 -> "a0"
	.word 1010, 1017, 0x54, 0x31, 2;
#  31:25  00100 -> ", $"
	.word 1017, 1022, 0x24, 0xf, 3;
#  31:30  0101001 -> "a0"
	.word 1022, 1029, 0x54, 0x31, 2;
#  32: 5  00111 -> ", "
	.word 1029, 1034, 0x40, 0xc, 2;
#  32:10  000011 -> "1"
	.word 1034, 1040, 0x18, 0x31, 1;
#  32:16  101001000 -> "    # "
	.word 1040, 1049, 0x204, 0x9d, 6;
#  32:25  11001100 -> "I"
	.word 1049, 1057, 0x298, 0x49, 1;
#  33: 1  00011 -> "n"
	.word 1057, 1062, 0x1e, 0x6e, 1;
#  33: 6  1011000 -> "c"
	.word 1062, 1069, 0x224, 0x63, 1;
#  33:13  00010 -> "r"
	.word 1069, 1074, 0x1c, 0x72, 1;
#  33:18  10010 -> "e"
	.word 1074, 1079, 0x1ee, 0x65, 1;
#  33:23  1100011 -> "m"
	.word 1079, 1086, 0x252, 0x6d, 1;
#  33:30  10010 -> "e"
	.word 1086, 1091, 0x1ee, 0x65, 1;
#  34: 3  00011 -> "n"
	.word 1091, 1096, 0x1e, 0x6e, 1;
#  34: 8  01001 -> "t"
	.word 1096, 1101, 0x4a, 0x74, 1;
#  34:13  111 -> " "
	.word 1101, 1104, 0x2ec, 0x20, 1;
#  34:16  10110010 -> "to"
	.word 1104, 1112, 0x228, 0x4d, 2;
#  34:24  111 -> " "
	.word 1112, 1115, 0x2ec, 0x20, 1;
#  34:27  101110011 -> "address"
	.word 1115, 1124, 0x23a, 0x74, 7;
#  35: 4  111 -> " "
	.word 1124, 1127, 0x2ec, 0x20, 1;
#  35: 7  0011001 -> "of"
	.word 1127, 1134, 0x34, 0x37, 2;
#  35:14  111 -> " "
	.word 1134, 1137, 0x2ec, 0x20, 1;
#  35:17  1100101010 -> "next"
	.word 1137, 1147, 0x282, 0x174, 4;
#  35:27  111 -> " "
	.word 1147, 1150, 0x2ec, 0x20, 1;
#  35:30  110101111 -> "character"
	.word 1150, 1159, 0x2e8, 0x82, 9;

#
# Huffman Compressed Text
#
huff_compressed_text_start:
	.word 0xd96cc6da, 0x51375d0f, 0x9864120f, 0x852167e8, 0xebb733ee
	.word 0xbae1ee78, 0xaba976ef, 0xfffffffd, 0x576c7d97, 0x6efb089c
	.word 0xb15743e7, 0x81149f0a, 0x42cfd1d7, 0x6e67b3f5, 0xb7dcf157
	.word 0x43d49278, 0x1f0a4337, 0x29a6f14b, 0xb3f5b7dc, 0xf17fffff
	.word 0xef54895b, 0x735e60f8, 0x5c295a72, 0xdf957d7e, 0x2ad25e60
	.word 0x981d6a5d, 0xd8c51c6a, 0xfafbccfb, 0x6fbd5f06, 0x9e84f90e
	.word 0x1733d9f1, 0x5743d491, 0x49c3a466, 0xec0a58e, 0x434fb2f7
	.word 0x3e67e55f, 0x5f8aba1e, 0x60863206, 0x1c873ad5, 0xe49798f6
	.word 0x5ee5dbd7, 0x7eb3b718, 0x1c0ed460, 0x433c9361, 0x61aced48
	.word 0x28bf3c86, 0xf41873a, 0xccd2f31c, 0x13ed836d, 0xe830f5eb
	.word 0x812e27d9, 0xae8f6c92, 0x99096fad, 0x25f9e4c0, 0xfaa7fd57
	.word 0x75ded7f3, 0xbf9524fb, 0xaf957d59, 0xdfac60b7, 0xa65e88e6
	.word 0x287285e, 0xc6356b0d, 0x676daf30, 0x4307a1ff, 0xfd57d5ec
	.word 0x22d976f7, 0xe6a27285, 0xef1fb97c, 0xa3cc1964, 0xbeb21eb5
	.word 0xddd72e7d, 0xd910190c, 0x2ef16bf1, 0xaba2997b, 0x9f33ee5f
	.word 0x28c55b42, 0xbe33e171, 0x76b4e5be, 0xe5f2877b, 0x1945b465
	.word 0xc13eab99, 0xe906394f, 0xeade7290, 0xf15743e3, 0x24670e91
	.word 0x9349c0a5, 0xe7290065, 0x7bafab74, 0x14800cf3, 0xbfe5df27
	.word 0x5beb4bfa, 0xa6eb30af, 0x8cf85c5d, 0xeb7ffff5, 0x5dd77b5f
	.word 0xcd378a5e, 0xebae3f35, 0x16355e01, 0xfbaf72c5, 0xb5aa2569
	.word 0x627cc3ff, 0xffffffff, 0xd57667d1, 0x980657ba, 0xf3459ca1
	.word 0x75c3dcf1, 0x5699bdef, 0x38ce574e, 0xcddf4520, 0x1cb6ab6a
	.word 0xbf8b22db, 0x67e08269, 0xbca1231f, 0x562bca12, 0x31fd634b
	.word 0x5bd7aeac, 0x401a67ee, 0x58956f79, 0x1660d5d1, 0x4f67eb47
	.word 0x4ca6900c, 0xaed2c412, 0x5c24251b, 0x6ca21703, 0xb9b1b6fa
	.word 0xd1638c05, 0x88315622, 0xd836cc51, 0x83b16626, 0xd11b9fea
	.word 0xbae9e77e, 0x3975f694, 0x6694240c, 0xa97b1050, 0x24584c85
	.word 0x3c45c0ee, 0x6d11a82e, 0x1b5faff, 0xaefc97ad, 0x7c09ede7
	.word 0xb2f17eb0, 0x75b94170, 0xde57e2f, 0xc09f2458, 0x83c602a0
	.word 0xa7b5fc24, 0x1a282e01, 0xbccf92fc, 0xc718fb35, 0xc28af194
	.word 0xbc260827, 0xf4ca5680, 0x65389f2a, 0x494806e3, 0xcd22bc65
	.word 0x484a0b80, 0x6f24f6de, 0x32a423e6, 0x79a5069d, 0x15068a0
	.word 0xb806f530, 0x4e7d3065, 0x8fe3be73, 0xf62fb390, 0xa50bd980
	.word 0x729eb975, 0xd28b6df3, 0xa25205d5, 0x80729a82, 0xe01bc9a0
	.word 0xc852f8ef, 0xb1aa806e, 0x3e68050a, 0x7db3f65e, 0x60194a0b
	.word 0x806f2bf9, 0x8e217b41, 0xaacbd979, 0xca5f51f6, 0xa32c34fa
	.word 0x9827304e, 0x6056ac1a, 0xe41a2211, 0xa006e380, 0x69bfcd58
	.word 0x80329417, 0x3292e01, 0xbc93e3be, 0xf1da02a0, 0xa7de3f75
	.word 0xf350697d, 0x175d75d7, 0x5d751ec0, 0xa57db2e9, 0xa2393aeb
	.word 0xaefd47e9, 0x5b6cfdd, 0x74004a0b, 0x806f33c2, 0x14918d78
	.word 0x466df453, 0xf1a0a1df, 0x68113e01, 0xfcdb6fbf, 0x1baebaeb
	.word 0xaeb5fe63, 0x8c7c2827, 0x403f99c, 0x2a27d665, 0x5c0ca4b
	.word 0x806d7ebf, 0xebbf25eb, 0x5f027b79, 0xecbc5f8e, 0x417de2b6
	.word 0x481cd417, 0xde4d06, 0x43fa8b89, 0xf0b06429, 0x7d77db2d
	.word 0x29e697d1, 0x17832409, 0x2a0b806f, 0x2beb3389, 0xfc9fa608
	.word 0x657c778, 0xa5ae03c5, 0xfdd7c9fe, 0x67b0814b, 0xad0a0b80
	.word 0x6f53bc52, 0xe98281fc, 0xcf17eb07, 0x5b941703, 0x292d7cee
	.word 0x74aa578a, 0xbe8827db, 0x82c7348a, 0xf194a378, 0xe65442d7
	.word 0xc371524a, 0x642e10cb, 0x9ecb63fb, 0x17d11a69, 0xbc219636
	.word 0x5a742fac, 0x865d30d, 0x9585da1a, 0x420235bc, 0x2195390b
	.word 0x2cda2373, 0x62fbd968, 0xb4050fc3, 0xdea110b5, 0xcb87843d
	.word 0xe7710b5c, 0xbc3c37b5, 0xd62170af, 0xa39b6cbe, 0x5eee19d6
	.word 0x49ec5e39, 0xa5034fcb, 0xced9fb2f, 0x383785ea, 0xe42b121a
	.word 0x678b7b2d, 0x98d9655b, 0x7e6dbd7b, 0xdaf712b6, 0xa1ea4ed9
	.word 0x6eb6a1e8, 0xcfa86eb, 0xa1f19101, 0x9f0dd743, 0xeec919f2
	.word 0xfdc553a2, 0x56615f81, 0xf0b88cd6, 0xb4f7c64b, 0xb3c553b7
	.word 0x5d0f8c91, 0x9e1ef75b, 0x50f8cf9d, 0xeeba1f76, 0x48cf0f0d
	.word 0xd743f3c9, 0x81e1d0fd, 0x5770c19c, 0x6e2a1c4a, 0xcf35f9e7
	.word 0xc2e2335a, 0xd3df192e, 0xcf150f75, 0xd0f8c919, 0xc3dd679a
	.word 0xfc0f85c4, 0x66bbaea5, 0xf23dd699, 0xbaac4fb3, 0xc09a686e
	.word 0xab63b09d, 0xafd3409, 0xa686eb6a, 0x1f9e75d7, 0x75b61580
	.word 0xdfa619f0, 0xb8cf35ac, 0x2059bb09, 0xfa68134c, 0x3269a1bd
	.word 0xd752ed2d, 0xd699bae5, 0xcf304c09, 0x86eba1f9, 0xe4c0ec30
	.word 0xf75d0f4c, 0x32679e83, 0xeeb6a1f, 0x30cfa86e, 0xba1f6781
	.word 0x303861ee, 0xb6a1f3a0, 0x7cef75d0, 0xf9d024e8, 0x1e187b8a
	.word 0xa112b685, 0x7c67c2e2, 0x619ad743, 0xe6192619, 0xe1eeb497
	.word 0xc64c0eb9, 0xeeba1f9e, 0x4cf387ba, 0xcc56bd2c, 0x248ce1ee
	.word 0xab23d390, 0x92740896, 0x1dd5627c, 0x64d386ea, 0xb63b09d0
	.word 0xafd38134, 0xe1bae3a3, 0x6bb09fa6, 0x1934e04d, 0x3437558f
	.word 0x6b9c4ad3, 0xdf9e44c3, 0x3c550dd6, 0x99bdd743, 0xecf02607
	.word 0xf0dd563, 0xdef79c67, 0x2dd726c7, 0xd9763cad, 0x5c85e2c8
	.word 0x9cb7b6ec, 0x4c89bfeb, 0x2ec25914, 0xd37eb22c, 0x8b6dd6f6
	.word 0xaf33d9fd, 0x97b178ec, 0xe424e209, 0x6452e4d5, 0xe67ebfb4
	.word 0xfb431324, 0x6e4da769, 0xf686264b, 0xb728b5f8, 0xd5a0409d
	.word 0xe3eb8e20, 0x9ffffff5, 0x5d8d3124, 0x63576ca9, 0xbfb525a6
	.word 0xf14a9bdc, 0xd0d475cf, 0xfff7ffff, 0xfeabffff, 0xfffedcd2
	.word 0x990a9bfb, 0x9b71a8eb, 0x9edad12a, 0xbfbe33e1, 0x70a75bff
	.word 0xfffffaaf, 0x96fd7fd2, 0x2bf1f67c, 0x55d0f524, 0x5270f75a
	.word 0x4be32607, 0x6d7755e5, 0xf7648cec, 0x7d807fff, 0xffaaedf3
	.word 0xb8438dd6, 0x9efbb261, 0xdadbaaf2, 0xfbb24670, 0xe853bfff
	.word 0xfeabb8cb, 0x1c763bc3, 0xdd692fbb, 0x26076b6e, 0xba1f1923
	.word 0xc829d437, 0x5a5f6b6e, 0xb3cd7c6c, 0x12941dc2, 0x935db6b1
	.word 0x2b4b13c4, 0x8dd699bd, 0xef38ce72, 0x372d5d22, 0xcaf152
	.word 0x194983bd, 0xe4713226, 0xffacbb09, 0x6452e4d5, 0xe67e900a
	.word 0x69fafe67, 0xb3e264b3, 0xc1c999f6, 0x68b68c8f, 0x75ed90ca
	.word 0x4c1e67dd, 0x767c412c, 0x861c9b4e, 0xd3ed0c4c, 0x91b93579
	.word 0x9f628885, 0x21a7ebfb, 0x4fb43104, 0xd743e322, 0x93e1b6de
	.word 0x2557f798, 0x3e17119a, 0xd69ef304, 0xc0edbeeb, 0xa1f19233
	.word 0x87bdd743, 0xe3247900, 0x7bad2c4f, 0x12375591, 0xf6781232
	.word 0x29d80000
huff_compressed_text_end:

# Huffman Encoding Word Dictionary
#
huff_dictionary:
	.asciiz "        "     # Idx     0  Freq  81   Enc 10101
	.asciiz " $"           # Idx     9  Freq  71   Enc 01111
	.asciiz ", "           # Idx    12  Freq  57   Enc 00111
	.asciiz ", $"          # Idx    15  Freq  55   Enc 00100
	.asciiz "t1"           # Idx    19  Freq  38   Enc 100011
	.asciiz "        ."    # Idx    22  Freq  28   Enc 001011
	.asciiz ".\n"          # Idx    32  Freq  24   Enc 1100010
	.asciiz "addi"         # Idx    35  Freq  24   Enc 1101000
	.asciiz ":\n"          # Idx    40  Freq  18   Enc 1000100
	.asciiz "ascii"        # Idx    43  Freq  18   Enc 1000000
	.asciiz "a0"           # Idx    49  Freq  15   Enc 0101001
	.asciiz "\"\n"         # Idx    52  Freq  15   Enc 0101000
	.asciiz "of"           # Idx    55  Freq  14   Enc 0011001
	.asciiz "t0"           # Idx    58  Freq  14   Enc 0011000
	.asciiz " \""          # Idx    61  Freq  14   Enc 0011011
	.asciiz "t2"           # Idx    64  Freq  12   Enc 10111011
	.asciiz "the"          # Idx    67  Freq  12   Enc 10111010
	.asciiz "t3"           # Idx    71  Freq  12   Enc 11001111
	.asciiz "($"           # Idx    74  Freq  11   Enc 10111000
	.asciiz "to"           # Idx    77  Freq  10   Enc 10110010
	.asciiz ": "           # Idx    80  Freq   9   Enc 01110010
	.asciiz "        # $"   # Idx    83  Freq   8   Enc 01100100
	.asciiz "string"       # Idx    95  Freq   8   Enc 01100111
	.asciiz ")\n"          # Idx   102  Freq   7   Enc 00110101
	.asciiz "        #\n"   # Idx   105  Freq   7   Enc 00001001
	.asciiz "address"      # Idx   116  Freq   6   Enc 101110011
	.asciiz "table"        # Idx   124  Freq   6   Enc 101110010
	.asciiz "character"    # Idx   130  Freq   6   Enc 110101111
	.asciiz "miss"         # Idx   140  Freq   5   Enc 100010111
	.asciiz "nop"          # Idx   145  Freq   5   Enc 101001100
	.asciiz "bne"          # Idx   149  Freq   5   Enc 101001111
	.asciiz "beq"          # Idx   153  Freq   5   Enc 101001001
	.asciiz "    # "       # Idx   157  Freq   5   Enc 101001000
	.asciiz "Address"      # Idx   164  Freq   4   Enc 011010101
	.asciiz "and"          # Idx   172  Freq   4   Enc 011010111
	.asciiz "ULOOP"        # Idx   176  Freq   4   Enc 011010110
	.asciiz "examined"     # Idx   182  Freq   4   Enc 011010000
	.asciiz "being"        # Idx   191  Freq   4   Enc 011010011
	.asciiz "histo"        # Idx   197  Freq   4   Enc 011010010
	.asciiz "upper"        # Idx   203  Freq   4   Enc 011011101
	.asciiz "## "          # Idx   209  Freq   3   Enc 1100111001
	.asciiz "################################################################################\n"   # Idx   213  Freq   3   Enc 1100111000
	.asciiz "stars"        # Idx   295  Freq   3   Enc 1100111011
	.asciiz "  # "         # Idx   301  Freq   3   Enc 1100111010
	.asciiz "know"         # Idx   306  Freq   3   Enc 1100100101
	.asciiz "The"          # Idx   311  Freq   3   Enc 1100100100
	.asciiz "one"          # Idx   315  Freq   3   Enc 1100100111
	.asciiz ", -"          # Idx   319  Freq   3   Enc 1100100000
	.asciiz "strlen"       # Idx   323  Freq   3   Enc 1100100011
	.asciiz "        ## "   # Idx   330  Freq   3   Enc 1100100010
	.asciiz "Load"         # Idx   342  Freq   3   Enc 1100101101
	.asciiz "100"          # Idx   347  Freq   3   Enc 1100101111
	.asciiz "add"          # Idx   351  Freq   3   Enc 1100101110
	.asciiz " \"\"\n"      # Idx   355  Freq   3   Enc 1100101001
	.asciiz "element"      # Idx   360  Freq   3   Enc 1100101000
	.asciiz "And"          # Idx   368  Freq   3   Enc 1100101011
	.asciiz "next"         # Idx   372  Freq   3   Enc 1100101010
	.asciiz "LOOP"         # Idx   377  Freq   3   Enc 1101010100
	.asciiz "char"         # Idx   382  Freq   3   Enc 1101010110
	.asciiz "that"         # Idx   387  Freq   3   Enc 1101010001
	.asciiz "histogram_data"   # Idx   392  Freq   3   Enc 1101010000
	.asciiz "jal"          # Idx   407  Freq   3   Enc 1101010010
	.asciiz "you"          # Idx   411  Freq   3   Enc 1101011101
	.asciiz "..."          # Idx   415  Freq   3   Enc 1101011100
	.asciiz " -> "         # Idx   419  Freq   2   Enc 0110000001
	.asciiz "Return"       # Idx   424  Freq   2   Enc 0110011001
	.asciiz "text"         # Idx   431  Freq   2   Enc 0110011000
	.asciiz "not"          # Idx   436  Freq   2   Enc 0110011010
	.asciiz "TB_100"       # Idx   440  Freq   2   Enc 0101110101
	.asciiz "Test"         # Idx   447  Freq   2   Enc 0101110100
	.asciiz "   # "        # Idx   452  Freq   2   Enc 0101110111
	.asciiz "copy"         # Idx   458  Freq   2   Enc 0101110110
	.asciiz "result"       # Idx   463  Freq   2   Enc 0101110001
	.asciiz "return"       # Idx   470  Freq   2   Enc 0101110000
	.asciiz "TEST"         # Idx   477  Freq   2   Enc 0101110011
	.asciiz "space"        # Idx   482  Freq   2   Enc 0101110010
	.asciiz "out"          # Idx   488  Freq   2   Enc 0101111101
	.asciiz "asciiz"       # Idx   492  Freq   2   Enc 0101111100
	.asciiz "lbu"          # Idx   499  Freq   2   Enc 0101111111
	.asciiz "slti"         # Idx   503  Freq   2   Enc 0101111001
	.asciiz "... "         # Idx   508  Freq   2   Enc 0101111000
	.asciiz "__start"      # Idx   513  Freq   2   Enc 0101111011
	.asciiz "then"         # Idx   521  Freq   2   Enc 0101111010
	.asciiz "Usage"        # Idx   526  Freq   2   Enc 0101100101
	.asciiz "sub"          # Idx   532  Freq   2   Enc 0101100100
	.asciiz "Make"         # Idx   536  Freq   2   Enc 0101100111
	.asciiz "there"        # Idx   541  Freq   2   Enc 0101100110
	.asciiz ".)\n"         # Idx   547  Freq   2   Enc 0101100001
	.asciiz "New"          # Idx   551  Freq   2   Enc 0101100000
	.asciiz "syscall"      # Idx   555  Freq   2   Enc 0101100011
	.asciiz "mtc1"         # Idx   563  Freq   2   Enc 0101100010
	.asciiz "start"        # Idx   568  Freq   2   Enc 0101101101
	.asciiz "cvt"          # Idx   574  Freq   2   Enc 0101101100
	.asciiz " ..\n"        # Idx   578  Freq   2   Enc 0101101111
	.asciiz "Orleans"      # Idx   583  Freq   2   Enc 0101101110
	.asciiz ")      # "    # Idx   591  Freq   2   Enc 0101101001
	.asciiz "for"          # Idx   601  Freq   2   Enc 0101101000
	.asciiz "what"         # Idx   605  Freq   2   Enc 0101101011
	.asciiz "DONE"         # Idx   610  Freq   2   Enc 0101101010
	.asciiz "UDONE"        # Idx   615  Freq   2   Enc 0110110101
	.asciiz "Character"    # Idx   621  Freq   2   Enc 0110110100
	.asciiz "SLOOP"        # Idx   631  Freq   2   Enc 0110110111
	.asciiz "Convert"      # Idx   637  Freq   2   Enc 0110110001
	.asciiz "used"         # Idx   645  Freq   2   Enc 0110110011
	.asciiz "doi"          # Idx   650  Freq   2   Enc 0110110010
	.asciiz "index"        # Idx   654  Freq   2   Enc 0110111101
	.asciiz "means"        # Idx   660  Freq   2   Enc 0110111100
	.asciiz "Register"     # Idx   666  Freq   2   Enc 0110111111

# Huffman Index Tree.
#
huff_tree_right_base:
	.half 0x80  # Base for right child index.
huff_tree_literal_base:
	.half 0  # Base for literal.
huff_tree_dictionary_base:
	.half 0x7000  # Base for dict.

# Huffman Lookup Tree
#
huff_tree:
	.half 0x0162  # Tree Idx   0               Pointer to right child.
	.half 0x00a1  # Tree Idx   1  0            Pointer to right child.
	.half 0x0090  # Tree Idx   2  00           Pointer to right child.
	.half 0x008d  # Tree Idx   3  000          Pointer to right child.
	.half 0x0086  # Tree Idx   4  0000         Pointer to right child.
	.half 0x0069  # Tree Idx   5  00000        Literal "i"
	.half 0x008c  # Tree Idx   6  00001        Pointer to right child.
	.half 0x008b  # Tree Idx   7  000010       Pointer to right child.
	.half 0x008a  # Tree Idx   8  0000100      Pointer to right child.
	.half 0x0025  # Tree Idx   9  00001000     Literal "%"
	.half 0x7069  # Tree Idx  10  00001001     Dict Idx for "        #\n"
	.half 0x0077  # Tree Idx  11  0000101      Literal "w"
	.half 0x0031  # Tree Idx  12  000011       Literal "1"
	.half 0x008f  # Tree Idx  13  0001         Pointer to right child.
	.half 0x0072  # Tree Idx  14  00010        Literal "r"
	.half 0x006e  # Tree Idx  15  00011        Literal "n"
	.half 0x0096  # Tree Idx  16  001          Pointer to right child.
	.half 0x0093  # Tree Idx  17  0010         Pointer to right child.
	.half 0x700f  # Tree Idx  18  00100        Dict Idx for ", $"
	.half 0x0095  # Tree Idx  19  00101        Pointer to right child.
	.half 0x0067  # Tree Idx  20  001010       Literal "g"
	.half 0x7016  # Tree Idx  21  001011       Dict Idx for "        ."
	.half 0x00a0  # Tree Idx  22  0011         Pointer to right child.
	.half 0x009b  # Tree Idx  23  00110        Pointer to right child.
	.half 0x009a  # Tree Idx  24  001100       Pointer to right child.
	.half 0x703a  # Tree Idx  25  0011000      Dict Idx for "t0"
	.half 0x7037  # Tree Idx  26  0011001      Dict Idx for "of"
	.half 0x009f  # Tree Idx  27  001101       Pointer to right child.
	.half 0x009e  # Tree Idx  28  0011010      Pointer to right child.
	.half 0x0079  # Tree Idx  29  00110100     Literal "y"
	.half 0x7066  # Tree Idx  30  00110101     Dict Idx for ")\n"
	.half 0x703d  # Tree Idx  31  0011011      Dict Idx for " \""
	.half 0x700c  # Tree Idx  32  00111        Dict Idx for ", "
	.half 0x00ed  # Tree Idx  33  01           Pointer to right child.
	.half 0x00a6  # Tree Idx  34  010          Pointer to right child.
	.half 0x00a5  # Tree Idx  35  0100         Pointer to right child.
	.half 0x0061  # Tree Idx  36  01000        Literal "a"
	.half 0x0074  # Tree Idx  37  01001        Literal "t"
	.half 0x00ae  # Tree Idx  38  0101         Pointer to right child.
	.half 0x00ab  # Tree Idx  39  01010        Pointer to right child.
	.half 0x00aa  # Tree Idx  40  010100       Pointer to right child.
	.half 0x7034  # Tree Idx  41  0101000      Dict Idx for "\"\n"
	.half 0x7031  # Tree Idx  42  0101001      Dict Idx for "a0"
	.half 0x00ad  # Tree Idx  43  010101       Pointer to right child.
	.half 0x0023  # Tree Idx  44  0101010      Literal "#"
	.half 0x0070  # Tree Idx  45  0101011      Literal "p"
	.half 0x00ce  # Tree Idx  46  01011        Pointer to right child.
	.half 0x00bf  # Tree Idx  47  010110       Pointer to right child.
	.half 0x00b8  # Tree Idx  48  0101100      Pointer to right child.
	.half 0x00b5  # Tree Idx  49  01011000     Pointer to right child.
	.half 0x00b4  # Tree Idx  50  010110000    Pointer to right child.
	.half 0x7227  # Tree Idx  51  0101100000   Dict Idx for "New"
	.half 0x7223  # Tree Idx  52  0101100001   Dict Idx for ".)\n"
	.half 0x00b7  # Tree Idx  53  010110001    Pointer to right child.
	.half 0x7233  # Tree Idx  54  0101100010   Dict Idx for "mtc1"
	.half 0x722b  # Tree Idx  55  0101100011   Dict Idx for "syscall"
	.half 0x00bc  # Tree Idx  56  01011001     Pointer to right child.
	.half 0x00bb  # Tree Idx  57  010110010    Pointer to right child.
	.half 0x7214  # Tree Idx  58  0101100100   Dict Idx for "sub"
	.half 0x720e  # Tree Idx  59  0101100101   Dict Idx for "Usage"
	.half 0x00be  # Tree Idx  60  010110011    Pointer to right child.
	.half 0x721d  # Tree Idx  61  0101100110   Dict Idx for "there"
	.half 0x7218  # Tree Idx  62  0101100111   Dict Idx for "Make"
	.half 0x00c7  # Tree Idx  63  0101101      Pointer to right child.
	.half 0x00c4  # Tree Idx  64  01011010     Pointer to right child.
	.half 0x00c3  # Tree Idx  65  010110100    Pointer to right child.
	.half 0x7259  # Tree Idx  66  0101101000   Dict Idx for "for"
	.half 0x724f  # Tree Idx  67  0101101001   Dict Idx for ")      # "
	.half 0x00c6  # Tree Idx  68  010110101    Pointer to right child.
	.half 0x7262  # Tree Idx  69  0101101010   Dict Idx for "DONE"
	.half 0x725d  # Tree Idx  70  0101101011   Dict Idx for "what"
	.half 0x00cb  # Tree Idx  71  01011011     Pointer to right child.
	.half 0x00ca  # Tree Idx  72  010110110    Pointer to right child.
	.half 0x723e  # Tree Idx  73  0101101100   Dict Idx for "cvt"
	.half 0x7238  # Tree Idx  74  0101101101   Dict Idx for "start"
	.half 0x00cd  # Tree Idx  75  010110111    Pointer to right child.
	.half 0x7247  # Tree Idx  76  0101101110   Dict Idx for "Orleans"
	.half 0x7242  # Tree Idx  77  0101101111   Dict Idx for " ..\n"
	.half 0x00de  # Tree Idx  78  010111       Pointer to right child.
	.half 0x00d7  # Tree Idx  79  0101110      Pointer to right child.
	.half 0x00d4  # Tree Idx  80  01011100     Pointer to right child.
	.half 0x00d3  # Tree Idx  81  010111000    Pointer to right child.
	.half 0x71d6  # Tree Idx  82  0101110000   Dict Idx for "return"
	.half 0x71cf  # Tree Idx  83  0101110001   Dict Idx for "result"
	.half 0x00d6  # Tree Idx  84  010111001    Pointer to right child.
	.half 0x71e2  # Tree Idx  85  0101110010   Dict Idx for "space"
	.half 0x71dd  # Tree Idx  86  0101110011   Dict Idx for "TEST"
	.half 0x00db  # Tree Idx  87  01011101     Pointer to right child.
	.half 0x00da  # Tree Idx  88  010111010    Pointer to right child.
	.half 0x71bf  # Tree Idx  89  0101110100   Dict Idx for "Test"
	.half 0x71b8  # Tree Idx  90  0101110101   Dict Idx for "TB_100"
	.half 0x00dd  # Tree Idx  91  010111011    Pointer to right child.
	.half 0x71ca  # Tree Idx  92  0101110110   Dict Idx for "copy"
	.half 0x71c4  # Tree Idx  93  0101110111   Dict Idx for "   # "
	.half 0x00e6  # Tree Idx  94  0101111      Pointer to right child.
	.half 0x00e3  # Tree Idx  95  01011110     Pointer to right child.
	.half 0x00e2  # Tree Idx  96  010111100    Pointer to right child.
	.half 0x71fc  # Tree Idx  97  0101111000   Dict Idx for "... "
	.half 0x71f7  # Tree Idx  98  0101111001   Dict Idx for "slti"
	.half 0x00e5  # Tree Idx  99  010111101    Pointer to right child.
	.half 0x7209  # Tree Idx 100  0101111010   Dict Idx for "then"
	.half 0x7201  # Tree Idx 101  0101111011   Dict Idx for "__start"
	.half 0x00ea  # Tree Idx 102  01011111     Pointer to right child.
	.half 0x00e9  # Tree Idx 103  010111110    Pointer to right child.
	.half 0x71ec  # Tree Idx 104  0101111100   Dict Idx for "asciiz"
	.half 0x71e8  # Tree Idx 105  0101111101   Dict Idx for "out"
	.half 0x00ec  # Tree Idx 106  010111111    Pointer to right child.
	.half 0x0044  # Tree Idx 107  0101111110   Literal "D"
	.half 0x71f3  # Tree Idx 108  0101111111   Dict Idx for "lbu"
	.half 0x0159  # Tree Idx 109  011          Pointer to right child.
	.half 0x012c  # Tree Idx 110  0110         Pointer to right child.
	.half 0x011f  # Tree Idx 111  01100        Pointer to right child.
	.half 0x0100  # Tree Idx 112  011000       Pointer to right child.
	.half 0x00ff  # Tree Idx 113  0110000      Pointer to right child.
	.half 0x00f8  # Tree Idx 114  01100000     Pointer to right child.
	.half 0x00f7  # Tree Idx 115  011000000    Pointer to right child.
	.half 0x00f6  # Tree Idx 116  0110000000   Pointer to right child.
	.half 0x0037  # Tree Idx 117  01100000000  Literal "7"
	.half 0x005f  # Tree Idx 118  01100000001  Literal "_"
	.half 0x71a3  # Tree Idx 119  0110000001   Dict Idx for " -> "
	.half 0x00fc  # Tree Idx 120  011000001    Pointer to right child.
	.half 0x00fb  # Tree Idx 121  0110000010   Pointer to right child.
	.half 0x002c  # Tree Idx 122  01100000100  Literal ","
	.half 0x004e  # Tree Idx 123  01100000101  Literal "N"
	.half 0x00fe  # Tree Idx 124  0110000011   Pointer to right child.
	.half 0x002a  # Tree Idx 125  01100000110  Literal "*"
	.half 0x007c  # Tree Idx 126  01100000111  Literal "|"
	.half 0x0036  # Tree Idx 127  01100001     Literal "6"
	.half 0x0110  # Tree Idx 128  0110001      Pointer to right child.
	.half 0x0109  # Tree Idx 129  01100010     Pointer to right child.
	.half 0x0106  # Tree Idx 130  011000100    Pointer to right child.
	.half 0x0105  # Tree Idx 131  0110001000   Pointer to right child.
	.half 0x0060  # Tree Idx 132  01100010000  Literal "`"
	.half 0x003f  # Tree Idx 133  01100010001  Literal "?"
	.half 0x0108  # Tree Idx 134  0110001001   Pointer to right child.
	.half 0x0078  # Tree Idx 135  01100010010  Literal "x"
	.half 0x007e  # Tree Idx 136  01100010011  Literal "~"
	.half 0x010d  # Tree Idx 137  011000101    Pointer to right child.
	.half 0x010c  # Tree Idx 138  0110001010   Pointer to right child.
	.half 0x007b  # Tree Idx 139  01100010100  Literal "{"
	.half 0x0040  # Tree Idx 140  01100010101  Literal "@"
	.half 0x010f  # Tree Idx 141  0110001011   Pointer to right child.
	.half 0x007d  # Tree Idx 142  01100010110  Literal "}"
	.half 0x003b  # Tree Idx 143  01100010111  Literal ";"
	.half 0x0118  # Tree Idx 144  01100011     Pointer to right child.
	.half 0x0115  # Tree Idx 145  011000110    Pointer to right child.
	.half 0x0114  # Tree Idx 146  0110001100   Pointer to right child.
	.half 0x004a  # Tree Idx 147  01100011000  Literal "J"
	.half 0x0056  # Tree Idx 148  01100011001  Literal "V"
	.half 0x0117  # Tree Idx 149  0110001101   Pointer to right child.
	.half 0x0045  # Tree Idx 150  01100011010  Literal "E"
	.half 0x005b  # Tree Idx 151  01100011011  Literal "["
	.half 0x011c  # Tree Idx 152  011000111    Pointer to right child.
	.half 0x011b  # Tree Idx 153  0110001110   Pointer to right child.
	.half 0x005e  # Tree Idx 154  01100011100  Literal "^"
	.half 0x002b  # Tree Idx 155  01100011101  Literal "+"
	.half 0x011e  # Tree Idx 156  0110001111   Pointer to right child.
	.half 0x0055  # Tree Idx 157  01100011110  Literal "U"
	.half 0x0039  # Tree Idx 158  01100011111  Literal "9"
	.half 0x0123  # Tree Idx 159  011001       Pointer to right child.
	.half 0x0122  # Tree Idx 160  0110010      Pointer to right child.
	.half 0x7053  # Tree Idx 161  01100100     Dict Idx for "        # $"
	.half 0x002f  # Tree Idx 162  01100101     Literal "/"
	.half 0x012b  # Tree Idx 163  0110011      Pointer to right child.
	.half 0x0128  # Tree Idx 164  01100110     Pointer to right child.
	.half 0x0127  # Tree Idx 165  011001100    Pointer to right child.
	.half 0x71af  # Tree Idx 166  0110011000   Dict Idx for "text"
	.half 0x71a8  # Tree Idx 167  0110011001   Dict Idx for "Return"
	.half 0x012a  # Tree Idx 168  011001101    Pointer to right child.
	.half 0x71b4  # Tree Idx 169  0110011010   Dict Idx for "not"
	.half 0x0052  # Tree Idx 170  0110011011   Literal "R"
	.half 0x705f  # Tree Idx 171  01100111     Dict Idx for "string"
	.half 0x013c  # Tree Idx 172  01101        Pointer to right child.
	.half 0x0135  # Tree Idx 173  011010       Pointer to right child.
	.half 0x0132  # Tree Idx 174  0110100      Pointer to right child.
	.half 0x0131  # Tree Idx 175  01101000     Pointer to right child.
	.half 0x70b6  # Tree Idx 176  011010000    Dict Idx for "examined"
	.half 0x005c  # Tree Idx 177  011010001    Literal "\134"
	.half 0x0134  # Tree Idx 178  01101001     Pointer to right child.
	.half 0x70c5  # Tree Idx 179  011010010    Dict Idx for "histo"
	.half 0x70bf  # Tree Idx 180  011010011    Dict Idx for "being"
	.half 0x0139  # Tree Idx 181  0110101      Pointer to right child.
	.half 0x0138  # Tree Idx 182  01101010     Pointer to right child.
	.half 0x0042  # Tree Idx 183  011010100    Literal "B"
	.half 0x70a4  # Tree Idx 184  011010101    Dict Idx for "Address"
	.half 0x013b  # Tree Idx 185  01101011     Pointer to right child.
	.half 0x70b0  # Tree Idx 186  011010110    Dict Idx for "ULOOP"
	.half 0x70ac  # Tree Idx 187  011010111    Dict Idx for "and"
	.half 0x014c  # Tree Idx 188  011011       Pointer to right child.
	.half 0x0145  # Tree Idx 189  0110110      Pointer to right child.
	.half 0x0142  # Tree Idx 190  01101100     Pointer to right child.
	.half 0x0141  # Tree Idx 191  011011000    Pointer to right child.
	.half 0x003e  # Tree Idx 192  0110110000   Literal ">"
	.half 0x727d  # Tree Idx 193  0110110001   Dict Idx for "Convert"
	.half 0x0144  # Tree Idx 194  011011001    Pointer to right child.
	.half 0x728a  # Tree Idx 195  0110110010   Dict Idx for "doi"
	.half 0x7285  # Tree Idx 196  0110110011   Dict Idx for "used"
	.half 0x0149  # Tree Idx 197  01101101     Pointer to right child.
	.half 0x0148  # Tree Idx 198  011011010    Pointer to right child.
	.half 0x726d  # Tree Idx 199  0110110100   Dict Idx for "Character"
	.half 0x7267  # Tree Idx 200  0110110101   Dict Idx for "UDONE"
	.half 0x014b  # Tree Idx 201  011011011    Pointer to right child.
	.half 0x003d  # Tree Idx 202  0110110110   Literal "="
	.half 0x7277  # Tree Idx 203  0110110111   Dict Idx for "SLOOP"
	.half 0x0150  # Tree Idx 204  0110111      Pointer to right child.
	.half 0x014f  # Tree Idx 205  01101110     Pointer to right child.
	.half 0x0041  # Tree Idx 206  011011100    Literal "A"
	.half 0x70cb  # Tree Idx 207  011011101    Dict Idx for "upper"
	.half 0x0154  # Tree Idx 208  01101111     Pointer to right child.
	.half 0x0153  # Tree Idx 209  011011110    Pointer to right child.
	.half 0x7294  # Tree Idx 210  0110111100   Dict Idx for "means"
	.half 0x728e  # Tree Idx 211  0110111101   Dict Idx for "index"
	.half 0x0158  # Tree Idx 212  011011111    Pointer to right child.
	.half 0x0157  # Tree Idx 213  0110111110   Pointer to right child.
	.half 0x003c  # Tree Idx 214  01101111100  Literal "<"
	.half 0x005d  # Tree Idx 215  01101111101  Literal "]"
	.half 0x729a  # Tree Idx 216  0110111111   Dict Idx for "Register"
	.half 0x0161  # Tree Idx 217  0111         Pointer to right child.
	.half 0x0160  # Tree Idx 218  01110        Pointer to right child.
	.half 0x015d  # Tree Idx 219  011100       Pointer to right child.
	.half 0x0027  # Tree Idx 220  0111000      Literal "'"
	.half 0x015f  # Tree Idx 221  0111001      Pointer to right child.
	.half 0x7050  # Tree Idx 222  01110010     Dict Idx for ": "
	.half 0x0022  # Tree Idx 223  01110011     Literal "\""
	.half 0x002e  # Tree Idx 224  011101       Literal "."
	.half 0x7009  # Tree Idx 225  01111        Dict Idx for " $"
	.half 0x01a2  # Tree Idx 226  1            Pointer to right child.
	.half 0x0179  # Tree Idx 227  10           Pointer to right child.
	.half 0x0176  # Tree Idx 228  100          Pointer to right child.
	.half 0x016d  # Tree Idx 229  1000         Pointer to right child.
	.half 0x016a  # Tree Idx 230  10000        Pointer to right child.
	.half 0x0169  # Tree Idx 231  100000       Pointer to right child.
	.half 0x702b  # Tree Idx 232  1000000      Dict Idx for "ascii"
	.half 0x0068  # Tree Idx 233  1000001      Literal "h"
	.half 0x016c  # Tree Idx 234  100001       Pointer to right child.
	.half 0x0064  # Tree Idx 235  1000010      Literal "d"
	.half 0x0034  # Tree Idx 236  1000011      Literal "4"
	.half 0x0175  # Tree Idx 237  10001        Pointer to right child.
	.half 0x0170  # Tree Idx 238  100010       Pointer to right child.
	.half 0x7028  # Tree Idx 239  1000100      Dict Idx for ":\n"
	.half 0x0172  # Tree Idx 240  1000101      Pointer to right child.
	.half 0x004c  # Tree Idx 241  10001010     Literal "L"
	.half 0x0174  # Tree Idx 242  10001011     Pointer to right child.
	.half 0x0043  # Tree Idx 243  100010110    Literal "C"
	.half 0x708c  # Tree Idx 244  100010111    Dict Idx for "miss"
	.half 0x7013  # Tree Idx 245  100011       Dict Idx for "t1"
	.half 0x0178  # Tree Idx 246  1001         Pointer to right child.
	.half 0x0065  # Tree Idx 247  10010        Literal "e"
	.half 0x0073  # Tree Idx 248  10011        Literal "s"
	.half 0x018f  # Tree Idx 249  101          Pointer to right child.
	.half 0x018e  # Tree Idx 250  1010         Pointer to right child.
	.half 0x017f  # Tree Idx 251  10100        Pointer to right child.
	.half 0x017e  # Tree Idx 252  101000       Pointer to right child.
	.half 0x0032  # Tree Idx 253  1010000      Literal "2"
	.half 0x0075  # Tree Idx 254  1010001      Literal "u"
	.half 0x0187  # Tree Idx 255  101001       Pointer to right child.
	.half 0x0184  # Tree Idx 256  1010010      Pointer to right child.
	.half 0x0183  # Tree Idx 257  10100100     Pointer to right child.
	.half 0x709d  # Tree Idx 258  101001000    Dict Idx for "    # "
	.half 0x7099  # Tree Idx 259  101001001    Dict Idx for "beq"
	.half 0x0186  # Tree Idx 260  10100101     Pointer to right child.
	.half 0x002d  # Tree Idx 261  101001010    Literal "-"
	.half 0x006a  # Tree Idx 262  101001011    Literal "j"
	.half 0x018b  # Tree Idx 263  1010011      Pointer to right child.
	.half 0x018a  # Tree Idx 264  10100110     Pointer to right child.
	.half 0x7091  # Tree Idx 265  101001100    Dict Idx for "nop"
	.half 0x003a  # Tree Idx 266  101001101    Literal ":"
	.half 0x018d  # Tree Idx 267  10100111     Pointer to right child.
	.half 0x0033  # Tree Idx 268  101001110    Literal "3"
	.half 0x7095  # Tree Idx 269  101001111    Dict Idx for "bne"
	.half 0x7000  # Tree Idx 270  10101        Dict Idx for "        "
	.half 0x0197  # Tree Idx 271  1011         Pointer to right child.
	.half 0x0196  # Tree Idx 272  10110        Pointer to right child.
	.half 0x0193  # Tree Idx 273  101100       Pointer to right child.
	.half 0x0063  # Tree Idx 274  1011000      Literal "c"
	.half 0x0195  # Tree Idx 275  1011001      Pointer to right child.
	.half 0x704d  # Tree Idx 276  10110010     Dict Idx for "to"
	.half 0x0076  # Tree Idx 277  10110011     Literal "v"
	.half 0x006c  # Tree Idx 278  101101       Literal "l"
	.half 0x01a1  # Tree Idx 279  10111        Pointer to right child.
	.half 0x019e  # Tree Idx 280  101110       Pointer to right child.
	.half 0x019b  # Tree Idx 281  1011100      Pointer to right child.
	.half 0x704a  # Tree Idx 282  10111000     Dict Idx for "($"
	.half 0x019d  # Tree Idx 283  10111001     Pointer to right child.
	.half 0x707c  # Tree Idx 284  101110010    Dict Idx for "table"
	.half 0x7074  # Tree Idx 285  101110011    Dict Idx for "address"
	.half 0x01a0  # Tree Idx 286  1011101      Pointer to right child.
	.half 0x7043  # Tree Idx 287  10111010     Dict Idx for "the"
	.half 0x7040  # Tree Idx 288  10111011     Dict Idx for "t2"
	.half 0x006f  # Tree Idx 289  101111       Literal "o"
	.half 0x01f6  # Tree Idx 290  11           Pointer to right child.
	.half 0x01d7  # Tree Idx 291  110          Pointer to right child.
	.half 0x01aa  # Tree Idx 292  1100         Pointer to right child.
	.half 0x01a7  # Tree Idx 293  11000        Pointer to right child.
	.half 0x0030  # Tree Idx 294  110000       Literal "0"
	.half 0x01a9  # Tree Idx 295  110001       Pointer to right child.
	.half 0x7020  # Tree Idx 296  1100010      Dict Idx for ".\n"
	.half 0x006d  # Tree Idx 297  1100011      Literal "m"
	.half 0x01ca  # Tree Idx 298  11001        Pointer to right child.
	.half 0x01bb  # Tree Idx 299  110010       Pointer to right child.
	.half 0x01b4  # Tree Idx 300  1100100      Pointer to right child.
	.half 0x01b1  # Tree Idx 301  11001000     Pointer to right child.
	.half 0x01b0  # Tree Idx 302  110010000    Pointer to right child.
	.half 0x713f  # Tree Idx 303  1100100000   Dict Idx for ", -"
	.half 0x0035  # Tree Idx 304  1100100001   Literal "5"
	.half 0x01b3  # Tree Idx 305  110010001    Pointer to right child.
	.half 0x714a  # Tree Idx 306  1100100010   Dict Idx for "        ## "
	.half 0x7143  # Tree Idx 307  1100100011   Dict Idx for "strlen"
	.half 0x01b8  # Tree Idx 308  11001001     Pointer to right child.
	.half 0x01b7  # Tree Idx 309  110010010    Pointer to right child.
	.half 0x7137  # Tree Idx 310  1100100100   Dict Idx for "The"
	.half 0x7132  # Tree Idx 311  1100100101   Dict Idx for "know"
	.half 0x01ba  # Tree Idx 312  110010011    Pointer to right child.
	.half 0x0057  # Tree Idx 313  1100100110   Literal "W"
	.half 0x713b  # Tree Idx 314  1100100111   Dict Idx for "one"
	.half 0x01c3  # Tree Idx 315  1100101      Pointer to right child.
	.half 0x01c0  # Tree Idx 316  11001010     Pointer to right child.
	.half 0x01bf  # Tree Idx 317  110010100    Pointer to right child.
	.half 0x7168  # Tree Idx 318  1100101000   Dict Idx for "element"
	.half 0x7163  # Tree Idx 319  1100101001   Dict Idx for " \"\"\n"
	.half 0x01c2  # Tree Idx 320  110010101    Pointer to right child.
	.half 0x7174  # Tree Idx 321  1100101010   Dict Idx for "next"
	.half 0x7170  # Tree Idx 322  1100101011   Dict Idx for "And"
	.half 0x01c7  # Tree Idx 323  11001011     Pointer to right child.
	.half 0x01c6  # Tree Idx 324  110010110    Pointer to right child.
	.half 0x007a  # Tree Idx 325  1100101100   Literal "z"
	.half 0x7156  # Tree Idx 326  1100101101   Dict Idx for "Load"
	.half 0x01c9  # Tree Idx 327  110010111    Pointer to right child.
	.half 0x715f  # Tree Idx 328  1100101110   Dict Idx for "add"
	.half 0x715b  # Tree Idx 329  1100101111   Dict Idx for "100"
	.half 0x01ce  # Tree Idx 330  110011       Pointer to right child.
	.half 0x01cd  # Tree Idx 331  1100110      Pointer to right child.
	.half 0x0049  # Tree Idx 332  11001100     Literal "I"
	.half 0x0062  # Tree Idx 333  11001101     Literal "b"
	.half 0x01d6  # Tree Idx 334  1100111      Pointer to right child.
	.half 0x01d3  # Tree Idx 335  11001110     Pointer to right child.
	.half 0x01d2  # Tree Idx 336  110011100    Pointer to right child.
	.half 0x70d5  # Tree Idx 337  1100111000   Dict Idx for "################################################################################\n"
	.half 0x70d1  # Tree Idx 338  1100111001   Dict Idx for "## "
	.half 0x01d5  # Tree Idx 339  110011101    Pointer to right child.
	.half 0x712d  # Tree Idx 340  1100111010   Dict Idx for "  # "
	.half 0x7127  # Tree Idx 341  1100111011   Dict Idx for "stars"
	.half 0x7047  # Tree Idx 342  11001111     Dict Idx for "t3"
	.half 0x01f5  # Tree Idx 343  1101         Pointer to right child.
	.half 0x01dc  # Tree Idx 344  11010        Pointer to right child.
	.half 0x01db  # Tree Idx 345  110100       Pointer to right child.
	.half 0x7023  # Tree Idx 346  1101000      Dict Idx for "addi"
	.half 0x0066  # Tree Idx 347  1101001      Literal "f"
	.half 0x01ec  # Tree Idx 348  110101       Pointer to right child.
	.half 0x01e5  # Tree Idx 349  1101010      Pointer to right child.
	.half 0x01e2  # Tree Idx 350  11010100     Pointer to right child.
	.half 0x01e1  # Tree Idx 351  110101000    Pointer to right child.
	.half 0x7188  # Tree Idx 352  1101010000   Dict Idx for "histogram_data"
	.half 0x7183  # Tree Idx 353  1101010001   Dict Idx for "that"
	.half 0x01e4  # Tree Idx 354  110101001    Pointer to right child.
	.half 0x7197  # Tree Idx 355  1101010010   Dict Idx for "jal"
	.half 0x004d  # Tree Idx 356  1101010011   Literal "M"
	.half 0x01e9  # Tree Idx 357  11010101     Pointer to right child.
	.half 0x01e8  # Tree Idx 358  110101010    Pointer to right child.
	.half 0x7179  # Tree Idx 359  1101010100   Dict Idx for "LOOP"
	.half 0x006b  # Tree Idx 360  1101010101   Literal "k"
	.half 0x01eb  # Tree Idx 361  110101011    Pointer to right child.
	.half 0x717e  # Tree Idx 362  1101010110   Dict Idx for "char"
	.half 0x0053  # Tree Idx 363  1101010111   Literal "S"
	.half 0x01f0  # Tree Idx 364  1101011      Pointer to right child.
	.half 0x01ef  # Tree Idx 365  11010110     Pointer to right child.
	.half 0x0028  # Tree Idx 366  110101100    Literal "("
	.half 0x0029  # Tree Idx 367  110101101    Literal ")"
	.half 0x01f4  # Tree Idx 368  11010111     Pointer to right child.
	.half 0x01f3  # Tree Idx 369  110101110    Pointer to right child.
	.half 0x719f  # Tree Idx 370  1101011100   Dict Idx for "..."
	.half 0x719b  # Tree Idx 371  1101011101   Dict Idx for "you"
	.half 0x7082  # Tree Idx 372  110101111    Dict Idx for "character"
	.half 0x000a  # Tree Idx 373  11011        Literal "\n"
	.half 0x0020  # Tree Idx 374  111          Literal " "