The Computer Language
Benchmarks Game

fasta Lisp SBCL #6 program

source code

;; The Computer Language Benchmarks Game
;; http://benchmarksgame.alioth.debian.org/
;;
;; Contributed by Lorenzo Bolla
;; Modified by Jason Miller

(declaim (optimize (speed 3) (debug 0) (safety 0)))

(declaim (fixnum +line-length+ +buffer-size+ +im+))
(defconstant +line-length+ 60)
(defconstant +buffer-size+ 3000)
(defconstant +im+ 139968)


(declaim (simple-base-string *alu*))
(defparameter *alu* (concatenate 'simple-base-string
                                 "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"
                                 "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"
                                 "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"
                                 "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"
                                 "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"
                                 "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"
                                 "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"))

(defun cumsum (lst)
  (let ((c 0.0))
    (declare (type single-float c))
    (declare (type (vector float) lst))
    (map 'vector #'(lambda (x) 
                (declare (type single-float x)
                         (values fixnum))
                (the fixnum (ceiling (the (single-float #.(float most-negative-fixnum) #.(float most-positive-fixnum)) (* +im+ (incf c x))))))
            lst)))

(defun make-cprob (probs)
  (declare (type vector probs))
  (make-array (length probs)
              :element-type 'fixnum
              :initial-contents (cumsum probs)))

(defparameter *amino-acids-syms* "acgtBDHKMNRSVWY")
(defparameter *amino-acids-cprobs* 
  (make-cprob #(0.27 0.12 0.12 0.27 0.02 0.02 0.02 0.02 0.02 0.02 0.02 0.02 0.02 0.02 0.02)))

(defparameter *homo-sapiens-syms* "acgt")
(defparameter *homo-sapiens-cprobs* 
  (make-cprob #(0.3029549426680 0.1979883004921 0.1975473066391 0.3015094502008)))

(let ((r 42)
      (ia 3877)
      (ic 29573))
  (declare (type fixnum r ia ic))
  (defun reset-random () (setf r (the fixnum 42)))
  (declaim (inline next-random))
  (defun next-random ()
    (declare (values fixnum))
    (setf r (mod (+ (the (integer 0 542655936) (* r ia)) ic) +im+))))

(declaim (inline find-amino-acid next-random repeat))
(defun find-amino-acid (amino-acids-syms amino-acids-cprobs p)
  (declare (type (simple-array fixnum (*)) amino-acids-cprobs)
           (type simple-string amino-acids-syms)
           (type fixnum p))
  (let 
    ((i (position-if (lambda (x) (< p x)) amino-acids-cprobs)))
    (if i
      (aref amino-acids-syms i)
      (aref amino-acids-syms (1- (length amino-acids-syms)))))
  )

(declaim (inline output-line flush))
(defun output-line (line &key (start 0) (end nil))
  (write-line line *standard-output* :start start :end end))
(defun flush ()
  (finish-output *standard-output*))

(defun randomize (amino-acids-syms amino-acids-cprobs title n)
  (declare (type fixnum n))
  (declare (type (simple-array fixnum (*)) amino-acids-cprobs))
  (output-line title)
  (loop
    with buf of-type simple-base-string = (make-string +buffer-size+ :element-type 'base-char)
    with i of-type fixnum = 0
    with max-j of-type fixnum = (1- +buffer-size+)
    for j of-type fixnum from 0
    for k of-type fixnum from 0
    while (< i n)
    if (= k +line-length+) do 
    (setf (aref buf j) #\Newline) 
    (setf k -1)
    else do 
    (incf i)
    (setf (aref buf j) 
          (find-amino-acid amino-acids-syms amino-acids-cprobs (next-random)))
    end
    when (= j max-j) do 
    (write-string buf *standard-output*)
    (setf j -1)
    finally 
    (output-line buf :start 0 :end j)
    ;(flush)
    ))

(defun repeat (alu title n)
  (declare (type simple-base-string alu) 
           (type fixnum n))
  (let ((len (length alu))
        (buf (concatenate 'simple-base-string 
                          alu 
                          (subseq alu 0 +line-length+))))
    (declare (type fixnum len) 
             (type simple-base-string buf))
    (output-line title)
    (do* ((pos-start 0 (mod pos-end len))
          (m n (- m bytes))
          (bytes (min n +line-length+) (min m +line-length+))
          (pos-end (+ pos-start bytes) (+ pos-start bytes)))
      ((<= m 0) (flush))
      (declare (type fixnum pos-start pos-end m bytes))
      (output-line buf :start pos-start :end pos-end))))

(defun main (&optional in-n)
  #+sbcl(setq *standard-output*
              (sb-impl::make-fd-stream 1
                                       :output t
                                       :buffering :full
                                       :external-format :ascii))
  (let ((n (or in-n
               (ignore-errors
                 (parse-integer
                   (car
                     (last #+sbcl sb-ext:*posix-argv*
                           #+cmu  extensions:*command-line-strings*
                           #+gcl  si::*command-args*
                           #+clisp nil))))
               1000)))
    (declare (fixnum n))
    (reset-random)
    (repeat *alu* ">ONE Homo sapiens alu" (the fixnum (* n 2)))
    (randomize *amino-acids-syms*
               *amino-acids-cprobs*
               ">TWO IUB ambiguity codes" (the fixnum (* n 3)))
    (randomize *homo-sapiens-syms*
               *homo-sapiens-cprobs*
               ">THREE Homo sapiens frequency" (the fixnum (* n 5)))))


(eval-when (:compile-toplevel :load-toplevel :execute) (require :sb-sprof))
(defun mainp (n)
  (sb-sprof:with-profiling (:loop nil :report :graph)
                           (main n)))
    

notes, command-line, and program output

NOTES:
64-bit Ubuntu quad core
SBCL 1.3.15


Thu, 02 Mar 2017 03:37:32 GMT

MAKE:
cp: 'fasta.sbcl-6.sbcl' and './fasta.sbcl-6.sbcl' are the same file
SBCL built with: /usr/local/bin/sbcl --userinit /dev/null --batch --eval '(load "fasta.sbcl-6.sbcl_compile")'
### START fasta.sbcl-6.sbcl_compile
(handler-bind ((sb-ext:defconstant-uneql      (lambda (c) (abort c))))      (load (compile-file "fasta.sbcl-6.sbcl" ))) (save-lisp-and-die "sbcl.core" :purify t)
### END fasta.sbcl-6.sbcl_compile

; compiling file "/home/dunham/benchmarksgame/bench/fasta/fasta.sbcl-6.sbcl" (written 23 JAN 2013 08:17:26 PM):
; compiling (DECLAIM (OPTIMIZE # ...))
; compiling (DECLAIM (FIXNUM +LINE-LENGTH+ ...))
; compiling (DEFCONSTANT +LINE-LENGTH+ ...)
; compiling (DEFCONSTANT +BUFFER-SIZE+ ...)
; compiling (DEFCONSTANT +IM+ ...)
; compiling (DECLAIM (SIMPLE-BASE-STRING *ALU*))
; compiling (DEFPARAMETER *ALU* ...)
; compiling (DEFUN CUMSUM ...)
; file: /home/dunham/benchmarksgame/bench/fasta/fasta.sbcl-6.sbcl
; in: DEFUN CUMSUM
;     (MAP 'VECTOR
;          #'(LAMBDA (X)
;              (DECLARE (TYPE SINGLE-FLOAT X)
;                       (VALUES FIXNUM))
;              (THE FIXNUM (CEILING (THE # #))))
;          LST)
; --> TRULY-THE SB-KERNEL:%MAP MAP-INTO DO BLOCK LET TAGBODY TAGBODY LET 
; --> FUNCALL SB-C::%FUNCALL LOCALLY AREF 
; ==>
;   (SB-KERNEL:HAIRY-DATA-VECTOR-REF ARRAY SB-INT:INDEX)
; 
; note: unable to
;   avoid runtime dispatch on array element type
; due to type uncertainty:
;   The first argument is a (VECTOR FLOAT), not a SIMPLE-ARRAY.

; compiling (DEFUN MAKE-CPROB ...)
; compiling (DEFPARAMETER *AMINO-ACIDS-SYMS* ...)
; compiling (DEFPARAMETER *AMINO-ACIDS-CPROBS* ...)
; compiling (DEFPARAMETER *HOMO-SAPIENS-SYMS* ...)
; compiling (DEFPARAMETER *HOMO-SAPIENS-CPROBS* ...)
; compiling (LET (# # ...) ...)
; compiling (DECLAIM (INLINE FIND-AMINO-ACID ...))
; compiling (DEFUN FIND-AMINO-ACID ...)
; compiling (DECLAIM (INLINE OUTPUT-LINE ...))
; compiling (DEFUN OUTPUT-LINE ...)
; compiling (DEFUN FLUSH ...)
; compiling (DEFUN RANDOMIZE ...)
; file: /home/dunham/benchmarksgame/bench/fasta/fasta.sbcl-6.sbcl
; in: DEFUN RANDOMIZE
;     (DEFUN RANDOMIZE (AMINO-ACIDS-SYMS AMINO-ACIDS-CPROBS TITLE N)
;       (DECLARE (TYPE FIXNUM N))
;       (DECLARE (TYPE (SIMPLE-ARRAY FIXNUM (*)) AMINO-ACIDS-CPROBS))
;       (OUTPUT-LINE TITLE)
;       (LOOP WITH BUF OF-TYPE SIMPLE-BASE-STRING = (MAKE-STRING +BUFFER-SIZE+
;                                                                :ELEMENT-TYPE
;                                                                'BASE-CHAR)
;             WITH I OF-TYPE FIXNUM = ...))
; --> PROGN 
; ==>
;   (SB-IMPL::%DEFUN 'RANDOMIZE
;                    (SB-INT:NAMED-LAMBDA RANDOMIZE
;                        (AMINO-ACIDS-SYMS AMINO-ACIDS-CPROBS TITLE N)
;                      (DECLARE (TYPE FIXNUM N))
;                      (DECLARE (TYPE (SIMPLE-ARRAY FIXNUM #) AMINO-ACIDS-CPROBS))
;                      (BLOCK RANDOMIZE
;                        (OUTPUT-LINE TITLE)
;                        (LOOP WITH BUF OF-TYPE SIMPLE-BASE-STRING = (MAKE-STRING
;                                                                     +BUFFER-SIZE+
;                                                                     :ELEMENT-TYPE
;                                                                     'BASE-CHAR)
;                              WITH I OF-TYPE FIXNUM = ...)))
;                    (SB-C:SOURCE-LOCATION))
; 
; caught STYLE-WARNING:
;   Call to COMMON-LISP-USER::NEXT-RANDOM could not be inlined because its source
;   code was not saved. A global INLINE or SB-EXT:MAYBE-INLINE proclamation must be
;   in effect to save function definitions for inlining.

; compiling (DEFUN REPEAT ...)
; compiling (DEFUN MAIN ...)
; compiling (REQUIRE :SB-SPROF)
; compiling (DEFUN MAINP ...); 
; compilation unit finished
;   caught 1 STYLE-WARNING condition
;   printed 1 note


; /home/dunham/benchmarksgame_quadcore/fasta/tmp/fasta.sbcl-6.fasl written
; compilation finished in 0:00:00.167
653+15448+28677+18376 objects... ### START fasta.sbcl-6.sbcl_run
(main) (quit)
### END fasta.sbcl-6.sbcl_run

3.93s to complete and log all make actions

COMMAND LINE:
/usr/local/bin/sbcl --dynamic-space-size 500 --noinform --core sbcl.core --userinit /dev/null --load fasta.sbcl-6.sbcl_run 25000000

(TRUNCATED) PROGRAM OUTPUT:
>ONE Homo sapiens alu
GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA
TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT
AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG
GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG
CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT
GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA
GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA
TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG
AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA
GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT
AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC
AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG
GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC
CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG
AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT
TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA
TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT
GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG
TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT
CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG
CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG
TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA
CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG
AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG
GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC
TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA
TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA
GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT
GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC
ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT
TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC
CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG
CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG
GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC
CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT
GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC
GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA
GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA
GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA
GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG
AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT
CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA
GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA
AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC
GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT
ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG
GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC
GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC
GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG
TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA
AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG
GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT
CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC
TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG
ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC
GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA
ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA
CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA
CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA
ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG
CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG
AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC
CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG
AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC
CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG
CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG
CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG
CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC
ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA
AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC
TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC
ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG
CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG
AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT
AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA
TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC
CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA
TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG
CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT
GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG
GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG
CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG
GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG
GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT
AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT
GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT
CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG
GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC
TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT
CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG
ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG
CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG
AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA
CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG
CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC
ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC
GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC
GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG
GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT
TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG
CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA
GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG
CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC
GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG
CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA
CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG
CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA
ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC
CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT
GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA
AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG
ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC
TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA
GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC
GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG
TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC
AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA
ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA
GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC
AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG
TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC
CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT
GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC
CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA
GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT
TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC
ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC
TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG
GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG
TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG
GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC
GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT
ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC
GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC
GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC
CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA
ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG
AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC
TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT
CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG
TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG
CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC
GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT
GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC
CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC
TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG
CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG
AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG
AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG
AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT
GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA
TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC
AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA
AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG
CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC
TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG
GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT
CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG
CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG
GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA
AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA
GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC
TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC
CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA
GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG
CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG
AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG
ACAGAGCGAGACTCCGTCTCAAAAAGGCCGG